tx · J9hacNRtGzathpAfCzSpat6yZ2r1FQqoNyFU7hk5iXas 3PEBtiSVLrqyYxGd76vXKu8FFWWsD1c5uYG: -0.01400000 Waves 2021.11.17 16:32 [2860095] smart account 3PEBtiSVLrqyYxGd76vXKu8FFWWsD1c5uYG > SELF 0.00000000 Waves
{ "type": 13, "id": "J9hacNRtGzathpAfCzSpat6yZ2r1FQqoNyFU7hk5iXas", "fee": 1400000, "feeAssetId": null, "timestamp": 1637155946857, "version": 2, "chainId": 87, "sender": "3PEBtiSVLrqyYxGd76vXKu8FFWWsD1c5uYG", "senderPublicKey": "GPiVunnvoUZtBzkfVrpRsMBEf3mWdgRrex2zvzCtM6WQ", "proofs": [ "3pRZe1iedn4EYRbT8rTLrDGtJdqhC3Wd1YMqz8NUk6pgafKSGXh9PbkXjkpPYFJYwqTTTKYVTgP6Rj6Fr49eeHDt" ], "script": "base64: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", "height": 2860095, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: F6UDdSc2s4YE5swmKjvihEDBzeYGcW63AvZG8qpb6zse Next: 5aTg7P4jHz2PvoqxsfZdKpmAM8ojmuDPLwQ8Qzu3K1vi Diff:
Old | New | Differences | |
---|---|---|---|
90 | 90 | let asset = getAssetGenotype(assetId) | |
91 | 91 | if ((asset == "")) | |
92 | 92 | then throw("You can only sell an NFT-duck created in incubator or breeder") | |
93 | - | else [StringEntry((("auction_" + auctionId) + "_status"), "open"), BooleanEntry((("auction_" + auctionId) + "_eggSell"), eggSell), IntegerEntry(kGlobalCounter, (globalCounter + 1)), StringEntry((("auction_" + toBase58String(assetId)) + "_last"), auctionId), StringEntry((("auction_" + auctionId) + "_assetGen"), asset), StringEntry((("auction_" + auctionId) + "_assetId"), toBase58String(assetId)), IntegerEntry((("auction_" + auctionId) + "_startedAt"), lastBlock.timestamp), StringEntry((("auction_" + auctionId) + "_owner"), toString(i.originCaller)), StringEntry((("auction_" + auctionId) + "_description"), description), IntegerEntry((("auction_" + auctionId) + "_startPrice"), startPrice), IntegerEntry((("auction_" + auctionId) + "_instantPrice"), instantPrice), StringEntry((((("address_" + toString(i.originCaller)) + "_auction_") + auctionId) + "_lockedNFT"), toBase58String(assetId))] | |
93 | + | else [StringEntry((("auction_" + auctionId) + "_status"), "open"), BooleanEntry((("auction_" + auctionId) + "_eggSell"), (eggSell == "true")), IntegerEntry(kGlobalCounter, (globalCounter + 1)), StringEntry((("auction_" + toBase58String(assetId)) + "_last"), auctionId), StringEntry((("auction_" + auctionId) + "_assetGen"), asset), StringEntry((("auction_" + auctionId) + "_assetId"), toBase58String(assetId)), IntegerEntry((("auction_" + auctionId) + "_startedAt"), lastBlock.timestamp), StringEntry((("auction_" + auctionId) + "_owner"), toString(i.originCaller)), StringEntry((("auction_" + auctionId) + "_description"), description), IntegerEntry((("auction_" + auctionId) + "_startPrice"), startPrice), IntegerEntry((("auction_" + auctionId) + "_instantPrice"), instantPrice), StringEntry((((("address_" + toString(i.originCaller)) + "_auction_") + auctionId) + "_lockedNFT"), toBase58String(assetId))] | |
94 | 94 | } | |
95 | 95 | ||
96 | 96 |
Old | New | Differences | |
---|---|---|---|
1 | 1 | {-# STDLIB_VERSION 5 #-} | |
2 | 2 | {-# SCRIPT_TYPE ACCOUNT #-} | |
3 | 3 | {-# CONTENT_TYPE DAPP #-} | |
4 | 4 | let incubatorAddress = base58'3PEktVux2RhchSN63DsDo4b4mz4QqzKSeDv' | |
5 | 5 | ||
6 | 6 | let breederAddress = base58'3PDVuU45H7Eh5dmtNbnRNRStGwULA7NY6Hb' | |
7 | 7 | ||
8 | 8 | let feeAggregator = base58'3P6AobNbcQ3ZjcRY37mJPKN8PP9Giz8kgeY' | |
9 | 9 | ||
10 | 10 | let eggAssetId = base58'C1iWsKGqLwjHUndiQ7iXpdmPum9PeCDFfyXBdJJosDRS' | |
11 | 11 | ||
12 | 12 | let kGlobalCounter = "GLOBAL_COUNTER" | |
13 | 13 | ||
14 | 14 | let feePercent = 5 | |
15 | 15 | ||
16 | 16 | func tryGetInteger (key) = { | |
17 | 17 | let val = match getInteger(this, key) { | |
18 | 18 | case b: Int => | |
19 | 19 | b | |
20 | 20 | case _ => | |
21 | 21 | 0 | |
22 | 22 | } | |
23 | 23 | val | |
24 | 24 | } | |
25 | 25 | ||
26 | 26 | ||
27 | 27 | func tryGetString (key) = { | |
28 | 28 | let val = match getString(this, key) { | |
29 | 29 | case b: String => | |
30 | 30 | b | |
31 | 31 | case _ => | |
32 | 32 | "" | |
33 | 33 | } | |
34 | 34 | val | |
35 | 35 | } | |
36 | 36 | ||
37 | 37 | ||
38 | 38 | func tryGetBoolean (key) = match getBoolean(this, key) { | |
39 | 39 | case b: Boolean => | |
40 | 40 | b | |
41 | 41 | case _ => | |
42 | 42 | false | |
43 | 43 | } | |
44 | 44 | ||
45 | 45 | ||
46 | 46 | func getGlobalCounter () = tryGetInteger(kGlobalCounter) | |
47 | 47 | ||
48 | 48 | ||
49 | 49 | func getAssetGenotype (assetId) = { | |
50 | 50 | let asset1 = match getString(Address(incubatorAddress), toBase58String(assetId)) { | |
51 | 51 | case b: String => | |
52 | 52 | b | |
53 | 53 | case _ => | |
54 | 54 | "" | |
55 | 55 | } | |
56 | 56 | if ((asset1 != "")) | |
57 | 57 | then asset1 | |
58 | 58 | else { | |
59 | 59 | let asset2 = match getString(Address(breederAddress), toBase58String(assetId)) { | |
60 | 60 | case c: String => | |
61 | 61 | c | |
62 | 62 | case _ => | |
63 | 63 | "" | |
64 | 64 | } | |
65 | 65 | if ((asset2 != "")) | |
66 | 66 | then asset2 | |
67 | 67 | else "" | |
68 | 68 | } | |
69 | 69 | } | |
70 | 70 | ||
71 | 71 | ||
72 | 72 | func getBidCancelResults (auctionId,bidId) = { | |
73 | 73 | let isEggSell = tryGetBoolean((("auction_" + auctionId) + "_eggSell")) | |
74 | 74 | let paymentAssetId = if ((isEggSell == true)) | |
75 | 75 | then eggAssetId | |
76 | 76 | else unit | |
77 | 77 | let assetId = getStringValue(this, (("auction_" + auctionId) + "_assetId")) | |
78 | 78 | let bidAuthor = tryGetString((((("auction_" + auctionId) + "_bid_") + bidId) + "_author")) | |
79 | 79 | let bidAmount = tryGetInteger((((("auction_" + auctionId) + "_bid_") + bidId) + "_amount")) | |
80 | 80 | [StringEntry((((("assetId_" + assetId) + "_bid_") + bidId) + "_data"), (((((("{\"auctionId\": \"" + auctionId) + "\", \"author\": \"") + bidAuthor) + "\", \"amount\": \"") + toString(bidAmount)) + "\", \"status\": \"cancelled\"}")), StringEntry((((("auction_" + auctionId) + "_bid_") + bidId) + "_status"), "cancelled"), DeleteEntry(((((("address_" + bidAuthor) + "_auction_") + auctionId) + "_bid_") + bidId)), ScriptTransfer(Address(fromBase58String(bidAuthor)), bidAmount, paymentAssetId)] | |
81 | 81 | } | |
82 | 82 | ||
83 | 83 | ||
84 | 84 | @Callable(i) | |
85 | 85 | func initAuction (startPrice,instantPrice,description,eggSell) = { | |
86 | 86 | let globalCounter = getGlobalCounter() | |
87 | 87 | let auctionId = (toBase58String(i.transactionId) + toString(globalCounter)) | |
88 | 88 | let pmt = value(i.payments[0]) | |
89 | 89 | let assetId = value(pmt.assetId) | |
90 | 90 | let asset = getAssetGenotype(assetId) | |
91 | 91 | if ((asset == "")) | |
92 | 92 | then throw("You can only sell an NFT-duck created in incubator or breeder") | |
93 | - | else [StringEntry((("auction_" + auctionId) + "_status"), "open"), BooleanEntry((("auction_" + auctionId) + "_eggSell"), eggSell), IntegerEntry(kGlobalCounter, (globalCounter + 1)), StringEntry((("auction_" + toBase58String(assetId)) + "_last"), auctionId), StringEntry((("auction_" + auctionId) + "_assetGen"), asset), StringEntry((("auction_" + auctionId) + "_assetId"), toBase58String(assetId)), IntegerEntry((("auction_" + auctionId) + "_startedAt"), lastBlock.timestamp), StringEntry((("auction_" + auctionId) + "_owner"), toString(i.originCaller)), StringEntry((("auction_" + auctionId) + "_description"), description), IntegerEntry((("auction_" + auctionId) + "_startPrice"), startPrice), IntegerEntry((("auction_" + auctionId) + "_instantPrice"), instantPrice), StringEntry((((("address_" + toString(i.originCaller)) + "_auction_") + auctionId) + "_lockedNFT"), toBase58String(assetId))] | |
93 | + | else [StringEntry((("auction_" + auctionId) + "_status"), "open"), BooleanEntry((("auction_" + auctionId) + "_eggSell"), (eggSell == "true")), IntegerEntry(kGlobalCounter, (globalCounter + 1)), StringEntry((("auction_" + toBase58String(assetId)) + "_last"), auctionId), StringEntry((("auction_" + auctionId) + "_assetGen"), asset), StringEntry((("auction_" + auctionId) + "_assetId"), toBase58String(assetId)), IntegerEntry((("auction_" + auctionId) + "_startedAt"), lastBlock.timestamp), StringEntry((("auction_" + auctionId) + "_owner"), toString(i.originCaller)), StringEntry((("auction_" + auctionId) + "_description"), description), IntegerEntry((("auction_" + auctionId) + "_startPrice"), startPrice), IntegerEntry((("auction_" + auctionId) + "_instantPrice"), instantPrice), StringEntry((((("address_" + toString(i.originCaller)) + "_auction_") + auctionId) + "_lockedNFT"), toBase58String(assetId))] | |
94 | 94 | } | |
95 | 95 | ||
96 | 96 | ||
97 | 97 | ||
98 | 98 | @Callable(i) | |
99 | 99 | func cancelAuction (auctionId) = { | |
100 | 100 | let auctionOwner = tryGetString((("auction_" + auctionId) + "_owner")) | |
101 | 101 | if ((toString(i.originCaller) != auctionOwner)) | |
102 | 102 | then throw("Only allowed to auction owner") | |
103 | 103 | else if ((tryGetString((("auction_" + auctionId) + "_status")) != "open")) | |
104 | 104 | then throw("auction is close") | |
105 | 105 | else [StringEntry((("auction_" + auctionId) + "_status"), "cancelled"), DeleteEntry((((("address_" + auctionOwner) + "_auction_") + auctionId) + "_lockedNFT")), ScriptTransfer(i.originCaller, 1, fromBase58String(getStringValue(this, (("auction_" + auctionId) + "_assetId"))))] | |
106 | 106 | } | |
107 | 107 | ||
108 | 108 | ||
109 | 109 | ||
110 | 110 | @Callable(i) | |
111 | 111 | func instantBuy (auctionId) = { | |
112 | 112 | let isEggSell = tryGetBoolean((("auction_" + auctionId) + "_eggSell")) | |
113 | 113 | let paymentAssetId = if ((isEggSell == true)) | |
114 | 114 | then eggAssetId | |
115 | 115 | else unit | |
116 | 116 | let paymentAssetName = if ((isEggSell == true)) | |
117 | 117 | then "EGG" | |
118 | 118 | else "WAVES" | |
119 | 119 | let pmt = value(i.payments[0]) | |
120 | 120 | let amount = pmt.amount | |
121 | 121 | let assetId = tryGetString((("auction_" + auctionId) + "_assetId")) | |
122 | 122 | let bidId = toBase58String(i.transactionId) | |
123 | 123 | let auctionStatus = tryGetString((("auction_" + auctionId) + "_status")) | |
124 | 124 | if ((pmt.assetId != paymentAssetId)) | |
125 | 125 | then throw((("Auction does only support " + paymentAssetName) + " payments.")) | |
126 | 126 | else if ((auctionStatus != "open")) | |
127 | 127 | then throw("Auction is closed. You cannot place a bid.") | |
128 | 128 | else { | |
129 | 129 | let instantPrice = tryGetInteger((("auction_" + auctionId) + "_instantPrice")) | |
130 | 130 | if ((instantPrice > amount)) | |
131 | 131 | then throw(("For instant purchase you need to pay at least " + toString(instantPrice))) | |
132 | 132 | else { | |
133 | 133 | let auctionOwner = tryGetString((("auction_" + auctionId) + "_owner")) | |
134 | 134 | let recordPrice = tryGetInteger((assetId + "_recordPrice")) | |
135 | 135 | let newRecordPrice = max([recordPrice, amount]) | |
136 | 136 | [StringEntry((("auction_" + auctionId) + "_status"), "finished"), IntegerEntry((("auction_" + auctionId) + "_finalPrice"), amount), IntegerEntry((assetId + "_recordPrice"), newRecordPrice), StringEntry((((("assetId_" + assetId) + "_bid_") + bidId) + "_data"), (((((("{\"auctionId\": \"" + auctionId) + "\", \"author\": \"") + toString(i.originCaller)) + "\", \"amount\": \"") + toString(amount)) + "\", \"status\": \"finished\"}")), DeleteEntry((((("address_" + auctionOwner) + "_auction_") + auctionId) + "_lockedNFT")), ScriptTransfer(i.originCaller, 1, fromBase58String(getStringValue(this, (("auction_" + auctionId) + "_assetId")))), ScriptTransfer(addressFromStringValue(auctionOwner), fraction(amount, (100 - feePercent), 100), paymentAssetId), ScriptTransfer(Address(feeAggregator), fraction(amount, feePercent, 100), paymentAssetId)] | |
137 | 137 | } | |
138 | 138 | } | |
139 | 139 | } | |
140 | 140 | ||
141 | 141 | ||
142 | 142 | ||
143 | 143 | @Callable(i) | |
144 | 144 | func placeBid (auctionId) = { | |
145 | 145 | let isEggSell = tryGetBoolean((("auction_" + auctionId) + "_eggSell")) | |
146 | 146 | let paymentAssetId = if ((isEggSell == true)) | |
147 | 147 | then eggAssetId | |
148 | 148 | else unit | |
149 | 149 | let paymentAssetName = if ((isEggSell == true)) | |
150 | 150 | then "EGG" | |
151 | 151 | else "WAVES" | |
152 | 152 | let pmt = value(i.payments[0]) | |
153 | 153 | let amount = pmt.amount | |
154 | 154 | let bidId = toBase58String(i.transactionId) | |
155 | 155 | let assetId = getStringValue(this, (("auction_" + auctionId) + "_assetId")) | |
156 | 156 | if ((pmt.assetId != paymentAssetId)) | |
157 | 157 | then throw((("Auction does only support " + paymentAssetName) + " payments.")) | |
158 | 158 | else { | |
159 | 159 | let minPrice = tryGetInteger((("auction_" + auctionId) + "_startPrice")) | |
160 | 160 | if ((minPrice > amount)) | |
161 | 161 | then throw(("The minimal initial price is set as " + toString(minPrice))) | |
162 | 162 | else [StringEntry((((("auction_" + auctionId) + "_bid_") + bidId) + "_author"), toString(i.originCaller)), StringEntry((((("assetId_" + assetId) + "_bid_") + bidId) + "_data"), (((((("{\"auctionId\": \"" + auctionId) + "\", \"author\": \"") + toString(i.originCaller)) + "\", \"amount\": \"") + toString(amount)) + "\", \"status\": \"open\"}")), IntegerEntry((((("auction_" + auctionId) + "_bid_") + bidId) + "_amount"), amount), StringEntry(((((("address_" + toString(i.originCaller)) + "_auction_") + auctionId) + "_bid_") + bidId), assetId), StringEntry((((("auction_" + auctionId) + "_bid_") + bidId) + "_status"), "open")] | |
163 | 163 | } | |
164 | 164 | } | |
165 | 165 | ||
166 | 166 | ||
167 | 167 | ||
168 | 168 | @Callable(i) | |
169 | 169 | func cancelBid (auctionId,bidId) = { | |
170 | 170 | let assetId = getStringValue(this, (("auction_" + auctionId) + "_assetId")) | |
171 | 171 | let bidAuthor = tryGetString((((("auction_" + auctionId) + "_bid_") + bidId) + "_author")) | |
172 | 172 | let bidAmount = tryGetInteger((((("auction_" + auctionId) + "_bid_") + bidId) + "_amount")) | |
173 | 173 | if ((toString(i.originCaller) != bidAuthor)) | |
174 | 174 | then throw("Only allowed to the bid author") | |
175 | 175 | else if ((tryGetString((((("auction_" + auctionId) + "_bid_") + bidId) + "_status")) != "open")) | |
176 | 176 | then throw("bid is not open") | |
177 | 177 | else getBidCancelResults(auctionId, bidId) | |
178 | 178 | } | |
179 | 179 | ||
180 | 180 | ||
181 | 181 | ||
182 | 182 | @Callable(i) | |
183 | 183 | func cancelOutdatedBid (auctionId,bidId) = throw("to be released") | |
184 | 184 | ||
185 | 185 | ||
186 | 186 | ||
187 | 187 | @Callable(i) | |
188 | 188 | func acceptBid (auctionId,bidId) = { | |
189 | 189 | let isEggSell = tryGetBoolean((("auction_" + auctionId) + "_eggSell")) | |
190 | 190 | let paymentAssetId = if ((isEggSell == true)) | |
191 | 191 | then eggAssetId | |
192 | 192 | else unit | |
193 | 193 | let auctionOwner = tryGetString((("auction_" + auctionId) + "_owner")) | |
194 | 194 | let bidAuthor = tryGetString((((("auction_" + auctionId) + "_bid_") + bidId) + "_author")) | |
195 | 195 | let bidAmount = tryGetInteger((((("auction_" + auctionId) + "_bid_") + bidId) + "_amount")) | |
196 | 196 | let bidStatus = tryGetString((((("auction_" + auctionId) + "_bid_") + bidId) + "_status")) | |
197 | 197 | let assetId = tryGetString((("auction_" + auctionId) + "_assetId")) | |
198 | 198 | if ((toString(i.originCaller) != auctionOwner)) | |
199 | 199 | then throw("Only allowed to auction owner") | |
200 | 200 | else if ((bidStatus != "open")) | |
201 | 201 | then throw("Bid was cancelled and cannot be accepted") | |
202 | 202 | else if ((tryGetString((("auction_" + auctionId) + "_status")) != "open")) | |
203 | 203 | then throw("Auction was closed") | |
204 | 204 | else { | |
205 | 205 | let recordPrice = tryGetInteger((assetId + "_recordPrice")) | |
206 | 206 | let newRecordPrice = max([recordPrice, bidAmount]) | |
207 | 207 | [StringEntry((((("auction_" + auctionId) + "_bid_") + bidId) + "_status"), "finished"), StringEntry((("auction_" + auctionId) + "_status"), "finished"), StringEntry((((("assetId_" + assetId) + "_bid_") + bidId) + "_data"), (((((("{\"auctionId\": \"" + auctionId) + "\", \"author\": \"") + toString(i.originCaller)) + "\", \"amount\": \"") + toString(bidAmount)) + "\", \"status\": \"finished\"}")), IntegerEntry((("auction_" + auctionId) + "_finalPrice"), bidAmount), IntegerEntry((assetId + "_recordPrice"), newRecordPrice), DeleteEntry(((((("address_" + bidAuthor) + "_auction_") + auctionId) + "_bid_") + bidId)), DeleteEntry((((("address_" + auctionOwner) + "_auction_") + auctionId) + "_lockedNFT")), ScriptTransfer(i.caller, fraction(bidAmount, (100 - feePercent), 100), paymentAssetId), ScriptTransfer(Address(feeAggregator), fraction(bidAmount, feePercent, 100), paymentAssetId), ScriptTransfer(addressFromStringValue(bidAuthor), 1, fromBase58String(assetId))] | |
208 | 208 | } | |
209 | 209 | } | |
210 | 210 | ||
211 | 211 | ||
212 | 212 | @Verifier(tx) | |
213 | 213 | func verify () = sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey) | |
214 | 214 |
github/deemru/w8io/0e76f2f 59.41 ms ◑