tx · 48NPWfhWUfyx5SU3ttXASjUCfchJDEEF6pC1pzp83Rub

3N2eA4yzXa4wTj7pP8r6G144RRxZW7cmq4p:  -0.01500000 Waves

2022.11.30 06:33 [2339312] smart account 3N2eA4yzXa4wTj7pP8r6G144RRxZW7cmq4p > SELF 0.00000000 Waves

{ "type": 13, "id": "48NPWfhWUfyx5SU3ttXASjUCfchJDEEF6pC1pzp83Rub", "fee": 1500000, "feeAssetId": null, "timestamp": 1669779253941, "version": 2, "chainId": 84, "sender": "3N2eA4yzXa4wTj7pP8r6G144RRxZW7cmq4p", "senderPublicKey": "Hh3eFP2XFetZSfTxQiM1Ps96f68zi8Zh5ghhCZdjgdFs", "proofs": [ "2T4VgF2jSRaSVaNhzZuixTJQ5yxtuUXrtjZSYkkpasAmpV8dnGpJjSBTLdeuAyjTDKhXy3ex5U4phGhhGytKgPkR" ], "script": "base64:BgI5CAISBAoCCAgSBAoCBAgSBAoCAQgSBQoDCAEIEgMKAQgSAwoBCBIDCgEIEgUKAwgICBIGCgQICAgINAEJZ2V0U3RyQnlLAQNrZXkJAQt2YWx1ZU9yRWxzZQIJAJ0IAgUEdGhpcwUDa2V5AgAACHVuaXRUZXN0BwAJb3JhY2xlRmVlCQEFdmFsdWUBCQCmCAEJAQlnZXRTdHJCeUsBAg9jb25mX29yYWNsZV9mZWUAC2ZlZVJlY2VpdmVyCQEJZ2V0U3RyQnlLAQIRY29uZl9mZWVfcmVjZWl2ZXIADGFydHdvcmtzRGFwcAkBBXZhbHVlAQkApggBCQEJZ2V0U3RyQnlLAQISY29uZl9hcnR3b3Jrc19kYXBwAAh1c2VyRGFwcAMFCHVuaXRUZXN0CQEFdmFsdWUBCQCmCAECIzNNdDRSR01FeWpTV1lBb2NUUHFkNTV3ZEhRUUIzUFUyVUNtCQEFdmFsdWUBCQCmCAEJAQlnZXRTdHJCeUsBAg9jb25mX3VzZXJzX2RhcHAAC3NpZ25Bc3NldElkCQDZBAEJAQlnZXRTdHJCeUsBAhhjb25mX2FjY2VwdGVkX2Fzc2V0X1NJR04AC3VzZG5Bc3NldElkCQDZBAEJAQlnZXRTdHJCeUsBAhhjb25mX2FjY2VwdGVkX2Fzc2V0X1VTRE4AC3VzZHRBc3NldElkCQDZBAEJAQlnZXRTdHJCeUsBAhhjb25mX2FjY2VwdGVkX2Fzc2V0X1VTRFQADHdhdmVzQXNzZXRJZAEAAAVjaHJpcwkBCWdldFN0ckJ5SwECDGNvbmZfYWRtaW5fMQAHc2lnbkN1dAADAA11c2VyU3VzcGVuZGVkAglTVVNQRU5ERUQAC3VzZXJSZW1vdmVkAgdSRU1PVkVEAAphcnRJbGxlZ2FsAgdJTExFR0FMAAxhcnRTdXNwZW5kZWQCCVNVU1BFTkRFRAAOZGFwcFJ1bm5pbmdLZXkCFGNvbmZfZGFwcF9pc19ydW5uaW5nABFtYWludGVuYW5jZU1TR0tleQIUY29uZl9tYWludGVuYW5jZV9tc2cAC2RhcHBSdW5uaW5nCQELdmFsdWVPckVsc2UCCQCbCAIFBHRoaXMFDmRhcHBSdW5uaW5nS2V5BgAObWFpbnRlbmFuY2VNU0cJAQt2YWx1ZU9yRWxzZQIJAJ0IAgUEdGhpcwURbWFpbnRlbmFuY2VNU0dLZXkCAAAJbnVtU2FsZXNLAgludW1fc2FsZXMBDWdldFVzZXJTdHJCeUsBA2tleQkBC3ZhbHVlT3JFbHNlAgkAnQgCBQh1c2VyRGFwcAUDa2V5AgVFcnJvcgETZ2V0QXJ0d29ya1JveWFsdGllcwEDa2V5CQELdmFsdWVPckVsc2UCCQCaCAIFDGFydHdvcmtzRGFwcAUDa2V5AOgHAQxnZXRBcnRTdHJCeUsBA2tleQkBC3ZhbHVlT3JFbHNlAgkAnQgCBQxhcnR3b3Jrc0RhcHAFA2tleQIAAQlnZXRJbnRCeUsBA2tleQkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzBQNrZXkAAAENa2V5VXNlclN0YXR1cwEEYWRkcgkArAICAgx1c2VyX3N0YXR1c18FBGFkZHIBE2tleUFydHdvcmtSb3lhbHRpZXMCBmNhbGxlcgVhcnRJZAkArAICCQCsAgIJAKwCAgIOYXJ0X3JveWFsdGllc18FBWFydElkAgFfBQZjYWxsZXIBCWtleVNpZ25JRAIKYXJ0aXN0QWRkcgVhcnRJZAkArAICCQCsAgIJAKwCAgILYXJ0X3NpZ25pZF8FBWFydElkAgFfBQphcnRpc3RBZGRyAQdrZXlGbGFnAgphcnRpc3RBZGRyBWFydElkCQCsAgIJAKwCAgkArAICAglhcnRfZmxhZ18FBWFydElkAgFfBQphcnRpc3RBZGRyAQprZXlORlREYXRhAQJpZAkArAICAgRuZnRfBQJpZAEKZ2V0U2FsZUtleQQGY2FsbGVyBW5mdElkBWFydElkC2NyZWF0b3JBZGRyCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgICDXNhbGUybmRfaW5mb18FBmNhbGxlcgIBXwUFbmZ0SWQCAV8FBWFydElkAgFfBQtjcmVhdG9yQWRkcgEJZ2V0QmlkS2V5BApvZmZlck93bmVyBW5mdElkCXNhbGVPd25lcgdvZmZlcklkCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgICCW9mZmVyMm5kXwUKb2ZmZXJPd25lcgIBXwUFbmZ0SWQCAV8FCXNhbGVPd25lcgIBXwUHb2ZmZXJJZAETZ2V0SW50QnlLRnJvbU9yYWNsZQEDa2V5CQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJoIAgUJb3JhY2xlRmVlBQNrZXkCH0ludGVnZXIgdW5kZWZpbmUgb3IgMCBpbiBvcmFjbGUAGWN1cnJlbnRDZXJ0aWZpY2F0aW9uUHJpY2UJARNnZXRJbnRCeUtGcm9tT3JhY2xlAQkArAICAhJjZXJ0aWZpY2F0aW9uX2ZlZV8JANgEAQULc2lnbkFzc2V0SWQBEmtleUFydGlzdEFnZW50QWRkcgEKYXJ0aXN0QWRkcgkArAICAg1hcnRpc3RfYWdlbnRfBQphcnRpc3RBZGRyARFrZXlTZWNvbmRhcnlTaGFyZQEKYXJ0aXN0QWRkcgkArAICAhdhcnRpc3RfYWdlbnRfc2Vjb25kYXJ5XwUKYXJ0aXN0QWRkcgEMaWRDYWxsZXJEYXRlAQFpAwkBASEBBQtkYXBwUnVubmluZwkAAgEFDm1haW50ZW5hbmNlTVNHCQCVCgMJANgEAQgFAWkNdHJhbnNhY3Rpb25JZAkA2AQBCAgFAWkGY2FsbGVyBWJ5dGVzCAUJbGFzdEJsb2NrCXRpbWVzdGFtcAEJaXNQYXltZW50AQFpAwkAAAIJAJADAQgFAWkIcGF5bWVudHMAAAkAAgECE05vIHBheW1lbnQgYXR0YWNoZWQEB3BheW1lbnQJAQV2YWx1ZQEJAJEDAggFAWkIcGF5bWVudHMAAAQGYW1vdW50CQEFdmFsdWUBCAUHcGF5bWVudAZhbW91bnQJAJQKAgUHcGF5bWVudAUGYW1vdW50AQxhc3NldElzVmFsaWQBDGFzc2V0RGV0YWlscwMDAwkAAAIIBQxhc3NldERldGFpbHMIcXVhbnRpdHkAAQkAAAIIBQxhc3NldERldGFpbHMIZGVjaW1hbHMAAAcJAAACCAUMYXNzZXREZXRhaWxzCnJlaXNzdWFibGUHBwkAAAIIBQxhc3NldERldGFpbHMGaXNzdWVyBQxhcnR3b3Jrc0RhcHAHAQxpc1NpZ25BcnRORlQBAmlkBAxhc3NldERldGFpbHMJAQV2YWx1ZQEJAOwHAQUCaWQJAQxhc3NldElzVmFsaWQBBQxhc3NldERldGFpbHMBEGFjY2VwdGVkQXNzZXRJZHMBB2Fzc2V0SWQDAwMDAwkBAiE9AgUHYXNzZXRJZAkA2AQBBQtzaWduQXNzZXRJZAkBAiE9AgUHYXNzZXRJZAkA2AQBBQx3YXZlc0Fzc2V0SWQHCQECIT0CBQdhc3NldElkAgVXQVZFUwcJAQIhPQIFB2Fzc2V0SWQJANgEAQULdXNkbkFzc2V0SWQHCQECIT0CBQdhc3NldElkCQDYBAEFC3VzZHRBc3NldElkBwcGAQ1nZXRCaWRBc3NldElkAQdhc3NldElkAwkAAAIFB2Fzc2V0SWQCBVdBVkVTBQR1bml0CQDZBAEFB2Fzc2V0SWQBFWdldFNhbGVPd25lckFuZFN0YXR1cwEFbmZ0aWQECXNhbGVPd25lcgkBCWdldFN0ckJ5SwEJAKwCAgIWY3VycmVudF9vd25lcl9vbl9kYXBwXwUFbmZ0aWQDCQAAAgkAsQIBBQlzYWxlT3duZXIAAAkAAgECDU5GVCBub3QgZm91bmQECnNhbGVTdGF0dXMJAQlnZXRTdHJCeUsBCQCsAgIJAKwCAgkArAICAg9zYWxlMm5kX3N0YXR1c18FCXNhbGVPd25lcgIBXwUFbmZ0aWQDCQECIT0CBQpzYWxlU3RhdHVzAgRPUEVOCQACAQIQTkZUIG5vdCBmb3Igc2FsZQUJc2FsZU93bmVyAQpnZXRCaWREYXRhAQNrZXkEB2JpZERhdGEJAQlnZXRTdHJCeUsBCQCsAgIFA2tleQIFX09QRU4DCQAAAgUHYmlkRGF0YQIACQACAQIPT2ZmZXIgbm90IGZvdW5kBApiaWREYXRhQXJyCQC1CQIFB2JpZERhdGECAV8EB2Fzc2V0SWQJAQ1nZXRCaWRBc3NldElkAQkAkQMCBQpiaWREYXRhQXJyAAIJAJUKAwUKYmlkRGF0YUFycgUHYXNzZXRJZAUHYmlkRGF0YQEKYXJ0SXNWYWxpZAEJYXJ0U3RhdHVzAwkBAiE9AgUJYXJ0U3RhdHVzBQphcnRJbGxlZ2FsCQECIT0CBQlhcnRTdGF0dXMFDGFydFN1c3BlbmRlZAcBDmNoZWNrQXJ0U3RhdHVzAgRhZGRyAmlkBAlhcnRTdGF0dXMJAQxnZXRBcnRTdHJCeUsBCQEHa2V5RmxhZwIFBGFkZHIFAmlkAwkBCmFydElzVmFsaWQBBQlhcnRTdGF0dXMGCQACAQkArAICAhxPcmlnaW5hbCBBcnR3b3JrIGZsYWdnZWQgYXMgBQlhcnRTdGF0dXMBEWNoZWNrQXJ0aXN0U3RhdHVzAQRhZGRyBAxhcnRpc3RTdGF0dXMJAQ1nZXRVc2VyU3RyQnlLAQkBDWtleVVzZXJTdGF0dXMBBQRhZGRyAwkBD2NvbnRhaW5zRWxlbWVudAIJAMwIAgUNdXNlclN1c3BlbmRlZAkAzAgCBQt1c2VyUmVtb3ZlZAUDbmlsBQxhcnRpc3RTdGF0dXMJAAIBCQCsAgICEE9yaWdpbmFsIEFydGlzdCAFDGFydGlzdFN0YXR1cwYBDGNoZWNrTkZUSW5mbwEHYXNzZXRJZAQHbmZ0RGF0YQkAtQkCCQEMZ2V0QXJ0U3RyQnlLAQkBCmtleU5GVERhdGEBBQdhc3NldElkAgFfBAlhcnRTaWduSUQJAQxnZXRBcnRTdHJCeUsBCQEJa2V5U2lnbklEAgkAkQMCBQduZnREYXRhAAYJAJEDAgUHbmZ0RGF0YQAFAwMJAQEhAQkBDmNoZWNrQXJ0U3RhdHVzAgkAkQMCBQduZnREYXRhAAYJAJEDAgUHbmZ0RGF0YQAFCQEBIQEJARFjaGVja0FydGlzdFN0YXR1cwEJAJEDAgUHbmZ0RGF0YQAGBwkAlgoEBwkAkQMCBQduZnREYXRhAAUJAJEDAgUHbmZ0RGF0YQAGBQlhcnRTaWduSUQJAJYKBAYJAJEDAgUHbmZ0RGF0YQAFCQCRAwIFB25mdERhdGEABgUJYXJ0U2lnbklEAQxzZXRUcmFuc2ZlcnMGBmFtb3VudAdhc3NldElkBW5mdGlkC2NyZWF0b3JBZGRyCXNhbGVPd25lcgZjYWxsZXIECmNyZWF0b3JDdXQJARNnZXRBcnR3b3JrUm95YWx0aWVzAQkBE2tleUFydHdvcmtSb3lhbHRpZXMCBQtjcmVhdG9yQWRkcgUFbmZ0aWQEBWFnZW50CQELdmFsdWVPckVsc2UCCQCdCAIFCHVzZXJEYXBwCQESa2V5QXJ0aXN0QWdlbnRBZGRyAQULY3JlYXRvckFkZHIFC2ZlZVJlY2VpdmVyBAphZ2VudFNoYXJlCQELdmFsdWVPckVsc2UCCQCaCAIFCHVzZXJEYXBwCQERa2V5U2Vjb25kYXJ5U2hhcmUBBQtjcmVhdG9yQWRkcgAABA1hbW91bnRGb3JTaWduCQBrAwUGYW1vdW50BQdzaWduQ3V0AGQEEGFtb3VudEZvckNyZWF0b3IJAGsDBQZhbW91bnQFCmNyZWF0b3JDdXQAkE4EDmFtb3VudEZvck93bmVyCQBlAgUGYW1vdW50CQBkAgUNYW1vdW50Rm9yU2lnbgUQYW1vdW50Rm9yQ3JlYXRvcgQOYW1vdW50Rm9yQWdlbnQDAwkBAiE9AgUFYWdlbnQFC2ZlZVJlY2VpdmVyCQBmAgUKYWdlbnRTaGFyZQAABwkAawMFBmFtb3VudAUKYWdlbnRTaGFyZQBkAAAEC2NvbW1pc3Npb25zAwkBAiE9AgUOYW1vdW50Rm9yQWdlbnQAAAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCQEHQWRkcmVzcwEJANkEAQULZmVlUmVjZWl2ZXIJAGUCBQ1hbW91bnRGb3JTaWduBQ5hbW91bnRGb3JBZ2VudAUHYXNzZXRJZAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCQEHQWRkcmVzcwEJANkEAQUFYWdlbnQFDmFtb3VudEZvckFnZW50BQdhc3NldElkBQNuaWwJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwkBB0FkZHJlc3MBCQDZBAEFC2ZlZVJlY2VpdmVyBQ1hbW91bnRGb3JTaWduBQdhc3NldElkBQNuaWwECmNyZWF0b3JGZWUJAQ5TY3JpcHRUcmFuc2ZlcgMJAQdBZGRyZXNzAQkA2QQBBQtjcmVhdG9yQWRkcgUQYW1vdW50Rm9yQ3JlYXRvcgUHYXNzZXRJZAQIb3duZXJGZWUJAQ5TY3JpcHRUcmFuc2ZlcgMJAQdBZGRyZXNzAQkA2QQBBQlzYWxlT3duZXIFDmFtb3VudEZvck93bmVyBQdhc3NldElkBAxjb2xsZWN0b3JORlQJAQ5TY3JpcHRUcmFuc2ZlcgMJAQdBZGRyZXNzAQkA2QQBBQZjYWxsZXIAAQkA2QQBBQVuZnRpZAkAlgoEBQtjb21taXNzaW9ucwUKY3JlYXRvckZlZQUIb3duZXJGZWUFDGNvbGxlY3Rvck5GVAEPdmFsaWRhdGVNaW5TZWxsAgdhc3NldElkBXByaWNlBAxtaW5TZWxsV2F2ZXMDBQh1bml0VGVzdAAKCQETZ2V0SW50QnlLRnJvbU9yYWNsZQECDndhdmVzX21pbl9zZWxsBAttaW5TZWxsVXNkbgDAhD0EC21pblNlbGxTaWduAwUIdW5pdFRlc3QAAQkAaAIFGWN1cnJlbnRDZXJ0aWZpY2F0aW9uUHJpY2UAAgMDAwMDAwkAAAIFB2Fzc2V0SWQJANgEAQULdXNkbkFzc2V0SWQJAGYCBQttaW5TZWxsVXNkbgUFcHJpY2UHCQECIT0CBQVwcmljZQAABwYDAwkAAAIFB2Fzc2V0SWQJANgEAQULdXNkdEFzc2V0SWQJAGYCBQttaW5TZWxsVXNkbgUFcHJpY2UHCQECIT0CBQVwcmljZQAABwYDAwkAAAIFB2Fzc2V0SWQJANgEAQULc2lnbkFzc2V0SWQJAGYCBQttaW5TZWxsU2lnbgUFcHJpY2UHCQECIT0CBQVwcmljZQAABwYDAwMJAAACBQdhc3NldElkCQDYBAEFDHdhdmVzQXNzZXRJZAYJAAACBQdhc3NldElkAgVXQVZFUwkAZgIFDG1pblNlbGxXYXZlcwUFcHJpY2UHCQECIT0CBQVwcmljZQAABwcGAQ9wcm92aWRlQmFzZURhdGECAWkFbmZ0SWQECyR0MDk2OTc5NzM3CQEMaWRDYWxsZXJEYXRlAQUBaQQCaWQIBQskdDA5Njk3OTczNwJfMQQGY2FsbGVyCAULJHQwOTY5Nzk3MzcCXzIEBGRhdGUIBQskdDA5Njk3OTczNwJfMwQLJHQwOTc0MTk4MTAJAQxjaGVja05GVEluZm8BBQVuZnRJZAQKaXNWYWxpZE5GVAgFCyR0MDk3NDE5ODEwAl8xBAVhcnRJZAgFCyR0MDk3NDE5ODEwAl8yBAtjcmVhdG9yQWRkcggFCyR0MDk3NDE5ODEwAl8zBAlhcnRTaWduSUQIBQskdDA5NzQxOTgxMAJfNAkAmQoHBQJpZAUGY2FsbGVyBQRkYXRlBQppc1ZhbGlkTkZUBQVhcnRJZAULY3JlYXRvckFkZHIFCWFydFNpZ25JRAEOdXBkYXRlTnVtU2FsZXMABAhudW1TYWxlcwkBCWdldEludEJ5SwEFCW51bVNhbGVzSwkBDEludGVnZXJFbnRyeQIFCW51bVNhbGVzSwkAZAIFCG51bVNhbGVzAAEJBmludm9rZQEHc2V0Q29uZgIDa2V5A3ZhbAQGY2FsbGVyCQClCAEIBQZpbnZva2UGY2FsbGVyAwkBD2NvbnRhaW5zRWxlbWVudAIJAMwIAgUFY2hyaXMJAMwIAgkApQgBBQR0aGlzBQNuaWwFBmNhbGxlcgMJAQhjb250YWlucwIFA2tleQIFY29uZl8JAMwIAgkBC1N0cmluZ0VudHJ5AgUDa2V5BQN2YWwFA25pbAkAAgECIEVudHJpZXMgc3RhcnRpbmcgd2l0aCBjb25mXyBvbmx5CQACAQIiWW91IGFyZSBub3QgYWxsb3dlZCB0byBjaGFuZ2UgdGhpcwZpbnZva2UBCmFwcFJ1bm5pbmcCBmlzTGl2ZQdtZXNzYWdlBAZjYWxsZXIJAKUIAQgFBmludm9rZQZjYWxsZXIEAmlkCQDYBAEIBQZpbnZva2UNdHJhbnNhY3Rpb25JZAMJAQ9jb250YWluc0VsZW1lbnQCCQDMCAIFBWNocmlzCQDMCAIJAKUIAQUEdGhpcwUDbmlsBQZjYWxsZXIJAMwIAgkBDEJvb2xlYW5FbnRyeQIFDmRhcHBSdW5uaW5nS2V5BQZpc0xpdmUJAMwIAgkBC1N0cmluZ0VudHJ5AgURbWFpbnRlbmFuY2VNU0dLZXkFB21lc3NhZ2UFA25pbAkAAgECIllvdSBhcmUgbm90IGFsbG93ZWQgdG8gY2hhbmdlIHRoaXMBaQEHc2VsbE5GVAIFcHJpY2UFYXNzZXQEDSR0MDEwOTE1MTA5NTEJAQlpc1BheW1lbnQBBQFpBAdwYXltZW50CAUNJHQwMTA5MTUxMDk1MQJfMQQGYW1vdW50CAUNJHQwMTA5MTUxMDk1MQJfMgMJAQIhPQIFBmFtb3VudAABCQACAQIPTm8gTkZUIGF0dGFjaGVkBAVuZnRJZAMDCQEJaXNEZWZpbmVkAQgFB3BheW1lbnQHYXNzZXRJZAkBDGlzU2lnbkFydE5GVAEJAQV2YWx1ZQEIBQdwYXltZW50B2Fzc2V0SWQHCQDYBAEJAQV2YWx1ZQEIBQdwYXltZW50B2Fzc2V0SWQJAAIBAhtPbmx5IFNJR04gQXJ0IE5GVCBhY2NlcHRlZC4EDSR0MDExMTg5MTEyODIJAQ9wcm92aWRlQmFzZURhdGECBQFpBQVuZnRJZAQCaWQIBQ0kdDAxMTE4OTExMjgyAl8xBAZjYWxsZXIIBQ0kdDAxMTE4OTExMjgyAl8yBARkYXRlCAUNJHQwMTExODkxMTI4MgJfMwQKaXNWYWxpZE5GVAgFDSR0MDExMTg5MTEyODICXzQEBWFydElkCAUNJHQwMTExODkxMTI4MgJfNQQLY3JlYXRvckFkZHIIBQ0kdDAxMTE4OTExMjgyAl82BAlhcnRTaWduSUQIBQ0kdDAxMTE4OTExMjgyAl83AwkAAAIJALECAQUJYXJ0U2lnbklEAAAJAAIBAh1BcnR3b3JrIG5vdCBmb3VuZCBvbiBTSUdOIEFydAMJAQEhAQUKaXNWYWxpZE5GVAkAAgECD05vdCBhIHZhbGlkIG5mdAMJAQEhAQkBEGFjY2VwdGVkQXNzZXRJZHMBBQVhc3NldAkAAgECJ09ubHkgU0lHTiwgVVNETiwgVVNEVCBvciBXQVZFUyBhY2NlcHRlZAMJAQEhAQkBD3ZhbGlkYXRlTWluU2VsbAIFBWFzc2V0BQVwcmljZQkAAgECGFdyb25nIG1pbmltdW0gc2VsbCBwcmljZQkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgIJAQpnZXRTYWxlS2V5BAUGY2FsbGVyBQVuZnRJZAUFYXJ0SWQFC2NyZWF0b3JBZGRyAgVfT1BFTgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkApAMBBQRkYXRlAgFfCQCkAwEFBXByaWNlAgFfBQVhc3NldAIBXwUFbmZ0SWQCAV8FBWFydElkAgFfBQtjcmVhdG9yQWRkcgIBXwUCaWQJAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICCQCsAgIJAKwCAgIPc2FsZTJuZF9zdGF0dXNfBQZjYWxsZXICAV8FBW5mdElkAgRPUEVOCQDMCAIJAQtTdHJpbmdFbnRyeQIJAKwCAgIWY3VycmVudF9vd25lcl9vbl9kYXBwXwUFbmZ0SWQFBmNhbGxlcgUDbmlsAWkBD3VwZGF0ZVNhbGVQcmljZQMFbmZ0SWQFcHJpY2UFYXNzZXQEDSR0MDEyMTg2MTIyNzkJAQ9wcm92aWRlQmFzZURhdGECBQFpBQVuZnRJZAQCaWQIBQ0kdDAxMjE4NjEyMjc5Al8xBAZjYWxsZXIIBQ0kdDAxMjE4NjEyMjc5Al8yBARkYXRlCAUNJHQwMTIxODYxMjI3OQJfMwQKaXNWYWxpZE5GVAgFDSR0MDEyMTg2MTIyNzkCXzQEBWFydElkCAUNJHQwMTIxODYxMjI3OQJfNQQLY3JlYXRvckFkZHIIBQ0kdDAxMjE4NjEyMjc5Al82BAlhcnRTaWduSUQIBQ0kdDAxMjE4NjEyMjc5Al83AwkAAAIJALECAQUJYXJ0U2lnbklEAAAJAAIBAjBBcnR3b3JrIG5vdCBmb3VuZCBvbiBTSUdOIEFydCwgY2FuY2VsIHlvdXIgc2FsZS4DCQEBIQEFCmlzVmFsaWRORlQJAAIBAg9Ob3QgYSB2YWxpZCBuZnQECXNhbGVPd25lcgkBCWdldFN0ckJ5SwEJAKwCAgIWY3VycmVudF9vd25lcl9vbl9kYXBwXwUFbmZ0SWQDCQECIT0CBQlzYWxlT3duZXIFBmNhbGxlcgkAAgECFllvdSBkb24ndCBvd24gdGhpcyBORlQECnNhbGVTdGF0dXMJAQlnZXRTdHJCeUsBCQCsAgIJAKwCAgkArAICAg9zYWxlMm5kX3N0YXR1c18FBmNhbGxlcgIBXwUFbmZ0SWQDCQECIT0CBQpzYWxlU3RhdHVzAgRPUEVOCQACAQIPU2FsZSBub3QgYWN0aXZlAwkBASEBCQEQYWNjZXB0ZWRBc3NldElkcwEFBWFzc2V0CQACAQInT25seSBTSUdOLCBVU0ROLCBVU0RUIG9yIFdBVkVTIGFjY2VwdGVkAwkBASEBCQEPdmFsaWRhdGVNaW5TZWxsAgUFYXNzZXQFBXByaWNlCQACAQIYV3JvbmcgbWluaW11bSBzZWxsIHByaWNlBAdzYWxlS2V5CQEKZ2V0U2FsZUtleQQFBmNhbGxlcgUFbmZ0SWQFBWFydElkBQtjcmVhdG9yQWRkcgQIc2FsZUluZm8JALUJAgkBCWdldFN0ckJ5SwEJAKwCAgUHc2FsZUtleQIFX09QRU4CAV8JAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICBQdzYWxlS2V5AgVfT1BFTgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkAkQMCBQhzYWxlSW5mbwAAAgFfCQCkAwEFBXByaWNlAgFfBQVhc3NldAIBXwkAkQMCBQhzYWxlSW5mbwADAgFfCQCRAwIFCHNhbGVJbmZvAAQCAV8JAJEDAgUIc2FsZUluZm8ABQIBXwkAkQMCBQhzYWxlSW5mbwAGBQNuaWwBaQEKY2FuY2VsU2FsZQEFbmZ0SWQEDSR0MDEzNDU2MTM3MDAJAQ9wcm92aWRlQmFzZURhdGECBQFpBQVuZnRJZAQCaWQIBQ0kdDAxMzQ1NjEzNzAwAl8xBAZjYWxsZXIIBQ0kdDAxMzQ1NjEzNzAwAl8yBARkYXRlCAUNJHQwMTM0NTYxMzcwMAJfMwQKaXNWYWxpZE5GVAgFDSR0MDEzNDU2MTM3MDACXzQEBWFydElkCAUNJHQwMTM0NTYxMzcwMAJfNQQLY3JlYXRvckFkZHIIBQ0kdDAxMzQ1NjEzNzAwAl82BAlhcnRTaWduSUQIBQ0kdDAxMzQ1NjEzNzAwAl83BAlzYWxlT3duZXIJAQlnZXRTdHJCeUsBCQCsAgICFmN1cnJlbnRfb3duZXJfb25fZGFwcF8FBW5mdElkAwkBAiE9AgUJc2FsZU93bmVyBQZjYWxsZXIJAAIBAhZZb3UgZG9uJ3Qgb3duIHRoaXMgTkZUBApzYWxlU3RhdHVzCQEJZ2V0U3RyQnlLAQkArAICCQCsAgIJAKwCAgIPc2FsZTJuZF9zdGF0dXNfBQZjYWxsZXICAV8FBW5mdElkAwkBAiE9AgUKc2FsZVN0YXR1cwIET1BFTgkAAgECD1NhbGUgbm90IGFjdGl2ZQQHc2FsZUtleQkBCmdldFNhbGVLZXkEBQZjYWxsZXIFBW5mdElkBQVhcnRJZAULY3JlYXRvckFkZHIECHNhbGVJbmZvCQEJZ2V0U3RyQnlLAQkArAICBQdzYWxlS2V5AgVfT1BFTgkAzAgCCQELRGVsZXRlRW50cnkBCQCsAgIFB3NhbGVLZXkCBV9PUEVOCQDMCAIJAQtEZWxldGVFbnRyeQEJAKwCAgkArAICCQCsAgICD3NhbGUybmRfc3RhdHVzXwUGY2FsbGVyAgFfBQVuZnRJZAkAzAgCCQELRGVsZXRlRW50cnkBCQCsAgICFmN1cnJlbnRfb3duZXJfb25fZGFwcF8FBW5mdElkCQDMCAIJAQtTdHJpbmdFbnRyeQIJAKwCAgkArAICCQCsAgIFB3NhbGVLZXkCAV8FAmlkAgpfQ0FOQ0VMTEVECQCsAgIJAKwCAgkArAICCQCsAgIFCHNhbGVJbmZvAgtfQ0FOQ0VMTEVEXwkApAMBBQRkYXRlAgFfBQJpZAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCQEHQWRkcmVzcwEJANkEAQUGY2FsbGVyAAEJANkEAQUFbmZ0SWQFA25pbAFpAQZidXlORlQBBW5mdElkBA0kdDAxNDU1NDE0NjQ3CQEPcHJvdmlkZUJhc2VEYXRhAgUBaQUFbmZ0SWQEAmlkCAUNJHQwMTQ1NTQxNDY0NwJfMQQGY2FsbGVyCAUNJHQwMTQ1NTQxNDY0NwJfMgQEZGF0ZQgFDSR0MDE0NTU0MTQ2NDcCXzMECmlzVmFsaWRORlQIBQ0kdDAxNDU1NDE0NjQ3Al80BAVhcnRJZAgFDSR0MDE0NTU0MTQ2NDcCXzUEC2NyZWF0b3JBZGRyCAUNJHQwMTQ1NTQxNDY0NwJfNgQJYXJ0U2lnbklECAUNJHQwMTQ1NTQxNDY0NwJfNwMJAAACCQCxAgEFCWFydFNpZ25JRAAACQACAQIwQXJ0d29yayBub3QgZm91bmQgb24gU0lHTiBBcnQsIGNhbmNlbCB5b3VyIHNhbGUuAwkBASEBBQppc1ZhbGlkTkZUCQACAQIPTm90IGEgdmFsaWQgbmZ0BAlzYWxlT3duZXIJARVnZXRTYWxlT3duZXJBbmRTdGF0dXMBBQVuZnRJZAQHc2FsZUtleQkBCmdldFNhbGVLZXkEBQlzYWxlT3duZXIFBW5mdElkBQVhcnRJZAULY3JlYXRvckFkZHIECHNhbGVJbmZvCQEJZ2V0U3RyQnlLAQkArAICBQdzYWxlS2V5AgVfT1BFTgMJAAACCQCxAgEFCHNhbGVJbmZvAAAJAAIBAg9TYWxlIE5vdCBmb3VuZCEEDXNhbGVJbmZvQXJyYXkJALUJAgUIc2FsZUluZm8CAV8DCQAAAgkAtgkBCQCRAwIFDXNhbGVJbmZvQXJyYXkAAQAACQACAQIKT2ZmZXIgb25seQQNJHQwMTUxNTYxNTE5MgkBCWlzUGF5bWVudAEFAWkEB3BheW1lbnQIBQ0kdDAxNTE1NjE1MTkyAl8xBAZhbW91bnQIBQ0kdDAxNTE1NjE1MTkyAl8yBA9wYXltZW50QXNzZXRTdHIDCQEJaXNEZWZpbmVkAQgFB3BheW1lbnQHYXNzZXRJZAkA2AQBCQEFdmFsdWUBCAUHcGF5bWVudAdhc3NldElkAgADAwkBAiE9AgkAkQMCBQ1zYWxlSW5mb0FycmF5AAEJAKQDAQUGYW1vdW50BgkBAiE9AgkAkQMCBQ1zYWxlSW5mb0FycmF5AAIFD3BheW1lbnRBc3NldFN0cgkAAgECGlBheW1lbnQgaW5mb3MgZG9uJ3QgbWF0Y2guBA0kdDAxNTcwNjE1ODM4CQEMc2V0VHJhbnNmZXJzBgUGYW1vdW50CAUHcGF5bWVudAdhc3NldElkBQVuZnRJZAULY3JlYXRvckFkZHIFCXNhbGVPd25lcgUGY2FsbGVyBAtjb21taXNzaW9ucwgFDSR0MDE1NzA2MTU4MzgCXzEECmNyZWF0b3JGZWUIBQ0kdDAxNTcwNjE1ODM4Al8yBAhvd25lckZlZQgFDSR0MDE1NzA2MTU4MzgCXzMEDGNvbGxlY3Rvck5GVAgFDSR0MDE1NzA2MTU4MzgCXzQJAM4IAgkAzAgCCQELRGVsZXRlRW50cnkBCQCsAgIFB3NhbGVLZXkCBV9PUEVOCQDMCAIJAQtEZWxldGVFbnRyeQEJAKwCAgkArAICCQCsAgICD3NhbGUybmRfc3RhdHVzXwUJc2FsZU93bmVyAgFfBQVuZnRJZAkAzAgCCQELRGVsZXRlRW50cnkBCQCsAgICFmN1cnJlbnRfb3duZXJfb25fZGFwcF8FBW5mdElkCQDMCAIJAQtTdHJpbmdFbnRyeQIJAKwCAgkArAICCQCsAgIFB3NhbGVLZXkCAV8FAmlkAgdfQ0xPU0VECQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICBQhzYWxlSW5mbwIIX0NMT1NFRF8JAKQDAQUEZGF0ZQIBXwUCaWQCAV8FBmNhbGxlcgkAzAgCCQEOdXBkYXRlTnVtU2FsZXMACQDMCAIFCmNyZWF0b3JGZWUJAMwIAgUIb3duZXJGZWUJAMwIAgUMY29sbGVjdG9yTkZUBQNuaWwFC2NvbW1pc3Npb25zAWkBCHNldE9mZmVyAQVuZnRJZAQNJHQwMTYyNjYxNjM2MwkBD3Byb3ZpZGVCYXNlRGF0YQIFAWkFBW5mdElkBAJpZAgFDSR0MDE2MjY2MTYzNjMCXzEECm9mZmVyT3duZXIIBQ0kdDAxNjI2NjE2MzYzAl8yBARkYXRlCAUNJHQwMTYyNjYxNjM2MwJfMwQKaXNWYWxpZE5GVAgFDSR0MDE2MjY2MTYzNjMCXzQEBWFydElkCAUNJHQwMTYyNjYxNjM2MwJfNQQLY3JlYXRvckFkZHIIBQ0kdDAxNjI2NjE2MzYzAl82BAlhcnRTaWduSUQIBQ0kdDAxNjI2NjE2MzYzAl83AwkBASEBBQppc1ZhbGlkTkZUCQACAQIPTm90IGEgdmFsaWQgbmZ0BA0kdDAxNjQyNzE2NDYzCQEJaXNQYXltZW50AQUBaQQHcGF5bWVudAgFDSR0MDE2NDI3MTY0NjMCXzEEBmFtb3VudAgFDSR0MDE2NDI3MTY0NjMCXzIEB2Fzc2V0SWQDCQEBIQEJAQlpc0RlZmluZWQBCAUHcGF5bWVudAdhc3NldElkAgVXQVZFUwkA2AQBCQEFdmFsdWUBCAUHcGF5bWVudAdhc3NldElkAwkBASEBCQEQYWNjZXB0ZWRBc3NldElkcwEFB2Fzc2V0SWQJAAIBAhJhc3NldCBub3QgYWNjZXB0ZWQDCQAAAgUGYW1vdW50AAAJAAIBAhZPZmZlciBvZiAwIG5vdCBhbGxvd2VkAwkBASEBCQEPdmFsaWRhdGVNaW5TZWxsAgUHYXNzZXRJZAUGYW1vdW50CQACAQIYV3JvbmcgbWluaW11bSBzZWxsIHByaWNlBAlzYWxlT3duZXIJARVnZXRTYWxlT3duZXJBbmRTdGF0dXMBBQVuZnRJZAkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgIJAQlnZXRCaWRLZXkEBQpvZmZlck93bmVyBQVuZnRJZAUJc2FsZU93bmVyBQJpZAIFX09QRU4JAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCkAwEFBGRhdGUCAV8JAKQDAQUGYW1vdW50AgFfBQdhc3NldElkAgFfBQVuZnRJZAIBXwUFYXJ0SWQCAV8FC2NyZWF0b3JBZGRyAgFfBQpvZmZlck93bmVyAgFfBQJpZAUDbmlsAWkBC2FjY2VwdE9mZmVyAwVuZnRJZAdvZmZlcklkCm9mZmVyT3duZXIEDSR0MDE3Mjg0MTczNzcJAQ9wcm92aWRlQmFzZURhdGECBQFpBQVuZnRJZAQCaWQIBQ0kdDAxNzI4NDE3Mzc3Al8xBAZjYWxsZXIIBQ0kdDAxNzI4NDE3Mzc3Al8yBARkYXRlCAUNJHQwMTcyODQxNzM3NwJfMwQKaXNWYWxpZE5GVAgFDSR0MDE3Mjg0MTczNzcCXzQEBWFydElkCAUNJHQwMTcyODQxNzM3NwJfNQQLY3JlYXRvckFkZHIIBQ0kdDAxNzI4NDE3Mzc3Al82BAlhcnRTaWduSUQIBQ0kdDAxNzI4NDE3Mzc3Al83AwkBASEBBQppc1ZhbGlkTkZUCQACAQIPTm90IGEgdmFsaWQgbmZ0BAlzYWxlT3duZXIJARVnZXRTYWxlT3duZXJBbmRTdGF0dXMBBQVuZnRJZAMJAQIhPQIFBmNhbGxlcgUJc2FsZU93bmVyCQACAQIgT25seSBzYWxlIG93bmVyIGNhbiBhY2NlcHQgb2ZmZXIEBmJpZEtleQkBCWdldEJpZEtleQQFCm9mZmVyT3duZXIFBW5mdElkBQlzYWxlT3duZXIFB29mZmVySWQEDSR0MDE3NjM4MTc2OTMJAQpnZXRCaWREYXRhAQUGYmlkS2V5BApiaWREYXRhQXJyCAUNJHQwMTc2MzgxNzY5MwJfMQQHYXNzZXRJZAgFDSR0MDE3NjM4MTc2OTMCXzIEB2JpZERhdGEIBQ0kdDAxNzYzODE3NjkzAl8zBAdzYWxlS2V5CQEKZ2V0U2FsZUtleQQFCXNhbGVPd25lcgUFbmZ0SWQFBWFydElkBQtjcmVhdG9yQWRkcgQIc2FsZUluZm8JAQlnZXRTdHJCeUsBCQCsAgIFB3NhbGVLZXkCBV9PUEVOAwkAAAIJALECAQUIc2FsZUluZm8AAAkAAgECD1NhbGUgTm90IGZvdW5kIQQGYW1vdW50CQEFdmFsdWUBCQC2CQEJAJEDAgUKYmlkRGF0YUFycgABBA0kdDAxNzkzNjE4MDY3CQEMc2V0VHJhbnNmZXJzBgUGYW1vdW50BQdhc3NldElkBQVuZnRJZAULY3JlYXRvckFkZHIFCXNhbGVPd25lcgkAkQMCBQpiaWREYXRhQXJyAAYEC2NvbW1pc3Npb25zCAUNJHQwMTc5MzYxODA2NwJfMQQKY3JlYXRvckZlZQgFDSR0MDE3OTM2MTgwNjcCXzIECG93bmVyRmVlCAUNJHQwMTc5MzYxODA2NwJfMwQMY29sbGVjdG9yTkZUCAUNJHQwMTc5MzYxODA2NwJfNAQKYXNzZXRJZFN0cgMJAQlpc0RlZmluZWQBBQdhc3NldElkCQDYBAEJAQV2YWx1ZQEFB2Fzc2V0SWQCBVdBVkVTCQDOCAIJAMwIAgkBC0RlbGV0ZUVudHJ5AQkArAICBQdzYWxlS2V5AgVfT1BFTgkAzAgCCQELRGVsZXRlRW50cnkBCQCsAgIFBmJpZEtleQIFX09QRU4JAMwIAgkBC0RlbGV0ZUVudHJ5AQkArAICCQCsAgIJAKwCAgIPc2FsZTJuZF9zdGF0dXNfBQlzYWxlT3duZXICAV8FBW5mdElkCQDMCAIJAQtEZWxldGVFbnRyeQEJAKwCAgIWY3VycmVudF9vd25lcl9vbl9kYXBwXwUFbmZ0SWQJAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICBQZiaWRLZXkCB19DTE9TRUQJAKwCAgkArAICCQCsAgIJAKwCAgUHYmlkRGF0YQIIX0NMT1NFRF8JAKQDAQUEZGF0ZQIBXwUCaWQJAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICCQCsAgIJAKwCAgUHc2FsZUtleQIBXwUCaWQCB19DTE9TRUQJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgUIc2FsZUluZm8CDl9DTE9TRUQtT0ZGRVJfCQCkAwEFBGRhdGUCAV8FAmlkAgFfBQpvZmZlck93bmVyAgFfCQCkAwEFBmFtb3VudAIBXwUKYXNzZXRJZFN0cgkAzAgCCQEOdXBkYXRlTnVtU2FsZXMACQDMCAIFCmNyZWF0b3JGZWUJAMwIAgUIb3duZXJGZWUJAMwIAgUMY29sbGVjdG9yTkZUBQNuaWwFC2NvbW1pc3Npb25zAWkBC2NhbmNlbE9mZmVyBAVuZnRJZAdvZmZlcklkCm9mZmVyT3duZXIJc2FsZU93bmVyBA0kdDAxODg4NzE4OTYyCQEMaWRDYWxsZXJEYXRlAQUBaQQCaWQIBQ0kdDAxODg4NzE4OTYyAl8xBAZjYWxsZXIIBQ0kdDAxODg4NzE4OTYyAl8yBARkYXRlCAUNJHQwMTg4ODcxODk2MgJfMwMDCQECIT0CBQZjYWxsZXIFCm9mZmVyT3duZXIJAQIhPQIFBmNhbGxlcgUJc2FsZU93bmVyBwkAAgECHVlvdSBjYW5ub3QgY2FuY2VsIHRoaXMgb2ZmZXIuBAZiaWRLZXkJAQlnZXRCaWRLZXkEBQpvZmZlck93bmVyBQVuZnRJZAUJc2FsZU93bmVyBQdvZmZlcklkBA0kdDAxOTEzNjE5MTkxCQEKZ2V0QmlkRGF0YQEFBmJpZEtleQQKYmlkRGF0YUFycggFDSR0MDE5MTM2MTkxOTECXzEEB2Fzc2V0SWQIBQ0kdDAxOTEzNjE5MTkxAl8yBAdiaWREYXRhCAUNJHQwMTkxMzYxOTE5MQJfMwkAzAgCCQELRGVsZXRlRW50cnkBCQCsAgIFBmJpZEtleQIFX09QRU4JAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICBQZiaWRLZXkCCl9DQU5DRUxMRUQJAKwCAgkArAICCQCsAgIJAKwCAgUHYmlkRGF0YQILX0NBTkNFTExFRF8JAKQDAQUEZGF0ZQIBXwUCaWQJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwkBB0FkZHJlc3MBCQDZBAEFBmNhbGxlcgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFCmJpZERhdGFBcnIAAQUHYXNzZXRJZAUDbmlsALOcQoc=", "height": 2339312, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: BXtoTCEAeG9b8xRb6WZjS4Qz2T6zUmPx2jUxybEoxVii Next: BKD5DDgy75Fdw5CkgATw995S8rGvnrxLobiMSNRepcpb Full:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 func getStrByK (key) = valueOrElse(getString(this, key), "")
55
66
77 let unitTest = false
88
99 let oracleFee = value(addressFromString(getStrByK("conf_oracle_fee")))
1010
1111 let feeReceiver = getStrByK("conf_fee_receiver")
1212
1313 let artworksDapp = value(addressFromString(getStrByK("conf_artworks_dapp")))
1414
1515 let userDapp = if (unitTest)
1616 then value(addressFromString("3Mt4RGMEyjSWYAocTPqd55wdHQQB3PU2UCm"))
1717 else value(addressFromString(getStrByK("conf_users_dapp")))
1818
1919 let signAssetId = fromBase58String(getStrByK("conf_accepted_asset_SIGN"))
2020
2121 let usdnAssetId = fromBase58String(getStrByK("conf_accepted_asset_USDN"))
2222
2323 let usdtAssetId = fromBase58String(getStrByK("conf_accepted_asset_USDT"))
2424
2525 let wavesAssetId = base58''
2626
2727 let chris = getStrByK("conf_admin_1")
2828
2929 let signCut = 3
3030
3131 let userSuspended = "SUSPENDED"
3232
3333 let userRemoved = "REMOVED"
3434
3535 let artIllegal = "ILLEGAL"
3636
3737 let artSuspended = "SUSPENDED"
3838
3939 let dappRunningKey = "conf_dapp_is_running"
4040
4141 let maintenanceMSGKey = "conf_maintenance_msg"
4242
4343 let dappRunning = valueOrElse(getBoolean(this, dappRunningKey), true)
4444
4545 let maintenanceMSG = valueOrElse(getString(this, maintenanceMSGKey), "")
4646
4747 let numSalesK = "num_sales"
4848
4949 func getUserStrByK (key) = valueOrElse(getString(userDapp, key), "Error")
5050
5151
5252 func getArtworkRoyalties (key) = valueOrElse(getInteger(artworksDapp, key), 1000)
5353
5454
5555 func getArtStrByK (key) = valueOrElse(getString(artworksDapp, key), "")
5656
5757
5858 func getIntByK (key) = valueOrElse(getInteger(this, key), 0)
5959
6060
6161 func keyUserStatus (addr) = ("user_status_" + addr)
6262
6363
6464 func keyArtworkRoyalties (caller,artId) = ((("art_royalties_" + artId) + "_") + caller)
6565
6666
6767 func keySignID (artistAddr,artId) = ((("art_signid_" + artId) + "_") + artistAddr)
6868
6969
7070 func keyFlag (artistAddr,artId) = ((("art_flag_" + artId) + "_") + artistAddr)
7171
7272
7373 func keyNFTData (id) = ("nft_" + id)
7474
7575
7676 func getSaleKey (caller,nftId,artId,creatorAddr) = ((((((("sale2nd_info_" + caller) + "_") + nftId) + "_") + artId) + "_") + creatorAddr)
7777
7878
7979 func getBidKey (offerOwner,nftId,saleOwner,offerId) = ((((((("offer2nd_" + offerOwner) + "_") + nftId) + "_") + saleOwner) + "_") + offerId)
8080
8181
8282 func getIntByKFromOracle (key) = valueOrErrorMessage(getInteger(oracleFee, key), "Integer undefine or 0 in oracle")
8383
8484
8585 let currentCertificationPrice = getIntByKFromOracle(("certification_fee_" + toBase58String(signAssetId)))
8686
8787 func keyArtistAgentAddr (artistAddr) = ("artist_agent_" + artistAddr)
8888
8989
9090 func keySecondaryShare (artistAddr) = ("artist_agent_secondary_" + artistAddr)
9191
9292
9393 func idCallerDate (i) = if (!(dappRunning))
9494 then throw(maintenanceMSG)
9595 else $Tuple3(toBase58String(i.transactionId), toBase58String(i.caller.bytes), lastBlock.timestamp)
9696
9797
9898 func isPayment (i) = if ((size(i.payments) == 0))
9999 then throw("No payment attached")
100100 else {
101101 let payment = value(i.payments[0])
102102 let amount = value(payment.amount)
103103 $Tuple2(payment, amount)
104104 }
105105
106106
107107 func assetIsValid (assetDetails) = if (if (if ((assetDetails.quantity == 1))
108108 then (assetDetails.decimals == 0)
109109 else false)
110110 then (assetDetails.reissuable == false)
111111 else false)
112112 then (assetDetails.issuer == artworksDapp)
113113 else false
114114
115115
116116 func isSignArtNFT (id) = {
117117 let assetDetails = value(assetInfo(id))
118118 assetIsValid(assetDetails)
119119 }
120120
121121
122122 func acceptedAssetIds (assetId) = if (if (if (if (if ((assetId != toBase58String(signAssetId)))
123123 then (assetId != toBase58String(wavesAssetId))
124124 else false)
125125 then (assetId != "WAVES")
126126 else false)
127127 then (assetId != toBase58String(usdnAssetId))
128128 else false)
129129 then (assetId != toBase58String(usdtAssetId))
130130 else false)
131131 then false
132132 else true
133133
134134
135135 func getBidAssetId (assetId) = if ((assetId == "WAVES"))
136136 then unit
137137 else fromBase58String(assetId)
138138
139139
140140 func getSaleOwnerAndStatus (nftid) = {
141141 let saleOwner = getStrByK(("current_owner_on_dapp_" + nftid))
142142 if ((size(saleOwner) == 0))
143143 then throw("NFT not found")
144144 else {
145145 let saleStatus = getStrByK(((("sale2nd_status_" + saleOwner) + "_") + nftid))
146146 if ((saleStatus != "OPEN"))
147147 then throw("NFT not for sale")
148148 else saleOwner
149149 }
150150 }
151151
152152
153153 func getBidData (key) = {
154154 let bidData = getStrByK((key + "_OPEN"))
155155 if ((bidData == ""))
156156 then throw("Offer not found")
157157 else {
158158 let bidDataArr = split(bidData, "_")
159159 let assetId = getBidAssetId(bidDataArr[2])
160160 $Tuple3(bidDataArr, assetId, bidData)
161161 }
162162 }
163163
164164
165165 func artIsValid (artStatus) = if ((artStatus != artIllegal))
166166 then (artStatus != artSuspended)
167167 else false
168168
169169
170170 func checkArtStatus (addr,id) = {
171171 let artStatus = getArtStrByK(keyFlag(addr, id))
172172 if (artIsValid(artStatus))
173173 then true
174174 else throw(("Original Artwork flagged as " + artStatus))
175175 }
176176
177177
178178 func checkArtistStatus (addr) = {
179179 let artistStatus = getUserStrByK(keyUserStatus(addr))
180180 if (containsElement([userSuspended, userRemoved], artistStatus))
181181 then throw(("Original Artist " + artistStatus))
182182 else true
183183 }
184184
185185
186186 func checkNFTInfo (assetId) = {
187187 let nftData = split(getArtStrByK(keyNFTData(assetId)), "_")
188188 let artSignID = getArtStrByK(keySignID(nftData[6], nftData[5]))
189189 if (if (!(checkArtStatus(nftData[6], nftData[5])))
190190 then !(checkArtistStatus(nftData[6]))
191191 else false)
192192 then $Tuple4(false, nftData[5], nftData[6], artSignID)
193193 else $Tuple4(true, nftData[5], nftData[6], artSignID)
194194 }
195195
196196
197197 func setTransfers (amount,assetId,nftid,creatorAddr,saleOwner,caller) = {
198198 let creatorCut = getArtworkRoyalties(keyArtworkRoyalties(creatorAddr, nftid))
199199 let agent = valueOrElse(getString(userDapp, keyArtistAgentAddr(creatorAddr)), feeReceiver)
200200 let agentShare = valueOrElse(getInteger(userDapp, keySecondaryShare(creatorAddr)), 0)
201201 let amountForSign = fraction(amount, signCut, 100)
202202 let amountForCreator = fraction(amount, creatorCut, 10000)
203203 let amountForOwner = (amount - (amountForSign + amountForCreator))
204204 let amountForAgent = if (if ((agent != feeReceiver))
205205 then (agentShare > 0)
206206 else false)
207207 then fraction(amount, agentShare, 100)
208208 else 0
209209 let commissions = if ((amountForAgent != 0))
210210 then [ScriptTransfer(Address(fromBase58String(feeReceiver)), (amountForSign - amountForAgent), assetId), ScriptTransfer(Address(fromBase58String(agent)), amountForAgent, assetId)]
211211 else [ScriptTransfer(Address(fromBase58String(feeReceiver)), amountForSign, assetId)]
212212 let creatorFee = ScriptTransfer(Address(fromBase58String(creatorAddr)), amountForCreator, assetId)
213213 let ownerFee = ScriptTransfer(Address(fromBase58String(saleOwner)), amountForOwner, assetId)
214214 let collectorNFT = ScriptTransfer(Address(fromBase58String(caller)), 1, fromBase58String(nftid))
215215 $Tuple4(commissions, creatorFee, ownerFee, collectorNFT)
216216 }
217217
218218
219219 func validateMinSell (assetId,price) = {
220220 let minSellWaves = if (unitTest)
221221 then 10
222222 else getIntByKFromOracle("waves_min_sell")
223223 let minSellUsdn = 1000000
224224 let minSellSign = if (unitTest)
225225 then 1
226226 else (currentCertificationPrice * 2)
227227 if (if (if (if (if (if ((assetId == toBase58String(usdnAssetId)))
228228 then (minSellUsdn > price)
229229 else false)
230230 then (price != 0)
231231 else false)
232232 then true
233233 else if (if ((assetId == toBase58String(usdtAssetId)))
234234 then (minSellUsdn > price)
235235 else false)
236236 then (price != 0)
237237 else false)
238238 then true
239239 else if (if ((assetId == toBase58String(signAssetId)))
240240 then (minSellSign > price)
241241 else false)
242242 then (price != 0)
243243 else false)
244244 then true
245245 else if (if (if ((assetId == toBase58String(wavesAssetId)))
246246 then true
247247 else (assetId == "WAVES"))
248248 then (minSellWaves > price)
249249 else false)
250250 then (price != 0)
251251 else false)
252252 then false
253253 else true
254254 }
255255
256256
257257 func provideBaseData (i,nftId) = {
258258 let $t096979737 = idCallerDate(i)
259259 let id = $t096979737._1
260260 let caller = $t096979737._2
261261 let date = $t096979737._3
262262 let $t097419810 = checkNFTInfo(nftId)
263263 let isValidNFT = $t097419810._1
264264 let artId = $t097419810._2
265265 let creatorAddr = $t097419810._3
266266 let artSignID = $t097419810._4
267267 $Tuple7(id, caller, date, isValidNFT, artId, creatorAddr, artSignID)
268268 }
269269
270270
271271 func updateNumSales () = {
272272 let numSales = getIntByK(numSalesK)
273273 IntegerEntry(numSalesK, (numSales + 1))
274274 }
275275
276276
277277 @Callable(invoke)
278278 func setConf (key,val) = {
279279 let caller = toString(invoke.caller)
280280 if (containsElement([chris, toString(this)], caller))
281281 then if (contains(key, "conf_"))
282282 then [StringEntry(key, val)]
283283 else throw("Entries starting with conf_ only")
284284 else throw("You are not allowed to change this")
285285 }
286286
287287
288288
289289 @Callable(invoke)
290290 func appRunning (isLive,message) = {
291291 let caller = toString(invoke.caller)
292292 let id = toBase58String(invoke.transactionId)
293293 if (containsElement([chris, toString(this)], caller))
294294 then [BooleanEntry(dappRunningKey, isLive), StringEntry(maintenanceMSGKey, message)]
295295 else throw("You are not allowed to change this")
296296 }
297297
298298
299299
300300 @Callable(i)
301301 func sellNFT (price,asset) = {
302302 let $t01091510951 = isPayment(i)
303303 let payment = $t01091510951._1
304304 let amount = $t01091510951._2
305305 if ((amount != 1))
306306 then throw("No NFT attached")
307307 else {
308308 let nftId = if (if (isDefined(payment.assetId))
309309 then isSignArtNFT(value(payment.assetId))
310310 else false)
311311 then toBase58String(value(payment.assetId))
312312 else throw("Only SIGN Art NFT accepted.")
313313 let $t01118911282 = provideBaseData(i, nftId)
314314 let id = $t01118911282._1
315315 let caller = $t01118911282._2
316316 let date = $t01118911282._3
317317 let isValidNFT = $t01118911282._4
318318 let artId = $t01118911282._5
319319 let creatorAddr = $t01118911282._6
320320 let artSignID = $t01118911282._7
321321 if ((size(artSignID) == 0))
322322 then throw("Artwork not found on SIGN Art")
323323 else if (!(isValidNFT))
324324 then throw("Not a valid nft")
325325 else if (!(acceptedAssetIds(asset)))
326326 then throw("Only SIGN, USDN, USDT or WAVES accepted")
327327 else if (!(validateMinSell(asset, price)))
328328 then throw("Wrong minimum sell price")
329329 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)]
330330 }
331331 }
332332
333333
334334
335335 @Callable(i)
336336 func updateSalePrice (nftId,price,asset) = {
337337 let $t01218612279 = provideBaseData(i, nftId)
338338 let id = $t01218612279._1
339339 let caller = $t01218612279._2
340340 let date = $t01218612279._3
341341 let isValidNFT = $t01218612279._4
342342 let artId = $t01218612279._5
343343 let creatorAddr = $t01218612279._6
344344 let artSignID = $t01218612279._7
345345 if ((size(artSignID) == 0))
346346 then throw("Artwork not found on SIGN Art, cancel your sale.")
347347 else if (!(isValidNFT))
348348 then throw("Not a valid nft")
349349 else {
350350 let saleOwner = getStrByK(("current_owner_on_dapp_" + nftId))
351351 if ((saleOwner != caller))
352352 then throw("You don't own this NFT")
353353 else {
354354 let saleStatus = getStrByK(((("sale2nd_status_" + caller) + "_") + nftId))
355355 if ((saleStatus != "OPEN"))
356356 then throw("Sale not active")
357357 else if (!(acceptedAssetIds(asset)))
358358 then throw("Only SIGN, USDN, USDT or WAVES accepted")
359359 else if (!(validateMinSell(asset, price)))
360360 then throw("Wrong minimum sell price")
361361 else {
362362 let saleKey = getSaleKey(caller, nftId, artId, creatorAddr)
363363 let saleInfo = split(getStrByK((saleKey + "_OPEN")), "_")
364364 [StringEntry((saleKey + "_OPEN"), ((((((((((((saleInfo[0] + "_") + toString(price)) + "_") + asset) + "_") + saleInfo[3]) + "_") + saleInfo[4]) + "_") + saleInfo[5]) + "_") + saleInfo[6]))]
365365 }
366366 }
367367 }
368368 }
369369
370370
371371
372372 @Callable(i)
373373 func cancelSale (nftId) = {
374374 let $t01345613700 = provideBaseData(i, nftId)
375375 let id = $t01345613700._1
376376 let caller = $t01345613700._2
377377 let date = $t01345613700._3
378378 let isValidNFT = $t01345613700._4
379379 let artId = $t01345613700._5
380380 let creatorAddr = $t01345613700._6
381381 let artSignID = $t01345613700._7
382382 let saleOwner = getStrByK(("current_owner_on_dapp_" + nftId))
383383 if ((saleOwner != caller))
384384 then throw("You don't own this NFT")
385385 else {
386386 let saleStatus = getStrByK(((("sale2nd_status_" + caller) + "_") + nftId))
387387 if ((saleStatus != "OPEN"))
388388 then throw("Sale not active")
389389 else {
390390 let saleKey = getSaleKey(caller, nftId, artId, creatorAddr)
391391 let saleInfo = getStrByK((saleKey + "_OPEN"))
392392 [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))]
393393 }
394394 }
395395 }
396396
397397
398398
399399 @Callable(i)
400400 func buyNFT (nftId) = {
401401 let $t01455414647 = provideBaseData(i, nftId)
402402 let id = $t01455414647._1
403403 let caller = $t01455414647._2
404404 let date = $t01455414647._3
405405 let isValidNFT = $t01455414647._4
406406 let artId = $t01455414647._5
407407 let creatorAddr = $t01455414647._6
408408 let artSignID = $t01455414647._7
409409 if ((size(artSignID) == 0))
410410 then throw("Artwork not found on SIGN Art, cancel your sale.")
411411 else if (!(isValidNFT))
412412 then throw("Not a valid nft")
413413 else {
414414 let saleOwner = getSaleOwnerAndStatus(nftId)
415415 let saleKey = getSaleKey(saleOwner, nftId, artId, creatorAddr)
416416 let saleInfo = getStrByK((saleKey + "_OPEN"))
417417 if ((size(saleInfo) == 0))
418418 then throw("Sale Not found!")
419419 else {
420420 let saleInfoArray = split(saleInfo, "_")
421421 if ((parseInt(saleInfoArray[1]) == 0))
422422 then throw("Offer only")
423423 else {
424424 let $t01515615192 = isPayment(i)
425425 let payment = $t01515615192._1
426426 let amount = $t01515615192._2
427427 let paymentAssetStr = if (isDefined(payment.assetId))
428428 then toBase58String(value(payment.assetId))
429429 else ""
430430 if (if ((saleInfoArray[1] != toString(amount)))
431431 then true
432432 else (saleInfoArray[2] != paymentAssetStr))
433433 then throw("Payment infos don't match.")
434434 else {
435435 let $t01570615838 = setTransfers(amount, payment.assetId, nftId, creatorAddr, saleOwner, caller)
436436 let commissions = $t01570615838._1
437437 let creatorFee = $t01570615838._2
438438 let ownerFee = $t01570615838._3
439439 let collectorNFT = $t01570615838._4
440440 ([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(), creatorFee, ownerFee, collectorNFT] ++ commissions)
441441 }
442442 }
443443 }
444444 }
445445 }
446446
447447
448448
449449 @Callable(i)
450450 func setOffer (nftId) = {
451451 let $t01626616363 = provideBaseData(i, nftId)
452452 let id = $t01626616363._1
453453 let offerOwner = $t01626616363._2
454454 let date = $t01626616363._3
455455 let isValidNFT = $t01626616363._4
456456 let artId = $t01626616363._5
457457 let creatorAddr = $t01626616363._6
458458 let artSignID = $t01626616363._7
459459 if (!(isValidNFT))
460460 then throw("Not a valid nft")
461461 else {
462462 let $t01642716463 = isPayment(i)
463463 let payment = $t01642716463._1
464464 let amount = $t01642716463._2
465465 let assetId = if (!(isDefined(payment.assetId)))
466466 then "WAVES"
467467 else toBase58String(value(payment.assetId))
468468 if (!(acceptedAssetIds(assetId)))
469469 then throw("asset not accepted")
470470 else if ((amount == 0))
471471 then throw("Offer of 0 not allowed")
472472 else if (!(validateMinSell(assetId, amount)))
473473 then throw("Wrong minimum sell price")
474474 else {
475475 let saleOwner = getSaleOwnerAndStatus(nftId)
476476 [StringEntry((getBidKey(offerOwner, nftId, saleOwner, id) + "_OPEN"), ((((((((((((((toString(date) + "_") + toString(amount)) + "_") + assetId) + "_") + nftId) + "_") + artId) + "_") + creatorAddr) + "_") + offerOwner) + "_") + id))]
477477 }
478478 }
479479 }
480480
481481
482482
483483 @Callable(i)
484484 func acceptOffer (nftId,offerId,offerOwner) = {
485485 let $t01728417377 = provideBaseData(i, nftId)
486486 let id = $t01728417377._1
487487 let caller = $t01728417377._2
488488 let date = $t01728417377._3
489489 let isValidNFT = $t01728417377._4
490490 let artId = $t01728417377._5
491491 let creatorAddr = $t01728417377._6
492492 let artSignID = $t01728417377._7
493493 if (!(isValidNFT))
494494 then throw("Not a valid nft")
495495 else {
496496 let saleOwner = getSaleOwnerAndStatus(nftId)
497497 if ((caller != saleOwner))
498498 then throw("Only sale owner can accept offer")
499499 else {
500500 let bidKey = getBidKey(offerOwner, nftId, saleOwner, offerId)
501501 let $t01763817693 = getBidData(bidKey)
502502 let bidDataArr = $t01763817693._1
503503 let assetId = $t01763817693._2
504504 let bidData = $t01763817693._3
505505 let saleKey = getSaleKey(saleOwner, nftId, artId, creatorAddr)
506506 let saleInfo = getStrByK((saleKey + "_OPEN"))
507507 if ((size(saleInfo) == 0))
508508 then throw("Sale Not found!")
509509 else {
510510 let amount = value(parseInt(bidDataArr[1]))
511511 let $t01793618067 = setTransfers(amount, assetId, nftId, creatorAddr, saleOwner, bidDataArr[6])
512512 let commissions = $t01793618067._1
513513 let creatorFee = $t01793618067._2
514514 let ownerFee = $t01793618067._3
515515 let collectorNFT = $t01793618067._4
516516 let assetIdStr = if (isDefined(assetId))
517517 then toBase58String(value(assetId))
518518 else "WAVES"
519519 ([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(), creatorFee, ownerFee, collectorNFT] ++ commissions)
520520 }
521521 }
522522 }
523523 }
524524
525525
526526
527527 @Callable(i)
528528 func cancelOffer (nftId,offerId,offerOwner,saleOwner) = {
529529 let $t01888718962 = idCallerDate(i)
530530 let id = $t01888718962._1
531531 let caller = $t01888718962._2
532532 let date = $t01888718962._3
533533 if (if ((caller != offerOwner))
534534 then (caller != saleOwner)
535535 else false)
536536 then throw("You cannot cancel this offer.")
537537 else {
538538 let bidKey = getBidKey(offerOwner, nftId, saleOwner, offerId)
539539 let $t01913619191 = getBidData(bidKey)
540540 let bidDataArr = $t01913619191._1
541541 let assetId = $t01913619191._2
542542 let bidData = $t01913619191._3
543543 [DeleteEntry((bidKey + "_OPEN")), StringEntry((bidKey + "_CANCELLED"), ((((bidData + "_CANCELLED_") + toString(date)) + "_") + id)), ScriptTransfer(Address(fromBase58String(caller)), parseIntValue(bidDataArr[1]), assetId)]
544544 }
545545 }
546546
547547

github/deemru/w8io/3ef1775 
79.29 ms