tx · 5rJKi4LC3ocdN2NRhHZDUuVc4kFGkf7nk2D23No9FmG5

3N3vjjwCXWsTfu2w6biwcPhZe3v17HGY3tR:  -0.01300000 Waves

2023.05.10 13:16 [2571656] smart account 3N3vjjwCXWsTfu2w6biwcPhZe3v17HGY3tR > SELF 0.00000000 Waves

{ "type": 13, "id": "5rJKi4LC3ocdN2NRhHZDUuVc4kFGkf7nk2D23No9FmG5", "fee": 1300000, "feeAssetId": null, "timestamp": 1683713786945, "version": 2, "chainId": 84, "sender": "3N3vjjwCXWsTfu2w6biwcPhZe3v17HGY3tR", "senderPublicKey": "B2SJ1BXVdLQeEg3kiwBCznf5t6GjLEz81mEWEV3fs2vF", "proofs": [ "329UCETqwnareh73VMRb6gM9K2PV4b1GJ1p9j3yY8HhfvhaznurM3w1rgkVCdeRsLBaXBYK9YyPx3fRqg8crtJ3A" ], "script": "base64:BgIgCAISBgoECAgBARIECgIBBBIDCgEBEgQKAgEEEgMKAQESAANTRVACAl9fARBibG9ja0hlaWdodEVycm9yAAkAAgECL1RoZSBibG9jaydzIGhlaWdodCBpcyB0b28gYmlnIGZvciB0aGlzIHByb3Bvc2FsARBhbHJlYWR5Vm90ZUVycm9yAAkAAgECFllvdSBoYXZlIGFscmVhZHkgdm90ZWQBC25vVm90ZUVycm9yAAkAAgECGllvdSBoYXZlIG5vdCBhbHJlYWR5IHZvdGVkARJnd3hDb250cmFjdEFkZHJlc3MACQC5CQIJAMwIAgICJXMJAMwIAgISZ3d4Q29udHJhY3RBZGRyZXNzBQNuaWwFA1NFUAEPa2V5Q3VycmVudEluZGV4AAkAuQkCCQDMCAICAiVzCQDMCAICDGN1cnJlbnRJbmRleAUDbmlsBQNTRVABD2tleVByb3Bvc2FsSW5mbwEGbnVtYmVyCQC5CQIJAMwIAgIEJXMlZAkAzAgCAgxwcm9wb3NhbEluZm8JAMwIAgkApAMBBQZudW1iZXIFA25pbAUDU0VQARVrZXlVc2VyVm90ZU9uUHJvcG9zYWwCBm51bWJlcgR1c2VyCQC5CQIJAMwIAgIGJXMlZCVzCQDMCAICEnVzZXJWb3RlT25Qcm9wb3NhbAkAzAgCCQCkAwEFBm51bWJlcgkAzAgCBQR1c2VyBQNuaWwFA1NFUAETa2V5TWFuYWdlclB1YmxpY0tleQACFCVzX19tYW5hZ2VyUHVibGljS2V5ARZrZXlNYW5hZ2VyVmF1bHRBZGRyZXNzAAIXJXNfX21hbmFnZXJWYXVsdEFkZHJlc3MBD2dldEN1cnJlbnRJbmRleAAJARFAZXh0ck5hdGl2ZSgxMDUwKQIFBHRoaXMJAQ9rZXlDdXJyZW50SW5kZXgAARxnZXRNYW5hZ2VyVmF1bHRBZGRyZXNzT3JUaGlzAAQHJG1hdGNoMAkAoggBCQEWa2V5TWFuYWdlclZhdWx0QWRkcmVzcwADCQABAgUHJG1hdGNoMAIGU3RyaW5nBAFzBQckbWF0Y2gwCQERQGV4dHJOYXRpdmUoMTA2MikBBQFzBQR0aGlzARJmb3JtYXRQcm9wb3NhbEluZm8GBG5hbWULZGVzY3JpcHRpb24DZW5kDHF1b3J1bU51bWJlcg1wb3NpdGl2ZVZvdGVzDW5lZ2F0aXZlVm90ZXMJALkJAgkAzAgCAgwlZCVkJWQlZCVkJWQJAMwIAgUEbmFtZQkAzAgCBQtkZXNjcmlwdGlvbgkAzAgCBQNlbmQJAMwIAgUMcXVvcnVtTnVtYmVyCQDMCAIFDXBvc2l0aXZlVm90ZXMJAMwIAgUNbmVnYXRpdmVWb3RlcwUDbmlsBQNTRVABGGZvcm1hdFVzZXJWb3RlT25Qcm9wb3NhbAIEdm90ZQlnd3hOdW1iZXIJALkJAgkAzAgCAgQlZCVkCQDMCAIFBHZvdGUJAMwIAgUJZ3d4TnVtYmVyBQNuaWwFA1NFUAEFYXNJbnQBA3ZhbAQHJG1hdGNoMAUDdmFsAwkAAQIFByRtYXRjaDACA0ludAQGdmFsSW50BQckbWF0Y2gwBQZ2YWxJbnQJAAIBAhVmYWlsIHRvIGNhc3QgaW50byBJbnQBFm1hbmFnZXJQdWJsaWNLZXlPclVuaXQABBNtYW5hZ2VyVmF1bHRBZGRyZXNzCQEcZ2V0TWFuYWdlclZhdWx0QWRkcmVzc09yVGhpcwAEByRtYXRjaDAJAJ0IAgUTbWFuYWdlclZhdWx0QWRkcmVzcwkBE2tleU1hbmFnZXJQdWJsaWNLZXkAAwkAAQIFByRtYXRjaDACBlN0cmluZwQBcwUHJG1hdGNoMAkA2QQBBQFzAwkAAQIFByRtYXRjaDACBFVuaXQFBHVuaXQJAAIBAgtNYXRjaCBlcnJvcgEJaXNNYW5hZ2VyAQFpBAckbWF0Y2gwCQEWbWFuYWdlclB1YmxpY0tleU9yVW5pdAADCQABAgUHJG1hdGNoMAIKQnl0ZVZlY3RvcgQCcGsFByRtYXRjaDAJAAACCAUBaQ9jYWxsZXJQdWJsaWNLZXkFAnBrAwkAAQIFByRtYXRjaDACBFVuaXQJAAACCAUBaQZjYWxsZXIFBHRoaXMJAAIBAgtNYXRjaCBlcnJvcgELbXVzdE1hbmFnZXIBAWkDCQEJaXNNYW5hZ2VyAQUBaQYJAAIBAhFwZXJtaXNzaW9uIGRlbmllZAUBaQEMc3RhcnROZXdWb3RlBARuYW1lC2Rlc2NyaXB0aW9uEGV4cGlyYXRpb25IZWlnaHQMcXVvcnVtTnVtYmVyBAZjaGVja3MJAMwIAgkBC211c3RNYW5hZ2VyAQUBaQUDbmlsAwkAAAIFBmNoZWNrcwUGY2hlY2tzBAh0aGVJbmRleAkBD2dldEN1cnJlbnRJbmRleAAJAMwIAgkBDEludGVnZXJFbnRyeQIJAQ9rZXlDdXJyZW50SW5kZXgACQBkAgUIdGhlSW5kZXgAAQkAzAgCCQELU3RyaW5nRW50cnkCCQEPa2V5UHJvcG9zYWxJbmZvAQUIdGhlSW5kZXgJARJmb3JtYXRQcm9wb3NhbEluZm8GBQRuYW1lBQtkZXNjcmlwdGlvbgkApAMBCQBkAggFCWxhc3RCbG9jawZoZWlnaHQFEGV4cGlyYXRpb25IZWlnaHQJAKQDAQUMcXVvcnVtTnVtYmVyAgEwAgEwBQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEHdm90ZUZvcgINcHJvcG9zYWxJbmRleAZjaG9pY2UEBUVNUFRZAgVFTVBUWQQIdm90ZUluZm8JAQt2YWx1ZU9yRWxzZQIJAJ0IAgUEdGhpcwkBD2tleVByb3Bvc2FsSW5mbwEFDXByb3Bvc2FsSW5kZXgFBUVNUFRZBA12b3RlSW5mb0FycmF5CQC1CQIFCHZvdGVJbmZvBQNTRVAEDHVzZXJWb3RlSW5mbwkBC3ZhbHVlT3JFbHNlAgkAnQgCBQR0aGlzCQEVa2V5VXNlclZvdGVPblByb3Bvc2FsAgUNcHJvcG9zYWxJbmRleAkApQgBCAUBaQZjYWxsZXIFBUVNUFRZBAZjaGVja3MJAMwIAgMJAQIhPQIFCHZvdGVJbmZvBQVFTVBUWQYJAAIBAgxObyBzdWNoIHZvdGUJAMwIAgMJAGYCCQEFdmFsdWUBCQC2CQEJAJEDAgUNdm90ZUluZm9BcnJheQADCAUJbGFzdEJsb2NrBmhlaWdodAYJARBibG9ja0hlaWdodEVycm9yAAkAzAgCAwkAAAIFDHVzZXJWb3RlSW5mbwUFRU1QVFkGCQEQYWxyZWFkeVZvdGVFcnJvcgAFA25pbAMJAAACBQZjaGVja3MFBmNoZWNrcwQJZ3d4TnVtYmVyCQEFYXNJbnQBCQD8BwQJARFAZXh0ck5hdGl2ZSgxMDYyKQEJARFAZXh0ck5hdGl2ZSgxMDU4KQEJARJnd3hDb250cmFjdEFkZHJlc3MAAiBnZXRVc2VyR3d4QW1vdW50QXRIZWlnaHRSRUFET05MWQkAzAgCCQClCAEIBQFpBmNhbGxlcgkAzAgCCQEFdmFsdWUBCQC2CQEJAJEDAgUNdm90ZUluZm9BcnJheQADBQNuaWwFA25pbAQLJHQwMzQzNTQ1MjMDBQZjaG9pY2UEB2FjdGlvbjEJAQtTdHJpbmdFbnRyeQIJAQ9rZXlQcm9wb3NhbEluZm8BBQ1wcm9wb3NhbEluZGV4CQESZm9ybWF0UHJvcG9zYWxJbmZvBgkAkQMCBQ12b3RlSW5mb0FycmF5AAEJAJEDAgUNdm90ZUluZm9BcnJheQACCQCRAwIFDXZvdGVJbmZvQXJyYXkAAwkAkQMCBQ12b3RlSW5mb0FycmF5AAQJAKQDAQkAZAIJAQV2YWx1ZQEJALYJAQkAkQMCBQ12b3RlSW5mb0FycmF5AAUFCWd3eE51bWJlcgkAkQMCBQ12b3RlSW5mb0FycmF5AAYEB2FjdGlvbjIJAQtTdHJpbmdFbnRyeQIJARVrZXlVc2VyVm90ZU9uUHJvcG9zYWwCBQ1wcm9wb3NhbEluZGV4CQClCAEIBQFpBmNhbGxlcgkBGGZvcm1hdFVzZXJWb3RlT25Qcm9wb3NhbAICATEJAKQDAQUJZ3d4TnVtYmVyCQCUCgIFB2FjdGlvbjEFB2FjdGlvbjIEB2FjdGlvbjEJAQtTdHJpbmdFbnRyeQIJAQ9rZXlQcm9wb3NhbEluZm8BBQ1wcm9wb3NhbEluZGV4CQESZm9ybWF0UHJvcG9zYWxJbmZvBgkAkQMCBQ12b3RlSW5mb0FycmF5AAEJAJEDAgUNdm90ZUluZm9BcnJheQACCQCRAwIFDXZvdGVJbmZvQXJyYXkAAwkAkQMCBQ12b3RlSW5mb0FycmF5AAQJAJEDAgUNdm90ZUluZm9BcnJheQAFCQCkAwEJAGQCCQEFdmFsdWUBCQC2CQEJAJEDAgUNdm90ZUluZm9BcnJheQAGBQlnd3hOdW1iZXIEB2FjdGlvbjIJAQtTdHJpbmdFbnRyeQIJARVrZXlVc2VyVm90ZU9uUHJvcG9zYWwCBQ1wcm9wb3NhbEluZGV4CQClCAEIBQFpBmNhbGxlcgkBGGZvcm1hdFVzZXJWb3RlT25Qcm9wb3NhbAICATAJAKQDAQUJZ3d4TnVtYmVyCQCUCgIFB2FjdGlvbjEFB2FjdGlvbjIEB2FjdGlvbjEIBQskdDAzNDM1NDUyMwJfMQQHYWN0aW9uMggFCyR0MDM0MzU0NTIzAl8yCQDMCAIFB2FjdGlvbjEJAMwIAgUHYWN0aW9uMgUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBCmRlbGV0ZVZvdGUBDXByb3Bvc2FsSW5kZXgEBUVNUFRZAgVFTVBUWQQIdm90ZUluZm8JAQt2YWx1ZU9yRWxzZQIJAJ0IAgUEdGhpcwkBD2tleVByb3Bvc2FsSW5mbwEFDXByb3Bvc2FsSW5kZXgFBUVNUFRZBA12b3RlSW5mb0FycmF5CQC1CQIFCHZvdGVJbmZvBQNTRVAEDHVzZXJWb3RlSW5mbwkBC3ZhbHVlT3JFbHNlAgkAnQgCBQR0aGlzCQEVa2V5VXNlclZvdGVPblByb3Bvc2FsAgUNcHJvcG9zYWxJbmRleAkApQgBCAUBaQZjYWxsZXIFBUVNUFRZBBF1c2VyVm90ZUluZm9BcnJheQkAtQkCBQx1c2VyVm90ZUluZm8FA1NFUAQGY2hlY2tzCQDMCAIDCQECIT0CBQh2b3RlSW5mbwUFRU1QVFkGCQACAQIMTm8gc3VjaCB2b3RlCQDMCAIDCQBmAgkBBXZhbHVlAQkAtgkBCQCRAwIFDXZvdGVJbmZvQXJyYXkAAwgFCWxhc3RCbG9jawZoZWlnaHQGCQEQYmxvY2tIZWlnaHRFcnJvcgAJAMwIAgMJAQIhPQIFDHVzZXJWb3RlSW5mbwUFRU1QVFkGCQELbm9Wb3RlRXJyb3IABQNuaWwDCQAAAgUGY2hlY2tzBQZjaGVja3MEBmFjdGlvbgMJAAACCQCRAwIFEXVzZXJWb3RlSW5mb0FycmF5AAECATEJAQtTdHJpbmdFbnRyeQIJAQ9rZXlQcm9wb3NhbEluZm8BBQ1wcm9wb3NhbEluZGV4CQESZm9ybWF0UHJvcG9zYWxJbmZvBgkAkQMCBQ12b3RlSW5mb0FycmF5AAEJAJEDAgUNdm90ZUluZm9BcnJheQACCQCRAwIFDXZvdGVJbmZvQXJyYXkAAwkAkQMCBQ12b3RlSW5mb0FycmF5AAQJAKQDAQkAZQIJAQV2YWx1ZQEJALYJAQkAkQMCBQ12b3RlSW5mb0FycmF5AAUJAQV2YWx1ZQEJALYJAQkAkQMCBRF1c2VyVm90ZUluZm9BcnJheQACCQCRAwIFDXZvdGVJbmZvQXJyYXkABgkBC1N0cmluZ0VudHJ5AgkBD2tleVByb3Bvc2FsSW5mbwEFDXByb3Bvc2FsSW5kZXgJARJmb3JtYXRQcm9wb3NhbEluZm8GCQCRAwIFDXZvdGVJbmZvQXJyYXkAAQkAkQMCBQ12b3RlSW5mb0FycmF5AAIJAJEDAgUNdm90ZUluZm9BcnJheQADCQCRAwIFDXZvdGVJbmZvQXJyYXkABAkAkQMCBQ12b3RlSW5mb0FycmF5AAUJAKQDAQkAZQIJAQV2YWx1ZQEJALYJAQkAkQMCBQ12b3RlSW5mb0FycmF5AAYJAQV2YWx1ZQEJALYJAQkAkQMCBRF1c2VyVm90ZUluZm9BcnJheQACCQDMCAIFBmFjdGlvbgkAzAgCCQELRGVsZXRlRW50cnkBCQEVa2V5VXNlclZvdGVPblByb3Bvc2FsAgUNcHJvcG9zYWxJbmRleAkApQgBCAUBaQZjYWxsZXIFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpAQpjaGFuZ2VWb3RlAg1wcm9wb3NhbEluZGV4BmNob2ljZQQFRU1QVFkCBUVNUFRZBAh2b3RlSW5mbwkBC3ZhbHVlT3JFbHNlAgkAnQgCBQR0aGlzCQEPa2V5UHJvcG9zYWxJbmZvAQUNcHJvcG9zYWxJbmRleAUFRU1QVFkEDXZvdGVJbmZvQXJyYXkJALUJAgUIdm90ZUluZm8FA1NFUAQMdXNlclZvdGVJbmZvCQELdmFsdWVPckVsc2UCCQCdCAIFBHRoaXMJARVrZXlVc2VyVm90ZU9uUHJvcG9zYWwCBQ1wcm9wb3NhbEluZGV4CQClCAEIBQFpBmNhbGxlcgUFRU1QVFkEEXVzZXJWb3RlSW5mb0FycmF5CQC1CQIFDHVzZXJWb3RlSW5mbwUDU0VQBAZjaGVja3MJAMwIAgMJAQIhPQIFCHZvdGVJbmZvBQVFTVBUWQYJAAIBAgxObyBzdWNoIHZvdGUJAMwIAgMJAGYCCQEFdmFsdWUBCQC2CQEJAJEDAgUNdm90ZUluZm9BcnJheQADCAUJbGFzdEJsb2NrBmhlaWdodAYJARBibG9ja0hlaWdodEVycm9yAAkAzAgCAwkBAiE9AgUMdXNlclZvdGVJbmZvBQVFTVBUWQYJAQtub1ZvdGVFcnJvcgAFA25pbAMJAAACBQZjaGVja3MFBmNoZWNrcwQJZ3d4TnVtYmVyCQEFYXNJbnQBCQD8BwQJARFAZXh0ck5hdGl2ZSgxMDYyKQEJARFAZXh0ck5hdGl2ZSgxMDU4KQEJARJnd3hDb250cmFjdEFkZHJlc3MAAiBnZXRVc2VyR3d4QW1vdW50QXRIZWlnaHRSRUFET05MWQkAzAgCCQClCAEIBQFpBmNhbGxlcgkAzAgCCQEFdmFsdWUBCQC2CQEJAJEDAgUNdm90ZUluZm9BcnJheQADBQNuaWwFA25pbAQLJHQwNjc0MzcwODIDBQZjaG9pY2UECWZvck51bWJlcgUJZ3d4TnVtYmVyBA1hZ2FpbnN0TnVtYmVyAAAEDWNob2ljZUludGVnZXIAAQkAlQoDBQlmb3JOdW1iZXIFDWFnYWluc3ROdW1iZXIFDWNob2ljZUludGVnZXIECWZvck51bWJlcgAABA1hZ2FpbnN0TnVtYmVyBQlnd3hOdW1iZXIEDWNob2ljZUludGVnZXIAAAkAlQoDBQlmb3JOdW1iZXIFDWFnYWluc3ROdW1iZXIFDWNob2ljZUludGVnZXIEDHVzZXJQb3dlckZvcggFCyR0MDY3NDM3MDgyAl8xBBB1c2VyUG93ZXJBZ2FpbnN0CAULJHQwNjc0MzcwODICXzIECWNob2ljZUludAgFCyR0MDY3NDM3MDgyAl8zBAZhY3Rpb24DCQAAAgkAkQMCBRF1c2VyVm90ZUluZm9BcnJheQABAgExCQELU3RyaW5nRW50cnkCCQEPa2V5UHJvcG9zYWxJbmZvAQUNcHJvcG9zYWxJbmRleAkBEmZvcm1hdFByb3Bvc2FsSW5mbwYJAJEDAgUNdm90ZUluZm9BcnJheQABCQCRAwIFDXZvdGVJbmZvQXJyYXkAAgkAkQMCBQ12b3RlSW5mb0FycmF5AAMJAJEDAgUNdm90ZUluZm9BcnJheQAECQCkAwEJAGQCCQBlAgkBBXZhbHVlAQkAtgkBCQCRAwIFDXZvdGVJbmZvQXJyYXkABQkBBXZhbHVlAQkAtgkBCQCRAwIFEXVzZXJWb3RlSW5mb0FycmF5AAIFDHVzZXJQb3dlckZvcgkApAMBCQBkAgkBBXZhbHVlAQkAtgkBCQCRAwIFDXZvdGVJbmZvQXJyYXkABgUQdXNlclBvd2VyQWdhaW5zdAkBC1N0cmluZ0VudHJ5AgkBD2tleVByb3Bvc2FsSW5mbwEFDXByb3Bvc2FsSW5kZXgJARJmb3JtYXRQcm9wb3NhbEluZm8GCQCRAwIFDXZvdGVJbmZvQXJyYXkAAQkAkQMCBQ12b3RlSW5mb0FycmF5AAIJAJEDAgUNdm90ZUluZm9BcnJheQADCQCRAwIFDXZvdGVJbmZvQXJyYXkABAkApAMBCQBkAgkBBXZhbHVlAQkAtgkBCQCRAwIFDXZvdGVJbmZvQXJyYXkABQUMdXNlclBvd2VyRm9yCQCkAwEJAGQCCQBlAgkBBXZhbHVlAQkAtgkBCQCRAwIFDXZvdGVJbmZvQXJyYXkABgkBBXZhbHVlAQkAtgkBCQCRAwIFEXVzZXJWb3RlSW5mb0FycmF5AAIFEHVzZXJQb3dlckFnYWluc3QJAMwIAgUGYWN0aW9uCQDMCAIJAQtTdHJpbmdFbnRyeQIJARVrZXlVc2VyVm90ZU9uUHJvcG9zYWwCBQ1wcm9wb3NhbEluZGV4CQClCAEIBQFpBmNhbGxlcgkBGGZvcm1hdFVzZXJWb3RlT25Qcm9wb3NhbAIJAKQDAQUJY2hvaWNlSW50CQCkAwEFCWd3eE51bWJlcgUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBEWdldFJlc3VsdFJFQURPTkxZAQ1wcm9wb3NhbEluZGV4BAVFTVBUWQIFRU1QVFkECHZvdGVJbmZvCQELdmFsdWVPckVsc2UCCQCdCAIFBHRoaXMJAQ9rZXlQcm9wb3NhbEluZm8BBQ1wcm9wb3NhbEluZGV4BQVFTVBUWQQNdm90ZUluZm9BcnJheQkAtQkCBQh2b3RlSW5mbwUDU0VQBAZjaGVja3MJAMwIAgMJAQIhPQIFCHZvdGVJbmZvBQVFTVBUWQYJAAIBAgxObyBzdWNoIHZvdGUFA25pbAMJAAACBQZjaGVja3MFBmNoZWNrcwQNcG9zaXRpdmVWb3RlcwkAkQMCBQ12b3RlSW5mb0FycmF5AAUEDW5lZ2F0aXZlVm90ZXMJAJEDAgUNdm90ZUluZm9BcnJheQAGBAxxdW9ydW1OdW1iZXIJAJEDAgUNdm90ZUluZm9BcnJheQAECQCUCgIFA25pbAkAzAgCBQ1wb3NpdGl2ZVZvdGVzCQDMCAIFDW5lZ2F0aXZlVm90ZXMJAMwIAgUMcXVvcnVtTnVtYmVyBQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BAnR4AQZ2ZXJpZnkABA90YXJnZXRQdWJsaWNLZXkEByRtYXRjaDAJARZtYW5hZ2VyUHVibGljS2V5T3JVbml0AAMJAAECBQckbWF0Y2gwAgpCeXRlVmVjdG9yBAJwawUHJG1hdGNoMAUCcGsDCQABAgUHJG1hdGNoMAIEVW5pdAgFAnR4D3NlbmRlclB1YmxpY0tleQkAAgECC01hdGNoIGVycm9yCQD0AwMIBQJ0eAlib2R5Qnl0ZXMJAJEDAggFAnR4BnByb29mcwAABQ90YXJnZXRQdWJsaWNLZXn+uSJ5", "height": 2571656, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 47KkVHdpBz1cSrmEnkwVtLfCJ4dJGxWvRRPWVFmiTtv6 Next: 5k1vTSpvkyt3iGpyFrsyuDF45QXYPKhySFEY5sK85gDf Diff:
OldNewDifferences
3333 func getCurrentIndex () = getIntegerValue(this, keyCurrentIndex())
3434
3535
36-func getManagerAddressOrFail () = addressFromStringValue(getStringValue(keyManagerVaultAddress()))
36+func getManagerVaultAddressOrThis () = match getString(keyManagerVaultAddress()) {
37+ case s: String =>
38+ addressFromStringValue(s)
39+ case _ =>
40+ this
41+}
3742
3843
3944 func formatProposalInfo (name,description,end,quorumNumber,positiveVotes,negativeVotes) = makeString(["%d%d%d%d%d%d", name, description, end, quorumNumber, positiveVotes, negativeVotes], SEP)
5156
5257
5358 func managerPublicKeyOrUnit () = {
54- let managerVaultAddress = getManagerAddressOrFail()
59+ let managerVaultAddress = getManagerVaultAddressOrThis()
5560 match getString(managerVaultAddress, keyManagerPublicKey()) {
5661 case s: String =>
5762 fromBase58String(s)
107112 if ((checks == checks))
108113 then {
109114 let gwxNumber = asInt(invoke(addressFromStringValue(getStringValue(gwxContractAddress())), "getUserGwxAmountAtHeightREADONLY", [toString(i.caller), value(parseInt(voteInfoArray[3]))], nil))
110- let $t033714459 = if (choice)
115+ let $t034354523 = if (choice)
111116 then {
112117 let action1 = StringEntry(keyProposalInfo(proposalIndex), formatProposalInfo(voteInfoArray[1], voteInfoArray[2], voteInfoArray[3], voteInfoArray[4], toString((value(parseInt(voteInfoArray[5])) + gwxNumber)), voteInfoArray[6]))
113118 let action2 = StringEntry(keyUserVoteOnProposal(proposalIndex, toString(i.caller)), formatUserVoteOnProposal("1", toString(gwxNumber)))
118123 let action2 = StringEntry(keyUserVoteOnProposal(proposalIndex, toString(i.caller)), formatUserVoteOnProposal("0", toString(gwxNumber)))
119124 $Tuple2(action1, action2)
120125 }
121- let action1 = $t033714459._1
122- let action2 = $t033714459._2
126+ let action1 = $t034354523._1
127+ let action2 = $t034354523._2
123128 [action1, action2]
124129 }
125130 else throw("Strict value is not equal to itself.")
170175 if ((checks == checks))
171176 then {
172177 let gwxNumber = asInt(invoke(addressFromStringValue(getStringValue(gwxContractAddress())), "getUserGwxAmountAtHeightREADONLY", [toString(i.caller), value(parseInt(voteInfoArray[3]))], nil))
173- let $t066797018 = if (choice)
178+ let $t067437082 = if (choice)
174179 then {
175180 let forNumber = gwxNumber
176181 let againstNumber = 0
183188 let choiceInteger = 0
184189 $Tuple3(forNumber, againstNumber, choiceInteger)
185190 }
186- let userPowerFor = $t066797018._1
187- let userPowerAgainst = $t066797018._2
188- let choiceInt = $t066797018._3
191+ let userPowerFor = $t067437082._1
192+ let userPowerAgainst = $t067437082._2
193+ let choiceInt = $t067437082._3
189194 let action = if ((userVoteInfoArray[1] == "1"))
190195 then StringEntry(keyProposalInfo(proposalIndex), formatProposalInfo(voteInfoArray[1], voteInfoArray[2], voteInfoArray[3], voteInfoArray[4], toString(((value(parseInt(voteInfoArray[5])) - value(parseInt(userVoteInfoArray[2]))) + userPowerFor)), toString((value(parseInt(voteInfoArray[6])) + userPowerAgainst))))
191196 else StringEntry(keyProposalInfo(proposalIndex), formatProposalInfo(voteInfoArray[1], voteInfoArray[2], voteInfoArray[3], voteInfoArray[4], toString((value(parseInt(voteInfoArray[5])) + userPowerFor)), toString(((value(parseInt(voteInfoArray[6])) - value(parseInt(userVoteInfoArray[2]))) + userPowerAgainst))))
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let SEP = "__"
55
66 func blockHeightError () = throw("The block's height is too big for this proposal")
77
88
99 func alreadyVoteError () = throw("You have already voted")
1010
1111
1212 func noVoteError () = throw("You have not already voted")
1313
1414
1515 func gwxContractAddress () = makeString(["%s", "gwxContractAddress"], SEP)
1616
1717
1818 func keyCurrentIndex () = makeString(["%s", "currentIndex"], SEP)
1919
2020
2121 func keyProposalInfo (number) = makeString(["%s%d", "proposalInfo", toString(number)], SEP)
2222
2323
2424 func keyUserVoteOnProposal (number,user) = makeString(["%s%d%s", "userVoteOnProposal", toString(number), user], SEP)
2525
2626
2727 func keyManagerPublicKey () = "%s__managerPublicKey"
2828
2929
3030 func keyManagerVaultAddress () = "%s__managerVaultAddress"
3131
3232
3333 func getCurrentIndex () = getIntegerValue(this, keyCurrentIndex())
3434
3535
36-func getManagerAddressOrFail () = addressFromStringValue(getStringValue(keyManagerVaultAddress()))
36+func getManagerVaultAddressOrThis () = match getString(keyManagerVaultAddress()) {
37+ case s: String =>
38+ addressFromStringValue(s)
39+ case _ =>
40+ this
41+}
3742
3843
3944 func formatProposalInfo (name,description,end,quorumNumber,positiveVotes,negativeVotes) = makeString(["%d%d%d%d%d%d", name, description, end, quorumNumber, positiveVotes, negativeVotes], SEP)
4045
4146
4247 func formatUserVoteOnProposal (vote,gwxNumber) = makeString(["%d%d", vote, gwxNumber], SEP)
4348
4449
4550 func asInt (val) = match val {
4651 case valInt: Int =>
4752 valInt
4853 case _ =>
4954 throw("fail to cast into Int")
5055 }
5156
5257
5358 func managerPublicKeyOrUnit () = {
54- let managerVaultAddress = getManagerAddressOrFail()
59+ let managerVaultAddress = getManagerVaultAddressOrThis()
5560 match getString(managerVaultAddress, keyManagerPublicKey()) {
5661 case s: String =>
5762 fromBase58String(s)
5863 case _: Unit =>
5964 unit
6065 case _ =>
6166 throw("Match error")
6267 }
6368 }
6469
6570
6671 func isManager (i) = match managerPublicKeyOrUnit() {
6772 case pk: ByteVector =>
6873 (i.callerPublicKey == pk)
6974 case _: Unit =>
7075 (i.caller == this)
7176 case _ =>
7277 throw("Match error")
7378 }
7479
7580
7681 func mustManager (i) = if (isManager(i))
7782 then true
7883 else throw("permission denied")
7984
8085
8186 @Callable(i)
8287 func startNewVote (name,description,expirationHeight,quorumNumber) = {
8388 let checks = [mustManager(i)]
8489 if ((checks == checks))
8590 then {
8691 let theIndex = getCurrentIndex()
8792 [IntegerEntry(keyCurrentIndex(), (theIndex + 1)), StringEntry(keyProposalInfo(theIndex), formatProposalInfo(name, description, toString((lastBlock.height + expirationHeight)), toString(quorumNumber), "0", "0"))]
8893 }
8994 else throw("Strict value is not equal to itself.")
9095 }
9196
9297
9398
9499 @Callable(i)
95100 func voteFor (proposalIndex,choice) = {
96101 let EMPTY = "EMPTY"
97102 let voteInfo = valueOrElse(getString(this, keyProposalInfo(proposalIndex)), EMPTY)
98103 let voteInfoArray = split(voteInfo, SEP)
99104 let userVoteInfo = valueOrElse(getString(this, keyUserVoteOnProposal(proposalIndex, toString(i.caller))), EMPTY)
100105 let checks = [if ((voteInfo != EMPTY))
101106 then true
102107 else throw("No such vote"), if ((value(parseInt(voteInfoArray[3])) > lastBlock.height))
103108 then true
104109 else blockHeightError(), if ((userVoteInfo == EMPTY))
105110 then true
106111 else alreadyVoteError()]
107112 if ((checks == checks))
108113 then {
109114 let gwxNumber = asInt(invoke(addressFromStringValue(getStringValue(gwxContractAddress())), "getUserGwxAmountAtHeightREADONLY", [toString(i.caller), value(parseInt(voteInfoArray[3]))], nil))
110- let $t033714459 = if (choice)
115+ let $t034354523 = if (choice)
111116 then {
112117 let action1 = StringEntry(keyProposalInfo(proposalIndex), formatProposalInfo(voteInfoArray[1], voteInfoArray[2], voteInfoArray[3], voteInfoArray[4], toString((value(parseInt(voteInfoArray[5])) + gwxNumber)), voteInfoArray[6]))
113118 let action2 = StringEntry(keyUserVoteOnProposal(proposalIndex, toString(i.caller)), formatUserVoteOnProposal("1", toString(gwxNumber)))
114119 $Tuple2(action1, action2)
115120 }
116121 else {
117122 let action1 = StringEntry(keyProposalInfo(proposalIndex), formatProposalInfo(voteInfoArray[1], voteInfoArray[2], voteInfoArray[3], voteInfoArray[4], voteInfoArray[5], toString((value(parseInt(voteInfoArray[6])) + gwxNumber))))
118123 let action2 = StringEntry(keyUserVoteOnProposal(proposalIndex, toString(i.caller)), formatUserVoteOnProposal("0", toString(gwxNumber)))
119124 $Tuple2(action1, action2)
120125 }
121- let action1 = $t033714459._1
122- let action2 = $t033714459._2
126+ let action1 = $t034354523._1
127+ let action2 = $t034354523._2
123128 [action1, action2]
124129 }
125130 else throw("Strict value is not equal to itself.")
126131 }
127132
128133
129134
130135 @Callable(i)
131136 func deleteVote (proposalIndex) = {
132137 let EMPTY = "EMPTY"
133138 let voteInfo = valueOrElse(getString(this, keyProposalInfo(proposalIndex)), EMPTY)
134139 let voteInfoArray = split(voteInfo, SEP)
135140 let userVoteInfo = valueOrElse(getString(this, keyUserVoteOnProposal(proposalIndex, toString(i.caller))), EMPTY)
136141 let userVoteInfoArray = split(userVoteInfo, SEP)
137142 let checks = [if ((voteInfo != EMPTY))
138143 then true
139144 else throw("No such vote"), if ((value(parseInt(voteInfoArray[3])) > lastBlock.height))
140145 then true
141146 else blockHeightError(), if ((userVoteInfo != EMPTY))
142147 then true
143148 else noVoteError()]
144149 if ((checks == checks))
145150 then {
146151 let action = if ((userVoteInfoArray[1] == "1"))
147152 then StringEntry(keyProposalInfo(proposalIndex), formatProposalInfo(voteInfoArray[1], voteInfoArray[2], voteInfoArray[3], voteInfoArray[4], toString((value(parseInt(voteInfoArray[5])) - value(parseInt(userVoteInfoArray[2])))), voteInfoArray[6]))
148153 else StringEntry(keyProposalInfo(proposalIndex), formatProposalInfo(voteInfoArray[1], voteInfoArray[2], voteInfoArray[3], voteInfoArray[4], voteInfoArray[5], toString((value(parseInt(voteInfoArray[6])) - value(parseInt(userVoteInfoArray[2]))))))
149154 [action, DeleteEntry(keyUserVoteOnProposal(proposalIndex, toString(i.caller)))]
150155 }
151156 else throw("Strict value is not equal to itself.")
152157 }
153158
154159
155160
156161 @Callable(i)
157162 func changeVote (proposalIndex,choice) = {
158163 let EMPTY = "EMPTY"
159164 let voteInfo = valueOrElse(getString(this, keyProposalInfo(proposalIndex)), EMPTY)
160165 let voteInfoArray = split(voteInfo, SEP)
161166 let userVoteInfo = valueOrElse(getString(this, keyUserVoteOnProposal(proposalIndex, toString(i.caller))), EMPTY)
162167 let userVoteInfoArray = split(userVoteInfo, SEP)
163168 let checks = [if ((voteInfo != EMPTY))
164169 then true
165170 else throw("No such vote"), if ((value(parseInt(voteInfoArray[3])) > lastBlock.height))
166171 then true
167172 else blockHeightError(), if ((userVoteInfo != EMPTY))
168173 then true
169174 else noVoteError()]
170175 if ((checks == checks))
171176 then {
172177 let gwxNumber = asInt(invoke(addressFromStringValue(getStringValue(gwxContractAddress())), "getUserGwxAmountAtHeightREADONLY", [toString(i.caller), value(parseInt(voteInfoArray[3]))], nil))
173- let $t066797018 = if (choice)
178+ let $t067437082 = if (choice)
174179 then {
175180 let forNumber = gwxNumber
176181 let againstNumber = 0
177182 let choiceInteger = 1
178183 $Tuple3(forNumber, againstNumber, choiceInteger)
179184 }
180185 else {
181186 let forNumber = 0
182187 let againstNumber = gwxNumber
183188 let choiceInteger = 0
184189 $Tuple3(forNumber, againstNumber, choiceInteger)
185190 }
186- let userPowerFor = $t066797018._1
187- let userPowerAgainst = $t066797018._2
188- let choiceInt = $t066797018._3
191+ let userPowerFor = $t067437082._1
192+ let userPowerAgainst = $t067437082._2
193+ let choiceInt = $t067437082._3
189194 let action = if ((userVoteInfoArray[1] == "1"))
190195 then StringEntry(keyProposalInfo(proposalIndex), formatProposalInfo(voteInfoArray[1], voteInfoArray[2], voteInfoArray[3], voteInfoArray[4], toString(((value(parseInt(voteInfoArray[5])) - value(parseInt(userVoteInfoArray[2]))) + userPowerFor)), toString((value(parseInt(voteInfoArray[6])) + userPowerAgainst))))
191196 else StringEntry(keyProposalInfo(proposalIndex), formatProposalInfo(voteInfoArray[1], voteInfoArray[2], voteInfoArray[3], voteInfoArray[4], toString((value(parseInt(voteInfoArray[5])) + userPowerFor)), toString(((value(parseInt(voteInfoArray[6])) - value(parseInt(userVoteInfoArray[2]))) + userPowerAgainst))))
192197 [action, StringEntry(keyUserVoteOnProposal(proposalIndex, toString(i.caller)), formatUserVoteOnProposal(toString(choiceInt), toString(gwxNumber)))]
193198 }
194199 else throw("Strict value is not equal to itself.")
195200 }
196201
197202
198203
199204 @Callable(i)
200205 func getResultREADONLY (proposalIndex) = {
201206 let EMPTY = "EMPTY"
202207 let voteInfo = valueOrElse(getString(this, keyProposalInfo(proposalIndex)), EMPTY)
203208 let voteInfoArray = split(voteInfo, SEP)
204209 let checks = [if ((voteInfo != EMPTY))
205210 then true
206211 else throw("No such vote")]
207212 if ((checks == checks))
208213 then {
209214 let positiveVotes = voteInfoArray[5]
210215 let negativeVotes = voteInfoArray[6]
211216 let quorumNumber = voteInfoArray[4]
212217 $Tuple2(nil, [positiveVotes, negativeVotes, quorumNumber])
213218 }
214219 else throw("Strict value is not equal to itself.")
215220 }
216221
217222
218223 @Verifier(tx)
219224 func verify () = {
220225 let targetPublicKey = match managerPublicKeyOrUnit() {
221226 case pk: ByteVector =>
222227 pk
223228 case _: Unit =>
224229 tx.senderPublicKey
225230 case _ =>
226231 throw("Match error")
227232 }
228233 sigVerify(tx.bodyBytes, tx.proofs[0], targetPublicKey)
229234 }
230235

github/deemru/w8io/3ef1775 
56.61 ms