tx · 8Ynmy7Gfuqp3hucaYxiLuB8qYM85pTkaGksG1ZQKiSnM

3N6NNy96zcDV7gxbL5kX32zqAPGP37eL91z:  -0.03700000 Waves

2023.03.04 14:23 [2475242] smart account 3N6NNy96zcDV7gxbL5kX32zqAPGP37eL91z > SELF 0.00000000 Waves

{ "type": 13, "id": "8Ynmy7Gfuqp3hucaYxiLuB8qYM85pTkaGksG1ZQKiSnM", "fee": 3700000, "feeAssetId": null, "timestamp": 1677929027491, "version": 2, "chainId": 84, "sender": "3N6NNy96zcDV7gxbL5kX32zqAPGP37eL91z", "senderPublicKey": "5J6PGacaLYHFaitp47ZWV1NjyTF5GPr8LNssr9eiFaiR", "proofs": [ "64xAc33Rn18WGHNiNkuCEyAV3v7mgHg5ZcrrMpcw7TcCFTa3s3YVuY6tVkBrUnnUKLwGNWGLRhM2KvbXDz1Rcmva" ], "script": "base64:BgIXCAISABIECgIICBIDCgEIEgASBAoCCAEqABBrX3JlZl9saW5rX293bmVyAhBrX3JlZl9saW5rX293bmVyABZrX3JlZl9saW5rX293bmVyX2NvdW50AhZrX3JlZl9saW5rX293bmVyX2NvdW50ABBrX3JlZl9vd25lcl9saW5rAhBrX3JlZl9vd25lcl9saW5rAAprX3JlZmVycmVyAgprX3JlZmVycmVyAAhrX2FjdGl2ZQIIa19hY3RpdmUADGtfZGVmYXVsdEZlZQIMa19kZWZhdWx0RmVlABRrX3JlZmVycmVyX3JlZl9jb3VudAIUa19yZWZlcnJlcl9yZWZfY291bnQAEWtfcmVmZXJyZXJfZWFybmVkAhFrX3JlZmVycmVyX2Vhcm5lZAASa19yZWZlcnJlcl9jbGFpbWVkAhJrX3JlZmVycmVyX2NsYWltZWQADWtfaW5pdGlhbGl6ZWQCDWtfaW5pdGlhbGl6ZWQAFGtfY29vcmRpbmF0b3JBZGRyZXNzAhRrX2Nvb3JkaW5hdG9yQWRkcmVzcwASa19nb3Zlcm5hbmNlX2Fzc2V0AgtrX2dvdl9hc3NldAAPa19hZG1pbl9hZGRyZXNzAg9rX2FkbWluX2FkZHJlc3MABWtfYW1tAgVrX2FtbQAOa19zd2FwX2FkZHJlc3MCDmtfc3dhcF9hZGRyZXNzAQ50b0NvbXBvc2l0ZUtleQIEX2tleQhfYWRkcmVzcwkArAICCQCsAgIFBF9rZXkCAV8FCF9hZGRyZXNzARJnZXRSZWZlcnJlckxpbmtLZXkBBV9saW5rCQCsAgIJAKwCAgUQa19yZWZfbGlua19vd25lcgIBXwUFX2xpbmsBDmdldFJlZmVycmVyS2V5AQdfdHJhZGVyCQCsAgIJAKwCAgUKa19yZWZlcnJlcgIBXwUHX3RyYWRlcgEWZ2V0UmVmZXJyZXJSZWZDb3VudEtleQEJX3JlZmVycmVyCQCsAgIJAKwCAgUUa19yZWZlcnJlcl9yZWZfY291bnQCAV8FCV9yZWZlcnJlcgEXZ2V0UmVmZXJyZXJMaW5rQ291bnRLZXkBCV9yZWZlcnJlcgkArAICCQCsAgIFFmtfcmVmX2xpbmtfb3duZXJfY291bnQCAV8FCV9yZWZlcnJlcgEUZ2V0UmVmZXJyZXJMaW5rS2V5QXQCCV9yZWZlcnJlcgdfbGlua0lkCQCsAgIJAKwCAgkArAICCQCsAgIFEGtfcmVmX293bmVyX2xpbmsCAV8FCV9yZWZlcnJlcgIBXwkApAMBBQdfbGlua0lkARRnZXRSZWZlcnJlckVhcm5lZEtleQEJX3JlZmVycmVyCQCsAgIJAKwCAgURa19yZWZlcnJlcl9lYXJuZWQCAV8FCV9yZWZlcnJlcgEVZ2V0UmVmZXJyZXJDbGFpbWVkS2V5AQlfcmVmZXJyZXIJAKwCAgkArAICBRJrX3JlZmVycmVyX2NsYWltZWQCAV8FCV9yZWZlcnJlcgEMZ2V0QWN0aXZlS2V5AQdfdHJhZGVyCQCsAgIJAKwCAgUIa19hY3RpdmUCAV8FB190cmFkZXIBC2Nvb3JkaW5hdG9yAAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCmCAEJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQR0aGlzBRRrX2Nvb3JkaW5hdG9yQWRkcmVzcwITQ29vcmRpbmF0b3Igbm90IHNldAIbQ29vcmRpbmF0b3IgYWRkcmVzcyBpbnZhbGlkAQxhZG1pbkFkZHJlc3MACQCmCAEJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCCQELY29vcmRpbmF0b3IABQ9rX2FkbWluX2FkZHJlc3MCFUFkbWluIGFkZHJlc3Mgbm90IHNldAEPZ292ZXJuYW5jZUFzc2V0AAkA2QQBCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgkBC2Nvb3JkaW5hdG9yAAUSa19nb3Zlcm5hbmNlX2Fzc2V0AhhHb3Zlcm5hbmNlIGFzc2V0IG5vdCBzZXQBC3N3YXBBZGRyZXNzAAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCmCAEJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCCQELY29vcmRpbmF0b3IABQ5rX3N3YXBfYWRkcmVzcwIUU3dhcCBhZGRyZXNzIG5vdCBzZXQCFFN3YXAgYWRkcmVzcyBpbnZhbGlkAQtpc1doaXRlbGlzdAEIX2FkZHJlc3MJAQt2YWx1ZU9yRWxzZQIJAJsIAgkBC2Nvb3JkaW5hdG9yAAkBDnRvQ29tcG9zaXRlS2V5AgUFa19hbW0FCF9hZGRyZXNzBwAMREVDSU1BTF9VTklUCQBoAgABCQBoAgkAaAIJAGgCCQBoAgkAaAIACgAKAAoACgAKAAoBBG11bGQCAl94Al95CQBuBAUCX3gFAl95BQxERUNJTUFMX1VOSVQFCEhBTEZFVkVOAQNpbnQBAWsJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAmggCBQR0aGlzBQFrCQCsAgICDW5vIHZhbHVlIGZvciAFAWsBC2luaXRpYWxpemVkAAkBC3ZhbHVlT3JFbHNlAgkAmwgCBQR0aGlzBQ1rX2luaXRpYWxpemVkBwEPZ2V0TGlua1JlZmVycmVyAQVfbGluawkBC3ZhbHVlT3JFbHNlAgkAnQgCBQR0aGlzCQESZ2V0UmVmZXJyZXJMaW5rS2V5AQUFX2xpbmsCAAELZ2V0UmVmZXJyZXIBB190cmFkZXIJAQt2YWx1ZU9yRWxzZQIJAJ0IAgUEdGhpcwkBDmdldFJlZmVycmVyS2V5AQUHX3RyYWRlcgIAAQppc1JlZmVycmFsAQdfdHJhZGVyCQECIT0CCQELZ2V0UmVmZXJyZXIBBQdfdHJhZGVyAgABC2lzRmlyc3RUaW1lAQdfdHJhZGVyCQAAAgkBC3ZhbHVlT3JFbHNlAgkAmwgCBQR0aGlzCQEMZ2V0QWN0aXZlS2V5AQUHX3RyYWRlcgcHAQ1nZXREZWZhdWx0RmVlAAkBA2ludAEFDGtfZGVmYXVsdEZlZQETZ2V0UmVmZXJyZXJSZWZDb3VudAEJX3JlZmVycmVyCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMJARZnZXRSZWZlcnJlclJlZkNvdW50S2V5AQUJX3JlZmVycmVyAAABFGdldFJlZmVycmVyTGlua0NvdW50AQlfcmVmZXJyZXIJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwkBF2dldFJlZmVycmVyTGlua0NvdW50S2V5AQUJX3JlZmVycmVyAAABEWdldFJlZmVycmVyRWFybmVkAQlfcmVmZXJyZXIJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwkBFGdldFJlZmVycmVyRWFybmVkS2V5AQUJX3JlZmVycmVyAAABEmdldFJlZmVycmVyQ2xhaW1lZAEJX3JlZmVycmVyCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMJARVnZXRSZWZlcnJlckNsYWltZWRLZXkBBQlfcmVmZXJyZXIAAAUBaQESY3JlYXRlUmVmZXJyYWxMaW5rAAQDcmF3CQCsAgIJANgEAQgFAWkNdHJhbnNhY3Rpb25JZAkA2AQBCAUBaQ9jYWxsZXJQdWJsaWNLZXkEBWJ5dGVzCQCbAwEFA3JhdwQEbG9uZwkA2AQBCQD3AwEFBWJ5dGVzBAVzaG9ydAkArwICBQRsb25nAAoEA2tleQkBEmdldFJlZmVycmVyTGlua0tleQEFBXNob3J0BAZsaW5rSWQJAGQCCQEUZ2V0UmVmZXJyZXJMaW5rQ291bnQBCQClCAEIBQFpBmNhbGxlcgABAwkBCWlzRGVmaW5lZAEJAJ0IAgUEdGhpcwUDa2V5CQACAQIqU2hvcnQgbGluayBleGlzdHMsIHRyeSBnZW5lcmF0aW5nIGl0IGFnYWluCQDMCAIJAQtTdHJpbmdFbnRyeQIJARRnZXRSZWZlcnJlckxpbmtLZXlBdAIJAKUIAQgFAWkGY2FsbGVyBQZsaW5rSWQFBXNob3J0CQDMCAIJAQtTdHJpbmdFbnRyeQIFA2tleQkApQgBCAUBaQZjYWxsZXIFA25pbAFpARVhY2NlcHRQYXltZW50V2l0aExpbmsCB190cmFkZXIIX3JlZkxpbmsECl9yYXdBbW91bnQICQCRAwIIBQFpCHBheW1lbnRzAAAGYW1vdW50BANhbW0JAKUIAQgFAWkGY2FsbGVyAwMDCQEBIQEJAQtpc1doaXRlbGlzdAEFA2FtbQYJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAQYJAQEhAQkBC2luaXRpYWxpemVkAAkAAgECJEludmFsaWQgYWNjZXB0UGF5bWVudFdpdGhMaW5rIHBhcmFtcwQLX2lzUmVmZXJyYWwJAQppc1JlZmVycmFsAQUHX3RyYWRlcgQMX2lzRmlyc3RUaW1lCQELaXNGaXJzdFRpbWUBBQdfdHJhZGVyAwMFC19pc1JlZmVycmFsBgUMX2lzRmlyc3RUaW1lAwULX2lzUmVmZXJyYWwECHJlZmVycmVyCQELZ2V0UmVmZXJyZXIBBQdfdHJhZGVyBANmZWUJAQ1nZXREZWZhdWx0RmVlAAQQYW1vdW50VG9SZWZlcnJlcgkBBG11bGQCBQpfcmF3QW1vdW50BQNmZWUECmJlZm9yZVN3YXAJAPAHAgUEdGhpcwkBD2dvdmVybmFuY2VBc3NldAADCQAAAgUKYmVmb3JlU3dhcAUKYmVmb3JlU3dhcAQGZG9Td2FwCQD8BwQJAQtzd2FwQWRkcmVzcwACBHN3YXAJAMwIAgkA2AQBCQEPZ292ZXJuYW5jZUFzc2V0AAkAzAgCAAAFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AggJAJEDAggFAWkIcGF5bWVudHMAAAdhc3NldElkBRBhbW91bnRUb1JlZmVycmVyBQNuaWwDCQAAAgUGZG9Td2FwBQZkb1N3YXAECWFmdGVyU3dhcAkA8AcCBQR0aGlzCQEPZ292ZXJuYW5jZUFzc2V0AAMJAAACBQlhZnRlclN3YXAFCWFmdGVyU3dhcAQTYW1vdW50R292VG9SZWZlcnJlcgkAZQIFCWFmdGVyU3dhcAUKYmVmb3JlU3dhcAMJAAACBRNhbW91bnRHb3ZUb1JlZmVycmVyBRNhbW91bnRHb3ZUb1JlZmVycmVyCQCUCgIJAMwIAgkBDEludGVnZXJFbnRyeQIJARRnZXRSZWZlcnJlckVhcm5lZEtleQEFCHJlZmVycmVyCQBkAgkBEWdldFJlZmVycmVyRWFybmVkAQUIcmVmZXJyZXIFE2Ftb3VudEdvdlRvUmVmZXJyZXIJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwgFAWkGY2FsbGVyCQBlAggJAJEDAggFAWkIcGF5bWVudHMAAAZhbW91bnQFEGFtb3VudFRvUmVmZXJyZXIICQCRAwIIBQFpCHBheW1lbnRzAAAHYXNzZXRJZAUDbmlsBRBhbW91bnRUb1JlZmVycmVyCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuBAhyZWZlcnJlcgkBD2dldExpbmtSZWZlcnJlcgEFCF9yZWZMaW5rAwMJAAACBQhyZWZlcnJlcgIABgkAAAIFCHJlZmVycmVyBQdfdHJhZGVyCQCUCgIJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwgFAWkGY2FsbGVyCAkAkQMCCAUBaQhwYXltZW50cwAABmFtb3VudAgJAJEDAggFAWkIcGF5bWVudHMAAAdhc3NldElkCQDMCAIJAQxCb29sZWFuRW50cnkCCQEMZ2V0QWN0aXZlS2V5AQUHX3RyYWRlcgYFA25pbAAABANmZWUJAQ1nZXREZWZhdWx0RmVlAAQQYW1vdW50VG9SZWZlcnJlcgkBBG11bGQCBQpfcmF3QW1vdW50BQNmZWUECmJlZm9yZVN3YXAJAPAHAgUEdGhpcwkBD2dvdmVybmFuY2VBc3NldAADCQAAAgUKYmVmb3JlU3dhcAUKYmVmb3JlU3dhcAQGZG9Td2FwCQD8BwQJAQtzd2FwQWRkcmVzcwACBHN3YXAJAMwIAgkA2AQBCQEPZ292ZXJuYW5jZUFzc2V0AAkAzAgCAAAFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AggJAJEDAggFAWkIcGF5bWVudHMAAAdhc3NldElkBRBhbW91bnRUb1JlZmVycmVyBQNuaWwDCQAAAgUGZG9Td2FwBQZkb1N3YXAECWFmdGVyU3dhcAkA8AcCBQR0aGlzCQEPZ292ZXJuYW5jZUFzc2V0AAMJAAACBQlhZnRlclN3YXAFCWFmdGVyU3dhcAQTYW1vdW50R292VG9SZWZlcnJlcgkAZQIFCWFmdGVyU3dhcAUKYmVmb3JlU3dhcAMJAAACBRNhbW91bnRHb3ZUb1JlZmVycmVyBRNhbW91bnRHb3ZUb1JlZmVycmVyCQCUCgIJAMwIAgkBDEludGVnZXJFbnRyeQIJARZnZXRSZWZlcnJlclJlZkNvdW50S2V5AQUIcmVmZXJyZXIJAGQCCQETZ2V0UmVmZXJyZXJSZWZDb3VudAEFCHJlZmVycmVyAAEJAMwIAgkBDEludGVnZXJFbnRyeQIJARRnZXRSZWZlcnJlckVhcm5lZEtleQEFCHJlZmVycmVyCQBkAgkBEWdldFJlZmVycmVyRWFybmVkAQUIcmVmZXJyZXIFE2Ftb3VudEdvdlRvUmVmZXJyZXIJAMwIAgkBC1N0cmluZ0VudHJ5AgkBDmdldFJlZmVycmVyS2V5AQUHX3RyYWRlcgUIcmVmZXJyZXIJAMwIAgkBDEJvb2xlYW5FbnRyeQIJAQxnZXRBY3RpdmVLZXkBBQdfdHJhZGVyBgkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCAUBaQZjYWxsZXIJAGUCCAkAkQMCCAUBaQhwYXltZW50cwAABmFtb3VudAUQYW1vdW50VG9SZWZlcnJlcggJAJEDAggFAWkIcGF5bWVudHMAAAdhc3NldElkBQNuaWwFEGFtb3VudFRvUmVmZXJyZXIJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAJQKAgkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCAUBaQZjYWxsZXIICQCRAwIIBQFpCHBheW1lbnRzAAAGYW1vdW50CAkAkQMCCAUBaQhwYXltZW50cwAAB2Fzc2V0SWQFA25pbAAAAWkBDWFjY2VwdFBheW1lbnQBB190cmFkZXIECl9yYXdBbW91bnQICQCRAwIIBQFpCHBheW1lbnRzAAAGYW1vdW50BANhbW0JAKUIAQgFAWkGY2FsbGVyAwMDCQEBIQEJAQtpc1doaXRlbGlzdAEFA2FtbQYJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAQYJAQEhAQkBC2luaXRpYWxpemVkAAkAAgECHEludmFsaWQgYWNjZXB0UGF5bWVudCBwYXJhbXMEC19pc1JlZmVycmFsCQEKaXNSZWZlcnJhbAEFB190cmFkZXIDBQtfaXNSZWZlcnJhbAQIcmVmZXJyZXIJAQtnZXRSZWZlcnJlcgEFB190cmFkZXIEA2ZlZQkBDWdldERlZmF1bHRGZWUABBBhbW91bnRUb1JlZmVycmVyCQEEbXVsZAIFCl9yYXdBbW91bnQFA2ZlZQQKYmVmb3JlU3dhcAkA8AcCBQR0aGlzCQEPZ292ZXJuYW5jZUFzc2V0AAMJAAACBQpiZWZvcmVTd2FwBQpiZWZvcmVTd2FwBAZkb1N3YXAJAPwHBAkBC3N3YXBBZGRyZXNzAAIEc3dhcAkAzAgCCQDYBAEJAQ9nb3Zlcm5hbmNlQXNzZXQACQDMCAIAAAUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCCAkAkQMCCAUBaQhwYXltZW50cwAAB2Fzc2V0SWQFEGFtb3VudFRvUmVmZXJyZXIFA25pbAMJAAACBQZkb1N3YXAFBmRvU3dhcAQJYWZ0ZXJTd2FwCQDwBwIFBHRoaXMJAQ9nb3Zlcm5hbmNlQXNzZXQAAwkAAAIFCWFmdGVyU3dhcAUJYWZ0ZXJTd2FwBBNhbW91bnRHb3ZUb1JlZmVycmVyCQBlAgUJYWZ0ZXJTd2FwBQpiZWZvcmVTd2FwAwkAAAIFE2Ftb3VudEdvdlRvUmVmZXJyZXIFE2Ftb3VudEdvdlRvUmVmZXJyZXIJAJQKAgkAzAgCCQEMSW50ZWdlckVudHJ5AgkBFGdldFJlZmVycmVyRWFybmVkS2V5AQUIcmVmZXJyZXIJAGQCCQERZ2V0UmVmZXJyZXJFYXJuZWQBBQhyZWZlcnJlcgUTYW1vdW50R292VG9SZWZlcnJlcgkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCAUBaQZjYWxsZXIJAGUCCAkAkQMCCAUBaQhwYXltZW50cwAABmFtb3VudAUQYW1vdW50VG9SZWZlcnJlcggJAJEDAggFAWkIcGF5bWVudHMAAAdhc3NldElkBQNuaWwFEGFtb3VudFRvUmVmZXJyZXIJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAJQKAgkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCAUBaQZjYWxsZXIICQCRAwIIBQFpCHBheW1lbnRzAAAGYW1vdW50CAkAkQMCCAUBaQhwYXltZW50cwAAB2Fzc2V0SWQFA25pbAAAAWkBDGNsYWltUmV3YXJkcwAECHJlZmVycmVyCQClCAEIBQFpBmNhbGxlcgQMdG90YWxSZXdhcmRzCQERZ2V0UmVmZXJyZXJFYXJuZWQBBQhyZWZlcnJlcgQMdG90YWxDbGFpbWVkCQESZ2V0UmVmZXJyZXJDbGFpbWVkAQUIcmVmZXJyZXIEB3RvQ2xhaW0JAGUCBQx0b3RhbFJld2FyZHMFDHRvdGFsQ2xhaW1lZAMJAGYCBQd0b0NsYWltAAAJAMwIAgkBDEludGVnZXJFbnRyeQIJARVnZXRSZWZlcnJlckNsYWltZWRLZXkBBQhyZWZlcnJlcgkAZAIJARJnZXRSZWZlcnJlckNsYWltZWQBBQhyZWZlcnJlcgUHdG9DbGFpbQkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCAUBaQZjYWxsZXIFB3RvQ2xhaW0JAQ9nb3Zlcm5hbmNlQXNzZXQABQNuaWwJAAIBAhBOb3RoaW5nIHRvIGNsYWltAWkBCmluaXRpYWxpemUCDF9jb29yZGluYXRvcgtfZGVmYXVsdEZlZQMDCQELaW5pdGlhbGl6ZWQABgkBAiE9AggFAWkGY2FsbGVyBQR0aGlzCQACAQIUVW5hYmxlIHRvIGluaXRpYWxpemUJAMwIAgkBC1N0cmluZ0VudHJ5AgUUa19jb29yZGluYXRvckFkZHJlc3MJAKUIAQkBEUBleHRyTmF0aXZlKDEwNjIpAQUMX2Nvb3JkaW5hdG9yCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQxrX2RlZmF1bHRGZWUFC19kZWZhdWx0RmVlCQDMCAIJAQxCb29sZWFuRW50cnkCBQ1rX2luaXRpYWxpemVkBgUDbmlsAQJ0eAEGdmVyaWZ5AAQOY29vcmRpbmF0b3JTdHIJAJ0IAgUEdGhpcwUUa19jb29yZGluYXRvckFkZHJlc3MDCQEJaXNEZWZpbmVkAQUOY29vcmRpbmF0b3JTdHIEBWFkbWluCQCdCAIJARFAZXh0ck5hdGl2ZSgxMDYyKQEJAQV2YWx1ZQEFDmNvb3JkaW5hdG9yU3RyBQ9rX2FkbWluX2FkZHJlc3MDCQEJaXNEZWZpbmVkAQUFYWRtaW4JAQt2YWx1ZU9yRWxzZQIJAJsIAgkBEUBleHRyTmF0aXZlKDEwNjIpAQkBBXZhbHVlAQUFYWRtaW4JAKwCAgkArAICCQCsAgICB3N0YXR1c18JAKUIAQUEdGhpcwIBXwkA2AQBCAUCdHgCaWQHCQACAQIudW5hYmxlIHRvIHZlcmlmeTogYWRtaW4gbm90IHNldCBpbiBjb29yZGluYXRvcgkA9AMDCAUCdHgJYm9keUJ5dGVzCQCRAwIIBQJ0eAZwcm9vZnMAAAgFAnR4D3NlbmRlclB1YmxpY0tleSI/dVM=", "height": 2475242, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 3ZRbf3pt6su5wEmxKwHDLkNWdwfrU7tYedS5oWV1sGPq Next: 2XEPkoFqFpHoM3hNWGzHLwSdJ4UQNAiB6Dy1NwSaew5k Diff:
OldNewDifferences
1313
1414 let k_defaultFee = "k_defaultFee"
1515
16-let k_swapAddress = "k_swapAddress"
17-
1816 let k_referrer_ref_count = "k_referrer_ref_count"
1917
2018 let k_referrer_earned = "k_referrer_earned"
2725
2826 let k_governance_asset = "k_gov_asset"
2927
30-let k_quote_asset = "k_quote_asset"
31-
32-let k_admin_public_key = "k_admin_public_key"
33-
3428 let k_admin_address = "k_admin_address"
3529
3630 let k_amm = "k_amm"
31+
32+let k_swap_address = "k_swap_address"
3733
3834 func toCompositeKey (_key,_address) = ((_key + "_") + _address)
3935
6258 func getActiveKey (_trader) = ((k_active + "_") + _trader)
6359
6460
65-func coordinator () = valueOrErrorMessage(addressFromString(getStringValue(this, k_coordinatorAddress)), "Coordinator not set")
61+func coordinator () = valueOrErrorMessage(addressFromString(valueOrErrorMessage(getString(this, k_coordinatorAddress), "Coordinator not set")), "Coordinator address invalid")
6662
6763
68-func adminPublicKey () = fromBase58String(getStringValue(coordinator(), k_admin_public_key))
64+func adminAddress () = addressFromString(valueOrErrorMessage(getString(coordinator(), k_admin_address), "Admin address not set"))
6965
7066
71-func adminAddress () = addressFromString(getStringValue(coordinator(), k_admin_address))
67+func governanceAsset () = fromBase58String(valueOrErrorMessage(getString(coordinator(), k_governance_asset), "Governance asset not set"))
7268
7369
74-func governanceAsset () = fromBase58String(getStringValue(coordinator(), k_governance_asset))
75-
76-
77-func quoteAsset () = fromBase58String(getStringValue(coordinator(), k_quote_asset))
70+func swapAddress () = valueOrErrorMessage(addressFromString(valueOrErrorMessage(getString(coordinator(), k_swap_address), "Swap address not set")), "Swap address invalid")
7871
7972
8073 func isWhitelist (_address) = valueOrElse(getBoolean(coordinator(), toCompositeKey(k_amm, _address)), false)
8275
8376 let DECIMAL_UNIT = (1 * (((((10 * 10) * 10) * 10) * 10) * 10))
8477
85-func swapAddress () = valueOrErrorMessage(addressFromString(valueOrErrorMessage(getString(this, k_swapAddress), "Now swap address")), "Invalid swap address")
86-
87-
88-func usdnFromDecimals (_amount) = (_amount / 100)
89-
90-
91-func usdnToDecimals (_amount) = (_amount * 100)
92-
93-
94-func divd (_x,_y) = fraction(_x, DECIMAL_UNIT, _y, HALFEVEN)
95-
96-
9778 func muld (_x,_y) = fraction(_x, _y, DECIMAL_UNIT, HALFEVEN)
9879
9980
100-func abs (_x) = if ((_x > 0))
101- then _x
102- else -(_x)
103-
104-
105-func minv (_x,_y) = if ((_x > _y))
106- then _y
107- else _x
108-
109-
11081 func int (k) = valueOrErrorMessage(getInteger(this, k), ("no value for " + k))
111-
112-
113-func int0 (k) = valueOrElse(getInteger(this, k), 0)
11482
11583
11684 func initialized () = valueOrElse(getBoolean(this, k_initialized), false)
162130 func acceptPaymentWithLink (_trader,_refLink) = {
163131 let _rawAmount = i.payments[0].amount
164132 let amm = toString(i.caller)
165- if (if (!(isWhitelist(amm)))
133+ if (if (if (!(isWhitelist(amm)))
134+ then true
135+ else (size(i.payments) != 1))
166136 then true
167137 else !(initialized()))
168138 then throw("Invalid acceptPaymentWithLink params")
180150 let beforeSwap = assetBalance(this, governanceAsset())
181151 if ((beforeSwap == beforeSwap))
182152 then {
183- let doSwap = invoke(swapAddress(), "swap", [toBase58String(governanceAsset()), 0], [AttachedPayment(quoteAsset(), amountToReferrer)])
153+ let doSwap = invoke(swapAddress(), "swap", [toBase58String(governanceAsset()), 0], [AttachedPayment(i.payments[0].assetId, amountToReferrer)])
184154 if ((doSwap == doSwap))
185155 then {
186156 let afterSwap = assetBalance(this, governanceAsset())
209179 let beforeSwap = assetBalance(this, governanceAsset())
210180 if ((beforeSwap == beforeSwap))
211181 then {
212- let doSwap = invoke(swapAddress(), "swap", [toBase58String(governanceAsset()), 0], [AttachedPayment(quoteAsset(), amountToReferrer)])
182+ let doSwap = invoke(swapAddress(), "swap", [toBase58String(governanceAsset()), 0], [AttachedPayment(i.payments[0].assetId, amountToReferrer)])
213183 if ((doSwap == doSwap))
214184 then {
215185 let afterSwap = assetBalance(this, governanceAsset())
237207 func acceptPayment (_trader) = {
238208 let _rawAmount = i.payments[0].amount
239209 let amm = toString(i.caller)
240- if (if (!(isWhitelist(amm)))
210+ if (if (if (!(isWhitelist(amm)))
211+ then true
212+ else (size(i.payments) != 1))
241213 then true
242214 else !(initialized()))
243215 then throw("Invalid acceptPayment params")
251223 let beforeSwap = assetBalance(this, governanceAsset())
252224 if ((beforeSwap == beforeSwap))
253225 then {
254- let doSwap = invoke(swapAddress(), "swap", [toBase58String(governanceAsset()), 0], [AttachedPayment(quoteAsset(), amountToReferrer)])
226+ let doSwap = invoke(swapAddress(), "swap", [toBase58String(governanceAsset()), 0], [AttachedPayment(i.payments[0].assetId, amountToReferrer)])
255227 if ((doSwap == doSwap))
256228 then {
257229 let afterSwap = assetBalance(this, governanceAsset())
288260
289261
290262 @Callable(i)
291-func initialize (_coordinator,_defaultFee,_swapAddress) = if (initialized())
292- then throw("Already initialized")
293- else [StringEntry(k_coordinatorAddress, _coordinator), StringEntry(k_swapAddress, _swapAddress), IntegerEntry(k_defaultFee, _defaultFee), BooleanEntry(k_initialized, true)]
294-
295-
296-
297-@Callable(i)
298-func setSwapAddress (_swapAddress) = if ((i.caller != adminAddress()))
299- then throw("Invalid setSwapAddress params")
300- else [StringEntry(k_swapAddress, _swapAddress)]
263+func initialize (_coordinator,_defaultFee) = if (if (initialized())
264+ then true
265+ else (i.caller != this))
266+ then throw("Unable to initialize")
267+ else [StringEntry(k_coordinatorAddress, toString(addressFromStringValue(_coordinator))), IntegerEntry(k_defaultFee, _defaultFee), BooleanEntry(k_initialized, true)]
301268
302269
303270 @Verifier(tx)
304-func verify () = sigVerify(tx.bodyBytes, tx.proofs[0], adminPublicKey())
271+func verify () = {
272+ let coordinatorStr = getString(this, k_coordinatorAddress)
273+ if (isDefined(coordinatorStr))
274+ then {
275+ let admin = getString(addressFromStringValue(value(coordinatorStr)), k_admin_address)
276+ if (isDefined(admin))
277+ then valueOrElse(getBoolean(addressFromStringValue(value(admin)), ((("status_" + toString(this)) + "_") + toBase58String(tx.id))), false)
278+ else throw("unable to verify: admin not set in coordinator")
279+ }
280+ else sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey)
281+ }
305282
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let k_ref_link_owner = "k_ref_link_owner"
55
66 let k_ref_link_owner_count = "k_ref_link_owner_count"
77
88 let k_ref_owner_link = "k_ref_owner_link"
99
1010 let k_referrer = "k_referrer"
1111
1212 let k_active = "k_active"
1313
1414 let k_defaultFee = "k_defaultFee"
1515
16-let k_swapAddress = "k_swapAddress"
17-
1816 let k_referrer_ref_count = "k_referrer_ref_count"
1917
2018 let k_referrer_earned = "k_referrer_earned"
2119
2220 let k_referrer_claimed = "k_referrer_claimed"
2321
2422 let k_initialized = "k_initialized"
2523
2624 let k_coordinatorAddress = "k_coordinatorAddress"
2725
2826 let k_governance_asset = "k_gov_asset"
2927
30-let k_quote_asset = "k_quote_asset"
31-
32-let k_admin_public_key = "k_admin_public_key"
33-
3428 let k_admin_address = "k_admin_address"
3529
3630 let k_amm = "k_amm"
31+
32+let k_swap_address = "k_swap_address"
3733
3834 func toCompositeKey (_key,_address) = ((_key + "_") + _address)
3935
4036
4137 func getReferrerLinkKey (_link) = ((k_ref_link_owner + "_") + _link)
4238
4339
4440 func getReferrerKey (_trader) = ((k_referrer + "_") + _trader)
4541
4642
4743 func getReferrerRefCountKey (_referrer) = ((k_referrer_ref_count + "_") + _referrer)
4844
4945
5046 func getReferrerLinkCountKey (_referrer) = ((k_ref_link_owner_count + "_") + _referrer)
5147
5248
5349 func getReferrerLinkKeyAt (_referrer,_linkId) = ((((k_ref_owner_link + "_") + _referrer) + "_") + toString(_linkId))
5450
5551
5652 func getReferrerEarnedKey (_referrer) = ((k_referrer_earned + "_") + _referrer)
5753
5854
5955 func getReferrerClaimedKey (_referrer) = ((k_referrer_claimed + "_") + _referrer)
6056
6157
6258 func getActiveKey (_trader) = ((k_active + "_") + _trader)
6359
6460
65-func coordinator () = valueOrErrorMessage(addressFromString(getStringValue(this, k_coordinatorAddress)), "Coordinator not set")
61+func coordinator () = valueOrErrorMessage(addressFromString(valueOrErrorMessage(getString(this, k_coordinatorAddress), "Coordinator not set")), "Coordinator address invalid")
6662
6763
68-func adminPublicKey () = fromBase58String(getStringValue(coordinator(), k_admin_public_key))
64+func adminAddress () = addressFromString(valueOrErrorMessage(getString(coordinator(), k_admin_address), "Admin address not set"))
6965
7066
71-func adminAddress () = addressFromString(getStringValue(coordinator(), k_admin_address))
67+func governanceAsset () = fromBase58String(valueOrErrorMessage(getString(coordinator(), k_governance_asset), "Governance asset not set"))
7268
7369
74-func governanceAsset () = fromBase58String(getStringValue(coordinator(), k_governance_asset))
75-
76-
77-func quoteAsset () = fromBase58String(getStringValue(coordinator(), k_quote_asset))
70+func swapAddress () = valueOrErrorMessage(addressFromString(valueOrErrorMessage(getString(coordinator(), k_swap_address), "Swap address not set")), "Swap address invalid")
7871
7972
8073 func isWhitelist (_address) = valueOrElse(getBoolean(coordinator(), toCompositeKey(k_amm, _address)), false)
8174
8275
8376 let DECIMAL_UNIT = (1 * (((((10 * 10) * 10) * 10) * 10) * 10))
8477
85-func swapAddress () = valueOrErrorMessage(addressFromString(valueOrErrorMessage(getString(this, k_swapAddress), "Now swap address")), "Invalid swap address")
86-
87-
88-func usdnFromDecimals (_amount) = (_amount / 100)
89-
90-
91-func usdnToDecimals (_amount) = (_amount * 100)
92-
93-
94-func divd (_x,_y) = fraction(_x, DECIMAL_UNIT, _y, HALFEVEN)
95-
96-
9778 func muld (_x,_y) = fraction(_x, _y, DECIMAL_UNIT, HALFEVEN)
9879
9980
100-func abs (_x) = if ((_x > 0))
101- then _x
102- else -(_x)
103-
104-
105-func minv (_x,_y) = if ((_x > _y))
106- then _y
107- else _x
108-
109-
11081 func int (k) = valueOrErrorMessage(getInteger(this, k), ("no value for " + k))
111-
112-
113-func int0 (k) = valueOrElse(getInteger(this, k), 0)
11482
11583
11684 func initialized () = valueOrElse(getBoolean(this, k_initialized), false)
11785
11886
11987 func getLinkReferrer (_link) = valueOrElse(getString(this, getReferrerLinkKey(_link)), "")
12088
12189
12290 func getReferrer (_trader) = valueOrElse(getString(this, getReferrerKey(_trader)), "")
12391
12492
12593 func isReferral (_trader) = (getReferrer(_trader) != "")
12694
12795
12896 func isFirstTime (_trader) = (valueOrElse(getBoolean(this, getActiveKey(_trader)), false) == false)
12997
13098
13199 func getDefaultFee () = int(k_defaultFee)
132100
133101
134102 func getReferrerRefCount (_referrer) = valueOrElse(getInteger(this, getReferrerRefCountKey(_referrer)), 0)
135103
136104
137105 func getReferrerLinkCount (_referrer) = valueOrElse(getInteger(this, getReferrerLinkCountKey(_referrer)), 0)
138106
139107
140108 func getReferrerEarned (_referrer) = valueOrElse(getInteger(this, getReferrerEarnedKey(_referrer)), 0)
141109
142110
143111 func getReferrerClaimed (_referrer) = valueOrElse(getInteger(this, getReferrerClaimedKey(_referrer)), 0)
144112
145113
146114 @Callable(i)
147115 func createReferralLink () = {
148116 let raw = (toBase58String(i.transactionId) + toBase58String(i.callerPublicKey))
149117 let bytes = toBytes(raw)
150118 let long = toBase58String(sha256(bytes))
151119 let short = take(long, 10)
152120 let key = getReferrerLinkKey(short)
153121 let linkId = (getReferrerLinkCount(toString(i.caller)) + 1)
154122 if (isDefined(getString(this, key)))
155123 then throw("Short link exists, try generating it again")
156124 else [StringEntry(getReferrerLinkKeyAt(toString(i.caller), linkId), short), StringEntry(key, toString(i.caller))]
157125 }
158126
159127
160128
161129 @Callable(i)
162130 func acceptPaymentWithLink (_trader,_refLink) = {
163131 let _rawAmount = i.payments[0].amount
164132 let amm = toString(i.caller)
165- if (if (!(isWhitelist(amm)))
133+ if (if (if (!(isWhitelist(amm)))
134+ then true
135+ else (size(i.payments) != 1))
166136 then true
167137 else !(initialized()))
168138 then throw("Invalid acceptPaymentWithLink params")
169139 else {
170140 let _isReferral = isReferral(_trader)
171141 let _isFirstTime = isFirstTime(_trader)
172142 if (if (_isReferral)
173143 then true
174144 else _isFirstTime)
175145 then if (_isReferral)
176146 then {
177147 let referrer = getReferrer(_trader)
178148 let fee = getDefaultFee()
179149 let amountToReferrer = muld(_rawAmount, fee)
180150 let beforeSwap = assetBalance(this, governanceAsset())
181151 if ((beforeSwap == beforeSwap))
182152 then {
183- let doSwap = invoke(swapAddress(), "swap", [toBase58String(governanceAsset()), 0], [AttachedPayment(quoteAsset(), amountToReferrer)])
153+ let doSwap = invoke(swapAddress(), "swap", [toBase58String(governanceAsset()), 0], [AttachedPayment(i.payments[0].assetId, amountToReferrer)])
184154 if ((doSwap == doSwap))
185155 then {
186156 let afterSwap = assetBalance(this, governanceAsset())
187157 if ((afterSwap == afterSwap))
188158 then {
189159 let amountGovToReferrer = (afterSwap - beforeSwap)
190160 if ((amountGovToReferrer == amountGovToReferrer))
191161 then $Tuple2([IntegerEntry(getReferrerEarnedKey(referrer), (getReferrerEarned(referrer) + amountGovToReferrer)), ScriptTransfer(i.caller, (i.payments[0].amount - amountToReferrer), i.payments[0].assetId)], amountToReferrer)
192162 else throw("Strict value is not equal to itself.")
193163 }
194164 else throw("Strict value is not equal to itself.")
195165 }
196166 else throw("Strict value is not equal to itself.")
197167 }
198168 else throw("Strict value is not equal to itself.")
199169 }
200170 else {
201171 let referrer = getLinkReferrer(_refLink)
202172 if (if ((referrer == ""))
203173 then true
204174 else (referrer == _trader))
205175 then $Tuple2([ScriptTransfer(i.caller, i.payments[0].amount, i.payments[0].assetId), BooleanEntry(getActiveKey(_trader), true)], 0)
206176 else {
207177 let fee = getDefaultFee()
208178 let amountToReferrer = muld(_rawAmount, fee)
209179 let beforeSwap = assetBalance(this, governanceAsset())
210180 if ((beforeSwap == beforeSwap))
211181 then {
212- let doSwap = invoke(swapAddress(), "swap", [toBase58String(governanceAsset()), 0], [AttachedPayment(quoteAsset(), amountToReferrer)])
182+ let doSwap = invoke(swapAddress(), "swap", [toBase58String(governanceAsset()), 0], [AttachedPayment(i.payments[0].assetId, amountToReferrer)])
213183 if ((doSwap == doSwap))
214184 then {
215185 let afterSwap = assetBalance(this, governanceAsset())
216186 if ((afterSwap == afterSwap))
217187 then {
218188 let amountGovToReferrer = (afterSwap - beforeSwap)
219189 if ((amountGovToReferrer == amountGovToReferrer))
220190 then $Tuple2([IntegerEntry(getReferrerRefCountKey(referrer), (getReferrerRefCount(referrer) + 1)), IntegerEntry(getReferrerEarnedKey(referrer), (getReferrerEarned(referrer) + amountGovToReferrer)), StringEntry(getReferrerKey(_trader), referrer), BooleanEntry(getActiveKey(_trader), true), ScriptTransfer(i.caller, (i.payments[0].amount - amountToReferrer), i.payments[0].assetId)], amountToReferrer)
221191 else throw("Strict value is not equal to itself.")
222192 }
223193 else throw("Strict value is not equal to itself.")
224194 }
225195 else throw("Strict value is not equal to itself.")
226196 }
227197 else throw("Strict value is not equal to itself.")
228198 }
229199 }
230200 else $Tuple2([ScriptTransfer(i.caller, i.payments[0].amount, i.payments[0].assetId)], 0)
231201 }
232202 }
233203
234204
235205
236206 @Callable(i)
237207 func acceptPayment (_trader) = {
238208 let _rawAmount = i.payments[0].amount
239209 let amm = toString(i.caller)
240- if (if (!(isWhitelist(amm)))
210+ if (if (if (!(isWhitelist(amm)))
211+ then true
212+ else (size(i.payments) != 1))
241213 then true
242214 else !(initialized()))
243215 then throw("Invalid acceptPayment params")
244216 else {
245217 let _isReferral = isReferral(_trader)
246218 if (_isReferral)
247219 then {
248220 let referrer = getReferrer(_trader)
249221 let fee = getDefaultFee()
250222 let amountToReferrer = muld(_rawAmount, fee)
251223 let beforeSwap = assetBalance(this, governanceAsset())
252224 if ((beforeSwap == beforeSwap))
253225 then {
254- let doSwap = invoke(swapAddress(), "swap", [toBase58String(governanceAsset()), 0], [AttachedPayment(quoteAsset(), amountToReferrer)])
226+ let doSwap = invoke(swapAddress(), "swap", [toBase58String(governanceAsset()), 0], [AttachedPayment(i.payments[0].assetId, amountToReferrer)])
255227 if ((doSwap == doSwap))
256228 then {
257229 let afterSwap = assetBalance(this, governanceAsset())
258230 if ((afterSwap == afterSwap))
259231 then {
260232 let amountGovToReferrer = (afterSwap - beforeSwap)
261233 if ((amountGovToReferrer == amountGovToReferrer))
262234 then $Tuple2([IntegerEntry(getReferrerEarnedKey(referrer), (getReferrerEarned(referrer) + amountGovToReferrer)), ScriptTransfer(i.caller, (i.payments[0].amount - amountToReferrer), i.payments[0].assetId)], amountToReferrer)
263235 else throw("Strict value is not equal to itself.")
264236 }
265237 else throw("Strict value is not equal to itself.")
266238 }
267239 else throw("Strict value is not equal to itself.")
268240 }
269241 else throw("Strict value is not equal to itself.")
270242 }
271243 else $Tuple2([ScriptTransfer(i.caller, i.payments[0].amount, i.payments[0].assetId)], 0)
272244 }
273245 }
274246
275247
276248
277249 @Callable(i)
278250 func claimRewards () = {
279251 let referrer = toString(i.caller)
280252 let totalRewards = getReferrerEarned(referrer)
281253 let totalClaimed = getReferrerClaimed(referrer)
282254 let toClaim = (totalRewards - totalClaimed)
283255 if ((toClaim > 0))
284256 then [IntegerEntry(getReferrerClaimedKey(referrer), (getReferrerClaimed(referrer) + toClaim)), ScriptTransfer(i.caller, toClaim, governanceAsset())]
285257 else throw("Nothing to claim")
286258 }
287259
288260
289261
290262 @Callable(i)
291-func initialize (_coordinator,_defaultFee,_swapAddress) = if (initialized())
292- then throw("Already initialized")
293- else [StringEntry(k_coordinatorAddress, _coordinator), StringEntry(k_swapAddress, _swapAddress), IntegerEntry(k_defaultFee, _defaultFee), BooleanEntry(k_initialized, true)]
294-
295-
296-
297-@Callable(i)
298-func setSwapAddress (_swapAddress) = if ((i.caller != adminAddress()))
299- then throw("Invalid setSwapAddress params")
300- else [StringEntry(k_swapAddress, _swapAddress)]
263+func initialize (_coordinator,_defaultFee) = if (if (initialized())
264+ then true
265+ else (i.caller != this))
266+ then throw("Unable to initialize")
267+ else [StringEntry(k_coordinatorAddress, toString(addressFromStringValue(_coordinator))), IntegerEntry(k_defaultFee, _defaultFee), BooleanEntry(k_initialized, true)]
301268
302269
303270 @Verifier(tx)
304-func verify () = sigVerify(tx.bodyBytes, tx.proofs[0], adminPublicKey())
271+func verify () = {
272+ let coordinatorStr = getString(this, k_coordinatorAddress)
273+ if (isDefined(coordinatorStr))
274+ then {
275+ let admin = getString(addressFromStringValue(value(coordinatorStr)), k_admin_address)
276+ if (isDefined(admin))
277+ then valueOrElse(getBoolean(addressFromStringValue(value(admin)), ((("status_" + toString(this)) + "_") + toBase58String(tx.id))), false)
278+ else throw("unable to verify: admin not set in coordinator")
279+ }
280+ else sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey)
281+ }
305282

github/deemru/w8io/c3f4982 
56.98 ms