tx · AWXpGLVBTpVYL7fFxs5F8XsA8zeTMwevVJv2WxLAWLeK

3N3vjjwCXWsTfu2w6biwcPhZe3v17HGY3tR:  -0.01300000 Waves

2023.07.21 09:34 [2675443] smart account 3N3vjjwCXWsTfu2w6biwcPhZe3v17HGY3tR > SELF 0.00000000 Waves

{ "type": 13, "id": "AWXpGLVBTpVYL7fFxs5F8XsA8zeTMwevVJv2WxLAWLeK", "fee": 1300000, "feeAssetId": null, "timestamp": 1689932194618, "version": 2, "chainId": 84, "sender": "3N3vjjwCXWsTfu2w6biwcPhZe3v17HGY3tR", "senderPublicKey": "B2SJ1BXVdLQeEg3kiwBCznf5t6GjLEz81mEWEV3fs2vF", "proofs": [ "SHoWs6xYgavfXKSp2JiEbqvEU1dEsCDUEsPCRHF5hKDvEpv9X2HCumvahng1mDNgpdSxbLKq1yHi44FLfdyGhmR" ], "script": "base64:BgIgCAISBgoECAgBARIECgIBBBIDCgEBEgQKAgEEEgMKAQESAANTRVACAl9fARBibG9ja0hlaWdodEVycm9yAAkAAgECL1RoZSBibG9jaydzIGhlaWdodCBpcyB0b28gYmlnIGZvciB0aGlzIHByb3Bvc2FsARBhbHJlYWR5Vm90ZUVycm9yAAkAAgECFllvdSBoYXZlIGFscmVhZHkgdm90ZWQBC25vVm90ZUVycm9yAAkAAgECGllvdSBoYXZlIG5vdCBhbHJlYWR5IHZvdGVkARJnd3hDb250cmFjdEFkZHJlc3MACQC5CQIJAMwIAgICJXMJAMwIAgISZ3d4Q29udHJhY3RBZGRyZXNzBQNuaWwFA1NFUAEPa2V5Q3VycmVudEluZGV4AAkAuQkCCQDMCAICAiVzCQDMCAICDGN1cnJlbnRJbmRleAUDbmlsBQNTRVABD2tleVByb3Bvc2FsSW5mbwEGbnVtYmVyCQC5CQIJAMwIAgIEJXMlZAkAzAgCAgxwcm9wb3NhbEluZm8JAMwIAgkApAMBBQZudW1iZXIFA25pbAUDU0VQARVrZXlVc2VyVm90ZU9uUHJvcG9zYWwCBm51bWJlcgR1c2VyCQC5CQIJAMwIAgIGJXMlZCVzCQDMCAICEnVzZXJWb3RlT25Qcm9wb3NhbAkAzAgCCQCkAwEFBm51bWJlcgkAzAgCBQR1c2VyBQNuaWwFA1NFUAETa2V5TWFuYWdlclB1YmxpY0tleQACFCVzX19tYW5hZ2VyUHVibGljS2V5ARZrZXlNYW5hZ2VyVmF1bHRBZGRyZXNzAAIXJXNfX21hbmFnZXJWYXVsdEFkZHJlc3MBD2dldEN1cnJlbnRJbmRleAAJARFAZXh0ck5hdGl2ZSgxMDUwKQIFBHRoaXMJAQ9rZXlDdXJyZW50SW5kZXgAARxnZXRNYW5hZ2VyVmF1bHRBZGRyZXNzT3JUaGlzAAQHJG1hdGNoMAkAoggBCQEWa2V5TWFuYWdlclZhdWx0QWRkcmVzcwADCQABAgUHJG1hdGNoMAIGU3RyaW5nBAFzBQckbWF0Y2gwCQERQGV4dHJOYXRpdmUoMTA2MikBBQFzBQR0aGlzARJmb3JtYXRQcm9wb3NhbEluZm8GBG5hbWULZGVzY3JpcHRpb24DZW5kDHF1b3J1bU51bWJlcg1wb3NpdGl2ZVZvdGVzDW5lZ2F0aXZlVm90ZXMJALkJAgkAzAgCAgwlZCVkJWQlZCVkJWQJAMwIAgUEbmFtZQkAzAgCBQtkZXNjcmlwdGlvbgkAzAgCBQNlbmQJAMwIAgUMcXVvcnVtTnVtYmVyCQDMCAIFDXBvc2l0aXZlVm90ZXMJAMwIAgUNbmVnYXRpdmVWb3RlcwUDbmlsBQNTRVABGGZvcm1hdFVzZXJWb3RlT25Qcm9wb3NhbAIEdm90ZQlnd3hOdW1iZXIJALkJAgkAzAgCAgQlZCVkCQDMCAIFBHZvdGUJAMwIAgUJZ3d4TnVtYmVyBQNuaWwFA1NFUAEFYXNJbnQBA3ZhbAQHJG1hdGNoMAUDdmFsAwkAAQIFByRtYXRjaDACA0ludAQGdmFsSW50BQckbWF0Y2gwBQZ2YWxJbnQJAAIBAhVmYWlsIHRvIGNhc3QgaW50byBJbnQBFm1hbmFnZXJQdWJsaWNLZXlPclVuaXQABBNtYW5hZ2VyVmF1bHRBZGRyZXNzCQEcZ2V0TWFuYWdlclZhdWx0QWRkcmVzc09yVGhpcwAEByRtYXRjaDAJAJ0IAgUTbWFuYWdlclZhdWx0QWRkcmVzcwkBE2tleU1hbmFnZXJQdWJsaWNLZXkAAwkAAQIFByRtYXRjaDACBlN0cmluZwQBcwUHJG1hdGNoMAkA2QQBBQFzAwkAAQIFByRtYXRjaDACBFVuaXQFBHVuaXQJAAIBAgtNYXRjaCBlcnJvcgEJaXNNYW5hZ2VyAQFpBAckbWF0Y2gwCQEWbWFuYWdlclB1YmxpY0tleU9yVW5pdAADCQABAgUHJG1hdGNoMAIKQnl0ZVZlY3RvcgQCcGsFByRtYXRjaDAJAAACCAUBaQ9jYWxsZXJQdWJsaWNLZXkFAnBrAwkAAQIFByRtYXRjaDACBFVuaXQJAAACCAUBaQZjYWxsZXIFBHRoaXMJAAIBAgtNYXRjaCBlcnJvcgELbXVzdE1hbmFnZXIBAWkDCQEJaXNNYW5hZ2VyAQUBaQYJAAIBAhFwZXJtaXNzaW9uIGRlbmllZAUBaQEMc3RhcnROZXdWb3RlBARuYW1lC2Rlc2NyaXB0aW9uEGV4cGlyYXRpb25IZWlnaHQMcXVvcnVtTnVtYmVyBAZjaGVja3MJAMwIAgkBC211c3RNYW5hZ2VyAQUBaQUDbmlsAwkAAAIFBmNoZWNrcwUGY2hlY2tzBAh0aGVJbmRleAkBD2dldEN1cnJlbnRJbmRleAAJAMwIAgkBDEludGVnZXJFbnRyeQIJAQ9rZXlDdXJyZW50SW5kZXgACQBkAgUIdGhlSW5kZXgAAQkAzAgCCQELU3RyaW5nRW50cnkCCQEPa2V5UHJvcG9zYWxJbmZvAQUIdGhlSW5kZXgJARJmb3JtYXRQcm9wb3NhbEluZm8GBQRuYW1lBQtkZXNjcmlwdGlvbgkApAMBCQBkAggFCWxhc3RCbG9jawZoZWlnaHQFEGV4cGlyYXRpb25IZWlnaHQJAKQDAQUMcXVvcnVtTnVtYmVyAgEwAgEwBQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEHdm90ZUZvcgINcHJvcG9zYWxJbmRleAZjaG9pY2UEBUVNUFRZAgVFTVBUWQQIdm90ZUluZm8JAQt2YWx1ZU9yRWxzZQIJAJ0IAgUEdGhpcwkBD2tleVByb3Bvc2FsSW5mbwEFDXByb3Bvc2FsSW5kZXgFBUVNUFRZBA12b3RlSW5mb0FycmF5CQC1CQIFCHZvdGVJbmZvBQNTRVAEDHVzZXJWb3RlSW5mbwkBC3ZhbHVlT3JFbHNlAgkAnQgCBQR0aGlzCQEVa2V5VXNlclZvdGVPblByb3Bvc2FsAgUNcHJvcG9zYWxJbmRleAkApQgBCAUBaQZjYWxsZXIFBUVNUFRZBAZjaGVja3MJAMwIAgMJAQIhPQIFCHZvdGVJbmZvBQVFTVBUWQYJAAIBAgxObyBzdWNoIHZvdGUJAMwIAgMJAGYCCQEFdmFsdWUBCQC2CQEJAJEDAgUNdm90ZUluZm9BcnJheQADCAUJbGFzdEJsb2NrBmhlaWdodAYJARBibG9ja0hlaWdodEVycm9yAAkAzAgCAwkAAAIFDHVzZXJWb3RlSW5mbwUFRU1QVFkGCQEQYWxyZWFkeVZvdGVFcnJvcgAFA25pbAMJAAACBQZjaGVja3MFBmNoZWNrcwQJZ3d4TnVtYmVyCQEFYXNJbnQBCQD8BwQJARFAZXh0ck5hdGl2ZSgxMDYyKQEJARFAZXh0ck5hdGl2ZSgxMDU4KQEJARJnd3hDb250cmFjdEFkZHJlc3MAAiBnZXRVc2VyR3d4QW1vdW50QXRIZWlnaHRSRUFET05MWQkAzAgCCQClCAEIBQFpBmNhbGxlcgkAzAgCCQEFdmFsdWUBCQC2CQEJAJEDAgUNdm90ZUluZm9BcnJheQADBQNuaWwFA25pbAQLJHQwMzQzNTQ1MjMDBQZjaG9pY2UEB2FjdGlvbjEJAQtTdHJpbmdFbnRyeQIJAQ9rZXlQcm9wb3NhbEluZm8BBQ1wcm9wb3NhbEluZGV4CQESZm9ybWF0UHJvcG9zYWxJbmZvBgkAkQMCBQ12b3RlSW5mb0FycmF5AAEJAJEDAgUNdm90ZUluZm9BcnJheQACCQCRAwIFDXZvdGVJbmZvQXJyYXkAAwkAkQMCBQ12b3RlSW5mb0FycmF5AAQJAKQDAQkAZAIJAQV2YWx1ZQEJALYJAQkAkQMCBQ12b3RlSW5mb0FycmF5AAUFCWd3eE51bWJlcgkAkQMCBQ12b3RlSW5mb0FycmF5AAYEB2FjdGlvbjIJAQtTdHJpbmdFbnRyeQIJARVrZXlVc2VyVm90ZU9uUHJvcG9zYWwCBQ1wcm9wb3NhbEluZGV4CQClCAEIBQFpBmNhbGxlcgkBGGZvcm1hdFVzZXJWb3RlT25Qcm9wb3NhbAICATEJAKQDAQUJZ3d4TnVtYmVyCQCUCgIFB2FjdGlvbjEFB2FjdGlvbjIEB2FjdGlvbjEJAQtTdHJpbmdFbnRyeQIJAQ9rZXlQcm9wb3NhbEluZm8BBQ1wcm9wb3NhbEluZGV4CQESZm9ybWF0UHJvcG9zYWxJbmZvBgkAkQMCBQ12b3RlSW5mb0FycmF5AAEJAJEDAgUNdm90ZUluZm9BcnJheQACCQCRAwIFDXZvdGVJbmZvQXJyYXkAAwkAkQMCBQ12b3RlSW5mb0FycmF5AAQJAJEDAgUNdm90ZUluZm9BcnJheQAFCQCkAwEJAGQCCQEFdmFsdWUBCQC2CQEJAJEDAgUNdm90ZUluZm9BcnJheQAGBQlnd3hOdW1iZXIEB2FjdGlvbjIJAQtTdHJpbmdFbnRyeQIJARVrZXlVc2VyVm90ZU9uUHJvcG9zYWwCBQ1wcm9wb3NhbEluZGV4CQClCAEIBQFpBmNhbGxlcgkBGGZvcm1hdFVzZXJWb3RlT25Qcm9wb3NhbAICATAJAKQDAQUJZ3d4TnVtYmVyCQCUCgIFB2FjdGlvbjEFB2FjdGlvbjIEB2FjdGlvbjEIBQskdDAzNDM1NDUyMwJfMQQHYWN0aW9uMggFCyR0MDM0MzU0NTIzAl8yCQDMCAIFB2FjdGlvbjEJAMwIAgUHYWN0aW9uMgUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBCmRlbGV0ZVZvdGUBDXByb3Bvc2FsSW5kZXgEBUVNUFRZAgVFTVBUWQQIdm90ZUluZm8JAQt2YWx1ZU9yRWxzZQIJAJ0IAgUEdGhpcwkBD2tleVByb3Bvc2FsSW5mbwEFDXByb3Bvc2FsSW5kZXgFBUVNUFRZBA12b3RlSW5mb0FycmF5CQC1CQIFCHZvdGVJbmZvBQNTRVAEDHVzZXJWb3RlSW5mbwkBC3ZhbHVlT3JFbHNlAgkAnQgCBQR0aGlzCQEVa2V5VXNlclZvdGVPblByb3Bvc2FsAgUNcHJvcG9zYWxJbmRleAkApQgBCAUBaQZjYWxsZXIFBUVNUFRZBBF1c2VyVm90ZUluZm9BcnJheQkAtQkCBQx1c2VyVm90ZUluZm8FA1NFUAQGY2hlY2tzCQDMCAIDCQECIT0CBQh2b3RlSW5mbwUFRU1QVFkGCQACAQIMTm8gc3VjaCB2b3RlCQDMCAIDCQBmAgkBBXZhbHVlAQkAtgkBCQCRAwIFDXZvdGVJbmZvQXJyYXkAAwgFCWxhc3RCbG9jawZoZWlnaHQGCQEQYmxvY2tIZWlnaHRFcnJvcgAJAMwIAgMJAQIhPQIFDHVzZXJWb3RlSW5mbwUFRU1QVFkGCQELbm9Wb3RlRXJyb3IABQNuaWwDCQAAAgUGY2hlY2tzBQZjaGVja3MEBmFjdGlvbgMJAAACCQCRAwIFEXVzZXJWb3RlSW5mb0FycmF5AAECATEJAQtTdHJpbmdFbnRyeQIJAQ9rZXlQcm9wb3NhbEluZm8BBQ1wcm9wb3NhbEluZGV4CQESZm9ybWF0UHJvcG9zYWxJbmZvBgkAkQMCBQ12b3RlSW5mb0FycmF5AAEJAJEDAgUNdm90ZUluZm9BcnJheQACCQCRAwIFDXZvdGVJbmZvQXJyYXkAAwkAkQMCBQ12b3RlSW5mb0FycmF5AAQJAKQDAQkAZQIJAQV2YWx1ZQEJALYJAQkAkQMCBQ12b3RlSW5mb0FycmF5AAUJAQV2YWx1ZQEJALYJAQkAkQMCBRF1c2VyVm90ZUluZm9BcnJheQACCQCRAwIFDXZvdGVJbmZvQXJyYXkABgkBC1N0cmluZ0VudHJ5AgkBD2tleVByb3Bvc2FsSW5mbwEFDXByb3Bvc2FsSW5kZXgJARJmb3JtYXRQcm9wb3NhbEluZm8GCQCRAwIFDXZvdGVJbmZvQXJyYXkAAQkAkQMCBQ12b3RlSW5mb0FycmF5AAIJAJEDAgUNdm90ZUluZm9BcnJheQADCQCRAwIFDXZvdGVJbmZvQXJyYXkABAkAkQMCBQ12b3RlSW5mb0FycmF5AAUJAKQDAQkAZQIJAQV2YWx1ZQEJALYJAQkAkQMCBQ12b3RlSW5mb0FycmF5AAYJAQV2YWx1ZQEJALYJAQkAkQMCBRF1c2VyVm90ZUluZm9BcnJheQACCQDMCAIFBmFjdGlvbgkAzAgCCQELRGVsZXRlRW50cnkBCQEVa2V5VXNlclZvdGVPblByb3Bvc2FsAgUNcHJvcG9zYWxJbmRleAkApQgBCAUBaQZjYWxsZXIFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpAQpjaGFuZ2VWb3RlAg1wcm9wb3NhbEluZGV4BmNob2ljZQQFRU1QVFkCBUVNUFRZBAh2b3RlSW5mbwkBC3ZhbHVlT3JFbHNlAgkAnQgCBQR0aGlzCQEPa2V5UHJvcG9zYWxJbmZvAQUNcHJvcG9zYWxJbmRleAUFRU1QVFkEDXZvdGVJbmZvQXJyYXkJALUJAgUIdm90ZUluZm8FA1NFUAQMdXNlclZvdGVJbmZvCQELdmFsdWVPckVsc2UCCQCdCAIFBHRoaXMJARVrZXlVc2VyVm90ZU9uUHJvcG9zYWwCBQ1wcm9wb3NhbEluZGV4CQClCAEIBQFpBmNhbGxlcgUFRU1QVFkEEXVzZXJWb3RlSW5mb0FycmF5CQC1CQIFDHVzZXJWb3RlSW5mbwUDU0VQBAZjaGVja3MJAMwIAgMJAQIhPQIFCHZvdGVJbmZvBQVFTVBUWQYJAAIBAgxObyBzdWNoIHZvdGUJAMwIAgMJAGYCCQEFdmFsdWUBCQC2CQEJAJEDAgUNdm90ZUluZm9BcnJheQADCAUJbGFzdEJsb2NrBmhlaWdodAYJARBibG9ja0hlaWdodEVycm9yAAkAzAgCAwkBAiE9AgUMdXNlclZvdGVJbmZvBQVFTVBUWQYJAQtub1ZvdGVFcnJvcgAFA25pbAMJAAACBQZjaGVja3MFBmNoZWNrcwQJZ3d4TnVtYmVyCQEFYXNJbnQBCQD8BwQJARFAZXh0ck5hdGl2ZSgxMDYyKQEJARFAZXh0ck5hdGl2ZSgxMDU4KQEJARJnd3hDb250cmFjdEFkZHJlc3MAAiBnZXRVc2VyR3d4QW1vdW50QXRIZWlnaHRSRUFET05MWQkAzAgCCQClCAEIBQFpBmNhbGxlcgkAzAgCCQEFdmFsdWUBCQC2CQEJAJEDAgUNdm90ZUluZm9BcnJheQADBQNuaWwFA25pbAQLJHQwNjc0MzcwODIDBQZjaG9pY2UECWZvck51bWJlcgUJZ3d4TnVtYmVyBA1hZ2FpbnN0TnVtYmVyAAAEDWNob2ljZUludGVnZXIAAQkAlQoDBQlmb3JOdW1iZXIFDWFnYWluc3ROdW1iZXIFDWNob2ljZUludGVnZXIECWZvck51bWJlcgAABA1hZ2FpbnN0TnVtYmVyBQlnd3hOdW1iZXIEDWNob2ljZUludGVnZXIAAAkAlQoDBQlmb3JOdW1iZXIFDWFnYWluc3ROdW1iZXIFDWNob2ljZUludGVnZXIEDHVzZXJQb3dlckZvcggFCyR0MDY3NDM3MDgyAl8xBBB1c2VyUG93ZXJBZ2FpbnN0CAULJHQwNjc0MzcwODICXzIECWNob2ljZUludAgFCyR0MDY3NDM3MDgyAl8zBAZhY3Rpb24DCQAAAgkAkQMCBRF1c2VyVm90ZUluZm9BcnJheQABAgExCQELU3RyaW5nRW50cnkCCQEPa2V5UHJvcG9zYWxJbmZvAQUNcHJvcG9zYWxJbmRleAkBEmZvcm1hdFByb3Bvc2FsSW5mbwYJAJEDAgUNdm90ZUluZm9BcnJheQABCQCRAwIFDXZvdGVJbmZvQXJyYXkAAgkAkQMCBQ12b3RlSW5mb0FycmF5AAMJAJEDAgUNdm90ZUluZm9BcnJheQAECQCkAwEJAGQCCQBlAgkBBXZhbHVlAQkAtgkBCQCRAwIFDXZvdGVJbmZvQXJyYXkABQkBBXZhbHVlAQkAtgkBCQCRAwIFEXVzZXJWb3RlSW5mb0FycmF5AAIFDHVzZXJQb3dlckZvcgkApAMBCQBkAgkBBXZhbHVlAQkAtgkBCQCRAwIFDXZvdGVJbmZvQXJyYXkABgUQdXNlclBvd2VyQWdhaW5zdAkBC1N0cmluZ0VudHJ5AgkBD2tleVByb3Bvc2FsSW5mbwEFDXByb3Bvc2FsSW5kZXgJARJmb3JtYXRQcm9wb3NhbEluZm8GCQCRAwIFDXZvdGVJbmZvQXJyYXkAAQkAkQMCBQ12b3RlSW5mb0FycmF5AAIJAJEDAgUNdm90ZUluZm9BcnJheQADCQCRAwIFDXZvdGVJbmZvQXJyYXkABAkApAMBCQBkAgkBBXZhbHVlAQkAtgkBCQCRAwIFDXZvdGVJbmZvQXJyYXkABQUMdXNlclBvd2VyRm9yCQCkAwEJAGQCCQBlAgkBBXZhbHVlAQkAtgkBCQCRAwIFDXZvdGVJbmZvQXJyYXkABgkBBXZhbHVlAQkAtgkBCQCRAwIFEXVzZXJWb3RlSW5mb0FycmF5AAIFEHVzZXJQb3dlckFnYWluc3QJAMwIAgUGYWN0aW9uCQDMCAIJAQtTdHJpbmdFbnRyeQIJARVrZXlVc2VyVm90ZU9uUHJvcG9zYWwCBQ1wcm9wb3NhbEluZGV4CQClCAEIBQFpBmNhbGxlcgkBGGZvcm1hdFVzZXJWb3RlT25Qcm9wb3NhbAIJAKQDAQUJY2hvaWNlSW50CQCkAwEFCWd3eE51bWJlcgUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBEWdldFJlc3VsdFJFQURPTkxZAQ1wcm9wb3NhbEluZGV4BAVFTVBUWQIFRU1QVFkECHZvdGVJbmZvCQELdmFsdWVPckVsc2UCCQCdCAIFBHRoaXMJAQ9rZXlQcm9wb3NhbEluZm8BBQ1wcm9wb3NhbEluZGV4BQVFTVBUWQQNdm90ZUluZm9BcnJheQkAtQkCBQh2b3RlSW5mbwUDU0VQBAZjaGVja3MJAMwIAgMJAQIhPQIFCHZvdGVJbmZvBQVFTVBUWQYJAAIBAgxObyBzdWNoIHZvdGUFA25pbAMJAAACBQZjaGVja3MFBmNoZWNrcwQNcG9zaXRpdmVWb3RlcwkAkQMCBQ12b3RlSW5mb0FycmF5AAUEDW5lZ2F0aXZlVm90ZXMJAJEDAgUNdm90ZUluZm9BcnJheQAGBAxxdW9ydW1OdW1iZXIJAJEDAgUNdm90ZUluZm9BcnJheQAECQCUCgIFA25pbAkAzAgCBQ1wb3NpdGl2ZVZvdGVzCQDMCAIFDW5lZ2F0aXZlVm90ZXMJAMwIAgUMcXVvcnVtTnVtYmVyBQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BAnR4AQZ2ZXJpZnkABA90YXJnZXRQdWJsaWNLZXkEByRtYXRjaDAJARZtYW5hZ2VyUHVibGljS2V5T3JVbml0AAMJAAECBQckbWF0Y2gwAgpCeXRlVmVjdG9yBAJwawUHJG1hdGNoMAUCcGsDCQABAgUHJG1hdGNoMAIEVW5pdAgFAnR4D3NlbmRlclB1YmxpY0tleQkAAgECC01hdGNoIGVycm9yCQD0AwMIBQJ0eAlib2R5Qnl0ZXMJAJEDAggFAnR4BnByb29mcwAABQ90YXJnZXRQdWJsaWNLZXn+uSJ5", "height": 2675443, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: BdRa4ufo2T9cM8ao4PsPeJ1sN1mtnEcmymotY5cmr4n9 Next: 2fXW4pocuqYC4MXZpcgPddsiXTUsyXXmivCAur1qf4Xq Diff:
OldNewDifferences
2121 func keyProposalInfo (number) = makeString(["%s%d", "proposalInfo", toString(number)], SEP)
2222
2323
24-func keyProposalDescription (number) = makeString(["%s%d", "proposalDescription", toString(number)], SEP)
25-
26-
2724 func keyUserVoteOnProposal (number,user) = makeString(["%s%d%s", "userVoteOnProposal", toString(number), user], SEP)
2825
2926
4441 }
4542
4643
47-func formatProposalInfo (name,end,quorumNumber,positiveVotes,negativeVotes) = makeString(["%d%d%d%d%d", name, end, quorumNumber, positiveVotes, negativeVotes], SEP)
44+func formatProposalInfo (name,description,end,quorumNumber,positiveVotes,negativeVotes) = makeString(["%d%d%d%d%d%d", name, description, end, quorumNumber, positiveVotes, negativeVotes], SEP)
4845
4946
5047 func formatUserVoteOnProposal (vote,gwxNumber) = makeString(["%d%d", vote, gwxNumber], SEP)
9289 if ((checks == checks))
9390 then {
9491 let theIndex = getCurrentIndex()
95-[IntegerEntry(keyCurrentIndex(), (theIndex + 1)), StringEntry(keyProposalInfo(theIndex), formatProposalInfo(name, toString((lastBlock.height + expirationHeight)), toString(quorumNumber), "0", "0")), StringEntry(keyProposalDescription(theIndex), description)]
92+[IntegerEntry(keyCurrentIndex(), (theIndex + 1)), StringEntry(keyProposalInfo(theIndex), formatProposalInfo(name, description, toString((lastBlock.height + expirationHeight)), toString(quorumNumber), "0", "0"))]
9693 }
9794 else throw("Strict value is not equal to itself.")
9895 }
107104 let userVoteInfo = valueOrElse(getString(this, keyUserVoteOnProposal(proposalIndex, toString(i.caller))), EMPTY)
108105 let checks = [if ((voteInfo != EMPTY))
109106 then true
110- else throw("No such vote"), if ((value(parseInt(voteInfoArray[2])) > lastBlock.height))
107+ else throw("No such vote"), if ((value(parseInt(voteInfoArray[3])) > lastBlock.height))
111108 then true
112109 else blockHeightError(), if ((userVoteInfo == EMPTY))
113110 then true
114111 else alreadyVoteError()]
115112 if ((checks == checks))
116113 then {
117- let gwxNumber = asInt(invoke(addressFromStringValue(getStringValue(gwxContractAddress())), "getUserGwxAmountAtHeightREADONLY", [toString(i.caller), value(parseInt(voteInfoArray[2]))], nil))
118- let $t035104546 = if (choice)
114+ let gwxNumber = asInt(invoke(addressFromStringValue(getStringValue(gwxContractAddress())), "getUserGwxAmountAtHeightREADONLY", [toString(i.caller), value(parseInt(voteInfoArray[3]))], nil))
115+ let $t034354523 = if (choice)
119116 then {
120- let action1 = StringEntry(keyProposalInfo(proposalIndex), formatProposalInfo(voteInfoArray[1], voteInfoArray[2], voteInfoArray[3], toString((value(parseInt(voteInfoArray[4])) + gwxNumber)), voteInfoArray[5]))
117+ let action1 = StringEntry(keyProposalInfo(proposalIndex), formatProposalInfo(voteInfoArray[1], voteInfoArray[2], voteInfoArray[3], voteInfoArray[4], toString((value(parseInt(voteInfoArray[5])) + gwxNumber)), voteInfoArray[6]))
121118 let action2 = StringEntry(keyUserVoteOnProposal(proposalIndex, toString(i.caller)), formatUserVoteOnProposal("1", toString(gwxNumber)))
122119 $Tuple2(action1, action2)
123120 }
124121 else {
125- let action1 = StringEntry(keyProposalInfo(proposalIndex), formatProposalInfo(voteInfoArray[1], voteInfoArray[2], voteInfoArray[3], voteInfoArray[4], toString((value(parseInt(voteInfoArray[5])) + gwxNumber))))
122+ let action1 = StringEntry(keyProposalInfo(proposalIndex), formatProposalInfo(voteInfoArray[1], voteInfoArray[2], voteInfoArray[3], voteInfoArray[4], voteInfoArray[5], toString((value(parseInt(voteInfoArray[6])) + gwxNumber))))
126123 let action2 = StringEntry(keyUserVoteOnProposal(proposalIndex, toString(i.caller)), formatUserVoteOnProposal("0", toString(gwxNumber)))
127124 $Tuple2(action1, action2)
128125 }
129- let action1 = $t035104546._1
130- let action2 = $t035104546._2
126+ let action1 = $t034354523._1
127+ let action2 = $t034354523._2
131128 [action1, action2]
132129 }
133130 else throw("Strict value is not equal to itself.")
144141 let userVoteInfoArray = split(userVoteInfo, SEP)
145142 let checks = [if ((voteInfo != EMPTY))
146143 then true
147- else throw("No such vote"), if ((value(parseInt(voteInfoArray[2])) > lastBlock.height))
144+ else throw("No such vote"), if ((value(parseInt(voteInfoArray[3])) > lastBlock.height))
148145 then true
149146 else blockHeightError(), if ((userVoteInfo != EMPTY))
150147 then true
152149 if ((checks == checks))
153150 then {
154151 let action = if ((userVoteInfoArray[1] == "1"))
155- then StringEntry(keyProposalInfo(proposalIndex), formatProposalInfo(voteInfoArray[1], voteInfoArray[2], voteInfoArray[3], toString((value(parseInt(voteInfoArray[4])) - value(parseInt(userVoteInfoArray[2])))), voteInfoArray[5]))
156- else StringEntry(keyProposalInfo(proposalIndex), formatProposalInfo(voteInfoArray[1], voteInfoArray[2], voteInfoArray[3], voteInfoArray[4], toString((value(parseInt(voteInfoArray[5])) - value(parseInt(userVoteInfoArray[2]))))))
152+ then StringEntry(keyProposalInfo(proposalIndex), formatProposalInfo(voteInfoArray[1], voteInfoArray[2], voteInfoArray[3], voteInfoArray[4], toString((value(parseInt(voteInfoArray[5])) - value(parseInt(userVoteInfoArray[2])))), voteInfoArray[6]))
153+ else StringEntry(keyProposalInfo(proposalIndex), formatProposalInfo(voteInfoArray[1], voteInfoArray[2], voteInfoArray[3], voteInfoArray[4], voteInfoArray[5], toString((value(parseInt(voteInfoArray[6])) - value(parseInt(userVoteInfoArray[2]))))))
157154 [action, DeleteEntry(keyUserVoteOnProposal(proposalIndex, toString(i.caller)))]
158155 }
159156 else throw("Strict value is not equal to itself.")
170167 let userVoteInfoArray = split(userVoteInfo, SEP)
171168 let checks = [if ((voteInfo != EMPTY))
172169 then true
173- else throw("No such vote"), if ((value(parseInt(voteInfoArray[2])) > lastBlock.height))
170+ else throw("No such vote"), if ((value(parseInt(voteInfoArray[3])) > lastBlock.height))
174171 then true
175172 else blockHeightError(), if ((userVoteInfo != EMPTY))
176173 then true
178175 if ((checks == checks))
179176 then {
180177 let gwxNumber = asInt(invoke(addressFromStringValue(getStringValue(gwxContractAddress())), "getUserGwxAmountAtHeightREADONLY", [toString(i.caller), value(parseInt(voteInfoArray[3]))], nil))
181- let $t067147053 = if (choice)
178+ let $t067437082 = if (choice)
182179 then {
183180 let forNumber = gwxNumber
184181 let againstNumber = 0
191188 let choiceInteger = 0
192189 $Tuple3(forNumber, againstNumber, choiceInteger)
193190 }
194- let userPowerFor = $t067147053._1
195- let userPowerAgainst = $t067147053._2
196- let choiceInt = $t067147053._3
191+ let userPowerFor = $t067437082._1
192+ let userPowerAgainst = $t067437082._2
193+ let choiceInt = $t067437082._3
197194 let action = if ((userVoteInfoArray[1] == "1"))
198- then StringEntry(keyProposalInfo(proposalIndex), formatProposalInfo(voteInfoArray[1], voteInfoArray[2], voteInfoArray[3], toString(((value(parseInt(voteInfoArray[4])) - value(parseInt(userVoteInfoArray[2]))) + userPowerFor)), toString((value(parseInt(voteInfoArray[5])) + userPowerAgainst))))
199- else StringEntry(keyProposalInfo(proposalIndex), formatProposalInfo(voteInfoArray[1], voteInfoArray[2], voteInfoArray[3], toString((value(parseInt(voteInfoArray[4])) + userPowerFor)), toString(((value(parseInt(voteInfoArray[5])) - value(parseInt(userVoteInfoArray[2]))) + userPowerAgainst))))
195+ 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))))
196+ 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))))
200197 [action, StringEntry(keyUserVoteOnProposal(proposalIndex, toString(i.caller)), formatUserVoteOnProposal(toString(choiceInt), toString(gwxNumber)))]
201198 }
202199 else throw("Strict value is not equal to itself.")
214211 else throw("No such vote")]
215212 if ((checks == checks))
216213 then {
217- let quorumNumber = voteInfoArray[3]
218- let positiveVotes = voteInfoArray[4]
219- let negativeVotes = voteInfoArray[5]
214+ let positiveVotes = voteInfoArray[5]
215+ let negativeVotes = voteInfoArray[6]
216+ let quorumNumber = voteInfoArray[4]
220217 $Tuple2(nil, [positiveVotes, negativeVotes, quorumNumber])
221218 }
222219 else throw("Strict value is not equal to itself.")
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
24-func keyProposalDescription (number) = makeString(["%s%d", "proposalDescription", toString(number)], SEP)
25-
26-
2724 func keyUserVoteOnProposal (number,user) = makeString(["%s%d%s", "userVoteOnProposal", toString(number), user], SEP)
2825
2926
3027 func keyManagerPublicKey () = "%s__managerPublicKey"
3128
3229
3330 func keyManagerVaultAddress () = "%s__managerVaultAddress"
3431
3532
3633 func getCurrentIndex () = getIntegerValue(this, keyCurrentIndex())
3734
3835
3936 func getManagerVaultAddressOrThis () = match getString(keyManagerVaultAddress()) {
4037 case s: String =>
4138 addressFromStringValue(s)
4239 case _ =>
4340 this
4441 }
4542
4643
47-func formatProposalInfo (name,end,quorumNumber,positiveVotes,negativeVotes) = makeString(["%d%d%d%d%d", name, end, quorumNumber, positiveVotes, negativeVotes], SEP)
44+func formatProposalInfo (name,description,end,quorumNumber,positiveVotes,negativeVotes) = makeString(["%d%d%d%d%d%d", name, description, end, quorumNumber, positiveVotes, negativeVotes], SEP)
4845
4946
5047 func formatUserVoteOnProposal (vote,gwxNumber) = makeString(["%d%d", vote, gwxNumber], SEP)
5148
5249
5350 func asInt (val) = match val {
5451 case valInt: Int =>
5552 valInt
5653 case _ =>
5754 throw("fail to cast into Int")
5855 }
5956
6057
6158 func managerPublicKeyOrUnit () = {
6259 let managerVaultAddress = getManagerVaultAddressOrThis()
6360 match getString(managerVaultAddress, keyManagerPublicKey()) {
6461 case s: String =>
6562 fromBase58String(s)
6663 case _: Unit =>
6764 unit
6865 case _ =>
6966 throw("Match error")
7067 }
7168 }
7269
7370
7471 func isManager (i) = match managerPublicKeyOrUnit() {
7572 case pk: ByteVector =>
7673 (i.callerPublicKey == pk)
7774 case _: Unit =>
7875 (i.caller == this)
7976 case _ =>
8077 throw("Match error")
8178 }
8279
8380
8481 func mustManager (i) = if (isManager(i))
8582 then true
8683 else throw("permission denied")
8784
8885
8986 @Callable(i)
9087 func startNewVote (name,description,expirationHeight,quorumNumber) = {
9188 let checks = [mustManager(i)]
9289 if ((checks == checks))
9390 then {
9491 let theIndex = getCurrentIndex()
95-[IntegerEntry(keyCurrentIndex(), (theIndex + 1)), StringEntry(keyProposalInfo(theIndex), formatProposalInfo(name, toString((lastBlock.height + expirationHeight)), toString(quorumNumber), "0", "0")), StringEntry(keyProposalDescription(theIndex), description)]
92+[IntegerEntry(keyCurrentIndex(), (theIndex + 1)), StringEntry(keyProposalInfo(theIndex), formatProposalInfo(name, description, toString((lastBlock.height + expirationHeight)), toString(quorumNumber), "0", "0"))]
9693 }
9794 else throw("Strict value is not equal to itself.")
9895 }
9996
10097
10198
10299 @Callable(i)
103100 func voteFor (proposalIndex,choice) = {
104101 let EMPTY = "EMPTY"
105102 let voteInfo = valueOrElse(getString(this, keyProposalInfo(proposalIndex)), EMPTY)
106103 let voteInfoArray = split(voteInfo, SEP)
107104 let userVoteInfo = valueOrElse(getString(this, keyUserVoteOnProposal(proposalIndex, toString(i.caller))), EMPTY)
108105 let checks = [if ((voteInfo != EMPTY))
109106 then true
110- else throw("No such vote"), if ((value(parseInt(voteInfoArray[2])) > lastBlock.height))
107+ else throw("No such vote"), if ((value(parseInt(voteInfoArray[3])) > lastBlock.height))
111108 then true
112109 else blockHeightError(), if ((userVoteInfo == EMPTY))
113110 then true
114111 else alreadyVoteError()]
115112 if ((checks == checks))
116113 then {
117- let gwxNumber = asInt(invoke(addressFromStringValue(getStringValue(gwxContractAddress())), "getUserGwxAmountAtHeightREADONLY", [toString(i.caller), value(parseInt(voteInfoArray[2]))], nil))
118- let $t035104546 = if (choice)
114+ let gwxNumber = asInt(invoke(addressFromStringValue(getStringValue(gwxContractAddress())), "getUserGwxAmountAtHeightREADONLY", [toString(i.caller), value(parseInt(voteInfoArray[3]))], nil))
115+ let $t034354523 = if (choice)
119116 then {
120- let action1 = StringEntry(keyProposalInfo(proposalIndex), formatProposalInfo(voteInfoArray[1], voteInfoArray[2], voteInfoArray[3], toString((value(parseInt(voteInfoArray[4])) + gwxNumber)), voteInfoArray[5]))
117+ let action1 = StringEntry(keyProposalInfo(proposalIndex), formatProposalInfo(voteInfoArray[1], voteInfoArray[2], voteInfoArray[3], voteInfoArray[4], toString((value(parseInt(voteInfoArray[5])) + gwxNumber)), voteInfoArray[6]))
121118 let action2 = StringEntry(keyUserVoteOnProposal(proposalIndex, toString(i.caller)), formatUserVoteOnProposal("1", toString(gwxNumber)))
122119 $Tuple2(action1, action2)
123120 }
124121 else {
125- let action1 = StringEntry(keyProposalInfo(proposalIndex), formatProposalInfo(voteInfoArray[1], voteInfoArray[2], voteInfoArray[3], voteInfoArray[4], toString((value(parseInt(voteInfoArray[5])) + gwxNumber))))
122+ let action1 = StringEntry(keyProposalInfo(proposalIndex), formatProposalInfo(voteInfoArray[1], voteInfoArray[2], voteInfoArray[3], voteInfoArray[4], voteInfoArray[5], toString((value(parseInt(voteInfoArray[6])) + gwxNumber))))
126123 let action2 = StringEntry(keyUserVoteOnProposal(proposalIndex, toString(i.caller)), formatUserVoteOnProposal("0", toString(gwxNumber)))
127124 $Tuple2(action1, action2)
128125 }
129- let action1 = $t035104546._1
130- let action2 = $t035104546._2
126+ let action1 = $t034354523._1
127+ let action2 = $t034354523._2
131128 [action1, action2]
132129 }
133130 else throw("Strict value is not equal to itself.")
134131 }
135132
136133
137134
138135 @Callable(i)
139136 func deleteVote (proposalIndex) = {
140137 let EMPTY = "EMPTY"
141138 let voteInfo = valueOrElse(getString(this, keyProposalInfo(proposalIndex)), EMPTY)
142139 let voteInfoArray = split(voteInfo, SEP)
143140 let userVoteInfo = valueOrElse(getString(this, keyUserVoteOnProposal(proposalIndex, toString(i.caller))), EMPTY)
144141 let userVoteInfoArray = split(userVoteInfo, SEP)
145142 let checks = [if ((voteInfo != EMPTY))
146143 then true
147- else throw("No such vote"), if ((value(parseInt(voteInfoArray[2])) > lastBlock.height))
144+ else throw("No such vote"), if ((value(parseInt(voteInfoArray[3])) > lastBlock.height))
148145 then true
149146 else blockHeightError(), if ((userVoteInfo != EMPTY))
150147 then true
151148 else noVoteError()]
152149 if ((checks == checks))
153150 then {
154151 let action = if ((userVoteInfoArray[1] == "1"))
155- then StringEntry(keyProposalInfo(proposalIndex), formatProposalInfo(voteInfoArray[1], voteInfoArray[2], voteInfoArray[3], toString((value(parseInt(voteInfoArray[4])) - value(parseInt(userVoteInfoArray[2])))), voteInfoArray[5]))
156- else StringEntry(keyProposalInfo(proposalIndex), formatProposalInfo(voteInfoArray[1], voteInfoArray[2], voteInfoArray[3], voteInfoArray[4], toString((value(parseInt(voteInfoArray[5])) - value(parseInt(userVoteInfoArray[2]))))))
152+ then StringEntry(keyProposalInfo(proposalIndex), formatProposalInfo(voteInfoArray[1], voteInfoArray[2], voteInfoArray[3], voteInfoArray[4], toString((value(parseInt(voteInfoArray[5])) - value(parseInt(userVoteInfoArray[2])))), voteInfoArray[6]))
153+ else StringEntry(keyProposalInfo(proposalIndex), formatProposalInfo(voteInfoArray[1], voteInfoArray[2], voteInfoArray[3], voteInfoArray[4], voteInfoArray[5], toString((value(parseInt(voteInfoArray[6])) - value(parseInt(userVoteInfoArray[2]))))))
157154 [action, DeleteEntry(keyUserVoteOnProposal(proposalIndex, toString(i.caller)))]
158155 }
159156 else throw("Strict value is not equal to itself.")
160157 }
161158
162159
163160
164161 @Callable(i)
165162 func changeVote (proposalIndex,choice) = {
166163 let EMPTY = "EMPTY"
167164 let voteInfo = valueOrElse(getString(this, keyProposalInfo(proposalIndex)), EMPTY)
168165 let voteInfoArray = split(voteInfo, SEP)
169166 let userVoteInfo = valueOrElse(getString(this, keyUserVoteOnProposal(proposalIndex, toString(i.caller))), EMPTY)
170167 let userVoteInfoArray = split(userVoteInfo, SEP)
171168 let checks = [if ((voteInfo != EMPTY))
172169 then true
173- else throw("No such vote"), if ((value(parseInt(voteInfoArray[2])) > lastBlock.height))
170+ else throw("No such vote"), if ((value(parseInt(voteInfoArray[3])) > lastBlock.height))
174171 then true
175172 else blockHeightError(), if ((userVoteInfo != EMPTY))
176173 then true
177174 else noVoteError()]
178175 if ((checks == checks))
179176 then {
180177 let gwxNumber = asInt(invoke(addressFromStringValue(getStringValue(gwxContractAddress())), "getUserGwxAmountAtHeightREADONLY", [toString(i.caller), value(parseInt(voteInfoArray[3]))], nil))
181- let $t067147053 = if (choice)
178+ let $t067437082 = if (choice)
182179 then {
183180 let forNumber = gwxNumber
184181 let againstNumber = 0
185182 let choiceInteger = 1
186183 $Tuple3(forNumber, againstNumber, choiceInteger)
187184 }
188185 else {
189186 let forNumber = 0
190187 let againstNumber = gwxNumber
191188 let choiceInteger = 0
192189 $Tuple3(forNumber, againstNumber, choiceInteger)
193190 }
194- let userPowerFor = $t067147053._1
195- let userPowerAgainst = $t067147053._2
196- let choiceInt = $t067147053._3
191+ let userPowerFor = $t067437082._1
192+ let userPowerAgainst = $t067437082._2
193+ let choiceInt = $t067437082._3
197194 let action = if ((userVoteInfoArray[1] == "1"))
198- then StringEntry(keyProposalInfo(proposalIndex), formatProposalInfo(voteInfoArray[1], voteInfoArray[2], voteInfoArray[3], toString(((value(parseInt(voteInfoArray[4])) - value(parseInt(userVoteInfoArray[2]))) + userPowerFor)), toString((value(parseInt(voteInfoArray[5])) + userPowerAgainst))))
199- else StringEntry(keyProposalInfo(proposalIndex), formatProposalInfo(voteInfoArray[1], voteInfoArray[2], voteInfoArray[3], toString((value(parseInt(voteInfoArray[4])) + userPowerFor)), toString(((value(parseInt(voteInfoArray[5])) - value(parseInt(userVoteInfoArray[2]))) + userPowerAgainst))))
195+ 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))))
196+ 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))))
200197 [action, StringEntry(keyUserVoteOnProposal(proposalIndex, toString(i.caller)), formatUserVoteOnProposal(toString(choiceInt), toString(gwxNumber)))]
201198 }
202199 else throw("Strict value is not equal to itself.")
203200 }
204201
205202
206203
207204 @Callable(i)
208205 func getResultREADONLY (proposalIndex) = {
209206 let EMPTY = "EMPTY"
210207 let voteInfo = valueOrElse(getString(this, keyProposalInfo(proposalIndex)), EMPTY)
211208 let voteInfoArray = split(voteInfo, SEP)
212209 let checks = [if ((voteInfo != EMPTY))
213210 then true
214211 else throw("No such vote")]
215212 if ((checks == checks))
216213 then {
217- let quorumNumber = voteInfoArray[3]
218- let positiveVotes = voteInfoArray[4]
219- let negativeVotes = voteInfoArray[5]
214+ let positiveVotes = voteInfoArray[5]
215+ let negativeVotes = voteInfoArray[6]
216+ let quorumNumber = voteInfoArray[4]
220217 $Tuple2(nil, [positiveVotes, negativeVotes, quorumNumber])
221218 }
222219 else throw("Strict value is not equal to itself.")
223220 }
224221
225222
226223 @Verifier(tx)
227224 func verify () = {
228225 let targetPublicKey = match managerPublicKeyOrUnit() {
229226 case pk: ByteVector =>
230227 pk
231228 case _: Unit =>
232229 tx.senderPublicKey
233230 case _ =>
234231 throw("Match error")
235232 }
236233 sigVerify(tx.bodyBytes, tx.proofs[0], targetPublicKey)
237234 }
238235

github/deemru/w8io/169f3d6 
117.11 ms