tx · tXhDBS2mq3Yrg39TJBvb3aJ12cS8HL8zrvyGe6f5j9v

3N3g7W8FPoQ7g5EadbAD2GVjrZT5RWpHZZh:  -0.01300000 Waves

2023.06.01 12:22 [2603411] smart account 3N3g7W8FPoQ7g5EadbAD2GVjrZT5RWpHZZh > SELF 0.00000000 Waves

{ "type": 13, "id": "tXhDBS2mq3Yrg39TJBvb3aJ12cS8HL8zrvyGe6f5j9v", "fee": 1300000, "feeAssetId": null, "timestamp": 1685611380735, "version": 2, "chainId": 84, "sender": "3N3g7W8FPoQ7g5EadbAD2GVjrZT5RWpHZZh", "senderPublicKey": "Ap7CkWd6fzBU34kGo4GJJzC5q4qWXuLVunzE25PchdGS", "proofs": [ "2rCc9FGksjQkPa6rDzTDHhpLSNno4eTUi1gQpXv4DN8Ky52ZAkrZFmhC8WyWzvXuEf2CJKv7vRxWqupFtHbSsEqp" ], "script": "base64:BgLiDwgCEgkKBwgICBgBCAESABIICgYICAgICAgSAwoBGBIAEgQKAggIIhBjb250cmFjdEZpbGVuYW1lIgNTRVAiDHdhdmVzQXNzZXRJZCIRaW52YWxpZFByaWNlQXNzZXQiB3dyYXBFcnIiA21zZyIIdGhyb3dFcnIiB3Rocm93UEQiFHRocm93Q3JlYXRlTm90Q2FsbGVkIhF0aHJvd1lvdU5vdElzc3VlciIPdGhyb3dQb29sRXhpc3RzIhV0aHJvd0Fzc2V0Tm90VmVyaWZpZWQiFnRocm93SW52YWxpZFByaWNlQXNzZXQiFHRocm93SW52YWxpZEZlZUFzc2V0Ihd0aHJvd0ludmFsaWRBbW91bnRBc3NldCISdGhyb3dJbnZhbGlkU3RhdHVzIh90aHJvd0NhbkFjdGl2YXRlT25seVBlbmRpbmdQb29sIh10aHJvd0ZhY3RvcnlSZXR1cm5lZE5vdFN0cmluZyIcdGhyb3dJbnZhbGlkUHJpY2VBc3NldEFtb3VudCIPdGhyb3dJbnZhbGlkRmVlIhV0aHJvd0ludmFsaWRBc3NldFBhaXIiE2tleU1hbmFnZXJQdWJsaWNLZXkiFmtleU1hbmFnZXJWYXVsdEFkZHJlc3MiD2tleUFkbWluUHViS2V5cyIJa2V5U3RhdHVzIg1hbW91bnRBc3NldElkIgxwcmljZUFzc2V0SWQiEmtleUZhY3RvcnlDb250cmFjdCIWa2V5QXNzZXRzU3RvcmVDb250cmFjdCITa2V5RW1pc3Npb25Db250cmFjdCIJa2V5U3VmZml4IgxrZXlMYXN0SW5kZXgiC2luZGV4U3VmZml4Ig1zdGF0dXNQZW5kaW5nIg5zdGF0dXNEZWNsaW5lZCIMc3RhdHVzQWN0aXZlIghzdGF0dXNlcyIPa2V5Q3JlYXRlQ2FsbGVkIg9rZXlDcmVhdGVDYWxsZXIiFGtleUFtb3VudEFzc2V0QW1vdW50IhNrZXlQcmljZUFzc2V0QW1vdW50IglrZXlIZWlnaHQiDWtleUZlZUFzc2V0SWQiDGtleUZlZUFtb3VudCIXa2V5QW1vdW50QXNzZXRNaW5BbW91bnQiF2tleVByaWNlQXNzZXRzTWluQW1vdW50Ig5rZXlQcmljZUFzc2V0cyIcZ2V0TWFuYWdlclZhdWx0QWRkcmVzc09yVGhpcyIHJG1hdGNoMCIBcyIPZ2V0U3RyaW5nT3JGYWlsIgNrZXkiEnN0cmluZ09wdGlvblRvTGlzdCIMc3RyaW5nT3JVbml0Ig9mYWN0b3J5Q29udHJhY3QiGWtleVZvdGluZ0VtaXNzaW9uQ29udHJhY3QiFnZvdGluZ0VtaXNzaW9uQ29udHJhY3QiImtleVZvdGluZ0VtaXNzaW9uQ2FuZGlkYXRlQ29udHJhY3QiH3ZvdGluZ0VtaXNzaW9uQ2FuZGlkYXRlQ29udHJhY3QiDmlzQ3JlYXRlQ2FsbGVkIhBtdXN0Q3JlYXRlQ2FsbGVkIhZtYW5hZ2VyUHVibGljS2V5T3JVbml0IhNtYW5hZ2VyVmF1bHRBZGRyZXNzIglpc01hbmFnZXIiAWkiAnBrIgttdXN0TWFuYWdlciIJbXVzdEFkbWluIghhZG1pblBLcyIKaXNWZXJpZmllZCIHYXNzZXRJZCIMZ2V0SWRBbmRJbmZvIgdwYXltZW50IgJpZCIEaW5mbyILdmFsaWRTdGF0dXMiBnN0YXR1cyIQZmFjdG9yeVYyQWRkcmVzcyISYXNzZXRzU3RvcmVBZGRyZXNzIg9lbWlzc2lvbkFkZHJlc3MiFHByaWNlQXNzZXRzTWluQW1vdW50IhRhbW91bnRBc3NldE1pbkFtb3VudCIKZmVlQXNzZXRJZCIJZmVlQW1vdW50IgtjaGVja0NhbGxlciISYW1vdW50QXNzZXRQYXltZW50IhFwcmljZUFzc2V0UGF5bWVudCIPZmVlQXNzZXRQYXltZW50IgskdDA3NTQwNzYxMiIPYW1vdW50QXNzZXRJbmZvIgskdDA3NjE1NzY4NCIOcHJpY2VBc3NldEluZm8iCyR0MDc2ODc3NzUwIgxmZWVBc3NldEluZm8iEWFtb3VudEFzc2V0QW1vdW50IhBwcmljZUFzc2V0QW1vdW50Ig5mZWVBc3NldEFtb3VudCIPcHJpY2VBc3NldHNMaXN0IhVhc3NldE1pbkFtb3VudERlZmF1bHQiF2FsbG93ZWRBc3NldHNNaW5BbW91bnRzIhBwcmljZUFzc2V0c0luZGV4IhNwcmljZUFzc2V0TWluQW1vdW50IglsYXN0SW5kZXgiCGN1ckluZGV4IhBlbWlzc2lvbkNvbnRyYWN0Igpwb29sRXhpc3RzIgFAIgZjaGVja3MiE3BheW1lbnRzV2l0aEZlZVNpemUiD2J1cm5FbWlzc2lvbkludiILcG9vbEFkZHJlc3MiEWFtb3VudEFzc2V0VGlja2VyIhBwcmljZUFzc2V0VGlja2VyIgRsb2dvIhJhY3RpdmF0ZU5ld1Bvb2xJbnYiCWxwQXNzZXRJZCIJYmVmb3JlUHV0IgNwdXQiCGFmdGVyUHV0IgR1c2VyIgNyZXMiDGFkbWluUHViS2V5cyICdHgiBnZlcmlmeSIPdGFyZ2V0UHVibGljS2V5PQABYQIPdXNlcl9wb29scy5yaWRlAAFiAgJfXwABYwIFV0FWRVMAAWQCE0ludmFsaWQgcHJpY2UgYXNzZXQBAWUBAWYJALkJAgkAzAgCBQFhCQDMCAICAjogCQDMCAIFAWYFA25pbAIAAQFnAQFmCQACAQkBAWUBBQFmAQFoAAkBAWcBAhFQZXJtaXNzaW9uIGRlbmllZAEBaQAJAQFnAQIkQ3JlYXRlIGlzIG5vdCBjYWxsZWQgZm9yIGFzc2V0cyBwYWlyAQFqAAkBAWcBAh5Zb3UgYXJlIG5vdCBhbW91bnRBc3NldCBpc3N1ZXIBAWsACQEBZwECJFBvb2wgd2l0aCBzdWNoIGFzc2V0cyBhbHJlYWR5IGV4aXN0cwEBbAAJAQFnAQIVQXNzZXQgaXMgbm90IHZlcmlmaWVkAQFtAAkBAWcBBQFkAQFuAAkBAWcBAhFJbnZhbGlkIGZlZSBhc3NldAEBbwAJAQFnAQIdSW52YWxpZCBhbW91bnQgYXNzZXQgYXR0YWNoZWQBAXAACQEBZwECDkludmFsaWQgc3RhdHVzAQFxAAkBAWcBAipDYW4gYWN0aXZhdGUgcG9vbCBvbmx5IGluICdwZW5kaW5nJyBzdGF0dXMBAXIACQEBZwECHUZhY3RvcnlWMiByZXR1cm5lZCBub3Qgc3RyaW5nAQFzAAkBAWcBAhppbnZhbGlkIHByaWNlIGFzc2V0IGFtb3VudAEBdAAJAQFnAQILaW52YWxpZCBmZWUBAXUACQEBZwECEmludmFsaWQgYXNzZXQgcGFpcgEBdgAJALkJAgkAzAgCAgIlcwkAzAgCAhBtYW5hZ2VyUHVibGljS2V5BQNuaWwFAWIBAXcAAhclc19fbWFuYWdlclZhdWx0QWRkcmVzcwEBeAAJALkJAgkAzAgCAgIlcwkAzAgCAgxhZG1pblB1YktleXMFA25pbAUBYgEBeQIBegFBCQC5CQIJAMwIAgIGJXMlcyVzCQDMCAICBnN0YXR1cwkAzAgCBQF6CQDMCAIFAUEFA25pbAUBYgEBQgAJALkJAgkAzAgCAgIlcwkAzAgCAg9mYWN0b3J5Q29udHJhY3QFA25pbAUBYgEBQwAJALkJAgkAzAgCAgIlcwkAzAgCAhNhc3NldHNTdG9yZUNvbnRyYWN0BQNuaWwFAWIBAUQACQC5CQIJAMwIAgICJXMJAMwIAgIQZW1pc3Npb25Db250cmFjdAUDbmlsBQFiAQFFAgF6AUEJALkJAgkAzAgCAgYlcyVzJXMJAMwIAgIGc3VmZml4CQDMCAIFAXoJAMwIAgUBQQUDbmlsBQFiAQFGAAkAuQkCCQDMCAICAiVzCQDMCAICCWxhc3RJbmRleAUDbmlsBQFiAAFHAgF1AAFIAgdwZW5kaW5nAAFJAghkZWNsaW5lZAABSgIGYWN0aXZlAAFLCQDMCAIFAUgJAMwIAgUBSQkAzAgCBQFKBQNuaWwBAUwCAXoBQQkAuQkCCQDMCAICBiVzJXMlcwkAzAgCAgxjcmVhdGVDYWxsZWQJAMwIAgUBegkAzAgCBQFBBQNuaWwFAWIBAU0CAXoBQQkAuQkCCQDMCAICBiVzJXMlcwkAzAgCAgxjcmVhdGVDYWxsZXIJAMwIAgUBegkAzAgCBQFBBQNuaWwFAWIBAU4CAXoBQQkAuQkCCQDMCAICBiVzJXMlcwkAzAgCAhFhbW91bnRBc3NldEFtb3VudAkAzAgCBQF6CQDMCAIFAUEFA25pbAUBYgEBTwIBegFBCQC5CQIJAMwIAgIGJXMlcyVzCQDMCAICEHByaWNlQXNzZXRBbW91bnQJAMwIAgUBegkAzAgCBQFBBQNuaWwFAWIBAVACAXoBQQkAuQkCCQDMCAICBiVzJXMlcwkAzAgCAgZoZWlnaHQJAMwIAgUBegkAzAgCBQFBBQNuaWwFAWIBAVEACQC5CQIJAMwIAgICJXMJAMwIAgIKZmVlQXNzZXRJZAUDbmlsBQFiAQFSAAkAuQkCCQDMCAICAiVzCQDMCAICCWZlZUFtb3VudAUDbmlsBQFiAQFTAAkAuQkCCQDMCAICAiVzCQDMCAICFGFtb3VudEFzc2V0TWluQW1vdW50BQNuaWwFAWIBAVQACQC5CQIJAMwIAgICJXMJAMwIAgIUcHJpY2VBc3NldHNNaW5BbW91bnQFA25pbAUBYgEBVQAJALkJAgkAzAgCAgIlcwkAzAgCAgtwcmljZUFzc2V0cwUDbmlsBQFiAQFWAAQBVwkAoggBCQEBdwADCQABAgUBVwIGU3RyaW5nBAFYBQFXCQERQGV4dHJOYXRpdmUoMTA2MikBBQFYBQR0aGlzAQFZAQFaCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgUEdGhpcwUBWgkArAICBQFaAg8gaXMgbm90IGRlZmluZWQBAmFhAQJhYgQBVwUCYWIDCQABAgUBVwIGU3RyaW5nBAFYBQFXAwkAAAIJALECAQUBWAAABQNuaWwJALUJAgUBWAUBYgMJAAECBQFXAgRVbml0BQNuaWwJAAIBAgtNYXRjaCBlcnJvcgACYWMJARFAZXh0ck5hdGl2ZSgxMDYyKQEJAQFZAQkBAUIAAAJhZAkAuQkCCQDMCAICAiVzCQDMCAICFnZvdGluZ0VtaXNzaW9uQ29udHJhY3QFA25pbAUBYgACYWUJARFAZXh0ck5hdGl2ZSgxMDYyKQEJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQJhYwUCYWQJAQFlAQIsdm90aW5nIGVtaXNzaW9uIGNvbnRyYWN0IGFkZHJlc3MgaXMgcmVxdWlyZWQAAmFmCQC5CQIJAMwIAgICJXMJAMwIAgIfdm90aW5nRW1pc3Npb25DYW5kaWRhdGVDb250cmFjdAUDbmlsBQFiAAJhZwkBEUBleHRyTmF0aXZlKDEwNjIpAQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIFAmFlBQJhZgkBAWUBAjZ2b3RpbmcgZW1pc3Npb24gY2FuZGlkYXRlIGNvbnRyYWN0IGFkZHJlc3MgaXMgcmVxdWlyZWQBAmFoAgF6AUEJAQt2YWx1ZU9yRWxzZQIJAKAIAQkBAUwCBQF6BQFBBwECYWkCAXoBQQMJAQJhaAIFAXoFAUEGCQEBaQABAmFqAAQCYWsJAQFWAAQBVwkAnQgCBQJhawkBAXYAAwkAAQIFAVcCBlN0cmluZwQBWAUBVwkA2QQBBQFYAwkAAQIFAVcCBFVuaXQFBHVuaXQJAAIBAgtNYXRjaCBlcnJvcgECYWwBAmFtBAFXCQECYWoAAwkAAQIFAVcCCkJ5dGVWZWN0b3IEAmFuBQFXCQAAAggFAmFtD2NhbGxlclB1YmxpY0tleQUCYW4DCQABAgUBVwIEVW5pdAkAAAIIBQJhbQZjYWxsZXIFBHRoaXMJAAIBAgtNYXRjaCBlcnJvcgECYW8BAmFtAwkBAmFsAQUCYW0GCQEBaAABAmFwAQJhbQQCYXEJAQJhYQEJAKIIAQkBAXgAAwkBD2NvbnRhaW5zRWxlbWVudAIFAmFxCQDYBAEIBQJhbQ9jYWxsZXJQdWJsaWNLZXkGCQECYW8BBQJhbQECYXIBAmFzCQAAAgkBC3ZhbHVlT3JFbHNlAgkAmggCCQERQGV4dHJOYXRpdmUoMTA2MikBCQEBWQEJAQFDAAkArAICCQCsAgICCHN0YXR1c188BQJhcwIBPgAAAAIBAmF0AQJhdQQBVwgFAmF1B2Fzc2V0SWQDCQABAgUBVwIKQnl0ZVZlY3RvcgQCYXYFAVcEAmF3CQEFdmFsdWUBCQDsBwEFAmF2CQCUCgIJANgEAQUCYXYFAmF3AwkAAQIFAVcCBFVuaXQJAJQKAgUBYwUEdW5pdAkAAgECC01hdGNoIGVycm9yAQJheAECYXkJAQ9jb250YWluc0VsZW1lbnQCBQFLBQJheQYCYW0BC2NvbnN0cnVjdG9yBwJhegJhQQJhQgJhQwJhRAJhRQJhRgQCYUcJAQJhbwEFAmFtAwkAAAIFAmFHBQJhRwkAzAgCCQELU3RyaW5nRW50cnkCCQEBQgAFAmF6CQDMCAIJAQtTdHJpbmdFbnRyeQIJAQFDAAUCYUEJAMwIAgkBC1N0cmluZ0VudHJ5AgkBAUQABQJhQgkAzAgCCQELU3RyaW5nRW50cnkCCQEBVAAJALkJAgUCYUMFAWIJAMwIAgkBDEludGVnZXJFbnRyeQIJAQFTAAUCYUQJAMwIAgkBC1N0cmluZ0VudHJ5AgkBAVEABQJhRQkAzAgCCQEMSW50ZWdlckVudHJ5AgkBAVIABQJhRgUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAmFtAQZjcmVhdGUABAJhSAkBBXZhbHVlAQkAkQMCCAUCYW0IcGF5bWVudHMAAAQCYUkJAQV2YWx1ZQEJAJEDAggFAmFtCHBheW1lbnRzAAEEAmFKCQEFdmFsdWUBCQCRAwIIBQJhbQhwYXltZW50cwACBAJhSwkBAmF0AQUCYUgEAXoIBQJhSwJfMQQCYUwIBQJhSwJfMgQCYU0JAQJhdAEFAmFJBAFBCAUCYU0CXzEEAmFOCAUCYU0CXzIEAmFPCQECYXQBBQJhSgQCYUUIBQJhTwJfMQQCYVAIBQJhTwJfMgQCYVEIBQJhSAZhbW91bnQEAmFSCAUCYUkGYW1vdW50BAJhUwgFAmFKBmFtb3VudAQCYVQJAQJhYQEJAJ0IAgUCYWMJAQFVAAQCYVUJARFAZXh0ck5hdGl2ZSgxMDU1KQEJAQFTAAQCYVYJAQJhYQEJAKIIAQkBAVQABAJhRAMJAQ9jb250YWluc0VsZW1lbnQCBQJhVAUBegQCYVcJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAzwgCBQJhVAUBegUBZAkBBXZhbHVlAQkAtgkBCQCRAwIFAmFWBQJhVwUCYVUEAmFYAwkBD2NvbnRhaW5zRWxlbWVudAIFAmFUBQFBBAJhVwkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQDPCAIFAmFUBQFBBQFkCQEFdmFsdWUBCQC2CQEJAJEDAgUCYVYFAmFXBQJhVQQCYVkJAQt2YWx1ZU9yRWxzZQIJAJ8IAQkBAUYAAAAEAmFaCQBkAgUCYVkAAQQCYmEJARFAZXh0ck5hdGl2ZSgxMDYyKQEJAQFZAQkBAUQABAJiYgoAAmJjCQD8BwQFAmFjAhJwb29sRXhpc3RzUkVBRE9OTFkJAMwIAgUBegkAzAgCBQFBBQNuaWwFA25pbAMJAAECBQJiYwIHQm9vbGVhbgUCYmMJAAIBCQCsAgIJAAMBBQJiYwIcIGNvdWxkbid0IGJlIGNhc3QgdG8gQm9vbGVhbgQCYmQJAMwIAgMJAQEhAQkBAmFoAgUBegUBQQYJAQFrAAkAzAgCAwkBASEBBQJiYgYJAQFrAAkAzAgCAwkBAiE9AgUBegUBQQYJAQF1AAkAzAgCAwMJAQJhcgEFAXoJAQJhcgEFAUEHBgkBAXUACQDMCAIDAwkBD2NvbnRhaW5zRWxlbWVudAIFAmFUBQF6BgkBD2NvbnRhaW5zRWxlbWVudAIFAmFUBQFBBgkBAXUACQDMCAIDAwkBAmFsAQUCYW0GCQAAAgkAoggBCQEBUQAFAmFFBgkBAW4ACQDMCAIDAwkBAmFsAQUCYW0GCQBnAgUCYVEJARFAZXh0ck5hdGl2ZSgxMDU1KQEJAQFTAAYJAQFvAAkAzAgCAwMJAQJhbAEFAmFtBgkAZwIFAmFSBQJhWAYJAQFzAAkAzAgCAwMJAQJhbAEFAmFtBgkAAAIFAmFTCQCfCAEJAQFSAAYJAQF0AAUDbmlsAwkAAAIFAmJkBQJiZAQCYmUAAwQCYmYDCQBnAgkAkAMBCAUCYW0IcGF5bWVudHMFAmJlCQD8BwQFAmJhAgRidXJuBQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIJANkEAQUCYUUFAmFTBQNuaWwFBHVuaXQDCQAAAgUCYmYFAmJmCQDMCAIJAQxCb29sZWFuRW50cnkCCQEBTAIFAXoFAUEGCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQFNAgUBegUBQQkApQgBCAUCYW0GY2FsbGVyCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEBRgAFAmFaCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQFFAgUBegUBQQkArAICCQCkAwEFAmFaBQFHCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEBUAIFAXoFAUEFBmhlaWdodAkAzAgCCQELU3RyaW5nRW50cnkCCQEBeQIFAXoFAUEFAUgJAMwIAgkBDEludGVnZXJFbnRyeQIJAQFOAgUBegUBQQUCYVEJAMwIAgkBDEludGVnZXJFbnRyeQIJAQFPAgUBegUBQQUCYVIFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgJhbQEIYWN0aXZhdGUGAmJnAXoCYmgBQQJiaQJiagQCYmQJAMwIAgkBAmFwAQUCYW0JAMwIAgMJAQJhaAIFAXoFAUEGCQEBaQAJAMwIAgMJAAACCQEFdmFsdWUBCQCiCAEJAQF5AgUBegUBQQUBSAYJAQFxAAUDbmlsAwkAAAIFAmJkBQJiZAQCYmsJAPwHBAUCYWMCD2FjdGl2YXRlTmV3UG9vbAkAzAgCBQJiZwkAzAgCBQF6CQDMCAIFAUEJAMwIAgkArAICCQCsAgIFAmJoBQJiaQICTFAJAMwIAgkArAICCQCsAgIJAKwCAgUCYmgCAS8FAmJpAh4gcG9vbCBsaXF1aWRpdHkgcHJvdmlkZXIgdG9rZW4JAMwIAgAACQDMCAICB1ZMVFBPT0wJAMwIAgUCYmoFA25pbAUDbmlsAwkAAAIFAmJrBQJiawQCYmwEAVcFAmJrAwkAAQIFAVcCBlN0cmluZwQCYXYFAVcFAmF2CQEBcgADCQAAAgUCYmwFAmJsBAJibQkA8AcCBQR0aGlzCQDZBAEFAmJsAwkAAAIFAmJtBQJibQQCYm4JAPwHBAkBEUBleHRyTmF0aXZlKDEwNjIpAQUCYmcCA3B1dAkAzAgCAAAJAMwIAgcFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgMJAAACBQF6AgVXQVZFUwUEdW5pdAkA2QQBBQF6CQEFdmFsdWUBCQCfCAEJAQFOAgUBegUBQQkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgMJAAACBQFBAgVXQVZFUwUEdW5pdAkA2QQBBQFBCQEFdmFsdWUBCQCfCAEJAQFPAgUBegUBQQUDbmlsAwkAAAIFAmJuBQJibgQCYm8JAPAHAgUEdGhpcwkA2QQBBQJibAMJAAACBQJibwUCYm8EAmJwCQEFdmFsdWUBCQCmCAEJAQV2YWx1ZQEJAKIIAQkBAU0CBQF6BQFBBAJicQkA/AcEBQJhZwIHYXBwcm92ZQkAzAgCBQF6CQDMCAIFAUEFA25pbAUDbmlsAwkAAAIFAmJxBQJicQkAzAgCCQELU3RyaW5nRW50cnkCCQEBeQIFAXoFAUEFAUoJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwUCYnAJAGUCBQJibwUCYm0JANkEAQUCYmwFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgJhbQEJc2V0QWRtaW5zAQJicgQCYUcJAQJhbwEFAmFtAwkAAAIFAmFHBQJhRwkAzAgCCQELU3RyaW5nRW50cnkCCQEBeAAJALkJAgUCYnIFAWIFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgJhbQETcHJpY2VBc3NldHNSRUFET05MWQAJAJQKAgUDbmlsCQECYWEBCQCiCAEJAQFVAAJhbQEOc3RhdHVzUkVBRE9OTFkCAXoBQQQCYXkEAVcJAKIIAQkBAXkCBQF6BQFBAwkAAQIFAVcCBlN0cmluZwQBWAUBVwUBWAUEdW5pdAkAlAoCBQNuaWwFAmF5AQJicwECYnQABAJidQQBVwkBAmFqAAMJAAECBQFXAgpCeXRlVmVjdG9yBAJhbgUBVwUCYW4DCQABAgUBVwIEVW5pdAgFAmJzD3NlbmRlclB1YmxpY0tleQkAAgECC01hdGNoIGVycm9yCQD0AwMIBQJicwlib2R5Qnl0ZXMJAJEDAggFAmJzBnByb29mcwAABQJidXjfgew=", "height": 2603411, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 7pjDAjxCiUJpaW7vJrDnBfidGpLzYh8A3HC724Vdbr16 Next: 3zZBoKB3ZPLeymHNKRHJ6i6TdMVk3Smeze4s29zRZ2fh Diff:
OldNewDifferences
66 let SEP = "__"
77
88 let wavesAssetId = "WAVES"
9-
10-let VLTPOOL = "VLTPOOL"
11-
12-let STBLPOOL = "STBLPOOL"
139
1410 let invalidPriceAsset = "Invalid price asset"
1511
111107
112108
113109 func keyHeight (amountAssetId,priceAssetId) = makeString(["%s%s%s", "height", amountAssetId, priceAssetId], SEP)
114-
115-
116-func keyPoolType (amountAssetId,priceAssetId) = makeString(["%s%s%s", "poolType", amountAssetId, priceAssetId], SEP)
117110
118111
119112 func keyFeeAssetId () = makeString(["%s", "feeAssetId"], SEP)
225218 func validStatus (status) = containsElement(statuses, status)
226219
227220
228-func _create (i,poolType) = {
221+@Callable(i)
222+func constructor (factoryV2Address,assetsStoreAddress,emissionAddress,priceAssetsMinAmount,amountAssetMinAmount,feeAssetId,feeAmount) = {
223+ let checkCaller = mustManager(i)
224+ if ((checkCaller == checkCaller))
225+ then [StringEntry(keyFactoryContract(), factoryV2Address), StringEntry(keyAssetsStoreContract(), assetsStoreAddress), StringEntry(keyEmissionContract(), emissionAddress), StringEntry(keyPriceAssetsMinAmount(), makeString(priceAssetsMinAmount, SEP)), IntegerEntry(keyAmountAssetMinAmount(), amountAssetMinAmount), StringEntry(keyFeeAssetId(), feeAssetId), IntegerEntry(keyFeeAmount(), feeAmount)]
226+ else throw("Strict value is not equal to itself.")
227+ }
228+
229+
230+
231+@Callable(i)
232+func create () = {
229233 let amountAssetPayment = value(i.payments[0])
230234 let priceAssetPayment = value(i.payments[1])
231235 let feeAssetPayment = value(i.payments[2])
232- let $t064836555 = getIdAndInfo(amountAssetPayment)
233- let amountAssetId = $t064836555._1
234- let amountAssetInfo = $t064836555._2
235- let $t065586627 = getIdAndInfo(priceAssetPayment)
236- let priceAssetId = $t065586627._1
237- let priceAssetInfo = $t065586627._2
238- let $t066306693 = getIdAndInfo(feeAssetPayment)
239- let feeAssetId = $t066306693._1
240- let feeAssetInfo = $t066306693._2
236+ let $t075407612 = getIdAndInfo(amountAssetPayment)
237+ let amountAssetId = $t075407612._1
238+ let amountAssetInfo = $t075407612._2
239+ let $t076157684 = getIdAndInfo(priceAssetPayment)
240+ let priceAssetId = $t076157684._1
241+ let priceAssetInfo = $t076157684._2
242+ let $t076877750 = getIdAndInfo(feeAssetPayment)
243+ let feeAssetId = $t076877750._1
244+ let feeAssetInfo = $t076877750._2
241245 let amountAssetAmount = amountAssetPayment.amount
242246 let priceAssetAmount = priceAssetPayment.amount
243247 let feeAssetAmount = feeAssetPayment.amount
271275 then true
272276 else throwPoolExists(), if ((amountAssetId != priceAssetId))
273277 then true
274- else throwInvalidAssetPair(), if (if (isManager(i))
275- then true
276- else if (isVerified(amountAssetId))
277- then isVerified(priceAssetId)
278- else false)
278+ else throwInvalidAssetPair(), if (if (isVerified(amountAssetId))
279+ then isVerified(priceAssetId)
280+ else false)
279281 then true
280282 else throwInvalidAssetPair(), if (if (containsElement(priceAssetsList, amountAssetId))
281283 then true
305307 then invoke(emissionContract, "burn", nil, [AttachedPayment(fromBase58String(feeAssetId), feeAssetAmount)])
306308 else unit
307309 if ((burnEmissionInv == burnEmissionInv))
308- 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), StringEntry(keyPoolType(amountAssetId, priceAssetId), poolType)]
310+ 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)]
309311 else throw("Strict value is not equal to itself.")
310312 }
311- else throw("Strict value is not equal to itself.")
312- }
313-
314-
315-@Callable(i)
316-func constructor (factoryV2Address,assetsStoreAddress,emissionAddress,priceAssetsMinAmount,amountAssetMinAmount,feeAssetId,feeAmount) = {
317- let checkCaller = mustManager(i)
318- if ((checkCaller == checkCaller))
319- then [StringEntry(keyFactoryContract(), factoryV2Address), StringEntry(keyAssetsStoreContract(), assetsStoreAddress), StringEntry(keyEmissionContract(), emissionAddress), StringEntry(keyPriceAssetsMinAmount(), makeString(priceAssetsMinAmount, SEP)), IntegerEntry(keyAmountAssetMinAmount(), amountAssetMinAmount), StringEntry(keyFeeAssetId(), feeAssetId), IntegerEntry(keyFeeAmount(), feeAmount)]
320- else throw("Strict value is not equal to itself.")
321- }
322-
323-
324-
325-@Callable(i)
326-func create () = _create(i, VLTPOOL)
327-
328-
329-
330-@Callable(i)
331-func createStable () = {
332- let checkCaller = mustManager(i)
333- if ((checkCaller == checkCaller))
334- then _create(i, STBLPOOL)
335313 else throw("Strict value is not equal to itself.")
336314 }
337315
346324 else throwCanActivateOnlyPendingPool()]
347325 if ((checks == checks))
348326 then {
349- let poolTypeOption = getString(this, keyPoolType(amountAssetId, priceAssetId))
350- let activateNewPoolInv = invoke(factoryContract, "activateNewPool", [poolAddress, amountAssetId, priceAssetId, ((amountAssetTicker + priceAssetTicker) + "LP"), (((amountAssetTicker + "/") + priceAssetTicker) + " pool liquidity provider token"), 0, if ((poolTypeOption == unit))
351- then "VLTPOOL"
352- else value(poolTypeOption), logo], nil)
327+ let activateNewPoolInv = invoke(factoryContract, "activateNewPool", [poolAddress, amountAssetId, priceAssetId, ((amountAssetTicker + priceAssetTicker) + "LP"), (((amountAssetTicker + "/") + priceAssetTicker) + " pool liquidity provider token"), 0, "VLTPOOL", logo], nil)
353328 if ((activateNewPoolInv == activateNewPoolInv))
354329 then {
355330 let lpAssetId = match activateNewPoolInv {
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"
9-
10-let VLTPOOL = "VLTPOOL"
11-
12-let STBLPOOL = "STBLPOOL"
139
1410 let invalidPriceAsset = "Invalid price asset"
1511
1612 func wrapErr (msg) = makeString([contractFilename, ": ", msg], "")
1713
1814
1915 func throwErr (msg) = throw(wrapErr(msg))
2016
2117
2218 func throwPD () = throwErr("Permission denied")
2319
2420
2521 func throwCreateNotCalled () = throwErr("Create is not called for assets pair")
2622
2723
2824 func throwYouNotIssuer () = throwErr("You are not amountAsset issuer")
2925
3026
3127 func throwPoolExists () = throwErr("Pool with such assets already exists")
3228
3329
3430 func throwAssetNotVerified () = throwErr("Asset is not verified")
3531
3632
3733 func throwInvalidPriceAsset () = throwErr(invalidPriceAsset)
3834
3935
4036 func throwInvalidFeeAsset () = throwErr("Invalid fee asset")
4137
4238
4339 func throwInvalidAmountAsset () = throwErr("Invalid amount asset attached")
4440
4541
4642 func throwInvalidStatus () = throwErr("Invalid status")
4743
4844
4945 func throwCanActivateOnlyPendingPool () = throwErr("Can activate pool only in 'pending' status")
5046
5147
5248 func throwFactoryReturnedNotString () = throwErr("FactoryV2 returned not string")
5349
5450
5551 func throwInvalidPriceAssetAmount () = throwErr("invalid price asset amount")
5652
5753
5854 func throwInvalidFee () = throwErr("invalid fee")
5955
6056
6157 func throwInvalidAssetPair () = throwErr("invalid asset pair")
6258
6359
6460 func keyManagerPublicKey () = makeString(["%s", "managerPublicKey"], SEP)
6561
6662
6763 func keyManagerVaultAddress () = "%s__managerVaultAddress"
6864
6965
7066 func keyAdminPubKeys () = makeString(["%s", "adminPubKeys"], SEP)
7167
7268
7369 func keyStatus (amountAssetId,priceAssetId) = makeString(["%s%s%s", "status", amountAssetId, priceAssetId], SEP)
7470
7571
7672 func keyFactoryContract () = makeString(["%s", "factoryContract"], SEP)
7773
7874
7975 func keyAssetsStoreContract () = makeString(["%s", "assetsStoreContract"], SEP)
8076
8177
8278 func keyEmissionContract () = makeString(["%s", "emissionContract"], SEP)
8379
8480
8581 func keySuffix (amountAssetId,priceAssetId) = makeString(["%s%s%s", "suffix", amountAssetId, priceAssetId], SEP)
8682
8783
8884 func keyLastIndex () = makeString(["%s", "lastIndex"], SEP)
8985
9086
9187 let indexSuffix = "u"
9288
9389 let statusPending = "pending"
9490
9591 let statusDeclined = "declined"
9692
9793 let statusActive = "active"
9894
9995 let statuses = [statusPending, statusDeclined, statusActive]
10096
10197 func keyCreateCalled (amountAssetId,priceAssetId) = makeString(["%s%s%s", "createCalled", amountAssetId, priceAssetId], SEP)
10298
10399
104100 func keyCreateCaller (amountAssetId,priceAssetId) = makeString(["%s%s%s", "createCaller", amountAssetId, priceAssetId], SEP)
105101
106102
107103 func keyAmountAssetAmount (amountAssetId,priceAssetId) = makeString(["%s%s%s", "amountAssetAmount", amountAssetId, priceAssetId], SEP)
108104
109105
110106 func keyPriceAssetAmount (amountAssetId,priceAssetId) = makeString(["%s%s%s", "priceAssetAmount", amountAssetId, priceAssetId], SEP)
111107
112108
113109 func keyHeight (amountAssetId,priceAssetId) = makeString(["%s%s%s", "height", amountAssetId, priceAssetId], SEP)
114-
115-
116-func keyPoolType (amountAssetId,priceAssetId) = makeString(["%s%s%s", "poolType", amountAssetId, priceAssetId], SEP)
117110
118111
119112 func keyFeeAssetId () = makeString(["%s", "feeAssetId"], SEP)
120113
121114
122115 func keyFeeAmount () = makeString(["%s", "feeAmount"], SEP)
123116
124117
125118 func keyAmountAssetMinAmount () = makeString(["%s", "amountAssetMinAmount"], SEP)
126119
127120
128121 func keyPriceAssetsMinAmount () = makeString(["%s", "priceAssetsMinAmount"], SEP)
129122
130123
131124 func keyPriceAssets () = makeString(["%s", "priceAssets"], SEP)
132125
133126
134127 func getManagerVaultAddressOrThis () = match getString(keyManagerVaultAddress()) {
135128 case s: String =>
136129 addressFromStringValue(s)
137130 case _ =>
138131 this
139132 }
140133
141134
142135 func getStringOrFail (key) = valueOrErrorMessage(getString(this, key), (key + " is not defined"))
143136
144137
145138 func stringOptionToList (stringOrUnit) = match stringOrUnit {
146139 case s: String =>
147140 if ((size(s) == 0))
148141 then nil
149142 else split(s, SEP)
150143 case _: Unit =>
151144 nil
152145 case _ =>
153146 throw("Match error")
154147 }
155148
156149
157150 let factoryContract = addressFromStringValue(getStringOrFail(keyFactoryContract()))
158151
159152 let keyVotingEmissionContract = makeString(["%s", "votingEmissionContract"], SEP)
160153
161154 let votingEmissionContract = addressFromStringValue(valueOrErrorMessage(getString(factoryContract, keyVotingEmissionContract), wrapErr("voting emission contract address is required")))
162155
163156 let keyVotingEmissionCandidateContract = makeString(["%s", "votingEmissionCandidateContract"], SEP)
164157
165158 let votingEmissionCandidateContract = addressFromStringValue(valueOrErrorMessage(getString(votingEmissionContract, keyVotingEmissionCandidateContract), wrapErr("voting emission candidate contract address is required")))
166159
167160 func isCreateCalled (amountAssetId,priceAssetId) = valueOrElse(getBoolean(keyCreateCalled(amountAssetId, priceAssetId)), false)
168161
169162
170163 func mustCreateCalled (amountAssetId,priceAssetId) = if (isCreateCalled(amountAssetId, priceAssetId))
171164 then true
172165 else throwCreateNotCalled()
173166
174167
175168 func managerPublicKeyOrUnit () = {
176169 let managerVaultAddress = getManagerVaultAddressOrThis()
177170 match getString(managerVaultAddress, keyManagerPublicKey()) {
178171 case s: String =>
179172 fromBase58String(s)
180173 case _: Unit =>
181174 unit
182175 case _ =>
183176 throw("Match error")
184177 }
185178 }
186179
187180
188181 func isManager (i) = match managerPublicKeyOrUnit() {
189182 case pk: ByteVector =>
190183 (i.callerPublicKey == pk)
191184 case _: Unit =>
192185 (i.caller == this)
193186 case _ =>
194187 throw("Match error")
195188 }
196189
197190
198191 func mustManager (i) = if (isManager(i))
199192 then true
200193 else throwPD()
201194
202195
203196 func mustAdmin (i) = {
204197 let adminPKs = stringOptionToList(getString(keyAdminPubKeys()))
205198 if (containsElement(adminPKs, toBase58String(i.callerPublicKey)))
206199 then true
207200 else mustManager(i)
208201 }
209202
210203
211204 func isVerified (assetId) = (valueOrElse(getInteger(addressFromStringValue(getStringOrFail(keyAssetsStoreContract())), (("status_<" + assetId) + ">")), 0) == 2)
212205
213206
214207 func getIdAndInfo (payment) = match payment.assetId {
215208 case id: ByteVector =>
216209 let info = value(assetInfo(id))
217210 $Tuple2(toBase58String(id), info)
218211 case _: Unit =>
219212 $Tuple2(wavesAssetId, unit)
220213 case _ =>
221214 throw("Match error")
222215 }
223216
224217
225218 func validStatus (status) = containsElement(statuses, status)
226219
227220
228-func _create (i,poolType) = {
221+@Callable(i)
222+func constructor (factoryV2Address,assetsStoreAddress,emissionAddress,priceAssetsMinAmount,amountAssetMinAmount,feeAssetId,feeAmount) = {
223+ let checkCaller = mustManager(i)
224+ if ((checkCaller == checkCaller))
225+ then [StringEntry(keyFactoryContract(), factoryV2Address), StringEntry(keyAssetsStoreContract(), assetsStoreAddress), StringEntry(keyEmissionContract(), emissionAddress), StringEntry(keyPriceAssetsMinAmount(), makeString(priceAssetsMinAmount, SEP)), IntegerEntry(keyAmountAssetMinAmount(), amountAssetMinAmount), StringEntry(keyFeeAssetId(), feeAssetId), IntegerEntry(keyFeeAmount(), feeAmount)]
226+ else throw("Strict value is not equal to itself.")
227+ }
228+
229+
230+
231+@Callable(i)
232+func create () = {
229233 let amountAssetPayment = value(i.payments[0])
230234 let priceAssetPayment = value(i.payments[1])
231235 let feeAssetPayment = value(i.payments[2])
232- let $t064836555 = getIdAndInfo(amountAssetPayment)
233- let amountAssetId = $t064836555._1
234- let amountAssetInfo = $t064836555._2
235- let $t065586627 = getIdAndInfo(priceAssetPayment)
236- let priceAssetId = $t065586627._1
237- let priceAssetInfo = $t065586627._2
238- let $t066306693 = getIdAndInfo(feeAssetPayment)
239- let feeAssetId = $t066306693._1
240- let feeAssetInfo = $t066306693._2
236+ let $t075407612 = getIdAndInfo(amountAssetPayment)
237+ let amountAssetId = $t075407612._1
238+ let amountAssetInfo = $t075407612._2
239+ let $t076157684 = getIdAndInfo(priceAssetPayment)
240+ let priceAssetId = $t076157684._1
241+ let priceAssetInfo = $t076157684._2
242+ let $t076877750 = getIdAndInfo(feeAssetPayment)
243+ let feeAssetId = $t076877750._1
244+ let feeAssetInfo = $t076877750._2
241245 let amountAssetAmount = amountAssetPayment.amount
242246 let priceAssetAmount = priceAssetPayment.amount
243247 let feeAssetAmount = feeAssetPayment.amount
244248 let priceAssetsList = stringOptionToList(getString(factoryContract, keyPriceAssets()))
245249 let assetMinAmountDefault = getIntegerValue(keyAmountAssetMinAmount())
246250 let allowedAssetsMinAmounts = stringOptionToList(getString(keyPriceAssetsMinAmount()))
247251 let amountAssetMinAmount = if (containsElement(priceAssetsList, amountAssetId))
248252 then {
249253 let priceAssetsIndex = valueOrErrorMessage(indexOf(priceAssetsList, amountAssetId), invalidPriceAsset)
250254 value(parseInt(allowedAssetsMinAmounts[priceAssetsIndex]))
251255 }
252256 else assetMinAmountDefault
253257 let priceAssetMinAmount = if (containsElement(priceAssetsList, priceAssetId))
254258 then {
255259 let priceAssetsIndex = valueOrErrorMessage(indexOf(priceAssetsList, priceAssetId), invalidPriceAsset)
256260 value(parseInt(allowedAssetsMinAmounts[priceAssetsIndex]))
257261 }
258262 else assetMinAmountDefault
259263 let lastIndex = valueOrElse(getInteger(keyLastIndex()), 0)
260264 let curIndex = (lastIndex + 1)
261265 let emissionContract = addressFromStringValue(getStringOrFail(keyEmissionContract()))
262266 let poolExists = {
263267 let @ = invoke(factoryContract, "poolExistsREADONLY", [amountAssetId, priceAssetId], nil)
264268 if ($isInstanceOf(@, "Boolean"))
265269 then @
266270 else throw(($getType(@) + " couldn't be cast to Boolean"))
267271 }
268272 let checks = [if (!(isCreateCalled(amountAssetId, priceAssetId)))
269273 then true
270274 else throwPoolExists(), if (!(poolExists))
271275 then true
272276 else throwPoolExists(), if ((amountAssetId != priceAssetId))
273277 then true
274- else throwInvalidAssetPair(), if (if (isManager(i))
275- then true
276- else if (isVerified(amountAssetId))
277- then isVerified(priceAssetId)
278- else false)
278+ else throwInvalidAssetPair(), if (if (isVerified(amountAssetId))
279+ then isVerified(priceAssetId)
280+ else false)
279281 then true
280282 else throwInvalidAssetPair(), if (if (containsElement(priceAssetsList, amountAssetId))
281283 then true
282284 else containsElement(priceAssetsList, priceAssetId))
283285 then true
284286 else throwInvalidAssetPair(), if (if (isManager(i))
285287 then true
286288 else (getString(keyFeeAssetId()) == feeAssetId))
287289 then true
288290 else throwInvalidFeeAsset(), if (if (isManager(i))
289291 then true
290292 else (amountAssetAmount >= getIntegerValue(keyAmountAssetMinAmount())))
291293 then true
292294 else throwInvalidAmountAsset(), if (if (isManager(i))
293295 then true
294296 else (priceAssetAmount >= priceAssetMinAmount))
295297 then true
296298 else throwInvalidPriceAssetAmount(), if (if (isManager(i))
297299 then true
298300 else (feeAssetAmount == getInteger(keyFeeAmount())))
299301 then true
300302 else throwInvalidFee()]
301303 if ((checks == checks))
302304 then {
303305 let paymentsWithFeeSize = 3
304306 let burnEmissionInv = if ((size(i.payments) >= paymentsWithFeeSize))
305307 then invoke(emissionContract, "burn", nil, [AttachedPayment(fromBase58String(feeAssetId), feeAssetAmount)])
306308 else unit
307309 if ((burnEmissionInv == burnEmissionInv))
308- 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), StringEntry(keyPoolType(amountAssetId, priceAssetId), poolType)]
310+ 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)]
309311 else throw("Strict value is not equal to itself.")
310312 }
311- else throw("Strict value is not equal to itself.")
312- }
313-
314-
315-@Callable(i)
316-func constructor (factoryV2Address,assetsStoreAddress,emissionAddress,priceAssetsMinAmount,amountAssetMinAmount,feeAssetId,feeAmount) = {
317- let checkCaller = mustManager(i)
318- if ((checkCaller == checkCaller))
319- then [StringEntry(keyFactoryContract(), factoryV2Address), StringEntry(keyAssetsStoreContract(), assetsStoreAddress), StringEntry(keyEmissionContract(), emissionAddress), StringEntry(keyPriceAssetsMinAmount(), makeString(priceAssetsMinAmount, SEP)), IntegerEntry(keyAmountAssetMinAmount(), amountAssetMinAmount), StringEntry(keyFeeAssetId(), feeAssetId), IntegerEntry(keyFeeAmount(), feeAmount)]
320- else throw("Strict value is not equal to itself.")
321- }
322-
323-
324-
325-@Callable(i)
326-func create () = _create(i, VLTPOOL)
327-
328-
329-
330-@Callable(i)
331-func createStable () = {
332- let checkCaller = mustManager(i)
333- if ((checkCaller == checkCaller))
334- then _create(i, STBLPOOL)
335313 else throw("Strict value is not equal to itself.")
336314 }
337315
338316
339317
340318 @Callable(i)
341319 func activate (poolAddress,amountAssetId,amountAssetTicker,priceAssetId,priceAssetTicker,logo) = {
342320 let checks = [mustAdmin(i), if (isCreateCalled(amountAssetId, priceAssetId))
343321 then true
344322 else throwCreateNotCalled(), if ((value(getString(keyStatus(amountAssetId, priceAssetId))) == statusPending))
345323 then true
346324 else throwCanActivateOnlyPendingPool()]
347325 if ((checks == checks))
348326 then {
349- let poolTypeOption = getString(this, keyPoolType(amountAssetId, priceAssetId))
350- let activateNewPoolInv = invoke(factoryContract, "activateNewPool", [poolAddress, amountAssetId, priceAssetId, ((amountAssetTicker + priceAssetTicker) + "LP"), (((amountAssetTicker + "/") + priceAssetTicker) + " pool liquidity provider token"), 0, if ((poolTypeOption == unit))
351- then "VLTPOOL"
352- else value(poolTypeOption), logo], nil)
327+ let activateNewPoolInv = invoke(factoryContract, "activateNewPool", [poolAddress, amountAssetId, priceAssetId, ((amountAssetTicker + priceAssetTicker) + "LP"), (((amountAssetTicker + "/") + priceAssetTicker) + " pool liquidity provider token"), 0, "VLTPOOL", logo], nil)
353328 if ((activateNewPoolInv == activateNewPoolInv))
354329 then {
355330 let lpAssetId = match activateNewPoolInv {
356331 case id: String =>
357332 id
358333 case _ =>
359334 throwFactoryReturnedNotString()
360335 }
361336 if ((lpAssetId == lpAssetId))
362337 then {
363338 let beforePut = assetBalance(this, fromBase58String(lpAssetId))
364339 if ((beforePut == beforePut))
365340 then {
366341 let put = invoke(addressFromStringValue(poolAddress), "put", [0, false], [AttachedPayment(if ((amountAssetId == "WAVES"))
367342 then unit
368343 else fromBase58String(amountAssetId), value(getInteger(keyAmountAssetAmount(amountAssetId, priceAssetId)))), AttachedPayment(if ((priceAssetId == "WAVES"))
369344 then unit
370345 else fromBase58String(priceAssetId), value(getInteger(keyPriceAssetAmount(amountAssetId, priceAssetId))))])
371346 if ((put == put))
372347 then {
373348 let afterPut = assetBalance(this, fromBase58String(lpAssetId))
374349 if ((afterPut == afterPut))
375350 then {
376351 let user = value(addressFromString(value(getString(keyCreateCaller(amountAssetId, priceAssetId)))))
377352 let res = invoke(votingEmissionCandidateContract, "approve", [amountAssetId, priceAssetId], nil)
378353 if ((res == res))
379354 then [StringEntry(keyStatus(amountAssetId, priceAssetId), statusActive), ScriptTransfer(user, (afterPut - beforePut), fromBase58String(lpAssetId))]
380355 else throw("Strict value is not equal to itself.")
381356 }
382357 else throw("Strict value is not equal to itself.")
383358 }
384359 else throw("Strict value is not equal to itself.")
385360 }
386361 else throw("Strict value is not equal to itself.")
387362 }
388363 else throw("Strict value is not equal to itself.")
389364 }
390365 else throw("Strict value is not equal to itself.")
391366 }
392367 else throw("Strict value is not equal to itself.")
393368 }
394369
395370
396371
397372 @Callable(i)
398373 func setAdmins (adminPubKeys) = {
399374 let checkCaller = mustManager(i)
400375 if ((checkCaller == checkCaller))
401376 then [StringEntry(keyAdminPubKeys(), makeString(adminPubKeys, SEP))]
402377 else throw("Strict value is not equal to itself.")
403378 }
404379
405380
406381
407382 @Callable(i)
408383 func priceAssetsREADONLY () = $Tuple2(nil, stringOptionToList(getString(keyPriceAssets())))
409384
410385
411386
412387 @Callable(i)
413388 func statusREADONLY (amountAssetId,priceAssetId) = {
414389 let status = match getString(keyStatus(amountAssetId, priceAssetId)) {
415390 case s: String =>
416391 s
417392 case _ =>
418393 unit
419394 }
420395 $Tuple2(nil, status)
421396 }
422397
423398
424399 @Verifier(tx)
425400 func verify () = {
426401 let targetPublicKey = match managerPublicKeyOrUnit() {
427402 case pk: ByteVector =>
428403 pk
429404 case _: Unit =>
430405 tx.senderPublicKey
431406 case _ =>
432407 throw("Match error")
433408 }
434409 sigVerify(tx.bodyBytes, tx.proofs[0], targetPublicKey)
435410 }
436411

github/deemru/w8io/3ef1775 
123.22 ms