@stellar-expert/tx-meta-effects-parser 7.0.0-rc.10 → 7.0.0-rc.11

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@stellar-expert/tx-meta-effects-parser",
3
- "version": "7.0.0-rc.10",
3
+ "version": "7.0.0-rc.11",
4
4
  "description": "Low-level effects parser for Stellar transaction results and meta XDR",
5
5
  "main": "src/index.js",
6
6
  "scripts": {
@@ -929,39 +929,41 @@ class EffectsAnalyzer {
929
929
  processInstanceDataChanges(before, after, restored) {
930
930
  const storageBefore = before?.storage || []
931
931
  const storageAfter = [...(after?.storage || [])]
932
- for (const {key, val} of storageBefore) {
933
- let newVal
934
- for (let i = 0; i < storageAfter.length; i++) {
935
- const afterValue = storageAfter[i]
936
- if (afterValue.key === key) {
937
- newVal = afterValue.val //update new value
938
- storageAfter.splice(i, 1) //remove from array to simplify iteration
939
- break
932
+ if (!restored) {
933
+ for (const {key, val} of storageBefore) {
934
+ let newVal
935
+ for (let i = 0; i < storageAfter.length; i++) {
936
+ const afterValue = storageAfter[i]
937
+ if (afterValue.key === key) {
938
+ newVal = afterValue.val //update new value
939
+ storageAfter.splice(i, 1) //remove from array to simplify iteration
940
+ break
941
+ }
940
942
  }
941
- }
942
- if (newVal === undefined) { //removed
943
+ if (newVal === undefined) { //removed
944
+ const effect = {
945
+ type: effectTypes.contractDataRemoved,
946
+ owner: after?.owner || before.owner,
947
+ key,
948
+ prevValue: val,
949
+ durability: 'instance'
950
+ }
951
+ this.addEffect(effect)
952
+ continue
953
+ }
954
+ if (val === newVal) //value has not changed
955
+ continue
956
+
943
957
  const effect = {
944
- type: effectTypes.contractDataRemoved,
958
+ type: effectTypes.contractDataUpdated,
945
959
  owner: after?.owner || before.owner,
946
960
  key,
961
+ value: newVal,
947
962
  prevValue: val,
948
963
  durability: 'instance'
949
964
  }
950
965
  this.addEffect(effect)
951
- continue
952
966
  }
953
- if (val === newVal) //value has not changed
954
- continue
955
-
956
- const effect = {
957
- type: effectTypes.contractDataUpdated,
958
- owner: after?.owner || before.owner,
959
- key,
960
- value: newVal,
961
- prevValue: val,
962
- durability: 'instance'
963
- }
964
- this.addEffect(effect)
965
967
  }
966
968
  //iterate all storage items left
967
969
  for (const {key, val} of storageAfter) {
@@ -41,12 +41,16 @@ function parseLedgerEntryChanges(ledgerEntryChanges) {
41
41
  case 'updated':
42
42
  if (type === 'contractCode')
43
43
  throw new UnexpectedTxMetaChangeError({type, action})
44
+ if (!state && stateData.keyHash) { //likely, restored state
45
+ const restored = changes.find(ch => ch.action === 'restored' && ch.type === stateData.entry && ch.after.keyHash === stateData.keyHash)
46
+ state = restored?.after
47
+ }
44
48
  change.before = state
45
49
  change.after = stateData
46
50
  change.type = stateData.entry
47
51
  break
48
52
  case 'restored':
49
- change.before = state
53
+ change.before = stateData
50
54
  change.after = stateData
51
55
  change.type = stateData.entry
52
56
  break