tx · 8y5h7h4jri46Uv6RpTgxvj46iKWaEV7gEabD5pStNato 3N9wLKKtDBphos7U3xzsPqgvJJ5zPQEU6pV: -0.01200000 Waves 2023.07.06 11:51 [2653832] smart account 3N9wLKKtDBphos7U3xzsPqgvJJ5zPQEU6pV > SELF 0.00000000 Waves
{ "type": 13, "id": "8y5h7h4jri46Uv6RpTgxvj46iKWaEV7gEabD5pStNato", "fee": 1200000, "feeAssetId": null, "timestamp": 1688633478803, "version": 1, "sender": "3N9wLKKtDBphos7U3xzsPqgvJJ5zPQEU6pV", "senderPublicKey": "GKX7DbVJVEtTB6ak3PXWHNPUhC3jym3ozbtZ7a36rGu6", "proofs": [ "2amQKrbaLoEJHXJ8D9nH1cRGLJwXaue6acq1pM7RVFjJbuJK12yk5fCyURpHPAKEc3wBeAn69VotZzKGeaFsf68q" ], "script": "base64:BgISCAISBgoEAgEBARIGCgQCAQEBLAADU0VQAgJfXwANQ09OVFJBQ1RfTkFNRQIPY2FsY3VsYXRvci5yaWRlAAZTQ0FMRTgAgMLXLwAHUEVORElORwIHUEVORElORwAIRklOSVNIRUQCCEZJTklTSEVEAAVXQVZFUwIFV0FWRVMBB3dyYXBFcnIBAXMJAKwCAgkArAICBQ1DT05UUkFDVF9OQU1FAgI6IAUBcwEIdGhyb3dFcnIBAXMJAAIBCQEHd3JhcEVycgEFAXMBD2Fzc2V0SWRUb1N0cmluZwEHYXNzZXRJZAQHJG1hdGNoMAUHYXNzZXRJZAMJAAECBQckbWF0Y2gwAgpCeXRlVmVjdG9yBAFiBQckbWF0Y2gwCQDYBAEFAWIDCQABAgUHJG1hdGNoMAIEVW5pdAUFV0FWRVMJAAIBAgtNYXRjaCBlcnJvcgEDYWJzAQFuAwkAZgIAAAUBbgkBAS0BBQFuBQFuARFrZXlGYWN0b3J5QWRkcmVzcwAJALkJAgkAzAgCAgIlcwkAzAgCAgdmYWN0b3J5BQNuaWwFA1NFUAETa2V5TWFuYWdlclB1YmxpY0tleQAJALkJAgkAzAgCAgIlcwkAzAgCAhBtYW5hZ2VyUHVibGljS2V5BQNuaWwFA1NFUAEMa2V5THBBc3NldElkAAkAuQkCCQDMCAICAiVzCQDMCAICCWxwQXNzZXRJZAUDbmlsBQNTRVABF2tleVByb3h5VHJlYXN1cnlBZGRyZXNzAAkAuQkCCQDMCAICAiVzCQDMCAICDXByb3h5VHJlYXN1cnkFA25pbAUDU0VQARZrZXlNYWluVHJlYXN1cnlBZGRyZXNzAAkAuQkCCQDMCAICAiVzCQDMCAICDG1haW5UcmVhc3VyeQUDbmlsBQNTRVABC2tleUludmVzdGVkAQdhc3NldElkCQC5CQIJAMwIAgIEJXMlcwkAzAgCAghpbnZlc3RlZAkAzAgCCQEPYXNzZXRJZFRvU3RyaW5nAQUHYXNzZXRJZAUDbmlsBQNTRVABCmtleURvbmF0ZWQBB2Fzc2V0SWQJALkJAgkAzAgCAgQlcyVzCQDMCAICB2RvbmF0ZWQJAMwIAgkBD2Fzc2V0SWRUb1N0cmluZwEFB2Fzc2V0SWQFA25pbAUDU0VQAQxrZXlBdmFpbGFibGUBC3VzZXJBZGRyZXNzCQC5CQIJAMwIAgIEJXMlcwkAzAgCAglhdmFpbGFibGUJAMwIAgkApQgBBQt1c2VyQWRkcmVzcwUDbmlsBQNTRVABCmtleUNsYWltZWQBC3VzZXJBZGRyZXNzCQC5CQIJAMwIAgIEJXMlcwkAzAgCAgdjbGFpbWVkCQDMCAIJAKUIAQULdXNlckFkZHJlc3MFA25pbAUDU0VQARBrZXlDdXJyZW50UGVyaW9kAAkAuQkCCQDMCAICAiVzCQDMCAICDWN1cnJlbnRQZXJpb2QFA25pbAUDU0VQARFrZXlQcmljZUZvclBlcmlvZAEGcGVyaW9kCQC5CQIJAMwIAgIEJXMlZAkAzAgCAgVwcmljZQkAzAgCCQCkAwEFBnBlcmlvZAUDbmlsBQNTRVABDmtleVN0YXJ0SGVpZ2h0AQZwZXJpb2QJALkJAgkAzAgCAgQlcyVkCQDMCAICC3N0YXJ0SGVpZ2h0CQDMCAIJAKQDAQUGcGVyaW9kBQNuaWwFA1NFUAEUa2V5UG93ZXJNYW5hZ2VyQm9udXMBBnBlcmlvZAkAuQkCCQDMCAICBCVzJWQJAMwIAgIRcG93ZXJNYW5hZ2VyQm9udXMJAMwIAgkApAMBBQZwZXJpb2QFA25pbAUDU0VQAQ9rZXlQZXJpb2RMZW5ndGgAAhAlc19fcGVyaW9kTGVuZ3RoARhrZXlCbG9ja1Byb2Nlc3NpbmdSZXdhcmQAAhklc19fYmxvY2tQcm9jZXNzaW5nUmV3YXJkARVrZXlOZXh0QmxvY2tUb1Byb2Nlc3MAAhYlc19fbmV4dEJsb2NrVG9Qcm9jZXNzARFrZXlCbG9ja1Byb2Nlc3NlZAEGaGVpZ2h0CQC5CQIJAMwIAgIEJXMlZAkAzAgCAg5ibG9ja1Byb2Nlc3NlZAkAzAgCCQCkAwEFBmhlaWdodAUDbmlsBQNTRVABDWtleVdpdGhkcmF3YWwAAg4lc19fd2l0aGRyYXdhbAEUa2V5V2l0aGRyYXdhbFJlcXVlc3QCC3VzZXJBZGRyZXNzBHR4SWQJALkJAgkAzAgCAgYlcyVzJXMJAMwIAgIKd2l0aGRyYXdhbAkAzAgCCQClCAEFC3VzZXJBZGRyZXNzCQDMCAIJANgEAQUEdHhJZAUDbmlsBQNTRVABFnZhbHVlV2l0aGRyYXdhbFJlcXVlc3QEBnN0YXR1cw1scEFzc2V0QW1vdW50DHRhcmdldFBlcmlvZAljbGFpbVR4SWQEDGNsYWltVHhJZFN0cgQHJG1hdGNoMAUJY2xhaW1UeElkAwkAAQIFByRtYXRjaDACCkJ5dGVWZWN0b3IEAWIFByRtYXRjaDAJANgEAQUBYgMJAAECBQckbWF0Y2gwAgRVbml0AgRTT09OCQACAQILTWF0Y2ggZXJyb3IJALkJAgkAzAgCAgglcyVkJWQlcwkAzAgCBQZzdGF0dXMJAMwIAgkApAMBBQ1scEFzc2V0QW1vdW50CQDMCAIJAKQDAQUMdGFyZ2V0UGVyaW9kCQDMCAIFDGNsYWltVHhJZFN0cgUDbmlsBQNTRVABIXBhcnNlV2l0aGRyYXdhbFJlcXVlc3RWYWx1ZU9yRmFpbAEBcwQFcGFydHMJALUJAgUBcwUDU0VQAwkAAAIJAJADAQUFcGFydHMABQQGc3RhdHVzCQCRAwIFBXBhcnRzAAEEDWxwQXNzZXRBbW91bnQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAtgkBCQCRAwIFBXBhcnRzAAIJAQd3cmFwRXJyAQIVaW52YWxpZCBscEFzc2V0QW1vdW50BAx0YXJnZXRQZXJpb2QJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAtgkBCQCRAwIFBXBhcnRzAAMJAQd3cmFwRXJyAQIUaW52YWxpZCB0YXJnZXRQZXJpb2QECWNsYWltVHhJZAkAkQMCBQVwYXJ0cwAECQCWCgQFBnN0YXR1cwUNbHBBc3NldEFtb3VudAUMdGFyZ2V0UGVyaW9kBQljbGFpbVR4SWQJAQh0aHJvd0VycgECIGludmFsaWQgd2l0aGRyYXdhbCByZXF1ZXN0IHZhbHVlABRmYWN0b3J5QWRkcmVzc09wdGlvbgQHJG1hdGNoMAkAnQgCBQR0aGlzCQERa2V5RmFjdG9yeUFkZHJlc3MAAwkAAQIFByRtYXRjaDACBlN0cmluZwQBcwUHJG1hdGNoMAkApggBBQFzAwkAAQIFByRtYXRjaDACBFVuaXQFBHVuaXQJAAIBAgtNYXRjaCBlcnJvcgAUZmFjdG9yeUFkZHJlc3NPckZhaWwJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgUUZmFjdG9yeUFkZHJlc3NPcHRpb24JAQd3cmFwRXJyAQIXaW52YWxpZCBmYWN0b3J5IGFkZHJlc3MAD2xwQXNzZXRJZE9wdGlvbgQHJG1hdGNoMAUUZmFjdG9yeUFkZHJlc3NPcHRpb24DCQABAgUHJG1hdGNoMAIHQWRkcmVzcwQBYQUHJG1hdGNoMAQHJG1hdGNoMQkAnQgCBQFhCQEMa2V5THBBc3NldElkAAMJAAECBQckbWF0Y2gxAgZTdHJpbmcEAXMFByRtYXRjaDEJANkEAQUBcwMJAAECBQckbWF0Y2gxAgRVbml0BQR1bml0CQACAQILTWF0Y2ggZXJyb3IDCQABAgUHJG1hdGNoMAIEVW5pdAUEdW5pdAkAAgECC01hdGNoIGVycm9yAA9scEFzc2V0SWRPckZhaWwJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgUPbHBBc3NldElkT3B0aW9uCQEHd3JhcEVycgECEWludmFsaWQgbHBBc3NldElkABpwcm94eVRyZWFzdXJ5QWRkcmVzc09wdGlvbgQHJG1hdGNoMAUUZmFjdG9yeUFkZHJlc3NPcHRpb24DCQABAgUHJG1hdGNoMAIHQWRkcmVzcwQBYQUHJG1hdGNoMAQHJG1hdGNoMQkAnQgCBQFhCQEXa2V5UHJveHlUcmVhc3VyeUFkZHJlc3MAAwkAAQIFByRtYXRjaDECBlN0cmluZwQBcwUHJG1hdGNoMQkApggBBQFzAwkAAQIFByRtYXRjaDECBFVuaXQFBHVuaXQJAAIBAgtNYXRjaCBlcnJvcgMJAAECBQckbWF0Y2gwAgRVbml0BQR1bml0CQACAQILTWF0Y2ggZXJyb3IAGnByb3h5VHJlYXN1cnlBZGRyZXNzT3JGYWlsCQETdmFsdWVPckVycm9yTWVzc2FnZQIFGnByb3h5VHJlYXN1cnlBZGRyZXNzT3B0aW9uCQEHd3JhcEVycgECHmludmFsaWQgcHJveHkgdHJlYXN1cnkgYWRkcmVzcwAZbWFpblRyZWFzdXJ5QWRkcmVzc09wdGlvbgQHJG1hdGNoMAUUZmFjdG9yeUFkZHJlc3NPcHRpb24DCQABAgUHJG1hdGNoMAIHQWRkcmVzcwQBYQUHJG1hdGNoMAQHJG1hdGNoMQkAnQgCBQFhCQEWa2V5TWFpblRyZWFzdXJ5QWRkcmVzcwADCQABAgUHJG1hdGNoMQIGU3RyaW5nBAFzBQckbWF0Y2gxCQCmCAEFAXMDCQABAgUHJG1hdGNoMQIEVW5pdAUEdW5pdAkAAgECC01hdGNoIGVycm9yAwkAAQIFByRtYXRjaDACBFVuaXQFBHVuaXQJAAIBAgtNYXRjaCBlcnJvcgAZbWFpblRyZWFzdXJ5QWRkcmVzc09yRmFpbAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCBRltYWluVHJlYXN1cnlBZGRyZXNzT3B0aW9uCQEHd3JhcEVycgECHWludmFsaWQgbWFpbiB0cmVhc3VyeSBhZGRyZXNzARlnZXRNYW5hZ2VyUHVibGljS2V5T3JVbml0AAQHJG1hdGNoMAUUZmFjdG9yeUFkZHJlc3NPcHRpb24DCQABAgUHJG1hdGNoMAIHQWRkcmVzcwQCZmEFByRtYXRjaDAEByRtYXRjaDEJAJ0IAgUCZmEJARNrZXlNYW5hZ2VyUHVibGljS2V5AAMJAAECBQckbWF0Y2gxAgZTdHJpbmcEA3B1YgUHJG1hdGNoMQkA2QQBBQNwdWIFBHVuaXQFBHVuaXQBC29ubHlBZGRyZXNzAgFpB2FkZHJlc3MDCQAAAggFAWkGY2FsbGVyBQdhZGRyZXNzBgkBCHRocm93RXJyAQIRcGVybWlzc2lvbiBkZW5pZWQBC29ubHlGYWN0b3J5AQFpCQELb25seUFkZHJlc3MCBQFpBRRmYWN0b3J5QWRkcmVzc09yRmFpbAEPcmV3YXJkRm9yT3B0aW9uAgdyZXdhcmRzBnRhcmdldAQBcwkAkAMBBQdyZXdhcmRzBAskdDA0NzM1NDc2MAkAkQMCBQdyZXdhcmRzAAAEAmEwCAULJHQwNDczNTQ3NjACXzEEAnIwCAULJHQwNDczNTQ3NjACXzIECyR0MDQ3NjM0Nzg4CQCRAwIFB3Jld2FyZHMAAQQCYTEIBQskdDA0NzYzNDc4OAJfMQQCcjEIBQskdDA0NzYzNDc4OAJfMgQLJHQwNDc5MTQ4MTYJAJEDAgUHcmV3YXJkcwACBAJhMggFCyR0MDQ3OTE0ODE2Al8xBAJyMggFCyR0MDQ3OTE0ODE2Al8yAwMJAGYCBQFzAAAJAAACBQJhMAUGdGFyZ2V0BwUCcjADAwkAZgIFAXMAAQkAAAIFAmExBQZ0YXJnZXQHBQJyMQMDCQBmAgUBcwACCQAAAgUCYTIFBnRhcmdldAcFAnIyBQR1bml0ARBmaW5hbGl6ZUlOVEVSTkFMAxhuZXdUcmVhc3VyeVZvbHVtZUluV2F2ZXMXcHdyTWFuYWdlcnNCb251c0luV2F2ZXMgdHJlYXN1cnlWb2x1bWVEaWZmQWxsb2NhdGlvbkNvZWYEEmRvbmF0ZWRXYXZlc0Ftb3VudAkBC3ZhbHVlT3JFbHNlAgkAmggCBRRmYWN0b3J5QWRkcmVzc09yRmFpbAkBCmtleURvbmF0ZWQBBQR1bml0AAAEE2ludmVzdGVkV2F2ZXNBbW91bnQJAQt2YWx1ZU9yRWxzZQIJAJoIAgUUZmFjdG9yeUFkZHJlc3NPckZhaWwJAQtrZXlJbnZlc3RlZAEFBHVuaXQAAAQcY3VycmVudFRyZWFzdXJ5Vm9sdW1lSW5XYXZlcwkAZAIFEmRvbmF0ZWRXYXZlc0Ftb3VudAUTaW52ZXN0ZWRXYXZlc0Ftb3VudAQJcHJvZml0UmF3CQBlAgUYbmV3VHJlYXN1cnlWb2x1bWVJbldhdmVzBRxjdXJyZW50VHJlYXN1cnlWb2x1bWVJbldhdmVzBBZwd3JNYW5hZ2Vyc0JvbnVzQW1vdW50AwMJAGcCBQlwcm9maXRSYXcFF3B3ck1hbmFnZXJzQm9udXNJbldhdmVzBgkAAAIFF3B3ck1hbmFnZXJzQm9udXNJbldhdmVzAAAFF3B3ck1hbmFnZXJzQm9udXNJbldhdmVzCQEIdGhyb3dFcnIBAh9wb3dlciBib251cyBpcyBtb3JlIHRoYW4gcHJvZml0BAZwcm9maXQJAGUCBQlwcm9maXRSYXcFFnB3ck1hbmFnZXJzQm9udXNBbW91bnQEDGRvbmF0aW9uUGFydAMJAGYCBRxjdXJyZW50VHJlYXN1cnlWb2x1bWVJbldhdmVzAAAJAGsDBRJkb25hdGVkV2F2ZXNBbW91bnQFBlNDQUxFOAUcY3VycmVudFRyZWFzdXJ5Vm9sdW1lSW5XYXZlcwAABBVkb25hdGlvblByb2ZpdFBhcnRSYXcJAGsDBQZwcm9maXQFDGRvbmF0aW9uUGFydAUGU0NBTEU4BBdpbnZlc3RtZW50UHJvZml0UGFydFJhdwkAZQIFBnByb2ZpdAUVZG9uYXRpb25Qcm9maXRQYXJ0UmF3BCN0cmVhc3VyeVZvbHVtZURpZmZBbGxvY2F0aW9uQ29lZkFicwkBA2FicwEFIHRyZWFzdXJ5Vm9sdW1lRGlmZkFsbG9jYXRpb25Db2VmBBBhbW91bnRUb0RvbmF0aW9uCQBrAwUXaW52ZXN0bWVudFByb2ZpdFBhcnRSYXcDCQBmAgAABSB0cmVhc3VyeVZvbHVtZURpZmZBbGxvY2F0aW9uQ29lZgUjdHJlYXN1cnlWb2x1bWVEaWZmQWxsb2NhdGlvbkNvZWZBYnMAAAUGU0NBTEU4BBJhbW91bnRUb0ludmVzdG1lbnQJAGsDBRVkb25hdGlvblByb2ZpdFBhcnRSYXcDCQBmAgUgdHJlYXN1cnlWb2x1bWVEaWZmQWxsb2NhdGlvbkNvZWYAAAUjdHJlYXN1cnlWb2x1bWVEaWZmQWxsb2NhdGlvbkNvZWZBYnMAAAUGU0NBTEU4BBJkb25hdGlvblByb2ZpdFBhcnQJAGQCCQBlAgUVZG9uYXRpb25Qcm9maXRQYXJ0UmF3BRJhbW91bnRUb0ludmVzdG1lbnQFEGFtb3VudFRvRG9uYXRpb24EFGludmVzdG1lbnRQcm9maXRQYXJ0CQBkAgkAZQIFF2ludmVzdG1lbnRQcm9maXRQYXJ0UmF3BRBhbW91bnRUb0RvbmF0aW9uBRJhbW91bnRUb0ludmVzdG1lbnQEGGRvbmF0ZWRXYXZlc0Ftb3VudE5ld1JhdwkAZAIFEmRvbmF0ZWRXYXZlc0Ftb3VudAUSZG9uYXRpb25Qcm9maXRQYXJ0BBlpbnZlc3RlZFdhdmVzQW1vdW50TmV3UmF3CQBkAgUTaW52ZXN0ZWRXYXZlc0Ftb3VudAUUaW52ZXN0bWVudFByb2ZpdFBhcnQED2RvbmF0ZWRQYXJ0RGVidAkAlwMBCQDMCAIAAAkAzAgCBRhkb25hdGVkV2F2ZXNBbW91bnROZXdSYXcFA25pbAQQaW52ZXN0ZWRQYXJ0RGVidAkAlwMBCQDMCAIAAAkAzAgCBRlpbnZlc3RlZFdhdmVzQW1vdW50TmV3UmF3BQNuaWwEFWRvbmF0ZWRXYXZlc0Ftb3VudE5ldwkAZAIJAJYDAQkAzAgCAAAJAMwIAgUYZG9uYXRlZFdhdmVzQW1vdW50TmV3UmF3BQNuaWwFEGludmVzdGVkUGFydERlYnQEFmludmVzdGVkV2F2ZXNBbW91bnROZXcJAGQCCQCWAwEJAMwIAgAACQDMCAIFGWludmVzdGVkV2F2ZXNBbW91bnROZXdSYXcFA25pbAUPZG9uYXRlZFBhcnREZWJ0BA9scEFzc2V0UXVhbnRpdHkICQETdmFsdWVPckVycm9yTWVzc2FnZQIJAOwHAQUPbHBBc3NldElkT3JGYWlsCQEHd3JhcEVycgECFGludmFsaWQgbHBBc3NldCBpbmZvCHF1YW50aXR5BAhuZXdQcmljZQkAawMFFmludmVzdGVkV2F2ZXNBbW91bnROZXcFBlNDQUxFOAUPbHBBc3NldFF1YW50aXR5BBNjaGVja0lmUHJpY2VOb3RaZXJvAwkBAiE9AgUIbmV3UHJpY2UAAAYJAQh0aHJvd0VycgECFExQIHByaWNlIGNhbm5vdCBiZSAwAwkAAAIFE2NoZWNrSWZQcmljZU5vdFplcm8FE2NoZWNrSWZQcmljZU5vdFplcm8EE2xwQXNzZXRBbW91bnRUb0J1cm4JAQt2YWx1ZU9yRWxzZQIJAJoIAgUUZmFjdG9yeUFkZHJlc3NPckZhaWwJAQ1rZXlXaXRoZHJhd2FsAAAABBBwYXltZW50QW1vdW50TWluCQCWAwEJAMwIAgAACQDMCAIJAGsDBRNscEFzc2V0QW1vdW50VG9CdXJuBQhuZXdQcmljZQUGU0NBTEU4BQNuaWwEGGZpbmFsSW52ZXN0ZWRXYXZlc0Ftb3VudAkAZQIFFmludmVzdGVkV2F2ZXNBbW91bnROZXcFEHBheW1lbnRBbW91bnRNaW4EFGxwQXNzZXRGaW5hbFF1YW50aXR5CQBlAgUPbHBBc3NldFF1YW50aXR5BRNscEFzc2V0QW1vdW50VG9CdXJuCQCYCgYFEHBheW1lbnRBbW91bnRNaW4FGGZpbmFsSW52ZXN0ZWRXYXZlc0Ftb3VudAUVZG9uYXRlZFdhdmVzQW1vdW50TmV3BQhuZXdQcmljZQUTbHBBc3NldEFtb3VudFRvQnVybgUUbHBBc3NldEZpbmFsUXVhbnRpdHkJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4CAWkBCGZpbmFsaXplBBB1c2VyQWRkcmVzc0J5dGVzGG5ld1RyZWFzdXJ5Vm9sdW1lSW5XYXZlcxdwd3JNYW5hZ2Vyc0JvbnVzSW5XYXZlcyB0cmVhc3VyeVZvbHVtZURpZmZBbGxvY2F0aW9uQ29lZgQLY2hlY2tDYWxsZXIJAQtvbmx5RmFjdG9yeQEFAWkDCQAAAgULY2hlY2tDYWxsZXIFC2NoZWNrQ2FsbGVyBBNjdXJyZW50UGVyaW9kT3JGYWlsCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJoIAgUUZmFjdG9yeUFkZHJlc3NPckZhaWwJARBrZXlDdXJyZW50UGVyaW9kAAkBB3dyYXBFcnIBAg5pbnZhbGlkIHBlcmlvZAQMcGVyaW9kTGVuZ3RoCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJoIAgUUZmFjdG9yeUFkZHJlc3NPckZhaWwJAQ9rZXlQZXJpb2RMZW5ndGgACQEHd3JhcEVycgECFWludmFsaWQgcGVyaW9kIGxlbmd0aAQSY3VycmVudFN0YXJ0SGVpZ2h0CQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJoIAgUUZmFjdG9yeUFkZHJlc3NPckZhaWwJAQ5rZXlTdGFydEhlaWdodAEFE2N1cnJlbnRQZXJpb2RPckZhaWwJAQd3cmFwRXJyAQIUaW52YWxpZCBzdGFydCBoZWlnaHQEEmN1cnJlbnRQcmljZU9yRmFpbAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCaCAIFFGZhY3RvcnlBZGRyZXNzT3JGYWlsCQERa2V5UHJpY2VGb3JQZXJpb2QBBRNjdXJyZW50UGVyaW9kT3JGYWlsCQEHd3JhcEVycgECDWludmFsaWQgcHJpY2UEEm5leHRCbG9ja1RvUHJvY2VzcwkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCaCAIFFGZhY3RvcnlBZGRyZXNzT3JGYWlsCQEVa2V5TmV4dEJsb2NrVG9Qcm9jZXNzAAkBB3dyYXBFcnIBAh1pbnZhbGlkIG5leHQgYmxvY2sgdG8gcHJvY2VzcwQPcGVyaW9kRW5kSGVpZ2h0CQBlAgkAZAIFEmN1cnJlbnRTdGFydEhlaWdodAUMcGVyaW9kTGVuZ3RoAAEEBmNoZWNrcwkAzAgCAwkAAAIIBQFpDG9yaWdpbkNhbGxlcgUZbWFpblRyZWFzdXJ5QWRkcmVzc09yRmFpbAYJAQh0aHJvd0VycgECEXBlcm1pc3Npb24gZGVuaWVkCQDMCAIDCQBmAgUSbmV4dEJsb2NrVG9Qcm9jZXNzBQ9wZXJpb2RFbmRIZWlnaHQGCQEIdGhyb3dFcnIBAhJ1bnByb2Nlc3NlZCBibG9ja3MJAMwIAgMJAGcCBRhuZXdUcmVhc3VyeVZvbHVtZUluV2F2ZXMAAAYJAQh0aHJvd0VycgECG2ludmFsaWQgbmV3IHRyZWFzdXJ5IHZvbHVtZQkAzAgCAwkAZwIFF3B3ck1hbmFnZXJzQm9udXNJbldhdmVzAAAGCQEIdGhyb3dFcnIBAhppbnZhbGlkIFBXUiBtYW5hZ2VycyBib251cwkAzAgCAwMJAGcCBSB0cmVhc3VyeVZvbHVtZURpZmZBbGxvY2F0aW9uQ29lZgkBAS0BBQZTQ0FMRTgJAGcCBQZTQ0FMRTgFIHRyZWFzdXJ5Vm9sdW1lRGlmZkFsbG9jYXRpb25Db2VmBwYJAQh0aHJvd0VycgECM2ludmFsaWQgdHJlYXN1cnkgdm9sdW1lIGRpZmYgYWxsb2NhdGlvbiBjb2VmZmljaWVudAUDbmlsAwkAAAIFBmNoZWNrcwUGY2hlY2tzBAskdDA5NTA3OTc2OAkBEGZpbmFsaXplSU5URVJOQUwDBRhuZXdUcmVhc3VyeVZvbHVtZUluV2F2ZXMFF3B3ck1hbmFnZXJzQm9udXNJbldhdmVzBSB0cmVhc3VyeVZvbHVtZURpZmZBbGxvY2F0aW9uQ29lZgQQcGF5bWVudEFtb3VudE1pbggFCyR0MDk1MDc5NzY4Al8xBBhmaW5hbEludmVzdGVkV2F2ZXNBbW91bnQIBQskdDA5NTA3OTc2OAJfMgQVZG9uYXRlZFdhdmVzQW1vdW50TmV3CAULJHQwOTUwNzk3NjgCXzMECG5ld1ByaWNlCAULJHQwOTUwNzk3NjgCXzQEE2xwQXNzZXRBbW91bnRUb0J1cm4IBQskdDA5NTA3OTc2OAJfNQQUbHBBc3NldEZpbmFsUXVhbnRpdHkIBQskdDA5NTA3OTc2OAJfNgQJbmV3UGVyaW9kCQBkAgUTY3VycmVudFBlcmlvZE9yRmFpbAABBA1wYXltZW50T3B0aW9uAwkAZgIJAJADAQgFAWkIcGF5bWVudHMAAAkAkQMCCAUBaQhwYXltZW50cwAABQR1bml0BA1wYXltZW50QW1vdW50CAkBBXZhbHVlAQUNcGF5bWVudE9wdGlvbgZhbW91bnQEDnBheW1lbnRBc3NldElkCAkBBXZhbHVlAQUNcGF5bWVudE9wdGlvbgdhc3NldElkBAxjaGVja1BheW1lbnQDAwkAAAIFEHBheW1lbnRBbW91bnRNaW4AAAYDAwkBAiE9AgUNcGF5bWVudE9wdGlvbgUEdW5pdAkAAAIFDnBheW1lbnRBc3NldElkBQR1bml0BwkAZwIFDXBheW1lbnRBbW91bnQFEHBheW1lbnRBbW91bnRNaW4HBgkBCHRocm93RXJyAQkArAICAiZpbnZhbGlkIHBheW1lbnRzLCBwYXltZW50IGFtb3VudCBtaW46IAkApAMBBRBwYXltZW50QW1vdW50TWluAwkAAAIFDGNoZWNrUGF5bWVudAUMY2hlY2tQYXltZW50BAdhY3Rpb25zAwkBAiE9AgUNcGF5bWVudE9wdGlvbgUEdW5pdAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDBRRmYWN0b3J5QWRkcmVzc09yRmFpbAUNcGF5bWVudEFtb3VudAUOcGF5bWVudEFzc2V0SWQFA25pbAUDbmlsBA5mYWN0b3J5QWN0aW9ucwkAzAgCCQD8BwQFFGZhY3RvcnlBZGRyZXNzT3JGYWlsAgxpbnRlZ2VyRW50cnkJAMwIAgkBFGtleVBvd2VyTWFuYWdlckJvbnVzAQUTY3VycmVudFBlcmlvZE9yRmFpbAkAzAgCBRdwd3JNYW5hZ2Vyc0JvbnVzSW5XYXZlcwUDbmlsBQNuaWwJAMwIAgkA/AcEBRRmYWN0b3J5QWRkcmVzc09yRmFpbAIMaW50ZWdlckVudHJ5CQDMCAIJARBrZXlDdXJyZW50UGVyaW9kAAkAzAgCBQluZXdQZXJpb2QFA25pbAUDbmlsCQDMCAIJAPwHBAUUZmFjdG9yeUFkZHJlc3NPckZhaWwCDGludGVnZXJFbnRyeQkAzAgCCQERa2V5UHJpY2VGb3JQZXJpb2QBBQluZXdQZXJpb2QJAMwIAgUIbmV3UHJpY2UFA25pbAUDbmlsCQDMCAIJAPwHBAUUZmFjdG9yeUFkZHJlc3NPckZhaWwCDGludGVnZXJFbnRyeQkAzAgCCQEOa2V5U3RhcnRIZWlnaHQBBQluZXdQZXJpb2QJAMwIAgkAZAIFD3BlcmlvZEVuZEhlaWdodAABBQNuaWwFA25pbAkAzAgCCQD8BwQFFGZhY3RvcnlBZGRyZXNzT3JGYWlsAgRidXJuCQDMCAIFE2xwQXNzZXRBbW91bnRUb0J1cm4FA25pbAUDbmlsCQDMCAIJAPwHBAUUZmFjdG9yeUFkZHJlc3NPckZhaWwCDGludGVnZXJFbnRyeQkAzAgCCQENa2V5V2l0aGRyYXdhbAAJAMwIAgAABQNuaWwFA25pbAkAzAgCCQD8BwQFFGZhY3RvcnlBZGRyZXNzT3JGYWlsAgxpbnRlZ2VyRW50cnkJAMwIAgkBC2tleUludmVzdGVkAQUEdW5pdAkAzAgCBRhmaW5hbEludmVzdGVkV2F2ZXNBbW91bnQFA25pbAUDbmlsCQDMCAIJAPwHBAUUZmFjdG9yeUFkZHJlc3NPckZhaWwCDGludGVnZXJFbnRyeQkAzAgCCQEKa2V5RG9uYXRlZAEFBHVuaXQJAMwIAgUVZG9uYXRlZFdhdmVzQW1vdW50TmV3BQNuaWwFA25pbAUDbmlsCQCUCgIFB2FjdGlvbnMFDmZhY3RvcnlBY3Rpb25zCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBEGZpbmFsaXplUkVBRE9OTFkEEHVzZXJBZGRyZXNzQnl0ZXMYbmV3VHJlYXN1cnlWb2x1bWVJbldhdmVzF3B3ck1hbmFnZXJzQm9udXNJbldhdmVzIHRyZWFzdXJ5Vm9sdW1lRGlmZkFsbG9jYXRpb25Db2VmBBNjdXJyZW50UGVyaW9kT3JGYWlsCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJoIAgUUZmFjdG9yeUFkZHJlc3NPckZhaWwJARBrZXlDdXJyZW50UGVyaW9kAAkBB3dyYXBFcnIBAg5pbnZhbGlkIHBlcmlvZAQMcGVyaW9kTGVuZ3RoCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJoIAgUUZmFjdG9yeUFkZHJlc3NPckZhaWwJAQ9rZXlQZXJpb2RMZW5ndGgACQEHd3JhcEVycgECFWludmFsaWQgcGVyaW9kIGxlbmd0aAQSY3VycmVudFN0YXJ0SGVpZ2h0CQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJoIAgUUZmFjdG9yeUFkZHJlc3NPckZhaWwJAQ5rZXlTdGFydEhlaWdodAEFE2N1cnJlbnRQZXJpb2RPckZhaWwJAQd3cmFwRXJyAQIUaW52YWxpZCBzdGFydCBoZWlnaHQEEmN1cnJlbnRQcmljZU9yRmFpbAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCaCAIFFGZhY3RvcnlBZGRyZXNzT3JGYWlsCQERa2V5UHJpY2VGb3JQZXJpb2QBBRNjdXJyZW50UGVyaW9kT3JGYWlsCQEHd3JhcEVycgECDWludmFsaWQgcHJpY2UEEm5leHRCbG9ja1RvUHJvY2VzcwkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCaCAIFFGZhY3RvcnlBZGRyZXNzT3JGYWlsCQEVa2V5TmV4dEJsb2NrVG9Qcm9jZXNzAAkBB3dyYXBFcnIBAh1pbnZhbGlkIG5leHQgYmxvY2sgdG8gcHJvY2VzcwQPcGVyaW9kRW5kSGVpZ2h0CQBlAgkAZAIFEmN1cnJlbnRTdGFydEhlaWdodAUMcGVyaW9kTGVuZ3RoAAEEBmNoZWNrcwkAzAgCAwkAZgIFEm5leHRCbG9ja1RvUHJvY2VzcwUPcGVyaW9kRW5kSGVpZ2h0BgkBCHRocm93RXJyAQISdW5wcm9jZXNzZWQgYmxvY2tzCQDMCAIDCQBnAgUYbmV3VHJlYXN1cnlWb2x1bWVJbldhdmVzAAAGCQEIdGhyb3dFcnIBAhtpbnZhbGlkIG5ldyB0cmVhc3VyeSB2b2x1bWUJAMwIAgMJAGcCBRdwd3JNYW5hZ2Vyc0JvbnVzSW5XYXZlcwAABgkBCHRocm93RXJyAQIaaW52YWxpZCBQV1IgbWFuYWdlcnMgYm9udXMJAMwIAgMDCQBnAgUgdHJlYXN1cnlWb2x1bWVEaWZmQWxsb2NhdGlvbkNvZWYJAQEtAQUGU0NBTEU4CQBnAgUGU0NBTEU4BSB0cmVhc3VyeVZvbHVtZURpZmZBbGxvY2F0aW9uQ29lZgcGCQEIdGhyb3dFcnIBAjNpbnZhbGlkIHRyZWFzdXJ5IHZvbHVtZSBkaWZmIGFsbG9jYXRpb24gY29lZmZpY2llbnQFA25pbAMJAAACBQZjaGVja3MFBmNoZWNrcwkAlAoCBQNuaWwJARBmaW5hbGl6ZUlOVEVSTkFMAwUYbmV3VHJlYXN1cnlWb2x1bWVJbldhdmVzBRdwd3JNYW5hZ2Vyc0JvbnVzSW5XYXZlcwUgdHJlYXN1cnlWb2x1bWVEaWZmQWxsb2NhdGlvbkNvZWYJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4AoEFgUw==", "chainId": 84, "height": 2653832, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: FmL5cQAV3bZMxYNPbfDPzbJGCiv9yQ9ktyTGvN34yqqc Next: none Diff:
Old | New | Differences | |
---|---|---|---|
330 | 330 | else i("invalid treasury volume diff allocation coefficient")] | |
331 | 331 | if ((bk == bk)) | |
332 | 332 | then { | |
333 | - | let aB = valueOrElse(getInteger(V, v(unit)), 0) | |
334 | - | let aC = valueOrElse(getInteger(V, u(unit)), 0) | |
335 | - | let aD = (aB + aC) | |
336 | - | let aE = (ay - aD) | |
337 | - | let aF = if (if ((aE > 0)) | |
338 | - | then (aE >= az) | |
339 | - | else false) | |
340 | - | then az | |
341 | - | else i("power bonus is more than profit") | |
342 | - | let aG = (aE - aF) | |
343 | - | let aH = if ((aD > 0)) | |
344 | - | then fraction(aB, c, aD) | |
345 | - | else 0 | |
346 | - | let aI = fraction(aG, aH, c) | |
347 | - | let aJ = (aG - aI) | |
348 | - | let aK = n(aA) | |
349 | - | let aL = fraction(aJ, if ((0 > aA)) | |
350 | - | then aK | |
351 | - | else 0, c) | |
352 | - | let aM = fraction(aI, if ((aA > 0)) | |
353 | - | then aK | |
354 | - | else 0, c) | |
355 | - | let aN = ((aI - aM) + aL) | |
356 | - | let aO = ((aJ - aL) + aM) | |
357 | - | let aP = (aB + aN) | |
358 | - | let aQ = (aC + aO) | |
359 | - | let aR = min([0, aP]) | |
360 | - | let aS = min([0, aQ]) | |
361 | - | let aT = (max([0, aP]) + aS) | |
362 | - | let aU = (max([0, aQ]) + aR) | |
363 | - | let bl = (be + 1) | |
364 | - | let aV = valueOrErrorMessage(assetInfo(Z), g("invalid lpAsset info")).quantity | |
365 | - | let aW = fraction(aU, c, aV) | |
366 | - | let aX = if ((aW != 0)) | |
333 | + | let bl = ax(ay, az, aA) | |
334 | + | let aZ = bl._1 | |
335 | + | let ba = bl._2 | |
336 | + | let aT = bl._3 | |
337 | + | let aW = bl._4 | |
338 | + | let aY = bl._5 | |
339 | + | let bb = bl._6 | |
340 | + | let bm = (be + 1) | |
341 | + | let bn = if ((size(ai.payments) > 0)) | |
342 | + | then ai.payments[0] | |
343 | + | else unit | |
344 | + | let bo = value(bn).amount | |
345 | + | let bp = value(bn).assetId | |
346 | + | let bq = if (if ((aZ == 0)) | |
367 | 347 | then true | |
368 | - | else i("LP price cannot be 0") | |
369 | - | if ((aX == aX)) | |
348 | + | else if (if ((bn != unit)) | |
349 | + | then (bp == unit) | |
350 | + | else false) | |
351 | + | then (bo >= aZ) | |
352 | + | else false) | |
353 | + | then true | |
354 | + | else i(("invalid payments, payment amount min: " + toString(aZ))) | |
355 | + | if ((bq == bq)) | |
370 | 356 | then { | |
371 | - | let aY = valueOrElse(getInteger(V, J()), 0) | |
372 | - | let aZ = max([0, fraction(aY, aW, c)]) | |
373 | - | let bm = if ((size(ai.payments) > 0)) | |
374 | - | then ai.payments[0] | |
375 | - | else unit | |
376 | - | let bn = value(bm).amount | |
377 | - | let bo = value(bm).assetId | |
378 | - | let bp = if (if ((aZ == 0)) | |
379 | - | then true | |
380 | - | else if (if ((bm != unit)) | |
381 | - | then (bo == unit) | |
382 | - | else false) | |
383 | - | then (bn >= aZ) | |
384 | - | else false) | |
385 | - | then true | |
386 | - | else i(("invalid payments, payment amount min: " + toString(aZ))) | |
387 | - | if ((bp == bp)) | |
388 | - | then { | |
389 | - | let bq = if ((bm != unit)) | |
390 | - | then [ScriptTransfer(V, bn, bo)] | |
391 | - | else nil | |
392 | - | let br = [invoke(V, "integerEntry", [D(be), aF], nil), invoke(V, "integerEntry", [z(), bl], nil), invoke(V, "integerEntry", [A(bl), aW], nil), invoke(V, "integerEntry", [C(bl), (bj + 1)], nil), invoke(V, "burn", [aY], nil), invoke(V, "integerEntry", [J(), 0], nil), invoke(V, "integerEntry", [u(unit), (aU - aZ)], nil), invoke(V, "integerEntry", [v(unit), aT], nil)] | |
393 | - | $Tuple2(bq, br) | |
394 | - | } | |
395 | - | else throw("Strict value is not equal to itself.") | |
357 | + | let br = if ((bn != unit)) | |
358 | + | then [ScriptTransfer(V, bo, bp)] | |
359 | + | else nil | |
360 | + | let bs = [invoke(V, "integerEntry", [D(be), az], nil), invoke(V, "integerEntry", [z(), bm], nil), invoke(V, "integerEntry", [A(bm), aW], nil), invoke(V, "integerEntry", [C(bm), (bj + 1)], nil), invoke(V, "burn", [aY], nil), invoke(V, "integerEntry", [J(), 0], nil), invoke(V, "integerEntry", [u(unit), ba], nil), invoke(V, "integerEntry", [v(unit), aT], nil)] | |
361 | + | $Tuple2(br, bs) | |
396 | 362 | } | |
397 | 363 | else throw("Strict value is not equal to itself.") | |
398 | 364 | } | |
402 | 368 | } | |
403 | 369 | ||
404 | 370 | ||
371 | + | ||
372 | + | @Callable(ai) | |
373 | + | func finalizeREADONLY (bc,ay,az,aA) = { | |
374 | + | let be = valueOrErrorMessage(getInteger(V, z()), g("invalid period")) | |
375 | + | let bf = valueOrErrorMessage(getInteger(V, E()), g("invalid period length")) | |
376 | + | let bg = valueOrErrorMessage(getInteger(V, C(be)), g("invalid start height")) | |
377 | + | let bh = valueOrErrorMessage(getInteger(V, A(be)), g("invalid price")) | |
378 | + | let bi = valueOrErrorMessage(getInteger(V, G()), g("invalid next block to process")) | |
379 | + | let bj = ((bg + bf) - 1) | |
380 | + | let bk = [if ((bi > bj)) | |
381 | + | then true | |
382 | + | else i("unprocessed blocks"), if ((ay >= 0)) | |
383 | + | then true | |
384 | + | else i("invalid new treasury volume"), if ((az >= 0)) | |
385 | + | then true | |
386 | + | else i("invalid PWR managers bonus"), if (if ((aA >= -(c))) | |
387 | + | then (c >= aA) | |
388 | + | else false) | |
389 | + | then true | |
390 | + | else i("invalid treasury volume diff allocation coefficient")] | |
391 | + | if ((bk == bk)) | |
392 | + | then $Tuple2(nil, ax(ay, az, aA)) | |
393 | + | else throw("Strict value is not equal to itself.") | |
394 | + | } | |
395 | + | ||
396 | + |
Old | New | Differences | |
---|---|---|---|
1 | 1 | {-# STDLIB_VERSION 6 #-} | |
2 | 2 | {-# SCRIPT_TYPE ACCOUNT #-} | |
3 | 3 | {-# CONTENT_TYPE DAPP #-} | |
4 | 4 | let a = "__" | |
5 | 5 | ||
6 | 6 | let b = "calculator.ride" | |
7 | 7 | ||
8 | 8 | let c = 100000000 | |
9 | 9 | ||
10 | 10 | let d = "PENDING" | |
11 | 11 | ||
12 | 12 | let e = "FINISHED" | |
13 | 13 | ||
14 | 14 | let f = "WAVES" | |
15 | 15 | ||
16 | 16 | func g (h) = ((b + ": ") + h) | |
17 | 17 | ||
18 | 18 | ||
19 | 19 | func i (h) = throw(g(h)) | |
20 | 20 | ||
21 | 21 | ||
22 | 22 | func j (k) = { | |
23 | 23 | let l = k | |
24 | 24 | if ($isInstanceOf(l, "ByteVector")) | |
25 | 25 | then { | |
26 | 26 | let m = l | |
27 | 27 | toBase58String(m) | |
28 | 28 | } | |
29 | 29 | else if ($isInstanceOf(l, "Unit")) | |
30 | 30 | then f | |
31 | 31 | else throw("Match error") | |
32 | 32 | } | |
33 | 33 | ||
34 | 34 | ||
35 | 35 | func n (o) = if ((0 > o)) | |
36 | 36 | then -(o) | |
37 | 37 | else o | |
38 | 38 | ||
39 | 39 | ||
40 | 40 | func p () = makeString(["%s", "factory"], a) | |
41 | 41 | ||
42 | 42 | ||
43 | 43 | func q () = makeString(["%s", "managerPublicKey"], a) | |
44 | 44 | ||
45 | 45 | ||
46 | 46 | func r () = makeString(["%s", "lpAssetId"], a) | |
47 | 47 | ||
48 | 48 | ||
49 | 49 | func s () = makeString(["%s", "proxyTreasury"], a) | |
50 | 50 | ||
51 | 51 | ||
52 | 52 | func t () = makeString(["%s", "mainTreasury"], a) | |
53 | 53 | ||
54 | 54 | ||
55 | 55 | func u (k) = makeString(["%s%s", "invested", j(k)], a) | |
56 | 56 | ||
57 | 57 | ||
58 | 58 | func v (k) = makeString(["%s%s", "donated", j(k)], a) | |
59 | 59 | ||
60 | 60 | ||
61 | 61 | func w (x) = makeString(["%s%s", "available", toString(x)], a) | |
62 | 62 | ||
63 | 63 | ||
64 | 64 | func y (x) = makeString(["%s%s", "claimed", toString(x)], a) | |
65 | 65 | ||
66 | 66 | ||
67 | 67 | func z () = makeString(["%s", "currentPeriod"], a) | |
68 | 68 | ||
69 | 69 | ||
70 | 70 | func A (B) = makeString(["%s%d", "price", toString(B)], a) | |
71 | 71 | ||
72 | 72 | ||
73 | 73 | func C (B) = makeString(["%s%d", "startHeight", toString(B)], a) | |
74 | 74 | ||
75 | 75 | ||
76 | 76 | func D (B) = makeString(["%s%d", "powerManagerBonus", toString(B)], a) | |
77 | 77 | ||
78 | 78 | ||
79 | 79 | func E () = "%s__periodLength" | |
80 | 80 | ||
81 | 81 | ||
82 | 82 | func F () = "%s__blockProcessingReward" | |
83 | 83 | ||
84 | 84 | ||
85 | 85 | func G () = "%s__nextBlockToProcess" | |
86 | 86 | ||
87 | 87 | ||
88 | 88 | func H (I) = makeString(["%s%d", "blockProcessed", toString(I)], a) | |
89 | 89 | ||
90 | 90 | ||
91 | 91 | func J () = "%s__withdrawal" | |
92 | 92 | ||
93 | 93 | ||
94 | 94 | func K (x,L) = makeString(["%s%s%s", "withdrawal", toString(x), toBase58String(L)], a) | |
95 | 95 | ||
96 | 96 | ||
97 | 97 | func M (N,O,P,Q) = { | |
98 | 98 | let R = { | |
99 | 99 | let l = Q | |
100 | 100 | if ($isInstanceOf(l, "ByteVector")) | |
101 | 101 | then { | |
102 | 102 | let m = l | |
103 | 103 | toBase58String(m) | |
104 | 104 | } | |
105 | 105 | else if ($isInstanceOf(l, "Unit")) | |
106 | 106 | then "SOON" | |
107 | 107 | else throw("Match error") | |
108 | 108 | } | |
109 | 109 | makeString(["%s%d%d%s", N, toString(O), toString(P), R], a) | |
110 | 110 | } | |
111 | 111 | ||
112 | 112 | ||
113 | 113 | func S (h) = { | |
114 | 114 | let T = split(h, a) | |
115 | 115 | if ((size(T) == 5)) | |
116 | 116 | then { | |
117 | 117 | let N = T[1] | |
118 | 118 | let O = valueOrErrorMessage(parseInt(T[2]), g("invalid lpAssetAmount")) | |
119 | 119 | let P = valueOrErrorMessage(parseInt(T[3]), g("invalid targetPeriod")) | |
120 | 120 | let Q = T[4] | |
121 | 121 | $Tuple4(N, O, P, Q) | |
122 | 122 | } | |
123 | 123 | else i("invalid withdrawal request value") | |
124 | 124 | } | |
125 | 125 | ||
126 | 126 | ||
127 | 127 | let U = { | |
128 | 128 | let l = getString(this, p()) | |
129 | 129 | if ($isInstanceOf(l, "String")) | |
130 | 130 | then { | |
131 | 131 | let h = l | |
132 | 132 | addressFromString(h) | |
133 | 133 | } | |
134 | 134 | else if ($isInstanceOf(l, "Unit")) | |
135 | 135 | then unit | |
136 | 136 | else throw("Match error") | |
137 | 137 | } | |
138 | 138 | ||
139 | 139 | let V = valueOrErrorMessage(U, g("invalid factory address")) | |
140 | 140 | ||
141 | 141 | let W = { | |
142 | 142 | let l = U | |
143 | 143 | if ($isInstanceOf(l, "Address")) | |
144 | 144 | then { | |
145 | 145 | let X = l | |
146 | 146 | let Y = getString(X, r()) | |
147 | 147 | if ($isInstanceOf(Y, "String")) | |
148 | 148 | then { | |
149 | 149 | let h = Y | |
150 | 150 | fromBase58String(h) | |
151 | 151 | } | |
152 | 152 | else if ($isInstanceOf(Y, "Unit")) | |
153 | 153 | then unit | |
154 | 154 | else throw("Match error") | |
155 | 155 | } | |
156 | 156 | else if ($isInstanceOf(l, "Unit")) | |
157 | 157 | then unit | |
158 | 158 | else throw("Match error") | |
159 | 159 | } | |
160 | 160 | ||
161 | 161 | let Z = valueOrErrorMessage(W, g("invalid lpAssetId")) | |
162 | 162 | ||
163 | 163 | let aa = { | |
164 | 164 | let l = U | |
165 | 165 | if ($isInstanceOf(l, "Address")) | |
166 | 166 | then { | |
167 | 167 | let X = l | |
168 | 168 | let Y = getString(X, s()) | |
169 | 169 | if ($isInstanceOf(Y, "String")) | |
170 | 170 | then { | |
171 | 171 | let h = Y | |
172 | 172 | addressFromString(h) | |
173 | 173 | } | |
174 | 174 | else if ($isInstanceOf(Y, "Unit")) | |
175 | 175 | then unit | |
176 | 176 | else throw("Match error") | |
177 | 177 | } | |
178 | 178 | else if ($isInstanceOf(l, "Unit")) | |
179 | 179 | then unit | |
180 | 180 | else throw("Match error") | |
181 | 181 | } | |
182 | 182 | ||
183 | 183 | let ab = valueOrErrorMessage(aa, g("invalid proxy treasury address")) | |
184 | 184 | ||
185 | 185 | let ac = { | |
186 | 186 | let l = U | |
187 | 187 | if ($isInstanceOf(l, "Address")) | |
188 | 188 | then { | |
189 | 189 | let X = l | |
190 | 190 | let Y = getString(X, t()) | |
191 | 191 | if ($isInstanceOf(Y, "String")) | |
192 | 192 | then { | |
193 | 193 | let h = Y | |
194 | 194 | addressFromString(h) | |
195 | 195 | } | |
196 | 196 | else if ($isInstanceOf(Y, "Unit")) | |
197 | 197 | then unit | |
198 | 198 | else throw("Match error") | |
199 | 199 | } | |
200 | 200 | else if ($isInstanceOf(l, "Unit")) | |
201 | 201 | then unit | |
202 | 202 | else throw("Match error") | |
203 | 203 | } | |
204 | 204 | ||
205 | 205 | let ad = valueOrErrorMessage(ac, g("invalid main treasury address")) | |
206 | 206 | ||
207 | 207 | func ae () = { | |
208 | 208 | let l = U | |
209 | 209 | if ($isInstanceOf(l, "Address")) | |
210 | 210 | then { | |
211 | 211 | let af = l | |
212 | 212 | let Y = getString(af, q()) | |
213 | 213 | if ($isInstanceOf(Y, "String")) | |
214 | 214 | then { | |
215 | 215 | let ag = Y | |
216 | 216 | fromBase58String(ag) | |
217 | 217 | } | |
218 | 218 | else unit | |
219 | 219 | } | |
220 | 220 | else unit | |
221 | 221 | } | |
222 | 222 | ||
223 | 223 | ||
224 | 224 | func ah (ai,aj) = if ((ai.caller == aj)) | |
225 | 225 | then true | |
226 | 226 | else i("permission denied") | |
227 | 227 | ||
228 | 228 | ||
229 | 229 | func ak (ai) = ah(ai, V) | |
230 | 230 | ||
231 | 231 | ||
232 | 232 | func al (am,an) = { | |
233 | 233 | let h = size(am) | |
234 | 234 | let ao = am[0] | |
235 | 235 | let ap = ao._1 | |
236 | 236 | let aq = ao._2 | |
237 | 237 | let ar = am[1] | |
238 | 238 | let as = ar._1 | |
239 | 239 | let at = ar._2 | |
240 | 240 | let au = am[2] | |
241 | 241 | let av = au._1 | |
242 | 242 | let aw = au._2 | |
243 | 243 | if (if ((h > 0)) | |
244 | 244 | then (ap == an) | |
245 | 245 | else false) | |
246 | 246 | then aq | |
247 | 247 | else if (if ((h > 1)) | |
248 | 248 | then (as == an) | |
249 | 249 | else false) | |
250 | 250 | then at | |
251 | 251 | else if (if ((h > 2)) | |
252 | 252 | then (av == an) | |
253 | 253 | else false) | |
254 | 254 | then aw | |
255 | 255 | else unit | |
256 | 256 | } | |
257 | 257 | ||
258 | 258 | ||
259 | 259 | func ax (ay,az,aA) = { | |
260 | 260 | let aB = valueOrElse(getInteger(V, v(unit)), 0) | |
261 | 261 | let aC = valueOrElse(getInteger(V, u(unit)), 0) | |
262 | 262 | let aD = (aB + aC) | |
263 | 263 | let aE = (ay - aD) | |
264 | 264 | let aF = if (if ((aE >= az)) | |
265 | 265 | then true | |
266 | 266 | else (az == 0)) | |
267 | 267 | then az | |
268 | 268 | else i("power bonus is more than profit") | |
269 | 269 | let aG = (aE - aF) | |
270 | 270 | let aH = if ((aD > 0)) | |
271 | 271 | then fraction(aB, c, aD) | |
272 | 272 | else 0 | |
273 | 273 | let aI = fraction(aG, aH, c) | |
274 | 274 | let aJ = (aG - aI) | |
275 | 275 | let aK = n(aA) | |
276 | 276 | let aL = fraction(aJ, if ((0 > aA)) | |
277 | 277 | then aK | |
278 | 278 | else 0, c) | |
279 | 279 | let aM = fraction(aI, if ((aA > 0)) | |
280 | 280 | then aK | |
281 | 281 | else 0, c) | |
282 | 282 | let aN = ((aI - aM) + aL) | |
283 | 283 | let aO = ((aJ - aL) + aM) | |
284 | 284 | let aP = (aB + aN) | |
285 | 285 | let aQ = (aC + aO) | |
286 | 286 | let aR = min([0, aP]) | |
287 | 287 | let aS = min([0, aQ]) | |
288 | 288 | let aT = (max([0, aP]) + aS) | |
289 | 289 | let aU = (max([0, aQ]) + aR) | |
290 | 290 | let aV = valueOrErrorMessage(assetInfo(Z), g("invalid lpAsset info")).quantity | |
291 | 291 | let aW = fraction(aU, c, aV) | |
292 | 292 | let aX = if ((aW != 0)) | |
293 | 293 | then true | |
294 | 294 | else i("LP price cannot be 0") | |
295 | 295 | if ((aX == aX)) | |
296 | 296 | then { | |
297 | 297 | let aY = valueOrElse(getInteger(V, J()), 0) | |
298 | 298 | let aZ = max([0, fraction(aY, aW, c)]) | |
299 | 299 | let ba = (aU - aZ) | |
300 | 300 | let bb = (aV - aY) | |
301 | 301 | $Tuple6(aZ, ba, aT, aW, aY, bb) | |
302 | 302 | } | |
303 | 303 | else throw("Strict value is not equal to itself.") | |
304 | 304 | } | |
305 | 305 | ||
306 | 306 | ||
307 | 307 | @Callable(ai) | |
308 | 308 | func finalize (bc,ay,az,aA) = { | |
309 | 309 | let bd = ak(ai) | |
310 | 310 | if ((bd == bd)) | |
311 | 311 | then { | |
312 | 312 | let be = valueOrErrorMessage(getInteger(V, z()), g("invalid period")) | |
313 | 313 | let bf = valueOrErrorMessage(getInteger(V, E()), g("invalid period length")) | |
314 | 314 | let bg = valueOrErrorMessage(getInteger(V, C(be)), g("invalid start height")) | |
315 | 315 | let bh = valueOrErrorMessage(getInteger(V, A(be)), g("invalid price")) | |
316 | 316 | let bi = valueOrErrorMessage(getInteger(V, G()), g("invalid next block to process")) | |
317 | 317 | let bj = ((bg + bf) - 1) | |
318 | 318 | let bk = [if ((ai.originCaller == ad)) | |
319 | 319 | then true | |
320 | 320 | else i("permission denied"), if ((bi > bj)) | |
321 | 321 | then true | |
322 | 322 | else i("unprocessed blocks"), if ((ay >= 0)) | |
323 | 323 | then true | |
324 | 324 | else i("invalid new treasury volume"), if ((az >= 0)) | |
325 | 325 | then true | |
326 | 326 | else i("invalid PWR managers bonus"), if (if ((aA >= -(c))) | |
327 | 327 | then (c >= aA) | |
328 | 328 | else false) | |
329 | 329 | then true | |
330 | 330 | else i("invalid treasury volume diff allocation coefficient")] | |
331 | 331 | if ((bk == bk)) | |
332 | 332 | then { | |
333 | - | let aB = valueOrElse(getInteger(V, v(unit)), 0) | |
334 | - | let aC = valueOrElse(getInteger(V, u(unit)), 0) | |
335 | - | let aD = (aB + aC) | |
336 | - | let aE = (ay - aD) | |
337 | - | let aF = if (if ((aE > 0)) | |
338 | - | then (aE >= az) | |
339 | - | else false) | |
340 | - | then az | |
341 | - | else i("power bonus is more than profit") | |
342 | - | let aG = (aE - aF) | |
343 | - | let aH = if ((aD > 0)) | |
344 | - | then fraction(aB, c, aD) | |
345 | - | else 0 | |
346 | - | let aI = fraction(aG, aH, c) | |
347 | - | let aJ = (aG - aI) | |
348 | - | let aK = n(aA) | |
349 | - | let aL = fraction(aJ, if ((0 > aA)) | |
350 | - | then aK | |
351 | - | else 0, c) | |
352 | - | let aM = fraction(aI, if ((aA > 0)) | |
353 | - | then aK | |
354 | - | else 0, c) | |
355 | - | let aN = ((aI - aM) + aL) | |
356 | - | let aO = ((aJ - aL) + aM) | |
357 | - | let aP = (aB + aN) | |
358 | - | let aQ = (aC + aO) | |
359 | - | let aR = min([0, aP]) | |
360 | - | let aS = min([0, aQ]) | |
361 | - | let aT = (max([0, aP]) + aS) | |
362 | - | let aU = (max([0, aQ]) + aR) | |
363 | - | let bl = (be + 1) | |
364 | - | let aV = valueOrErrorMessage(assetInfo(Z), g("invalid lpAsset info")).quantity | |
365 | - | let aW = fraction(aU, c, aV) | |
366 | - | let aX = if ((aW != 0)) | |
333 | + | let bl = ax(ay, az, aA) | |
334 | + | let aZ = bl._1 | |
335 | + | let ba = bl._2 | |
336 | + | let aT = bl._3 | |
337 | + | let aW = bl._4 | |
338 | + | let aY = bl._5 | |
339 | + | let bb = bl._6 | |
340 | + | let bm = (be + 1) | |
341 | + | let bn = if ((size(ai.payments) > 0)) | |
342 | + | then ai.payments[0] | |
343 | + | else unit | |
344 | + | let bo = value(bn).amount | |
345 | + | let bp = value(bn).assetId | |
346 | + | let bq = if (if ((aZ == 0)) | |
367 | 347 | then true | |
368 | - | else i("LP price cannot be 0") | |
369 | - | if ((aX == aX)) | |
348 | + | else if (if ((bn != unit)) | |
349 | + | then (bp == unit) | |
350 | + | else false) | |
351 | + | then (bo >= aZ) | |
352 | + | else false) | |
353 | + | then true | |
354 | + | else i(("invalid payments, payment amount min: " + toString(aZ))) | |
355 | + | if ((bq == bq)) | |
370 | 356 | then { | |
371 | - | let aY = valueOrElse(getInteger(V, J()), 0) | |
372 | - | let aZ = max([0, fraction(aY, aW, c)]) | |
373 | - | let bm = if ((size(ai.payments) > 0)) | |
374 | - | then ai.payments[0] | |
375 | - | else unit | |
376 | - | let bn = value(bm).amount | |
377 | - | let bo = value(bm).assetId | |
378 | - | let bp = if (if ((aZ == 0)) | |
379 | - | then true | |
380 | - | else if (if ((bm != unit)) | |
381 | - | then (bo == unit) | |
382 | - | else false) | |
383 | - | then (bn >= aZ) | |
384 | - | else false) | |
385 | - | then true | |
386 | - | else i(("invalid payments, payment amount min: " + toString(aZ))) | |
387 | - | if ((bp == bp)) | |
388 | - | then { | |
389 | - | let bq = if ((bm != unit)) | |
390 | - | then [ScriptTransfer(V, bn, bo)] | |
391 | - | else nil | |
392 | - | let br = [invoke(V, "integerEntry", [D(be), aF], nil), invoke(V, "integerEntry", [z(), bl], nil), invoke(V, "integerEntry", [A(bl), aW], nil), invoke(V, "integerEntry", [C(bl), (bj + 1)], nil), invoke(V, "burn", [aY], nil), invoke(V, "integerEntry", [J(), 0], nil), invoke(V, "integerEntry", [u(unit), (aU - aZ)], nil), invoke(V, "integerEntry", [v(unit), aT], nil)] | |
393 | - | $Tuple2(bq, br) | |
394 | - | } | |
395 | - | else throw("Strict value is not equal to itself.") | |
357 | + | let br = if ((bn != unit)) | |
358 | + | then [ScriptTransfer(V, bo, bp)] | |
359 | + | else nil | |
360 | + | let bs = [invoke(V, "integerEntry", [D(be), az], nil), invoke(V, "integerEntry", [z(), bm], nil), invoke(V, "integerEntry", [A(bm), aW], nil), invoke(V, "integerEntry", [C(bm), (bj + 1)], nil), invoke(V, "burn", [aY], nil), invoke(V, "integerEntry", [J(), 0], nil), invoke(V, "integerEntry", [u(unit), ba], nil), invoke(V, "integerEntry", [v(unit), aT], nil)] | |
361 | + | $Tuple2(br, bs) | |
396 | 362 | } | |
397 | 363 | else throw("Strict value is not equal to itself.") | |
398 | 364 | } | |
399 | 365 | else throw("Strict value is not equal to itself.") | |
400 | 366 | } | |
401 | 367 | else throw("Strict value is not equal to itself.") | |
402 | 368 | } | |
403 | 369 | ||
404 | 370 | ||
371 | + | ||
372 | + | @Callable(ai) | |
373 | + | func finalizeREADONLY (bc,ay,az,aA) = { | |
374 | + | let be = valueOrErrorMessage(getInteger(V, z()), g("invalid period")) | |
375 | + | let bf = valueOrErrorMessage(getInteger(V, E()), g("invalid period length")) | |
376 | + | let bg = valueOrErrorMessage(getInteger(V, C(be)), g("invalid start height")) | |
377 | + | let bh = valueOrErrorMessage(getInteger(V, A(be)), g("invalid price")) | |
378 | + | let bi = valueOrErrorMessage(getInteger(V, G()), g("invalid next block to process")) | |
379 | + | let bj = ((bg + bf) - 1) | |
380 | + | let bk = [if ((bi > bj)) | |
381 | + | then true | |
382 | + | else i("unprocessed blocks"), if ((ay >= 0)) | |
383 | + | then true | |
384 | + | else i("invalid new treasury volume"), if ((az >= 0)) | |
385 | + | then true | |
386 | + | else i("invalid PWR managers bonus"), if (if ((aA >= -(c))) | |
387 | + | then (c >= aA) | |
388 | + | else false) | |
389 | + | then true | |
390 | + | else i("invalid treasury volume diff allocation coefficient")] | |
391 | + | if ((bk == bk)) | |
392 | + | then $Tuple2(nil, ax(ay, az, aA)) | |
393 | + | else throw("Strict value is not equal to itself.") | |
394 | + | } | |
395 | + | ||
396 | + |
github/deemru/w8io/169f3d6 45.35 ms ◑