tx · 6jcGaCDo4SHTKswxuPuRtnXwTaYbxa9dXFQ7hZfFh4wV 3PPgeYTWMRZ7S7jSLpnVuKKB9r6XuDk3ndC: -0.01000000 Waves 2022.11.14 13:04 [3382042] smart account 3PPgeYTWMRZ7S7jSLpnVuKKB9r6XuDk3ndC > SELF 0.00000000 Waves
{ "type": 13, "id": "6jcGaCDo4SHTKswxuPuRtnXwTaYbxa9dXFQ7hZfFh4wV", "fee": 1000000, "feeAssetId": null, "timestamp": 1668420265939, "version": 2, "chainId": 87, "sender": "3PPgeYTWMRZ7S7jSLpnVuKKB9r6XuDk3ndC", "senderPublicKey": "AWoQVon5Ld79iWytFLN2MSSJr9ow7XEMVaH8emaRJp3Z", "proofs": [ "54P8Cx1pSjRpMSGjtW6YBLLtmVPcRsorfh6Em7Bvh2cJAVw1oJ3uSE6Q35sNtvRKE5aEMpRWTS8dh2AGK4mSTK1d" ], "script": "base64:BgIGCAISABIABAASbmZ0Q3JlYXRpb25BZGRyZXNzARoBV5PdxNIX5yAK/fchEk7w8HZnJoMDeNRcTAAWc2lnbkFydENvbnRyYWN0QWRkcmVzcwEaAVd7ZNVb1p4XuarT5o/8A1zIxBb4m7qGKeIBCGNoZWNrTkZUAgVhc3NldA1pc3N1ZXJBZGRyZXNzAwMDCQAAAggIBQVhc3NldAZpc3N1ZXIFYnl0ZXMFDWlzc3VlckFkZHJlc3MJAAACCAUFYXNzZXQIZGVjaW1hbHMAAAcJAAACCAUFYXNzZXQKcmVpc3N1YWJsZQcHCQAAAggFBWFzc2V0CHF1YW50aXR5AAEHAQtjbGVhclN0cmluZwEDc3RyCQC5CQIJALwJAgkAuQkCCQC8CQIJALkJAgkAvAkCBQNzdHICBSDigJMgAgEgAgPigJwCASACA+KAnQIBIAIBaQEEbG9jawAECmFkZHJlc3NTdHIJAKUIAQgFAWkGY2FsbGVyBAdhc3NldElkCQEFdmFsdWUBCAkBBXZhbHVlAQkAkQMCCAUBaQhwYXltZW50cwAAB2Fzc2V0SWQEBWFzc2V0CQEFdmFsdWUBCQDsBwEFB2Fzc2V0SWQECWFzc2V0RGVzYwgFBWFzc2V0C2Rlc2NyaXB0aW9uAwMJAAACCAkBBXZhbHVlAQkAkQMCCAUBaQhwYXltZW50cwAABmFtb3VudAABCQEIY2hlY2tORlQCBQVhc3NldAUWc2lnbkFydENvbnRyYWN0QWRkcmVzcwcEDXBhcnRzT2ZTdHJpbmcJALUJAgUJYXNzZXREZXNjAgEsBApjcmVhdG9yU3RyCQCwAgIJAJEDAgkAtQkCCQCRAwIFDXBhcnRzT2ZTdHJpbmcAAAIBOgABAAEECGFydElkU3RyCQCwAgIJAJEDAgkAtQkCCQCRAwIFDXBhcnRzT2ZTdHJpbmcAAQIBOgABAAEEBG5hbWUJARFAZXh0ck5hdGl2ZSgxMDUzKQIJAQdBZGRyZXNzAQUWc2lnbkFydENvbnRyYWN0QWRkcmVzcwkArAICCQCsAgIJAKwCAgIJYXJ0X25hbWVfBQhhcnRJZFN0cgIBXwUKY3JlYXRvclN0cgQHYXJ0RGVzYwkBEUBleHRyTmF0aXZlKDEwNTMpAgkBB0FkZHJlc3MBBRZzaWduQXJ0Q29udHJhY3RBZGRyZXNzCQCsAgIJAKwCAgkArAICAglhcnRfZGVzY18FCGFydElkU3RyAgFfBQpjcmVhdG9yU3RyBAZhcnRVcmwJARFAZXh0ck5hdGl2ZSgxMDUzKQIJAQdBZGRyZXNzAQUWc2lnbkFydENvbnRyYWN0QWRkcmVzcwkArAICCQCsAgIJAKwCAgIQYXJ0X2Rpc3BsYXlfY2lkXwUIYXJ0SWRTdHICAV8FCmNyZWF0b3JTdHIECmRlc2NQcmVmaXgJAKwCAgkArAICCQCsAgIJAKwCAgILQ3JlYXRlZCBieSAFCmNyZWF0b3JTdHICAi4gBQRuYW1lAgIuIAQEZGVzYwMJAGYCCQCxAgEFB2FydERlc2MAAAkArAICBQpkZXNjUHJlZml4BQdhcnREZXNjCQCsAgIFCmRlc2NQcmVmaXgCEE5GVCBmcm9tIHNpZ25BcnQECWltYWdlTGluawkArAICAhVodHRwczovL2lwZnMuaW8vaXBmcy8FBmFydFVybAMDCQBmAgkAsQIBBQRuYW1lAAAJAGYCCQCxAgEFBmFydFVybAAABwQOc3Rha2VkTkZUSWRTdHIEByRtYXRjaDAJAPwHBAkBB0FkZHJlc3MBBRJuZnRDcmVhdGlvbkFkZHJlc3MCCWNyZWF0ZU5GVAkAzAgCCQCvAgIJAQtjbGVhclN0cmluZwEFBG5hbWUAEAkAzAgCCQCvAgIJAQtjbGVhclN0cmluZwEFBGRlc2MA6AcJAMwIAgUJaW1hZ2VMaW5rCQDMCAICB3NpZ25BcnQFA25pbAUDbmlsAwkAAQIFByRtYXRjaDACBlN0cmluZwQBeAUHJG1hdGNoMAUBeAkAAgECK1NvbWV0aGluZyB3ZW50IHdyb25nIGR1cmluZyBjcmVhdGlvbiBvZiBORlQDCQAAAgUOc3Rha2VkTkZUSWRTdHIFDnN0YWtlZE5GVElkU3RyCQCUCgIJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwgFAWkGY2FsbGVyAAEJANkEAQUOc3Rha2VkTkZUSWRTdHIJAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICCQCsAgICC3NpZ25BcnROZnRfCQDYBAEFB2Fzc2V0SWQCBl9vd25lcgUKYWRkcmVzc1N0cgkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgIJAKwCAgILc2lnbkFydE5mdF8FDnN0YWtlZE5GVElkU3RyAghfYXNzZXRJZAkA2AQBBQdhc3NldElkBQNuaWwFDnN0YWtlZE5GVElkU3RyCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIZV3JvbmcgZGF0YSBmb3IgY3JlYXRlIE5GVAkAAgECE0l2YWxpZCBORlQgYXR0YWNoZWQBaQEGdW5sb2NrAAQKYWRkcmVzc1N0cgkApQgBCAUBaQZjYWxsZXIEC3N0YWtlZE5GVElkCQEFdmFsdWUBCAkBBXZhbHVlAQkAkQMCCAUBaQhwYXltZW50cwAAB2Fzc2V0SWQEDnN0YWtlZE5GVEFzc2V0CQEFdmFsdWUBCQDsBwEFC3N0YWtlZE5GVElkAwMJAAACCAkBBXZhbHVlAQkAkQMCCAUBaQhwYXltZW50cwAABmFtb3VudAABCQEIY2hlY2tORlQCBQ5zdGFrZWRORlRBc3NldAUSbmZ0Q3JlYXRpb25BZGRyZXNzBwQOc3Rha2VkTkZUSWRTdHIJANgEAQgFDnN0YWtlZE5GVEFzc2V0AmlkBAphc3NldElkU3RyCQERQGV4dHJOYXRpdmUoMTA1OCkBCQCsAgIJAKwCAgILc2lnbkFydE5mdF8FDnN0YWtlZE5GVElkU3RyAghfYXNzZXRJZAQIb3duZXJTdHIJARFAZXh0ck5hdGl2ZSgxMDU4KQEJAKwCAgkArAICAgtzaWduQXJ0TmZ0XwUKYXNzZXRJZFN0cgIGX293bmVyBAdhc3NldElkCQDZBAEFCmFzc2V0SWRTdHIEA2ludgkA/AcECQEHQWRkcmVzcwEFEm5mdENyZWF0aW9uQWRkcmVzcwIHYnVybk5GVAUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCCAUOc3Rha2VkTkZUQXNzZXQCaWQAAQUDbmlsAwkAAAIFA2ludgUDaW52AwMJAGYCCQCxAgEFCG93bmVyU3RyAAAJAAACBQhvd25lclN0cgUKYWRkcmVzc1N0cgcJAJQKAgkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCAUBaQZjYWxsZXIAAQUHYXNzZXRJZAkAzAgCCQELRGVsZXRlRW50cnkBCQCsAgIJAKwCAgILc2lnbkFydE5mdF8FDnN0YWtlZE5GVElkU3RyAghfYXNzZXRJZAkAzAgCCQELRGVsZXRlRW50cnkBCQCsAgIJAKwCAgILc2lnbkFydE5mdF8FCmFzc2V0SWRTdHICBl9vd25lcgUDbmlsBQphc3NldElkU3RyCQACAQIVVGhpcyBORlQgaXMgbm90IHlvdXJzCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQITSXZhbGlkIE5GVCBhdHRhY2hlZAECdHgBBnZlcmlmeQAJAPQDAwgFAnR4CWJvZHlCeXRlcwkAkQMCCAUCdHgGcHJvb2ZzAAAIBQJ0eA9zZW5kZXJQdWJsaWNLZXkCzr5k", "height": 3382042, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 6brm4bdMQDpF8DCPsEbTU9snJpaCmw364Gi5dJT1qBB7 Next: Cag9tKgfLoyRWkHvYF8eFaaP2gUYebgUhXBL9xqAy8Vh Diff:
Old | New | Differences | |
---|---|---|---|
1 | - | {-# STDLIB_VERSION | |
1 | + | {-# STDLIB_VERSION 6 #-} | |
2 | 2 | {-# SCRIPT_TYPE ACCOUNT #-} | |
3 | 3 | {-# CONTENT_TYPE DAPP #-} | |
4 | 4 | let nftCreationAddress = base58'3PFQjjDMiZKQZdu5JqTHD7HwgSXyp9Rw9By' | |
14 | 14 | else false | |
15 | 15 | ||
16 | 16 | ||
17 | - | func clearString (str) = makeString(split(makeString(split(makeString(split(str, " – "), " "), "“"), " "), "”"), " ") | |
17 | + | func clearString (str) = makeString(split_4C(makeString(split_4C(makeString(split_4C(str, " – "), " "), "“"), " "), "”"), " ") | |
18 | 18 | ||
19 | 19 | ||
20 | 20 | @Callable(i) |
Old | New | Differences | |
---|---|---|---|
1 | - | {-# STDLIB_VERSION | |
1 | + | {-# STDLIB_VERSION 6 #-} | |
2 | 2 | {-# SCRIPT_TYPE ACCOUNT #-} | |
3 | 3 | {-# CONTENT_TYPE DAPP #-} | |
4 | 4 | let nftCreationAddress = base58'3PFQjjDMiZKQZdu5JqTHD7HwgSXyp9Rw9By' | |
5 | 5 | ||
6 | 6 | let signArtContractAddress = base58'3PDBLdsUrcsiPxNbt8g2gQVoefKgzt3kJzV' | |
7 | 7 | ||
8 | 8 | func checkNFT (asset,issuerAddress) = if (if (if ((asset.issuer.bytes == issuerAddress)) | |
9 | 9 | then (asset.decimals == 0) | |
10 | 10 | else false) | |
11 | 11 | then (asset.reissuable == false) | |
12 | 12 | else false) | |
13 | 13 | then (asset.quantity == 1) | |
14 | 14 | else false | |
15 | 15 | ||
16 | 16 | ||
17 | - | func clearString (str) = makeString(split(makeString(split(makeString(split(str, " – "), " "), "“"), " "), "”"), " ") | |
17 | + | func clearString (str) = makeString(split_4C(makeString(split_4C(makeString(split_4C(str, " – "), " "), "“"), " "), "”"), " ") | |
18 | 18 | ||
19 | 19 | ||
20 | 20 | @Callable(i) | |
21 | 21 | func lock () = { | |
22 | 22 | let addressStr = toString(i.caller) | |
23 | 23 | let assetId = value(value(i.payments[0]).assetId) | |
24 | 24 | let asset = value(assetInfo(assetId)) | |
25 | 25 | let assetDesc = asset.description | |
26 | 26 | if (if ((value(i.payments[0]).amount == 1)) | |
27 | 27 | then checkNFT(asset, signArtContractAddress) | |
28 | 28 | else false) | |
29 | 29 | then { | |
30 | 30 | let partsOfString = split(assetDesc, ",") | |
31 | 31 | let creatorStr = drop(split(partsOfString[0], ":")[1], 1) | |
32 | 32 | let artIdStr = drop(split(partsOfString[1], ":")[1], 1) | |
33 | 33 | let name = getStringValue(Address(signArtContractAddress), ((("art_name_" + artIdStr) + "_") + creatorStr)) | |
34 | 34 | let artDesc = getStringValue(Address(signArtContractAddress), ((("art_desc_" + artIdStr) + "_") + creatorStr)) | |
35 | 35 | let artUrl = getStringValue(Address(signArtContractAddress), ((("art_display_cid_" + artIdStr) + "_") + creatorStr)) | |
36 | 36 | let descPrefix = (((("Created by " + creatorStr) + ". ") + name) + ". ") | |
37 | 37 | let desc = if ((size(artDesc) > 0)) | |
38 | 38 | then (descPrefix + artDesc) | |
39 | 39 | else (descPrefix + "NFT from signArt") | |
40 | 40 | let imageLink = ("https://ipfs.io/ipfs/" + artUrl) | |
41 | 41 | if (if ((size(name) > 0)) | |
42 | 42 | then (size(artUrl) > 0) | |
43 | 43 | else false) | |
44 | 44 | then { | |
45 | 45 | let stakedNFTIdStr = match invoke(Address(nftCreationAddress), "createNFT", [take(clearString(name), 16), take(clearString(desc), 1000), imageLink, "signArt"], nil) { | |
46 | 46 | case x: String => | |
47 | 47 | x | |
48 | 48 | case _ => | |
49 | 49 | throw("Something went wrong during creation of NFT") | |
50 | 50 | } | |
51 | 51 | if ((stakedNFTIdStr == stakedNFTIdStr)) | |
52 | 52 | then $Tuple2([ScriptTransfer(i.caller, 1, fromBase58String(stakedNFTIdStr)), StringEntry((("signArtNft_" + toBase58String(assetId)) + "_owner"), addressStr), StringEntry((("signArtNft_" + stakedNFTIdStr) + "_assetId"), toBase58String(assetId))], stakedNFTIdStr) | |
53 | 53 | else throw("Strict value is not equal to itself.") | |
54 | 54 | } | |
55 | 55 | else throw("Wrong data for create NFT") | |
56 | 56 | } | |
57 | 57 | else throw("Ivalid NFT attached") | |
58 | 58 | } | |
59 | 59 | ||
60 | 60 | ||
61 | 61 | ||
62 | 62 | @Callable(i) | |
63 | 63 | func unlock () = { | |
64 | 64 | let addressStr = toString(i.caller) | |
65 | 65 | let stakedNFTId = value(value(i.payments[0]).assetId) | |
66 | 66 | let stakedNFTAsset = value(assetInfo(stakedNFTId)) | |
67 | 67 | if (if ((value(i.payments[0]).amount == 1)) | |
68 | 68 | then checkNFT(stakedNFTAsset, nftCreationAddress) | |
69 | 69 | else false) | |
70 | 70 | then { | |
71 | 71 | let stakedNFTIdStr = toBase58String(stakedNFTAsset.id) | |
72 | 72 | let assetIdStr = getStringValue((("signArtNft_" + stakedNFTIdStr) + "_assetId")) | |
73 | 73 | let ownerStr = getStringValue((("signArtNft_" + assetIdStr) + "_owner")) | |
74 | 74 | let assetId = fromBase58String(assetIdStr) | |
75 | 75 | let inv = invoke(Address(nftCreationAddress), "burnNFT", nil, [AttachedPayment(stakedNFTAsset.id, 1)]) | |
76 | 76 | if ((inv == inv)) | |
77 | 77 | then if (if ((size(ownerStr) > 0)) | |
78 | 78 | then (ownerStr == addressStr) | |
79 | 79 | else false) | |
80 | 80 | then $Tuple2([ScriptTransfer(i.caller, 1, assetId), DeleteEntry((("signArtNft_" + stakedNFTIdStr) + "_assetId")), DeleteEntry((("signArtNft_" + assetIdStr) + "_owner"))], assetIdStr) | |
81 | 81 | else throw("This NFT is not yours") | |
82 | 82 | else throw("Strict value is not equal to itself.") | |
83 | 83 | } | |
84 | 84 | else throw("Ivalid NFT attached") | |
85 | 85 | } | |
86 | 86 | ||
87 | 87 | ||
88 | 88 | @Verifier(tx) | |
89 | 89 | func verify () = sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey) | |
90 | 90 |
github/deemru/w8io/0e76f2f 39.71 ms ◑