tx · FAcuWN4zZqsFxRYUBkQMgDxUiWkg31AQizBiP6VJEAWo

3P2KBLgyKAWUA8zCefafHK3HxLQB7ammDfS:  -0.01000000 Waves

2021.11.24 16:00 [2870182] smart account 3P2KBLgyKAWUA8zCefafHK3HxLQB7ammDfS > SELF 0.00000000 Waves

{ "type": 13, "id": "FAcuWN4zZqsFxRYUBkQMgDxUiWkg31AQizBiP6VJEAWo", "fee": 1000000, "feeAssetId": null, "timestamp": 1637758834073, "version": 2, "chainId": 87, "sender": "3P2KBLgyKAWUA8zCefafHK3HxLQB7ammDfS", "senderPublicKey": "AQM5JR46VkucVkx5RVXDtku22Yf6j1v16ekWmdXYyXMT", "proofs": [ "4w8TjjueKzHEpRT8cA5xbLYrWprnntPK9e7M36Sj4PJUkGv9c6v7BH6ubexamAKuTJtKfmj1gLWv9Kb4CqA3BQP1" ], "script": "base64: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c3N1ZXIFAAAAA25pbAkAAAIAAAABAgAAAAxEaXJ0eSBoYWNrZXIAAAABaQEAAAAPcmVsZWFzZU9uTmF0aXZlAAAAAQAAAAR0eElkBAAAAAxhc3NldFR4SWRLZXkJAQAAAAxrZXlBc3NldFR4SWQAAAABBQAAAAR0eElkBAAAAAl0eElkU3RhdGUJAQAAAAxrZXlTdGF0ZVR4SWQAAAABBQAAAAR0eElkBAAAAAdhc3NldElkCQEAAAAMZ2V0RGF0YUJ5S2V5AAAAAQUAAAAMYXNzZXRUeElkS2V5BAAAAA5kZXN0aW5hdGlvbktleQkBAAAACmtleURlc3RORlQAAAABBQAAAAdhc3NldElkBAAAAA1vdGhlclN0YXRlS2V5CQEAAAALa2V5U3RhdGVORlQAAAABBQAAAAdhc3NldElkBAAAAAVzdGF0ZQkBAAAADGdldERhdGFCeUtleQAAAAEFAAAACXR4SWRTdGF0ZQMJAAAAAAAAAgUAAAAFc3RhdGUCAAAABkxPR0dFRAQAAAALZGVzdGluYXRpb24JAQAAAAxnZXREYXRhQnlLZXkAAAABBQAAAA5kZXN0aW5hdGlvbktleQQAAAAOcmVjZWl2ZU5GVEFkZHkJAQAAAAdBZGRyZXNzAAAAAQkAAlkAAAABBQAAAAtkZXN0aW5hdGlvbgQAAAAJbmF0aXZlS2V5CQEAAAAMa2V5TmF0aXZlTkZUAAAAAQUAAAAHYXNzZXRJZAQAAAAEZGF0YQkBAAAADGdldE9yTWludE5GVAAAAAEFAAAAB2Fzc2V0SWQEAAAABW5mdElkCAUAAAAEZGF0YQAAAAJfMQQAAAAIbWludERhdGEIBQAAAARkYXRhAAAAAl8yBAAAAAhvdGhlcktleQkBAAAAC2tleU90aGVyTkZUAAAAAQUAAAAFbmZ0SWQEAAAAFG5hdGl2ZURlc3RpbmF0aW9uS2V5CQEAAAAKa2V5RGVzdE5GVAAAAAEFAAAABW5mdElkBAAAABFuYXRpdmVTdGF0ZUtleU5GVAkBAAAAC2tleVN0YXRlTkZUAAAAAQUAAAAFbmZ0SWQDCQAAAAAAAAIFAAAABHRoaXMIBQAAAAFpAAAABmNhbGxlcgkABE4AAAACCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIFAAAACG90aGVyS2V5BQAAAAdhc3NldElkCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIFAAAACW5hdGl2ZUtleQUAAAAFbmZ0SWQJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgUAAAAUbmF0aXZlRGVzdGluYXRpb25LZXkFAAAAC2Rlc3RpbmF0aW9uCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIFAAAAEW5hdGl2ZVN0YXRlS2V5TkZUAgAAAAlDT01QTEVURUQJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgUAAAANb3RoZXJTdGF0ZUtleQIAAAAJQ09NUExFVEVECQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIFAAAACXR4SWRTdGF0ZQIAAAAJQ09NUExFVEVECQAETAAAAAIJAQAAAA5TY3JpcHRUcmFuc2ZlcgAAAAMFAAAADnJlY2VpdmVORlRBZGR5AAAAAAAAAAABCQACWQAAAAEFAAAABW5mdElkBQAAAANuaWwFAAAACG1pbnREYXRhCQAETgAAAAIJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgUAAAAIb3RoZXJLZXkFAAAAB2Fzc2V0SWQJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgUAAAAJbmF0aXZlS2V5BQAAAAVuZnRJZAkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACBQAAABRuYXRpdmVEZXN0aW5hdGlvbktleQUAAAALZGVzdGluYXRpb24JAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgUAAAARbmF0aXZlU3RhdGVLZXlORlQCAAAACUNPTVBMRVRFRAkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACBQAAAA1vdGhlclN0YXRlS2V5AgAAAAlDT01QTEVURUQJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgUAAAAJdHhJZFN0YXRlAgAAAAlDT01QTEVURUQJAARMAAAAAgkBAAAADlNjcmlwdFRyYW5zZmVyAAAAAwUAAAAOcmVjZWl2ZU5GVEFkZHkAAAAAAAAAAAEJAAJZAAAAAQUAAAAFbmZ0SWQJAARMAAAAAgkBAAAADlNjcmlwdFRyYW5zZmVyAAAAAwgFAAAAAWkAAAAGY2FsbGVyAAAAAAABMS0ABQAAAAR1bml0BQAAAANuaWwFAAAACG1pbnREYXRhCQAAAgAAAAECAAAAIVRyYW5zYWN0aW9uIGlzIGFscmVhZHkgcHJvY2Vzc2VkIQAAAAFpAQAAAAtzZW5kVG9PdGhlcgAAAAEAAAALZGVzdGluYXRpb24EAAAAA3BtdAkBAAAABXZhbHVlAAAAAQkAAZEAAAACCAUAAAABaQAAAAhwYXltZW50cwAAAAAAAAAAAAMJAQAAAAEhAAAAAQkBAAAACWlzRGVmaW5lZAAAAAEIBQAAAANwbXQAAAAHYXNzZXRJZAkAAAIAAAABAgAAABVJdCBuZWVkcyB0byBiZSBhbiBORlQEAAAACHN0YXRlS2V5CQEAAAALa2V5U3RhdGVORlQAAAABCQEAAAAPYXNzZXRJZFRvU3RyaW5nAAAAAQgFAAAAA3BtdAAAAAdhc3NldElkBAAAAA5kZXN0aW5hdGlvbktleQkBAAAAEWtleURlc3RpbmF0aW9uTkZUAAAAAgkBAAAAD2Fzc2V0SWRUb1N0cmluZwAAAAEIBQAAAANwbXQAAAAHYXNzZXRJZAUAAAAGaGVpZ2h0CQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIFAAAACHN0YXRlS2V5AgAAAA1TRU5ELVRPLU9USEVSCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIFAAAADmRlc3RpbmF0aW9uS2V5BQAAAAtkZXN0aW5hdGlvbgUAAAADbmlsAAAAAWkBAAAAGlN0b3JlRGF0YUZpbmlzaFNlbmRUb090aGVyAAAABAAAAAR0eElkAAAABm1pbnRJZAAAAAVuZnRJZAAAAApuZnRJZE90aGVyAwkAAAAAAAACCAUAAAABaQAAAAZjYWxsZXIFAAAABHRoaXMEAAAACXR4SWRTdGF0ZQkBAAAADGtleVN0YXRlVHhJZAAAAAEFAAAABHR4SWQEAAAACHN0YXRlS2V5CQABLAAAAAIFAAAABW5mdElkAgAAAAZfc3RhdGUEAAAABXN0YXRlCQAEHQAAAAIFAAAABHRoaXMFAAAACXR4SWRTdGF0ZQMJAQAAAAlpc0RlZmluZWQAAAABBQAAAAVzdGF0ZQQAAAAFdG5LZXkJAQAAAAtrZXlPdGhlck5GVAAAAAEFAAAABW5mdElkBAAAAAdsaW5rS2V5CQEAAAAMa2V5TmF0aXZlTkZUAAAAAQUAAAAKbmZ0SWRPdGhlcgQAAAAJbWludElkS2V5CQABLAAAAAIFAAAABW5mdElkAgAAAAdfbWludElkCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIFAAAACHN0YXRlS2V5AgAAAAlDT01QTEVURUQJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgUAAAAJdHhJZFN0YXRlAgAAAAlDT01QTEVURUQJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgUAAAAFdG5LZXkFAAAACm5mdElkT3RoZXIJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgUAAAAHbGlua0tleQUAAAAFbmZ0SWQJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgUAAAAJbWludElkS2V5BQAAAAZtaW50SWQFAAAAA25pbAkAAAIAAAABAgAAACVXZSBjYW4ndCB1cGRhdGUgYSBub24tZXhpc3Rpbmcgc3RhdGUhCQAAAgAAAAECAAAADURpcnR5IGhhY2tlciEAAAAAi3ulSA==", "height": 2870182, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: Hb3dc9kxC9aCviHPVW61Y53QVuVacc2KzBscm2RDELDL Next: Bh5xwdo9GDqDN6smLNksuL2gv2oeDTwgAw7DwPTDpbTo Diff:
OldNewDifferences
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 func keyStateNFT (assetId) = (assetId + "_state")
5+
6+
7+func keyStateTxId (txId) = (txId + "_state")
8+
9+
10+func keyAssetTxId (txId) = (txId + "_asset")
511
612
713 func keyDestNFT (assetId) = (assetId + "_dest")
4854
4955
5056 @Callable(i)
57+func storeDataSendToNative (txId,destination,description,name,assetId,issuer) = if ((i.caller == this))
58+ then {
59+ let stateKey = keyStateNFT(assetId)
60+ let stateKeyTx = keyStateTxId(txId)
61+ let state = getString(this, stateKey)
62+ let destinationKey = keyDestNFT(assetId)
63+ let descKey = keyDescNFT(assetId)
64+ let nameKey = keyNameNFT(assetId)
65+ let issuerKey = keyIssueNFT(assetId)
66+ if (isDefined(state))
67+ then if ((getStringValue(this, stateKeyTx) == "COMPLETED"))
68+ then [StringEntry(destinationKey, destination), StringEntry(descKey, description), StringEntry(nameKey, name), StringEntry(stateKey, "LOGGED"), StringEntry(stateKeyTx, "LOGGED"), StringEntry(issuerKey, issuer)]
69+ else throw(("Don't you dare to temper with data! " + getStringValue(this, stateKey)))
70+ else [StringEntry(destinationKey, destination), StringEntry(descKey, description), StringEntry(nameKey, name), StringEntry(stateKey, "LOGGED"), StringEntry(issuerKey, issuer)]
71+ }
72+ else throw("Dirty hacker")
73+
74+
75+
76+@Callable(i)
77+func releaseOnNative (txId) = {
78+ let assetTxIdKey = keyAssetTxId(txId)
79+ let txIdState = keyStateTxId(txId)
80+ let assetId = getDataByKey(assetTxIdKey)
81+ let destinationKey = keyDestNFT(assetId)
82+ let otherStateKey = keyStateNFT(assetId)
83+ let state = getDataByKey(txIdState)
84+ if ((state == "LOGGED"))
85+ then {
86+ let destination = getDataByKey(destinationKey)
87+ let receiveNFTAddy = Address(fromBase58String(destination))
88+ let nativeKey = keyNativeNFT(assetId)
89+ let data = getOrMintNFT(assetId)
90+ let nftId = data._1
91+ let mintData = data._2
92+ let otherKey = keyOtherNFT(nftId)
93+ let nativeDestinationKey = keyDestNFT(nftId)
94+ let nativeStateKeyNFT = keyStateNFT(nftId)
95+ if ((this == i.caller))
96+ then ([StringEntry(otherKey, assetId), StringEntry(nativeKey, nftId), StringEntry(nativeDestinationKey, destination), StringEntry(nativeStateKeyNFT, "COMPLETED"), StringEntry(otherStateKey, "COMPLETED"), StringEntry(txIdState, "COMPLETED"), ScriptTransfer(receiveNFTAddy, 1, fromBase58String(nftId))] ++ mintData)
97+ else ([StringEntry(otherKey, assetId), StringEntry(nativeKey, nftId), StringEntry(nativeDestinationKey, destination), StringEntry(nativeStateKeyNFT, "COMPLETED"), StringEntry(otherStateKey, "COMPLETED"), StringEntry(txIdState, "COMPLETED"), ScriptTransfer(receiveNFTAddy, 1, fromBase58String(nftId)), ScriptTransfer(i.caller, 20000000, unit)] ++ mintData)
98+ }
99+ else throw("Transaction is already processed!")
100+ }
101+
102+
103+
104+@Callable(i)
51105 func sendToOther (destination) = {
52106 let pmt = value(i.payments[0])
53107 if (!(isDefined(pmt.assetId)))
62116
63117
64118 @Callable(i)
65-func releaseOnNative (assetId) = {
66- let destinationKey = keyDestNFT(assetId)
67- let otherStateKey = keyStateNFT(assetId)
68- let state = getDataByKey(otherStateKey)
69- if ((state == "LOGGED"))
70- then {
71- let destination = getDataByKey(destinationKey)
72- let receiveNFTAddy = Address(fromBase58String(destination))
73- let nativeKey = keyNativeNFT(assetId)
74- let data = getOrMintNFT(assetId)
75- let nftId = data._1
76- let mintData = data._2
77- let otherKey = keyOtherNFT(nftId)
78- let nativeDestinationKey = keyDestNFT(nftId)
79- let nativeStateKeyNFT = keyStateNFT(nftId)
80- if ((this == i.caller))
81- then ([StringEntry(otherKey, assetId), StringEntry(nativeKey, nftId), StringEntry(nativeDestinationKey, destination), StringEntry(nativeStateKeyNFT, "COMPLETED"), StringEntry(otherStateKey, "COMPLETED"), ScriptTransfer(receiveNFTAddy, 1, fromBase58String(nftId))] ++ mintData)
82- else ([StringEntry(otherKey, assetId), StringEntry(nativeKey, nftId), StringEntry(nativeDestinationKey, destination), StringEntry(nativeStateKeyNFT, "COMPLETED"), StringEntry(otherStateKey, "COMPLETED"), ScriptTransfer(receiveNFTAddy, 1, fromBase58String(nftId)), ScriptTransfer(i.caller, 20000000, unit)] ++ mintData)
83- }
84- else throw("Transaction is already processed!")
85- }
86-
87-
88-
89-@Callable(i)
90-func StoreDataFinishSendToOther (depositId,mintId,nftId,nftIdOther) = if ((i.caller == this))
119+func StoreDataFinishSendToOther (txId,mintId,nftId,nftIdOther) = if ((i.caller == this))
91120 then {
121+ let txIdState = keyStateTxId(txId)
92122 let stateKey = (nftId + "_state")
93- let state = getString(this, stateKey)
123+ let state = getString(this, txIdState)
94124 if (isDefined(state))
95125 then {
96126 let tnKey = keyOtherNFT(nftId)
97127 let linkKey = keyNativeNFT(nftIdOther)
98- let depositIdKey = (nftId + "_depositId")
99128 let mintIdKey = (nftId + "_mintId")
100-[StringEntry(stateKey, "COMPLETED"), StringEntry(tnKey, nftIdOther), StringEntry(linkKey, nftId), StringEntry(depositIdKey, depositId), StringEntry(mintIdKey, mintId)]
129+[StringEntry(stateKey, "COMPLETED"), StringEntry(txIdState, "COMPLETED"), StringEntry(tnKey, nftIdOther), StringEntry(linkKey, nftId), StringEntry(mintIdKey, mintId)]
101130 }
102131 else throw("We can't update a non-existing state!")
103132 }
104133 else throw("Dirty hacker!")
105134
106135
107-
108-@Callable(i)
109-func storeDataSendToNative (destination,description,name,assetId,issuer) = if ((i.caller == this))
110- then {
111- let stateKey = keyStateNFT(assetId)
112- let state = getString(this, stateKey)
113- let destinationKey = keyDestNFT(assetId)
114- let descKey = keyDescNFT(assetId)
115- let nameKey = keyNameNFT(assetId)
116- let issuerKey = keyIssueNFT(assetId)
117- if (isDefined(state))
118- then if ((getStringValue(this, stateKey) == "COMPLETED"))
119- then [StringEntry(destinationKey, destination), StringEntry(descKey, description), StringEntry(nameKey, name), StringEntry(stateKey, "LOGGED"), StringEntry(issuerKey, issuer)]
120- else throw(("Don't you dare to temper with data! " + getStringValue(this, stateKey)))
121- else [StringEntry(destinationKey, destination), StringEntry(descKey, description), StringEntry(nameKey, name), StringEntry(stateKey, "LOGGED"), StringEntry(issuerKey, issuer)]
122- }
123- else throw("Dirty hacker")
124-
125-
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 5 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 func keyStateNFT (assetId) = (assetId + "_state")
5+
6+
7+func keyStateTxId (txId) = (txId + "_state")
8+
9+
10+func keyAssetTxId (txId) = (txId + "_asset")
511
612
713 func keyDestNFT (assetId) = (assetId + "_dest")
814
915
1016 func keyDescNFT (assetId) = (assetId + "_descr")
1117
1218
1319 func keyNameNFT (assetId) = (assetId + "_name")
1420
1521
1622 func keyIssueNFT (assetId) = (assetId + "_issuer")
1723
1824
1925 func keyOtherNFT (assetId) = (assetId + "_idOther")
2026
2127
2228 func keyNativeNFT (assetId) = (assetId + "_idNative")
2329
2430
2531 func getDataByKey (stateKey) = valueOrErrorMessage(getString(this, stateKey), "The assetId seems invalid!")
2632
2733
2834 func assetIdToString (assetId) = toBase58String(value(assetId))
2935
3036
3137 func keyDestinationNFT (assetId,height) = ((assetId + "_") + toString(height))
3238
3339
3440 func getOrMintNFT (assetId) = {
3541 let nativeKey = keyNativeNFT(assetId)
3642 let descKey = keyDescNFT(assetId)
3743 let nameKey = keyNameNFT(assetId)
3844 let description = getDataByKey(descKey)
3945 let name = getDataByKey(nameKey)
4046 if (isDefined(getString(this, nativeKey)))
4147 then $Tuple2(getStringValue(this, nativeKey), nil)
4248 else {
4349 let issueNFT = Issue(name, description, 1, 0, false)
4450 let idNFT = calculateAssetId(issueNFT)
4551 $Tuple2(toBase58String(idNFT), [issueNFT])
4652 }
4753 }
4854
4955
5056 @Callable(i)
57+func storeDataSendToNative (txId,destination,description,name,assetId,issuer) = if ((i.caller == this))
58+ then {
59+ let stateKey = keyStateNFT(assetId)
60+ let stateKeyTx = keyStateTxId(txId)
61+ let state = getString(this, stateKey)
62+ let destinationKey = keyDestNFT(assetId)
63+ let descKey = keyDescNFT(assetId)
64+ let nameKey = keyNameNFT(assetId)
65+ let issuerKey = keyIssueNFT(assetId)
66+ if (isDefined(state))
67+ then if ((getStringValue(this, stateKeyTx) == "COMPLETED"))
68+ then [StringEntry(destinationKey, destination), StringEntry(descKey, description), StringEntry(nameKey, name), StringEntry(stateKey, "LOGGED"), StringEntry(stateKeyTx, "LOGGED"), StringEntry(issuerKey, issuer)]
69+ else throw(("Don't you dare to temper with data! " + getStringValue(this, stateKey)))
70+ else [StringEntry(destinationKey, destination), StringEntry(descKey, description), StringEntry(nameKey, name), StringEntry(stateKey, "LOGGED"), StringEntry(issuerKey, issuer)]
71+ }
72+ else throw("Dirty hacker")
73+
74+
75+
76+@Callable(i)
77+func releaseOnNative (txId) = {
78+ let assetTxIdKey = keyAssetTxId(txId)
79+ let txIdState = keyStateTxId(txId)
80+ let assetId = getDataByKey(assetTxIdKey)
81+ let destinationKey = keyDestNFT(assetId)
82+ let otherStateKey = keyStateNFT(assetId)
83+ let state = getDataByKey(txIdState)
84+ if ((state == "LOGGED"))
85+ then {
86+ let destination = getDataByKey(destinationKey)
87+ let receiveNFTAddy = Address(fromBase58String(destination))
88+ let nativeKey = keyNativeNFT(assetId)
89+ let data = getOrMintNFT(assetId)
90+ let nftId = data._1
91+ let mintData = data._2
92+ let otherKey = keyOtherNFT(nftId)
93+ let nativeDestinationKey = keyDestNFT(nftId)
94+ let nativeStateKeyNFT = keyStateNFT(nftId)
95+ if ((this == i.caller))
96+ then ([StringEntry(otherKey, assetId), StringEntry(nativeKey, nftId), StringEntry(nativeDestinationKey, destination), StringEntry(nativeStateKeyNFT, "COMPLETED"), StringEntry(otherStateKey, "COMPLETED"), StringEntry(txIdState, "COMPLETED"), ScriptTransfer(receiveNFTAddy, 1, fromBase58String(nftId))] ++ mintData)
97+ else ([StringEntry(otherKey, assetId), StringEntry(nativeKey, nftId), StringEntry(nativeDestinationKey, destination), StringEntry(nativeStateKeyNFT, "COMPLETED"), StringEntry(otherStateKey, "COMPLETED"), StringEntry(txIdState, "COMPLETED"), ScriptTransfer(receiveNFTAddy, 1, fromBase58String(nftId)), ScriptTransfer(i.caller, 20000000, unit)] ++ mintData)
98+ }
99+ else throw("Transaction is already processed!")
100+ }
101+
102+
103+
104+@Callable(i)
51105 func sendToOther (destination) = {
52106 let pmt = value(i.payments[0])
53107 if (!(isDefined(pmt.assetId)))
54108 then throw("It needs to be an NFT")
55109 else {
56110 let stateKey = keyStateNFT(assetIdToString(pmt.assetId))
57111 let destinationKey = keyDestinationNFT(assetIdToString(pmt.assetId), height)
58112 [StringEntry(stateKey, "SEND-TO-OTHER"), StringEntry(destinationKey, destination)]
59113 }
60114 }
61115
62116
63117
64118 @Callable(i)
65-func releaseOnNative (assetId) = {
66- let destinationKey = keyDestNFT(assetId)
67- let otherStateKey = keyStateNFT(assetId)
68- let state = getDataByKey(otherStateKey)
69- if ((state == "LOGGED"))
70- then {
71- let destination = getDataByKey(destinationKey)
72- let receiveNFTAddy = Address(fromBase58String(destination))
73- let nativeKey = keyNativeNFT(assetId)
74- let data = getOrMintNFT(assetId)
75- let nftId = data._1
76- let mintData = data._2
77- let otherKey = keyOtherNFT(nftId)
78- let nativeDestinationKey = keyDestNFT(nftId)
79- let nativeStateKeyNFT = keyStateNFT(nftId)
80- if ((this == i.caller))
81- then ([StringEntry(otherKey, assetId), StringEntry(nativeKey, nftId), StringEntry(nativeDestinationKey, destination), StringEntry(nativeStateKeyNFT, "COMPLETED"), StringEntry(otherStateKey, "COMPLETED"), ScriptTransfer(receiveNFTAddy, 1, fromBase58String(nftId))] ++ mintData)
82- else ([StringEntry(otherKey, assetId), StringEntry(nativeKey, nftId), StringEntry(nativeDestinationKey, destination), StringEntry(nativeStateKeyNFT, "COMPLETED"), StringEntry(otherStateKey, "COMPLETED"), ScriptTransfer(receiveNFTAddy, 1, fromBase58String(nftId)), ScriptTransfer(i.caller, 20000000, unit)] ++ mintData)
83- }
84- else throw("Transaction is already processed!")
85- }
86-
87-
88-
89-@Callable(i)
90-func StoreDataFinishSendToOther (depositId,mintId,nftId,nftIdOther) = if ((i.caller == this))
119+func StoreDataFinishSendToOther (txId,mintId,nftId,nftIdOther) = if ((i.caller == this))
91120 then {
121+ let txIdState = keyStateTxId(txId)
92122 let stateKey = (nftId + "_state")
93- let state = getString(this, stateKey)
123+ let state = getString(this, txIdState)
94124 if (isDefined(state))
95125 then {
96126 let tnKey = keyOtherNFT(nftId)
97127 let linkKey = keyNativeNFT(nftIdOther)
98- let depositIdKey = (nftId + "_depositId")
99128 let mintIdKey = (nftId + "_mintId")
100-[StringEntry(stateKey, "COMPLETED"), StringEntry(tnKey, nftIdOther), StringEntry(linkKey, nftId), StringEntry(depositIdKey, depositId), StringEntry(mintIdKey, mintId)]
129+[StringEntry(stateKey, "COMPLETED"), StringEntry(txIdState, "COMPLETED"), StringEntry(tnKey, nftIdOther), StringEntry(linkKey, nftId), StringEntry(mintIdKey, mintId)]
101130 }
102131 else throw("We can't update a non-existing state!")
103132 }
104133 else throw("Dirty hacker!")
105134
106135
107-
108-@Callable(i)
109-func storeDataSendToNative (destination,description,name,assetId,issuer) = if ((i.caller == this))
110- then {
111- let stateKey = keyStateNFT(assetId)
112- let state = getString(this, stateKey)
113- let destinationKey = keyDestNFT(assetId)
114- let descKey = keyDescNFT(assetId)
115- let nameKey = keyNameNFT(assetId)
116- let issuerKey = keyIssueNFT(assetId)
117- if (isDefined(state))
118- then if ((getStringValue(this, stateKey) == "COMPLETED"))
119- then [StringEntry(destinationKey, destination), StringEntry(descKey, description), StringEntry(nameKey, name), StringEntry(stateKey, "LOGGED"), StringEntry(issuerKey, issuer)]
120- else throw(("Don't you dare to temper with data! " + getStringValue(this, stateKey)))
121- else [StringEntry(destinationKey, destination), StringEntry(descKey, description), StringEntry(nameKey, name), StringEntry(stateKey, "LOGGED"), StringEntry(issuerKey, issuer)]
122- }
123- else throw("Dirty hacker")
124-
125-

github/deemru/w8io/3ef1775 
41.24 ms