tx · 5aTg7P4jHz2PvoqxsfZdKpmAM8ojmuDPLwQ8Qzu3K1vi

3PEBtiSVLrqyYxGd76vXKu8FFWWsD1c5uYG:  -0.01400000 Waves

2021.11.26 01:54 [2872127] smart account 3PEBtiSVLrqyYxGd76vXKu8FFWWsD1c5uYG > SELF 0.00000000 Waves

{ "type": 13, "id": "5aTg7P4jHz2PvoqxsfZdKpmAM8ojmuDPLwQ8Qzu3K1vi", "fee": 1400000, "feeAssetId": null, "timestamp": 1637880955797, "version": 2, "chainId": 87, "sender": "3PEBtiSVLrqyYxGd76vXKu8FFWWsD1c5uYG", "senderPublicKey": "GPiVunnvoUZtBzkfVrpRsMBEf3mWdgRrex2zvzCtM6WQ", "proofs": [ "3kMjX4xaXsWpEStmbnYTsCLErjNRBSjHDqNcv2DPqya2MMQEpc86GaW4aEU6c7PrktDhDSs65CNsGhaKuUiUeuZf" ], "script": "base64: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", "height": 2872127, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: J9hacNRtGzathpAfCzSpat6yZ2r1FQqoNyFU7hk5iXas Next: HYRXQ1s7rH6k9ZK6SaJLYE4hUoEBCD9N4deBKkSLaWSd Diff:
OldNewDifferences
44 let incubatorAddress = base58'3PEktVux2RhchSN63DsDo4b4mz4QqzKSeDv'
55
66 let breederAddress = base58'3PDVuU45H7Eh5dmtNbnRNRStGwULA7NY6Hb'
7+
8+let artefactsAddress = base58'3P5E9xamcWoymiqLx8ZdmR7o4fJSRMGp1WR'
79
810 let feeAggregator = base58'3P6AobNbcQ3ZjcRY37mJPKN8PP9Giz8kgeY'
911
1214 let kGlobalCounter = "GLOBAL_COUNTER"
1315
1416 let feePercent = 5
17+
18+let artefactsFeePercent = 20
1519
1620 func tryGetInteger (key) = {
1721 let val = match getInteger(this, key) {
4650 func getGlobalCounter () = tryGetInteger(kGlobalCounter)
4751
4852
49-func getAssetGenotype (assetId) = {
50- let asset1 = match getString(Address(incubatorAddress), toBase58String(assetId)) {
51- case b: String =>
52- b
53- case _ =>
54- ""
55- }
56- if ((asset1 != ""))
57- then asset1
58- else {
59- let asset2 = match getString(Address(breederAddress), toBase58String(assetId)) {
60- case c: String =>
61- c
62- case _ =>
63- ""
64- }
65- if ((asset2 != ""))
66- then asset2
67- else ""
68- }
69- }
53+func getAssetGenotype (assetId) = if ((value(assetInfo(assetId)).issuer == Address(artefactsAddress)))
54+ then "ART"
55+ else {
56+ let asset1 = match getString(Address(incubatorAddress), toBase58String(assetId)) {
57+ case b: String =>
58+ b
59+ case _ =>
60+ ""
61+ }
62+ if ((asset1 != ""))
63+ then asset1
64+ else {
65+ let asset2 = match getString(Address(breederAddress), toBase58String(assetId)) {
66+ case c: String =>
67+ c
68+ case _ =>
69+ ""
70+ }
71+ if ((asset2 != ""))
72+ then asset2
73+ else ""
74+ }
75+ }
7076
7177
7278 func getBidCancelResults (auctionId,bidId) = {
9096 let asset = getAssetGenotype(assetId)
9197 if ((asset == ""))
9298 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 == "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))]
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))]
94100 }
95101
96102
121127 let assetId = tryGetString((("auction_" + auctionId) + "_assetId"))
122128 let bidId = toBase58String(i.transactionId)
123129 let auctionStatus = tryGetString((("auction_" + auctionId) + "_status"))
130+ let finalFee = if ((tryGetBoolean((("auction_" + auctionId) + "_isArtefact")) == true))
131+ then artefactsFeePercent
132+ else feePercent
124133 if ((pmt.assetId != paymentAssetId))
125134 then throw((("Auction does only support " + paymentAssetName) + " payments."))
126135 else if ((auctionStatus != "open"))
133142 let auctionOwner = tryGetString((("auction_" + auctionId) + "_owner"))
134143 let recordPrice = tryGetInteger((assetId + "_recordPrice"))
135144 let newRecordPrice = max([recordPrice, amount])
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)]
145+[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)]
137146 }
138147 }
139148 }
195204 let bidAmount = tryGetInteger((((("auction_" + auctionId) + "_bid_") + bidId) + "_amount"))
196205 let bidStatus = tryGetString((((("auction_" + auctionId) + "_bid_") + bidId) + "_status"))
197206 let assetId = tryGetString((("auction_" + auctionId) + "_assetId"))
207+ let finalFee = if ((tryGetBoolean((("auction_" + auctionId) + "_isArtefact")) == true))
208+ then artefactsFeePercent
209+ else feePercent
198210 if ((toString(i.originCaller) != auctionOwner))
199211 then throw("Only allowed to auction owner")
200212 else if ((bidStatus != "open"))
204216 else {
205217 let recordPrice = tryGetInteger((assetId + "_recordPrice"))
206218 let newRecordPrice = max([recordPrice, bidAmount])
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))]
219+[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 - finalFee), 100), paymentAssetId), ScriptTransfer(Address(feeAggregator), fraction(bidAmount, finalFee, 100), paymentAssetId), ScriptTransfer(addressFromStringValue(bidAuthor), 1, fromBase58String(assetId))]
208220 }
209221 }
210222
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'
7+
8+let artefactsAddress = base58'3P5E9xamcWoymiqLx8ZdmR7o4fJSRMGp1WR'
79
810 let feeAggregator = base58'3P6AobNbcQ3ZjcRY37mJPKN8PP9Giz8kgeY'
911
1012 let eggAssetId = base58'C1iWsKGqLwjHUndiQ7iXpdmPum9PeCDFfyXBdJJosDRS'
1113
1214 let kGlobalCounter = "GLOBAL_COUNTER"
1315
1416 let feePercent = 5
17+
18+let artefactsFeePercent = 20
1519
1620 func tryGetInteger (key) = {
1721 let val = match getInteger(this, key) {
1822 case b: Int =>
1923 b
2024 case _ =>
2125 0
2226 }
2327 val
2428 }
2529
2630
2731 func tryGetString (key) = {
2832 let val = match getString(this, key) {
2933 case b: String =>
3034 b
3135 case _ =>
3236 ""
3337 }
3438 val
3539 }
3640
3741
3842 func tryGetBoolean (key) = match getBoolean(this, key) {
3943 case b: Boolean =>
4044 b
4145 case _ =>
4246 false
4347 }
4448
4549
4650 func getGlobalCounter () = tryGetInteger(kGlobalCounter)
4751
4852
49-func getAssetGenotype (assetId) = {
50- let asset1 = match getString(Address(incubatorAddress), toBase58String(assetId)) {
51- case b: String =>
52- b
53- case _ =>
54- ""
55- }
56- if ((asset1 != ""))
57- then asset1
58- else {
59- let asset2 = match getString(Address(breederAddress), toBase58String(assetId)) {
60- case c: String =>
61- c
62- case _ =>
63- ""
64- }
65- if ((asset2 != ""))
66- then asset2
67- else ""
68- }
69- }
53+func getAssetGenotype (assetId) = if ((value(assetInfo(assetId)).issuer == Address(artefactsAddress)))
54+ then "ART"
55+ else {
56+ let asset1 = match getString(Address(incubatorAddress), toBase58String(assetId)) {
57+ case b: String =>
58+ b
59+ case _ =>
60+ ""
61+ }
62+ if ((asset1 != ""))
63+ then asset1
64+ else {
65+ let asset2 = match getString(Address(breederAddress), toBase58String(assetId)) {
66+ case c: String =>
67+ c
68+ case _ =>
69+ ""
70+ }
71+ if ((asset2 != ""))
72+ then asset2
73+ else ""
74+ }
75+ }
7076
7177
7278 func getBidCancelResults (auctionId,bidId) = {
7379 let isEggSell = tryGetBoolean((("auction_" + auctionId) + "_eggSell"))
7480 let paymentAssetId = if ((isEggSell == true))
7581 then eggAssetId
7682 else unit
7783 let assetId = getStringValue(this, (("auction_" + auctionId) + "_assetId"))
7884 let bidAuthor = tryGetString((((("auction_" + auctionId) + "_bid_") + bidId) + "_author"))
7985 let bidAmount = tryGetInteger((((("auction_" + auctionId) + "_bid_") + bidId) + "_amount"))
8086 [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)]
8187 }
8288
8389
8490 @Callable(i)
8591 func initAuction (startPrice,instantPrice,description,eggSell) = {
8692 let globalCounter = getGlobalCounter()
8793 let auctionId = (toBase58String(i.transactionId) + toString(globalCounter))
8894 let pmt = value(i.payments[0])
8995 let assetId = value(pmt.assetId)
9096 let asset = getAssetGenotype(assetId)
9197 if ((asset == ""))
9298 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 == "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))]
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))]
94100 }
95101
96102
97103
98104 @Callable(i)
99105 func cancelAuction (auctionId) = {
100106 let auctionOwner = tryGetString((("auction_" + auctionId) + "_owner"))
101107 if ((toString(i.originCaller) != auctionOwner))
102108 then throw("Only allowed to auction owner")
103109 else if ((tryGetString((("auction_" + auctionId) + "_status")) != "open"))
104110 then throw("auction is close")
105111 else [StringEntry((("auction_" + auctionId) + "_status"), "cancelled"), DeleteEntry((((("address_" + auctionOwner) + "_auction_") + auctionId) + "_lockedNFT")), ScriptTransfer(i.originCaller, 1, fromBase58String(getStringValue(this, (("auction_" + auctionId) + "_assetId"))))]
106112 }
107113
108114
109115
110116 @Callable(i)
111117 func instantBuy (auctionId) = {
112118 let isEggSell = tryGetBoolean((("auction_" + auctionId) + "_eggSell"))
113119 let paymentAssetId = if ((isEggSell == true))
114120 then eggAssetId
115121 else unit
116122 let paymentAssetName = if ((isEggSell == true))
117123 then "EGG"
118124 else "WAVES"
119125 let pmt = value(i.payments[0])
120126 let amount = pmt.amount
121127 let assetId = tryGetString((("auction_" + auctionId) + "_assetId"))
122128 let bidId = toBase58String(i.transactionId)
123129 let auctionStatus = tryGetString((("auction_" + auctionId) + "_status"))
130+ let finalFee = if ((tryGetBoolean((("auction_" + auctionId) + "_isArtefact")) == true))
131+ then artefactsFeePercent
132+ else feePercent
124133 if ((pmt.assetId != paymentAssetId))
125134 then throw((("Auction does only support " + paymentAssetName) + " payments."))
126135 else if ((auctionStatus != "open"))
127136 then throw("Auction is closed. You cannot place a bid.")
128137 else {
129138 let instantPrice = tryGetInteger((("auction_" + auctionId) + "_instantPrice"))
130139 if ((instantPrice > amount))
131140 then throw(("For instant purchase you need to pay at least " + toString(instantPrice)))
132141 else {
133142 let auctionOwner = tryGetString((("auction_" + auctionId) + "_owner"))
134143 let recordPrice = tryGetInteger((assetId + "_recordPrice"))
135144 let newRecordPrice = max([recordPrice, amount])
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)]
145+[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)]
137146 }
138147 }
139148 }
140149
141150
142151
143152 @Callable(i)
144153 func placeBid (auctionId) = {
145154 let isEggSell = tryGetBoolean((("auction_" + auctionId) + "_eggSell"))
146155 let paymentAssetId = if ((isEggSell == true))
147156 then eggAssetId
148157 else unit
149158 let paymentAssetName = if ((isEggSell == true))
150159 then "EGG"
151160 else "WAVES"
152161 let pmt = value(i.payments[0])
153162 let amount = pmt.amount
154163 let bidId = toBase58String(i.transactionId)
155164 let assetId = getStringValue(this, (("auction_" + auctionId) + "_assetId"))
156165 if ((pmt.assetId != paymentAssetId))
157166 then throw((("Auction does only support " + paymentAssetName) + " payments."))
158167 else {
159168 let minPrice = tryGetInteger((("auction_" + auctionId) + "_startPrice"))
160169 if ((minPrice > amount))
161170 then throw(("The minimal initial price is set as " + toString(minPrice)))
162171 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")]
163172 }
164173 }
165174
166175
167176
168177 @Callable(i)
169178 func cancelBid (auctionId,bidId) = {
170179 let assetId = getStringValue(this, (("auction_" + auctionId) + "_assetId"))
171180 let bidAuthor = tryGetString((((("auction_" + auctionId) + "_bid_") + bidId) + "_author"))
172181 let bidAmount = tryGetInteger((((("auction_" + auctionId) + "_bid_") + bidId) + "_amount"))
173182 if ((toString(i.originCaller) != bidAuthor))
174183 then throw("Only allowed to the bid author")
175184 else if ((tryGetString((((("auction_" + auctionId) + "_bid_") + bidId) + "_status")) != "open"))
176185 then throw("bid is not open")
177186 else getBidCancelResults(auctionId, bidId)
178187 }
179188
180189
181190
182191 @Callable(i)
183192 func cancelOutdatedBid (auctionId,bidId) = throw("to be released")
184193
185194
186195
187196 @Callable(i)
188197 func acceptBid (auctionId,bidId) = {
189198 let isEggSell = tryGetBoolean((("auction_" + auctionId) + "_eggSell"))
190199 let paymentAssetId = if ((isEggSell == true))
191200 then eggAssetId
192201 else unit
193202 let auctionOwner = tryGetString((("auction_" + auctionId) + "_owner"))
194203 let bidAuthor = tryGetString((((("auction_" + auctionId) + "_bid_") + bidId) + "_author"))
195204 let bidAmount = tryGetInteger((((("auction_" + auctionId) + "_bid_") + bidId) + "_amount"))
196205 let bidStatus = tryGetString((((("auction_" + auctionId) + "_bid_") + bidId) + "_status"))
197206 let assetId = tryGetString((("auction_" + auctionId) + "_assetId"))
207+ let finalFee = if ((tryGetBoolean((("auction_" + auctionId) + "_isArtefact")) == true))
208+ then artefactsFeePercent
209+ else feePercent
198210 if ((toString(i.originCaller) != auctionOwner))
199211 then throw("Only allowed to auction owner")
200212 else if ((bidStatus != "open"))
201213 then throw("Bid was cancelled and cannot be accepted")
202214 else if ((tryGetString((("auction_" + auctionId) + "_status")) != "open"))
203215 then throw("Auction was closed")
204216 else {
205217 let recordPrice = tryGetInteger((assetId + "_recordPrice"))
206218 let newRecordPrice = max([recordPrice, bidAmount])
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))]
219+[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 - finalFee), 100), paymentAssetId), ScriptTransfer(Address(feeAggregator), fraction(bidAmount, finalFee, 100), paymentAssetId), ScriptTransfer(addressFromStringValue(bidAuthor), 1, fromBase58String(assetId))]
208220 }
209221 }
210222
211223
212224 @Verifier(tx)
213225 func verify () = sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey)
214226

github/deemru/w8io/3ef1775 
85.69 ms