tx · 7Dkm7YSE4erQsPKCaXs7wsZs8iUuYtDZ7SsqEcnUPj6H

3MrWNTqFcHBqb58Za1A5crQrMV5KJ5DYhtA:  -0.01000000 Waves

2021.08.15 13:51 [1659373] smart account 3MrWNTqFcHBqb58Za1A5crQrMV5KJ5DYhtA > SELF 0.00000000 Waves

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

github/deemru/w8io/026f985 
60.67 ms