tx · 4WAtGQGcVKHkVnmvUufbKWDY8sogrvwDUu1GLPEwfoCr

3Mtzn1SRUhygEXMVpHNMckc8HKCWjq2fTiG:  -0.01400000 Waves

2020.08.03 17:28 [1116308] smart account 3Mtzn1SRUhygEXMVpHNMckc8HKCWjq2fTiG > SELF 0.00000000 Waves

{ "type": 13, "id": "4WAtGQGcVKHkVnmvUufbKWDY8sogrvwDUu1GLPEwfoCr", "fee": 1400000, "feeAssetId": null, "timestamp": 1596464897170, "version": 1, "sender": "3Mtzn1SRUhygEXMVpHNMckc8HKCWjq2fTiG", "senderPublicKey": "2WHjsmTCwLeerJuc5YMaJNou8UGSHuy4TE3F6DneRaJt", "proofs": [ "42c6kUtpagEWu7saTWkRgAsZgNcFg6ThBwUWd9EyPvrxwgm1FbdMiLgphgTmboZpJroRbhM1wzCd8x7abxYh4xMr" ], "script": "base64:AAIDAAAAAAAAACIIARIHCgUICAgICBIHCgUBAQEBBBIDCgEIEgASAwoBCBIAAAAAMgAAAAAHQlVMTEtleQIAAAAGQlVMTElkAAAAAAdCRUFSS2V5AgAAAAZCRUFSSWQAAAAADG1haW5Ub2tlbktleQIAAAALbWFpblRva2VuSWQAAAAAEmlzc3VlUGVyY2VudGlsZUtleQIAAAAPaXNzdWVQZXJjZW50aWxlAAAAABNyZWRlZW1QZXJjZW50aWxlS2V5AgAAABByZWRlZW1QZXJjZW50aWxlAAAAAAttaW5Jc3N1ZUtleQIAAAAIbWluSXNzdWUAAAAADG1pblJlZGVlbUtleQIAAAAJbWluUmVkZWVtAAAAABB3aGl0ZWxpc3RPbmx5S2V5AgAAAA13aGl0ZWxpc3RPbmx5AAAAAAtvcmFjbGVQS0tleQIAAAAGb3JhY2xlAAAAABFsYXN0UHJpY2VJbmRleEtleQIAAAALcHJpY2VfaW5kZXgAAAAAEHByaWNlSW5kZXhQcmVmaXgCAAAADHByaWNlX2luZGV4XwAAAAARcHJpY2VIZWlnaHRQcmVmaXgCAAAABnByaWNlXwAAAAAab3JhY2xlQ3VycmVudFByaWNlSW5kZXhLZXkCAAAAC3ByaWNlX2luZGV4AAAAABpsYXN0UmViYWxhbmNlUHJpY2VJbmRleEtleQIAAAAVbGFzdFNldHRsZW1lbnRQcmljZUlkAAAAABFidWxsQ29sbGF0ZXJhbEtleQIAAAAOYnVsbENvbGxhdGVyYWwAAAAAEWJlYXJDb2xsYXRlcmFsS2V5AgAAAA5iZWFyQ29sbGF0ZXJhbAAAAAASYnVsbENpcmN1bGF0aW9uS2V5AgAAAA9idWxsQ2lyY3VsYXRpb24AAAAAEmJlYXJDaXJjdWxhdGlvbktleQIAAAAPYmVhckNpcmN1bGF0aW9uAAAAAAx3aGl0ZWxpc3RLZXkCAAAADmlzc3VlV2hpdGVMaXN0AAAAAAl3aGl0ZWxpc3QJAQAAABN2YWx1ZU9yRXJyb3JNZXNzYWdlAAAAAgkABB0AAAACBQAAAAR0aGlzBQAAAAx3aGl0ZWxpc3RLZXkCAAAAFG5vIGJ1bGxDb2xsYXRlcmFsS2V5AAAAAAdidWxsQ29sCQEAAAATdmFsdWVPckVycm9yTWVzc2FnZQAAAAIJAAQaAAAAAgUAAAAEdGhpcwUAAAARYnVsbENvbGxhdGVyYWxLZXkCAAAAFG5vIGJ1bGxDb2xsYXRlcmFsS2V5AAAAAAdiZWFyQ29sCQEAAAATdmFsdWVPckVycm9yTWVzc2FnZQAAAAIJAAQaAAAAAgUAAAAEdGhpcwUAAAARYmVhckNvbGxhdGVyYWxLZXkCAAAAFG5vIGJlYXJDb2xsYXRlcmFsS2V5AAAAAAhidWxsQ2lyYwkBAAAAE3ZhbHVlT3JFcnJvck1lc3NhZ2UAAAACCQAEGgAAAAIFAAAABHRoaXMFAAAAEmJ1bGxDaXJjdWxhdGlvbktleQIAAAAVbm8gYnVsbENpcmN1bGF0aW9uS2V5AAAAAAhiZWFyQ2lyYwkBAAAAE3ZhbHVlT3JFcnJvck1lc3NhZ2UAAAACCQAEGgAAAAIFAAAABHRoaXMFAAAAEmJlYXJDaXJjdWxhdGlvbktleQIAAAAVbm8gYmVhckNpcmN1bGF0aW9uS2V5AAAAAARCVUxMCQEAAAATdmFsdWVPckVycm9yTWVzc2FnZQAAAAIJAAQdAAAAAgUAAAAEdGhpcwUAAAAHQlVMTEtleQIAAAAKbm8gQlVMTEtleQAAAAAEQkVBUgkBAAAAE3ZhbHVlT3JFcnJvck1lc3NhZ2UAAAACCQAEHQAAAAIFAAAABHRoaXMFAAAAB0JFQVJLZXkCAAAACm5vIEJFQVJLZXkAAAAACW1haW5Ub2tlbgkBAAAAE3ZhbHVlT3JFcnJvck1lc3NhZ2UAAAACCQAEHQAAAAIFAAAABHRoaXMFAAAADG1haW5Ub2tlbktleQIAAAAPbm8gbWFpblRva2VuS2V5AAAAAA9pc3N1ZVBlcmNlbnRpbGUJAQAAABN2YWx1ZU9yRXJyb3JNZXNzYWdlAAAAAgkABBoAAAACBQAAAAR0aGlzBQAAABJpc3N1ZVBlcmNlbnRpbGVLZXkCAAAAFW5vIGlzc3VlUGVyY2VudGlsZUtleQAAAAAQcmVkZWVtUGVyY2VudGlsZQkBAAAAE3ZhbHVlT3JFcnJvck1lc3NhZ2UAAAACCQAEGgAAAAIFAAAABHRoaXMFAAAAE3JlZGVlbVBlcmNlbnRpbGVLZXkCAAAAFm5vIHJlZGVlbVBlcmNlbnRpbGVLZXkAAAAACG1pbklzc3VlCQEAAAATdmFsdWVPckVycm9yTWVzc2FnZQAAAAIJAAQaAAAAAgUAAAAEdGhpcwUAAAALbWluSXNzdWVLZXkCAAAADm5vIG1pbklzc3VlS2V5AAAAAAltaW5SZWRlZW0JAQAAABN2YWx1ZU9yRXJyb3JNZXNzYWdlAAAAAgkABBoAAAACBQAAAAR0aGlzBQAAAAxtaW5SZWRlZW1LZXkCAAAAD25vIG1pblJlZGVlbUtleQAAAAANd2hpdGVsaXN0T25seQkBAAAAE3ZhbHVlT3JFcnJvck1lc3NhZ2UAAAACCQAEGwAAAAIFAAAABHRoaXMFAAAAEHdoaXRlbGlzdE9ubHlLZXkCAAAAE25vIHdoaXRlbGlzdE9ubHlLZXkAAAAABm9yYWNsZQkBAAAAE3ZhbHVlT3JFcnJvck1lc3NhZ2UAAAACCQEAAAAUYWRkcmVzc0Zyb21QdWJsaWNLZXkAAAABCQACWQAAAAEJAQAAABN2YWx1ZU9yRXJyb3JNZXNzYWdlAAAAAgkABB0AAAACBQAAAAR0aGlzBQAAAAtvcmFjbGVQS0tleQIAAAAObm8gb3JhY2xlUEtLZXkCAAAAEmJhZCBvcmFjbGUgYWRkcmVzcwAAAAAUcmViYWxhbmNlZFByaWNlSW5kZXgJAQAAABN2YWx1ZU9yRXJyb3JNZXNzYWdlAAAAAgkABBoAAAACBQAAAAR0aGlzBQAAABpsYXN0UmViYWxhbmNlUHJpY2VJbmRleEtleQIAAAAXbm8gbGFzdCByZWJhbGFuY2UgcHJpY2UAAAAAEG9yYWNsZVByaWNlSW5kZXgJAQAAABN2YWx1ZU9yRXJyb3JNZXNzYWdlAAAAAgkABBoAAAACBQAAAAZvcmFjbGUFAAAAEWxhc3RQcmljZUluZGV4S2V5CQABLAAAAAIJAAEsAAAAAgkAASwAAAACAgAAABNiYWQgb3JhY2xlIGRhdGEgYXQgCQAEJQAAAAEFAAAABm9yYWNsZQIAAAAQOiBubyBpbnRlZ2VyIGF0IAUAAAARbGFzdFByaWNlSW5kZXhLZXkAAAAADmhlYWRQb2ludGVyS2V5AgAAAAtoZWFkUG9pbnRlcgAAAAAOdGFpbFBvaW50ZXJLZXkCAAAAC3RhaWxQb2ludGVyAAAAAAxxdWV1ZVNpemVLZXkCAAAACXF1ZXVlU2l6ZQAAAAAJ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b2tlbgUAAAAEQlVMTAQAAAASYWRkZWRUb0NpcmN1bGF0aW9uCQAAawAAAAMFAAAACGJ1bGxDaXJjBQAAAA9hZGRlZENvbGxhdGVyYWwFAAAAB2J1bGxDb2wEAAAABWl0ZW1zCQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACBQAAABFidWxsQ29sbGF0ZXJhbEtleQkAAGQAAAACBQAAAAdidWxsQ29sBQAAAA9hZGRlZENvbGxhdGVyYWwJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIFAAAAEmJ1bGxDaXJjdWxhdGlvbktleQkAAGQAAAACBQAAAAhidWxsQ2lyYwUAAAASYWRkZWRUb0NpcmN1bGF0aW9uCQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACBQAAAA5oZWFkUG9pbnRlcktleQUAAAAEbmV4dAkABEwAAAACCQEAAAAKY29sbGVjdEZlZQAAAAEFAAAAB2ZlZVNpemUJAARMAAAAAgUAAAARZGVjcmVhc2VRdWV1ZVNpemUFAAAAA25pbAkBAAAADFNjcmlwdFJlc3VsdAAAAAIJAQAAAAhXcml0ZVNldAAAAAEDBQAAAA1pc0xhc3RFbGVtZW50CQAETAAAAAIFAAAADW92ZXJ3cml0ZVRhaWwFAAAABWl0ZW1zBQAAAAVpdGVtcwkBAAAAC1RyYW5zZmVyU2V0AAAAAQkABEwAAAACCQEAAAAOU2NyaXB0VHJhbnNmZXIAAAADBQAAAAdpbnZva2VyBQAAABJhZGRlZFRvQ2lyY3VsYXRpb24JAAJZAAAAAQUAAAAEQlVMTAUAAAADbmlsAwkAAAAAAAACBQAAAAV0b2tlbgUAAAAEQkVBUgQAAAASYWRkZWRUb0NpcmN1bGF0aW9uCQAAawAAAAMFAAAACGJlYXJDaXJjBQAAAA9hZGRlZENvbGxhdGVyYWwFAAAAB2JlYXJDb2wEAAAABWl0ZW1zCQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACBQAAABFiZWFyQ29sbGF0ZXJhbEtleQkAAGQAAAACBQAAAAdiZWFyQ29sBQAAAA9hZGRlZENvbGxhdGVyYWwJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIFAAAAEmJlYXJDaXJjdWxhdGlvbktleQkAAGQAAAACBQAAAAhiZWFyQ2lyYwUAAAASYWRkZWRUb0NpcmN1bGF0aW9uCQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACBQAAAA5oZWFkUG9pbnRlcktleQUAAAAEbmV4dAkABEwAAAACCQEAAAAKY29sbGVjdEZlZQAAAAEFAAAAB2ZlZVNpemUJAARMAAAAAgUAAAARZGVjcmVhc2VRdWV1ZVNpemUFAAAAA25pbAkBAAAADFNjcmlwdFJlc3VsdAAAAAIJAQAAAAhXcml0ZVNldAAAAAEDBQAAAA1pc0xhc3RFbGVtZW50CQAETAAAAAIFAAAADW92ZXJ3cml0ZVRhaWwFAAAABWl0ZW1zBQAAAAVpdGVtcwkBAAAAC1RyYW5zZmVyU2V0AAAAAQkABEwAAAACCQEAAAAOU2NyaXB0VHJhbnNmZXIAAAADBQAAAAdpbnZva2VyBQAAABJhZGRlZFRvQ2lyY3VsYXRpb24JAAJZAAAAAQUAAAAEQkVBUgUAAAADbmlsCQAAAgAAAAECAAAADGJhZCB0b2tlbiBpZAMJAAAAAAAAAgUAAAAGYWN0aW9uBQAAAAZSRURFRU0EAAAADXJlbW92ZWRUb2tlbnMFAAAAA2FtdAMJAAAAAAAAAgUAAAAFdG9rZW4FAAAABEJVTEwEAAAAEXJlbW92ZWRDb2xsYXRlcmFsCQAAawAAAAMFAAAAB2J1bGxDb2wFAAAADXJlbW92ZWRUb2tlbnMFAAAACGJ1bGxDaXJjBAAAAAdmZWVTaXplCQAAawAAAAMFAAAAEXJlbW92ZWRDb2xsYXRlcmFsBQAAABByZWRlZW1QZXJjZW50aWxlAAAAAAAAACcQBAAAAAZwYXlvdXQDCQAAZgAAAAIFAAAAEXJlbW92ZWRDb2xsYXRlcmFsBQAAAAdmZWVTaXplCQAAZQAAAAIFAAAAEXJlbW92ZWRDb2xsYXRlcmFsBQAAAAdmZWVTaXplAAAAAAAAAAAABAAAAAVpdGVtcwkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgUAAAARYnVsbENvbGxhdGVyYWxLZXkJAABlAAAAAgUAAAAHYnVsbENvbAUAAAARcmVtb3ZlZENvbGxhdGVyYWwJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIFAAAAEmJ1bGxDaXJjdWxhdGlvbktleQkAAGUAAAACBQAAAAhidWxsQ2lyYwUAAAANcmVtb3ZlZFRva2VucwkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgUAAAAOaGVhZFBvaW50ZXJLZXkFAAAABG5leHQJAARMAAAAAgkBAAAACmNvbGxlY3RGZWUAAAABBQAAAAdmZWVTaXplCQAETAAAAAIFAAAAEWRlY3JlYXNlUXVldWVTaXplBQAAAANuaWwJAQAAAAxTY3JpcHRSZXN1bHQAAAACCQEAAAAIV3JpdGVTZXQAAAABAwUAAAANaXNMYXN0RWxlbWVudAkABEwAAAACBQAAAA1vdmVyd3JpdGVUYWlsBQAAAAVpdGVtcwUAAAAFaXRlbXMJAQAAAAtUcmFuc2ZlclNldAAAAAEJAARMAAAAAgkBAAAADlNjcmlwdFRyYW5zZmVyAAAAAwUAAAAHaW52b2tlcgUAAAAGcGF5b3V0CQACWQAAAAEFAAAACW1haW5Ub2tlbgUAAAADbmlsAwkAAAAAAAACBQAAAAV0b2tlbgUAAAAEQkVBUgQAAAARcmVtb3ZlZENvbGxhdGVyYWwJAABrAAAAAwUAAAAHYmVhckNvbAUAAAANcmVtb3ZlZFRva2VucwUAAAAIYmVhckNpcmMEAAAAB2ZlZVNpemUJAABrAAAAAwUAAAARcmVtb3ZlZENvbGxhdGVyYWwFAAAAEHJlZGVlbVBlcmNlbnRpbGUAAAAAAAAAJxAEAAAABnBheW91dAMJAABmAAAAAgUAAAARcmVtb3ZlZENvbGxhdGVyYWwFAAAAB2ZlZVNpemUJAABlAAAAAgUAAAARcmVtb3ZlZENvbGxhdGVyYWwFAAAAB2ZlZVNpemUAAAAAAAAAAAAEAAAABWl0ZW1zCQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACBQAAABFiZWFyQ29sbGF0ZXJhbEtleQkAAGUAAAACBQAAAAdiZWFyQ29sBQAAABFyZW1vdmVkQ29sbGF0ZXJhbAkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgUAAAASYmVhckNpcmN1bGF0aW9uS2V5CQAAZQAAAAIFAAAACGJlYXJDaXJjBQAAAA1yZW1vdmVkVG9rZW5zCQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACBQAAAA5oZWFkUG9pbnRlcktleQUAAAAEbmV4dAkABEwAAAACCQEAAAAKY29sbGVjdEZlZQAAAAEFAAAAB2ZlZVNpemUJAARMAAAAAgUAAAARZGVjcmVhc2VRdWV1ZVNpemUFAAAAA25pbAkBAAAADFNjcmlwdFJlc3VsdAAAAAIJAQAAAAhXcml0ZVNldAAAAAEDBQAAAA1pc0xhc3RFbGVtZW50CQAETAAAAAIFAAAADW92ZXJ3cml0ZVRhaWwFAAAABWl0ZW1zBQAAAAVpdGVtcwkBAAAAC1RyYW5zZmVyU2V0AAAAAQkABEwAAAACCQEAAAAOU2NyaXB0VHJhbnNmZXIAAAADBQAAAAdpbnZva2VyBQAAAAZwYXlvdXQJAAJZAAAAAQUAAAAJbWFpblRva2VuBQAAAANuaWwJAAACAAAAAQIAAAAMYmFkIHRva2VuIGlkCQAAAgAAAAEJAAEsAAAAAgIAAAAMYmFkIGFjdGlvbjogBQAAAAZhY3Rpb24BAAAACXJlYmFsYW5jZQAAAAAKAQAAAAJMVgAAAAMAAAABdgAAAAJwMAAAAAJwMQQAAAAFZGVub20AAAAAAAAAAGQEAAAABHBtYXgJAABpAAAAAgMJAABmAAAAAgUAAAACcDEFAAAAAnAwBQAAAAJwMQUAAAACcDAFAAAABWRlbm9tBAAAAARwbWluCQAAaQAAAAIDCQAAZgAAAAIFAAAAAnAwBQAAAAJwMQUAAAACcDEFAAAAAnAwBQAAAAVkZW5vbQQAAAABYQkAAGgAAAACBQAAAARwbWluBQAAAARwbWluBAAAAAFiCQAAZQAAAAIJAABoAAAAAgkAAGgAAAACAAAAAAAAAAAJBQAAAARwbWF4BQAAAARwbWF4CQAAaAAAAAIJAABoAAAAAgAAAAAAAAAADwUAAAAEcG1heAUAAAAEcG1pbgkAAGsAAAADBQAAAAF2CQAAZAAAAAIJAABoAAAAAgAAAAAAAAAABgUAAAABYQUAAAABYgkAAGQAAAACCQAAaAAAAAIAAAAAAAAAAAcFAAAAAWEFAAAAAWIEAAAAEXNldHRsZWRQcmljZUluZGV4CQEAAAATdmFsdWVPckVycm9yTWVzc2FnZQAAAAIJAAQaAAAAAgUAAAAEdGhpcwUAAAAabGFzdFJlYmFsYW5jZVByaWNlSW5kZXhLZXkCAAAAEWluY29uc2lzdGVudCBkYXRhBAAAABN1bnNldHRsZWRQcmljZUluZGV4CQAAZAAAAAIFAAAAEXNldHRsZWRQcmljZUluZGV4AAAAAAAAAAABBAAAABJzZXR0bGVkUHJpY2VIZWlnaHQJAQAAABN2YWx1ZU9yRXJyb3JNZXNzYWdlAAAAAgkABBoAAAACBQAAAAZvcmFjbGUJAAEsAAAAAgIAAAAMcHJpY2VfaW5kZXhfCQABpAAAAAEFAAAAEXNldHRsZWRQcmljZUluZGV4AgAAAChiYWQgb3JhY2xlIGRhdGEgZm9yIHNldHRsZWQgcHJpY2UgaGVpZ2h0BAAAAAxzZXR0bGVkUHJpY2UJAQAAABN2YWx1ZU9yRXJyb3JNZXNzYWdlAAAAAgkABBoAAAACBQAAAAZvcmFjbGUJAAEsAAAAAgIAAAAGcHJpY2VfCQABpAAAAAEFAAAAEnNldHRsZWRQcmljZUhlaWdodAIAAAAZYmFkIG9yYWNsZSBkYXRhIGZvciBwcmljZQQAAAAPbmV4dFByaWNlSGVpZ2h0CQEAAAATdmFsdWVPckVycm9yTWVzc2FnZQAAAAIJAAQaAAAAAgUAAAAGb3JhY2xlCQABLAAAAAICAAAADHByaWNlX2luZGV4XwkAAaQAAAABBQAAABN1bnNldHRsZWRQcmljZUluZGV4AgAAABRubyBuZXh0IHByaWNlIGhlaWdodAQAAAAJbmV4dFByaWNlCQEAAAATdmFsdWVPckVycm9yTWVzc2FnZQAAAAIJAAQaAAAAAgUAAAAGb3JhY2xlCQABLAAAAAICAAAABnByaWNlXwkAAaQAAAABBQAAAA9uZXh0UHJpY2VIZWlnaHQCAAAADW5vIG5leHQgcHJpY2UEAAAABm1pblZvbAMJAABmAAAAAgUAAAAHYmVhckNvbAUAAAAHYnVsbENvbAUAAAAHYnVsbENvbAUAAAAHYmVhckNvbAQAAAAGcmVkaXN0CQEAAAACTFYAAAADBQAAAAZtaW5Wb2wFAAAADHNldHRsZWRQcmljZQUAAAAJbmV4dFByaWNlAwkAAGYAAAACBQAAAAluZXh0UHJpY2UFAAAADHNldHRsZWRQcmljZQkBAAAACFdyaXRlU2V0AAAAAQkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgUAAAARYnVsbENvbGxhdGVyYWxLZXkJAABkAAAAAgUAAAAHYnVsbENvbAUAAAAGcmVkaXN0CQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACBQAAABFiZWFyQ29sbGF0ZXJhbEtleQkAAGUAAAACBQAAAAdiZWFyQ29sBQAAAAZyZWRpc3QJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIFAAAAGmxhc3RSZWJhbGFuY2VQcmljZUluZGV4S2V5BQAAABN1bnNldHRsZWRQcmljZUluZGV4BQAAAANuaWwDCQAAZgAAAAIFAAAADHNldHRsZWRQcmljZQUAAAAJbmV4dFByaWNlCQEAAAAIV3JpdGVTZXQAAAABCQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACBQAAABFidWxsQ29sbGF0ZXJhbEtleQkAAGUAAAACBQAAAAdidWxsQ29sBQAAAAZyZWRpc3QJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIFAAAAEWJlYXJDb2xsYXRlcmFsS2V5CQAAZAAAAAIFAAAAB2JlYXJDb2wFAAAABnJlZGlzdAkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgUAAAAabGFzdFJlYmFsYW5jZVByaWNlSW5kZXhLZXkFAAAAE3Vuc2V0dGxlZFByaWNlSW5kZXgFAAAAA25pbAkBAAAACFdyaXRlU2V0AAAAAQkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgUAAAAabGFzdFJlYmFsYW5jZVByaWNlSW5kZXhLZXkFAAAAE3Vuc2V0dGxlZFByaWNlSW5kZXgFAAAAA25pbAAAAAYAAAADaW52AQAAAARpbml0AAAABQAAAAZidWxsSWQAAAAGYmVhcklkAAAAC21haW5Ub2tlbklkAAAACG9yYWNsZVBLAAAAC3doaXRlbGlzdGVkAwkBAAAACWlzRGVmaW5lZAAAAAEJAAQdAAAAAgUAAAAEdGhpcwUAAAAHQlVMTEtleQkAAAIAAAABAgAAABNhbHJlYWR5IGluaXRpYWxpemVkAwkBAAAAASEAAAABCQEAAAAJaXNEZWZpbmVkAAAAAQgFAAAAA2ludgAAAAdwYXltZW50CQAAAgAAAAECAAAAGW5ldXRyaW5vIHBheW1lbnQgcmVxdWlyZWQDCQEAAAACIT0AAAACCQACWAAAAAEJAQAAABN2YWx1ZU9yRXJyb3JNZXNzYWdlAAAAAggJAQAAAAV2YWx1ZQAAAAEIBQAAAANpbnYAAAAHcGF5bWVudAAAAAdhc3NldElkAgAAABluZXV0cmlubyBwYXltZW50IHJlcXVpcmVkBQAAAAttYWluVG9rZW5JZAkAAAIAAAABAgAAABdwYXltZW50IG5vdCBpbiBuZXV0cmlubwQAAAATdG90YWxPd25lZE1haW5Ub2tlbggJAQAAAAV2YWx1ZQAAAAEIBQAAAANpbnYAAAAHcGF5bWVudAAAAAZhbW91bnQEAAAABWJ1bGxzCQAAaQAAAAIFAAAAE3RvdGFsT3duZWRNYWluVG9rZW4AAAAAAAAAAAIEAAAABWJlYXJzCQAAZQAAAAIFAAAAE3RvdGFsT3duZWRNYWluVG9rZW4FAAAABWJ1bGxzAwMJAAAAAAAAAgUAAAAFYmVhcnMAAAAAAAAAAAAGCQAAAAAAAAIFAAAABWJ1bGxzAAAAAAAAAAAACQAAAgAAAAECAAAAE2Nhbid0IGluaXQgYmFsYW5jZXMEAAAAF29yYWNsZUN1cnJlbnRQcmljZUluZGV4CQEAAAATdmFsdWVPckVycm9yTWVzc2FnZQAAAAIJAAQaAAAAAgkBAAAAE3ZhbHVlT3JFcnJvck1lc3NhZ2UAAAACCQEAAAAUYWRkcmVzc0Zyb21QdWJsaWNLZXkAAAABCQACWQAAAAEFAAAACG9yYWNsZVBLAgAAABJiYWQgb3JhY2xlIGFkZHJlc3MFAAAAEWxhc3RQcmljZUluZGV4S2V5AgAAACJjYW4ndCBmaW5kIGxhc3Qgb3JhY2xlIHByaWNlIGluZGV4CQEAAAAMU2NyaXB0UmVzdWx0AAAAAgkBAAAACFdyaXRlU2V0AAAAAQkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgUAAAAHQlVMTEtleQUAAAAGYnVsbElkCQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACBQAAAAdCRUFSS2V5BQAAAAZiZWFySWQJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIFAAAADG1haW5Ub2tlbktleQUAAAALbWFpblRva2VuSWQJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIFAAAAC29yYWNsZVBLS2V5BQAAAAhvcmFjbGVQSwkABEwAAAACCQEAAAAJ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", "chainId": 84, "height": 1116308, "spentComplexity": 0 } View: original | compacted Prev: C1Q5XwVgGf6BBHdYevvLsPYnd6Y7LhDdKMGDfhhee56W Next: none Diff:
OldNewDifferences
134134 else bullCol
135135 let circ = if ((assetId == BEAR))
136136 then bearCirc
137- else bearCirc
137+ else bullCirc
138138 let estimated = fraction(col, attachedAmount, circ)
139139 if ((minRedeem > estimated))
140140 then throw((((((((((("Attached payment too small. Min redeem amount is " + toString((minRedeem / 1000000))) + " USDN, ") + "attached amount: ") + toString(attachedAmount)) + ", col: ") + toString(col)) + ", circ: ") + toString(circ)) + ", estimated: ") + toString(estimated)))
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 3 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let BULLKey = "BULLId"
55
66 let BEARKey = "BEARId"
77
88 let mainTokenKey = "mainTokenId"
99
1010 let issuePercentileKey = "issuePercentile"
1111
1212 let redeemPercentileKey = "redeemPercentile"
1313
1414 let minIssueKey = "minIssue"
1515
1616 let minRedeemKey = "minRedeem"
1717
1818 let whitelistOnlyKey = "whitelistOnly"
1919
2020 let oraclePKKey = "oracle"
2121
2222 let lastPriceIndexKey = "price_index"
2323
2424 let priceIndexPrefix = "price_index_"
2525
2626 let priceHeightPrefix = "price_"
2727
2828 let oracleCurrentPriceIndexKey = "price_index"
2929
3030 let lastRebalancePriceIndexKey = "lastSettlementPriceId"
3131
3232 let bullCollateralKey = "bullCollateral"
3333
3434 let bearCollateralKey = "bearCollateral"
3535
3636 let bullCirculationKey = "bullCirculation"
3737
3838 let bearCirculationKey = "bearCirculation"
3939
4040 let whitelistKey = "issueWhiteList"
4141
4242 let whitelist = valueOrErrorMessage(getString(this, whitelistKey), "no bullCollateralKey")
4343
4444 let bullCol = valueOrErrorMessage(getInteger(this, bullCollateralKey), "no bullCollateralKey")
4545
4646 let bearCol = valueOrErrorMessage(getInteger(this, bearCollateralKey), "no bearCollateralKey")
4747
4848 let bullCirc = valueOrErrorMessage(getInteger(this, bullCirculationKey), "no bullCirculationKey")
4949
5050 let bearCirc = valueOrErrorMessage(getInteger(this, bearCirculationKey), "no bearCirculationKey")
5151
5252 let BULL = valueOrErrorMessage(getString(this, BULLKey), "no BULLKey")
5353
5454 let BEAR = valueOrErrorMessage(getString(this, BEARKey), "no BEARKey")
5555
5656 let mainToken = valueOrErrorMessage(getString(this, mainTokenKey), "no mainTokenKey")
5757
5858 let issuePercentile = valueOrErrorMessage(getInteger(this, issuePercentileKey), "no issuePercentileKey")
5959
6060 let redeemPercentile = valueOrErrorMessage(getInteger(this, redeemPercentileKey), "no redeemPercentileKey")
6161
6262 let minIssue = valueOrErrorMessage(getInteger(this, minIssueKey), "no minIssueKey")
6363
6464 let minRedeem = valueOrErrorMessage(getInteger(this, minRedeemKey), "no minRedeemKey")
6565
6666 let whitelistOnly = valueOrErrorMessage(getBoolean(this, whitelistOnlyKey), "no whitelistOnlyKey")
6767
6868 let oracle = valueOrErrorMessage(addressFromPublicKey(fromBase58String(valueOrErrorMessage(getString(this, oraclePKKey), "no oraclePKKey"))), "bad oracle address")
6969
7070 let rebalancedPriceIndex = valueOrErrorMessage(getInteger(this, lastRebalancePriceIndexKey), "no last rebalance price")
7171
7272 let oraclePriceIndex = valueOrErrorMessage(getInteger(oracle, lastPriceIndexKey), ((("bad oracle data at " + toString(oracle)) + ": no integer at ") + lastPriceIndexKey))
7373
7474 let headPointerKey = "headPointer"
7575
7676 let tailPointerKey = "tailPointer"
7777
7878 let queueSizeKey = "queueSize"
7979
8080 let queueSize = match getInteger(this, queueSizeKey) {
8181 case i: Int =>
8282 i
8383 case _ =>
8484 0
8585 }
8686
8787 let headPointer = match getString(this, headPointerKey) {
8888 case s: String =>
8989 s
9090 case _ =>
9191 ""
9292 }
9393
9494 let tailPointer = match getString(this, tailPointerKey) {
9595 case s: String =>
9696 s
9797 case _ =>
9898 ""
9999 }
100100
101101 let feesAccumulatedKey = "feesAccumulated"
102102
103103 let feesAccumulated = match getInteger(this, feesAccumulatedKey) {
104104 case i: Int =>
105105 i
106106 case _ =>
107107 0
108108 }
109109
110110 let ISSUE = "ISSUE"
111111
112112 let REDEEM = "REDEEM"
113113
114114 func buildNewItem (action,amt,token,priceIndex,invoker) = (((((((((action + "|") + toString(amt)) + "|") + token) + "|") + toString(priceIndex)) + "|") + invoker) + "|")
115115
116116
117117 func validateEnqueue (inv) = if ((inv.caller == this))
118118 then throw("can't do")
119119 else {
120120 func errorMessage (got) = throw(((((("only BULL(" + BULL) + ") or BEAR(") + BEAR) + ") tokens are accepted, received: ") + got))
121121
122122 if (!(isDefined(inv.payment)))
123123 then errorMessage("no attached payment")
124124 else {
125125 let assetId = toBase58String(valueOrErrorMessage(value(inv.payment).assetId, "waves are not accepted here"))
126126 if (if ((assetId != BEAR))
127127 then (assetId != BULL)
128128 else false)
129129 then errorMessage(assetId)
130130 else {
131131 let attachedAmount = value(inv.payment).amount
132132 let col = if ((assetId == BEAR))
133133 then bearCol
134134 else bullCol
135135 let circ = if ((assetId == BEAR))
136136 then bearCirc
137- else bearCirc
137+ else bullCirc
138138 let estimated = fraction(col, attachedAmount, circ)
139139 if ((minRedeem > estimated))
140140 then throw((((((((((("Attached payment too small. Min redeem amount is " + toString((minRedeem / 1000000))) + " USDN, ") + "attached amount: ") + toString(attachedAmount)) + ", col: ") + toString(col)) + ", circ: ") + toString(circ)) + ", estimated: ") + toString(estimated)))
141141 else unit
142142 }
143143 }
144144 }
145145
146146
147147 func enqueue (id,action,amt,token,priceIndex,invoker) = {
148148 let increaseQueueSize = DataEntry(queueSizeKey, (queueSize + 1))
149149 let itm = buildNewItem(action, amt, token, priceIndex, invoker)
150150 if ((queueSize == 0))
151151 then WriteSet([DataEntry(headPointerKey, id), DataEntry(tailPointerKey, id), DataEntry(id, itm), increaseQueueSize])
152152 else {
153153 let prevId = valueOrErrorMessage(getString(this, tailPointerKey), "can't get tail pointer")
154154 let prevItm = split(valueOrErrorMessage(getString(this, prevId), "can't resolve pointer"), "|")
155155 let updatedPrevItm = ((((((((((prevItm[0] + "|") + prevItm[1]) + "|") + prevItm[2]) + "|") + prevItm[3]) + "|") + prevItm[4]) + "|") + id)
156156 WriteSet([DataEntry(prevId, updatedPrevItm), DataEntry(id, itm), DataEntry(tailPointerKey, id), increaseQueueSize])
157157 }
158158 }
159159
160160
161161 func dequeue () = if ((queueSize == 0))
162162 then throw("nothing to settle")
163163 else {
164164 func collectFee (fees) = DataEntry(feesAccumulatedKey, (feesAccumulated + fees))
165165
166166 let decreaseQueueSize = DataEntry(queueSizeKey, (queueSize - 1))
167167 let isLastElement = (headPointer == tailPointer)
168168 let overwriteTail = DataEntry(tailPointerKey, "")
169169 let data = split(valueOrErrorMessage(getString(this, headPointer), "bad head pointer"), "|")
170170 let action = data[0]
171171 let amt = parseIntValue(data[1])
172172 let token = data[2]
173173 let priceIndex = parseIntValue(data[3])
174174 let invoker = addressFromStringValue(data[4])
175175 let next = data[5]
176176 if ((rebalancedPriceIndex > priceIndex))
177177 then throw(((("corrupt state, rebalancedPriceIndex=" + toString(rebalancedPriceIndex)) + ", request price id=") + toString(priceIndex)))
178178 else if ((priceIndex > rebalancedPriceIndex))
179179 then throw("can't dequeue, too early, rebalance first")
180180 else if ((action == ISSUE))
181181 then {
182182 let feeSize = fraction(amt, issuePercentile, 10000)
183183 let addedCollateral = (amt - feeSize)
184184 if ((token == BULL))
185185 then {
186186 let addedToCirculation = fraction(bullCirc, addedCollateral, bullCol)
187187 let items = [DataEntry(bullCollateralKey, (bullCol + addedCollateral)), DataEntry(bullCirculationKey, (bullCirc + addedToCirculation)), DataEntry(headPointerKey, next), collectFee(feeSize), decreaseQueueSize]
188188 ScriptResult(WriteSet(if (isLastElement)
189189 then overwriteTail :: items
190190 else items), TransferSet([ScriptTransfer(invoker, addedToCirculation, fromBase58String(BULL))]))
191191 }
192192 else if ((token == BEAR))
193193 then {
194194 let addedToCirculation = fraction(bearCirc, addedCollateral, bearCol)
195195 let items = [DataEntry(bearCollateralKey, (bearCol + addedCollateral)), DataEntry(bearCirculationKey, (bearCirc + addedToCirculation)), DataEntry(headPointerKey, next), collectFee(feeSize), decreaseQueueSize]
196196 ScriptResult(WriteSet(if (isLastElement)
197197 then overwriteTail :: items
198198 else items), TransferSet([ScriptTransfer(invoker, addedToCirculation, fromBase58String(BEAR))]))
199199 }
200200 else throw("bad token id")
201201 }
202202 else if ((action == REDEEM))
203203 then {
204204 let removedTokens = amt
205205 if ((token == BULL))
206206 then {
207207 let removedCollateral = fraction(bullCol, removedTokens, bullCirc)
208208 let feeSize = fraction(removedCollateral, redeemPercentile, 10000)
209209 let payout = if ((removedCollateral > feeSize))
210210 then (removedCollateral - feeSize)
211211 else 0
212212 let items = [DataEntry(bullCollateralKey, (bullCol - removedCollateral)), DataEntry(bullCirculationKey, (bullCirc - removedTokens)), DataEntry(headPointerKey, next), collectFee(feeSize), decreaseQueueSize]
213213 ScriptResult(WriteSet(if (isLastElement)
214214 then overwriteTail :: items
215215 else items), TransferSet([ScriptTransfer(invoker, payout, fromBase58String(mainToken))]))
216216 }
217217 else if ((token == BEAR))
218218 then {
219219 let removedCollateral = fraction(bearCol, removedTokens, bearCirc)
220220 let feeSize = fraction(removedCollateral, redeemPercentile, 10000)
221221 let payout = if ((removedCollateral > feeSize))
222222 then (removedCollateral - feeSize)
223223 else 0
224224 let items = [DataEntry(bearCollateralKey, (bearCol - removedCollateral)), DataEntry(bearCirculationKey, (bearCirc - removedTokens)), DataEntry(headPointerKey, next), collectFee(feeSize), decreaseQueueSize]
225225 ScriptResult(WriteSet(if (isLastElement)
226226 then overwriteTail :: items
227227 else items), TransferSet([ScriptTransfer(invoker, payout, fromBase58String(mainToken))]))
228228 }
229229 else throw("bad token id")
230230 }
231231 else throw(("bad action: " + action))
232232 }
233233
234234
235235 func rebalance () = {
236236 func LV (v,p0,p1) = {
237237 let denom = 100
238238 let pmax = ((if ((p1 > p0))
239239 then p1
240240 else p0) / denom)
241241 let pmin = ((if ((p0 > p1))
242242 then p1
243243 else p0) / denom)
244244 let a = (pmin * pmin)
245245 let b = (((9 * pmax) * pmax) - ((15 * pmax) * pmin))
246246 fraction(v, ((6 * a) + b), ((7 * a) + b))
247247 }
248248
249249 let settledPriceIndex = valueOrErrorMessage(getInteger(this, lastRebalancePriceIndexKey), "inconsistent data")
250250 let unsettledPriceIndex = (settledPriceIndex + 1)
251251 let settledPriceHeight = valueOrErrorMessage(getInteger(oracle, ("price_index_" + toString(settledPriceIndex))), "bad oracle data for settled price height")
252252 let settledPrice = valueOrErrorMessage(getInteger(oracle, ("price_" + toString(settledPriceHeight))), "bad oracle data for price")
253253 let nextPriceHeight = valueOrErrorMessage(getInteger(oracle, ("price_index_" + toString(unsettledPriceIndex))), "no next price height")
254254 let nextPrice = valueOrErrorMessage(getInteger(oracle, ("price_" + toString(nextPriceHeight))), "no next price")
255255 let minVol = if ((bearCol > bullCol))
256256 then bullCol
257257 else bearCol
258258 let redist = LV(minVol, settledPrice, nextPrice)
259259 if ((nextPrice > settledPrice))
260260 then WriteSet([DataEntry(bullCollateralKey, (bullCol + redist)), DataEntry(bearCollateralKey, (bearCol - redist)), DataEntry(lastRebalancePriceIndexKey, unsettledPriceIndex)])
261261 else if ((settledPrice > nextPrice))
262262 then WriteSet([DataEntry(bullCollateralKey, (bullCol - redist)), DataEntry(bearCollateralKey, (bearCol + redist)), DataEntry(lastRebalancePriceIndexKey, unsettledPriceIndex)])
263263 else WriteSet([DataEntry(lastRebalancePriceIndexKey, unsettledPriceIndex)])
264264 }
265265
266266
267267 @Callable(inv)
268268 func init (bullId,bearId,mainTokenId,oraclePK,whitelisted) = if (isDefined(getString(this, BULLKey)))
269269 then throw("already initialized")
270270 else if (!(isDefined(inv.payment)))
271271 then throw("neutrino payment required")
272272 else if ((toBase58String(valueOrErrorMessage(value(inv.payment).assetId, "neutrino payment required")) != mainTokenId))
273273 then throw("payment not in neutrino")
274274 else {
275275 let totalOwnedMainToken = value(inv.payment).amount
276276 let bulls = (totalOwnedMainToken / 2)
277277 let bears = (totalOwnedMainToken - bulls)
278278 if (if ((bears == 0))
279279 then true
280280 else (bulls == 0))
281281 then throw("can't init balances")
282282 else {
283283 let oracleCurrentPriceIndex = valueOrErrorMessage(getInteger(valueOrErrorMessage(addressFromPublicKey(fromBase58String(oraclePK)), "bad oracle address"), lastPriceIndexKey), "can't find last oracle price index")
284284 ScriptResult(WriteSet([DataEntry(BULLKey, bullId), DataEntry(BEARKey, bearId), DataEntry(mainTokenKey, mainTokenId), DataEntry(oraclePKKey, oraclePK), DataEntry(bullCollateralKey, bulls), DataEntry(bearCollateralKey, bears), DataEntry(bullCirculationKey, bulls), DataEntry(bearCirculationKey, bears), DataEntry(lastRebalancePriceIndexKey, oracleCurrentPriceIndex), DataEntry(whitelistKey, whitelisted), DataEntry(issuePercentileKey, 0), DataEntry(redeemPercentileKey, 0), DataEntry(minIssueKey, 0), DataEntry(minRedeemKey, 0), DataEntry(whitelistOnlyKey, true)]), TransferSet([ScriptTransfer(inv.caller, bulls, fromBase58String(bullId)), ScriptTransfer(inv.caller, bears, fromBase58String(bearId))]))
285285 }
286286 }
287287
288288
289289
290290 @Callable(i)
291291 func setParams (iP,rP,mI,mR,wl) = if ((i.caller != this))
292292 then throw("only self can change whitelist")
293293 else WriteSet([DataEntry(issuePercentileKey, iP), DataEntry(redeemPercentileKey, rP), DataEntry(minIssueKey, mI), DataEntry(minRedeemKey, mR), DataEntry(whitelistOnlyKey, wl)])
294294
295295
296296
297297 @Callable(i)
298298 func setWhitelist (l) = if ((i.caller != this))
299299 then throw("only self can change whitelist")
300300 else WriteSet([DataEntry(whitelistKey, l)])
301301
302302
303303
304304 @Callable(inv)
305305 func requestRedeem () = if ((validateEnqueue(inv) == unit))
306306 then {
307307 let assetId = toBase58String(valueOrErrorMessage(value(inv.payment).assetId, "waves are not accepted here"))
308308 enqueue(toBase58String(inv.transactionId), REDEEM, value(inv.payment).amount, assetId, (oraclePriceIndex + 1), toString(inv.caller))
309309 }
310310 else throw("doesn't happen")
311311
312312
313313
314314 @Callable(inv)
315315 func requestIssue (tokenId) = if ((inv.caller == this))
316316 then throw("can't do")
317317 else if (if (whitelistOnly)
318318 then !(isDefined(indexOf(whitelist, toString(inv.caller))))
319319 else false)
320320 then throw("only whitelisted can do")
321321 else {
322322 let errorMessage = throw((((((("only BULL(" + BULL) + ") or BEAR(") + BEAR) + ") tokens are available in exchange for USDN(") + mainToken) + ")"))
323323 if (if ((tokenId != BULL))
324324 then (tokenId != BEAR)
325325 else false)
326326 then errorMessage
327327 else if (!(isDefined(inv.payment)))
328328 then errorMessage
329329 else if ((value(inv.payment).assetId != fromBase58String(mainToken)))
330330 then errorMessage
331331 else if ((minIssue > value(inv.payment).amount))
332332 then throw((("Attached payment too small. Min required: " + toString((minIssue / 1000000))) + " USDN"))
333333 else enqueue(toBase58String(inv.transactionId), ISSUE, value(inv.payment).amount, tokenId, (oraclePriceIndex + 1), toString(inv.caller))
334334 }
335335
336336
337337
338338 @Callable(inv)
339339 func settle () = {
340340 let queueEmpty = (headPointer == "")
341341 let canRebalance = (oraclePriceIndex > rebalancedPriceIndex)
342342 if (queueEmpty)
343343 then if (canRebalance)
344344 then rebalance()
345345 else throw("[OK] all done, carry on")
346346 else {
347347 let data = split(valueOrErrorMessage(getString(this, headPointer), "bad head pointer"), "|")
348348 let priceIndex = parseIntValue(data[3])
349349 if ((priceIndex > rebalancedPriceIndex))
350350 then if (canRebalance)
351351 then rebalance()
352352 else throw("[OK] need to wait")
353353 else if ((priceIndex == rebalancedPriceIndex))
354354 then dequeue()
355355 else throw("corrupt data, future price id already rebalanced")
356356 }
357357 }
358358
359359

github/deemru/w8io/3ef1775 
67.86 ms