tx · FuQnd6s31BLWKHyeKrfoj4Ak5jgHyVsBT1LsgaNvC4wJ

3MrWNTqFcHBqb58Za1A5crQrMV5KJ5DYhtA:  -0.01000000 Waves

2021.08.06 17:42 [1646598] smart account 3MrWNTqFcHBqb58Za1A5crQrMV5KJ5DYhtA > SELF 0.00000000 Waves

{ "type": 13, "id": "FuQnd6s31BLWKHyeKrfoj4Ak5jgHyVsBT1LsgaNvC4wJ", "fee": 1000000, "feeAssetId": null, "timestamp": 1628260983554, "version": 2, "chainId": 84, "sender": "3MrWNTqFcHBqb58Za1A5crQrMV5KJ5DYhtA", "senderPublicKey": "9abKuN1XmLjjire2feZH26PmcEWhEXxiHToWSmii3Gn2", "proofs": [ "5Jd89vpN5o3VKiEpkXJcibg6whCsbpYuQMPk3UsNE3m39FiT7ZBGVCDLxP4KvXre2TZq8mFUZWU1W2htvJtN1CaM" ], "script": "base64:AAIFAAAAAAAACggIAhIICgYICAgICAgSCAoGCAEBCAgBEgQKAggIEgMKAQgSBAoCCAgSBgoECAgICBIFCgMICAgaDgoCYTESCHVuaXRUZXN0Gg8KAmEyEglvcmFjbGVGZWUaEQoCYTMSC2ZlZVJlY2VpdmVyGg4KAmE0Egh1c2VyRGFwcBoTCgJhNRINd2hpdGVsaXN0RGFwcBoTCgJhNhINc2NvbmV4QXNzZXRJZBoLCgJhNxIFb3duZXIaDwoCYTgSCXNjb25leEN1dBoRCgJhORILZGFwcFJ1bm5pbmcaFAoCYjESDm1haW50ZW5hbmNlTVNHGhMKAmIyEg11c2VyU3VzcGVuZGVkGhEKAmIzEgt1c2VyUmVtb3ZlZBoWCgJiNBIQdXNlclVucmVnaXN0ZXJlZBoRCgJiNRILdXNlckFsbG93ZWQaEgoCYjYSDGF1Y3Rpb25UeXBlMRoSCgJiNxIMYXVjdGlvblR5cGUyGhQKAmI4Eg5nZXRTdHJpbmdCeUtleRoJCgJiORIDa2V5Gh8KAmMxEhlnZXRJbnRlZ2VyQnlLZXlGcm9tT3JhY2xlGhUKAmMyEg9nZXRJbnRlZ2VyQnlLZXkaFAoCYzMSDmNoZWNrV2hpdGVsaXN0GhUKAmM0Eg9nZXRCb29sZWFuQnlLZXkaEwoCYzUSDWtleVVzZXJTdGF0dXMaDAoCYzYSBmNhbGxlchoNCgJjNxIHa2V5RGF0ZRoLCgJjOBIFYXJ0SWQaDQoCYzkSB2tleU5hbWUaDQoCZDESB2tleURlc2MaEwoCZDISDWtleURpc3BsYXlDaWQaEAoCZDMSCmtleU1heE1pbnQaEQoCZDQSC2tleU1pblByaWNlGhQKAmQ1Eg5rZXlBdWN0aW9uVHlwZRoPCgJkNhIJa2V5SXNzdWVkGg8KAmQ3EglrZXlPblNhbGUaDQoCZDgSB2tleVRhZ3MaDQoCZDkSB2tleVR5cGUaDgoCZTESCGtleVByaWNlGhgKAmUyEhJrZXlBc3NldElkQWNjZXB0ZWQaFwoCZTMSEWtleUhhc2hCeVR4aWRBZGRyGgoKAmU0EgR0eGlkGhQKAmU1Eg5rZXlPd25lckJ5SGFzaBoQCgJlNhIKc2hhMjU2SGFzaBoYCgJlNxISa2V5VHhpZEJ5SGFzaE93bmVyGh8KAmU4EhljdXJyZW50Q2VydGlmaWNhdGlvblByaWNlGhQKAmU5Eg52YWxpZGF0ZVN0cmluZxoJCgJmMRIDc3RyGgkKAmYyEgNtYXgaEgoCZjMSDHZhbGlkYXRlVXNlchoQCgJmNBIKdXNlclN0YXR1cxoZCgJmNRITdmFsaWRhdGVBcnR3b3JrRGF0YRoQCgJmNhIKY2lkRGlzcGxheRoKCgJmNxIEbmFtZRoRCgJmOBILZGVzY3JpcHRpb24aCgoCZjkSBHRhZ3MaDwoCZzESCWNoZWNrVXNlchoPCgJnMhIJaXNQYXltZW50GgcKAmczEgFpGg0KAmc0EgdwYXltZW50GgwKAmc1EgZhbW91bnQaFQoCZzYSD3ZhbGlkYXRlUGF5bWVudBoQCgJnNxIKdDA4OTgyOTAxOBoNCgJnOBIHYXNzZXRJZBoaCgJnORIUdmFsaWRhdGVQcmljZUFzc2V0SWQaEgoCaDESDHByaWNlQXNzZXRJZBoSCgJoMhIMYXJ0d29ya1ByaWNlGhAKAmgzEgp0MDk2MTE5NjQ3GhYKAmg0EhBhY2NlcHRlZEFzc2V0SWRzGhUKAmg1Eg92YWxpZGF0ZU1pblNlbGwaCwoCaDYSBXByaWNlGhMKAmg3Eg1taW5TZWxsU2NvbmV4GhMKAmg4Eg1nZXRCaWRBc3NldElkGhwKAmg5EhZnZXRQcmljZUFzc2V0SWRGcm9tQmlkGhAKAmkxEgpiaWREYXRhS2V5Gg0KAmkyEgdiaWREYXRhGhAKAmkzEgpiaWREYXRhQXJyGg8KAmk0EgliaWRBbW91bnQaEAoCaTUSCmJpZEFzc2V0SWQaEgoCaTYSDGlkQ2FsbGVyRGF0ZRoQCgJpNxIKaXNCaWRDaGVjaxoMCgJpOBIGaXNzdWVyGg4KAmk5EghiaWRPd25lchoLCgJqMRIFYmlkSWQaEAoCajISCmdldEFydERhdGEaCwoCajMSBWlzQmlkGhQKAmo0Eg5jYWxsZXJJc0lzc3VlchoOCgJqNRIIdG90YWxORlQaEQoCajYSC2FydHdvcmtOYW1lGg4KAmo3Eghpc09uU2FsZRoQCgJqOBIKYW1vdW50U29sZBoQCgJqORIKbWF4Q2FuU2VsbBoQCgJrMRIKZ2V0QmlkRGF0YRoSCgJrMhIMdDAxMzUxOTEzNjQ4GhcKAmszEhFnZXRDb21taXNzaW9uRGF0YRoTCgJrNBINaXNXaGl0ZWxpc3RlZBoJCgJrNRIDY3V0GhUKAms2Eg9hbW91bnRGb3JTY29uZXgaFgoCazcSEGFtb3VudEZvckNyZWF0b3IaEwoCazgSDW5ld0Ftb3VudFNvbGQaEgoCazkSDGdldElzc3VlRGF0YRoPCgJsMRIJaXNzdWVNZXRhGg4KAmwyEghpc3N1ZU5GVBoLCgJsMxIFaWRORlQaEAoCbDQSCnNlbGxTdGF0dXMaEAoCbDUSCnJlY2VpdmVORlQaEgoCbDYSDGdldEJpZEtleVZhbBoKCgJsNxIEZGF0ZRoQCgJsOBIKYXNzZXRJZEJpZBoPCgJsORIJYmlkRGVsT2xkGg8KAm0xEgliaWRVcGRhdGUaDQoCbTISB2J1eU1pbnQaEgoCbTMSDHQwMTU1MTYxNTU2NhoICgJtNBICaWQaEgoCbTUSDHQwMTU2NDYxNTc5NxoSCgJtNhIMdDAxNTgwMjE1OTQ4GhIKAm03Egx0MDE1OTUzMTYwOTUaEgoCbTgSDHQwMTYxMDAxNjI5MBoSCgJtORIMdDAxNjI5NTE2Mzk0Gg0KAm4xEgdzb2xkS2V5Gg8KAm4yEglzb2xkVmFsdWUaDgoCbjMSCHNvbGREYXRhGgwKAm40EgZidXlSZXMaCgoCbjUSBHR5cGUaEgoCbjYSDHQwMTc3NDAxNzc4MRoVCgJuNxIPdmFsaWRhdGVBcnR3b3JrGhIKAm44Egx0MDE4MTcwMTgyMTIaEAoCbjkSCmVudHJ5RXhpc3QaDwoCbzESCWhhc2hFeGlzdBoNCgJvMhIHbWF4TWludBoRCgJvMxILYXVjdGlvblR5cGUaDAoCbzQSBm1pbkJpZBoSCgJvNRIMdDAyNTcxNDI1NzQ3GgwKAm82EgZiaWROYnIaCwoCbzcSBWVudHJ5GhIKAm84Egx0MDI3NzA5Mjc3NDcaEgoCbzkSDHQwMjc3NTIyNzc4OBoSCgJwMRIMdDAyODk0MjI5MDk0Gg8KAnAyEgliaWRTdGF0dXMAAAA5AAAAAAJhMQcAAAAAAmEyCQEAAAAFdmFsdWUAAAABCQAEJgAAAAECAAAAIzNNcFpRanpHb2dtaWZjRUtlOG1EZDZyaWJMN254VDlBQ3llAAAAAAJhMwIAAAAjM042NXhMcThKY0NlYUVpUjFUSlE3ZEJxWEJ2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", "height": 1646598, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 3mybYzgXChpK76syoHqDbWfk6KBEesoTSHNSooL1BxkQ Next: CJMyTaq9RVKtov1osAHpBgS93YKVonf5GBXFbQKzJskJ Diff:
OldNewDifferences
197197 else false)
198198 then (price != 0)
199199 else false)
200- then throw(("Wrong minimum sell price " + toString(currentCertificationPrice)))
200+ then throw(("Wrong minimum sell price " + toString(minSellSconex)))
201201 else true
202202 }
203203
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)
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
7272 func keyAuctionType (caller,artId) = ((("art_auctiontype_" + artId) + "_") + caller)
7373
7474
7575 func keyIssued (caller,artId) = ((("art_issued_" + artId) + "_") + caller)
7676
7777
7878 func keyOnSale (caller,artId) = ((("art_onsale_" + artId) + "_") + caller)
7979
8080
8181 func keyTags (caller,artId) = ((("art_tags_" + artId) + "_") + caller)
8282
8383
8484 func keyType (caller,artId) = ((("art_type_" + artId) + "_") + caller)
8585
8686
8787 func keyPrice (caller,artId) = ((("art_price_" + artId) + "_") + caller)
8888
8989
9090 func keyAssetIdAccepted (caller,artId) = ((("art_assetAccepted_" + artId) + "_") + caller)
9191
9292
9393 func keyHashByTxidAddr (caller,txid) = ((("get_hashbytxidaddr_" + txid) + "_") + caller)
9494
9595
9696 func keyOwnerByHash (sha256Hash) = ("get_owner_by_hash_" + sha256Hash)
9797
9898
9999 func keyTxidByHashOwner (sha256Hash,caller) = ("get_txid_by_hash_owner_" + toBase58String(sha256_16Kb(toBytes((sha256Hash + caller)))))
100100
101101
102102 let currentCertificationPrice = getIntegerByKeyFromOracle(("certification_fee_" + toBase58String(sconexAssetId)))
103103
104104 func validateString (str,max) = if ((size(str) == 0))
105105 then throw("Field cannot be is empty")
106106 else if ((size(str) > max))
107107 then throw((str + " is too long"))
108108 else true
109109
110110
111111 func validateUser (caller) = {
112112 let userStatus = valueOrElse(getString(userDapp, keyUserStatus(caller)), userUnregistered)
113113 if (if ((userStatus == userUnregistered))
114114 then true
115115 else (userStatus == userAllowed))
116116 then "Register this account first with 'Account' tab"
117117 else if ((userStatus == userSuspended))
118118 then "Account suspended"
119119 else if ((userStatus == userRemoved))
120120 then "Account removed"
121121 else ""
122122 }
123123
124124
125125 func validateArtworkData (caller,cidDisplay,name,description,tags) = {
126126 let checkUser = validateUser(caller)
127127 if ((checkUser != ""))
128128 then throw(checkUser)
129129 else if ((size(cidDisplay) == 0))
130130 then throw("Display CID cannot be empty")
131131 else if (!(validateString(name, 100)))
132132 then throw("100 Char. max name")
133133 else if (!(validateString(description, 1000)))
134134 then throw("1000 Char. max description")
135135 else if ((size(split(tags, ",")) > 5))
136136 then throw("5 tags max.")
137137 else ""
138138 }
139139
140140
141141 func isPayment (i) = if ((size(i.payments) == 0))
142142 then throw("No payment attached")
143143 else {
144144 let payment = value(i.payments[0])
145145 let amount = value(payment.amount)
146146 $Tuple2(payment, amount)
147147 }
148148
149149
150150 func validatePayment (i) = {
151151 let t089829018 = isPayment(i)
152152 let payment = t089829018._1
153153 let amount = t089829018._2
154154 let assetId = if (if (isDefined(payment.assetId))
155155 then (payment.assetId == sconexAssetId)
156156 else false)
157157 then payment.assetId
158158 else throw("Only Sconex token accepted as transaction fee")
159159 if ((amount != currentCertificationPrice))
160160 then throw(("Payment amount should be " + toString(currentCertificationPrice)))
161161 else $Tuple2(amount, assetId)
162162 }
163163
164164
165165 func validatePriceAssetId (i,priceAssetId,artworkPrice) = {
166166 let t096119647 = isPayment(i)
167167 let payment = t096119647._1
168168 let amount = t096119647._2
169169 let assetId = if (!(isDefined(payment.assetId)))
170170 then throw("Wrong asset id")
171171 else if (if ((size(priceAssetId) > 0))
172172 then (toBase58String(value(payment.assetId)) == priceAssetId)
173173 else false)
174174 then payment.assetId
175175 else throw("Wrong asset id")
176176 if (if ((assetId == unit))
177177 then (priceAssetId != "")
178178 else false)
179179 then throw("Wrong asset id")
180180 else if ((artworkPrice != amount))
181181 then throw("Payment don't match")
182182 else $Tuple2(amount, assetId)
183183 }
184184
185185
186186 func acceptedAssetIds (assetId) = if ((assetId != toBase58String(sconexAssetId)))
187187 then throw("Only Sconex accepted")
188188 else true
189189
190190
191191 func validateMinSell (assetId,price) = {
192192 let minSellSconex = if (unitTest)
193193 then 1
194194 else (currentCertificationPrice * 2)
195195 if (if (if ((assetId == toBase58String(sconexAssetId)))
196196 then (minSellSconex > price)
197197 else false)
198198 then (price != 0)
199199 else false)
200- then throw(("Wrong minimum sell price " + toString(currentCertificationPrice)))
200+ then throw(("Wrong minimum sell price " + toString(minSellSconex)))
201201 else true
202202 }
203203
204204
205205 func getBidAssetId (assetId) = if ((assetId == "WAVES"))
206206 then throw("Only sconex is accepted!")
207207 else fromBase58String(assetId)
208208
209209
210210 func getPriceAssetIdFromBid (bidDataKey) = {
211211 let bidData = getStringByKey((bidDataKey + "_OPEN"))
212212 if ((bidData == ""))
213213 then throw("Bid not found")
214214 else {
215215 let bidDataArr = split(bidData, "_")
216216 let bidAmount = parseIntValue(bidDataArr[1])
217217 let bidAssetId = getBidAssetId(bidDataArr[0])
218218 if ((0 >= bidAmount))
219219 then throw("Wrong amount")
220220 else $Tuple2(bidAmount, bidAssetId)
221221 }
222222 }
223223
224224
225225 func idCallerDate (i) = if (!(dappRunning))
226226 then throw(maintenanceMSG)
227227 else $Tuple3(toBase58String(i.transactionId), toBase58String(i.caller.bytes), lastBlock.timestamp)
228228
229229
230230 func isBidCheck (i,issuer,bidOwner,bidId) = if (if (if ((toBase58String(i.caller.bytes) == issuer))
231231 then (bidOwner != "")
232232 else false)
233233 then (bidId != "")
234234 else false)
235235 then true
236236 else false
237237
238238
239239 func getArtData (i,issuer,artId,isBid) = {
240240 let callerIsIssuer = (toBase58String(i.caller.bytes) == issuer)
241241 let totalNFT = getIntegerByKey("total_nft_issued")
242242 let artworkName = getStringByKey(keyName(issuer, artId))
243243 if ((artworkName == ""))
244244 then throw("Art doesn't exist")
245245 else {
246246 let isOnSale = getBooleanByKey(keyOnSale(issuer, artId))
247247 let amountSold = getIntegerByKey(keyIssued(issuer, artId))
248248 let artworkPrice = if (callerIsIssuer)
249249 then (currentCertificationPrice * 2)
250250 else getIntegerByKey(keyPrice(issuer, artId))
251251 let priceAssetId = if (callerIsIssuer)
252252 then toBase58String(sconexAssetId)
253253 else getStringByKey(keyAssetIdAccepted(issuer, artId))
254254 let maxCanSell = getIntegerByKey(keyMaxMint(issuer, artId))
255255 if (if (if (!(isBid))
256256 then !(callerIsIssuer)
257257 else false)
258258 then if (if ((0 >= artworkPrice))
259259 then true
260260 else !(isOnSale))
261261 then true
262262 else (0 >= maxCanSell)
263263 else false)
264264 then throw("Art not for sale")
265265 else if (if (if (!(isBid))
266266 then callerIsIssuer
267267 else false)
268268 then (0 >= maxCanSell)
269269 else false)
270270 then throw("Max issuable not set")
271271 else $Tuple7(totalNFT, artworkName, amountSold, artworkPrice, priceAssetId, maxCanSell, isOnSale)
272272 }
273273 }
274274
275275
276276 func getBidData (i,caller,issuer,artId,bidOwner,bidId,priceAssetId,artworkPrice,isBid) = {
277277 let checkUser = validateUser(issuer)
278278 if (if (isBid)
279279 then (checkUser != "")
280280 else false)
281281 then throw(checkUser)
282282 else {
283283 let bidDataKey = ((((((("bid_" + artId) + "_") + issuer) + "_") + bidOwner) + "_") + bidId)
284284 let t01351913648 = if (isBid)
285285 then getPriceAssetIdFromBid(bidDataKey)
286286 else validatePriceAssetId(i, priceAssetId, artworkPrice)
287287 let amount = t01351913648._1
288288 let assetId = t01351913648._2
289289 $Tuple3(bidDataKey, amount, assetId)
290290 }
291291 }
292292
293293
294294 func getCommissionData (issuer,assetId,amount,amountSold,maxCanSell) = {
295295 let isWhitelisted = checkWhitelist(issuer)
296296 let cut = if ((isWhitelisted > height))
297297 then 0
298298 else if ((assetId == sconexAssetId))
299299 then sconexCut
300300 else throw("Only Sconex is accepted!")
301301 let amountForSconex = fraction(amount, cut, 100)
302302 let amountForCreator = (amount - amountForSconex)
303303 if ((amountSold == maxCanSell))
304304 then throw("Art sold out")
305305 else {
306306 let newAmountSold = (amountSold + 1)
307307 $Tuple3(amountForSconex, amountForCreator, newAmountSold)
308308 }
309309 }
310310
311311
312312 func getIssueData (issuer,artId,artworkName,newAmountSold,maxCanSell,totalNFT,caller,bidOwner,bidId,i,isOnSale) = {
313313 let issueMeta = ((((((((("Creator: " + issuer) + ",ArtID: ") + artId) + ",Artwork name: ") + artworkName) + ",Issue: ") + toString(newAmountSold)) + "/") + toString(maxCanSell))
314314 let issueNFT = Issue(("SA_" + toString((totalNFT + 1))), issueMeta, 1, 0, false)
315315 let idNFT = calculateAssetId(issueNFT)
316316 let sellStatus = if (if ((newAmountSold == maxCanSell))
317317 then true
318318 else !(isOnSale))
319319 then false
320320 else true
321321 let receiveNFT = if (if (if ((caller == issuer))
322322 then (bidOwner != "")
323323 else false)
324324 then (bidId != "")
325325 else false)
326326 then addressFromStringValue(bidOwner)
327327 else i.caller
328328 $Tuple4(issueNFT, idNFT, sellStatus, receiveNFT)
329329 }
330330
331331
332332 func getBidKeyVal (assetId,bidDataKey,date) = {
333333 let assetIdBid = if (!(isDefined(assetId)))
334334 then throw("Only sconex is accepted")
335335 else toBase58String(value(assetId))
336336 let bidData = getStringByKey((bidDataKey + "_OPEN"))
337337 let bidDelOld = DeleteEntry((bidDataKey + "_OPEN"))
338338 let bidUpdate = StringEntry((bidDataKey + "_CLOSED"), ((bidData + "_") + toString(date)))
339339 $Tuple3(assetIdBid, bidDelOld, bidUpdate)
340340 }
341341
342342
343343 func buyMint (i,artId,issuer,bidId,bidOwner) = {
344344 let t01551615566 = idCallerDate(i)
345345 let id = t01551615566._1
346346 let caller = t01551615566._2
347347 let date = t01551615566._3
348348 let isBid = isBidCheck(i, issuer, bidOwner, bidId)
349349 let t01564615797 = getArtData(i, issuer, artId, isBid)
350350 let totalNFT = t01564615797._1
351351 let artworkName = t01564615797._2
352352 let amountSold = t01564615797._3
353353 let artworkPrice = t01564615797._4
354354 let priceAssetId = t01564615797._5
355355 let maxCanSell = t01564615797._6
356356 let isOnSale = t01564615797._7
357357 let t01580215948 = getBidData(i, caller, issuer, artId, bidOwner, bidId, priceAssetId, artworkPrice, isBid)
358358 let bidDataKey = t01580215948._1
359359 let amount = t01580215948._2
360360 let assetId = t01580215948._3
361361 let t01595316095 = getCommissionData(issuer, value(assetId), amount, amountSold, maxCanSell)
362362 let amountForSconex = t01595316095._1
363363 let amountForCreator = t01595316095._2
364364 let newAmountSold = t01595316095._3
365365 let t01610016290 = getIssueData(issuer, artId, artworkName, newAmountSold, maxCanSell, totalNFT, caller, bidOwner, bidId, i, isOnSale)
366366 let issueNFT = t01610016290._1
367367 let idNFT = t01610016290._2
368368 let sellStatus = t01610016290._3
369369 let receiveNFT = t01610016290._4
370370 let t01629516394 = getBidKeyVal(assetId, bidDataKey, date)
371371 let assetIdBid = t01629516394._1
372372 let bidDelOld = t01629516394._2
373373 let bidUpdate = t01629516394._3
374374 let soldKey = ((((((("art_sold_" + toString(newAmountSold)) + "_of_") + toString(maxCanSell)) + "_") + artId) + "_") + issuer)
375375 let soldValue = if (!(isBid))
376376 then ((((((((((caller + "_") + toString(date)) + "_") + id) + "_") + toString(artworkPrice)) + "_") + priceAssetId) + "_") + toBase58String(idNFT))
377377 else ((((((((((toString(receiveNFT) + "_") + toString(date)) + "_") + id) + "_") + toString(amount)) + "_") + assetIdBid) + "_") + toBase58String(idNFT))
378378 let soldData = StringEntry(soldKey, soldValue)
379379 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)]
380380 if (isBid)
381381 then (((buyRes :+ soldData) :+ bidUpdate) :+ bidDelOld)
382382 else soldData :: buyRes
383383 }
384384
385385
386386 @Callable(i)
387387 func addArtwork (sha256Hash,name,description,tags,type,cidDisplay) = {
388388 let t01774017781 = idCallerDate(i)
389389 let artId = t01774017781._1
390390 let caller = t01774017781._2
391391 let date = t01774017781._3
392392 let validateArtwork = validateArtworkData(caller, cidDisplay, name, description, tags)
393393 if ((validateArtwork != ""))
394394 then throw("Something went wrong!")
395395 else {
396396 let t01817018212 = validatePayment(i)
397397 let amount = t01817018212._1
398398 let assetId = t01817018212._2
399399 if (!(isDefined(amount)))
400400 then throw("Something went wrong")
401401 else {
402402 let entryExist = getStringByKey(keyTxidByHashOwner(sha256Hash, caller))
403403 if ((entryExist != ""))
404404 then throw("You already added it")
405405 else {
406406 let hashExist = getStringByKey(keyOwnerByHash(sha256Hash))
407407 if ((hashExist != ""))
408408 then throw("Hash already registered")
409409 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)]
410410 }
411411 }
412412 }
413413 }
414414
415415
416416
417417 @Callable(i)
418418 func sellArtwork (artId,price,maxMint,assetId,auctionType,minBid) = {
419419 let t02571425747 = idCallerDate(i)
420420 let id = t02571425747._1
421421 let caller = t02571425747._2
422422 let artworkName = getStringByKey(keyName(caller, artId))
423423 if (!(containsElement([auctionType1, auctionType2], auctionType)))
424424 then throw("We dont know this auction type")
425425 else if (containsElement([auctionType2], auctionType))
426426 then throw("We didnt implement this auction type yet")
427427 else if ((artworkName == ""))
428428 then throw("This art doesn't match your account")
429429 else {
430430 let bidNbr = getIntegerByKey(("current_bidamount_" + artId))
431431 if (!(acceptedAssetIds(assetId)))
432432 then throw("Something went wrong!")
433433 else if (!(validateMinSell(assetId, price)))
434434 then throw("Something went wrong!")
435435 else {
436436 let checkUser = validateUser(caller)
437437 if ((checkUser != ""))
438438 then throw(checkUser)
439439 else {
440440 let amountSold = getIntegerByKey(keyIssued(caller, artId))
441441 let maxCanSell = getIntegerByKey(keyMaxMint(caller, artId))
442442 if ((maxMint > 10))
443443 then throw("10 editions max per artwork")
444444 else if (if ((amountSold != 0))
445445 then (amountSold == maxCanSell)
446446 else false)
447447 then throw("Max edition reached.")
448448 else if (if ((amountSold > 0))
449449 then (maxCanSell != maxMint)
450450 else false)
451451 then throw("Cannot change maximum issuable anymore")
452452 else if (if ((bidNbr > 0))
453453 then (maxCanSell != maxMint)
454454 else false)
455455 then throw("Cannot change maximum issuable with active orders")
456456 else {
457457 let sellStatus = if (if ((price > 0))
458458 then (maxMint > 0)
459459 else false)
460460 then true
461461 else false
462462 [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)]
463463 }
464464 }
465465 }
466466 }
467467 }
468468
469469
470470
471471 @Callable(i)
472472 func buyArtwork (artId,issuer) = buyMint(i, artId, issuer, "", "")
473473
474474
475475
476476 @Callable(i)
477477 func deleteEntry (entry) = {
478478 let caller = toString(addressFromPublicKey(i.callerPublicKey))
479479 if ((caller == owner))
480480 then [DeleteEntry(entry)]
481481 else throw("no")
482482 }
483483
484484
485485
486486 @Callable(i)
487487 func setBid (artId,issuer) = {
488488 let t02770927747 = idCallerDate(i)
489489 let id = t02770927747._1
490490 let caller = t02770927747._2
491491 let date = t02770927747._3
492492 let t02775227788 = isPayment(i)
493493 let payment = t02775227788._1
494494 let amount = t02775227788._2
495495 let assetId = if (!(isDefined(payment.assetId)))
496496 then throw("Only sconex is accepted!")
497497 else toBase58String(value(payment.assetId))
498498 let bidNbr = getIntegerByKey(("current_bidamount_" + artId))
499499 if (!(acceptedAssetIds(assetId)))
500500 then throw("asset not accepted")
501501 else if (!(validateMinSell(assetId, amount)))
502502 then throw("Wrong min sell")
503503 else {
504504 let amountSold = getIntegerByKey(keyIssued(issuer, artId))
505505 let maxCanSell = getIntegerByKey(keyMaxMint(issuer, artId))
506506 if ((0 >= maxCanSell))
507507 then throw("No max edition set for this artwork")
508508 else if ((amountSold >= maxCanSell))
509509 then throw("Sold out, you cannot bid")
510510 else [StringEntry((((((((("bid_" + artId) + "_") + issuer) + "_") + caller) + "_") + id) + "_OPEN"), ((((assetId + "_") + toString(amount)) + "_") + toString(date))), IntegerEntry(("current_bidamount_" + artId), (bidNbr + 1))]
511511 }
512512 }
513513
514514
515515
516516 @Callable(i)
517517 func acceptBid (artId,issuer,bidId,bidOwner) = {
518518 let caller = toBase58String(i.caller.bytes)
519519 if ((caller != issuer))
520520 then throw("You cannot do this action")
521521 else buyMint(i, artId, issuer, bidId, bidOwner)
522522 }
523523
524524
525525
526526 @Callable(i)
527527 func cancelBid (artId,issuer,bidId) = {
528528 let t02894229094 = idCallerDate(i)
529529 let id = t02894229094._1
530530 let caller = t02894229094._2
531531 let date = t02894229094._3
532532 let bidNbr = getIntegerByKey(("current_bidamount_" + artId))
533533 let bidDataKey = ((((((("bid_" + artId) + "_") + issuer) + "_") + caller) + "_") + bidId)
534534 let bidData = getStringByKey((bidDataKey + "_OPEN"))
535535 if ((bidData == ""))
536536 then throw("Bid not found")
537537 else {
538538 let bidDataArr = split(bidData, "_")
539539 let assetId = getBidAssetId(bidDataArr[0])
540540 let bidStatus = "CANCELED"
541541 [DeleteEntry((bidDataKey + "_OPEN")), StringEntry(((bidDataKey + "_") + bidStatus), ((bidData + "_") + toString(date))), IntegerEntry(("current_bidamount_" + artId), (bidNbr - 1)), ScriptTransfer(Address(fromBase58String(caller)), parseIntValue(bidDataArr[1]), assetId)]
542542 }
543543 }
544544
545545

github/deemru/w8io/026f985 
60.47 ms