tx · 7dxwTif7toC72aaJf21Ysb7en6stqYPB8iEC79GPqi4N

3N2GnQeySpP2XZMtufCLo34J7QRnfcTkDmD:  -1.91200000 Waves

2022.11.25 23:51 [2333126] smart account 3N2GnQeySpP2XZMtufCLo34J7QRnfcTkDmD > SELF 0.00000000 Waves

{ "type": 13, "id": "7dxwTif7toC72aaJf21Ysb7en6stqYPB8iEC79GPqi4N", "fee": 191200000, "feeAssetId": null, "timestamp": 1669409529494, "version": 2, "chainId": 84, "sender": "3N2GnQeySpP2XZMtufCLo34J7QRnfcTkDmD", "senderPublicKey": "C82s9YyBgcWsJMQTV9LdVBvys8efC2qC2z8jmX42UyqF", "proofs": [ "QpPUNsbv3cqUkfqirJrApPrZYV4V74e3xs69u3J5xjEXRA7nTNUTWhLPGrNtXMZdLySxcGhz7BX78jD4KqWpqRv", "3Hc357XkpXnExS8Q7SmPDpmL5D3NSeFv1AjrzGVVjfo3huNk3X3LmUhXWdEN47qLJ7nErA7YD6HMirBgKRx5pWNx" ], "script": "base64:BgIkCAISBAoCCBgSABIAEgUKAwQBCBIDCgEBEgMKAQESABIDCgEBKQAHa0FjdGl2ZQIGYWN0aXZlAAtrQWN0aXZlR2xvYgIUYWN0aXZlX2FsbF9jb250cmFjdHMABmtDYXVzZQIOc2h1dGRvd25fY2F1c2UADGtVU0ROQWRkcmVzcwIYc3Rha2luZ191c2RubnNidF9hZGRyZXNzAAxrRVVSTkFkZHJlc3MCFHN0YWtpbmdfZXVybl9hZGRyZXNzAAxrTGVhc2luZ1Bvb2wCD2xlYXNpbmdfYWRkcmVzcwAOa0xlYXNpbmdBbW91bnQCDmxlYXNpbmdfYW1vdW50AAprTGVhc2luZ0lkAgpsZWFzaW5nX2lkAA1rQWRtaW5QdWJLZXkxAgthZG1pbl9wdWJfMQANa0FkbWluUHViS2V5MgILYWRtaW5fcHViXzIADWtBZG1pblB1YktleTMCC2FkbWluX3B1Yl8zABJrQWRtaW5JbnZva2VQdWJLZXkCEGFkbWluX2ludm9rZV9wdWIADWtDcG1tQ29udHJhY3QCDWNwbW1fY29udHJhY3QADGtVU0ROQXNzZXRJZAINdXNkbl9hc3NldF9pZAAMa0VVUk5Bc3NldElkAg1ldXJuX2Fzc2V0X2lkAA5rU3Rha2luZ0Fzc2V0cwIOc3Rha2luZ19hc3NldHMADWtTaGFyZUFzc2V0SWQCDnNoYXJlX2Fzc2V0X2lkAAZvcmFjbGUJAQdBZGRyZXNzAQEaAVRIE5cMwNMzzCUygLYp96dkaICr48x7S5kBE2dldEJhc2U1OEZyb21PcmFjbGUBA2tleQQHJG1hdGNoMAkAnQgCBQZvcmFjbGUFA2tleQMJAAECBQckbWF0Y2gwAgZTdHJpbmcEBnN0cmluZwUHJG1hdGNoMAkA2QQBBQZzdHJpbmcEB25vdGhpbmcFByRtYXRjaDAJAAIBCQCsAgIFA2tleQIIaXMgZW1wdHkADGFkbWluUHViS2V5MQkBE2dldEJhc2U1OEZyb21PcmFjbGUBBQ1rQWRtaW5QdWJLZXkxAAxhZG1pblB1YktleTIJARNnZXRCYXNlNThGcm9tT3JhY2xlAQUNa0FkbWluUHViS2V5MgAMYWRtaW5QdWJLZXkzCQETZ2V0QmFzZTU4RnJvbU9yYWNsZQEFDWtBZG1pblB1YktleTMAEWFkbWluUHViS2V5SW52b2tlCQETZ2V0QmFzZTU4RnJvbU9yYWNsZQEFEmtBZG1pbkludm9rZVB1YktleQASc3Rha2luZ1VTRE5BZGRyZXNzCQEHQWRkcmVzcwEJARNnZXRCYXNlNThGcm9tT3JhY2xlAQUMa1VTRE5BZGRyZXNzABJzdGFraW5nRVVSTkFkZHJlc3MJAQdBZGRyZXNzAQkBE2dldEJhc2U1OEZyb21PcmFjbGUBBQxrRVVSTkFkZHJlc3MADGNwbW1Db250cmFjdAkBB0FkZHJlc3MBCQETZ2V0QmFzZTU4RnJvbU9yYWNsZQEFDWtDcG1tQ29udHJhY3QABFVTRE4JARNnZXRCYXNlNThGcm9tT3JhY2xlAQUMa1VTRE5Bc3NldElkAARFVVJOCQETZ2V0QmFzZTU4RnJvbU9yYWNsZQEFDGtFVVJOQXNzZXRJZAANc3Rha2luZ0Fzc2V0cwkBEUBleHRyTmF0aXZlKDEwNTMpAgUGb3JhY2xlBQ5rU3Rha2luZ0Fzc2V0cwAKYWN0aXZlR2xvYgkBC3ZhbHVlT3JFbHNlAgkAmwgCBQZvcmFjbGUFC2tBY3RpdmVHbG9iBgAGYWN0aXZlCQELdmFsdWVPckVsc2UCCQCbCAIFBHRoaXMFB2tBY3RpdmUGAQhpc0FjdGl2ZQADAwUGYWN0aXZlBQphY3RpdmVHbG9iBwUEdW5pdAkAAgECH0RBcHAgaXMgaW5hY3RpdmUgYXQgdGhpcyBtb21lbnQBDmlzR2xvYmFsQ2FsbGVyAQZjYWxsZXIDCQAAAgUGY2FsbGVyBQxjcG1tQ29udHJhY3QFBHVuaXQJAAIBAi1Pbmx5IGdsb2JhbCBDb250cmFjdCBjYW4gaW52b2tlIHRoaXMgZnVuY3Rpb24BC2lzQWRtaW5DYWxsAQxjYWxsZXJQdWJLZXkDCQEPY29udGFpbnNFbGVtZW50AgkAzAgCBQxhZG1pblB1YktleTEJAMwIAgUMYWRtaW5QdWJLZXkyCQDMCAIFDGFkbWluUHViS2V5MwUDbmlsBQxjYWxsZXJQdWJLZXkFBHVuaXQJAAIBAiFPbmx5IGFkbWluIGNhbiBjYWxsIHRoaXMgZnVuY3Rpb24BB3N1c3BlbmQBBWNhdXNlCQDMCAIJAQxCb29sZWFuRW50cnkCBQdrQWN0aXZlBwkAzAgCCQELU3RyaW5nRW50cnkCBQZrQ2F1c2UFBWNhdXNlBQNuaWwBGGNhbGNTdGFraW5nRnVuY0FuZEFkZHJlcwIFc3Rha2UHYXNzZXRJZAMFBXN0YWtlAwkAAAIFB2Fzc2V0SWQFBFVTRE4JAJQKAgIMbG9ja05ldXRyaW5vBRJzdGFraW5nVVNETkFkZHJlc3MJAJQKAgIMc3RhcnRTdGFraW5nBRJzdGFraW5nRVVSTkFkZHJlc3MDCQAAAgUHYXNzZXRJZAUEVVNETgkAlAoCAg51bmxvY2tOZXV0cmlubwUSc3Rha2luZ1VTRE5BZGRyZXNzCQCUCgICC3N0b3BTdGFraW5nBRJzdGFraW5nRVVSTkFkZHJlc3MBEWNhbGNTdGFraW5nUGFyYW1zAwVzdGFrZQZhbW91bnQHYXNzZXRJZAMFBXN0YWtlBAskdDAyNTkzMjY1OQkBGGNhbGNTdGFraW5nRnVuY0FuZEFkZHJlcwIFBXN0YWtlBQdhc3NldElkBARjYWxsCAULJHQwMjU5MzI2NTkCXzEEC3N0YWtpbmdBZGRyCAULJHQwMjU5MzI2NTkCXzIJAJYKBAUEY2FsbAULc3Rha2luZ0FkZHIFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgUHYXNzZXRJZAUGYW1vdW50BQNuaWwECyR0MDI3NDUyODExCQEYY2FsY1N0YWtpbmdGdW5jQW5kQWRkcmVzAgUFc3Rha2UFB2Fzc2V0SWQEBGNhbGwIBQskdDAyNzQ1MjgxMQJfMQQLc3Rha2luZ0FkZHIIBQskdDAyNzQ1MjgxMQJfMgkAlgoEBQRjYWxsBQtzdGFraW5nQWRkcgkAzAgCBQZhbW91bnQJAMwIAgkA2AQBBQdhc3NldElkBQNuaWwFA25pbAEPY29sbGVjdFBheW1lbnRzAgNhY2MHcGF5bWVudAQLJHQwMjk3MzMwMTYFA2FjYwQOcGF5bWVudEFtb3VudHMIBQskdDAyOTczMzAxNgJfMQQPcGF5bWVudEFzc2V0SWRzCAULJHQwMjk3MzMwMTYCXzIJAJQKAgkAzQgCBQ5wYXltZW50QW1vdW50cwgFB3BheW1lbnQGYW1vdW50CQDNCAIFD3BheW1lbnRBc3NldElkcwMJAAACCAUHcGF5bWVudAdhc3NldElkBQR1bml0AQAIBQdwYXltZW50B2Fzc2V0SWQBDGNvbGxlY3RTdGF0ZQIGcmVzdWx0BnNvdXJjZQQHJG1hdGNoMAUGc291cmNlAwMJAAECBQckbWF0Y2gwAgVJc3N1ZQYDCQABAgUHJG1hdGNoMAIEQnVybgYDCQABAgUHJG1hdGNoMAIHUmVpc3N1ZQYDCQABAgUHJG1hdGNoMAIOU2NyaXB0VHJhbnNmZXIGAwkAAQIFByRtYXRjaDACC0JpbmFyeUVudHJ5BgMJAAECBQckbWF0Y2gwAgxCb29sZWFuRW50cnkGAwkAAQIFByRtYXRjaDACC1N0cmluZ0VudHJ5BgkAAQIFByRtYXRjaDACDEludGVnZXJFbnRyeQQBZQUHJG1hdGNoMAkAzQgCBQZyZXN1bHQFAWUFBnJlc3VsdAELY29sbGVjdERhdGECBnJlc3VsdAZzb3VyY2UEByRtYXRjaDAFBnNvdXJjZQMJAAECBQckbWF0Y2gwAgZTdHJpbmcEAXYFByRtYXRjaDAJAM0IAgUGcmVzdWx0BQF2AwkAAQIFByRtYXRjaDACA0ludAQBdgUHJG1hdGNoMAkAzQgCBQZyZXN1bHQFAXYDCQABAgUHJG1hdGNoMAIHQm9vbGVhbgQBdgUHJG1hdGNoMAkAzQgCBQZyZXN1bHQFAXYDCQABAgUHJG1hdGNoMAIKQnl0ZVZlY3RvcgQBdgUHJG1hdGNoMAkAzQgCBQZyZXN1bHQFAXYDCQABAgUHJG1hdGNoMAIEVW5pdAQBdgUHJG1hdGNoMAkAzQgCBQZyZXN1bHQFAXYJAQV0aHJvdwABCmNhbGxDb21tb24ECGZ1bmNOYW1lBmNhbGxlcgRhcmdzCHBheW1lbnRzCQELdmFsdWVPckVsc2UCCQEIaXNBY3RpdmUABAskdDAzOTM2NDAyMAoAAiRsBQhwYXltZW50cwoAAiRzCQCQAwEFAiRsCgAFJGFjYzAJAJQKAgUDbmlsBQNuaWwKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBD2NvbGxlY3RQYXltZW50cwIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQIUTGlzdCBzaXplIGV4Y2VlZHMgMTAJAQUkZjBfMgIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYABwAIAAkACgQOcGF5bWVudEFtb3VudHMIBQskdDAzOTM2NDAyMAJfMQQPcGF5bWVudEFzc2V0SWRzCAULJHQwMzkzNjQwMjACXzIEC2xvY2tQYXltZW50AwMJAAACBQhmdW5jTmFtZQIWcmVwbGVuaXNoV2l0aFR3b1Rva2VucwkAAAIJAJADAQUIcGF5bWVudHMAAwcJAMwIAgkAkQMCBQhwYXltZW50cwACBQNuaWwDAwkAAAIFCGZ1bmNOYW1lAhVyZXBsZW5pc2hXaXRoT25lVG9rZW4JAAACCQCQAwEFCHBheW1lbnRzAAIHCQDMCAIJAJEDAgUIcGF5bWVudHMAAQUDbmlsBQNuaWwECyR0MDQyNDk0NDA2CgABQAkA/QcEBQxjcG1tQ29udHJhY3QFCGZ1bmNOYW1lCQDMCAIFBmNhbGxlcgkAzAgCBQRhcmdzCQDMCAIFDnBheW1lbnRBbW91bnRzCQDMCAIFD3BheW1lbnRBc3NldElkcwUDbmlsBQtsb2NrUGF5bWVudAMJAAECBQFAAhYoTGlzdFtBbnldLCBMaXN0W0FueV0pBQFACQACAQkArAICCQADAQUBQAIrIGNvdWxkbid0IGJlIGNhc3QgdG8gKExpc3RbQW55XSwgTGlzdFtBbnldKQMJAAACBQskdDA0MjQ5NDQwNgULJHQwNDI0OTQ0MDYEBGRhdGEIBQskdDA0MjQ5NDQwNgJfMgQHYWN0aW9ucwgFCyR0MDQyNDk0NDA2Al8xBAptYXBwZWREYXRhCgACJGwFBGRhdGEKAAIkcwkAkAMBBQIkbAoABSRhY2MwBQNuaWwKAQUkZjFfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBC2NvbGxlY3REYXRhAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYxXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhRMaXN0IHNpemUgZXhjZWVkcyAxMAkBBSRmMV8yAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgAHAAgACQAKBA1tYXBwZWRBY3Rpb25zCgACJGwFB2FjdGlvbnMKAAIkcwkAkAMBBQIkbAoABSRhY2MwBQNuaWwKAQUkZjJfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBDGNvbGxlY3RTdGF0ZQIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMl8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQIUTGlzdCBzaXplIGV4Y2VlZHMgMTUJAQUkZjJfMgIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYABwAIAAkACgALAAwADQAOAA8JAJQKAgUNbWFwcGVkQWN0aW9ucwUKbWFwcGVkRGF0YQkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLggBaQEMY2FsbEZ1bmN0aW9uAghmdW5jTmFtZQRhcmdzCQEKY2FsbENvbW1vbgQFCGZ1bmNOYW1lCAgFAWkGY2FsbGVyBWJ5dGVzBQRhcmdzCAUBaQhwYXltZW50cwFpAQhzaHV0ZG93bgAJAQt2YWx1ZU9yRWxzZQIJAQtpc0FkbWluQ2FsbAEIBQFpD2NhbGxlclB1YmxpY0tleQMJAQEhAQUGYWN0aXZlCQACAQkArAICAiJEQXBwIGlzIGFscmVhZHkgc3VzcGVuZGVkLiBDYXVzZTogCQELdmFsdWVPckVsc2UCCQCdCAIFBHRoaXMFBmtDYXVzZQIadGhlIGNhdXNlIHdhc24ndCBzcGVjaWZpZWQJAQdzdXNwZW5kAQIPUGF1c2VkIGJ5IGFkbWluAWkBCGFjdGl2YXRlAAkBC3ZhbHVlT3JFbHNlAgkBC2lzQWRtaW5DYWxsAQgFAWkPY2FsbGVyUHVibGljS2V5AwUGYWN0aXZlCQACAQIWREFwcCBpcyBhbHJlYWR5IGFjdGl2ZQkAzAgCCQEMQm9vbGVhbkVudHJ5AgUHa0FjdGl2ZQYJAMwIAgkBC0RlbGV0ZUVudHJ5AQUGa0NhdXNlBQNuaWwBaQEMc3Rha2VVbnN0YWtlAwVzdGFrZQZhbW91bnQNYXNzZXRJZFN0cmluZwkBC3ZhbHVlT3JFbHNlAgkBCGlzQWN0aXZlAAMJAQIhPQIIBQFpBmNhbGxlcgUMY3BtbUNvbnRyYWN0CQACAQItT25seSBnbG9iYWwgQ29udHJhY3QgY2FuIGludm9rZSB0aGlzIGZ1bmN0aW9uAwkAAAIFDWFzc2V0SWRTdHJpbmcCBVdBVkVTBARwb29sCQERQGV4dHJOYXRpdmUoMTA2MikBCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgUGb3JhY2xlBQxrTGVhc2luZ1Bvb2wCGU5vIGxlYXNpbmcgcG9vbCBpbiBvcmFjbGUECWxlYXNpbmdJZAkAnAgCBQR0aGlzBQprTGVhc2luZ0lkBA1sZWFzaW5nQW1vdW50CQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMFDmtMZWFzaW5nQW1vdW50AAAEDm5ld0xlYXNlQW1vdW50AwUFc3Rha2UJAGQCBQ1sZWFzaW5nQW1vdW50BQZhbW91bnQJAGUCBQ1sZWFzaW5nQW1vdW50BQZhbW91bnQECG5ld0xlYXNlCQDECAIFBHBvb2wFDm5ld0xlYXNlQW1vdW50BApuZXdMZWFzZUlkCQC5CAEFCG5ld0xlYXNlBAhiYXNlRXRyeQkAzAgCBQhuZXdMZWFzZQkAzAgCCQELQmluYXJ5RW50cnkCBQprTGVhc2luZ0lkBQpuZXdMZWFzZUlkCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQ5rTGVhc2luZ0Ftb3VudAUObmV3TGVhc2VBbW91bnQFA25pbAQHJG1hdGNoMAUJbGVhc2luZ0lkAwkAAQIFByRtYXRjaDACCkJ5dGVWZWN0b3IEA2xJZAUHJG1hdGNoMAkAzggCCQDMCAIJAQtMZWFzZUNhbmNlbAEFA2xJZAUDbmlsBQhiYXNlRXRyeQUIYmFzZUV0cnkECyR0MDY0MDI2NTA1CQERY2FsY1N0YWtpbmdQYXJhbXMDBQVzdGFrZQUGYW1vdW50CQDZBAEFDWFzc2V0SWRTdHJpbmcEBGNhbGwIBQskdDA2NDAyNjUwNQJfMQQEYWRkcggFCyR0MDY0MDI2NTA1Al8yBAZwYXJhbXMIBQskdDA2NDAyNjUwNQJfMwQIcGF5bWVudHMIBQskdDA2NDAyNjUwNQJfNAQDaW52CQD8BwQFBGFkZHIFBGNhbGwFBnBhcmFtcwUIcGF5bWVudHMDCQAAAgUDaW52BQNpbnYFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpARFyZWlzc3VlU2hhcmVUb2tlbgEGYW1vdW50CQELdmFsdWVPckVsc2UCCQEOaXNHbG9iYWxDYWxsZXIBCAUBaQZjYWxsZXIJAQt2YWx1ZU9yRWxzZQIJAQhpc0FjdGl2ZQAEDHNoYXJlQXNzZXRJZAkA2QQBCQERQGV4dHJOYXRpdmUoMTA1MykCBQR0aGlzBQ1rU2hhcmVBc3NldElkCQDMCAIJAQdSZWlzc3VlAwUMc2hhcmVBc3NldElkBQZhbW91bnQGCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMIBQFpBmNhbGxlcgUGYW1vdW50BQxzaGFyZUFzc2V0SWQFA25pbAFpARZyZXBsZW5pc2hXaXRoVHdvVG9rZW5zARFzbGlwcGFnZVRvbGVyYW5jZQkBCmNhbGxDb21tb24EAhZyZXBsZW5pc2hXaXRoVHdvVG9rZW5zCAgFAWkGY2FsbGVyBWJ5dGVzCQDMCAICBWZhbHNlCQDMCAICATAFA25pbAgFAWkIcGF5bWVudHMBaQEId2l0aGRyYXcACQEKY2FsbENvbW1vbgQCCHdpdGhkcmF3CAgFAWkGY2FsbGVyBWJ5dGVzCQDMCAICATAFA25pbAgFAWkIcGF5bWVudHMBaQEIZXhjaGFuZ2UBEm1pbkFtb3VudFRvUmVjZWl2ZQkBCmNhbGxDb21tb24EAghleGNoYW5nZQgIBQFpBmNhbGxlcgVieXRlcwkAzAgCCQCkAwEFEm1pbkFtb3VudFRvUmVjZWl2ZQUDbmlsCAUBaQhwYXltZW50cwECdHgBBnZlcmlmeQAEE211bHRpU2lnbmVkQnlBZG1pbnMEEmFkbWluUHViS2V5MVNpZ25lZAMJAPQDAwgFAnR4CWJvZHlCeXRlcwkAkQMCCAUCdHgGcHJvb2ZzAAAFDGFkbWluUHViS2V5MQABAAAEEmFkbWluUHViS2V5MlNpZ25lZAMJAPQDAwgFAnR4CWJvZHlCeXRlcwkAkQMCCAUCdHgGcHJvb2ZzAAEFDGFkbWluUHViS2V5MgABAAAEEmFkbWluUHViS2V5M1NpZ25lZAMJAPQDAwgFAnR4CWJvZHlCeXRlcwkAkQMCCAUCdHgGcHJvb2ZzAAIFDGFkbWluUHViS2V5MwABAAAJAGcCCQBkAgkAZAIFEmFkbWluUHViS2V5MVNpZ25lZAUSYWRtaW5QdWJLZXkyU2lnbmVkBRJhZG1pblB1YktleTNTaWduZWQAAgUTbXVsdGlTaWduZWRCeUFkbWluc1AR26c=", "height": 2333126, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: EEpJytN4kN2xU6uwhxJZFCKBbNt52AqDAZFGwx7yStEm Next: 1QqFTDvDEjJxnMarL9NcmmtwSfEj4BW7hRGonyxT7bD Full:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let kActive = "active"
55
66 let kActiveGlob = "active_all_contracts"
77
88 let kCause = "shutdown_cause"
99
1010 let kUSDNAddress = "staking_usdnnsbt_address"
1111
1212 let kEURNAddress = "staking_eurn_address"
1313
1414 let kLeasingPool = "leasing_address"
1515
1616 let kLeasingAmount = "leasing_amount"
1717
1818 let kLeasingId = "leasing_id"
1919
2020 let kAdminPubKey1 = "admin_pub_1"
2121
2222 let kAdminPubKey2 = "admin_pub_2"
2323
2424 let kAdminPubKey3 = "admin_pub_3"
2525
2626 let kAdminInvokePubKey = "admin_invoke_pub"
2727
2828 let kCpmmContract = "cpmm_contract"
2929
3030 let kUSDNAssetId = "usdn_asset_id"
3131
3232 let kEURNAssetId = "eurn_asset_id"
3333
3434 let kStakingAssets = "staking_assets"
3535
3636 let kShareAssetId = "share_asset_id"
3737
3838 let oracle = Address(base58'3MvVBtsXroQpy1tsPw21TU2ET9A8WfmrNjz')
3939
4040 func getBase58FromOracle (key) = match getString(oracle, key) {
4141 case string: String =>
4242 fromBase58String(string)
4343 case nothing =>
4444 throw((key + "is empty"))
4545 }
4646
4747
4848 let adminPubKey1 = getBase58FromOracle(kAdminPubKey1)
4949
5050 let adminPubKey2 = getBase58FromOracle(kAdminPubKey2)
5151
5252 let adminPubKey3 = getBase58FromOracle(kAdminPubKey3)
5353
5454 let adminPubKeyInvoke = getBase58FromOracle(kAdminInvokePubKey)
5555
5656 let stakingUSDNAddress = Address(getBase58FromOracle(kUSDNAddress))
5757
5858 let stakingEURNAddress = Address(getBase58FromOracle(kEURNAddress))
5959
6060 let cpmmContract = Address(getBase58FromOracle(kCpmmContract))
6161
6262 let USDN = getBase58FromOracle(kUSDNAssetId)
6363
6464 let EURN = getBase58FromOracle(kEURNAssetId)
6565
6666 let stakingAssets = getStringValue(oracle, kStakingAssets)
6767
6868 let activeGlob = valueOrElse(getBoolean(oracle, kActiveGlob), true)
6969
7070 let active = valueOrElse(getBoolean(this, kActive), true)
7171
7272 func isActive () = if (if (active)
7373 then activeGlob
7474 else false)
7575 then unit
7676 else throw("DApp is inactive at this moment")
7777
7878
7979 func isGlobalCaller (caller) = if ((caller == cpmmContract))
8080 then unit
8181 else throw("Only global Contract can invoke this function")
8282
8383
8484 func isAdminCall (callerPubKey) = if (containsElement([adminPubKey1, adminPubKey2, adminPubKey3], callerPubKey))
8585 then unit
8686 else throw("Only admin can call this function")
8787
8888
8989 func suspend (cause) = [BooleanEntry(kActive, false), StringEntry(kCause, cause)]
9090
9191
9292 func calcStakingFuncAndAddres (stake,assetId) = if (stake)
9393 then if ((assetId == USDN))
9494 then $Tuple2("lockNeutrino", stakingUSDNAddress)
9595 else $Tuple2("startStaking", stakingEURNAddress)
9696 else if ((assetId == USDN))
9797 then $Tuple2("unlockNeutrino", stakingUSDNAddress)
9898 else $Tuple2("stopStaking", stakingEURNAddress)
9999
100100
101101 func calcStakingParams (stake,amount,assetId) = if (stake)
102102 then {
103103 let $t025932659 = calcStakingFuncAndAddres(stake, assetId)
104104 let call = $t025932659._1
105105 let stakingAddr = $t025932659._2
106106 $Tuple4(call, stakingAddr, nil, [AttachedPayment(assetId, amount)])
107107 }
108108 else {
109109 let $t027452811 = calcStakingFuncAndAddres(stake, assetId)
110110 let call = $t027452811._1
111111 let stakingAddr = $t027452811._2
112112 $Tuple4(call, stakingAddr, [amount, toBase58String(assetId)], nil)
113113 }
114114
115115
116116 func collectPayments (acc,payment) = {
117117 let $t029733016 = acc
118118 let paymentAmounts = $t029733016._1
119119 let paymentAssetIds = $t029733016._2
120120 $Tuple2((paymentAmounts :+ payment.amount), (paymentAssetIds :+ (if ((payment.assetId == unit))
121121 then base58''
122122 else payment.assetId)))
123123 }
124124
125125
126126 func collectState (result,source) = match source {
127127 case e: Issue|Burn|Reissue|ScriptTransfer|BinaryEntry|BooleanEntry|StringEntry|IntegerEntry =>
128128 (result :+ e)
129129 case _ =>
130130 result
131131 }
132132
133133
134134 func collectData (result,source) = match source {
135135 case v: String =>
136136 (result :+ v)
137137 case v: Int =>
138138 (result :+ v)
139139 case v: Boolean =>
140140 (result :+ v)
141141 case v: ByteVector =>
142142 (result :+ v)
143143 case v: Unit =>
144144 (result :+ v)
145145 case _ =>
146146 throw()
147147 }
148148
149149
150150 func callCommon (funcName,caller,args,payments) = valueOrElse(isActive(), {
151151 let $t039364020 = {
152152 let $l = payments
153153 let $s = size($l)
154154 let $acc0 = $Tuple2(nil, nil)
155155 func $f0_1 ($a,$i) = if (($i >= $s))
156156 then $a
157157 else collectPayments($a, $l[$i])
158158
159159 func $f0_2 ($a,$i) = if (($i >= $s))
160160 then $a
161161 else throw("List size exceeds 10")
162162
163163 $f0_2($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
164164 }
165165 let paymentAmounts = $t039364020._1
166166 let paymentAssetIds = $t039364020._2
167167 let lockPayment = if (if ((funcName == "replenishWithTwoTokens"))
168168 then (size(payments) == 3)
169169 else false)
170170 then [payments[2]]
171171 else if (if ((funcName == "replenishWithOneToken"))
172172 then (size(payments) == 2)
173173 else false)
174174 then [payments[1]]
175175 else nil
176176 let $t042494406 = {
177177 let @ = reentrantInvoke(cpmmContract, funcName, [caller, args, paymentAmounts, paymentAssetIds], lockPayment)
178178 if ($isInstanceOf(@, "(List[Any], List[Any])"))
179179 then @
180180 else throw(($getType(@) + " couldn't be cast to (List[Any], List[Any])"))
181181 }
182182 if (($t042494406 == $t042494406))
183183 then {
184184 let data = $t042494406._2
185185 let actions = $t042494406._1
186186 let mappedData = {
187187 let $l = data
188188 let $s = size($l)
189189 let $acc0 = nil
190190 func $f1_1 ($a,$i) = if (($i >= $s))
191191 then $a
192192 else collectData($a, $l[$i])
193193
194194 func $f1_2 ($a,$i) = if (($i >= $s))
195195 then $a
196196 else throw("List size exceeds 10")
197197
198198 $f1_2($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
199199 }
200200 let mappedActions = {
201201 let $l = actions
202202 let $s = size($l)
203203 let $acc0 = nil
204204 func $f2_1 ($a,$i) = if (($i >= $s))
205205 then $a
206206 else collectState($a, $l[$i])
207207
208208 func $f2_2 ($a,$i) = if (($i >= $s))
209209 then $a
210210 else throw("List size exceeds 15")
211211
212212 $f2_2($f2_1($f2_1($f2_1($f2_1($f2_1($f2_1($f2_1($f2_1($f2_1($f2_1($f2_1($f2_1($f2_1($f2_1($f2_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
213213 }
214214 $Tuple2(mappedActions, mappedData)
215215 }
216216 else throw("Strict value is not equal to itself.")
217217 })
218218
219219
220220 @Callable(i)
221221 func callFunction (funcName,args) = callCommon(funcName, i.caller.bytes, args, i.payments)
222222
223223
224224
225225 @Callable(i)
226226 func shutdown () = valueOrElse(isAdminCall(i.callerPublicKey), if (!(active))
227227 then throw(("DApp is already suspended. Cause: " + valueOrElse(getString(this, kCause), "the cause wasn't specified")))
228228 else suspend("Paused by admin"))
229229
230230
231231
232232 @Callable(i)
233233 func activate () = valueOrElse(isAdminCall(i.callerPublicKey), if (active)
234234 then throw("DApp is already active")
235235 else [BooleanEntry(kActive, true), DeleteEntry(kCause)])
236236
237237
238238
239239 @Callable(i)
240240 func stakeUnstake (stake,amount,assetIdString) = valueOrElse(isActive(), if ((i.caller != cpmmContract))
241241 then throw("Only global Contract can invoke this function")
242242 else if ((assetIdString == "WAVES"))
243243 then {
244244 let pool = addressFromStringValue(valueOrErrorMessage(getString(oracle, kLeasingPool), "No leasing pool in oracle"))
245245 let leasingId = getBinary(this, kLeasingId)
246246 let leasingAmount = valueOrElse(getInteger(this, kLeasingAmount), 0)
247247 let newLeaseAmount = if (stake)
248248 then (leasingAmount + amount)
249249 else (leasingAmount - amount)
250250 let newLease = Lease(pool, newLeaseAmount)
251251 let newLeaseId = calculateLeaseId(newLease)
252252 let baseEtry = [newLease, BinaryEntry(kLeasingId, newLeaseId), IntegerEntry(kLeasingAmount, newLeaseAmount)]
253253 match leasingId {
254254 case lId: ByteVector =>
255255 ([LeaseCancel(lId)] ++ baseEtry)
256256 case _ =>
257257 baseEtry
258258 }
259259 }
260260 else {
261261 let $t064026505 = calcStakingParams(stake, amount, fromBase58String(assetIdString))
262262 let call = $t064026505._1
263263 let addr = $t064026505._2
264264 let params = $t064026505._3
265265 let payments = $t064026505._4
266266 let inv = invoke(addr, call, params, payments)
267267 if ((inv == inv))
268268 then nil
269269 else throw("Strict value is not equal to itself.")
270270 })
271271
272272
273273
274274 @Callable(i)
275275 func reissueShareToken (amount) = valueOrElse(isGlobalCaller(i.caller), valueOrElse(isActive(), {
276276 let shareAssetId = fromBase58String(getStringValue(this, kShareAssetId))
277277 [Reissue(shareAssetId, amount, true), ScriptTransfer(i.caller, amount, shareAssetId)]
278278 }))
279279
280280
281281
282282 @Callable(i)
283283 func replenishWithTwoTokens (slippageTolerance) = callCommon("replenishWithTwoTokens", i.caller.bytes, ["false", "0"], i.payments)
284284
285285
286286
287287 @Callable(i)
288288 func withdraw () = callCommon("withdraw", i.caller.bytes, ["0"], i.payments)
289289
290290
291291
292292 @Callable(i)
293293 func exchange (minAmountToReceive) = callCommon("exchange", i.caller.bytes, [toString(minAmountToReceive)], i.payments)
294294
295295
296296 @Verifier(tx)
297297 func verify () = {
298298 let multiSignedByAdmins = {
299299 let adminPubKey1Signed = if (sigVerify(tx.bodyBytes, tx.proofs[0], adminPubKey1))
300300 then 1
301301 else 0
302302 let adminPubKey2Signed = if (sigVerify(tx.bodyBytes, tx.proofs[1], adminPubKey2))
303303 then 1
304304 else 0
305305 let adminPubKey3Signed = if (sigVerify(tx.bodyBytes, tx.proofs[2], adminPubKey3))
306306 then 1
307307 else 0
308308 (((adminPubKey1Signed + adminPubKey2Signed) + adminPubKey3Signed) >= 2)
309309 }
310310 multiSignedByAdmins
311311 }
312312

github/deemru/w8io/873ac7e 
44.43 ms