tx · 4MatindY4TFXsYh8QT8ypDyRvNTuSztkDNs81yhBFVuM

3MxUUEqB5PWJ9mE34pMNVtWxYeE8NXzm1xU:  -0.01000000 Waves

2022.02.24 06:34 [1937214] smart account 3MxUUEqB5PWJ9mE34pMNVtWxYeE8NXzm1xU > SELF 0.00000000 Waves

{ "type": 13, "id": "4MatindY4TFXsYh8QT8ypDyRvNTuSztkDNs81yhBFVuM", "fee": 1000000, "feeAssetId": null, "timestamp": 1645673713632, "version": 2, "chainId": 84, "sender": "3MxUUEqB5PWJ9mE34pMNVtWxYeE8NXzm1xU", "senderPublicKey": "726jzZ995a8xg5kEcq1S7hXxPZ8k2w4zUqvf8MzZTPbF", "proofs": [ "2QYnkReZdCoqBAU3zpeQevhM44TfUy3dcPs3PGemZ37ncasSXPCHTZi6Anh6acUPyoRF7yVsiq5YeCNydfRiJaH9" ], "script": "base64:AAIFAAAAAAAAADMIAhIECgIECBIECgIBCBIFCgMIAQgSAwoBCBIDCgEIEgMKAQgSBQoDCAgIEgYKBAgICAgAAAA2AAAAAAh1bml0VGVzdAYAAAAAEXVuaXRUZXN0U2Vjb25kYXJ5BgAAAAAMYXJ0d29ya3NEYXBwAwUAAAARdW5pdFRlc3RTZWNvbmRhcnkJAQAAAAV2YWx1ZQAAAAEJAAQmAAAAAQIAAAAjM043aWoxSFBUbzNiY0J3aVlmQ3N1Q3Q1VTdzQ2pRQnpNZUUJAQAAAAV2YWx1ZQAAAAEJAAQmAAAAAQIAAAAjM05CeW5mYlhDMkthc3RVeGh1a2NNVWFFNThLOWNCZEI5VVkAAAAACHVzZXJEYXBwAwUAAAAIdW5pdFRlc3QJAQAAAAV2YWx1ZQAAAAEJAAQmAAAAAQIAAAAjM010NFJHTUV5alNXWUFvY1RQcWQ1NXdkSFFRQjNQVTJVQ20JAQAAAAV2YWx1ZQAAAAEJAAQmAAAAAQIAAAAjM044eFhhWWpFMjdBYTc5ZDVoSHJoSHU5SGFGb1RCbWhERWoAAAAACW9yYWNsZUZlZQkBAAAABXZhbHVlAAAAAQkABCYAAAABAgAAACMzTjJzNVJ0YUhQQmVuQ3N4MkVDY29GUmJZSHgzbm9aaFhXMQAAAAAIc2lnbkRhcHAJAQAAAAV2YWx1ZQAAAAEJAAQmAAAAAQIAAAAjM05DMjhoU2l2cm1zVFVYYVlEMXg2TDM2Mko0WnBVbm9UZEIAAAAAC2ZlZVJlY2VpdmVyAgAAACMzTjFFNnRYZGRSb1ZhUmZROWRRM3ZnNUxhVzJmc2Q4SEt1YgAAAAANd2hpdGVsaXN0RGFwcAkBAAAABXZhbHVlAAAAAQkABCYAAAABAgAAACMzTjZCYVYxZENCNHpnNDNnb05OSGFDdHZSMTNCY3lKNUdzcQAAAAALc2lnbkFzc2V0SWQBAAAAIOilarzKd0LycGEyNUpPRYO5uR7lmWcXw3Hq2QuhBK3rAAAAAAt1c2RuQXNzZXRJZAEAAAAgD/IcEqzkxDya7EYaqyWosOy6BytGzG2IcvC14pJJAbQAAAAADHdhdmVzQXNzZXRJZAEAAAAAAAAAAAVjaHJpcwIAAAAjM01zRzZqUE5DclZKVXRZQjdYSkJ4Uzd1dFdzWEFmNG45VnAAAAAAB3NpZ25D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Y29uZGFyeVNoYXJlAAAAAQUAAAALY3JlYXRvckFkZHIAAAAAAAAAAAAEAAAADWFtb3VudEZvclNpZ24JAABrAAAAAwUAAAAGYW1vdW50BQAAAAdzaWduQ3V0AAAAAAAAAABkBAAAABBhbW91bnRGb3JDcmVhdG9yCQAAawAAAAMFAAAABmFtb3VudAUAAAAKY3JlYXRvckN1dAAAAAAAAAAAZAQAAAAOYW1vdW50Rm9yT3duZXIJAABlAAAAAgUAAAAGYW1vdW50CQAAZAAAAAIFAAAADWFtb3VudEZvclNpZ24FAAAAEGFtb3VudEZvckNyZWF0b3IEAAAADmFtb3VudEZvckFnZW50AwMJAQAAAAIhPQAAAAIFAAAABWFnZW50BQAAAAtmZWVSZWNlaXZlcgkAAGYAAAACBQAAAAphZ2VudFNoYXJlAAAAAAAAAAAABwkAAGsAAAADBQAAAAZhbW91bnQFAAAACmFnZW50U2hhcmUAAAAAAAAAAGQAAAAAAAAAAAAEAAAAB3NpZ25GZWUJAQAAAA5TY3JpcHRUcmFuc2ZlcgAAAAMJAQAAAAdBZGRyZXNzAAAAAQkAAlkAAAABBQAAAAtmZWVSZWNlaXZlcgkAAGUAAAACBQAAAA1hbW91bnRGb3JTaWduBQAAAA5hbW91bnRGb3JBZ2VudAUAAAAHYXNzZXRJZAQAAAAIYWdlbnRGZWUJAQAAAA5TY3JpcHRUcmFuc2ZlcgAAAAMJAQAAAAdBZGRyZXNzAAAAAQkAAlkAAAABBQAAAAVhZ2VudAUAAAAOYW1vdW50Rm9yQWdlbnQFAAAAB2Fzc2V0SWQEAAAACmNyZWF0b3JGZWUJAQAAAA5TY3JpcHRUcmFuc2ZlcgAAAAMJAQAAAAdBZGRyZXNzAAAAAQkAAlkAAAABBQAAAAtjcmVhdG9yQWRkcgUAAAAQYW1vdW50Rm9yQ3JlYXRvcgUAAAAHYXNzZXRJZAQAAAAIb3duZXJGZWUJAQAAAA5TY3JpcHRUcmFuc2ZlcgAAAAMJAQAAAAdBZGRyZXNzAAAAAQkAAlkAAAABBQAAAAlzYWxlT3duZXIFAAAADmFtb3VudEZvck93bmVyBQAAAAdhc3NldElkBAAAAAxjb2xsZWN0b3JORlQJAQAAAA5TY3JpcHRUcmFuc2ZlcgAAAAMJAQAAAAdBZGRy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DSR0MDE3MDEyMTcxMDQJAQAAAA9wcm92aWRlQmFzZURhdGEAAAACBQAAAAFpBQAAAAVuZnRJZAQAAAACaWQIBQAAAA0kdDAxNzAxMjE3MTA0AAAAAl8xBAAAAAZjYWxsZXIIBQAAAA0kdDAxNzAxMjE3MTA0AAAAAl8yBAAAAARkYXRlCAUAAAANJHQwMTcwMTIxNzEwNAAAAAJfMwQAAAAKaXNWYWxpZE5GVAgFAAAADSR0MDE3MDEyMTcxMDQAAAACXzQEAAAABWFydElkCAUAAAANJHQwMTcwMTIxNzEwNAAAAAJfNQQAAAALY3JlYXRvckFkZHIIBQAAAA0kdDAxNzAxMjE3MTA0AAAAAl82BAAAAAlhcnRTaWduSUQIBQAAAA0kdDAxNzAxMjE3MTA0AAAAAl83AwkBAAAAASEAAAABBQAAAAppc1ZhbGlkTkZUCQAAAgAAAAECAAAAD05vdCBhIHZhbGlkIG5mdAQAAAAJc2FsZU93bmVyCQEAAAAVZ2V0U2FsZU93bmVyQW5kU3RhdHVzAAAAAQUAAAAFbmZ0SWQDCQEAAAACIT0AAAACBQAAAAZjYWxsZXIFAAAACXNhbGVPd25lcgkAAAIAAAABAgAAACBPbmx5IHNhbGUgb3duZXIgY2FuIGFjY2VwdCBvZmZlcgQAAAAGYmlkS2V5CQEAAAAJZ2V0QmlkS2V5AAAABAUAAAAKb2ZmZXJPd25lcgUAAAAFbmZ0SWQFAAAACXNhbGVPd25lcgUAAAAHb2ZmZXJJZAQAAAANJHQwMTczNjUxNzQyMAkBAAAACmdldEJpZERhdGEAAAABBQAAAAZiaWRLZXkEAAAACmJpZERhdGFBcnIIBQAAAA0kdDAxNzM2NTE3NDIwAAAAAl8xBAAAAAdhc3NldElkCAUAAAANJHQwMTczNjUxNzQyMAAAAAJfMgQAAAAHYmlkRGF0YQgFAAAADSR0MDE3MzY1MTc0MjAAAAACXzMEAAAAB3NhbGVLZXkJAQAAAApnZXRTYWxlS2V5AAAABAUAAAAJc2FsZU93bmVyBQAAAAVuZnRJZAUAAAAFYXJ0SWQFAAAAC2NyZWF0b3JBZGRyBAAAAAhzYWxlSW5mbwkBAAAACWdldFN0ckJ5SwAAAAEJAAEsAAAAAgUAAAAHc2FsZUtleQIAAAAFX09QRU4DCQAAAAAA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", "height": 1937214, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: none Next: none Full:
OldNewDifferences
1-# no script
1+{-# STDLIB_VERSION 5 #-}
2+{-# SCRIPT_TYPE ACCOUNT #-}
3+{-# CONTENT_TYPE DAPP #-}
4+let unitTest = true
5+
6+let unitTestSecondary = true
7+
8+let artworksDapp = if (unitTestSecondary)
9+ then value(addressFromString("3N7ij1HPTo3bcBwiYfCsuCt5U7sCjQBzMeE"))
10+ else value(addressFromString("3NBynfbXC2KastUxhukcMUaE58K9cBdB9UY"))
11+
12+let userDapp = if (unitTest)
13+ then value(addressFromString("3Mt4RGMEyjSWYAocTPqd55wdHQQB3PU2UCm"))
14+ else value(addressFromString("3N8xXaYjE27Aa79d5hHrhHu9HaFoTBmhDEj"))
15+
16+let oracleFee = value(addressFromString("3N2s5RtaHPBenCsx2ECcoFRbYHx3noZhXW1"))
17+
18+let signDapp = value(addressFromString("3NC28hSivrmsTUXaYD1x6L362J4ZpUnoTdB"))
19+
20+let feeReceiver = "3N1E6tXddRoVaRfQ9dQ3vg5LaW2fsd8HKub"
21+
22+let whitelistDapp = value(addressFromString("3N6BaV1dCB4zg43goNNHaCtvR13BcyJ5Gsq"))
23+
24+let signAssetId = base58'Gf9t8FA4H3ssoZPCwrg3KwUFCci8zuUFP9ssRsUY3s6a'
25+
26+let usdnAssetId = base58'25FEqEjRkqK6yCkiT7Lz6SAYz7gUFCtxfCChnrVFD5AT'
27+
28+let wavesAssetId = base58''
29+
30+let chris = "3MsG6jPNCrVJUtYB7XJBxS7utWsXAf4n9Vp"
31+
32+let signCut = 3
33+
34+let creatorCut = 10
35+
36+let userSuspended = "SUSPENDED"
37+
38+let userRemoved = "REMOVED"
39+
40+let artIllegal = "ILLEGAL"
41+
42+let artSuspended = "SUSPENDED"
43+
44+let dappRunningKey = "conf_dapp_is_running"
45+
46+let maintenanceMSGKey = "conf_maintenance_msg"
47+
48+let dappRunning = valueOrElse(getBoolean(this, dappRunningKey), true)
49+
50+let maintenanceMSG = valueOrElse(getString(this, maintenanceMSGKey), "")
51+
52+let numSalesK = "num_sales"
53+
54+func getUserStrByK (key) = valueOrElse(getString(userDapp, key), "Error")
55+
56+
57+func getArtStrByK (key) = valueOrElse(getString(artworksDapp, key), "")
58+
59+
60+func getStrByK (key) = valueOrElse(getString(this, key), "")
61+
62+
63+func getIntByK (key) = valueOrElse(getInteger(this, key), 0)
64+
65+
66+func keyUserStatus (addr) = ("user_status_" + addr)
67+
68+
69+func keySignID (artistAddr,artId) = ((("art_signid_" + artId) + "_") + artistAddr)
70+
71+
72+func keyFlag (artistAddr,artId) = ((("art_flag_" + artId) + "_") + artistAddr)
73+
74+
75+func keyNFTData (id) = ("nft_" + id)
76+
77+
78+func getSaleKey (caller,nftId,artId,creatorAddr) = ((((((("sale2nd_info_" + caller) + "_") + nftId) + "_") + artId) + "_") + creatorAddr)
79+
80+
81+func getBidKey (offerOwner,nftId,saleOwner,offerId) = ((((((("offer2nd_" + offerOwner) + "_") + nftId) + "_") + saleOwner) + "_") + offerId)
82+
83+
84+func getIntByKFromOracle (key) = valueOrErrorMessage(getInteger(oracleFee, key), "Integer undefine or 0 in oracle")
85+
86+
87+let currentCertificationPrice = getIntByKFromOracle(("certification_fee_" + toBase58String(signAssetId)))
88+
89+func keyArtistAgentAddr (artistAddr) = ("artist_agent_" + artistAddr)
90+
91+
92+func keySecondaryShare (artistAddr) = ("artist_agent_secondary" + artistAddr)
93+
94+
95+func idCallerDate (i) = if (!(dappRunning))
96+ then throw(maintenanceMSG)
97+ else $Tuple3(toBase58String(i.transactionId), toBase58String(i.caller.bytes), lastBlock.timestamp)
98+
99+
100+func isPayment (i) = if ((size(i.payments) == 0))
101+ then throw("No payment attached")
102+ else {
103+ let payment = value(i.payments[0])
104+ let amount = value(payment.amount)
105+ $Tuple2(payment, amount)
106+ }
107+
108+
109+func assetIsValid (assetDetails) = if (if (if ((assetDetails.quantity == 1))
110+ then (assetDetails.decimals == 0)
111+ else false)
112+ then (assetDetails.reissuable == false)
113+ else false)
114+ then (assetDetails.issuer == artworksDapp)
115+ else false
116+
117+
118+func isSignArtNFT (id) = {
119+ let assetDetails = value(assetInfo(id))
120+ assetIsValid(assetDetails)
121+ }
122+
123+
124+func acceptedAssetIds (assetId) = if (if (if (if ((assetId != toBase58String(signAssetId)))
125+ then (assetId != toBase58String(wavesAssetId))
126+ else false)
127+ then (assetId != "WAVES")
128+ else false)
129+ then (assetId != toBase58String(usdnAssetId))
130+ else false)
131+ then false
132+ else true
133+
134+
135+func getBidAssetId (assetId) = if ((assetId == "WAVES"))
136+ then unit
137+ else fromBase58String(assetId)
138+
139+
140+func getSaleOwnerAndStatus (nftid) = {
141+ let saleOwner = getStrByK(("current_owner_on_dapp_" + nftid))
142+ if ((size(saleOwner) == 0))
143+ then throw("NFT not found")
144+ else {
145+ let saleStatus = getStrByK(((("sale2nd_status_" + saleOwner) + "_") + nftid))
146+ if ((saleStatus != "OPEN"))
147+ then throw("NFT not for sale")
148+ else saleOwner
149+ }
150+ }
151+
152+
153+func getBidData (key) = {
154+ let bidData = getStrByK((key + "_OPEN"))
155+ if ((bidData == ""))
156+ then throw("Offer not found")
157+ else {
158+ let bidDataArr = split(bidData, "_")
159+ let assetId = getBidAssetId(bidDataArr[2])
160+ $Tuple3(bidDataArr, assetId, bidData)
161+ }
162+ }
163+
164+
165+func artIsValid (artStatus) = if ((artStatus != artIllegal))
166+ then (artStatus != artSuspended)
167+ else false
168+
169+
170+func checkArtStatus (addr,id) = {
171+ let artStatus = getArtStrByK(keyFlag(addr, id))
172+ if (artIsValid(artStatus))
173+ then true
174+ else throw(("Original Artwork flagged as " + artStatus))
175+ }
176+
177+
178+func checkArtistStatus (addr) = {
179+ let artistStatus = getUserStrByK(keyUserStatus(addr))
180+ if (containsElement([userSuspended, userRemoved], artistStatus))
181+ then throw(("Original Artist " + artistStatus))
182+ else true
183+ }
184+
185+
186+func checkNFTInfo (assetId) = {
187+ let nftData = split(getArtStrByK(keyNFTData(assetId)), "_")
188+ let artSignID = getArtStrByK(keySignID(nftData[6], nftData[5]))
189+ if (if (!(checkArtStatus(nftData[6], nftData[5])))
190+ then !(checkArtistStatus(nftData[6]))
191+ else false)
192+ then $Tuple4(false, nftData[5], nftData[6], artSignID)
193+ else $Tuple4(true, nftData[5], nftData[6], artSignID)
194+ }
195+
196+
197+func checkARTExist (artId,creatorAddr) = {
198+ let artSignID = getArtStrByK(keySignID(creatorAddr, artId))
199+ if ((size(artSignID) == 0))
200+ then throw("Artwork not found on SIGN Art")
201+ else if (if (!(checkArtStatus(creatorAddr, artId)))
202+ then !(checkArtistStatus(creatorAddr))
203+ else false)
204+ then false
205+ else true
206+ }
207+
208+
209+func setTransfers (amount,assetId,nftid,creatorAddr,saleOwner,caller) = {
210+ let agent = valueOrElse(getString(userDapp, keyArtistAgentAddr(creatorAddr)), feeReceiver)
211+ let agentShare = valueOrElse(getInteger(userDapp, keySecondaryShare(creatorAddr)), 0)
212+ let amountForSign = fraction(amount, signCut, 100)
213+ let amountForCreator = fraction(amount, creatorCut, 100)
214+ let amountForOwner = (amount - (amountForSign + amountForCreator))
215+ let amountForAgent = if (if ((agent != feeReceiver))
216+ then (agentShare > 0)
217+ else false)
218+ then fraction(amount, agentShare, 100)
219+ else 0
220+ let signFee = ScriptTransfer(Address(fromBase58String(feeReceiver)), (amountForSign - amountForAgent), assetId)
221+ let agentFee = ScriptTransfer(Address(fromBase58String(agent)), amountForAgent, assetId)
222+ let creatorFee = ScriptTransfer(Address(fromBase58String(creatorAddr)), amountForCreator, assetId)
223+ let ownerFee = ScriptTransfer(Address(fromBase58String(saleOwner)), amountForOwner, assetId)
224+ let collectorNFT = ScriptTransfer(Address(fromBase58String(caller)), 1, fromBase58String(nftid))
225+ $Tuple5(signFee, creatorFee, ownerFee, collectorNFT, agentFee)
226+ }
227+
228+
229+func validateMinSell (assetId,price) = {
230+ let minSellWaves = if (unitTest)
231+ then 10
232+ else getIntByKFromOracle("waves_min_sell")
233+ let minSellUsdn = 1000000
234+ let minSellSign = if (unitTest)
235+ then 1
236+ else (currentCertificationPrice * 2)
237+ if (if (if (if (if ((assetId == toBase58String(usdnAssetId)))
238+ then (minSellUsdn > price)
239+ else false)
240+ then (price != 0)
241+ else false)
242+ then true
243+ else if (if ((assetId == toBase58String(signAssetId)))
244+ then (minSellSign > price)
245+ else false)
246+ then (price != 0)
247+ else false)
248+ then true
249+ else if (if (if ((assetId == toBase58String(wavesAssetId)))
250+ then true
251+ else (assetId == "WAVES"))
252+ then (minSellWaves > price)
253+ else false)
254+ then (price != 0)
255+ else false)
256+ then false
257+ else true
258+ }
259+
260+
261+func provideBaseData (i,nftId) = {
262+ let $t097959834 = idCallerDate(i)
263+ let id = $t097959834._1
264+ let caller = $t097959834._2
265+ let date = $t097959834._3
266+ let $t098389907 = checkNFTInfo(nftId)
267+ let isValidNFT = $t098389907._1
268+ let artId = $t098389907._2
269+ let creatorAddr = $t098389907._3
270+ let artSignID = $t098389907._4
271+ $Tuple7(id, caller, date, isValidNFT, artId, creatorAddr, artSignID)
272+ }
273+
274+
275+func updateNumSales () = {
276+ let numSales = getIntByK(numSalesK)
277+ IntegerEntry(numSalesK, (numSales + 1))
278+ }
279+
280+
281+@Callable(invoke)
282+func appRunning (isLive,message) = {
283+ let caller = toString(addressFromPublicKey(invoke.callerPublicKey))
284+ let id = toBase58String(invoke.transactionId)
285+ if (containsElement([chris, toString(this)], caller))
286+ then [BooleanEntry(dappRunningKey, isLive), StringEntry(maintenanceMSGKey, message)]
287+ else throw("You are not allowed to change this")
288+ }
289+
290+
291+
292+@Callable(i)
293+func sellNFT (price,asset) = {
294+ let $t01064710683 = isPayment(i)
295+ let payment = $t01064710683._1
296+ let amount = $t01064710683._2
297+ if ((amount != 1))
298+ then throw("No NFT attached")
299+ else {
300+ let nftId = if (if (isDefined(payment.assetId))
301+ then isSignArtNFT(value(payment.assetId))
302+ else false)
303+ then toBase58String(value(payment.assetId))
304+ else throw("Only SIGN Art NFT accepted.")
305+ let $t01092111013 = provideBaseData(i, nftId)
306+ let id = $t01092111013._1
307+ let caller = $t01092111013._2
308+ let date = $t01092111013._3
309+ let isValidNFT = $t01092111013._4
310+ let artId = $t01092111013._5
311+ let creatorAddr = $t01092111013._6
312+ let artSignID = $t01092111013._7
313+ if ((size(artSignID) == 0))
314+ then throw("Artwork not found on SIGN Art")
315+ else if (!(isValidNFT))
316+ then throw("Not a valid nft")
317+ else if (!(acceptedAssetIds(asset)))
318+ then throw("Only SIGN, USDN or WAVES accepted")
319+ else if (!(validateMinSell(asset, price)))
320+ then throw("Wrong minimum sell price")
321+ else [StringEntry((getSaleKey(caller, nftId, artId, creatorAddr) + "_OPEN"), ((((((((((((toString(date) + "_") + toString(price)) + "_") + asset) + "_") + nftId) + "_") + artId) + "_") + creatorAddr) + "_") + id)), StringEntry(((("sale2nd_status_" + caller) + "_") + nftId), "OPEN"), StringEntry(("current_owner_on_dapp_" + nftId), caller)]
322+ }
323+ }
324+
325+
326+
327+@Callable(i)
328+func updateSalePrice (nftId,price,asset) = {
329+ let $t01191112003 = provideBaseData(i, nftId)
330+ let id = $t01191112003._1
331+ let caller = $t01191112003._2
332+ let date = $t01191112003._3
333+ let isValidNFT = $t01191112003._4
334+ let artId = $t01191112003._5
335+ let creatorAddr = $t01191112003._6
336+ let artSignID = $t01191112003._7
337+ if ((size(artSignID) == 0))
338+ then throw("Artwork not found on SIGN Art, cancel your sale.")
339+ else if (!(isValidNFT))
340+ then throw("Not a valid nft")
341+ else {
342+ let saleOwner = getStrByK(("current_owner_on_dapp_" + nftId))
343+ if ((saleOwner != caller))
344+ then throw("You don't own this NFT")
345+ else {
346+ let saleStatus = getStrByK(((("sale2nd_status_" + caller) + "_") + nftId))
347+ if ((saleStatus != "OPEN"))
348+ then throw("Sale not active")
349+ else if (!(acceptedAssetIds(asset)))
350+ then throw("Only SIGN, USDN or WAVES accepted")
351+ else if (!(validateMinSell(asset, price)))
352+ then throw("Wrong minimum sell price")
353+ else {
354+ let saleKey = getSaleKey(caller, nftId, artId, creatorAddr)
355+ let saleInfo = split(getStrByK((saleKey + "_OPEN")), "_")
356+[StringEntry((saleKey + "_OPEN"), ((((((((((((saleInfo[0] + "_") + toString(price)) + "_") + asset) + "_") + saleInfo[3]) + "_") + saleInfo[4]) + "_") + saleInfo[5]) + "_") + saleInfo[6]))]
357+ }
358+ }
359+ }
360+ }
361+
362+
363+
364+@Callable(i)
365+func cancelSale (nftId) = {
366+ let $t01317413417 = provideBaseData(i, nftId)
367+ let id = $t01317413417._1
368+ let caller = $t01317413417._2
369+ let date = $t01317413417._3
370+ let isValidNFT = $t01317413417._4
371+ let artId = $t01317413417._5
372+ let creatorAddr = $t01317413417._6
373+ let artSignID = $t01317413417._7
374+ let saleOwner = getStrByK(("current_owner_on_dapp_" + nftId))
375+ if ((saleOwner != caller))
376+ then throw("You don't own this NFT")
377+ else {
378+ let saleStatus = getStrByK(((("sale2nd_status_" + caller) + "_") + nftId))
379+ if ((saleStatus != "OPEN"))
380+ then throw("Sale not active")
381+ else {
382+ let saleKey = getSaleKey(caller, nftId, artId, creatorAddr)
383+ let saleInfo = getStrByK((saleKey + "_OPEN"))
384+[DeleteEntry((saleKey + "_OPEN")), DeleteEntry(((("sale2nd_status_" + caller) + "_") + nftId)), DeleteEntry(("current_owner_on_dapp_" + nftId)), StringEntry((((saleKey + "_") + id) + "_CANCELLED"), ((((saleInfo + "_CANCELLED_") + toString(date)) + "_") + id)), ScriptTransfer(Address(fromBase58String(caller)), 1, fromBase58String(nftId))]
385+ }
386+ }
387+ }
388+
389+
390+
391+@Callable(i)
392+func buyNFT (nftId) = {
393+ let $t01427114363 = provideBaseData(i, nftId)
394+ let id = $t01427114363._1
395+ let caller = $t01427114363._2
396+ let date = $t01427114363._3
397+ let isValidNFT = $t01427114363._4
398+ let artId = $t01427114363._5
399+ let creatorAddr = $t01427114363._6
400+ let artSignID = $t01427114363._7
401+ if ((size(artSignID) == 0))
402+ then throw("Artwork not found on SIGN Art, cancel your sale.")
403+ else if (!(isValidNFT))
404+ then throw("Not a valid nft")
405+ else {
406+ let saleOwner = getSaleOwnerAndStatus(nftId)
407+ let saleKey = getSaleKey(saleOwner, nftId, artId, creatorAddr)
408+ let saleInfo = getStrByK((saleKey + "_OPEN"))
409+ if ((size(saleInfo) == 0))
410+ then throw("Sale Not found!")
411+ else {
412+ let saleInfoArray = split(saleInfo, "_")
413+ if ((parseInt(saleInfoArray[1]) == 0))
414+ then throw("Offer only")
415+ else {
416+ let $t01487214908 = isPayment(i)
417+ let payment = $t01487214908._1
418+ let amount = $t01487214908._2
419+ let paymentAssetStr = if (isDefined(payment.assetId))
420+ then toBase58String(value(payment.assetId))
421+ else ""
422+ if (if ((saleInfoArray[1] != toString(amount)))
423+ then true
424+ else (saleInfoArray[2] != paymentAssetStr))
425+ then throw("Payment infos don't match.")
426+ else {
427+ let $t01542215560 = setTransfers(amount, payment.assetId, nftId, creatorAddr, saleOwner, caller)
428+ let signFee = $t01542215560._1
429+ let creatorFee = $t01542215560._2
430+ let ownerFee = $t01542215560._3
431+ let collectorNFT = $t01542215560._4
432+ let agentFee = $t01542215560._5
433+[DeleteEntry((saleKey + "_OPEN")), DeleteEntry(((("sale2nd_status_" + saleOwner) + "_") + nftId)), DeleteEntry(("current_owner_on_dapp_" + nftId)), StringEntry((((saleKey + "_") + id) + "_CLOSED"), ((((((saleInfo + "_CLOSED_") + toString(date)) + "_") + id) + "_") + caller)), updateNumSales(), signFee, creatorFee, ownerFee, collectorNFT, agentFee]
434+ }
435+ }
436+ }
437+ }
438+ }
439+
440+
441+
442+@Callable(i)
443+func setOffer (nftId) = {
444+ let $t01599516091 = provideBaseData(i, nftId)
445+ let id = $t01599516091._1
446+ let offerOwner = $t01599516091._2
447+ let date = $t01599516091._3
448+ let isValidNFT = $t01599516091._4
449+ let artId = $t01599516091._5
450+ let creatorAddr = $t01599516091._6
451+ let artSignID = $t01599516091._7
452+ if (!(isValidNFT))
453+ then throw("Not a valid nft")
454+ else {
455+ let $t01615516191 = isPayment(i)
456+ let payment = $t01615516191._1
457+ let amount = $t01615516191._2
458+ let assetId = if (!(isDefined(payment.assetId)))
459+ then "WAVES"
460+ else toBase58String(value(payment.assetId))
461+ if (!(acceptedAssetIds(assetId)))
462+ then throw("asset not accepted")
463+ else if ((amount == 0))
464+ then throw("Offer of 0 not allowed")
465+ else if (!(validateMinSell(assetId, amount)))
466+ then throw("Wrong minimum sell price")
467+ else {
468+ let saleOwner = getSaleOwnerAndStatus(nftId)
469+[StringEntry((getBidKey(offerOwner, nftId, saleOwner, id) + "_OPEN"), ((((((((((((((toString(date) + "_") + toString(amount)) + "_") + assetId) + "_") + nftId) + "_") + artId) + "_") + creatorAddr) + "_") + offerOwner) + "_") + id))]
470+ }
471+ }
472+ }
473+
474+
475+
476+@Callable(i)
477+func acceptOffer (nftId,offerId,offerOwner) = {
478+ let $t01701217104 = provideBaseData(i, nftId)
479+ let id = $t01701217104._1
480+ let caller = $t01701217104._2
481+ let date = $t01701217104._3
482+ let isValidNFT = $t01701217104._4
483+ let artId = $t01701217104._5
484+ let creatorAddr = $t01701217104._6
485+ let artSignID = $t01701217104._7
486+ if (!(isValidNFT))
487+ then throw("Not a valid nft")
488+ else {
489+ let saleOwner = getSaleOwnerAndStatus(nftId)
490+ if ((caller != saleOwner))
491+ then throw("Only sale owner can accept offer")
492+ else {
493+ let bidKey = getBidKey(offerOwner, nftId, saleOwner, offerId)
494+ let $t01736517420 = getBidData(bidKey)
495+ let bidDataArr = $t01736517420._1
496+ let assetId = $t01736517420._2
497+ let bidData = $t01736517420._3
498+ let saleKey = getSaleKey(saleOwner, nftId, artId, creatorAddr)
499+ let saleInfo = getStrByK((saleKey + "_OPEN"))
500+ if ((size(saleInfo) == 0))
501+ then throw("Sale Not found!")
502+ else {
503+ let amount = value(parseInt(bidDataArr[1]))
504+ let $t01766317800 = setTransfers(amount, assetId, nftId, creatorAddr, saleOwner, bidDataArr[6])
505+ let signFee = $t01766317800._1
506+ let creatorFee = $t01766317800._2
507+ let ownerFee = $t01766317800._3
508+ let collectorNFT = $t01766317800._4
509+ let agentFee = $t01766317800._5
510+ let assetIdStr = if (isDefined(assetId))
511+ then toBase58String(value(assetId))
512+ else "WAVES"
513+[DeleteEntry((saleKey + "_OPEN")), DeleteEntry((bidKey + "_OPEN")), DeleteEntry(((("sale2nd_status_" + saleOwner) + "_") + nftId)), DeleteEntry(("current_owner_on_dapp_" + nftId)), StringEntry((bidKey + "_CLOSED"), ((((bidData + "_CLOSED_") + toString(date)) + "_") + id)), StringEntry((((saleKey + "_") + id) + "_CLOSED"), ((((((((((saleInfo + "_CLOSED-OFFER_") + toString(date)) + "_") + id) + "_") + offerOwner) + "_") + toString(amount)) + "_") + assetIdStr)), updateNumSales(), signFee, creatorFee, ownerFee, collectorNFT, agentFee]
514+ }
515+ }
516+ }
517+ }
518+
519+
520+
521+@Callable(i)
522+func cancelOffer (nftId,offerId,offerOwner,saleOwner) = {
523+ let $t01862718700 = idCallerDate(i)
524+ let id = $t01862718700._1
525+ let caller = $t01862718700._2
526+ let date = $t01862718700._3
527+ if (if ((caller != offerOwner))
528+ then (caller != saleOwner)
529+ else false)
530+ then throw("You cannot cancel this offer.")
531+ else {
532+ let bidKey = getBidKey(offerOwner, nftId, saleOwner, offerId)
533+ let $t01887418929 = getBidData(bidKey)
534+ let bidDataArr = $t01887418929._1
535+ let assetId = $t01887418929._2
536+ let bidData = $t01887418929._3
537+[DeleteEntry((bidKey + "_OPEN")), StringEntry((bidKey + "_CANCELLED"), ((((bidData + "_CANCELLED_") + toString(date)) + "_") + id)), ScriptTransfer(Address(fromBase58String(caller)), parseIntValue(bidDataArr[1]), assetId)]
538+ }
539+ }
540+
541+

github/deemru/w8io/026f985 
51.53 ms