2022.01.25 15:11 [2959464] smart account 3PEBtiSVLrqyYxGd76vXKu8FFWWsD1c5uYG > SELF 0.00000000 Waves

{ "type": 13, "id": "6twEjqjcC1MheLvqEpZHBnFYiN3VaBVTqTu8yc8Modjz", "fee": 1400000, "feeAssetId": null, "timestamp": 1643112700491, "version": 2, "chainId": 87, "sender": "3PEBtiSVLrqyYxGd76vXKu8FFWWsD1c5uYG", "senderPublicKey": "GPiVunnvoUZtBzkfVrpRsMBEf3mWdgRrex2zvzCtM6WQ", "proofs": [ "5Wkj9v98Jpv9cdj3inDtZKhrmVWHEdm7kz3byXMcs8wS2J8QVSTBR1HLqrRFwwoVraJYfWjmXZdhgebgJqGpkRRp" ], "script": "base64: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", "height": 2959464, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 4w5TVgDGDpqD8t26yrjef4yKG2cNxnzU92tw26bo1anW Next: 7gc6qjgLVtT8jEt7HPrb8cqohJXdkqV4JKqS49kuUEL7 Diff:
OldNewDifferences
9494 let pmt = value(i.payments[0])
9595 let assetId = value(pmt.assetId)
9696 let asset = getAssetGenotype(assetId)
97- if ((asset == ""))
98- then throw("You can only sell an NFT-duck created in incubator or breeder")
99- 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), BooleanEntry((("auction_" + auctionId) + "_isArtefact"), (value(assetInfo(assetId)).issuer == Address(artefactsAddress))), IntegerEntry((("auction_" + auctionId) + "_instantPrice"), instantPrice), StringEntry((((("address_" + toString(i.originCaller)) + "_auction_") + auctionId) + "_lockedNFT"), toBase58String(assetId))]
97+ if (true)
98+ then throw("Maintainance...")
99+ else if ((asset == ""))
100+ then throw("You can only sell an NFT-duck created in incubator or breeder")
101+ 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), BooleanEntry((("auction_" + auctionId) + "_isArtefact"), (value(assetInfo(assetId)).issuer == Address(artefactsAddress))), IntegerEntry((("auction_" + auctionId) + "_instantPrice"), instantPrice), StringEntry((((("address_" + toString(i.originCaller)) + "_auction_") + auctionId) + "_lockedNFT"), toBase58String(assetId))]
100102 }
101103
102104
104106 @Callable(i)
105107 func cancelAuction (auctionId) = {
106108 let auctionOwner = tryGetString((("auction_" + auctionId) + "_owner"))
107- if ((toString(i.originCaller) != auctionOwner))
108- then throw("Only allowed to auction owner")
109- else if ((tryGetString((("auction_" + auctionId) + "_status")) != "open"))
110- then throw("auction is close")
111- else [StringEntry((("auction_" + auctionId) + "_status"), "cancelled"), DeleteEntry((((("address_" + auctionOwner) + "_auction_") + auctionId) + "_lockedNFT")), ScriptTransfer(i.originCaller, 1, fromBase58String(getStringValue(this, (("auction_" + auctionId) + "_assetId"))))]
109+ if (true)
110+ then throw("Maintainance...")
111+ else if ((toString(i.originCaller) != auctionOwner))
112+ then throw("Only allowed to auction owner")
113+ else if ((tryGetString((("auction_" + auctionId) + "_status")) != "open"))
114+ then throw("auction is close")
115+ else [StringEntry((("auction_" + auctionId) + "_status"), "cancelled"), DeleteEntry((((("address_" + auctionOwner) + "_auction_") + auctionId) + "_lockedNFT")), ScriptTransfer(i.originCaller, 1, fromBase58String(getStringValue(this, (("auction_" + auctionId) + "_assetId"))))]
112116 }
113117
114118
130134 let finalFee = if ((tryGetBoolean((("auction_" + auctionId) + "_isArtefact")) == true))
131135 then artefactsFeePercent
132136 else feePercent
133- if ((pmt.assetId != paymentAssetId))
134- then throw((("Auction does only support " + paymentAssetName) + " payments."))
135- else if ((auctionStatus != "open"))
136- then throw("Auction is closed. You cannot place a bid.")
137- else {
138- let instantPrice = tryGetInteger((("auction_" + auctionId) + "_instantPrice"))
139- if ((instantPrice > amount))
140- then throw(("For instant purchase you need to pay at least " + toString(instantPrice)))
141- else {
142- let auctionOwner = tryGetString((("auction_" + auctionId) + "_owner"))
143- let recordPrice = tryGetInteger((assetId + "_recordPrice"))
144- let newRecordPrice = max([recordPrice, amount])
137+ if (true)
138+ then throw("Maintainance...")
139+ else if ((pmt.assetId != paymentAssetId))
140+ then throw((("Auction does only support " + paymentAssetName) + " payments."))
141+ else if ((auctionStatus != "open"))
142+ then throw("Auction is closed. You cannot place a bid.")
143+ else {
144+ let instantPrice = tryGetInteger((("auction_" + auctionId) + "_instantPrice"))
145+ if ((instantPrice > amount))
146+ then throw(("For instant purchase you need to pay at least " + toString(instantPrice)))
147+ else {
148+ let auctionOwner = tryGetString((("auction_" + auctionId) + "_owner"))
149+ let recordPrice = tryGetInteger((assetId + "_recordPrice"))
150+ let newRecordPrice = max([recordPrice, amount])
145151 [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 - finalFee), 100), paymentAssetId), ScriptTransfer(Address(feeAggregator), fraction(amount, finalFee, 100), paymentAssetId)]
146- }
147- }
152+ }
153+ }
148154 }
149155
150156
162168 let amount = pmt.amount
163169 let bidId = toBase58String(i.transactionId)
164170 let assetId = getStringValue(this, (("auction_" + auctionId) + "_assetId"))
165- if ((pmt.assetId != paymentAssetId))
166- then throw((("Auction does only support " + paymentAssetName) + " payments."))
167- else {
168- let minPrice = tryGetInteger((("auction_" + auctionId) + "_startPrice"))
169- if ((minPrice > amount))
170- then throw(("The minimal initial price is set as " + toString(minPrice)))
171- 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")]
172- }
171+ if (true)
172+ then throw("Maintainance...")
173+ else if ((pmt.assetId != paymentAssetId))
174+ then throw((("Auction does only support " + paymentAssetName) + " payments."))
175+ else {
176+ let minPrice = tryGetInteger((("auction_" + auctionId) + "_startPrice"))
177+ if ((minPrice > amount))
178+ then throw(("The minimal initial price is set as " + toString(minPrice)))
179+ 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")]
180+ }
173181 }
174182
175183
179187 let assetId = getStringValue(this, (("auction_" + auctionId) + "_assetId"))
180188 let bidAuthor = tryGetString((((("auction_" + auctionId) + "_bid_") + bidId) + "_author"))
181189 let bidAmount = tryGetInteger((((("auction_" + auctionId) + "_bid_") + bidId) + "_amount"))
182- if ((toString(i.originCaller) != bidAuthor))
183- then throw("Only allowed to the bid author")
184- else if ((tryGetString((((("auction_" + auctionId) + "_bid_") + bidId) + "_status")) != "open"))
185- then throw("bid is not open")
186- else getBidCancelResults(auctionId, bidId)
190+ if (true)
191+ then throw("Maintainance...")
192+ else if ((toString(i.originCaller) != bidAuthor))
193+ then throw("Only allowed to the bid author")
194+ else if ((tryGetString((((("auction_" + auctionId) + "_bid_") + bidId) + "_status")) != "open"))
195+ then throw("bid is not open")
196+ else getBidCancelResults(auctionId, bidId)
187197 }
188198
189199
207217 let finalFee = if ((tryGetBoolean((("auction_" + auctionId) + "_isArtefact")) == true))
208218 then artefactsFeePercent
209219 else feePercent
210- if ((toString(i.originCaller) != auctionOwner))
211- then throw("Only allowed to auction owner")
212- else if ((bidStatus != "open"))
213- then throw("Bid was cancelled and cannot be accepted")
214- else if ((tryGetString((("auction_" + auctionId) + "_status")) != "open"))
215- then throw("Auction was closed")
216- else {
217- let recordPrice = tryGetInteger((assetId + "_recordPrice"))
218- let newRecordPrice = max([recordPrice, bidAmount])
220+ if (true)
221+ then throw("Maintainance...")
222+ else if ((toString(i.originCaller) != auctionOwner))
223+ then throw("Only allowed to auction owner")
224+ else if ((bidStatus != "open"))
225+ then throw("Bid was cancelled and cannot be accepted")
226+ else if ((tryGetString((("auction_" + auctionId) + "_status")) != "open"))
227+ then throw("Auction was closed")
228+ else {
229+ let recordPrice = tryGetInteger((assetId + "_recordPrice"))
230+ let newRecordPrice = max([recordPrice, bidAmount])
219231 [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.originCaller, fraction(bidAmount, (100 - finalFee), 100), paymentAssetId), ScriptTransfer(Address(feeAggregator), fraction(bidAmount, finalFee, 100), paymentAssetId), ScriptTransfer(addressFromStringValue(bidAuthor), 1, fromBase58String(assetId))]
220- }
232+ }
221233 }
222234
223235
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 5 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let incubatorAddress = base58'3PEktVux2RhchSN63DsDo4b4mz4QqzKSeDv'
55
66 let breederAddress = base58'3PDVuU45H7Eh5dmtNbnRNRStGwULA7NY6Hb'
77
88 let artefactsAddress = base58'3P5E9xamcWoymiqLx8ZdmR7o4fJSRMGp1WR'
99
1010 let feeAggregator = base58'3P6AobNbcQ3ZjcRY37mJPKN8PP9Giz8kgeY'
1111
1212 let eggAssetId = base58'C1iWsKGqLwjHUndiQ7iXpdmPum9PeCDFfyXBdJJosDRS'
1313
1414 let kGlobalCounter = "GLOBAL_COUNTER"
1515
1616 let feePercent = 5
1717
1818 let artefactsFeePercent = 20
1919
2020 func tryGetInteger (key) = {
2121 let val = match getInteger(this, key) {
2222 case b: Int =>
2323 b
2424 case _ =>
2525 0
2626 }
2727 val
2828 }
2929
3030
3131 func tryGetString (key) = {
3232 let val = match getString(this, key) {
3333 case b: String =>
3434 b
3535 case _ =>
3636 ""
3737 }
3838 val
3939 }
4040
4141
4242 func tryGetBoolean (key) = match getBoolean(this, key) {
4343 case b: Boolean =>
4444 b
4545 case _ =>
4646 false
4747 }
4848
4949
5050 func getGlobalCounter () = tryGetInteger(kGlobalCounter)
5151
5252
5353 func getAssetGenotype (assetId) = if ((value(assetInfo(assetId)).issuer == Address(artefactsAddress)))
5454 then "ART"
5555 else {
5656 let asset1 = match getString(Address(incubatorAddress), toBase58String(assetId)) {
5757 case b: String =>
5858 b
5959 case _ =>
6060 ""
6161 }
6262 if ((asset1 != ""))
6363 then asset1
6464 else {
6565 let asset2 = match getString(Address(breederAddress), toBase58String(assetId)) {
6666 case c: String =>
6767 c
6868 case _ =>
6969 ""
7070 }
7171 if ((asset2 != ""))
7272 then asset2
7373 else ""
7474 }
7575 }
7676
7777
7878 func getBidCancelResults (auctionId,bidId) = {
7979 let isEggSell = tryGetBoolean((("auction_" + auctionId) + "_eggSell"))
8080 let paymentAssetId = if ((isEggSell == true))
8181 then eggAssetId
8282 else unit
8383 let assetId = getStringValue(this, (("auction_" + auctionId) + "_assetId"))
8484 let bidAuthor = tryGetString((((("auction_" + auctionId) + "_bid_") + bidId) + "_author"))
8585 let bidAmount = tryGetInteger((((("auction_" + auctionId) + "_bid_") + bidId) + "_amount"))
8686 [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)]
8787 }
8888
8989
9090 @Callable(i)
9191 func initAuction (startPrice,instantPrice,description,eggSell) = {
9292 let globalCounter = getGlobalCounter()
9393 let auctionId = (toBase58String(i.transactionId) + toString(globalCounter))
9494 let pmt = value(i.payments[0])
9595 let assetId = value(pmt.assetId)
9696 let asset = getAssetGenotype(assetId)
97- if ((asset == ""))
98- then throw("You can only sell an NFT-duck created in incubator or breeder")
99- 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), BooleanEntry((("auction_" + auctionId) + "_isArtefact"), (value(assetInfo(assetId)).issuer == Address(artefactsAddress))), IntegerEntry((("auction_" + auctionId) + "_instantPrice"), instantPrice), StringEntry((((("address_" + toString(i.originCaller)) + "_auction_") + auctionId) + "_lockedNFT"), toBase58String(assetId))]
97+ if (true)
98+ then throw("Maintainance...")
99+ else if ((asset == ""))
100+ then throw("You can only sell an NFT-duck created in incubator or breeder")
101+ 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), BooleanEntry((("auction_" + auctionId) + "_isArtefact"), (value(assetInfo(assetId)).issuer == Address(artefactsAddress))), IntegerEntry((("auction_" + auctionId) + "_instantPrice"), instantPrice), StringEntry((((("address_" + toString(i.originCaller)) + "_auction_") + auctionId) + "_lockedNFT"), toBase58String(assetId))]
100102 }
101103
102104
103105
104106 @Callable(i)
105107 func cancelAuction (auctionId) = {
106108 let auctionOwner = tryGetString((("auction_" + auctionId) + "_owner"))
107- if ((toString(i.originCaller) != auctionOwner))
108- then throw("Only allowed to auction owner")
109- else if ((tryGetString((("auction_" + auctionId) + "_status")) != "open"))
110- then throw("auction is close")
111- else [StringEntry((("auction_" + auctionId) + "_status"), "cancelled"), DeleteEntry((((("address_" + auctionOwner) + "_auction_") + auctionId) + "_lockedNFT")), ScriptTransfer(i.originCaller, 1, fromBase58String(getStringValue(this, (("auction_" + auctionId) + "_assetId"))))]
109+ if (true)
110+ then throw("Maintainance...")
111+ else if ((toString(i.originCaller) != auctionOwner))
112+ then throw("Only allowed to auction owner")
113+ else if ((tryGetString((("auction_" + auctionId) + "_status")) != "open"))
114+ then throw("auction is close")
115+ else [StringEntry((("auction_" + auctionId) + "_status"), "cancelled"), DeleteEntry((((("address_" + auctionOwner) + "_auction_") + auctionId) + "_lockedNFT")), ScriptTransfer(i.originCaller, 1, fromBase58String(getStringValue(this, (("auction_" + auctionId) + "_assetId"))))]
112116 }
113117
114118
115119
116120 @Callable(i)
117121 func instantBuy (auctionId) = {
118122 let isEggSell = tryGetBoolean((("auction_" + auctionId) + "_eggSell"))
119123 let paymentAssetId = if ((isEggSell == true))
120124 then eggAssetId
121125 else unit
122126 let paymentAssetName = if ((isEggSell == true))
123127 then "EGG"
124128 else "WAVES"
125129 let pmt = value(i.payments[0])
126130 let amount = pmt.amount
127131 let assetId = tryGetString((("auction_" + auctionId) + "_assetId"))
128132 let bidId = toBase58String(i.transactionId)
129133 let auctionStatus = tryGetString((("auction_" + auctionId) + "_status"))
130134 let finalFee = if ((tryGetBoolean((("auction_" + auctionId) + "_isArtefact")) == true))
131135 then artefactsFeePercent
132136 else feePercent
133- if ((pmt.assetId != paymentAssetId))
134- then throw((("Auction does only support " + paymentAssetName) + " payments."))
135- else if ((auctionStatus != "open"))
136- then throw("Auction is closed. You cannot place a bid.")
137- else {
138- let instantPrice = tryGetInteger((("auction_" + auctionId) + "_instantPrice"))
139- if ((instantPrice > amount))
140- then throw(("For instant purchase you need to pay at least " + toString(instantPrice)))
141- else {
142- let auctionOwner = tryGetString((("auction_" + auctionId) + "_owner"))
143- let recordPrice = tryGetInteger((assetId + "_recordPrice"))
144- let newRecordPrice = max([recordPrice, amount])
137+ if (true)
138+ then throw("Maintainance...")
139+ else if ((pmt.assetId != paymentAssetId))
140+ then throw((("Auction does only support " + paymentAssetName) + " payments."))
141+ else if ((auctionStatus != "open"))
142+ then throw("Auction is closed. You cannot place a bid.")
143+ else {
144+ let instantPrice = tryGetInteger((("auction_" + auctionId) + "_instantPrice"))
145+ if ((instantPrice > amount))
146+ then throw(("For instant purchase you need to pay at least " + toString(instantPrice)))
147+ else {
148+ let auctionOwner = tryGetString((("auction_" + auctionId) + "_owner"))
149+ let recordPrice = tryGetInteger((assetId + "_recordPrice"))
150+ let newRecordPrice = max([recordPrice, amount])
145151 [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 - finalFee), 100), paymentAssetId), ScriptTransfer(Address(feeAggregator), fraction(amount, finalFee, 100), paymentAssetId)]
146- }
147- }
152+ }
153+ }
148154 }
149155
150156
151157
152158 @Callable(i)
153159 func placeBid (auctionId) = {
154160 let isEggSell = tryGetBoolean((("auction_" + auctionId) + "_eggSell"))
155161 let paymentAssetId = if ((isEggSell == true))
156162 then eggAssetId
157163 else unit
158164 let paymentAssetName = if ((isEggSell == true))
159165 then "EGG"
160166 else "WAVES"
161167 let pmt = value(i.payments[0])
162168 let amount = pmt.amount
163169 let bidId = toBase58String(i.transactionId)
164170 let assetId = getStringValue(this, (("auction_" + auctionId) + "_assetId"))
165- if ((pmt.assetId != paymentAssetId))
166- then throw((("Auction does only support " + paymentAssetName) + " payments."))
167- else {
168- let minPrice = tryGetInteger((("auction_" + auctionId) + "_startPrice"))
169- if ((minPrice > amount))
170- then throw(("The minimal initial price is set as " + toString(minPrice)))
171- 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")]
172- }
171+ if (true)
172+ then throw("Maintainance...")
173+ else if ((pmt.assetId != paymentAssetId))
174+ then throw((("Auction does only support " + paymentAssetName) + " payments."))
175+ else {
176+ let minPrice = tryGetInteger((("auction_" + auctionId) + "_startPrice"))
177+ if ((minPrice > amount))
178+ then throw(("The minimal initial price is set as " + toString(minPrice)))
179+ 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")]
180+ }
173181 }
174182
175183
176184
177185 @Callable(i)
178186 func cancelBid (auctionId,bidId) = {
179187 let assetId = getStringValue(this, (("auction_" + auctionId) + "_assetId"))
180188 let bidAuthor = tryGetString((((("auction_" + auctionId) + "_bid_") + bidId) + "_author"))
181189 let bidAmount = tryGetInteger((((("auction_" + auctionId) + "_bid_") + bidId) + "_amount"))
182- if ((toString(i.originCaller) != bidAuthor))
183- then throw("Only allowed to the bid author")
184- else if ((tryGetString((((("auction_" + auctionId) + "_bid_") + bidId) + "_status")) != "open"))
185- then throw("bid is not open")
186- else getBidCancelResults(auctionId, bidId)
190+ if (true)
191+ then throw("Maintainance...")
192+ else if ((toString(i.originCaller) != bidAuthor))
193+ then throw("Only allowed to the bid author")
194+ else if ((tryGetString((((("auction_" + auctionId) + "_bid_") + bidId) + "_status")) != "open"))
195+ then throw("bid is not open")
196+ else getBidCancelResults(auctionId, bidId)
187197 }
188198
189199
190200
191201 @Callable(i)
192202 func cancelOutdatedBid (auctionId,bidId) = throw("to be released")
193203
194204
195205
196206 @Callable(i)
197207 func acceptBid (auctionId,bidId) = {
198208 let isEggSell = tryGetBoolean((("auction_" + auctionId) + "_eggSell"))
199209 let paymentAssetId = if ((isEggSell == true))
200210 then eggAssetId
201211 else unit
202212 let auctionOwner = tryGetString((("auction_" + auctionId) + "_owner"))
203213 let bidAuthor = tryGetString((((("auction_" + auctionId) + "_bid_") + bidId) + "_author"))
204214 let bidAmount = tryGetInteger((((("auction_" + auctionId) + "_bid_") + bidId) + "_amount"))
205215 let bidStatus = tryGetString((((("auction_" + auctionId) + "_bid_") + bidId) + "_status"))
206216 let assetId = tryGetString((("auction_" + auctionId) + "_assetId"))
207217 let finalFee = if ((tryGetBoolean((("auction_" + auctionId) + "_isArtefact")) == true))
208218 then artefactsFeePercent
209219 else feePercent
210- if ((toString(i.originCaller) != auctionOwner))
211- then throw("Only allowed to auction owner")
212- else if ((bidStatus != "open"))
213- then throw("Bid was cancelled and cannot be accepted")
214- else if ((tryGetString((("auction_" + auctionId) + "_status")) != "open"))
215- then throw("Auction was closed")
216- else {
217- let recordPrice = tryGetInteger((assetId + "_recordPrice"))
218- let newRecordPrice = max([recordPrice, bidAmount])
220+ if (true)
221+ then throw("Maintainance...")
222+ else if ((toString(i.originCaller) != auctionOwner))
223+ then throw("Only allowed to auction owner")
224+ else if ((bidStatus != "open"))
225+ then throw("Bid was cancelled and cannot be accepted")
226+ else if ((tryGetString((("auction_" + auctionId) + "_status")) != "open"))
227+ then throw("Auction was closed")
228+ else {
229+ let recordPrice = tryGetInteger((assetId + "_recordPrice"))
230+ let newRecordPrice = max([recordPrice, bidAmount])
219231 [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.originCaller, fraction(bidAmount, (100 - finalFee), 100), paymentAssetId), ScriptTransfer(Address(feeAggregator), fraction(bidAmount, finalFee, 100), paymentAssetId), ScriptTransfer(addressFromStringValue(bidAuthor), 1, fromBase58String(assetId))]
220- }
232+ }
221233 }
222234
223235
224236 @Verifier(tx)
225237 func verify () = sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey)
226238

github/deemru/w8io/786bc32 
50.04 ms