tx · EvLfKGfSFyU782rJr9iX8AYvibq85uFQB5sLhGRoc34x

3MrWNTqFcHBqb58Za1A5crQrMV5KJ5DYhtA:  -0.01000000 Waves

2021.08.09 20:59 [1651136] smart account 3MrWNTqFcHBqb58Za1A5crQrMV5KJ5DYhtA > SELF 0.00000000 Waves

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

github/deemru/w8io/026f985 
72.87 ms