tx · 51TwL5vVcGmrtF2KqLx3NkzcWGkv1aTZKcQxXJ7PLuTB 3PPhuBwEmhZrseTB4ne9wsjUa61c7GrAjB3: -0.01500000 Waves 2024.03.29 02:39 [4104516] smart account 3PPhuBwEmhZrseTB4ne9wsjUa61c7GrAjB3 > SELF 0.00000000 Waves
{ "type": 13, "id": "51TwL5vVcGmrtF2KqLx3NkzcWGkv1aTZKcQxXJ7PLuTB", "fee": 1500000, "feeAssetId": null, "timestamp": 1711669110022, "version": 2, "chainId": 87, "sender": "3PPhuBwEmhZrseTB4ne9wsjUa61c7GrAjB3", "senderPublicKey": "BeJibL27zyW5t1iwB5w9kmajYnsaEac1bL5N3kVRGNJw", "proofs": [ "3cAnj3VFcWSS31ofZnsCN6ZFHCTvJo6pyx5FeZDqA2c6NjzSAXa44kiv8xiX6JpmB9vmJZGcYZ6uCygseURZvRAQ" ], "script": "base64:BgInCAISABIECgIIARIDCgEIEgQKAggIEgQKAggIEgMKAQgSAwoBCBIADAAHVkVSU0lPTgIKUFpTVC0xLjAuMQAJc2VudGluZWxzCQDMCAIJAQdBZGRyZXNzAQEaAVfX4SNRjnyriFrV1yiXddiIddOPriMFpuEJAMwIAgkBB0FkZHJlc3MBARoBV/j6+gImwFGL7Go7RjNJ0hxxsHWL+aTKmgkAzAgCCQEHQWRkcmVzcwEBGgFXSQEY9kN/P0xs4Wd15bfkly/eUC2yg93xCQDMCAIJAQdBZGRyZXNzAQEaAVdLw2zO+zNYQ1hDURDu7+4hEBdL8njLfDIFA25pbAAFcHpMcHMJALUJAgkBC3ZhbHVlT3JFbHNlAgkAnQgCBQR0aGlzAhVzZXR1cF9zdXBwb3J0ZWRBc3NldHMChQFYamRKS1d0UFlDejU4NVFCN0xueERQNzZVR1J1a2F6ZWREdWJVeDlESFFILDZiWmJSbW91N003d1hCdW5NWFFuWjRSbTY2SHhaRjNLZk1FaUZ3azN3bW5BLEVBN3NpR01TVHh6NkV0ZHBrQ2lWV1FIdXBGVDVON1VidlFyVzlrdnhDRTQyAgEsAAxwelBvb2xzU3RyTGkJAQt2YWx1ZU9yRWxzZQIJAJ0IAgUEdGhpcwINc2V0dXBfcHpQb29scwJrM1AzRW5ZQTU3a01aOGtYVlZUaGkxWlpBcFplWFVRSHF0RWUsM1BDcGpMR280d0R1djIza2ptR0Y2bUhzODZCZjNzb1l2QXEsM1A0VTZmbzdCWkhEeW1RSzgyRzVwdmVHUEg3Q0E2UGJLaXQBDHN0clRvQWRkcmVzcwIFYWNjdW0KYWRkcmVzc1N0cgkAzggCBQVhY2N1bQkAzAgCCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKYIAQUKYWRkcmVzc1N0cgIYd3JvbmcgYWRkcmVzcyBpbiBwelBvb2xzBQNuaWwAB3B6UG9vbHMKAAIkbAkAtQkCBQxwelBvb2xzU3RyTGkCASwKAAIkcwkAkAMBBQIkbAoABSRhY2MwBQNuaWwKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBDHN0clRvQWRkcmVzcwIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQIUTGlzdCBzaXplIGV4Y2VlZHMgMjAJAQUkZjBfMgIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYABwAIAAkACgALAAwADQAOAA8AEAARABIAEwAUABREaXN0cmlidXRlSXRlcmF0aW9ucwkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzAhpzZXR1cF9kaXN0cmlidXRlSXRlcmF0aW9ucwAGAA9EaXN0cmlidXRlRGVsYXkJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwIVc2V0dXBfZGlzdHJpYnV0ZURlbGF5CQBoAgA8AAQBDmdldEFzc2V0U3RyaW5nAQdhc3NldElkBAckbWF0Y2gwBQdhc3NldElkAwkAAQIFByRtYXRjaDACCkJ5dGVWZWN0b3IEAWIFByRtYXRjaDAJANgEAQUBYgIFV0FWRVMBDWdldEFzc2V0Qnl0ZXMBCmFzc2V0SWRTdHIDCQAAAgUKYXNzZXRJZFN0cgIFV0FWRVMFBHVuaXQJANkEAQUKYXNzZXRJZFN0cgEKZ2V0QmFsYW5jZQEKYXNzZXRJZFN0cgMJAAACBQphc3NldElkU3RyAgVXQVZFUwgJAO8HAQUEdGhpcwlhdmFpbGFibGUJAPAHAgUEdGhpcwkA2QQBBQphc3NldElkU3RyAQt0b2tlblRvU3dhcAEKYXNzZXRJZFN0cgMJAAACBQphc3NldElkU3RyAgVXQVZFUwkAZQIJAQpnZXRCYWxhbmNlAQIFV0FWRVMAgK3iBAkBCmdldEJhbGFuY2UBBQphc3NldElkU3RyCAFpAQdzdGFrZUxQAAQKYXNzZXRJZFN0cgkBDmdldEFzc2V0U3RyaW5nAQgJAJEDAggFAWkIcGF5bWVudHMAAAdhc3NldElkAwkBAiE9AgkAoggBCQCsAgICCndoaXRlbGlzdF8JAKUIAQgFAWkGY2FsbGVyAgN5ZXMJAAIBAg53aGl0ZWxpc3Qgb25seQMJAQIhPQIJAM8IAgUFcHpMcHMFCmFzc2V0SWRTdHIFBHVuaXQEBGludjIJAPwHBAkAkQMCBQdwelBvb2xzCQEFdmFsdWUBCQDPCAIFBXB6THBzBQphc3NldElkU3RyAg1zdGFrZUluZGV4Rm9yCQDMCAIJAKUIAQUEdGhpcwUDbmlsCQDMCAIJAJEDAggFAWkIcGF5bWVudHMAAAUDbmlsAwkAAAIFBGludjIFBGludjIFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgUDbmlsAWkBCXVuc3Rha2VMUAIKYXNzZXRJZFN0cgZhbW91bnQDCQECIT0CCQCiCAEJAKwCAgIKd2hpdGVsaXN0XwkApQgBCAUBaQZjYWxsZXICA3llcwkAAgECDndoaXRlbGlzdCBvbmx5AwkBAiE9AgkAzwgCBQVwekxwcwUKYXNzZXRJZFN0cgUEdW5pdAQEaW52MgkA/AcECQCRAwIFB3B6UG9vbHMJAQV2YWx1ZQEJAM8IAgUFcHpMcHMFCmFzc2V0SWRTdHICDHVuc3Rha2VJbmRleAkAzAgCBQZhbW91bnQFA25pbAUDbmlsAwkAAAIFBGludjIFBGludjIJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwgFAWkGY2FsbGVyBQZhbW91bnQJANkEAQUKYXNzZXRJZFN0cgUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuBQNuaWwBaQEPY29tcG91bmRSZXdhcmRzAQphc3NldElkU3RyAwkAZgIJAGQCCQELdmFsdWVPckVsc2UCCQCfCAEJAKwCAgIXc3RhdHNfbGFzdERpc3RyaWJ1dGlvbl8FCmFzc2V0SWRTdHIAAAUPRGlzdHJpYnV0ZURlbGF5BQZoZWlnaHQJAAIBAhRjYW5ub3QgYmUgY2FsbGVkIHlldAMJAQIhPQIJAM8IAgUFcHpMcHMFCmFzc2V0SWRTdHIFBHVuaXQEBWxwTnVtCQEFdmFsdWUBCQDPCAIFBXB6THBzBQphc3NldElkU3RyBAZwelBvb2wJAJEDAgUHcHpQb29scwUFbHBOdW0ECHB6VG9rZW5zCQC1CQIJARFAZXh0ck5hdGl2ZSgxMDUzKQIFBnB6UG9vbAIPc3RhdGljX3Rva2VuSWRzAgEsBAdwekJhc2VUCQERQGV4dHJOYXRpdmUoMTA1MykCBQZwelBvb2wCEnN0YXRpY19iYXNlVG9rZW5JZAQEaW52MQkA/AcEBQZwelBvb2wCEWNsYWltSW5kZXhSZXdhcmRzBQNuaWwFA25pbAMJAAACBQRpbnYxBQRpbnYxCgECZjICBWFjY3VtBG5leHQDCQECIT0CBQRuZXh0BQdwekJhc2VUBARpbnYzCQD8BwQFBnB6UG9vbAIEc3dhcAkAzAgCBQdwekJhc2VUCQDMCAIAAAUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCCQENZ2V0QXNzZXRCeXRlcwEFBG5leHQJAQt0b2tlblRvU3dhcAEFBG5leHQFA25pbAMJAAACBQRpbnYzBQRpbnYzBQVhY2N1bQkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgUFYWNjdW0EDHN3YXBzSW52b2tlcwoAAiRsBQhwelRva2VucwoAAiRzCQCQAwEFAiRsCgAFJGFjYzAFA25pbAoBBSRmMV8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQECZjICBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjFfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECFExpc3Qgc2l6ZSBleGNlZWRzIDEwCQEFJGYxXzICCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECBQUkYWNjMAAAAAEAAgADAAQABQAGAAcACAAJAAoECXRvRGVwb3NpdAkBC3Rva2VuVG9Td2FwAQUHcHpCYXNlVAoBB2hhbmRsZXICBWFjY3VtCmFzc2V0SWRTdHIDCQAAAgUKYXNzZXRJZFN0cgUHcHpCYXNlVAUFYWNjdW0EB2Fzc2V0SWQJAQ1nZXRBc3NldEJ5dGVzAQUKYXNzZXRJZFN0cgQLYXNzZXRXZWlnaHQJARFAZXh0ck5hdGl2ZSgxMDUwKQIFBnB6UG9vbAkArAICCQCsAgICB3N0YXRpY18FCmFzc2V0SWRTdHICB193ZWlnaHQEBmFtb3VudAkAawMFCXRvRGVwb3NpdAULYXNzZXRXZWlnaHQAkE4EAmluBAckbWF0Y2gwCQD9BwQFBnB6UG9vbAIEc3dhcAkAzAgCBQphc3NldElkU3RyCQDMCAIAAAUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCCQENZ2V0QXNzZXRCeXRlcwEFB3B6QmFzZVQFBmFtb3VudAUDbmlsAwkAAQIFByRtYXRjaDACA0ludAQBeAUHJG1hdGNoMAUBeAAAAwkAAAIFAmluBQJpbgkAzggCBQVhY2N1bQkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgUHYXNzZXRJZAUCaW4FA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgQPYmFzZUFzc2V0V2VpZ2h0CQERQGV4dHJOYXRpdmUoMTA1MCkCBQZwelBvb2wJAKwCAgkArAICAgdzdGF0aWNfBQdwekJhc2VUAgdfd2VpZ2h0BA1iYXNlUGF5QW1vdW50CQBrAwUJdG9EZXBvc2l0BQ9iYXNlQXNzZXRXZWlnaHQAkE4ED2V4Y2hhbmdlSW52b2tlcwoAAiRsBQhwelRva2VucwoAAiRzCQCQAwEFAiRsCgAFJGFjYzAJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIJAQ1nZXRBc3NldEJ5dGVzAQUHcHpCYXNlVAUNYmFzZVBheUFtb3VudAUDbmlsCgEFJGYyXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQdoYW5kbGVyAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYyXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhNMaXN0IHNpemUgZXhjZWVkcyA5CQEFJGYyXzICCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECBQUkYWNjMAAAAAEAAgADAAQABQAGAAcACAAJAwkAAAIFD2V4Y2hhbmdlSW52b2tlcwUPZXhjaGFuZ2VJbnZva2VzBAhscEFtb3VudAQHJG1hdGNoMAkA/QcEBQZwelBvb2wCDWdlbmVyYXRlSW5kZXgJAMwIAgcFA25pbAUPZXhjaGFuZ2VJbnZva2VzAwkAAQIFByRtYXRjaDACA0ludAQBeAUHJG1hdGNoMAUBeAAAAwkAAAIFCGxwQW1vdW50BQhscEFtb3VudAQMdG9EaXN0cmlidXRlCQBpAgUIbHBBbW91bnQFFERpc3RyaWJ1dGVJdGVyYXRpb25zBARpbnY1CQD8BwQJAQdBZGRyZXNzAQEaAVdE/GOYf4xUiFwqh24YTlEVxsZ4fW/QWXwCE2FkZEludGVyZXN0RVhURVJOQUwFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgkA2QQBBQphc3NldElkU3RyBQx0b0Rpc3RyaWJ1dGUFA25pbAMJAAACBQRpbnY1BQRpbnY1CQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgICF3N0YXRzX2xhc3REaXN0cmlidXRpb25fBQphc3NldElkU3RyBQZoZWlnaHQJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgIXc3RhdHNfdG90YWxEaXN0cmlidXRlZF8FCmFzc2V0SWRTdHIJAGQCCQELdmFsdWVPckVsc2UCCQCfCAEJAKwCAgIXc3RhdHNfdG90YWxEaXN0cmlidXRlZF8FCmFzc2V0SWRTdHIAAAUMdG9EaXN0cmlidXRlBQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAhB3cm9uZyBhc3NldElkU3RyAWkBDHVwZGF0ZVN0cmluZwIBawF2AwkBAiE9AggFAWkGY2FsbGVyBQR0aGlzCQACAQIQc2VsZiBpbnZva2Ugb25seQkAzAgCCQELU3RyaW5nRW50cnkCBQFrBQF2BQNuaWwBaQEQYWRkU3VwcG9ydGVkUG9vbAIJcHpUb2tlbklkBnB6UG9vbAMJAQIhPQIIBQFpBmNhbGxlcgUEdGhpcwkAAgECEHNlbGYgaW52b2tlIG9ubHkJAMwIAgkBC1N0cmluZ0VudHJ5AgIVc2V0dXBfc3VwcG9ydGVkQXNzZXRzCQCsAgIJAKwCAgkBEUBleHRyTmF0aXZlKDEwNTMpAgUEdGhpcwIVc2V0dXBfc3VwcG9ydGVkQXNzZXRzAgEsBQlwelRva2VuSWQJAMwIAgkBC1N0cmluZ0VudHJ5AgINc2V0dXBfcHpQb29scwkArAICCQCsAgIJARFAZXh0ck5hdGl2ZSgxMDUzKQIFBHRoaXMCDXNldHVwX3B6UG9vbHMCASwJAKUIAQkBEUBleHRyTmF0aXZlKDEwNjIpAQUGcHpQb29sBQNuaWwBaQENaW5pdE5ld01hc3RlcgEGbWFzdGVyBAlhZGRyZXNzT0sEByRtYXRjaDAJAKYIAQUGbWFzdGVyAwkAAQIFByRtYXRjaDACB0FkZHJlc3MEAWEFByRtYXRjaDAGBwMJAQEhAQUJYWRkcmVzc09LCQACAQkArAICAhJpbmNvcnJlY3QgYWRkcmVzcyAFBm1hc3RlcgMJAQIhPQIIBQFpBmNhbGxlcgUEdGhpcwkAAgECHGF2YWlsYWJsZSBmb3Igc2VsZiBjYWxsIG9ubHkJAMwIAgkBC1N0cmluZ0VudHJ5AgIPdmVyaWZpZXJfbWFzdGVyBQZtYXN0ZXIFA25pbAFpARByZXF1ZXN0TmV3TWFzdGVyAQluZXdNYXN0ZXIECWFkZHJlc3NPSwQHJG1hdGNoMAkApggBBQluZXdNYXN0ZXIDCQABAgUHJG1hdGNoMAIHQWRkcmVzcwQBYQUHJG1hdGNoMAYHAwkBASEBBQlhZGRyZXNzT0sJAAIBCQCsAgICEmluY29ycmVjdCBhZGRyZXNzIAUJbmV3TWFzdGVyAwkAAAIJAM8IAgUJc2VudGluZWxzCAUBaQZjYWxsZXIFBHVuaXQJAAIBAg53aGl0ZWxpc3Qgb25seQkAzAgCCQELU3RyaW5nRW50cnkCAhJ2ZXJpZmllcl9uZXdNYXN0ZXIFCW5ld01hc3RlcgkAzAgCCQEMSW50ZWdlckVudHJ5AgIfdmVyaWZpZXJfbmV3TWFzdGVyRWxpZ2libGVBZnRlcgkAZAIFBmhlaWdodACQTgUDbmlsAWkBEWFjdGl2YXRlTmV3TWFzdGVyAAQOZWxpZ2libGVIZWlnaHQJARFAZXh0ck5hdGl2ZSgxMDUwKQIFBHRoaXMCH3ZlcmlmaWVyX25ld01hc3RlckVsaWdpYmxlQWZ0ZXIECW5ld01hc3RlcgkBEUBleHRyTmF0aXZlKDEwNTMpAgUEdGhpcwISdmVyaWZpZXJfbmV3TWFzdGVyAwkAAAIJAM8IAgUJc2VudGluZWxzCAUBaQZjYWxsZXIFBHVuaXQJAAIBAg53aGl0ZWxpc3Qgb25seQMJAGYCBQ5lbGlnaWJsZUhlaWdodAUGaGVpZ2h0CQACAQIibmV3IG1hc3RlciBjYW5ub3QgYmUgYWN0aXZhdGVkIHlldAkAzAgCCQELRGVsZXRlRW50cnkBAhJ2ZXJpZmllcl9uZXdNYXN0ZXIJAMwIAgkBC0RlbGV0ZUVudHJ5AQIfdmVyaWZpZXJfbmV3TWFzdGVyRWxpZ2libGVBZnRlcgkAzAgCCQELU3RyaW5nRW50cnkCAg92ZXJpZmllcl9tYXN0ZXIFCW5ld01hc3RlcgUDbmlsAQJ0eAEGdmVyaWZ5AAQNbWFzdGVyQWRkcmVzcwkAoggBAg92ZXJpZmllcl9tYXN0ZXIEEGFwcHJvdmVkQnlNYXN0ZXIEByRtYXRjaDAFDW1hc3RlckFkZHJlc3MDCQABAgUHJG1hdGNoMAIGU3RyaW5nBAF4BQckbWF0Y2gwBAckbWF0Y2gxCQCaCAIJARFAZXh0ck5hdGl2ZSgxMDYyKQEFAXgJAKwCAgILYXBwcm92ZWRUeF8JANgEAQgFAnR4AmlkAwkAAQIFByRtYXRjaDECA0ludAQBeQUHJG1hdGNoMQUBeQAAAAEDCQD0AwMIBQJ0eAlib2R5Qnl0ZXMJAJEDAggFAnR4BnByb29mcwAACAUCdHgPc2VuZGVyUHVibGljS2V5CQBmAgUQYXBwcm92ZWRCeU1hc3RlcgAAByiGBaY=", "height": 4104516, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 226AxaLm88fEzKiLuK6qqRbX2DJwRoCfxT7eq91Yfp43 Next: HxKerxVJ5LY9FDt9pgqaJuNkCjGMXf3Wi8MaZCiCjHuC Diff:
Old | New | Differences | |
---|---|---|---|
1 | 1 | {-# STDLIB_VERSION 6 #-} | |
2 | 2 | {-# SCRIPT_TYPE ACCOUNT #-} | |
3 | 3 | {-# CONTENT_TYPE DAPP #-} | |
4 | - | let VERSION = "PZST-1.0. | |
4 | + | let VERSION = "PZST-1.0.1" | |
5 | 5 | ||
6 | 6 | let sentinels = [Address(base58'3PMcMiMEs6w56NRGacksXtFG5zS7doE9fpL'), Address(base58'3PQdNxynJy5mche2kxMVc5shXWzK8Gstq3o'), Address(base58'3P8auNWJkxxByyJtwErFXaxiXcGM45qQ1hA'), Address(base58'3P8qVX189qpoTJZQQQdKS9endHK5sxWsvrd')] | |
7 | 7 | ||
26 | 26 | ||
27 | 27 | $f0_2($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($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), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20) | |
28 | 28 | } | |
29 | + | ||
30 | + | let DistributeIterations = valueOrElse(getInteger(this, "setup_distributeIterations"), 6) | |
31 | + | ||
32 | + | let DistributeDelay = valueOrElse(getInteger(this, "setup_distributeDelay"), (60 * 4)) | |
29 | 33 | ||
30 | 34 | func getAssetString (assetId) = match assetId { | |
31 | 35 | case b: ByteVector => | |
82 | 86 | ||
83 | 87 | ||
84 | 88 | @Callable(i) | |
85 | - | func compoundRewards (assetIdStr) = if ((indexOf(pzLps, assetIdStr) != unit)) | |
86 | - | then { | |
87 | - | let lpNum = value(indexOf(pzLps, assetIdStr)) | |
88 | - | let pzPool = pzPools[lpNum] | |
89 | - | let pzTokens = split(getStringValue(pzPool, "static_tokenIds"), ",") | |
90 | - | let pzBaseT = getStringValue(pzPool, "static_baseTokenId") | |
91 | - | let inv1 = invoke(pzPool, "claimIndexRewards", nil, nil) | |
92 | - | if ((inv1 == inv1)) | |
93 | - | then { | |
94 | - | func f2 (accum,next) = if ((next != pzBaseT)) | |
95 | - | then { | |
96 | - | let inv3 = invoke(pzPool, "swap", [pzBaseT, 0], [AttachedPayment(getAssetBytes(next), tokenToSwap(next))]) | |
97 | - | if ((inv3 == inv3)) | |
98 | - | then accum | |
99 | - | else throw("Strict value is not equal to itself.") | |
89 | + | func compoundRewards (assetIdStr) = if (((valueOrElse(getInteger(("stats_lastDistribution_" + assetIdStr)), 0) + DistributeDelay) > height)) | |
90 | + | then throw("cannot be called yet") | |
91 | + | else if ((indexOf(pzLps, assetIdStr) != unit)) | |
92 | + | then { | |
93 | + | let lpNum = value(indexOf(pzLps, assetIdStr)) | |
94 | + | let pzPool = pzPools[lpNum] | |
95 | + | let pzTokens = split(getStringValue(pzPool, "static_tokenIds"), ",") | |
96 | + | let pzBaseT = getStringValue(pzPool, "static_baseTokenId") | |
97 | + | let inv1 = invoke(pzPool, "claimIndexRewards", nil, nil) | |
98 | + | if ((inv1 == inv1)) | |
99 | + | then { | |
100 | + | func f2 (accum,next) = if ((next != pzBaseT)) | |
101 | + | then { | |
102 | + | let inv3 = invoke(pzPool, "swap", [pzBaseT, 0], [AttachedPayment(getAssetBytes(next), tokenToSwap(next))]) | |
103 | + | if ((inv3 == inv3)) | |
104 | + | then accum | |
105 | + | else throw("Strict value is not equal to itself.") | |
106 | + | } | |
107 | + | else accum | |
108 | + | ||
109 | + | let swapsInvokes = { | |
110 | + | let $l = pzTokens | |
111 | + | let $s = size($l) | |
112 | + | let $acc0 = nil | |
113 | + | func $f1_1 ($a,$i) = if (($i >= $s)) | |
114 | + | then $a | |
115 | + | else f2($a, $l[$i]) | |
116 | + | ||
117 | + | func $f1_2 ($a,$i) = if (($i >= $s)) | |
118 | + | then $a | |
119 | + | else throw("List size exceeds 10") | |
120 | + | ||
121 | + | $f1_2($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10) | |
100 | 122 | } | |
101 | - | else accum | |
123 | + | let toDeposit = tokenToSwap(pzBaseT) | |
124 | + | func handler (accum,assetIdStr) = if ((assetIdStr == pzBaseT)) | |
125 | + | then accum | |
126 | + | else { | |
127 | + | let assetId = getAssetBytes(assetIdStr) | |
128 | + | let assetWeight = getIntegerValue(pzPool, (("static_" + assetIdStr) + "_weight")) | |
129 | + | let amount = fraction(toDeposit, assetWeight, 10000) | |
130 | + | let in = match reentrantInvoke(pzPool, "swap", [assetIdStr, 0], [AttachedPayment(getAssetBytes(pzBaseT), amount)]) { | |
131 | + | case x: Int => | |
132 | + | x | |
133 | + | case _ => | |
134 | + | 0 | |
135 | + | } | |
136 | + | if ((in == in)) | |
137 | + | then (accum ++ [AttachedPayment(assetId, in)]) | |
138 | + | else throw("Strict value is not equal to itself.") | |
139 | + | } | |
102 | 140 | ||
103 | - | let swapsInvokes = { | |
104 | - | let $l = pzTokens | |
105 | - | let $s = size($l) | |
106 | - | let $acc0 = nil | |
107 | - | func $f1_1 ($a,$i) = if (($i >= $s)) | |
108 | - | then $a | |
109 | - | else f2($a, $l[$i]) | |
141 | + | let baseAssetWeight = getIntegerValue(pzPool, (("static_" + pzBaseT) + "_weight")) | |
142 | + | let basePayAmount = fraction(toDeposit, baseAssetWeight, 10000) | |
143 | + | let exchangeInvokes = { | |
144 | + | let $l = pzTokens | |
145 | + | let $s = size($l) | |
146 | + | let $acc0 = [AttachedPayment(getAssetBytes(pzBaseT), basePayAmount)] | |
147 | + | func $f2_1 ($a,$i) = if (($i >= $s)) | |
148 | + | then $a | |
149 | + | else handler($a, $l[$i]) | |
110 | 150 | ||
111 | - | func $ | |
112 | - | then $a | |
113 | - | else throw("List size exceeds | |
151 | + | func $f2_2 ($a,$i) = if (($i >= $s)) | |
152 | + | then $a | |
153 | + | else throw("List size exceeds 9") | |
114 | 154 | ||
115 | - | $f1_2($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10) | |
155 | + | $f2_2($f2_1($f2_1($f2_1($f2_1($f2_1($f2_1($f2_1($f2_1($f2_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9) | |
156 | + | } | |
157 | + | if ((exchangeInvokes == exchangeInvokes)) | |
158 | + | then { | |
159 | + | let lpAmount = match reentrantInvoke(pzPool, "generateIndex", [false], exchangeInvokes) { | |
160 | + | case x: Int => | |
161 | + | x | |
162 | + | case _ => | |
163 | + | 0 | |
164 | + | } | |
165 | + | if ((lpAmount == lpAmount)) | |
166 | + | then { | |
167 | + | let toDistribute = (lpAmount / DistributeIterations) | |
168 | + | let inv5 = invoke(Address(base58'3P8Df2b7ywHtLBHBe8PBVQYd3A5MdEEJAou'), "addInterestEXTERNAL", nil, [AttachedPayment(fromBase58String(assetIdStr), toDistribute)]) | |
169 | + | if ((inv5 == inv5)) | |
170 | + | then [IntegerEntry(("stats_lastDistribution_" + assetIdStr), height), IntegerEntry(("stats_totalDistributed_" + assetIdStr), (valueOrElse(getInteger(("stats_totalDistributed_" + assetIdStr)), 0) + toDistribute))] | |
171 | + | else throw("Strict value is not equal to itself.") | |
172 | + | } | |
173 | + | else throw("Strict value is not equal to itself.") | |
174 | + | } | |
175 | + | else throw("Strict value is not equal to itself.") | |
116 | 176 | } | |
117 | - | let toDeposit = tokenToSwap(pzBaseT) | |
118 | - | func handler (accum,assetIdStr) = if ((assetIdStr == pzBaseT)) | |
119 | - | then accum | |
120 | - | else { | |
121 | - | let assetId = getAssetBytes(assetIdStr) | |
122 | - | let assetWeight = getIntegerValue(pzPool, (("static_" + assetIdStr) + "_weight")) | |
123 | - | let amount = fraction(toDeposit, assetWeight, 10000) | |
124 | - | let in = match reentrantInvoke(pzPool, "swap", [assetIdStr, 0], [AttachedPayment(getAssetBytes(pzBaseT), amount)]) { | |
125 | - | case x: Int => | |
126 | - | x | |
127 | - | case _ => | |
128 | - | 0 | |
129 | - | } | |
130 | - | if ((in == in)) | |
131 | - | then (accum ++ [AttachedPayment(assetId, in)]) | |
132 | - | else throw("Strict value is not equal to itself.") | |
133 | - | } | |
134 | - | ||
135 | - | let baseAssetWeight = getIntegerValue(pzPool, (("static_" + pzBaseT) + "_weight")) | |
136 | - | let basePayAmount = fraction(toDeposit, baseAssetWeight, 10000) | |
137 | - | let exchangeInvokes = { | |
138 | - | let $l = pzTokens | |
139 | - | let $s = size($l) | |
140 | - | let $acc0 = [AttachedPayment(getAssetBytes(pzBaseT), basePayAmount)] | |
141 | - | func $f2_1 ($a,$i) = if (($i >= $s)) | |
142 | - | then $a | |
143 | - | else handler($a, $l[$i]) | |
144 | - | ||
145 | - | func $f2_2 ($a,$i) = if (($i >= $s)) | |
146 | - | then $a | |
147 | - | else throw("List size exceeds 9") | |
148 | - | ||
149 | - | $f2_2($f2_1($f2_1($f2_1($f2_1($f2_1($f2_1($f2_1($f2_1($f2_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9) | |
150 | - | } | |
151 | - | if ((exchangeInvokes == exchangeInvokes)) | |
152 | - | then { | |
153 | - | let lpAmount = match reentrantInvoke(pzPool, "generateIndex", [false], exchangeInvokes) { | |
154 | - | case x: Int => | |
155 | - | x | |
156 | - | case _ => | |
157 | - | 0 | |
158 | - | } | |
159 | - | if ((lpAmount == lpAmount)) | |
160 | - | then { | |
161 | - | let inv5 = invoke(Address(base58'3P8Df2b7ywHtLBHBe8PBVQYd3A5MdEEJAou'), "addInterestEXTERNAL", nil, [AttachedPayment(fromBase58String(assetIdStr), lpAmount)]) | |
162 | - | if ((inv5 == inv5)) | |
163 | - | then nil | |
164 | - | else throw("Strict value is not equal to itself.") | |
165 | - | } | |
166 | - | else throw("Strict value is not equal to itself.") | |
167 | - | } | |
168 | - | else throw("Strict value is not equal to itself.") | |
169 | - | } | |
170 | - | else throw("Strict value is not equal to itself.") | |
171 | - | } | |
172 | - | else throw("wrong assetIdStr") | |
177 | + | else throw("Strict value is not equal to itself.") | |
178 | + | } | |
179 | + | else throw("wrong assetIdStr") | |
173 | 180 | ||
174 | 181 | ||
175 | 182 |
Old | New | Differences | |
---|---|---|---|
1 | 1 | {-# STDLIB_VERSION 6 #-} | |
2 | 2 | {-# SCRIPT_TYPE ACCOUNT #-} | |
3 | 3 | {-# CONTENT_TYPE DAPP #-} | |
4 | - | let VERSION = "PZST-1.0. | |
4 | + | let VERSION = "PZST-1.0.1" | |
5 | 5 | ||
6 | 6 | let sentinels = [Address(base58'3PMcMiMEs6w56NRGacksXtFG5zS7doE9fpL'), Address(base58'3PQdNxynJy5mche2kxMVc5shXWzK8Gstq3o'), Address(base58'3P8auNWJkxxByyJtwErFXaxiXcGM45qQ1hA'), Address(base58'3P8qVX189qpoTJZQQQdKS9endHK5sxWsvrd')] | |
7 | 7 | ||
8 | 8 | let pzLps = split(valueOrElse(getString(this, "setup_supportedAssets"), "XjdJKWtPYCz585QB7LnxDP76UGRukazedDubUx9DHQH,6bZbRmou7M7wXBunMXQnZ4Rm66HxZF3KfMEiFwk3wmnA,EA7siGMSTxz6EtdpkCiVWQHupFT5N7UbvQrW9kvxCE42"), ",") | |
9 | 9 | ||
10 | 10 | let pzPoolsStrLi = valueOrElse(getString(this, "setup_pzPools"), "3P3EnYA57kMZ8kXVVThi1ZZApZeXUQHqtEe,3PCpjLGo4wDuv23kjmGF6mHs86Bf3soYvAq,3P4U6fo7BZHDymQK82G5pveGPH7CA6PbKit") | |
11 | 11 | ||
12 | 12 | func strToAddress (accum,addressStr) = (accum ++ [valueOrErrorMessage(addressFromString(addressStr), "wrong address in pzPools")]) | |
13 | 13 | ||
14 | 14 | ||
15 | 15 | let pzPools = { | |
16 | 16 | let $l = split(pzPoolsStrLi, ",") | |
17 | 17 | let $s = size($l) | |
18 | 18 | let $acc0 = nil | |
19 | 19 | func $f0_1 ($a,$i) = if (($i >= $s)) | |
20 | 20 | then $a | |
21 | 21 | else strToAddress($a, $l[$i]) | |
22 | 22 | ||
23 | 23 | func $f0_2 ($a,$i) = if (($i >= $s)) | |
24 | 24 | then $a | |
25 | 25 | else throw("List size exceeds 20") | |
26 | 26 | ||
27 | 27 | $f0_2($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($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), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20) | |
28 | 28 | } | |
29 | + | ||
30 | + | let DistributeIterations = valueOrElse(getInteger(this, "setup_distributeIterations"), 6) | |
31 | + | ||
32 | + | let DistributeDelay = valueOrElse(getInteger(this, "setup_distributeDelay"), (60 * 4)) | |
29 | 33 | ||
30 | 34 | func getAssetString (assetId) = match assetId { | |
31 | 35 | case b: ByteVector => | |
32 | 36 | toBase58String(b) | |
33 | 37 | case _ => | |
34 | 38 | "WAVES" | |
35 | 39 | } | |
36 | 40 | ||
37 | 41 | ||
38 | 42 | func getAssetBytes (assetIdStr) = if ((assetIdStr == "WAVES")) | |
39 | 43 | then unit | |
40 | 44 | else fromBase58String(assetIdStr) | |
41 | 45 | ||
42 | 46 | ||
43 | 47 | func getBalance (assetIdStr) = if ((assetIdStr == "WAVES")) | |
44 | 48 | then wavesBalance(this).available | |
45 | 49 | else assetBalance(this, fromBase58String(assetIdStr)) | |
46 | 50 | ||
47 | 51 | ||
48 | 52 | func tokenToSwap (assetIdStr) = if ((assetIdStr == "WAVES")) | |
49 | 53 | then (getBalance("WAVES") - 10000000) | |
50 | 54 | else getBalance(assetIdStr) | |
51 | 55 | ||
52 | 56 | ||
53 | 57 | @Callable(i) | |
54 | 58 | func stakeLP () = { | |
55 | 59 | let assetIdStr = getAssetString(i.payments[0].assetId) | |
56 | 60 | if ((getString(("whitelist_" + toString(i.caller))) != "yes")) | |
57 | 61 | then throw("whitelist only") | |
58 | 62 | else if ((indexOf(pzLps, assetIdStr) != unit)) | |
59 | 63 | then { | |
60 | 64 | let inv2 = invoke(pzPools[value(indexOf(pzLps, assetIdStr))], "stakeIndexFor", [toString(this)], [i.payments[0]]) | |
61 | 65 | if ((inv2 == inv2)) | |
62 | 66 | then nil | |
63 | 67 | else throw("Strict value is not equal to itself.") | |
64 | 68 | } | |
65 | 69 | else nil | |
66 | 70 | } | |
67 | 71 | ||
68 | 72 | ||
69 | 73 | ||
70 | 74 | @Callable(i) | |
71 | 75 | func unstakeLP (assetIdStr,amount) = if ((getString(("whitelist_" + toString(i.caller))) != "yes")) | |
72 | 76 | then throw("whitelist only") | |
73 | 77 | else if ((indexOf(pzLps, assetIdStr) != unit)) | |
74 | 78 | then { | |
75 | 79 | let inv2 = invoke(pzPools[value(indexOf(pzLps, assetIdStr))], "unstakeIndex", [amount], nil) | |
76 | 80 | if ((inv2 == inv2)) | |
77 | 81 | then [ScriptTransfer(i.caller, amount, fromBase58String(assetIdStr))] | |
78 | 82 | else throw("Strict value is not equal to itself.") | |
79 | 83 | } | |
80 | 84 | else nil | |
81 | 85 | ||
82 | 86 | ||
83 | 87 | ||
84 | 88 | @Callable(i) | |
85 | - | func compoundRewards (assetIdStr) = if ((indexOf(pzLps, assetIdStr) != unit)) | |
86 | - | then { | |
87 | - | let lpNum = value(indexOf(pzLps, assetIdStr)) | |
88 | - | let pzPool = pzPools[lpNum] | |
89 | - | let pzTokens = split(getStringValue(pzPool, "static_tokenIds"), ",") | |
90 | - | let pzBaseT = getStringValue(pzPool, "static_baseTokenId") | |
91 | - | let inv1 = invoke(pzPool, "claimIndexRewards", nil, nil) | |
92 | - | if ((inv1 == inv1)) | |
93 | - | then { | |
94 | - | func f2 (accum,next) = if ((next != pzBaseT)) | |
95 | - | then { | |
96 | - | let inv3 = invoke(pzPool, "swap", [pzBaseT, 0], [AttachedPayment(getAssetBytes(next), tokenToSwap(next))]) | |
97 | - | if ((inv3 == inv3)) | |
98 | - | then accum | |
99 | - | else throw("Strict value is not equal to itself.") | |
89 | + | func compoundRewards (assetIdStr) = if (((valueOrElse(getInteger(("stats_lastDistribution_" + assetIdStr)), 0) + DistributeDelay) > height)) | |
90 | + | then throw("cannot be called yet") | |
91 | + | else if ((indexOf(pzLps, assetIdStr) != unit)) | |
92 | + | then { | |
93 | + | let lpNum = value(indexOf(pzLps, assetIdStr)) | |
94 | + | let pzPool = pzPools[lpNum] | |
95 | + | let pzTokens = split(getStringValue(pzPool, "static_tokenIds"), ",") | |
96 | + | let pzBaseT = getStringValue(pzPool, "static_baseTokenId") | |
97 | + | let inv1 = invoke(pzPool, "claimIndexRewards", nil, nil) | |
98 | + | if ((inv1 == inv1)) | |
99 | + | then { | |
100 | + | func f2 (accum,next) = if ((next != pzBaseT)) | |
101 | + | then { | |
102 | + | let inv3 = invoke(pzPool, "swap", [pzBaseT, 0], [AttachedPayment(getAssetBytes(next), tokenToSwap(next))]) | |
103 | + | if ((inv3 == inv3)) | |
104 | + | then accum | |
105 | + | else throw("Strict value is not equal to itself.") | |
106 | + | } | |
107 | + | else accum | |
108 | + | ||
109 | + | let swapsInvokes = { | |
110 | + | let $l = pzTokens | |
111 | + | let $s = size($l) | |
112 | + | let $acc0 = nil | |
113 | + | func $f1_1 ($a,$i) = if (($i >= $s)) | |
114 | + | then $a | |
115 | + | else f2($a, $l[$i]) | |
116 | + | ||
117 | + | func $f1_2 ($a,$i) = if (($i >= $s)) | |
118 | + | then $a | |
119 | + | else throw("List size exceeds 10") | |
120 | + | ||
121 | + | $f1_2($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10) | |
100 | 122 | } | |
101 | - | else accum | |
123 | + | let toDeposit = tokenToSwap(pzBaseT) | |
124 | + | func handler (accum,assetIdStr) = if ((assetIdStr == pzBaseT)) | |
125 | + | then accum | |
126 | + | else { | |
127 | + | let assetId = getAssetBytes(assetIdStr) | |
128 | + | let assetWeight = getIntegerValue(pzPool, (("static_" + assetIdStr) + "_weight")) | |
129 | + | let amount = fraction(toDeposit, assetWeight, 10000) | |
130 | + | let in = match reentrantInvoke(pzPool, "swap", [assetIdStr, 0], [AttachedPayment(getAssetBytes(pzBaseT), amount)]) { | |
131 | + | case x: Int => | |
132 | + | x | |
133 | + | case _ => | |
134 | + | 0 | |
135 | + | } | |
136 | + | if ((in == in)) | |
137 | + | then (accum ++ [AttachedPayment(assetId, in)]) | |
138 | + | else throw("Strict value is not equal to itself.") | |
139 | + | } | |
102 | 140 | ||
103 | - | let swapsInvokes = { | |
104 | - | let $l = pzTokens | |
105 | - | let $s = size($l) | |
106 | - | let $acc0 = nil | |
107 | - | func $f1_1 ($a,$i) = if (($i >= $s)) | |
108 | - | then $a | |
109 | - | else f2($a, $l[$i]) | |
141 | + | let baseAssetWeight = getIntegerValue(pzPool, (("static_" + pzBaseT) + "_weight")) | |
142 | + | let basePayAmount = fraction(toDeposit, baseAssetWeight, 10000) | |
143 | + | let exchangeInvokes = { | |
144 | + | let $l = pzTokens | |
145 | + | let $s = size($l) | |
146 | + | let $acc0 = [AttachedPayment(getAssetBytes(pzBaseT), basePayAmount)] | |
147 | + | func $f2_1 ($a,$i) = if (($i >= $s)) | |
148 | + | then $a | |
149 | + | else handler($a, $l[$i]) | |
110 | 150 | ||
111 | - | func $ | |
112 | - | then $a | |
113 | - | else throw("List size exceeds | |
151 | + | func $f2_2 ($a,$i) = if (($i >= $s)) | |
152 | + | then $a | |
153 | + | else throw("List size exceeds 9") | |
114 | 154 | ||
115 | - | $f1_2($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10) | |
155 | + | $f2_2($f2_1($f2_1($f2_1($f2_1($f2_1($f2_1($f2_1($f2_1($f2_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9) | |
156 | + | } | |
157 | + | if ((exchangeInvokes == exchangeInvokes)) | |
158 | + | then { | |
159 | + | let lpAmount = match reentrantInvoke(pzPool, "generateIndex", [false], exchangeInvokes) { | |
160 | + | case x: Int => | |
161 | + | x | |
162 | + | case _ => | |
163 | + | 0 | |
164 | + | } | |
165 | + | if ((lpAmount == lpAmount)) | |
166 | + | then { | |
167 | + | let toDistribute = (lpAmount / DistributeIterations) | |
168 | + | let inv5 = invoke(Address(base58'3P8Df2b7ywHtLBHBe8PBVQYd3A5MdEEJAou'), "addInterestEXTERNAL", nil, [AttachedPayment(fromBase58String(assetIdStr), toDistribute)]) | |
169 | + | if ((inv5 == inv5)) | |
170 | + | then [IntegerEntry(("stats_lastDistribution_" + assetIdStr), height), IntegerEntry(("stats_totalDistributed_" + assetIdStr), (valueOrElse(getInteger(("stats_totalDistributed_" + assetIdStr)), 0) + toDistribute))] | |
171 | + | else throw("Strict value is not equal to itself.") | |
172 | + | } | |
173 | + | else throw("Strict value is not equal to itself.") | |
174 | + | } | |
175 | + | else throw("Strict value is not equal to itself.") | |
116 | 176 | } | |
117 | - | let toDeposit = tokenToSwap(pzBaseT) | |
118 | - | func handler (accum,assetIdStr) = if ((assetIdStr == pzBaseT)) | |
119 | - | then accum | |
120 | - | else { | |
121 | - | let assetId = getAssetBytes(assetIdStr) | |
122 | - | let assetWeight = getIntegerValue(pzPool, (("static_" + assetIdStr) + "_weight")) | |
123 | - | let amount = fraction(toDeposit, assetWeight, 10000) | |
124 | - | let in = match reentrantInvoke(pzPool, "swap", [assetIdStr, 0], [AttachedPayment(getAssetBytes(pzBaseT), amount)]) { | |
125 | - | case x: Int => | |
126 | - | x | |
127 | - | case _ => | |
128 | - | 0 | |
129 | - | } | |
130 | - | if ((in == in)) | |
131 | - | then (accum ++ [AttachedPayment(assetId, in)]) | |
132 | - | else throw("Strict value is not equal to itself.") | |
133 | - | } | |
134 | - | ||
135 | - | let baseAssetWeight = getIntegerValue(pzPool, (("static_" + pzBaseT) + "_weight")) | |
136 | - | let basePayAmount = fraction(toDeposit, baseAssetWeight, 10000) | |
137 | - | let exchangeInvokes = { | |
138 | - | let $l = pzTokens | |
139 | - | let $s = size($l) | |
140 | - | let $acc0 = [AttachedPayment(getAssetBytes(pzBaseT), basePayAmount)] | |
141 | - | func $f2_1 ($a,$i) = if (($i >= $s)) | |
142 | - | then $a | |
143 | - | else handler($a, $l[$i]) | |
144 | - | ||
145 | - | func $f2_2 ($a,$i) = if (($i >= $s)) | |
146 | - | then $a | |
147 | - | else throw("List size exceeds 9") | |
148 | - | ||
149 | - | $f2_2($f2_1($f2_1($f2_1($f2_1($f2_1($f2_1($f2_1($f2_1($f2_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9) | |
150 | - | } | |
151 | - | if ((exchangeInvokes == exchangeInvokes)) | |
152 | - | then { | |
153 | - | let lpAmount = match reentrantInvoke(pzPool, "generateIndex", [false], exchangeInvokes) { | |
154 | - | case x: Int => | |
155 | - | x | |
156 | - | case _ => | |
157 | - | 0 | |
158 | - | } | |
159 | - | if ((lpAmount == lpAmount)) | |
160 | - | then { | |
161 | - | let inv5 = invoke(Address(base58'3P8Df2b7ywHtLBHBe8PBVQYd3A5MdEEJAou'), "addInterestEXTERNAL", nil, [AttachedPayment(fromBase58String(assetIdStr), lpAmount)]) | |
162 | - | if ((inv5 == inv5)) | |
163 | - | then nil | |
164 | - | else throw("Strict value is not equal to itself.") | |
165 | - | } | |
166 | - | else throw("Strict value is not equal to itself.") | |
167 | - | } | |
168 | - | else throw("Strict value is not equal to itself.") | |
169 | - | } | |
170 | - | else throw("Strict value is not equal to itself.") | |
171 | - | } | |
172 | - | else throw("wrong assetIdStr") | |
177 | + | else throw("Strict value is not equal to itself.") | |
178 | + | } | |
179 | + | else throw("wrong assetIdStr") | |
173 | 180 | ||
174 | 181 | ||
175 | 182 | ||
176 | 183 | @Callable(i) | |
177 | 184 | func updateString (k,v) = if ((i.caller != this)) | |
178 | 185 | then throw("self invoke only") | |
179 | 186 | else [StringEntry(k, v)] | |
180 | 187 | ||
181 | 188 | ||
182 | 189 | ||
183 | 190 | @Callable(i) | |
184 | 191 | func addSupportedPool (pzTokenId,pzPool) = if ((i.caller != this)) | |
185 | 192 | then throw("self invoke only") | |
186 | 193 | else [StringEntry("setup_supportedAssets", ((getStringValue(this, "setup_supportedAssets") + ",") + pzTokenId)), StringEntry("setup_pzPools", ((getStringValue(this, "setup_pzPools") + ",") + toString(addressFromStringValue(pzPool))))] | |
187 | 194 | ||
188 | 195 | ||
189 | 196 | ||
190 | 197 | @Callable(i) | |
191 | 198 | func initNewMaster (master) = { | |
192 | 199 | let addressOK = match addressFromString(master) { | |
193 | 200 | case a: Address => | |
194 | 201 | true | |
195 | 202 | case _ => | |
196 | 203 | false | |
197 | 204 | } | |
198 | 205 | if (!(addressOK)) | |
199 | 206 | then throw(("incorrect address " + master)) | |
200 | 207 | else if ((i.caller != this)) | |
201 | 208 | then throw("available for self call only") | |
202 | 209 | else [StringEntry("verifier_master", master)] | |
203 | 210 | } | |
204 | 211 | ||
205 | 212 | ||
206 | 213 | ||
207 | 214 | @Callable(i) | |
208 | 215 | func requestNewMaster (newMaster) = { | |
209 | 216 | let addressOK = match addressFromString(newMaster) { | |
210 | 217 | case a: Address => | |
211 | 218 | true | |
212 | 219 | case _ => | |
213 | 220 | false | |
214 | 221 | } | |
215 | 222 | if (!(addressOK)) | |
216 | 223 | then throw(("incorrect address " + newMaster)) | |
217 | 224 | else if ((indexOf(sentinels, i.caller) == unit)) | |
218 | 225 | then throw("whitelist only") | |
219 | 226 | else [StringEntry("verifier_newMaster", newMaster), IntegerEntry("verifier_newMasterEligibleAfter", (height + 10000))] | |
220 | 227 | } | |
221 | 228 | ||
222 | 229 | ||
223 | 230 | ||
224 | 231 | @Callable(i) | |
225 | 232 | func activateNewMaster () = { | |
226 | 233 | let eligibleHeight = getIntegerValue(this, "verifier_newMasterEligibleAfter") | |
227 | 234 | let newMaster = getStringValue(this, "verifier_newMaster") | |
228 | 235 | if ((indexOf(sentinels, i.caller) == unit)) | |
229 | 236 | then throw("whitelist only") | |
230 | 237 | else if ((eligibleHeight > height)) | |
231 | 238 | then throw("new master cannot be activated yet") | |
232 | 239 | else [DeleteEntry("verifier_newMaster"), DeleteEntry("verifier_newMasterEligibleAfter"), StringEntry("verifier_master", newMaster)] | |
233 | 240 | } | |
234 | 241 | ||
235 | 242 | ||
236 | 243 | @Verifier(tx) | |
237 | 244 | func verify () = { | |
238 | 245 | let masterAddress = getString("verifier_master") | |
239 | 246 | let approvedByMaster = match masterAddress { | |
240 | 247 | case x: String => | |
241 | 248 | match getInteger(addressFromStringValue(x), ("approvedTx_" + toBase58String(tx.id))) { | |
242 | 249 | case y: Int => | |
243 | 250 | y | |
244 | 251 | case _ => | |
245 | 252 | 0 | |
246 | 253 | } | |
247 | 254 | case _ => | |
248 | 255 | 1 | |
249 | 256 | } | |
250 | 257 | if (sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey)) | |
251 | 258 | then (approvedByMaster > 0) | |
252 | 259 | else false | |
253 | 260 | } | |
254 | 261 |
github/deemru/w8io/3ef1775 138.70 ms ◑