tx · GJF18AZq8Qt6MaqbqdpvKReLeE8hkWLKsij7Ze3Ubqo9

3MtSMHYqAyXEMMSDoAuwLZd2zHvvpCm2vcP:  -0.01000000 Waves

2021.03.11 10:09 [1432713] smart account 3MtSMHYqAyXEMMSDoAuwLZd2zHvvpCm2vcP > SELF 0.00000000 Waves

{ "type": 13, "id": "GJF18AZq8Qt6MaqbqdpvKReLeE8hkWLKsij7Ze3Ubqo9", "fee": 1000000, "feeAssetId": null, "timestamp": 1615446573618, "version": 2, "chainId": 84, "sender": "3MtSMHYqAyXEMMSDoAuwLZd2zHvvpCm2vcP", "senderPublicKey": "HPbg2aTP3J9fQFR3iLXj1XW7gZdhQPNNDpKkJc5326pJ", "proofs": [ "5SoY9tY7L8WLurU4CS4E8KazM1QSKqVriNtaUf6ixy11aQhdwncCZ8S28UPa99EBEx8wbtigLKCfAC3wZinxkTQ" ], "script": "base64:AAIEAAAAAAAAAE8IAhINCgsICAgICAgICAgICBIMCgoICAgICAgICAgIEgUKAwgICBIECgIICBIGCgQIAQEIEgQKAggIEgQKAggIEgYKBAgICAgSBQoDCAgIAAAARQAAAAAIdW5pdFRlc3QGAAAAAAlvcmFjbGVGZWUJAQAAAAV2YWx1ZQAAAAEJAAQmAAAAAQIAAAAjM04yczVSdGFIUEJlbkNzeDJFQ2NvRlJiWUh4M25vWmhYVzEAAAAACHNpZ25EYXBwCQEAAAAFdmFsdWUAAAABCQAEJgAAAAECAAAAIzNOQzI4aFNpdnJtc1RVWGFZRDF4NkwzNjJKNFpwVW5vVGRCAAAAAAtmZWVSZWNlaXZlcgIAAAAjM04xRTZ0WGRkUm9WYVJmUTlkUTN2ZzVMYVcyZnNkOEhLdWIAAAAACHVzZXJEYXBwAwUAAAAIdW5pdFRlc3QJAQAAAAV2YWx1ZQAAAAEJAAQmAAAAAQIAAAAjM010NFJHTUV5alNXWUFvY1RQcWQ1NXdkSFFRQjNQVTJVQ20JAQAAAAV2YWx1ZQAAAAEJAAQmAAAAAQIAAAAjM044eFhhWWpFMjdBYTc5ZDVoSHJoSHU5SGFGb1RCbWhERWoAAAAADXdoaXRlbGlzdERhcHAJAQAAAAV2YWx1ZQAAAAEJAAQmAAAAAQIAAAAjM042QmFWMWRDQjR6ZzQzZ29OTkhhQ3R2UjEzQmN5SjVHc3EAAAAAC3NpZ25Bc3NldElkAQAAACDopWq8yndC8nBhMjVKT0WDubke5ZlnF8Nx6tkLoQSt6wAAAAALdXNkbkFzc2V0SWQBAAAAIA/yHBKs5MQ8muxGGqslqLDsugcrRsxtiHLwteKSSQG0AAAAAAx3YXZlc0Fzc2V0SWQBAAAAAAAAAAAFY2hyaXMCAAAAIzNNc0c2alBOQ3JWSlV0WUI3WEpCeFM3dXRXc1hBZjRuOVZwAAAAAARqb2VwAgAAACMzTXptNFZMd3NOOXVad2JUTXpQajNYdXhWNmtFZkFSOFVETgAAAAAHc2lnbkN1dAAAAAAAAAAABwAAAAALdXNkbldhdmVDdXQAAAAAAAAAAAoAAAAADmRlZmF1bHRMaWNlbmNlAgAAAEdiYWZ5YmVpZnV5bzRwcXU1NGlzbXFndGI2ZTRoNmtrdmd4N3pnNHUzemliaDJyN3k2bWI2NGk3Ynp6YS9saWNlbmNlLnBkZgAAAAASZGVmYXVsdEhhc2hMaWNlbmNlAgAAAEBhODc3NThjMzU0ZTMwYTllNzhmYjg0ZmEzYTAwMTBhNTA5MGFiMjBkZjBiZTExYWQ0NWI1NzIwY2MxODdlNjM5AAAAAAtkYXBwUnVubmluZwkBAAAAC3ZhbHVlT3JFbHNlAAAAAgkABBsAAAACBQAAAAh1c2VyRGFwcAIAAAAUY29uZl9kYXBwX2lzX3J1bm5pbmcGAAAAAA5tYWludGVuYW5jZU1TRwkBAAAAC3ZhbHVlT3JFbHNlAAAAAgkABB0AAAACBQAAAAh1c2VyRGFwcAIAAAAUY29uZl9tYWludGVuYW5jZV9tc2cCAAAAAAAAAAANdXNlclN1c3BlbmRlZAIAAAAJU1VTUEVOREVEAAAAAAt1c2VyUmVtb3ZlZAIAAAAHUkVNT1ZFRAAAAAAQdXNlclVucmVnaXN0ZXJlZAIAAAAMVU5SRUdJU1RFUkVEAAAAAAt1c2VyQWxsb3dlZAIAAAAHQUxMT1dFRAEAAAAVZ2V0U3RyaW5nQnlLRnJvbVVzZXJzAAAAAQAAAAFLCQEAAAALdmFsdWVPckVsc2UAAAACCQAEHQAAAAIFAAAACHVzZXJEYXBwBQAAAAFLAgAAAAABAAAADGdldFN0cmluZ0J5SwAAAAEAAAABSwkBAAAAC3ZhbHVlT3JFbHNlAAAAAgkABB0AAAACBQAAAAR0aGlzBQAAAAFLAgAAAAABAAAAF2dldEludGVnZXJCeUtGcm9tT3JhY2xlAAAAAQAAAAFLCQEAAAATdmFsdWVPckVycm9yTWVzc2FnZQAAAAIJAAQaAAAAAgUAAAAJb3JhY2xlRmVlBQAAAAFLAgAAAB9JbnRlZ2VyIHVuZGVmaW5lIG9yIDAgaW4gb3JhY2xlAQAAAA1nZXRJbnRlZ2VyQnlLAAAAAQAAAAFLCQEAAAALdmFsdWVPckVsc2UAAAACCQAEGgAAAAIFAAAABHRoaXMFAAAAAUsAAAAAAAAAAAABAAAADmNoZWNrV2hpdGVsaXN0AAAAAQAAAAFLCQEAAAALdmFsdWVPckVsc2UAAAACCQAEGgAAAAIFAAAADXdoaXRlbGlzdERhcHAFAAAAAUsAAAAAAAAAAAABAAAADWdldEJvb2xlYW5CeUsAAAABAAAA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MTYxODYAAAACXzMDCQEAAAABIQAAAAEJAQAAAAx2YWxpZGF0ZUhhc2gAAAABBQAAAApzaGEyNTZIYXNoCQAAAgAAAAECAAAAJEhhc2ggc2hvdWxkIGJlIDY0IGNoYXJhY3RlcnMgbWF4aW11bQQAAAANJHQwMTYyOTExNjM2MAkBAAAACnNldExJY2VuY2UAAAACBQAAAApjaWRMaWNlbmNlBQAAAA1zaGEyNTZMaWNlbmNlBAAAAApsaWNlbmNlQ0lECAUAAAANJHQwMTYyOTExNjM2MAAAAAJfMQQAAAALbGljZW5jZUhhc2gIBQAAAA0kdDAxNjI5MTE2MzYwAAAAAl8yBAAAAA92YWxpZGF0ZUFydHdvcmsJAQAAABN2YWxpZGF0ZUFydHdvcmtEYXRhAAAACQUAAAAGY2FsbGVyBQAAAApjaWREaXNwbGF5BQAAAAljaWRFeHBvcnQFAAAACmxpY2VuY2VDSUQFAAAADHNoYTI1NkV4cG9ydAUAAAALbGljZW5jZUhhc2gFAAAABG5hbWUFAAAAC2Rlc2NyaXB0aW9uBQAAAAR0YWdzAwkBAAAAAiE9AAAAAgUAAAAPdmFsaWRhdGVBcnR3b3JrAgAAAAAJAAACAAAAAQIAAAAVU29tZXRoaW5nIHdlbnQgd3JvbmchBAAAAA0kdDAxNjU4NDE2NjI2CQEAAAAPdmFsaWRhdGVQYXltZW50AAAAAQUAAAABaQQAAAAGYW1vdW50CAUAAAANJHQwMTY1ODQxNjYyNgAAAAJfMQQAAAAHYXNzZXRJZAgFAAAADSR0MDE2NTg0MTY2MjYAAAACXzIDCQEAAAABIQAAAAEJAQAAAAlpc0RlZmluZWQAAAABBQAAAAZhbW91bnQJAAACAAAAAQIAAAAUU29tZXRoaW5nIHdlbnQgd3JvbmcEAAAACmVudHJ5RXhpc3QJAQAAAAxnZXRTdHJpbmdCeUsAAAABCQEAAAAQS1R4aWRCeUhhc2hPd25lcgAAAAIFAAAACnNoYTI1Nkhhc2gFAAAABmNhbGxlcgMJAQAAAAIhPQAAAAIFAAAACmVudHJ5RXhpc3QCAAAAAAkAAAIAAAABAgAAABRZb3UgYWxyZWFkeSBhZGRlZCBpdAQAAAAJaGFzaEV4aXN0CQEAAAAMZ2V0U3RyaW5nQnlLAAAAAQkBAAAADEtPd25lckJ5SGFzaAAAAAEFAAAACnNoYTI1Nkhhc2gDCQEAAAACIT0AAAACBQAAAAloYXNoRXhpc3QCAAAAAAkAAAIAAAABAgAAABdIYXNoIGFscmVhZHkgcmVnaXN0ZXJlZAQAAAAPaXNTaWduQ2VydGlmaWVkCQEAAAAUY2hlY2tTaWduQ2VydGlmaWNhdGUAAAADBQAAAAZzaWduSUQFAAAABmNhbGxlcgUAAAAKc2hhMjU2SGFzaAMJAQAAAAEhAAAAAQUAAAAPaXNTaWduQ2VydGlmaWVkCQAAAgAAAAECAAAALFNpZ24gQ2VydGlmaWNhdGUgbm90IGZvdW5kIGZvciB0aGlzIGFkZHJlc3MuCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIJAQAAAAxLT3duZXJCeUhhc2gAAAABBQAAAApzaGEyNTZIYXNoBQAAAAZjYWxsZXIJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgkBAAAAEEtUeGlkQnlIYXNoT3duZXIAAAACBQAAAApzaGEyNTZIYXNoBQAAAAZjYWxsZXIFAAAABWFydElkCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQEAAAAFS0RhdGUAAAACBQAAAAZjYWxsZXIFAAAABWFydElkBQAAAARkYXRlCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIJAQAAAAVLTmFtZQAAAAIFAAAABmNhbGxlcgUAAAAFYXJ0SWQFAAAABG5hbWUJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgkBAAAABUtEZXNjAAAAAgUAAAAGY2FsbGVyBQAAAAVhcnRJZAUAAAALZGVzY3JpcHRpb24JAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgkBAAAAC0tEaXNwbGF5Q2lkAAAAAgUAAAAGY2FsbGVyBQAAAAVhcnRJZAUAAAAKY2lkRGlzcGxheQkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACCQEAAAAKS0V4cG9ydENpZAAAAAIFAAAABmNhbGxlcgUAAAAFYXJ0SWQFAAAACWNpZEV4cG9ydAkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACCQEAAAALS0V4cG9ydEhhc2gAAAACBQAAAAZjYWxsZXIFAAAABWFydElkBQAAAAxzaGEyNTZFeHBvcnQJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgkBAAAADEtMaWNlbmNlSGFzaAAAAAIFAAAABmNhbGxlcgUAAAAFYXJ0SWQFAAAAC2xpY2VuY2VIYXNoCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIJAQAAAAtLTGljZW5jZUNpZAAAAAIFAAAABmNhbGxlcgUAAAAFYXJ0SWQFAAAACmxpY2VuY2VDSUQJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgkBAAAABUtUeXBlAAAAAgUAAAAGY2FsbGVyBQAAAAVhcnRJZAUAAAAEdHlwZQkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACCQEAAAAFS1RhZ3MAAAACBQAAAAZjYWxsZXIFAAAABWFydElkBQAAAAR0YWdzCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIJAQAAAAdLU2lnbklEAAAAAgUAAAAGY2FsbGVyBQAAAAVhcnRJZAUAAAAGc2lnbklECQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQEAAAAHS0lzc3VlZAAAAAIFAAAABmNhbGxlcgUAAAAFYXJ0SWQAAAAAAAAAAAAJAARMAAAAAgkBAAAADEJvb2xlYW5FbnRyeQAAAAIJAQAAAAdLT25TYWxlAAAAAgUAAAAGY2FsbGVyBQAAAAVhcnRJZAcJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgkBAAAAC0tpZEJ5U2lnbmlkAAAAAgUAAAAGY2FsbGVyBQAAAAZzaWduSUQFAAAABWFydElkCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIJAQAAAA9LSGFzaEJ5VHhpZEFkZHIAAAACBQAAAAZjYWxsZXIFAAAABWFydElkBQAAAApzaGEyNTZIYXNoCQAETAAAAAIJAQAAAA5TY3JpcHRUcmFuc2ZlcgAAAAMJAQAAAAdBZGRyZXNzAAAAAQkAAlkAAAABBQAAAAtmZWVSZWNlaXZlcgUAAAAGYW1vdW50BQAAAAdhc3NldElkBQAAAANuaWwAAAABaQEAAAANdXBkYXRlQXJ0d29yawAAAAoAAAAEdHhpZAAAAARuYW1lAAAAC2Rlc2NyaXB0aW9uAAAABHRhZ3MAAAAEdHlwZQAAAApjaWREaXNwbGF5AAAADHNoYTI1NkV4cG9ydAAAAAljaWRFeHBvcnQAAAANc2hhMjU2TGljZW5jZQAAAApjaWRMaWNlbmNlAwkBAAAAASEAAAABBQAAAAtkYXBwUnVubmluZwkAAAIAAAABBQAAAA5tYWludGVuYW5jZU1TRwQAAAAGY2FsbGVyCQACWAAAAAEICAUAAAABaQAAAAZjYWxsZXIAAAAFYnl0ZXMEAAAADSR0MDE5MzM3MTk0MDYJAQAAAApzZXRMSWNlbmNlAAAAAgUAAAAKY2lkTGljZW5jZQUAAAANc2hhMjU2TGljZW5jZQQAAAAKbGljZW5jZUNJRAgFAAAADSR0MDE5MzM3MTk0MDYAAAACXzEEAAAAC2xpY2VuY2VIYXNoCAUAAAANJHQwMTkzMzcxOTQwNgAAAAJfMgQAAAAPdmFsaWRhdGVBcnR3b3JrCQEAAAATdmFsaWRhdGVBcnR3b3JrRGF0YQAAAAkFAAAABmNhbGxlcgUAAAAKY2lkRGlzcGxheQUAAAAJY2lkRXhwb3J0BQAAAApsaWNlbmNlQ0lEBQAAAAxzaGEyNTZFeHBvcnQFAAAAC2xpY2VuY2VIYXNoBQAAAARuYW1lBQAAAAtkZXNjcmlwdGlvbgUAAAAEdGFncwMJAQAAAAIhPQAAAAIFAAAAD3ZhbGlkYXRlQXJ0d29yawIAAAAACQAAAgAAAAECAAAAFVNvbWV0aGluZyB3ZW50IHdyb25nIQQAAAAKZW50cnlFeGlzdAkBAAAADGdldFN0cmluZ0J5SwAAAAEJAQAAAAVLTmFtZQAAAAIFAAAABmNhbGxlcgUAAAAEdHhpZAMJAAAAAAAAAgUAAAAKZW50cnlFeGlzdAIAAAAACQAAAgAAAAECAAAAD0VudHJ5IG5vdCBmb3VuZAQAAAAEZmxhZwkBAAAADGdldFN0cmluZ0J5SwAAAAEJAQAAAAVLRmxhZwAAAAIFAAAABmNhbGxlcgUAAAAEdHhpZAMJAAAAAAAAAgUAAAAEZmxhZwIAAAAHSUxMRUdBTAkAAAIAAAABAgAAAB1DYW5ub3QgdXBkYXRlIElMTEVHQUwgYXJ0d29yawMJAQAAAAEhAAAAAQkBAAAAC2lzQXJ0TWludGVkAAAAAgUAAAAG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", "height": 1432713, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: none Next: none Full:
OldNewDifferences
1-# no script
1+{-# STDLIB_VERSION 4 #-}
2+{-# SCRIPT_TYPE ACCOUNT #-}
3+{-# CONTENT_TYPE DAPP #-}
4+let unitTest = true
5+
6+let oracleFee = value(addressFromString("3N2s5RtaHPBenCsx2ECcoFRbYHx3noZhXW1"))
7+
8+let signDapp = value(addressFromString("3NC28hSivrmsTUXaYD1x6L362J4ZpUnoTdB"))
9+
10+let feeReceiver = "3N1E6tXddRoVaRfQ9dQ3vg5LaW2fsd8HKub"
11+
12+let userDapp = if (unitTest)
13+ then value(addressFromString("3Mt4RGMEyjSWYAocTPqd55wdHQQB3PU2UCm"))
14+ else value(addressFromString("3N8xXaYjE27Aa79d5hHrhHu9HaFoTBmhDEj"))
15+
16+let whitelistDapp = value(addressFromString("3N6BaV1dCB4zg43goNNHaCtvR13BcyJ5Gsq"))
17+
18+let signAssetId = base58'Gf9t8FA4H3ssoZPCwrg3KwUFCci8zuUFP9ssRsUY3s6a'
19+
20+let usdnAssetId = base58'25FEqEjRkqK6yCkiT7Lz6SAYz7gUFCtxfCChnrVFD5AT'
21+
22+let wavesAssetId = base58''
23+
24+let chris = "3MsG6jPNCrVJUtYB7XJBxS7utWsXAf4n9Vp"
25+
26+let joep = "3Mzm4VLwsN9uZwbTMzPj3XuxV6kEfAR8UDN"
27+
28+let signCut = 7
29+
30+let usdnWaveCut = 10
31+
32+let defaultLicence = "bafybeifuyo4pqu54ismqgtb6e4h6kkvgx7zg4u3zibh2r7y6mb64i7bzza/licence.pdf"
33+
34+let defaultHashLicence = "a87758c354e30a9e78fb84fa3a0010a5090ab20df0be11ad45b5720cc187e639"
35+
36+let dappRunning = valueOrElse(getBoolean(userDapp, "conf_dapp_is_running"), true)
37+
38+let maintenanceMSG = valueOrElse(getString(userDapp, "conf_maintenance_msg"), "")
39+
40+let userSuspended = "SUSPENDED"
41+
42+let userRemoved = "REMOVED"
43+
44+let userUnregistered = "UNREGISTERED"
45+
46+let userAllowed = "ALLOWED"
47+
48+func getStringByKFromUsers (K) = valueOrElse(getString(userDapp, K), "")
49+
50+
51+func getStringByK (K) = valueOrElse(getString(this, K), "")
52+
53+
54+func getIntegerByKFromOracle (K) = valueOrErrorMessage(getInteger(oracleFee, K), "Integer undefine or 0 in oracle")
55+
56+
57+func getIntegerByK (K) = valueOrElse(getInteger(this, K), 0)
58+
59+
60+func checkWhitelist (K) = valueOrElse(getInteger(whitelistDapp, K), 0)
61+
62+
63+func getBooleanByK (K) = valueOrElse(getBoolean(this, K), false)
64+
65+
66+let currentCertificationPrice = getIntegerByKFromOracle(("certification_fee_" + toBase58String(signAssetId)))
67+
68+func checkSignCertificate (signID,Owner,sha256Hash) = match getString(signDapp, ((("data_fc_" + signID) + "_") + Owner)) {
69+ case a: String =>
70+ if (contains(a, sha256Hash))
71+ then true
72+ else false
73+ case _ =>
74+ false
75+}
76+
77+
78+func validateCID (cid) = if (contains(cid, "/"))
79+ then if (if ((76 > size(cid)))
80+ then (size(split(cid, "/")[0]) == 59)
81+ else false)
82+ then (16 > size(split(cid, "/")[1]))
83+ else false
84+ else false
85+
86+
87+func validateHash (hash) = (size(hash) == 64)
88+
89+
90+func KUserStatus (caller) = ("user_status_" + caller)
91+
92+
93+func KDate (caller,artId) = ((("art_date_" + artId) + "_") + caller)
94+
95+
96+func KName (caller,artId) = ((("art_name_" + artId) + "_") + caller)
97+
98+
99+func KDesc (caller,artId) = ((("art_desc_" + artId) + "_") + caller)
100+
101+
102+func KDisplayCid (caller,artId) = ((("art_display_cid_" + artId) + "_") + caller)
103+
104+
105+func KExportHash (caller,artId) = ((("art_export_hash_" + artId) + "_") + caller)
106+
107+
108+func KExportCid (caller,artId) = ((("art_export_cid_" + artId) + "_") + caller)
109+
110+
111+func KMaxMint (caller,artId) = ((("art_maxmint_" + artId) + "_") + caller)
112+
113+
114+func KSignID (caller,artId) = ((("art_signid_" + artId) + "_") + caller)
115+
116+
117+func KIssued (caller,artId) = ((("art_issued_" + artId) + "_") + caller)
118+
119+
120+func KOnSale (caller,artId) = ((("art_onsale_" + artId) + "_") + caller)
121+
122+
123+func KLicenceHash (caller,artId) = ((("art_licence_hash_" + artId) + "_") + caller)
124+
125+
126+func KLicenceCid (caller,artId) = ((("art_licence_cid_" + artId) + "_") + caller)
127+
128+
129+func KTags (caller,artId) = ((("art_tags_" + artId) + "_") + caller)
130+
131+
132+func KType (caller,artId) = ((("art_type_" + artId) + "_") + caller)
133+
134+
135+func KPrice (caller,artId) = ((("art_price_" + artId) + "_") + caller)
136+
137+
138+func KAssetIdAccepted (caller,artId) = ((("art_assetAccepted_" + artId) + "_") + caller)
139+
140+
141+func KFlag (caller,artId) = ((("art_flag_" + artId) + "_") + caller)
142+
143+
144+func KHashByTxidAddr (caller,txid) = ((("get_hashbytxidaddr_" + txid) + "_") + caller)
145+
146+
147+func KOwnerByHash (sha256Hash) = ("get_owner_by_hash_" + sha256Hash)
148+
149+
150+func KidBySignid (caller,signId) = ((("get_artidbysignid_" + signId) + "_") + caller)
151+
152+
153+func KTxidByHashOwner (sha256Hash,caller) = ("get_txid_by_hash_owner_" + toBase58String(sha256_16Kb(toBytes((sha256Hash + caller)))))
154+
155+
156+func validateAllCID (cidDisplay,cidExport,cidLicence) = if (!(validateCID(cidDisplay)))
157+ then throw("Wrong Display CID")
158+ else if (!(validateCID(cidExport)))
159+ then throw("Wrong Export CID")
160+ else if (if ((cidLicence != ""))
161+ then !(validateCID(cidLicence))
162+ else false)
163+ then throw("Wrong Licence CID")
164+ else true
165+
166+
167+func validateAllHash (sha256Export,sha256Licence) = if (!(validateHash(sha256Export)))
168+ then throw("Export Hash 64 char. max")
169+ else if (!(validateHash(sha256Licence)))
170+ then throw("Licence Hash 64 char. max")
171+ else true
172+
173+
174+func validateString (str,max) = if ((size(str) == 0))
175+ then throw("Field cannot be is empty")
176+ else if ((size(str) > max))
177+ then throw((str + " is too long"))
178+ else true
179+
180+
181+func validateUser (caller) = {
182+ let userStatus = valueOrElse(getString(userDapp, KUserStatus(caller)), userUnregistered)
183+ if (if ((userStatus == userUnregistered))
184+ then true
185+ else (userStatus == userAllowed))
186+ then "Register this account first with \"Account\" tab"
187+ else if ((userStatus == userSuspended))
188+ then "Account suspended"
189+ else if ((userStatus == userRemoved))
190+ then "Account removed"
191+ else ""
192+ }
193+
194+
195+func setLIcence (cidLicence,sha256Licence) = {
196+ let cid = if ((size(cidLicence) == 0))
197+ then defaultLicence
198+ else cidLicence
199+ let hash = if ((size(sha256Licence) == 0))
200+ then defaultHashLicence
201+ else sha256Licence
202+ $Tuple2(cid, hash)
203+ }
204+
205+
206+func validateArtworkData (caller,cidDisplay,cidExport,licenceCID,sha256Export,licenceHash,name,description,tags) = {
207+ let checkUser = validateUser(caller)
208+ if ((checkUser != ""))
209+ then throw(checkUser)
210+ else if ((size(cidDisplay) == 0))
211+ then throw("Display CID cannot be empty")
212+ else if (!(validateAllCID(cidDisplay, cidExport, licenceCID)))
213+ then throw("Problem with CID")
214+ else if (!(validateAllHash(sha256Export, licenceHash)))
215+ then throw("Problem with Hashes")
216+ else if (!(validateString(name, 100)))
217+ then throw("100 Char. max name")
218+ else if (!(validateString(description, 1000)))
219+ then throw("1000 Char. max description")
220+ else if ((size(split(tags, ",")) > 5))
221+ then throw("5 tags max.")
222+ else ""
223+ }
224+
225+
226+func isPayment (i) = if ((size(i.payments) == 0))
227+ then throw("No payment attached")
228+ else {
229+ let payment = value(i.payments[0])
230+ let amount = value(payment.amount)
231+ $Tuple2(payment, amount)
232+ }
233+
234+
235+func validatePayment (i) = {
236+ let $t090279063 = isPayment(i)
237+ let payment = $t090279063._1
238+ let amount = $t090279063._2
239+ let assetId = if (if (isDefined(payment.assetId))
240+ then (payment.assetId == signAssetId)
241+ else false)
242+ then payment.assetId
243+ else throw("Only SIGN token accepted as transaction fee")
244+ if ((amount != currentCertificationPrice))
245+ then throw(("Payment amount should be " + toString(currentCertificationPrice)))
246+ else $Tuple2(amount, assetId)
247+ }
248+
249+
250+func isArtMinted (addrToUse,artId) = match getInteger(this, KIssued(addrToUse, artId)) {
251+ case b: Int =>
252+ if ((b != 0))
253+ then true
254+ else false
255+ case _ =>
256+ false
257+}
258+
259+
260+func validatePriceAssetId (i,priceAssetId,artworkPrice) = {
261+ let $t096689704 = isPayment(i)
262+ let payment = $t096689704._1
263+ let amount = $t096689704._2
264+ let assetId = if (!(isDefined(payment.assetId)))
265+ then unit
266+ else if (if ((size(priceAssetId) > 0))
267+ then (toBase58String(value(payment.assetId)) == priceAssetId)
268+ else false)
269+ then payment.assetId
270+ else throw("Wrong asset id")
271+ if (if ((assetId == unit))
272+ then (priceAssetId != "")
273+ else false)
274+ then throw("Wrong asset id")
275+ else if ((artworkPrice != amount))
276+ then throw("Payment don't match")
277+ else $Tuple2(amount, assetId)
278+ }
279+
280+
281+func acceptedAssetIds (assetId) = if (if (if (if ((assetId != toBase58String(signAssetId)))
282+ then (assetId != toBase58String(wavesAssetId))
283+ else false)
284+ then (assetId != "WAVES")
285+ else false)
286+ then (assetId != toBase58String(usdnAssetId))
287+ else false)
288+ then throw("Only SIGN, USDN or WAVES accepted")
289+ else true
290+
291+
292+func validateMinSell (assetId,price) = {
293+ let minSellWaves = if (unitTest)
294+ then 10
295+ else getIntegerByKFromOracle("waves_min_sell")
296+ let minSellUsdn = 1000000
297+ let minSellSign = if (unitTest)
298+ then 1
299+ else (currentCertificationPrice * 2)
300+ if (if (if (if (if ((assetId == toBase58String(usdnAssetId)))
301+ then (minSellUsdn > price)
302+ else false)
303+ then (price != 0)
304+ else false)
305+ then true
306+ else if (if ((assetId == toBase58String(signAssetId)))
307+ then (minSellSign > price)
308+ else false)
309+ then (price != 0)
310+ else false)
311+ then true
312+ else if (if (if ((assetId == toBase58String(wavesAssetId)))
313+ then true
314+ else (assetId == "WAVES"))
315+ then (minSellWaves > price)
316+ else false)
317+ then (price != 0)
318+ else false)
319+ then throw("Wrong minimum sell price")
320+ else true
321+ }
322+
323+
324+func getBidAssetId (assetId) = if ((assetId == "WAVES"))
325+ then unit
326+ else fromBase58String(assetId)
327+
328+
329+func getPriceAssetIdFromBid (bidDataK) = {
330+ let bidData = getStringByK((bidDataK + "_OPEN"))
331+ if ((bidData == ""))
332+ then throw("Bid not found")
333+ else {
334+ let bidDataArr = split(bidData, "_")
335+ let bidAmount = parseIntValue(bidDataArr[1])
336+ let bidAssetId = getBidAssetId(bidDataArr[0])
337+ if ((0 >= bidAmount))
338+ then throw("Wrong amount")
339+ else $Tuple2(bidAmount, bidAssetId)
340+ }
341+ }
342+
343+
344+func idCallerDate (i) = if (!(dappRunning))
345+ then throw(maintenanceMSG)
346+ else $Tuple3(toBase58String(i.transactionId), toBase58String(i.caller.bytes), lastBlock.timestamp)
347+
348+
349+func buyMint (i,artId,issuer,bidId,bidOwner) = {
350+ let $t01196512018 = idCallerDate(i)
351+ let id = $t01196512018._1
352+ let caller = $t01196512018._2
353+ let date = $t01196512018._3
354+ let isBid = if (if (if ((toBase58String(i.caller.bytes) == issuer))
355+ then (bidOwner != "")
356+ else false)
357+ then (bidId != "")
358+ else false)
359+ then true
360+ else false
361+ let callerIsIssuer = (toBase58String(i.caller.bytes) == issuer)
362+ let totalNFT = getIntegerByK("total_nft_issued")
363+ let signID = getStringByK(KSignID(issuer, artId))
364+ let artworkName = getStringByK(KName(issuer, artId))
365+ if ((artworkName == ""))
366+ then throw("Art doesn't exist")
367+ else {
368+ let isOnSale = getBooleanByK(KOnSale(issuer, artId))
369+ let amountSold = getIntegerByK(KIssued(issuer, artId))
370+ let artworkPrice = if (callerIsIssuer)
371+ then (currentCertificationPrice * 2)
372+ else getIntegerByK(KPrice(issuer, artId))
373+ let priceAssetId = if (callerIsIssuer)
374+ then toBase58String(signAssetId)
375+ else getStringByK(KAssetIdAccepted(issuer, artId))
376+ let maxCanSell = getIntegerByK(KMaxMint(issuer, artId))
377+ if (if (if (!(isBid))
378+ then !(callerIsIssuer)
379+ else false)
380+ then if (if ((0 >= artworkPrice))
381+ then true
382+ else !(isOnSale))
383+ then true
384+ else (0 >= maxCanSell)
385+ else false)
386+ then throw("Art not for sale")
387+ else if (if (if (!(isBid))
388+ then callerIsIssuer
389+ else false)
390+ then (0 >= maxCanSell)
391+ else false)
392+ then throw("Max issuable not set")
393+ else {
394+ let checkUser = validateUser(issuer)
395+ if (if (isBid)
396+ then (checkUser != "")
397+ else false)
398+ then throw(checkUser)
399+ else {
400+ let bidDataK = ((((((("bid_" + artId) + "_") + issuer) + "_") + bidOwner) + "_") + bidId)
401+ let $t01338513538 = if (isBid)
402+ then getPriceAssetIdFromBid(bidDataK)
403+ else validatePriceAssetId(i, priceAssetId, artworkPrice)
404+ let amount = $t01338513538._1
405+ let assetId = $t01338513538._2
406+ let isWhitelisted = checkWhitelist(issuer)
407+ let cut = if ((isWhitelisted > height))
408+ then 0
409+ else if ((priceAssetId == toBase58String(signAssetId)))
410+ then signCut
411+ else usdnWaveCut
412+ let amountForSign = fraction(amount, cut, 100)
413+ let amountForCreator = (amount - amountForSign)
414+ if ((amountSold == maxCanSell))
415+ then throw("Art sold out")
416+ else {
417+ let newAmountSold = (amountSold + 1)
418+ let issueMeta = ((((((((((("Creator: " + issuer) + ",
419+ ArtID: ") + artId) + ",
420+ SignID: ") + signID) + ",
421+ Artwork name: ") + artworkName) + ",
422+ Issue: ") + toString(newAmountSold)) + "/") + toString(maxCanSell))
423+ let issueNFT = Issue(("SA_" + toString((totalNFT + 1))), issueMeta, 1, 0, false)
424+ let idNFT = calculateAssetId(issueNFT)
425+ let sellStatus = if (if ((newAmountSold == maxCanSell))
426+ then true
427+ else !(isOnSale))
428+ then false
429+ else true
430+ let receiveNFT = if (if (if ((caller == issuer))
431+ then (bidOwner != "")
432+ else false)
433+ then (bidId != "")
434+ else false)
435+ then addressFromStringValue(bidOwner)
436+ else i.caller
437+ let assetIdBid = if (!(isDefined(assetId)))
438+ then "WAVES"
439+ else toBase58String(value(assetId))
440+ let bidData = getStringByK((bidDataK + "_OPEN"))
441+ let bidDelOld = DeleteEntry((bidDataK + "_OPEN"))
442+ let bidUpdate = StringEntry((bidDataK + "_CLOSED"), ((bidData + "_") + toString(date)))
443+ let soldK = ((((((("art_sold_" + toString(newAmountSold)) + "_of_") + toString(maxCanSell)) + "_") + artId) + "_") + issuer)
444+ let soldValue = if (!(isBid))
445+ then ((((((((((caller + "_") + toString(date)) + "_") + id) + "_") + toString(artworkPrice)) + "_") + priceAssetId) + "_") + toBase58String(idNFT))
446+ else ((((((((((toString(receiveNFT) + "_") + toString(date)) + "_") + id) + "_") + toString(amount)) + "_") + assetIdBid) + "_") + toBase58String(idNFT))
447+ let soldData = StringEntry(soldK, soldValue)
448+ let buyRes = [IntegerEntry(KIssued(issuer, artId), newAmountSold), StringEntry(("nft_" + toBase58String(idNFT)), soldK), IntegerEntry("total_nft_issued", (totalNFT + 1)), BooleanEntry(KOnSale(issuer, artId), sellStatus), issueNFT, ScriptTransfer(Address(fromBase58String(issuer)), amountForCreator, assetId), ScriptTransfer(Address(fromBase58String(feeReceiver)), amountForSign, assetId), ScriptTransfer(receiveNFT, 1, idNFT)]
449+ if (isBid)
450+ then [soldData, bidUpdate, bidDelOld] :: buyRes
451+ else soldData :: buyRes
452+ }
453+ }
454+ }
455+ }
456+ }
457+
458+
459+@Callable(i)
460+func addArtwork (sha256Hash,signID,name,description,tags,type,cidDisplay,sha256Export,cidExport,sha256Licence,cidLicence) = {
461+ let $t01614516186 = idCallerDate(i)
462+ let artId = $t01614516186._1
463+ let caller = $t01614516186._2
464+ let date = $t01614516186._3
465+ if (!(validateHash(sha256Hash)))
466+ then throw("Hash should be 64 characters maximum")
467+ else {
468+ let $t01629116360 = setLIcence(cidLicence, sha256Licence)
469+ let licenceCID = $t01629116360._1
470+ let licenceHash = $t01629116360._2
471+ let validateArtwork = validateArtworkData(caller, cidDisplay, cidExport, licenceCID, sha256Export, licenceHash, name, description, tags)
472+ if ((validateArtwork != ""))
473+ then throw("Something went wrong!")
474+ else {
475+ let $t01658416626 = validatePayment(i)
476+ let amount = $t01658416626._1
477+ let assetId = $t01658416626._2
478+ if (!(isDefined(amount)))
479+ then throw("Something went wrong")
480+ else {
481+ let entryExist = getStringByK(KTxidByHashOwner(sha256Hash, caller))
482+ if ((entryExist != ""))
483+ then throw("You already added it")
484+ else {
485+ let hashExist = getStringByK(KOwnerByHash(sha256Hash))
486+ if ((hashExist != ""))
487+ then throw("Hash already registered")
488+ else {
489+ let isSignCertified = checkSignCertificate(signID, caller, sha256Hash)
490+ if (!(isSignCertified))
491+ then throw("Sign Certificate not found for this address.")
492+ else [StringEntry(KOwnerByHash(sha256Hash), caller), StringEntry(KTxidByHashOwner(sha256Hash, caller), artId), IntegerEntry(KDate(caller, artId), date), StringEntry(KName(caller, artId), name), StringEntry(KDesc(caller, artId), description), StringEntry(KDisplayCid(caller, artId), cidDisplay), StringEntry(KExportCid(caller, artId), cidExport), StringEntry(KExportHash(caller, artId), sha256Export), StringEntry(KLicenceHash(caller, artId), licenceHash), StringEntry(KLicenceCid(caller, artId), licenceCID), StringEntry(KType(caller, artId), type), StringEntry(KTags(caller, artId), tags), StringEntry(KSignID(caller, artId), signID), IntegerEntry(KIssued(caller, artId), 0), BooleanEntry(KOnSale(caller, artId), false), StringEntry(KidBySignid(caller, signID), artId), StringEntry(KHashByTxidAddr(caller, artId), sha256Hash), ScriptTransfer(Address(fromBase58String(feeReceiver)), amount, assetId)]
493+ }
494+ }
495+ }
496+ }
497+ }
498+ }
499+
500+
501+
502+@Callable(i)
503+func updateArtwork (txid,name,description,tags,type,cidDisplay,sha256Export,cidExport,sha256Licence,cidLicence) = if (!(dappRunning))
504+ then throw(maintenanceMSG)
505+ else {
506+ let caller = toBase58String(i.caller.bytes)
507+ let $t01933719406 = setLIcence(cidLicence, sha256Licence)
508+ let licenceCID = $t01933719406._1
509+ let licenceHash = $t01933719406._2
510+ let validateArtwork = validateArtworkData(caller, cidDisplay, cidExport, licenceCID, sha256Export, licenceHash, name, description, tags)
511+ if ((validateArtwork != ""))
512+ then throw("Something went wrong!")
513+ else {
514+ let entryExist = getStringByK(KName(caller, txid))
515+ if ((entryExist == ""))
516+ then throw("Entry not found")
517+ else {
518+ let flag = getStringByK(KFlag(caller, txid))
519+ if ((flag == "ILLEGAL"))
520+ then throw("Cannot update ILLEGAL artwork")
521+ else if (!(isArtMinted(caller, txid)))
522+ then [StringEntry(KName(caller, txid), name), StringEntry(KDesc(caller, txid), description), StringEntry(KDisplayCid(caller, txid), cidDisplay), StringEntry(KExportCid(caller, txid), cidExport), StringEntry(KExportHash(caller, txid), sha256Export), StringEntry(KLicenceCid(caller, txid), licenceCID), StringEntry(KLicenceHash(caller, txid), licenceHash), StringEntry(KTags(caller, txid), tags), StringEntry(KType(caller, txid), type)]
523+ else throw("Already minted")
524+ }
525+ }
526+ }
527+
528+
529+
530+@Callable(i)
531+func flagArtwork (artId,addr,flag) = {
532+ let $t02087520908 = idCallerDate(i)
533+ let id = $t02087520908._1
534+ let caller = $t02087520908._2
535+ if (containsElement([chris, joep, toString(this)], caller))
536+ then if ((flag == "CONSENT"))
537+ then [StringEntry(KFlag(addr, artId), flag)]
538+ else if ((flag == ""))
539+ then [StringEntry(KFlag(addr, artId), flag)]
540+ else if ((flag == "CHANGE_REQUIRED"))
541+ then [StringEntry(KFlag(addr, artId), flag)]
542+ else if (if ((flag == "ILLEGAL"))
543+ then containsElement([chris, toString(this)], caller)
544+ else false)
545+ then [StringEntry(KFlag(addr, artId), flag), StringEntry(KName(addr, artId), "ILLEGAL CONTENT"), StringEntry(KDesc(addr, artId), "ILLEGAL CONTENT"), StringEntry(KDisplayCid(addr, artId), ""), StringEntry(KExportCid(addr, artId), ""), StringEntry(KLicenceCid(addr, artId), "")]
546+ else throw(("Unknow status " + flag))
547+ else throw("You are not allowed")
548+ }
549+
550+
551+
552+@Callable(i)
553+func deleteArtwork (artId,addr) = {
554+ let $t02194021973 = idCallerDate(i)
555+ let id = $t02194021973._1
556+ let caller = $t02194021973._2
557+ let addrToUse = if (containsElement([chris, joep, toString(this)], caller))
558+ then addr
559+ else caller
560+ let entryExist = valueOrErrorMessage(getStringByK(KName(addrToUse, artId)), "No art matching for this address")
561+ if ((entryExist == ""))
562+ then throw("No art matching for this address")
563+ else {
564+ let sha256Hash = getStringByK(KHashByTxidAddr(addrToUse, artId))
565+ if ((sha256Hash == ""))
566+ then throw("No art hash matching for this address")
567+ else {
568+ let signID = getStringByK(KSignID(addrToUse, artId))
569+ if ((signID == ""))
570+ then throw("No SIGN ID matching")
571+ else {
572+ let dataToDelete = [DeleteEntry(KDate(addrToUse, artId)), DeleteEntry(KName(addrToUse, artId)), DeleteEntry(KDesc(addrToUse, artId)), DeleteEntry(KDisplayCid(addrToUse, artId)), DeleteEntry(KExportCid(addrToUse, artId)), DeleteEntry(KExportHash(addrToUse, artId)), DeleteEntry(KLicenceHash(addrToUse, artId)), DeleteEntry(KLicenceCid(addrToUse, artId)), DeleteEntry(KType(addrToUse, artId)), DeleteEntry(KTags(addrToUse, artId)), DeleteEntry(KMaxMint(addrToUse, artId)), DeleteEntry(KSignID(addrToUse, artId)), DeleteEntry(KIssued(addrToUse, artId)), DeleteEntry(KOnSale(addrToUse, artId)), DeleteEntry(KFlag(addr, artId)), DeleteEntry(KPrice(addr, artId)), DeleteEntry(KAssetIdAccepted(addr, artId)), DeleteEntry(KOwnerByHash(sha256Hash)), DeleteEntry(KidBySignid(addrToUse, signID)), DeleteEntry(KTxidByHashOwner(sha256Hash, addrToUse))]
573+ if (!(isArtMinted(addrToUse, artId)))
574+ then if (!(dappRunning))
575+ then throw(maintenanceMSG)
576+ else dataToDelete
577+ else if (containsElement([chris, toString(this)], caller))
578+ then dataToDelete
579+ else throw("Art already minted, you cannot delete it")
580+ }
581+ }
582+ }
583+ }
584+
585+
586+
587+@Callable(i)
588+func sellArtwork (artId,price,maxMint,assetId) = {
589+ let $t02433424367 = idCallerDate(i)
590+ let id = $t02433424367._1
591+ let caller = $t02433424367._2
592+ let artworkName = getStringByK(KName(caller, artId))
593+ if ((artworkName == ""))
594+ then throw("This art doesn't match your account")
595+ else {
596+ let exportCID = getStringByK(KExportCid(caller, artId))
597+ if ((size(split(exportCID, "/")[0]) != 59))
598+ then throw("You cannot sell art with no export file")
599+ else if (!(acceptedAssetIds(assetId)))
600+ then throw("Something went wrong!")
601+ else if (!(validateMinSell(assetId, price)))
602+ then throw("Something went wrong!")
603+ else {
604+ let checkUser = validateUser(caller)
605+ if ((checkUser != ""))
606+ then throw(checkUser)
607+ else {
608+ let amountSold = getIntegerByK(KIssued(caller, artId))
609+ let maxCanSell = getIntegerByK(KMaxMint(caller, artId))
610+ if ((maxMint > 10))
611+ then throw("10 editions max per artwork")
612+ else if (if ((amountSold != 0))
613+ then (amountSold == maxCanSell)
614+ else false)
615+ then throw("Max edition reached.")
616+ else if (if ((amountSold > 0))
617+ then (maxCanSell != maxMint)
618+ else false)
619+ then throw("Cannot change maximum issuable anymore")
620+ else {
621+ let sellStatus = if (if ((price > 0))
622+ then (maxMint > 0)
623+ else false)
624+ then true
625+ else false
626+[BooleanEntry(KOnSale(caller, artId), sellStatus), IntegerEntry(KPrice(caller, artId), price), IntegerEntry(KMaxMint(caller, artId), maxMint), StringEntry(KAssetIdAccepted(caller, artId), assetId)]
627+ }
628+ }
629+ }
630+ }
631+ }
632+
633+
634+
635+@Callable(i)
636+func buyArtwork (artId,issuer) = buyMint(i, artId, issuer, "", "")
637+
638+
639+
640+@Callable(i)
641+func setBid (artId,issuer) = {
642+ let $t02618226220 = idCallerDate(i)
643+ let id = $t02618226220._1
644+ let caller = $t02618226220._2
645+ let date = $t02618226220._3
646+ let $t02622626262 = isPayment(i)
647+ let payment = $t02622626262._1
648+ let amount = $t02622626262._2
649+ let assetId = if (!(isDefined(payment.assetId)))
650+ then "WAVES"
651+ else toBase58String(value(payment.assetId))
652+ if (!(acceptedAssetIds(assetId)))
653+ then throw("asset not accepted")
654+ else if (!(validateMinSell(assetId, amount)))
655+ then throw("Wrong min sell")
656+ else {
657+ let amountSold = getIntegerByK(KIssued(issuer, artId))
658+ let maxCanSell = getIntegerByK(KMaxMint(issuer, artId))
659+ if ((0 >= maxCanSell))
660+ then throw("No max edition set for this artwork")
661+ else if ((amountSold >= maxCanSell))
662+ then throw("Sold out, you cannot bid")
663+ else [StringEntry((((((((("bid_" + artId) + "_") + issuer) + "_") + caller) + "_") + id) + "_OPEN"), ((((assetId + "_") + toString(amount)) + "_") + toString(date)))]
664+ }
665+ }
666+
667+
668+
669+@Callable(i)
670+func acceptBid (artId,issuer,bidId,bidOwner) = {
671+ let caller = toBase58String(i.caller.bytes)
672+ if ((caller != issuer))
673+ then throw("You cannot do this action")
674+ else buyMint(i, artId, issuer, bidId, bidOwner)
675+ }
676+
677+
678+
679+@Callable(i)
680+func cancelBid (artId,issuer,bidId) = {
681+ let $t02731027464 = idCallerDate(i)
682+ let id = $t02731027464._1
683+ let caller = $t02731027464._2
684+ let date = $t02731027464._3
685+ let bidDataK = ((((((("bid_" + artId) + "_") + issuer) + "_") + caller) + "_") + bidId)
686+ let bidData = getStringByK((bidDataK + "_OPEN"))
687+ if ((bidData == ""))
688+ then throw("Bid not found")
689+ else {
690+ let bidDataArr = split(bidData, "_")
691+ let assetId = getBidAssetId(bidDataArr[0])
692+ let bidStatus = "CANCELED"
693+[DeleteEntry((bidDataK + "_OPEN")), StringEntry(((bidDataK + "_") + bidStatus), ((bidData + "_") + toString(date))), ScriptTransfer(Address(fromBase58String(caller)), parseIntValue(bidDataArr[1]), assetId)]
694+ }
695+ }
696+
697+

github/deemru/w8io/026f985 
40.11 ms