tx · AHbLG9pTRxHsWpUY4Zrv7q2CoAgeoh6e4ejugTkVDr9B

3MrWNTqFcHBqb58Za1A5crQrMV5KJ5DYhtA:  -0.01000000 Waves

2021.08.15 13:58 [1659380] smart account 3MrWNTqFcHBqb58Za1A5crQrMV5KJ5DYhtA > SELF 0.00000000 Waves

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

github/deemru/w8io/026f985 
79.27 ms