tx · JxrJFsdokvQ6B4uC5FwJmiAxNEWG6BqRoUZTr4Tmvbh

3MsgzbtRg8NEkbTcHBywtwTdCe9BRxMQo5T:  -0.01200000 Waves

2024.12.19 10:45 [3421136] smart account 3MsgzbtRg8NEkbTcHBywtwTdCe9BRxMQo5T > SELF 0.00000000 Waves

{ "type": 13, "id": "JxrJFsdokvQ6B4uC5FwJmiAxNEWG6BqRoUZTr4Tmvbh", "fee": 1200000, "feeAssetId": null, "timestamp": 1734594349757, "version": 2, "chainId": 84, "sender": "3MsgzbtRg8NEkbTcHBywtwTdCe9BRxMQo5T", "senderPublicKey": "iTiQR3Kvxn7i8PFgEbZn36n5iFLxFwkTA6M3wi846Vx", "proofs": [ "2TcrC4ESU3Ar7cyQZcrTQhk69h5Xd38eRM5QMn5JMy2CXqihLLh3kuigjTW5xvgcUp3Yjgvhd6sJgReYk8XUoFF3" ], "script": "base64:BwJpCAISAwoBCBIECgIICBIECgIIARIECgIIBBIECgIIAhIDCgEIEgUKAwIBBBIECgICARIFCgMCAQISBQoDAhIREgQKAgIBEgQKAggYEgQKAggYEgMKAQgSAwoBARIHCgUCCAEIARIDCgEIIwADU0VQAgJfXwALd2F2ZXNTdHJpbmcCBVdBVkVTABBjb250cmFjdEZpbGVuYW1lAhRtZW1lX2ltX2ZhY3RvcnkucmlkZQALa1ByaWNlQXNzZXQCDHByaWNlX19hc3NldAAJa1NodXRkb3duAg5zaHV0ZG93bl9fZmxhZwAIc2h1dGRvd24JAQt2YWx1ZU9yRWxzZQIJAKAIAQUJa1NodXRkb3duBwEHd3JhcEVycgEBcwkArAICCQCsAgIFEGNvbnRyYWN0RmlsZW5hbWUCAjogBQFzAQh0aHJvd0VycgEBcwkAAgEJAQd3cmFwRXJyAQUBcwAPQURNSU5fTElTVF9TSVpFAAoABlFVT1JVTQADABFUWElEX0JZVEVTX0xFTkdUSAAgARhrZXlBbGxvd2VkVHhJZFZvdGVQcmVmaXgBBHR4SWQJALkJAgkAzAgCAgYlcyVzJXMJAMwIAgIJYWxsb3dUeElkCQDMCAIFBHR4SWQFA25pbAUDU0VQARBrZXlGdWxsQWRtaW5Wb3RlAgZwcmVmaXgMYWRtaW5BZGRyZXNzCQC5CQIJAMwIAgUGcHJlZml4CQDMCAIFDGFkbWluQWRkcmVzcwUDbmlsBQNTRVABE2tleUFkbWluQWRkcmVzc0xpc3QACQC5CQIJAMwIAgICJXMJAMwIAgIQYWRtaW5BZGRyZXNzTGlzdAUDbmlsBQNTRVABDmtleUFsbG93ZWRUeElkAAkAuQkCCQDMCAICAiVzCQDMCAICBHR4SWQFA25pbAUDU0VQAQxnZXRBZG1pblZvdGUCBnByZWZpeAVhZG1pbgQHdm90ZUtleQkBEGtleUZ1bGxBZG1pblZvdGUCBQZwcmVmaXgFBWFkbWluCQELdmFsdWVPckVsc2UCCQCfCAEFB3ZvdGVLZXkAAAENZ2V0QWRtaW5zTGlzdAAEByRtYXRjaDAJAJ0IAgUEdGhpcwkBE2tleUFkbWluQWRkcmVzc0xpc3QAAwkAAQIFByRtYXRjaDACBlN0cmluZwQBcwUHJG1hdGNoMAkAtQkCBQFzBQNTRVAFA25pbAAJYWRtaW5MaXN0CQENZ2V0QWRtaW5zTGlzdAABDWlzSW5BZG1pbkxpc3QBB2FkZHJlc3MJAQ9jb250YWluc0VsZW1lbnQCBQlhZG1pbkxpc3QFB2FkZHJlc3MBEmdlblZvdGVzS2V5c0hlbHBlcgIBYQxhZG1pbkFkZHJlc3MECyR0MDE1MDIxNTI2BQFhBAZyZXN1bHQIBQskdDAxNTAyMTUyNgJfMQQGcHJlZml4CAULJHQwMTUwMjE1MjYCXzIJAJQKAgkAzQgCBQZyZXN1bHQJARBrZXlGdWxsQWRtaW5Wb3RlAgUGcHJlZml4BQxhZG1pbkFkZHJlc3MFBnByZWZpeAEMZ2VuVm90ZXNLZXlzAQlrZXlQcmVmaXgECyR0MDE2MzcxNzE2CgACJGwFCWFkbWluTGlzdAoAAiRzCQCQAwEFAiRsCgAFJGFjYzAJAJQKAgUDbmlsBQlrZXlQcmVmaXgKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBEmdlblZvdGVzS2V5c0hlbHBlcgIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQIUTGlzdCBzaXplIGV4Y2VlZHMgMTAJAQUkZjBfMgIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYABwAIAAkACgQGcmVzdWx0CAULJHQwMTYzNzE3MTYCXzEEBnByZWZpeAgFCyR0MDE2MzcxNzE2Al8yBQZyZXN1bHQBEGNvdW50Vm90ZXNIZWxwZXICBnJlc3VsdAd2b3RlS2V5CQBkAgUGcmVzdWx0CQELdmFsdWVPckVsc2UCCQCfCAEFB3ZvdGVLZXkAAAEKY291bnRWb3RlcwEGcHJlZml4BAV2b3RlcwkBDGdlblZvdGVzS2V5cwEFBnByZWZpeAoAAiRsBQV2b3RlcwoAAiRzCQCQAwEFAiRsCgAFJGFjYzAAAAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEQY291bnRWb3Rlc0hlbHBlcgIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQIUTGlzdCBzaXplIGV4Y2VlZHMgMTAJAQUkZjBfMgIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYABwAIAAkACgEQY2xlYXJWb3Rlc0hlbHBlcgIGcmVzdWx0A2tleQkAzQgCBQZyZXN1bHQJAQtEZWxldGVFbnRyeQEFA2tleQETZ2V0Q2xlYXJWb3RlRW50cmllcwEGcHJlZml4BAV2b3RlcwkBDGdlblZvdGVzS2V5cwEFBnByZWZpeAoAAiRsBQV2b3RlcwoAAiRzCQCQAwEFAiRsCgAFJGFjYzAFA25pbAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEQY2xlYXJWb3Rlc0hlbHBlcgIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQIUTGlzdCBzaXplIGV4Y2VlZHMgMTAJAQUkZjBfMgIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYABwAIAAkACgEMdm90ZUlOVEVSTkFMBBNjYWxsZXJBZGRyZXNzU3RyaW5nCWtleVByZWZpeAhtaW5Wb3Rlcwp2b3RlUmVzdWx0BAd2b3RlS2V5CQEQa2V5RnVsbEFkbWluVm90ZQIFCWtleVByZWZpeAUTY2FsbGVyQWRkcmVzc1N0cmluZwQQYWRtaW5DdXJyZW50Vm90ZQkBDGdldEFkbWluVm90ZQIFCWtleVByZWZpeAUTY2FsbGVyQWRkcmVzc1N0cmluZwQDZXJyAwkBASEBCQENaXNJbkFkbWluTGlzdAEFE2NhbGxlckFkZHJlc3NTdHJpbmcJAQh0aHJvd0VycgEJAKwCAgkArAICAglBZGRyZXNzOiAFE2NhbGxlckFkZHJlc3NTdHJpbmcCEiBub3QgaW4gQWRtaW4gbGlzdAMJAAACBRBhZG1pbkN1cnJlbnRWb3RlAAEJAQh0aHJvd0VycgEJAKwCAgUHdm90ZUtleQISIHlvdSBhbHJlYWR5IHZvdGVkBQR1bml0AwkAAAIFA2VycgUDZXJyBAV2b3RlcwkBCmNvdW50Vm90ZXMBBQlrZXlQcmVmaXgDCQBnAgkAZAIFBXZvdGVzAAEFCG1pblZvdGVzBBBjbGVhclZvdGVFbnRyaWVzCQETZ2V0Q2xlYXJWb3RlRW50cmllcwEFCWtleVByZWZpeAkAzggCBRBjbGVhclZvdGVFbnRyaWVzBQp2b3RlUmVzdWx0CQDMCAIJAQxJbnRlZ2VyRW50cnkCBQd2b3RlS2V5AAEFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgEPdmFsaWRhdGVBZGRyZXNzAQdhZGRyZXNzCQEJaXNEZWZpbmVkAQkApggBBQdhZGRyZXNzABJrQ2FsY3VsYXRvckFkZHJlc3MCE2NhbGN1bGF0b3JfX2FkZHJlc3MAF2NhbGN1bGF0b3JBZGRyZXNzT3B0aW9uBAckbWF0Y2gwCQCdCAIFBHRoaXMFEmtDYWxjdWxhdG9yQWRkcmVzcwMJAAECBQckbWF0Y2gwAgZTdHJpbmcEAXMFByRtYXRjaDAJAKYIAQUBcwMJAAECBQckbWF0Y2gwAgRVbml0BQR1bml0CQACAQILTWF0Y2ggZXJyb3IAEWNhbGN1bGF0b3JBZGRyZXNzCQETdmFsdWVPckVycm9yTWVzc2FnZQIFF2NhbGN1bGF0b3JBZGRyZXNzT3B0aW9uCQEHd3JhcEVycgECGmludmFsaWQgY2FsY3VsYXRvciBhZGRyZXNzAQttdXN0QWRkcmVzcwIBaQdhZGRyZXNzAwkAAAIIBQFpBmNhbGxlcgUHYWRkcmVzcwYJAQh0aHJvd0VycgECEXBlcm1pc3Npb24gZGVuaWVkAQhtdXN0VGhpcwEBaQkBC211c3RBZGRyZXNzAgUBaQUEdGhpcwEObXVzdENhbGN1bGF0b3IBAWkJAQttdXN0QWRkcmVzcwIFAWkFEWNhbGN1bGF0b3JBZGRyZXNzAQxwYXJzZUFzc2V0SWQBBWlucHV0AwkAAAIFBWlucHV0BQt3YXZlc1N0cmluZwUEdW5pdAkA2QQBBQVpbnB1dAEPYXNzZXRJZFRvU3RyaW5nAQVpbnB1dAMJAAACBQVpbnB1dAUEdW5pdAULd2F2ZXNTdHJpbmcJANgEAQkBBXZhbHVlAQUFaW5wdXQRAWkBBGluaXQBFGNhbGN1bGF0b3JBZGRyZXNzU3RyBAtjaGVja0NhbGxlcgkBCG11c3RUaGlzAQUBaQMJAAACBQtjaGVja0NhbGxlcgULY2hlY2tDYWxsZXIJAJQKAgkAzAgCCQELU3RyaW5nRW50cnkCBRJrQ2FsY3VsYXRvckFkZHJlc3MFFGNhbGN1bGF0b3JBZGRyZXNzU3RyCQDMCAIJAQtTdHJpbmdFbnRyeQIFC2tQcmljZUFzc2V0BQt3YXZlc1N0cmluZwUDbmlsBQR1bml0CQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBC3N0cmluZ0VudHJ5AgNrZXkDdmFsAwMJAQEhAQUIc2h1dGRvd24JAQ5tdXN0Q2FsY3VsYXRvcgEFAWkHCQCUCgIJAMwIAgkBC1N0cmluZ0VudHJ5AgUDa2V5BQN2YWwFA25pbAUDa2V5CQEIdGhyb3dFcnIBAgtub3QgYWxsb3dlZAFpAQxpbnRlZ2VyRW50cnkCA2tleQN2YWwDAwkBASEBBQhzaHV0ZG93bgkBDm11c3RDYWxjdWxhdG9yAQUBaQcJAJQKAgkAzAgCCQEMSW50ZWdlckVudHJ5AgUDa2V5BQN2YWwFA25pbAUDa2V5CQEIdGhyb3dFcnIBAgtub3QgYWxsb3dlZAFpAQxib29sZWFuRW50cnkCA2tleQN2YWwDAwkBASEBBQhzaHV0ZG93bgkBDm11c3RDYWxjdWxhdG9yAQUBaQcJAJQKAgkAzAgCCQEMQm9vbGVhbkVudHJ5AgUDa2V5BQN2YWwFA25pbAUDa2V5CQEIdGhyb3dFcnIBAgtub3QgYWxsb3dlZAFpAQtiaW5hcnlFbnRyeQIDa2V5A3ZhbAMDCQEBIQEFCHNodXRkb3duCQEObXVzdENhbGN1bGF0b3IBBQFpBwkAlAoCCQDMCAIJAQtCaW5hcnlFbnRyeQIFA2tleQUDdmFsBQNuaWwFA2tleQkBCHRocm93RXJyAQILbm90IGFsbG93ZWQBaQELZGVsZXRlRW50cnkBA2tleQMDCQEBIQEFCHNodXRkb3duCQEObXVzdENhbGN1bGF0b3IBBQFpBwkAlAoCCQDMCAIJAQtEZWxldGVFbnRyeQEFA2tleQUDbmlsBQNrZXkJAQh0aHJvd0VycgECC25vdCBhbGxvd2VkAWkBB3JlaXNzdWUDB2Fzc2V0SWQGYW1vdW50CnJlaXNzdWFibGUDAwkBASEBBQhzaHV0ZG93bgkBDm11c3RDYWxjdWxhdG9yAQUBaQcJAJQKAgkAzAgCCQEHUmVpc3N1ZQMFB2Fzc2V0SWQFBmFtb3VudAUKcmVpc3N1YWJsZQUDbmlsBQZhbW91bnQJAQh0aHJvd0VycgECC25vdCBhbGxvd2VkAWkBBGJ1cm4CB2Fzc2V0SWQGYW1vdW50AwMJAQEhAQUIc2h1dGRvd24JAQ5tdXN0Q2FsY3VsYXRvcgEFAWkHCQCUCgIJAMwIAgkBBEJ1cm4CBQdhc3NldElkBQZhbW91bnQFA25pbAUGYW1vdW50CQEIdGhyb3dFcnIBAgtub3QgYWxsb3dlZAFpAQ10cmFuc2ZlckFzc2V0Aw5yZWNpcGllbnRCeXRlcwZhbW91bnQHYXNzZXRJZAMDCQEBIQEFCHNodXRkb3duCQEObXVzdENhbGN1bGF0b3IBBQFpBwkAlAoCCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMJAQdBZGRyZXNzAQUOcmVjaXBpZW50Qnl0ZXMFBmFtb3VudAUHYXNzZXRJZAUDbmlsBQZhbW91bnQJAQh0aHJvd0VycgECC25vdCBhbGxvd2VkAWkBDnRyYW5zZmVyQXNzZXRzAw5yZWNpcGllbnRCeXRlcwphc3NldHNMaXN0C2Ftb3VudHNMaXN0AwMJAQEhAQUIc2h1dGRvd24JAQ5tdXN0Q2FsY3VsYXRvcgEFAWkHCgEOYWRkTmV3VHJhbnNmZXICA2FjYwtuZXh0QXNzZXRJZAQLJHQwNTk3OTYwMDMFA2FjYwQJdHJhbnNmZXJzCAULJHQwNTk3OTYwMDMCXzEEAWoIBQskdDA1OTc5NjAwMwJfMgQLbmV3VHJhbnNmZXIJAQ5TY3JpcHRUcmFuc2ZlcgMJAQdBZGRyZXNzAQUOcmVjaXBpZW50Qnl0ZXMJAJEDAgULYW1vdW50c0xpc3QFAWoJAJEDAgUKYXNzZXRzTGlzdAUBagQQdXBkYXRlZFRyYW5zZmVycwkAzQgCBQl0cmFuc2ZlcnMFC25ld1RyYW5zZmVyCQCUCgIFEHVwZGF0ZWRUcmFuc2ZlcnMJAGQCBQFqAAEECyR0MDYyNDA2MzIxCgACJGwFCmFzc2V0c0xpc3QKAAIkcwkAkAMBBQIkbAoABSRhY2MwCQCUCgIFA25pbAAACgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQ5hZGROZXdUcmFuc2ZlcgIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQIUTGlzdCBzaXplIGV4Y2VlZHMgMTAJAQUkZjBfMgIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYABwAIAAkACgQPYXNzZXRzVHJhbnNmZXJzCAULJHQwNjI0MDYzMjECXzEECl9sYXN0SW5kZXgIBQskdDA2MjQwNjMyMQJfMgkAlAoCBQ9hc3NldHNUcmFuc2ZlcnMFBHVuaXQJAQh0aHJvd0VycgECC25vdCBhbGxvd2VkAWkBDXRyYW5zZmVyV2F2ZXMCDnJlY2lwaWVudEJ5dGVzBmFtb3VudAMDCQEBIQEFCHNodXRkb3duCQEObXVzdENhbGN1bGF0b3IBBQFpBwkAlAoCCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMJAQdBZGRyZXNzAQUOcmVjaXBpZW50Qnl0ZXMFBmFtb3VudAUEdW5pdAUDbmlsBQZhbW91bnQJAQh0aHJvd0VycgECC25vdCBhbGxvd2VkAWkBBGNhbGwCCGZ1bmN0aW9uBGFyZ3MEDWNsZWFuUGF5bWVudHMDCQAAAggFAWkPY2FsbGVyUHVibGljS2V5ASAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUDbmlsCAUBaQhwYXltZW50cwQGcmVzdWx0CQD9BwQFEWNhbGN1bGF0b3JBZGRyZXNzBQhmdW5jdGlvbgkAzAgCCAUBaQ9jYWxsZXJQdWJsaWNLZXkJAMwIAgUEYXJncwUDbmlsBQ1jbGVhblBheW1lbnRzCQCUCgIFA25pbAUGcmVzdWx0AWkBDmluaXRQb29sSW52b2tlAhFwb29sQWRkcmVzc1N0cmluZwRhcmdzAwMJAQEhAQUIc2h1dGRvd24JAQ5tdXN0Q2FsY3VsYXRvcgEFAWkHBA1jb252ZXJ0ZWRBcmdzCQDMCAIJAJEDAgUEYXJncwAACQDMCAIJAJEDAgUEYXJncwABCQDMCAIJAJEDAgUEYXJncwACCQDMCAIJAJEDAgUEYXJncwADCQDMCAIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQRhcmdzAAQFA25pbAkAlAoCBQNuaWwJAPwHBAkBEUBleHRyTmF0aXZlKDEwNjIpAQURcG9vbEFkZHJlc3NTdHJpbmcCBGluaXQFDWNvbnZlcnRlZEFyZ3MIBQFpCHBheW1lbnRzCQEIdGhyb3dFcnIBAgtub3QgYWxsb3dlZAFpARl3aXRoZHJhd0xpcXVpZGl0eUZyb21Qb29sARFwb29sQWRkcmVzc1N0cmluZwMDCQEBIQEFCHNodXRkb3duCQEObXVzdENhbGN1bGF0b3IBBQFpBwkAlAoCBQNuaWwJAPwHBAkBEUBleHRyTmF0aXZlKDEwNjIpAQURcG9vbEFkZHJlc3NTdHJpbmcCGXdpdGhkcmF3TGlxdWlkaXR5QXRUYXJnZXQFA25pbAUDbmlsCQEIdGhyb3dFcnIBAgtub3QgYWxsb3dlZAFpARJub3RpZnlTdGF0dXNVcGRhdGUBBnN0YXR1cwQGcmVzdWx0CQD9BwQFEWNhbGN1bGF0b3JBZGRyZXNzAhJub3RpZnlTdGF0dXNVcGRhdGUJAMwIAggFAWkPY2FsbGVyUHVibGljS2V5CQDMCAIJAMwIAgkApAMBBQZzdGF0dXMFA25pbAUDbmlsBQNuaWwJAJQKAgUDbmlsBQZyZXN1bHQBaQEMY3JlYXRlV3hQb29sBQl1c2VyUG9vbHMIYXNzZXQxSWQMYXNzZXQxQW1vdW50CGFzc2V0MklkDGFzc2V0MkFtb3VudAMDCQEBIQEFCHNodXRkb3duCQEObXVzdENhbGN1bGF0b3IBBQFpBwkAlAoCBQNuaWwJAPwHBAkBB0FkZHJlc3MBBQl1c2VyUG9vbHMCBmNyZWF0ZQUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCCQEMcGFyc2VBc3NldElkAQUIYXNzZXQxSWQFDGFzc2V0MUFtb3VudAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgkBDHBhcnNlQXNzZXRJZAEFCGFzc2V0MklkBQxhc3NldDJBbW91bnQFA25pbAkBCHRocm93RXJyAQILbm90IGFsbG93ZWQBaQELdm90ZUZvclR4SWQBBHR4SWQEE2NhbGxlckFkZHJlc3NTdHJpbmcJANgEAQgIBQFpBmNhbGxlcgVieXRlcwQJa2V5UHJlZml4CQEYa2V5QWxsb3dlZFR4SWRWb3RlUHJlZml4AQUEdHhJZAQGcmVzdWx0CQDMCAIJAQtTdHJpbmdFbnRyeQIJAQ5rZXlBbGxvd2VkVHhJZAAFBHR4SWQFA25pbAQRYWxsb3dlZFR4SWRPcHRpb24JAJ0IAgUEdGhpcwkBDmtleUFsbG93ZWRUeElkAAQDZXJyCQDMCAIDCQAAAgkAyAEBCQDZBAEFBHR4SWQFEVRYSURfQllURVNfTEVOR1RIBgkBCHRocm93RXJyAQkArAICBQR0eElkAhIgaXMgbm90IHZhbGlkIHR4SWQJAMwIAgMDCQAAAgURYWxsb3dlZFR4SWRPcHRpb24FBHVuaXQGCQECIT0CCQEFdmFsdWUBBRFhbGxvd2VkVHhJZE9wdGlvbgUEdHhJZAYJAQh0aHJvd0VycgEJAKwCAgUEdHhJZAITIGlzIGFscmVhZHkgYWxsb3dlZAUDbmlsAwkAAAIFA2VycgUDZXJyCQEMdm90ZUlOVEVSTkFMBAUTY2FsbGVyQWRkcmVzc1N0cmluZwUJa2V5UHJlZml4BQZRVU9SVU0FBnJlc3VsdAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgECdHgBBnZlcmlmeQAECGJ5QWRtaW5zCQAAAgkA2AQBCAUCdHgCaWQJAQt2YWx1ZU9yRWxzZQIJAJ0IAgUEdGhpcwkBDmtleUFsbG93ZWRUeElkAAIABAdieU93bmVyAwkAZwIJAJADAQUJYWRtaW5MaXN0BQZRVU9SVU0HCQD0AwMIBQJ0eAlib2R5Qnl0ZXMJAJEDAggFAnR4BnByb29mcwAACAUCdHgPc2VuZGVyUHVibGljS2V5AwUIYnlBZG1pbnMGBQdieU93bmVyi+ABFw==", "height": 3421136, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 4QTuVspwQvaP834z8rbWSSMf1pkmhnzSauW6EFpiJKW2 Next: HdbWfYRACnws6zHAHTP4S273dhjHbZpALSXqVzPxZr49 Diff:
OldNewDifferences
335335
336336
337337 @Callable(i)
338+func withdrawLiquidityFromPool (poolAddressString) = if (if (!(shutdown))
339+ then mustCalculator(i)
340+ else false)
341+ then $Tuple2(nil, invoke(addressFromStringValue(poolAddressString), "withdrawLiquidityAtTarget", nil, nil))
342+ else throwErr("not allowed")
343+
344+
345+
346+@Callable(i)
338347 func notifyStatusUpdate (status) = {
339348 let result = reentrantInvoke(calculatorAddress, "notifyStatusUpdate", [i.callerPublicKey, [toString(status)]], nil)
340349 $Tuple2(nil, result)
341350 }
351+
352+
353+
354+@Callable(i)
355+func createWxPool (userPools,asset1Id,asset1Amount,asset2Id,asset2Amount) = if (if (!(shutdown))
356+ then mustCalculator(i)
357+ else false)
358+ then $Tuple2(nil, invoke(Address(userPools), "create", nil, [AttachedPayment(parseAssetId(asset1Id), asset1Amount), AttachedPayment(parseAssetId(asset2Id), asset2Amount)]))
359+ else throwErr("not allowed")
342360
343361
344362
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 7 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let SEP = "__"
55
66 let wavesString = "WAVES"
77
88 let contractFilename = "meme_im_factory.ride"
99
1010 let kPriceAsset = "price__asset"
1111
1212 let kShutdown = "shutdown__flag"
1313
1414 let shutdown = valueOrElse(getBoolean(kShutdown), false)
1515
1616 func wrapErr (s) = ((contractFilename + ": ") + s)
1717
1818
1919 func throwErr (s) = throw(wrapErr(s))
2020
2121
2222 let ADMIN_LIST_SIZE = 10
2323
2424 let QUORUM = 3
2525
2626 let TXID_BYTES_LENGTH = 32
2727
2828 func keyAllowedTxIdVotePrefix (txId) = makeString(["%s%s%s", "allowTxId", txId], SEP)
2929
3030
3131 func keyFullAdminVote (prefix,adminAddress) = makeString([prefix, adminAddress], SEP)
3232
3333
3434 func keyAdminAddressList () = makeString(["%s", "adminAddressList"], SEP)
3535
3636
3737 func keyAllowedTxId () = makeString(["%s", "txId"], SEP)
3838
3939
4040 func getAdminVote (prefix,admin) = {
4141 let voteKey = keyFullAdminVote(prefix, admin)
4242 valueOrElse(getInteger(voteKey), 0)
4343 }
4444
4545
4646 func getAdminsList () = match getString(this, keyAdminAddressList()) {
4747 case s: String =>
4848 split(s, SEP)
4949 case _ =>
5050 nil
5151 }
5252
5353
5454 let adminList = getAdminsList()
5555
5656 func isInAdminList (address) = containsElement(adminList, address)
5757
5858
5959 func genVotesKeysHelper (a,adminAddress) = {
6060 let $t015021526 = a
6161 let result = $t015021526._1
6262 let prefix = $t015021526._2
6363 $Tuple2((result :+ keyFullAdminVote(prefix, adminAddress)), prefix)
6464 }
6565
6666
6767 func genVotesKeys (keyPrefix) = {
6868 let $t016371716 = {
6969 let $l = adminList
7070 let $s = size($l)
7171 let $acc0 = $Tuple2(nil, keyPrefix)
7272 func $f0_1 ($a,$i) = if (($i >= $s))
7373 then $a
7474 else genVotesKeysHelper($a, $l[$i])
7575
7676 func $f0_2 ($a,$i) = if (($i >= $s))
7777 then $a
7878 else throw("List size exceeds 10")
7979
8080 $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)
8181 }
8282 let result = $t016371716._1
8383 let prefix = $t016371716._2
8484 result
8585 }
8686
8787
8888 func countVotesHelper (result,voteKey) = (result + valueOrElse(getInteger(voteKey), 0))
8989
9090
9191 func countVotes (prefix) = {
9292 let votes = genVotesKeys(prefix)
9393 let $l = votes
9494 let $s = size($l)
9595 let $acc0 = 0
9696 func $f0_1 ($a,$i) = if (($i >= $s))
9797 then $a
9898 else countVotesHelper($a, $l[$i])
9999
100100 func $f0_2 ($a,$i) = if (($i >= $s))
101101 then $a
102102 else throw("List size exceeds 10")
103103
104104 $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)
105105 }
106106
107107
108108 func clearVotesHelper (result,key) = (result :+ DeleteEntry(key))
109109
110110
111111 func getClearVoteEntries (prefix) = {
112112 let votes = genVotesKeys(prefix)
113113 let $l = votes
114114 let $s = size($l)
115115 let $acc0 = nil
116116 func $f0_1 ($a,$i) = if (($i >= $s))
117117 then $a
118118 else clearVotesHelper($a, $l[$i])
119119
120120 func $f0_2 ($a,$i) = if (($i >= $s))
121121 then $a
122122 else throw("List size exceeds 10")
123123
124124 $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)
125125 }
126126
127127
128128 func voteINTERNAL (callerAddressString,keyPrefix,minVotes,voteResult) = {
129129 let voteKey = keyFullAdminVote(keyPrefix, callerAddressString)
130130 let adminCurrentVote = getAdminVote(keyPrefix, callerAddressString)
131131 let err = if (!(isInAdminList(callerAddressString)))
132132 then throwErr((("Address: " + callerAddressString) + " not in Admin list"))
133133 else if ((adminCurrentVote == 1))
134134 then throwErr((voteKey + " you already voted"))
135135 else unit
136136 if ((err == err))
137137 then {
138138 let votes = countVotes(keyPrefix)
139139 if (((votes + 1) >= minVotes))
140140 then {
141141 let clearVoteEntries = getClearVoteEntries(keyPrefix)
142142 (clearVoteEntries ++ voteResult)
143143 }
144144 else [IntegerEntry(voteKey, 1)]
145145 }
146146 else throw("Strict value is not equal to itself.")
147147 }
148148
149149
150150 func validateAddress (address) = isDefined(addressFromString(address))
151151
152152
153153 let kCalculatorAddress = "calculator__address"
154154
155155 let calculatorAddressOption = match getString(this, kCalculatorAddress) {
156156 case s: String =>
157157 addressFromString(s)
158158 case _: Unit =>
159159 unit
160160 case _ =>
161161 throw("Match error")
162162 }
163163
164164 let calculatorAddress = valueOrErrorMessage(calculatorAddressOption, wrapErr("invalid calculator address"))
165165
166166 func mustAddress (i,address) = if ((i.caller == address))
167167 then true
168168 else throwErr("permission denied")
169169
170170
171171 func mustThis (i) = mustAddress(i, this)
172172
173173
174174 func mustCalculator (i) = mustAddress(i, calculatorAddress)
175175
176176
177177 func parseAssetId (input) = if ((input == wavesString))
178178 then unit
179179 else fromBase58String(input)
180180
181181
182182 func assetIdToString (input) = if ((input == unit))
183183 then wavesString
184184 else toBase58String(value(input))
185185
186186
187187 @Callable(i)
188188 func init (calculatorAddressStr) = {
189189 let checkCaller = mustThis(i)
190190 if ((checkCaller == checkCaller))
191191 then $Tuple2([StringEntry(kCalculatorAddress, calculatorAddressStr), StringEntry(kPriceAsset, wavesString)], unit)
192192 else throw("Strict value is not equal to itself.")
193193 }
194194
195195
196196
197197 @Callable(i)
198198 func stringEntry (key,val) = if (if (!(shutdown))
199199 then mustCalculator(i)
200200 else false)
201201 then $Tuple2([StringEntry(key, val)], key)
202202 else throwErr("not allowed")
203203
204204
205205
206206 @Callable(i)
207207 func integerEntry (key,val) = if (if (!(shutdown))
208208 then mustCalculator(i)
209209 else false)
210210 then $Tuple2([IntegerEntry(key, val)], key)
211211 else throwErr("not allowed")
212212
213213
214214
215215 @Callable(i)
216216 func booleanEntry (key,val) = if (if (!(shutdown))
217217 then mustCalculator(i)
218218 else false)
219219 then $Tuple2([BooleanEntry(key, val)], key)
220220 else throwErr("not allowed")
221221
222222
223223
224224 @Callable(i)
225225 func binaryEntry (key,val) = if (if (!(shutdown))
226226 then mustCalculator(i)
227227 else false)
228228 then $Tuple2([BinaryEntry(key, val)], key)
229229 else throwErr("not allowed")
230230
231231
232232
233233 @Callable(i)
234234 func deleteEntry (key) = if (if (!(shutdown))
235235 then mustCalculator(i)
236236 else false)
237237 then $Tuple2([DeleteEntry(key)], key)
238238 else throwErr("not allowed")
239239
240240
241241
242242 @Callable(i)
243243 func reissue (assetId,amount,reissuable) = if (if (!(shutdown))
244244 then mustCalculator(i)
245245 else false)
246246 then $Tuple2([Reissue(assetId, amount, reissuable)], amount)
247247 else throwErr("not allowed")
248248
249249
250250
251251 @Callable(i)
252252 func burn (assetId,amount) = if (if (!(shutdown))
253253 then mustCalculator(i)
254254 else false)
255255 then $Tuple2([Burn(assetId, amount)], amount)
256256 else throwErr("not allowed")
257257
258258
259259
260260 @Callable(i)
261261 func transferAsset (recipientBytes,amount,assetId) = if (if (!(shutdown))
262262 then mustCalculator(i)
263263 else false)
264264 then $Tuple2([ScriptTransfer(Address(recipientBytes), amount, assetId)], amount)
265265 else throwErr("not allowed")
266266
267267
268268
269269 @Callable(i)
270270 func transferAssets (recipientBytes,assetsList,amountsList) = if (if (!(shutdown))
271271 then mustCalculator(i)
272272 else false)
273273 then {
274274 func addNewTransfer (acc,nextAssetId) = {
275275 let $t059796003 = acc
276276 let transfers = $t059796003._1
277277 let j = $t059796003._2
278278 let newTransfer = ScriptTransfer(Address(recipientBytes), amountsList[j], assetsList[j])
279279 let updatedTransfers = (transfers :+ newTransfer)
280280 $Tuple2(updatedTransfers, (j + 1))
281281 }
282282
283283 let $t062406321 = {
284284 let $l = assetsList
285285 let $s = size($l)
286286 let $acc0 = $Tuple2(nil, 0)
287287 func $f0_1 ($a,$i) = if (($i >= $s))
288288 then $a
289289 else addNewTransfer($a, $l[$i])
290290
291291 func $f0_2 ($a,$i) = if (($i >= $s))
292292 then $a
293293 else throw("List size exceeds 10")
294294
295295 $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)
296296 }
297297 let assetsTransfers = $t062406321._1
298298 let _lastIndex = $t062406321._2
299299 $Tuple2(assetsTransfers, unit)
300300 }
301301 else throwErr("not allowed")
302302
303303
304304
305305 @Callable(i)
306306 func transferWaves (recipientBytes,amount) = if (if (!(shutdown))
307307 then mustCalculator(i)
308308 else false)
309309 then $Tuple2([ScriptTransfer(Address(recipientBytes), amount, unit)], amount)
310310 else throwErr("not allowed")
311311
312312
313313
314314 @Callable(i)
315315 func call (function,args) = {
316316 let cleanPayments = if ((i.callerPublicKey == base58'11111111111111111111111111111111'))
317317 then nil
318318 else i.payments
319319 let result = reentrantInvoke(calculatorAddress, function, [i.callerPublicKey, args], cleanPayments)
320320 $Tuple2(nil, result)
321321 }
322322
323323
324324
325325 @Callable(i)
326326 func initPoolInvoke (poolAddressString,args) = if (if (!(shutdown))
327327 then mustCalculator(i)
328328 else false)
329329 then {
330330 let convertedArgs = [args[0], args[1], args[2], args[3], parseIntValue(args[4])]
331331 $Tuple2(nil, invoke(addressFromStringValue(poolAddressString), "init", convertedArgs, i.payments))
332332 }
333333 else throwErr("not allowed")
334334
335335
336336
337337 @Callable(i)
338+func withdrawLiquidityFromPool (poolAddressString) = if (if (!(shutdown))
339+ then mustCalculator(i)
340+ else false)
341+ then $Tuple2(nil, invoke(addressFromStringValue(poolAddressString), "withdrawLiquidityAtTarget", nil, nil))
342+ else throwErr("not allowed")
343+
344+
345+
346+@Callable(i)
338347 func notifyStatusUpdate (status) = {
339348 let result = reentrantInvoke(calculatorAddress, "notifyStatusUpdate", [i.callerPublicKey, [toString(status)]], nil)
340349 $Tuple2(nil, result)
341350 }
351+
352+
353+
354+@Callable(i)
355+func createWxPool (userPools,asset1Id,asset1Amount,asset2Id,asset2Amount) = if (if (!(shutdown))
356+ then mustCalculator(i)
357+ else false)
358+ then $Tuple2(nil, invoke(Address(userPools), "create", nil, [AttachedPayment(parseAssetId(asset1Id), asset1Amount), AttachedPayment(parseAssetId(asset2Id), asset2Amount)]))
359+ else throwErr("not allowed")
342360
343361
344362
345363 @Callable(i)
346364 func voteForTxId (txId) = {
347365 let callerAddressString = toBase58String(i.caller.bytes)
348366 let keyPrefix = keyAllowedTxIdVotePrefix(txId)
349367 let result = [StringEntry(keyAllowedTxId(), txId)]
350368 let allowedTxIdOption = getString(this, keyAllowedTxId())
351369 let err = [if ((size(fromBase58String(txId)) == TXID_BYTES_LENGTH))
352370 then true
353371 else throwErr((txId + " is not valid txId")), if (if ((allowedTxIdOption == unit))
354372 then true
355373 else (value(allowedTxIdOption) != txId))
356374 then true
357375 else throwErr((txId + " is already allowed"))]
358376 if ((err == err))
359377 then voteINTERNAL(callerAddressString, keyPrefix, QUORUM, result)
360378 else throw("Strict value is not equal to itself.")
361379 }
362380
363381
364382 @Verifier(tx)
365383 func verify () = {
366384 let byAdmins = (toBase58String(tx.id) == valueOrElse(getString(this, keyAllowedTxId()), ""))
367385 let byOwner = if ((size(adminList) >= QUORUM))
368386 then false
369387 else sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey)
370388 if (byAdmins)
371389 then true
372390 else byOwner
373391 }
374392

github/deemru/w8io/169f3d6 
37.02 ms