tx · Cu28W1EgPwktTDeAKBDvJ4UeU16mCASvL3enzziox8oo 3N4yYqBkTUq1mDdHhvAd3St7spCbm84DytS: -0.05000000 Waves 2023.07.28 14:38 [2685664] smart account 3N4yYqBkTUq1mDdHhvAd3St7spCbm84DytS > SELF 0.00000000 Waves
{ "type": 13, "id": "Cu28W1EgPwktTDeAKBDvJ4UeU16mCASvL3enzziox8oo", "fee": 5000000, "feeAssetId": null, "timestamp": 1690544315223, "version": 2, "chainId": 84, "sender": "3N4yYqBkTUq1mDdHhvAd3St7spCbm84DytS", "senderPublicKey": "8h7G4haeVwXKNHXNHsWkC1miUp5CQtk3WmpBKazQPxRh", "proofs": [ "4JDo6NRgdJxidBKGrE1W3G9uLbUc61M4SNH3BpUqtsBLP6gGgEBinn5kq53gejskYpyB8bwamz1TK4NFz9EthmMy" ], "script": "base64:BgIkCAISAwoBARIDCgEBEgASAwoBCBIDCgEBEgMKAQgSABIDCgEIMgAMY29udHJhY3RGaWxlAhFsMm1wX3N0YWtpbmcucmlkZQADU0VQAgJfXwAGc2NhbGU4AIDC1y8AB3NjYWxlMTgAgICQu7rWrfANAA1zY2FsZTE4QmlnSW50CQC2AgEFB3NjYWxlMTgAEkFERFJFU1NfQllURVNfU0laRQAaAA1CTE9DS1NfSU5fREFZAKALAQh0aHJvd0VycgEDbXNnCQACAQkArAICCQCsAgIFDGNvbnRyYWN0RmlsZQICOiAFA21zZwAKa2V5QXNzZXRJZAkAuQkCCQDMCAICAiVzCQDMCAICB2Fzc2V0SWQFA25pbAUDU0VQABNrZXlFbWlzc2lvblBlckJsb2NrCQC5CQIJAMwIAgICJXMJAMwIAgIQZW1pc3Npb25QZXJCbG9jawUDbmlsBQNTRVAAGWtleUVtaXNzaW9uUGVyaW9kSW5CbG9ja3MJALkJAgkAzAgCAgIlcwkAzAgCAhZlbWlzc2lvblBlcmlvZEluQmxvY2tzBQNuaWwFA1NFUAANa2V5U3RhcnRCbG9jawkAuQkCCQDMCAICAiVzCQDMCAICCnN0YXJ0QmxvY2sFA25pbAUDU0VQABBrZXlUb3RhbExwQW1vdW50CQC5CQIJAMwIAgICJXMJAMwIAgINdG90YWxMcEFtb3VudAUDbmlsBQNTRVAAE2tleVRvdGFsQXNzZXRBbW91bnQJALkJAgkAzAgCAgIlcwkAzAgCAhB0b3RhbEFzc2V0QW1vdW50BQNuaWwFA1NFUAEPa2V5VXNlckxwQW1vdW50AQt1c2VyQWRkcmVzcwkAuQkCCQDMCAICBCVzJXMJAMwIAgIMdXNlckxwQW1vdW50CQDMCAIFC3VzZXJBZGRyZXNzBQNuaWwFA1NFUAEaa2V5VXNlclRvdGFsQXNzZXRXaXRoZHJhd24BC3VzZXJBZGRyZXNzCQC5CQIJAMwIAgIEJXMlcwkAzAgCAhN0b3RhbEFzc2V0V2l0aGRyYXduCQDMCAIFC3VzZXJBZGRyZXNzBQNuaWwFA1NFUAEXa2V5VXNlclRvdGFsQXNzZXRTdGFrZWQBC3VzZXJBZGRyZXNzCQC5CQIJAMwIAgIEJXMlcwkAzAgCAhB0b3RhbEFzc2V0U3Rha2VkCQDMCAIFC3VzZXJBZGRyZXNzBQNuaWwFA1NFUAEKa2V5SGlzdG9yeQMEdHlwZQt1c2VyQWRkcmVzcwR0eElkCQC5CQIJAMwIAgIGJXMlcyVzCQDMCAIFBHR5cGUJAMwIAgULdXNlckFkZHJlc3MJAMwIAgkA2AQBBQR0eElkBQNuaWwFA1NFUAENZm9ybWF0SGlzdG9yeQQLdG90YWxQcm9maXQFcHJpY2UQdG90YWxBc3NldEFtb3VudA10b3RhbExwQW1vdW50CQC5CQIJAMwIAgIEJWQlZAkAzAgCCQCkAwEFC3RvdGFsUHJvZml0CQDMCAIJAKYDAQUFcHJpY2UJAMwIAgkApAMBBRB0b3RhbEFzc2V0QW1vdW50CQDMCAIJAKQDAQUNdG90YWxMcEFtb3VudAUDbmlsBQNTRVAADXRvdGFsTHBBbW91bnQJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwUQa2V5VG90YWxMcEFtb3VudAAAABB0b3RhbEFzc2V0QW1vdW50CQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMFE2tleVRvdGFsQXNzZXRBbW91bnQAAAANYXNzZXRJZFN0cmluZwkBC3ZhbHVlT3JFbHNlAgkAnQgCBQR0aGlzBQprZXlBc3NldElkAgVXQVZFUwAMYXNzZXRJZEJ5dGVzAwkAAAIFDWFzc2V0SWRTdHJpbmcCBVdBVkVTBQR1bml0CQDZBAEFDWFzc2V0SWRTdHJpbmcAFmVtaXNzaW9uUGVyaW9kSW5CbG9ja3MJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwUZa2V5RW1pc3Npb25QZXJpb2RJbkJsb2NrcwUNQkxPQ0tTX0lOX0RBWQARZW1pc3Npb25QZXJQZXJpb2QJAGgCCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMFE2tleUVtaXNzaW9uUGVyQmxvY2sAAAUWZW1pc3Npb25QZXJpb2RJbkJsb2NrcwAPQURNSU5fTElTVF9TSVpFAAUABlFVT1JVTQADABFUWElEX0JZVEVTX0xFTkdUSAAgARhrZXlBbGxvd2VkVHhJZFZvdGVQcmVmaXgBBHR4SWQJALkJAgkAzAgCAgYlcyVzJXMJAMwIAgIJYWxsb3dUeElkCQDMCAIFBHR4SWQFA25pbAUDU0VQARBrZXlGdWxsQWRtaW5Wb3RlAgZwcmVmaXgMYWRtaW5BZGRyZXNzCQC5CQIJAMwIAgUGcHJlZml4CQDMCAIFDGFkbWluQWRkcmVzcwUDbmlsBQNTRVABE2tleUFkbWluQWRkcmVzc0xpc3QACQC5CQIJAMwIAgICJXMJAMwIAgIQYWRtaW5BZGRyZXNzTGlzdAUDbmlsBQNTRVABDmtleUFsbG93ZWRUeElkAAkAuQkCCQDMCAICAiVzCQDMCAICBHR4SWQFA25pbAUDU0VQAQxnZXRBZG1pblZvdGUCBnByZWZpeAVhZG1pbgQHdm90ZUtleQkBEGtleUZ1bGxBZG1pblZvdGUCBQZwcmVmaXgFBWFkbWluCQELdmFsdWVPckVsc2UCCQCfCAEFB3ZvdGVLZXkAAAENZ2V0QWRtaW5zTGlzdAAEByRtYXRjaDAJAJ0IAgUEdGhpcwkBE2tleUFkbWluQWRkcmVzc0xpc3QAAwkAAQIFByRtYXRjaDACBlN0cmluZwQBcwUHJG1hdGNoMAkAtQkCBQFzBQNTRVAFA25pbAENaXNJbkFkbWluTGlzdAEHYWRkcmVzcwkBD2NvbnRhaW5zRWxlbWVudAIJAQ1nZXRBZG1pbnNMaXN0AAUHYWRkcmVzcwESZ2VuVm90ZXNLZXlzSGVscGVyAgFhDGFkbWluQWRkcmVzcwQLJHQwMzA0NTMwNjkFAWEEBnJlc3VsdAgFCyR0MDMwNDUzMDY5Al8xBAZwcmVmaXgIBQskdDAzMDQ1MzA2OQJfMgkAlAoCCQDNCAIFBnJlc3VsdAkBEGtleUZ1bGxBZG1pblZvdGUCBQZwcmVmaXgFDGFkbWluQWRkcmVzcwUGcHJlZml4AQxnZW5Wb3Rlc0tleXMBCWtleVByZWZpeAQJYWRtaW5MaXN0CQETa2V5QWRtaW5BZGRyZXNzTGlzdAAECyR0MDMyMTYzMzAwCgACJGwJAQ1nZXRBZG1pbnNMaXN0AAoAAiRzCQCQAwEFAiRsCgAFJGFjYzAJAJQKAgUDbmlsBQlrZXlQcmVmaXgKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBEmdlblZvdGVzS2V5c0hlbHBlcgIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQITTGlzdCBzaXplIGV4Y2VlZHMgNQkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUEBnJlc3VsdAgFCyR0MDMyMTYzMzAwAl8xBAZwcmVmaXgIBQskdDAzMjE2MzMwMAJfMgUGcmVzdWx0ARBjb3VudFZvdGVzSGVscGVyAgZyZXN1bHQHdm90ZUtleQkAZAIFBnJlc3VsdAkBC3ZhbHVlT3JFbHNlAgkAnwgBBQd2b3RlS2V5AAABCmNvdW50Vm90ZXMBBnByZWZpeAQFdm90ZXMJAQxnZW5Wb3Rlc0tleXMBBQZwcmVmaXgKAAIkbAUFdm90ZXMKAAIkcwkAkAMBBQIkbAoABSRhY2MwAAAKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBEGNvdW50Vm90ZXNIZWxwZXICBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECE0xpc3Qgc2l6ZSBleGNlZWRzIDUJAQUkZjBfMgIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIFBSRhY2MwAAAAAQACAAMABAAFARBjbGVhclZvdGVzSGVscGVyAgZyZXN1bHQDa2V5CQDNCAIFBnJlc3VsdAkBC0RlbGV0ZUVudHJ5AQUDa2V5ARNnZXRDbGVhclZvdGVFbnRyaWVzAQZwcmVmaXgEBXZvdGVzCQEMZ2VuVm90ZXNLZXlzAQUGcHJlZml4CgACJGwFBXZvdGVzCgACJHMJAJADAQUCJGwKAAUkYWNjMAUDbmlsCgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJARBjbGVhclZvdGVzSGVscGVyAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhNMaXN0IHNpemUgZXhjZWVkcyA1CQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQEMdm90ZUlOVEVSTkFMBBNjYWxsZXJBZGRyZXNzU3RyaW5nCWtleVByZWZpeAhtaW5Wb3Rlcwp2b3RlUmVzdWx0BAd2b3RlS2V5CQEQa2V5RnVsbEFkbWluVm90ZQIFCWtleVByZWZpeAUTY2FsbGVyQWRkcmVzc1N0cmluZwQQYWRtaW5DdXJyZW50Vm90ZQkBDGdldEFkbWluVm90ZQIFCWtleVByZWZpeAUTY2FsbGVyQWRkcmVzc1N0cmluZwQDZXJyAwkBASEBCQENaXNJbkFkbWluTGlzdAEFE2NhbGxlckFkZHJlc3NTdHJpbmcJAQh0aHJvd0VycgEJAKwCAgkArAICAglBZGRyZXNzOiAFE2NhbGxlckFkZHJlc3NTdHJpbmcCEiBub3QgaW4gQWRtaW4gbGlzdAMJAAACBRBhZG1pbkN1cnJlbnRWb3RlAAEJAQh0aHJvd0VycgEJAKwCAgUHdm90ZUtleQISIHlvdSBhbHJlYWR5IHZvdGVkBQR1bml0AwkAAAIFA2VycgUDZXJyBAV2b3RlcwkBCmNvdW50Vm90ZXMBBQlrZXlQcmVmaXgDCQBnAgkAZAIFBXZvdGVzAAEFCG1pblZvdGVzBBBjbGVhclZvdGVFbnRyaWVzCQETZ2V0Q2xlYXJWb3RlRW50cmllcwEFCWtleVByZWZpeAkAzggCBRBjbGVhclZvdGVFbnRyaWVzBQp2b3RlUmVzdWx0CQDMCAIJAQxJbnRlZ2VyRW50cnkCBQd2b3RlS2V5AAEFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgEYY2FsY1RvdGFsUHJvZml0Rm9ySGVpZ2h0AQFoBApzdGFydEJsb2NrCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMFDWtleVN0YXJ0QmxvY2sAAAQLc3RhcnRQZXJpb2QJAGsDBQpzdGFydEJsb2NrAAEFFmVtaXNzaW9uUGVyaW9kSW5CbG9ja3MEDmVsYXBzZWRQZXJpb2RzCQBlAgkAaQIFAWgFFmVtaXNzaW9uUGVyaW9kSW5CbG9ja3MFC3N0YXJ0UGVyaW9kCQCWAwEJAMwIAgAACQDMCAIJAGgCBRFlbWlzc2lvblBlclBlcmlvZAUOZWxhcHNlZFBlcmlvZHMFA25pbAEPY2FsY1RvdGFsUHJvZml0AAkBGGNhbGNUb3RhbFByb2ZpdEZvckhlaWdodAEFBmhlaWdodAErZ2V0VG90YWxBc3NldEFtb3VudFdpdGhQcm9maXRPck1heEF2YWlsYWJsZQAEGnRvdGFsQXNzZXRBbW91bnRXaXRoUHJvZml0CQBkAgUQdG90YWxBc3NldEFtb3VudAkBD2NhbGNUb3RhbFByb2ZpdAAEC3RvdGFsQW1vdW50BAckbWF0Y2gwBQxhc3NldElkQnl0ZXMDCQABAgUHJG1hdGNoMAIEVW5pdAQBdQUHJG1hdGNoMAkAlwMBCQDMCAIFGnRvdGFsQXNzZXRBbW91bnRXaXRoUHJvZml0CQDMCAIICQDvBwEFBHRoaXMJYXZhaWxhYmxlBQNuaWwDCQABAgUHJG1hdGNoMAIKQnl0ZVZlY3RvcgQBYgUHJG1hdGNoMAkAlwMBCQDMCAIFGnRvdGFsQXNzZXRBbW91bnRXaXRoUHJvZml0CQDMCAIJAPAHAgUEdGhpcwUBYgUDbmlsCQACAQILTWF0Y2ggZXJyb3IDCQAAAgUNdG90YWxMcEFtb3VudAAAAAAFC3RvdGFsQW1vdW50AQ9nZXRDdXJyZW50UHJpY2UAAwkBAiE9AgUNdG90YWxMcEFtb3VudAAACQC8AgMJALYCAQkBK2dldFRvdGFsQXNzZXRBbW91bnRXaXRoUHJvZml0T3JNYXhBdmFpbGFibGUABQ1zY2FsZTE4QmlnSW50CQC2AgEFDXRvdGFsTHBBbW91bnQFDXNjYWxlMThCaWdJbnQBD2dldFVzZXJMcEFtb3VudAELdXNlckFkZHJlc3MJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwkBD2tleVVzZXJMcEFtb3VudAEFC3VzZXJBZGRyZXNzAAABIGdldFVzZXJBdmFpbGFibGVBc3NldHNUb1dpdGhkcmF3AQt1c2VyQWRkcmVzcwQMdXNlckxwQW1vdW50CQEPZ2V0VXNlckxwQW1vdW50AQULdXNlckFkZHJlc3MEHHVzZXJBdmFpbGFibGVBc3NldFRvV2l0aGRyYXcJAKADAQkAvAIDCQC2AgEFDHVzZXJMcEFtb3VudAkBD2dldEN1cnJlbnRQcmljZQAFDXNjYWxlMThCaWdJbnQDCQBmAgAABRx1c2VyQXZhaWxhYmxlQXNzZXRUb1dpdGhkcmF3AAAFHHVzZXJBdmFpbGFibGVBc3NldFRvV2l0aGRyYXcBD2dldFN0YWtlQWN0aW9ucwIBaQt1c2VyQWRkcmVzcwQGY2hlY2tzCQDMCAIDCQAAAgkAkAMBCAUBaQhwYXltZW50cwABBgkBCHRocm93RXJyAQIYc2hvdWxkIGluY2x1ZGUgMSBwYXltZW50CQDMCAIDCQAAAggJAJEDAggFAWkIcGF5bWVudHMAAAdhc3NldElkBQxhc3NldElkQnl0ZXMGCQEIdGhyb3dFcnIBCQCsAgICFXBheW1lbnQgc2hvdWxkIGJlIGluIAUNYXNzZXRJZFN0cmluZwkAzAgCAwkAZgIICQCRAwIIBQFpCHBheW1lbnRzAAAGYW1vdW50AAAGAidwYXltZW50IGFtb3VudCBzaG91bGQgYmUgZ3JlYXRlciB0aGFuIDAFA25pbAMJAAACBQZjaGVja3MFBmNoZWNrcwQNcGF5bWVudEFtb3VudAgJAJEDAggFAWkIcGF5bWVudHMAAAZhbW91bnQED3BheW1lbnRMcEFtb3VudAkAoAMBCQC8AgMJALYCAQUNcGF5bWVudEFtb3VudAUNc2NhbGUxOEJpZ0ludAkBD2dldEN1cnJlbnRQcmljZQAEDHVzZXJMcEFtb3VudAkBD2dldFVzZXJMcEFtb3VudAEFC3VzZXJBZGRyZXNzBBV1c2VyVG90YWxTdGFrZWRBbW91bnQJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwkBF2tleVVzZXJUb3RhbEFzc2V0U3Rha2VkAQULdXNlckFkZHJlc3MAAAQQbmV3VG90YWxMcEFtb3VudAkAZAIFDXRvdGFsTHBBbW91bnQFD3BheW1lbnRMcEFtb3VudAQTbmV3VG90YWxBc3NldEFtb3VudAkAZAIFEHRvdGFsQXNzZXRBbW91bnQFDXBheW1lbnRBbW91bnQED25ld1VzZXJMcEFtb3VudAkAZAIFDHVzZXJMcEFtb3VudAUPcGF5bWVudExwQW1vdW50BBhuZXdVc2VyVG90YWxTdGFrZWRBbW91bnQJAGQCBRV1c2VyVG90YWxTdGFrZWRBbW91bnQFDXBheW1lbnRBbW91bnQEF3VwZGF0ZVN0YXJ0SGVpZ2h0QWN0aW9uAwkAAAIFDXRvdGFsTHBBbW91bnQAAAkAzAgCCQEMSW50ZWdlckVudHJ5AgUNa2V5U3RhcnRCbG9jawUGaGVpZ2h0BQNuaWwFA25pbAkAzggCCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQprZXlIaXN0b3J5AwIFc3Rha2UFC3VzZXJBZGRyZXNzCAUBaQ10cmFuc2FjdGlvbklkCQENZm9ybWF0SGlzdG9yeQQJAQ9jYWxjVG90YWxQcm9maXQACQEPZ2V0Q3VycmVudFByaWNlAAUNdG90YWxMcEFtb3VudAUQdG90YWxBc3NldEFtb3VudAkAzAgCCQEMSW50ZWdlckVudHJ5AgUQa2V5VG90YWxMcEFtb3VudAUQbmV3VG90YWxMcEFtb3VudAkAzAgCCQEMSW50ZWdlckVudHJ5AgUTa2V5VG90YWxBc3NldEFtb3VudAUTbmV3VG90YWxBc3NldEFtb3VudAkAzAgCCQEMSW50ZWdlckVudHJ5AgkBD2tleVVzZXJMcEFtb3VudAEFC3VzZXJBZGRyZXNzBQ9uZXdVc2VyTHBBbW91bnQJAMwIAgkBDEludGVnZXJFbnRyeQIJARdrZXlVc2VyVG90YWxBc3NldFN0YWtlZAEFC3VzZXJBZGRyZXNzBRhuZXdVc2VyVG90YWxTdGFrZWRBbW91bnQFA25pbAUXdXBkYXRlU3RhcnRIZWlnaHRBY3Rpb24JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BEmdldFdpdGhkcmF3QWN0aW9ucwIBaRVscEFzc2V0V2l0aGRyYXdBbW91bnQEC3VzZXJBZGRyZXNzCQClCAEIBQFpBmNhbGxlcgQMdXNlckxwQW1vdW50CQEPZ2V0VXNlckxwQW1vdW50AQULdXNlckFkZHJlc3MEBWNoZWNrCQDMCAIDCQBmAgUVbHBBc3NldFdpdGhkcmF3QW1vdW50AAAGCQEIdGhyb3dFcnIBAh9MUCBhbW91bnQgc2hvdWxkIGJlIG1vcmUgdGhhbiAwCQDMCAIDCQBnAgUMdXNlckxwQW1vdW50BRVscEFzc2V0V2l0aGRyYXdBbW91bnQGCQEIdGhyb3dFcnIBCQCsAgIJAKwCAgIoY2Fubm90IHdpdGhkcmF3IG1vcmUgdGhhbiBhdmFpbGFibGUgTFAgKAkApAMBBQx1c2VyTHBBbW91bnQCASkFA25pbAMJAAACBQVjaGVjawUFY2hlY2sED25ld1VzZXJMcEFtb3VudAkAZQIFDHVzZXJMcEFtb3VudAUVbHBBc3NldFdpdGhkcmF3QW1vdW50BBN3aXRoZHJhd0Fzc2V0QW1vdW50CQCgAwEJALwCAwkAtgIBBRVscEFzc2V0V2l0aGRyYXdBbW91bnQJAQ9nZXRDdXJyZW50UHJpY2UABQ1zY2FsZTE4QmlnSW50BBBuZXdUb3RhbExwQW1vdW50CQBlAgUNdG90YWxMcEFtb3VudAUVbHBBc3NldFdpdGhkcmF3QW1vdW50BBNuZXdUb3RhbEFzc2V0QW1vdW50CQCgAwEJALwCAwkAtgIBBRBuZXdUb3RhbExwQW1vdW50CQEPZ2V0Q3VycmVudFByaWNlAAUNc2NhbGUxOEJpZ0ludAQXdXNlclRvdGFsQXNzZXRXaXRoZHJhd24JAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwkBGmtleVVzZXJUb3RhbEFzc2V0V2l0aGRyYXduAQULdXNlckFkZHJlc3MAAAQabmV3VXNlclRvdGFsQXNzZXRXaXRoZHJhd24JAGQCBRd1c2VyVG90YWxBc3NldFdpdGhkcmF3bgUTd2l0aGRyYXdBc3NldEFtb3VudAkAzAgCCQELU3RyaW5nRW50cnkCCQEKa2V5SGlzdG9yeQMCCHdpdGhkcmF3BQt1c2VyQWRkcmVzcwgFAWkNdHJhbnNhY3Rpb25JZAkBDWZvcm1hdEhpc3RvcnkECQEPY2FsY1RvdGFsUHJvZml0AAkBD2dldEN1cnJlbnRQcmljZQAFEHRvdGFsQXNzZXRBbW91bnQFDXRvdGFsTHBBbW91bnQJAMwIAgkBDEludGVnZXJFbnRyeQIFEGtleVRvdGFsTHBBbW91bnQFEG5ld1RvdGFsTHBBbW91bnQJAMwIAgkBDEludGVnZXJFbnRyeQIFE2tleVRvdGFsQXNzZXRBbW91bnQFE25ld1RvdGFsQXNzZXRBbW91bnQJAMwIAgkBDEludGVnZXJFbnRyeQIJAQ9rZXlVc2VyTHBBbW91bnQBBQt1c2VyQWRkcmVzcwUPbmV3VXNlckxwQW1vdW50CQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEaa2V5VXNlclRvdGFsQXNzZXRXaXRoZHJhd24BBQt1c2VyQWRkcmVzcwUabmV3VXNlclRvdGFsQXNzZXRXaXRoZHJhd24JAMwIAgkBDEludGVnZXJFbnRyeQIFDWtleVN0YXJ0QmxvY2sFBmhlaWdodAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCAUBaQZjYWxsZXIFE3dpdGhkcmF3QXNzZXRBbW91bnQFDGFzc2V0SWRCeXRlcwUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCAFpARNzZXRFbWlzc2lvblBlckJsb2NrARBlbWlzc2lvblBlckJsb2NrBAVjaGVjawkAzAgCAwkAAAIIBQFpBmNhbGxlcgUEdGhpcwYJAQh0aHJvd0VycgECEXBlcm1pc3Npb24gZGVuaWVkBQNuaWwDCQAAAgUFY2hlY2sFBWNoZWNrCQDMCAIJAQxJbnRlZ2VyRW50cnkCBRNrZXlUb3RhbEFzc2V0QW1vdW50CQErZ2V0VG90YWxBc3NldEFtb3VudFdpdGhQcm9maXRPck1heEF2YWlsYWJsZQAJAMwIAgkBDEludGVnZXJFbnRyeQIFDWtleVN0YXJ0QmxvY2sFBmhlaWdodAkAzAgCCQEMSW50ZWdlckVudHJ5AgUTa2V5RW1pc3Npb25QZXJCbG9jawkAlgMBCQDMCAIAAAkAzAgCBRBlbWlzc2lvblBlckJsb2NrBQNuaWwFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpARlzZXRFbWlzc2lvblBlcmlvZEluQmxvY2tzAQFwBAVjaGVjawkAzAgCAwkAZgIFAXAAAAYJAQh0aHJvd0VycgECKGVtaXNzaW9uIHBlcmlvZCBzaG91bGQgYmUgZ3JlYXRlciB0aGFuIDAJAMwIAgMJAAACCAUBaQZjYWxsZXIFBHRoaXMGCQEIdGhyb3dFcnIBAhFwZXJtaXNzaW9uIGRlbmllZAUDbmlsAwkAAAIFBWNoZWNrBQVjaGVjawkAzAgCCQEMSW50ZWdlckVudHJ5AgUTa2V5VG90YWxBc3NldEFtb3VudAkBK2dldFRvdGFsQXNzZXRBbW91bnRXaXRoUHJvZml0T3JNYXhBdmFpbGFibGUACQDMCAIJAQxJbnRlZ2VyRW50cnkCBQ1rZXlTdGFydEJsb2NrBQZoZWlnaHQJAMwIAgkBDEludGVnZXJFbnRyeQIFGWtleUVtaXNzaW9uUGVyaW9kSW5CbG9ja3MFAXAFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpAQVzdGFrZQAJAQ9nZXRTdGFrZUFjdGlvbnMCBQFpCQClCAEIBQFpBmNhbGxlcgFpAQhzdGFrZUZvcgELdXNlckFkZHJlc3MEBWNoZWNrCQDMCAIDCQAAAgkAyAEBCQDZBAEFC3VzZXJBZGRyZXNzBRJBRERSRVNTX0JZVEVTX1NJWkUGCQEIdGhyb3dFcnIBAhRhZGRyZXNzIGlzIG5vdCB2YWxpZAUDbmlsAwkAAAIFBWNoZWNrBQVjaGVjawkBD2dldFN0YWtlQWN0aW9ucwIFAWkFC3VzZXJBZGRyZXNzCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBCHdpdGhkcmF3ARN3aXRoZHJhd0Fzc2V0QW1vdW50BAt1c2VyQWRkcmVzcwkApQgBCAUBaQZjYWxsZXIEDHVzZXJMcEFtb3VudAkBD2dldFVzZXJMcEFtb3VudAEFC3VzZXJBZGRyZXNzBBJscEFtb3VudFRvV2l0aGRyYXcJAKADAQkAvAIDCQC2AgEFE3dpdGhkcmF3QXNzZXRBbW91bnQFDXNjYWxlMThCaWdJbnQJAQ9nZXRDdXJyZW50UHJpY2UABBx1c2VyQXZhaWxhYmxlQXNzZXRUb1dpdGhkcmF3CQEgZ2V0VXNlckF2YWlsYWJsZUFzc2V0c1RvV2l0aGRyYXcBBQt1c2VyQWRkcmVzcwQWbWluV2l0aGRyYXdBc3NldEFtb3VudAkAoAMBCQC9AgQJAQ9nZXRDdXJyZW50UHJpY2UACQC2AgEAAQUNc2NhbGUxOEJpZ0ludAUHQ0VJTElORwQFY2hlY2sJAMwIAgMJAGYCBRN3aXRoZHJhd0Fzc2V0QW1vdW50AAAGCQEIdGhyb3dFcnIBAiV3aXRoZHJhdyBhbW91bnQgc2hvdWxkIGJlIG1vcmUgdGhhbiAwCQDMCAIDCQBnAgUcdXNlckF2YWlsYWJsZUFzc2V0VG9XaXRoZHJhdwUTd2l0aGRyYXdBc3NldEFtb3VudAYJAQh0aHJvd0VycgEJAKwCAgkArAICAiVjYW5ub3Qgd2l0aGRyYXcgbW9yZSB0aGFuIGF2YWlsYWJsZSAoCQCkAwEFHHVzZXJBdmFpbGFibGVBc3NldFRvV2l0aGRyYXcCASkJAMwIAgMJAGcCBRN3aXRoZHJhd0Fzc2V0QW1vdW50BRZtaW5XaXRoZHJhd0Fzc2V0QW1vdW50BgkBCHRocm93RXJyAQkArAICCQCsAgICJHdpdGhkcmF3IGFtb3VudCBpcyB0b28gc21hbGwuIE1pbjogKAkApAMBBRZtaW5XaXRoZHJhd0Fzc2V0QW1vdW50AgEpBQNuaWwDCQAAAgUFY2hlY2sFBWNoZWNrCQESZ2V0V2l0aGRyYXdBY3Rpb25zAgUBaQUSbHBBbW91bnRUb1dpdGhkcmF3CQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBFWdldFVzZXJBc3NldHNSRUFET05MWQELdXNlckFkZHJlc3MEDHVzZXJMcEFtb3VudAkBD2dldFVzZXJMcEFtb3VudAEFC3VzZXJBZGRyZXNzBBx1c2VyQXZhaWxhYmxlQXNzZXRUb1dpdGhkcmF3CQEgZ2V0VXNlckF2YWlsYWJsZUFzc2V0c1RvV2l0aGRyYXcBBQt1c2VyQWRkcmVzcwQVdXNlclRvdGFsU3Rha2VkQW1vdW50CQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMJARdrZXlVc2VyVG90YWxBc3NldFN0YWtlZAEFC3VzZXJBZGRyZXNzAAAEF3VzZXJUb3RhbEFzc2V0V2l0aGRyYXduCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMJARprZXlVc2VyVG90YWxBc3NldFdpdGhkcmF3bgEFC3VzZXJBZGRyZXNzAAAJAJQKAgUDbmlsCQCXCgUFDHVzZXJMcEFtb3VudAUcdXNlckF2YWlsYWJsZUFzc2V0VG9XaXRoZHJhdwkBD2dldEN1cnJlbnRQcmljZQAFFXVzZXJUb3RhbFN0YWtlZEFtb3VudAUXdXNlclRvdGFsQXNzZXRXaXRoZHJhd24BaQEWZ2V0VG90YWxBc3NldHNSRUFET05MWQAJAJQKAgUDbmlsCQCVCgMFDXRvdGFsTHBBbW91bnQJAStnZXRUb3RhbEFzc2V0QW1vdW50V2l0aFByb2ZpdE9yTWF4QXZhaWxhYmxlAAkBD2dldEN1cnJlbnRQcmljZQABaQELdm90ZUZvclR4SWQBBHR4SWQEE2NhbGxlckFkZHJlc3NTdHJpbmcJANgEAQgIBQFpBmNhbGxlcgVieXRlcwQJa2V5UHJlZml4CQEYa2V5QWxsb3dlZFR4SWRWb3RlUHJlZml4AQUEdHhJZAQGcmVzdWx0CQDMCAIJAQtTdHJpbmdFbnRyeQIJAQ5rZXlBbGxvd2VkVHhJZAAFBHR4SWQFA25pbAQRYWxsb3dlZFR4SWRPcHRpb24JAJ0IAgUEdGhpcwkBDmtleUFsbG93ZWRUeElkAAQDZXJyCQDMCAIDCQAAAgkAyAEBCQDZBAEFBHR4SWQFEVRYSURfQllURVNfTEVOR1RIBgkBCHRocm93RXJyAQkArAICBQR0eElkAhIgaXMgbm90IHZhbGlkIHR4SWQJAMwIAgMDCQAAAgURYWxsb3dlZFR4SWRPcHRpb24FBHVuaXQGCQECIT0CCQEFdmFsdWUBBRFhbGxvd2VkVHhJZE9wdGlvbgUEdHhJZAYJAQh0aHJvd0VycgEJAKwCAgUEdHhJZAITIGlzIGFscmVhZHkgYWxsb3dlZAUDbmlsAwkAAAIFA2VycgUDZXJyCQEMdm90ZUlOVEVSTkFMBAUTY2FsbGVyQWRkcmVzc1N0cmluZwUJa2V5UHJlZml4BQZRVU9SVU0FBnJlc3VsdAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgECdHgBBnZlcmlmeQAECGJ5QWRtaW5zCQAAAggFAnR4AmlkCQDZBAEJAQt2YWx1ZU9yRWxzZQIJAJ0IAgUEdGhpcwkBDmtleUFsbG93ZWRUeElkAAIABAdieU93bmVyAwkAZwIJAJADAQkBDWdldEFkbWluc0xpc3QABQZRVU9SVU0HCQD0AwMIBQJ0eAlib2R5Qnl0ZXMJAJEDAggFAnR4BnByb29mcwAACAUCdHgPc2VuZGVyUHVibGljS2V5AwUIYnlBZG1pbnMGBQdieU93bmVy6WuAuQ==", "height": 2685664, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: DcnuuFfkHwSRmQJz4b88tRFeeyGNbMcGQ8Tetory6KJB Next: 3Mk3GZdAp7L5vW9WodjjFpTP2VJHSpFwgU4YZ4Tccwgh Diff:
Old | New | Differences | |
---|---|---|---|
301 | 301 | ||
302 | 302 | ||
303 | 303 | @Callable(aP) | |
304 | + | func setEmissionPeriodInBlocks (bg) = { | |
305 | + | let bb = [if ((bg > 0)) | |
306 | + | then true | |
307 | + | else h("emission period should be greater than 0"), if ((aP.caller == this)) | |
308 | + | then true | |
309 | + | else h("permission denied")] | |
310 | + | if ((bb == bb)) | |
311 | + | then [IntegerEntry(o, aE()), IntegerEntry(m, height), IntegerEntry(l, bg)] | |
312 | + | else throw("Strict value is not equal to itself.") | |
313 | + | } | |
314 | + | ||
315 | + | ||
316 | + | ||
317 | + | @Callable(aP) | |
304 | 318 | func stake () = aO(aP, toString(aP.caller)) | |
305 | 319 | ||
306 | 320 | ||
321 | 335 | func withdraw (bc) = { | |
322 | 336 | let q = toString(aP.caller) | |
323 | 337 | let aM = aK(q) | |
324 | - | let | |
338 | + | let bh = toInt(fraction(toBigInt(bc), e, aJ())) | |
325 | 339 | let aN = aL(q) | |
326 | - | let | |
340 | + | let bi = toInt(fraction(aJ(), toBigInt(1), e, CEILING)) | |
327 | 341 | let bb = [if ((bc > 0)) | |
328 | 342 | then true | |
329 | 343 | else h("withdraw amount should be more than 0"), if ((aN >= bc)) | |
330 | 344 | then true | |
331 | - | else h((("cannot withdraw more than available (" + toString(aN)) + ")")), if ((bc >= | |
345 | + | else h((("cannot withdraw more than available (" + toString(aN)) + ")")), if ((bc >= bi)) | |
332 | 346 | then true | |
333 | - | else h((("withdraw amount is too small. Min: (" + toString( | |
347 | + | else h((("withdraw amount is too small. Min: (" + toString(bi)) + ")"))] | |
334 | 348 | if ((bb == bb)) | |
335 | - | then aZ(aP, | |
349 | + | then aZ(aP, bh) | |
336 | 350 | else throw("Strict value is not equal to itself.") | |
337 | 351 | } | |
338 | 352 | ||
359 | 373 | let as = toBase58String(aP.caller.bytes) | |
360 | 374 | let ab = I(v) | |
361 | 375 | let Z = [StringEntry(N(), v)] | |
362 | - | let | |
376 | + | let bj = getString(this, N()) | |
363 | 377 | let aw = [if ((size(fromBase58String(v)) == H)) | |
364 | 378 | then true | |
365 | - | else h((v + " is not valid txId")), if (if (( | |
379 | + | else h((v + " is not valid txId")), if (if ((bj == unit)) | |
366 | 380 | then true | |
367 | - | else (value( | |
381 | + | else (value(bj) != v)) | |
368 | 382 | then true | |
369 | 383 | else h((v + " is already allowed"))] | |
370 | 384 | if ((aw == aw)) | |
373 | 387 | } | |
374 | 388 | ||
375 | 389 | ||
376 | - | @Verifier( | |
377 | - | func | |
378 | - | let | |
379 | - | let | |
390 | + | @Verifier(bk) | |
391 | + | func bl () = { | |
392 | + | let bm = (bk.id == fromBase58String(valueOrElse(getString(this, N()), ""))) | |
393 | + | let bn = if ((size(R()) >= G)) | |
380 | 394 | then false | |
381 | - | else sigVerify( | |
382 | - | if ( | |
395 | + | else sigVerify(bk.bodyBytes, bk.proofs[0], bk.senderPublicKey) | |
396 | + | if (bm) | |
383 | 397 | then true | |
384 | - | else | |
398 | + | else bn | |
385 | 399 | } | |
386 | 400 |
Old | New | Differences | |
---|---|---|---|
1 | 1 | {-# STDLIB_VERSION 6 #-} | |
2 | 2 | {-# SCRIPT_TYPE ACCOUNT #-} | |
3 | 3 | {-# CONTENT_TYPE DAPP #-} | |
4 | 4 | let a = "l2mp_staking.ride" | |
5 | 5 | ||
6 | 6 | let b = "__" | |
7 | 7 | ||
8 | 8 | let c = 100000000 | |
9 | 9 | ||
10 | 10 | let d = 1000000000000000000 | |
11 | 11 | ||
12 | 12 | let e = toBigInt(d) | |
13 | 13 | ||
14 | 14 | let f = 26 | |
15 | 15 | ||
16 | 16 | let g = 1440 | |
17 | 17 | ||
18 | 18 | func h (i) = throw(((a + ": ") + i)) | |
19 | 19 | ||
20 | 20 | ||
21 | 21 | let j = makeString(["%s", "assetId"], b) | |
22 | 22 | ||
23 | 23 | let k = makeString(["%s", "emissionPerBlock"], b) | |
24 | 24 | ||
25 | 25 | let l = makeString(["%s", "emissionPeriodInBlocks"], b) | |
26 | 26 | ||
27 | 27 | let m = makeString(["%s", "startBlock"], b) | |
28 | 28 | ||
29 | 29 | let n = makeString(["%s", "totalLpAmount"], b) | |
30 | 30 | ||
31 | 31 | let o = makeString(["%s", "totalAssetAmount"], b) | |
32 | 32 | ||
33 | 33 | func p (q) = makeString(["%s%s", "userLpAmount", q], b) | |
34 | 34 | ||
35 | 35 | ||
36 | 36 | func r (q) = makeString(["%s%s", "totalAssetWithdrawn", q], b) | |
37 | 37 | ||
38 | 38 | ||
39 | 39 | func s (q) = makeString(["%s%s", "totalAssetStaked", q], b) | |
40 | 40 | ||
41 | 41 | ||
42 | 42 | func t (u,q,v) = makeString(["%s%s%s", u, q, toBase58String(v)], b) | |
43 | 43 | ||
44 | 44 | ||
45 | 45 | func w (x,y,z,A) = makeString(["%d%d", toString(x), toString(y), toString(z), toString(A)], b) | |
46 | 46 | ||
47 | 47 | ||
48 | 48 | let A = valueOrElse(getInteger(this, n), 0) | |
49 | 49 | ||
50 | 50 | let z = valueOrElse(getInteger(this, o), 0) | |
51 | 51 | ||
52 | 52 | let B = valueOrElse(getString(this, j), "WAVES") | |
53 | 53 | ||
54 | 54 | let C = if ((B == "WAVES")) | |
55 | 55 | then unit | |
56 | 56 | else fromBase58String(B) | |
57 | 57 | ||
58 | 58 | let D = valueOrElse(getInteger(this, l), g) | |
59 | 59 | ||
60 | 60 | let E = (valueOrElse(getInteger(this, k), 0) * D) | |
61 | 61 | ||
62 | 62 | let F = 5 | |
63 | 63 | ||
64 | 64 | let G = 3 | |
65 | 65 | ||
66 | 66 | let H = 32 | |
67 | 67 | ||
68 | 68 | func I (v) = makeString(["%s%s%s", "allowTxId", v], b) | |
69 | 69 | ||
70 | 70 | ||
71 | 71 | func J (K,L) = makeString([K, L], b) | |
72 | 72 | ||
73 | 73 | ||
74 | 74 | func M () = makeString(["%s", "adminAddressList"], b) | |
75 | 75 | ||
76 | 76 | ||
77 | 77 | func N () = makeString(["%s", "txId"], b) | |
78 | 78 | ||
79 | 79 | ||
80 | 80 | func O (K,P) = { | |
81 | 81 | let Q = J(K, P) | |
82 | 82 | valueOrElse(getInteger(Q), 0) | |
83 | 83 | } | |
84 | 84 | ||
85 | 85 | ||
86 | 86 | func R () = { | |
87 | 87 | let S = getString(this, M()) | |
88 | 88 | if ($isInstanceOf(S, "String")) | |
89 | 89 | then { | |
90 | 90 | let T = S | |
91 | 91 | split(T, b) | |
92 | 92 | } | |
93 | 93 | else nil | |
94 | 94 | } | |
95 | 95 | ||
96 | 96 | ||
97 | 97 | func U (V) = containsElement(R(), V) | |
98 | 98 | ||
99 | 99 | ||
100 | 100 | func W (X,L) = { | |
101 | 101 | let Y = X | |
102 | 102 | let Z = Y._1 | |
103 | 103 | let K = Y._2 | |
104 | 104 | $Tuple2((Z :+ J(K, L)), K) | |
105 | 105 | } | |
106 | 106 | ||
107 | 107 | ||
108 | 108 | func aa (ab) = { | |
109 | 109 | let ac = M() | |
110 | 110 | let ad = { | |
111 | 111 | let ae = R() | |
112 | 112 | let af = size(ae) | |
113 | 113 | let ag = $Tuple2(nil, ab) | |
114 | 114 | func ah (ai,aj) = if ((aj >= af)) | |
115 | 115 | then ai | |
116 | 116 | else W(ai, ae[aj]) | |
117 | 117 | ||
118 | 118 | func ak (ai,aj) = if ((aj >= af)) | |
119 | 119 | then ai | |
120 | 120 | else throw("List size exceeds 5") | |
121 | 121 | ||
122 | 122 | ak(ah(ah(ah(ah(ah(ag, 0), 1), 2), 3), 4), 5) | |
123 | 123 | } | |
124 | 124 | let Z = ad._1 | |
125 | 125 | let K = ad._2 | |
126 | 126 | Z | |
127 | 127 | } | |
128 | 128 | ||
129 | 129 | ||
130 | 130 | func al (Z,Q) = (Z + valueOrElse(getInteger(Q), 0)) | |
131 | 131 | ||
132 | 132 | ||
133 | 133 | func am (K) = { | |
134 | 134 | let an = aa(K) | |
135 | 135 | let ae = an | |
136 | 136 | let af = size(ae) | |
137 | 137 | let ag = 0 | |
138 | 138 | func ah (ai,aj) = if ((aj >= af)) | |
139 | 139 | then ai | |
140 | 140 | else al(ai, ae[aj]) | |
141 | 141 | ||
142 | 142 | func ak (ai,aj) = if ((aj >= af)) | |
143 | 143 | then ai | |
144 | 144 | else throw("List size exceeds 5") | |
145 | 145 | ||
146 | 146 | ak(ah(ah(ah(ah(ah(ag, 0), 1), 2), 3), 4), 5) | |
147 | 147 | } | |
148 | 148 | ||
149 | 149 | ||
150 | 150 | func ao (Z,ap) = (Z :+ DeleteEntry(ap)) | |
151 | 151 | ||
152 | 152 | ||
153 | 153 | func aq (K) = { | |
154 | 154 | let an = aa(K) | |
155 | 155 | let ae = an | |
156 | 156 | let af = size(ae) | |
157 | 157 | let ag = nil | |
158 | 158 | func ah (ai,aj) = if ((aj >= af)) | |
159 | 159 | then ai | |
160 | 160 | else ao(ai, ae[aj]) | |
161 | 161 | ||
162 | 162 | func ak (ai,aj) = if ((aj >= af)) | |
163 | 163 | then ai | |
164 | 164 | else throw("List size exceeds 5") | |
165 | 165 | ||
166 | 166 | ak(ah(ah(ah(ah(ah(ag, 0), 1), 2), 3), 4), 5) | |
167 | 167 | } | |
168 | 168 | ||
169 | 169 | ||
170 | 170 | func ar (as,ab,at,au) = { | |
171 | 171 | let Q = J(ab, as) | |
172 | 172 | let av = O(ab, as) | |
173 | 173 | let aw = if (!(U(as))) | |
174 | 174 | then h((("Address: " + as) + " not in Admin list")) | |
175 | 175 | else if ((av == 1)) | |
176 | 176 | then h((Q + " you already voted")) | |
177 | 177 | else unit | |
178 | 178 | if ((aw == aw)) | |
179 | 179 | then { | |
180 | 180 | let an = am(ab) | |
181 | 181 | if (((an + 1) >= at)) | |
182 | 182 | then { | |
183 | 183 | let ax = aq(ab) | |
184 | 184 | (ax ++ au) | |
185 | 185 | } | |
186 | 186 | else [IntegerEntry(Q, 1)] | |
187 | 187 | } | |
188 | 188 | else throw("Strict value is not equal to itself.") | |
189 | 189 | } | |
190 | 190 | ||
191 | 191 | ||
192 | 192 | func ay (az) = { | |
193 | 193 | let aA = valueOrElse(getInteger(this, m), 0) | |
194 | 194 | let aB = fraction(aA, 1, D) | |
195 | 195 | let aC = ((az / D) - aB) | |
196 | 196 | max([0, (E * aC)]) | |
197 | 197 | } | |
198 | 198 | ||
199 | 199 | ||
200 | 200 | func aD () = ay(height) | |
201 | 201 | ||
202 | 202 | ||
203 | 203 | func aE () = { | |
204 | 204 | let aF = (z + aD()) | |
205 | 205 | let aG = { | |
206 | 206 | let S = C | |
207 | 207 | if ($isInstanceOf(S, "Unit")) | |
208 | 208 | then { | |
209 | 209 | let aH = S | |
210 | 210 | min([aF, wavesBalance(this).available]) | |
211 | 211 | } | |
212 | 212 | else if ($isInstanceOf(S, "ByteVector")) | |
213 | 213 | then { | |
214 | 214 | let aI = S | |
215 | 215 | min([aF, assetBalance(this, aI)]) | |
216 | 216 | } | |
217 | 217 | else throw("Match error") | |
218 | 218 | } | |
219 | 219 | if ((A == 0)) | |
220 | 220 | then 0 | |
221 | 221 | else aG | |
222 | 222 | } | |
223 | 223 | ||
224 | 224 | ||
225 | 225 | func aJ () = if ((A != 0)) | |
226 | 226 | then fraction(toBigInt(aE()), e, toBigInt(A)) | |
227 | 227 | else e | |
228 | 228 | ||
229 | 229 | ||
230 | 230 | func aK (q) = valueOrElse(getInteger(this, p(q)), 0) | |
231 | 231 | ||
232 | 232 | ||
233 | 233 | func aL (q) = { | |
234 | 234 | let aM = aK(q) | |
235 | 235 | let aN = toInt(fraction(toBigInt(aM), aJ(), e)) | |
236 | 236 | if ((0 > aN)) | |
237 | 237 | then 0 | |
238 | 238 | else aN | |
239 | 239 | } | |
240 | 240 | ||
241 | 241 | ||
242 | 242 | func aO (aP,q) = { | |
243 | 243 | let aQ = [if ((size(aP.payments) == 1)) | |
244 | 244 | then true | |
245 | 245 | else h("should include 1 payment"), if ((aP.payments[0].assetId == C)) | |
246 | 246 | then true | |
247 | 247 | else h(("payment should be in " + B)), if ((aP.payments[0].amount > 0)) | |
248 | 248 | then true | |
249 | 249 | else "payment amount should be greater than 0"] | |
250 | 250 | if ((aQ == aQ)) | |
251 | 251 | then { | |
252 | 252 | let aR = aP.payments[0].amount | |
253 | 253 | let aS = toInt(fraction(toBigInt(aR), e, aJ())) | |
254 | 254 | let aM = aK(q) | |
255 | 255 | let aT = valueOrElse(getInteger(this, s(q)), 0) | |
256 | 256 | let aU = (A + aS) | |
257 | 257 | let aV = (z + aR) | |
258 | 258 | let aW = (aM + aS) | |
259 | 259 | let aX = (aT + aR) | |
260 | 260 | let aY = if ((A == 0)) | |
261 | 261 | then [IntegerEntry(m, height)] | |
262 | 262 | else nil | |
263 | 263 | ([StringEntry(t("stake", q, aP.transactionId), w(aD(), aJ(), A, z)), IntegerEntry(n, aU), IntegerEntry(o, aV), IntegerEntry(p(q), aW), IntegerEntry(s(q), aX)] ++ aY) | |
264 | 264 | } | |
265 | 265 | else throw("Strict value is not equal to itself.") | |
266 | 266 | } | |
267 | 267 | ||
268 | 268 | ||
269 | 269 | func aZ (aP,ba) = { | |
270 | 270 | let q = toString(aP.caller) | |
271 | 271 | let aM = aK(q) | |
272 | 272 | let bb = [if ((ba > 0)) | |
273 | 273 | then true | |
274 | 274 | else h("LP amount should be more than 0"), if ((aM >= ba)) | |
275 | 275 | then true | |
276 | 276 | else h((("cannot withdraw more than available LP (" + toString(aM)) + ")"))] | |
277 | 277 | if ((bb == bb)) | |
278 | 278 | then { | |
279 | 279 | let aW = (aM - ba) | |
280 | 280 | let bc = toInt(fraction(toBigInt(ba), aJ(), e)) | |
281 | 281 | let aU = (A - ba) | |
282 | 282 | let aV = toInt(fraction(toBigInt(aU), aJ(), e)) | |
283 | 283 | let bd = valueOrElse(getInteger(this, r(q)), 0) | |
284 | 284 | let be = (bd + bc) | |
285 | 285 | [StringEntry(t("withdraw", q, aP.transactionId), w(aD(), aJ(), z, A)), IntegerEntry(n, aU), IntegerEntry(o, aV), IntegerEntry(p(q), aW), IntegerEntry(r(q), be), IntegerEntry(m, height), ScriptTransfer(aP.caller, bc, C)] | |
286 | 286 | } | |
287 | 287 | else throw("Strict value is not equal to itself.") | |
288 | 288 | } | |
289 | 289 | ||
290 | 290 | ||
291 | 291 | @Callable(aP) | |
292 | 292 | func setEmissionPerBlock (bf) = { | |
293 | 293 | let bb = [if ((aP.caller == this)) | |
294 | 294 | then true | |
295 | 295 | else h("permission denied")] | |
296 | 296 | if ((bb == bb)) | |
297 | 297 | then [IntegerEntry(o, aE()), IntegerEntry(m, height), IntegerEntry(k, max([0, bf]))] | |
298 | 298 | else throw("Strict value is not equal to itself.") | |
299 | 299 | } | |
300 | 300 | ||
301 | 301 | ||
302 | 302 | ||
303 | 303 | @Callable(aP) | |
304 | + | func setEmissionPeriodInBlocks (bg) = { | |
305 | + | let bb = [if ((bg > 0)) | |
306 | + | then true | |
307 | + | else h("emission period should be greater than 0"), if ((aP.caller == this)) | |
308 | + | then true | |
309 | + | else h("permission denied")] | |
310 | + | if ((bb == bb)) | |
311 | + | then [IntegerEntry(o, aE()), IntegerEntry(m, height), IntegerEntry(l, bg)] | |
312 | + | else throw("Strict value is not equal to itself.") | |
313 | + | } | |
314 | + | ||
315 | + | ||
316 | + | ||
317 | + | @Callable(aP) | |
304 | 318 | func stake () = aO(aP, toString(aP.caller)) | |
305 | 319 | ||
306 | 320 | ||
307 | 321 | ||
308 | 322 | @Callable(aP) | |
309 | 323 | func stakeFor (q) = { | |
310 | 324 | let bb = [if ((size(fromBase58String(q)) == f)) | |
311 | 325 | then true | |
312 | 326 | else h("address is not valid")] | |
313 | 327 | if ((bb == bb)) | |
314 | 328 | then aO(aP, q) | |
315 | 329 | else throw("Strict value is not equal to itself.") | |
316 | 330 | } | |
317 | 331 | ||
318 | 332 | ||
319 | 333 | ||
320 | 334 | @Callable(aP) | |
321 | 335 | func withdraw (bc) = { | |
322 | 336 | let q = toString(aP.caller) | |
323 | 337 | let aM = aK(q) | |
324 | - | let | |
338 | + | let bh = toInt(fraction(toBigInt(bc), e, aJ())) | |
325 | 339 | let aN = aL(q) | |
326 | - | let | |
340 | + | let bi = toInt(fraction(aJ(), toBigInt(1), e, CEILING)) | |
327 | 341 | let bb = [if ((bc > 0)) | |
328 | 342 | then true | |
329 | 343 | else h("withdraw amount should be more than 0"), if ((aN >= bc)) | |
330 | 344 | then true | |
331 | - | else h((("cannot withdraw more than available (" + toString(aN)) + ")")), if ((bc >= | |
345 | + | else h((("cannot withdraw more than available (" + toString(aN)) + ")")), if ((bc >= bi)) | |
332 | 346 | then true | |
333 | - | else h((("withdraw amount is too small. Min: (" + toString( | |
347 | + | else h((("withdraw amount is too small. Min: (" + toString(bi)) + ")"))] | |
334 | 348 | if ((bb == bb)) | |
335 | - | then aZ(aP, | |
349 | + | then aZ(aP, bh) | |
336 | 350 | else throw("Strict value is not equal to itself.") | |
337 | 351 | } | |
338 | 352 | ||
339 | 353 | ||
340 | 354 | ||
341 | 355 | @Callable(aP) | |
342 | 356 | func getUserAssetsREADONLY (q) = { | |
343 | 357 | let aM = aK(q) | |
344 | 358 | let aN = aL(q) | |
345 | 359 | let aT = valueOrElse(getInteger(this, s(q)), 0) | |
346 | 360 | let bd = valueOrElse(getInteger(this, r(q)), 0) | |
347 | 361 | $Tuple2(nil, $Tuple5(aM, aN, aJ(), aT, bd)) | |
348 | 362 | } | |
349 | 363 | ||
350 | 364 | ||
351 | 365 | ||
352 | 366 | @Callable(aP) | |
353 | 367 | func getTotalAssetsREADONLY () = $Tuple2(nil, $Tuple3(A, aE(), aJ())) | |
354 | 368 | ||
355 | 369 | ||
356 | 370 | ||
357 | 371 | @Callable(aP) | |
358 | 372 | func voteForTxId (v) = { | |
359 | 373 | let as = toBase58String(aP.caller.bytes) | |
360 | 374 | let ab = I(v) | |
361 | 375 | let Z = [StringEntry(N(), v)] | |
362 | - | let | |
376 | + | let bj = getString(this, N()) | |
363 | 377 | let aw = [if ((size(fromBase58String(v)) == H)) | |
364 | 378 | then true | |
365 | - | else h((v + " is not valid txId")), if (if (( | |
379 | + | else h((v + " is not valid txId")), if (if ((bj == unit)) | |
366 | 380 | then true | |
367 | - | else (value( | |
381 | + | else (value(bj) != v)) | |
368 | 382 | then true | |
369 | 383 | else h((v + " is already allowed"))] | |
370 | 384 | if ((aw == aw)) | |
371 | 385 | then ar(as, ab, G, Z) | |
372 | 386 | else throw("Strict value is not equal to itself.") | |
373 | 387 | } | |
374 | 388 | ||
375 | 389 | ||
376 | - | @Verifier( | |
377 | - | func | |
378 | - | let | |
379 | - | let | |
390 | + | @Verifier(bk) | |
391 | + | func bl () = { | |
392 | + | let bm = (bk.id == fromBase58String(valueOrElse(getString(this, N()), ""))) | |
393 | + | let bn = if ((size(R()) >= G)) | |
380 | 394 | then false | |
381 | - | else sigVerify( | |
382 | - | if ( | |
395 | + | else sigVerify(bk.bodyBytes, bk.proofs[0], bk.senderPublicKey) | |
396 | + | if (bm) | |
383 | 397 | then true | |
384 | - | else | |
398 | + | else bn | |
385 | 399 | } | |
386 | 400 |
github/deemru/w8io/026f985 46.05 ms ◑