tx · 9yfTi81cjTu7xD2BHSxUhMDAx7NHk9u1t6CWWEmpFih6 3N5BTH4bjnXn7AAKoj4sswxytsPGmdXUuTx: -0.01000000 Waves 2023.04.13 13:33 [2532659] smart account 3N5BTH4bjnXn7AAKoj4sswxytsPGmdXUuTx > SELF 0.00000000 Waves
{ "type": 13, "id": "9yfTi81cjTu7xD2BHSxUhMDAx7NHk9u1t6CWWEmpFih6", "fee": 1000000, "feeAssetId": null, "timestamp": 1681382210535, "version": 2, "chainId": 84, "sender": "3N5BTH4bjnXn7AAKoj4sswxytsPGmdXUuTx", "senderPublicKey": "DyeDJ3fgwVVux2WRkxpLU9BbVjTM96AyV58b7bRFzCBx", "proofs": [ "cLokH6aRrVdJDSkT5kVhrvZcxj75w2rfoQ7UWR6igjeRC2tkuE1hyTBC37hiPgTFQmV8HoAPAuK6ee7uhxatiSv" ], "script": "base64:BgIjCAISCwoJCAgICAgBCAgIEgUKAwgICBIGCgQICAgIEgMKAQgMAAlzZXBhcmF0b3ICAV8ABGtCdXkCA2J1eQAGa1ByaWNlAgVwcmljZQAFa1NlbGwCBHNlbGwAEm1heEF1Y3Rpb25EdXJhdGlvbgAeAAV0ZWFtcwEghWOVo/OIjrDeDBeOCE6/mj+SuybbOuh2jhbcFCIqSH4ABVdBVkVTAQAABGtCaWQCA2JpZAAGcGF1c2VkBgAMc3RhdHVzRm9yTkZUCQCWCgQCBE9QRU4CBkNMT1NFRAIIUkVXQVJERUQCCENBTkNFTEVEAAtkQXBwQWRkcmVzcwEaAVRKuE9s3sLak+30julKNvjVT3+V1VVbXaABBWlzTmZ0AQdhc3NldElkBAckbWF0Y2gwCQDsBwEFB2Fzc2V0SWQDCQABAgUHJG1hdGNoMAIFQXNzZXQEBXRva2VuBQckbWF0Y2gwAwMJAAACCAUFdG9rZW4IZGVjaW1hbHMAAAkAAAIIBQV0b2tlbghxdWFudGl0eQABBwkAAAIIBQV0b2tlbgpyZWlzc3VhYmxlBwcHBAFpAQljcmVhdGVOZnQJCG5mdF9uYW1lCW5mdF9vd25lcg9uZnRfZEFwcEFkZHJlc3MIbmZ0X3R5cGUIbmZ0X3RhZ3MRbmZ0X3NlbGxpbmdfcHJpY2UPbmZ0X2Rlc2NyaXB0aW9uCm5mdF9vblNlbGwIbmZ0X2RhdGEECG5ld1Rva2VuCQDCCAUFCG5mdF9uYW1lBQ9uZnRfZGVzY3JpcHRpb24AAQAABwQHaXNzdWVJZAkAuAgBBQhuZXdUb2tlbgQEdHhJZAgFAWkNdHJhbnNhY3Rpb25JZAkAzAgCBQhuZXdUb2tlbgkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCAUBaQZjYWxsZXIAAQUHaXNzdWVJZAkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgIJAKwCAgkA2AQBBQdpc3N1ZUlkBQlzZXBhcmF0b3ICBU93bmVyCQClCAEIBQFpBmNhbGxlcgkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgIJAKwCAgkA2AQBBQdpc3N1ZUlkBQlzZXBhcmF0b3ICCG5mdF90eXBlBQhuZnRfdHlwZQkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgIJAKwCAgkA2AQBBQdpc3N1ZUlkBQlzZXBhcmF0b3ICCG5mdF90YWdzBQhuZnRfdGFncwkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgIJAKwCAgkA2AQBBQdpc3N1ZUlkBQlzZXBhcmF0b3ICD25mdF9kQXBwQWRkcmVzcwUPbmZ0X2RBcHBBZGRyZXNzCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIJAKwCAgkA2AQBBQdpc3N1ZUlkBQlzZXBhcmF0b3ICEW5mdF9zZWxsaW5nX3ByaWNlBRFuZnRfc2VsbGluZ19wcmljZQkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgIJAKwCAgkA2AQBBQdpc3N1ZUlkBQlzZXBhcmF0b3ICCm5mdF9vblNlbGwFCm5mdF9vblNlbGwJAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICCQCsAgIJANgEAQUHaXNzdWVJZAUJc2VwYXJhdG9yAghuZnRfZGF0YQUIbmZ0X2RhdGEJAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICCQCsAgIJANgEAQUEdHhJZAUJc2VwYXJhdG9yAglpc3N1ZV9uZnQJANgEAQUHaXNzdWVJZAUDbmlsAWkBB3NlbGxORlQDBXByaWNlEXJveWFsdHlQZXJjZW50YWdlEHBheW1lbnRfY3VycmVuY3kEBHR4SWQIBQFpDXRyYW5zYWN0aW9uSWQEBnNlbGxlcggIBQFpBmNhbGxlcgVieXRlcwQLJHQwMjM5OTI0ODQJAJQKAgkBBXZhbHVlAQgJAJEDAggFAWkIcGF5bWVudHMAAAdhc3NldElkCQEFdmFsdWUBCAkAkQMCCAUBaQhwYXltZW50cwAABmFtb3VudAQGdG9rZW4wCAULJHQwMjM5OTI0ODQCXzEEB2Ftb3VudDAIBQskdDAyMzk5MjQ4NAJfMgMJAQEhAQkBBWlzTmZ0AQUGdG9rZW4wCQACAQIQVG9rZW4gaXMgbm90IE5GVAkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgIJAKwCAgkA2AQBBQR0eElkBQlzZXBhcmF0b3ICEXJveWFsdHlQZXJjZW50YWdlBRFyb3lhbHR5UGVyY2VudGFnZQkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgIJAKwCAgUGa1ByaWNlBQlzZXBhcmF0b3IJANgEAQkBBXZhbHVlAQgJAJEDAggFAWkIcGF5bWVudHMAAAdhc3NldElkBQVwcmljZQkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgIJAKwCAgkApQgBCAUBaQZjYWxsZXIFCXNlcGFyYXRvcgUFa1NlbGwJAKwCAgkArAICCQCsAgIJANgEAQUGdG9rZW4wBQlzZXBhcmF0b3IJAKQDAQUHYW1vdW50MAUQcGF5bWVudF9jdXJyZW5jeQUDbmlsAWkBBmJ1eU5GVAQFbmZ0SUQRY3VycmVudF9uZnRfb3duZXIHY3JlYXRvchFyb3lhbHR5UGVyY2VudGFnZQQHYXNzZXRJZAkA2QQBBQVuZnRJRAQQY2hlY2tPd25lcklzU2FtZQQHJG1hdGNoMAkAnQgCBQR0aGlzCQCsAgIJAKwCAgIEbmZ0XwURY3VycmVudF9uZnRfb3duZXICBl9vd25lcgMJAAECBQckbWF0Y2gwAgZTdHJpbmcEAWEFByRtYXRjaDAFAWEHBAVwcmljZQkBEUBleHRyTmF0aXZlKDEwNTgpAQkArAICCQCsAgIJAKwCAgkArAICBQZrUHJpY2UFCXNlcGFyYXRvcgUFbmZ0SUQCAV8FEWN1cnJlbnRfbmZ0X293bmVyBAZhbW91bnQJAQV2YWx1ZQEICQCRAwIIBQFpCHBheW1lbnRzAAAGYW1vdW50BAxzZWxsZXJBbW91bnQJAGUCBQZhbW91bnQJAGgCCQBpAgUGYW1vdW50AOgHABkEDHBsYXRmb3JtX2ZlZQkAZQIFBmFtb3VudAUMc2VsbGVyQW1vdW50BA5yb3lhbGl0eUFtb3VudAkAaAIJAGkCBQxzZWxsZXJBbW91bnQAZAkBDXBhcnNlSW50VmFsdWUBBRFyb3lhbHR5UGVyY2VudGFnZQQKc2VsbGVyQ29zdAkAZQIFDHNlbGxlckFtb3VudAUOcm95YWxpdHlBbW91bnQDCQAAAgURY3VycmVudF9uZnRfb3duZXIJAKUIAQgFAWkGY2FsbGVyCQACAQIpY3VycmVudCBPd25lciBvZiBORlQgbm90IGFibGUgdG8gcHVyY2hhc2UDCQAAAggJAJEDAggFAWkIcGF5bWVudHMAAAdhc3NldElkBQV0ZWFtcwkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCAUBaQZjYWxsZXIAAQUHYXNzZXRJZAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCQEHQWRkcmVzcwEJANkEAQURY3VycmVudF9uZnRfb3duZXIFCnNlbGxlckNvc3QFBXRlYW1zCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMJAQdBZGRyZXNzAQkA2QQBBQdjcmVhdG9yBQ5yb3lhbGl0eUFtb3VudAUFdGVhbXMJAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICCQCsAgICBG5mdF8FBW5mdElEAgxwbGF0Zm9ybV9mZWUJAKQDAQUMcGxhdGZvcm1fZmVlCQDMCAIJAQtTdHJpbmdFbnRyeQIJAKwCAgkArAICCQClCAEIBQFpBmNhbGxlcgUJc2VwYXJhdG9yBQRrQnV5CQCsAgIJAKwCAgUFbmZ0SUQFCXNlcGFyYXRvcgkApAMBBQZhbW91bnQJAMwIAgkBC0RlbGV0ZUVudHJ5AQkArAICCQCsAgICBG5mdF8FEWN1cnJlbnRfbmZ0X293bmVyAgZfb3duZXIJAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICCQCsAgICBG5mdF8FEWN1cnJlbnRfbmZ0X293bmVyAgZfb3duZXIJAKUIAQgFAWkGY2FsbGVyCQDMCAIJAQtTdHJpbmdFbnRyeQIJAKwCAgkArAICBQVuZnRJRAUJc2VwYXJhdG9yAgZfb3duZXIJAKUIAQgFAWkGY2FsbGVyBQNuaWwDCQAAAggJAJEDAggFAWkIcGF5bWVudHMAAAdhc3NldElkBQR1bml0CQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMIBQFpBmNhbGxlcgABBQdhc3NldElkCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMJAQdBZGRyZXNzAQkA2QQBBRFjdXJyZW50X25mdF9vd25lcgUKc2VsbGVyQ29zdAUEdW5pdAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCQEHQWRkcmVzcwEJANkEAQUHY3JlYXRvcgUOcm95YWxpdHlBbW91bnQFBHVuaXQJAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICCQCsAgICBG5mdF8FBW5mdElEAgxwbGF0Zm9ybV9mZWUJAKQDAQUMcGxhdGZvcm1fZmVlCQDMCAIJAQtTdHJpbmdFbnRyeQIJAKwCAgkArAICCQClCAEIBQFpBmNhbGxlcgUJc2VwYXJhdG9yBQRrQnV5CQCsAgIJAKwCAgUFbmZ0SUQFCXNlcGFyYXRvcgkApAMBBQZhbW91bnQJAMwIAgkBC0RlbGV0ZUVudHJ5AQkArAICCQCsAgICBG5mdF8FEWN1cnJlbnRfbmZ0X293bmVyAgZfb3duZXIJAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICCQCsAgICBG5mdF8FEWN1cnJlbnRfbmZ0X293bmVyAgZfb3duZXIJAKUIAQgFAWkGY2FsbGVyCQDMCAIJAQtTdHJpbmdFbnRyeQIJAKwCAgkArAICBQVuZnRJRAUJc2VwYXJhdG9yAgZfb3duZXIJAKUIAQgFAWkGY2FsbGVyBQNuaWwFA25pbAFpAQpjYW5jZWxTZWxsAQVuZnRJZAQEdHhJZAkA2AQBCAUBaQ10cmFuc2FjdGlvbklkBAZzZWxsZXIICAUBaQZjYWxsZXIFYnl0ZXMJAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICCQCsAgIFBHR4SWQFBW5mdElkAgtfbmZ0X3N0YXR1cwIIQ0FOQ0VMRUQJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwkBB0FkZHJlc3MBBQZzZWxsZXIAAQkA2QQBBQVuZnRJZAUDbmlsAIvdw44=", "height": 2532659, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 6gipbzXZWbfGxndTdrqYcRaDXbBrBtZrW5msocz5zyYf Next: HA2VBECh3Ec7FEWhqZrK52o9m2xZ65N3fEkTAWg4trwm Diff:
Old | New | Differences | |
---|---|---|---|
79 | 79 | let P = (O - ((O / 1000) * 25)) | |
80 | 80 | let Q = (O - P) | |
81 | 81 | let R = ((P / 100) * parseIntValue(D)) | |
82 | + | let S = (P - R) | |
82 | 83 | if ((K == toString(p.caller))) | |
83 | 84 | then throw("current Owner of NFT not able to purchase") | |
84 | 85 | else if ((p.payments[0].assetId == f)) | |
85 | - | then [ScriptTransfer(p.caller, 1, m), ScriptTransfer(Address(fromBase58String(K)), | |
86 | + | then [ScriptTransfer(p.caller, 1, m), ScriptTransfer(Address(fromBase58String(K)), S, f), ScriptTransfer(Address(fromBase58String(L)), R, f), StringEntry((("nft_" + J) + "platform_fee"), toString(Q)), StringEntry(((toString(p.caller) + a) + b), ((J + a) + toString(O))), DeleteEntry((("nft_" + K) + "_owner")), StringEntry((("nft_" + K) + "_owner"), toString(p.caller)), StringEntry(((J + a) + "_owner"), toString(p.caller))] | |
86 | 87 | else if ((p.payments[0].assetId == unit)) | |
87 | - | then [ScriptTransfer(p.caller, 1, m), ScriptTransfer(Address(fromBase58String(K)), | |
88 | + | then [ScriptTransfer(p.caller, 1, m), ScriptTransfer(Address(fromBase58String(K)), S, unit), ScriptTransfer(Address(fromBase58String(L)), R, unit), StringEntry((("nft_" + J) + "platform_fee"), toString(Q)), StringEntry(((toString(p.caller) + a) + b), ((J + a) + toString(O))), DeleteEntry((("nft_" + K) + "_owner")), StringEntry((("nft_" + K) + "_owner"), toString(p.caller)), StringEntry(((J + a) + "_owner"), toString(p.caller))] | |
88 | 89 | else nil | |
89 | 90 | } | |
90 | 91 | ||
91 | 92 | ||
92 | 93 | ||
93 | 94 | @Callable(p) | |
94 | - | func cancelSell ( | |
95 | + | func cancelSell (T) = { | |
95 | 96 | let B = toBase58String(p.transactionId) | |
96 | 97 | let F = p.caller.bytes | |
97 | - | [StringEntry(((B + | |
98 | + | [StringEntry(((B + T) + "_nft_status"), "CANCELED"), ScriptTransfer(Address(F), 1, fromBase58String(T))] | |
98 | 99 | } | |
99 | 100 | ||
100 | 101 |
Old | New | Differences | |
---|---|---|---|
1 | 1 | {-# STDLIB_VERSION 6 #-} | |
2 | 2 | {-# SCRIPT_TYPE ACCOUNT #-} | |
3 | 3 | {-# CONTENT_TYPE DAPP #-} | |
4 | 4 | let a = "_" | |
5 | 5 | ||
6 | 6 | let b = "buy" | |
7 | 7 | ||
8 | 8 | let c = "price" | |
9 | 9 | ||
10 | 10 | let d = "sell" | |
11 | 11 | ||
12 | 12 | let e = 30 | |
13 | 13 | ||
14 | 14 | let f = base58'9yhJDfWjPpv6tFjWRD1AJyBQwausJf2ZdxzLn86Uknnq' | |
15 | 15 | ||
16 | 16 | let g = base58'' | |
17 | 17 | ||
18 | 18 | let h = "bid" | |
19 | 19 | ||
20 | 20 | let i = true | |
21 | 21 | ||
22 | 22 | let j = $Tuple4("OPEN", "CLOSED", "REWARDED", "CANCELED") | |
23 | 23 | ||
24 | 24 | let k = base58'3MvjAaDYHpS4A5K4CV3kZMMEH9m9JdBSvbq' | |
25 | 25 | ||
26 | 26 | func l (m) = { | |
27 | 27 | let n = assetInfo(m) | |
28 | 28 | if ($isInstanceOf(n, "Asset")) | |
29 | 29 | then { | |
30 | 30 | let o = n | |
31 | 31 | if (if ((o.decimals == 0)) | |
32 | 32 | then (o.quantity == 1) | |
33 | 33 | else false) | |
34 | 34 | then (o.reissuable == false) | |
35 | 35 | else false | |
36 | 36 | } | |
37 | 37 | else false | |
38 | 38 | } | |
39 | 39 | ||
40 | 40 | ||
41 | 41 | @Callable(p) | |
42 | 42 | func createNft (q,r,s,t,u,v,w,x,y) = { | |
43 | 43 | let z = Issue(q, w, 1, 0, false) | |
44 | 44 | let A = calculateAssetId(z) | |
45 | 45 | let B = p.transactionId | |
46 | 46 | [z, ScriptTransfer(p.caller, 1, A), StringEntry(((toBase58String(A) + a) + "Owner"), toString(p.caller)), StringEntry(((toBase58String(A) + a) + "nft_type"), t), StringEntry(((toBase58String(A) + a) + "nft_tags"), u), StringEntry(((toBase58String(A) + a) + "nft_dAppAddress"), s), IntegerEntry(((toBase58String(A) + a) + "nft_selling_price"), v), StringEntry(((toBase58String(A) + a) + "nft_onSell"), x), StringEntry(((toBase58String(A) + a) + "nft_data"), y), StringEntry(((toBase58String(B) + a) + "issue_nft"), toBase58String(A))] | |
47 | 47 | } | |
48 | 48 | ||
49 | 49 | ||
50 | 50 | ||
51 | 51 | @Callable(p) | |
52 | 52 | func sellNFT (C,D,E) = { | |
53 | 53 | let B = p.transactionId | |
54 | 54 | let F = p.caller.bytes | |
55 | 55 | let G = $Tuple2(value(p.payments[0].assetId), value(p.payments[0].amount)) | |
56 | 56 | let H = G._1 | |
57 | 57 | let I = G._2 | |
58 | 58 | if (!(l(H))) | |
59 | 59 | then throw("Token is not NFT") | |
60 | 60 | else [StringEntry(((toBase58String(B) + a) + "royaltyPercentage"), D), StringEntry(((c + a) + toBase58String(value(p.payments[0].assetId))), C), StringEntry(((toString(p.caller) + a) + d), (((toBase58String(H) + a) + toString(I)) + E))] | |
61 | 61 | } | |
62 | 62 | ||
63 | 63 | ||
64 | 64 | ||
65 | 65 | @Callable(p) | |
66 | 66 | func buyNFT (J,K,L,D) = { | |
67 | 67 | let m = fromBase58String(J) | |
68 | 68 | let M = { | |
69 | 69 | let n = getString(this, (("nft_" + K) + "_owner")) | |
70 | 70 | if ($isInstanceOf(n, "String")) | |
71 | 71 | then { | |
72 | 72 | let N = n | |
73 | 73 | N | |
74 | 74 | } | |
75 | 75 | else false | |
76 | 76 | } | |
77 | 77 | let C = getStringValue(((((c + a) + J) + "_") + K)) | |
78 | 78 | let O = value(p.payments[0].amount) | |
79 | 79 | let P = (O - ((O / 1000) * 25)) | |
80 | 80 | let Q = (O - P) | |
81 | 81 | let R = ((P / 100) * parseIntValue(D)) | |
82 | + | let S = (P - R) | |
82 | 83 | if ((K == toString(p.caller))) | |
83 | 84 | then throw("current Owner of NFT not able to purchase") | |
84 | 85 | else if ((p.payments[0].assetId == f)) | |
85 | - | then [ScriptTransfer(p.caller, 1, m), ScriptTransfer(Address(fromBase58String(K)), | |
86 | + | then [ScriptTransfer(p.caller, 1, m), ScriptTransfer(Address(fromBase58String(K)), S, f), ScriptTransfer(Address(fromBase58String(L)), R, f), StringEntry((("nft_" + J) + "platform_fee"), toString(Q)), StringEntry(((toString(p.caller) + a) + b), ((J + a) + toString(O))), DeleteEntry((("nft_" + K) + "_owner")), StringEntry((("nft_" + K) + "_owner"), toString(p.caller)), StringEntry(((J + a) + "_owner"), toString(p.caller))] | |
86 | 87 | else if ((p.payments[0].assetId == unit)) | |
87 | - | then [ScriptTransfer(p.caller, 1, m), ScriptTransfer(Address(fromBase58String(K)), | |
88 | + | then [ScriptTransfer(p.caller, 1, m), ScriptTransfer(Address(fromBase58String(K)), S, unit), ScriptTransfer(Address(fromBase58String(L)), R, unit), StringEntry((("nft_" + J) + "platform_fee"), toString(Q)), StringEntry(((toString(p.caller) + a) + b), ((J + a) + toString(O))), DeleteEntry((("nft_" + K) + "_owner")), StringEntry((("nft_" + K) + "_owner"), toString(p.caller)), StringEntry(((J + a) + "_owner"), toString(p.caller))] | |
88 | 89 | else nil | |
89 | 90 | } | |
90 | 91 | ||
91 | 92 | ||
92 | 93 | ||
93 | 94 | @Callable(p) | |
94 | - | func cancelSell ( | |
95 | + | func cancelSell (T) = { | |
95 | 96 | let B = toBase58String(p.transactionId) | |
96 | 97 | let F = p.caller.bytes | |
97 | - | [StringEntry(((B + | |
98 | + | [StringEntry(((B + T) + "_nft_status"), "CANCELED"), ScriptTransfer(Address(F), 1, fromBase58String(T))] | |
98 | 99 | } | |
99 | 100 | ||
100 | 101 |
github/deemru/w8io/169f3d6 41.34 ms ◑![]()