tx · E4i7jQ77KC2GTByYVntVGYsKWwa59F82YqRQiVLZyTyC 3N85YW6NZ9pLYvSdt1ASMQTGxvncnU1vUNx: -0.01000000 Waves 2023.02.11 09:45 [2444614] smart account 3N85YW6NZ9pLYvSdt1ASMQTGxvncnU1vUNx > SELF 0.00000000 Waves
{ "type": 13, "id": "E4i7jQ77KC2GTByYVntVGYsKWwa59F82YqRQiVLZyTyC", "fee": 1000000, "feeAssetId": null, "timestamp": 1676098066831, "version": 2, "chainId": 84, "sender": "3N85YW6NZ9pLYvSdt1ASMQTGxvncnU1vUNx", "senderPublicKey": "EKZmHJ5bK3qKKgRdq8rAamt9qrDbVMLARzRqXoQW258v", "proofs": [ "53mAV5nbyZsm3b6S7pcS8h6fWP2WeYqAAkCzXkQfvtfSazBei7PJrSJVLgsvoTj6oNMiTTDuxfUr8RzHS7Qn1Daj" ], "script": "base64:BgIcCAISCwoJCAgICAgBCAgIEgQKAggIEgUKAwgICAsACXNlcGFyYXRvcgIBXwAEa0J1eQIDYnV5AAZrUHJpY2UCBXByaWNlAAVrU2VsbAIEc2VsbAASbWF4QXVjdGlvbkR1cmF0aW9uAAcABXRlYW1zASCFY5Wj84iOsN4MF44ITr+aP5K7Jts66HaOFtwUIipIfgAFV0FWRVMBAAAEa0JpZAIDYmlkAAxzdGF0dXNGb3JORlQJAJYKBAIET1BFTgIGQ0xPU0VEAghSRVdBUkRFRAIIQ0FOQ0VMRUQAC2RBcHBBZGRyZXNzARoBVEq4T2zewtqT7fSO6Uo2+NVPf5XVVVtdoAEFaXNOZnQBB2Fzc2V0SWQEByRtYXRjaDAJAOwHAQUHYXNzZXRJZAMJAAECBQckbWF0Y2gwAgVBc3NldAQFdG9rZW4FByRtYXRjaDADAwkAAAIIBQV0b2tlbghkZWNpbWFscwAACQAAAggFBXRva2VuCHF1YW50aXR5AAEHCQAAAggFBXRva2VuCnJlaXNzdWFibGUHBwcDAWkBCWNyZWF0ZU5mdAkIbmZ0X25hbWUJbmZ0X293bmVyD25mdF9kQXBwQWRkcmVzcwhuZnRfdHlwZQhuZnRfdGFncxFuZnRfc2VsbGluZ19wcmljZQ9uZnRfZGVzY3JpcHRpb24KbmZ0X29uU2VsbAhuZnRfZGF0YQQIbmV3VG9rZW4JAMIIBQUIbmZ0X25hbWUFD25mdF9kZXNjcmlwdGlvbgABAAAHBAdpc3N1ZUlkCQC4CAEFCG5ld1Rva2VuBAR0eElkCAUBaQ10cmFuc2FjdGlvbklkCQDMCAIFCG5ld1Rva2VuCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMIBQFpBmNhbGxlcgABBQdpc3N1ZUlkCQDMCAIJAQtTdHJpbmdFbnRyeQIJAKwCAgkArAICCQDYBAEFB2lzc3VlSWQFCXNlcGFyYXRvcgIFT3duZXIJAKUIAQgFAWkGY2FsbGVyCQDMCAIJAQtTdHJpbmdFbnRyeQIJAKwCAgkArAICCQDYBAEFB2lzc3VlSWQFCXNlcGFyYXRvcgIIbmZ0X3R5cGUFCG5mdF90eXBlCQDMCAIJAQtTdHJpbmdFbnRyeQIJAKwCAgkArAICCQDYBAEFB2lzc3VlSWQFCXNlcGFyYXRvcgIIbmZ0X3RhZ3MFCG5mdF90YWdzCQDMCAIJAQtTdHJpbmdFbnRyeQIJAKwCAgkArAICCQDYBAEFB2lzc3VlSWQFCXNlcGFyYXRvcgIPbmZ0X2RBcHBBZGRyZXNzBQ9uZnRfZEFwcEFkZHJlc3MJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgkArAICCQDYBAEFB2lzc3VlSWQFCXNlcGFyYXRvcgIRbmZ0X3NlbGxpbmdfcHJpY2UFEW5mdF9zZWxsaW5nX3ByaWNlCQDMCAIJAQtTdHJpbmdFbnRyeQIJAKwCAgkArAICCQDYBAEFB2lzc3VlSWQFCXNlcGFyYXRvcgIKbmZ0X29uU2VsbAUKbmZ0X29uU2VsbAkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgIJAKwCAgkA2AQBBQdpc3N1ZUlkBQlzZXBhcmF0b3ICCG5mdF9kYXRhBQhuZnRfZGF0YQkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgIJAKwCAgkA2AQBBQR0eElkBQlzZXBhcmF0b3ICCWlzc3VlX25mdAkA2AQBBQdpc3N1ZUlkBQNuaWwBaQEHc2VsbE5GVAIFcHJpY2UQcGF5bWVudF9jdXJyZW5jeQQEdHhJZAgFAWkNdHJhbnNhY3Rpb25JZAQGc2VsbGVyCAgFAWkGY2FsbGVyBWJ5dGVzBAskdDAxOTAxMTk4NgkAlAoCCQEFdmFsdWUBCAkAkQMCCAUBaQhwYXltZW50cwAAB2Fzc2V0SWQJAQV2YWx1ZQEICQCRAwIIBQFpCHBheW1lbnRzAAAGYW1vdW50BAZ0b2tlbjAIBQskdDAxOTAxMTk4NgJfMQQHYW1vdW50MAgFCyR0MDE5MDExOTg2Al8yAwkBASEBCQEFaXNOZnQBBQZ0b2tlbjAJAAIBAhBUb2tlbiBpcyBub3QgTkZUCQDMCAIJAQtTdHJpbmdFbnRyeQIJAKwCAgkArAICBQZrUHJpY2UFCXNlcGFyYXRvcgkA2AQBCQEFdmFsdWUBCAkAkQMCCAUBaQhwYXltZW50cwAAB2Fzc2V0SWQFBXByaWNlCQDMCAIJAQtTdHJpbmdFbnRyeQIJAKwCAgkArAICCQClCAEIBQFpBmNhbGxlcgUJc2VwYXJhdG9yBQVrU2VsbAkArAICCQCsAgIJAKwCAgkA2AQBBQZ0b2tlbjAFCXNlcGFyYXRvcgkApAMBBQdhbW91bnQwBRBwYXltZW50X2N1cnJlbmN5BQNuaWwBaQEGYnV5TkZUAwVuZnRJRBFjdXJyZW50X25mdF9vd25lcghwbGF0Zm9ybQQHYXNzZXRJZAkA2QQBBQVuZnRJRAQGYW1vdW50CQEFdmFsdWUBCAkAkQMCCAUBaQhwYXltZW50cwAABmFtb3VudAQQY2hlY2tPd25lcklzU2FtZQQHJG1hdGNoMAkAnQgCBQR0aGlzCQCsAgIJAKwCAgIEbmZ0XwURY3VycmVudF9uZnRfb3duZXICBl9vd25lcgMJAAECBQckbWF0Y2gwAgZTdHJpbmcEAWEFByRtYXRjaDAFAWEHBAVwcmljZQkBEUBleHRyTmF0aXZlKDEwNTgpAQkArAICCQCsAgIJAKwCAgkArAICBQZrUHJpY2UFCXNlcGFyYXRvcgUFbmZ0SUQCAV8FEWN1cnJlbnRfbmZ0X293bmVyBAxwbGF0ZnJvbV9mZWUJAGgCCQBpAgUGYW1vdW50AOgHABkDCQAAAgURY3VycmVudF9uZnRfb3duZXIJAKUIAQgFAWkGY2FsbGVyCQACAQIpY3VycmVudCBPd25lciBvZiBORlQgbm90IGFibGUgdG8gcHVyY2hhc2UDCQAAAggJAJEDAggFAWkIcGF5bWVudHMAAAdhc3NldElkBQV0ZWFtcwkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCAUBaQZjYWxsZXIAAQUHYXNzZXRJZAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCQEHQWRkcmVzcwEJANkEAQURY3VycmVudF9uZnRfb3duZXIFDHBsYXRmcm9tX2ZlZQUFdGVhbXMJAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICCQCsAgIJAKUIAQgFAWkGY2FsbGVyBQlzZXBhcmF0b3IFBGtCdXkJAKwCAgkArAICBQVuZnRJRAUJc2VwYXJhdG9yCQCkAwEFBmFtb3VudAkAzAgCCQELRGVsZXRlRW50cnkBCQCsAgIJAKwCAgIEbmZ0XwURY3VycmVudF9uZnRfb3duZXICBl9vd25lcgkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgIJAKwCAgIEbmZ0XwURY3VycmVudF9uZnRfb3duZXICBl9vd25lcgkApQgBCAUBaQZjYWxsZXIJAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICCQCsAgIFBW5mdElEBQlzZXBhcmF0b3ICBl9vd25lcgkApQgBCAUBaQZjYWxsZXIFA25pbAMJAAACCAkAkQMCCAUBaQhwYXltZW50cwAAB2Fzc2V0SWQFBHVuaXQJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwgFAWkGY2FsbGVyAAEFB2Fzc2V0SWQJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwkBB0FkZHJlc3MBCQDZBAEFEWN1cnJlbnRfbmZ0X293bmVyBQxwbGF0ZnJvbV9mZWUFBHVuaXQJAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICCQCsAgIJAKUIAQgFAWkGY2FsbGVyBQlzZXBhcmF0b3IFBGtCdXkJAKwCAgkArAICBQVuZnRJRAUJc2VwYXJhdG9yCQCkAwEFBmFtb3VudAkAzAgCCQELRGVsZXRlRW50cnkBCQCsAgIJAKwCAgIEbmZ0XwURY3VycmVudF9uZnRfb3duZXICBl9vd25lcgkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgIJAKwCAgIEbmZ0XwURY3VycmVudF9uZnRfb3duZXICBl9vd25lcgkApQgBCAUBaQZjYWxsZXIJAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICCQCsAgIFBW5mdElEBQlzZXBhcmF0b3ICBl9vd25lcgkApQgBCAUBaQZjYWxsZXIFA25pbAUDbmlsAB5F+6I=", "height": 2444614, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 7PorFtDYUTnXgR4GvirsYywJjKWu9HowPfAZf8SmMMge Next: 9XEj2eFUYe9BbDtMeCbhSeZzDeHaNsvuDTq6vWDvsY6m Diff:
Old | New | Differences | |
---|---|---|---|
61 | 61 | ||
62 | 62 | ||
63 | 63 | @Callable(o) | |
64 | - | func buyNFT (H,I) = { | |
64 | + | func buyNFT (H,I,J) = { | |
65 | 65 | let l = fromBase58String(H) | |
66 | - | let | |
67 | - | let | |
66 | + | let K = value(o.payments[0].amount) | |
67 | + | let L = { | |
68 | 68 | let m = getString(this, (("nft_" + I) + "_owner")) | |
69 | 69 | if ($isInstanceOf(m, "String")) | |
70 | 70 | then { | |
71 | - | let | |
72 | - | | |
71 | + | let M = m | |
72 | + | M | |
73 | 73 | } | |
74 | 74 | else false | |
75 | 75 | } | |
76 | 76 | let B = getStringValue(((((c + a) + H) + "_") + I)) | |
77 | + | let N = ((K / 1000) * 25) | |
77 | 78 | if ((I == toString(o.caller))) | |
78 | 79 | then throw("current Owner of NFT not able to purchase") | |
79 | 80 | else if ((o.payments[0].assetId == f)) | |
80 | - | then [ScriptTransfer(o.caller, 1, l), ScriptTransfer(Address(fromBase58String(I)), | |
81 | + | then [ScriptTransfer(o.caller, 1, l), ScriptTransfer(Address(fromBase58String(I)), N, f), StringEntry(((toString(o.caller) + a) + b), ((H + a) + toString(K))), DeleteEntry((("nft_" + I) + "_owner")), StringEntry((("nft_" + I) + "_owner"), toString(o.caller)), StringEntry(((H + a) + "_owner"), toString(o.caller))] | |
81 | 82 | else if ((o.payments[0].assetId == unit)) | |
82 | - | then [ScriptTransfer(o.caller, 1, l), ScriptTransfer(Address(fromBase58String(I)), | |
83 | + | then [ScriptTransfer(o.caller, 1, l), ScriptTransfer(Address(fromBase58String(I)), N, unit), StringEntry(((toString(o.caller) + a) + b), ((H + a) + toString(K))), DeleteEntry((("nft_" + I) + "_owner")), StringEntry((("nft_" + I) + "_owner"), toString(o.caller)), StringEntry(((H + a) + "_owner"), toString(o.caller))] | |
83 | 84 | else nil | |
84 | 85 | } | |
85 | - | ||
86 | - | ||
87 | - | ||
88 | - | @Callable(o) | |
89 | - | func cancelSell (M) = { | |
90 | - | let A = toBase58String(o.transactionId) | |
91 | - | let D = o.caller.bytes | |
92 | - | [StringEntry(((A + M) + "_nft_status"), "CANCELED"), ScriptTransfer(Address(D), 1, fromBase58String(M))] | |
93 | - | } | |
94 | - | ||
95 | - | ||
96 | - | ||
97 | - | @Callable(o) | |
98 | - | func addAuction (N,O,P,Q,C) = { | |
99 | - | let A = toBase58String(o.transactionId) | |
100 | - | let M = value(o.payments[0].assetId) | |
101 | - | let B = value(P) | |
102 | - | let R = (lastBlock.height + Q) | |
103 | - | let S = o.caller.bytes | |
104 | - | let T = { | |
105 | - | let m = getString(this, (((toBase58String(M) + a) + "nft_status_") + toBase58String(S))) | |
106 | - | if ($isInstanceOf(m, "String")) | |
107 | - | then { | |
108 | - | let L = m | |
109 | - | true | |
110 | - | } | |
111 | - | else false | |
112 | - | } | |
113 | - | if ((T == true)) | |
114 | - | then throw("Already in auction list") | |
115 | - | else if ((Q > e)) | |
116 | - | then throw(("Duration is too long. Must be less than or equal to 7 " + toString(e))) | |
117 | - | else if ((o.payments[0].assetId == unit)) | |
118 | - | then throw("NFT not attached") | |
119 | - | else if ((o.payments[0].assetId == f)) | |
120 | - | then throw("NFT not attached") | |
121 | - | else [StringEntry(((A + "nft_start_auction_date") + toBase58String(S)), N), StringEntry(((A + "nft_end_auction_date") + toBase58String(S)), O), StringEntry((A + "_nft_start_price"), P), StringEntry((A + "_nft_owner"), toString(o.caller)), StringEntry((A + "_nft_on_auction"), toBase58String(M)), StringEntry((A + "_previous_bidder"), "none"), StringEntry((A + "_highest_bid"), "0"), StringEntry((A + "_winner_of_nft"), "0"), StringEntry((A + "_bidder_count"), "0"), StringEntry((A + "_nft_status"), "OPEN")] | |
122 | - | } | |
123 | - | ||
124 | - | ||
125 | - | ||
126 | - | @Callable(o) | |
127 | - | func placeBid (U,M,q,V,W) = { | |
128 | - | let A = toBase58String(o.transactionId) | |
129 | - | let S = o.caller.bytes | |
130 | - | let l = fromBase58String(M) | |
131 | - | let X = o.payments[0].amount | |
132 | - | let Y = getStringValue(this, (U + "_highest_bid")) | |
133 | - | let Z = getString(this, (U + "_previous_bidder")) | |
134 | - | let aa = getStringValue(this, (U + "_bidder_count")) | |
135 | - | let ab = getStringValue(this, (U + "_winner_of_nft")) | |
136 | - | let T = getStringValue(this, (U + "_nft_status")) | |
137 | - | if ((T != "OPEN")) | |
138 | - | then throw("Not open for auction") | |
139 | - | else if ((parseIntValue(Y) >= parseIntValue(toString(X)))) | |
140 | - | then throw("Bid is less then starting/highest Bid") | |
141 | - | else if ((Y == "0")) | |
142 | - | then [StringEntry((U + "_highest_bid"), toString(X)), StringEntry((U + "_winner_of_nft"), toBase58String(o.caller.bytes)), StringEntry((U + "_bidder_count"), toString((parseIntValue(aa) + 1))), StringEntry((U + "_nft_id"), toBase58String(l)), StringEntry((U + "_nft_owner"), q), StringEntry((((A + "_") + U) + "_highest_bid"), toString(X)), StringEntry((((A + "_") + U) + "_winner"), toBase58String(o.caller.bytes)), StringEntry((((A + "_") + U) + "_bidder_count"), toString((parseIntValue(aa) + 1))), StringEntry((((A + "_") + U) + "_nft_id"), toBase58String(l)), StringEntry((((A + "_") + U) + "_nft_owner"), q), StringEntry((A + "_bid_for_nft_by"), toBase58String(S)), StringEntry((A + "_bid_price_place"), V), StringEntry((A + "_previous_bid_amount_refund_to_address"), ab), StringEntry((A + "_prevoius_bid_amount_refund"), Y)] | |
143 | - | else [ScriptTransfer(Address(fromBase58String(ab)), parseIntValue(Y), W), StringEntry((A + "_previous_bid_amount_refund_to_address"), ab), StringEntry((A + "_prevoius_bid_amount_refund"), Y), StringEntry((U + "_bidder_count"), toString((parseIntValue(aa) + 1))), StringEntry((U + "_highest_bid"), toString(X)), StringEntry((U + "_winner_of_nft"), toBase58String(o.caller.bytes)), StringEntry((U + "_nft_id"), toBase58String(l)), StringEntry((U + "_nft_owner"), q), StringEntry((((A + "_") + U) + "_highest_bid"), toString(X)), StringEntry((((A + "_") + U) + "_winner"), toBase58String(o.caller.bytes)), StringEntry((((A + "_") + U) + "_bidder_count"), toString((parseIntValue(aa) + 1))), StringEntry((((A + "_") + U) + "_nft_id"), toBase58String(l)), StringEntry((((A + "_") + U) + "_nft_owner"), q), StringEntry((A + "_bid_for_nft_by"), toBase58String(S)), StringEntry((A + "_bid_price_place"), V)] | |
144 | - | } | |
145 | - | ||
146 | - | ||
147 | - | ||
148 | - | @Callable(o) | |
149 | - | func acceptBidOffer (U,M,ac,W) = { | |
150 | - | let A = toBase58String(o.transactionId) | |
151 | - | let S = o.caller.bytes | |
152 | - | let l = fromBase58String(M) | |
153 | - | let ad = getStringValue(this, (U + "_highest_bid")) | |
154 | - | let ae = getStringValue(this, (U + "_winner_of_nft")) | |
155 | - | if ((W == g)) | |
156 | - | then [ScriptTransfer(Address(S), parseIntValue(ad), unit), ScriptTransfer(Address(fromBase58String(ae)), 1, l), StringEntry((A + "_amount_paid_to_owner"), ad), StringEntry((A + "_nft_transfer_to"), ae), StringEntry((A + "_nft_status"), "REWARDED"), StringEntry((U + "_amount_paid_to_owner"), ad), StringEntry((U + "_nft_transfer_to"), ae), StringEntry((U + "_nft_status"), "REWARDED")] | |
157 | - | else if ((W == f)) | |
158 | - | then [ScriptTransfer(Address(S), parseIntValue(ad), f), ScriptTransfer(Address(fromBase58String(ae)), 1, l), StringEntry((A + "_amount_paid_to_owner"), ad), StringEntry((A + "_nft_transfer_to"), ae), StringEntry((A + "_nft_status"), "REWARDED"), StringEntry((U + "_amount_paid_to_owner"), ad), StringEntry((U + "_nft_transfer_to"), ae), StringEntry((U + "_nft_status"), "REWARDED")] | |
159 | - | else nil | |
160 | - | } | |
161 | - | ||
162 | - | ||
163 | - | ||
164 | - | @Callable(o) | |
165 | - | func cancelAuction (U,W) = { | |
166 | - | let A = toBase58String(o.transactionId) | |
167 | - | let S = o.caller.bytes | |
168 | - | let af = getStringValue(this, (U + "_nft_status")) | |
169 | - | let ag = getStringValue(this, (U + "_winner_of_nft")) | |
170 | - | let ah = getStringValue(this, (U + "_nft_owner")) | |
171 | - | let M = getStringValue(this, (U + "_nft_on_auction")) | |
172 | - | let ai = getStringValue(this, (U + "_highest_bid")) | |
173 | - | if ((ag == "0")) | |
174 | - | then [StringEntry(((A + U) + "_nft_status"), "CANCELED"), ScriptTransfer(Address(fromBase58String(ah)), 1, fromBase58String(M))] | |
175 | - | else if ((ag != "0")) | |
176 | - | then [StringEntry((U + "_nft_status"), "CANCELED"), StringEntry((U + "_previous_bid_amount_refund_to_address"), ag), StringEntry((U + "_prevoius_bid_amount_refund"), ai), StringEntry((A + "_nft_status"), "CANCELED"), StringEntry((A + "_previous_bid_amount_refund_to_address"), ag), StringEntry((A + "_prevoius_bid_amount_refund"), ai), ScriptTransfer(Address(fromBase58String(ah)), 1, fromBase58String(M)), ScriptTransfer(Address(fromBase58String(ag)), parseIntValue(ai), W)] | |
177 | - | else nil | |
178 | - | } | |
179 | - | ||
180 | - | ||
181 | - | ||
182 | - | @Callable(o) | |
183 | - | func withdrawBid (aj) = { | |
184 | - | let S = o.caller.bytes | |
185 | - | let ak = getStringValue(this, (aj + "_highest_bid")) | |
186 | - | let al = getStringValue(this, (aj + "_winner")) | |
187 | - | let am = getStringValue(this, (aj + "_nft_id")) | |
188 | - | if ((toBase58String(S) != al)) | |
189 | - | then throw("No bid") | |
190 | - | else [StringEntry((aj + "_nft_bid"), "WITHDRAW"), StringEntry((aj + "_nft_id"), am), StringEntry((aj + "_bidding_price_refund_amount"), ak), ScriptTransfer(o.caller, parseIntValue(ak), unit)] | |
191 | - | } | |
192 | - | ||
193 | - | ||
194 | - | ||
195 | - | @Callable(o) | |
196 | - | func manualFundTransfer (an,ao) = { | |
197 | - | let S = o.caller.bytes | |
198 | - | let ap = fromBase58String(an) | |
199 | - | let J = o.payments[0].amount | |
200 | - | if ((o.payments[0].assetId == unit)) | |
201 | - | then [IntegerEntry((toBase58String(S) + "_transfer"), J), StringEntry((toBase58String(S) + "_transfer_to"), an), ScriptTransfer(Address(ap), J, unit)] | |
202 | - | else if ((o.payments[0].assetId == f)) | |
203 | - | then [IntegerEntry((toBase58String(S) + "_transfer"), J), StringEntry((toBase58String(S) + "_transfer_to"), an), ScriptTransfer(Address(ap), J, f)] | |
204 | - | else nil | |
205 | - | } | |
206 | - | ||
207 | - | ||
208 | - | ||
209 | - | @Callable(o) | |
210 | - | func testBid (aq) = [StringEntry("E8kkFBYCy44JJaq6pAZ6KizsuResi5UKNhbD1WNZwhhY_highest_bid", "0")] | |
211 | 86 | ||
212 | 87 |
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 = 7 | |
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 = $Tuple4("OPEN", "CLOSED", "REWARDED", "CANCELED") | |
21 | 21 | ||
22 | 22 | let j = base58'3MvjAaDYHpS4A5K4CV3kZMMEH9m9JdBSvbq' | |
23 | 23 | ||
24 | 24 | func k (l) = { | |
25 | 25 | let m = assetInfo(l) | |
26 | 26 | if ($isInstanceOf(m, "Asset")) | |
27 | 27 | then { | |
28 | 28 | let n = m | |
29 | 29 | if (if ((n.decimals == 0)) | |
30 | 30 | then (n.quantity == 1) | |
31 | 31 | else false) | |
32 | 32 | then (n.reissuable == false) | |
33 | 33 | else false | |
34 | 34 | } | |
35 | 35 | else false | |
36 | 36 | } | |
37 | 37 | ||
38 | 38 | ||
39 | 39 | @Callable(o) | |
40 | 40 | func createNft (p,q,r,s,t,u,v,w,x) = { | |
41 | 41 | let y = Issue(p, v, 1, 0, false) | |
42 | 42 | let z = calculateAssetId(y) | |
43 | 43 | let A = o.transactionId | |
44 | 44 | [y, ScriptTransfer(o.caller, 1, z), StringEntry(((toBase58String(z) + a) + "Owner"), toString(o.caller)), StringEntry(((toBase58String(z) + a) + "nft_type"), s), StringEntry(((toBase58String(z) + a) + "nft_tags"), t), StringEntry(((toBase58String(z) + a) + "nft_dAppAddress"), r), IntegerEntry(((toBase58String(z) + a) + "nft_selling_price"), u), StringEntry(((toBase58String(z) + a) + "nft_onSell"), w), StringEntry(((toBase58String(z) + a) + "nft_data"), x), StringEntry(((toBase58String(A) + a) + "issue_nft"), toBase58String(z))] | |
45 | 45 | } | |
46 | 46 | ||
47 | 47 | ||
48 | 48 | ||
49 | 49 | @Callable(o) | |
50 | 50 | func sellNFT (B,C) = { | |
51 | 51 | let A = o.transactionId | |
52 | 52 | let D = o.caller.bytes | |
53 | 53 | let E = $Tuple2(value(o.payments[0].assetId), value(o.payments[0].amount)) | |
54 | 54 | let F = E._1 | |
55 | 55 | let G = E._2 | |
56 | 56 | if (!(k(F))) | |
57 | 57 | then throw("Token is not NFT") | |
58 | 58 | else [StringEntry(((c + a) + toBase58String(value(o.payments[0].assetId))), B), StringEntry(((toString(o.caller) + a) + d), (((toBase58String(F) + a) + toString(G)) + C))] | |
59 | 59 | } | |
60 | 60 | ||
61 | 61 | ||
62 | 62 | ||
63 | 63 | @Callable(o) | |
64 | - | func buyNFT (H,I) = { | |
64 | + | func buyNFT (H,I,J) = { | |
65 | 65 | let l = fromBase58String(H) | |
66 | - | let | |
67 | - | let | |
66 | + | let K = value(o.payments[0].amount) | |
67 | + | let L = { | |
68 | 68 | let m = getString(this, (("nft_" + I) + "_owner")) | |
69 | 69 | if ($isInstanceOf(m, "String")) | |
70 | 70 | then { | |
71 | - | let | |
72 | - | | |
71 | + | let M = m | |
72 | + | M | |
73 | 73 | } | |
74 | 74 | else false | |
75 | 75 | } | |
76 | 76 | let B = getStringValue(((((c + a) + H) + "_") + I)) | |
77 | + | let N = ((K / 1000) * 25) | |
77 | 78 | if ((I == toString(o.caller))) | |
78 | 79 | then throw("current Owner of NFT not able to purchase") | |
79 | 80 | else if ((o.payments[0].assetId == f)) | |
80 | - | then [ScriptTransfer(o.caller, 1, l), ScriptTransfer(Address(fromBase58String(I)), | |
81 | + | then [ScriptTransfer(o.caller, 1, l), ScriptTransfer(Address(fromBase58String(I)), N, f), StringEntry(((toString(o.caller) + a) + b), ((H + a) + toString(K))), DeleteEntry((("nft_" + I) + "_owner")), StringEntry((("nft_" + I) + "_owner"), toString(o.caller)), StringEntry(((H + a) + "_owner"), toString(o.caller))] | |
81 | 82 | else if ((o.payments[0].assetId == unit)) | |
82 | - | then [ScriptTransfer(o.caller, 1, l), ScriptTransfer(Address(fromBase58String(I)), | |
83 | + | then [ScriptTransfer(o.caller, 1, l), ScriptTransfer(Address(fromBase58String(I)), N, unit), StringEntry(((toString(o.caller) + a) + b), ((H + a) + toString(K))), DeleteEntry((("nft_" + I) + "_owner")), StringEntry((("nft_" + I) + "_owner"), toString(o.caller)), StringEntry(((H + a) + "_owner"), toString(o.caller))] | |
83 | 84 | else nil | |
84 | 85 | } | |
85 | - | ||
86 | - | ||
87 | - | ||
88 | - | @Callable(o) | |
89 | - | func cancelSell (M) = { | |
90 | - | let A = toBase58String(o.transactionId) | |
91 | - | let D = o.caller.bytes | |
92 | - | [StringEntry(((A + M) + "_nft_status"), "CANCELED"), ScriptTransfer(Address(D), 1, fromBase58String(M))] | |
93 | - | } | |
94 | - | ||
95 | - | ||
96 | - | ||
97 | - | @Callable(o) | |
98 | - | func addAuction (N,O,P,Q,C) = { | |
99 | - | let A = toBase58String(o.transactionId) | |
100 | - | let M = value(o.payments[0].assetId) | |
101 | - | let B = value(P) | |
102 | - | let R = (lastBlock.height + Q) | |
103 | - | let S = o.caller.bytes | |
104 | - | let T = { | |
105 | - | let m = getString(this, (((toBase58String(M) + a) + "nft_status_") + toBase58String(S))) | |
106 | - | if ($isInstanceOf(m, "String")) | |
107 | - | then { | |
108 | - | let L = m | |
109 | - | true | |
110 | - | } | |
111 | - | else false | |
112 | - | } | |
113 | - | if ((T == true)) | |
114 | - | then throw("Already in auction list") | |
115 | - | else if ((Q > e)) | |
116 | - | then throw(("Duration is too long. Must be less than or equal to 7 " + toString(e))) | |
117 | - | else if ((o.payments[0].assetId == unit)) | |
118 | - | then throw("NFT not attached") | |
119 | - | else if ((o.payments[0].assetId == f)) | |
120 | - | then throw("NFT not attached") | |
121 | - | else [StringEntry(((A + "nft_start_auction_date") + toBase58String(S)), N), StringEntry(((A + "nft_end_auction_date") + toBase58String(S)), O), StringEntry((A + "_nft_start_price"), P), StringEntry((A + "_nft_owner"), toString(o.caller)), StringEntry((A + "_nft_on_auction"), toBase58String(M)), StringEntry((A + "_previous_bidder"), "none"), StringEntry((A + "_highest_bid"), "0"), StringEntry((A + "_winner_of_nft"), "0"), StringEntry((A + "_bidder_count"), "0"), StringEntry((A + "_nft_status"), "OPEN")] | |
122 | - | } | |
123 | - | ||
124 | - | ||
125 | - | ||
126 | - | @Callable(o) | |
127 | - | func placeBid (U,M,q,V,W) = { | |
128 | - | let A = toBase58String(o.transactionId) | |
129 | - | let S = o.caller.bytes | |
130 | - | let l = fromBase58String(M) | |
131 | - | let X = o.payments[0].amount | |
132 | - | let Y = getStringValue(this, (U + "_highest_bid")) | |
133 | - | let Z = getString(this, (U + "_previous_bidder")) | |
134 | - | let aa = getStringValue(this, (U + "_bidder_count")) | |
135 | - | let ab = getStringValue(this, (U + "_winner_of_nft")) | |
136 | - | let T = getStringValue(this, (U + "_nft_status")) | |
137 | - | if ((T != "OPEN")) | |
138 | - | then throw("Not open for auction") | |
139 | - | else if ((parseIntValue(Y) >= parseIntValue(toString(X)))) | |
140 | - | then throw("Bid is less then starting/highest Bid") | |
141 | - | else if ((Y == "0")) | |
142 | - | then [StringEntry((U + "_highest_bid"), toString(X)), StringEntry((U + "_winner_of_nft"), toBase58String(o.caller.bytes)), StringEntry((U + "_bidder_count"), toString((parseIntValue(aa) + 1))), StringEntry((U + "_nft_id"), toBase58String(l)), StringEntry((U + "_nft_owner"), q), StringEntry((((A + "_") + U) + "_highest_bid"), toString(X)), StringEntry((((A + "_") + U) + "_winner"), toBase58String(o.caller.bytes)), StringEntry((((A + "_") + U) + "_bidder_count"), toString((parseIntValue(aa) + 1))), StringEntry((((A + "_") + U) + "_nft_id"), toBase58String(l)), StringEntry((((A + "_") + U) + "_nft_owner"), q), StringEntry((A + "_bid_for_nft_by"), toBase58String(S)), StringEntry((A + "_bid_price_place"), V), StringEntry((A + "_previous_bid_amount_refund_to_address"), ab), StringEntry((A + "_prevoius_bid_amount_refund"), Y)] | |
143 | - | else [ScriptTransfer(Address(fromBase58String(ab)), parseIntValue(Y), W), StringEntry((A + "_previous_bid_amount_refund_to_address"), ab), StringEntry((A + "_prevoius_bid_amount_refund"), Y), StringEntry((U + "_bidder_count"), toString((parseIntValue(aa) + 1))), StringEntry((U + "_highest_bid"), toString(X)), StringEntry((U + "_winner_of_nft"), toBase58String(o.caller.bytes)), StringEntry((U + "_nft_id"), toBase58String(l)), StringEntry((U + "_nft_owner"), q), StringEntry((((A + "_") + U) + "_highest_bid"), toString(X)), StringEntry((((A + "_") + U) + "_winner"), toBase58String(o.caller.bytes)), StringEntry((((A + "_") + U) + "_bidder_count"), toString((parseIntValue(aa) + 1))), StringEntry((((A + "_") + U) + "_nft_id"), toBase58String(l)), StringEntry((((A + "_") + U) + "_nft_owner"), q), StringEntry((A + "_bid_for_nft_by"), toBase58String(S)), StringEntry((A + "_bid_price_place"), V)] | |
144 | - | } | |
145 | - | ||
146 | - | ||
147 | - | ||
148 | - | @Callable(o) | |
149 | - | func acceptBidOffer (U,M,ac,W) = { | |
150 | - | let A = toBase58String(o.transactionId) | |
151 | - | let S = o.caller.bytes | |
152 | - | let l = fromBase58String(M) | |
153 | - | let ad = getStringValue(this, (U + "_highest_bid")) | |
154 | - | let ae = getStringValue(this, (U + "_winner_of_nft")) | |
155 | - | if ((W == g)) | |
156 | - | then [ScriptTransfer(Address(S), parseIntValue(ad), unit), ScriptTransfer(Address(fromBase58String(ae)), 1, l), StringEntry((A + "_amount_paid_to_owner"), ad), StringEntry((A + "_nft_transfer_to"), ae), StringEntry((A + "_nft_status"), "REWARDED"), StringEntry((U + "_amount_paid_to_owner"), ad), StringEntry((U + "_nft_transfer_to"), ae), StringEntry((U + "_nft_status"), "REWARDED")] | |
157 | - | else if ((W == f)) | |
158 | - | then [ScriptTransfer(Address(S), parseIntValue(ad), f), ScriptTransfer(Address(fromBase58String(ae)), 1, l), StringEntry((A + "_amount_paid_to_owner"), ad), StringEntry((A + "_nft_transfer_to"), ae), StringEntry((A + "_nft_status"), "REWARDED"), StringEntry((U + "_amount_paid_to_owner"), ad), StringEntry((U + "_nft_transfer_to"), ae), StringEntry((U + "_nft_status"), "REWARDED")] | |
159 | - | else nil | |
160 | - | } | |
161 | - | ||
162 | - | ||
163 | - | ||
164 | - | @Callable(o) | |
165 | - | func cancelAuction (U,W) = { | |
166 | - | let A = toBase58String(o.transactionId) | |
167 | - | let S = o.caller.bytes | |
168 | - | let af = getStringValue(this, (U + "_nft_status")) | |
169 | - | let ag = getStringValue(this, (U + "_winner_of_nft")) | |
170 | - | let ah = getStringValue(this, (U + "_nft_owner")) | |
171 | - | let M = getStringValue(this, (U + "_nft_on_auction")) | |
172 | - | let ai = getStringValue(this, (U + "_highest_bid")) | |
173 | - | if ((ag == "0")) | |
174 | - | then [StringEntry(((A + U) + "_nft_status"), "CANCELED"), ScriptTransfer(Address(fromBase58String(ah)), 1, fromBase58String(M))] | |
175 | - | else if ((ag != "0")) | |
176 | - | then [StringEntry((U + "_nft_status"), "CANCELED"), StringEntry((U + "_previous_bid_amount_refund_to_address"), ag), StringEntry((U + "_prevoius_bid_amount_refund"), ai), StringEntry((A + "_nft_status"), "CANCELED"), StringEntry((A + "_previous_bid_amount_refund_to_address"), ag), StringEntry((A + "_prevoius_bid_amount_refund"), ai), ScriptTransfer(Address(fromBase58String(ah)), 1, fromBase58String(M)), ScriptTransfer(Address(fromBase58String(ag)), parseIntValue(ai), W)] | |
177 | - | else nil | |
178 | - | } | |
179 | - | ||
180 | - | ||
181 | - | ||
182 | - | @Callable(o) | |
183 | - | func withdrawBid (aj) = { | |
184 | - | let S = o.caller.bytes | |
185 | - | let ak = getStringValue(this, (aj + "_highest_bid")) | |
186 | - | let al = getStringValue(this, (aj + "_winner")) | |
187 | - | let am = getStringValue(this, (aj + "_nft_id")) | |
188 | - | if ((toBase58String(S) != al)) | |
189 | - | then throw("No bid") | |
190 | - | else [StringEntry((aj + "_nft_bid"), "WITHDRAW"), StringEntry((aj + "_nft_id"), am), StringEntry((aj + "_bidding_price_refund_amount"), ak), ScriptTransfer(o.caller, parseIntValue(ak), unit)] | |
191 | - | } | |
192 | - | ||
193 | - | ||
194 | - | ||
195 | - | @Callable(o) | |
196 | - | func manualFundTransfer (an,ao) = { | |
197 | - | let S = o.caller.bytes | |
198 | - | let ap = fromBase58String(an) | |
199 | - | let J = o.payments[0].amount | |
200 | - | if ((o.payments[0].assetId == unit)) | |
201 | - | then [IntegerEntry((toBase58String(S) + "_transfer"), J), StringEntry((toBase58String(S) + "_transfer_to"), an), ScriptTransfer(Address(ap), J, unit)] | |
202 | - | else if ((o.payments[0].assetId == f)) | |
203 | - | then [IntegerEntry((toBase58String(S) + "_transfer"), J), StringEntry((toBase58String(S) + "_transfer_to"), an), ScriptTransfer(Address(ap), J, f)] | |
204 | - | else nil | |
205 | - | } | |
206 | - | ||
207 | - | ||
208 | - | ||
209 | - | @Callable(o) | |
210 | - | func testBid (aq) = [StringEntry("E8kkFBYCy44JJaq6pAZ6KizsuResi5UKNhbD1WNZwhhY_highest_bid", "0")] | |
211 | 86 | ||
212 | 87 |
github/deemru/w8io/169f3d6 52.75 ms ◑![]()