tx · 4C1tZudMfRYjqsYRv1Lqqs5JWyXZoGeTqaqoQTimpikb

3PQ5smtcz4F9F3rhbj3PX6GBgM4YtPkeHCg:  -0.02300000 Waves

2023.10.27 21:25 [3883228] smart account 3PQ5smtcz4F9F3rhbj3PX6GBgM4YtPkeHCg > SELF 0.00000000 Waves

{ "type": 13, "id": "4C1tZudMfRYjqsYRv1Lqqs5JWyXZoGeTqaqoQTimpikb", "fee": 2300000, "feeAssetId": null, "timestamp": 1698431192656, "version": 2, "chainId": 87, "sender": "3PQ5smtcz4F9F3rhbj3PX6GBgM4YtPkeHCg", "senderPublicKey": "FR8teTy3vHXM8K3qgseLD8fgBc5Rw5ge9NBZQFYYUJYL", "proofs": [ "3oaR7jQPZYt8eN4CtfwjuKs2R68aA4fpAFHWE9intWQnEuspAgPJJY7E16RJ1uz4TzDUwP1ducjW7iqoi68zzUoy" ], "script": "base64:AAIFAAAAAAAAABcIAhIDCgEIEg4KDAgBAQgIBAQIAQEBCAAAACgBAAAAFHRyeUdldFN0cmluZ0V4dGVybmFsAAAAAgAAAAdhZGRyZXNzAAAAA2tleQQAAAAHJG1hdGNoMAkABB0AAAACBQAAAAdhZGRyZXNzBQAAAANrZXkDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAABlN0cmluZwQAAAABYQUAAAAHJG1hdGNoMAUAAAABYQIAAAAAAQAAAAx0cnlHZXRTdHJpbmcAAAABAAAAA2tleQkBAAAAFHRyeUdldFN0cmluZ0V4dGVybmFsAAAAAgUAAAAEdGhpcwUAAAADa2V5AQAAAAlnZXRPcmFjbGUAAAAACQEAAAAHQWRkcmVzcwAAAAEJAAJZAAAAAQkBAAAADHRyeUdldFN0cmluZwAAAAECAAAAFHN0YXRpY19vcmFjbGVBZGRyZXNzAQAAABJnZXRDZk1hc3RlckFkZHJlc3MAAAAACQEAAAAHQWRkcmVzcwAAAAEJAAJZAAAAAQkBAAAAFHRyeUdldFN0cmluZ0V4dGVybmFsAAAAAgkBAAAACWdldE9yYWNsZQAAAAACAAAAFnN0YXRpY19jZk1hc3RlckFkZHJlc3MBAAAAEGdldEJhY2tlbmRQdWJLZXkAAAAACQACWQAAAAEJAQAAABFAZXh0ck5hdGl2ZSgxMDUzKQAAAAIJAQAAAAlnZXRPcmFjbGUAAAAAAgAAABRzdGF0aWNfYmFja2VuZFB1YktleQEAAAAKZ2V0TWF4RGlmZgAAAAAJAQAAABFAZXh0ck5hdGl2ZSgxMDUwKQAAAAIJAQAAAAlnZXRPcmFjbGUAAAAAAgAAABNzdGF0aWNfbWF4UHJveHlEaWZmAQAAABlnZXRUdXJ0bGVJbmN1YmF0b3JBZGRyZXNzAAAAAAkBAAAAB0FkZHJlc3MAAAABCQACWQAAAAEJAQAAABR0cnlHZXRTdHJpbmdFeHRlcm5hbAAAAAIJAQAAAAlnZXRPcmFjbGUAAAAAAgAAAB1zdGF0aWNfdHVydGxlSW5jdWJhdG9yQWRkcmVzcwEAAAAXZ2V0VHVydGxlQnJlZWRlckFkZHJlc3MAAAAACQEAAAAHQWRkcmVzcwAAAAEJAAJZAAAAAQkBAAAAFHRyeUdldFN0cmluZ0V4dGVybmFsAAAAAgkBAAAACWdldE9yYWNsZQAAAAACAAAAG3N0YXRpY190dXJ0bGVCcmVlZGVyQWRkcmVzcwEAAAAPZ2V0SXRlbXNBZGRyZXNzAAAAAAkBAAAAB0FkZHJlc3MAAAABCQACWQAAAAEJAQAAABR0cnlHZXRTdHJpbmdFeHRlcm5hbAAAAAIJAQAAAAlnZXRPcmFjbGUAAAAAAgAAABNzdGF0aWNfaXRlbXNBZGRyZXNzAAAAAA9rVG90YWxMaXF1aWRpdHkCAAAAD3RvdGFsX2xpcXVpZGl0eQAAAAAMa0luaXRpYWxpemVkAgAAAAtJTklUSUFMSVpFRAAAAAATa0xpcXVpZGl0eVRocmVzaG9sZAIAAAATTElRVUlESVRZX1RIUkVTSE9MRAAAAAARa1RvdGFsU2hhcmVUb2tlbnMCAAAAEnRvdGFsX3NoYXJlX3Rva2VucwAAAAANa1NoYXJlQXNzZXRJZAIAAAAOU0hBUkVfQVNTRVRfSUQAAAAADmtJbmN1YmF0b3JEYXBwAgAAAA5JTkNVQkFUT1JfREFQUAAAAAAMa0JyZWVkZXJEYXBwAgAAAAxCUkVFREVSX0RBUFAAAAAADGtGYXJtaW5nRGFwcAIAAAAMRkFSTUlOR19EQVBQAAAAABBrTWFya2V0UHJveHlEYXBwAgAAABZNQVJLRVRQTEFDRV9QUk9YWV9EQVBQAAAAAAxrQXVjdGlvbkRhcHACAAAADEFVQ1RJT05fREFQUAAAAAAHa0xvY2tlZAIAAAAGTE9DS0VEAAAAABNrVG90YWxGYXJtaW5nUmV3YXJkAgAAABR0b3RhbF9mYXJtaW5nX3Jld2FyZAAAAAAQa0Nlb0NvbGxlY3RlZEZlZQIAAAARY2VvX2NvbGxlY3RlZF9mZWUAAAAAF2tDZW9Db2xsZWN0ZWRGZWVPdmVyYWxsAgAAAA9jZW9fZmVlX292ZXJhbGwAAAAACGtUb0Rpc3RyAgAAAA10b19kaXN0cmlidXRlAQAAAAZnZXRJbnQAAAABAAAAA2tleQQAAAAHJG1hdGNoMAkABBoAAAACBQAAAAR0aGlzBQAAAANrZXkDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAAA0ludAQAAAABYgUAAAAHJG1hdGNoMAUAAAABYgAAAAAAAAAAAAEAAAAVdHJ5R2V0Qm9vbGVhbkV4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", "height": 3883228, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 5iYwtoenjWwd5HFvmnoHVBQggoGTxvwe5FY7V4yP3uTp Next: none Diff:
OldNewDifferences
248248 else if ((function == "initAuction"))
249249 then {
250250 let asset = value(i.payments[0])
251- let duckMarketPrice = checkDataGetPrice(toString(ach), toString(breed), gen, price, toString(rarity), ts, signature, toBase58String(value(asset.assetId)))
252- let maxPriceDiff = fraction(duckMarketPrice, getMaxDiff(), 100)
251+ let calcPrice = if (tryGetBooleanExternal(getItemsAddress(), (("direct_cosmetic_" + gen) + "_sale")))
252+ then tryGetIntegerExternal(getItemsAddress(), ("direct_cosmetic_" + gen))
253+ else checkDataGetPrice(toString(ach), toString(breed), gen, price, toString(rarity), ts, signature, toBase58String(value(asset.assetId)))
254+ let maxPriceDiff = fraction(calcPrice, getMaxDiff(), 100)
253255 let initialPrice = int1
254256 let buyoutPrice = int2
255- if (if (((duckMarketPrice - maxPriceDiff) > initialPrice))
257+ if (if (((calcPrice - maxPriceDiff) > initialPrice))
256258 then true
257259 else (initialPrice > buyoutPrice))
258- then throw(((((("Price is too low, avg price: " + toString(duckMarketPrice)) + ", min. price: ") + toString((duckMarketPrice - maxPriceDiff))) + ", your bid: ") + toString(initialPrice)))
260+ then throw(((((("Price is too low, avg price: " + toString(calcPrice)) + ", min. price: ") + toString((calcPrice - maxPriceDiff))) + ", your bid: ") + toString(initialPrice)))
259261 else if ((value(asset.amount) != 1))
260262 then throw("_103")
261263 else {
308310 let duckAssetId = getDuckIdByAuctionId(auctionId)
309311 let bidAmount = value(value(i.payments[0]).amount)
310312 let duckMarketPrice = checkDataGetPrice(toString(ach), toString(breed), gen, price, toString(rarity), ts, signature, duckAssetId)
311- let maxPriceDiff = if (tryGetBooleanExternal(getItemsAddress(), (("direct_cosmetic_" + gen) + "_sale")))
313+ let maxPrice = if (tryGetBooleanExternal(getItemsAddress(), (("direct_cosmetic_" + gen) + "_sale")))
312314 then tryGetIntegerExternal(getItemsAddress(), ("direct_cosmetic_" + gen))
313315 else (duckMarketPrice + fraction(duckMarketPrice, 15, 100))
314- if ((bidAmount > (duckMarketPrice + maxPriceDiff)))
315- then throw(((((("Price is too high, avg price: " + toString(duckMarketPrice)) + ", max. price: ") + toString((duckMarketPrice + maxPriceDiff))) + ", your bid: ") + toString(bidAmount)))
316+ if ((bidAmount > maxPrice))
317+ then throw(((((("Price is too high, calc price: " + toString(duckMarketPrice)) + ", max. price after item check: ") + toString(maxPrice)) + ", your buy price: ") + toString(bidAmount)))
316318 else if ((size(i.payments) != 1))
317319 then throw("_103")
318320 else {
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 5 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 func tryGetStringExternal (address,key) = match getString(address, key) {
55 case a: String =>
66 a
77 case _ =>
88 ""
99 }
1010
1111
1212 func tryGetString (key) = tryGetStringExternal(this, key)
1313
1414
1515 func getOracle () = Address(fromBase58String(tryGetString("static_oracleAddress")))
1616
1717
1818 func getCfMasterAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), "static_cfMasterAddress")))
1919
2020
2121 func getBackendPubKey () = fromBase58String(getStringValue(getOracle(), "static_backendPubKey"))
2222
2323
2424 func getMaxDiff () = getIntegerValue(getOracle(), "static_maxProxyDiff")
2525
2626
2727 func getTurtleIncubatorAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), "static_turtleIncubatorAddress")))
2828
2929
3030 func getTurtleBreederAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), "static_turtleBreederAddress")))
3131
3232
3333 func getItemsAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), "static_itemsAddress")))
3434
3535
3636 let kTotalLiquidity = "total_liquidity"
3737
3838 let kInitialized = "INITIALIZED"
3939
4040 let kLiquidityThreshold = "LIQUIDITY_THRESHOLD"
4141
4242 let kTotalShareTokens = "total_share_tokens"
4343
4444 let kShareAssetId = "SHARE_ASSET_ID"
4545
4646 let kIncubatorDapp = "INCUBATOR_DAPP"
4747
4848 let kBreederDapp = "BREEDER_DAPP"
4949
5050 let kFarmingDapp = "FARMING_DAPP"
5151
5252 let kMarketProxyDapp = "MARKETPLACE_PROXY_DAPP"
5353
5454 let kAuctionDapp = "AUCTION_DAPP"
5555
5656 let kLocked = "LOCKED"
5757
5858 let kTotalFarmingReward = "total_farming_reward"
5959
6060 let kCeoCollectedFee = "ceo_collected_fee"
6161
6262 let kCeoCollectedFeeOverall = "ceo_fee_overall"
6363
6464 let kToDistr = "to_distribute"
6565
6666 func getInt (key) = match getInteger(this, key) {
6767 case b: Int =>
6868 b
6969 case _ =>
7070 0
7171 }
7272
7373
7474 func tryGetBooleanExternal (address,key) = match getBoolean(address, key) {
7575 case b: Boolean =>
7676 b
7777 case _ =>
7878 false
7979 }
8080
8181
8282 func getBool (key) = tryGetBooleanExternal(this, key)
8383
8484
8585 func getBoolA (a,key) = match getBoolean(a, key) {
8686 case b: Boolean =>
8787 b
8888 case _ =>
8989 unit
9090 }
9191
9292
9393 func tryGetIntegerExternal (address,key) = match getInteger(address, key) {
9494 case b: Int =>
9595 b
9696 case _ =>
9797 0
9898 }
9999
100100
101101 func getAuctionAddr () = tryGetStringExternal(getCfMasterAddress(), kAuctionDapp)
102102
103103
104104 func amountOrClear (amount) = if (contains(amount, "0"))
105105 then ""
106106 else amount
107107
108108
109109 func getAssetOrigin (generation) = {
110110 let incubatorAddress = tryGetStringExternal(getCfMasterAddress(), kIncubatorDapp)
111111 let breederAddress = tryGetStringExternal(getCfMasterAddress(), kBreederDapp)
112112 if ((generation == "G"))
113113 then fromBase58String(incubatorAddress)
114114 else fromBase58String(breederAddress)
115115 }
116116
117117
118118 func getAssetRarity (geno,generation) = {
119119 let quantity = getIntegerValue(Address(getAssetOrigin(generation)), (("stats_" + geno) + "_quantity"))
120120 let power = pow((10000 / quantity), 4, 5, 1, 2, FLOOR)
121121 if ((power > 0))
122122 then power
123123 else 2
124124 }
125125
126126
127127 func asString (value) = match value {
128128 case string: String =>
129129 string
130130 case _ =>
131131 throw("wrong type, expected: String")
132132 }
133133
134134
135135 func getAssetFarmingPower (assetId) = {
136136 let breederAddress = fromBase58String(tryGetStringExternal(getCfMasterAddress(), kBreederDapp))
137137 let incubatorAddress = fromBase58String(tryGetStringExternal(getCfMasterAddress(), kIncubatorDapp))
138138 if (if ((value(assetInfo(assetId)).issuer == Address(breederAddress)))
139139 then true
140140 else (value(assetInfo(assetId)).issuer == Address(incubatorAddress)))
141141 then {
142142 let assetName = value(assetInfo(assetId)).name
143143 let generation = take(takeRight(assetName, 2), 1)
144144 let farmGen = asString(invoke(Address(breederAddress), "getGenFromName", [assetName], nil))
145145 if ((farmGen == farmGen))
146146 then getAssetRarity(farmGen, generation)
147147 else throw("Strict value is not equal to itself.")
148148 }
149149 else throw("MGAFP: _20")
150150 }
151151
152152
153153 func getTurtleAssetFarmingPower (assetId) = {
154154 let breederAddress = getTurtleBreederAddress()
155155 let incubatorAddress = getTurtleIncubatorAddress()
156156 if (if ((value(assetInfo(assetId)).issuer == breederAddress))
157157 then true
158158 else (value(assetInfo(assetId)).issuer == incubatorAddress))
159159 then true
160160 else throw("MGTFP: _20")
161161 }
162162
163163
164164 func getDuckMarketPrice (nftId) = {
165165 let rarity = getAssetFarmingPower(nftId)
166166 let breederAddress = addressFromStringValue(tryGetStringExternal(getCfMasterAddress(), kBreederDapp))
167167 let sterile = tryGetIntegerExternal(breederAddress, (("asset_" + toBase58String(nftId)) + "_children"))
168168 let canBreedText = if ((sterile > 0))
169169 then "0"
170170 else "1"
171171 let val = getInteger(getCfMasterAddress(), ((("r-" + toString(rarity)) + "-b-") + canBreedText))
172172 match val {
173173 case price: Int =>
174174 let minPrice = if ((sterile > 0))
175175 then (200000000 * rarity)
176176 else 18000000000
177177 if ((minPrice > price))
178178 then minPrice
179179 else price
180180 case _ =>
181181 throw((((("There is no price for such duck: " + "r-") + toString(rarity)) + "-b-") + canBreedText))
182182 }
183183 }
184184
185185
186186 func getDuckIdByAuctionId (auctionId) = {
187187 let marketAddr = getAuctionAddr()
188188 tryGetStringExternal(addressFromStringValue(marketAddr), (("auction_" + auctionId) + "_assetId"))
189189 }
190190
191191
192192 func getBidAmount (auctionId,bidId) = {
193193 let marketAddr = getAuctionAddr()
194194 tryGetIntegerExternal(addressFromStringValue(marketAddr), (((("auction_" + auctionId) + "_bid_") + bidId) + "_amount"))
195195 }
196196
197197
198198 func checkDataGetPrice (ach,breed,gen,price,rarity,ts,signature,duckId) = if ((price == 0))
199199 then throw("MCACS: No price calculated, so action not allowed! Please contact admin!")
200200 else {
201201 let isDuck = if ((rarity != "0"))
202202 then (gen != "")
203203 else false
204204 let isTurtle = (rarity != "0")
205205 let text = if (isDuck)
206206 then makeString([rarity, breed, ach, gen, toString(price), toString(ts)], ";")
207207 else if (isTurtle)
208208 then makeString([rarity, breed, toString(price), toString(ts)], ";")
209209 else makeString([gen, toString(price), toString(ts)], ";")
210210 let MSINHOUR = 3600000
211211 if (!(sigVerify_8Kb(toBytes(text), fromBase58String(signature), getBackendPubKey())))
212212 then throw(((((("MCACS: Invalid proof from backend key" + toBase58String(getBackendPubKey())) + " ") + text) + " ") + toString(isDuck)))
213213 else {
214214 let currentTs = lastBlock.timestamp
215215 if ((currentTs > (ts + MSINHOUR)))
216216 then throw("MCACS: Outdated signature!")
217217 else if (isDuck)
218218 then {
219219 let duckRarity = getAssetFarmingPower(fromBase58String(duckId))
220220 let diff = (duckRarity - parseIntValue(split(rarity, ".")[0]))
221221 if (if ((-5 > diff))
222222 then true
223223 else (diff > 5))
224224 then throw(((((("MCACS: It seems not the correct price info was passed! " + toString(duckRarity)) + " ") + rarity) + " ") + toString(diff)))
225225 else price
226226 }
227227 else if (isTurtle)
228228 then if ((getTurtleAssetFarmingPower(fromBase58String(duckId)) == true))
229229 then price
230230 else throw("MCACS: This does not seem a turtle!")
231231 else price
232232 }
233233 }
234234
235235
236236 @Callable(i)
237237 func configureOracle (oracle) = if ((i.caller != this))
238238 then throw("BCO: admin only")
239239 else [StringEntry("static_oracleAddress", oracle)]
240240
241241
242242
243243 @Callable(i)
244244 func callMarketplaceProxy (function,int1,int2,str1,str2,ach,breed,gen,price,rarity,ts,signature) = {
245245 let auctionDappAddress = addressFromStringValue(getAuctionAddr())
246246 if ((getBoolA(getCfMasterAddress(), ("farm_" + toString(i.caller))) != true))
247247 then throw("_301=")
248248 else if ((function == "initAuction"))
249249 then {
250250 let asset = value(i.payments[0])
251- let duckMarketPrice = checkDataGetPrice(toString(ach), toString(breed), gen, price, toString(rarity), ts, signature, toBase58String(value(asset.assetId)))
252- let maxPriceDiff = fraction(duckMarketPrice, getMaxDiff(), 100)
251+ let calcPrice = if (tryGetBooleanExternal(getItemsAddress(), (("direct_cosmetic_" + gen) + "_sale")))
252+ then tryGetIntegerExternal(getItemsAddress(), ("direct_cosmetic_" + gen))
253+ else checkDataGetPrice(toString(ach), toString(breed), gen, price, toString(rarity), ts, signature, toBase58String(value(asset.assetId)))
254+ let maxPriceDiff = fraction(calcPrice, getMaxDiff(), 100)
253255 let initialPrice = int1
254256 let buyoutPrice = int2
255- if (if (((duckMarketPrice - maxPriceDiff) > initialPrice))
257+ if (if (((calcPrice - maxPriceDiff) > initialPrice))
256258 then true
257259 else (initialPrice > buyoutPrice))
258- then throw(((((("Price is too low, avg price: " + toString(duckMarketPrice)) + ", min. price: ") + toString((duckMarketPrice - maxPriceDiff))) + ", your bid: ") + toString(initialPrice)))
260+ then throw(((((("Price is too low, avg price: " + toString(calcPrice)) + ", min. price: ") + toString((calcPrice - maxPriceDiff))) + ", your bid: ") + toString(initialPrice)))
259261 else if ((value(asset.amount) != 1))
260262 then throw("_103")
261263 else {
262264 let initAuction = invoke(auctionDappAddress, "initAuction", [initialPrice, buyoutPrice, str1, str2], [AttachedPayment(value(asset.assetId), 1)])
263265 if ((initAuction == initAuction))
264266 then [StringEntry(("tx_" + toBase58String(i.transactionId)), toBase58String(value(asset.assetId)))]
265267 else throw("Strict value is not equal to itself.")
266268 }
267269 }
268270 else if ((function == "placeBid"))
269271 then {
270272 let auctionId = str1
271273 let duckAssetId = getDuckIdByAuctionId(auctionId)
272274 let bidAmount = value(value(i.payments[0]).amount)
273275 let duckMarketPrice = checkDataGetPrice(toString(ach), toString(breed), gen, price, toString(rarity), ts, signature, duckAssetId)
274276 let maxPriceDiff = fraction(duckMarketPrice, getMaxDiff(), 100)
275277 if ((bidAmount > duckMarketPrice))
276278 then throw(((((("Price is too high, avg price: " + toString(duckMarketPrice)) + ", max. price: ") + toString(duckMarketPrice)) + ", your bid: ") + toString(bidAmount)))
277279 else if ((size(i.payments) != 1))
278280 then throw("_103")
279281 else {
280282 let placeBid = invoke(auctionDappAddress, "placeBid", [auctionId], [AttachedPayment(value(i.payments[0]).assetId, bidAmount)])
281283 if ((placeBid == placeBid))
282284 then [StringEntry(("tx_" + toBase58String(i.transactionId)), auctionId)]
283285 else throw("Strict value is not equal to itself.")
284286 }
285287 }
286288 else if ((function == "acceptBid"))
287289 then if (true)
288290 then throw("MCACS: Accepting bids is disabled for Collective Farms!")
289291 else {
290292 let auctionId = str1
291293 let bidId = str2
292294 let duckAssetId = getDuckIdByAuctionId(auctionId)
293295 let bidAmount = getBidAmount(auctionId, bidId)
294296 let duckMarketPrice = checkDataGetPrice(toString(ach), toString(breed), gen, price, toString(rarity), ts, signature, duckAssetId)
295297 let maxPriceDiff = fraction(duckMarketPrice, getMaxDiff(), 100)
296298 if ((duckMarketPrice > bidAmount))
297299 then throw(((((("Price is too low, avg price: " + toString(duckMarketPrice)) + ", min. price: ") + toString(duckMarketPrice)) + ", your bid: ") + toString(bidAmount)))
298300 else {
299301 let acceptBid = invoke(auctionDappAddress, "acceptBid", [auctionId, bidId], nil)
300302 if ((acceptBid == acceptBid))
301303 then [StringEntry(("tx_" + toBase58String(i.transactionId)), auctionId)]
302304 else throw("Strict value is not equal to itself.")
303305 }
304306 }
305307 else if ((function == "instantBuy"))
306308 then {
307309 let auctionId = str1
308310 let duckAssetId = getDuckIdByAuctionId(auctionId)
309311 let bidAmount = value(value(i.payments[0]).amount)
310312 let duckMarketPrice = checkDataGetPrice(toString(ach), toString(breed), gen, price, toString(rarity), ts, signature, duckAssetId)
311- let maxPriceDiff = if (tryGetBooleanExternal(getItemsAddress(), (("direct_cosmetic_" + gen) + "_sale")))
313+ let maxPrice = if (tryGetBooleanExternal(getItemsAddress(), (("direct_cosmetic_" + gen) + "_sale")))
312314 then tryGetIntegerExternal(getItemsAddress(), ("direct_cosmetic_" + gen))
313315 else (duckMarketPrice + fraction(duckMarketPrice, 15, 100))
314- if ((bidAmount > (duckMarketPrice + maxPriceDiff)))
315- then throw(((((("Price is too high, avg price: " + toString(duckMarketPrice)) + ", max. price: ") + toString((duckMarketPrice + maxPriceDiff))) + ", your bid: ") + toString(bidAmount)))
316+ if ((bidAmount > maxPrice))
317+ then throw(((((("Price is too high, calc price: " + toString(duckMarketPrice)) + ", max. price after item check: ") + toString(maxPrice)) + ", your buy price: ") + toString(bidAmount)))
316318 else if ((size(i.payments) != 1))
317319 then throw("_103")
318320 else {
319321 let instantBuy = invoke(auctionDappAddress, "instantBuy", [auctionId], [AttachedPayment(value(i.payments[0]).assetId, bidAmount)])
320322 if ((instantBuy == instantBuy))
321323 then [StringEntry(("tx_" + toBase58String(i.transactionId)), auctionId)]
322324 else throw("Strict value is not equal to itself.")
323325 }
324326 }
325327 else if ((function == "cancelBid"))
326328 then {
327329 let auctionId = str1
328330 let bidId = str2
329331 let acceptBid = invoke(auctionDappAddress, "cancelBid", [auctionId, bidId], nil)
330332 if ((acceptBid == acceptBid))
331333 then [StringEntry(("tx_" + toBase58String(i.transactionId)), auctionId)]
332334 else throw("Strict value is not equal to itself.")
333335 }
334336 else if ((function == "cancelAuction"))
335337 then {
336338 let auctionId = str1
337339 let acceptBid = invoke(auctionDappAddress, "cancelAuction", [auctionId], nil)
338340 if ((acceptBid == acceptBid))
339341 then [StringEntry(("tx_" + toBase58String(i.transactionId)), auctionId)]
340342 else throw("Strict value is not equal to itself.")
341343 }
342344 else throw("_13")
343345 }
344346
345347

github/deemru/w8io/6500d08 
54.84 ms