tx · 6TPcFqN6ay2f4VK454xT1rFybx3knUMM4fLH3MMANeE8

3MxN27tyS9DuFsab1QSfM5Q2BfauiyVCr4M:  -0.03700000 Waves

2023.04.17 20:05 [2538841] smart account 3MxN27tyS9DuFsab1QSfM5Q2BfauiyVCr4M > SELF 0.00000000 Waves

{ "type": 13, "id": "6TPcFqN6ay2f4VK454xT1rFybx3knUMM4fLH3MMANeE8", "fee": 3700000, "feeAssetId": null, "timestamp": 1681751195328, "version": 2, "chainId": 84, "sender": "3MxN27tyS9DuFsab1QSfM5Q2BfauiyVCr4M", "senderPublicKey": "6PjNBLx8VTTNLWTS5y6zecyVfYCUC9ZCrAULFnLQU4XM", "proofs": [ "MqjTTAoitV1Mzfjk9HkLU2c2o3ikkNoDtVnnFKnJrmbTzXKT6rR3ogiRd7LwyGTZsCxpEaxTFw1s1JMA6pkcEeB" ], "script": "base64:BgIXCAISABIECgIICBIDCgEIEgASBAoCCAErABBrX3JlZl9saW5rX293bmVyAhBrX3JlZl9saW5rX293bmVyABZrX3JlZl9saW5rX293bmVyX2NvdW50AhZrX3JlZl9saW5rX293bmVyX2NvdW50ABBrX3JlZl9vd25lcl9saW5rAhBrX3JlZl9vd25lcl9saW5rAAprX3JlZmVycmVyAgprX3JlZmVycmVyAAhrX2FjdGl2ZQIIa19hY3RpdmUADGtfZGVmYXVsdEZlZQIMa19kZWZhdWx0RmVlABRrX3JlZmVycmVyX3JlZl9jb3VudAIUa19yZWZlcnJlcl9yZWZfY291bnQAEWtfcmVmZXJyZXJfZWFybmVkAhFrX3JlZmVycmVyX2Vhcm5lZAASa19yZWZlcnJlcl9jbGFpbWVkAhJrX3JlZmVycmVyX2NsYWltZWQADWtfaW5pdGlhbGl6ZWQCDWtfaW5pdGlhbGl6ZWQAFGtfY29vcmRpbmF0b3JBZGRyZXNzAhRrX2Nvb3JkaW5hdG9yQWRkcmVzcwAHa19jaGlsZAIHa19jaGlsZAASa19nb3Zlcm5hbmNlX2Fzc2V0AgtrX2dvdl9hc3NldAAPa19hZG1pbl9hZGRyZXNzAg9rX2FkbWluX2FkZHJlc3MABWtfYW1tAgVrX2FtbQAOa19zd2FwX2FkZHJlc3MCDmtfc3dhcF9hZGRyZXNzAQ50b0NvbXBvc2l0ZUtleQIEX2tleQhfYWRkcmVzcwkArAICCQCsAgIFBF9rZXkCAV8FCF9hZGRyZXNzARJnZXRSZWZlcnJlckxpbmtLZXkBBV9saW5rCQCsAgIJAKwCAgUQa19yZWZfbGlua19vd25lcgIBXwUFX2xpbmsBDmdldFJlZmVycmVyS2V5AQdfdHJhZGVyCQCsAgIJAKwCAgUKa19yZWZlcnJlcgIBXwUHX3RyYWRlcgEWZ2V0UmVmZXJyZXJSZWZDb3VudEtleQEJX3JlZmVycmVyCQCsAgIJAKwCAgUUa19yZWZlcnJlcl9yZWZfY291bnQCAV8FCV9yZWZlcnJlcgEXZ2V0UmVmZXJyZXJMaW5rQ291bnRLZXkBCV9yZWZlcnJlcgkArAICCQCsAgIFFmtfcmVmX2xpbmtfb3duZXJfY291bnQCAV8FCV9yZWZlcnJlcgEUZ2V0UmVmZXJyZXJMaW5rS2V5QXQCCV9yZWZlcnJlcgdfbGlua0lkCQCsAgIJAKwCAgkArAICCQCsAgIFEGtfcmVmX293bmVyX2xpbmsCAV8FCV9yZWZlcnJlcgIBXwkApAMBBQdfbGlua0lkARRnZXRSZWZlcnJlckVhcm5lZEtleQEJX3JlZmVycmVyCQCsAgIJAKwCAgURa19yZWZlcnJlcl9lYXJuZWQCAV8FCV9yZWZlcnJlcgEVZ2V0UmVmZXJyZXJDbGFpbWVkS2V5AQlfcmVmZXJyZXIJAKwCAgkArAICBRJrX3JlZmVycmVyX2NsYWltZWQCAV8FCV9yZWZlcnJlcgEMZ2V0QWN0aXZlS2V5AQdfdHJhZGVyCQCsAgIJAKwCAgUIa19hY3RpdmUCAV8FB190cmFkZXIBC2Nvb3JkaW5hdG9yAAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCmCAEJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQR0aGlzBRRrX2Nvb3JkaW5hdG9yQWRkcmVzcwITQ29vcmRpbmF0b3Igbm90IHNldAIbQ29vcmRpbmF0b3IgYWRkcmVzcyBpbnZhbGlkAQxhZG1pbkFkZHJlc3MACQCmCAEJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCCQELY29vcmRpbmF0b3IABQ9rX2FkbWluX2FkZHJlc3MCFUFkbWluIGFkZHJlc3Mgbm90IHNldAEPZ292ZXJuYW5jZUFzc2V0AAkA2QQBCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgkBC2Nvb3JkaW5hdG9yAAUSa19nb3Zlcm5hbmNlX2Fzc2V0AhhHb3Zlcm5hbmNlIGFzc2V0IG5vdCBzZXQBC3N3YXBBZGRyZXNzAAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCmCAEJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCCQELY29vcmRpbmF0b3IABQ5rX3N3YXBfYWRkcmVzcwIUU3dhcCBhZGRyZXNzIG5vdCBzZXQCFFN3YXAgYWRkcmVzcyBpbnZhbGlkAQtpc1doaXRlbGlzdAEIX2FkZHJlc3MED3Jvb3RDb29yZGluYXRvcgkBC2Nvb3JkaW5hdG9yAAQOYW1tQ29vcmRpbmF0b3IJARFAZXh0ck5hdGl2ZSgxMDYyKQEJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCCQERQGV4dHJOYXRpdmUoMTA2MikBBQhfYWRkcmVzcwUUa19jb29yZGluYXRvckFkZHJlc3MJAKwCAgIkTm8gY29vcmRpbmF0b3Igc2V0IGZvciBwb3NzaWJsZSBBTU0gBQhfYWRkcmVzcwQVYW1tQ29vcmRpbmF0b3JIYXZlQW1tCQELdmFsdWVPckVsc2UCCQCbCAIFDmFtbUNvb3JkaW5hdG9yCQEOdG9Db21wb3NpdGVLZXkCBQVrX2FtbQUIX2FkZHJlc3MHBBJpc1ZhbGlkQ29vcmRpbmF0b3IDCQAAAgUPcm9vdENvb3JkaW5hdG9yBQ5hbW1Db29yZGluYXRvcgYJAQt2YWx1ZU9yRWxzZQIJAJsIAgUPcm9vdENvb3JkaW5hdG9yCQEOdG9Db21wb3NpdGVLZXkCBQdrX2NoaWxkCQClCAEFDmFtbUNvb3JkaW5hdG9yBwMFFWFtbUNvb3JkaW5hdG9ySGF2ZUFtbQUSaXNWYWxpZENvb3JkaW5hdG9yBwAMREVDSU1BTF9VTklUCQBoAgABCQBoAgkAaAIJAGgCCQBoAgkAaAIACgAKAAoACgAKAAoBBG11bGQCAl94Al95CQBuBAUCX3gFAl95BQxERUNJTUFMX1VOSVQFCEhBTEZFVkVOAQNpbnQBAWsJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAmggCBQR0aGlzBQFrCQCsAgICDW5vIHZhbHVlIGZvciAFAWsBC2luaXRpYWxpemVkAAkBC3ZhbHVlT3JFbHNlAgkAmwgCBQR0aGlzBQ1rX2luaXRpYWxpemVkBwEPZ2V0TGlua1JlZmVycmVyAQVfbGluawkBC3ZhbHVlT3JFbHNlAgkAnQgCBQR0aGlzCQESZ2V0UmVmZXJyZXJMaW5rS2V5AQUFX2xpbmsCAAELZ2V0UmVmZXJyZXIBB190cmFkZXIJAQt2YWx1ZU9yRWxzZQIJAJ0IAgUEdGhpcwkBDmdldFJlZmVycmVyS2V5AQUHX3RyYWRlcgIAAQppc1JlZmVycmFsAQdfdHJhZGVyCQECIT0CCQELZ2V0UmVmZXJyZXIBBQdfdHJhZGVyAgABC2lzRmlyc3RUaW1lAQdfdHJhZGVyCQAAAgkBC3ZhbHVlT3JFbHNlAgkAmwgCBQR0aGlzCQEMZ2V0QWN0aXZlS2V5AQUHX3RyYWRlcgcHAQ1nZXREZWZhdWx0RmVlAAkBA2ludAEFDGtfZGVmYXVsdEZlZQETZ2V0UmVmZXJyZXJSZWZDb3VudAEJX3JlZmVycmVyCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMJARZnZXRSZWZlcnJlclJlZkNvdW50S2V5AQUJX3JlZmVycmVyAAABFGdldFJlZmVycmVyTGlua0NvdW50AQlfcmVmZXJyZXIJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwkBF2dldFJlZmVycmVyTGlua0NvdW50S2V5AQUJX3JlZmVycmVyAAABEWdldFJlZmVycmVyRWFybmVkAQlfcmVmZXJyZXIJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwkBFGdldFJlZmVycmVyRWFybmVkS2V5AQUJX3JlZmVycmVyAAABEmdldFJlZmVycmVyQ2xhaW1lZAEJX3JlZmVycmVyCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMJARVnZXRSZWZlcnJlckNsYWltZWRLZXkBBQlfcmVmZXJyZXIAAAUBaQESY3JlYXRlUmVmZXJyYWxMaW5rAAQDcmF3CQCsAgIJANgEAQgFAWkNdHJhbnNhY3Rpb25JZAkA2AQBCAUBaQ9jYWxsZXJQdWJsaWNLZXkEBWJ5dGVzCQCbAwEFA3JhdwQEbG9uZwkA2AQBCQD3AwEFBWJ5dGVzBAVzaG9ydAkArwICBQRsb25nAAoEA2tleQkBEmdldFJlZmVycmVyTGlua0tleQEFBXNob3J0BAZsaW5rSWQJAGQCCQEUZ2V0UmVmZXJyZXJMaW5rQ291bnQBCQClCAEIBQFpBmNhbGxlcgABAwkBCWlzRGVmaW5lZAEJAJ0IAgUEdGhpcwUDa2V5CQACAQIqU2hvcnQgbGluayBleGlzdHMsIHRyeSBnZW5lcmF0aW5nIGl0IGFnYWluCQDMCAIJAQtTdHJpbmdFbnRyeQIJARRnZXRSZWZlcnJlckxpbmtLZXlBdAIJAKUIAQgFAWkGY2FsbGVyBQZsaW5rSWQFBXNob3J0CQDMCAIJAQtTdHJpbmdFbnRyeQIFA2tleQkApQgBCAUBaQZjYWxsZXIFA25pbAFpARVhY2NlcHRQYXltZW50V2l0aExpbmsCB190cmFkZXIIX3JlZkxpbmsECl9yYXdBbW91bnQICQCRAwIIBQFpCHBheW1lbnRzAAAGYW1vdW50BANhbW0JAKUIAQgFAWkGY2FsbGVyAwMDCQEBIQEJAQtpc1doaXRlbGlzdAEFA2FtbQYJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAQYJAQEhAQkBC2luaXRpYWxpemVkAAkAAgECJEludmFsaWQgYWNjZXB0UGF5bWVudFdpdGhMaW5rIHBhcmFtcwQLX2lzUmVmZXJyYWwJAQppc1JlZmVycmFsAQUHX3RyYWRlcgQMX2lzRmlyc3RUaW1lCQELaXNGaXJzdFRpbWUBBQdfdHJhZGVyAwMFC19pc1JlZmVycmFsBgUMX2lzRmlyc3RUaW1lAwULX2lzUmVmZXJyYWwECHJlZmVycmVyCQELZ2V0UmVmZXJyZXIBBQdfdHJhZGVyBANmZWUJAQ1nZXREZWZhdWx0RmVlAAQQYW1vdW50VG9SZWZlcnJlcgkBBG11bGQCBQpfcmF3QW1vdW50BQNmZWUECmJlZm9yZVN3YXAJAPAHAgUEdGhpcwkBD2dvdmVybmFuY2VBc3NldAADCQAAAgUKYmVmb3JlU3dhcAUKYmVmb3JlU3dhcAQGZG9Td2FwCQD8BwQJAQtzd2FwQWRkcmVzcwACBHN3YXAJAMwIAgkA2AQBCQEPZ292ZXJuYW5jZUFzc2V0AAkAzAgCAAAFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AggJAJEDAggFAWkIcGF5bWVudHMAAAdhc3NldElkBRBhbW91bnRUb1JlZmVycmVyBQNuaWwDCQAAAgUGZG9Td2FwBQZkb1N3YXAECWFmdGVyU3dhcAkA8AcCBQR0aGlzCQEPZ292ZXJuYW5jZUFzc2V0AAMJAAACBQlhZnRlclN3YXAFCWFmdGVyU3dhcAQTYW1vdW50R292VG9SZWZlcnJlcgkAZQIFCWFmdGVyU3dhcAUKYmVmb3JlU3dhcAMJAAACBRNhbW91bnRHb3ZUb1JlZmVycmVyBRNhbW91bnRHb3ZUb1JlZmVycmVyCQCUCgIJAMwIAgkBDEludGVnZXJFbnRyeQIJARRnZXRSZWZlcnJlckVhcm5lZEtleQEFCHJlZmVycmVyCQBkAgkBEWdldFJlZmVycmVyRWFybmVkAQUIcmVmZXJyZXIFE2Ftb3VudEdvdlRvUmVmZXJyZXIJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwgFAWkGY2FsbGVyCQBlAggJAJEDAggFAWkIcGF5bWVudHMAAAZhbW91bnQFEGFtb3VudFRvUmVmZXJyZXIICQCRAwIIBQFpCHBheW1lbnRzAAAHYXNzZXRJZAUDbmlsBRBhbW91bnRUb1JlZmVycmVyCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuBAhyZWZlcnJlcgkBD2dldExpbmtSZWZlcnJlcgEFCF9yZWZMaW5rAwMJAAACBQhyZWZlcnJlcgIABgkAAAIFCHJlZmVycmVyBQdfdHJhZGVyCQCUCgIJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwgFAWkGY2FsbGVyCAkAkQMCCAUBaQhwYXltZW50cwAABmFtb3VudAgJAJEDAggFAWkIcGF5bWVudHMAAAdhc3NldElkCQDMCAIJAQxCb29sZWFuRW50cnkCCQEMZ2V0QWN0aXZlS2V5AQUHX3RyYWRlcgYFA25pbAAABANmZWUJAQ1nZXREZWZhdWx0RmVlAAQQYW1vdW50VG9SZWZlcnJlcgkBBG11bGQCBQpfcmF3QW1vdW50BQNmZWUECmJlZm9yZVN3YXAJAPAHAgUEdGhpcwkBD2dvdmVybmFuY2VBc3NldAADCQAAAgUKYmVmb3JlU3dhcAUKYmVmb3JlU3dhcAQGZG9Td2FwCQD8BwQJAQtzd2FwQWRkcmVzcwACBHN3YXAJAMwIAgkA2AQBCQEPZ292ZXJuYW5jZUFzc2V0AAkAzAgCAAAFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AggJAJEDAggFAWkIcGF5bWVudHMAAAdhc3NldElkBRBhbW91bnRUb1JlZmVycmVyBQNuaWwDCQAAAgUGZG9Td2FwBQZkb1N3YXAECWFmdGVyU3dhcAkA8AcCBQR0aGlzCQEPZ292ZXJuYW5jZUFzc2V0AAMJAAACBQlhZnRlclN3YXAFCWFmdGVyU3dhcAQTYW1vdW50R292VG9SZWZlcnJlcgkAZQIFCWFmdGVyU3dhcAUKYmVmb3JlU3dhcAMJAAACBRNhbW91bnRHb3ZUb1JlZmVycmVyBRNhbW91bnRHb3ZUb1JlZmVycmVyCQCUCgIJAMwIAgkBDEludGVnZXJFbnRyeQIJARZnZXRSZWZlcnJlclJlZkNvdW50S2V5AQUIcmVmZXJyZXIJAGQCCQETZ2V0UmVmZXJyZXJSZWZDb3VudAEFCHJlZmVycmVyAAEJAMwIAgkBDEludGVnZXJFbnRyeQIJARRnZXRSZWZlcnJlckVhcm5lZEtleQEFCHJlZmVycmVyCQBkAgkBEWdldFJlZmVycmVyRWFybmVkAQUIcmVmZXJyZXIFE2Ftb3VudEdvdlRvUmVmZXJyZXIJAMwIAgkBC1N0cmluZ0VudHJ5AgkBDmdldFJlZmVycmVyS2V5AQUHX3RyYWRlcgUIcmVmZXJyZXIJAMwIAgkBDEJvb2xlYW5FbnRyeQIJAQxnZXRBY3RpdmVLZXkBBQdfdHJhZGVyBgkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCAUBaQZjYWxsZXIJAGUCCAkAkQMCCAUBaQhwYXltZW50cwAABmFtb3VudAUQYW1vdW50VG9SZWZlcnJlcggJAJEDAggFAWkIcGF5bWVudHMAAAdhc3NldElkBQNuaWwFEGFtb3VudFRvUmVmZXJyZXIJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAJQKAgkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCAUBaQZjYWxsZXIICQCRAwIIBQFpCHBheW1lbnRzAAAGYW1vdW50CAkAkQMCCAUBaQhwYXltZW50cwAAB2Fzc2V0SWQFA25pbAAAAWkBDWFjY2VwdFBheW1lbnQBB190cmFkZXIECl9yYXdBbW91bnQICQCRAwIIBQFpCHBheW1lbnRzAAAGYW1vdW50BANhbW0JAKUIAQgFAWkGY2FsbGVyAwMDCQEBIQEJAQtpc1doaXRlbGlzdAEFA2FtbQYJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAQYJAQEhAQkBC2luaXRpYWxpemVkAAkAAgECHEludmFsaWQgYWNjZXB0UGF5bWVudCBwYXJhbXMEC19pc1JlZmVycmFsCQEKaXNSZWZlcnJhbAEFB190cmFkZXIDBQtfaXNSZWZlcnJhbAQIcmVmZXJyZXIJAQtnZXRSZWZlcnJlcgEFB190cmFkZXIEA2ZlZQkBDWdldERlZmF1bHRGZWUABBBhbW91bnRUb1JlZmVycmVyCQEEbXVsZAIFCl9yYXdBbW91bnQFA2ZlZQQKYmVmb3JlU3dhcAkA8AcCBQR0aGlzCQEPZ292ZXJuYW5jZUFzc2V0AAMJAAACBQpiZWZvcmVTd2FwBQpiZWZvcmVTd2FwBAZkb1N3YXAJAPwHBAkBC3N3YXBBZGRyZXNzAAIEc3dhcAkAzAgCCQDYBAEJAQ9nb3Zlcm5hbmNlQXNzZXQACQDMCAIAAAUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCCAkAkQMCCAUBaQhwYXltZW50cwAAB2Fzc2V0SWQFEGFtb3VudFRvUmVmZXJyZXIFA25pbAMJAAACBQZkb1N3YXAFBmRvU3dhcAQJYWZ0ZXJTd2FwCQDwBwIFBHRoaXMJAQ9nb3Zlcm5hbmNlQXNzZXQAAwkAAAIFCWFmdGVyU3dhcAUJYWZ0ZXJTd2FwBBNhbW91bnRHb3ZUb1JlZmVycmVyCQBlAgUJYWZ0ZXJTd2FwBQpiZWZvcmVTd2FwAwkAAAIFE2Ftb3VudEdvdlRvUmVmZXJyZXIFE2Ftb3VudEdvdlRvUmVmZXJyZXIJAJQKAgkAzAgCCQEMSW50ZWdlckVudHJ5AgkBFGdldFJlZmVycmVyRWFybmVkS2V5AQUIcmVmZXJyZXIJAGQCCQERZ2V0UmVmZXJyZXJFYXJuZWQBBQhyZWZlcnJlcgUTYW1vdW50R292VG9SZWZlcnJlcgkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCAUBaQZjYWxsZXIJAGUCCAkAkQMCCAUBaQhwYXltZW50cwAABmFtb3VudAUQYW1vdW50VG9SZWZlcnJlcggJAJEDAggFAWkIcGF5bWVudHMAAAdhc3NldElkBQNuaWwFEGFtb3VudFRvUmVmZXJyZXIJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAJQKAgkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCAUBaQZjYWxsZXIICQCRAwIIBQFpCHBheW1lbnRzAAAGYW1vdW50CAkAkQMCCAUBaQhwYXltZW50cwAAB2Fzc2V0SWQFA25pbAAAAWkBDGNsYWltUmV3YXJkcwAECHJlZmVycmVyCQClCAEIBQFpBmNhbGxlcgQMdG90YWxSZXdhcmRzCQERZ2V0UmVmZXJyZXJFYXJuZWQBBQhyZWZlcnJlcgQMdG90YWxDbGFpbWVkCQESZ2V0UmVmZXJyZXJDbGFpbWVkAQUIcmVmZXJyZXIEB3RvQ2xhaW0JAGUCBQx0b3RhbFJld2FyZHMFDHRvdGFsQ2xhaW1lZAMJAGYCBQd0b0NsYWltAAAJAMwIAgkBDEludGVnZXJFbnRyeQIJARVnZXRSZWZlcnJlckNsYWltZWRLZXkBBQhyZWZlcnJlcgkAZAIJARJnZXRSZWZlcnJlckNsYWltZWQBBQhyZWZlcnJlcgUHdG9DbGFpbQkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCAUBaQZjYWxsZXIFB3RvQ2xhaW0JAQ9nb3Zlcm5hbmNlQXNzZXQABQNuaWwJAAIBAhBOb3RoaW5nIHRvIGNsYWltAWkBCmluaXRpYWxpemUCDF9jb29yZGluYXRvcgtfZGVmYXVsdEZlZQMDCQELaW5pdGlhbGl6ZWQABgkBAiE9AggFAWkGY2FsbGVyBQR0aGlzCQACAQIUVW5hYmxlIHRvIGluaXRpYWxpemUJAMwIAgkBC1N0cmluZ0VudHJ5AgUUa19jb29yZGluYXRvckFkZHJlc3MJAKUIAQkBEUBleHRyTmF0aXZlKDEwNjIpAQUMX2Nvb3JkaW5hdG9yCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQxrX2RlZmF1bHRGZWUFC19kZWZhdWx0RmVlCQDMCAIJAQxCb29sZWFuRW50cnkCBQ1rX2luaXRpYWxpemVkBgUDbmlsAQJ0eAEGdmVyaWZ5AAQOY29vcmRpbmF0b3JTdHIJAJ0IAgUEdGhpcwUUa19jb29yZGluYXRvckFkZHJlc3MDCQEJaXNEZWZpbmVkAQUOY29vcmRpbmF0b3JTdHIEBWFkbWluCQCdCAIJARFAZXh0ck5hdGl2ZSgxMDYyKQEJAQV2YWx1ZQEFDmNvb3JkaW5hdG9yU3RyBQ9rX2FkbWluX2FkZHJlc3MDCQEJaXNEZWZpbmVkAQUFYWRtaW4JAQt2YWx1ZU9yRWxzZQIJAJsIAgkBEUBleHRyTmF0aXZlKDEwNjIpAQkBBXZhbHVlAQUFYWRtaW4JAKwCAgkArAICCQCsAgICB3N0YXR1c18JAKUIAQUEdGhpcwIBXwkA2AQBCAUCdHgCaWQHCQACAQIudW5hYmxlIHRvIHZlcmlmeTogYWRtaW4gbm90IHNldCBpbiBjb29yZGluYXRvcgkA9AMDCAUCdHgJYm9keUJ5dGVzCQCRAwIIBQJ0eAZwcm9vZnMAAAgFAnR4D3NlbmRlclB1YmxpY0tleR6+FKw=", "height": 2538841, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: A8RoaNxuSWcg7X6G1ECVao2vPNb8X7HoNqjsizy2tZpq Next: none 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"
2523
2624 let k_coordinatorAddress = "k_coordinatorAddress"
2725
26+let k_child = "k_child"
27+
2828 let k_governance_asset = "k_gov_asset"
29-
30-let k_quote_asset = "k_quote_asset"
31-
32-let k_admin_public_key = "k_admin_public_key"
3329
3430 let k_admin_address = "k_admin_address"
3531
3632 let k_amm = "k_amm"
33+
34+let k_swap_address = "k_swap_address"
3735
3836 func toCompositeKey (_key,_address) = ((_key + "_") + _address)
3937
6260 func getActiveKey (_trader) = ((k_active + "_") + _trader)
6361
6462
65-func coordinator () = valueOrErrorMessage(addressFromString(getStringValue(this, k_coordinatorAddress)), "Coordinator not set")
63+func coordinator () = valueOrErrorMessage(addressFromString(valueOrErrorMessage(getString(this, k_coordinatorAddress), "Coordinator not set")), "Coordinator address invalid")
6664
6765
68-func adminPublicKey () = fromBase58String(getStringValue(coordinator(), k_admin_public_key))
66+func adminAddress () = addressFromString(valueOrErrorMessage(getString(coordinator(), k_admin_address), "Admin address not set"))
6967
7068
71-func adminAddress () = addressFromString(getStringValue(coordinator(), k_admin_address))
69+func governanceAsset () = fromBase58String(valueOrErrorMessage(getString(coordinator(), k_governance_asset), "Governance asset not set"))
7270
7371
74-func governanceAsset () = fromBase58String(getStringValue(coordinator(), k_governance_asset))
72+func swapAddress () = valueOrErrorMessage(addressFromString(valueOrErrorMessage(getString(coordinator(), k_swap_address), "Swap address not set")), "Swap address invalid")
7573
7674
77-func quoteAsset () = fromBase58String(getStringValue(coordinator(), k_quote_asset))
78-
79-
80-func isWhitelist (_address) = valueOrElse(getBoolean(coordinator(), toCompositeKey(k_amm, _address)), false)
75+func isWhitelist (_address) = {
76+ let rootCoordinator = coordinator()
77+ let ammCoordinator = addressFromStringValue(valueOrErrorMessage(getString(addressFromStringValue(_address), k_coordinatorAddress), ("No coordinator set for possible AMM " + _address)))
78+ let ammCoordinatorHaveAmm = valueOrElse(getBoolean(ammCoordinator, toCompositeKey(k_amm, _address)), false)
79+ let isValidCoordinator = if ((rootCoordinator == ammCoordinator))
80+ then true
81+ else valueOrElse(getBoolean(rootCoordinator, toCompositeKey(k_child, toString(ammCoordinator))), false)
82+ if (ammCoordinatorHaveAmm)
83+ then isValidCoordinator
84+ else false
85+ }
8186
8287
8388 let DECIMAL_UNIT = (1 * (((((10 * 10) * 10) * 10) * 10) * 10))
8489
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-
9790 func muld (_x,_y) = fraction(_x, _y, DECIMAL_UNIT, HALFEVEN)
9891
9992
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-
11093 func int (k) = valueOrErrorMessage(getInteger(this, k), ("no value for " + k))
111-
112-
113-func int0 (k) = valueOrElse(getInteger(this, k), 0)
11494
11595
11696 func initialized () = valueOrElse(getBoolean(this, k_initialized), false)
162142 func acceptPaymentWithLink (_trader,_refLink) = {
163143 let _rawAmount = i.payments[0].amount
164144 let amm = toString(i.caller)
165- if (if (!(isWhitelist(amm)))
145+ if (if (if (!(isWhitelist(amm)))
146+ then true
147+ else (size(i.payments) != 1))
166148 then true
167149 else !(initialized()))
168150 then throw("Invalid acceptPaymentWithLink params")
180162 let beforeSwap = assetBalance(this, governanceAsset())
181163 if ((beforeSwap == beforeSwap))
182164 then {
183- let doSwap = invoke(swapAddress(), "swap", [toBase58String(governanceAsset()), 0], [AttachedPayment(quoteAsset(), amountToReferrer)])
165+ let doSwap = invoke(swapAddress(), "swap", [toBase58String(governanceAsset()), 0], [AttachedPayment(i.payments[0].assetId, amountToReferrer)])
184166 if ((doSwap == doSwap))
185167 then {
186168 let afterSwap = assetBalance(this, governanceAsset())
209191 let beforeSwap = assetBalance(this, governanceAsset())
210192 if ((beforeSwap == beforeSwap))
211193 then {
212- let doSwap = invoke(swapAddress(), "swap", [toBase58String(governanceAsset()), 0], [AttachedPayment(quoteAsset(), amountToReferrer)])
194+ let doSwap = invoke(swapAddress(), "swap", [toBase58String(governanceAsset()), 0], [AttachedPayment(i.payments[0].assetId, amountToReferrer)])
213195 if ((doSwap == doSwap))
214196 then {
215197 let afterSwap = assetBalance(this, governanceAsset())
237219 func acceptPayment (_trader) = {
238220 let _rawAmount = i.payments[0].amount
239221 let amm = toString(i.caller)
240- if (if (!(isWhitelist(amm)))
222+ if (if (if (!(isWhitelist(amm)))
223+ then true
224+ else (size(i.payments) != 1))
241225 then true
242226 else !(initialized()))
243227 then throw("Invalid acceptPayment params")
251235 let beforeSwap = assetBalance(this, governanceAsset())
252236 if ((beforeSwap == beforeSwap))
253237 then {
254- let doSwap = invoke(swapAddress(), "swap", [toBase58String(governanceAsset()), 0], [AttachedPayment(quoteAsset(), amountToReferrer)])
238+ let doSwap = invoke(swapAddress(), "swap", [toBase58String(governanceAsset()), 0], [AttachedPayment(i.payments[0].assetId, amountToReferrer)])
255239 if ((doSwap == doSwap))
256240 then {
257241 let afterSwap = assetBalance(this, governanceAsset())
288272
289273
290274 @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)]
275+func initialize (_coordinator,_defaultFee) = if (if (initialized())
276+ then true
277+ else (i.caller != this))
278+ then throw("Unable to initialize")
279+ else [StringEntry(k_coordinatorAddress, toString(addressFromStringValue(_coordinator))), IntegerEntry(k_defaultFee, _defaultFee), BooleanEntry(k_initialized, true)]
301280
302281
303282 @Verifier(tx)
304-func verify () = sigVerify(tx.bodyBytes, tx.proofs[0], adminPublicKey())
283+func verify () = {
284+ let coordinatorStr = getString(this, k_coordinatorAddress)
285+ if (isDefined(coordinatorStr))
286+ then {
287+ let admin = getString(addressFromStringValue(value(coordinatorStr)), k_admin_address)
288+ if (isDefined(admin))
289+ then valueOrElse(getBoolean(addressFromStringValue(value(admin)), ((("status_" + toString(this)) + "_") + toBase58String(tx.id))), false)
290+ else throw("unable to verify: admin not set in coordinator")
291+ }
292+ else sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey)
293+ }
305294
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
26+let k_child = "k_child"
27+
2828 let k_governance_asset = "k_gov_asset"
29-
30-let k_quote_asset = "k_quote_asset"
31-
32-let k_admin_public_key = "k_admin_public_key"
3329
3430 let k_admin_address = "k_admin_address"
3531
3632 let k_amm = "k_amm"
33+
34+let k_swap_address = "k_swap_address"
3735
3836 func toCompositeKey (_key,_address) = ((_key + "_") + _address)
3937
4038
4139 func getReferrerLinkKey (_link) = ((k_ref_link_owner + "_") + _link)
4240
4341
4442 func getReferrerKey (_trader) = ((k_referrer + "_") + _trader)
4543
4644
4745 func getReferrerRefCountKey (_referrer) = ((k_referrer_ref_count + "_") + _referrer)
4846
4947
5048 func getReferrerLinkCountKey (_referrer) = ((k_ref_link_owner_count + "_") + _referrer)
5149
5250
5351 func getReferrerLinkKeyAt (_referrer,_linkId) = ((((k_ref_owner_link + "_") + _referrer) + "_") + toString(_linkId))
5452
5553
5654 func getReferrerEarnedKey (_referrer) = ((k_referrer_earned + "_") + _referrer)
5755
5856
5957 func getReferrerClaimedKey (_referrer) = ((k_referrer_claimed + "_") + _referrer)
6058
6159
6260 func getActiveKey (_trader) = ((k_active + "_") + _trader)
6361
6462
65-func coordinator () = valueOrErrorMessage(addressFromString(getStringValue(this, k_coordinatorAddress)), "Coordinator not set")
63+func coordinator () = valueOrErrorMessage(addressFromString(valueOrErrorMessage(getString(this, k_coordinatorAddress), "Coordinator not set")), "Coordinator address invalid")
6664
6765
68-func adminPublicKey () = fromBase58String(getStringValue(coordinator(), k_admin_public_key))
66+func adminAddress () = addressFromString(valueOrErrorMessage(getString(coordinator(), k_admin_address), "Admin address not set"))
6967
7068
71-func adminAddress () = addressFromString(getStringValue(coordinator(), k_admin_address))
69+func governanceAsset () = fromBase58String(valueOrErrorMessage(getString(coordinator(), k_governance_asset), "Governance asset not set"))
7270
7371
74-func governanceAsset () = fromBase58String(getStringValue(coordinator(), k_governance_asset))
72+func swapAddress () = valueOrErrorMessage(addressFromString(valueOrErrorMessage(getString(coordinator(), k_swap_address), "Swap address not set")), "Swap address invalid")
7573
7674
77-func quoteAsset () = fromBase58String(getStringValue(coordinator(), k_quote_asset))
78-
79-
80-func isWhitelist (_address) = valueOrElse(getBoolean(coordinator(), toCompositeKey(k_amm, _address)), false)
75+func isWhitelist (_address) = {
76+ let rootCoordinator = coordinator()
77+ let ammCoordinator = addressFromStringValue(valueOrErrorMessage(getString(addressFromStringValue(_address), k_coordinatorAddress), ("No coordinator set for possible AMM " + _address)))
78+ let ammCoordinatorHaveAmm = valueOrElse(getBoolean(ammCoordinator, toCompositeKey(k_amm, _address)), false)
79+ let isValidCoordinator = if ((rootCoordinator == ammCoordinator))
80+ then true
81+ else valueOrElse(getBoolean(rootCoordinator, toCompositeKey(k_child, toString(ammCoordinator))), false)
82+ if (ammCoordinatorHaveAmm)
83+ then isValidCoordinator
84+ else false
85+ }
8186
8287
8388 let DECIMAL_UNIT = (1 * (((((10 * 10) * 10) * 10) * 10) * 10))
8489
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-
9790 func muld (_x,_y) = fraction(_x, _y, DECIMAL_UNIT, HALFEVEN)
9891
9992
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-
11093 func int (k) = valueOrErrorMessage(getInteger(this, k), ("no value for " + k))
111-
112-
113-func int0 (k) = valueOrElse(getInteger(this, k), 0)
11494
11595
11696 func initialized () = valueOrElse(getBoolean(this, k_initialized), false)
11797
11898
11999 func getLinkReferrer (_link) = valueOrElse(getString(this, getReferrerLinkKey(_link)), "")
120100
121101
122102 func getReferrer (_trader) = valueOrElse(getString(this, getReferrerKey(_trader)), "")
123103
124104
125105 func isReferral (_trader) = (getReferrer(_trader) != "")
126106
127107
128108 func isFirstTime (_trader) = (valueOrElse(getBoolean(this, getActiveKey(_trader)), false) == false)
129109
130110
131111 func getDefaultFee () = int(k_defaultFee)
132112
133113
134114 func getReferrerRefCount (_referrer) = valueOrElse(getInteger(this, getReferrerRefCountKey(_referrer)), 0)
135115
136116
137117 func getReferrerLinkCount (_referrer) = valueOrElse(getInteger(this, getReferrerLinkCountKey(_referrer)), 0)
138118
139119
140120 func getReferrerEarned (_referrer) = valueOrElse(getInteger(this, getReferrerEarnedKey(_referrer)), 0)
141121
142122
143123 func getReferrerClaimed (_referrer) = valueOrElse(getInteger(this, getReferrerClaimedKey(_referrer)), 0)
144124
145125
146126 @Callable(i)
147127 func createReferralLink () = {
148128 let raw = (toBase58String(i.transactionId) + toBase58String(i.callerPublicKey))
149129 let bytes = toBytes(raw)
150130 let long = toBase58String(sha256(bytes))
151131 let short = take(long, 10)
152132 let key = getReferrerLinkKey(short)
153133 let linkId = (getReferrerLinkCount(toString(i.caller)) + 1)
154134 if (isDefined(getString(this, key)))
155135 then throw("Short link exists, try generating it again")
156136 else [StringEntry(getReferrerLinkKeyAt(toString(i.caller), linkId), short), StringEntry(key, toString(i.caller))]
157137 }
158138
159139
160140
161141 @Callable(i)
162142 func acceptPaymentWithLink (_trader,_refLink) = {
163143 let _rawAmount = i.payments[0].amount
164144 let amm = toString(i.caller)
165- if (if (!(isWhitelist(amm)))
145+ if (if (if (!(isWhitelist(amm)))
146+ then true
147+ else (size(i.payments) != 1))
166148 then true
167149 else !(initialized()))
168150 then throw("Invalid acceptPaymentWithLink params")
169151 else {
170152 let _isReferral = isReferral(_trader)
171153 let _isFirstTime = isFirstTime(_trader)
172154 if (if (_isReferral)
173155 then true
174156 else _isFirstTime)
175157 then if (_isReferral)
176158 then {
177159 let referrer = getReferrer(_trader)
178160 let fee = getDefaultFee()
179161 let amountToReferrer = muld(_rawAmount, fee)
180162 let beforeSwap = assetBalance(this, governanceAsset())
181163 if ((beforeSwap == beforeSwap))
182164 then {
183- let doSwap = invoke(swapAddress(), "swap", [toBase58String(governanceAsset()), 0], [AttachedPayment(quoteAsset(), amountToReferrer)])
165+ let doSwap = invoke(swapAddress(), "swap", [toBase58String(governanceAsset()), 0], [AttachedPayment(i.payments[0].assetId, amountToReferrer)])
184166 if ((doSwap == doSwap))
185167 then {
186168 let afterSwap = assetBalance(this, governanceAsset())
187169 if ((afterSwap == afterSwap))
188170 then {
189171 let amountGovToReferrer = (afterSwap - beforeSwap)
190172 if ((amountGovToReferrer == amountGovToReferrer))
191173 then $Tuple2([IntegerEntry(getReferrerEarnedKey(referrer), (getReferrerEarned(referrer) + amountGovToReferrer)), ScriptTransfer(i.caller, (i.payments[0].amount - amountToReferrer), i.payments[0].assetId)], amountToReferrer)
192174 else throw("Strict value is not equal to itself.")
193175 }
194176 else throw("Strict value is not equal to itself.")
195177 }
196178 else throw("Strict value is not equal to itself.")
197179 }
198180 else throw("Strict value is not equal to itself.")
199181 }
200182 else {
201183 let referrer = getLinkReferrer(_refLink)
202184 if (if ((referrer == ""))
203185 then true
204186 else (referrer == _trader))
205187 then $Tuple2([ScriptTransfer(i.caller, i.payments[0].amount, i.payments[0].assetId), BooleanEntry(getActiveKey(_trader), true)], 0)
206188 else {
207189 let fee = getDefaultFee()
208190 let amountToReferrer = muld(_rawAmount, fee)
209191 let beforeSwap = assetBalance(this, governanceAsset())
210192 if ((beforeSwap == beforeSwap))
211193 then {
212- let doSwap = invoke(swapAddress(), "swap", [toBase58String(governanceAsset()), 0], [AttachedPayment(quoteAsset(), amountToReferrer)])
194+ let doSwap = invoke(swapAddress(), "swap", [toBase58String(governanceAsset()), 0], [AttachedPayment(i.payments[0].assetId, amountToReferrer)])
213195 if ((doSwap == doSwap))
214196 then {
215197 let afterSwap = assetBalance(this, governanceAsset())
216198 if ((afterSwap == afterSwap))
217199 then {
218200 let amountGovToReferrer = (afterSwap - beforeSwap)
219201 if ((amountGovToReferrer == amountGovToReferrer))
220202 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)
221203 else throw("Strict value is not equal to itself.")
222204 }
223205 else throw("Strict value is not equal to itself.")
224206 }
225207 else throw("Strict value is not equal to itself.")
226208 }
227209 else throw("Strict value is not equal to itself.")
228210 }
229211 }
230212 else $Tuple2([ScriptTransfer(i.caller, i.payments[0].amount, i.payments[0].assetId)], 0)
231213 }
232214 }
233215
234216
235217
236218 @Callable(i)
237219 func acceptPayment (_trader) = {
238220 let _rawAmount = i.payments[0].amount
239221 let amm = toString(i.caller)
240- if (if (!(isWhitelist(amm)))
222+ if (if (if (!(isWhitelist(amm)))
223+ then true
224+ else (size(i.payments) != 1))
241225 then true
242226 else !(initialized()))
243227 then throw("Invalid acceptPayment params")
244228 else {
245229 let _isReferral = isReferral(_trader)
246230 if (_isReferral)
247231 then {
248232 let referrer = getReferrer(_trader)
249233 let fee = getDefaultFee()
250234 let amountToReferrer = muld(_rawAmount, fee)
251235 let beforeSwap = assetBalance(this, governanceAsset())
252236 if ((beforeSwap == beforeSwap))
253237 then {
254- let doSwap = invoke(swapAddress(), "swap", [toBase58String(governanceAsset()), 0], [AttachedPayment(quoteAsset(), amountToReferrer)])
238+ let doSwap = invoke(swapAddress(), "swap", [toBase58String(governanceAsset()), 0], [AttachedPayment(i.payments[0].assetId, amountToReferrer)])
255239 if ((doSwap == doSwap))
256240 then {
257241 let afterSwap = assetBalance(this, governanceAsset())
258242 if ((afterSwap == afterSwap))
259243 then {
260244 let amountGovToReferrer = (afterSwap - beforeSwap)
261245 if ((amountGovToReferrer == amountGovToReferrer))
262246 then $Tuple2([IntegerEntry(getReferrerEarnedKey(referrer), (getReferrerEarned(referrer) + amountGovToReferrer)), ScriptTransfer(i.caller, (i.payments[0].amount - amountToReferrer), i.payments[0].assetId)], amountToReferrer)
263247 else throw("Strict value is not equal to itself.")
264248 }
265249 else throw("Strict value is not equal to itself.")
266250 }
267251 else throw("Strict value is not equal to itself.")
268252 }
269253 else throw("Strict value is not equal to itself.")
270254 }
271255 else $Tuple2([ScriptTransfer(i.caller, i.payments[0].amount, i.payments[0].assetId)], 0)
272256 }
273257 }
274258
275259
276260
277261 @Callable(i)
278262 func claimRewards () = {
279263 let referrer = toString(i.caller)
280264 let totalRewards = getReferrerEarned(referrer)
281265 let totalClaimed = getReferrerClaimed(referrer)
282266 let toClaim = (totalRewards - totalClaimed)
283267 if ((toClaim > 0))
284268 then [IntegerEntry(getReferrerClaimedKey(referrer), (getReferrerClaimed(referrer) + toClaim)), ScriptTransfer(i.caller, toClaim, governanceAsset())]
285269 else throw("Nothing to claim")
286270 }
287271
288272
289273
290274 @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)]
275+func initialize (_coordinator,_defaultFee) = if (if (initialized())
276+ then true
277+ else (i.caller != this))
278+ then throw("Unable to initialize")
279+ else [StringEntry(k_coordinatorAddress, toString(addressFromStringValue(_coordinator))), IntegerEntry(k_defaultFee, _defaultFee), BooleanEntry(k_initialized, true)]
301280
302281
303282 @Verifier(tx)
304-func verify () = sigVerify(tx.bodyBytes, tx.proofs[0], adminPublicKey())
283+func verify () = {
284+ let coordinatorStr = getString(this, k_coordinatorAddress)
285+ if (isDefined(coordinatorStr))
286+ then {
287+ let admin = getString(addressFromStringValue(value(coordinatorStr)), k_admin_address)
288+ if (isDefined(admin))
289+ then valueOrElse(getBoolean(addressFromStringValue(value(admin)), ((("status_" + toString(this)) + "_") + toBase58String(tx.id))), false)
290+ else throw("unable to verify: admin not set in coordinator")
291+ }
292+ else sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey)
293+ }
305294

github/deemru/w8io/3ef1775 
66.26 ms