tx · 3vkvEfaDd5xfV1wC2WtPy9UVtp23CCANPFm83bw8izra

3NBt5DdDWYFzfvXWmUUHE6GnLpcwavdPBge:  -0.01000000 Waves

2020.09.23 16:00 [1189983] smart account 3NBt5DdDWYFzfvXWmUUHE6GnLpcwavdPBge > SELF 0.00000000 Waves

{ "type": 13, "id": "3vkvEfaDd5xfV1wC2WtPy9UVtp23CCANPFm83bw8izra", "fee": 1000000, "feeAssetId": null, "timestamp": 1600866059645, "version": 1, "sender": "3NBt5DdDWYFzfvXWmUUHE6GnLpcwavdPBge", "senderPublicKey": "BuW2UKAq8ScKVXf2mbtifSE5cHwHBeSnWRTqSdaDoSsq", "proofs": [ "2tjqxHMLZvkyybyhXo7AT8Mt1Gm8kUCoB5kGCEEZLX8AuJvsbEPJBfEeFdoroSeikdB1qyBoLRvScZNo8dqSCzpW" ], "script": "base64:AAIEAAAAAAAAAAsIAhIAEgASAwoBCAAAADwAAAAAC3BhcmFtUHJlZml4AgAAAAZwYXJhbV8AAAAAC2FkZHJlc3NCb29rCQEAAAAHQWRkcmVzcwAAAAEBAAAAGgFUVoHUeTQTO77iaMaO0CyN+LlydsBXbwHeAAAAABN3aGl0ZWxpc3RBZGRyZXNzS2V5AgAAABB3aGl0ZWxpc3RBZGRyZXNzAAAAABdkQXBwV2hpdGVsaXN0QWRkcmVzc0tleQIAAAAUZEFwcFdoaXRlbGlzdEFkZHJlc3MAAAAAEGJ1cm5lckFkZHJlc3NLZXkCAAAADWJ1cm5lckFkZHJlc3MBAAAADmdldFN0cmluZ1BhcmFtAAAAAQAAAANrZXkEAAAAByRtYXRjaDAJAAQdAAAAAgUAAAAEdGhpcwkAASwAAAACBQAAAAtwYXJhbVByZWZpeAUAAAADa2V5AwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAAZTdHJpbmcEAAAAAWEFAAAAByRtYXRjaDAFAAAAAWEJAAACAAAAAQIAAAANbm8gc3RyaW5nIGtleQEAAAALZ2V0SW50UGFyYW0AAAABAAAAA2tleQQAAAAHJG1hdGNoMAkABBoAAAACBQAAAAR0aGlzCQABLAAAAAIFAAAAC3BhcmFtUHJlZml4BQAAAANrZXkDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAAA0ludAQAAAABYQUAAAAHJG1hdGNoMAUAAAABYQkAAAIAAAABAgAAAApubyBpbnQga2V5AQAAAA9nZXRCb29sZWFuUGFyYW0AAAABAAAAA2tleQQAAAAHJG1hdGNoMAkABBsAAAACBQAAAAR0aGlzCQABLAAAAAIFAAAAC3BhcmFtUHJlZml4BQAAAANrZXkDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAAB0Jvb2xlYW4EAAAAAWEFAAAAByRtYXRjaDAFAAAAAWEJAAACAAAAAQIAAAAObm8gYm9vbGVhbiBrZXkAAAAADWlzc3VlckFzc2V0SWQBAAAAICG0NAEcHIp9wUNbC4DGYcTBsWNbBFo+CkP2CUSPvsIqAAAAABFpbnZlc3RtZW50QXNzZXRJZAEAAAAEE6vZMwAAAAAYaW52ZXN0bWVudEFzc2V0SWRJc1dhdmVzBgAAAAASb3duZXJBZGRyZXNzU3RyaW5nCQEAAAAOZ2V0U3RyaW5nUGFyYW0AAAABAgAAABRpc3N1ZXJBY2NvdW50QWRkcmVzcwAAAAAMb3duZXJBZGRyZXNzCQEAAAAHQWRkcmVzcwAAAAEJAAJZAAAAAQUAAAASb3duZXJBZGRyZXNzU3RyaW5nAAAAABNhc3NldERlY2ltYWxzT2Zmc2V0AAAAAAAAAAABAAAAAA90b2tlbnNhbGVBbW91bnQJAQAAAAtnZXRJbnRQYXJhbQAAAAECAAAAD3Rva2Vuc2FsZUFtb3VudAAAAAAJc3RhcnRUaW1lCQEAAAALZ2V0SW50UGFyYW0AAAABAgAAAAlzdGFydFRpbWUAAAAAB2VuZFRpbWUJAQAAAAtnZXRJbnRQYXJhbQAAAAECAAAAB2VuZFRpbWUAAAAABXByaWNlCQEAAAALZ2V0SW50UGFyYW0AAAABAgAAAAVwcmljZQAAAAANc29mdENhcEFtb3VudAkBAAAAC2dldEludFBhcmFtAAAAAQIAAAANc29mdENhcEFtb3VudAAAAAAKbWluUGF5bWVudAkBAAAAC2dldEludFBhcmFtAAAAAQIAAAAKbWluUGF5bWVudAAAAAALc3dhcEFzc2V0SWQBAAAAAAAAAAAKc3dhcEFtb3VudAkBAAAAC2dldEludFBhcmFtAAAAAQIAAAAKc3dhcEFtb3VudAAAAAAJc3dhcFByaWNlCQEAAAALZ2V0SW50UGFyYW0AAAABAgAAAAlzd2FwUHJpY2UAAAAACnNlcnZpY2VGZWUJAQAAAAtnZXRJbnRQYXJhbQAAAAECAAAACnNlcnZpY2VGZWUAAAAAF3NlcnZpY2VGZWVBZGRyZXNzU3RyaW5nCQEAAAAOZ2V0U3RyaW5nUGFyYW0AAAABAgAAABFzZXJ2aWNlRmVlQWRkcmVzcwAAAAALY29tcGFueVR5cGUAAAAAAAAAAAAAAAAAC2lzVG9rZW5zYWxlAAAAAAAAAAAAAAAAAAZpc1N3YXAAAAAAAAAAAAEAAAAAEmlzVG9rZW5zYWxlQW5kU3dhcAAAAAAAAAAAAgAAAAAWc3dhcEtleVN1bUFtb3VudFByZWZpeAIAAAAOc3dhcFN1bUFtb3VudCAAAAAAFnN3YXBLZXlTdW1Bc3NldHNQcmVmaXgCAAAADnN3YXBTdW1Bc3NldHMgAAAAABFzd2FwS2V5RGlzdEFzc2V0cwIAAAAKc3dhcEFzc2V0cwAAAAAWc3dhcEtleUNvbGxlY3RlZEFtb3VudAIAAAAKc3dhcEFtb3VudAAAAAASa2V5U3VtQW1vdW50UHJlZml4AgAAAApzdW1BbW91bnQgAAAAABZrZXlTdW1QYWlkQW1vdW50UHJlZml4AgAAAAtwYWlkQW1vdW50IAAAAAASa2V5U3VtQXNzZXRzUHJlZml4AgAAAApzdW1Bc3NldHMgAAAAABVrZXlBbGxvd0FjY291bnRQcmVmaXgCAAAABmFsbG93IAAAAAANa2V5RGlzdEFzc2V0cwIAAAAGYXNzZXRzAAAAABJrZXlDb2xsZWN0ZWRBbW91bnQCAAAABmFtb3VudAAAAAAJa2V5SXNzdWVyAgAAAAZpc3N1ZXIAAAAAA3ZlcgIAAAAFNi40LjAAAAAACnZhbGlkU3RhdGUAAAAAAAAAA+gBAAAAEmdldEFkZHJlc3NGcm9tQm9vawAAAAEAAAADa2V5BAAAAAckbWF0Y2gwCQAEHQAAAAIFAAAAC2FkZHJlc3NCb29rBQAAAANrZXkDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAABlN0cmluZwQAAAABYQUAAAAHJG1hdGNoMAkBAAAAB0FkZHJlc3MAAAABCQACWQAAAAEFAAAAAWEJAAACAAAAAQIAAAAGbm8ga2V5AAAAABB3aGl0ZWxpc3RBZGRyZXNzCQEAAAASZ2V0QWRkcmVzc0Zyb21Cb29rAAAAAQUAAAATd2hpdGVsaXN0QWRkcmVzc0tleQAAAAAUZEFwcFdoaXRlbGlzdEFkZHJlc3MJAQAAABJnZXRBZGRyZXNzRnJvbUJvb2sAAAABBQAAABdkQXBwV2hpdGVsaXN0QWRkcmVzc0tleQAAAAANYnVybmVyQWRkcmVzcwkBAAAAEmdldEFkZHJlc3NGcm9tQm9vawAAAAEFAAAAEGJ1cm5lckFkZHJlc3NLZXkBAAAAEGlzVG9rZW5zYWxlQWxsb3cAAAAAAwkAAAAAAAACBQAAAAtjb21wYW55VHlwZQUAAAALaXNUb2tlbnNhbGUGCQAAAAAAAAIFAAAAC2NvbXBhbnlUeXBlBQAAABJpc1Rva2Vuc2FsZUFuZFN3YXABAAAAC2lzU3dhcEFsbG93AAAAAAMJAAAA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AgUAAAAKY3VycmVudEtleQUAAAASb3duZXJBZGRyZXNzU3RyaW5nCQAAAgAAAAECAAAAMCMwMDMwIFRoZSBpc3N1ZXIgY2FuYHQgaW52ZXN0IGluIGl0cyBvd24gY29tcGFueQMJAABmAAAAAgUAAAAKdmFsaWRTdGF0ZQUAAAAOaXNBY2NvdW50QWxsb3cJAAACAAAAAQkAASwAAAACCQABLAAAAAIJAAEsAAAAAgIAAAAxIzAwMjAgWW91ciBhY2NvdW50IGhhcyBubyByaWdodCB0byBzZW5kIGZ1bmRzLiBfIAUAAAAKY3VycmVudEtleQIAAAABIAUAAAASb3duZXJBZGRyZXNzU3RyaW5nBAAAAA1hY2NvdW50QXNzZXRzBAAAAAckbWF0Y2gwCQAEGgAAAAIFAAAABHRoaXMFAAAADWtleURpc3RBc3NldHMDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAAA0ludAQAAAABYQUAAAAHJG1hdGNoMAUAAAABYQUAAAAPdG9rZW5zYWxlQW1vdW50BAAAAAp0b2tlbnNDYWxjCQAAawAAAAMFAAAAB3BheW1lbnQFAAAAE2Fzc2V0RGVjaW1hbHNPZmZzZXQFAAAADGN1cnJlbnRQcmljZQQAAAASbWluUGF5bWVudEluQXNzZXRzCQAAawAAAAMFAAAACm1pblBheW1lbnQFAAAAE2Fzc2V0RGVjaW1hbHNPZmZzZXQFAAAADGN1cnJlbnRQcmljZQMDAwkAAGYAAAACAAAAAAAAAAAACQAAZQAAAAIFAAAADWFjY291bnRBc3NldHMFAAAACnRva2Vuc0NhbGMGCQAAZgAAAAIFAAAAEm1pblBheW1lbnRJbkFzc2V0cwUAAAAKdG9rZW5zQ2FsYwYDCQEAAAACIT0AAAACBQAAAAp0b2tlbnNDYWxjBQAAAA1hY2NvdW50QXNzZXRzCQAAZgAAAAIFAAAACnRva2Vuc0NhbGMJAABlAAAAAgUAAAANYWNjb3VudEFzc2V0cwUAAAASbWluUGF5bWVudEluQXNzZXRzBwkAAAIAAAABAgAAAB8jMDQwMCBJbmNvcnJlY3QgcGF5bWVudCBhbW91bnQuBAAAABFuZXdJbnZlc3RvckFtb3VudAkAAGQAAAACCQEAAAAJZ2V0QW1vdW50AAAAAQkAASwAAAACBQAAABJrZXlTdW1BbW91bnRQcmVmaXgFAAAACmN1cnJlbnRLZXkFAAAAB3BheW1lbnQEAAAAEW5ld0ludmVzdG9yQXNzZXRzCQAAZAAAAAIJAQAAAAlnZXRBbW91bnQAAAABCQABLAAAAAIFAAAAEmtleVN1bUFzc2V0c1ByZWZpeAUAAAAKY3VycmVudEtleQUAAAAKdG9rZW5zQ2FsYwQAAAAQbmV3QWNjb3VudEFzc2V0cwkAAGUAAAACBQAAAA1hY2NvdW50QXNzZXRzBQAAAAp0b2tlbnNDYWxjBAAAABBuZXdBY2NvdW50QW1vdW50CQAAZAAAAAIFAAAADWFjY291bnRBbW91bnQFAAAAB3BheW1lbnQJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAAEsAAAAAgUAAAASa2V5U3VtQW1vdW50UHJlZml4BQAAAApjdXJyZW50S2V5BQAAABFuZXdJbnZlc3RvckFtb3VudAkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkAASwAAAACBQAAABJrZXlTdW1Bc3NldHNQcmVmaXgFAAAACmN1cnJlbnRLZXkFAAAAEW5ld0ludmVzdG9yQXNzZXRzCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACBQAAAA1rZXlEaXN0QXNzZXRzBQAAABBuZXdBY2NvdW50QXNzZXRzCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACBQAAABJrZXlDb2xsZWN0ZWRBbW91bnQFAAAAEG5ld0FjY291bnRBbW91bnQFAAAAA25pbAAAAAFpAQAAAAtzd2FwRGVwb3NpdAAAAAAEAAAADGN1cnJlbnRQcmljZQUAAAAJc3dhcFByaWNlBAAAAA1hY2NvdW50QW1vdW50CQEAAAAJZ2V0QW1vdW50AAAAAQUAAAAWc3dhcEtleUNvbGxlY3RlZEFtb3VudAQAAAAKZEFwcFN0YXR1cwQAAAAHJG1hdGNoMAkABBoAAAACBQAAABRkQXBwV2hpdGVsaXN0QWRkcmVzcwkABCUAAAABBQAAAAR0aGlzAwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAANJbnQEAAAAAWEFAAAAByRtYXRjaDAFAAAAAWEA/////////BgDCQEAAAABIQAAAAEJAQAAAAtpc1N3YXBBbGxvdwAAAAAJAAACAAAAAQIAAAA+IzIwMDAgVGhpcyBzd2FwLWRlcG9zaXQgbWV0aG9kIGlzIHVuc29wcGVydGVkIGZvciB0aGlzIGNvbXBhbnkDCQEAAAABIQAAAAEJAQAAAApoYXNTdGFydGVkAAAAAAkAAAIAAAABCQABLAAAAAIJAAEsAAAAAgkAASwAAAACAgAAABxUaGUgVG9rZW5zYWxlIHdvcmtzIGJldHdlZW4gCQABpAAAAAEFAAAACXN0YXJ0VGltZQIAAAAFIGFuZCAJAAGkAAAAAQUAAAAHZW5kVGltZQMJAQAAAAxzd2FwSGFzRW5kZWQAAAAACQAAAgAAAAECAAAAZlRoZSByZXF1aXJlZCBhbW91bnQgaGFzIGFscmVhZHkgYmVlbiBhY2N1bXVsYXRlZC4gSWYgeW91IGFyZSBhbiBpbnZlc3RvciwgeW91IGNhbiB3aXRoZHJhdyB5b3VyIGZ1bmRzLgMJAAAAAAAAAgUAAAAKZEFwcFN0YXR1cwD////////8GAkAAAIAAAABAgAAACEjMDAxMCBUaGlzIGNvbXBhbnkgaXMgdW5zdXBwb3J0ZWQEAAAAB3BheW1lbnQJAQAAAA5nZXRTd2FwUGF5bWVudAAAAAEFAAAAAWkEAAAACmN1cnJlbnRLZXkJAAJYAAAAAQgIBQAAAAFpAAAABmNhbGxlcgAAAAVieXRlcwQAAAAOaXNBY2NvdW50QWxsb3cEAAAAByRtYXRjaDAJAAQaAAAAAgUAAAAQd2hpdGVsaXN0QWRkcmVzcwUAAAAKY3VycmVudEtleQMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAADSW50BAAAAAFhBQAAAAckbWF0Y2gwBQAAAAFhAP////////8BAwkAAGYAAAACBQAAAAp2YWxpZFN0YXRlBQAAAA5pc0FjY291bnRBbGxvdwkAAAIAAAABAgAAAC4jMDAyMCBZb3VyIGFjY291bnQgaGFzIG5vIHJpZ2h0IHRvIHNlbmQgZnVuZHMuBAAAAA1hY2NvdW50QXNzZXRzBAAAAAckbWF0Y2gwCQAEGgAAAAIFAAAABHRoaXMFAAAAEXN3YXBLZXlEaXN0QXNzZXRzAwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAANJbnQEAAAAAWEFAAAAByRtYXRjaDAFAAAAAWEFAAAACnN3YXBBbW91bnQEAAAACnRva2Vuc0NhbGMJAABrAAAAAwUAAAAHcGF5bWVudAUAAAATYXNzZXREZWNpbWFsc09mZnNldAUAAAAMY3VycmVudFByaWNlAwkAAGYAAAACAAAAAAAAAAAACQAAZQAAAAIFAAAADWFjY291bnRBc3NldHMFAAAACnRva2Vuc0NhbGMJAAACAAAAAQIAAAAZSW5jb3JyZWN0IHBheW1lbnQgYW1vdW50LgQAAAARbmV3SW52ZXN0b3JBbW91bnQJAABkAAAAAgkBAAAACWdldEFtb3VudAAAAAEJAAEsAAAAAgUAAAAWc3dhcEtleVN1bUFtb3VudFByZWZpeAUAAAAKY3VycmVudEtleQUAAAAHcGF5bWVudAQAAAARbmV3SW52ZXN0b3JBc3NldHMJAABkAAAAAgkBAAAACWdldEFtb3VudAAAAAEJAAEsAAAAAgUAAAAWc3dhcEtleVN1bUFzc2V0c1ByZWZpeAUAAAAKY3VycmVudEtleQUAAAAKdG9rZW5zQ2FsYwQAAAAQbmV3QWNjb3VudEFzc2V0cwkAAGUAAAACBQAAAA1hY2NvdW50QXNzZXRzBQAAAAp0b2tlbnNDYWxjBAAAABBuZXdBY2NvdW50QW1vdW50CQAAZAAAAAIFAAAADWFjY291bnRBbW91bnQFAAAAB3BheW1lbnQJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAAEsAAAAAgUAAAAWc3dhcEtleVN1bUFtb3VudFByZWZpeAUAAAAKY3VycmVudEtleQUAAAARbmV3SW52ZXN0b3JBbW91bnQJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAAEsAAAAAgUAAAAWc3dhcEtleVN1bUFzc2V0c1ByZWZpeAUAAAAKY3VycmVudEtleQUAAAARbmV3SW52ZXN0b3JBc3NldHMJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIFAAAAEXN3YXBLZXlEaXN0QXNzZXRzBQAAABBuZXdBY2NvdW50QXNzZXRzCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACBQAAABZzd2FwS2V5Q29sbGVjdGVkQW1vdW50BQAAABBuZXdBY2NvdW50QW1vdW50BQAAAANuaWwAAAABaQEAAAAKd2l0aGRyYXdhbAAAAAEAAAAHYWRkcmVzcwQAAAAKZEFwcFN0YXR1cwQAAAAHJG1hdGNoMAkABBoAAAACBQAAABRkQXBwV2hpdGVsaXN0QWRkcmVzcwkABCUAAAABBQAAAAR0aGlzAwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAANJbnQEAAAAAWEFAAAAByRtYXRjaDAFAAAAAWEAAAAAAAAAAAADCQAAAAAAAAIFAAAACmRBcHBTdGF0dXMAAAAAAAAAAAAJAAACAAAAAQIAAABIIzAwMzAgV2l0aGRyYXdhbHMgYXJlIG5vdCBhdmFpbGFibGUgdW50aWwgdGhlIGlzc3VlciBwYXNzZXMgdmVyaWZpY2F0aW9uBAAAAApjdXJyZW50S2V5CQEAAAAfZ2V0SW52ZXN0b3JBZGRyZXNzRm9yV2l0aGRyYXdhbAAAAAIFAAAAB2FkZHJlc3MJAAJYAAAAAQgIBQAAAAFpAAAABmNhbGxlcgAAAAVieXRlcwQAAAARY3VycmVudEtleUFkZHJlc3MJAQAAAAdBZGRyZXNzAAAAAQkAAlkAAAABBQAAAApjdXJyZW50S2V5BAAAABVjdXJyZW50SW52ZXN0b3JBc3NldHMJAQAAAAlnZXRBbW91bnQAAAABCQABLAAAAAIFAAAAEmtleVN1bUFzc2V0c1ByZWZpeAUAAAAKY3VycmVudEtleQQAAAAVY3VycmVudEludmVzdG9yQW1vdW50CQEAAAAJZ2V0QW1vdW50AAAAAQkAASwAAAACBQAAABJrZXlTdW1BbW91bnRQcmVmaXgFAAAACmN1cnJlbnRLZXkEAAAAGWN1cnJlbnRJbnZlc3RvclN3YXBBc3NldHMJAQAAAAlnZXRBbW91bnQAAAABCQABLAAAAAIFAAAAFnN3YXBLZXlTdW1Bc3NldHNQcmVmaXgFAAAACmN1cnJlbnRLZXkEAAAAGWN1cnJlbnRJbnZlc3RvclN3YXBBbW91bnQJAQAAAAlnZXRBbW91bnQAAAABCQABLAAAAAIFAAAAFnN3YXBLZXlTdW1BbW91bnRQcmVmaXgFAAAACmN1cnJlbnRLZXkEAAAAEWFjY291bnRTd2FwQW1vdW50CQEAAAAJZ2V0QW1vdW50AAAAAQUAAAAWc3dhcEtleUNvbGxlY3RlZEFtb3VudAQAAAARYWNjb3VudFN3YXBBc3NldHMJAQAAAAlnZXRBbW91bnQAAAABBQAAABFzd2FwS2V5RGlzdEFzc2V0cwQAAAANYWNjb3VudEFtb3VudAkBAAAACWdldEFtb3VudAAAAAEFAAAAEmtleUNvbGxlY3RlZEFtb3VudAQAAAANYWNjb3VudEFzc2V0cwkBAAAACWdldEFtb3VudAAAAAEFAAAADWtleURpc3RBc3NldHMEAAAAHGludmVzdG1lbnRBc3NldElkRm9yVHJhbnNmZXIJAQAAAB9nZXRJbnZlc3RtZW50QXNzZXRJZEZvclRyYW5zZmVyAAAAAgUAAAAYaW52ZXN0bWVudEFzc2V0SWRJc1dhdmVzBQAAABFpbnZlc3RtZW50QXNzZXRJZAMJAQAAAAEhAAAAAQkBAAAAD2NvbXBhbnlIYXNFbmRlZAAAAAAJAAACAAAAAQIAAAAhIzAwMDMgVGhlIENvbXBhbnkgaXMgc3RpbGwgYWN0aXZlAwMJAAAAAAAAAgUAAAAKY3VycmVudEtleQUAAAASb3duZXJBZGRyZXNzU3RyaW5nCQAAAAAAAAIFAAAACmRBcHBTdGF0dXMAAAAAAAAAAAEHBAAAABVpc3N1ZXJBbHJlYWR5R290RnVuZHMJAQAAAAlnZXRBbW91bnQAAAABBQAAAAlrZXlJc3N1ZXIDCQAAAAAAAAIFAAAAFWlzc3VlckFscmVhZHlHb3RGdW5kcwAAAAAAAAAAAAMDCQEAAAAQaXNUb2tlbnNhbGVBbGxvdwAAAAAJAQAAAAtpc1N3YXBBbGxvdwAAAAAHAwkAAGcAAAACBQAAAA1hY2NvdW50QW1vdW50BQAAAA1zb2Z0Q2FwQW1vdW50AwkBAAAAEmlzU2VydmljZUZlZUFjdGl2ZQAAAAAEAAAADXNlcnZpY2VBbW91bnQJAABrAAAAAwUAAAANYWNjb3VudEFtb3VudAUAAAAKc2VydmljZUZlZQAAAAAAAAAAZAQAAAAMaXNzdWVyQW1vdW50CQAAZQAAAAIFAAAADWFjY291bnRBbW91bnQFAAAADXNlcnZpY2VBbW91bnQEAAAAEXNlcnZpY2VGZWVBZGRyZXNzCQEAAAAHQWRkcmVzcwAAAAEJAAJZAAAAAQUAAAAXc2VydmljZUZlZUFkZHJlc3NTdHJpbmcJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIFAAAACWtleUlzc3VlcgAAAAAAAAAAAQkABEwAAAACCQEAAAAOU2NyaXB0VHJhbnNmZXIAAAADBQAAABFzZXJ2aWNlRmVlQWRkcmVzcwUAAAANc2VydmljZUFtb3VudAUAAAAcaW52ZXN0bWVudEFzc2V0SWRGb3JUcmFuc2ZlcgkABEwAAAACCQEAAAAOU2NyaXB0VHJhbnNmZXIAAAADBQAAAAxvd25lckFkZHJlc3MFAAAADGlzc3VlckFtb3VudAUAAAAcaW52ZXN0bWVudEFzc2V0SWRGb3JUcmFuc2ZlcgkABEwAAAACCQEAAAAOU2NyaXB0VHJhbnNmZXIAAAADBQAAAAxvd25lckFkZHJlc3MFAAAAEWFjY291bnRTd2FwQW1vdW50BQAAAAtzd2FwQXNzZXRJZAUAAAADbmlsCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACBQAAAAlrZXlJc3N1ZXIAAAAAAAAAAAEJAARMAAAAAgkBAAAADlNjcmlwdFRyYW5zZmVyAAAAAwUAAAAMb3duZXJBZGRyZXNzBQAAAA1hY2NvdW50QW1vdW50BQAAABxpbnZlc3RtZW50QXNzZXRJZEZvclRyYW5zZmVyCQAETAAAAAIJAQAAAA5TY3JpcHRUcmFuc2ZlcgAAAAMFAAAADG93bmVyQWRkcmVzcwUAAAARYWNjb3VudFN3YXBBbW91bnQFAAAAC3N3YXBBc3NldElkBQAAAANuaWwJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIFAAAACWtleUlzc3VlcgAAAAAAAAAAAQkABEwAAAACCQEAAAAOU2NyaXB0VHJhbnNmZXIAAAADBQAAAAxvd25lckFkZHJlc3MFAAAAEWFjY291bnRTd2FwQW1vdW50BQAAAAtzd2FwQXNzZXRJZAUAAAADbmlsAwkBAAAAEGlzVG9rZW5zYWxlQWxsb3cAAAAAAwkAAGcAAAACBQAAAA1hY2NvdW50QW1vdW50BQAAAA1zb2Z0Q2FwQW1vdW50AwkBAAAAEmlzU2VydmljZUZlZUFjdGl2ZQAAAAAEAAAADXNlcnZpY2VBbW91bnQJAABrAAAAAwUAAAANYWNjb3VudEFtb3VudAUAAAAKc2VydmljZUZlZQAAAAAAAAAAZAQAAAAMaXNzdWVyQW1vdW50CQAAZQAAAAIFAAAADWFjY291bnRBbW91bnQFAAAADXNlcnZpY2VBbW91bnQEAAAAEXNlcnZpY2VGZWVBZGRyZXNzCQEAAAAHQWRkcmVzcwAAAAEJAAJZAAAAAQUAAAAXc2VydmljZUZlZUFkZHJlc3NTdHJpbmcJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIFAAAACWtleUlzc3VlcgAAAAAAAAAAAQkABEwAAAACCQEAAAAOU2NyaXB0VHJhbnNmZXIAAAADBQAAABFzZXJ2aWNlRmVlQWRkcmVzcwUAAAANc2VydmljZUFtb3VudAUAAAAcaW52ZXN0bWVudEFzc2V0SWRGb3JUcmFuc2ZlcgkABEwAAAACCQEAAAAOU2NyaXB0VHJhbnNmZXIAAAADBQAAAAxvd25lckFkZHJlc3MFAAAADGlzc3VlckFtb3VudAUAAAAcaW52ZXN0bWVudEFzc2V0SWRGb3JUcmFuc2ZlcgUAAAADbmlsCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACBQAAAAlrZXlJc3N1ZXIAAAAAAAAAAAEJAARMAAAAAgkBAAAADlNjcmlwdFRyYW5zZmVyAAAAAwUAAAAMb3duZXJBZGRyZXNzBQAAAA1hY2NvdW50QW1vdW50BQAAABxpbnZlc3RtZW50QXNzZXRJZEZvclRyYW5zZmVyBQAAAANuaWwJAAACAAAAAQIAAAAZIzA1MDAgTm8gZnVuZHMgZm9yIGlzc3VlcgkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgUAAAAJa2V5SXNzdWVyAAAAAAAAAAABCQAETAAAAAIJAQAAAA5TY3JpcHRUcmFuc2ZlcgAAAAMFAAAADG93bmVyQWRkcmVzcwUAAAARYWNjb3VudFN3YXBBbW91bnQFAAAAC3N3YXBBc3NldElkBQAAAANuaWwJAAACAAAAAQIAAAAtIzA3MDAgVGhlIGlzc3VlciBoYXMgYWxyZWFkeSB0YWtlbiBpdHMgc2hhcmUhAwMJAAAAAAAAAgUAAAAVY3VycmVudEludmVzdG9yQW1vdW50AAAAAAAAAAAACQAAAAAAAAIFAAAAGWN1cnJlbnRJbnZlc3RvclN3YXBBbW91bnQAAAAAAAAAAAAHCQAAAgAAAAECAAAAFiMwNjAwIERvbid0IGhhdmUgbW9uZXkDAwkBAAAAEGlzVG9rZW5zYWxlQWxsb3cAAAAACQEAAAALaXNTd2FwQWxsb3cAAAAABwMDCQAAZgAAAAIFAAAADXNvZnRDYXBBbW91bnQFAAAADWFjY291bnRBbW91bnQJAAAAAAAAAgUAAAAKZEFwcFN0YXR1cwAAAAAAAAAAAQcJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAAEsAAAAAgUAAAASa2V5U3VtQW1vdW50UHJlZml4BQAAAApjdXJyZW50S2V5AAAAAAAAAAAACQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQABLAAAAAIFAAAAEmtleVN1bUFzc2V0c1ByZWZpeAUAAAAKY3VycmVudEtleQAAAAAAAAAAAAkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkAASwAAAACBQAAABZzd2FwS2V5U3VtQW1vdW50UHJlZml4BQAAAApjdXJyZW50S2V5AAAAAAAAAAAACQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQABLAAAAAIFAAAAFnN3YXBLZXlTdW1Bc3NldHNQcmVmaXgFAAAACmN1cnJlbnRLZXkAAAAAAAAAAAAJAARMAAAAAgkBAAAADlNjcmlwdFRyYW5zZmVyAAAAAwUAAAARY3VycmVudEtleUFkZHJlc3MFAAAAFWN1cnJlbnRJbnZlc3RvckFtb3VudAUAAAAcaW52ZXN0bWVudEFzc2V0SWRGb3JUcmFuc2ZlcgkABEwAAAACCQEAAAAOU2NyaXB0VHJhbnNmZXIAAAADBQAAABFjdXJyZW50S2V5QWRkcmVzcwUAAAAZY3VycmVudEludmVzdG9yU3dhcEFzc2V0cwUAAAANaXNzdWVyQXNzZXRJZAUAAAADbmlsAwkAAAAAAAACBQAAAApkQXBwU3RhdHVzAAAAAAAAAAABCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQABLAAAAAIFAAAAEmtleVN1bUFtb3VudFByZWZpeAUAAAAKY3VycmVudEtleQAAAAAAAAAAAAkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkAASwAAAACBQAAABJrZXlTdW1Bc3NldHNQcmVmaXgFAAAACmN1cnJlbnRLZXkAAAAAAAAAAAAJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAAEsAAAAAgUAAAAWc3dhcEtleVN1bUFtb3VudFByZWZpeAUAAAAKY3VycmVudEtleQAAAAAAAAAAAAkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkAASwAAAACBQAAABZzd2FwS2V5U3VtQXNzZXRzUHJlZml4BQAAAApjdXJyZW50S2V5AAAAAAAAAAAACQAETAAAAAIJAQAAAA5TY3JpcHRUcmFuc2ZlcgAAAAMFAAAAEWN1cnJlbnRLZXlBZGRyZXNzBQAAABVjdXJyZW50SW52ZXN0b3JBc3NldHMFAAAADWlzc3VlckFzc2V0SWQJAARMAAAAAgkBAAAADlNjcmlwdFRyYW5zZmVyAAAAAwUAAAARY3VycmVudEtleUFkZHJlc3MFAAAAGWN1cnJlbnRJbnZlc3RvclN3YXBBc3NldHMFAAAADWlzc3VlckFzc2V0SWQFAAAAA25pbAkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkAASwAAAACBQAAABJrZXlTdW1BbW91bnRQcmVmaXgFAAAACmN1cnJlbnRLZXkAAAAAAAAAAAAJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAAEsAAAAAgUAAAASa2V5U3VtQXNzZXRzUHJlZml4BQAAAApjdXJyZW50S2V5AAAAAAAAAAAACQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQABLAAAAAIFAAAAFnN3YXBLZXlTdW1BbW91bnRQcmVmaXgFAAAACmN1cnJlbnRLZXkAAAAAAAAAAAAJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAAEsAAAAAgUAAAAWc3dhcEtleVN1bUFzc2V0c1ByZWZpeAUAAAAKY3VycmVudEtleQAAAAAAAAAAAAkABEwAAAACCQEAAAAOU2NyaXB0VHJhbnNmZXIAAAADBQAAABFjdXJyZW50S2V5QWRkcmVzcwUAAAAVY3VycmVudEludmVzdG9yQW1vdW50BQAAABxpbnZlc3RtZW50QXNzZXRJZEZvclRyYW5zZmVyCQAETAAAAAIJAQAAAA5TY3JpcHRUcmFuc2ZlcgAAAAMFAAAAEWN1cnJlbnRLZXlBZGRyZXNzBQAAABljdXJyZW50SW52ZXN0b3JTd2FwQW1vdW50BQAAAAtzd2FwQXNzZXRJZAUAAAADbmlsAwkBAAAAEGlzVG9rZW5zYWxlQWxsb3cAAAAAAwMJAABnAAAAAgUAAAANYWNjb3VudEFtb3VudAUAAAANc29mdENhcEFtb3VudAkAAAAAAAACBQAAAApkQXBwU3RhdHVzAAAAAAAAAAABBwkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkAASwAAAACBQAAABJrZXlTdW1BbW91bnRQcmVmaXgFAAAACmN1cnJlbnRLZXkAAAAAAAAAAAAJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAAEsAAAAAgUAAAASa2V5U3VtQXNzZXRzUHJlZml4BQAAAApjdXJyZW50S2V5AAAAAAAAAAAACQAETAAAAAIJAQAAAA5TY3JpcHRUcmFuc2ZlcgAAAAMFAAAAEWN1cnJlbnRLZXlBZGRyZXNzBQAAABVjdXJyZW50SW52ZXN0b3JBc3NldHMFAAAADWlzc3VlckFzc2V0SWQFAAAAA25pbAkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkAASwAAAACBQAAABJrZXlTdW1BbW91bnRQcmVmaXgFAAAACmN1cnJlbnRLZXkAAAAAAAAAAAAJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAAEsAAAAAgUAAAASa2V5U3VtQXNzZXRzUHJlZml4BQAAAApjdXJyZW50S2V5AAAAAAAAAAAACQAETAAAAAIJAQAAAA5TY3JpcHRUcmFuc2ZlcgAAAAMFAAAAEWN1cnJlbnRLZXlBZGRyZXNzBQAAABVjdXJyZW50SW52ZXN0b3JBbW91bnQFAAAAHGludmVzdG1lbnRBc3NldElkRm9yVHJhbnNmZXIFAAAAA25pbAMJAAAAAAAAAgUAAAAKZEFwcFN0YXR1cwAAAAAAAAAAAQkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkAASwAAAACBQAAABZzd2FwS2V5U3VtQW1vdW50UHJlZml4BQAAAApjdXJyZW50S2V5AAAAAAAAAAAACQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQABLAAAAAIFAAAAFnN3YXBLZXlTdW1Bc3NldHNQcmVmaXgFAAAACmN1cnJlbnRLZXkAAAAAAAAAAAAJAARMAAAAAgkBAAAADlNjcmlwdFRyYW5zZmVyAAAAAwUAAAARY3VycmVudEtleUFkZHJlc3MFAAAAGWN1cnJlbnRJbnZlc3RvclN3YXBBc3NldHMFAAAADWlzc3VlckFzc2V0SWQFAAAAA25pbAkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkAASwAAAACBQAAABZzd2FwS2V5U3VtQW1vdW50UHJlZml4BQAAAApjdXJyZW50S2V5AAAAAAAAAAAACQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQABLAAAAAIFAAAAFnN3YXBLZXlTdW1Bc3NldHNQcmVmaXgFAAAACmN1cnJlbnRLZXkAAAAAAAAAAAAJAARMAAAAAgkBAAAADlNjcmlwdFRyYW5zZmVyAAAAAwUAAAARY3VycmVudEtleUFkZHJlc3MFAAAAGWN1cnJlbnRJbnZlc3RvclN3YXBBbW91bnQFAAAAC3N3YXBBc3NldElkBQAAAANuaWwAAAABAAAAAnR4AQAAAAZ2ZXJpZnkAAAAABAAAAAckbWF0Y2gwBQAAAAJ0eAMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAAPQnVyblRyYW5zYWN0aW9uBAAAAAJ0eAUAAAAHJG1hdGNoMAYDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAAElJlaXNzdWVUcmFuc2FjdGlvbgQAAAACdHgFAAAAByRtYXRjaDAHAwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAABNUcmFuc2ZlclRyYW5zYWN0aW9uBAAAAAJ0eAUAAAAHJG1hdGNoMAkAAAAAAAACCAUAAAACdHgAAAAJcmVjaXBpZW50BQAAAA1idXJuZXJBZGRyZXNzAwMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAAPRGF0YVRyYW5zYWN0aW9uBgMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAAZU2V0QXNzZXRTY3JpcHRUcmFuc2FjdGlvbgYJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAAUU2V0U2NyaXB0VHJhbnNhY3Rpb24EAAAAAnR4BQAAAAckbWF0Y2gwBAAAAAR0eElkCQACWAAAAAEIBQAAAAJ0eAAAAAJpZAQAAAAJcEFkZHJlc3MxCQEAAAASZ2V0QWRkcmVzc0Zyb21Cb29rAAAAAQIAAAAJcEFkZHJlc3MxBAAAAAlwQWRkcmVzczIJAQAAABJnZXRBZGRyZXNzRnJvbUJvb2sAAAABAgAAAAlwQWRkcmVzczIEAAAACXBBZGRyZXNzMwkBAAAAEmdldEFkZHJlc3NGcm9tQm9vawAAAAECAAAACXBBZGRyZXNzMwQAAAAJcEFkZHJlc3M0CQEAAAASZ2V0QWRkcmVzc0Zyb21Cb29rAAAAAQIAAAAJcEFkZHJlc3M0BAAAAAlwQWRkcmVzczUJAQAAABJnZXRBZGRyZXNzRnJvbUJvb2sAAAABAgAAAAlwQWRkcmVzczUEAAAACXBBZGRyZXNzNgkBAAAAEmdldEFkZHJlc3NGcm9tQm9vawAAAAECAAAACXBBZGRyZXNzNgQAAAAJcEFkZHJlc3M3CQEAAAASZ2V0QWRkcmVzc0Zyb21Cb29rAAAAAQIAAAAJcEFkZHJlc3M3BAAAAAlwQWRkcmVzczgJAQAAABJnZXRBZGRyZXNzRnJvbUJvb2sAAAABAgAAAAlwQWRkcmVzczgEAAAAC3BLZXkxU2lnbmVkAwkBAAAACWlzRGVmaW5lZAAAAAEJAAQaAAAAAgUAAAAJcEFkZHJlc3MxBQAAAAR0eElkAAAAAAAAAAABAAAAAAAAAAAABAAAAAtwS2V5MlNpZ25lZAMJAQAAAAlpc0RlZmluZWQAAAABCQAEGgAAAAIFAAAACXBBZGRyZXNzMgUAAAAEdHhJZAAAAAAAAAAAAQAAAAAAAAAAAAQAAAALcEtleTNTaWduZWQDCQEAAAAJaXNEZWZpbmVkAAAAAQkABBoAAAACBQAAAAlwQWRkcmVzczMFAAAABHR4SWQAAAAAAAAAAAEAAAAAAAAAAAAEAAAAC3BLZXk0U2lnbmVkAwkBAAAACWlzRGVmaW5lZAAAAAEJAAQaAAAAAgUAAAAJcEFkZHJlc3M0BQAAAAR0eElkAAAAAAAAAAABAAAAAAAAAAAABAAAAAtwS2V5NVNpZ25lZAMJAQAAAAlpc0RlZmluZWQAAAABCQAEGgAAAAIFAAAACXBBZGRyZXNzNQUAAAAEdHhJZAAAAAAAAAAAAQAAAAAAAAAAAAQAAAALcEtleTZTaWduZWQDCQEAAAAJaXNEZWZpbmVkAAAAAQkABBoAAAACBQAAAAlwQWRkcmVzczYFAAAABHR4SWQAAAAAAAAAAAEAAAAAAAAAAAAEAAAAC3BLZXk3U2lnbmVkAwkBAAAACWlzRGVmaW5lZAAAAAEJAAQaAAAAAgUAAAAJcEFkZHJlc3M3BQAAAAR0eElkAAAAAAAAAAABAAAAAAAAAAAABAAAAAtwS2V5OFNpZ25lZAMJAQAAAAlpc0RlZmluZWQAAAABCQAEGgAAAAIFAAAACXBBZGRyZXNzOAUAAAAEdHhJZAAAAAAAAAAAAQAAAAAAAAAAAAkAAGcAAAACCQAAZAAAAAIJAABkAAAAAgkAAGQAAAACCQAAZAAAAAIJAABkAAAAAgkAAGQAAAACCQAAZAAAAAIFAAAAC3BLZXkxU2lnbmVkBQAAAAtwS2V5MlNpZ25lZAUAAAALcEtleTNTaWduZWQFAAAAC3BLZXk0U2lnbmVkBQAAAAtwS2V5NVNpZ25lZAUAAAALcEtleTZTaWduZWQFAAAAC3BLZXk3U2lnbmVkBQAAAAtwS2V5OFNpZ25lZAAAAAAAAAAAAwdljFt5", "chainId": 84, "height": 1189983, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: none Next: none Full:
OldNewDifferences
1-# no script
1+{-# STDLIB_VERSION 4 #-}
2+{-# SCRIPT_TYPE ACCOUNT #-}
3+{-# CONTENT_TYPE DAPP #-}
4+let paramPrefix = "param_"
5+
6+let addressBook = Address(base58'3MwoVRAPfC2NKuuYJKHVAVtUFhq8MyTEfQh')
7+
8+let whitelistAddressKey = "whitelistAddress"
9+
10+let dAppWhitelistAddressKey = "dAppWhitelistAddress"
11+
12+let burnerAddressKey = "burnerAddress"
13+
14+func getStringParam (key) = match getString(this, (paramPrefix + key)) {
15+ case a: String =>
16+ a
17+ case _ =>
18+ throw("no string key")
19+}
20+
21+
22+func getIntParam (key) = match getInteger(this, (paramPrefix + key)) {
23+ case a: Int =>
24+ a
25+ case _ =>
26+ throw("no int key")
27+}
28+
29+
30+func getBooleanParam (key) = match getBoolean(this, (paramPrefix + key)) {
31+ case a: Boolean =>
32+ a
33+ case _ =>
34+ throw("no boolean key")
35+}
36+
37+
38+let issuerAssetId = base58'3GZpwgG72NxTmuaZrvk2hCEBDJUixieGeWrsth91SvQR'
39+
40+let investmentAssetId = base58'WAVES'
41+
42+let investmentAssetIdIsWaves = true
43+
44+let ownerAddressString = getStringParam("issuerAccountAddress")
45+
46+let ownerAddress = Address(fromBase58String(ownerAddressString))
47+
48+let assetDecimalsOffset = 1
49+
50+let tokensaleAmount = getIntParam("tokensaleAmount")
51+
52+let startTime = getIntParam("startTime")
53+
54+let endTime = getIntParam("endTime")
55+
56+let price = getIntParam("price")
57+
58+let softCapAmount = getIntParam("softCapAmount")
59+
60+let minPayment = getIntParam("minPayment")
61+
62+let swapAssetId = base58''
63+
64+let swapAmount = getIntParam("swapAmount")
65+
66+let swapPrice = getIntParam("swapPrice")
67+
68+let serviceFee = getIntParam("serviceFee")
69+
70+let serviceFeeAddressString = getStringParam("serviceFeeAddress")
71+
72+let companyType = 0
73+
74+let isTokensale = 0
75+
76+let isSwap = 1
77+
78+let isTokensaleAndSwap = 2
79+
80+let swapKeySumAmountPrefix = "swapSumAmount "
81+
82+let swapKeySumAssetsPrefix = "swapSumAssets "
83+
84+let swapKeyDistAssets = "swapAssets"
85+
86+let swapKeyCollectedAmount = "swapAmount"
87+
88+let keySumAmountPrefix = "sumAmount "
89+
90+let keySumPaidAmountPrefix = "paidAmount "
91+
92+let keySumAssetsPrefix = "sumAssets "
93+
94+let keyAllowAccountPrefix = "allow "
95+
96+let keyDistAssets = "assets"
97+
98+let keyCollectedAmount = "amount"
99+
100+let keyIssuer = "issuer"
101+
102+let ver = "6.4.0"
103+
104+let validState = 1000
105+
106+func getAddressFromBook (key) = match getString(addressBook, key) {
107+ case a: String =>
108+ Address(fromBase58String(a))
109+ case _ =>
110+ throw("no key")
111+}
112+
113+
114+let whitelistAddress = getAddressFromBook(whitelistAddressKey)
115+
116+let dAppWhitelistAddress = getAddressFromBook(dAppWhitelistAddressKey)
117+
118+let burnerAddress = getAddressFromBook(burnerAddressKey)
119+
120+func isTokensaleAllow () = if ((companyType == isTokensale))
121+ then true
122+ else (companyType == isTokensaleAndSwap)
123+
124+
125+func isSwapAllow () = if ((companyType == isSwap))
126+ then true
127+ else (companyType == isTokensaleAndSwap)
128+
129+
130+func isServiceFeeActive () = (serviceFee != 0)
131+
132+
133+func getCurrentTime () = {
134+ let blockInfo = value(blockInfoByHeight(height))
135+ (blockInfo.timestamp / 1000)
136+ }
137+
138+
139+func getInvestmentAssetIdForTransfer (isWaves,assetId) = if ((isWaves == false))
140+ then assetId
141+ else unit
142+
143+
144+func getCurrentPrice () = price
145+
146+
147+func getAmount (key) = match getInteger(this, key) {
148+ case a: Int =>
149+ a
150+ case _ =>
151+ 0
152+}
153+
154+
155+func hasStarted () = (getCurrentTime() >= startTime)
156+
157+
158+func tokensaleHasEnded () = {
159+ let assets = match getInteger(this, keyDistAssets) {
160+ case a: Int =>
161+ a
162+ case _ =>
163+ tokensaleAmount
164+ }
165+ if ((getCurrentTime() > endTime))
166+ then true
167+ else (assets == 0)
168+ }
169+
170+
171+func swapHasEnded () = {
172+ let assets = match getInteger(this, swapKeyDistAssets) {
173+ case a: Int =>
174+ a
175+ case _ =>
176+ swapAmount
177+ }
178+ if ((getCurrentTime() > endTime))
179+ then true
180+ else (assets == 0)
181+ }
182+
183+
184+func companyHasEnded () = if (if (isSwapAllow())
185+ then isTokensaleAllow()
186+ else false)
187+ then if (tokensaleHasEnded())
188+ then swapHasEnded()
189+ else false
190+ else if (isTokensaleAllow())
191+ then tokensaleHasEnded()
192+ else if (isSwapAllow())
193+ then swapHasEnded()
194+ else false
195+
196+
197+func getPayment (i) = if ((size(i.payments) == 0))
198+ then throw("#0100 Payment must be attached")
199+ else {
200+ let p = i.payments[0]
201+ let isPaymentOk = match p.assetId {
202+ case assetId: ByteVector =>
203+ if (!(investmentAssetIdIsWaves))
204+ then (assetId == investmentAssetId)
205+ else false
206+ case _ =>
207+ (investmentAssetIdIsWaves == true)
208+ }
209+ if (isPaymentOk)
210+ then if ((assetDecimalsOffset == 1))
211+ then if (((p.amount % price) == 0))
212+ then p.amount
213+ else throw("#0300 payment amount must be a multiple of token price")
214+ else p.amount
215+ else throw("#0200 Invalid asset ID of investment")
216+ }
217+
218+
219+func getSwapPayment (i) = if ((size(i.payments) == 0))
220+ then throw("#0100 Payment must be attached")
221+ else {
222+ let p = i.payments[0]
223+ let isPaymentOk = match p.assetId {
224+ case assetId: ByteVector =>
225+ (assetId == swapAssetId)
226+ case _ =>
227+ false
228+ }
229+ if (isPaymentOk)
230+ then if ((assetDecimalsOffset == 1))
231+ then if (((p.amount % swapPrice) == 0))
232+ then p.amount
233+ else throw("payment amount must be a multiple of token price")
234+ else p.amount
235+ else throw("Invalid asset ID of investment")
236+ }
237+
238+
239+func getInvestorAddressForWithdrawal (argAddress,callerAddress) = if ((size(argAddress) > 10))
240+ then argAddress
241+ else callerAddress
242+
243+
244+@Callable(i)
245+func deposit () = {
246+ let currentPrice = getCurrentPrice()
247+ let accountAmount = getAmount(keyCollectedAmount)
248+ let dAppStatus = match getInteger(dAppWhitelistAddress, toString(this)) {
249+ case a: Int =>
250+ a
251+ case _ =>
252+ -1000
253+ }
254+ if (!(isTokensaleAllow()))
255+ then throw("#1000 This deposit method is unsopperted for this company")
256+ else if (!(hasStarted()))
257+ then throw(((("#0001 The Tokensale works between " + toString(startTime)) + " and ") + toString(endTime)))
258+ else if (tokensaleHasEnded())
259+ then throw("#0002 The required amount has already been accumulated. If you are an investor, you can withdraw your funds.")
260+ else if ((dAppStatus == -1000))
261+ then throw("#0010 This company is unsopperted")
262+ else {
263+ let payment = getPayment(i)
264+ let currentKey = toBase58String(i.caller.bytes)
265+ let isAccountAllow = match getInteger(whitelistAddress, currentKey) {
266+ case a: Int =>
267+ a
268+ case _ =>
269+ -255
270+ }
271+ if ((currentKey == ownerAddressString))
272+ then throw("#0030 The issuer can`t invest in its own company")
273+ else if ((validState > isAccountAllow))
274+ then throw(((("#0020 Your account has no right to send funds. _ " + currentKey) + " ") + ownerAddressString))
275+ else {
276+ let accountAssets = match getInteger(this, keyDistAssets) {
277+ case a: Int =>
278+ a
279+ case _ =>
280+ tokensaleAmount
281+ }
282+ let tokensCalc = fraction(payment, assetDecimalsOffset, currentPrice)
283+ let minPaymentInAssets = fraction(minPayment, assetDecimalsOffset, currentPrice)
284+ if (if (if ((0 > (accountAssets - tokensCalc)))
285+ then true
286+ else (minPaymentInAssets > tokensCalc))
287+ then true
288+ else if ((tokensCalc != accountAssets))
289+ then (tokensCalc > (accountAssets - minPaymentInAssets))
290+ else false)
291+ then throw("#0400 Incorrect payment amount.")
292+ else {
293+ let newInvestorAmount = (getAmount((keySumAmountPrefix + currentKey)) + payment)
294+ let newInvestorAssets = (getAmount((keySumAssetsPrefix + currentKey)) + tokensCalc)
295+ let newAccountAssets = (accountAssets - tokensCalc)
296+ let newAccountAmount = (accountAmount + payment)
297+[IntegerEntry((keySumAmountPrefix + currentKey), newInvestorAmount), IntegerEntry((keySumAssetsPrefix + currentKey), newInvestorAssets), IntegerEntry(keyDistAssets, newAccountAssets), IntegerEntry(keyCollectedAmount, newAccountAmount)]
298+ }
299+ }
300+ }
301+ }
302+
303+
304+
305+@Callable(i)
306+func swapDeposit () = {
307+ let currentPrice = swapPrice
308+ let accountAmount = getAmount(swapKeyCollectedAmount)
309+ let dAppStatus = match getInteger(dAppWhitelistAddress, toString(this)) {
310+ case a: Int =>
311+ a
312+ case _ =>
313+ -1000
314+ }
315+ if (!(isSwapAllow()))
316+ then throw("#2000 This swap-deposit method is unsopperted for this company")
317+ else if (!(hasStarted()))
318+ then throw(((("The Tokensale works between " + toString(startTime)) + " and ") + toString(endTime)))
319+ else if (swapHasEnded())
320+ then throw("The required amount has already been accumulated. If you are an investor, you can withdraw your funds.")
321+ else if ((dAppStatus == -1000))
322+ then throw("#0010 This company is unsupported")
323+ else {
324+ let payment = getSwapPayment(i)
325+ let currentKey = toBase58String(i.caller.bytes)
326+ let isAccountAllow = match getInteger(whitelistAddress, currentKey) {
327+ case a: Int =>
328+ a
329+ case _ =>
330+ -255
331+ }
332+ if ((validState > isAccountAllow))
333+ then throw("#0020 Your account has no right to send funds.")
334+ else {
335+ let accountAssets = match getInteger(this, swapKeyDistAssets) {
336+ case a: Int =>
337+ a
338+ case _ =>
339+ swapAmount
340+ }
341+ let tokensCalc = fraction(payment, assetDecimalsOffset, currentPrice)
342+ if ((0 > (accountAssets - tokensCalc)))
343+ then throw("Incorrect payment amount.")
344+ else {
345+ let newInvestorAmount = (getAmount((swapKeySumAmountPrefix + currentKey)) + payment)
346+ let newInvestorAssets = (getAmount((swapKeySumAssetsPrefix + currentKey)) + tokensCalc)
347+ let newAccountAssets = (accountAssets - tokensCalc)
348+ let newAccountAmount = (accountAmount + payment)
349+[IntegerEntry((swapKeySumAmountPrefix + currentKey), newInvestorAmount), IntegerEntry((swapKeySumAssetsPrefix + currentKey), newInvestorAssets), IntegerEntry(swapKeyDistAssets, newAccountAssets), IntegerEntry(swapKeyCollectedAmount, newAccountAmount)]
350+ }
351+ }
352+ }
353+ }
354+
355+
356+
357+@Callable(i)
358+func withdrawal (address) = {
359+ let dAppStatus = match getInteger(dAppWhitelistAddress, toString(this)) {
360+ case a: Int =>
361+ a
362+ case _ =>
363+ 0
364+ }
365+ if ((dAppStatus == 0))
366+ then throw("#0030 Withdrawals are not available until the issuer passes verification")
367+ else {
368+ let currentKey = getInvestorAddressForWithdrawal(address, toBase58String(i.caller.bytes))
369+ let currentKeyAddress = Address(fromBase58String(currentKey))
370+ let currentInvestorAssets = getAmount((keySumAssetsPrefix + currentKey))
371+ let currentInvestorAmount = getAmount((keySumAmountPrefix + currentKey))
372+ let currentInvestorSwapAssets = getAmount((swapKeySumAssetsPrefix + currentKey))
373+ let currentInvestorSwapAmount = getAmount((swapKeySumAmountPrefix + currentKey))
374+ let accountSwapAmount = getAmount(swapKeyCollectedAmount)
375+ let accountSwapAssets = getAmount(swapKeyDistAssets)
376+ let accountAmount = getAmount(keyCollectedAmount)
377+ let accountAssets = getAmount(keyDistAssets)
378+ let investmentAssetIdForTransfer = getInvestmentAssetIdForTransfer(investmentAssetIdIsWaves, investmentAssetId)
379+ if (!(companyHasEnded()))
380+ then throw("#0003 The Company is still active")
381+ else if (if ((currentKey == ownerAddressString))
382+ then (dAppStatus == 1)
383+ else false)
384+ then {
385+ let issuerAlreadyGotFunds = getAmount(keyIssuer)
386+ if ((issuerAlreadyGotFunds == 0))
387+ then if (if (isTokensaleAllow())
388+ then isSwapAllow()
389+ else false)
390+ then if ((accountAmount >= softCapAmount))
391+ then if (isServiceFeeActive())
392+ then {
393+ let serviceAmount = fraction(accountAmount, serviceFee, 100)
394+ let issuerAmount = (accountAmount - serviceAmount)
395+ let serviceFeeAddress = Address(fromBase58String(serviceFeeAddressString))
396+[IntegerEntry(keyIssuer, 1), ScriptTransfer(serviceFeeAddress, serviceAmount, investmentAssetIdForTransfer), ScriptTransfer(ownerAddress, issuerAmount, investmentAssetIdForTransfer), ScriptTransfer(ownerAddress, accountSwapAmount, swapAssetId)]
397+ }
398+ else [IntegerEntry(keyIssuer, 1), ScriptTransfer(ownerAddress, accountAmount, investmentAssetIdForTransfer), ScriptTransfer(ownerAddress, accountSwapAmount, swapAssetId)]
399+ else [IntegerEntry(keyIssuer, 1), ScriptTransfer(ownerAddress, accountSwapAmount, swapAssetId)]
400+ else if (isTokensaleAllow())
401+ then if ((accountAmount >= softCapAmount))
402+ then if (isServiceFeeActive())
403+ then {
404+ let serviceAmount = fraction(accountAmount, serviceFee, 100)
405+ let issuerAmount = (accountAmount - serviceAmount)
406+ let serviceFeeAddress = Address(fromBase58String(serviceFeeAddressString))
407+[IntegerEntry(keyIssuer, 1), ScriptTransfer(serviceFeeAddress, serviceAmount, investmentAssetIdForTransfer), ScriptTransfer(ownerAddress, issuerAmount, investmentAssetIdForTransfer)]
408+ }
409+ else [IntegerEntry(keyIssuer, 1), ScriptTransfer(ownerAddress, accountAmount, investmentAssetIdForTransfer)]
410+ else throw("#0500 No funds for issuer")
411+ else [IntegerEntry(keyIssuer, 1), ScriptTransfer(ownerAddress, accountSwapAmount, swapAssetId)]
412+ else throw("#0700 The issuer has already taken its share!")
413+ }
414+ else if (if ((currentInvestorAmount == 0))
415+ then (currentInvestorSwapAmount == 0)
416+ else false)
417+ then throw("#0600 Don't have money")
418+ else if (if (isTokensaleAllow())
419+ then isSwapAllow()
420+ else false)
421+ then if (if ((softCapAmount > accountAmount))
422+ then (dAppStatus == 1)
423+ else false)
424+ then [IntegerEntry((keySumAmountPrefix + currentKey), 0), IntegerEntry((keySumAssetsPrefix + currentKey), 0), IntegerEntry((swapKeySumAmountPrefix + currentKey), 0), IntegerEntry((swapKeySumAssetsPrefix + currentKey), 0), ScriptTransfer(currentKeyAddress, currentInvestorAmount, investmentAssetIdForTransfer), ScriptTransfer(currentKeyAddress, currentInvestorSwapAssets, issuerAssetId)]
425+ else if ((dAppStatus == 1))
426+ then [IntegerEntry((keySumAmountPrefix + currentKey), 0), IntegerEntry((keySumAssetsPrefix + currentKey), 0), IntegerEntry((swapKeySumAmountPrefix + currentKey), 0), IntegerEntry((swapKeySumAssetsPrefix + currentKey), 0), ScriptTransfer(currentKeyAddress, currentInvestorAssets, issuerAssetId), ScriptTransfer(currentKeyAddress, currentInvestorSwapAssets, issuerAssetId)]
427+ else [IntegerEntry((keySumAmountPrefix + currentKey), 0), IntegerEntry((keySumAssetsPrefix + currentKey), 0), IntegerEntry((swapKeySumAmountPrefix + currentKey), 0), IntegerEntry((swapKeySumAssetsPrefix + currentKey), 0), ScriptTransfer(currentKeyAddress, currentInvestorAmount, investmentAssetIdForTransfer), ScriptTransfer(currentKeyAddress, currentInvestorSwapAmount, swapAssetId)]
428+ else if (isTokensaleAllow())
429+ then if (if ((accountAmount >= softCapAmount))
430+ then (dAppStatus == 1)
431+ else false)
432+ then [IntegerEntry((keySumAmountPrefix + currentKey), 0), IntegerEntry((keySumAssetsPrefix + currentKey), 0), ScriptTransfer(currentKeyAddress, currentInvestorAssets, issuerAssetId)]
433+ else [IntegerEntry((keySumAmountPrefix + currentKey), 0), IntegerEntry((keySumAssetsPrefix + currentKey), 0), ScriptTransfer(currentKeyAddress, currentInvestorAmount, investmentAssetIdForTransfer)]
434+ else if ((dAppStatus == 1))
435+ then [IntegerEntry((swapKeySumAmountPrefix + currentKey), 0), IntegerEntry((swapKeySumAssetsPrefix + currentKey), 0), ScriptTransfer(currentKeyAddress, currentInvestorSwapAssets, issuerAssetId)]
436+ else [IntegerEntry((swapKeySumAmountPrefix + currentKey), 0), IntegerEntry((swapKeySumAssetsPrefix + currentKey), 0), ScriptTransfer(currentKeyAddress, currentInvestorSwapAmount, swapAssetId)]
437+ }
438+ }
439+
440+
441+@Verifier(tx)
442+func verify () = match tx {
443+ case tx: BurnTransaction =>
444+ true
445+ case tx: ReissueTransaction =>
446+ false
447+ case tx: TransferTransaction =>
448+ (tx.recipient == burnerAddress)
449+ case tx: DataTransaction|SetAssetScriptTransaction|SetScriptTransaction =>
450+ let txId = toBase58String(tx.id)
451+ let pAddress1 = getAddressFromBook("pAddress1")
452+ let pAddress2 = getAddressFromBook("pAddress2")
453+ let pAddress3 = getAddressFromBook("pAddress3")
454+ let pAddress4 = getAddressFromBook("pAddress4")
455+ let pAddress5 = getAddressFromBook("pAddress5")
456+ let pAddress6 = getAddressFromBook("pAddress6")
457+ let pAddress7 = getAddressFromBook("pAddress7")
458+ let pAddress8 = getAddressFromBook("pAddress8")
459+ let pKey1Signed = if (isDefined(getInteger(pAddress1, txId)))
460+ then 1
461+ else 0
462+ let pKey2Signed = if (isDefined(getInteger(pAddress2, txId)))
463+ then 1
464+ else 0
465+ let pKey3Signed = if (isDefined(getInteger(pAddress3, txId)))
466+ then 1
467+ else 0
468+ let pKey4Signed = if (isDefined(getInteger(pAddress4, txId)))
469+ then 1
470+ else 0
471+ let pKey5Signed = if (isDefined(getInteger(pAddress5, txId)))
472+ then 1
473+ else 0
474+ let pKey6Signed = if (isDefined(getInteger(pAddress6, txId)))
475+ then 1
476+ else 0
477+ let pKey7Signed = if (isDefined(getInteger(pAddress7, txId)))
478+ then 1
479+ else 0
480+ let pKey8Signed = if (isDefined(getInteger(pAddress8, txId)))
481+ then 1
482+ else 0
483+ ((((((((pKey1Signed + pKey2Signed) + pKey3Signed) + pKey4Signed) + pKey5Signed) + pKey6Signed) + pKey7Signed) + pKey8Signed) >= 3)
484+ case _ =>
485+ false
486+}
487+

github/deemru/w8io/3ef1775 
52.51 ms