@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
package/src/effects-analyzer.js
CHANGED
|
@@ -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
|
-
|
|
933
|
-
|
|
934
|
-
|
|
935
|
-
|
|
936
|
-
|
|
937
|
-
|
|
938
|
-
|
|
939
|
-
|
|
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
|
-
|
|
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.
|
|
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 =
|
|
53
|
+
change.before = stateData
|
|
50
54
|
change.after = stateData
|
|
51
55
|
change.type = stateData.entry
|
|
52
56
|
break
|