tx · FTDLWBgCoFTywtZZzEWhQ9qDfbLsKJVEVZEu7s7kXGJx

3N2eA4yzXa4wTj7pP8r6G144RRxZW7cmq4p:  -0.01500000 Waves

2022.11.30 07:14 [2339352] smart account 3N2eA4yzXa4wTj7pP8r6G144RRxZW7cmq4p > SELF 0.00000000 Waves

{ "type": 13, "id": "FTDLWBgCoFTywtZZzEWhQ9qDfbLsKJVEVZEu7s7kXGJx", "fee": 1500000, "feeAssetId": null, "timestamp": 1669781684588, "version": 2, "chainId": 84, "sender": "3N2eA4yzXa4wTj7pP8r6G144RRxZW7cmq4p", "senderPublicKey": "Hh3eFP2XFetZSfTxQiM1Ps96f68zi8Zh5ghhCZdjgdFs", "proofs": [ "44qECYDoTLRxLrhwzkQ68d3X3VKXY2Buva7NaSb6DYZh1MjtTete2Z2vcqstKTzuJoScNjgypTfVR3aBa6eLYMg1" ], "script": "base64:BgI5CAISBAoCCAgSBAoCBAgSBAoCAQgSBQoDCAEIEgMKAQgSAwoBCBIDCgEIEgUKAwgICBIGCgQICAgINAEJZ2V0U3RyQnlLAQNrZXkJAQt2YWx1ZU9yRWxzZQIJAJ0IAgUEdGhpcwUDa2V5AgAACHVuaXRUZXN0BwAJb3JhY2xlRmVlCQEFdmFsdWUBCQCmCAEJAQlnZXRTdHJCeUsBAg9jb25mX29yYWNsZV9mZWUAC2ZlZVJlY2VpdmVyCQEJZ2V0U3RyQnlLAQIRY29uZl9mZWVfcmVjZWl2ZXIADGFydHdvcmtzRGFwcAkBBXZhbHVlAQkApggBCQEJZ2V0U3RyQnlLAQISY29uZl9hcnR3b3Jrc19kYXBwAAh1c2VyRGFwcAMFCHVuaXRUZXN0CQEFdmFsdWUBCQCmCAECIzNNdDRSR01FeWpTV1lBb2NUUHFkNTV3ZEhRUUIzUFUyVUNtCQEFdmFsdWUBCQCmCAEJAQlnZXRTdHJCeUsBAg9jb25mX3VzZXJzX2RhcHAAC3NpZ25Bc3NldElkCQDZBAEJAQlnZXRTdHJCeUsBAhhjb25mX2FjY2VwdGVkX2Fzc2V0X1NJR04AC3VzZG5Bc3NldElkCQDZBAEJAQlnZXRTdHJCeUsBAhhjb25mX2FjY2VwdGVkX2Fzc2V0X1VTRE4AC3VzZHRBc3NldElkCQDZBAEJAQlnZXRTdHJCeUsBAhhjb25mX2FjY2VwdGVkX2Fzc2V0X1VTRFQADHdhdmVzQXNzZXRJZAEAAAVjaHJpcwkBCWdldFN0ckJ5SwECDGNvbmZfYWRtaW5fMQAHc2lnbkN1dAADAA11c2VyU3VzcGVuZGVkAglTVVNQRU5ERUQAC3VzZXJSZW1vdmVkAgdSRU1PVkVEAAphcnRJbGxlZ2FsAgdJTExFR0FMAAxhcnRTdXNwZW5kZWQCCVNVU1BFTkRFRAAOZGFwcFJ1bm5pbmdLZXkCFGNvbmZfZGFwcF9pc19ydW5uaW5nABFtYWludGVuYW5jZU1TR0tleQIUY29uZl9tYWludGVuYW5jZV9tc2cAC2RhcHBSdW5uaW5nCQELdmFsdWVPckVsc2UCCQCbCAIFBHRoaXMFDmRhcHBSdW5uaW5nS2V5BgAObWFpbnRlbmFuY2VNU0cJAQt2YWx1ZU9yRWxzZQIJAJ0IAgUEdGhpcwURbWFpbnRlbmFuY2VNU0dLZXkCAAAJbnVtU2FsZXNLAgludW1fc2FsZXMBDWdldFVzZXJTdHJCeUsBA2tleQkBC3ZhbHVlT3JFbHNlAgkAnQgCBQh1c2VyRGFwcAUDa2V5AgVFcnJvcgETZ2V0QXJ0d29ya1JveWFsdGllcwEDa2V5CQELdmFsdWVPckVsc2UCCQCaCAIFDGFydHdvcmtzRGFwcAUDa2V5AOgHAQxnZXRBcnRTdHJCeUsBA2tleQkBC3ZhbHVlT3JFbHNlAgkAnQgCBQxhcnR3b3Jrc0RhcHAFA2tleQIAAQlnZXRJbnRCeUsBA2tleQkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzBQNrZXkAAAENa2V5VXNlclN0YXR1cwEEYWRkcgkArAICAgx1c2VyX3N0YXR1c18FBGFkZHIBE2tleUFydHdvcmtSb3lhbHRpZXMCBmNhbGxlcgVhcnRJZAkArAICCQCsAgIJAKwCAgIOYXJ0X3JveWFsdGllc18FBWFydElkAgFfBQZjYWxsZXIBCWtleVNpZ25JRAIKYXJ0aXN0QWRkcgVhcnRJZAkArAICCQCsAgIJAKwCAgILYXJ0X3NpZ25pZF8FBWFydElkAgFfBQphcnRpc3RBZGRyAQdrZXlGbGFnAgphcnRpc3RBZGRyBWFydElkCQCsAgIJAKwCAgkArAICAglhcnRfZmxhZ18FBWFydElkAgFfBQphcnRpc3RBZGRyAQprZXlORlREYXRhAQJpZAkArAICAgRuZnRfBQJpZAEKZ2V0U2FsZUtleQQGY2FsbGVyBW5mdElkBWFydElkC2NyZWF0b3JBZGRyCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgICDXNhbGUybmRfaW5mb18FBmNhbGxlcgIBXwUFbmZ0SWQCAV8FBWFydElkAgFfBQtjcmVhdG9yQWRkcgEJZ2V0QmlkS2V5BApvZmZlck93bmVyBW5mdElkCXNhbGVPd25lcgdvZmZlcklkCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgICCW9mZmVyMm5kXwUKb2ZmZXJPd25lcgIBXwUFbmZ0SWQCAV8FCXNhbGVPd25lcgIBXwUHb2ZmZXJJZAETZ2V0SW50QnlLRnJvbU9yYWNsZQEDa2V5CQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJoIAgUJb3JhY2xlRmVlBQNrZXkCH0ludGVnZXIgdW5kZWZpbmUgb3IgMCBpbiBvcmFjbGUAGWN1cnJlbnRDZXJ0aWZpY2F0aW9uUHJpY2UJARNnZXRJbnRCeUtGcm9tT3JhY2xlAQkArAICAhJjZXJ0aWZpY2F0aW9uX2ZlZV8JANgEAQULc2lnbkFzc2V0SWQBEmtleUFydGlzdEFnZW50QWRkcgEKYXJ0aXN0QWRkcgkArAICAg1hcnRpc3RfYWdlbnRfBQphcnRpc3RBZGRyARFrZXlTZWNvbmRhcnlTaGFyZQEKYXJ0aXN0QWRkcgkArAICAhdhcnRpc3RfYWdlbnRfc2Vjb25kYXJ5XwUKYXJ0aXN0QWRkcgEMaWRDYWxsZXJEYXRlAQFpAwkBASEBBQtkYXBwUnVubmluZwkAAgEFDm1haW50ZW5hbmNlTVNHCQCVCgMJANgEAQgFAWkNdHJhbnNhY3Rpb25JZAkA2AQBCAgFAWkGY2FsbGVyBWJ5dGVzCAUJbGFzdEJsb2NrCXRpbWVzdGFtcAEJaXNQYXltZW50AQFpAwkAAAIJAJADAQgFAWkIcGF5bWVudHMAAAkAAgECE05vIHBheW1lbnQgYXR0YWNoZWQEB3BheW1lbnQJAQV2YWx1ZQEJAJEDAggFAWkIcGF5bWVudHMAAAQGYW1vdW50CQEFdmFsdWUBCAUHcGF5bWVudAZhbW91bnQJAJQKAgUHcGF5bWVudAUGYW1vdW50AQxhc3NldElzVmFsaWQBDGFzc2V0RGV0YWlscwMDAwkAAAIIBQxhc3NldERldGFpbHMIcXVhbnRpdHkAAQkAAAIIBQxhc3NldERldGFpbHMIZGVjaW1hbHMAAAcJAAACCAUMYXNzZXREZXRhaWxzCnJlaXNzdWFibGUHBwkAAAIIBQxhc3NldERldGFpbHMGaXNzdWVyBQxhcnR3b3Jrc0RhcHAHAQxpc1NpZ25BcnRORlQBAmlkBAxhc3NldERldGFpbHMJAQV2YWx1ZQEJAOwHAQUCaWQJAQxhc3NldElzVmFsaWQBBQxhc3NldERldGFpbHMBEGFjY2VwdGVkQXNzZXRJZHMBB2Fzc2V0SWQDAwMDAwkBAiE9AgUHYXNzZXRJZAkA2AQBBQtzaWduQXNzZXRJZAkBAiE9AgUHYXNzZXRJZAkA2AQBBQx3YXZlc0Fzc2V0SWQHCQECIT0CBQdhc3NldElkAgVXQVZFUwcJAQIhPQIFB2Fzc2V0SWQJANgEAQULdXNkbkFzc2V0SWQHCQECIT0CBQdhc3NldElkCQDYBAEFC3VzZHRBc3NldElkBwcGAQ1nZXRCaWRBc3NldElkAQdhc3NldElkAwkAAAIFB2Fzc2V0SWQCBVdBVkVTBQR1bml0CQDZBAEFB2Fzc2V0SWQBFWdldFNhbGVPd25lckFuZFN0YXR1cwEFbmZ0aWQECXNhbGVPd25lcgkBCWdldFN0ckJ5SwEJAKwCAgIWY3VycmVudF9vd25lcl9vbl9kYXBwXwUFbmZ0aWQDCQAAAgkAsQIBBQlzYWxlT3duZXIAAAkAAgECDU5GVCBub3QgZm91bmQECnNhbGVTdGF0dXMJAQlnZXRTdHJCeUsBCQCsAgIJAKwCAgkArAICAg9zYWxlMm5kX3N0YXR1c18FCXNhbGVPd25lcgIBXwUFbmZ0aWQDCQECIT0CBQpzYWxlU3RhdHVzAgRPUEVOCQACAQIQTkZUIG5vdCBmb3Igc2FsZQUJc2FsZU93bmVyAQpnZXRCaWREYXRhAQNrZXkEB2JpZERhdGEJAQlnZXRTdHJCeUsBCQCsAgIFA2tleQIFX09QRU4DCQAAAgUHYmlkRGF0YQIACQACAQIPT2ZmZXIgbm90IGZvdW5kBApiaWREYXRhQXJyCQC1CQIFB2JpZERhdGECAV8EB2Fzc2V0SWQJAQ1nZXRCaWRBc3NldElkAQkAkQMCBQpiaWREYXRhQXJyAAIJAJUKAwUKYmlkRGF0YUFycgUHYXNzZXRJZAUHYmlkRGF0YQEKYXJ0SXNWYWxpZAEJYXJ0U3RhdHVzAwkBAiE9AgUJYXJ0U3RhdHVzBQphcnRJbGxlZ2FsCQECIT0CBQlhcnRTdGF0dXMFDGFydFN1c3BlbmRlZAcBDmNoZWNrQXJ0U3RhdHVzAgRhZGRyAmlkBAlhcnRTdGF0dXMJAQxnZXRBcnRTdHJCeUsBCQEHa2V5RmxhZwIFBGFkZHIFAmlkAwkBCmFydElzVmFsaWQBBQlhcnRTdGF0dXMGCQACAQkArAICAhxPcmlnaW5hbCBBcnR3b3JrIGZsYWdnZWQgYXMgBQlhcnRTdGF0dXMBEWNoZWNrQXJ0aXN0U3RhdHVzAQRhZGRyBAxhcnRpc3RTdGF0dXMJAQ1nZXRVc2VyU3RyQnlLAQkBDWtleVVzZXJTdGF0dXMBBQRhZGRyAwkBD2NvbnRhaW5zRWxlbWVudAIJAMwIAgUNdXNlclN1c3BlbmRlZAkAzAgCBQt1c2VyUmVtb3ZlZAUDbmlsBQxhcnRpc3RTdGF0dXMJAAIBCQCsAgICEE9yaWdpbmFsIEFydGlzdCAFDGFydGlzdFN0YXR1cwYBDGNoZWNrTkZUSW5mbwEHYXNzZXRJZAQHbmZ0RGF0YQkAtQkCCQEMZ2V0QXJ0U3RyQnlLAQkBCmtleU5GVERhdGEBBQdhc3NldElkAgFfBAlhcnRTaWduSUQJAQxnZXRBcnRTdHJCeUsBCQEJa2V5U2lnbklEAgkAkQMCBQduZnREYXRhAAYJAJEDAgUHbmZ0RGF0YQAFAwMJAQEhAQkBDmNoZWNrQXJ0U3RhdHVzAgkAkQMCBQduZnREYXRhAAYJAJEDAgUHbmZ0RGF0YQAFCQEBIQEJARFjaGVja0FydGlzdFN0YXR1cwEJAJEDAgUHbmZ0RGF0YQAGBwkAlgoEBwkAkQMCBQduZnREYXRhAAUJAJEDAgUHbmZ0RGF0YQAGBQlhcnRTaWduSUQJAJYKBAYJAJEDAgUHbmZ0RGF0YQAFCQCRAwIFB25mdERhdGEABgUJYXJ0U2lnbklEAQxzZXRUcmFuc2ZlcnMGBmFtb3VudAdhc3NldElkBW5mdGlkC2NyZWF0b3JBZGRyCXNhbGVPd25lcgZjYWxsZXIECmNyZWF0b3JDdXQJARNnZXRBcnR3b3JrUm95YWx0aWVzAQkBE2tleUFydHdvcmtSb3lhbHRpZXMCBQtjcmVhdG9yQWRkcgUFbmZ0aWQDBgkAAgEJAKwCAgkArAICCQCsAgIJAKwCAgkBE2tleUFydHdvcmtSb3lhbHRpZXMCBQtjcmVhdG9yQWRkcgUFbmZ0aWQCAyAvIAkApAMBBQZhbW91bnQCAyAvIAkApAMBBQpjcmVhdG9yQ3V0BAVhZ2VudAkBC3ZhbHVlT3JFbHNlAgkAnQgCBQh1c2VyRGFwcAkBEmtleUFydGlzdEFnZW50QWRkcgEFC2NyZWF0b3JBZGRyBQtmZWVSZWNlaXZlcgQKYWdlbnRTaGFyZQkBC3ZhbHVlT3JFbHNlAgkAmggCBQh1c2VyRGFwcAkBEWtleVNlY29uZGFyeVNoYXJlAQULY3JlYXRvckFkZHIAAAQNYW1vdW50Rm9yU2lnbgkAawMFBmFtb3VudAUHc2lnbkN1dABkBBBhbW91bnRGb3JDcmVhdG9yCQBrAwUGYW1vdW50BQpjcmVhdG9yQ3V0AJBOBA5hbW91bnRGb3JPd25lcgkAZQIFBmFtb3VudAkAZAIFDWFtb3VudEZvclNpZ24FEGFtb3VudEZvckNyZWF0b3IEDmFtb3VudEZvckFnZW50AwMJAQIhPQIFBWFnZW50BQtmZWVSZWNlaXZlcgkAZgIFCmFnZW50U2hhcmUAAAcJAGsDBQZhbW91bnQFCmFnZW50U2hhcmUAZAAABAtjb21taXNzaW9ucwMJAQIhPQIFDmFtb3VudEZvckFnZW50AAAJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwkBB0FkZHJlc3MBCQDZBAEFC2ZlZVJlY2VpdmVyCQBlAgUNYW1vdW50Rm9yU2lnbgUOYW1vdW50Rm9yQWdlbnQFB2Fzc2V0SWQJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwkBB0FkZHJlc3MBCQDZBAEFBWFnZW50BQ5hbW91bnRGb3JBZ2VudAUHYXNzZXRJZAUDbmlsCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMJAQdBZGRyZXNzAQkA2QQBBQtmZWVSZWNlaXZlcgUNYW1vdW50Rm9yU2lnbgUHYXNzZXRJZAUDbmlsBApjcmVhdG9yRmVlCQEOU2NyaXB0VHJhbnNmZXIDCQEHQWRkcmVzcwEJANkEAQULY3JlYXRvckFkZHIFEGFtb3VudEZvckNyZWF0b3IFB2Fzc2V0SWQECG93bmVyRmVlCQEOU2NyaXB0VHJhbnNmZXIDCQEHQWRkcmVzcwEJANkEAQUJc2FsZU93bmVyBQ5hbW91bnRGb3JPd25lcgUHYXNzZXRJZAQMY29sbGVjdG9yTkZUCQEOU2NyaXB0VHJhbnNmZXIDCQEHQWRkcmVzcwEJANkEAQUGY2FsbGVyAAEJANkEAQUFbmZ0aWQJAJYKBAULY29tbWlzc2lvbnMFCmNyZWF0b3JGZWUFCG93bmVyRmVlBQxjb2xsZWN0b3JORlQBD3ZhbGlkYXRlTWluU2VsbAIHYXNzZXRJZAVwcmljZQQMbWluU2VsbFdhdmVzAwUIdW5pdFRlc3QACgkBE2dldEludEJ5S0Zyb21PcmFjbGUBAg53YXZlc19taW5fc2VsbAQLbWluU2VsbFVzZG4AwIQ9BAttaW5TZWxsU2lnbgMFCHVuaXRUZXN0AAEJAGgCBRljdXJyZW50Q2VydGlmaWNhdGlvblByaWNlAAIDAwMDAwMJAAACBQdhc3NldElkCQDYBAEFC3VzZG5Bc3NldElkCQBmAgULbWluU2VsbFVzZG4FBXByaWNlBwkBAiE9AgUFcHJpY2UAAAcGAwMJAAACBQdhc3NldElkCQDYBAEFC3VzZHRBc3NldElkCQBmAgULbWluU2VsbFVzZG4FBXByaWNlBwkBAiE9AgUFcHJpY2UAAAcGAwMJAAACBQdhc3NldElkCQDYBAEFC3NpZ25Bc3NldElkCQBmAgULbWluU2VsbFNpZ24FBXByaWNlBwkBAiE9AgUFcHJpY2UAAAcGAwMDCQAAAgUHYXNzZXRJZAkA2AQBBQx3YXZlc0Fzc2V0SWQGCQAAAgUHYXNzZXRJZAIFV0FWRVMJAGYCBQxtaW5TZWxsV2F2ZXMFBXByaWNlBwkBAiE9AgUFcHJpY2UAAAcHBgEPcHJvdmlkZUJhc2VEYXRhAgFpBW5mdElkBAskdDA5ODI1OTg2NQkBDGlkQ2FsbGVyRGF0ZQEFAWkEAmlkCAULJHQwOTgyNTk4NjUCXzEEBmNhbGxlcggFCyR0MDk4MjU5ODY1Al8yBARkYXRlCAULJHQwOTgyNTk4NjUCXzMECyR0MDk4Njk5OTM4CQEMY2hlY2tORlRJbmZvAQUFbmZ0SWQECmlzVmFsaWRORlQIBQskdDA5ODY5OTkzOAJfMQQFYXJ0SWQIBQskdDA5ODY5OTkzOAJfMgQLY3JlYXRvckFkZHIIBQskdDA5ODY5OTkzOAJfMwQJYXJ0U2lnbklECAULJHQwOTg2OTk5MzgCXzQJAJkKBwUCaWQFBmNhbGxlcgUEZGF0ZQUKaXNWYWxpZE5GVAUFYXJ0SWQFC2NyZWF0b3JBZGRyBQlhcnRTaWduSUQBDnVwZGF0ZU51bVNhbGVzAAQIbnVtU2FsZXMJAQlnZXRJbnRCeUsBBQludW1TYWxlc0sJAQxJbnRlZ2VyRW50cnkCBQludW1TYWxlc0sJAGQCBQhudW1TYWxlcwABCQZpbnZva2UBB3NldENvbmYCA2tleQN2YWwEBmNhbGxlcgkApQgBCAUGaW52b2tlBmNhbGxlcgMJAQ9jb250YWluc0VsZW1lbnQCCQDMCAIFBWNocmlzCQDMCAIJAKUIAQUEdGhpcwUDbmlsBQZjYWxsZXIDCQEIY29udGFpbnMCBQNrZXkCBWNvbmZfCQDMCAIJAQtTdHJpbmdFbnRyeQIFA2tleQUDdmFsBQNuaWwJAAIBAiBFbnRyaWVzIHN0YXJ0aW5nIHdpdGggY29uZl8gb25seQkAAgECIllvdSBhcmUgbm90IGFsbG93ZWQgdG8gY2hhbmdlIHRoaXMGaW52b2tlAQphcHBSdW5uaW5nAgZpc0xpdmUHbWVzc2FnZQQGY2FsbGVyCQClCAEIBQZpbnZva2UGY2FsbGVyBAJpZAkA2AQBCAUGaW52b2tlDXRyYW5zYWN0aW9uSWQDCQEPY29udGFpbnNFbGVtZW50AgkAzAgCBQVjaHJpcwkAzAgCCQClCAEFBHRoaXMFA25pbAUGY2FsbGVyCQDMCAIJAQxCb29sZWFuRW50cnkCBQ5kYXBwUnVubmluZ0tleQUGaXNMaXZlCQDMCAIJAQtTdHJpbmdFbnRyeQIFEW1haW50ZW5hbmNlTVNHS2V5BQdtZXNzYWdlBQNuaWwJAAIBAiJZb3UgYXJlIG5vdCBhbGxvd2VkIHRvIGNoYW5nZSB0aGlzAWkBB3NlbGxORlQCBXByaWNlBWFzc2V0BA0kdDAxMTA0MzExMDc5CQEJaXNQYXltZW50AQUBaQQHcGF5bWVudAgFDSR0MDExMDQzMTEwNzkCXzEEBmFtb3VudAgFDSR0MDExMDQzMTEwNzkCXzIDCQECIT0CBQZhbW91bnQAAQkAAgECD05vIE5GVCBhdHRhY2hlZAQFbmZ0SWQDAwkBCWlzRGVmaW5lZAEIBQdwYXltZW50B2Fzc2V0SWQJAQxpc1NpZ25BcnRORlQBCQEFdmFsdWUBCAUHcGF5bWVudAdhc3NldElkBwkA2AQBCQEFdmFsdWUBCAUHcGF5bWVudAdhc3NldElkCQACAQIbT25seSBTSUdOIEFydCBORlQgYWNjZXB0ZWQuBA0kdDAxMTMxNzExNDEwCQEPcHJvdmlkZUJhc2VEYXRhAgUBaQUFbmZ0SWQEAmlkCAUNJHQwMTEzMTcxMTQxMAJfMQQGY2FsbGVyCAUNJHQwMTEzMTcxMTQxMAJfMgQEZGF0ZQgFDSR0MDExMzE3MTE0MTACXzMECmlzVmFsaWRORlQIBQ0kdDAxMTMxNzExNDEwAl80BAVhcnRJZAgFDSR0MDExMzE3MTE0MTACXzUEC2NyZWF0b3JBZGRyCAUNJHQwMTEzMTcxMTQxMAJfNgQJYXJ0U2lnbklECAUNJHQwMTEzMTcxMTQxMAJfNwMJAAACCQCxAgEFCWFydFNpZ25JRAAACQACAQIdQXJ0d29yayBub3QgZm91bmQgb24gU0lHTiBBcnQDCQEBIQEFCmlzVmFsaWRORlQJAAIBAg9Ob3QgYSB2YWxpZCBuZnQDCQEBIQEJARBhY2NlcHRlZEFzc2V0SWRzAQUFYXNzZXQJAAIBAidPbmx5IFNJR04sIFVTRE4sIFVTRFQgb3IgV0FWRVMgYWNjZXB0ZWQDCQEBIQEJAQ92YWxpZGF0ZU1pblNlbGwCBQVhc3NldAUFcHJpY2UJAAIBAhhXcm9uZyBtaW5pbXVtIHNlbGwgcHJpY2UJAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICCQEKZ2V0U2FsZUtleQQFBmNhbGxlcgUFbmZ0SWQFBWFydElkBQtjcmVhdG9yQWRkcgIFX09QRU4JAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKQDAQUEZGF0ZQIBXwkApAMBBQVwcmljZQIBXwUFYXNzZXQCAV8FBW5mdElkAgFfBQVhcnRJZAIBXwULY3JlYXRvckFkZHICAV8FAmlkCQDMCAIJAQtTdHJpbmdFbnRyeQIJAKwCAgkArAICCQCsAgICD3NhbGUybmRfc3RhdHVzXwUGY2FsbGVyAgFfBQVuZnRJZAIET1BFTgkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgICFmN1cnJlbnRfb3duZXJfb25fZGFwcF8FBW5mdElkBQZjYWxsZXIFA25pbAFpAQ91cGRhdGVTYWxlUHJpY2UDBW5mdElkBXByaWNlBWFzc2V0BA0kdDAxMjMxNDEyNDA3CQEPcHJvdmlkZUJhc2VEYXRhAgUBaQUFbmZ0SWQEAmlkCAUNJHQwMTIzMTQxMjQwNwJfMQQGY2FsbGVyCAUNJHQwMTIzMTQxMjQwNwJfMgQEZGF0ZQgFDSR0MDEyMzE0MTI0MDcCXzMECmlzVmFsaWRORlQIBQ0kdDAxMjMxNDEyNDA3Al80BAVhcnRJZAgFDSR0MDEyMzE0MTI0MDcCXzUEC2NyZWF0b3JBZGRyCAUNJHQwMTIzMTQxMjQwNwJfNgQJYXJ0U2lnbklECAUNJHQwMTIzMTQxMjQwNwJfNwMJAAACCQCxAgEFCWFydFNpZ25JRAAACQACAQIwQXJ0d29yayBub3QgZm91bmQgb24gU0lHTiBBcnQsIGNhbmNlbCB5b3VyIHNhbGUuAwkBASEBBQppc1ZhbGlkTkZUCQACAQIPTm90IGEgdmFsaWQgbmZ0BAlzYWxlT3duZXIJAQlnZXRTdHJCeUsBCQCsAgICFmN1cnJlbnRfb3duZXJfb25fZGFwcF8FBW5mdElkAwkBAiE9AgUJc2FsZU93bmVyBQZjYWxsZXIJAAIBAhZZb3UgZG9uJ3Qgb3duIHRoaXMgTkZUBApzYWxlU3RhdHVzCQEJZ2V0U3RyQnlLAQkArAICCQCsAgIJAKwCAgIPc2FsZTJuZF9zdGF0dXNfBQZjYWxsZXICAV8FBW5mdElkAwkBAiE9AgUKc2FsZVN0YXR1cwIET1BFTgkAAgECD1NhbGUgbm90IGFjdGl2ZQMJAQEhAQkBEGFjY2VwdGVkQXNzZXRJZHMBBQVhc3NldAkAAgECJ09ubHkgU0lHTiwgVVNETiwgVVNEVCBvciBXQVZFUyBhY2NlcHRlZAMJAQEhAQkBD3ZhbGlkYXRlTWluU2VsbAIFBWFzc2V0BQVwcmljZQkAAgECGFdyb25nIG1pbmltdW0gc2VsbCBwcmljZQQHc2FsZUtleQkBCmdldFNhbGVLZXkEBQZjYWxsZXIFBW5mdElkBQVhcnRJZAULY3JlYXRvckFkZHIECHNhbGVJbmZvCQC1CQIJAQlnZXRTdHJCeUsBCQCsAgIFB3NhbGVLZXkCBV9PUEVOAgFfCQDMCAIJAQtTdHJpbmdFbnRyeQIJAKwCAgUHc2FsZUtleQIFX09QRU4JAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAJEDAgUIc2FsZUluZm8AAAIBXwkApAMBBQVwcmljZQIBXwUFYXNzZXQCAV8JAJEDAgUIc2FsZUluZm8AAwIBXwkAkQMCBQhzYWxlSW5mbwAEAgFfCQCRAwIFCHNhbGVJbmZvAAUCAV8JAJEDAgUIc2FsZUluZm8ABgUDbmlsAWkBCmNhbmNlbFNhbGUBBW5mdElkBA0kdDAxMzU4NDEzODI4CQEPcHJvdmlkZUJhc2VEYXRhAgUBaQUFbmZ0SWQEAmlkCAUNJHQwMTM1ODQxMzgyOAJfMQQGY2FsbGVyCAUNJHQwMTM1ODQxMzgyOAJfMgQEZGF0ZQgFDSR0MDEzNTg0MTM4MjgCXzMECmlzVmFsaWRORlQIBQ0kdDAxMzU4NDEzODI4Al80BAVhcnRJZAgFDSR0MDEzNTg0MTM4MjgCXzUEC2NyZWF0b3JBZGRyCAUNJHQwMTM1ODQxMzgyOAJfNgQJYXJ0U2lnbklECAUNJHQwMTM1ODQxMzgyOAJfNwQJc2FsZU93bmVyCQEJZ2V0U3RyQnlLAQkArAICAhZjdXJyZW50X293bmVyX29uX2RhcHBfBQVuZnRJZAMJAQIhPQIFCXNhbGVPd25lcgUGY2FsbGVyCQACAQIWWW91IGRvbid0IG93biB0aGlzIE5GVAQKc2FsZVN0YXR1cwkBCWdldFN0ckJ5SwEJAKwCAgkArAICCQCsAgICD3NhbGUybmRfc3RhdHVzXwUGY2FsbGVyAgFfBQVuZnRJZAMJAQIhPQIFCnNhbGVTdGF0dXMCBE9QRU4JAAIBAg9TYWxlIG5vdCBhY3RpdmUEB3NhbGVLZXkJAQpnZXRTYWxlS2V5BAUGY2FsbGVyBQVuZnRJZAUFYXJ0SWQFC2NyZWF0b3JBZGRyBAhzYWxlSW5mbwkBCWdldFN0ckJ5SwEJAKwCAgUHc2FsZUtleQIFX09QRU4JAMwIAgkBC0RlbGV0ZUVudHJ5AQkArAICBQdzYWxlS2V5AgVfT1BFTgkAzAgCCQELRGVsZXRlRW50cnkBCQCsAgIJAKwCAgkArAICAg9zYWxlMm5kX3N0YXR1c18FBmNhbGxlcgIBXwUFbmZ0SWQJAMwIAgkBC0RlbGV0ZUVudHJ5AQkArAICAhZjdXJyZW50X293bmVyX29uX2RhcHBfBQVuZnRJZAkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgIJAKwCAgkArAICBQdzYWxlS2V5AgFfBQJpZAIKX0NBTkNFTExFRAkArAICCQCsAgIJAKwCAgkArAICBQhzYWxlSW5mbwILX0NBTkNFTExFRF8JAKQDAQUEZGF0ZQIBXwUCaWQJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwkBB0FkZHJlc3MBCQDZBAEFBmNhbGxlcgABCQDZBAEFBW5mdElkBQNuaWwBaQEGYnV5TkZUAQVuZnRJZAQNJHQwMTQ2ODIxNDc3NQkBD3Byb3ZpZGVCYXNlRGF0YQIFAWkFBW5mdElkBAJpZAgFDSR0MDE0NjgyMTQ3NzUCXzEEBmNhbGxlcggFDSR0MDE0NjgyMTQ3NzUCXzIEBGRhdGUIBQ0kdDAxNDY4MjE0Nzc1Al8zBAppc1ZhbGlkTkZUCAUNJHQwMTQ2ODIxNDc3NQJfNAQFYXJ0SWQIBQ0kdDAxNDY4MjE0Nzc1Al81BAtjcmVhdG9yQWRkcggFDSR0MDE0NjgyMTQ3NzUCXzYECWFydFNpZ25JRAgFDSR0MDE0NjgyMTQ3NzUCXzcDCQAAAgkAsQIBBQlhcnRTaWduSUQAAAkAAgECMEFydHdvcmsgbm90IGZvdW5kIG9uIFNJR04gQXJ0LCBjYW5jZWwgeW91ciBzYWxlLgMJAQEhAQUKaXNWYWxpZE5GVAkAAgECD05vdCBhIHZhbGlkIG5mdAQJc2FsZU93bmVyCQEVZ2V0U2FsZU93bmVyQW5kU3RhdHVzAQUFbmZ0SWQEB3NhbGVLZXkJAQpnZXRTYWxlS2V5BAUJc2FsZU93bmVyBQVuZnRJZAUFYXJ0SWQFC2NyZWF0b3JBZGRyBAhzYWxlSW5mbwkBCWdldFN0ckJ5SwEJAKwCAgUHc2FsZUtleQIFX09QRU4DCQAAAgkAsQIBBQhzYWxlSW5mbwAACQACAQIPU2FsZSBOb3QgZm91bmQhBA1zYWxlSW5mb0FycmF5CQC1CQIFCHNhbGVJbmZvAgFfAwkAAAIJALYJAQkAkQMCBQ1zYWxlSW5mb0FycmF5AAEAAAkAAgECCk9mZmVyIG9ubHkEDSR0MDE1Mjg0MTUzMjAJAQlpc1BheW1lbnQBBQFpBAdwYXltZW50CAUNJHQwMTUyODQxNTMyMAJfMQQGYW1vdW50CAUNJHQwMTUyODQxNTMyMAJfMgQPcGF5bWVudEFzc2V0U3RyAwkBCWlzRGVmaW5lZAEIBQdwYXltZW50B2Fzc2V0SWQJANgEAQkBBXZhbHVlAQgFB3BheW1lbnQHYXNzZXRJZAIAAwMJAQIhPQIJAJEDAgUNc2FsZUluZm9BcnJheQABCQCkAwEFBmFtb3VudAYJAQIhPQIJAJEDAgUNc2FsZUluZm9BcnJheQACBQ9wYXltZW50QXNzZXRTdHIJAAIBAhpQYXltZW50IGluZm9zIGRvbid0IG1hdGNoLgQNJHQwMTU4MzQxNTk2NgkBDHNldFRyYW5zZmVycwYFBmFtb3VudAgFB3BheW1lbnQHYXNzZXRJZAUFbmZ0SWQFC2NyZWF0b3JBZGRyBQlzYWxlT3duZXIFBmNhbGxlcgQLY29tbWlzc2lvbnMIBQ0kdDAxNTgzNDE1OTY2Al8xBApjcmVhdG9yRmVlCAUNJHQwMTU4MzQxNTk2NgJfMgQIb3duZXJGZWUIBQ0kdDAxNTgzNDE1OTY2Al8zBAxjb2xsZWN0b3JORlQIBQ0kdDAxNTgzNDE1OTY2Al80CQDOCAIJAMwIAgkBC0RlbGV0ZUVudHJ5AQkArAICBQdzYWxlS2V5AgVfT1BFTgkAzAgCCQELRGVsZXRlRW50cnkBCQCsAgIJAKwCAgkArAICAg9zYWxlMm5kX3N0YXR1c18FCXNhbGVPd25lcgIBXwUFbmZ0SWQJAMwIAgkBC0RlbGV0ZUVudHJ5AQkArAICAhZjdXJyZW50X293bmVyX29uX2RhcHBfBQVuZnRJZAkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgIJAKwCAgkArAICBQdzYWxlS2V5AgFfBQJpZAIHX0NMT1NFRAkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgUIc2FsZUluZm8CCF9DTE9TRURfCQCkAwEFBGRhdGUCAV8FAmlkAgFfBQZjYWxsZXIJAMwIAgkBDnVwZGF0ZU51bVNhbGVzAAkAzAgCBQpjcmVhdG9yRmVlCQDMCAIFCG93bmVyRmVlCQDMCAIFDGNvbGxlY3Rvck5GVAUDbmlsBQtjb21taXNzaW9ucwFpAQhzZXRPZmZlcgEFbmZ0SWQEDSR0MDE2Mzk0MTY0OTEJAQ9wcm92aWRlQmFzZURhdGECBQFpBQVuZnRJZAQCaWQIBQ0kdDAxNjM5NDE2NDkxAl8xBApvZmZlck93bmVyCAUNJHQwMTYzOTQxNjQ5MQJfMgQEZGF0ZQgFDSR0MDE2Mzk0MTY0OTECXzMECmlzVmFsaWRORlQIBQ0kdDAxNjM5NDE2NDkxAl80BAVhcnRJZAgFDSR0MDE2Mzk0MTY0OTECXzUEC2NyZWF0b3JBZGRyCAUNJHQwMTYzOTQxNjQ5MQJfNgQJYXJ0U2lnbklECAUNJHQwMTYzOTQxNjQ5MQJfNwMJAQEhAQUKaXNWYWxpZE5GVAkAAgECD05vdCBhIHZhbGlkIG5mdAQNJHQwMTY1NTUxNjU5MQkBCWlzUGF5bWVudAEFAWkEB3BheW1lbnQIBQ0kdDAxNjU1NTE2NTkxAl8xBAZhbW91bnQIBQ0kdDAxNjU1NTE2NTkxAl8yBAdhc3NldElkAwkBASEBCQEJaXNEZWZpbmVkAQgFB3BheW1lbnQHYXNzZXRJZAIFV0FWRVMJANgEAQkBBXZhbHVlAQgFB3BheW1lbnQHYXNzZXRJZAMJAQEhAQkBEGFjY2VwdGVkQXNzZXRJZHMBBQdhc3NldElkCQACAQISYXNzZXQgbm90IGFjY2VwdGVkAwkAAAIFBmFtb3VudAAACQACAQIWT2ZmZXIgb2YgMCBub3QgYWxsb3dlZAMJAQEhAQkBD3ZhbGlkYXRlTWluU2VsbAIFB2Fzc2V0SWQFBmFtb3VudAkAAgECGFdyb25nIG1pbmltdW0gc2VsbCBwcmljZQQJc2FsZU93bmVyCQEVZ2V0U2FsZU93bmVyQW5kU3RhdHVzAQUFbmZ0SWQJAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICCQEJZ2V0QmlkS2V5BAUKb2ZmZXJPd25lcgUFbmZ0SWQFCXNhbGVPd25lcgUCaWQCBV9PUEVOCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkApAMBBQRkYXRlAgFfCQCkAwEFBmFtb3VudAIBXwUHYXNzZXRJZAIBXwUFbmZ0SWQCAV8FBWFydElkAgFfBQtjcmVhdG9yQWRkcgIBXwUKb2ZmZXJPd25lcgIBXwUCaWQFA25pbAFpAQthY2NlcHRPZmZlcgMFbmZ0SWQHb2ZmZXJJZApvZmZlck93bmVyBA0kdDAxNzQxMjE3NTA1CQEPcHJvdmlkZUJhc2VEYXRhAgUBaQUFbmZ0SWQEAmlkCAUNJHQwMTc0MTIxNzUwNQJfMQQGY2FsbGVyCAUNJHQwMTc0MTIxNzUwNQJfMgQEZGF0ZQgFDSR0MDE3NDEyMTc1MDUCXzMECmlzVmFsaWRORlQIBQ0kdDAxNzQxMjE3NTA1Al80BAVhcnRJZAgFDSR0MDE3NDEyMTc1MDUCXzUEC2NyZWF0b3JBZGRyCAUNJHQwMTc0MTIxNzUwNQJfNgQJYXJ0U2lnbklECAUNJHQwMTc0MTIxNzUwNQJfNwMJAQEhAQUKaXNWYWxpZE5GVAkAAgECD05vdCBhIHZhbGlkIG5mdAQJc2FsZU93bmVyCQEVZ2V0U2FsZU93bmVyQW5kU3RhdHVzAQUFbmZ0SWQDCQECIT0CBQZjYWxsZXIFCXNhbGVPd25lcgkAAgECIE9ubHkgc2FsZSBvd25lciBjYW4gYWNjZXB0IG9mZmVyBAZiaWRLZXkJAQlnZXRCaWRLZXkEBQpvZmZlck93bmVyBQVuZnRJZAUJc2FsZU93bmVyBQdvZmZlcklkBA0kdDAxNzc2NjE3ODIxCQEKZ2V0QmlkRGF0YQEFBmJpZEtleQQKYmlkRGF0YUFycggFDSR0MDE3NzY2MTc4MjECXzEEB2Fzc2V0SWQIBQ0kdDAxNzc2NjE3ODIxAl8yBAdiaWREYXRhCAUNJHQwMTc3NjYxNzgyMQJfMwQHc2FsZUtleQkBCmdldFNhbGVLZXkEBQlzYWxlT3duZXIFBW5mdElkBQVhcnRJZAULY3JlYXRvckFkZHIECHNhbGVJbmZvCQEJZ2V0U3RyQnlLAQkArAICBQdzYWxlS2V5AgVfT1BFTgMJAAACCQCxAgEFCHNhbGVJbmZvAAAJAAIBAg9TYWxlIE5vdCBmb3VuZCEEBmFtb3VudAkBBXZhbHVlAQkAtgkBCQCRAwIFCmJpZERhdGFBcnIAAQQNJHQwMTgwNjQxODE5NQkBDHNldFRyYW5zZmVycwYFBmFtb3VudAUHYXNzZXRJZAUFbmZ0SWQFC2NyZWF0b3JBZGRyBQlzYWxlT3duZXIJAJEDAgUKYmlkRGF0YUFycgAGBAtjb21taXNzaW9ucwgFDSR0MDE4MDY0MTgxOTUCXzEECmNyZWF0b3JGZWUIBQ0kdDAxODA2NDE4MTk1Al8yBAhvd25lckZlZQgFDSR0MDE4MDY0MTgxOTUCXzMEDGNvbGxlY3Rvck5GVAgFDSR0MDE4MDY0MTgxOTUCXzQECmFzc2V0SWRTdHIDCQEJaXNEZWZpbmVkAQUHYXNzZXRJZAkA2AQBCQEFdmFsdWUBBQdhc3NldElkAgVXQVZFUwkAzggCCQDMCAIJAQtEZWxldGVFbnRyeQEJAKwCAgUHc2FsZUtleQIFX09QRU4JAMwIAgkBC0RlbGV0ZUVudHJ5AQkArAICBQZiaWRLZXkCBV9PUEVOCQDMCAIJAQtEZWxldGVFbnRyeQEJAKwCAgkArAICCQCsAgICD3NhbGUybmRfc3RhdHVzXwUJc2FsZU93bmVyAgFfBQVuZnRJZAkAzAgCCQELRGVsZXRlRW50cnkBCQCsAgICFmN1cnJlbnRfb3duZXJfb25fZGFwcF8FBW5mdElkCQDMCAIJAQtTdHJpbmdFbnRyeQIJAKwCAgUGYmlkS2V5AgdfQ0xPU0VECQCsAgIJAKwCAgkArAICCQCsAgIFB2JpZERhdGECCF9DTE9TRURfCQCkAwEFBGRhdGUCAV8FAmlkCQDMCAIJAQtTdHJpbmdFbnRyeQIJAKwCAgkArAICCQCsAgIFB3NhbGVLZXkCAV8FAmlkAgdfQ0xPU0VECQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIFCHNhbGVJbmZvAg5fQ0xPU0VELU9GRkVSXwkApAMBBQRkYXRlAgFfBQJpZAIBXwUKb2ZmZXJPd25lcgIBXwkApAMBBQZhbW91bnQCAV8FCmFzc2V0SWRTdHIJAMwIAgkBDnVwZGF0ZU51bVNhbGVzAAkAzAgCBQpjcmVhdG9yRmVlCQDMCAIFCG93bmVyRmVlCQDMCAIFDGNvbGxlY3Rvck5GVAUDbmlsBQtjb21taXNzaW9ucwFpAQtjYW5jZWxPZmZlcgQFbmZ0SWQHb2ZmZXJJZApvZmZlck93bmVyCXNhbGVPd25lcgQNJHQwMTkwMTUxOTA5MAkBDGlkQ2FsbGVyRGF0ZQEFAWkEAmlkCAUNJHQwMTkwMTUxOTA5MAJfMQQGY2FsbGVyCAUNJHQwMTkwMTUxOTA5MAJfMgQEZGF0ZQgFDSR0MDE5MDE1MTkwOTACXzMDAwkBAiE9AgUGY2FsbGVyBQpvZmZlck93bmVyCQECIT0CBQZjYWxsZXIFCXNhbGVPd25lcgcJAAIBAh1Zb3UgY2Fubm90IGNhbmNlbCB0aGlzIG9mZmVyLgQGYmlkS2V5CQEJZ2V0QmlkS2V5BAUKb2ZmZXJPd25lcgUFbmZ0SWQFCXNhbGVPd25lcgUHb2ZmZXJJZAQNJHQwMTkyNjQxOTMxOQkBCmdldEJpZERhdGEBBQZiaWRLZXkECmJpZERhdGFBcnIIBQ0kdDAxOTI2NDE5MzE5Al8xBAdhc3NldElkCAUNJHQwMTkyNjQxOTMxOQJfMgQHYmlkRGF0YQgFDSR0MDE5MjY0MTkzMTkCXzMJAMwIAgkBC0RlbGV0ZUVudHJ5AQkArAICBQZiaWRLZXkCBV9PUEVOCQDMCAIJAQtTdHJpbmdFbnRyeQIJAKwCAgUGYmlkS2V5AgpfQ0FOQ0VMTEVECQCsAgIJAKwCAgkArAICCQCsAgIFB2JpZERhdGECC19DQU5DRUxMRURfCQCkAwEFBGRhdGUCAV8FAmlkCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMJAQdBZGRyZXNzAQkA2QQBBQZjYWxsZXIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQpiaWREYXRhQXJyAAEFB2Fzc2V0SWQFA25pbADgQvXp", "height": 2339352, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 44SrtBzDEFfnGGEAvDf84MYfdzbXGyNjsoAam6Vg7rC7 Next: 5Lcsh7p6YFtDxz5fktwyXHhWZqkXsW9NVQVSofdENWbR 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 if (true)
200200 then throw(((((keyArtworkRoyalties(creatorAddr, nftid) + " / ") + toString(amount)) + " / ") + toString(creatorCut)))
201201 else {
202202 let agent = valueOrElse(getString(userDapp, keyArtistAgentAddr(creatorAddr)), feeReceiver)
203203 let agentShare = valueOrElse(getInteger(userDapp, keySecondaryShare(creatorAddr)), 0)
204204 let amountForSign = fraction(amount, signCut, 100)
205205 let amountForCreator = fraction(amount, creatorCut, 10000)
206206 let amountForOwner = (amount - (amountForSign + amountForCreator))
207207 let amountForAgent = if (if ((agent != feeReceiver))
208208 then (agentShare > 0)
209209 else false)
210210 then fraction(amount, agentShare, 100)
211211 else 0
212212 let commissions = if ((amountForAgent != 0))
213213 then [ScriptTransfer(Address(fromBase58String(feeReceiver)), (amountForSign - amountForAgent), assetId), ScriptTransfer(Address(fromBase58String(agent)), amountForAgent, assetId)]
214214 else [ScriptTransfer(Address(fromBase58String(feeReceiver)), amountForSign, assetId)]
215215 let creatorFee = ScriptTransfer(Address(fromBase58String(creatorAddr)), amountForCreator, assetId)
216216 let ownerFee = ScriptTransfer(Address(fromBase58String(saleOwner)), amountForOwner, assetId)
217217 let collectorNFT = ScriptTransfer(Address(fromBase58String(caller)), 1, fromBase58String(nftid))
218218 $Tuple4(commissions, creatorFee, ownerFee, collectorNFT)
219219 }
220220 }
221221
222222
223223 func validateMinSell (assetId,price) = {
224224 let minSellWaves = if (unitTest)
225225 then 10
226226 else getIntByKFromOracle("waves_min_sell")
227227 let minSellUsdn = 1000000
228228 let minSellSign = if (unitTest)
229229 then 1
230230 else (currentCertificationPrice * 2)
231231 if (if (if (if (if (if ((assetId == toBase58String(usdnAssetId)))
232232 then (minSellUsdn > price)
233233 else false)
234234 then (price != 0)
235235 else false)
236236 then true
237237 else if (if ((assetId == toBase58String(usdtAssetId)))
238238 then (minSellUsdn > price)
239239 else false)
240240 then (price != 0)
241241 else false)
242242 then true
243243 else if (if ((assetId == toBase58String(signAssetId)))
244244 then (minSellSign > price)
245245 else false)
246246 then (price != 0)
247247 else false)
248248 then true
249249 else if (if (if ((assetId == toBase58String(wavesAssetId)))
250250 then true
251251 else (assetId == "WAVES"))
252252 then (minSellWaves > price)
253253 else false)
254254 then (price != 0)
255255 else false)
256256 then false
257257 else true
258258 }
259259
260260
261261 func provideBaseData (i,nftId) = {
262262 let $t098259865 = idCallerDate(i)
263263 let id = $t098259865._1
264264 let caller = $t098259865._2
265265 let date = $t098259865._3
266266 let $t098699938 = checkNFTInfo(nftId)
267267 let isValidNFT = $t098699938._1
268268 let artId = $t098699938._2
269269 let creatorAddr = $t098699938._3
270270 let artSignID = $t098699938._4
271271 $Tuple7(id, caller, date, isValidNFT, artId, creatorAddr, artSignID)
272272 }
273273
274274
275275 func updateNumSales () = {
276276 let numSales = getIntByK(numSalesK)
277277 IntegerEntry(numSalesK, (numSales + 1))
278278 }
279279
280280
281281 @Callable(invoke)
282282 func setConf (key,val) = {
283283 let caller = toString(invoke.caller)
284284 if (containsElement([chris, toString(this)], caller))
285285 then if (contains(key, "conf_"))
286286 then [StringEntry(key, val)]
287287 else throw("Entries starting with conf_ only")
288288 else throw("You are not allowed to change this")
289289 }
290290
291291
292292
293293 @Callable(invoke)
294294 func appRunning (isLive,message) = {
295295 let caller = toString(invoke.caller)
296296 let id = toBase58String(invoke.transactionId)
297297 if (containsElement([chris, toString(this)], caller))
298298 then [BooleanEntry(dappRunningKey, isLive), StringEntry(maintenanceMSGKey, message)]
299299 else throw("You are not allowed to change this")
300300 }
301301
302302
303303
304304 @Callable(i)
305305 func sellNFT (price,asset) = {
306306 let $t01104311079 = isPayment(i)
307307 let payment = $t01104311079._1
308308 let amount = $t01104311079._2
309309 if ((amount != 1))
310310 then throw("No NFT attached")
311311 else {
312312 let nftId = if (if (isDefined(payment.assetId))
313313 then isSignArtNFT(value(payment.assetId))
314314 else false)
315315 then toBase58String(value(payment.assetId))
316316 else throw("Only SIGN Art NFT accepted.")
317317 let $t01131711410 = provideBaseData(i, nftId)
318318 let id = $t01131711410._1
319319 let caller = $t01131711410._2
320320 let date = $t01131711410._3
321321 let isValidNFT = $t01131711410._4
322322 let artId = $t01131711410._5
323323 let creatorAddr = $t01131711410._6
324324 let artSignID = $t01131711410._7
325325 if ((size(artSignID) == 0))
326326 then throw("Artwork not found on SIGN Art")
327327 else if (!(isValidNFT))
328328 then throw("Not a valid nft")
329329 else if (!(acceptedAssetIds(asset)))
330330 then throw("Only SIGN, USDN, USDT or WAVES accepted")
331331 else if (!(validateMinSell(asset, price)))
332332 then throw("Wrong minimum sell price")
333333 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)]
334334 }
335335 }
336336
337337
338338
339339 @Callable(i)
340340 func updateSalePrice (nftId,price,asset) = {
341341 let $t01231412407 = provideBaseData(i, nftId)
342342 let id = $t01231412407._1
343343 let caller = $t01231412407._2
344344 let date = $t01231412407._3
345345 let isValidNFT = $t01231412407._4
346346 let artId = $t01231412407._5
347347 let creatorAddr = $t01231412407._6
348348 let artSignID = $t01231412407._7
349349 if ((size(artSignID) == 0))
350350 then throw("Artwork not found on SIGN Art, cancel your sale.")
351351 else if (!(isValidNFT))
352352 then throw("Not a valid nft")
353353 else {
354354 let saleOwner = getStrByK(("current_owner_on_dapp_" + nftId))
355355 if ((saleOwner != caller))
356356 then throw("You don't own this NFT")
357357 else {
358358 let saleStatus = getStrByK(((("sale2nd_status_" + caller) + "_") + nftId))
359359 if ((saleStatus != "OPEN"))
360360 then throw("Sale not active")
361361 else if (!(acceptedAssetIds(asset)))
362362 then throw("Only SIGN, USDN, USDT or WAVES accepted")
363363 else if (!(validateMinSell(asset, price)))
364364 then throw("Wrong minimum sell price")
365365 else {
366366 let saleKey = getSaleKey(caller, nftId, artId, creatorAddr)
367367 let saleInfo = split(getStrByK((saleKey + "_OPEN")), "_")
368368 [StringEntry((saleKey + "_OPEN"), ((((((((((((saleInfo[0] + "_") + toString(price)) + "_") + asset) + "_") + saleInfo[3]) + "_") + saleInfo[4]) + "_") + saleInfo[5]) + "_") + saleInfo[6]))]
369369 }
370370 }
371371 }
372372 }
373373
374374
375375
376376 @Callable(i)
377377 func cancelSale (nftId) = {
378378 let $t01358413828 = provideBaseData(i, nftId)
379379 let id = $t01358413828._1
380380 let caller = $t01358413828._2
381381 let date = $t01358413828._3
382382 let isValidNFT = $t01358413828._4
383383 let artId = $t01358413828._5
384384 let creatorAddr = $t01358413828._6
385385 let artSignID = $t01358413828._7
386386 let saleOwner = getStrByK(("current_owner_on_dapp_" + nftId))
387387 if ((saleOwner != caller))
388388 then throw("You don't own this NFT")
389389 else {
390390 let saleStatus = getStrByK(((("sale2nd_status_" + caller) + "_") + nftId))
391391 if ((saleStatus != "OPEN"))
392392 then throw("Sale not active")
393393 else {
394394 let saleKey = getSaleKey(caller, nftId, artId, creatorAddr)
395395 let saleInfo = getStrByK((saleKey + "_OPEN"))
396396 [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))]
397397 }
398398 }
399399 }
400400
401401
402402
403403 @Callable(i)
404404 func buyNFT (nftId) = {
405405 let $t01468214775 = provideBaseData(i, nftId)
406406 let id = $t01468214775._1
407407 let caller = $t01468214775._2
408408 let date = $t01468214775._3
409409 let isValidNFT = $t01468214775._4
410410 let artId = $t01468214775._5
411411 let creatorAddr = $t01468214775._6
412412 let artSignID = $t01468214775._7
413413 if ((size(artSignID) == 0))
414414 then throw("Artwork not found on SIGN Art, cancel your sale.")
415415 else if (!(isValidNFT))
416416 then throw("Not a valid nft")
417417 else {
418418 let saleOwner = getSaleOwnerAndStatus(nftId)
419419 let saleKey = getSaleKey(saleOwner, nftId, artId, creatorAddr)
420420 let saleInfo = getStrByK((saleKey + "_OPEN"))
421421 if ((size(saleInfo) == 0))
422422 then throw("Sale Not found!")
423423 else {
424424 let saleInfoArray = split(saleInfo, "_")
425425 if ((parseInt(saleInfoArray[1]) == 0))
426426 then throw("Offer only")
427427 else {
428428 let $t01528415320 = isPayment(i)
429429 let payment = $t01528415320._1
430430 let amount = $t01528415320._2
431431 let paymentAssetStr = if (isDefined(payment.assetId))
432432 then toBase58String(value(payment.assetId))
433433 else ""
434434 if (if ((saleInfoArray[1] != toString(amount)))
435435 then true
436436 else (saleInfoArray[2] != paymentAssetStr))
437437 then throw("Payment infos don't match.")
438438 else {
439439 let $t01583415966 = setTransfers(amount, payment.assetId, nftId, creatorAddr, saleOwner, caller)
440440 let commissions = $t01583415966._1
441441 let creatorFee = $t01583415966._2
442442 let ownerFee = $t01583415966._3
443443 let collectorNFT = $t01583415966._4
444444 ([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)
445445 }
446446 }
447447 }
448448 }
449449 }
450450
451451
452452
453453 @Callable(i)
454454 func setOffer (nftId) = {
455455 let $t01639416491 = provideBaseData(i, nftId)
456456 let id = $t01639416491._1
457457 let offerOwner = $t01639416491._2
458458 let date = $t01639416491._3
459459 let isValidNFT = $t01639416491._4
460460 let artId = $t01639416491._5
461461 let creatorAddr = $t01639416491._6
462462 let artSignID = $t01639416491._7
463463 if (!(isValidNFT))
464464 then throw("Not a valid nft")
465465 else {
466466 let $t01655516591 = isPayment(i)
467467 let payment = $t01655516591._1
468468 let amount = $t01655516591._2
469469 let assetId = if (!(isDefined(payment.assetId)))
470470 then "WAVES"
471471 else toBase58String(value(payment.assetId))
472472 if (!(acceptedAssetIds(assetId)))
473473 then throw("asset not accepted")
474474 else if ((amount == 0))
475475 then throw("Offer of 0 not allowed")
476476 else if (!(validateMinSell(assetId, amount)))
477477 then throw("Wrong minimum sell price")
478478 else {
479479 let saleOwner = getSaleOwnerAndStatus(nftId)
480480 [StringEntry((getBidKey(offerOwner, nftId, saleOwner, id) + "_OPEN"), ((((((((((((((toString(date) + "_") + toString(amount)) + "_") + assetId) + "_") + nftId) + "_") + artId) + "_") + creatorAddr) + "_") + offerOwner) + "_") + id))]
481481 }
482482 }
483483 }
484484
485485
486486
487487 @Callable(i)
488488 func acceptOffer (nftId,offerId,offerOwner) = {
489489 let $t01741217505 = provideBaseData(i, nftId)
490490 let id = $t01741217505._1
491491 let caller = $t01741217505._2
492492 let date = $t01741217505._3
493493 let isValidNFT = $t01741217505._4
494494 let artId = $t01741217505._5
495495 let creatorAddr = $t01741217505._6
496496 let artSignID = $t01741217505._7
497497 if (!(isValidNFT))
498498 then throw("Not a valid nft")
499499 else {
500500 let saleOwner = getSaleOwnerAndStatus(nftId)
501501 if ((caller != saleOwner))
502502 then throw("Only sale owner can accept offer")
503503 else {
504504 let bidKey = getBidKey(offerOwner, nftId, saleOwner, offerId)
505505 let $t01776617821 = getBidData(bidKey)
506506 let bidDataArr = $t01776617821._1
507507 let assetId = $t01776617821._2
508508 let bidData = $t01776617821._3
509509 let saleKey = getSaleKey(saleOwner, nftId, artId, creatorAddr)
510510 let saleInfo = getStrByK((saleKey + "_OPEN"))
511511 if ((size(saleInfo) == 0))
512512 then throw("Sale Not found!")
513513 else {
514514 let amount = value(parseInt(bidDataArr[1]))
515515 let $t01806418195 = setTransfers(amount, assetId, nftId, creatorAddr, saleOwner, bidDataArr[6])
516516 let commissions = $t01806418195._1
517517 let creatorFee = $t01806418195._2
518518 let ownerFee = $t01806418195._3
519519 let collectorNFT = $t01806418195._4
520520 let assetIdStr = if (isDefined(assetId))
521521 then toBase58String(value(assetId))
522522 else "WAVES"
523523 ([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)
524524 }
525525 }
526526 }
527527 }
528528
529529
530530
531531 @Callable(i)
532532 func cancelOffer (nftId,offerId,offerOwner,saleOwner) = {
533533 let $t01901519090 = idCallerDate(i)
534534 let id = $t01901519090._1
535535 let caller = $t01901519090._2
536536 let date = $t01901519090._3
537537 if (if ((caller != offerOwner))
538538 then (caller != saleOwner)
539539 else false)
540540 then throw("You cannot cancel this offer.")
541541 else {
542542 let bidKey = getBidKey(offerOwner, nftId, saleOwner, offerId)
543543 let $t01926419319 = getBidData(bidKey)
544544 let bidDataArr = $t01926419319._1
545545 let assetId = $t01926419319._2
546546 let bidData = $t01926419319._3
547547 [DeleteEntry((bidKey + "_OPEN")), StringEntry((bidKey + "_CANCELLED"), ((((bidData + "_CANCELLED_") + toString(date)) + "_") + id)), ScriptTransfer(Address(fromBase58String(caller)), parseIntValue(bidDataArr[1]), assetId)]
548548 }
549549 }
550550
551551

github/deemru/w8io/026f985 
109.65 ms