tx · 8obEV2TDj7P5fE1bhzEkQioMWRqSkP3wpgMJbp2aQRru

3NC9dyrMheMhHXcaeCXkuKqaTkLFa5Ahzd2:  -0.01400000 Waves

2023.11.16 12:37 [2845757] smart account 3NC9dyrMheMhHXcaeCXkuKqaTkLFa5Ahzd2 > SELF 0.00000000 Waves

{ "type": 13, "id": "8obEV2TDj7P5fE1bhzEkQioMWRqSkP3wpgMJbp2aQRru", "fee": 1400000, "feeAssetId": null, "timestamp": 1700127501224, "version": 2, "chainId": 84, "sender": "3NC9dyrMheMhHXcaeCXkuKqaTkLFa5Ahzd2", "senderPublicKey": "8fS13zFL61wF3maPyR7vTayhasoH9StToqd7wGuecHXN", "proofs": [ "4notrkLfPMVG4CZPVaTG4sNL5S3g418sjcJg1AY92UHTEnoxA1xG8qXMHBjoYW1C4464h3uoqALaYYSAuJsAHTZJ" ], "script": "base64:BgJiCAISBAoCCAgSBAoCCAESBAoCCAQSBAoCCAISAwoBCBIFCgMCAQQSBAoCAgESBQoDAgECEgUKAwISERIECgICARILCgkICAgICAgBARgSCAoGCAgIAQIBEgQKAggYEgMKAQg0AAlzZXBhcmF0b3ICAl9fAAdjaGFpbklkCQDJAQIJAMoBAggFBHRoaXMFYnl0ZXMAAQABAAhjaGFpbklkVAEBVAAIY2hhaW5JZFcBAVcBC211c3RBZGRyZXNzAgFpB2FkZHJlc3MDCQAAAggFAWkGY2FsbGVyBQdhZGRyZXNzBgkAAgECEXBlcm1pc3Npb24gZGVuaWVkAQhtdXN0VGhpcwEBaQkBC211c3RBZGRyZXNzAgUBaQUEdGhpcwADU0VQAgJfXwAFV0FWRVMCBVdBVkVTABBjb250cmFjdEZpbGVuYW1lAhJ3eGRhb19mYWN0b3J5LnJpZGUBB3dyYXBFcnIBAXMJAKwCAgkArAICBRBjb250cmFjdEZpbGVuYW1lAgI6IAUBcwEIdGhyb3dFcnIBAXMJAAIBCQEHd3JhcEVycgEFAXMBD3N0cmluZ1RvQXNzZXRJZAEBcwMJAAACBQFzBQVXQVZFUwUEdW5pdAkA2QQBBQFzAA9BRE1JTl9MSVNUX1NJWkUABQAGUVVPUlVNAAMAEVRYSURfQllURVNfTEVOR1RIACABGGtleUFsbG93ZWRUeElkVm90ZVByZWZpeAEEdHhJZAkAuQkCCQDMCAICBiVzJXMlcwkAzAgCAglhbGxvd1R4SWQJAMwIAgUEdHhJZAUDbmlsBQNTRVABEGtleUZ1bGxBZG1pblZvdGUCBnByZWZpeAxhZG1pbkFkZHJlc3MJALkJAgkAzAgCBQZwcmVmaXgJAMwIAgUMYWRtaW5BZGRyZXNzBQNuaWwFA1NFUAETa2V5QWRtaW5BZGRyZXNzTGlzdAAJALkJAgkAzAgCAgIlcwkAzAgCAhBhZG1pbkFkZHJlc3NMaXN0BQNuaWwFA1NFUAEOa2V5QWxsb3dlZFR4SWQACQC5CQIJAMwIAgICJXMJAMwIAgIEdHhJZAUDbmlsBQNTRVABDGdldEFkbWluVm90ZQIGcHJlZml4BWFkbWluBAd2b3RlS2V5CQEQa2V5RnVsbEFkbWluVm90ZQIFBnByZWZpeAUFYWRtaW4JAQt2YWx1ZU9yRWxzZQIJAJ8IAQUHdm90ZUtleQAAAQ1nZXRBZG1pbnNMaXN0AAQHJG1hdGNoMAkAnQgCBQR0aGlzCQETa2V5QWRtaW5BZGRyZXNzTGlzdAADCQABAgUHJG1hdGNoMAIGU3RyaW5nBAFzBQckbWF0Y2gwCQC1CQIFAXMFA1NFUAUDbmlsAQ1pc0luQWRtaW5MaXN0AQdhZGRyZXNzCQEPY29udGFpbnNFbGVtZW50AgkBDWdldEFkbWluc0xpc3QABQdhZGRyZXNzARJnZW5Wb3Rlc0tleXNIZWxwZXICAWEMYWRtaW5BZGRyZXNzBAskdDAxNDgwMTUwNAUBYQQGcmVzdWx0CAULJHQwMTQ4MDE1MDQCXzEEBnByZWZpeAgFCyR0MDE0ODAxNTA0Al8yCQCUCgIJAM0IAgUGcmVzdWx0CQEQa2V5RnVsbEFkbWluVm90ZQIFBnByZWZpeAUMYWRtaW5BZGRyZXNzBQZwcmVmaXgBDGdlblZvdGVzS2V5cwEJa2V5UHJlZml4BAlhZG1pbkxpc3QJARNrZXlBZG1pbkFkZHJlc3NMaXN0AAQLJHQwMTY1MTE3MzUKAAIkbAkBDWdldEFkbWluc0xpc3QACgACJHMJAJADAQUCJGwKAAUkYWNjMAkAlAoCBQNuaWwFCWtleVByZWZpeAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQESZ2VuVm90ZXNLZXlzSGVscGVyAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhNMaXN0IHNpemUgZXhjZWVkcyA1CQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQQGcmVzdWx0CAULJHQwMTY1MTE3MzUCXzEEBnByZWZpeAgFCyR0MDE2NTExNzM1Al8yBQZyZXN1bHQBEGNvdW50Vm90ZXNIZWxwZXICBnJlc3VsdAd2b3RlS2V5CQBkAgUGcmVzdWx0CQELdmFsdWVPckVsc2UCCQCfCAEFB3ZvdGVLZXkAAAEKY291bnRWb3RlcwEGcHJlZml4BAV2b3RlcwkBDGdlblZvdGVzS2V5cwEFBnByZWZpeAoAAiRsBQV2b3RlcwoAAiRzCQCQAwEFAiRsCgAFJGFjYzAAAAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEQY291bnRWb3Rlc0hlbHBlcgIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQITTGlzdCBzaXplIGV4Y2VlZHMgNQkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUBEGNsZWFyVm90ZXNIZWxwZXICBnJlc3VsdANrZXkJAM0IAgUGcmVzdWx0CQELRGVsZXRlRW50cnkBBQNrZXkBE2dldENsZWFyVm90ZUVudHJpZXMBBnByZWZpeAQFdm90ZXMJAQxnZW5Wb3Rlc0tleXMBBQZwcmVmaXgKAAIkbAUFdm90ZXMKAAIkcwkAkAMBBQIkbAoABSRhY2MwBQNuaWwKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBEGNsZWFyVm90ZXNIZWxwZXICBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECE0xpc3Qgc2l6ZSBleGNlZWRzIDUJAQUkZjBfMgIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIFBSRhY2MwAAAAAQACAAMABAAFAQx2b3RlSU5URVJOQUwEE2NhbGxlckFkZHJlc3NTdHJpbmcJa2V5UHJlZml4CG1pblZvdGVzCnZvdGVSZXN1bHQEB3ZvdGVLZXkJARBrZXlGdWxsQWRtaW5Wb3RlAgUJa2V5UHJlZml4BRNjYWxsZXJBZGRyZXNzU3RyaW5nBBBhZG1pbkN1cnJlbnRWb3RlCQEMZ2V0QWRtaW5Wb3RlAgUJa2V5UHJlZml4BRNjYWxsZXJBZGRyZXNzU3RyaW5nBANlcnIDCQEBIQEJAQ1pc0luQWRtaW5MaXN0AQUTY2FsbGVyQWRkcmVzc1N0cmluZwkBCHRocm93RXJyAQkArAICCQCsAgICCUFkZHJlc3M6IAUTY2FsbGVyQWRkcmVzc1N0cmluZwISIG5vdCBpbiBBZG1pbiBsaXN0AwkAAAIFEGFkbWluQ3VycmVudFZvdGUAAQkBCHRocm93RXJyAQkArAICBQd2b3RlS2V5AhIgeW91IGFscmVhZHkgdm90ZWQFBHVuaXQDCQAAAgUDZXJyBQNlcnIEBXZvdGVzCQEKY291bnRWb3RlcwEFCWtleVByZWZpeAMJAGcCCQBkAgUFdm90ZXMAAQUIbWluVm90ZXMEEGNsZWFyVm90ZUVudHJpZXMJARNnZXRDbGVhclZvdGVFbnRyaWVzAQUJa2V5UHJlZml4CQDOCAIFEGNsZWFyVm90ZUVudHJpZXMFCnZvdGVSZXN1bHQJAMwIAgkBDEludGVnZXJFbnRyeQIFB3ZvdGVLZXkAAQUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuARRrZXlDYWxjdWxhdG9yQWRkcmVzcwACFSVzX19jYWxjdWxhdG9yQWRkcmVzcwEWa2V5UG9vbHNGYWN0b3J5QWRkcmVzcwACFyVzX19wb29sc0ZhY3RvcnlBZGRyZXNzARJrZXlUcmVhc3VyeUFkZHJlc3MAAhMlc19fdHJlYXN1cnlBZGRyZXNzAQxrZXlMcEFzc2V0SWQAAg0lc19fbHBBc3NldElkARBrZXlDdXJyZW50UGVyaW9kAAkAuQkCCQDMCAICAiVzCQDMCAICDWN1cnJlbnRQZXJpb2QFA25pbAUDU0VQARZrZXlTdGFydEhlaWdodEJ5UGVyaW9kAQZwZXJpb2QJALkJAgkAzAgCAgQlcyVkCQDMCAICC3N0YXJ0SGVpZ2h0CQDMCAIJAKQDAQUGcGVyaW9kBQNuaWwFA1NFUAEPa2V5UGVyaW9kTGVuZ3RoAAkAuQkCCQDMCAICAiVzCQDMCAICDHBlcmlvZExlbmd0aAUDbmlsBQNTRVABGGtleVRyZWFzdXJ5VmFsdWVCeVBlcmlvZAEGcGVyaW9kCQC5CQIJAMwIAgIEJXMlZAkAzAgCAg10cmVhc3VyeVZhbHVlCQDMCAIJAKQDAQUGcGVyaW9kBQNuaWwFA1NFUAAXY2FsY3VsYXRvckFkZHJlc3NPcHRpb24EByRtYXRjaDAJAJ0IAgUEdGhpcwkBFGtleUNhbGN1bGF0b3JBZGRyZXNzAAMJAAECBQckbWF0Y2gwAgZTdHJpbmcEAXMFByRtYXRjaDAJAKYIAQUBcwMJAAECBQckbWF0Y2gwAgRVbml0BQR1bml0CQACAQILTWF0Y2ggZXJyb3IAF2NhbGN1bGF0b3JBZGRyZXNzT3JGYWlsCQETdmFsdWVPckVycm9yTWVzc2FnZQIFF2NhbGN1bGF0b3JBZGRyZXNzT3B0aW9uCQEHd3JhcEVycgECGmludmFsaWQgY2FsY3VsYXRvciBhZGRyZXNzARVrZXlQb3dlckNvbmZpZ0FkZHJlc3MAAhYlc19fcG93ZXJDb25maWdBZGRyZXNzARdrZXlQb3dlckNvbnRyYWN0QWRkcmVzcwACGCVzX19wb3dlckNvbnRyYWN0QWRkcmVzcwEJa2V5QXNzZXRzAAIKJXNfX2Fzc2V0cwEWa2V5Vm90aW5nUmVzdWx0QWRkcmVzcwACFmNvbnRyYWN0X3ZvdGluZ19yZXN1bHQBGWtleVByb3Bvc2FsQWxsb3dCcm9hZGNhc3QCB2FkZHJlc3MEdHhJZAkArAICCQCsAgIJAKwCAgIZcHJvcG9zYWxfYWxsb3dfYnJvYWRjYXN0XwkApQgBBQdhZGRyZXNzAgFfCQDYBAEFBHR4SWQAE2NvbmZpZ0FkZHJlc3NPcHRpb24EByRtYXRjaDAJAJ0IAgUEdGhpcwkBFWtleVBvd2VyQ29uZmlnQWRkcmVzcwADCQABAgUHJG1hdGNoMAIGU3RyaW5nBAFzBQckbWF0Y2gwCQCmCAEFAXMDCQABAgUHJG1hdGNoMAIEVW5pdAUEdW5pdAkAAgECC01hdGNoIGVycm9yABl2b3RpbmdSZXN1bHRBZGRyZXNzT3B0aW9uBAckbWF0Y2gwBRNjb25maWdBZGRyZXNzT3B0aW9uAwkAAQIFByRtYXRjaDACB0FkZHJlc3MEAWEFByRtYXRjaDAEByRtYXRjaDEJAJ0IAgUBYQkBFmtleVZvdGluZ1Jlc3VsdEFkZHJlc3MAAwkAAQIFByRtYXRjaDECBlN0cmluZwQBcwUHJG1hdGNoMQkApggBBQFzAwkAAQIFByRtYXRjaDECBFVuaXQFBHVuaXQJAAIBAgtNYXRjaCBlcnJvcgMJAAECBQckbWF0Y2gwAgRVbml0BQR1bml0CQACAQILTWF0Y2ggZXJyb3IAGXZvdGluZ1Jlc3VsdEFkZHJlc3NPckZhaWwJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgUZdm90aW5nUmVzdWx0QWRkcmVzc09wdGlvbgkBB3dyYXBFcnIBAh1pbnZhbGlkIHZvdGluZyByZXN1bHQgYWRkcmVzcwAPbHBBc3NldElkT3B0aW9uBAckbWF0Y2gwCQCdCAIFBHRoaXMJAQxrZXlMcEFzc2V0SWQAAwkAAQIFByRtYXRjaDACBlN0cmluZwQBcwUHJG1hdGNoMAkA2QQBBQFzAwkAAQIFByRtYXRjaDACBFVuaXQFBHVuaXQJAAIBAgtNYXRjaCBlcnJvcgAPbHBBc3NldElkT3JGYWlsCQETdmFsdWVPckVycm9yTWVzc2FnZQIFD2xwQXNzZXRJZE9wdGlvbgkBB3dyYXBFcnIBAhFpbnZhbGlkIGxwQXNzZXRJZAELb25seUFkZHJlc3MCAWkHYWRkcmVzcwMJAAACCAUBaQZjYWxsZXIFB2FkZHJlc3MGCQEIdGhyb3dFcnIBAhFwZXJtaXNzaW9uIGRlbmllZAEIb25seVRoaXMBAWkJAQtvbmx5QWRkcmVzcwIFAWkFBHRoaXMBDm9ubHlDYWxjdWxhdG9yAQFpCQELb25seUFkZHJlc3MCBQFpBRdjYWxjdWxhdG9yQWRkcmVzc09yRmFpbA4BaQELc3RyaW5nRW50cnkCA2tleQN2YWwDCQEOb25seUNhbGN1bGF0b3IBBQFpCQCUCgIJAMwIAgkBC1N0cmluZ0VudHJ5AgUDa2V5BQN2YWwFA25pbAUDa2V5CQCUCgIFA25pbAUEdW5pdAFpAQxpbnRlZ2VyRW50cnkCA2tleQN2YWwDCQEOb25seUNhbGN1bGF0b3IBBQFpCQCUCgIJAMwIAgkBDEludGVnZXJFbnRyeQIFA2tleQUDdmFsBQNuaWwFA2tleQkAlAoCBQNuaWwFBHVuaXQBaQEMYm9vbGVhbkVudHJ5AgNrZXkDdmFsAwkBDm9ubHlDYWxjdWxhdG9yAQUBaQkAlAoCCQDMCAIJAQxCb29sZWFuRW50cnkCBQNrZXkFA3ZhbAUDbmlsBQNrZXkJAJQKAgUDbmlsBQR1bml0AWkBC2JpbmFyeUVudHJ5AgNrZXkDdmFsAwkBDm9ubHlDYWxjdWxhdG9yAQUBaQkAlAoCCQDMCAIJAQtCaW5hcnlFbnRyeQIFA2tleQUDdmFsBQNuaWwFA2tleQkAlAoCBQNuaWwFBHVuaXQBaQELZGVsZXRlRW50cnkBA2tleQMJAQ5vbmx5Q2FsY3VsYXRvcgEFAWkJAJQKAgkAzAgCCQELRGVsZXRlRW50cnkBBQNrZXkFA25pbAUDa2V5CQCUCgIFA25pbAUEdW5pdAFpAQdyZWlzc3VlAwdhc3NldElkBmFtb3VudApyZWlzc3VhYmxlAwkBDm9ubHlDYWxjdWxhdG9yAQUBaQkAlAoCCQDMCAIJAQdSZWlzc3VlAwUHYXNzZXRJZAUGYW1vdW50BQpyZWlzc3VhYmxlBQNuaWwFBmFtb3VudAkAlAoCBQNuaWwFBHVuaXQBaQEEYnVybgIHYXNzZXRJZAZhbW91bnQDCQEOb25seUNhbGN1bGF0b3IBBQFpCQCUCgIJAMwIAgkBBEJ1cm4CBQdhc3NldElkBQZhbW91bnQFA25pbAUGYW1vdW50CQCUCgIFA25pbAUEdW5pdAFpAQ10cmFuc2ZlckFzc2V0Aw5yZWNpcGllbnRCeXRlcwZhbW91bnQHYXNzZXRJZAMJAQ5vbmx5Q2FsY3VsYXRvcgEFAWkJAJQKAgkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCQEHQWRkcmVzcwEFDnJlY2lwaWVudEJ5dGVzBQZhbW91bnQFB2Fzc2V0SWQFA25pbAUGYW1vdW50CQCUCgIFA25pbAUEdW5pdAFpAQ50cmFuc2ZlckFzc2V0cwMOcmVjaXBpZW50Qnl0ZXMKYXNzZXRzTGlzdAthbW91bnRzTGlzdAMJAQ5vbmx5Q2FsY3VsYXRvcgEFAWkKAQ5hZGROZXdUcmFuc2ZlcgIDYWNjC25leHRBc3NldElkBAskdDA2NTQxNjU2NQUDYWNjBAl0cmFuc2ZlcnMIBQskdDA2NTQxNjU2NQJfMQQBaggFCyR0MDY1NDE2NTY1Al8yBAtuZXdUcmFuc2ZlcgkBDlNjcmlwdFRyYW5zZmVyAwkBB0FkZHJlc3MBBQ5yZWNpcGllbnRCeXRlcwkAkQMCBQthbW91bnRzTGlzdAUBagkAkQMCBQphc3NldHNMaXN0BQFqBBB1cGRhdGVkVHJhbnNmZXJzCQDNCAIFCXRyYW5zZmVycwULbmV3VHJhbnNmZXIJAJQKAgUQdXBkYXRlZFRyYW5zZmVycwkAZAIFAWoAAQQLJHQwNjc5MTY4NzIKAAIkbAUKYXNzZXRzTGlzdAoAAiRzCQCQAwEFAiRsCgAFJGFjYzAJAJQKAgUDbmlsAAAKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBDmFkZE5ld1RyYW5zZmVyAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhRMaXN0IHNpemUgZXhjZWVkcyAxMAkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgAHAAgACQAKBA9hc3NldHNUcmFuc2ZlcnMIBQskdDA2NzkxNjg3MgJfMQQKX2xhc3RJbmRleAgFCyR0MDY3OTE2ODcyAl8yCQCUCgIFD2Fzc2V0c1RyYW5zZmVycwUEdW5pdAkAlAoCBQNuaWwFBHVuaXQBaQENdHJhbnNmZXJXYXZlcwIOcmVjaXBpZW50Qnl0ZXMGYW1vdW50AwkBDm9ubHlDYWxjdWxhdG9yAQUBaQkAlAoCCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMJAQdBZGRyZXNzAQUOcmVjaXBpZW50Qnl0ZXMFBmFtb3VudAUEdW5pdAUDbmlsBQZhbW91bnQJAJQKAgUDbmlsBQR1bml0AWkBBGluaXQJDGxwQXNzZXRJZFN0chJ0cmVhc3VyeUFkZHJlc3NTdHIUY2FsY3VsYXRvckFkZHJlc3NTdHIVcG93ZXJDb25maWdBZGRyZXNzU3RyFHBvd2VyQ29udHJhY3RBZGRyZXNzFnBvb2xzRmFjdG9yeUFkZHJlc3NTdHIMcGVyaW9kTGVuZ3RoDXRyZWFzdXJ5VmFsdWUGYXNzZXRzBAtjaGVja0NhbGxlcgkBCG11c3RUaGlzAQUBaQMJAAACBQtjaGVja0NhbGxlcgULY2hlY2tDYWxsZXIJAJQKAgkAzAgCCQELU3RyaW5nRW50cnkCCQEMa2V5THBBc3NldElkAAUMbHBBc3NldElkU3RyCQDMCAIJAQtTdHJpbmdFbnRyeQIJARJrZXlUcmVhc3VyeUFkZHJlc3MABRJ0cmVhc3VyeUFkZHJlc3NTdHIJAMwIAgkBC1N0cmluZ0VudHJ5AgkBFGtleUNhbGN1bGF0b3JBZGRyZXNzAAUUY2FsY3VsYXRvckFkZHJlc3NTdHIJAMwIAgkBC1N0cmluZ0VudHJ5AgkBFWtleVBvd2VyQ29uZmlnQWRkcmVzcwAFFXBvd2VyQ29uZmlnQWRkcmVzc1N0cgkAzAgCCQELU3RyaW5nRW50cnkCCQEXa2V5UG93ZXJDb250cmFjdEFkZHJlc3MABRRwb3dlckNvbnRyYWN0QWRkcmVzcwkAzAgCCQELU3RyaW5nRW50cnkCCQEWa2V5UG9vbHNGYWN0b3J5QWRkcmVzcwAFFnBvb2xzRmFjdG9yeUFkZHJlc3NTdHIJAMwIAgkBDEludGVnZXJFbnRyeQIJAQ9rZXlQZXJpb2RMZW5ndGgABQxwZXJpb2RMZW5ndGgJAMwIAgkBDEludGVnZXJFbnRyeQIJARhrZXlUcmVhc3VyeVZhbHVlQnlQZXJpb2QBAAAFDXRyZWFzdXJ5VmFsdWUJAMwIAgkBDEludGVnZXJFbnRyeQIJARBrZXlDdXJyZW50UGVyaW9kAAAACQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEWa2V5U3RhcnRIZWlnaHRCeVBlcmlvZAEAAAUGaGVpZ2h0CQDMCAIJAQtTdHJpbmdFbnRyeQIJAQlrZXlBc3NldHMACQC5CQIFBmFzc2V0cwUDU0VQBQNuaWwFBHVuaXQJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEgY29tbWl0QWZ0ZXJTdGFydFdpdGhMb2NrUm91bmRGb3IGCGNvbnRyYWN0BWNoaWxkB2FkZHJlc3MUYWRkaXRpb25hbExvY2tSb3VuZHMOcGF5bWVudEFzc2V0SWQNcGF5bWVudEFtb3VudAkAlAoCBQNuaWwJAPwHBAkBEUBleHRyTmF0aXZlKDEwNjIpAQUIY29udHJhY3QCIGNvbW1pdEFmdGVyU3RhcnRXaXRoTG9ja1JvdW5kRm9yCQDMCAIFBWNoaWxkCQDMCAIFB2FkZHJlc3MJAMwIAgUUYWRkaXRpb25hbExvY2tSb3VuZHMFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgUOcGF5bWVudEFzc2V0SWQFDXBheW1lbnRBbW91bnQFA25pbAFpAQRjYWxsAghmdW5jdGlvbgRhcmdzBAZyZXN1bHQJAP0HBAUXY2FsY3VsYXRvckFkZHJlc3NPckZhaWwFCGZ1bmN0aW9uCQDMCAIIBQFpD2NhbGxlclB1YmxpY0tleQkAzAgCBQRhcmdzBQNuaWwIBQFpCHBheW1lbnRzCQCUCgIFA25pbAUGcmVzdWx0AWkBC3ZvdGVGb3JUeElkAQR0eElkBBNjYWxsZXJBZGRyZXNzU3RyaW5nCQDYBAEICAUBaQZjYWxsZXIFYnl0ZXMECWtleVByZWZpeAkBGGtleUFsbG93ZWRUeElkVm90ZVByZWZpeAEFBHR4SWQEBnJlc3VsdAkAzAgCCQELU3RyaW5nRW50cnkCCQEOa2V5QWxsb3dlZFR4SWQABQR0eElkBQNuaWwEEWFsbG93ZWRUeElkT3B0aW9uCQCdCAIFBHRoaXMJAQ5rZXlBbGxvd2VkVHhJZAAEA2VycgkAzAgCAwkAAAIJAMgBAQkA2QQBBQR0eElkBRFUWElEX0JZVEVTX0xFTkdUSAYJAQh0aHJvd0VycgEJAKwCAgUEdHhJZAISIGlzIG5vdCB2YWxpZCB0eElkCQDMCAIDAwkAAAIFEWFsbG93ZWRUeElkT3B0aW9uBQR1bml0BgkBAiE9AgkBBXZhbHVlAQURYWxsb3dlZFR4SWRPcHRpb24FBHR4SWQGCQEIdGhyb3dFcnIBCQCsAgIFBHR4SWQCEyBpcyBhbHJlYWR5IGFsbG93ZWQFA25pbAMJAAACBQNlcnIFA2VycgkBDHZvdGVJTlRFUk5BTAQFE2NhbGxlckFkZHJlc3NTdHJpbmcFCWtleVByZWZpeAUGUVVPUlVNBQZyZXN1bHQJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BAnR4AQZ2ZXJpZnkABApieVByb3Bvc2FsBAckbWF0Y2gwBRl2b3RpbmdSZXN1bHRBZGRyZXNzT3B0aW9uAwkAAQIFByRtYXRjaDACB0FkZHJlc3MED3Byb3Bvc2FsQWRkcmVzcwUHJG1hdGNoMAkBC3ZhbHVlT3JFbHNlAgkAmwgCBQ9wcm9wb3NhbEFkZHJlc3MJARlrZXlQcm9wb3NhbEFsbG93QnJvYWRjYXN0AgUEdGhpcwgFAnR4AmlkBwcECGJ5QWRtaW5zCQAAAggFAnR4AmlkCQDZBAEJAQt2YWx1ZU9yRWxzZQIJAJ0IAgUEdGhpcwkBDmtleUFsbG93ZWRUeElkAAIABAdieU93bmVyAwkAZwIJAJADAQkBDWdldEFkbWluc0xpc3QABQZRVU9SVU0HCQD0AwMIBQJ0eAlib2R5Qnl0ZXMJAJEDAggFAnR4BnByb29mcwAACAUCdHgPc2VuZGVyUHVibGljS2V5AwMFCmJ5UHJvcG9zYWwGBQhieUFkbWlucwYFB2J5T3duZXKKPrHC", "height": 2845757, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: AJitddCyvvx7w6fnSJrVnNy6sH4Gb78aCAYzGk828oZr Next: uB44RXKFqm3HwYRnSXDQ11gzmRX9ka4q1ZVhhK7KBwW Diff:
OldNewDifferences
164164 func keyCalculatorAddress () = "%s__calculatorAddress"
165165
166166
167+func keyPoolsFactoryAddress () = "%s__poolsFactoryAddress"
168+
169+
170+func keyTreasuryAddress () = "%s__treasuryAddress"
171+
172+
167173 func keyLpAssetId () = "%s__lpAssetId"
168174
169175
177183
178184
179185 func keyTreasuryValueByPeriod (period) = makeString(["%s%d", "treasuryValue", toString(period)], SEP)
180-
181-
182-func keyTreasuryValue () = makeString(["%s", "treasuryValue"], SEP)
183186
184187
185188 let calculatorAddressOption = match getString(this, keyCalculatorAddress()) {
317320 func transferAssets (recipientBytes,assetsList,amountsList) = if (onlyCalculator(i))
318321 then {
319322 func addNewTransfer (acc,nextAssetId) = {
320- let $t064996523 = acc
321- let transfers = $t064996523._1
322- let j = $t064996523._2
323+ let $t065416565 = acc
324+ let transfers = $t065416565._1
325+ let j = $t065416565._2
323326 let newTransfer = ScriptTransfer(Address(recipientBytes), amountsList[j], assetsList[j])
324327 let updatedTransfers = (transfers :+ newTransfer)
325328 $Tuple2(updatedTransfers, (j + 1))
326329 }
327330
328- let $t067496830 = {
331+ let $t067916872 = {
329332 let $l = assetsList
330333 let $s = size($l)
331334 let $acc0 = $Tuple2(nil, 0)
339342
340343 $f0_2($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
341344 }
342- let assetsTransfers = $t067496830._1
343- let _lastIndex = $t067496830._2
345+ let assetsTransfers = $t067916872._1
346+ let _lastIndex = $t067916872._2
344347 $Tuple2(assetsTransfers, unit)
345348 }
346349 else $Tuple2(nil, unit)
355358
356359
357360 @Callable(i)
358-func init (lpAssetIdStr,calculatorAddressStr,powerConfigAddressStr,powerContractAddress,periodLength,treasuryValue,assets) = {
361+func init (lpAssetIdStr,treasuryAddressStr,calculatorAddressStr,powerConfigAddressStr,powerContractAddress,poolsFactoryAddressStr,periodLength,treasuryValue,assets) = {
359362 let checkCaller = mustThis(i)
360363 if ((checkCaller == checkCaller))
361- then $Tuple2([StringEntry(keyLpAssetId(), lpAssetIdStr), StringEntry(keyCalculatorAddress(), calculatorAddressStr), StringEntry(keyPowerConfigAddress(), powerConfigAddressStr), StringEntry(keyPowerContractAddress(), powerContractAddress), IntegerEntry(keyPeriodLength(), periodLength), IntegerEntry(keyTreasuryValue(), treasuryValue), IntegerEntry(keyTreasuryValueByPeriod(0), treasuryValue), IntegerEntry(keyCurrentPeriod(), 0), IntegerEntry(keyStartHeightByPeriod(0), height), StringEntry(keyAssets(), makeString(assets, SEP))], unit)
364+ then $Tuple2([StringEntry(keyLpAssetId(), lpAssetIdStr), StringEntry(keyTreasuryAddress(), treasuryAddressStr), StringEntry(keyCalculatorAddress(), calculatorAddressStr), StringEntry(keyPowerConfigAddress(), powerConfigAddressStr), StringEntry(keyPowerContractAddress(), powerContractAddress), StringEntry(keyPoolsFactoryAddress(), poolsFactoryAddressStr), IntegerEntry(keyPeriodLength(), periodLength), IntegerEntry(keyTreasuryValueByPeriod(0), treasuryValue), IntegerEntry(keyCurrentPeriod(), 0), IntegerEntry(keyStartHeightByPeriod(0), height), StringEntry(keyAssets(), makeString(assets, SEP))], unit)
362365 else throw("Strict value is not equal to itself.")
363366 }
364367
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let separator = "__"
55
66 let chainId = take(drop(this.bytes, 1), 1)
77
88 let chainIdT = base58'2T'
99
1010 let chainIdW = base58'2W'
1111
1212 func mustAddress (i,address) = if ((i.caller == address))
1313 then true
1414 else throw("permission denied")
1515
1616
1717 func mustThis (i) = mustAddress(i, this)
1818
1919
2020 let SEP = "__"
2121
2222 let WAVES = "WAVES"
2323
2424 let contractFilename = "wxdao_factory.ride"
2525
2626 func wrapErr (s) = ((contractFilename + ": ") + s)
2727
2828
2929 func throwErr (s) = throw(wrapErr(s))
3030
3131
3232 func stringToAssetId (s) = if ((s == WAVES))
3333 then unit
3434 else fromBase58String(s)
3535
3636
3737 let ADMIN_LIST_SIZE = 5
3838
3939 let QUORUM = 3
4040
4141 let TXID_BYTES_LENGTH = 32
4242
4343 func keyAllowedTxIdVotePrefix (txId) = makeString(["%s%s%s", "allowTxId", txId], SEP)
4444
4545
4646 func keyFullAdminVote (prefix,adminAddress) = makeString([prefix, adminAddress], SEP)
4747
4848
4949 func keyAdminAddressList () = makeString(["%s", "adminAddressList"], SEP)
5050
5151
5252 func keyAllowedTxId () = makeString(["%s", "txId"], SEP)
5353
5454
5555 func getAdminVote (prefix,admin) = {
5656 let voteKey = keyFullAdminVote(prefix, admin)
5757 valueOrElse(getInteger(voteKey), 0)
5858 }
5959
6060
6161 func getAdminsList () = match getString(this, keyAdminAddressList()) {
6262 case s: String =>
6363 split(s, SEP)
6464 case _ =>
6565 nil
6666 }
6767
6868
6969 func isInAdminList (address) = containsElement(getAdminsList(), address)
7070
7171
7272 func genVotesKeysHelper (a,adminAddress) = {
7373 let $t014801504 = a
7474 let result = $t014801504._1
7575 let prefix = $t014801504._2
7676 $Tuple2((result :+ keyFullAdminVote(prefix, adminAddress)), prefix)
7777 }
7878
7979
8080 func genVotesKeys (keyPrefix) = {
8181 let adminList = keyAdminAddressList()
8282 let $t016511735 = {
8383 let $l = getAdminsList()
8484 let $s = size($l)
8585 let $acc0 = $Tuple2(nil, keyPrefix)
8686 func $f0_1 ($a,$i) = if (($i >= $s))
8787 then $a
8888 else genVotesKeysHelper($a, $l[$i])
8989
9090 func $f0_2 ($a,$i) = if (($i >= $s))
9191 then $a
9292 else throw("List size exceeds 5")
9393
9494 $f0_2($f0_1($f0_1($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3), 4), 5)
9595 }
9696 let result = $t016511735._1
9797 let prefix = $t016511735._2
9898 result
9999 }
100100
101101
102102 func countVotesHelper (result,voteKey) = (result + valueOrElse(getInteger(voteKey), 0))
103103
104104
105105 func countVotes (prefix) = {
106106 let votes = genVotesKeys(prefix)
107107 let $l = votes
108108 let $s = size($l)
109109 let $acc0 = 0
110110 func $f0_1 ($a,$i) = if (($i >= $s))
111111 then $a
112112 else countVotesHelper($a, $l[$i])
113113
114114 func $f0_2 ($a,$i) = if (($i >= $s))
115115 then $a
116116 else throw("List size exceeds 5")
117117
118118 $f0_2($f0_1($f0_1($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3), 4), 5)
119119 }
120120
121121
122122 func clearVotesHelper (result,key) = (result :+ DeleteEntry(key))
123123
124124
125125 func getClearVoteEntries (prefix) = {
126126 let votes = genVotesKeys(prefix)
127127 let $l = votes
128128 let $s = size($l)
129129 let $acc0 = nil
130130 func $f0_1 ($a,$i) = if (($i >= $s))
131131 then $a
132132 else clearVotesHelper($a, $l[$i])
133133
134134 func $f0_2 ($a,$i) = if (($i >= $s))
135135 then $a
136136 else throw("List size exceeds 5")
137137
138138 $f0_2($f0_1($f0_1($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3), 4), 5)
139139 }
140140
141141
142142 func voteINTERNAL (callerAddressString,keyPrefix,minVotes,voteResult) = {
143143 let voteKey = keyFullAdminVote(keyPrefix, callerAddressString)
144144 let adminCurrentVote = getAdminVote(keyPrefix, callerAddressString)
145145 let err = if (!(isInAdminList(callerAddressString)))
146146 then throwErr((("Address: " + callerAddressString) + " not in Admin list"))
147147 else if ((adminCurrentVote == 1))
148148 then throwErr((voteKey + " you already voted"))
149149 else unit
150150 if ((err == err))
151151 then {
152152 let votes = countVotes(keyPrefix)
153153 if (((votes + 1) >= minVotes))
154154 then {
155155 let clearVoteEntries = getClearVoteEntries(keyPrefix)
156156 (clearVoteEntries ++ voteResult)
157157 }
158158 else [IntegerEntry(voteKey, 1)]
159159 }
160160 else throw("Strict value is not equal to itself.")
161161 }
162162
163163
164164 func keyCalculatorAddress () = "%s__calculatorAddress"
165165
166166
167+func keyPoolsFactoryAddress () = "%s__poolsFactoryAddress"
168+
169+
170+func keyTreasuryAddress () = "%s__treasuryAddress"
171+
172+
167173 func keyLpAssetId () = "%s__lpAssetId"
168174
169175
170176 func keyCurrentPeriod () = makeString(["%s", "currentPeriod"], SEP)
171177
172178
173179 func keyStartHeightByPeriod (period) = makeString(["%s%d", "startHeight", toString(period)], SEP)
174180
175181
176182 func keyPeriodLength () = makeString(["%s", "periodLength"], SEP)
177183
178184
179185 func keyTreasuryValueByPeriod (period) = makeString(["%s%d", "treasuryValue", toString(period)], SEP)
180-
181-
182-func keyTreasuryValue () = makeString(["%s", "treasuryValue"], SEP)
183186
184187
185188 let calculatorAddressOption = match getString(this, keyCalculatorAddress()) {
186189 case s: String =>
187190 addressFromString(s)
188191 case _: Unit =>
189192 unit
190193 case _ =>
191194 throw("Match error")
192195 }
193196
194197 let calculatorAddressOrFail = valueOrErrorMessage(calculatorAddressOption, wrapErr("invalid calculator address"))
195198
196199 func keyPowerConfigAddress () = "%s__powerConfigAddress"
197200
198201
199202 func keyPowerContractAddress () = "%s__powerContractAddress"
200203
201204
202205 func keyAssets () = "%s__assets"
203206
204207
205208 func keyVotingResultAddress () = "contract_voting_result"
206209
207210
208211 func keyProposalAllowBroadcast (address,txId) = ((("proposal_allow_broadcast_" + toString(address)) + "_") + toBase58String(txId))
209212
210213
211214 let configAddressOption = match getString(this, keyPowerConfigAddress()) {
212215 case s: String =>
213216 addressFromString(s)
214217 case _: Unit =>
215218 unit
216219 case _ =>
217220 throw("Match error")
218221 }
219222
220223 let votingResultAddressOption = match configAddressOption {
221224 case a: Address =>
222225 match getString(a, keyVotingResultAddress()) {
223226 case s: String =>
224227 addressFromString(s)
225228 case _: Unit =>
226229 unit
227230 case _ =>
228231 throw("Match error")
229232 }
230233 case _: Unit =>
231234 unit
232235 case _ =>
233236 throw("Match error")
234237 }
235238
236239 let votingResultAddressOrFail = valueOrErrorMessage(votingResultAddressOption, wrapErr("invalid voting result address"))
237240
238241 let lpAssetIdOption = match getString(this, keyLpAssetId()) {
239242 case s: String =>
240243 fromBase58String(s)
241244 case _: Unit =>
242245 unit
243246 case _ =>
244247 throw("Match error")
245248 }
246249
247250 let lpAssetIdOrFail = valueOrErrorMessage(lpAssetIdOption, wrapErr("invalid lpAssetId"))
248251
249252 func onlyAddress (i,address) = if ((i.caller == address))
250253 then true
251254 else throwErr("permission denied")
252255
253256
254257 func onlyThis (i) = onlyAddress(i, this)
255258
256259
257260 func onlyCalculator (i) = onlyAddress(i, calculatorAddressOrFail)
258261
259262
260263 @Callable(i)
261264 func stringEntry (key,val) = if (onlyCalculator(i))
262265 then $Tuple2([StringEntry(key, val)], key)
263266 else $Tuple2(nil, unit)
264267
265268
266269
267270 @Callable(i)
268271 func integerEntry (key,val) = if (onlyCalculator(i))
269272 then $Tuple2([IntegerEntry(key, val)], key)
270273 else $Tuple2(nil, unit)
271274
272275
273276
274277 @Callable(i)
275278 func booleanEntry (key,val) = if (onlyCalculator(i))
276279 then $Tuple2([BooleanEntry(key, val)], key)
277280 else $Tuple2(nil, unit)
278281
279282
280283
281284 @Callable(i)
282285 func binaryEntry (key,val) = if (onlyCalculator(i))
283286 then $Tuple2([BinaryEntry(key, val)], key)
284287 else $Tuple2(nil, unit)
285288
286289
287290
288291 @Callable(i)
289292 func deleteEntry (key) = if (onlyCalculator(i))
290293 then $Tuple2([DeleteEntry(key)], key)
291294 else $Tuple2(nil, unit)
292295
293296
294297
295298 @Callable(i)
296299 func reissue (assetId,amount,reissuable) = if (onlyCalculator(i))
297300 then $Tuple2([Reissue(assetId, amount, reissuable)], amount)
298301 else $Tuple2(nil, unit)
299302
300303
301304
302305 @Callable(i)
303306 func burn (assetId,amount) = if (onlyCalculator(i))
304307 then $Tuple2([Burn(assetId, amount)], amount)
305308 else $Tuple2(nil, unit)
306309
307310
308311
309312 @Callable(i)
310313 func transferAsset (recipientBytes,amount,assetId) = if (onlyCalculator(i))
311314 then $Tuple2([ScriptTransfer(Address(recipientBytes), amount, assetId)], amount)
312315 else $Tuple2(nil, unit)
313316
314317
315318
316319 @Callable(i)
317320 func transferAssets (recipientBytes,assetsList,amountsList) = if (onlyCalculator(i))
318321 then {
319322 func addNewTransfer (acc,nextAssetId) = {
320- let $t064996523 = acc
321- let transfers = $t064996523._1
322- let j = $t064996523._2
323+ let $t065416565 = acc
324+ let transfers = $t065416565._1
325+ let j = $t065416565._2
323326 let newTransfer = ScriptTransfer(Address(recipientBytes), amountsList[j], assetsList[j])
324327 let updatedTransfers = (transfers :+ newTransfer)
325328 $Tuple2(updatedTransfers, (j + 1))
326329 }
327330
328- let $t067496830 = {
331+ let $t067916872 = {
329332 let $l = assetsList
330333 let $s = size($l)
331334 let $acc0 = $Tuple2(nil, 0)
332335 func $f0_1 ($a,$i) = if (($i >= $s))
333336 then $a
334337 else addNewTransfer($a, $l[$i])
335338
336339 func $f0_2 ($a,$i) = if (($i >= $s))
337340 then $a
338341 else throw("List size exceeds 10")
339342
340343 $f0_2($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
341344 }
342- let assetsTransfers = $t067496830._1
343- let _lastIndex = $t067496830._2
345+ let assetsTransfers = $t067916872._1
346+ let _lastIndex = $t067916872._2
344347 $Tuple2(assetsTransfers, unit)
345348 }
346349 else $Tuple2(nil, unit)
347350
348351
349352
350353 @Callable(i)
351354 func transferWaves (recipientBytes,amount) = if (onlyCalculator(i))
352355 then $Tuple2([ScriptTransfer(Address(recipientBytes), amount, unit)], amount)
353356 else $Tuple2(nil, unit)
354357
355358
356359
357360 @Callable(i)
358-func init (lpAssetIdStr,calculatorAddressStr,powerConfigAddressStr,powerContractAddress,periodLength,treasuryValue,assets) = {
361+func init (lpAssetIdStr,treasuryAddressStr,calculatorAddressStr,powerConfigAddressStr,powerContractAddress,poolsFactoryAddressStr,periodLength,treasuryValue,assets) = {
359362 let checkCaller = mustThis(i)
360363 if ((checkCaller == checkCaller))
361- then $Tuple2([StringEntry(keyLpAssetId(), lpAssetIdStr), StringEntry(keyCalculatorAddress(), calculatorAddressStr), StringEntry(keyPowerConfigAddress(), powerConfigAddressStr), StringEntry(keyPowerContractAddress(), powerContractAddress), IntegerEntry(keyPeriodLength(), periodLength), IntegerEntry(keyTreasuryValue(), treasuryValue), IntegerEntry(keyTreasuryValueByPeriod(0), treasuryValue), IntegerEntry(keyCurrentPeriod(), 0), IntegerEntry(keyStartHeightByPeriod(0), height), StringEntry(keyAssets(), makeString(assets, SEP))], unit)
364+ then $Tuple2([StringEntry(keyLpAssetId(), lpAssetIdStr), StringEntry(keyTreasuryAddress(), treasuryAddressStr), StringEntry(keyCalculatorAddress(), calculatorAddressStr), StringEntry(keyPowerConfigAddress(), powerConfigAddressStr), StringEntry(keyPowerContractAddress(), powerContractAddress), StringEntry(keyPoolsFactoryAddress(), poolsFactoryAddressStr), IntegerEntry(keyPeriodLength(), periodLength), IntegerEntry(keyTreasuryValueByPeriod(0), treasuryValue), IntegerEntry(keyCurrentPeriod(), 0), IntegerEntry(keyStartHeightByPeriod(0), height), StringEntry(keyAssets(), makeString(assets, SEP))], unit)
362365 else throw("Strict value is not equal to itself.")
363366 }
364367
365368
366369
367370 @Callable(i)
368371 func commitAfterStartWithLockRoundFor (contract,child,address,additionalLockRounds,paymentAssetId,paymentAmount) = $Tuple2(nil, invoke(addressFromStringValue(contract), "commitAfterStartWithLockRoundFor", [child, address, additionalLockRounds], [AttachedPayment(paymentAssetId, paymentAmount)]))
369372
370373
371374
372375 @Callable(i)
373376 func call (function,args) = {
374377 let result = reentrantInvoke(calculatorAddressOrFail, function, [i.callerPublicKey, args], i.payments)
375378 $Tuple2(nil, result)
376379 }
377380
378381
379382
380383 @Callable(i)
381384 func voteForTxId (txId) = {
382385 let callerAddressString = toBase58String(i.caller.bytes)
383386 let keyPrefix = keyAllowedTxIdVotePrefix(txId)
384387 let result = [StringEntry(keyAllowedTxId(), txId)]
385388 let allowedTxIdOption = getString(this, keyAllowedTxId())
386389 let err = [if ((size(fromBase58String(txId)) == TXID_BYTES_LENGTH))
387390 then true
388391 else throwErr((txId + " is not valid txId")), if (if ((allowedTxIdOption == unit))
389392 then true
390393 else (value(allowedTxIdOption) != txId))
391394 then true
392395 else throwErr((txId + " is already allowed"))]
393396 if ((err == err))
394397 then voteINTERNAL(callerAddressString, keyPrefix, QUORUM, result)
395398 else throw("Strict value is not equal to itself.")
396399 }
397400
398401
399402 @Verifier(tx)
400403 func verify () = {
401404 let byProposal = match votingResultAddressOption {
402405 case proposalAddress: Address =>
403406 valueOrElse(getBoolean(proposalAddress, keyProposalAllowBroadcast(this, tx.id)), false)
404407 case _ =>
405408 false
406409 }
407410 let byAdmins = (tx.id == fromBase58String(valueOrElse(getString(this, keyAllowedTxId()), "")))
408411 let byOwner = if ((size(getAdminsList()) >= QUORUM))
409412 then false
410413 else sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey)
411414 if (if (byProposal)
412415 then true
413416 else byAdmins)
414417 then true
415418 else byOwner
416419 }
417420

github/deemru/w8io/026f985 
50.58 ms