tx · A9EiXZ1sbCgH3wSaRUk6y28ENw2oqpE4uUKewizjf8Cz

3MrWNTqFcHBqb58Za1A5crQrMV5KJ5DYhtA:  -0.01000000 Waves

2021.08.15 14:34 [1659419] smart account 3MrWNTqFcHBqb58Za1A5crQrMV5KJ5DYhtA > SELF 0.00000000 Waves

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

github/deemru/w8io/026f985 
73.86 ms