tx · 2hvpRtLcsvB57XUFC6wYKFowwNZqVHLe35uHramRPHAG

3N2wgB3PUJouKCSe9dULpKp5J3XGTmrDZZX:  -0.01000000 Waves

2023.07.23 12:19 [2678307] smart account 3N2wgB3PUJouKCSe9dULpKp5J3XGTmrDZZX > SELF 0.00000000 Waves

{ "type": 13, "id": "2hvpRtLcsvB57XUFC6wYKFowwNZqVHLe35uHramRPHAG", "fee": 1000000, "feeAssetId": null, "timestamp": 1690103987220, "version": 2, "chainId": 84, "sender": "3N2wgB3PUJouKCSe9dULpKp5J3XGTmrDZZX", "senderPublicKey": "8tfd6Swf6ctN44RdASetvkFbWtHbPdfspowjcrVQ4iV8", "proofs": [ "41nGbSkC8zYBP7oUeugouGuYN1UtX2RonEDb3DsNvrcnaKG53WjQT6C67oSsvBLHdRhSRXJu3pCzodHUpVferQvR" ], "script": "base64:BgIgCAISBgoECAgBARIECgIBBBIDCgEBEgQKAgEEEgMKAQETAANTRVACAl9fARBibG9ja0hlaWdodEVycm9yAAkAAgECL1RoZSBibG9jaydzIGhlaWdodCBpcyB0b28gYmlnIGZvciB0aGlzIHByb3Bvc2FsARBhbHJlYWR5Vm90ZUVycm9yAAkAAgECFllvdSBoYXZlIGFscmVhZHkgdm90ZWQBC25vVm90ZUVycm9yAAkAAgECGllvdSBoYXZlIG5vdCBhbHJlYWR5IHZvdGVkARJnd3hDb250cmFjdEFkZHJlc3MACQC5CQIJAMwIAgICJXMJAMwIAgISZ3d4Q29udHJhY3RBZGRyZXNzBQNuaWwFA1NFUAEPa2V5Q3VycmVudEluZGV4AAkAuQkCCQDMCAICAiVzCQDMCAICDGN1cnJlbnRJbmRleAUDbmlsBQNTRVABD2tleVByb3Bvc2FsSW5mbwEGbnVtYmVyCQC5CQIJAMwIAgIEJXMlZAkAzAgCAgxwcm9wb3NhbEluZm8JAMwIAgkApAMBBQZudW1iZXIFA25pbAUDU0VQARZrZXlQcm9wb3NhbERlc2NyaXB0aW9uAQZudW1iZXIJALkJAgkAzAgCAgQlcyVkCQDMCAICE3Byb3Bvc2FsRGVzY3JpcHRpb24JAMwIAgkApAMBBQZudW1iZXIFA25pbAUDU0VQARVrZXlVc2VyVm90ZU9uUHJvcG9zYWwCBm51bWJlcgR1c2VyCQC5CQIJAMwIAgIGJXMlZCVzCQDMCAICEnVzZXJWb3RlT25Qcm9wb3NhbAkAzAgCCQCkAwEFBm51bWJlcgkAzAgCBQR1c2VyBQNuaWwFA1NFUAETa2V5TWFuYWdlclB1YmxpY0tleQACFCVzX19tYW5hZ2VyUHVibGljS2V5ARZrZXlNYW5hZ2VyVmF1bHRBZGRyZXNzAAIXJXNfX21hbmFnZXJWYXVsdEFkZHJlc3MBD2dldEN1cnJlbnRJbmRleAAJARFAZXh0ck5hdGl2ZSgxMDUwKQIFBHRoaXMJAQ9rZXlDdXJyZW50SW5kZXgAARxnZXRNYW5hZ2VyVmF1bHRBZGRyZXNzT3JUaGlzAAQHJG1hdGNoMAkAoggBCQEWa2V5TWFuYWdlclZhdWx0QWRkcmVzcwADCQABAgUHJG1hdGNoMAIGU3RyaW5nBAFzBQckbWF0Y2gwCQERQGV4dHJOYXRpdmUoMTA2MikBBQFzBQR0aGlzARJmb3JtYXRQcm9wb3NhbEluZm8FBG5hbWUDZW5kDHF1b3J1bU51bWJlcg1wb3NpdGl2ZVZvdGVzDW5lZ2F0aXZlVm90ZXMJALkJAgkAzAgCAgolZCVkJWQlZCVkCQDMCAIFBG5hbWUJAMwIAgUDZW5kCQDMCAIFDHF1b3J1bU51bWJlcgkAzAgCBQ1wb3NpdGl2ZVZvdGVzCQDMCAIFDW5lZ2F0aXZlVm90ZXMFA25pbAUDU0VQARhmb3JtYXRVc2VyVm90ZU9uUHJvcG9zYWwCBHZvdGUJZ3d4TnVtYmVyCQC5CQIJAMwIAgIEJWQlZAkAzAgCBQR2b3RlCQDMCAIFCWd3eE51bWJlcgUDbmlsBQNTRVABBWFzSW50AQN2YWwEByRtYXRjaDAFA3ZhbAMJAAECBQckbWF0Y2gwAgNJbnQEBnZhbEludAUHJG1hdGNoMAUGdmFsSW50CQACAQIVZmFpbCB0byBjYXN0IGludG8gSW50ARZtYW5hZ2VyUHVibGljS2V5T3JVbml0AAQTbWFuYWdlclZhdWx0QWRkcmVzcwkBHGdldE1hbmFnZXJWYXVsdEFkZHJlc3NPclRoaXMABAckbWF0Y2gwCQCdCAIFE21hbmFnZXJWYXVsdEFkZHJlc3MJARNrZXlNYW5hZ2VyUHVibGljS2V5AAMJAAECBQckbWF0Y2gwAgZTdHJpbmcEAXMFByRtYXRjaDAJANkEAQUBcwMJAAECBQckbWF0Y2gwAgRVbml0BQR1bml0CQACAQILTWF0Y2ggZXJyb3IBCWlzTWFuYWdlcgEBaQQHJG1hdGNoMAkBFm1hbmFnZXJQdWJsaWNLZXlPclVuaXQAAwkAAQIFByRtYXRjaDACCkJ5dGVWZWN0b3IEAnBrBQckbWF0Y2gwCQAAAggFAWkPY2FsbGVyUHVibGljS2V5BQJwawMJAAECBQckbWF0Y2gwAgRVbml0CQAAAggFAWkGY2FsbGVyBQR0aGlzCQACAQILTWF0Y2ggZXJyb3IBC211c3RNYW5hZ2VyAQFpAwkBCWlzTWFuYWdlcgEFAWkGCQACAQIRcGVybWlzc2lvbiBkZW5pZWQFAWkBDHN0YXJ0TmV3Vm90ZQQEbmFtZQtkZXNjcmlwdGlvbhBleHBpcmF0aW9uSGVpZ2h0DHF1b3J1bU51bWJlcgQGY2hlY2tzCQDMCAIJAQttdXN0TWFuYWdlcgEFAWkFA25pbAMJAAACBQZjaGVja3MFBmNoZWNrcwQIdGhlSW5kZXgJAQ9nZXRDdXJyZW50SW5kZXgACQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEPa2V5Q3VycmVudEluZGV4AAkAZAIFCHRoZUluZGV4AAEJAMwIAgkBC1N0cmluZ0VudHJ5AgkBD2tleVByb3Bvc2FsSW5mbwEFCHRoZUluZGV4CQESZm9ybWF0UHJvcG9zYWxJbmZvBQUEbmFtZQkApAMBCQBkAggFCWxhc3RCbG9jawZoZWlnaHQFEGV4cGlyYXRpb25IZWlnaHQJAKQDAQUMcXVvcnVtTnVtYmVyAgEwAgEwCQDMCAIJAQtTdHJpbmdFbnRyeQIJARZrZXlQcm9wb3NhbERlc2NyaXB0aW9uAQUIdGhlSW5kZXgFC2Rlc2NyaXB0aW9uBQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEHdm90ZUZvcgINcHJvcG9zYWxJbmRleAZjaG9pY2UEBUVNUFRZAgVFTVBUWQQIdm90ZUluZm8JAQt2YWx1ZU9yRWxzZQIJAJ0IAgUEdGhpcwkBD2tleVByb3Bvc2FsSW5mbwEFDXByb3Bvc2FsSW5kZXgFBUVNUFRZBA12b3RlSW5mb0FycmF5CQC1CQIFCHZvdGVJbmZvBQNTRVAEDHVzZXJWb3RlSW5mbwkBC3ZhbHVlT3JFbHNlAgkAnQgCBQR0aGlzCQEVa2V5VXNlclZvdGVPblByb3Bvc2FsAgUNcHJvcG9zYWxJbmRleAkApQgBCAUBaQZjYWxsZXIFBUVNUFRZBAZjaGVja3MJAMwIAgMJAQIhPQIFCHZvdGVJbmZvBQVFTVBUWQYJAAIBAgxObyBzdWNoIHZvdGUJAMwIAgMJAGYCCQEFdmFsdWUBCQC2CQEJAJEDAgUNdm90ZUluZm9BcnJheQACCAUJbGFzdEJsb2NrBmhlaWdodAYJARBibG9ja0hlaWdodEVycm9yAAkAzAgCAwkAAAIFDHVzZXJWb3RlSW5mbwUFRU1QVFkGCQEQYWxyZWFkeVZvdGVFcnJvcgAFA25pbAMJAAACBQZjaGVja3MFBmNoZWNrcwQJZ3d4TnVtYmVyCQEFYXNJbnQBCQD8BwQJARFAZXh0ck5hdGl2ZSgxMDYyKQEJARFAZXh0ck5hdGl2ZSgxMDU4KQEJARJnd3hDb250cmFjdEFkZHJlc3MAAiBnZXRVc2VyR3d4QW1vdW50QXRIZWlnaHRSRUFET05MWQkAzAgCCQClCAEIBQFpBmNhbGxlcgkAzAgCCQEFdmFsdWUBCQC2CQEJAJEDAgUNdm90ZUluZm9BcnJheQACBQNuaWwFA25pbAQLJHQwMzUxMDQ1NDYDBQZjaG9pY2UEB2FjdGlvbjEJAQtTdHJpbmdFbnRyeQIJAQ9rZXlQcm9wb3NhbEluZm8BBQ1wcm9wb3NhbEluZGV4CQESZm9ybWF0UHJvcG9zYWxJbmZvBQkAkQMCBQ12b3RlSW5mb0FycmF5AAEJAJEDAgUNdm90ZUluZm9BcnJheQACCQCRAwIFDXZvdGVJbmZvQXJyYXkAAwkApAMBCQBkAgkBBXZhbHVlAQkAtgkBCQCRAwIFDXZvdGVJbmZvQXJyYXkABAUJZ3d4TnVtYmVyCQCRAwIFDXZvdGVJbmZvQXJyYXkABQQHYWN0aW9uMgkBC1N0cmluZ0VudHJ5AgkBFWtleVVzZXJWb3RlT25Qcm9wb3NhbAIFDXByb3Bvc2FsSW5kZXgJAKUIAQgFAWkGY2FsbGVyCQEYZm9ybWF0VXNlclZvdGVPblByb3Bvc2FsAgIBMQkApAMBBQlnd3hOdW1iZXIJAJQKAgUHYWN0aW9uMQUHYWN0aW9uMgQHYWN0aW9uMQkBC1N0cmluZ0VudHJ5AgkBD2tleVByb3Bvc2FsSW5mbwEFDXByb3Bvc2FsSW5kZXgJARJmb3JtYXRQcm9wb3NhbEluZm8FCQCRAwIFDXZvdGVJbmZvQXJyYXkAAQkAkQMCBQ12b3RlSW5mb0FycmF5AAIJAJEDAgUNdm90ZUluZm9BcnJheQADCQCRAwIFDXZvdGVJbmZvQXJyYXkABAkApAMBCQBkAgkBBXZhbHVlAQkAtgkBCQCRAwIFDXZvdGVJbmZvQXJyYXkABQUJZ3d4TnVtYmVyBAdhY3Rpb24yCQELU3RyaW5nRW50cnkCCQEVa2V5VXNlclZvdGVPblByb3Bvc2FsAgUNcHJvcG9zYWxJbmRleAkApQgBCAUBaQZjYWxsZXIJARhmb3JtYXRVc2VyVm90ZU9uUHJvcG9zYWwCAgEwCQCkAwEFCWd3eE51bWJlcgkAlAoCBQdhY3Rpb24xBQdhY3Rpb24yBAdhY3Rpb24xCAULJHQwMzUxMDQ1NDYCXzEEB2FjdGlvbjIIBQskdDAzNTEwNDU0NgJfMgkAzAgCBQdhY3Rpb24xCQDMCAIFB2FjdGlvbjIFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpAQpkZWxldGVWb3RlAQ1wcm9wb3NhbEluZGV4BAVFTVBUWQIFRU1QVFkECHZvdGVJbmZvCQELdmFsdWVPckVsc2UCCQCdCAIFBHRoaXMJAQ9rZXlQcm9wb3NhbEluZm8BBQ1wcm9wb3NhbEluZGV4BQVFTVBUWQQNdm90ZUluZm9BcnJheQkAtQkCBQh2b3RlSW5mbwUDU0VQBAx1c2VyVm90ZUluZm8JAQt2YWx1ZU9yRWxzZQIJAJ0IAgUEdGhpcwkBFWtleVVzZXJWb3RlT25Qcm9wb3NhbAIFDXByb3Bvc2FsSW5kZXgJAKUIAQgFAWkGY2FsbGVyBQVFTVBUWQQRdXNlclZvdGVJbmZvQXJyYXkJALUJAgUMdXNlclZvdGVJbmZvBQNTRVAEBmNoZWNrcwkAzAgCAwkBAiE9AgUIdm90ZUluZm8FBUVNUFRZBgkAAgECDE5vIHN1Y2ggdm90ZQkAzAgCAwkAZgIJAQV2YWx1ZQEJALYJAQkAkQMCBQ12b3RlSW5mb0FycmF5AAIIBQlsYXN0QmxvY2sGaGVpZ2h0BgkBEGJsb2NrSGVpZ2h0RXJyb3IACQDMCAIDCQECIT0CBQx1c2VyVm90ZUluZm8FBUVNUFRZBgkBC25vVm90ZUVycm9yAAUDbmlsAwkAAAIFBmNoZWNrcwUGY2hlY2tzBAZhY3Rpb24DCQAAAgkAkQMCBRF1c2VyVm90ZUluZm9BcnJheQABAgExCQELU3RyaW5nRW50cnkCCQEPa2V5UHJvcG9zYWxJbmZvAQUNcHJvcG9zYWxJbmRleAkBEmZvcm1hdFByb3Bvc2FsSW5mbwUJAJEDAgUNdm90ZUluZm9BcnJheQABCQCRAwIFDXZvdGVJbmZvQXJyYXkAAgkAkQMCBQ12b3RlSW5mb0FycmF5AAMJAKQDAQkAZQIJAQV2YWx1ZQEJALYJAQkAkQMCBQ12b3RlSW5mb0FycmF5AAQJAQV2YWx1ZQEJALYJAQkAkQMCBRF1c2VyVm90ZUluZm9BcnJheQACCQCRAwIFDXZvdGVJbmZvQXJyYXkABQkBC1N0cmluZ0VudHJ5AgkBD2tleVByb3Bvc2FsSW5mbwEFDXByb3Bvc2FsSW5kZXgJARJmb3JtYXRQcm9wb3NhbEluZm8FCQCRAwIFDXZvdGVJbmZvQXJyYXkAAQkAkQMCBQ12b3RlSW5mb0FycmF5AAIJAJEDAgUNdm90ZUluZm9BcnJheQADCQCRAwIFDXZvdGVJbmZvQXJyYXkABAkApAMBCQBlAgkBBXZhbHVlAQkAtgkBCQCRAwIFDXZvdGVJbmZvQXJyYXkABQkBBXZhbHVlAQkAtgkBCQCRAwIFEXVzZXJWb3RlSW5mb0FycmF5AAIJAMwIAgUGYWN0aW9uCQDMCAIJAQtEZWxldGVFbnRyeQEJARVrZXlVc2VyVm90ZU9uUHJvcG9zYWwCBQ1wcm9wb3NhbEluZGV4CQClCAEIBQFpBmNhbGxlcgUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBCmNoYW5nZVZvdGUCDXByb3Bvc2FsSW5kZXgGY2hvaWNlBAVFTVBUWQIFRU1QVFkECHZvdGVJbmZvCQELdmFsdWVPckVsc2UCCQCdCAIFBHRoaXMJAQ9rZXlQcm9wb3NhbEluZm8BBQ1wcm9wb3NhbEluZGV4BQVFTVBUWQQNdm90ZUluZm9BcnJheQkAtQkCBQh2b3RlSW5mbwUDU0VQBAx1c2VyVm90ZUluZm8JAQt2YWx1ZU9yRWxzZQIJAJ0IAgUEdGhpcwkBFWtleVVzZXJWb3RlT25Qcm9wb3NhbAIFDXByb3Bvc2FsSW5kZXgJAKUIAQgFAWkGY2FsbGVyBQVFTVBUWQQRdXNlclZvdGVJbmZvQXJyYXkJALUJAgUMdXNlclZvdGVJbmZvBQNTRVAEBmNoZWNrcwkAzAgCAwkBAiE9AgUIdm90ZUluZm8FBUVNUFRZBgkAAgECDE5vIHN1Y2ggdm90ZQkAzAgCAwkAZgIJAQV2YWx1ZQEJALYJAQkAkQMCBQ12b3RlSW5mb0FycmF5AAIIBQlsYXN0QmxvY2sGaGVpZ2h0BgkBEGJsb2NrSGVpZ2h0RXJyb3IACQDMCAIDCQECIT0CBQx1c2VyVm90ZUluZm8FBUVNUFRZBgkBC25vVm90ZUVycm9yAAUDbmlsAwkAAAIFBmNoZWNrcwUGY2hlY2tzBAlnd3hOdW1iZXIJAQVhc0ludAEJAPwHBAkBEUBleHRyTmF0aXZlKDEwNjIpAQkBEUBleHRyTmF0aXZlKDEwNTgpAQkBEmd3eENvbnRyYWN0QWRkcmVzcwACIGdldFVzZXJHd3hBbW91bnRBdEhlaWdodFJFQURPTkxZCQDMCAIJAKUIAQgFAWkGY2FsbGVyCQDMCAIJAQV2YWx1ZQEJALYJAQkAkQMCBQ12b3RlSW5mb0FycmF5AAMFA25pbAUDbmlsBAskdDA2NzE0NzA1MwMFBmNob2ljZQQJZm9yTnVtYmVyBQlnd3hOdW1iZXIEDWFnYWluc3ROdW1iZXIAAAQNY2hvaWNlSW50ZWdlcgABCQCVCgMFCWZvck51bWJlcgUNYWdhaW5zdE51bWJlcgUNY2hvaWNlSW50ZWdlcgQJZm9yTnVtYmVyAAAEDWFnYWluc3ROdW1iZXIFCWd3eE51bWJlcgQNY2hvaWNlSW50ZWdlcgAACQCVCgMFCWZvck51bWJlcgUNYWdhaW5zdE51bWJlcgUNY2hvaWNlSW50ZWdlcgQMdXNlclBvd2VyRm9yCAULJHQwNjcxNDcwNTMCXzEEEHVzZXJQb3dlckFnYWluc3QIBQskdDA2NzE0NzA1MwJfMgQJY2hvaWNlSW50CAULJHQwNjcxNDcwNTMCXzMEBmFjdGlvbgMJAAACCQCRAwIFEXVzZXJWb3RlSW5mb0FycmF5AAECATEJAQtTdHJpbmdFbnRyeQIJAQ9rZXlQcm9wb3NhbEluZm8BBQ1wcm9wb3NhbEluZGV4CQESZm9ybWF0UHJvcG9zYWxJbmZvBQkAkQMCBQ12b3RlSW5mb0FycmF5AAEJAJEDAgUNdm90ZUluZm9BcnJheQACCQCRAwIFDXZvdGVJbmZvQXJyYXkAAwkApAMBCQBkAgkAZQIJAQV2YWx1ZQEJALYJAQkAkQMCBQ12b3RlSW5mb0FycmF5AAQJAQV2YWx1ZQEJALYJAQkAkQMCBRF1c2VyVm90ZUluZm9BcnJheQACBQx1c2VyUG93ZXJGb3IJAKQDAQkAZAIJAQV2YWx1ZQEJALYJAQkAkQMCBQ12b3RlSW5mb0FycmF5AAUFEHVzZXJQb3dlckFnYWluc3QJAQtTdHJpbmdFbnRyeQIJAQ9rZXlQcm9wb3NhbEluZm8BBQ1wcm9wb3NhbEluZGV4CQESZm9ybWF0UHJvcG9zYWxJbmZvBQkAkQMCBQ12b3RlSW5mb0FycmF5AAEJAJEDAgUNdm90ZUluZm9BcnJheQACCQCRAwIFDXZvdGVJbmZvQXJyYXkAAwkApAMBCQBkAgkBBXZhbHVlAQkAtgkBCQCRAwIFDXZvdGVJbmZvQXJyYXkABAUMdXNlclBvd2VyRm9yCQCkAwEJAGQCCQBlAgkBBXZhbHVlAQkAtgkBCQCRAwIFDXZvdGVJbmZvQXJyYXkABQkBBXZhbHVlAQkAtgkBCQCRAwIFEXVzZXJWb3RlSW5mb0FycmF5AAIFEHVzZXJQb3dlckFnYWluc3QJAMwIAgUGYWN0aW9uCQDMCAIJAQtTdHJpbmdFbnRyeQIJARVrZXlVc2VyVm90ZU9uUHJvcG9zYWwCBQ1wcm9wb3NhbEluZGV4CQClCAEIBQFpBmNhbGxlcgkBGGZvcm1hdFVzZXJWb3RlT25Qcm9wb3NhbAIJAKQDAQUJY2hvaWNlSW50CQCkAwEFCWd3eE51bWJlcgUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBEWdldFJlc3VsdFJFQURPTkxZAQ1wcm9wb3NhbEluZGV4BAVFTVBUWQIFRU1QVFkECHZvdGVJbmZvCQELdmFsdWVPckVsc2UCCQCdCAIFBHRoaXMJAQ9rZXlQcm9wb3NhbEluZm8BBQ1wcm9wb3NhbEluZGV4BQVFTVBUWQQNdm90ZUluZm9BcnJheQkAtQkCBQh2b3RlSW5mbwUDU0VQBAZjaGVja3MJAMwIAgMJAQIhPQIFCHZvdGVJbmZvBQVFTVBUWQYJAAIBAgxObyBzdWNoIHZvdGUFA25pbAMJAAACBQZjaGVja3MFBmNoZWNrcwQMcXVvcnVtTnVtYmVyCQCRAwIFDXZvdGVJbmZvQXJyYXkAAwQNcG9zaXRpdmVWb3RlcwkAkQMCBQ12b3RlSW5mb0FycmF5AAQEDW5lZ2F0aXZlVm90ZXMJAJEDAgUNdm90ZUluZm9BcnJheQAFCQCUCgIFA25pbAkAzAgCBQ1wb3NpdGl2ZVZvdGVzCQDMCAIFDW5lZ2F0aXZlVm90ZXMJAMwIAgUMcXVvcnVtTnVtYmVyBQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BAnR4AQZ2ZXJpZnkABA90YXJnZXRQdWJsaWNLZXkEByRtYXRjaDAJARZtYW5hZ2VyUHVibGljS2V5T3JVbml0AAMJAAECBQckbWF0Y2gwAgpCeXRlVmVjdG9yBAJwawUHJG1hdGNoMAUCcGsDCQABAgUHJG1hdGNoMAIEVW5pdAgFAnR4D3NlbmRlclB1YmxpY0tleQkAAgECC01hdGNoIGVycm9yCQD0AwMIBQJ0eAlib2R5Qnl0ZXMJAJEDAggFAnR4BnByb29mcwAABQ90YXJnZXRQdWJsaWNLZXlkaMfV", "height": 2678307, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: C2aEZn7CGoJPrSqtkCQ9FPyRcXE8WZqUhhS8j1nrEQaL Next: none Diff:
OldNewDifferences
9191 }
9292
9393
94-@Callable(G)
95-func startNewVote (s,I,J,u) = {
96- let K = 0
97-[IntegerEntry(f(), 0), IntegerEntry(f(), (K + 1)), StringEntry(g(K), r(s, toString((lastBlock.height + J)), toString(u), "0", "0")), StringEntry(i(K), I)]
98- }
99-
94+func I (G) = if (F(G))
95+ then true
96+ else throw("permission denied")
10097
10198
10299 @Callable(G)
103-func voteFor (L,M) = {
104- let N = "EMPTY"
105- let O = valueOrElse(getString(this, g(L)), N)
106- let P = split(O, a)
107- let Q = valueOrElse(getString(this, j(L, toString(G.caller))), N)
108- let R = [if ((O != N))
109- then true
110- else throw("No such vote"), if ((value(parseInt(P[2])) > lastBlock.height))
111- then true
112- else b(), if ((Q == N))
113- then true
114- else c()]
115- if ((R == R))
100+func startNewVote (s,J,K,u) = {
101+ let L = [I(G)]
102+ if ((L == L))
116103 then {
117- let z = A(invoke(addressFromStringValue(getStringValue(e())), "getUserGwxAmountAtHeightREADONLY", [toString(G.caller), value(parseInt(P[2]))], nil))
118- let S = if (M)
119- then {
120- let T = StringEntry(g(L), r(P[1], P[2], P[3], toString((value(parseInt(P[4])) + z)), P[5]))
121- let U = StringEntry(j(L, toString(G.caller)), x("1", toString(z)))
122- $Tuple2(T, U)
123- }
124- else {
125- let T = StringEntry(g(L), r(P[1], P[2], P[3], P[4], toString((value(parseInt(P[5])) + z))))
126- let U = StringEntry(j(L, toString(G.caller)), x("0", toString(z)))
127- $Tuple2(T, U)
128- }
129- let T = S._1
130- let U = S._2
131-[T, U]
104+ let M = n()
105+[IntegerEntry(f(), (M + 1)), StringEntry(g(M), r(s, toString((lastBlock.height + K)), toString(u), "0", "0")), StringEntry(i(M), J)]
132106 }
133107 else throw("Strict value is not equal to itself.")
134108 }
136110
137111
138112 @Callable(G)
139-func deleteVote (L) = {
140- let N = "EMPTY"
141- let O = valueOrElse(getString(this, g(L)), N)
142- let P = split(O, a)
143- let Q = valueOrElse(getString(this, j(L, toString(G.caller))), N)
144- let V = split(Q, a)
145- let R = [if ((O != N))
113+func voteFor (N,O) = {
114+ let P = "EMPTY"
115+ let Q = valueOrElse(getString(this, g(N)), P)
116+ let R = split(Q, a)
117+ let S = valueOrElse(getString(this, j(N, toString(G.caller))), P)
118+ let L = [if ((Q != P))
146119 then true
147- else throw("No such vote"), if ((value(parseInt(P[2])) > lastBlock.height))
120+ else throw("No such vote"), if ((value(parseInt(R[2])) > lastBlock.height))
148121 then true
149- else b(), if ((Q != N))
122+ else b(), if ((S == P))
150123 then true
151- else d()]
152- if ((R == R))
124+ else c()]
125+ if ((L == L))
153126 then {
154- let W = if ((V[1] == "1"))
155- then StringEntry(g(L), r(P[1], P[2], P[3], toString((value(parseInt(P[4])) - value(parseInt(V[2])))), P[5]))
156- else StringEntry(g(L), r(P[1], P[2], P[3], P[4], toString((value(parseInt(P[5])) - value(parseInt(V[2]))))))
157-[W, DeleteEntry(j(L, toString(G.caller)))]
127+ let z = A(invoke(addressFromStringValue(getStringValue(e())), "getUserGwxAmountAtHeightREADONLY", [toString(G.caller), value(parseInt(R[2]))], nil))
128+ let T = if (O)
129+ then {
130+ let U = StringEntry(g(N), r(R[1], R[2], R[3], toString((value(parseInt(R[4])) + z)), R[5]))
131+ let V = StringEntry(j(N, toString(G.caller)), x("1", toString(z)))
132+ $Tuple2(U, V)
133+ }
134+ else {
135+ let U = StringEntry(g(N), r(R[1], R[2], R[3], R[4], toString((value(parseInt(R[5])) + z))))
136+ let V = StringEntry(j(N, toString(G.caller)), x("0", toString(z)))
137+ $Tuple2(U, V)
138+ }
139+ let U = T._1
140+ let V = T._2
141+[U, V]
158142 }
159143 else throw("Strict value is not equal to itself.")
160144 }
162146
163147
164148 @Callable(G)
165-func changeVote (L,M) = {
166- let N = "EMPTY"
167- let O = valueOrElse(getString(this, g(L)), N)
168- let P = split(O, a)
169- let Q = valueOrElse(getString(this, j(L, toString(G.caller))), N)
170- let V = split(Q, a)
171- let R = [if ((O != N))
149+func deleteVote (N) = {
150+ let P = "EMPTY"
151+ let Q = valueOrElse(getString(this, g(N)), P)
152+ let R = split(Q, a)
153+ let S = valueOrElse(getString(this, j(N, toString(G.caller))), P)
154+ let W = split(S, a)
155+ let L = [if ((Q != P))
172156 then true
173- else throw("No such vote"), if ((value(parseInt(P[2])) > lastBlock.height))
157+ else throw("No such vote"), if ((value(parseInt(R[2])) > lastBlock.height))
174158 then true
175- else b(), if ((Q != N))
159+ else b(), if ((S != P))
176160 then true
177161 else d()]
178- if ((R == R))
162+ if ((L == L))
179163 then {
180- let z = A(invoke(addressFromStringValue(getStringValue(e())), "getUserGwxAmountAtHeightREADONLY", [toString(G.caller), value(parseInt(P[3]))], nil))
181- let X = if (M)
182- then {
183- let Y = z
184- let Z = 0
185- let aa = 1
186- $Tuple3(Y, Z, aa)
187- }
188- else {
189- let Y = 0
190- let Z = z
191- let aa = 0
192- $Tuple3(Y, Z, aa)
193- }
194- let ab = X._1
195- let ac = X._2
196- let ad = X._3
197- let W = if ((V[1] == "1"))
198- then StringEntry(g(L), r(P[1], P[2], P[3], toString(((value(parseInt(P[4])) - value(parseInt(V[2]))) + ab)), toString((value(parseInt(P[5])) + ac))))
199- else StringEntry(g(L), r(P[1], P[2], P[3], toString((value(parseInt(P[4])) + ab)), toString(((value(parseInt(P[5])) - value(parseInt(V[2]))) + ac))))
200-[W, StringEntry(j(L, toString(G.caller)), x(toString(ad), toString(z)))]
164+ let X = if ((W[1] == "1"))
165+ then StringEntry(g(N), r(R[1], R[2], R[3], toString((value(parseInt(R[4])) - value(parseInt(W[2])))), R[5]))
166+ else StringEntry(g(N), r(R[1], R[2], R[3], R[4], toString((value(parseInt(R[5])) - value(parseInt(W[2]))))))
167+[X, DeleteEntry(j(N, toString(G.caller)))]
201168 }
202169 else throw("Strict value is not equal to itself.")
203170 }
205172
206173
207174 @Callable(G)
208-func getResultREADONLY (L) = {
209- let N = "EMPTY"
210- let O = valueOrElse(getString(this, g(L)), N)
211- let P = split(O, a)
212- let R = [if ((O != N))
175+func changeVote (N,O) = {
176+ let P = "EMPTY"
177+ let Q = valueOrElse(getString(this, g(N)), P)
178+ let R = split(Q, a)
179+ let S = valueOrElse(getString(this, j(N, toString(G.caller))), P)
180+ let W = split(S, a)
181+ let L = [if ((Q != P))
182+ then true
183+ else throw("No such vote"), if ((value(parseInt(R[2])) > lastBlock.height))
184+ then true
185+ else b(), if ((S != P))
186+ then true
187+ else d()]
188+ if ((L == L))
189+ then {
190+ let z = A(invoke(addressFromStringValue(getStringValue(e())), "getUserGwxAmountAtHeightREADONLY", [toString(G.caller), value(parseInt(R[3]))], nil))
191+ let Y = if (O)
192+ then {
193+ let Z = z
194+ let aa = 0
195+ let ab = 1
196+ $Tuple3(Z, aa, ab)
197+ }
198+ else {
199+ let Z = 0
200+ let aa = z
201+ let ab = 0
202+ $Tuple3(Z, aa, ab)
203+ }
204+ let ac = Y._1
205+ let ad = Y._2
206+ let ae = Y._3
207+ let X = if ((W[1] == "1"))
208+ then StringEntry(g(N), r(R[1], R[2], R[3], toString(((value(parseInt(R[4])) - value(parseInt(W[2]))) + ac)), toString((value(parseInt(R[5])) + ad))))
209+ else StringEntry(g(N), r(R[1], R[2], R[3], toString((value(parseInt(R[4])) + ac)), toString(((value(parseInt(R[5])) - value(parseInt(W[2]))) + ad))))
210+[X, StringEntry(j(N, toString(G.caller)), x(toString(ae), toString(z)))]
211+ }
212+ else throw("Strict value is not equal to itself.")
213+ }
214+
215+
216+
217+@Callable(G)
218+func getResultREADONLY (N) = {
219+ let P = "EMPTY"
220+ let Q = valueOrElse(getString(this, g(N)), P)
221+ let R = split(Q, a)
222+ let L = [if ((Q != P))
213223 then true
214224 else throw("No such vote")]
215- if ((R == R))
225+ if ((L == L))
216226 then {
217- let u = P[3]
218- let v = P[4]
219- let w = P[5]
227+ let u = R[3]
228+ let v = R[4]
229+ let w = R[5]
220230 $Tuple2(nil, [v, w, u])
221231 }
222232 else throw("Strict value is not equal to itself.")
223233 }
224234
225235
236+@Verifier(af)
237+func ag () = {
238+ let ah = {
239+ let p = D()
240+ if ($isInstanceOf(p, "ByteVector"))
241+ then {
242+ let H = p
243+ H
244+ }
245+ else if ($isInstanceOf(p, "Unit"))
246+ then af.senderPublicKey
247+ else throw("Match error")
248+ }
249+ sigVerify(af.bodyBytes, af.proofs[0], ah)
250+ }
251+
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let a = "__"
55
66 func b () = throw("The block's height is too big for this proposal")
77
88
99 func c () = throw("You have already voted")
1010
1111
1212 func d () = throw("You have not already voted")
1313
1414
1515 func e () = makeString(["%s", "gwxContractAddress"], a)
1616
1717
1818 func f () = makeString(["%s", "currentIndex"], a)
1919
2020
2121 func g (h) = makeString(["%s%d", "proposalInfo", toString(h)], a)
2222
2323
2424 func i (h) = makeString(["%s%d", "proposalDescription", toString(h)], a)
2525
2626
2727 func j (h,k) = makeString(["%s%d%s", "userVoteOnProposal", toString(h), k], a)
2828
2929
3030 func l () = "%s__managerPublicKey"
3131
3232
3333 func m () = "%s__managerVaultAddress"
3434
3535
3636 func n () = getIntegerValue(this, f())
3737
3838
3939 func o () = {
4040 let p = getString(m())
4141 if ($isInstanceOf(p, "String"))
4242 then {
4343 let q = p
4444 addressFromStringValue(q)
4545 }
4646 else this
4747 }
4848
4949
5050 func r (s,t,u,v,w) = makeString(["%d%d%d%d%d", s, t, u, v, w], a)
5151
5252
5353 func x (y,z) = makeString(["%d%d", y, z], a)
5454
5555
5656 func A (B) = {
5757 let p = B
5858 if ($isInstanceOf(p, "Int"))
5959 then {
6060 let C = p
6161 C
6262 }
6363 else throw("fail to cast into Int")
6464 }
6565
6666
6767 func D () = {
6868 let E = o()
6969 let p = getString(E, l())
7070 if ($isInstanceOf(p, "String"))
7171 then {
7272 let q = p
7373 fromBase58String(q)
7474 }
7575 else if ($isInstanceOf(p, "Unit"))
7676 then unit
7777 else throw("Match error")
7878 }
7979
8080
8181 func F (G) = {
8282 let p = D()
8383 if ($isInstanceOf(p, "ByteVector"))
8484 then {
8585 let H = p
8686 (G.callerPublicKey == H)
8787 }
8888 else if ($isInstanceOf(p, "Unit"))
8989 then (G.caller == this)
9090 else throw("Match error")
9191 }
9292
9393
94-@Callable(G)
95-func startNewVote (s,I,J,u) = {
96- let K = 0
97-[IntegerEntry(f(), 0), IntegerEntry(f(), (K + 1)), StringEntry(g(K), r(s, toString((lastBlock.height + J)), toString(u), "0", "0")), StringEntry(i(K), I)]
98- }
99-
94+func I (G) = if (F(G))
95+ then true
96+ else throw("permission denied")
10097
10198
10299 @Callable(G)
103-func voteFor (L,M) = {
104- let N = "EMPTY"
105- let O = valueOrElse(getString(this, g(L)), N)
106- let P = split(O, a)
107- let Q = valueOrElse(getString(this, j(L, toString(G.caller))), N)
108- let R = [if ((O != N))
109- then true
110- else throw("No such vote"), if ((value(parseInt(P[2])) > lastBlock.height))
111- then true
112- else b(), if ((Q == N))
113- then true
114- else c()]
115- if ((R == R))
100+func startNewVote (s,J,K,u) = {
101+ let L = [I(G)]
102+ if ((L == L))
116103 then {
117- let z = A(invoke(addressFromStringValue(getStringValue(e())), "getUserGwxAmountAtHeightREADONLY", [toString(G.caller), value(parseInt(P[2]))], nil))
118- let S = if (M)
119- then {
120- let T = StringEntry(g(L), r(P[1], P[2], P[3], toString((value(parseInt(P[4])) + z)), P[5]))
121- let U = StringEntry(j(L, toString(G.caller)), x("1", toString(z)))
122- $Tuple2(T, U)
123- }
124- else {
125- let T = StringEntry(g(L), r(P[1], P[2], P[3], P[4], toString((value(parseInt(P[5])) + z))))
126- let U = StringEntry(j(L, toString(G.caller)), x("0", toString(z)))
127- $Tuple2(T, U)
128- }
129- let T = S._1
130- let U = S._2
131-[T, U]
104+ let M = n()
105+[IntegerEntry(f(), (M + 1)), StringEntry(g(M), r(s, toString((lastBlock.height + K)), toString(u), "0", "0")), StringEntry(i(M), J)]
132106 }
133107 else throw("Strict value is not equal to itself.")
134108 }
135109
136110
137111
138112 @Callable(G)
139-func deleteVote (L) = {
140- let N = "EMPTY"
141- let O = valueOrElse(getString(this, g(L)), N)
142- let P = split(O, a)
143- let Q = valueOrElse(getString(this, j(L, toString(G.caller))), N)
144- let V = split(Q, a)
145- let R = [if ((O != N))
113+func voteFor (N,O) = {
114+ let P = "EMPTY"
115+ let Q = valueOrElse(getString(this, g(N)), P)
116+ let R = split(Q, a)
117+ let S = valueOrElse(getString(this, j(N, toString(G.caller))), P)
118+ let L = [if ((Q != P))
146119 then true
147- else throw("No such vote"), if ((value(parseInt(P[2])) > lastBlock.height))
120+ else throw("No such vote"), if ((value(parseInt(R[2])) > lastBlock.height))
148121 then true
149- else b(), if ((Q != N))
122+ else b(), if ((S == P))
150123 then true
151- else d()]
152- if ((R == R))
124+ else c()]
125+ if ((L == L))
153126 then {
154- let W = if ((V[1] == "1"))
155- then StringEntry(g(L), r(P[1], P[2], P[3], toString((value(parseInt(P[4])) - value(parseInt(V[2])))), P[5]))
156- else StringEntry(g(L), r(P[1], P[2], P[3], P[4], toString((value(parseInt(P[5])) - value(parseInt(V[2]))))))
157-[W, DeleteEntry(j(L, toString(G.caller)))]
127+ let z = A(invoke(addressFromStringValue(getStringValue(e())), "getUserGwxAmountAtHeightREADONLY", [toString(G.caller), value(parseInt(R[2]))], nil))
128+ let T = if (O)
129+ then {
130+ let U = StringEntry(g(N), r(R[1], R[2], R[3], toString((value(parseInt(R[4])) + z)), R[5]))
131+ let V = StringEntry(j(N, toString(G.caller)), x("1", toString(z)))
132+ $Tuple2(U, V)
133+ }
134+ else {
135+ let U = StringEntry(g(N), r(R[1], R[2], R[3], R[4], toString((value(parseInt(R[5])) + z))))
136+ let V = StringEntry(j(N, toString(G.caller)), x("0", toString(z)))
137+ $Tuple2(U, V)
138+ }
139+ let U = T._1
140+ let V = T._2
141+[U, V]
158142 }
159143 else throw("Strict value is not equal to itself.")
160144 }
161145
162146
163147
164148 @Callable(G)
165-func changeVote (L,M) = {
166- let N = "EMPTY"
167- let O = valueOrElse(getString(this, g(L)), N)
168- let P = split(O, a)
169- let Q = valueOrElse(getString(this, j(L, toString(G.caller))), N)
170- let V = split(Q, a)
171- let R = [if ((O != N))
149+func deleteVote (N) = {
150+ let P = "EMPTY"
151+ let Q = valueOrElse(getString(this, g(N)), P)
152+ let R = split(Q, a)
153+ let S = valueOrElse(getString(this, j(N, toString(G.caller))), P)
154+ let W = split(S, a)
155+ let L = [if ((Q != P))
172156 then true
173- else throw("No such vote"), if ((value(parseInt(P[2])) > lastBlock.height))
157+ else throw("No such vote"), if ((value(parseInt(R[2])) > lastBlock.height))
174158 then true
175- else b(), if ((Q != N))
159+ else b(), if ((S != P))
176160 then true
177161 else d()]
178- if ((R == R))
162+ if ((L == L))
179163 then {
180- let z = A(invoke(addressFromStringValue(getStringValue(e())), "getUserGwxAmountAtHeightREADONLY", [toString(G.caller), value(parseInt(P[3]))], nil))
181- let X = if (M)
182- then {
183- let Y = z
184- let Z = 0
185- let aa = 1
186- $Tuple3(Y, Z, aa)
187- }
188- else {
189- let Y = 0
190- let Z = z
191- let aa = 0
192- $Tuple3(Y, Z, aa)
193- }
194- let ab = X._1
195- let ac = X._2
196- let ad = X._3
197- let W = if ((V[1] == "1"))
198- then StringEntry(g(L), r(P[1], P[2], P[3], toString(((value(parseInt(P[4])) - value(parseInt(V[2]))) + ab)), toString((value(parseInt(P[5])) + ac))))
199- else StringEntry(g(L), r(P[1], P[2], P[3], toString((value(parseInt(P[4])) + ab)), toString(((value(parseInt(P[5])) - value(parseInt(V[2]))) + ac))))
200-[W, StringEntry(j(L, toString(G.caller)), x(toString(ad), toString(z)))]
164+ let X = if ((W[1] == "1"))
165+ then StringEntry(g(N), r(R[1], R[2], R[3], toString((value(parseInt(R[4])) - value(parseInt(W[2])))), R[5]))
166+ else StringEntry(g(N), r(R[1], R[2], R[3], R[4], toString((value(parseInt(R[5])) - value(parseInt(W[2]))))))
167+[X, DeleteEntry(j(N, toString(G.caller)))]
201168 }
202169 else throw("Strict value is not equal to itself.")
203170 }
204171
205172
206173
207174 @Callable(G)
208-func getResultREADONLY (L) = {
209- let N = "EMPTY"
210- let O = valueOrElse(getString(this, g(L)), N)
211- let P = split(O, a)
212- let R = [if ((O != N))
175+func changeVote (N,O) = {
176+ let P = "EMPTY"
177+ let Q = valueOrElse(getString(this, g(N)), P)
178+ let R = split(Q, a)
179+ let S = valueOrElse(getString(this, j(N, toString(G.caller))), P)
180+ let W = split(S, a)
181+ let L = [if ((Q != P))
182+ then true
183+ else throw("No such vote"), if ((value(parseInt(R[2])) > lastBlock.height))
184+ then true
185+ else b(), if ((S != P))
186+ then true
187+ else d()]
188+ if ((L == L))
189+ then {
190+ let z = A(invoke(addressFromStringValue(getStringValue(e())), "getUserGwxAmountAtHeightREADONLY", [toString(G.caller), value(parseInt(R[3]))], nil))
191+ let Y = if (O)
192+ then {
193+ let Z = z
194+ let aa = 0
195+ let ab = 1
196+ $Tuple3(Z, aa, ab)
197+ }
198+ else {
199+ let Z = 0
200+ let aa = z
201+ let ab = 0
202+ $Tuple3(Z, aa, ab)
203+ }
204+ let ac = Y._1
205+ let ad = Y._2
206+ let ae = Y._3
207+ let X = if ((W[1] == "1"))
208+ then StringEntry(g(N), r(R[1], R[2], R[3], toString(((value(parseInt(R[4])) - value(parseInt(W[2]))) + ac)), toString((value(parseInt(R[5])) + ad))))
209+ else StringEntry(g(N), r(R[1], R[2], R[3], toString((value(parseInt(R[4])) + ac)), toString(((value(parseInt(R[5])) - value(parseInt(W[2]))) + ad))))
210+[X, StringEntry(j(N, toString(G.caller)), x(toString(ae), toString(z)))]
211+ }
212+ else throw("Strict value is not equal to itself.")
213+ }
214+
215+
216+
217+@Callable(G)
218+func getResultREADONLY (N) = {
219+ let P = "EMPTY"
220+ let Q = valueOrElse(getString(this, g(N)), P)
221+ let R = split(Q, a)
222+ let L = [if ((Q != P))
213223 then true
214224 else throw("No such vote")]
215- if ((R == R))
225+ if ((L == L))
216226 then {
217- let u = P[3]
218- let v = P[4]
219- let w = P[5]
227+ let u = R[3]
228+ let v = R[4]
229+ let w = R[5]
220230 $Tuple2(nil, [v, w, u])
221231 }
222232 else throw("Strict value is not equal to itself.")
223233 }
224234
225235
236+@Verifier(af)
237+func ag () = {
238+ let ah = {
239+ let p = D()
240+ if ($isInstanceOf(p, "ByteVector"))
241+ then {
242+ let H = p
243+ H
244+ }
245+ else if ($isInstanceOf(p, "Unit"))
246+ then af.senderPublicKey
247+ else throw("Match error")
248+ }
249+ sigVerify(af.bodyBytes, af.proofs[0], ah)
250+ }
251+

github/deemru/w8io/169f3d6 
55.41 ms