tx · FQ9Rk43Lra5T8MkMPkdVgWEqi38fkFofH2RjStaqV4Yc

3MrWNTqFcHBqb58Za1A5crQrMV5KJ5DYhtA:  -0.01000000 Waves

2021.08.22 19:20 [1669768] smart account 3MrWNTqFcHBqb58Za1A5crQrMV5KJ5DYhtA > SELF 0.00000000 Waves

{ "type": 13, "id": "FQ9Rk43Lra5T8MkMPkdVgWEqi38fkFofH2RjStaqV4Yc", "fee": 1000000, "feeAssetId": null, "timestamp": 1629649202301, "version": 2, "chainId": 84, "sender": "3MrWNTqFcHBqb58Za1A5crQrMV5KJ5DYhtA", "senderPublicKey": "9abKuN1XmLjjire2feZH26PmcEWhEXxiHToWSmii3Gn2", "proofs": [ "4fuMKzUSveNRhp1EAyWRRH2Qy215R6cmADPF43cZU8zX2tqvVGBgFLqhKwCkaGKFvCw4ohYeLVefNRtxTiJbiWC8" ], "script": "base64:AAIFAAAAAAAADFIIAhIJCgcICAgICAgIEgkKBwgBAQgIAQESBAoCCAgSAwoBCBIECgIICBIGCgQICAgIEgUKAwgICBoOCgJhMRIIdW5pdFRlc3QaDwoCYTISCW9yYWNsZUZlZRoRCgJhMxILZmVlUmVjZWl2ZXIaDgoCYTQSCHVzZXJEYXBwGhMKAmE1Eg13aGl0ZWxpc3REYXBwGhMKAmE2Eg1zY29uZXhBc3NldElkGgsKAmE3EgVvd25lchoYCgJhOBISc2NvbmV4Rmlyc3RTZWxsQ3V0GhEKAmE5EgtkYXBwUnVubmluZxoUCgJiMRIObWFpbnRlbmFuY2VNU0caEwoCYjISDXVzZXJTdXNwZW5kZWQaEQoCYjMSC3VzZXJSZW1vdmVkGhYKAmI0EhB1c2VyVW5yZWdpc3RlcmVkGhEKAmI1Egt1c2VyQWxsb3dlZBoSCgJiNhIMYXVjdGlvblR5cGUxGhIKAmI3EgxhdWN0aW9uVHlwZTIaFAoCYjgSDmdldFN0cmluZ0J5S2V5GgkKAmI5EgNrZXkaHwoCYzESGWdldEludGVnZXJCeUtleUZyb21PcmFjbGUaFQoCYzISD2dldEludGVnZXJCeUtleRoUCgJjMxIOY2hlY2tXaGl0ZWxpc3QaFQoCYzQSD2dldEJvb2xlYW5CeUtleRoTCgJjNRINa2V5VXNlclN0YXR1cxoMCgJjNhIGY2FsbGVyGg0KAmM3EgdrZXlEYXRlGgsKAmM4EgVhcnRJZBoNCgJjORIHa2V5TmFtZRoNCgJkMRIHa2V5RGVzYxoTCgJkMhINa2V5RGlzcGxheUNpZBoQCgJkMxIKa2V5TWF4TWludBoRCgJkNBILa2V5TWluUHJpY2UaGAoCZDUSEmtleUhpZ2hlc3RCaWRCaWRJZBoOCgJkNhIIa2V5QmlkSWQaCwoCZDcSBWJpZElkGhEKAmQ4EgtrZXlEdXJhdGlvbhoSCgJkORIMa2V5RW5kSGVpZ2h0GhQKAmUxEg5rZXlBdWN0aW9uVHlwZRoPCgJlMhIJa2V5SXNzdWVkGhIKAmUzEgxLZXlOZnRJc3N1ZXIaCwoCZTQSBW5mdElkGg8KAmU1EglrZXlPblNhbGUaFAoCZTYSDmtleUVudGl0bGVtZW50Gg0KAmU3EgdrZXlUYWdzGg0KAmU4EgdrZXlUeXBlGg4KAmU5EghrZXlQcmljZRoYCgJmMRISa2V5QXNzZXRJZEFjY2VwdGVkGhcKAmYyEhFrZXlIYXNoQnlUeGlkQWRkchoKCgJmMxIEdHhpZBoUCgJmNBIOa2V5T3duZXJCeUhhc2gaEAoCZjUSCnNoYTI1Nkhhc2gaGAoCZjYSEmtleVR4aWRCeUhhc2hPd25lchofCgJmNxIZY3VycmVudENlcnRpZmljYXRpb25QcmljZRoWCgJmOBIQZ2V0QW1vdW50QnlCaWRJZBogCgJmORIaZ2V0QW1vdW50SGlnaGVzdEJpZEJ5QXJ0SWQaFAoCZzESDnZhbGlkYXRlU3RyaW5nGgkKAmcyEgNzdHIaCQoCZzMSA21heBoSCgJnNBIMdmFsaWRhdGVVc2VyGhAKAmc1Egp1c2VyU3RhdHVzGhkKAmc2EhN2YWxpZGF0ZUFydHdvcmtEYXRhGhAKAmc3EgpjaWREaXNwbGF5GgoKAmc4EgRuYW1lGhEKAmc5EgtkZXNjcmlwdGlvbhoKCgJoMRIEdGFncxoPCgJoMhIJY2hlY2tVc2VyGg8KAmgzEglpc1BheW1lbnQaBwoCaDQSAWkaDQoCaDUSB3BheW1lbnQaDAoCaDYSBmFtb3VudBoVCgJoNxIPdmFsaWRhdGVQYXltZW50GhAKAmg4Egp0MDg5ODI5MDE4Gg0KAmg5Egdhc3NldElkGhoKAmkxEhR2YWxpZGF0ZVByaWNlQXNzZXRJZBoSCgJpMhIMcHJpY2VBc3NldElkGhIKAmkzEgxhcnR3b3JrUHJpY2UaEAoCaTQSCnQwOTYxMTk2NDcaFgoCaTUSEGFjY2VwdGVkQXNzZXRJZHMaFQoCaTYSD3ZhbGlkYXRlTWluU2VsbBoLCgJpNxIFcHJpY2UaEwoCaTgSDW1pblNlbGxTY29uZXgaEwoCaTkSDWdldEJpZEFzc2V0SWQaHAoCajESFmdldFByaWNlQXNzZXRJZEZyb21CaWQaEAoCajISCmJpZERhdGFLZXkaDQoCajMSB2JpZERhdGEaEAoCajQSCmJpZERhdGFBcnIaDwoCajUSCWJpZEFtb3VudBoQCgJqNhIKYmlkQXNzZXRJZBoSCgJqNxIMaWRDYWxsZXJEYXRlGhAKAmo4Egppc0JpZENoZWNrGgwKAmo5EgZpc3N1ZXIaDgoCazESCGJpZE93bmVyGhAKAmsyEgpnZXRBcnREYXRhGgsKAmszEgVpc0JpZBoUCgJrNBIOY2FsbGVySXNJc3N1ZXIaDgoCazUSCHRvdGFsTkZUGhEKAms2EgthcnR3b3JrTmFtZRoOCgJrNxIIaXNPblNhbGUaEAoCazgSCmFtb3VudFNvbGQaEAoCazkSCm1heENhblNlbGwaEAoCbDESCmdldEJpZERhdGEaEgoCbDISDHQwMTM1MTkxMzY0OBoXCgJsMxIRZ2V0Q29tbWlzc2lvbkRhdGEaEwoCbDQSDWlzV2hpdGVsaXN0ZWQaCQoCbDUSA2N1dBoVCgJsNhIPYW1vdW50Rm9yU2NvbmV4GhYKAmw3EhBhbW91bnRGb3JDcmVhdG9yGhMKAmw4Eg1uZXdBbW91bnRTb2xkGhIKAmw5EgxnZXRJc3N1ZURhdGEaDwoCbTESCWlzc3VlTWV0YRoOCgJtMhIIaXNzdWVORlQaCwoCbTMSBWlkTkZUGhAKAm00EgpzZWxsU3RhdHVzGhAKAm01EgpyZWNlaXZlTkZUGhIKAm02EgxnZXRCaWRLZXlWYWwaCgoCbTcSBGRhdGUaEAoCbTgSCmFzc2V0SWRCaWQaDwoCbTkSCWJpZERlbE9sZBoPCgJuMRIJYmlkVXBkYXRlGg0KAm4yEgdidXlNaW50GhIKAm4zEgx0MDE1NTE2MTU1NjYaCAoCbjQSAmlkGhIKAm41Egx0MDE1NjQ2MTU3OTcaEgoCbjYSDHQwMTU4MDIxNTk0OBoSCgJuNxIMdDAxNTk1MzE2MDk1GhIKAm44Egx0MDE2MTAwMTYyOTAaEgoCbjkSDHQwMTYyOTUxNjM5NBoNCgJvMRIHc29sZEtleRoPCgJvMhIJc29sZFZhbHVlGg4KAm8zEghzb2xkRGF0YRoMCgJvNBIGYnV5UmVzGhoKAm81EhRzZXRCaWROb25UcmFkaXRpb25hbBoSCgJvNhIMdDAyNzcwOTI3NzQ3GhIKAm83Egx0MDI3NzUyMjc3ODgaDAoCbzgSBmJpZE5ichoXCgJvORIRc2V0QmlkVHJhZGl0aW9uYWwaDwoCcDESCWVuZEhlaWdodBoQCgJwMhIKaGlnaGVzdEJpZBoRCgJwMxILY2FsbGRlckRhdGEaEgoCcDQSDGlzUGF5bWVudFZhchodCgJwNRIXYWNjZXB0QmlkTm9uVHJhZGl0aW9uYWwaFAoCcDYSDnJlc3RhcnRBdWN0aW9uGhIKAnA3EgxvbGRFbmRIZWlnaHQaDgoCcDgSCGR1cmF0aW9uGhoKAnA5EhRhY2NlcHRCaWRUcmFkaXRpb25hbBoSCgJxMRIMaGlnaGVzdEJpZElkGhEKAnEyEgtidXlNaW50RGF0YRoYCgJxMxIScmVzdGFydEF1Y3Rpb25EYXRhGhMKAnE0Eg1jYW5jZWxCaWRJbXBsGhIKAnE1Egx0MDI4OTQyMjkwOTQaDwoCcTYSCWJpZFN0YXR1cxoeCgJxNxIYY2FuY2VsQmlkSW1wbFRyYWRpdGlvbmFsGgoKAnE4EgR0eXBlGhEKAnE5EgtlbnRpdGxlbWVudBoSCgJyMRIMdDAxNzc0MDE3NzgxGhUKAnIyEg92YWxpZGF0ZUFydHdvcmsaEgoCcjMSDHQwMTgxNzAxODIxMhoQCgJyNBIKZW50cnlFeGlzdBoPCgJyNRIJaGFzaEV4aXN0Gg0KAnI2EgdtYXhNaW50GhEKAnI3EgthdWN0aW9uVHlwZRoMCgJyOBIGbWluQmlkGhIKAnI5Egx0MDI1NzE0MjU3NDcaCwoCczESBWVudHJ5AAAASAAAAAACYTEHAAAAAAJhMgkBAAAABXZhbHVlAAAAAQkABCYAAAABAgAAACMzTXBaUWp6R29nbWlmY0VLZThtRGQ2cmliTDdueFQ5QUN5ZQAAAAACYTMCAAAAIzNONjV4THE4SmNDZWFFaVIxVEpRN2RCcVhCdkV5NkU0OFd6AAAAAAJhNAkBAAAABXZhbHVlAAAAAQkABCYAAAABAgAAACMzTjljUWdaRlBISFZ1OHdxc24yRGtRRmVoZzNoOENOaW9vQQAAAAACYTUJAQAAAAV2YWx1ZQAAAAEJAAQmAAAAAQIAAAAjM045eFpZR3B6TUZEWHZYdWN0bVU2elY4cVN6bTJaZkYzMWYAAAAAAmE2AQAAACC6hu0QdKejwH9I+j+G8AYHkraWlmo7ShFw6+pV4JLTMwAAAAACYTcCAAAAIzNOMURocTVaWnlvb2pRaXN1VEx1c1lqbkdpc3FyeER3R0x5AAAAAAJhOAAAAAAAAAAAlgAAAAACYTkJAQAAAAt2YWx1ZU9yRWxzZQAAAAIJAAQbAAAAAgUAAAACYTQCAAAAFGNvbmZfZGFwcF9p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", "height": 1669768, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 2ffxbYUjM33SPjJ8B8g6sae4T7JXqv7QUYYbVZP4BpHr Next: 7pbHprLGtN9CtsK1CPw7Kf89TkptBhLEQ7HNkJhz5ULi Diff:
OldNewDifferences
6969 func keyMinPrice (caller,artId) = ((("art_minprice_" + artId) + "_") + caller)
7070
7171
72-func keyHighestBid (artId) = ("art_highestBid_" + artId)
73-
74-
7572 func keyHighestBidBidId (artId) = ("art_highestBidBidId_" + artId)
7673
7774
121118
122119
123120 let currentCertificationPrice = getIntegerByKeyFromOracle(("certification_fee_" + toBase58String(sconexAssetId)))
121+
122+func getAmountByBidId (bidId) = valueOrElse(getIntegerByKey(keyBidId(bidId)), 0)
123+
124+
125+func getAmountHighestBidByArtId (artId) = {
126+ let bidId = valueOrElse(keyHighestBidBidId(artId), "")
127+ if ((bidId == ""))
128+ then 0
129+ else getAmountByBidId(bidId)
130+ }
131+
124132
125133 func validateString (str,max) = if ((size(str) == 0))
126134 then throw("Field cannot be is empty")
434442
435443 func setBidTraditional (i,artId,issuer) = {
436444 let endHeight = getIntegerByKey(keyEndHeight(issuer, artId))
437- let highestBid = getIntegerByKey(keyHighestBid(artId))
445+ let highestBid = getAmountHighestBidByArtId(artId)
438446 if ((height > endHeight))
439447 then throw("This auction is finished already!")
440448 else {
463471 then throw("No max edition set for this artwork")
464472 else if ((amountSold >= maxCanSell))
465473 then throw("Sold out, you cannot bid")
466- else [StringEntry((((((((("bid_" + artId) + "_") + issuer) + "_") + caller) + "_") + id) + "_OPEN"), ((((assetId + "_") + toString(amount)) + "_") + toString(date))), IntegerEntry(("current_bidamount_" + artId), (bidNbr + 1)), IntegerEntry(keyHighestBid(artId), amount), StringEntry(keyHighestBidBidId(artId), toBase58String(i.transactionId)), IntegerEntry(keyBidId(toBase58String(i.transactionId)), amount)]
474+ else [StringEntry((((((((("bid_" + artId) + "_") + issuer) + "_") + caller) + "_") + id) + "_OPEN"), ((((assetId + "_") + toString(amount)) + "_") + toString(date))), IntegerEntry(("current_bidamount_" + artId), (bidNbr + 1)), StringEntry(keyHighestBidBidId(artId), toBase58String(i.transactionId)), IntegerEntry(keyBidId(toBase58String(i.transactionId)), amount)]
467475 }
468476 }
469477 }
487495 if ((height > oldEndHeight))
488496 then if ((amountSold == maxCanSell))
489497 then throw("Can't restart auction, max amount sold")
490- else [IntegerEntry(keyHighestBid(artId), 0), IntegerEntry(keyDuration(issuer, artId), duration), IntegerEntry(keyEndHeight(issuer, artId), endHeight)]
498+ else [IntegerEntry(keyEndHeight(issuer, artId), endHeight), DeleteEntry(keyHighestBidBidId(artId))]
491499 else throw("Previous auction isn't completed yet")
492500 }
493501
494502
495503 func acceptBidTraditional (i,artId,issuer,bidId,bidOwner) = {
496504 let endHeight = getIntegerByKey(keyEndHeight(issuer, artId))
497- let highestBid = getIntegerByKey(keyHighestBid(artId))
498- let amountByBidId = getIntegerByKey(keyBidId(bidId))
505+ let highestBidId = getStringByKey(keyHighestBidBidId(artId))
499506 if ((height > endHeight))
500- then if ((amountByBidId == highestBid))
507+ then if ((bidId == highestBidId))
501508 then {
502509 let buyMintData = buyMint(i, artId, issuer, bidId, bidOwner)
503510 let restartAuctionData = restartAuction(artId, issuer)
542549 let assetId = getBidAssetId(bidDataArr[0])
543550 let bidStatus = "CANCELED"
544551 let bidAmount = parseIntValue(bidDataArr[1])
545- let highestBid = getIntegerByKey(keyHighestBid(artId))
546- if ((bidAmount == highestBid))
552+ let highestBidId = getStringByKey(keyHighestBidBidId(artId))
553+ if ((bidId == highestBidId))
547554 then throw("You can't cancel the highest bid!")
548555 else [DeleteEntry((bidDataKey + "_OPEN")), StringEntry(((bidDataKey + "_") + bidStatus), ((bidData + "_") + toString(date))), IntegerEntry(("current_bidamount_" + artId), (bidNbr - 1)), ScriptTransfer(Address(fromBase58String(caller)), bidAmount, assetId)]
549556 }
625632 then true
626633 else false
627634 let endHeight = (duration + height)
628-[BooleanEntry(keyOnSale(caller, artId), sellStatus), IntegerEntry(keyPrice(caller, artId), price), IntegerEntry(keyMaxMint(caller, artId), maxMint), IntegerEntry(keyMinPrice(caller, artId), minBid), IntegerEntry(keyDuration(caller, artId), duration), IntegerEntry(keyEndHeight(caller, artId), endHeight), StringEntry(keyAssetIdAccepted(caller, artId), assetId), StringEntry(keyAuctionType(caller, artId), auctionType), IntegerEntry(keyHighestBid(artId), 0)]
635+[BooleanEntry(keyOnSale(caller, artId), sellStatus), IntegerEntry(keyPrice(caller, artId), price), IntegerEntry(keyMaxMint(caller, artId), maxMint), IntegerEntry(keyMinPrice(caller, artId), minBid), IntegerEntry(keyDuration(caller, artId), duration), IntegerEntry(keyEndHeight(caller, artId), endHeight), StringEntry(keyAssetIdAccepted(caller, artId), assetId), StringEntry(keyAuctionType(caller, artId), auctionType)]
629636 }
630637 }
631638 }
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 5 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let unitTest = false
55
66 let oracleFee = value(addressFromString("3MpZQjzGogmifcEKe8mDd6ribL7nxT9ACye"))
77
88 let feeReceiver = "3N65xLq8JcCeaEiR1TJQ7dBqXBvEy6E48Wz"
99
1010 let userDapp = value(addressFromString("3N9cQgZFPHHVu8wqsn2DkQFehg3h8CNiooA"))
1111
1212 let whitelistDapp = value(addressFromString("3N9xZYGpzMFDXvXuctmU6zV8qSzm2ZfF31f"))
1313
1414 let sconexAssetId = base58'DZ8ALmuLeSZ2ocsYLAcL9MiXBFDbMNQG9LtitREyU5ZC'
1515
1616 let owner = "3N1Dhq5ZZyoojQisuTLusYjnGisqrxDwGLy"
1717
1818 let sconexFirstSellCut = 150
1919
2020 let dappRunning = valueOrElse(getBoolean(userDapp, "conf_dapp_is_running"), true)
2121
2222 let maintenanceMSG = valueOrElse(getString(userDapp, "conf_maintenance_msg"), "")
2323
2424 let userSuspended = "SUSPENDED"
2525
2626 let userRemoved = "REMOVED"
2727
2828 let userUnregistered = "UNREGISTERED"
2929
3030 let userAllowed = "ALLOWED"
3131
3232 let auctionType1 = "BIDTYPE"
3333
3434 let auctionType2 = "TRADITIONAL"
3535
3636 func getStringByKey (key) = valueOrElse(getString(this, key), "")
3737
3838
3939 func getIntegerByKeyFromOracle (key) = valueOrErrorMessage(getInteger(oracleFee, key), "Integer undefine or 0 in oracle")
4040
4141
4242 func getIntegerByKey (key) = valueOrElse(getInteger(this, key), 0)
4343
4444
4545 func checkWhitelist (key) = valueOrElse(getInteger(whitelistDapp, key), 0)
4646
4747
4848 func getBooleanByKey (key) = valueOrElse(getBoolean(this, key), false)
4949
5050
5151 func keyUserStatus (caller) = ("user_status_" + caller)
5252
5353
5454 func keyDate (caller,artId) = ((("art_date_" + artId) + "_") + caller)
5555
5656
5757 func keyName (caller,artId) = ((("art_name_" + artId) + "_") + caller)
5858
5959
6060 func keyDesc (caller,artId) = ((("art_desc_" + artId) + "_") + caller)
6161
6262
6363 func keyDisplayCid (caller,artId) = ((("art_display_cid_" + artId) + "_") + caller)
6464
6565
6666 func keyMaxMint (caller,artId) = ((("art_maxmint_" + artId) + "_") + caller)
6767
6868
6969 func keyMinPrice (caller,artId) = ((("art_minprice_" + artId) + "_") + caller)
7070
7171
72-func keyHighestBid (artId) = ("art_highestBid_" + artId)
73-
74-
7572 func keyHighestBidBidId (artId) = ("art_highestBidBidId_" + artId)
7673
7774
7875 func keyBidId (bidId) = ("bid_" + bidId)
7976
8077
8178 func keyDuration (caller,artId) = ((("art_duration_" + artId) + "_") + caller)
8279
8380
8481 func keyEndHeight (caller,artId) = ((("art_endheight_" + artId) + "_") + caller)
8582
8683
8784 func keyAuctionType (caller,artId) = ((("art_auctiontype_" + artId) + "_") + caller)
8885
8986
9087 func keyIssued (caller,artId) = ((("art_issued_" + artId) + "_") + caller)
9188
9289
9390 func KeyNftIssuer (nftId) = ("nft_issued_" + nftId)
9491
9592
9693 func keyOnSale (caller,artId) = ((("art_onsale_" + artId) + "_") + caller)
9794
9895
9996 func keyEntitlement (caller,artId) = ((("art_entitlement_" + artId) + "_") + caller)
10097
10198
10299 func keyTags (caller,artId) = ((("art_tags_" + artId) + "_") + caller)
103100
104101
105102 func keyType (caller,artId) = ((("art_type_" + artId) + "_") + caller)
106103
107104
108105 func keyPrice (caller,artId) = ((("art_price_" + artId) + "_") + caller)
109106
110107
111108 func keyAssetIdAccepted (caller,artId) = ((("art_assetAccepted_" + artId) + "_") + caller)
112109
113110
114111 func keyHashByTxidAddr (caller,txid) = ((("get_hashbytxidaddr_" + txid) + "_") + caller)
115112
116113
117114 func keyOwnerByHash (sha256Hash) = ("get_owner_by_hash_" + sha256Hash)
118115
119116
120117 func keyTxidByHashOwner (sha256Hash,caller) = ("get_txid_by_hash_owner_" + toBase58String(sha256_16Kb(toBytes((sha256Hash + caller)))))
121118
122119
123120 let currentCertificationPrice = getIntegerByKeyFromOracle(("certification_fee_" + toBase58String(sconexAssetId)))
121+
122+func getAmountByBidId (bidId) = valueOrElse(getIntegerByKey(keyBidId(bidId)), 0)
123+
124+
125+func getAmountHighestBidByArtId (artId) = {
126+ let bidId = valueOrElse(keyHighestBidBidId(artId), "")
127+ if ((bidId == ""))
128+ then 0
129+ else getAmountByBidId(bidId)
130+ }
131+
124132
125133 func validateString (str,max) = if ((size(str) == 0))
126134 then throw("Field cannot be is empty")
127135 else if ((size(str) > max))
128136 then throw((str + " is too long"))
129137 else true
130138
131139
132140 func validateUser (caller) = {
133141 let userStatus = valueOrElse(getString(userDapp, keyUserStatus(caller)), userUnregistered)
134142 if (if ((userStatus == userUnregistered))
135143 then true
136144 else (userStatus == userAllowed))
137145 then "Register this account first with 'Account' tab"
138146 else if ((userStatus == userSuspended))
139147 then "Account suspended"
140148 else if ((userStatus == userRemoved))
141149 then "Account removed"
142150 else ""
143151 }
144152
145153
146154 func validateArtworkData (caller,cidDisplay,name,description,tags) = {
147155 let checkUser = validateUser(caller)
148156 if ((checkUser != ""))
149157 then throw(checkUser)
150158 else if ((size(cidDisplay) == 0))
151159 then throw("Display CID cannot be empty")
152160 else if (!(validateString(name, 100)))
153161 then throw("100 Char. max name")
154162 else if (!(validateString(description, 1000)))
155163 then throw("1000 Char. max description")
156164 else if ((size(split(tags, ",")) > 5))
157165 then throw("5 tags max.")
158166 else ""
159167 }
160168
161169
162170 func isPayment (i) = if ((size(i.payments) == 0))
163171 then throw("No payment attached")
164172 else {
165173 let payment = value(i.payments[0])
166174 let amount = value(payment.amount)
167175 $Tuple2(payment, amount)
168176 }
169177
170178
171179 func validatePayment (i) = {
172180 let t089829018 = isPayment(i)
173181 let payment = t089829018._1
174182 let amount = t089829018._2
175183 let assetId = if (if (isDefined(payment.assetId))
176184 then (payment.assetId == sconexAssetId)
177185 else false)
178186 then payment.assetId
179187 else throw("Only Sconex token accepted as transaction fee")
180188 if ((amount != currentCertificationPrice))
181189 then throw(("Payment amount should be " + toString(currentCertificationPrice)))
182190 else $Tuple2(amount, assetId)
183191 }
184192
185193
186194 func validatePriceAssetId (i,priceAssetId,artworkPrice) = {
187195 let t096119647 = isPayment(i)
188196 let payment = t096119647._1
189197 let amount = t096119647._2
190198 let assetId = if (!(isDefined(payment.assetId)))
191199 then throw("Wrong asset id")
192200 else if (if ((size(priceAssetId) > 0))
193201 then (toBase58String(value(payment.assetId)) == priceAssetId)
194202 else false)
195203 then payment.assetId
196204 else throw("Wrong asset id")
197205 if (if ((assetId == unit))
198206 then (priceAssetId != "")
199207 else false)
200208 then throw("Wrong asset id")
201209 else if ((artworkPrice != amount))
202210 then throw("Payment don't match")
203211 else $Tuple2(amount, assetId)
204212 }
205213
206214
207215 func acceptedAssetIds (assetId) = if ((assetId != toBase58String(sconexAssetId)))
208216 then throw("Only Sconex accepted")
209217 else true
210218
211219
212220 func validateMinSell (assetId,price) = {
213221 let minSellSconex = if (unitTest)
214222 then 1
215223 else (currentCertificationPrice * 2)
216224 if (if (if ((assetId == toBase58String(sconexAssetId)))
217225 then (minSellSconex > price)
218226 else false)
219227 then (price != 0)
220228 else false)
221229 then throw(("Wrong minimum sell price " + toString(minSellSconex)))
222230 else true
223231 }
224232
225233
226234 func getBidAssetId (assetId) = if ((assetId == "WAVES"))
227235 then throw("Only sconex is accepted!")
228236 else fromBase58String(assetId)
229237
230238
231239 func getPriceAssetIdFromBid (bidDataKey) = {
232240 let bidData = getStringByKey((bidDataKey + "_OPEN"))
233241 if ((bidData == ""))
234242 then throw("Bid not found")
235243 else {
236244 let bidDataArr = split(bidData, "_")
237245 let bidAmount = parseIntValue(bidDataArr[1])
238246 let bidAssetId = getBidAssetId(bidDataArr[0])
239247 if ((0 >= bidAmount))
240248 then throw("Wrong amount")
241249 else $Tuple2(bidAmount, bidAssetId)
242250 }
243251 }
244252
245253
246254 func idCallerDate (i) = if (!(dappRunning))
247255 then throw(maintenanceMSG)
248256 else $Tuple3(toBase58String(i.transactionId), toBase58String(i.caller.bytes), lastBlock.timestamp)
249257
250258
251259 func isBidCheck (i,issuer,bidOwner,bidId) = if (if (if ((toBase58String(i.caller.bytes) == issuer))
252260 then (bidOwner != "")
253261 else false)
254262 then (bidId != "")
255263 else false)
256264 then true
257265 else false
258266
259267
260268 func getArtData (i,issuer,artId,isBid) = {
261269 let callerIsIssuer = (toBase58String(i.caller.bytes) == issuer)
262270 let totalNFT = getIntegerByKey("total_nft_issued")
263271 let artworkName = getStringByKey(keyName(issuer, artId))
264272 if ((artworkName == ""))
265273 then throw("Art doesn't exist")
266274 else {
267275 let isOnSale = getBooleanByKey(keyOnSale(issuer, artId))
268276 let amountSold = getIntegerByKey(keyIssued(issuer, artId))
269277 let artworkPrice = if (callerIsIssuer)
270278 then (currentCertificationPrice * 2)
271279 else getIntegerByKey(keyPrice(issuer, artId))
272280 let priceAssetId = if (callerIsIssuer)
273281 then toBase58String(sconexAssetId)
274282 else getStringByKey(keyAssetIdAccepted(issuer, artId))
275283 let maxCanSell = getIntegerByKey(keyMaxMint(issuer, artId))
276284 if (if (if (!(isBid))
277285 then !(callerIsIssuer)
278286 else false)
279287 then if (if ((0 >= artworkPrice))
280288 then true
281289 else !(isOnSale))
282290 then true
283291 else (0 >= maxCanSell)
284292 else false)
285293 then throw("Art not for sale")
286294 else if (if (if (!(isBid))
287295 then callerIsIssuer
288296 else false)
289297 then (0 >= maxCanSell)
290298 else false)
291299 then throw("Max issuable not set")
292300 else $Tuple7(totalNFT, artworkName, amountSold, artworkPrice, priceAssetId, maxCanSell, isOnSale)
293301 }
294302 }
295303
296304
297305 func getBidData (i,caller,issuer,artId,bidOwner,bidId,priceAssetId,artworkPrice,isBid) = {
298306 let checkUser = validateUser(issuer)
299307 if (if (isBid)
300308 then (checkUser != "")
301309 else false)
302310 then throw(checkUser)
303311 else {
304312 let bidDataKey = ((((((("bid_" + artId) + "_") + issuer) + "_") + bidOwner) + "_") + bidId)
305313 let t01351913648 = if (isBid)
306314 then getPriceAssetIdFromBid(bidDataKey)
307315 else validatePriceAssetId(i, priceAssetId, artworkPrice)
308316 let amount = t01351913648._1
309317 let assetId = t01351913648._2
310318 $Tuple3(bidDataKey, amount, assetId)
311319 }
312320 }
313321
314322
315323 func getCommissionData (issuer,assetId,amount,amountSold,maxCanSell) = {
316324 let isWhitelisted = checkWhitelist(issuer)
317325 let cut = if ((isWhitelisted > height))
318326 then 0
319327 else if ((assetId == sconexAssetId))
320328 then sconexFirstSellCut
321329 else throw("Only Sconex is accepted!")
322330 let amountForSconex = fraction(amount, cut, 1000)
323331 let amountForCreator = (amount - amountForSconex)
324332 if ((amountSold == maxCanSell))
325333 then throw("Art sold out")
326334 else {
327335 let newAmountSold = (amountSold + 1)
328336 $Tuple3(amountForSconex, amountForCreator, newAmountSold)
329337 }
330338 }
331339
332340
333341 func getIssueData (issuer,artId,artworkName,newAmountSold,maxCanSell,totalNFT,caller,bidOwner,bidId,i,isOnSale) = {
334342 let issueMeta = ((((((((("Creator: " + issuer) + ",ArtID: ") + artId) + ",Artwork name: ") + artworkName) + ",Issue: ") + toString(newAmountSold)) + "/") + toString(maxCanSell))
335343 let issueNFT = Issue(("SCONEX_" + toString((totalNFT + 1))), issueMeta, 1, 0, false)
336344 let idNFT = calculateAssetId(issueNFT)
337345 let sellStatus = if (if ((newAmountSold == maxCanSell))
338346 then true
339347 else !(isOnSale))
340348 then false
341349 else true
342350 let receiveNFT = if (if (if ((caller == issuer))
343351 then (bidOwner != "")
344352 else false)
345353 then (bidId != "")
346354 else false)
347355 then addressFromStringValue(bidOwner)
348356 else i.caller
349357 $Tuple4(issueNFT, idNFT, sellStatus, receiveNFT)
350358 }
351359
352360
353361 func getBidKeyVal (assetId,bidDataKey,date) = {
354362 let assetIdBid = if (!(isDefined(assetId)))
355363 then throw("Only sconex is accepted")
356364 else toBase58String(value(assetId))
357365 let bidData = getStringByKey((bidDataKey + "_OPEN"))
358366 let bidDelOld = DeleteEntry((bidDataKey + "_OPEN"))
359367 let bidUpdate = StringEntry((bidDataKey + "_CLOSED"), ((bidData + "_") + toString(date)))
360368 $Tuple3(assetIdBid, bidDelOld, bidUpdate)
361369 }
362370
363371
364372 func buyMint (i,artId,issuer,bidId,bidOwner) = {
365373 let t01551615566 = idCallerDate(i)
366374 let id = t01551615566._1
367375 let caller = t01551615566._2
368376 let date = t01551615566._3
369377 let isBid = isBidCheck(i, issuer, bidOwner, bidId)
370378 let t01564615797 = getArtData(i, issuer, artId, isBid)
371379 let totalNFT = t01564615797._1
372380 let artworkName = t01564615797._2
373381 let amountSold = t01564615797._3
374382 let artworkPrice = t01564615797._4
375383 let priceAssetId = t01564615797._5
376384 let maxCanSell = t01564615797._6
377385 let isOnSale = t01564615797._7
378386 let t01580215948 = getBidData(i, caller, issuer, artId, bidOwner, bidId, priceAssetId, artworkPrice, isBid)
379387 let bidDataKey = t01580215948._1
380388 let amount = t01580215948._2
381389 let assetId = t01580215948._3
382390 let t01595316095 = getCommissionData(issuer, value(assetId), amount, amountSold, maxCanSell)
383391 let amountForSconex = t01595316095._1
384392 let amountForCreator = t01595316095._2
385393 let newAmountSold = t01595316095._3
386394 let t01610016290 = getIssueData(issuer, artId, artworkName, newAmountSold, maxCanSell, totalNFT, caller, bidOwner, bidId, i, isOnSale)
387395 let issueNFT = t01610016290._1
388396 let idNFT = t01610016290._2
389397 let sellStatus = t01610016290._3
390398 let receiveNFT = t01610016290._4
391399 let t01629516394 = getBidKeyVal(assetId, bidDataKey, date)
392400 let assetIdBid = t01629516394._1
393401 let bidDelOld = t01629516394._2
394402 let bidUpdate = t01629516394._3
395403 let soldKey = ((((((("art_sold_" + toString(newAmountSold)) + "_of_") + toString(maxCanSell)) + "_") + artId) + "_") + issuer)
396404 let soldValue = if (!(isBid))
397405 then ((((((((((caller + "_") + toString(date)) + "_") + id) + "_") + toString(artworkPrice)) + "_") + priceAssetId) + "_") + toBase58String(idNFT))
398406 else ((((((((((toString(receiveNFT) + "_") + toString(date)) + "_") + id) + "_") + toString(amount)) + "_") + assetIdBid) + "_") + toBase58String(idNFT))
399407 let soldData = StringEntry(soldKey, soldValue)
400408 let buyRes = [IntegerEntry(keyIssued(issuer, artId), newAmountSold), StringEntry(("nft_" + toBase58String(idNFT)), soldKey), IntegerEntry("total_nft_issued", (totalNFT + 1)), BooleanEntry(keyOnSale(issuer, artId), sellStatus), issueNFT, ScriptTransfer(Address(fromBase58String(issuer)), amountForCreator, assetId), ScriptTransfer(Address(fromBase58String(feeReceiver)), amountForSconex, assetId), ScriptTransfer(receiveNFT, 1, idNFT), StringEntry(KeyNftIssuer(toBase58String(idNFT)), issuer)]
401409 if (isBid)
402410 then (((buyRes :+ soldData) :+ bidUpdate) :+ bidDelOld)
403411 else soldData :: buyRes
404412 }
405413
406414
407415 func setBidNonTraditional (i,artId,issuer) = {
408416 let t02770927747 = idCallerDate(i)
409417 let id = t02770927747._1
410418 let caller = t02770927747._2
411419 let date = t02770927747._3
412420 let t02775227788 = isPayment(i)
413421 let payment = t02775227788._1
414422 let amount = t02775227788._2
415423 let assetId = if (!(isDefined(payment.assetId)))
416424 then throw("Only sconex is accepted!")
417425 else toBase58String(value(payment.assetId))
418426 let bidNbr = getIntegerByKey(("current_bidamount_" + artId))
419427 if (!(acceptedAssetIds(assetId)))
420428 then throw("asset not accepted")
421429 else if (!(validateMinSell(assetId, amount)))
422430 then throw("Wrong min sell")
423431 else {
424432 let amountSold = getIntegerByKey(keyIssued(issuer, artId))
425433 let maxCanSell = getIntegerByKey(keyMaxMint(issuer, artId))
426434 if ((0 >= maxCanSell))
427435 then throw("No max edition set for this artwork")
428436 else if ((amountSold >= maxCanSell))
429437 then throw("Sold out, you cannot bid")
430438 else [StringEntry((((((((("bid_" + artId) + "_") + issuer) + "_") + caller) + "_") + id) + "_OPEN"), ((((assetId + "_") + toString(amount)) + "_") + toString(date))), IntegerEntry(("current_bidamount_" + artId), (bidNbr + 1))]
431439 }
432440 }
433441
434442
435443 func setBidTraditional (i,artId,issuer) = {
436444 let endHeight = getIntegerByKey(keyEndHeight(issuer, artId))
437- let highestBid = getIntegerByKey(keyHighestBid(artId))
445+ let highestBid = getAmountHighestBidByArtId(artId)
438446 if ((height > endHeight))
439447 then throw("This auction is finished already!")
440448 else {
441449 let callderData = idCallerDate(i)
442450 let id = callderData._1
443451 let caller = callderData._2
444452 let date = callderData._3
445453 let isPaymentVar = isPayment(i)
446454 let payment = isPaymentVar._1
447455 let amount = isPaymentVar._2
448456 if ((highestBid >= amount))
449457 then throw(("Please place a bid higher then: " + toString(highestBid)))
450458 else {
451459 let assetId = if (!(isDefined(payment.assetId)))
452460 then throw("Only sconex is accepted!")
453461 else toBase58String(value(payment.assetId))
454462 let bidNbr = getIntegerByKey(("current_bidamount_" + artId))
455463 if (!(acceptedAssetIds(assetId)))
456464 then throw("asset not accepted")
457465 else if (!(validateMinSell(assetId, amount)))
458466 then throw("Wrong min sell")
459467 else {
460468 let amountSold = getIntegerByKey(keyIssued(issuer, artId))
461469 let maxCanSell = getIntegerByKey(keyMaxMint(issuer, artId))
462470 if ((0 >= maxCanSell))
463471 then throw("No max edition set for this artwork")
464472 else if ((amountSold >= maxCanSell))
465473 then throw("Sold out, you cannot bid")
466- else [StringEntry((((((((("bid_" + artId) + "_") + issuer) + "_") + caller) + "_") + id) + "_OPEN"), ((((assetId + "_") + toString(amount)) + "_") + toString(date))), IntegerEntry(("current_bidamount_" + artId), (bidNbr + 1)), IntegerEntry(keyHighestBid(artId), amount), StringEntry(keyHighestBidBidId(artId), toBase58String(i.transactionId)), IntegerEntry(keyBidId(toBase58String(i.transactionId)), amount)]
474+ else [StringEntry((((((((("bid_" + artId) + "_") + issuer) + "_") + caller) + "_") + id) + "_OPEN"), ((((assetId + "_") + toString(amount)) + "_") + toString(date))), IntegerEntry(("current_bidamount_" + artId), (bidNbr + 1)), StringEntry(keyHighestBidBidId(artId), toBase58String(i.transactionId)), IntegerEntry(keyBidId(toBase58String(i.transactionId)), amount)]
467475 }
468476 }
469477 }
470478 }
471479
472480
473481 func acceptBidNonTraditional (i,artId,issuer,bidId,bidOwner) = {
474482 let caller = toBase58String(i.caller.bytes)
475483 if ((caller != issuer))
476484 then throw("You cannot do this action")
477485 else buyMint(i, artId, issuer, bidId, bidOwner)
478486 }
479487
480488
481489 func restartAuction (artId,issuer) = {
482490 let amountSold = getIntegerByKey(keyIssued(issuer, artId))
483491 let maxCanSell = getIntegerByKey(keyMaxMint(issuer, artId))
484492 let oldEndHeight = getIntegerByKey(keyEndHeight(issuer, artId))
485493 let duration = getIntegerByKey(keyDuration(issuer, artId))
486494 let endHeight = (duration + height)
487495 if ((height > oldEndHeight))
488496 then if ((amountSold == maxCanSell))
489497 then throw("Can't restart auction, max amount sold")
490- else [IntegerEntry(keyHighestBid(artId), 0), IntegerEntry(keyDuration(issuer, artId), duration), IntegerEntry(keyEndHeight(issuer, artId), endHeight)]
498+ else [IntegerEntry(keyEndHeight(issuer, artId), endHeight), DeleteEntry(keyHighestBidBidId(artId))]
491499 else throw("Previous auction isn't completed yet")
492500 }
493501
494502
495503 func acceptBidTraditional (i,artId,issuer,bidId,bidOwner) = {
496504 let endHeight = getIntegerByKey(keyEndHeight(issuer, artId))
497- let highestBid = getIntegerByKey(keyHighestBid(artId))
498- let amountByBidId = getIntegerByKey(keyBidId(bidId))
505+ let highestBidId = getStringByKey(keyHighestBidBidId(artId))
499506 if ((height > endHeight))
500- then if ((amountByBidId == highestBid))
507+ then if ((bidId == highestBidId))
501508 then {
502509 let buyMintData = buyMint(i, artId, issuer, bidId, bidOwner)
503510 let restartAuctionData = restartAuction(artId, issuer)
504511 (restartAuctionData ++ buyMintData)
505512 }
506513 else throw("This is not the winning bid!")
507514 else throw("This auction is not yet finished!")
508515 }
509516
510517
511518 func cancelBidImpl (i,artId,issuer,bidId) = {
512519 let t02894229094 = idCallerDate(i)
513520 let id = t02894229094._1
514521 let caller = t02894229094._2
515522 let date = t02894229094._3
516523 let bidNbr = getIntegerByKey(("current_bidamount_" + artId))
517524 let bidDataKey = ((((((("bid_" + artId) + "_") + issuer) + "_") + caller) + "_") + bidId)
518525 let bidData = getStringByKey((bidDataKey + "_OPEN"))
519526 if ((bidData == ""))
520527 then throw("Bid not found")
521528 else {
522529 let bidDataArr = split(bidData, "_")
523530 let assetId = getBidAssetId(bidDataArr[0])
524531 let bidStatus = "CANCELED"
525532 [DeleteEntry((bidDataKey + "_OPEN")), StringEntry(((bidDataKey + "_") + bidStatus), ((bidData + "_") + toString(date))), IntegerEntry(("current_bidamount_" + artId), (bidNbr - 1)), ScriptTransfer(Address(fromBase58String(caller)), parseIntValue(bidDataArr[1]), assetId)]
526533 }
527534 }
528535
529536
530537 func cancelBidImplTraditional (i,artId,issuer,bidId) = {
531538 let t02894229094 = idCallerDate(i)
532539 let id = t02894229094._1
533540 let caller = t02894229094._2
534541 let date = t02894229094._3
535542 let bidNbr = getIntegerByKey(("current_bidamount_" + artId))
536543 let bidDataKey = ((((((("bid_" + artId) + "_") + issuer) + "_") + caller) + "_") + bidId)
537544 let bidData = getStringByKey((bidDataKey + "_OPEN"))
538545 if ((bidData == ""))
539546 then throw("Bid not found")
540547 else {
541548 let bidDataArr = split(bidData, "_")
542549 let assetId = getBidAssetId(bidDataArr[0])
543550 let bidStatus = "CANCELED"
544551 let bidAmount = parseIntValue(bidDataArr[1])
545- let highestBid = getIntegerByKey(keyHighestBid(artId))
546- if ((bidAmount == highestBid))
552+ let highestBidId = getStringByKey(keyHighestBidBidId(artId))
553+ if ((bidId == highestBidId))
547554 then throw("You can't cancel the highest bid!")
548555 else [DeleteEntry((bidDataKey + "_OPEN")), StringEntry(((bidDataKey + "_") + bidStatus), ((bidData + "_") + toString(date))), IntegerEntry(("current_bidamount_" + artId), (bidNbr - 1)), ScriptTransfer(Address(fromBase58String(caller)), bidAmount, assetId)]
549556 }
550557 }
551558
552559
553560 @Callable(i)
554561 func addArtwork (sha256Hash,name,description,tags,type,cidDisplay,entitlement) = {
555562 let t01774017781 = idCallerDate(i)
556563 let artId = t01774017781._1
557564 let caller = t01774017781._2
558565 let date = t01774017781._3
559566 let validateArtwork = validateArtworkData(caller, cidDisplay, name, description, tags)
560567 if ((validateArtwork != ""))
561568 then throw("Something went wrong!")
562569 else {
563570 let t01817018212 = validatePayment(i)
564571 let amount = t01817018212._1
565572 let assetId = t01817018212._2
566573 if (!(isDefined(amount)))
567574 then throw("Something went wrong")
568575 else {
569576 let entryExist = getStringByKey(keyTxidByHashOwner(sha256Hash, caller))
570577 if ((entryExist != ""))
571578 then throw("You already added it")
572579 else {
573580 let hashExist = getStringByKey(keyOwnerByHash(sha256Hash))
574581 if ((hashExist != ""))
575582 then throw("Hash already registered")
576583 else [StringEntry(keyOwnerByHash(sha256Hash), caller), StringEntry(keyTxidByHashOwner(sha256Hash, caller), artId), IntegerEntry(keyDate(caller, artId), date), StringEntry(keyName(caller, artId), name), StringEntry(keyDesc(caller, artId), description), StringEntry(keyDisplayCid(caller, artId), cidDisplay), StringEntry(keyType(caller, artId), type), StringEntry(keyTags(caller, artId), tags), IntegerEntry(keyMaxMint(caller, artId), 0), IntegerEntry(keyIssued(caller, artId), 0), BooleanEntry(keyOnSale(caller, artId), false), StringEntry(keyHashByTxidAddr(caller, artId), sha256Hash), StringEntry(keyEntitlement(caller, artId), entitlement), ScriptTransfer(Address(fromBase58String(feeReceiver)), amount, assetId)]
577584 }
578585 }
579586 }
580587 }
581588
582589
583590
584591 @Callable(i)
585592 func sellArtwork (artId,price,maxMint,assetId,auctionType,minBid,duration) = {
586593 let t02571425747 = idCallerDate(i)
587594 let id = t02571425747._1
588595 let caller = t02571425747._2
589596 let artworkName = getStringByKey(keyName(caller, artId))
590597 if (!(containsElement([auctionType1, auctionType2], auctionType)))
591598 then throw("We dont know this auction type")
592599 else if ((artworkName == ""))
593600 then throw("This art doesn't match your account")
594601 else {
595602 let bidNbr = getIntegerByKey(("current_bidamount_" + artId))
596603 if (!(acceptedAssetIds(assetId)))
597604 then throw("Something went wrong!")
598605 else if (!(validateMinSell(assetId, price)))
599606 then throw("Something went wrong!")
600607 else {
601608 let checkUser = validateUser(caller)
602609 if ((checkUser != ""))
603610 then throw(checkUser)
604611 else {
605612 let amountSold = getIntegerByKey(keyIssued(caller, artId))
606613 let maxCanSell = getIntegerByKey(keyMaxMint(caller, artId))
607614 if ((maxMint > 10))
608615 then throw("10 editions max per artwork")
609616 else if (if ((amountSold != 0))
610617 then (amountSold == maxCanSell)
611618 else false)
612619 then throw("Max edition reached.")
613620 else if (if ((amountSold > 0))
614621 then (maxCanSell != maxMint)
615622 else false)
616623 then throw("Cannot change maximum issuable anymore")
617624 else if (if ((bidNbr > 0))
618625 then (maxCanSell != maxMint)
619626 else false)
620627 then throw("Cannot change maximum issuable with active orders")
621628 else {
622629 let sellStatus = if (if ((price > 0))
623630 then (maxMint > 0)
624631 else false)
625632 then true
626633 else false
627634 let endHeight = (duration + height)
628-[BooleanEntry(keyOnSale(caller, artId), sellStatus), IntegerEntry(keyPrice(caller, artId), price), IntegerEntry(keyMaxMint(caller, artId), maxMint), IntegerEntry(keyMinPrice(caller, artId), minBid), IntegerEntry(keyDuration(caller, artId), duration), IntegerEntry(keyEndHeight(caller, artId), endHeight), StringEntry(keyAssetIdAccepted(caller, artId), assetId), StringEntry(keyAuctionType(caller, artId), auctionType), IntegerEntry(keyHighestBid(artId), 0)]
635+[BooleanEntry(keyOnSale(caller, artId), sellStatus), IntegerEntry(keyPrice(caller, artId), price), IntegerEntry(keyMaxMint(caller, artId), maxMint), IntegerEntry(keyMinPrice(caller, artId), minBid), IntegerEntry(keyDuration(caller, artId), duration), IntegerEntry(keyEndHeight(caller, artId), endHeight), StringEntry(keyAssetIdAccepted(caller, artId), assetId), StringEntry(keyAuctionType(caller, artId), auctionType)]
629636 }
630637 }
631638 }
632639 }
633640 }
634641
635642
636643
637644 @Callable(i)
638645 func buyArtwork (artId,issuer) = buyMint(i, artId, issuer, "", "")
639646
640647
641648
642649 @Callable(i)
643650 func deleteEntry (entry) = {
644651 let caller = toString(addressFromPublicKey(i.callerPublicKey))
645652 if ((caller == owner))
646653 then [DeleteEntry(entry)]
647654 else throw("no")
648655 }
649656
650657
651658
652659 @Callable(i)
653660 func setBid (artId,issuer) = {
654661 let auctionType = getStringByKey(keyAuctionType(issuer, artId))
655662 if ((auctionType == auctionType1))
656663 then setBidNonTraditional(i, artId, issuer)
657664 else if ((auctionType == auctionType2))
658665 then setBidTraditional(i, artId, issuer)
659666 else throw((("Unknown auction type :" + auctionType) + ", please contact the admins"))
660667 }
661668
662669
663670
664671 @Callable(i)
665672 func acceptBid (artId,issuer,bidId,bidOwner) = {
666673 let auctionType = getStringByKey(keyAuctionType(issuer, artId))
667674 if ((auctionType == auctionType1))
668675 then acceptBidNonTraditional(i, artId, issuer, bidId, bidOwner)
669676 else if ((auctionType == auctionType2))
670677 then acceptBidTraditional(i, artId, issuer, bidId, bidOwner)
671678 else throw((("Unknown auction type :" + auctionType) + ", please contact the admins"))
672679 }
673680
674681
675682
676683 @Callable(i)
677684 func cancelBid (artId,issuer,bidId) = {
678685 let auctionType = getStringByKey(keyAuctionType(issuer, artId))
679686 if ((auctionType == auctionType1))
680687 then cancelBidImpl(i, artId, issuer, bidId)
681688 else cancelBidImplTraditional(i, artId, issuer, bidId)
682689 }
683690
684691

github/deemru/w8io/169f3d6 
79.46 ms