tx · EZm6NPUM4NvGufoQveQdAYbBMr8Z66YpZN2EVVwdD8tP

3P2KBLgyKAWUA8zCefafHK3HxLQB7ammDfS:  -0.01000000 Waves

2021.11.21 19:31 [2866065] smart account 3P2KBLgyKAWUA8zCefafHK3HxLQB7ammDfS > SELF 0.00000000 Waves

{ "type": 13, "id": "EZm6NPUM4NvGufoQveQdAYbBMr8Z66YpZN2EVVwdD8tP", "fee": 1000000, "feeAssetId": null, "timestamp": 1637512326736, "version": 2, "chainId": 87, "sender": "3P2KBLgyKAWUA8zCefafHK3HxLQB7ammDfS", "senderPublicKey": "AQM5JR46VkucVkx5RVXDtku22Yf6j1v16ekWmdXYyXMT", "proofs": [ "4DQjwH5E7dPFnxMW59ZjoBUpmxLMb1dfj4Y8u7qWYUVLNHGNqMEzEFY7qPotfGbayhgDXbF5U4PUMxQVw5ci3Pj" ], "script": "base64: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AAABaQEAAAAPcmVsZWFzZU9uTmF0aXZlAAAAAQAAAAdhc3NldElkBAAAAA5kZXN0aW5hdGlvbktleQkBAAAACmtleURlc3RORlQAAAABBQAAAAdhc3NldElkBAAAAA1vdGhlclN0YXRlS2V5CQEAAAALa2V5U3RhdGVORlQAAAABBQAAAAdhc3NldElkBAAAAAVzdGF0ZQkBAAAADGdldERhdGFCeUtleQAAAAEFAAAADW90aGVyU3RhdGVLZXkDCQAAAAAAAAIFAAAABXN0YXRlAgAAAAZMT0dHRUQEAAAAC2Rlc3RpbmF0aW9uCQEAAAAMZ2V0RGF0YUJ5S2V5AAAAAQUAAAAOZGVzdGluYXRpb25LZXkEAAAADnJlY2VpdmVORlRBZGR5CQEAAAAHQWRkcmVzcwAAAAEJAAJZAAAAAQUAAAALZGVzdGluYXRpb24EAAAACW5hdGl2ZUtleQkBAAAADGtleU5hdGl2ZU5GVAAAAAEFAAAAB2Fzc2V0SWQEAAAABGRhdGEJAQAAAAxnZXRPck1pbnRORlQAAAABBQAAAAdhc3NldElkBAAAAAVuZnRJZAgFAAAABGRhdGEAAAACXzEEAAAACG1pbnREYXRhCAUAAAAEZGF0YQAAAAJfMgQAAAAIb3RoZXJLZXkJAQAAAAtrZXlPdGhlck5GVAAAAAEFAAAABW5mdElkBAAAABRuYXRpdmVEZXN0aW5hdGlvbktleQkBAAAACmtleURlc3RORlQAAAABBQAAAAVuZnRJZAQAAAARbmF0aXZlU3RhdGVLZXlORlQJAQAAAAtrZXlTdGF0ZU5GVAAAAAEFAAAABW5mdElkAwkAAAAAAAACBQAAAAR0aGlzCAUAAAABaQAAAAZjYWxsZXIJAAROAAAAAgkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACBQAAAAhvdGhlcktleQUAAAAHYXNzZXRJZAkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACBQAAAAluYXRpdmVLZXkFAAAABW5mdElkCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIFAAAAFG5hdGl2ZURlc3RpbmF0aW9uS2V5BQAAAAtkZXN0aW5hdGlvbgkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACBQAAABFuYXRpdmVTdGF0ZUtleU5GVAIAAAAJQ09NUExFVEVECQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIFAAAADW90aGVyU3RhdGVLZXkCAAAACUNPTVBMRVRFRAkABEwAAAACCQEAAAAOU2NyaXB0VHJhbnNmZXIAAAADBQAAAA5yZWNlaXZlTkZUQWRkeQAAAAAAAAAAAQkAAlkAAAABBQAAAAVuZnRJZAUAAAADbmlsBQAAAAhtaW50RGF0YQkABE4AAAACCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIFAAAACG90aGVyS2V5BQAAAAdhc3NldElkCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIFAAAACW5hdGl2ZUtleQUAAAAFbmZ0SWQJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgUAAAAUbmF0aXZlRGVzdGluYXRpb25LZXkFAAAAC2Rlc3RpbmF0aW9uCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIFAAAAEW5hdGl2ZVN0YXRlS2V5TkZUAgAAAAlDT01QTEVURUQJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgUAAAANb3RoZXJTdGF0ZUtleQIAAAAJQ09NUExFVEVECQAETAAAAAIJAQAAAA5TY3JpcHRUcmFuc2ZlcgAAAAMFAAAADnJlY2VpdmVORlRBZGR5AAAAAAAAAAABCQACWQAAAAEFAAAABW5mdElkCQAETAAAAAIJAQAAAA5TY3JpcHRUcmFuc2ZlcgAAAAMIBQAAAAFpAAAABmNhbGxlcgAAAAAAATEtAAUAAAAEdW5pdAUAAAADbmlsBQAAAAhtaW50RGF0YQkAAAIAAAABAgAAACFUcmFuc2FjdGlvbiBpcyBhbHJlYWR5IHByb2Nlc3NlZCEAAAABaQEAAAAaU3RvcmVEYXRhRmluaXNoU2VuZFRvT3RoZXIAAAAEAAAACWRlcG9zaXRJZAAAAAZtaW50SWQAAAAFbmZ0SWQAAAAKbmZ0SWRPdGhlcgMJAAAAAAAAAggFAAAAAWkAAAAGY2FsbGVyBQAAAAR0aGlzBAAAAAhzdGF0ZUtleQkAASwAAAACBQAAAAVuZnRJZAIAAAAGX3N0YXRlBAAAAAVzdGF0ZQkABB0AAAACBQAAAAR0aGlzBQAAAAhzdGF0ZUtleQMJAQAAAAlpc0RlZmluZWQAAAABBQAAAAVzdGF0ZQQAAAAFdG5LZXkJAAEsAAAAAgUAAAAFbmZ0SWQCAAAACF9pZE90aGVyBAAAAAdsaW5rS2V5CQABLAAAAAIFAAAACm5mdElkT3RoZXICAAAACV9pZE5hdGl2ZQQAAAAMZGVwb3NpdElkS2V5CQABLAAAAAIFAAAABW5mdElkAgAAAApfZGVwb3NpdElkBAAAAAltaW50SWRLZXkJAAEsAAAAAgUAAAAFbmZ0SWQCAAAAB19taW50SWQJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgUAAAAIc3RhdGVLZXkCAAAACUNPTVBMRVRFRAkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACBQAAAAV0bktleQUAAAAKbmZ0SWRPdGhlcgkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACBQAAAAdsaW5rS2V5BQAAAAVuZnRJZAkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACBQAAAAxkZXBvc2l0SWRLZXkFAAAACWRlcG9zaXRJZAkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACBQAAAAltaW50SWRLZXkFAAAABm1pbnRJZAUAAAADbmlsCQAAAgAAAAECAAAAJVdlIGNhbid0IHVwZGF0ZSBhIG5vbi1leGlzdGluZyBzdGF0ZSEJAAACAAAAAQIAAAANRGlydHkgaGFja2VyIQAAAAFpAQAAABVzdG9yZURhdGFTZW5kVG9OYXRpdmUAAAAFAAAAC2Rlc3RpbmF0aW9uAAAAC2Rlc2NyaXB0aW9uAAAABG5hbWUAAAAHYXNzZXRJZAAAAAZpc3N1ZXIDCQAAAAAAAAIIBQAAAAFpAAAABmNhbGxlcgUAAAAEdGhpcwQAAAAIc3RhdGVLZXkJAQAAAAtrZXlTdGF0ZU5GVAAAAAEFAAAAB2Fzc2V0SWQEAAAABXN0YXRlCQAEHQAAAAIFAAAABHRoaXMFAAAACHN0YXRlS2V5BAAAAA5kZXN0aW5hdGlvbktleQkBAAAACmtleURlc3RORlQAAAABBQAAAAdhc3NldElkBAAAAAdkZXNjS2V5CQEAAAAKa2V5RGVzY05GVAAAAAEFAAAAB2Fzc2V0SWQEAAAAB25hbWVLZXkJAQAAAAprZXlOYW1lTkZUAAAAAQUAAAAHYXNzZXRJZAQAAAAJaXNzdWVyS2V5CQEAAAALa2V5SXNzdWVORlQAAAABBQAAAAdhc3NldElkAwkBAAAACWlzRGVmaW5lZAAAAAEFAAAABXN0YXRlAwkAAAAAAAACCQEAAAARQGV4dHJOYXRpdmUoMTA1MykAAAACBQAAAAR0aGlzBQAAAAhzdGF0ZUtleQIAAAAJUFJPQ0VTU0VECQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIFAAAADmRlc3RpbmF0aW9uS2V5BQAAAAtkZXN0aW5hdGlvbgkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACBQAAAAdkZXNjS2V5BQAAAAtkZXNjcmlwdGlvbgkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACBQAAAAduYW1lS2V5BQAAAARuYW1lCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIFAAAACHN0YXRlS2V5AgAAAAZMT0dHRUQJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgUAAAAJaXNzdWVyS2V5BQAAAAZpc3N1ZXIFAAAAA25pbAkAAAIAAAABCQABLAAAAAICAAAAJERvbid0IHlvdSBkYXJlIHRvIHRlbXBlciB3aXRoIGRhdGEhIAkBAAAAEUBleHRyTmF0aXZlKDEwNTMpAAAAAgUAAAAEdGhpcwUAAAAIc3RhdGVLZXkJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgUAAAAOZGVzdGluYXRpb25LZXkFAAAAC2Rlc3RpbmF0aW9uCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIFAAAAB2Rlc2NLZXkFAAAAC2Rlc2NyaXB0aW9uCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIFAAAAB25hbWVLZXkFAAAABG5hbWUJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgUAAAAIc3RhdGVLZXkCAAAABkxPR0dFRAkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACBQAAAAlpc3N1ZXJLZXkFAAAABmlzc3VlcgUAAAADbmlsCQAAAgAAAAECAAAADERpcnR5IGhhY2tlcgAAAAC96KBS", "height": 2866065, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 2NNzkvtbVbmsFbyDPJpXxRoBpRxrJBU4SCyfv3ZGk8kr Next: AknJc6QadW92kCZrx7TxXz3ZdSNiRuRWaz6zBKnxqpoa Diff:
OldNewDifferences
11 {-# STDLIB_VERSION 5 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
4+func keyStateNFT (assetId) = (assetId + "_state")
5+
6+
7+func keyDestNFT (assetId) = (assetId + "_dest")
8+
9+
10+func keyDescNFT (assetId) = (assetId + "_descr")
11+
12+
13+func keyNameNFT (assetId) = (assetId + "_name")
14+
15+
16+func keyIssueNFT (assetId) = (assetId + "_issuer")
17+
18+
19+func keyOtherNFT (assetId) = (assetId + "_other")
20+
21+
22+func keyNativeNFT (assetId) = (assetId + "_native")
23+
24+
25+func getDataByKey (stateKey) = valueOrErrorMessage(getString(this, stateKey), "The assetId seems invalid!")
26+
27+
28+func assetIdToString (assetId) = toBase58String(value(assetId))
29+
30+
31+func keyDestinationNFT (assetId,height) = ((assetId + "_") + toString(height))
32+
33+
34+func getOrMintNFT (assetId) = {
35+ let nativeKey = keyNativeNFT(assetId)
36+ let descKey = keyDescNFT(assetId)
37+ let nameKey = keyNameNFT(assetId)
38+ let description = getDataByKey(descKey)
39+ let name = getDataByKey(nameKey)
40+ if (isDefined(getString(this, nativeKey)))
41+ then $Tuple2(getStringValue(this, nativeKey), nil)
42+ else {
43+ let issueNFT = Issue(name, description, 1, 0, false)
44+ let idNFT = calculateAssetId(issueNFT)
45+ $Tuple2(toBase58String(idNFT), [issueNFT])
46+ }
47+ }
448
549
650 @Callable(i)
7-func deposit (destination) = {
51+func sendToOther (destination) = {
852 let pmt = value(i.payments[0])
953 if (!(isDefined(pmt.assetId)))
1054 then throw("It needs to be an NFT")
1155 else {
12- let stateKey = (toBase58String(value(pmt.assetId)) + "_state")
13- let destinationKey = ((toBase58String(value(pmt.assetId)) + "_") + toString(height))
14- let typeKey = (toBase58String(value(pmt.assetId)) + "_type")
15-[StringEntry(stateKey, "DEPOSITED"), StringEntry(typeKey, "UNKNOWN"), StringEntry(destinationKey, destination)]
56+ let stateKey = keyStateNFT(assetIdToString(pmt.assetId))
57+ let destinationKey = keyDestinationNFT(assetIdToString(pmt.assetId), height)
58+[StringEntry(stateKey, "SEND-TO-OTHER"), StringEntry(destinationKey, destination)]
1659 }
1760 }
1861
1962
2063
2164 @Callable(i)
22-func finishDeposit (depositId,mintId,nftId,nftIdTN) = if ((i.caller == this))
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))
2391 then {
2492 let stateKey = (nftId + "_state")
2593 let state = getString(this, stateKey)
2694 if (isDefined(state))
2795 then {
28- let tnKey = (nftId + "_idTN")
29- let linkKey = (nftIdTN + "_idWaves")
96+ let tnKey = (nftId + "_idOther")
97+ let linkKey = (nftIdOther + "_idNative")
3098 let depositIdKey = (nftId + "_depositId")
3199 let mintIdKey = (nftId + "_mintId")
32-[StringEntry(stateKey, "MINTED"), StringEntry(tnKey, nftIdTN), StringEntry(linkKey, nftId), StringEntry(depositIdKey, depositId), StringEntry(mintIdKey, mintId)]
100+[StringEntry(stateKey, "COMPLETED"), StringEntry(tnKey, nftIdOther), StringEntry(linkKey, nftId), StringEntry(depositIdKey, depositId), StringEntry(mintIdKey, mintId)]
33101 }
34102 else throw("We can't update a non-existing state!")
35103 }
38106
39107
40108 @Callable(i)
41-func storeData (nftIdTN,tnId,destination) = if ((i.caller == this))
109+func storeDataSendToNative (destination,description,name,assetId,issuer) = if ((i.caller == this))
42110 then {
43- let linkKey = (nftIdTN + "_idWaves")
44- let nftId = getString(this, linkKey)
45- let stateKey = (valueOrErrorMessage(nftId, "No linked nftId found!") + "_state")
111+ let stateKey = keyStateNFT(assetId)
46112 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)
47117 if (isDefined(state))
48- then {
49- let destinationKey = (tnId + "_dest")
50- let withdrawKey = (tnId + "_state")
51- let idNftkey = (tnId + "_nftIdTN")
52- let stateWD = getString(this, withdrawKey)
53- if (isDefined(stateWD))
54- then throw("Withdrawal already initialized or completed!")
55- else [StringEntry(destinationKey, destination), StringEntry(idNftkey, nftIdTN), StringEntry(withdrawKey, "WD-INITIALIZED"), StringEntry(stateKey, "WD-INITIALIZED")]
56- }
57- else throw("Asset was never deposited!")
118+ then if ((getStringValue(this, stateKey) == "PROCESSED"))
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)]
58122 }
59123 else throw("Dirty hacker")
60-
61-
62-
63-@Callable(i)
64-func releaseOnWaves (tnId) = {
65- let destinationKey = (tnId + "_dest")
66- let stateKey = (tnId + "_state")
67- let idNftkey = (tnId + "_nftIdTN")
68- let state = valueOrErrorMessage(getString(this, stateKey), "The tnId seems invalid!")
69- if ((state == "WD-INITIALIZED"))
70- then {
71- let destination = valueOrErrorMessage(getString(this, destinationKey), "The tnId seems invalid!")
72- let receiveNFTAddy = Address(fromBase58String(destination))
73- let idNFTTN = valueOrErrorMessage(getString(this, idNftkey), "The nftIdTN seems invalid!")
74- let linkKey = (idNFTTN + "_idWaves")
75- let idNFT = valueOrErrorMessage(getString(this, linkKey), "The linked NFT cannot be found!")
76- let stateNFTKey = (idNFT + "_state")
77-[StringEntry(stateKey, "COMPLETED"), StringEntry(stateNFTKey, "RELEASED"), ScriptTransfer(receiveNFTAddy, 1, fromBase58String(idNFT))]
78- }
79- else throw("Transaction is already processed!")
80- }
81124
82125
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 5 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
4+func keyStateNFT (assetId) = (assetId + "_state")
5+
6+
7+func keyDestNFT (assetId) = (assetId + "_dest")
8+
9+
10+func keyDescNFT (assetId) = (assetId + "_descr")
11+
12+
13+func keyNameNFT (assetId) = (assetId + "_name")
14+
15+
16+func keyIssueNFT (assetId) = (assetId + "_issuer")
17+
18+
19+func keyOtherNFT (assetId) = (assetId + "_other")
20+
21+
22+func keyNativeNFT (assetId) = (assetId + "_native")
23+
24+
25+func getDataByKey (stateKey) = valueOrErrorMessage(getString(this, stateKey), "The assetId seems invalid!")
26+
27+
28+func assetIdToString (assetId) = toBase58String(value(assetId))
29+
30+
31+func keyDestinationNFT (assetId,height) = ((assetId + "_") + toString(height))
32+
33+
34+func getOrMintNFT (assetId) = {
35+ let nativeKey = keyNativeNFT(assetId)
36+ let descKey = keyDescNFT(assetId)
37+ let nameKey = keyNameNFT(assetId)
38+ let description = getDataByKey(descKey)
39+ let name = getDataByKey(nameKey)
40+ if (isDefined(getString(this, nativeKey)))
41+ then $Tuple2(getStringValue(this, nativeKey), nil)
42+ else {
43+ let issueNFT = Issue(name, description, 1, 0, false)
44+ let idNFT = calculateAssetId(issueNFT)
45+ $Tuple2(toBase58String(idNFT), [issueNFT])
46+ }
47+ }
448
549
650 @Callable(i)
7-func deposit (destination) = {
51+func sendToOther (destination) = {
852 let pmt = value(i.payments[0])
953 if (!(isDefined(pmt.assetId)))
1054 then throw("It needs to be an NFT")
1155 else {
12- let stateKey = (toBase58String(value(pmt.assetId)) + "_state")
13- let destinationKey = ((toBase58String(value(pmt.assetId)) + "_") + toString(height))
14- let typeKey = (toBase58String(value(pmt.assetId)) + "_type")
15-[StringEntry(stateKey, "DEPOSITED"), StringEntry(typeKey, "UNKNOWN"), StringEntry(destinationKey, destination)]
56+ let stateKey = keyStateNFT(assetIdToString(pmt.assetId))
57+ let destinationKey = keyDestinationNFT(assetIdToString(pmt.assetId), height)
58+[StringEntry(stateKey, "SEND-TO-OTHER"), StringEntry(destinationKey, destination)]
1659 }
1760 }
1861
1962
2063
2164 @Callable(i)
22-func finishDeposit (depositId,mintId,nftId,nftIdTN) = if ((i.caller == this))
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))
2391 then {
2492 let stateKey = (nftId + "_state")
2593 let state = getString(this, stateKey)
2694 if (isDefined(state))
2795 then {
28- let tnKey = (nftId + "_idTN")
29- let linkKey = (nftIdTN + "_idWaves")
96+ let tnKey = (nftId + "_idOther")
97+ let linkKey = (nftIdOther + "_idNative")
3098 let depositIdKey = (nftId + "_depositId")
3199 let mintIdKey = (nftId + "_mintId")
32-[StringEntry(stateKey, "MINTED"), StringEntry(tnKey, nftIdTN), StringEntry(linkKey, nftId), StringEntry(depositIdKey, depositId), StringEntry(mintIdKey, mintId)]
100+[StringEntry(stateKey, "COMPLETED"), StringEntry(tnKey, nftIdOther), StringEntry(linkKey, nftId), StringEntry(depositIdKey, depositId), StringEntry(mintIdKey, mintId)]
33101 }
34102 else throw("We can't update a non-existing state!")
35103 }
36104 else throw("Dirty hacker!")
37105
38106
39107
40108 @Callable(i)
41-func storeData (nftIdTN,tnId,destination) = if ((i.caller == this))
109+func storeDataSendToNative (destination,description,name,assetId,issuer) = if ((i.caller == this))
42110 then {
43- let linkKey = (nftIdTN + "_idWaves")
44- let nftId = getString(this, linkKey)
45- let stateKey = (valueOrErrorMessage(nftId, "No linked nftId found!") + "_state")
111+ let stateKey = keyStateNFT(assetId)
46112 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)
47117 if (isDefined(state))
48- then {
49- let destinationKey = (tnId + "_dest")
50- let withdrawKey = (tnId + "_state")
51- let idNftkey = (tnId + "_nftIdTN")
52- let stateWD = getString(this, withdrawKey)
53- if (isDefined(stateWD))
54- then throw("Withdrawal already initialized or completed!")
55- else [StringEntry(destinationKey, destination), StringEntry(idNftkey, nftIdTN), StringEntry(withdrawKey, "WD-INITIALIZED"), StringEntry(stateKey, "WD-INITIALIZED")]
56- }
57- else throw("Asset was never deposited!")
118+ then if ((getStringValue(this, stateKey) == "PROCESSED"))
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)]
58122 }
59123 else throw("Dirty hacker")
60-
61-
62-
63-@Callable(i)
64-func releaseOnWaves (tnId) = {
65- let destinationKey = (tnId + "_dest")
66- let stateKey = (tnId + "_state")
67- let idNftkey = (tnId + "_nftIdTN")
68- let state = valueOrErrorMessage(getString(this, stateKey), "The tnId seems invalid!")
69- if ((state == "WD-INITIALIZED"))
70- then {
71- let destination = valueOrErrorMessage(getString(this, destinationKey), "The tnId seems invalid!")
72- let receiveNFTAddy = Address(fromBase58String(destination))
73- let idNFTTN = valueOrErrorMessage(getString(this, idNftkey), "The nftIdTN seems invalid!")
74- let linkKey = (idNFTTN + "_idWaves")
75- let idNFT = valueOrErrorMessage(getString(this, linkKey), "The linked NFT cannot be found!")
76- let stateNFTKey = (idNFT + "_state")
77-[StringEntry(stateKey, "COMPLETED"), StringEntry(stateNFTKey, "RELEASED"), ScriptTransfer(receiveNFTAddy, 1, fromBase58String(idNFT))]
78- }
79- else throw("Transaction is already processed!")
80- }
81124
82125

github/deemru/w8io/3ef1775 
35.20 ms