tx · A8RoaNxuSWcg7X6G1ECVao2vPNb8X7HoNqjsizy2tZpq

3MxN27tyS9DuFsab1QSfM5Q2BfauiyVCr4M:  -0.03700000 Waves

2022.10.06 10:16 [2260145] smart account 3MxN27tyS9DuFsab1QSfM5Q2BfauiyVCr4M > SELF 0.00000000 Waves

{ "type": 13, "id": "A8RoaNxuSWcg7X6G1ECVao2vPNb8X7HoNqjsizy2tZpq", "fee": 3700000, "feeAssetId": null, "timestamp": 1665040565927, "version": 2, "chainId": 84, "sender": "3MxN27tyS9DuFsab1QSfM5Q2BfauiyVCr4M", "senderPublicKey": "6PjNBLx8VTTNLWTS5y6zecyVfYCUC9ZCrAULFnLQU4XM", "proofs": [ "FPtfuDdkSffPzpXdmsy3HVcPXYrqKUgzu3YEPuFsS2wn7HtgFzT2V9FbHneE1wfoLBTBRAc2RZRhcdsnhb589iE" ], "script": "base64:BgIdCAISABIECgIICBIDCgEIEgASBQoDCAEIEgMKAQg0ABBrX3JlZl9saW5rX293bmVyAhBrX3JlZl9saW5rX293bmVyABZrX3JlZl9saW5rX293bmVyX2NvdW50AhZrX3JlZl9saW5rX293bmVyX2NvdW50ABBrX3JlZl9vd25lcl9saW5rAhBrX3JlZl9vd25lcl9saW5rAAprX3JlZmVycmVyAgprX3JlZmVycmVyAAhrX2FjdGl2ZQIIa19hY3RpdmUADGtfZGVmYXVsdEZlZQIMa19kZWZhdWx0RmVlAA1rX3N3YXBBZGRyZXNzAg1rX3N3YXBBZGRyZXNzABRrX3JlZmVycmVyX3JlZl9jb3VudAIUa19yZWZlcnJlcl9yZWZfY291bnQAEWtfcmVmZXJyZXJfZWFybmVkAhFrX3JlZmVycmVyX2Vhcm5lZAASa19yZWZlcnJlcl9jbGFpbWVkAhJrX3JlZmVycmVyX2NsYWltZWQADWtfaW5pdGlhbGl6ZWQCDWtfaW5pdGlhbGl6ZWQAFGtfY29vcmRpbmF0b3JBZGRyZXNzAhRrX2Nvb3JkaW5hdG9yQWRkcmVzcwASa19nb3Zlcm5hbmNlX2Fzc2V0AgtrX2dvdl9hc3NldAANa19xdW90ZV9hc3NldAINa19xdW90ZV9hc3NldAASa19hZG1pbl9wdWJsaWNfa2V5AhJrX2FkbWluX3B1YmxpY19rZXkAD2tfYWRtaW5fYWRkcmVzcwIPa19hZG1pbl9hZGRyZXNzAAVrX2FtbQIFa19hbW0BDnRvQ29tcG9zaXRlS2V5AgRfa2V5CF9hZGRyZXNzCQCsAgIJAKwCAgUEX2tleQIBXwUIX2FkZHJlc3MBEmdldFJlZmVycmVyTGlua0tleQEFX2xpbmsJAKwCAgkArAICBRBrX3JlZl9saW5rX293bmVyAgFfBQVfbGluawEOZ2V0UmVmZXJyZXJLZXkBB190cmFkZXIJAKwCAgkArAICBQprX3JlZmVycmVyAgFfBQdfdHJhZGVyARZnZXRSZWZlcnJlclJlZkNvdW50S2V5AQlfcmVmZXJyZXIJAKwCAgkArAICBRRrX3JlZmVycmVyX3JlZl9jb3VudAIBXwUJX3JlZmVycmVyARdnZXRSZWZlcnJlckxpbmtDb3VudEtleQEJX3JlZmVycmVyCQCsAgIJAKwCAgUWa19yZWZfbGlua19vd25lcl9jb3VudAIBXwUJX3JlZmVycmVyARRnZXRSZWZlcnJlckxpbmtLZXlBdAIJX3JlZmVycmVyB19saW5rSWQJAKwCAgkArAICCQCsAgIJAKwCAgUQa19yZWZfb3duZXJfbGluawIBXwUJX3JlZmVycmVyAgFfCQCkAwEFB19saW5rSWQBFGdldFJlZmVycmVyRWFybmVkS2V5AQlfcmVmZXJyZXIJAKwCAgkArAICBRFrX3JlZmVycmVyX2Vhcm5lZAIBXwUJX3JlZmVycmVyARVnZXRSZWZlcnJlckNsYWltZWRLZXkBCV9yZWZlcnJlcgkArAICCQCsAgIFEmtfcmVmZXJyZXJfY2xhaW1lZAIBXwUJX3JlZmVycmVyAQxnZXRBY3RpdmVLZXkBB190cmFkZXIJAKwCAgkArAICBQhrX2FjdGl2ZQIBXwUHX3RyYWRlcgELY29vcmRpbmF0b3IACQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKYIAQkBEUBleHRyTmF0aXZlKDEwNTMpAgUEdGhpcwUUa19jb29yZGluYXRvckFkZHJlc3MCE0Nvb3JkaW5hdG9yIG5vdCBzZXQBDmFkbWluUHVibGljS2V5AAkA2QQBCQERQGV4dHJOYXRpdmUoMTA1MykCCQELY29vcmRpbmF0b3IABRJrX2FkbWluX3B1YmxpY19rZXkBDGFkbWluQWRkcmVzcwAJAKYIAQkBEUBleHRyTmF0aXZlKDEwNTMpAgkBC2Nvb3JkaW5hdG9yAAUPa19hZG1pbl9hZGRyZXNzAQ9nb3Zlcm5hbmNlQXNzZXQACQDZBAEJARFAZXh0ck5hdGl2ZSgxMDUzKQIJAQtjb29yZGluYXRvcgAFEmtfZ292ZXJuYW5jZV9hc3NldAEKcXVvdGVBc3NldAAJANkEAQkBEUBleHRyTmF0aXZlKDEwNTMpAgkBC2Nvb3JkaW5hdG9yAAUNa19xdW90ZV9hc3NldAELaXNXaGl0ZWxpc3QBCF9hZGRyZXNzCQELdmFsdWVPckVsc2UCCQCbCAIJAQtjb29yZGluYXRvcgAJAQ50b0NvbXBvc2l0ZUtleQIFBWtfYW1tBQhfYWRkcmVzcwcADERFQ0lNQUxfVU5JVAkAaAIAAQkAaAIJAGgCCQBoAgkAaAIJAGgCAAoACgAKAAoACgAKAQtzd2FwQWRkcmVzcwAJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkApggBCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgUEdGhpcwUNa19zd2FwQWRkcmVzcwIQTm93IHN3YXAgYWRkcmVzcwIUSW52YWxpZCBzd2FwIGFkZHJlc3MBEHVzZG5Gcm9tRGVjaW1hbHMBB19hbW91bnQJAGkCBQdfYW1vdW50AGQBDnVzZG5Ub0RlY2ltYWxzAQdfYW1vdW50CQBoAgUHX2Ftb3VudABkAQRkaXZkAgJfeAJfeQkAbgQFAl94BQxERUNJTUFMX1VOSVQFAl95BQhIQUxGRVZFTgEEbXVsZAICX3gCX3kJAG4EBQJfeAUCX3kFDERFQ0lNQUxfVU5JVAUISEFMRkVWRU4BA2FicwECX3gDCQBmAgUCX3gAAAUCX3gJAQEtAQUCX3gBBG1pbnYCAl94Al95AwkAZgIFAl94BQJfeQUCX3kFAl94AQNpbnQBAWsJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAmggCBQR0aGlzBQFrCQCsAgICDW5vIHZhbHVlIGZvciAFAWsBBGludDABAWsJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwUBawAAAQtpbml0aWFsaXplZAAJAQt2YWx1ZU9yRWxzZQIJAJsIAgUEdGhpcwUNa19pbml0aWFsaXplZAcBD2dldExpbmtSZWZlcnJlcgEFX2xpbmsJAQt2YWx1ZU9yRWxzZQIJAJ0IAgUEdGhpcwkBEmdldFJlZmVycmVyTGlua0tleQEFBV9saW5rAgABC2dldFJlZmVycmVyAQdfdHJhZGVyCQELdmFsdWVPckVsc2UCCQCdCAIFBHRoaXMJAQ5nZXRSZWZlcnJlcktleQEFB190cmFkZXICAAEKaXNSZWZlcnJhbAEHX3RyYWRlcgkBAiE9AgkBC2dldFJlZmVycmVyAQUHX3RyYWRlcgIAAQtpc0ZpcnN0VGltZQEHX3RyYWRlcgkAAAIJAQt2YWx1ZU9yRWxzZQIJAJsIAgUEdGhpcwkBDGdldEFjdGl2ZUtleQEFB190cmFkZXIHBwENZ2V0RGVmYXVsdEZlZQAJAQNpbnQBBQxrX2RlZmF1bHRGZWUBE2dldFJlZmVycmVyUmVmQ291bnQBCV9yZWZlcnJlcgkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzCQEWZ2V0UmVmZXJyZXJSZWZDb3VudEtleQEFCV9yZWZlcnJlcgAAARRnZXRSZWZlcnJlckxpbmtDb3VudAEJX3JlZmVycmVyCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMJARdnZXRSZWZlcnJlckxpbmtDb3VudEtleQEFCV9yZWZlcnJlcgAAARFnZXRSZWZlcnJlckVhcm5lZAEJX3JlZmVycmVyCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMJARRnZXRSZWZlcnJlckVhcm5lZEtleQEFCV9yZWZlcnJlcgAAARJnZXRSZWZlcnJlckNsYWltZWQBCV9yZWZlcnJlcgkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzCQEVZ2V0UmVmZXJyZXJDbGFpbWVkS2V5AQUJX3JlZmVycmVyAAAGAWkBEmNyZWF0ZVJlZmVycmFsTGluawAEA3JhdwkArAICCQDYBAEIBQFpDXRyYW5zYWN0aW9uSWQJANgEAQgFAWkPY2FsbGVyUHVibGljS2V5BAVieXRlcwkAmwMBBQNyYXcEBGxvbmcJANgEAQkA9wMBBQVieXRlcwQFc2hvcnQJAK8CAgUEbG9uZwAKBANrZXkJARJnZXRSZWZlcnJlckxpbmtLZXkBBQVzaG9ydAQGbGlua0lkCQBkAgkBFGdldFJlZmVycmVyTGlua0NvdW50AQkApQgBCAUBaQZjYWxsZXIAAQMJAQlpc0RlZmluZWQBCQCdCAIFBHRoaXMFA2tleQkAAgECKlNob3J0IGxpbmsgZXhpc3RzLCB0cnkgZ2VuZXJhdGluZyBpdCBhZ2FpbgkAzAgCCQELU3RyaW5nRW50cnkCCQEUZ2V0UmVmZXJyZXJMaW5rS2V5QXQCCQClCAEIBQFpBmNhbGxlcgUGbGlua0lkBQVzaG9ydAkAzAgCCQELU3RyaW5nRW50cnkCBQNrZXkJAKUIAQgFAWkGY2FsbGVyBQNuaWwBaQEVYWNjZXB0UGF5bWVudFdpdGhMaW5rAgdfdHJhZGVyCF9yZWZMaW5rBApfcmF3QW1vdW50CAkAkQMCCAUBaQhwYXltZW50cwAABmFtb3VudAQDYW1tCQClCAEIBQFpBmNhbGxlcgMDCQEBIQEJAQtpc1doaXRlbGlzdAEFA2FtbQYJAQEhAQkBC2luaXRpYWxpemVkAAkAAgECJEludmFsaWQgYWNjZXB0UGF5bWVudFdpdGhMaW5rIHBhcmFtcwQLX2lzUmVmZXJyYWwJAQppc1JlZmVycmFsAQUHX3RyYWRlcgQMX2lzRmlyc3RUaW1lCQELaXNGaXJzdFRpbWUBBQdfdHJhZGVyAwMFC19pc1JlZmVycmFsBgUMX2lzRmlyc3RUaW1lAwULX2lzUmVmZXJyYWwECHJlZmVycmVyCQELZ2V0UmVmZXJyZXIBBQdfdHJhZGVyBANmZWUJAQ1nZXREZWZhdWx0RmVlAAQQYW1vdW50VG9SZWZlcnJlcgkBBG11bGQCBQpfcmF3QW1vdW50BQNmZWUECmJlZm9yZVN3YXAJAPAHAgUEdGhpcwkBD2dvdmVybmFuY2VBc3NldAADCQAAAgUKYmVmb3JlU3dhcAUKYmVmb3JlU3dhcAQGZG9Td2FwCQD8BwQJAQtzd2FwQWRkcmVzcwACBHN3YXAJAMwIAgkA2AQBCQEPZ292ZXJuYW5jZUFzc2V0AAkAzAgCAAAFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgkBCnF1b3RlQXNzZXQABRBhbW91bnRUb1JlZmVycmVyBQNuaWwDCQAAAgUGZG9Td2FwBQZkb1N3YXAECWFmdGVyU3dhcAkA8AcCBQR0aGlzCQEPZ292ZXJuYW5jZUFzc2V0AAMJAAACBQlhZnRlclN3YXAFCWFmdGVyU3dhcAQTYW1vdW50R292VG9SZWZlcnJlcgkAZQIFCWFmdGVyU3dhcAUKYmVmb3JlU3dhcAMJAAACBRNhbW91bnRHb3ZUb1JlZmVycmVyBRNhbW91bnRHb3ZUb1JlZmVycmVyCQCUCgIJAMwIAgkBDEludGVnZXJFbnRyeQIJARRnZXRSZWZlcnJlckVhcm5lZEtleQEFCHJlZmVycmVyCQBkAgkBEWdldFJlZmVycmVyRWFybmVkAQUIcmVmZXJyZXIFE2Ftb3VudEdvdlRvUmVmZXJyZXIJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwgFAWkGY2FsbGVyCQBlAggJAJEDAggFAWkIcGF5bWVudHMAAAZhbW91bnQFEGFtb3VudFRvUmVmZXJyZXIICQCRAwIIBQFpCHBheW1lbnRzAAAHYXNzZXRJZAUDbmlsBRBhbW91bnRUb1JlZmVycmVyCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuBAhyZWZlcnJlcgkBD2dldExpbmtSZWZlcnJlcgEFCF9yZWZMaW5rAwMJAAACBQhyZWZlcnJlcgIABgkAAAIFCHJlZmVycmVyBQdfdHJhZGVyCQCUCgIJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwgFAWkGY2FsbGVyCAkAkQMCCAUBaQhwYXltZW50cwAABmFtb3VudAgJAJEDAggFAWkIcGF5bWVudHMAAAdhc3NldElkCQDMCAIJAQxCb29sZWFuRW50cnkCCQEMZ2V0QWN0aXZlS2V5AQUHX3RyYWRlcgYFA25pbAAABANmZWUJAQ1nZXREZWZhdWx0RmVlAAQQYW1vdW50VG9SZWZlcnJlcgkBBG11bGQCBQpfcmF3QW1vdW50BQNmZWUECmJlZm9yZVN3YXAJAPAHAgUEdGhpcwkBD2dvdmVybmFuY2VBc3NldAADCQAAAgUKYmVmb3JlU3dhcAUKYmVmb3JlU3dhcAQGZG9Td2FwCQD8BwQJAQtzd2FwQWRkcmVzcwACBHN3YXAJAMwIAgkA2AQBCQEPZ292ZXJuYW5jZUFzc2V0AAkAzAgCAAAFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgkBCnF1b3RlQXNzZXQABRBhbW91bnRUb1JlZmVycmVyBQNuaWwDCQAAAgUGZG9Td2FwBQZkb1N3YXAECWFmdGVyU3dhcAkA8AcCBQR0aGlzCQEPZ292ZXJuYW5jZUFzc2V0AAMJAAACBQlhZnRlclN3YXAFCWFmdGVyU3dhcAQTYW1vdW50R292VG9SZWZlcnJlcgkAZQIFCWFmdGVyU3dhcAUKYmVmb3JlU3dhcAMJAAACBRNhbW91bnRHb3ZUb1JlZmVycmVyBRNhbW91bnRHb3ZUb1JlZmVycmVyCQCUCgIJAMwIAgkBDEludGVnZXJFbnRyeQIJARZnZXRSZWZlcnJlclJlZkNvdW50S2V5AQUIcmVmZXJyZXIJAGQCCQETZ2V0UmVmZXJyZXJSZWZDb3VudAEFCHJlZmVycmVyAAEJAMwIAgkBDEludGVnZXJFbnRyeQIJARRnZXRSZWZlcnJlckVhcm5lZEtleQEFCHJlZmVycmVyCQBkAgkBEWdldFJlZmVycmVyRWFybmVkAQUIcmVmZXJyZXIFE2Ftb3VudEdvdlRvUmVmZXJyZXIJAMwIAgkBC1N0cmluZ0VudHJ5AgkBDmdldFJlZmVycmVyS2V5AQUHX3RyYWRlcgUIcmVmZXJyZXIJAMwIAgkBDEJvb2xlYW5FbnRyeQIJAQxnZXRBY3RpdmVLZXkBBQdfdHJhZGVyBgkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCAUBaQZjYWxsZXIJAGUCCAkAkQMCCAUBaQhwYXltZW50cwAABmFtb3VudAUQYW1vdW50VG9SZWZlcnJlcggJAJEDAggFAWkIcGF5bWVudHMAAAdhc3NldElkBQNuaWwFEGFtb3VudFRvUmVmZXJyZXIJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAJQKAgkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCAUBaQZjYWxsZXIICQCRAwIIBQFpCHBheW1lbnRzAAAGYW1vdW50CAkAkQMCCAUBaQhwYXltZW50cwAAB2Fzc2V0SWQFA25pbAAAAWkBDWFjY2VwdFBheW1lbnQBB190cmFkZXIECl9yYXdBbW91bnQICQCRAwIIBQFpCHBheW1lbnRzAAAGYW1vdW50BANhbW0JAKUIAQgFAWkGY2FsbGVyAwMJAQEhAQkBC2lzV2hpdGVsaXN0AQUDYW1tBgkBASEBCQELaW5pdGlhbGl6ZWQACQACAQIcSW52YWxpZCBhY2NlcHRQYXltZW50IHBhcmFtcwQLX2lzUmVmZXJyYWwJAQppc1JlZmVycmFsAQUHX3RyYWRlcgMFC19pc1JlZmVycmFsBAhyZWZlcnJlcgkBC2dldFJlZmVycmVyAQUHX3RyYWRlcgQDZmVlCQENZ2V0RGVmYXVsdEZlZQAEEGFtb3VudFRvUmVmZXJyZXIJAQRtdWxkAgUKX3Jhd0Ftb3VudAUDZmVlBApiZWZvcmVTd2FwCQDwBwIFBHRoaXMJAQ9nb3Zlcm5hbmNlQXNzZXQAAwkAAAIFCmJlZm9yZVN3YXAFCmJlZm9yZVN3YXAEBmRvU3dhcAkA/AcECQELc3dhcEFkZHJlc3MAAgRzd2FwCQDMCAIJANgEAQkBD2dvdmVybmFuY2VBc3NldAAJAMwIAgAABQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIJAQpxdW90ZUFzc2V0AAUQYW1vdW50VG9SZWZlcnJlcgUDbmlsAwkAAAIFBmRvU3dhcAUGZG9Td2FwBAlhZnRlclN3YXAJAPAHAgUEdGhpcwkBD2dvdmVybmFuY2VBc3NldAADCQAAAgUJYWZ0ZXJTd2FwBQlhZnRlclN3YXAEE2Ftb3VudEdvdlRvUmVmZXJyZXIJAGUCBQlhZnRlclN3YXAFCmJlZm9yZVN3YXADCQAAAgUTYW1vdW50R292VG9SZWZlcnJlcgUTYW1vdW50R292VG9SZWZlcnJlcgkAlAoCCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEUZ2V0UmVmZXJyZXJFYXJuZWRLZXkBBQhyZWZlcnJlcgkAZAIJARFnZXRSZWZlcnJlckVhcm5lZAEFCHJlZmVycmVyBRNhbW91bnRHb3ZUb1JlZmVycmVyCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMIBQFpBmNhbGxlcgkAZQIICQCRAwIIBQFpCHBheW1lbnRzAAAGYW1vdW50BRBhbW91bnRUb1JlZmVycmVyCAkAkQMCCAUBaQhwYXltZW50cwAAB2Fzc2V0SWQFA25pbAUQYW1vdW50VG9SZWZlcnJlcgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAlAoCCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMIBQFpBmNhbGxlcggJAJEDAggFAWkIcGF5bWVudHMAAAZhbW91bnQICQCRAwIIBQFpCHBheW1lbnRzAAAHYXNzZXRJZAUDbmlsAAABaQEMY2xhaW1SZXdhcmRzAAQIcmVmZXJyZXIJAKUIAQgFAWkGY2FsbGVyBAx0b3RhbFJld2FyZHMJARFnZXRSZWZlcnJlckVhcm5lZAEFCHJlZmVycmVyBAx0b3RhbENsYWltZWQJARJnZXRSZWZlcnJlckNsYWltZWQBBQhyZWZlcnJlcgQHdG9DbGFpbQkAZQIFDHRvdGFsUmV3YXJkcwUMdG90YWxDbGFpbWVkAwkAZgIFB3RvQ2xhaW0AAAkAzAgCCQEMSW50ZWdlckVudHJ5AgkBFWdldFJlZmVycmVyQ2xhaW1lZEtleQEFCHJlZmVycmVyCQBkAgkBEmdldFJlZmVycmVyQ2xhaW1lZAEFCHJlZmVycmVyBQd0b0NsYWltCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMIBQFpBmNhbGxlcgUHdG9DbGFpbQkBD2dvdmVybmFuY2VBc3NldAAFA25pbAkAAgECEE5vdGhpbmcgdG8gY2xhaW0BaQEKaW5pdGlhbGl6ZQMMX2Nvb3JkaW5hdG9yC19kZWZhdWx0RmVlDF9zd2FwQWRkcmVzcwMJAQtpbml0aWFsaXplZAAJAAIBAhNBbHJlYWR5IGluaXRpYWxpemVkCQDMCAIJAQtTdHJpbmdFbnRyeQIFFGtfY29vcmRpbmF0b3JBZGRyZXNzBQxfY29vcmRpbmF0b3IJAMwIAgkBC1N0cmluZ0VudHJ5AgUNa19zd2FwQWRkcmVzcwUMX3N3YXBBZGRyZXNzCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQxrX2RlZmF1bHRGZWUFC19kZWZhdWx0RmVlCQDMCAIJAQxCb29sZWFuRW50cnkCBQ1rX2luaXRpYWxpemVkBgUDbmlsAWkBDnNldFN3YXBBZGRyZXNzAQxfc3dhcEFkZHJlc3MDCQECIT0CCAUBaQZjYWxsZXIJAQxhZG1pbkFkZHJlc3MACQACAQIdSW52YWxpZCBzZXRTd2FwQWRkcmVzcyBwYXJhbXMJAMwIAgkBC1N0cmluZ0VudHJ5AgUNa19zd2FwQWRkcmVzcwUMX3N3YXBBZGRyZXNzBQNuaWwBAnR4AQZ2ZXJpZnkACQD0AwMIBQJ0eAlib2R5Qnl0ZXMJAJEDAggFAnR4BnByb29mcwAACQEOYWRtaW5QdWJsaWNLZXkAWkQjsg==", "height": 2260145, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 4rj3raxFbSJnq3Va31d43cCz7gCc1VaMk6rb2BRWyv6S Next: 6TPcFqN6ay2f4VK454xT1rFybx3knUMM4fLH3MMANeE8 Diff:
OldNewDifferences
169169 else {
170170 let _isReferral = isReferral(_trader)
171171 let _isFirstTime = isFirstTime(_trader)
172- if (if (isReferral(_trader))
172+ if (if (_isReferral)
173173 then true
174- else isFirstTime(_trader))
174+ else _isFirstTime)
175175 then if (_isReferral)
176176 then {
177177 let referrer = getReferrer(_trader)
199199 }
200200 else {
201201 let referrer = getLinkReferrer(_refLink)
202- if ((referrer == ""))
202+ if (if ((referrer == ""))
203+ then true
204+ else (referrer == _trader))
203205 then $Tuple2([ScriptTransfer(i.caller, i.payments[0].amount, i.payments[0].assetId), BooleanEntry(getActiveKey(_trader), true)], 0)
204206 else {
205207 let fee = getDefaultFee()
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
1616 let k_swapAddress = "k_swapAddress"
1717
1818 let k_referrer_ref_count = "k_referrer_ref_count"
1919
2020 let k_referrer_earned = "k_referrer_earned"
2121
2222 let k_referrer_claimed = "k_referrer_claimed"
2323
2424 let k_initialized = "k_initialized"
2525
2626 let k_coordinatorAddress = "k_coordinatorAddress"
2727
2828 let k_governance_asset = "k_gov_asset"
2929
3030 let k_quote_asset = "k_quote_asset"
3131
3232 let k_admin_public_key = "k_admin_public_key"
3333
3434 let k_admin_address = "k_admin_address"
3535
3636 let k_amm = "k_amm"
3737
3838 func toCompositeKey (_key,_address) = ((_key + "_") + _address)
3939
4040
4141 func getReferrerLinkKey (_link) = ((k_ref_link_owner + "_") + _link)
4242
4343
4444 func getReferrerKey (_trader) = ((k_referrer + "_") + _trader)
4545
4646
4747 func getReferrerRefCountKey (_referrer) = ((k_referrer_ref_count + "_") + _referrer)
4848
4949
5050 func getReferrerLinkCountKey (_referrer) = ((k_ref_link_owner_count + "_") + _referrer)
5151
5252
5353 func getReferrerLinkKeyAt (_referrer,_linkId) = ((((k_ref_owner_link + "_") + _referrer) + "_") + toString(_linkId))
5454
5555
5656 func getReferrerEarnedKey (_referrer) = ((k_referrer_earned + "_") + _referrer)
5757
5858
5959 func getReferrerClaimedKey (_referrer) = ((k_referrer_claimed + "_") + _referrer)
6060
6161
6262 func getActiveKey (_trader) = ((k_active + "_") + _trader)
6363
6464
6565 func coordinator () = valueOrErrorMessage(addressFromString(getStringValue(this, k_coordinatorAddress)), "Coordinator not set")
6666
6767
6868 func adminPublicKey () = fromBase58String(getStringValue(coordinator(), k_admin_public_key))
6969
7070
7171 func adminAddress () = addressFromString(getStringValue(coordinator(), k_admin_address))
7272
7373
7474 func governanceAsset () = fromBase58String(getStringValue(coordinator(), k_governance_asset))
7575
7676
7777 func quoteAsset () = fromBase58String(getStringValue(coordinator(), k_quote_asset))
7878
7979
8080 func isWhitelist (_address) = valueOrElse(getBoolean(coordinator(), toCompositeKey(k_amm, _address)), false)
8181
8282
8383 let DECIMAL_UNIT = (1 * (((((10 * 10) * 10) * 10) * 10) * 10))
8484
8585 func swapAddress () = valueOrErrorMessage(addressFromString(valueOrErrorMessage(getString(this, k_swapAddress), "Now swap address")), "Invalid swap address")
8686
8787
8888 func usdnFromDecimals (_amount) = (_amount / 100)
8989
9090
9191 func usdnToDecimals (_amount) = (_amount * 100)
9292
9393
9494 func divd (_x,_y) = fraction(_x, DECIMAL_UNIT, _y, HALFEVEN)
9595
9696
9797 func muld (_x,_y) = fraction(_x, _y, DECIMAL_UNIT, HALFEVEN)
9898
9999
100100 func abs (_x) = if ((_x > 0))
101101 then _x
102102 else -(_x)
103103
104104
105105 func minv (_x,_y) = if ((_x > _y))
106106 then _y
107107 else _x
108108
109109
110110 func int (k) = valueOrErrorMessage(getInteger(this, k), ("no value for " + k))
111111
112112
113113 func int0 (k) = valueOrElse(getInteger(this, k), 0)
114114
115115
116116 func initialized () = valueOrElse(getBoolean(this, k_initialized), false)
117117
118118
119119 func getLinkReferrer (_link) = valueOrElse(getString(this, getReferrerLinkKey(_link)), "")
120120
121121
122122 func getReferrer (_trader) = valueOrElse(getString(this, getReferrerKey(_trader)), "")
123123
124124
125125 func isReferral (_trader) = (getReferrer(_trader) != "")
126126
127127
128128 func isFirstTime (_trader) = (valueOrElse(getBoolean(this, getActiveKey(_trader)), false) == false)
129129
130130
131131 func getDefaultFee () = int(k_defaultFee)
132132
133133
134134 func getReferrerRefCount (_referrer) = valueOrElse(getInteger(this, getReferrerRefCountKey(_referrer)), 0)
135135
136136
137137 func getReferrerLinkCount (_referrer) = valueOrElse(getInteger(this, getReferrerLinkCountKey(_referrer)), 0)
138138
139139
140140 func getReferrerEarned (_referrer) = valueOrElse(getInteger(this, getReferrerEarnedKey(_referrer)), 0)
141141
142142
143143 func getReferrerClaimed (_referrer) = valueOrElse(getInteger(this, getReferrerClaimedKey(_referrer)), 0)
144144
145145
146146 @Callable(i)
147147 func createReferralLink () = {
148148 let raw = (toBase58String(i.transactionId) + toBase58String(i.callerPublicKey))
149149 let bytes = toBytes(raw)
150150 let long = toBase58String(sha256(bytes))
151151 let short = take(long, 10)
152152 let key = getReferrerLinkKey(short)
153153 let linkId = (getReferrerLinkCount(toString(i.caller)) + 1)
154154 if (isDefined(getString(this, key)))
155155 then throw("Short link exists, try generating it again")
156156 else [StringEntry(getReferrerLinkKeyAt(toString(i.caller), linkId), short), StringEntry(key, toString(i.caller))]
157157 }
158158
159159
160160
161161 @Callable(i)
162162 func acceptPaymentWithLink (_trader,_refLink) = {
163163 let _rawAmount = i.payments[0].amount
164164 let amm = toString(i.caller)
165165 if (if (!(isWhitelist(amm)))
166166 then true
167167 else !(initialized()))
168168 then throw("Invalid acceptPaymentWithLink params")
169169 else {
170170 let _isReferral = isReferral(_trader)
171171 let _isFirstTime = isFirstTime(_trader)
172- if (if (isReferral(_trader))
172+ if (if (_isReferral)
173173 then true
174- else isFirstTime(_trader))
174+ else _isFirstTime)
175175 then if (_isReferral)
176176 then {
177177 let referrer = getReferrer(_trader)
178178 let fee = getDefaultFee()
179179 let amountToReferrer = muld(_rawAmount, fee)
180180 let beforeSwap = assetBalance(this, governanceAsset())
181181 if ((beforeSwap == beforeSwap))
182182 then {
183183 let doSwap = invoke(swapAddress(), "swap", [toBase58String(governanceAsset()), 0], [AttachedPayment(quoteAsset(), amountToReferrer)])
184184 if ((doSwap == doSwap))
185185 then {
186186 let afterSwap = assetBalance(this, governanceAsset())
187187 if ((afterSwap == afterSwap))
188188 then {
189189 let amountGovToReferrer = (afterSwap - beforeSwap)
190190 if ((amountGovToReferrer == amountGovToReferrer))
191191 then $Tuple2([IntegerEntry(getReferrerEarnedKey(referrer), (getReferrerEarned(referrer) + amountGovToReferrer)), ScriptTransfer(i.caller, (i.payments[0].amount - amountToReferrer), i.payments[0].assetId)], amountToReferrer)
192192 else throw("Strict value is not equal to itself.")
193193 }
194194 else throw("Strict value is not equal to itself.")
195195 }
196196 else throw("Strict value is not equal to itself.")
197197 }
198198 else throw("Strict value is not equal to itself.")
199199 }
200200 else {
201201 let referrer = getLinkReferrer(_refLink)
202- if ((referrer == ""))
202+ if (if ((referrer == ""))
203+ then true
204+ else (referrer == _trader))
203205 then $Tuple2([ScriptTransfer(i.caller, i.payments[0].amount, i.payments[0].assetId), BooleanEntry(getActiveKey(_trader), true)], 0)
204206 else {
205207 let fee = getDefaultFee()
206208 let amountToReferrer = muld(_rawAmount, fee)
207209 let beforeSwap = assetBalance(this, governanceAsset())
208210 if ((beforeSwap == beforeSwap))
209211 then {
210212 let doSwap = invoke(swapAddress(), "swap", [toBase58String(governanceAsset()), 0], [AttachedPayment(quoteAsset(), amountToReferrer)])
211213 if ((doSwap == doSwap))
212214 then {
213215 let afterSwap = assetBalance(this, governanceAsset())
214216 if ((afterSwap == afterSwap))
215217 then {
216218 let amountGovToReferrer = (afterSwap - beforeSwap)
217219 if ((amountGovToReferrer == amountGovToReferrer))
218220 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)
219221 else throw("Strict value is not equal to itself.")
220222 }
221223 else throw("Strict value is not equal to itself.")
222224 }
223225 else throw("Strict value is not equal to itself.")
224226 }
225227 else throw("Strict value is not equal to itself.")
226228 }
227229 }
228230 else $Tuple2([ScriptTransfer(i.caller, i.payments[0].amount, i.payments[0].assetId)], 0)
229231 }
230232 }
231233
232234
233235
234236 @Callable(i)
235237 func acceptPayment (_trader) = {
236238 let _rawAmount = i.payments[0].amount
237239 let amm = toString(i.caller)
238240 if (if (!(isWhitelist(amm)))
239241 then true
240242 else !(initialized()))
241243 then throw("Invalid acceptPayment params")
242244 else {
243245 let _isReferral = isReferral(_trader)
244246 if (_isReferral)
245247 then {
246248 let referrer = getReferrer(_trader)
247249 let fee = getDefaultFee()
248250 let amountToReferrer = muld(_rawAmount, fee)
249251 let beforeSwap = assetBalance(this, governanceAsset())
250252 if ((beforeSwap == beforeSwap))
251253 then {
252254 let doSwap = invoke(swapAddress(), "swap", [toBase58String(governanceAsset()), 0], [AttachedPayment(quoteAsset(), amountToReferrer)])
253255 if ((doSwap == doSwap))
254256 then {
255257 let afterSwap = assetBalance(this, governanceAsset())
256258 if ((afterSwap == afterSwap))
257259 then {
258260 let amountGovToReferrer = (afterSwap - beforeSwap)
259261 if ((amountGovToReferrer == amountGovToReferrer))
260262 then $Tuple2([IntegerEntry(getReferrerEarnedKey(referrer), (getReferrerEarned(referrer) + amountGovToReferrer)), ScriptTransfer(i.caller, (i.payments[0].amount - amountToReferrer), i.payments[0].assetId)], amountToReferrer)
261263 else throw("Strict value is not equal to itself.")
262264 }
263265 else throw("Strict value is not equal to itself.")
264266 }
265267 else throw("Strict value is not equal to itself.")
266268 }
267269 else throw("Strict value is not equal to itself.")
268270 }
269271 else $Tuple2([ScriptTransfer(i.caller, i.payments[0].amount, i.payments[0].assetId)], 0)
270272 }
271273 }
272274
273275
274276
275277 @Callable(i)
276278 func claimRewards () = {
277279 let referrer = toString(i.caller)
278280 let totalRewards = getReferrerEarned(referrer)
279281 let totalClaimed = getReferrerClaimed(referrer)
280282 let toClaim = (totalRewards - totalClaimed)
281283 if ((toClaim > 0))
282284 then [IntegerEntry(getReferrerClaimedKey(referrer), (getReferrerClaimed(referrer) + toClaim)), ScriptTransfer(i.caller, toClaim, governanceAsset())]
283285 else throw("Nothing to claim")
284286 }
285287
286288
287289
288290 @Callable(i)
289291 func initialize (_coordinator,_defaultFee,_swapAddress) = if (initialized())
290292 then throw("Already initialized")
291293 else [StringEntry(k_coordinatorAddress, _coordinator), StringEntry(k_swapAddress, _swapAddress), IntegerEntry(k_defaultFee, _defaultFee), BooleanEntry(k_initialized, true)]
292294
293295
294296
295297 @Callable(i)
296298 func setSwapAddress (_swapAddress) = if ((i.caller != adminAddress()))
297299 then throw("Invalid setSwapAddress params")
298300 else [StringEntry(k_swapAddress, _swapAddress)]
299301
300302
301303 @Verifier(tx)
302304 func verify () = sigVerify(tx.bodyBytes, tx.proofs[0], adminPublicKey())
303305

github/deemru/w8io/873ac7e 
41.97 ms