tx · 3w2NjmvMnX57zRWwACBxQQ17qa1YLNx9SrtDKGzwCDU2 3P2KBLgyKAWUA8zCefafHK3HxLQB7ammDfS: -0.01000000 Waves 2021.10.18 20:19 [2816986] smart account 3P2KBLgyKAWUA8zCefafHK3HxLQB7ammDfS > SELF 0.00000000 Waves
{ "type": 13, "id": "3w2NjmvMnX57zRWwACBxQQ17qa1YLNx9SrtDKGzwCDU2", "fee": 1000000, "feeAssetId": null, "timestamp": 1634577579002, "version": 2, "chainId": 87, "sender": "3P2KBLgyKAWUA8zCefafHK3HxLQB7ammDfS", "senderPublicKey": "AQM5JR46VkucVkx5RVXDtku22Yf6j1v16ekWmdXYyXMT", "proofs": [ "2DM5cnSoDmko3kKJkd9pMQevL4aF7mhLVUps61Wr7jkVibpmvntSefAZuQvEnP8HQpK44ZM9QZ4DfCeqkwKKox4N" ], "script": "base64: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dGUEAAAACGlkTmZ0a2V5CQABLAAAAAIFAAAABHRuSWQCAAAACF9uZnRJZFROBAAAAAdzdGF0ZVdECQAEHQAAAAIFAAAABHRoaXMFAAAAC3dpdGhkcmF3S2V5AwkBAAAACWlzRGVmaW5lZAAAAAEFAAAAB3N0YXRlV0QJAAACAAAAAQIAAAAsV2l0aGRyYXdhbCBhbHJlYWR5IGluaXRpYWxpemVkIG9yIGNvbXBsZXRlZCEJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgUAAAAOZGVzdGluYXRpb25LZXkFAAAAC2Rlc3RpbmF0aW9uCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIFAAAACGlkTmZ0a2V5BQAAAAduZnRJZFROCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIFAAAAC3dpdGhkcmF3S2V5AgAAAA5XRC1JTklUSUFMSVpFRAkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACBQAAAAhzdGF0ZUtleQIAAAAOV0QtSU5JVElBTElaRUQFAAAAA25pbAkAAAIAAAABAgAAABpBc3NldCB3YXMgbmV2ZXIgZGVwb3NpdGVkIQkAAAIAAAABAgAAAAxEaXJ0eSBoYWNrZXIAAAABaQEAAAAOcmVsZWFzZU9uV2F2ZXMAAAABAAAABHRuSWQEAAAADmRlc3RpbmF0aW9uS2V5CQABLAAAAAIFAAAABHRuSWQCAAAABV9kZXN0BAAAAAhzdGF0ZUtleQkAASwAAAACBQAAAAR0bklkAgAAAAZfc3RhdGUEAAAACGlkTmZ0a2V5CQABLAAAAAIFAAAABHRuSWQCAAAACF9uZnRJZFROBAAAAAVzdGF0ZQkBAAAAE3ZhbHVlT3JFcnJvck1lc3NhZ2UAAAACCQAEHQAAAAIFAAAABHRoaXMFAAAACHN0YXRlS2V5AgAAABdUaGUgdG5JZCBzZWVtcyBpbnZhbGlkIQMJAAAAAAAAAgUAAAAFc3RhdGUCAAAADldELUlOSVRJQUxJWkVEBAAAAAtkZXN0aW5hdGlvbgkBAAAAE3ZhbHVlT3JFcnJvck1lc3NhZ2UAAAACCQAEHQAAAAIFAAAABHRoaXMFAAAADmRlc3RpbmF0aW9uS2V5AgAAABdUaGUgdG5JZCBzZWVtcyBpbnZhbGlkIQQAAAAOcmVjZWl2ZU5GVEFkZHkJAQAAAAdBZGRyZXNzAAAAAQkAAlkAAAABBQAAAAtkZXN0aW5hdGlvbgQAAAAHaWRORlRUTgkBAAAAE3ZhbHVlT3JFcnJvck1lc3NhZ2UAAAACCQAEHQAAAAIFAAAABHRoaXMFAAAACGlkTmZ0a2V5AgAAABpUaGUgbmZ0SWRUTiBzZWVtcyBpbnZhbGlkIQQAAAAHbGlua0tleQkAASwAAAACBQAAAAdpZE5GVFROAgAAAAhfaWRXYXZlcwQAAAAFaWRORlQJAQAAABN2YWx1ZU9yRXJyb3JNZXNzYWdlAAAAAgkABB0AAAACBQAAAAR0aGlzBQAAAAdsaW5rS2V5AgAAAB9UaGUgbGlua2VkIE5GVCBjYW5ub3QgYmUgZm91bmQhBAAAAAtzdGF0ZU5GVEtleQkAASwAAAACBQAAAAVpZE5GVAIAAAAGX3N0YXRlCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIFAAAACHN0YXRlS2V5AgAAAAlDT01QTEVURUQJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgUAAAALc3RhdGVORlRLZXkCAAAACFJFTEVBU0VECQAETAAAAAIJAQAAAA5TY3JpcHRUcmFuc2ZlcgAAAAMFAAAADnJlY2VpdmVORlRBZGR5AAAAAAAAAAABCQABmwAAAAEFAAAABWlkTkZUBQAAAANuaWwJAAACAAAAAQIAAAAhVHJhbnNhY3Rpb24gaXMgYWxyZWFkeSBwcm9jZXNzZWQhAAAAAEwY7DM=", "height": 2816986, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 7Nio4KWvivXAhjjw9ZLPEnj3wVSZZmHBKtM8HR3axNpt Next: 4VDLBuYMaU6jXKqfYjJ2XnoRmXi5DfU3rsa4zG9M91yP Diff:
Old | New | Differences | |
---|---|---|---|
11 | 11 | else { | |
12 | 12 | let stateKey = (toBase58String(value(pmt.assetId)) + "_state") | |
13 | 13 | let destinationKey = ((toBase58String(value(pmt.assetId)) + "_") + toString(height)) | |
14 | - | [StringEntry(stateKey, "DEPOSITED"), StringEntry(destinationKey, destination)] | |
14 | + | let typeKey = (toBase58String(value(pmt.assetId)) + "_type") | |
15 | + | [StringEntry(stateKey, "DEPOSITED"), StringEntry(typeKey, "UNKNOWN"), StringEntry(destinationKey, destination)] | |
15 | 16 | } | |
16 | 17 | } | |
17 | 18 | ||
18 | 19 | ||
19 | 20 | ||
20 | 21 | @Callable(i) | |
21 | - | func | |
22 | + | func finishDeposit (depositId,mintId,nftId,nftIdTN) = if ((i.caller == this)) | |
22 | 23 | then { | |
23 | 24 | let stateKey = (nftId + "_state") | |
24 | - | let tnKey = (nftId + "_idTN") | |
25 | - | let depositIdKey = (nftId + "_depositId") | |
26 | - | let mintIdKey = (nftId + "_mintId") | |
27 | - | [StringEntry(stateKey, status), StringEntry(tnKey, nftIdTN), StringEntry(depositIdKey, depositId), StringEntry(mintIdKey, mintId)] | |
25 | + | let state = getString(this, stateKey) | |
26 | + | if (isDefined(state)) | |
27 | + | then { | |
28 | + | let tnKey = (nftId + "_idTN") | |
29 | + | let linkKey = (nftIdTN + "_idWaves") | |
30 | + | let depositIdKey = (nftId + "_depositId") | |
31 | + | let mintIdKey = (nftId + "_mintId") | |
32 | + | [StringEntry(stateKey, "MINTED"), StringEntry(tnKey, nftIdTN), StringEntry(linkKey, nftId), StringEntry(depositIdKey, depositId), StringEntry(mintIdKey, mintId)] | |
33 | + | } | |
34 | + | else throw("We can't update a non-existing state!") | |
28 | 35 | } | |
29 | 36 | else throw("Dirty hacker!") | |
37 | + | ||
38 | + | ||
39 | + | ||
40 | + | @Callable(i) | |
41 | + | func storeData (nftIdTN,tnId,destination) = if ((i.caller == this)) | |
42 | + | then { | |
43 | + | let linkKey = (nftIdTN + "_idWaves") | |
44 | + | let nftId = getStringValue(this, linkKey) | |
45 | + | let stateKey = (nftId + "_state") | |
46 | + | let state = getString(this, stateKey) | |
47 | + | 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!") | |
58 | + | } | |
59 | + | 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, toBytes(idNFT))] | |
78 | + | } | |
79 | + | else throw("Transaction is already processed!") | |
80 | + | } | |
30 | 81 | ||
31 | 82 |
Old | New | Differences | |
---|---|---|---|
1 | 1 | {-# STDLIB_VERSION 5 #-} | |
2 | 2 | {-# SCRIPT_TYPE ACCOUNT #-} | |
3 | 3 | {-# CONTENT_TYPE DAPP #-} | |
4 | 4 | ||
5 | 5 | ||
6 | 6 | @Callable(i) | |
7 | 7 | func deposit (destination) = { | |
8 | 8 | let pmt = value(i.payments[0]) | |
9 | 9 | if (!(isDefined(pmt.assetId))) | |
10 | 10 | then throw("It needs to be an NFT") | |
11 | 11 | else { | |
12 | 12 | let stateKey = (toBase58String(value(pmt.assetId)) + "_state") | |
13 | 13 | let destinationKey = ((toBase58String(value(pmt.assetId)) + "_") + toString(height)) | |
14 | - | [StringEntry(stateKey, "DEPOSITED"), StringEntry(destinationKey, destination)] | |
14 | + | let typeKey = (toBase58String(value(pmt.assetId)) + "_type") | |
15 | + | [StringEntry(stateKey, "DEPOSITED"), StringEntry(typeKey, "UNKNOWN"), StringEntry(destinationKey, destination)] | |
15 | 16 | } | |
16 | 17 | } | |
17 | 18 | ||
18 | 19 | ||
19 | 20 | ||
20 | 21 | @Callable(i) | |
21 | - | func | |
22 | + | func finishDeposit (depositId,mintId,nftId,nftIdTN) = if ((i.caller == this)) | |
22 | 23 | then { | |
23 | 24 | let stateKey = (nftId + "_state") | |
24 | - | let tnKey = (nftId + "_idTN") | |
25 | - | let depositIdKey = (nftId + "_depositId") | |
26 | - | let mintIdKey = (nftId + "_mintId") | |
27 | - | [StringEntry(stateKey, status), StringEntry(tnKey, nftIdTN), StringEntry(depositIdKey, depositId), StringEntry(mintIdKey, mintId)] | |
25 | + | let state = getString(this, stateKey) | |
26 | + | if (isDefined(state)) | |
27 | + | then { | |
28 | + | let tnKey = (nftId + "_idTN") | |
29 | + | let linkKey = (nftIdTN + "_idWaves") | |
30 | + | let depositIdKey = (nftId + "_depositId") | |
31 | + | let mintIdKey = (nftId + "_mintId") | |
32 | + | [StringEntry(stateKey, "MINTED"), StringEntry(tnKey, nftIdTN), StringEntry(linkKey, nftId), StringEntry(depositIdKey, depositId), StringEntry(mintIdKey, mintId)] | |
33 | + | } | |
34 | + | else throw("We can't update a non-existing state!") | |
28 | 35 | } | |
29 | 36 | else throw("Dirty hacker!") | |
37 | + | ||
38 | + | ||
39 | + | ||
40 | + | @Callable(i) | |
41 | + | func storeData (nftIdTN,tnId,destination) = if ((i.caller == this)) | |
42 | + | then { | |
43 | + | let linkKey = (nftIdTN + "_idWaves") | |
44 | + | let nftId = getStringValue(this, linkKey) | |
45 | + | let stateKey = (nftId + "_state") | |
46 | + | let state = getString(this, stateKey) | |
47 | + | 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!") | |
58 | + | } | |
59 | + | 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, toBytes(idNFT))] | |
78 | + | } | |
79 | + | else throw("Transaction is already processed!") | |
80 | + | } | |
30 | 81 | ||
31 | 82 |
github/deemru/w8io/3ef1775 49.40 ms ◑