tx · 4pAh3mrJUeHMi8nxU6tiKTbUTDVovY6CR5E5STvVv8sc

3N3g7W8FPoQ7g5EadbAD2GVjrZT5RWpHZZh:  -0.01400000 Waves

2023.05.05 12:21 [2564323] smart account 3N3g7W8FPoQ7g5EadbAD2GVjrZT5RWpHZZh > SELF 0.00000000 Waves

{ "type": 13, "id": "4pAh3mrJUeHMi8nxU6tiKTbUTDVovY6CR5E5STvVv8sc", "fee": 1400000, "feeAssetId": null, "timestamp": 1683278476402, "version": 2, "chainId": 84, "sender": "3N3g7W8FPoQ7g5EadbAD2GVjrZT5RWpHZZh", "senderPublicKey": "Ap7CkWd6fzBU34kGo4GJJzC5q4qWXuLVunzE25PchdGS", "proofs": [ "2G7UyiyjcoXfhWZxsdv44Z3QWnFRHf8WxazXBK1nxZ5nS4gmEJNYps97owANL8qm4eNn5PyCrhYBDtrdeB7Sqg4M" ], "script": "base64:BgKdEAgCEgkKBwgICBgBCAESABIICgYICAgICAgSAwoBGBIDCgEIEgASABIECgIICCIQY29udHJhY3RGaWxlbmFtZSIDU0VQIgx3YXZlc0Fzc2V0SWQiEWludmFsaWRQcmljZUFzc2V0Igd3cmFwRXJyIgNtc2ciCHRocm93RXJyIgd0aHJvd1BEIhR0aHJvd0NyZWF0ZU5vdENhbGxlZCIRdGhyb3dZb3VOb3RJc3N1ZXIiD3Rocm93UG9vbEV4aXN0cyIVdGhyb3dBc3NldE5vdFZlcmlmaWVkIhZ0aHJvd0ludmFsaWRQcmljZUFzc2V0IhR0aHJvd0ludmFsaWRGZWVBc3NldCIXdGhyb3dJbnZhbGlkQW1vdW50QXNzZXQiEnRocm93SW52YWxpZFN0YXR1cyIfdGhyb3dDYW5BY3RpdmF0ZU9ubHlQZW5kaW5nUG9vbCIddGhyb3dGYWN0b3J5UmV0dXJuZWROb3RTdHJpbmciHHRocm93SW52YWxpZFByaWNlQXNzZXRBbW91bnQiD3Rocm93SW52YWxpZEZlZSIVdGhyb3dJbnZhbGlkQXNzZXRQYWlyIhNrZXlNYW5hZ2VyUHVibGljS2V5IhprZXlQZW5kaW5nTWFuYWdlclB1YmxpY0tleSIPa2V5QWRtaW5QdWJLZXlzIglrZXlTdGF0dXMiDWFtb3VudEFzc2V0SWQiDHByaWNlQXNzZXRJZCISa2V5RmFjdG9yeUNvbnRyYWN0IhZrZXlBc3NldHNTdG9yZUNvbnRyYWN0IhNrZXlFbWlzc2lvbkNvbnRyYWN0IglrZXlTdWZmaXgiDGtleUxhc3RJbmRleCILaW5kZXhTdWZmaXgiDXN0YXR1c1BlbmRpbmciDnN0YXR1c0RlY2xpbmVkIgxzdGF0dXNBY3RpdmUiCHN0YXR1c2VzIg9rZXlDcmVhdGVDYWxsZWQiD2tleUNyZWF0ZUNhbGxlciIUa2V5QW1vdW50QXNzZXRBbW91bnQiE2tleVByaWNlQXNzZXRBbW91bnQiCWtleUhlaWdodCINa2V5RmVlQXNzZXRJZCIMa2V5RmVlQW1vdW50IhdrZXlBbW91bnRBc3NldE1pbkFtb3VudCIXa2V5UHJpY2VBc3NldHNNaW5BbW91bnQiDmtleVByaWNlQXNzZXRzIg9nZXRTdHJpbmdPckZhaWwiA2tleSISc3RyaW5nT3B0aW9uVG9MaXN0IgxzdHJpbmdPclVuaXQiByRtYXRjaDAiAXMiD2ZhY3RvcnlDb250cmFjdCIZa2V5Vm90aW5nRW1pc3Npb25Db250cmFjdCIWdm90aW5nRW1pc3Npb25Db250cmFjdCIia2V5Vm90aW5nRW1pc3Npb25DYW5kaWRhdGVDb250cmFjdCIfdm90aW5nRW1pc3Npb25DYW5kaWRhdGVDb250cmFjdCIOaXNDcmVhdGVDYWxsZWQiEG11c3RDcmVhdGVDYWxsZWQiFm1hbmFnZXJQdWJsaWNLZXlPclVuaXQiHXBlbmRpbmdNYW5hZ2VyUHVibGljS2V5T3JVbml0Iglpc01hbmFnZXIiAWkiAnBrIgttdXN0TWFuYWdlciIJbXVzdEFkbWluIghhZG1pblBLcyIKaXNWZXJpZmllZCIHYXNzZXRJZCIMZ2V0SWRBbmRJbmZvIgdwYXltZW50IgJpZCIEaW5mbyILdmFsaWRTdGF0dXMiBnN0YXR1cyIQZmFjdG9yeVYyQWRkcmVzcyISYXNzZXRzU3RvcmVBZGRyZXNzIg9lbWlzc2lvbkFkZHJlc3MiFHByaWNlQXNzZXRzTWluQW1vdW50IhRhbW91bnRBc3NldE1pbkFtb3VudCIKZmVlQXNzZXRJZCIJZmVlQW1vdW50IgtjaGVja0NhbGxlciISYW1vdW50QXNzZXRQYXltZW50IhFwcmljZUFzc2V0UGF5bWVudCIPZmVlQXNzZXRQYXltZW50IgskdDA3NDczNzU0NSIPYW1vdW50QXNzZXRJbmZvIgskdDA3NTQ4NzYxNyIOcHJpY2VBc3NldEluZm8iCyR0MDc2MjA3NjgzIgxmZWVBc3NldEluZm8iEWFtb3VudEFzc2V0QW1vdW50IhBwcmljZUFzc2V0QW1vdW50Ig5mZWVBc3NldEFtb3VudCIPcHJpY2VBc3NldHNMaXN0IhVhc3NldE1pbkFtb3VudERlZmF1bHQiF2FsbG93ZWRBc3NldHNNaW5BbW91bnRzIhBwcmljZUFzc2V0c0luZGV4IhNwcmljZUFzc2V0TWluQW1vdW50IglsYXN0SW5kZXgiCGN1ckluZGV4IhBlbWlzc2lvbkNvbnRyYWN0Igpwb29sRXhpc3RzIgFAIgZjaGVja3MiE3BheW1lbnRzV2l0aEZlZVNpemUiD2J1cm5FbWlzc2lvbkludiILcG9vbEFkZHJlc3MiEWFtb3VudEFzc2V0VGlja2VyIhBwcmljZUFzc2V0VGlja2VyIgRsb2dvIhJhY3RpdmF0ZU5ld1Bvb2xJbnYiCWxwQXNzZXRJZCIJYmVmb3JlUHV0IgNwdXQiCGFmdGVyUHV0IgR1c2VyIgNyZXMiDGFkbWluUHViS2V5cyIXcGVuZGluZ01hbmFnZXJQdWJsaWNLZXkiFWNoZWNrTWFuYWdlclB1YmxpY0tleSICcG0iBWhhc1BNIgdjaGVja1BNIgJ0eCIGdmVyaWZ5Ig90YXJnZXRQdWJsaWNLZXk9AAFhAg91c2VyX3Bvb2xzLnJpZGUAAWICAl9fAAFjAgVXQVZFUwABZAITSW52YWxpZCBwcmljZSBhc3NldAEBZQEBZgkAuQkCCQDMCAIFAWEJAMwIAgICOiAJAMwIAgUBZgUDbmlsAgABAWcBAWYJAAIBCQEBZQEFAWYBAWgACQEBZwECEVBlcm1pc3Npb24gZGVuaWVkAQFpAAkBAWcBAiRDcmVhdGUgaXMgbm90IGNhbGxlZCBmb3IgYXNzZXRzIHBhaXIBAWoACQEBZwECHllvdSBhcmUgbm90IGFtb3VudEFzc2V0IGlzc3VlcgEBawAJAQFnAQIkUG9vbCB3aXRoIHN1Y2ggYXNzZXRzIGFscmVhZHkgZXhpc3RzAQFsAAkBAWcBAhVBc3NldCBpcyBub3QgdmVyaWZpZWQBAW0ACQEBZwEFAWQBAW4ACQEBZwECEUludmFsaWQgZmVlIGFzc2V0AQFvAAkBAWcBAh1JbnZhbGlkIGFtb3VudCBhc3NldCBhdHRhY2hlZAEBcAAJAQFnAQIOSW52YWxpZCBzdGF0dXMBAXEACQEBZwECKkNhbiBhY3RpdmF0ZSBwb29sIG9ubHkgaW4gJ3BlbmRpbmcnIHN0YXR1cwEBcgAJAQFnAQIdRmFjdG9yeVYyIHJldHVybmVkIG5vdCBzdHJpbmcBAXMACQEBZwECGmludmFsaWQgcHJpY2UgYXNzZXQgYW1vdW50AQF0AAkBAWcBAgtpbnZhbGlkIGZlZQEBdQAJAQFnAQISaW52YWxpZCBhc3NldCBwYWlyAQF2AAkAuQkCCQDMCAICAiVzCQDMCAICEG1hbmFnZXJQdWJsaWNLZXkFA25pbAUBYgEBdwAJALkJAgkAzAgCAgIlcwkAzAgCAhdwZW5kaW5nTWFuYWdlclB1YmxpY0tleQUDbmlsBQFiAQF4AAkAuQkCCQDMCAICAiVzCQDMCAICDGFkbWluUHViS2V5cwUDbmlsBQFiAQF5AgF6AUEJALkJAgkAzAgCAgYlcyVzJXMJAMwIAgIGc3RhdHVzCQDMCAIFAXoJAMwIAgUBQQUDbmlsBQFiAQFCAAkAuQkCCQDMCAICAiVzCQDMCAICD2ZhY3RvcnlDb250cmFjdAUDbmlsBQFiAQFDAAkAuQkCCQDMCAICAiVzCQDMCAICE2Fzc2V0c1N0b3JlQ29udHJhY3QFA25pbAUBYgEBRAAJALkJAgkAzAgCAgIlcwkAzAgCAhBlbWlzc2lvbkNvbnRyYWN0BQNuaWwFAWIBAUUCAXoBQQkAuQkCCQDMCAICBiVzJXMlcwkAzAgCAgZzdWZmaXgJAMwIAgUBegkAzAgCBQFBBQNuaWwFAWIBAUYACQC5CQIJAMwIAgICJXMJAMwIAgIJbGFzdEluZGV4BQNuaWwFAWIAAUcCAXUAAUgCB3BlbmRpbmcAAUkCCGRlY2xpbmVkAAFKAgZhY3RpdmUAAUsJAMwIAgUBSAkAzAgCBQFJCQDMCAIFAUoFA25pbAEBTAIBegFBCQC5CQIJAMwIAgIGJXMlcyVzCQDMCAICDGNyZWF0ZUNhbGxlZAkAzAgCBQF6CQDMCAIFAUEFA25pbAUBYgEBTQIBegFBCQC5CQIJAMwIAgIGJXMlcyVzCQDMCAICDGNyZWF0ZUNhbGxlcgkAzAgCBQF6CQDMCAIFAUEFA25pbAUBYgEBTgIBegFBCQC5CQIJAMwIAgIGJXMlcyVzCQDMCAICEWFtb3VudEFzc2V0QW1vdW50CQDMCAIFAXoJAMwIAgUBQQUDbmlsBQFiAQFPAgF6AUEJALkJAgkAzAgCAgYlcyVzJXMJAMwIAgIQcHJpY2VBc3NldEFtb3VudAkAzAgCBQF6CQDMCAIFAUEFA25pbAUBYgEBUAIBegFBCQC5CQIJAMwIAgIGJXMlcyVzCQDMCAICBmhlaWdodAkAzAgCBQF6CQDMCAIFAUEFA25pbAUBYgEBUQAJALkJAgkAzAgCAgIlcwkAzAgCAgpmZWVBc3NldElkBQNuaWwFAWIBAVIACQC5CQIJAMwIAgICJXMJAMwIAgIJZmVlQW1vdW50BQNuaWwFAWIBAVMACQC5CQIJAMwIAgICJXMJAMwIAgIUYW1vdW50QXNzZXRNaW5BbW91bnQFA25pbAUBYgEBVAAJALkJAgkAzAgCAgIlcwkAzAgCAhRwcmljZUFzc2V0c01pbkFtb3VudAUDbmlsBQFiAQFVAAkAuQkCCQDMCAICAiVzCQDMCAICC3ByaWNlQXNzZXRzBQNuaWwFAWIBAVYBAVcJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQR0aGlzBQFXCQCsAgIFAVcCDyBpcyBub3QgZGVmaW5lZAEBWAEBWQQBWgUBWQMJAAECBQFaAgZTdHJpbmcEAmFhBQFaAwkAAAIJALECAQUCYWEAAAUDbmlsCQC1CQIFAmFhBQFiAwkAAQIFAVoCBFVuaXQFA25pbAkAAgECC01hdGNoIGVycm9yAAJhYgkBEUBleHRyTmF0aXZlKDEwNjIpAQkBAVYBCQEBQgAAAmFjCQC5CQIJAMwIAgICJXMJAMwIAgIWdm90aW5nRW1pc3Npb25Db250cmFjdAUDbmlsBQFiAAJhZAkBEUBleHRyTmF0aXZlKDEwNjIpAQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIFAmFiBQJhYwkBAWUBAix2b3RpbmcgZW1pc3Npb24gY29udHJhY3QgYWRkcmVzcyBpcyByZXF1aXJlZAACYWUJALkJAgkAzAgCAgIlcwkAzAgCAh92b3RpbmdFbWlzc2lvbkNhbmRpZGF0ZUNvbnRyYWN0BQNuaWwFAWIAAmFmCQERQGV4dHJOYXRpdmUoMTA2MikBCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgUCYWQFAmFlCQEBZQECNnZvdGluZyBlbWlzc2lvbiBjYW5kaWRhdGUgY29udHJhY3QgYWRkcmVzcyBpcyByZXF1aXJlZAECYWcCAXoBQQkBC3ZhbHVlT3JFbHNlAgkAoAgBCQEBTAIFAXoFAUEHAQJhaAIBegFBAwkBAmFnAgUBegUBQQYJAQFpAAECYWkABAFaCQCiCAEJAQF2AAMJAAECBQFaAgZTdHJpbmcEAmFhBQFaCQDZBAEFAmFhAwkAAQIFAVoCBFVuaXQFBHVuaXQJAAIBAgtNYXRjaCBlcnJvcgECYWoABAFaCQCiCAEJAQF3AAMJAAECBQFaAgZTdHJpbmcEAmFhBQFaCQDZBAEFAmFhAwkAAQIFAVoCBFVuaXQFBHVuaXQJAAIBAgtNYXRjaCBlcnJvcgECYWsBAmFsBAFaCQECYWkAAwkAAQIFAVoCCkJ5dGVWZWN0b3IEAmFtBQFaCQAAAggFAmFsD2NhbGxlclB1YmxpY0tleQUCYW0DCQABAgUBWgIEVW5pdAkAAAIIBQJhbAZjYWxsZXIFBHRoaXMJAAIBAgtNYXRjaCBlcnJvcgECYW4BAmFsAwkBAmFrAQUCYWwGCQEBaAABAmFvAQJhbAQCYXAJAQFYAQkAoggBCQEBeAADCQEPY29udGFpbnNFbGVtZW50AgUCYXAJANgEAQgFAmFsD2NhbGxlclB1YmxpY0tleQYJAQJhbgEFAmFsAQJhcQECYXIJAAACCQELdmFsdWVPckVsc2UCCQCaCAIJARFAZXh0ck5hdGl2ZSgxMDYyKQEJAQFWAQkBAUMACQCsAgIJAKwCAgIIc3RhdHVzXzwFAmFyAgE+AAAAAgECYXMBAmF0BAFaCAUCYXQHYXNzZXRJZAMJAAECBQFaAgpCeXRlVmVjdG9yBAJhdQUBWgQCYXYJAQV2YWx1ZQEJAOwHAQUCYXUJAJQKAgkA2AQBBQJhdQUCYXYDCQABAgUBWgIEVW5pdAkAlAoCBQFjBQR1bml0CQACAQILTWF0Y2ggZXJyb3IBAmF3AQJheAkBD2NvbnRhaW5zRWxlbWVudAIFAUsFAmF4CAJhbAELY29uc3RydWN0b3IHAmF5AmF6AmFBAmFCAmFDAmFEAmFFBAJhRgkBAmFuAQUCYWwDCQAAAgUCYUYFAmFGCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQFCAAUCYXkJAMwIAgkBC1N0cmluZ0VudHJ5AgkBAUMABQJhegkAzAgCCQELU3RyaW5nRW50cnkCCQEBRAAFAmFBCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQFUAAkAuQkCBQJhQgUBYgkAzAgCCQEMSW50ZWdlckVudHJ5AgkBAVMABQJhQwkAzAgCCQELU3RyaW5nRW50cnkCCQEBUQAFAmFECQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEBUgAFAmFFBQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4CYWwBBmNyZWF0ZQAEAmFHCQEFdmFsdWUBCQCRAwIIBQJhbAhwYXltZW50cwAABAJhSAkBBXZhbHVlAQkAkQMCCAUCYWwIcGF5bWVudHMAAQQCYUkJAQV2YWx1ZQEJAJEDAggFAmFsCHBheW1lbnRzAAIEAmFKCQECYXMBBQJhRwQBeggFAmFKAl8xBAJhSwgFAmFKAl8yBAJhTAkBAmFzAQUCYUgEAUEIBQJhTAJfMQQCYU0IBQJhTAJfMgQCYU4JAQJhcwEFAmFJBAJhRAgFAmFOAl8xBAJhTwgFAmFOAl8yBAJhUAgFAmFHBmFtb3VudAQCYVEIBQJhSAZhbW91bnQEAmFSCAUCYUkGYW1vdW50BAJhUwkBAVgBCQCdCAIFAmFiCQEBVQAEAmFUCQERQGV4dHJOYXRpdmUoMTA1NSkBCQEBUwAEAmFVCQEBWAEJAKIIAQkBAVQABAJhQwMJAQ9jb250YWluc0VsZW1lbnQCBQJhUwUBegQCYVYJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAzwgCBQJhUwUBegUBZAkBBXZhbHVlAQkAtgkBCQCRAwIFAmFVBQJhVgUCYVQEAmFXAwkBD2NvbnRhaW5zRWxlbWVudAIFAmFTBQFBBAJhVgkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQDPCAIFAmFTBQFBBQFkCQEFdmFsdWUBCQC2CQEJAJEDAgUCYVUFAmFWBQJhVAQCYVgJAQt2YWx1ZU9yRWxzZQIJAJ8IAQkBAUYAAAAEAmFZCQBkAgUCYVgAAQQCYVoJARFAZXh0ck5hdGl2ZSgxMDYyKQEJAQFWAQkBAUQABAJiYQoAAmJiCQD8BwQFAmFiAhJwb29sRXhpc3RzUkVBRE9OTFkJAMwIAgUBegkAzAgCBQFBBQNuaWwFA25pbAMJAAECBQJiYgIHQm9vbGVhbgUCYmIJAAIBCQCsAgIJAAMBBQJiYgIcIGNvdWxkbid0IGJlIGNhc3QgdG8gQm9vbGVhbgQCYmMJAMwIAgMJAQEhAQkBAmFnAgUBegUBQQYJAQFrAAkAzAgCAwkBASEBBQJiYQYJAQFrAAkAzAgCAwkBAiE9AgUBegUBQQYJAQF1AAkAzAgCAwMJAQJhcQEFAXoJAQJhcQEFAUEHBgkBAXUACQDMCAIDAwkBD2NvbnRhaW5zRWxlbWVudAIFAmFTBQF6BgkBD2NvbnRhaW5zRWxlbWVudAIFAmFTBQFBBgkBAXUACQDMCAIDAwkBAmFrAQUCYWwGCQAAAgkAoggBCQEBUQAFAmFEBgkBAW4ACQDMCAIDAwkBAmFrAQUCYWwGCQBnAgUCYVAJARFAZXh0ck5hdGl2ZSgxMDU1KQEJAQFTAAYJAQFvAAkAzAgCAwMJAQJhawEFAmFsBgkAZwIFAmFRBQJhVwYJAQFzAAkAzAgCAwMJAQJhawEFAmFsBgkAAAIFAmFSCQCfCAEJAQFSAAYJAQF0AAUDbmlsAwkAAAIFAmJjBQJiYwQCYmQAAwQCYmUDCQBnAgkAkAMBCAUCYWwIcGF5bWVudHMFAmJkCQD8BwQFAmFaAgRidXJuBQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIJANkEAQUCYUQFAmFSBQNuaWwFBHVuaXQDCQAAAgUCYmUFAmJlCQDMCAIJAQxCb29sZWFuRW50cnkCCQEBTAIFAXoFAUEGCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQFNAgUBegUBQQkApQgBCAUCYWwGY2FsbGVyCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEBRgAFAmFZCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQFFAgUBegUBQQkArAICCQCkAwEFAmFZBQFHCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEBUAIFAXoFAUEFBmhlaWdodAkAzAgCCQELU3RyaW5nRW50cnkCCQEBeQIFAXoFAUEFAUgJAMwIAgkBDEludGVnZXJFbnRyeQIJAQFOAgUBegUBQQUCYVAJAMwIAgkBDEludGVnZXJFbnRyeQIJAQFPAgUBegUBQQUCYVEFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgJhbAEIYWN0aXZhdGUGAmJmAXoCYmcBQQJiaAJiaQQCYmMJAMwIAgkBAmFvAQUCYWwJAMwIAgMJAQJhZwIFAXoFAUEGCQEBaQAJAMwIAgMJAAACCQEFdmFsdWUBCQCiCAEJAQF5AgUBegUBQQUBSAYJAQFxAAUDbmlsAwkAAAIFAmJjBQJiYwQCYmoJAPwHBAUCYWICD2FjdGl2YXRlTmV3UG9vbAkAzAgCBQJiZgkAzAgCBQF6CQDMCAIFAUEJAMwIAgkArAICCQCsAgIFAmJnBQJiaAICTFAJAMwIAgkArAICCQCsAgIJAKwCAgUCYmcCAS8FAmJoAh4gcG9vbCBsaXF1aWRpdHkgcHJvdmlkZXIgdG9rZW4JAMwIAgAACQDMCAICB1ZMVFBPT0wJAMwIAgUCYmkFA25pbAUDbmlsAwkAAAIFAmJqBQJiagQCYmsEAVoFAmJqAwkAAQIFAVoCBlN0cmluZwQCYXUFAVoFAmF1CQEBcgADCQAAAgUCYmsFAmJrBAJibAkA8AcCBQR0aGlzCQDZBAEFAmJrAwkAAAIFAmJsBQJibAQCYm0JAPwHBAkBEUBleHRyTmF0aXZlKDEwNjIpAQUCYmYCA3B1dAkAzAgCAAAJAMwIAgcFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgMJAAACBQF6AgVXQVZFUwUEdW5pdAkA2QQBBQF6CQEFdmFsdWUBCQCfCAEJAQFOAgUBegUBQQkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgMJAAACBQFBAgVXQVZFUwUEdW5pdAkA2QQBBQFBCQEFdmFsdWUBCQCfCAEJAQFPAgUBegUBQQUDbmlsAwkAAAIFAmJtBQJibQQCYm4JAPAHAgUEdGhpcwkA2QQBBQJiawMJAAACBQJibgUCYm4EAmJvCQEFdmFsdWUBCQCmCAEJAQV2YWx1ZQEJAKIIAQkBAU0CBQF6BQFBBAJicAkA/AcEBQJhZgIHYXBwcm92ZQkAzAgCBQF6CQDMCAIFAUEFA25pbAUDbmlsAwkAAAIFAmJwBQJicAkAzAgCCQELU3RyaW5nRW50cnkCCQEBeQIFAXoFAUEFAUoJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwUCYm8JAGUCBQJibgUCYmwJANkEAQUCYmsFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgJhbAEJc2V0QWRtaW5zAQJicQQCYUYJAQJhbgEFAmFsAwkAAAIFAmFGBQJhRgkAzAgCCQELU3RyaW5nRW50cnkCCQEBeAAJALkJAgUCYnEFAWIFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgJhbAEKc2V0TWFuYWdlcgECYnIEAmFGCQECYW4BBQJhbAMJAAACBQJhRgUCYUYEAmJzCQDZBAEFAmJyAwkAAAIFAmJzBQJicwkAzAgCCQELU3RyaW5nRW50cnkCCQEBdwAFAmJyBQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4CYWwBDmNvbmZpcm1NYW5hZ2VyAAQCYnQJAQJhagAEAmJ1AwkBCWlzRGVmaW5lZAEFAmJ0BgkAAgECEk5vIHBlbmRpbmcgbWFuYWdlcgMJAAACBQJidQUCYnUEAmJ2AwkAAAIIBQJhbA9jYWxsZXJQdWJsaWNLZXkJAQV2YWx1ZQEFAmJ0BgkAAgECG1lvdSBhcmUgbm90IHBlbmRpbmcgbWFuYWdlcgMJAAACBQJidgUCYnYJAMwIAgkBC1N0cmluZ0VudHJ5AgkBAXYACQDYBAEJAQV2YWx1ZQEFAmJ0CQDMCAIJAQtEZWxldGVFbnRyeQEJAQF3AAUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAmFsARNwcmljZUFzc2V0c1JFQURPTkxZAAkAlAoCBQNuaWwJAQFYAQkAoggBCQEBVQACYWwBDnN0YXR1c1JFQURPTkxZAgF6AUEEAmF4BAFaCQCiCAEJAQF5AgUBegUBQQMJAAECBQFaAgZTdHJpbmcEAmFhBQFaBQJhYQUEdW5pdAkAlAoCBQNuaWwFAmF4AQJidwECYngABAJieQQBWgkBAmFpAAMJAAECBQFaAgpCeXRlVmVjdG9yBAJhbQUBWgUCYW0DCQABAgUBWgIEVW5pdAgFAmJ3D3NlbmRlclB1YmxpY0tleQkAAgECC01hdGNoIGVycm9yCQD0AwMIBQJidwlib2R5Qnl0ZXMJAJEDAggFAmJ3BnByb29mcwAABQJieSvYC6M=", "height": 2564323, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: EJLspSb7yyEbxUC9rjtAW6t767SsgtqZUCxaEKhJrV3e Next: 4Ec9jXGPbgeFMgLFotmguau9CGrYp8mnT4SdNdVk1jnF Diff:
OldNewDifferences
245245 let priceAssetAmount = priceAssetPayment.amount
246246 let feeAssetAmount = feeAssetPayment.amount
247247 let priceAssetsList = stringOptionToList(getString(factoryContract, keyPriceAssets()))
248- let managerPriceAssetMinAmount = 1
249- let priceAssetMinAmount = if (isManager(i))
250- then managerPriceAssetMinAmount
251- else {
248+ let assetMinAmountDefault = getIntegerValue(keyAmountAssetMinAmount())
249+ let allowedAssetsMinAmounts = stringOptionToList(getString(keyPriceAssetsMinAmount()))
250+ let amountAssetMinAmount = if (containsElement(priceAssetsList, amountAssetId))
251+ then {
252+ let priceAssetsIndex = valueOrErrorMessage(indexOf(priceAssetsList, amountAssetId), invalidPriceAsset)
253+ value(parseInt(allowedAssetsMinAmounts[priceAssetsIndex]))
254+ }
255+ else assetMinAmountDefault
256+ let priceAssetMinAmount = if (containsElement(priceAssetsList, priceAssetId))
257+ then {
252258 let priceAssetsIndex = valueOrErrorMessage(indexOf(priceAssetsList, priceAssetId), invalidPriceAsset)
253- value(parseInt(stringOptionToList(getString(keyPriceAssetsMinAmount()))[priceAssetsIndex]))
259+ value(parseInt(allowedAssetsMinAmounts[priceAssetsIndex]))
254260 }
261+ else assetMinAmountDefault
255262 let lastIndex = valueOrElse(getInteger(keyLastIndex()), 0)
256263 let curIndex = (lastIndex + 1)
257264 let emissionContract = addressFromStringValue(getStringOrFail(keyEmissionContract()))
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let contractFilename = "user_pools.ride"
55
66 let SEP = "__"
77
88 let wavesAssetId = "WAVES"
99
1010 let invalidPriceAsset = "Invalid price asset"
1111
1212 func wrapErr (msg) = makeString([contractFilename, ": ", msg], "")
1313
1414
1515 func throwErr (msg) = throw(wrapErr(msg))
1616
1717
1818 func throwPD () = throwErr("Permission denied")
1919
2020
2121 func throwCreateNotCalled () = throwErr("Create is not called for assets pair")
2222
2323
2424 func throwYouNotIssuer () = throwErr("You are not amountAsset issuer")
2525
2626
2727 func throwPoolExists () = throwErr("Pool with such assets already exists")
2828
2929
3030 func throwAssetNotVerified () = throwErr("Asset is not verified")
3131
3232
3333 func throwInvalidPriceAsset () = throwErr(invalidPriceAsset)
3434
3535
3636 func throwInvalidFeeAsset () = throwErr("Invalid fee asset")
3737
3838
3939 func throwInvalidAmountAsset () = throwErr("Invalid amount asset attached")
4040
4141
4242 func throwInvalidStatus () = throwErr("Invalid status")
4343
4444
4545 func throwCanActivateOnlyPendingPool () = throwErr("Can activate pool only in 'pending' status")
4646
4747
4848 func throwFactoryReturnedNotString () = throwErr("FactoryV2 returned not string")
4949
5050
5151 func throwInvalidPriceAssetAmount () = throwErr("invalid price asset amount")
5252
5353
5454 func throwInvalidFee () = throwErr("invalid fee")
5555
5656
5757 func throwInvalidAssetPair () = throwErr("invalid asset pair")
5858
5959
6060 func keyManagerPublicKey () = makeString(["%s", "managerPublicKey"], SEP)
6161
6262
6363 func keyPendingManagerPublicKey () = makeString(["%s", "pendingManagerPublicKey"], SEP)
6464
6565
6666 func keyAdminPubKeys () = makeString(["%s", "adminPubKeys"], SEP)
6767
6868
6969 func keyStatus (amountAssetId,priceAssetId) = makeString(["%s%s%s", "status", amountAssetId, priceAssetId], SEP)
7070
7171
7272 func keyFactoryContract () = makeString(["%s", "factoryContract"], SEP)
7373
7474
7575 func keyAssetsStoreContract () = makeString(["%s", "assetsStoreContract"], SEP)
7676
7777
7878 func keyEmissionContract () = makeString(["%s", "emissionContract"], SEP)
7979
8080
8181 func keySuffix (amountAssetId,priceAssetId) = makeString(["%s%s%s", "suffix", amountAssetId, priceAssetId], SEP)
8282
8383
8484 func keyLastIndex () = makeString(["%s", "lastIndex"], SEP)
8585
8686
8787 let indexSuffix = "u"
8888
8989 let statusPending = "pending"
9090
9191 let statusDeclined = "declined"
9292
9393 let statusActive = "active"
9494
9595 let statuses = [statusPending, statusDeclined, statusActive]
9696
9797 func keyCreateCalled (amountAssetId,priceAssetId) = makeString(["%s%s%s", "createCalled", amountAssetId, priceAssetId], SEP)
9898
9999
100100 func keyCreateCaller (amountAssetId,priceAssetId) = makeString(["%s%s%s", "createCaller", amountAssetId, priceAssetId], SEP)
101101
102102
103103 func keyAmountAssetAmount (amountAssetId,priceAssetId) = makeString(["%s%s%s", "amountAssetAmount", amountAssetId, priceAssetId], SEP)
104104
105105
106106 func keyPriceAssetAmount (amountAssetId,priceAssetId) = makeString(["%s%s%s", "priceAssetAmount", amountAssetId, priceAssetId], SEP)
107107
108108
109109 func keyHeight (amountAssetId,priceAssetId) = makeString(["%s%s%s", "height", amountAssetId, priceAssetId], SEP)
110110
111111
112112 func keyFeeAssetId () = makeString(["%s", "feeAssetId"], SEP)
113113
114114
115115 func keyFeeAmount () = makeString(["%s", "feeAmount"], SEP)
116116
117117
118118 func keyAmountAssetMinAmount () = makeString(["%s", "amountAssetMinAmount"], SEP)
119119
120120
121121 func keyPriceAssetsMinAmount () = makeString(["%s", "priceAssetsMinAmount"], SEP)
122122
123123
124124 func keyPriceAssets () = makeString(["%s", "priceAssets"], SEP)
125125
126126
127127 func getStringOrFail (key) = valueOrErrorMessage(getString(this, key), (key + " is not defined"))
128128
129129
130130 func stringOptionToList (stringOrUnit) = match stringOrUnit {
131131 case s: String =>
132132 if ((size(s) == 0))
133133 then nil
134134 else split(s, SEP)
135135 case _: Unit =>
136136 nil
137137 case _ =>
138138 throw("Match error")
139139 }
140140
141141
142142 let factoryContract = addressFromStringValue(getStringOrFail(keyFactoryContract()))
143143
144144 let keyVotingEmissionContract = makeString(["%s", "votingEmissionContract"], SEP)
145145
146146 let votingEmissionContract = addressFromStringValue(valueOrErrorMessage(getString(factoryContract, keyVotingEmissionContract), wrapErr("voting emission contract address is required")))
147147
148148 let keyVotingEmissionCandidateContract = makeString(["%s", "votingEmissionCandidateContract"], SEP)
149149
150150 let votingEmissionCandidateContract = addressFromStringValue(valueOrErrorMessage(getString(votingEmissionContract, keyVotingEmissionCandidateContract), wrapErr("voting emission candidate contract address is required")))
151151
152152 func isCreateCalled (amountAssetId,priceAssetId) = valueOrElse(getBoolean(keyCreateCalled(amountAssetId, priceAssetId)), false)
153153
154154
155155 func mustCreateCalled (amountAssetId,priceAssetId) = if (isCreateCalled(amountAssetId, priceAssetId))
156156 then true
157157 else throwCreateNotCalled()
158158
159159
160160 func managerPublicKeyOrUnit () = match getString(keyManagerPublicKey()) {
161161 case s: String =>
162162 fromBase58String(s)
163163 case _: Unit =>
164164 unit
165165 case _ =>
166166 throw("Match error")
167167 }
168168
169169
170170 func pendingManagerPublicKeyOrUnit () = match getString(keyPendingManagerPublicKey()) {
171171 case s: String =>
172172 fromBase58String(s)
173173 case _: Unit =>
174174 unit
175175 case _ =>
176176 throw("Match error")
177177 }
178178
179179
180180 func isManager (i) = match managerPublicKeyOrUnit() {
181181 case pk: ByteVector =>
182182 (i.callerPublicKey == pk)
183183 case _: Unit =>
184184 (i.caller == this)
185185 case _ =>
186186 throw("Match error")
187187 }
188188
189189
190190 func mustManager (i) = if (isManager(i))
191191 then true
192192 else throwPD()
193193
194194
195195 func mustAdmin (i) = {
196196 let adminPKs = stringOptionToList(getString(keyAdminPubKeys()))
197197 if (containsElement(adminPKs, toBase58String(i.callerPublicKey)))
198198 then true
199199 else mustManager(i)
200200 }
201201
202202
203203 func isVerified (assetId) = (valueOrElse(getInteger(addressFromStringValue(getStringOrFail(keyAssetsStoreContract())), (("status_<" + assetId) + ">")), 0) == 2)
204204
205205
206206 func getIdAndInfo (payment) = match payment.assetId {
207207 case id: ByteVector =>
208208 let info = value(assetInfo(id))
209209 $Tuple2(toBase58String(id), info)
210210 case _: Unit =>
211211 $Tuple2(wavesAssetId, unit)
212212 case _ =>
213213 throw("Match error")
214214 }
215215
216216
217217 func validStatus (status) = containsElement(statuses, status)
218218
219219
220220 @Callable(i)
221221 func constructor (factoryV2Address,assetsStoreAddress,emissionAddress,priceAssetsMinAmount,amountAssetMinAmount,feeAssetId,feeAmount) = {
222222 let checkCaller = mustManager(i)
223223 if ((checkCaller == checkCaller))
224224 then [StringEntry(keyFactoryContract(), factoryV2Address), StringEntry(keyAssetsStoreContract(), assetsStoreAddress), StringEntry(keyEmissionContract(), emissionAddress), StringEntry(keyPriceAssetsMinAmount(), makeString(priceAssetsMinAmount, SEP)), IntegerEntry(keyAmountAssetMinAmount(), amountAssetMinAmount), StringEntry(keyFeeAssetId(), feeAssetId), IntegerEntry(keyFeeAmount(), feeAmount)]
225225 else throw("Strict value is not equal to itself.")
226226 }
227227
228228
229229
230230 @Callable(i)
231231 func create () = {
232232 let amountAssetPayment = value(i.payments[0])
233233 let priceAssetPayment = value(i.payments[1])
234234 let feeAssetPayment = value(i.payments[2])
235235 let $t074737545 = getIdAndInfo(amountAssetPayment)
236236 let amountAssetId = $t074737545._1
237237 let amountAssetInfo = $t074737545._2
238238 let $t075487617 = getIdAndInfo(priceAssetPayment)
239239 let priceAssetId = $t075487617._1
240240 let priceAssetInfo = $t075487617._2
241241 let $t076207683 = getIdAndInfo(feeAssetPayment)
242242 let feeAssetId = $t076207683._1
243243 let feeAssetInfo = $t076207683._2
244244 let amountAssetAmount = amountAssetPayment.amount
245245 let priceAssetAmount = priceAssetPayment.amount
246246 let feeAssetAmount = feeAssetPayment.amount
247247 let priceAssetsList = stringOptionToList(getString(factoryContract, keyPriceAssets()))
248- let managerPriceAssetMinAmount = 1
249- let priceAssetMinAmount = if (isManager(i))
250- then managerPriceAssetMinAmount
251- else {
248+ let assetMinAmountDefault = getIntegerValue(keyAmountAssetMinAmount())
249+ let allowedAssetsMinAmounts = stringOptionToList(getString(keyPriceAssetsMinAmount()))
250+ let amountAssetMinAmount = if (containsElement(priceAssetsList, amountAssetId))
251+ then {
252+ let priceAssetsIndex = valueOrErrorMessage(indexOf(priceAssetsList, amountAssetId), invalidPriceAsset)
253+ value(parseInt(allowedAssetsMinAmounts[priceAssetsIndex]))
254+ }
255+ else assetMinAmountDefault
256+ let priceAssetMinAmount = if (containsElement(priceAssetsList, priceAssetId))
257+ then {
252258 let priceAssetsIndex = valueOrErrorMessage(indexOf(priceAssetsList, priceAssetId), invalidPriceAsset)
253- value(parseInt(stringOptionToList(getString(keyPriceAssetsMinAmount()))[priceAssetsIndex]))
259+ value(parseInt(allowedAssetsMinAmounts[priceAssetsIndex]))
254260 }
261+ else assetMinAmountDefault
255262 let lastIndex = valueOrElse(getInteger(keyLastIndex()), 0)
256263 let curIndex = (lastIndex + 1)
257264 let emissionContract = addressFromStringValue(getStringOrFail(keyEmissionContract()))
258265 let poolExists = {
259266 let @ = invoke(factoryContract, "poolExistsREADONLY", [amountAssetId, priceAssetId], nil)
260267 if ($isInstanceOf(@, "Boolean"))
261268 then @
262269 else throw(($getType(@) + " couldn't be cast to Boolean"))
263270 }
264271 let checks = [if (!(isCreateCalled(amountAssetId, priceAssetId)))
265272 then true
266273 else throwPoolExists(), if (!(poolExists))
267274 then true
268275 else throwPoolExists(), if ((amountAssetId != priceAssetId))
269276 then true
270277 else throwInvalidAssetPair(), if (if (isVerified(amountAssetId))
271278 then isVerified(priceAssetId)
272279 else false)
273280 then true
274281 else throwInvalidAssetPair(), if (if (containsElement(priceAssetsList, amountAssetId))
275282 then true
276283 else containsElement(priceAssetsList, priceAssetId))
277284 then true
278285 else throwInvalidAssetPair(), if (if (isManager(i))
279286 then true
280287 else (getString(keyFeeAssetId()) == feeAssetId))
281288 then true
282289 else throwInvalidFeeAsset(), if (if (isManager(i))
283290 then true
284291 else (amountAssetAmount >= getIntegerValue(keyAmountAssetMinAmount())))
285292 then true
286293 else throwInvalidAmountAsset(), if (if (isManager(i))
287294 then true
288295 else (priceAssetAmount >= priceAssetMinAmount))
289296 then true
290297 else throwInvalidPriceAssetAmount(), if (if (isManager(i))
291298 then true
292299 else (feeAssetAmount == getInteger(keyFeeAmount())))
293300 then true
294301 else throwInvalidFee()]
295302 if ((checks == checks))
296303 then {
297304 let paymentsWithFeeSize = 3
298305 let burnEmissionInv = if ((size(i.payments) >= paymentsWithFeeSize))
299306 then invoke(emissionContract, "burn", nil, [AttachedPayment(fromBase58String(feeAssetId), feeAssetAmount)])
300307 else unit
301308 if ((burnEmissionInv == burnEmissionInv))
302309 then [BooleanEntry(keyCreateCalled(amountAssetId, priceAssetId), true), StringEntry(keyCreateCaller(amountAssetId, priceAssetId), toString(i.caller)), IntegerEntry(keyLastIndex(), curIndex), StringEntry(keySuffix(amountAssetId, priceAssetId), (toString(curIndex) + indexSuffix)), IntegerEntry(keyHeight(amountAssetId, priceAssetId), height), StringEntry(keyStatus(amountAssetId, priceAssetId), statusPending), IntegerEntry(keyAmountAssetAmount(amountAssetId, priceAssetId), amountAssetAmount), IntegerEntry(keyPriceAssetAmount(amountAssetId, priceAssetId), priceAssetAmount)]
303310 else throw("Strict value is not equal to itself.")
304311 }
305312 else throw("Strict value is not equal to itself.")
306313 }
307314
308315
309316
310317 @Callable(i)
311318 func activate (poolAddress,amountAssetId,amountAssetTicker,priceAssetId,priceAssetTicker,logo) = {
312319 let checks = [mustAdmin(i), if (isCreateCalled(amountAssetId, priceAssetId))
313320 then true
314321 else throwCreateNotCalled(), if ((value(getString(keyStatus(amountAssetId, priceAssetId))) == statusPending))
315322 then true
316323 else throwCanActivateOnlyPendingPool()]
317324 if ((checks == checks))
318325 then {
319326 let activateNewPoolInv = invoke(factoryContract, "activateNewPool", [poolAddress, amountAssetId, priceAssetId, ((amountAssetTicker + priceAssetTicker) + "LP"), (((amountAssetTicker + "/") + priceAssetTicker) + " pool liquidity provider token"), 0, "VLTPOOL", logo], nil)
320327 if ((activateNewPoolInv == activateNewPoolInv))
321328 then {
322329 let lpAssetId = match activateNewPoolInv {
323330 case id: String =>
324331 id
325332 case _ =>
326333 throwFactoryReturnedNotString()
327334 }
328335 if ((lpAssetId == lpAssetId))
329336 then {
330337 let beforePut = assetBalance(this, fromBase58String(lpAssetId))
331338 if ((beforePut == beforePut))
332339 then {
333340 let put = invoke(addressFromStringValue(poolAddress), "put", [0, false], [AttachedPayment(if ((amountAssetId == "WAVES"))
334341 then unit
335342 else fromBase58String(amountAssetId), value(getInteger(keyAmountAssetAmount(amountAssetId, priceAssetId)))), AttachedPayment(if ((priceAssetId == "WAVES"))
336343 then unit
337344 else fromBase58String(priceAssetId), value(getInteger(keyPriceAssetAmount(amountAssetId, priceAssetId))))])
338345 if ((put == put))
339346 then {
340347 let afterPut = assetBalance(this, fromBase58String(lpAssetId))
341348 if ((afterPut == afterPut))
342349 then {
343350 let user = value(addressFromString(value(getString(keyCreateCaller(amountAssetId, priceAssetId)))))
344351 let res = invoke(votingEmissionCandidateContract, "approve", [amountAssetId, priceAssetId], nil)
345352 if ((res == res))
346353 then [StringEntry(keyStatus(amountAssetId, priceAssetId), statusActive), ScriptTransfer(user, (afterPut - beforePut), fromBase58String(lpAssetId))]
347354 else throw("Strict value is not equal to itself.")
348355 }
349356 else throw("Strict value is not equal to itself.")
350357 }
351358 else throw("Strict value is not equal to itself.")
352359 }
353360 else throw("Strict value is not equal to itself.")
354361 }
355362 else throw("Strict value is not equal to itself.")
356363 }
357364 else throw("Strict value is not equal to itself.")
358365 }
359366 else throw("Strict value is not equal to itself.")
360367 }
361368
362369
363370
364371 @Callable(i)
365372 func setAdmins (adminPubKeys) = {
366373 let checkCaller = mustManager(i)
367374 if ((checkCaller == checkCaller))
368375 then [StringEntry(keyAdminPubKeys(), makeString(adminPubKeys, SEP))]
369376 else throw("Strict value is not equal to itself.")
370377 }
371378
372379
373380
374381 @Callable(i)
375382 func setManager (pendingManagerPublicKey) = {
376383 let checkCaller = mustManager(i)
377384 if ((checkCaller == checkCaller))
378385 then {
379386 let checkManagerPublicKey = fromBase58String(pendingManagerPublicKey)
380387 if ((checkManagerPublicKey == checkManagerPublicKey))
381388 then [StringEntry(keyPendingManagerPublicKey(), pendingManagerPublicKey)]
382389 else throw("Strict value is not equal to itself.")
383390 }
384391 else throw("Strict value is not equal to itself.")
385392 }
386393
387394
388395
389396 @Callable(i)
390397 func confirmManager () = {
391398 let pm = pendingManagerPublicKeyOrUnit()
392399 let hasPM = if (isDefined(pm))
393400 then true
394401 else throw("No pending manager")
395402 if ((hasPM == hasPM))
396403 then {
397404 let checkPM = if ((i.callerPublicKey == value(pm)))
398405 then true
399406 else throw("You are not pending manager")
400407 if ((checkPM == checkPM))
401408 then [StringEntry(keyManagerPublicKey(), toBase58String(value(pm))), DeleteEntry(keyPendingManagerPublicKey())]
402409 else throw("Strict value is not equal to itself.")
403410 }
404411 else throw("Strict value is not equal to itself.")
405412 }
406413
407414
408415
409416 @Callable(i)
410417 func priceAssetsREADONLY () = $Tuple2(nil, stringOptionToList(getString(keyPriceAssets())))
411418
412419
413420
414421 @Callable(i)
415422 func statusREADONLY (amountAssetId,priceAssetId) = {
416423 let status = match getString(keyStatus(amountAssetId, priceAssetId)) {
417424 case s: String =>
418425 s
419426 case _ =>
420427 unit
421428 }
422429 $Tuple2(nil, status)
423430 }
424431
425432
426433 @Verifier(tx)
427434 func verify () = {
428435 let targetPublicKey = match managerPublicKeyOrUnit() {
429436 case pk: ByteVector =>
430437 pk
431438 case _: Unit =>
432439 tx.senderPublicKey
433440 case _ =>
434441 throw("Match error")
435442 }
436443 sigVerify(tx.bodyBytes, tx.proofs[0], targetPublicKey)
437444 }
438445

github/deemru/w8io/873ac7e 
413.95 ms