tx · AmUd1jZiA5mjCRknAC2JREW6mvosmKU3bKDoqUTRnbyn

3MrWNTqFcHBqb58Za1A5crQrMV5KJ5DYhtA:  -0.01000000 Waves

2021.08.06 16:07 [1646505] smart account 3MrWNTqFcHBqb58Za1A5crQrMV5KJ5DYhtA > SELF 0.00000000 Waves

{ "type": 13, "id": "AmUd1jZiA5mjCRknAC2JREW6mvosmKU3bKDoqUTRnbyn", "fee": 1000000, "feeAssetId": null, "timestamp": 1628255268812, "version": 2, "chainId": 84, "sender": "3MrWNTqFcHBqb58Za1A5crQrMV5KJ5DYhtA", "senderPublicKey": "9abKuN1XmLjjire2feZH26PmcEWhEXxiHToWSmii3Gn2", "proofs": [ "4BZRA1E1svvEbcRcht4DQ2YjJAT3m6CBHZjH3EwFnfVbJxkT5X7Kttx4mZCA3oynymvAxNdAefCG1jHSpna899DS" ], "script": "base64:AAIFAAAAAAAACggIAhIICgYICAgICAgSCAoGCAEBCAgBEgQKAggIEgMKAQgSBAoCCAgSBgoECAgICBIFCgMICAgaDgoCYTESCHVuaXRUZXN0Gg8KAmEyEglvcmFjbGVGZWUaEQoCYTMSC2ZlZVJlY2VpdmVyGg4KAmE0Egh1c2VyRGFwcBoTCgJhNRINd2hpdGVsaXN0RGFwcBoTCgJhNhINc2NvbmV4QXNzZXRJZBoLCgJhNxIFb3duZXIaDwoCYTgSCXNjb25leEN1dBoRCgJhORILZGFwcFJ1bm5pbmcaFAoCYjESDm1haW50ZW5hbmNlTVNHGhMKAmIyEg11c2VyU3VzcGVuZGVkGhEKAmIzEgt1c2VyUmVtb3ZlZBoWCgJiNBIQdXNlclVucmVnaXN0ZXJlZBoRCgJiNRILdXNlckFsbG93ZWQaEgoCYjYSDGF1Y3Rpb25UeXBlMRoSCgJiNxIMYXVjdGlvblR5cGUyGhQKAmI4Eg5nZXRTdHJpbmdCeUtleRoJCgJiORIDa2V5Gh8KAmMxEhlnZXRJbnRlZ2VyQnlLZXlGcm9tT3JhY2xlGhUKAmMyEg9nZXRJbnRlZ2VyQnlLZXkaFAoCYzMSDmNoZWNrV2hpdGVsaXN0GhUKAmM0Eg9nZXRCb29sZWFuQnlLZXkaEwoCYzUSDWtleVVzZXJTdGF0dXMaDAoCYzYSBmNhbGxlchoNCgJjNxIHa2V5RGF0ZRoLCgJjOBIFYXJ0SWQaDQoCYzkSB2tleU5hbWUaDQoCZDESB2tleURlc2MaEwoCZDISDWtleURpc3BsYXlDaWQaEAoCZDMSCmtleU1heE1pbnQaEQoCZDQSC2tleU1pblByaWNlGhQKAmQ1Eg5rZXlBdWN0aW9uVHlwZRoPCgJkNhIJa2V5SXNzdWVkGg8KAmQ3EglrZXlPblNhbGUaDQoCZDgSB2tleVRhZ3MaDQoCZDkSB2tleVR5cGUaDgoCZTESCGtleVByaWNlGhgKAmUyEhJrZXlBc3NldElkQWNjZXB0ZWQaFwoCZTMSEWtleUhhc2hCeVR4aWRBZGRyGgoKAmU0EgR0eGlkGhQKAmU1Eg5rZXlPd25lckJ5SGFzaBoQCgJlNhIKc2hhMjU2SGFzaBoYCgJlNxISa2V5VHhpZEJ5SGFzaE93bmVyGh8KAmU4EhljdXJyZW50Q2VydGlmaWNhdGlvblByaWNlGhQKAmU5Eg52YWxpZGF0ZVN0cmluZxoJCgJmMRIDc3RyGgkKAmYyEgNtYXgaEgoCZjMSDHZhbGlkYXRlVXNlchoQCgJmNBIKdXNlclN0YXR1cxoZCgJmNRITdmFsaWRhdGVBcnR3b3JrRGF0YRoQCgJmNhIKY2lkRGlzcGxheRoKCgJmNxIEbmFtZRoRCgJmOBILZGVzY3JpcHRpb24aCgoCZjkSBHRhZ3MaDwoCZzESCWNoZWNrVXNlchoPCgJnMhIJaXNQYXltZW50GgcKAmczEgFpGg0KAmc0EgdwYXltZW50GgwKAmc1EgZhbW91bnQaFQoCZzYSD3ZhbGlkYXRlUGF5bWVudBoQCgJnNxIKdDA4OTgyOTAxOBoNCgJnOBIHYXNzZXRJZBoaCgJnORIUdmFsaWRhdGVQcmljZUFzc2V0SWQaEgoCaDESDHByaWNlQXNzZXRJZBoSCgJoMhIMYXJ0d29ya1ByaWNlGhAKAmgzEgp0MDk2MTE5NjQ3GhYKAmg0EhBhY2NlcHRlZEFzc2V0SWRzGhUKAmg1Eg92YWxpZGF0ZU1pblNlbGwaCwoCaDYSBXByaWNlGhMKAmg3Eg1taW5TZWxsU2NvbmV4GhMKAmg4Eg1nZXRCaWRBc3NldElkGhwKAmg5EhZnZXRQcmljZUFzc2V0SWRGcm9tQmlkGhAKAmkxEgpiaWREYXRhS2V5Gg0KAmkyEgdiaWREYXRhGhAKAmkzEgpiaWREYXRhQXJyGg8KAmk0EgliaWRBbW91bnQaEAoCaTUSCmJpZEFzc2V0SWQaEgoCaTYSDGlkQ2FsbGVyRGF0ZRoQCgJpNxIKaXNCaWRDaGVjaxoMCgJpOBIGaXNzdWVyGg4KAmk5EghiaWRPd25lchoLCgJqMRIFYmlkSWQaEAoCajISCmdldEFydERhdGEaCwoCajMSBWlzQmlkGhQKAmo0Eg5jYWxsZXJJc0lzc3VlchoOCgJqNRIIdG90YWxORlQaEQoCajYSC2FydHdvcmtOYW1lGg4KAmo3Eghpc09uU2FsZRoQCgJqOBIKYW1vdW50U29sZBoQCgJqORIKbWF4Q2FuU2VsbBoQCgJrMRIKZ2V0QmlkRGF0YRoSCgJrMhIMdDAxMzUxOTEzNjQ4GhcKAmszEhFnZXRDb21taXNzaW9uRGF0YRoTCgJrNBINaXNXaGl0ZWxpc3RlZBoJCgJrNRIDY3V0GhUKAms2Eg9hbW91bnRGb3JTY29uZXgaFgoCazcSEGFtb3VudEZvckNyZWF0b3IaEwoCazgSDW5ld0Ftb3VudFNvbGQaEgoCazkSDGdldElzc3VlRGF0YRoPCgJsMRIJaXNzdWVNZXRhGg4KAmwyEghpc3N1ZU5GVBoLCgJsMxIFaWRORlQaEAoCbDQSCnNlbGxTdGF0dXMaEAoCbDUSCnJlY2VpdmVORlQaEgoCbDYSDGdldEJpZEtleVZhbBoKCgJsNxIEZGF0ZRoQCgJsOBIKYXNzZXRJZEJpZBoPCgJsORIJYmlkRGVsT2xkGg8KAm0xEgliaWRVcGRhdGUaDQoCbTISB2J1eU1pbnQaEgoCbTMSDHQwMTU1MTYxNTU2NhoICgJtNBICaWQaEgoCbTUSDHQwMTU2NDYxNTc5NxoSCgJtNhIMdDAxNTgwMjE1OTQ4GhIKAm03Egx0MDE1OTUzMTYwOTUaEgoCbTgSDHQwMTYxMDAxNjI5MBoSCgJtORIMdDAxNjI5NTE2Mzk0Gg0KAm4xEgdzb2xkS2V5Gg8KAm4yEglzb2xkVmFsdWUaDgoCbjMSCHNvbGREYXRhGgwKAm40EgZidXlSZXMaCgoCbjUSBHR5cGUaEgoCbjYSDHQwMTc3NDAxNzc4MRoVCgJuNxIPdmFsaWRhdGVBcnR3b3JrGhIKAm44Egx0MDE4MTcwMTgyMTIaEAoCbjkSCmVudHJ5RXhpc3QaDwoCbzESCWhhc2hFeGlzdBoNCgJvMhIHbWF4TWludBoRCgJvMxILYXVjdGlvblR5cGUaDAoCbzQSBm1pbkJpZBoSCgJvNRIMdDAyNTcxNDI1NzQ3GgwKAm82EgZiaWROYnIaCwoCbzcSBWVudHJ5GhIKAm84Egx0MDI3NzA5Mjc3NDcaEgoCbzkSDHQwMjc3NTIyNzc4OBoSCgJwMRIMdDAyODk0MjI5MDk0Gg8KAnAyEgliaWRTdGF0dXMAAAA5AAAAAAJhMQcAAAAAAmEyCQEAAAAFdmFsdWUAAAABCQAEJgAAAAECAAAAIzNNcFpRanpHb2dtaWZjRUtlOG1EZDZyaWJMN254VDlBQ3llAAAAAAJhMwIAAAAjM042NXhMcThKY0NlYUVpUjFUSlE3ZEJxWEJ2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", "height": 1646505, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: AJQBsBj1dN65cngVqHXyNwKZqcoWphzsZh6rL3dLo47L Next: ArC4qAxdoZEvnSL2dUtxgLw1iiJJ1MhzUVLFiM4N19cU Diff:
OldNewDifferences
4949
5050
5151 func keyUserStatus (caller) = ("user_status_" + caller)
52+
53+
54+func keyDate (caller,artId) = ((("art_date_" + artId) + "_") + caller)
5255
5356
5457 func keyName (caller,artId) = ((("art_name_" + artId) + "_") + caller)
403406 let hashExist = getStringByKey(keyOwnerByHash(cidDisplay))
404407 if ((hashExist != ""))
405408 then throw("Hash already registered")
406- else [StringEntry(keyOwnerByHash(cidDisplay), caller), 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), cidDisplay), ScriptTransfer(Address(fromBase58String(feeReceiver)), amount, assetId)]
409+ 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), ScriptTransfer(Address(fromBase58String(feeReceiver)), amount, assetId)]
407410 }
408411 }
409412 }
419422 let artworkName = getStringByKey(keyName(caller, artId))
420423 if (containsElement([auctionType1, auctionType2], auctionType))
421424 then throw("We dont know this auction type")
422- else if (containsElement([auctionType2], auctionType))
425+ else if (containsElement([auctionType1, auctionType2], auctionType))
423426 then throw("We didnt implement this auction type yet")
424427 else if ((artworkName == ""))
425428 then throw("This art doesn't match your account")
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 sconexCut = 7
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)
52+
53+
54+func keyDate (caller,artId) = ((("art_date_" + artId) + "_") + caller)
5255
5356
5457 func keyName (caller,artId) = ((("art_name_" + artId) + "_") + caller)
5558
5659
5760 func keyDesc (caller,artId) = ((("art_desc_" + artId) + "_") + caller)
5861
5962
6063 func keyDisplayCid (caller,artId) = ((("art_display_cid_" + artId) + "_") + caller)
6164
6265
6366 func keyMaxMint (caller,artId) = ((("art_maxmint_" + artId) + "_") + caller)
6467
6568
6669 func keyMinPrice (caller,artId) = ((("art_minprice_" + artId) + "_") + caller)
6770
6871
6972 func keyAuctionType (caller,artId) = ((("art_auctiontype_" + artId) + "_") + caller)
7073
7174
7275 func keyIssued (caller,artId) = ((("art_issued_" + artId) + "_") + caller)
7376
7477
7578 func keyOnSale (caller,artId) = ((("art_onsale_" + artId) + "_") + caller)
7679
7780
7881 func keyTags (caller,artId) = ((("art_tags_" + artId) + "_") + caller)
7982
8083
8184 func keyType (caller,artId) = ((("art_type_" + artId) + "_") + caller)
8285
8386
8487 func keyPrice (caller,artId) = ((("art_price_" + artId) + "_") + caller)
8588
8689
8790 func keyAssetIdAccepted (caller,artId) = ((("art_assetAccepted_" + artId) + "_") + caller)
8891
8992
9093 func keyHashByTxidAddr (caller,txid) = ((("get_hashbytxidaddr_" + txid) + "_") + caller)
9194
9295
9396 func keyOwnerByHash (sha256Hash) = ("get_owner_by_hash_" + sha256Hash)
9497
9598
9699 func keyTxidByHashOwner (sha256Hash,caller) = ("get_txid_by_hash_owner_" + toBase58String(sha256_16Kb(toBytes((sha256Hash + caller)))))
97100
98101
99102 let currentCertificationPrice = getIntegerByKeyFromOracle(("certification_fee_" + toBase58String(sconexAssetId)))
100103
101104 func validateString (str,max) = if ((size(str) == 0))
102105 then throw("Field cannot be is empty")
103106 else if ((size(str) > max))
104107 then throw((str + " is too long"))
105108 else true
106109
107110
108111 func validateUser (caller) = {
109112 let userStatus = valueOrElse(getString(userDapp, keyUserStatus(caller)), userUnregistered)
110113 if (if ((userStatus == userUnregistered))
111114 then true
112115 else (userStatus == userAllowed))
113116 then "Register this account first with 'Account' tab"
114117 else if ((userStatus == userSuspended))
115118 then "Account suspended"
116119 else if ((userStatus == userRemoved))
117120 then "Account removed"
118121 else ""
119122 }
120123
121124
122125 func validateArtworkData (caller,cidDisplay,name,description,tags) = {
123126 let checkUser = validateUser(caller)
124127 if ((checkUser != ""))
125128 then throw(checkUser)
126129 else if ((size(cidDisplay) == 0))
127130 then throw("Display CID cannot be empty")
128131 else if (!(validateString(name, 100)))
129132 then throw("100 Char. max name")
130133 else if (!(validateString(description, 1000)))
131134 then throw("1000 Char. max description")
132135 else if ((size(split(tags, ",")) > 5))
133136 then throw("5 tags max.")
134137 else ""
135138 }
136139
137140
138141 func isPayment (i) = if ((size(i.payments) == 0))
139142 then throw("No payment attached")
140143 else {
141144 let payment = value(i.payments[0])
142145 let amount = value(payment.amount)
143146 $Tuple2(payment, amount)
144147 }
145148
146149
147150 func validatePayment (i) = {
148151 let t089829018 = isPayment(i)
149152 let payment = t089829018._1
150153 let amount = t089829018._2
151154 let assetId = if (if (isDefined(payment.assetId))
152155 then (payment.assetId == sconexAssetId)
153156 else false)
154157 then payment.assetId
155158 else throw("Only Sconex token accepted as transaction fee")
156159 if ((amount != currentCertificationPrice))
157160 then throw(("Payment amount should be " + toString(currentCertificationPrice)))
158161 else $Tuple2(amount, assetId)
159162 }
160163
161164
162165 func validatePriceAssetId (i,priceAssetId,artworkPrice) = {
163166 let t096119647 = isPayment(i)
164167 let payment = t096119647._1
165168 let amount = t096119647._2
166169 let assetId = if (!(isDefined(payment.assetId)))
167170 then throw("Wrong asset id")
168171 else if (if ((size(priceAssetId) > 0))
169172 then (toBase58String(value(payment.assetId)) == priceAssetId)
170173 else false)
171174 then payment.assetId
172175 else throw("Wrong asset id")
173176 if (if ((assetId == unit))
174177 then (priceAssetId != "")
175178 else false)
176179 then throw("Wrong asset id")
177180 else if ((artworkPrice != amount))
178181 then throw("Payment don't match")
179182 else $Tuple2(amount, assetId)
180183 }
181184
182185
183186 func acceptedAssetIds (assetId) = if ((assetId != toBase58String(sconexAssetId)))
184187 then throw("Only Sconex accepted")
185188 else true
186189
187190
188191 func validateMinSell (assetId,price) = {
189192 let minSellSconex = if (unitTest)
190193 then 1
191194 else (currentCertificationPrice * 2)
192195 if (if (if ((assetId == toBase58String(sconexAssetId)))
193196 then (minSellSconex > price)
194197 else false)
195198 then (price != 0)
196199 else false)
197200 then throw("Wrong minimum sell price")
198201 else true
199202 }
200203
201204
202205 func getBidAssetId (assetId) = if ((assetId == "WAVES"))
203206 then throw("Only sconex is accepted!")
204207 else fromBase58String(assetId)
205208
206209
207210 func getPriceAssetIdFromBid (bidDataKey) = {
208211 let bidData = getStringByKey((bidDataKey + "_OPEN"))
209212 if ((bidData == ""))
210213 then throw("Bid not found")
211214 else {
212215 let bidDataArr = split(bidData, "_")
213216 let bidAmount = parseIntValue(bidDataArr[1])
214217 let bidAssetId = getBidAssetId(bidDataArr[0])
215218 if ((0 >= bidAmount))
216219 then throw("Wrong amount")
217220 else $Tuple2(bidAmount, bidAssetId)
218221 }
219222 }
220223
221224
222225 func idCallerDate (i) = if (!(dappRunning))
223226 then throw(maintenanceMSG)
224227 else $Tuple3(toBase58String(i.transactionId), toBase58String(i.caller.bytes), lastBlock.timestamp)
225228
226229
227230 func isBidCheck (i,issuer,bidOwner,bidId) = if (if (if ((toBase58String(i.caller.bytes) == issuer))
228231 then (bidOwner != "")
229232 else false)
230233 then (bidId != "")
231234 else false)
232235 then true
233236 else false
234237
235238
236239 func getArtData (i,issuer,artId,isBid) = {
237240 let callerIsIssuer = (toBase58String(i.caller.bytes) == issuer)
238241 let totalNFT = getIntegerByKey("total_nft_issued")
239242 let artworkName = getStringByKey(keyName(issuer, artId))
240243 if ((artworkName == ""))
241244 then throw("Art doesn't exist")
242245 else {
243246 let isOnSale = getBooleanByKey(keyOnSale(issuer, artId))
244247 let amountSold = getIntegerByKey(keyIssued(issuer, artId))
245248 let artworkPrice = if (callerIsIssuer)
246249 then (currentCertificationPrice * 2)
247250 else getIntegerByKey(keyPrice(issuer, artId))
248251 let priceAssetId = if (callerIsIssuer)
249252 then toBase58String(sconexAssetId)
250253 else getStringByKey(keyAssetIdAccepted(issuer, artId))
251254 let maxCanSell = getIntegerByKey(keyMaxMint(issuer, artId))
252255 if (if (if (!(isBid))
253256 then !(callerIsIssuer)
254257 else false)
255258 then if (if ((0 >= artworkPrice))
256259 then true
257260 else !(isOnSale))
258261 then true
259262 else (0 >= maxCanSell)
260263 else false)
261264 then throw("Art not for sale")
262265 else if (if (if (!(isBid))
263266 then callerIsIssuer
264267 else false)
265268 then (0 >= maxCanSell)
266269 else false)
267270 then throw("Max issuable not set")
268271 else $Tuple7(totalNFT, artworkName, amountSold, artworkPrice, priceAssetId, maxCanSell, isOnSale)
269272 }
270273 }
271274
272275
273276 func getBidData (i,caller,issuer,artId,bidOwner,bidId,priceAssetId,artworkPrice,isBid) = {
274277 let checkUser = validateUser(issuer)
275278 if (if (isBid)
276279 then (checkUser != "")
277280 else false)
278281 then throw(checkUser)
279282 else {
280283 let bidDataKey = ((((((("bid_" + artId) + "_") + issuer) + "_") + bidOwner) + "_") + bidId)
281284 let t01351913648 = if (isBid)
282285 then getPriceAssetIdFromBid(bidDataKey)
283286 else validatePriceAssetId(i, priceAssetId, artworkPrice)
284287 let amount = t01351913648._1
285288 let assetId = t01351913648._2
286289 $Tuple3(bidDataKey, amount, assetId)
287290 }
288291 }
289292
290293
291294 func getCommissionData (issuer,assetId,amount,amountSold,maxCanSell) = {
292295 let isWhitelisted = checkWhitelist(issuer)
293296 let cut = if ((isWhitelisted > height))
294297 then 0
295298 else if ((assetId == sconexAssetId))
296299 then sconexCut
297300 else throw("Only Sconex is accepted!")
298301 let amountForSconex = fraction(amount, cut, 100)
299302 let amountForCreator = (amount - amountForSconex)
300303 if ((amountSold == maxCanSell))
301304 then throw("Art sold out")
302305 else {
303306 let newAmountSold = (amountSold + 1)
304307 $Tuple3(amountForSconex, amountForCreator, newAmountSold)
305308 }
306309 }
307310
308311
309312 func getIssueData (issuer,artId,artworkName,newAmountSold,maxCanSell,totalNFT,caller,bidOwner,bidId,i,isOnSale) = {
310313 let issueMeta = ((((((((("Creator: " + issuer) + ",ArtID: ") + artId) + ",Artwork name: ") + artworkName) + ",Issue: ") + toString(newAmountSold)) + "/") + toString(maxCanSell))
311314 let issueNFT = Issue(("SA_" + toString((totalNFT + 1))), issueMeta, 1, 0, false)
312315 let idNFT = calculateAssetId(issueNFT)
313316 let sellStatus = if (if ((newAmountSold == maxCanSell))
314317 then true
315318 else !(isOnSale))
316319 then false
317320 else true
318321 let receiveNFT = if (if (if ((caller == issuer))
319322 then (bidOwner != "")
320323 else false)
321324 then (bidId != "")
322325 else false)
323326 then addressFromStringValue(bidOwner)
324327 else i.caller
325328 $Tuple4(issueNFT, idNFT, sellStatus, receiveNFT)
326329 }
327330
328331
329332 func getBidKeyVal (assetId,bidDataKey,date) = {
330333 let assetIdBid = if (!(isDefined(assetId)))
331334 then throw("Only sconex is accepted")
332335 else toBase58String(value(assetId))
333336 let bidData = getStringByKey((bidDataKey + "_OPEN"))
334337 let bidDelOld = DeleteEntry((bidDataKey + "_OPEN"))
335338 let bidUpdate = StringEntry((bidDataKey + "_CLOSED"), ((bidData + "_") + toString(date)))
336339 $Tuple3(assetIdBid, bidDelOld, bidUpdate)
337340 }
338341
339342
340343 func buyMint (i,artId,issuer,bidId,bidOwner) = {
341344 let t01551615566 = idCallerDate(i)
342345 let id = t01551615566._1
343346 let caller = t01551615566._2
344347 let date = t01551615566._3
345348 let isBid = isBidCheck(i, issuer, bidOwner, bidId)
346349 let t01564615797 = getArtData(i, issuer, artId, isBid)
347350 let totalNFT = t01564615797._1
348351 let artworkName = t01564615797._2
349352 let amountSold = t01564615797._3
350353 let artworkPrice = t01564615797._4
351354 let priceAssetId = t01564615797._5
352355 let maxCanSell = t01564615797._6
353356 let isOnSale = t01564615797._7
354357 let t01580215948 = getBidData(i, caller, issuer, artId, bidOwner, bidId, priceAssetId, artworkPrice, isBid)
355358 let bidDataKey = t01580215948._1
356359 let amount = t01580215948._2
357360 let assetId = t01580215948._3
358361 let t01595316095 = getCommissionData(issuer, value(assetId), amount, amountSold, maxCanSell)
359362 let amountForSconex = t01595316095._1
360363 let amountForCreator = t01595316095._2
361364 let newAmountSold = t01595316095._3
362365 let t01610016290 = getIssueData(issuer, artId, artworkName, newAmountSold, maxCanSell, totalNFT, caller, bidOwner, bidId, i, isOnSale)
363366 let issueNFT = t01610016290._1
364367 let idNFT = t01610016290._2
365368 let sellStatus = t01610016290._3
366369 let receiveNFT = t01610016290._4
367370 let t01629516394 = getBidKeyVal(assetId, bidDataKey, date)
368371 let assetIdBid = t01629516394._1
369372 let bidDelOld = t01629516394._2
370373 let bidUpdate = t01629516394._3
371374 let soldKey = ((((((("art_sold_" + toString(newAmountSold)) + "_of_") + toString(maxCanSell)) + "_") + artId) + "_") + issuer)
372375 let soldValue = if (!(isBid))
373376 then ((((((((((caller + "_") + toString(date)) + "_") + id) + "_") + toString(artworkPrice)) + "_") + priceAssetId) + "_") + toBase58String(idNFT))
374377 else ((((((((((toString(receiveNFT) + "_") + toString(date)) + "_") + id) + "_") + toString(amount)) + "_") + assetIdBid) + "_") + toBase58String(idNFT))
375378 let soldData = StringEntry(soldKey, soldValue)
376379 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)]
377380 if (isBid)
378381 then (((buyRes :+ soldData) :+ bidUpdate) :+ bidDelOld)
379382 else soldData :: buyRes
380383 }
381384
382385
383386 @Callable(i)
384387 func addArtwork (sha256Hash,name,description,tags,type,cidDisplay) = {
385388 let t01774017781 = idCallerDate(i)
386389 let artId = t01774017781._1
387390 let caller = t01774017781._2
388391 let date = t01774017781._3
389392 let validateArtwork = validateArtworkData(caller, cidDisplay, name, description, tags)
390393 if ((validateArtwork != ""))
391394 then throw("Something went wrong!")
392395 else {
393396 let t01817018212 = validatePayment(i)
394397 let amount = t01817018212._1
395398 let assetId = t01817018212._2
396399 if (!(isDefined(amount)))
397400 then throw("Something went wrong")
398401 else {
399402 let entryExist = getStringByKey(keyTxidByHashOwner(sha256Hash, caller))
400403 if ((entryExist != ""))
401404 then throw("You already added it")
402405 else {
403406 let hashExist = getStringByKey(keyOwnerByHash(cidDisplay))
404407 if ((hashExist != ""))
405408 then throw("Hash already registered")
406- else [StringEntry(keyOwnerByHash(cidDisplay), caller), 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), cidDisplay), ScriptTransfer(Address(fromBase58String(feeReceiver)), amount, assetId)]
409+ 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), ScriptTransfer(Address(fromBase58String(feeReceiver)), amount, assetId)]
407410 }
408411 }
409412 }
410413 }
411414
412415
413416
414417 @Callable(i)
415418 func sellArtwork (artId,price,maxMint,assetId,auctionType,minBid) = {
416419 let t02571425747 = idCallerDate(i)
417420 let id = t02571425747._1
418421 let caller = t02571425747._2
419422 let artworkName = getStringByKey(keyName(caller, artId))
420423 if (containsElement([auctionType1, auctionType2], auctionType))
421424 then throw("We dont know this auction type")
422- else if (containsElement([auctionType2], auctionType))
425+ else if (containsElement([auctionType1, auctionType2], auctionType))
423426 then throw("We didnt implement this auction type yet")
424427 else if ((artworkName == ""))
425428 then throw("This art doesn't match your account")
426429 else {
427430 let bidNbr = getIntegerByKey(("current_bidamount_" + artId))
428431 if (!(acceptedAssetIds(assetId)))
429432 then throw("Something went wrong!")
430433 else if (!(validateMinSell(assetId, price)))
431434 then throw("Something went wrong!")
432435 else {
433436 let checkUser = validateUser(caller)
434437 if ((checkUser != ""))
435438 then throw(checkUser)
436439 else {
437440 let amountSold = getIntegerByKey(keyIssued(caller, artId))
438441 let maxCanSell = getIntegerByKey(keyMaxMint(caller, artId))
439442 if ((maxMint > 10))
440443 then throw("10 editions max per artwork")
441444 else if (if ((amountSold != 0))
442445 then (amountSold == maxCanSell)
443446 else false)
444447 then throw("Max edition reached.")
445448 else if (if ((amountSold > 0))
446449 then (maxCanSell != maxMint)
447450 else false)
448451 then throw("Cannot change maximum issuable anymore")
449452 else if (if ((bidNbr > 0))
450453 then (maxCanSell != maxMint)
451454 else false)
452455 then throw("Cannot change maximum issuable with active orders")
453456 else {
454457 let sellStatus = if (if ((price > 0))
455458 then (maxMint > 0)
456459 else false)
457460 then true
458461 else false
459462 [BooleanEntry(keyOnSale(caller, artId), sellStatus), IntegerEntry(keyPrice(caller, artId), price), IntegerEntry(keyMaxMint(caller, artId), maxMint), IntegerEntry(keyMinPrice(caller, artId), minBid), StringEntry(keyAssetIdAccepted(caller, artId), assetId), StringEntry(keyAuctionType(caller, artId), auctionType)]
460463 }
461464 }
462465 }
463466 }
464467 }
465468
466469
467470
468471 @Callable(i)
469472 func buyArtwork (artId,issuer) = buyMint(i, artId, issuer, "", "")
470473
471474
472475
473476 @Callable(i)
474477 func deleteEntry (entry) = {
475478 let caller = toString(addressFromPublicKey(i.callerPublicKey))
476479 if ((caller == owner))
477480 then [DeleteEntry(entry)]
478481 else throw("no")
479482 }
480483
481484
482485
483486 @Callable(i)
484487 func setBid (artId,issuer) = {
485488 let t02770927747 = idCallerDate(i)
486489 let id = t02770927747._1
487490 let caller = t02770927747._2
488491 let date = t02770927747._3
489492 let t02775227788 = isPayment(i)
490493 let payment = t02775227788._1
491494 let amount = t02775227788._2
492495 let assetId = if (!(isDefined(payment.assetId)))
493496 then throw("Only sconex is accepted!")
494497 else toBase58String(value(payment.assetId))
495498 let bidNbr = getIntegerByKey(("current_bidamount_" + artId))
496499 if (!(acceptedAssetIds(assetId)))
497500 then throw("asset not accepted")
498501 else if (!(validateMinSell(assetId, amount)))
499502 then throw("Wrong min sell")
500503 else {
501504 let amountSold = getIntegerByKey(keyIssued(issuer, artId))
502505 let maxCanSell = getIntegerByKey(keyMaxMint(issuer, artId))
503506 if ((0 >= maxCanSell))
504507 then throw("No max edition set for this artwork")
505508 else if ((amountSold >= maxCanSell))
506509 then throw("Sold out, you cannot bid")
507510 else [StringEntry((((((((("bid_" + artId) + "_") + issuer) + "_") + caller) + "_") + id) + "_OPEN"), ((((assetId + "_") + toString(amount)) + "_") + toString(date))), IntegerEntry(("current_bidamount_" + artId), (bidNbr + 1))]
508511 }
509512 }
510513
511514
512515
513516 @Callable(i)
514517 func acceptBid (artId,issuer,bidId,bidOwner) = {
515518 let caller = toBase58String(i.caller.bytes)
516519 if ((caller != issuer))
517520 then throw("You cannot do this action")
518521 else buyMint(i, artId, issuer, bidId, bidOwner)
519522 }
520523
521524
522525
523526 @Callable(i)
524527 func cancelBid (artId,issuer,bidId) = {
525528 let t02894229094 = idCallerDate(i)
526529 let id = t02894229094._1
527530 let caller = t02894229094._2
528531 let date = t02894229094._3
529532 let bidNbr = getIntegerByKey(("current_bidamount_" + artId))
530533 let bidDataKey = ((((((("bid_" + artId) + "_") + issuer) + "_") + caller) + "_") + bidId)
531534 let bidData = getStringByKey((bidDataKey + "_OPEN"))
532535 if ((bidData == ""))
533536 then throw("Bid not found")
534537 else {
535538 let bidDataArr = split(bidData, "_")
536539 let assetId = getBidAssetId(bidDataArr[0])
537540 let bidStatus = "CANCELED"
538541 [DeleteEntry((bidDataKey + "_OPEN")), StringEntry(((bidDataKey + "_") + bidStatus), ((bidData + "_") + toString(date))), IntegerEntry(("current_bidamount_" + artId), (bidNbr - 1)), ScriptTransfer(Address(fromBase58String(caller)), parseIntValue(bidDataArr[1]), assetId)]
539542 }
540543 }
541544
542545

github/deemru/w8io/026f985 
132.25 ms