2022.11.26 01:08 [3398670] smart account 3PK7Xe5BiedRyxHLuMQx5ey9riUQqvUths2 > SELF 0.00000000 Waves

{ "type": 13, "id": "3wZ8EPYXdfGPL5bvr4fizxXcbrNKzPokkohVLrF7AiUo", "fee": 1200000, "feeAssetId": null, "timestamp": 1669413965616, "version": 2, "chainId": 87, "sender": "3PK7Xe5BiedRyxHLuMQx5ey9riUQqvUths2", "senderPublicKey": "7hEH4UN8YsnvBCS3YmjieqS332S69yTNjxNp83SmtDrQ", "proofs": [ "", "5DMfG6D4sbi4JK2QSStgdFPzfgRRsE3xvvoHJghoojkagVvD4CxZVinqgC2C7TJsJgZK6TTWAuXkGTGJ8CuhTqBy", "52noWsa2braU38nRigTvcuSmtvXDsTrKHj1e9xr9YGxLULwtjnhKUWREiS8ziW4u2wLmyPx9ZxFQfr2sSGmnYZcx" ], "script": "base64:BgIkCAISBAoCCBgSABIAEgUKAwQBCBIDCgEBEgMKAQESABIDCgEBKQAHa0FjdGl2ZQIGYWN0aXZlAAtrQWN0aXZlR2xvYgIUYWN0aXZlX2FsbF9jb250cmFjdHMABmtDYXVzZQIOc2h1dGRvd25fY2F1c2UADGtVU0ROQWRkcmVzcwIYc3Rha2luZ191c2RubnNidF9hZGRyZXNzAAxrRVVSTkFkZHJlc3MCFHN0YWtpbmdfZXVybl9hZGRyZXNzAAxrTGVhc2luZ1Bvb2wCD2xlYXNpbmdfYWRkcmVzcwAOa0xlYXNpbmdBbW91bnQCDmxlYXNpbmdfYW1vdW50AAprTGVhc2luZ0lkAgpsZWFzaW5nX2lkAA1rQWRtaW5QdWJLZXkxAgthZG1pbl9wdWJfMQANa0FkbWluUHViS2V5MgILYWRtaW5fcHViXzIADWtBZG1pblB1YktleTMCC2FkbWluX3B1Yl8zABJrQWRtaW5JbnZva2VQdWJLZXkCEGFkbWluX2ludm9rZV9wdWIADWtDcG1tQ29udHJhY3QCDWNwbW1fY29udHJhY3QADGtVU0ROQXNzZXRJZAINdXNkbl9hc3NldF9pZAAMa0VVUk5Bc3NldElkAg1ldXJuX2Fzc2V0X2lkAA5rU3Rha2luZ0Fzc2V0cwIOc3Rha2luZ19hc3NldHMADWtTaGFyZUFzc2V0SWQCDnNoYXJlX2Fzc2V0X2lkAAZvcmFjbGUJAQdBZGRyZXNzAQEaAVeK/whomjW6QM1hdPISN96mN/D6OM7oHjgBE2dldEJhc2U1OEZyb21PcmFjbGUBA2tleQQHJG1hdGNoMAkAnQgCBQZvcmFjbGUFA2tleQMJAAECBQckbWF0Y2gwAgZTdHJpbmcEBnN0cmluZwUHJG1hdGNoMAkA2QQBBQZzdHJpbmcEB25vdGhpbmcFByRtYXRjaDAJAAIBCQCsAgIFA2tleQIIaXMgZW1wdHkADGFkbWluUHViS2V5MQkBE2dldEJhc2U1OEZyb21PcmFjbGUBBQ1rQWRtaW5QdWJLZXkxAAxhZG1pblB1YktleTIJARNnZXRCYXNlNThGcm9tT3JhY2xlAQUNa0FkbWluUHViS2V5MgAMYWRtaW5QdWJLZXkzCQETZ2V0QmFzZTU4RnJvbU9yYWNsZQEFDWtBZG1pblB1YktleTMAEWFkbWluUHViS2V5SW52b2tlCQETZ2V0QmFzZTU4RnJvbU9yYWNsZQEFEmtBZG1pbkludm9rZVB1YktleQASc3Rha2luZ1VTRE5BZGRyZXNzCQEHQWRkcmVzcwEJARNnZXRCYXNlNThGcm9tT3JhY2xlAQUMa1VTRE5BZGRyZXNzABJzdGFraW5nRVVSTkFkZHJlc3MJAQdBZGRyZXNzAQkBE2dldEJhc2U1OEZyb21PcmFjbGUBBQxrRVVSTkFkZHJlc3MADGNwbW1Db250cmFjdAkBB0FkZHJlc3MBCQETZ2V0QmFzZTU4RnJvbU9yYWNsZQEFDWtDcG1tQ29udHJhY3QABFVTRE4JARNnZXRCYXNlNThGcm9tT3JhY2xlAQUMa1VTRE5Bc3NldElkAARFVVJOCQETZ2V0QmFzZTU4RnJvbU9yYWNsZQEFDGtFVVJOQXNzZXRJZAANc3Rha2luZ0Fzc2V0cwkBEUBleHRyTmF0aXZlKDEwNTMpAgUGb3JhY2xlBQ5rU3Rha2luZ0Fzc2V0cwAKYWN0aXZlR2xvYgkBC3ZhbHVlT3JFbHNlAgkAmwgCBQZvcmFjbGUFC2tBY3RpdmVHbG9iBgAGYWN0aXZlCQELdmFsdWVPckVsc2UCCQCbCAIFBHRoaXMFB2tBY3RpdmUGAQhpc0FjdGl2ZQADAwUGYWN0aXZlBQphY3RpdmVHbG9iBwUEdW5pdAkAAgECH0RBcHAgaXMgaW5hY3RpdmUgYXQgdGhpcyBtb21lbnQBDmlzR2xvYmFsQ2FsbGVyAQZjYWxsZXIDCQAAAgUGY2FsbGVyBQxjcG1tQ29udHJhY3QFBHVuaXQJAAIBAi1Pbmx5IGdsb2JhbCBDb250cmFjdCBjYW4gaW52b2tlIHRoaXMgZnVuY3Rpb24BC2lzQWRtaW5DYWxsAQxjYWxsZXJQdWJLZXkDCQEPY29udGFpbnNFbGVtZW50AgkAzAgCBQxhZG1pblB1YktleTEJAMwIAgUMYWRtaW5QdWJLZXkyCQDMCAIFDGFkbWluUHViS2V5MwUDbmlsBQxjYWxsZXJQdWJLZXkFBHVuaXQJAAIBAiFPbmx5IGFkbWluIGNhbiBjYWxsIHRoaXMgZnVuY3Rpb24BB3N1c3BlbmQBBWNhdXNlCQDMCAIJAQxCb29sZWFuRW50cnkCBQdrQWN0aXZlBwkAzAgCCQELU3RyaW5nRW50cnkCBQZrQ2F1c2UFBWNhdXNlBQNuaWwBGGNhbGNTdGFraW5nRnVuY0FuZEFkZHJlcwIFc3Rha2UHYXNzZXRJZAMFBXN0YWtlAwkAAAIFB2Fzc2V0SWQFBFVTRE4JAJQKAgIMbG9ja05ldXRyaW5vBRJzdGFraW5nVVNETkFkZHJlc3MJAJQKAgIMc3RhcnRTdGFraW5nBRJzdGFraW5nRVVSTkFkZHJlc3MDCQAAAgUHYXNzZXRJZAUEVVNETgkAlAoCAg51bmxvY2tOZXV0cmlubwUSc3Rha2luZ1VTRE5BZGRyZXNzCQCUCgICC3N0b3BTdGFraW5nBRJzdGFraW5nRVVSTkFkZHJlc3MBEWNhbGNTdGFraW5nUGFyYW1zAwVzdGFrZQZhbW91bnQHYXNzZXRJZAMFBXN0YWtlBAskdDAyNTkzMjY1OQkBGGNhbGNTdGFraW5nRnVuY0FuZEFkZHJlcwIFBXN0YWtlBQdhc3NldElkBARjYWxsCAULJHQwMjU5MzI2NTkCXzEEC3N0YWtpbmdBZGRyCAULJHQwMjU5MzI2NTkCXzIJAJYKBAUEY2FsbAULc3Rha2luZ0FkZHIFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgUHYXNzZXRJZAUGYW1vdW50BQNuaWwECyR0MDI3NDUyODExCQEYY2FsY1N0YWtpbmdGdW5jQW5kQWRkcmVzAgUFc3Rha2UFB2Fzc2V0SWQEBGNhbGwIBQskdDAyNzQ1MjgxMQJfMQQLc3Rha2luZ0FkZHIIBQskdDAyNzQ1MjgxMQJfMgkAlgoEBQRjYWxsBQtzdGFraW5nQWRkcgkAzAgCBQZhbW91bnQJAMwIAgkA2AQBBQdhc3NldElkBQNuaWwFA25pbAEPY29sbGVjdFBheW1lbnRzAgNhY2MHcGF5bWVudAQLJHQwMjk3MzMwMTYFA2FjYwQOcGF5bWVudEFtb3VudHMIBQskdDAyOTczMzAxNgJfMQQPcGF5bWVudEFzc2V0SWRzCAULJHQwMjk3MzMwMTYCXzIJAJQKAgkAzQgCBQ5wYXltZW50QW1vdW50cwgFB3BheW1lbnQGYW1vdW50CQDNCAIFD3BheW1lbnRBc3NldElkcwMJAAACCAUHcGF5bWVudAdhc3NldElkBQR1bml0AQAIBQdwYXltZW50B2Fzc2V0SWQBDGNvbGxlY3RTdGF0ZQIGcmVzdWx0BnNvdXJjZQQHJG1hdGNoMAUGc291cmNlAwMJAAECBQckbWF0Y2gwAgVJc3N1ZQYDCQABAgUHJG1hdGNoMAIEQnVybgYDCQABAgUHJG1hdGNoMAIHUmVpc3N1ZQYDCQABAgUHJG1hdGNoMAIOU2NyaXB0VHJhbnNmZXIGAwkAAQIFByRtYXRjaDACC0JpbmFyeUVudHJ5BgMJAAECBQckbWF0Y2gwAgxCb29sZWFuRW50cnkGAwkAAQIFByRtYXRjaDACC1N0cmluZ0VudHJ5BgkAAQIFByRtYXRjaDACDEludGVnZXJFbnRyeQQBZQUHJG1hdGNoMAkAzQgCBQZyZXN1bHQFAWUFBnJlc3VsdAELY29sbGVjdERhdGECBnJlc3VsdAZzb3VyY2UEByRtYXRjaDAFBnNvdXJjZQMJAAECBQckbWF0Y2gwAgZTdHJpbmcEAXYFByRtYXRjaDAJAM0IAgUGcmVzdWx0BQF2AwkAAQIFByRtYXRjaDACA0ludAQBdgUHJG1hdGNoMAkAzQgCBQZyZXN1bHQFAXYDCQABAgUHJG1hdGNoMAIHQm9vbGVhbgQBdgUHJG1hdGNoMAkAzQgCBQZyZXN1bHQFAXYDCQABAgUHJG1hdGNoMAIKQnl0ZVZlY3RvcgQBdgUHJG1hdGNoMAkAzQgCBQZyZXN1bHQFAXYDCQABAgUHJG1hdGNoMAIEVW5pdAQBdgUHJG1hdGNoMAkAzQgCBQZyZXN1bHQFAXYJAQV0aHJvdwABCmNhbGxDb21tb24ECGZ1bmNOYW1lBmNhbGxlcgRhcmdzCHBheW1lbnRzCQELdmFsdWVPckVsc2UCCQEIaXNBY3RpdmUABAskdDAzOTM2NDAyMAoAAiRsBQhwYXltZW50cwoAAiRzCQCQAwEFAiRsCgAFJGFjYzAJAJQKAgUDbmlsBQNuaWwKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBD2NvbGxlY3RQYXltZW50cwIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQIUTGlzdCBzaXplIGV4Y2VlZHMgMTAJAQUkZjBfMgIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYABwAIAAkACgQOcGF5bWVudEFtb3VudHMIBQskdDAzOTM2NDAyMAJfMQQPcGF5bWVudEFzc2V0SWRzCAULJHQwMzkzNjQwMjACXzIEC2xvY2tQYXltZW50AwMJAAACBQhmdW5jTmFtZQIWcmVwbGVuaXNoV2l0aFR3b1Rva2VucwkAAAIJAJADAQUIcGF5bWVudHMAAwcJAMwIAgkAkQMCBQhwYXltZW50cwACBQNuaWwDAwkAAAIFCGZ1bmNOYW1lAhVyZXBsZW5pc2hXaXRoT25lVG9rZW4JAAACCQCQAwEFCHBheW1lbnRzAAIHCQDMCAIJAJEDAgUIcGF5bWVudHMAAQUDbmlsBQNuaWwECyR0MDQyNTA0NDA3CgABQAkA/QcEBQxjcG1tQ29udHJhY3QFCGZ1bmNOYW1lCQDMCAIFBmNhbGxlcgkAzAgCBQRhcmdzCQDMCAIFDnBheW1lbnRBbW91bnRzCQDMCAIFD3BheW1lbnRBc3NldElkcwUDbmlsBQtsb2NrUGF5bWVudAMJAAECBQFAAhYoTGlzdFtBbnldLCBMaXN0W0FueV0pBQFACQACAQkArAICCQADAQUBQAIrIGNvdWxkbid0IGJlIGNhc3QgdG8gKExpc3RbQW55XSwgTGlzdFtBbnldKQMJAAACBQskdDA0MjUwNDQwNwULJHQwNDI1MDQ0MDcEBGRhdGEIBQskdDA0MjUwNDQwNwJfMgQHYWN0aW9ucwgFCyR0MDQyNTA0NDA3Al8xBAptYXBwZWREYXRhCgACJGwFBGRhdGEKAAIkcwkAkAMBBQIkbAoABSRhY2MwBQNuaWwKAQUkZjFfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBC2NvbGxlY3REYXRhAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYxXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhRMaXN0IHNpemUgZXhjZWVkcyAxMAkBBSRmMV8yAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgAHAAgACQAKBA1tYXBwZWRBY3Rpb25zCgACJGwFB2FjdGlvbnMKAAIkcwkAkAMBBQIkbAoABSRhY2MwBQNuaWwKAQUkZjJfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBDGNvbGxlY3RTdGF0ZQIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMl8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQIUTGlzdCBzaXplIGV4Y2VlZHMgMTUJAQUkZjJfMgIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYABwAIAAkACgALAAwADQAOAA8JAJQKAgUNbWFwcGVkQWN0aW9ucwUKbWFwcGVkRGF0YQkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLggBaQEMY2FsbEZ1bmN0aW9uAghmdW5jTmFtZQRhcmdzCQEKY2FsbENvbW1vbgQFCGZ1bmNOYW1lCAgFAWkGY2FsbGVyBWJ5dGVzBQRhcmdzCAUBaQhwYXltZW50cwFpAQhzaHV0ZG93bgAJAQt2YWx1ZU9yRWxzZQIJAQtpc0FkbWluQ2FsbAEIBQFpD2NhbGxlclB1YmxpY0tleQMJAQEhAQUGYWN0aXZlCQACAQkArAICAiJEQXBwIGlzIGFscmVhZHkgc3VzcGVuZGVkLiBDYXVzZTogCQELdmFsdWVPckVsc2UCCQCdCAIFBHRoaXMFBmtDYXVzZQIadGhlIGNhdXNlIHdhc24ndCBzcGVjaWZpZWQJAQdzdXNwZW5kAQIPUGF1c2VkIGJ5IGFkbWluAWkBCGFjdGl2YXRlAAkBC3ZhbHVlT3JFbHNlAgkBC2lzQWRtaW5DYWxsAQgFAWkPY2FsbGVyUHVibGljS2V5AwUGYWN0aXZlCQACAQIWREFwcCBpcyBhbHJlYWR5IGFjdGl2ZQkAzAgCCQEMQm9vbGVhbkVudHJ5AgUHa0FjdGl2ZQYJAMwIAgkBC0RlbGV0ZUVudHJ5AQUGa0NhdXNlBQNuaWwBaQEMc3Rha2VVbnN0YWtlAwVzdGFrZQZhbW91bnQNYXNzZXRJZFN0cmluZwkBC3ZhbHVlT3JFbHNlAgkBCGlzQWN0aXZlAAMJAQIhPQIIBQFpBmNhbGxlcgUMY3BtbUNvbnRyYWN0CQACAQItT25seSBnbG9iYWwgQ29udHJhY3QgY2FuIGludm9rZSB0aGlzIGZ1bmN0aW9uAwkAAAIFDWFzc2V0SWRTdHJpbmcCBVdBVkVTBARwb29sCQERQGV4dHJOYXRpdmUoMTA2MikBCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgUGb3JhY2xlBQxrTGVhc2luZ1Bvb2wCGU5vIGxlYXNpbmcgcG9vbCBpbiBvcmFjbGUECWxlYXNpbmdJZAkAnAgCBQR0aGlzBQprTGVhc2luZ0lkBA1sZWFzaW5nQW1vdW50CQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMFDmtMZWFzaW5nQW1vdW50AAAEDm5ld0xlYXNlQW1vdW50AwUFc3Rha2UJAGQCBQ1sZWFzaW5nQW1vdW50BQZhbW91bnQJAGUCBQ1sZWFzaW5nQW1vdW50BQZhbW91bnQECG5ld0xlYXNlCQDECAIFBHBvb2wFDm5ld0xlYXNlQW1vdW50BApuZXdMZWFzZUlkCQC5CAEFCG5ld0xlYXNlBAhiYXNlRXRyeQkAzAgCBQhuZXdMZWFzZQkAzAgCCQELQmluYXJ5RW50cnkCBQprTGVhc2luZ0lkBQpuZXdMZWFzZUlkCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQ5rTGVhc2luZ0Ftb3VudAUObmV3TGVhc2VBbW91bnQFA25pbAQHJG1hdGNoMAUJbGVhc2luZ0lkAwkAAQIFByRtYXRjaDACCkJ5dGVWZWN0b3IEA2xJZAUHJG1hdGNoMAkAzggCCQDMCAIJAQtMZWFzZUNhbmNlbAEFA2xJZAUDbmlsBQhiYXNlRXRyeQUIYmFzZUV0cnkECyR0MDY0MDM2NTA2CQERY2FsY1N0YWtpbmdQYXJhbXMDBQVzdGFrZQUGYW1vdW50CQDZBAEFDWFzc2V0SWRTdHJpbmcEBGNhbGwIBQskdDA2NDAzNjUwNgJfMQQEYWRkcggFCyR0MDY0MDM2NTA2Al8yBAZwYXJhbXMIBQskdDA2NDAzNjUwNgJfMwQIcGF5bWVudHMIBQskdDA2NDAzNjUwNgJfNAQDaW52CQD8BwQFBGFkZHIFBGNhbGwFBnBhcmFtcwUIcGF5bWVudHMDCQAAAgUDaW52BQNpbnYFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpARFyZWlzc3VlU2hhcmVUb2tlbgEGYW1vdW50CQELdmFsdWVPckVsc2UCCQEOaXNHbG9iYWxDYWxsZXIBCAUBaQZjYWxsZXIJAQt2YWx1ZU9yRWxzZQIJAQhpc0FjdGl2ZQAEDHNoYXJlQXNzZXRJZAkA2QQBCQERQGV4dHJOYXRpdmUoMTA1MykCBQR0aGlzBQ1rU2hhcmVBc3NldElkCQDMCAIJAQdSZWlzc3VlAwUMc2hhcmVBc3NldElkBQZhbW91bnQGCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMIBQFpBmNhbGxlcgUGYW1vdW50BQxzaGFyZUFzc2V0SWQFA25pbAFpARZyZXBsZW5pc2hXaXRoVHdvVG9rZW5zARFzbGlwcGFnZVRvbGVyYW5jZQkBCmNhbGxDb21tb24EAhZyZXBsZW5pc2hXaXRoVHdvVG9rZW5zCAgFAWkGY2FsbGVyBWJ5dGVzCQDMCAICBWZhbHNlCQDMCAICATAFA25pbAgFAWkIcGF5bWVudHMBaQEId2l0aGRyYXcACQEKY2FsbENvbW1vbgQCCHdpdGhkcmF3CAgFAWkGY2FsbGVyBWJ5dGVzCQDMCAICATAFA25pbAgFAWkIcGF5bWVudHMBaQEIZXhjaGFuZ2UBEm1pbkFtb3VudFRvUmVjZWl2ZQkBCmNhbGxDb21tb24EAghleGNoYW5nZQgIBQFpBmNhbGxlcgVieXRlcwkAzAgCCQCkAwEFEm1pbkFtb3VudFRvUmVjZWl2ZQUDbmlsCAUBaQhwYXltZW50cwECdHgBBnZlcmlmeQAEE211bHRpU2lnbmVkQnlBZG1pbnMEEmFkbWluUHViS2V5MVNpZ25lZAMJAPQDAwgFAnR4CWJvZHlCeXRlcwkAkQMCCAUCdHgGcHJvb2ZzAAAFDGFkbWluUHViS2V5MQABAAAEEmFkbWluUHViS2V5MlNpZ25lZAMJAPQDAwgFAnR4CWJvZHlCeXRlcwkAkQMCCAUCdHgGcHJvb2ZzAAEFDGFkbWluUHViS2V5MgABAAAEEmFkbWluUHViS2V5M1NpZ25lZAMJAPQDAwgFAnR4CWJvZHlCeXRlcwkAkQMCCAUCdHgGcHJvb2ZzAAIFDGFkbWluUHViS2V5MwABAAAJAGcCCQBkAgkAZAIFEmFkbWluUHViS2V5MVNpZ25lZAUSYWRtaW5QdWJLZXkyU2lnbmVkBRJhZG1pblB1YktleTNTaWduZWQAAgUTbXVsdGlTaWduZWRCeUFkbWlucwdfBRo=", "height": 3398670, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 712Ae6e6UtgVmkqu8LZoubZtfEQDRWGg6exogTehipqL Next: 7sVK5pqSJpBK5L3H6xUzeifCKRtFCuzf7XZizeRwiQG7 Diff:
OldNewDifferences
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let kActive = "active"
5+
6+let kActiveGlob = "active_all_contracts"
57
68 let kCause = "shutdown_cause"
79
6365
6466 let stakingAssets = getStringValue(oracle, kStakingAssets)
6567
68+let activeGlob = valueOrElse(getBoolean(oracle, kActiveGlob), true)
69+
6670 let active = valueOrElse(getBoolean(this, kActive), true)
6771
68-func isActive () = if (active)
72+func isActive () = if (if (active)
73+ then activeGlob
74+ else false)
6975 then unit
7076 else throw("DApp is inactive at this moment")
7177
94100
95101 func calcStakingParams (stake,amount,assetId) = if (stake)
96102 then {
97- let $t024732539 = calcStakingFuncAndAddres(stake, assetId)
98- let call = $t024732539._1
99- let stakingAddr = $t024732539._2
103+ let $t025932659 = calcStakingFuncAndAddres(stake, assetId)
104+ let call = $t025932659._1
105+ let stakingAddr = $t025932659._2
100106 $Tuple4(call, stakingAddr, nil, [AttachedPayment(assetId, amount)])
101107 }
102108 else {
103- let $t026252691 = calcStakingFuncAndAddres(stake, assetId)
104- let call = $t026252691._1
105- let stakingAddr = $t026252691._2
109+ let $t027452811 = calcStakingFuncAndAddres(stake, assetId)
110+ let call = $t027452811._1
111+ let stakingAddr = $t027452811._2
106112 $Tuple4(call, stakingAddr, [amount, toBase58String(assetId)], nil)
107113 }
108114
109115
110116 func collectPayments (acc,payment) = {
111- let $t028532896 = acc
112- let paymentAmounts = $t028532896._1
113- let paymentAssetIds = $t028532896._2
117+ let $t029733016 = acc
118+ let paymentAmounts = $t029733016._1
119+ let paymentAssetIds = $t029733016._2
114120 $Tuple2((paymentAmounts :+ payment.amount), (paymentAssetIds :+ (if ((payment.assetId == unit))
115121 then base58''
116122 else payment.assetId)))
142148
143149
144150 func callCommon (funcName,caller,args,payments) = valueOrElse(isActive(), {
145- let $t038163900 = {
151+ let $t039364020 = {
146152 let $l = payments
147153 let $s = size($l)
148154 let $acc0 = $Tuple2(nil, nil)
156162
157163 $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)
158164 }
159- let paymentAmounts = $t038163900._1
160- let paymentAssetIds = $t038163900._2
161- let $t039054053 = {
162- let @ = reentrantInvoke(cpmmContract, funcName, [caller, args, paymentAmounts, paymentAssetIds], nil)
165+ let paymentAmounts = $t039364020._1
166+ let paymentAssetIds = $t039364020._2
167+ let lockPayment = if (if ((funcName == "replenishWithTwoTokens"))
168+ then (size(payments) == 3)
169+ else false)
170+ then [payments[2]]
171+ else if (if ((funcName == "replenishWithOneToken"))
172+ then (size(payments) == 2)
173+ else false)
174+ then [payments[1]]
175+ else nil
176+ let $t042504407 = {
177+ let @ = reentrantInvoke(cpmmContract, funcName, [caller, args, paymentAmounts, paymentAssetIds], lockPayment)
163178 if ($isInstanceOf(@, "(List[Any], List[Any])"))
164179 then @
165180 else throw(($getType(@) + " couldn't be cast to (List[Any], List[Any])"))
166181 }
167- if (($t039054053 == $t039054053))
182+ if (($t042504407 == $t042504407))
168183 then {
169- let data = $t039054053._2
170- let actions = $t039054053._1
184+ let data = $t042504407._2
185+ let actions = $t042504407._1
171186 let mappedData = {
172187 let $l = data
173188 let $s = size($l)
243258 }
244259 }
245260 else {
246- let $t060496152 = calcStakingParams(stake, amount, fromBase58String(assetIdString))
247- let call = $t060496152._1
248- let addr = $t060496152._2
249- let params = $t060496152._3
250- let payments = $t060496152._4
261+ let $t064036506 = calcStakingParams(stake, amount, fromBase58String(assetIdString))
262+ let call = $t064036506._1
263+ let addr = $t064036506._2
264+ let params = $t064036506._3
265+ let payments = $t064036506._4
251266 let inv = invoke(addr, call, params, payments)
252267 if ((inv == inv))
253268 then nil
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let kActive = "active"
5+
6+let kActiveGlob = "active_all_contracts"
57
68 let kCause = "shutdown_cause"
79
810 let kUSDNAddress = "staking_usdnnsbt_address"
911
1012 let kEURNAddress = "staking_eurn_address"
1113
1214 let kLeasingPool = "leasing_address"
1315
1416 let kLeasingAmount = "leasing_amount"
1517
1618 let kLeasingId = "leasing_id"
1719
1820 let kAdminPubKey1 = "admin_pub_1"
1921
2022 let kAdminPubKey2 = "admin_pub_2"
2123
2224 let kAdminPubKey3 = "admin_pub_3"
2325
2426 let kAdminInvokePubKey = "admin_invoke_pub"
2527
2628 let kCpmmContract = "cpmm_contract"
2729
2830 let kUSDNAssetId = "usdn_asset_id"
2931
3032 let kEURNAssetId = "eurn_asset_id"
3133
3234 let kStakingAssets = "staking_assets"
3335
3436 let kShareAssetId = "share_asset_id"
3537
3638 let oracle = Address(base58'3PEbqViERCoKnmcSULh6n2aiMvUdSQdCsom')
3739
3840 func getBase58FromOracle (key) = match getString(oracle, key) {
3941 case string: String =>
4042 fromBase58String(string)
4143 case nothing =>
4244 throw((key + "is empty"))
4345 }
4446
4547
4648 let adminPubKey1 = getBase58FromOracle(kAdminPubKey1)
4749
4850 let adminPubKey2 = getBase58FromOracle(kAdminPubKey2)
4951
5052 let adminPubKey3 = getBase58FromOracle(kAdminPubKey3)
5153
5254 let adminPubKeyInvoke = getBase58FromOracle(kAdminInvokePubKey)
5355
5456 let stakingUSDNAddress = Address(getBase58FromOracle(kUSDNAddress))
5557
5658 let stakingEURNAddress = Address(getBase58FromOracle(kEURNAddress))
5759
5860 let cpmmContract = Address(getBase58FromOracle(kCpmmContract))
5961
6062 let USDN = getBase58FromOracle(kUSDNAssetId)
6163
6264 let EURN = getBase58FromOracle(kEURNAssetId)
6365
6466 let stakingAssets = getStringValue(oracle, kStakingAssets)
6567
68+let activeGlob = valueOrElse(getBoolean(oracle, kActiveGlob), true)
69+
6670 let active = valueOrElse(getBoolean(this, kActive), true)
6771
68-func isActive () = if (active)
72+func isActive () = if (if (active)
73+ then activeGlob
74+ else false)
6975 then unit
7076 else throw("DApp is inactive at this moment")
7177
7278
7379 func isGlobalCaller (caller) = if ((caller == cpmmContract))
7480 then unit
7581 else throw("Only global Contract can invoke this function")
7682
7783
7884 func isAdminCall (callerPubKey) = if (containsElement([adminPubKey1, adminPubKey2, adminPubKey3], callerPubKey))
7985 then unit
8086 else throw("Only admin can call this function")
8187
8288
8389 func suspend (cause) = [BooleanEntry(kActive, false), StringEntry(kCause, cause)]
8490
8591
8692 func calcStakingFuncAndAddres (stake,assetId) = if (stake)
8793 then if ((assetId == USDN))
8894 then $Tuple2("lockNeutrino", stakingUSDNAddress)
8995 else $Tuple2("startStaking", stakingEURNAddress)
9096 else if ((assetId == USDN))
9197 then $Tuple2("unlockNeutrino", stakingUSDNAddress)
9298 else $Tuple2("stopStaking", stakingEURNAddress)
9399
94100
95101 func calcStakingParams (stake,amount,assetId) = if (stake)
96102 then {
97- let $t024732539 = calcStakingFuncAndAddres(stake, assetId)
98- let call = $t024732539._1
99- let stakingAddr = $t024732539._2
103+ let $t025932659 = calcStakingFuncAndAddres(stake, assetId)
104+ let call = $t025932659._1
105+ let stakingAddr = $t025932659._2
100106 $Tuple4(call, stakingAddr, nil, [AttachedPayment(assetId, amount)])
101107 }
102108 else {
103- let $t026252691 = calcStakingFuncAndAddres(stake, assetId)
104- let call = $t026252691._1
105- let stakingAddr = $t026252691._2
109+ let $t027452811 = calcStakingFuncAndAddres(stake, assetId)
110+ let call = $t027452811._1
111+ let stakingAddr = $t027452811._2
106112 $Tuple4(call, stakingAddr, [amount, toBase58String(assetId)], nil)
107113 }
108114
109115
110116 func collectPayments (acc,payment) = {
111- let $t028532896 = acc
112- let paymentAmounts = $t028532896._1
113- let paymentAssetIds = $t028532896._2
117+ let $t029733016 = acc
118+ let paymentAmounts = $t029733016._1
119+ let paymentAssetIds = $t029733016._2
114120 $Tuple2((paymentAmounts :+ payment.amount), (paymentAssetIds :+ (if ((payment.assetId == unit))
115121 then base58''
116122 else payment.assetId)))
117123 }
118124
119125
120126 func collectState (result,source) = match source {
121127 case e: Issue|Burn|Reissue|ScriptTransfer|BinaryEntry|BooleanEntry|StringEntry|IntegerEntry =>
122128 (result :+ e)
123129 case _ =>
124130 result
125131 }
126132
127133
128134 func collectData (result,source) = match source {
129135 case v: String =>
130136 (result :+ v)
131137 case v: Int =>
132138 (result :+ v)
133139 case v: Boolean =>
134140 (result :+ v)
135141 case v: ByteVector =>
136142 (result :+ v)
137143 case v: Unit =>
138144 (result :+ v)
139145 case _ =>
140146 throw()
141147 }
142148
143149
144150 func callCommon (funcName,caller,args,payments) = valueOrElse(isActive(), {
145- let $t038163900 = {
151+ let $t039364020 = {
146152 let $l = payments
147153 let $s = size($l)
148154 let $acc0 = $Tuple2(nil, nil)
149155 func $f0_1 ($a,$i) = if (($i >= $s))
150156 then $a
151157 else collectPayments($a, $l[$i])
152158
153159 func $f0_2 ($a,$i) = if (($i >= $s))
154160 then $a
155161 else throw("List size exceeds 10")
156162
157163 $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)
158164 }
159- let paymentAmounts = $t038163900._1
160- let paymentAssetIds = $t038163900._2
161- let $t039054053 = {
162- let @ = reentrantInvoke(cpmmContract, funcName, [caller, args, paymentAmounts, paymentAssetIds], nil)
165+ let paymentAmounts = $t039364020._1
166+ let paymentAssetIds = $t039364020._2
167+ let lockPayment = if (if ((funcName == "replenishWithTwoTokens"))
168+ then (size(payments) == 3)
169+ else false)
170+ then [payments[2]]
171+ else if (if ((funcName == "replenishWithOneToken"))
172+ then (size(payments) == 2)
173+ else false)
174+ then [payments[1]]
175+ else nil
176+ let $t042504407 = {
177+ let @ = reentrantInvoke(cpmmContract, funcName, [caller, args, paymentAmounts, paymentAssetIds], lockPayment)
163178 if ($isInstanceOf(@, "(List[Any], List[Any])"))
164179 then @
165180 else throw(($getType(@) + " couldn't be cast to (List[Any], List[Any])"))
166181 }
167- if (($t039054053 == $t039054053))
182+ if (($t042504407 == $t042504407))
168183 then {
169- let data = $t039054053._2
170- let actions = $t039054053._1
184+ let data = $t042504407._2
185+ let actions = $t042504407._1
171186 let mappedData = {
172187 let $l = data
173188 let $s = size($l)
174189 let $acc0 = nil
175190 func $f1_1 ($a,$i) = if (($i >= $s))
176191 then $a
177192 else collectData($a, $l[$i])
178193
179194 func $f1_2 ($a,$i) = if (($i >= $s))
180195 then $a
181196 else throw("List size exceeds 10")
182197
183198 $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)
184199 }
185200 let mappedActions = {
186201 let $l = actions
187202 let $s = size($l)
188203 let $acc0 = nil
189204 func $f2_1 ($a,$i) = if (($i >= $s))
190205 then $a
191206 else collectState($a, $l[$i])
192207
193208 func $f2_2 ($a,$i) = if (($i >= $s))
194209 then $a
195210 else throw("List size exceeds 15")
196211
197212 $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)
198213 }
199214 $Tuple2(mappedActions, mappedData)
200215 }
201216 else throw("Strict value is not equal to itself.")
202217 })
203218
204219
205220 @Callable(i)
206221 func callFunction (funcName,args) = callCommon(funcName, i.caller.bytes, args, i.payments)
207222
208223
209224
210225 @Callable(i)
211226 func shutdown () = valueOrElse(isAdminCall(i.callerPublicKey), if (!(active))
212227 then throw(("DApp is already suspended. Cause: " + valueOrElse(getString(this, kCause), "the cause wasn't specified")))
213228 else suspend("Paused by admin"))
214229
215230
216231
217232 @Callable(i)
218233 func activate () = valueOrElse(isAdminCall(i.callerPublicKey), if (active)
219234 then throw("DApp is already active")
220235 else [BooleanEntry(kActive, true), DeleteEntry(kCause)])
221236
222237
223238
224239 @Callable(i)
225240 func stakeUnstake (stake,amount,assetIdString) = valueOrElse(isActive(), if ((i.caller != cpmmContract))
226241 then throw("Only global Contract can invoke this function")
227242 else if ((assetIdString == "WAVES"))
228243 then {
229244 let pool = addressFromStringValue(valueOrErrorMessage(getString(oracle, kLeasingPool), "No leasing pool in oracle"))
230245 let leasingId = getBinary(this, kLeasingId)
231246 let leasingAmount = valueOrElse(getInteger(this, kLeasingAmount), 0)
232247 let newLeaseAmount = if (stake)
233248 then (leasingAmount + amount)
234249 else (leasingAmount - amount)
235250 let newLease = Lease(pool, newLeaseAmount)
236251 let newLeaseId = calculateLeaseId(newLease)
237252 let baseEtry = [newLease, BinaryEntry(kLeasingId, newLeaseId), IntegerEntry(kLeasingAmount, newLeaseAmount)]
238253 match leasingId {
239254 case lId: ByteVector =>
240255 ([LeaseCancel(lId)] ++ baseEtry)
241256 case _ =>
242257 baseEtry
243258 }
244259 }
245260 else {
246- let $t060496152 = calcStakingParams(stake, amount, fromBase58String(assetIdString))
247- let call = $t060496152._1
248- let addr = $t060496152._2
249- let params = $t060496152._3
250- let payments = $t060496152._4
261+ let $t064036506 = calcStakingParams(stake, amount, fromBase58String(assetIdString))
262+ let call = $t064036506._1
263+ let addr = $t064036506._2
264+ let params = $t064036506._3
265+ let payments = $t064036506._4
251266 let inv = invoke(addr, call, params, payments)
252267 if ((inv == inv))
253268 then nil
254269 else throw("Strict value is not equal to itself.")
255270 })
256271
257272
258273
259274 @Callable(i)
260275 func reissueShareToken (amount) = valueOrElse(isGlobalCaller(i.caller), valueOrElse(isActive(), {
261276 let shareAssetId = fromBase58String(getStringValue(this, kShareAssetId))
262277 [Reissue(shareAssetId, amount, true), ScriptTransfer(i.caller, amount, shareAssetId)]
263278 }))
264279
265280
266281
267282 @Callable(i)
268283 func replenishWithTwoTokens (slippageTolerance) = callCommon("replenishWithTwoTokens", i.caller.bytes, ["false", "0"], i.payments)
269284
270285
271286
272287 @Callable(i)
273288 func withdraw () = callCommon("withdraw", i.caller.bytes, ["0"], i.payments)
274289
275290
276291
277292 @Callable(i)
278293 func exchange (minAmountToReceive) = callCommon("exchange", i.caller.bytes, [toString(minAmountToReceive)], i.payments)
279294
280295
281296 @Verifier(tx)
282297 func verify () = {
283298 let multiSignedByAdmins = {
284299 let adminPubKey1Signed = if (sigVerify(tx.bodyBytes, tx.proofs[0], adminPubKey1))
285300 then 1
286301 else 0
287302 let adminPubKey2Signed = if (sigVerify(tx.bodyBytes, tx.proofs[1], adminPubKey2))
288303 then 1
289304 else 0
290305 let adminPubKey3Signed = if (sigVerify(tx.bodyBytes, tx.proofs[2], adminPubKey3))
291306 then 1
292307 else 0
293308 (((adminPubKey1Signed + adminPubKey2Signed) + adminPubKey3Signed) >= 2)
294309 }
295310 multiSignedByAdmins
296311 }
297312

github/deemru/w8io/786bc32 
40.83 ms