tx · G3AFXw36cGdNo4g61Ds1njQrrZrhGSA1VScd5uaThvJF

3N6HSS7Toat1RhyEsyqVGgVSRzH19W1FTbP:  -0.01400000 Waves

2023.06.09 17:42 [2615263] smart account 3N6HSS7Toat1RhyEsyqVGgVSRzH19W1FTbP > SELF 0.00000000 Waves

{ "type": 13, "id": "G3AFXw36cGdNo4g61Ds1njQrrZrhGSA1VScd5uaThvJF", "fee": 1400000, "feeAssetId": null, "timestamp": 1686321833561, "version": 2, "chainId": 84, "sender": "3N6HSS7Toat1RhyEsyqVGgVSRzH19W1FTbP", "senderPublicKey": "AoKo4segKHU4DeJnxXQYJj2u7J6XJeux6r8KLW52cd2Q", "proofs": [ "4phFzuFJkeA6VYGRDAnFJT8zs5PPYFCi1RtPabDvL5ksZZ5b5pgk7apdFiJ9kNovNKeS9Lk62rag84KVPGZQeMbH" ], "script": "base64:BwIqCAISAwoBAhIGCgQBAQEBEgMKAQISAwoBAhIECgICAhIECgICAhIDCgECHwADU0VQAgJfXwANQ09OVFJBQ1RfTkFNRQIPY2FsY3VsYXRvci5yaWRlAAZTQ0FMRTgAgMLXLwAHUEVORElORwIHUEVORElORwAIRklOSVNIRUQCCEZJTklTSEVEAQd3cmFwRXJyAQFzCQCsAgIJAKwCAgUNQ09OVFJBQ1RfTkFNRQICOiAFAXMBCHRocm93RXJyAQFzCQACAQkBB3dyYXBFcnIBBQFzARFrZXlGYWN0b3J5QWRkcmVzcwAJALkJAgkAzAgCAgIlcwkAzAgCAgdmYWN0b3J5BQNuaWwFA1NFUAEMa2V5THBBc3NldElkAAkAuQkCCQDMCAICAiVzCQDMCAICCWxwQXNzZXRJZAUDbmlsBQNTRVABEmtleVRyZWFzdXJ5QWRkcmVzcwAJALkJAgkAzAgCAgIlcwkAzAgCAgh0cmVhc3VyeQUDbmlsBQNTRVABDGtleUF2YWlsYWJsZQELdXNlckFkZHJlc3MJALkJAgkAzAgCAgQlcyVzCQDMCAICCWF2YWlsYWJsZQkAzAgCCQClCAEFC3VzZXJBZGRyZXNzBQNuaWwFA1NFUAEKa2V5Q2xhaW1lZAELdXNlckFkZHJlc3MJALkJAgkAzAgCAgQlcyVzCQDMCAICB2NsYWltZWQJAMwIAgkApQgBBQt1c2VyQWRkcmVzcwUDbmlsBQNTRVABEGtleUN1cnJlbnRQZXJpb2QACQC5CQIJAMwIAgICJXMJAMwIAgINY3VycmVudFBlcmlvZAUDbmlsBQNTRVABEWtleVByaWNlRm9yUGVyaW9kAQZwZXJpb2QJALkJAgkAzAgCAgQlcyVkCQDMCAICBXByaWNlCQDMCAIJAKQDAQUGcGVyaW9kBQNuaWwFA1NFUAEOa2V5U3RhcnRIZWlnaHQBBnBlcmlvZAkAuQkCCQDMCAICBCVzJWQJAMwIAgILc3RhcnRIZWlnaHQJAMwIAgkApAMBBQZwZXJpb2QFA25pbAUDU0VQAQ9rZXlQZXJpb2RMZW5ndGgAAhAlc19fcGVyaW9kTGVuZ3RoARhrZXlCbG9ja1Byb2Nlc3NpbmdSZXdhcmQAAhklc19fYmxvY2tQcm9jZXNzaW5nUmV3YXJkARVrZXlOZXh0QmxvY2tUb1Byb2Nlc3MAAhYlc19fbmV4dEJsb2NrVG9Qcm9jZXNzARFrZXlCbG9ja1Byb2Nlc3NlZAEGaGVpZ2h0CQC5CQIJAMwIAgIEJXMlZAkAzAgCAg5ibG9ja1Byb2Nlc3NlZAkAzAgCCQCkAwEFBmhlaWdodAUDbmlsBQNTRVABFGtleVdpdGhkcmF3YWxSZXF1ZXN0Agt1c2VyQWRkcmVzcwR0eElkCQC5CQIJAMwIAgIGJXMlcyVzCQDMCAICCndpdGhkcmF3YWwJAMwIAgkApQgBBQt1c2VyQWRkcmVzcwkAzAgCCQDYBAEFBHR4SWQFA25pbAUDU0VQARZ2YWx1ZVdpdGhkcmF3YWxSZXF1ZXN0BAZzdGF0dXMNbHBBc3NldEFtb3VudAx0YXJnZXRQZXJpb2QJY2xhaW1UeElkBAxjbGFpbVR4SWRTdHIEByRtYXRjaDAFCWNsYWltVHhJZAMJAAECBQckbWF0Y2gwAgpCeXRlVmVjdG9yBAFiBQckbWF0Y2gwCQDYBAEFAWIDCQABAgUHJG1hdGNoMAIEVW5pdAIEU09PTgkAAgECC01hdGNoIGVycm9yCQC5CQIJAMwIAgIIJXMlZCVkJXMJAMwIAgUGc3RhdHVzCQDMCAIJAKQDAQUNbHBBc3NldEFtb3VudAkAzAgCCQCkAwEFDHRhcmdldFBlcmlvZAkAzAgCBQxjbGFpbVR4SWRTdHIFA25pbAUDU0VQASFwYXJzZVdpdGhkcmF3YWxSZXF1ZXN0VmFsdWVPckZhaWwBAXMEBXBhcnRzCQC1CQIFAXMFA1NFUAMJAAACCQCQAwEFBXBhcnRzAAUEBnN0YXR1cwkAkQMCBQVwYXJ0cwABBA1scEFzc2V0QW1vdW50CQETdmFsdWVPckVycm9yTWVzc2FnZQIJALYJAQkAkQMCBQVwYXJ0cwACCQEHd3JhcEVycgECFWludmFsaWQgbHBBc3NldEFtb3VudAQMdGFyZ2V0UGVyaW9kCQETdmFsdWVPckVycm9yTWVzc2FnZQIJALYJAQkAkQMCBQVwYXJ0cwADCQEHd3JhcEVycgECFGludmFsaWQgdGFyZ2V0UGVyaW9kBAljbGFpbVR4SWQJAJEDAgUFcGFydHMABAkAlgoEBQZzdGF0dXMFDWxwQXNzZXRBbW91bnQFDHRhcmdldFBlcmlvZAUJY2xhaW1UeElkCQEIdGhyb3dFcnIBAiBpbnZhbGlkIHdpdGhkcmF3YWwgcmVxdWVzdCB2YWx1ZQAUZmFjdG9yeUFkZHJlc3NPcHRpb24EByRtYXRjaDAJAJ0IAgUEdGhpcwkBEWtleUZhY3RvcnlBZGRyZXNzAAMJAAECBQckbWF0Y2gwAgZTdHJpbmcEAXMFByRtYXRjaDAJAKYIAQUBcwMJAAECBQckbWF0Y2gwAgRVbml0BQR1bml0CQACAQILTWF0Y2ggZXJyb3IAFGZhY3RvcnlBZGRyZXNzT3JGYWlsCQETdmFsdWVPckVycm9yTWVzc2FnZQIFFGZhY3RvcnlBZGRyZXNzT3B0aW9uCQEHd3JhcEVycgECF2ludmFsaWQgZmFjdG9yeSBhZGRyZXNzAA9scEFzc2V0SWRPcHRpb24EByRtYXRjaDAFFGZhY3RvcnlBZGRyZXNzT3B0aW9uAwkAAQIFByRtYXRjaDACB0FkZHJlc3MEAWEFByRtYXRjaDAEByRtYXRjaDEJAJ0IAgUBYQkBDGtleUxwQXNzZXRJZAADCQABAgUHJG1hdGNoMQIGU3RyaW5nBAFzBQckbWF0Y2gxCQDZBAEFAXMDCQABAgUHJG1hdGNoMQIEVW5pdAUEdW5pdAkAAgECC01hdGNoIGVycm9yAwkAAQIFByRtYXRjaDACBFVuaXQFBHVuaXQJAAIBAgtNYXRjaCBlcnJvcgAPbHBBc3NldElkT3JGYWlsCQETdmFsdWVPckVycm9yTWVzc2FnZQIFD2xwQXNzZXRJZE9wdGlvbgkBB3dyYXBFcnIBAhFpbnZhbGlkIGxwQXNzZXRJZAAVdHJlYXN1cnlBZGRyZXNzT3B0aW9uBAckbWF0Y2gwBRRmYWN0b3J5QWRkcmVzc09wdGlvbgMJAAECBQckbWF0Y2gwAgdBZGRyZXNzBAFhBQckbWF0Y2gwBAckbWF0Y2gxCQCdCAIFAWEJARJrZXlUcmVhc3VyeUFkZHJlc3MAAwkAAQIFByRtYXRjaDECBlN0cmluZwQBcwUHJG1hdGNoMQkApggBBQFzAwkAAQIFByRtYXRjaDECBFVuaXQFBHVuaXQJAAIBAgtNYXRjaCBlcnJvcgMJAAECBQckbWF0Y2gwAgRVbml0BQR1bml0CQACAQILTWF0Y2ggZXJyb3IAFXRyZWFzdXJ5QWRkcmVzc09yRmFpbAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCBRV0cmVhc3VyeUFkZHJlc3NPcHRpb24JAQd3cmFwRXJyAQIYaW52YWxpZCB0cmVhc3VyeSBhZGRyZXNzAQtvbmx5QWRkcmVzcwIBaQdhZGRyZXNzAwkAAAIIBQFpBmNhbGxlcgUHYWRkcmVzcwYJAQh0aHJvd0VycgECEXBlcm1pc3Npb24gZGVuaWVkAQtvbmx5RmFjdG9yeQEBaQkBC29ubHlBZGRyZXNzAgUBaQUUZmFjdG9yeUFkZHJlc3NPckZhaWwBD3Jld2FyZEZvck9wdGlvbgIHcmV3YXJkcwZ0YXJnZXQEAXMJAJADAQUHcmV3YXJkcwQLJHQwMzM0NzMzNzIJAJEDAgUHcmV3YXJkcwAABAJhMAgFCyR0MDMzNDczMzcyAl8xBAJyMAgFCyR0MDMzNDczMzcyAl8yBAskdDAzMzc1MzQwMAkAkQMCBQdyZXdhcmRzAAEEAmExCAULJHQwMzM3NTM0MDACXzEEAnIxCAULJHQwMzM3NTM0MDACXzIECyR0MDM0MDMzNDI4CQCRAwIFB3Jld2FyZHMAAgQCYTIIBQskdDAzNDAzMzQyOAJfMQQCcjIIBQskdDAzNDAzMzQyOAJfMgMDCQBmAgUBcwAACQAAAgUCYTAFBnRhcmdldAcFAnIwAwMJAGYCBQFzAAEJAAACBQJhMQUGdGFyZ2V0BwUCcjEDAwkAZgIFAXMAAgkAAAIFAmEyBQZ0YXJnZXQHBQJyMgUEdW5pdAcBaQEHY2xhaW1MUAEQdXNlckFkZHJlc3NCeXRlcwQLY2hlY2tDYWxsZXIJAQtvbmx5RmFjdG9yeQEFAWkDCQAAAgULY2hlY2tDYWxsZXIFC2NoZWNrQ2FsbGVyBAt1c2VyQWRkcmVzcwkBB0FkZHJlc3MBBRB1c2VyQWRkcmVzc0J5dGVzBAlhdmFpbGFibGUJAQt2YWx1ZU9yRWxzZQIJAJoIAgUUZmFjdG9yeUFkZHJlc3NPckZhaWwJAQxrZXlBdmFpbGFibGUBBQt1c2VyQWRkcmVzcwAABAdjbGFpbWVkCQELdmFsdWVPckVsc2UCCQCaCAIFFGZhY3RvcnlBZGRyZXNzT3JGYWlsCQEKa2V5Q2xhaW1lZAEFC3VzZXJBZGRyZXNzAAAEDmZhY3RvcnlBY3Rpb25zAwkAZgIFCWF2YWlsYWJsZQAACQDMCAIJAPwHBAUUZmFjdG9yeUFkZHJlc3NPckZhaWwCDXRyYW5zZmVyQXNzZXQJAMwIAgUQdXNlckFkZHJlc3NCeXRlcwkAzAgCBQlhdmFpbGFibGUJAMwIAgUPbHBBc3NldElkT3JGYWlsBQNuaWwFA25pbAkAzAgCCQD8BwQFFGZhY3RvcnlBZGRyZXNzT3JGYWlsAgxpbnRlZ2VyRW50cnkJAMwIAgkBDGtleUF2YWlsYWJsZQEFC3VzZXJBZGRyZXNzCQDMCAIAAAUDbmlsBQNuaWwJAMwIAgkA/AcEBRRmYWN0b3J5QWRkcmVzc09yRmFpbAILc3RyaW5nRW50cnkJAMwIAgkBCmtleUNsYWltZWQBBQt1c2VyQWRkcmVzcwkAzAgCCQBkAgUHY2xhaW1lZAUJYXZhaWxhYmxlBQNuaWwFA25pbAUDbmlsCQEIdGhyb3dFcnIBAhBub3RoaW5nIHRvIGNsYWltCQCUCgIFA25pbAUOZmFjdG9yeUFjdGlvbnMJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEIZmluYWxpemUEGG5ld1RyZWFzdXJ5Vm9sdW1lSW5XYXZlcwh4dG5QcmljZRBwd3JNYW5hZ2Vyc0JvbnVzIHRyZWFzdXJ5Vm9sdW1lRGlmZkFsbG9jYXRpb25Db2VmBAZjaGVja3MJAMwIAgMJAAACCAUBaQxvcmlnaW5DYWxsZXIFFGZhY3RvcnlBZGRyZXNzT3JGYWlsBgkBCHRocm93RXJyAQIRcGVybWlzc2lvbiBkZW5pZWQJAMwIAgMJAGcCBRhuZXdUcmVhc3VyeVZvbHVtZUluV2F2ZXMAAAYJAQh0aHJvd0VycgECG2ludmFsaWQgbmV3IHRyZWFzdXJ5IHZvbHVtZQkAzAgCAwkAZwIFCHh0blByaWNlAAAGCQEIdGhyb3dFcnIBAhFpbnZhbGlkIFhUTiBwcmljZQkAzAgCAwMJAGcCBRBwd3JNYW5hZ2Vyc0JvbnVzAAAJAGcCBQZTQ0FMRTgFEHB3ck1hbmFnZXJzQm9udXMHBgkBCHRocm93RXJyAQIaaW52YWxpZCBQV1IgbWFuYWdlcnMgYm9udXMJAMwIAgMDCQBnAgUgdHJlYXN1cnlWb2x1bWVEaWZmQWxsb2NhdGlvbkNvZWYJAQEtAQUGU0NBTEU4CQBnAgUGU0NBTEU4BSB0cmVhc3VyeVZvbHVtZURpZmZBbGxvY2F0aW9uQ29lZgcGCQEIdGhyb3dFcnIBAjNpbnZhbGlkIHRyZWFzdXJ5IHZvbHVtZSBkaWZmIGFsbG9jYXRpb24gY29lZmZpY2llbnQFA25pbAMJAAACBQZjaGVja3MFBmNoZWNrcwQTY3VycmVudFBlcmlvZE9yRmFpbAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCaCAIFFGZhY3RvcnlBZGRyZXNzT3JGYWlsCQEQa2V5Q3VycmVudFBlcmlvZAAJAQd3cmFwRXJyAQIOaW52YWxpZCBwZXJpb2QECW5ld1BlcmlvZAkAZAIFE2N1cnJlbnRQZXJpb2RPckZhaWwAAQQIbmV3UHJpY2UFBlNDQUxFOAQTbHBBc3NldEFtb3VudFRvQnVybgAABA5mYWN0b3J5QWN0aW9ucwkAzAgCCQD8BwQFFGZhY3RvcnlBZGRyZXNzT3JGYWlsAgxpbnRlZ2VyRW50cnkJAMwIAgkBEGtleUN1cnJlbnRQZXJpb2QACQDMCAIFCW5ld1BlcmlvZAUDbmlsBQNuaWwJAMwIAgkA/AcEBRRmYWN0b3J5QWRkcmVzc09yRmFpbAIMaW50ZWdlckVudHJ5CQDMCAIJARFrZXlQcmljZUZvclBlcmlvZAEFCW5ld1BlcmlvZAkAzAgCBQhuZXdQcmljZQUDbmlsBQNuaWwJAMwIAgkA/AcEBRRmYWN0b3J5QWRkcmVzc09yRmFpbAIEYnVybgkAzAgCBRNscEFzc2V0QW1vdW50VG9CdXJuBQNuaWwFA25pbAUDbmlsCQCUCgIFA25pbAUOZmFjdG9yeUFjdGlvbnMJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEGaW52ZXN0ARB1c2VyQWRkcmVzc0J5dGVzBAtjaGVja0NhbGxlcgkBC29ubHlGYWN0b3J5AQUBaQMJAAACBQtjaGVja0NhbGxlcgULY2hlY2tDYWxsZXIEC3VzZXJBZGRyZXNzCQEHQWRkcmVzcwEFEHVzZXJBZGRyZXNzQnl0ZXMEE2N1cnJlbnRQZXJpb2RPckZhaWwJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAmggCBRRmYWN0b3J5QWRkcmVzc09yRmFpbAkBEGtleUN1cnJlbnRQZXJpb2QACQEHd3JhcEVycgECDmludmFsaWQgcGVyaW9kBBJjdXJyZW50UHJpY2VPckZhaWwJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAmggCBRRmYWN0b3J5QWRkcmVzc09yRmFpbAkBEWtleVByaWNlRm9yUGVyaW9kAQUTY3VycmVudFBlcmlvZE9yRmFpbAkBB3dyYXBFcnIBAg1pbnZhbGlkIHByaWNlBAdwYXltZW50AwkAAAIJAJADAQgFAWkIcGF5bWVudHMAAQkAkQMCCAUBaQhwYXltZW50cwAACQEIdGhyb3dFcnIBAhBpbnZhbGlkIHBheW1lbnRzBA1wYXltZW50QW1vdW50AwMJAAACCAUHcGF5bWVudAdhc3NldElkBQR1bml0CQBmAggFB3BheW1lbnQGYW1vdW50AAAHCAUHcGF5bWVudAZhbW91bnQJAQh0aHJvd0VycgECFmludmFsaWQgcGF5bWVudCBhbW91bnQEDWxwQXNzZXRBbW91bnQDCQBmAgUSY3VycmVudFByaWNlT3JGYWlsAAAJAGsDBQ1wYXltZW50QW1vdW50BQZTQ0FMRTgFEmN1cnJlbnRQcmljZU9yRmFpbAAABA5mYWN0b3J5QWN0aW9ucwkAzAgCCQD8BwQFFGZhY3RvcnlBZGRyZXNzT3JGYWlsAgxpbnRlZ2VyRW50cnkJAMwIAgIPaW52ZXN0ZWRfX1dBVkVTCQDMCAIAAAUDbmlsBQNuaWwJAMwIAgkA/AcEBRRmYWN0b3J5QWRkcmVzc09yRmFpbAIHcmVpc3N1ZQkAzAgCBQ1scEFzc2V0QW1vdW50BQNuaWwFA25pbAkAzAgCCQD8BwQFFGZhY3RvcnlBZGRyZXNzT3JGYWlsAg10cmFuc2ZlckFzc2V0CQDMCAIFEHVzZXJBZGRyZXNzQnl0ZXMJAMwIAgUNbHBBc3NldEFtb3VudAkAzAgCBQ9scEFzc2V0SWRPckZhaWwFA25pbAUDbmlsCQDMCAIJAPwHBAUUZmFjdG9yeUFkZHJlc3NPckZhaWwCDXRyYW5zZmVyV2F2ZXMJAMwIAggFFXRyZWFzdXJ5QWRkcmVzc09yRmFpbAVieXRlcwkAzAgCBQ1wYXltZW50QW1vdW50BQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIFBHVuaXQFDXBheW1lbnRBbW91bnQFA25pbAUDbmlsCQCUCgIFA25pbAUOZmFjdG9yeUFjdGlvbnMJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEId2l0aGRyYXcBEHVzZXJBZGRyZXNzQnl0ZXMEC2NoZWNrQ2FsbGVyCQELb25seUZhY3RvcnkBBQFpAwkAAAIFC2NoZWNrQ2FsbGVyBQtjaGVja0NhbGxlcgQLdXNlckFkZHJlc3MJAQdBZGRyZXNzAQUQdXNlckFkZHJlc3NCeXRlcwQTY3VycmVudFBlcmlvZE9yRmFpbAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCaCAIFFGZhY3RvcnlBZGRyZXNzT3JGYWlsCQEQa2V5Q3VycmVudFBlcmlvZAAJAQd3cmFwRXJyAQIOaW52YWxpZCBwZXJpb2QEB3BheW1lbnQDCQAAAgkAkAMBCAUBaQhwYXltZW50cwABCQCRAwIIBQFpCHBheW1lbnRzAAAJAQh0aHJvd0VycgEJAQd3cmFwRXJyAQIQaW52YWxpZCBwYXltZW50cwQOcGF5bWVudEFzc2V0SWQDCQAAAggFB3BheW1lbnQHYXNzZXRJZAUPbHBBc3NldElkT3JGYWlsBQ9scEFzc2V0SWRPckZhaWwJAQh0aHJvd0VycgECFWludmFsaWQgcGF5bWVudCBhc3NldAQNcGF5bWVudEFtb3VudAMJAGYCCAUHcGF5bWVudAZhbW91bnQAAAgFB3BheW1lbnQGYW1vdW50CQEIdGhyb3dFcnIBAhZpbnZhbGlkIHBheW1lbnQgYW1vdW50BA5mYWN0b3J5QWN0aW9ucwkAzAgCCQD8BwQFFGZhY3RvcnlBZGRyZXNzT3JGYWlsAgtzdHJpbmdFbnRyeQkAzAgCCQEUa2V5V2l0aGRyYXdhbFJlcXVlc3QCBQt1c2VyQWRkcmVzcwgFAWkNdHJhbnNhY3Rpb25JZAkAzAgCCQEWdmFsdWVXaXRoZHJhd2FsUmVxdWVzdAQFB1BFTkRJTkcFDXBheW1lbnRBbW91bnQJAGQCBRNjdXJyZW50UGVyaW9kT3JGYWlsAAEFBHVuaXQFA25pbAUDbmlsBQNuaWwDCQAAAgUOZmFjdG9yeUFjdGlvbnMFDmZhY3RvcnlBY3Rpb25zCQCUCgIJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwUUZmFjdG9yeUFkZHJlc3NPckZhaWwFDXBheW1lbnRBbW91bnQFDnBheW1lbnRBc3NldElkBQNuaWwFDmZhY3RvcnlBY3Rpb25zCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBDmNhbmNlbFdpdGhkcmF3AhB1c2VyQWRkcmVzc0J5dGVzBHR4SWQEC2NoZWNrQ2FsbGVyCQELb25seUZhY3RvcnkBBQFpAwkAAAIFC2NoZWNrQ2FsbGVyBQtjaGVja0NhbGxlcgQLdXNlckFkZHJlc3MJAQdBZGRyZXNzAQUQdXNlckFkZHJlc3NCeXRlcwQXd2l0aGRyYXdhbFJlcXVlc3RPcHRpb24JARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBRRmYWN0b3J5QWRkcmVzc09yRmFpbAkBFGtleVdpdGhkcmF3YWxSZXF1ZXN0AgULdXNlckFkZHJlc3MFBHR4SWQJAQd3cmFwRXJyAQIaaW52YWxpZCB3aXRoZHJhd2FsIHJlcXVlc3QECyR0MDg3MDU4ODE4CQEhcGFyc2VXaXRoZHJhd2FsUmVxdWVzdFZhbHVlT3JGYWlsAQUXd2l0aGRyYXdhbFJlcXVlc3RPcHRpb24EBnN0YXR1cwgFCyR0MDg3MDU4ODE4Al8xBA1scEFzc2V0QW1vdW50CAULJHQwODcwNTg4MTgCXzIEDHRhcmdldFBlcmlvZAgFCyR0MDg3MDU4ODE4Al8zBAljbGFpbVR4SWQIBQskdDA4NzA1ODgxOAJfNAMJAAACBQZzdGF0dXMFB1BFTkRJTkcEDmZhY3RvcnlBY3Rpb25zCQDMCAIJAPwHBAUUZmFjdG9yeUFkZHJlc3NPckZhaWwCC2RlbGV0ZUVudHJ5CQDMCAIJARRrZXlXaXRoZHJhd2FsUmVxdWVzdAIFC3VzZXJBZGRyZXNzBQR0eElkBQNuaWwFA25pbAkAzAgCCQD8BwQFFGZhY3RvcnlBZGRyZXNzT3JGYWlsAg10cmFuc2ZlckFzc2V0CQDMCAIFEHVzZXJBZGRyZXNzQnl0ZXMJAMwIAgUNbHBBc3NldEFtb3VudAkAzAgCBQ9scEFzc2V0SWRPckZhaWwFA25pbAUDbmlsBQNuaWwDCQAAAgUOZmFjdG9yeUFjdGlvbnMFDmZhY3RvcnlBY3Rpb25zCQCUCgIFA25pbAUOZmFjdG9yeUFjdGlvbnMJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAQh0aHJvd0VycgECIWludmFsaWQgd2l0aGRyYXdhbCByZXF1ZXN0IHN0YXR1cwkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpAQpjbGFpbVdhdmVzAhB1c2VyQWRkcmVzc0J5dGVzBHR4SWQEC2NoZWNrQ2FsbGVyCQELb25seUZhY3RvcnkBBQFpAwkAAAIFC2NoZWNrQ2FsbGVyBQtjaGVja0NhbGxlcgQLdXNlckFkZHJlc3MJAQdBZGRyZXNzAQUQdXNlckFkZHJlc3NCeXRlcwQTY3VycmVudFBlcmlvZE9yRmFpbAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCaCAIFFGZhY3RvcnlBZGRyZXNzT3JGYWlsCQEQa2V5Q3VycmVudFBlcmlvZAAJAQd3cmFwRXJyAQIOaW52YWxpZCBwZXJpb2QEF3dpdGhkcmF3YWxSZXF1ZXN0T3B0aW9uCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgUUZmFjdG9yeUFkZHJlc3NPckZhaWwJARRrZXlXaXRoZHJhd2FsUmVxdWVzdAIFC3VzZXJBZGRyZXNzBQR0eElkCQEHd3JhcEVycgECGmludmFsaWQgd2l0aGRyYXdhbCByZXF1ZXN0BAskdDA5Njg5OTgwMgkBIXBhcnNlV2l0aGRyYXdhbFJlcXVlc3RWYWx1ZU9yRmFpbAEFF3dpdGhkcmF3YWxSZXF1ZXN0T3B0aW9uBAZzdGF0dXMIBQskdDA5Njg5OTgwMgJfMQQNbHBBc3NldEFtb3VudAgFCyR0MDk2ODk5ODAyAl8yBAx0YXJnZXRQZXJpb2QIBQskdDA5Njg5OTgwMgJfMwQJY2xhaW1UeElkCAULJHQwOTY4OTk4MDICXzQDCQAAAgUGc3RhdHVzBQhGSU5JU0hFRAkBCHRocm93RXJyAQIhaW52YWxpZCB3aXRoZHJhd2FsIHJlcXVlc3Qgc3RhdHVzAwkAZgIFDHRhcmdldFBlcmlvZAUTY3VycmVudFBlcmlvZE9yRmFpbAkBCHRocm93RXJyAQIhaW52YWxpZCB3aXRoZHJhd2FsIHJlcXVlc3QgcGVyaW9kBBJjdXJyZW50UHJpY2VPckZhaWwJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAmggCBRRmYWN0b3J5QWRkcmVzc09yRmFpbAkBEWtleVByaWNlRm9yUGVyaW9kAQUTY3VycmVudFBlcmlvZE9yRmFpbAkBB3dyYXBFcnIBAg1pbnZhbGlkIHByaWNlBAZhbW91bnQDCQBmAgUSY3VycmVudFByaWNlT3JGYWlsAAAJAGsDBQ1scEFzc2V0QW1vdW50BRJjdXJyZW50UHJpY2VPckZhaWwFBlNDQUxFOAAABA5mYWN0b3J5QWN0aW9ucwkAzAgCCQD8BwQFFGZhY3RvcnlBZGRyZXNzT3JGYWlsAgtzdHJpbmdFbnRyeQkAzAgCCQEUa2V5V2l0aGRyYXdhbFJlcXVlc3QCBQt1c2VyQWRkcmVzcwUEdHhJZAkAzAgCCQEWdmFsdWVXaXRoZHJhd2FsUmVxdWVzdAQFCEZJTklTSEVEBQ1scEFzc2V0QW1vdW50BQx0YXJnZXRQZXJpb2QIBQFpDXRyYW5zYWN0aW9uSWQFA25pbAUDbmlsCQDMCAIJAPwHBAUUZmFjdG9yeUFkZHJlc3NPckZhaWwCBGJ1cm4JAMwIAgUNbHBBc3NldEFtb3VudAUDbmlsBQNuaWwJAMwIAgkA/AcEBRRmYWN0b3J5QWRkcmVzc09yRmFpbAINdHJhbnNmZXJXYXZlcwkAzAgCBRB1c2VyQWRkcmVzc0J5dGVzCQDMCAIFBmFtb3VudAUDbmlsBQNuaWwFA25pbAkAlAoCBQNuaWwFDmZhY3RvcnlBY3Rpb25zCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBDXByb2Nlc3NCbG9ja3MBEHVzZXJBZGRyZXNzQnl0ZXMEC2NoZWNrQ2FsbGVyCQELb25seUZhY3RvcnkBBQFpAwkAAAIFC2NoZWNrQ2FsbGVyBQtjaGVja0NhbGxlcgQLdXNlckFkZHJlc3MJAQdBZGRyZXNzAQUQdXNlckFkZHJlc3NCeXRlcwQTY3VycmVudFBlcmlvZE9yRmFpbAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCaCAIFFGZhY3RvcnlBZGRyZXNzT3JGYWlsCQEQa2V5Q3VycmVudFBlcmlvZAAJAQd3cmFwRXJyAQIOaW52YWxpZCBwZXJpb2QEDHBlcmlvZExlbmd0aAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCaCAIFFGZhY3RvcnlBZGRyZXNzT3JGYWlsCQEPa2V5UGVyaW9kTGVuZ3RoAAkBB3dyYXBFcnIBAhVpbnZhbGlkIHBlcmlvZCBsZW5ndGgEEmN1cnJlbnRTdGFydEhlaWdodAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCaCAIFFGZhY3RvcnlBZGRyZXNzT3JGYWlsCQEOa2V5U3RhcnRIZWlnaHQBBRNjdXJyZW50UGVyaW9kT3JGYWlsCQEHd3JhcEVycgECFGludmFsaWQgc3RhcnQgaGVpZ2h0BBJjdXJyZW50UHJpY2VPckZhaWwJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAmggCBRRmYWN0b3J5QWRkcmVzc09yRmFpbAkBEWtleVByaWNlRm9yUGVyaW9kAQUTY3VycmVudFBlcmlvZE9yRmFpbAkBB3dyYXBFcnIBAg1pbnZhbGlkIHByaWNlBBJuZXh0QmxvY2tUb1Byb2Nlc3MJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAmggCBRRmYWN0b3J5QWRkcmVzc09yRmFpbAkBFWtleU5leHRCbG9ja1RvUHJvY2VzcwAJAQd3cmFwRXJyAQIdaW52YWxpZCBuZXh0IGJsb2NrIHRvIHByb2Nlc3MED3BlcmlvZEVuZEhlaWdodAkAZQIJAGQCBRJjdXJyZW50U3RhcnRIZWlnaHQFDHBlcmlvZExlbmd0aAABBBxibG9ja3NQcm9jZXNzaW5nQmF0Y2hTaXplTWF4AAUEGWJsb2Nrc1Byb2Nlc3NpbmdCYXRjaFNpemUDAwMJAGcCBQZoZWlnaHQFEm5leHRCbG9ja1RvUHJvY2VzcwMJAGcCBRJuZXh0QmxvY2tUb1Byb2Nlc3MFEmN1cnJlbnRTdGFydEhlaWdodAYJAAACBRNjdXJyZW50UGVyaW9kT3JGYWlsAAAHCQBnAgUPcGVyaW9kRW5kSGVpZ2h0BRJuZXh0QmxvY2tUb1Byb2Nlc3MHCQCXAwEJAMwIAgkAZAIJAGUCBQ9wZXJpb2RFbmRIZWlnaHQFEm5leHRCbG9ja1RvUHJvY2VzcwABCQDMCAIFHGJsb2Nrc1Byb2Nlc3NpbmdCYXRjaFNpemVNYXgFA25pbAkBCHRocm93RXJyAQkBB3dyYXBFcnIBAhRpbnZhbGlkIHRhcmdldCBibG9jawQVYmxvY2tQcm9jZXNzaW5nUmV3YXJkCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJoIAgUUZmFjdG9yeUFkZHJlc3NPckZhaWwJARhrZXlCbG9ja1Byb2Nlc3NpbmdSZXdhcmQACQEHd3JhcEVycgECH2ludmFsaWQgYmxvY2sgcHJvY2Vzc2luZyByZXdhcmQEIGJsb2NrUHJvY2Vzc2luZ1Jld2FyZEJ5R2VuZXJhdG9yCQBpAgUVYmxvY2tQcm9jZXNzaW5nUmV3YXJkBRlibG9ja3NQcm9jZXNzaW5nQmF0Y2hTaXplBClibG9ja1Byb2Nlc3NpbmdSZXdhcmRCeUdlbmVyYXRvclJlbWFpbmRlcgkAZQIFFWJsb2NrUHJvY2Vzc2luZ1Jld2FyZAkAaAIFIGJsb2NrUHJvY2Vzc2luZ1Jld2FyZEJ5R2VuZXJhdG9yBRlibG9ja3NQcm9jZXNzaW5nQmF0Y2hTaXplCgEDbWFwAgNhY2MDaW5jAwkAZwIFA2luYwUZYmxvY2tzUHJvY2Vzc2luZ0JhdGNoU2l6ZQUDYWNjBBF0YXJnZXRCbG9ja0hlaWdodAkAZAIFEm5leHRCbG9ja1RvUHJvY2VzcwUDaW5jBA90YXJnZXRCbG9ja0luZm8JARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkA7QcBBRF0YXJnZXRCbG9ja0hlaWdodAkBB3dyYXBFcnIBAhJpbnZhbGlkIGJsb2NrIGluZm8EFHRyZWFzdXJ5UmV3YXJkT3JGYWlsCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAQ9yZXdhcmRGb3JPcHRpb24CCAUPdGFyZ2V0QmxvY2tJbmZvB3Jld2FyZHMFFXRyZWFzdXJ5QWRkcmVzc09yRmFpbAkBB3dyYXBFcnIBCQCsAgICI2ludmFsaWQgdHJlYXN1cnkgcmV3YXJkIGZvciBoZWlnaHQgCQCkAwEFEXRhcmdldEJsb2NrSGVpZ2h0BAlnZW5lcmF0b3IIBQ90YXJnZXRCbG9ja0luZm8JZ2VuZXJhdG9yBAlhdmFpbGFibGUJAQt2YWx1ZU9yRWxzZQIJAJoIAgUUZmFjdG9yeUFkZHJlc3NPckZhaWwJAQxrZXlBdmFpbGFibGUBBQlnZW5lcmF0b3IAAAQNbHBBc3NldEFtb3VudAMJAGYCBRJjdXJyZW50UHJpY2VPckZhaWwAAAkAawMJAGUCBRR0cmVhc3VyeVJld2FyZE9yRmFpbAUgYmxvY2tQcm9jZXNzaW5nUmV3YXJkQnlHZW5lcmF0b3IFBlNDQUxFOAUSY3VycmVudFByaWNlT3JGYWlsAAAEFGZhY3RvcnlBY3Rpb25zU2luZ2xlCQDMCAIJAPwHBAUUZmFjdG9yeUFkZHJlc3NPckZhaWwCDGludGVnZXJFbnRyeQkAzAgCCQERa2V5QmxvY2tQcm9jZXNzZWQBBRF0YXJnZXRCbG9ja0hlaWdodAkAzAgCBQ1scEFzc2V0QW1vdW50BQNuaWwFA25pbAkAzAgCCQD8BwQFFGZhY3RvcnlBZGRyZXNzT3JGYWlsAgxpbnRlZ2VyRW50cnkJAMwIAgkBDGtleUF2YWlsYWJsZQEFCWdlbmVyYXRvcgkAzAgCCQBkAgUJYXZhaWxhYmxlBQ1scEFzc2V0QW1vdW50BQNuaWwFA25pbAUDbmlsAwkAAAIFFGZhY3RvcnlBY3Rpb25zU2luZ2xlBRRmYWN0b3J5QWN0aW9uc1NpbmdsZQQMY2FsbGVyUmV3YXJkAwkAAAIFA2luYwkAZQIFGWJsb2Nrc1Byb2Nlc3NpbmdCYXRjaFNpemUAAQkAZAIFIGJsb2NrUHJvY2Vzc2luZ1Jld2FyZEJ5R2VuZXJhdG9yBSlibG9ja1Byb2Nlc3NpbmdSZXdhcmRCeUdlbmVyYXRvclJlbWFpbmRlcgUgYmxvY2tQcm9jZXNzaW5nUmV3YXJkQnlHZW5lcmF0b3IJAGQCBQNhY2MFDGNhbGxlclJld2FyZAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgQMY2FsbGVyUmV3YXJkCgACJGwJAMwIAgAACQDMCAIAAQkAzAgCAAIJAMwIAgADCQDMCAIABAUDbmlsCgACJHMJAJADAQUCJGwKAAUkYWNjMAAACgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQNtYXACBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECE0xpc3Qgc2l6ZSBleGNlZWRzIDUJAQUkZjBfMgIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIFBSRhY2MwAAAAAQACAAMABAAFAwkAAAIFDGNhbGxlclJld2FyZAUMY2FsbGVyUmV3YXJkBAdhY3Rpb25zCQDMCAIJAPwHBAUUZmFjdG9yeUFkZHJlc3NPckZhaWwCDXRyYW5zZmVyV2F2ZXMJAMwIAgUQdXNlckFkZHJlc3NCeXRlcwkAzAgCBQxjYWxsZXJSZXdhcmQFA25pbAUDbmlsCQDMCAIJAPwHBAUUZmFjdG9yeUFkZHJlc3NPckZhaWwCDGludGVnZXJFbnRyeQkAzAgCCQEVa2V5TmV4dEJsb2NrVG9Qcm9jZXNzAAkAzAgCCQBkAgUSbmV4dEJsb2NrVG9Qcm9jZXNzBRlibG9ja3NQcm9jZXNzaW5nQmF0Y2hTaXplBQNuaWwFA25pbAUDbmlsAwkAAAIFB2FjdGlvbnMFB2FjdGlvbnMJAJQKAgUDbmlsBQR1bml0CQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAQJ0eAEGdmVyaWZ5AAkA9AMDCAUCdHgJYm9keUJ5dGVzCQCRAwIIBQJ0eAZwcm9vZnMAAAgFAnR4D3NlbmRlclB1YmxpY0tleRC/GPE=", "height": 2615263, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: FtF2bR4vkEcAYznJEojvHBjTbdtSXf3GPcjJujzzRHMA Next: 4KCq3DJDXS3JC2Yjw5ygS9nK9YtTP3eJouE1x76vHZaM Diff:
OldNewDifferences
4848
4949
5050 func keyNextBlockToProcess () = "%s__nextBlockToProcess"
51+
52+
53+func keyBlockProcessed (height) = makeString(["%s%d", "blockProcessed", toString(height)], SEP)
5154
5255
5356 func keyWithdrawalRequest (userAddress,txId) = makeString(["%s%s%s", "withdrawal", toString(userAddress), toBase58String(txId)], SEP)
137140
138141 func rewardForOption (rewards,target) = {
139142 let s = size(rewards)
140- let $t032473272 = rewards[0]
141- let a0 = $t032473272._1
142- let r0 = $t032473272._2
143- let $t032753300 = rewards[1]
144- let a1 = $t032753300._1
145- let r1 = $t032753300._2
146- let $t033033328 = rewards[2]
147- let a2 = $t033033328._1
148- let r2 = $t033033328._2
143+ let $t033473372 = rewards[0]
144+ let a0 = $t033473372._1
145+ let r0 = $t033473372._2
146+ let $t033753400 = rewards[1]
147+ let a1 = $t033753400._1
148+ let r1 = $t033753400._2
149+ let $t034033428 = rewards[2]
150+ let a2 = $t034033428._1
151+ let r2 = $t034033428._2
149152 if (if ((s > 0))
150153 then (a0 == target)
151154 else false)
271274 then {
272275 let userAddress = Address(userAddressBytes)
273276 let withdrawalRequestOption = valueOrErrorMessage(getString(factoryAddressOrFail, keyWithdrawalRequest(userAddress, txId)), wrapErr("invalid withdrawal request"))
274- let $t086058718 = parseWithdrawalRequestValueOrFail(withdrawalRequestOption)
275- let status = $t086058718._1
276- let lpAssetAmount = $t086058718._2
277- let targetPeriod = $t086058718._3
278- let claimTxId = $t086058718._4
277+ let $t087058818 = parseWithdrawalRequestValueOrFail(withdrawalRequestOption)
278+ let status = $t087058818._1
279+ let lpAssetAmount = $t087058818._2
280+ let targetPeriod = $t087058818._3
281+ let claimTxId = $t087058818._4
279282 if ((status == PENDING))
280283 then {
281284 let factoryActions = [invoke(factoryAddressOrFail, "deleteEntry", [keyWithdrawalRequest(userAddress, txId)], nil), invoke(factoryAddressOrFail, "transferAsset", [userAddressBytes, lpAssetAmount, lpAssetIdOrFail], nil)]
298301 let userAddress = Address(userAddressBytes)
299302 let currentPeriodOrFail = valueOrErrorMessage(getInteger(factoryAddressOrFail, keyCurrentPeriod()), wrapErr("invalid period"))
300303 let withdrawalRequestOption = valueOrErrorMessage(getString(factoryAddressOrFail, keyWithdrawalRequest(userAddress, txId)), wrapErr("invalid withdrawal request"))
301- let $t095899702 = parseWithdrawalRequestValueOrFail(withdrawalRequestOption)
302- let status = $t095899702._1
303- let lpAssetAmount = $t095899702._2
304- let targetPeriod = $t095899702._3
305- let claimTxId = $t095899702._4
304+ let $t096899802 = parseWithdrawalRequestValueOrFail(withdrawalRequestOption)
305+ let status = $t096899802._1
306+ let lpAssetAmount = $t096899802._2
307+ let targetPeriod = $t096899802._3
308+ let claimTxId = $t096899802._4
306309 if ((status == FINISHED))
307310 then throwErr("invalid withdrawal request status")
308311 else if ((targetPeriod > currentPeriodOrFail))
332335 let currentStartHeight = valueOrErrorMessage(getInteger(factoryAddressOrFail, keyStartHeight(currentPeriodOrFail)), wrapErr("invalid start height"))
333336 let currentPriceOrFail = valueOrErrorMessage(getInteger(factoryAddressOrFail, keyPriceForPeriod(currentPeriodOrFail)), wrapErr("invalid price"))
334337 let nextBlockToProcess = valueOrErrorMessage(getInteger(factoryAddressOrFail, keyNextBlockToProcess()), wrapErr("invalid next block to process"))
335- let targetBlockInfo = if (if (if ((height >= nextBlockToProcess))
338+ let periodEndHeight = ((currentStartHeight + periodLength) - 1)
339+ let blocksProcessingBatchSizeMax = 5
340+ let blocksProcessingBatchSize = if (if (if ((height >= nextBlockToProcess))
336341 then if ((nextBlockToProcess >= currentStartHeight))
337342 then true
338343 else (currentPeriodOrFail == 0)
339344 else false)
340- then ((currentStartHeight + periodLength) > nextBlockToProcess)
345+ then (periodEndHeight >= nextBlockToProcess)
341346 else false)
342- then valueOrErrorMessage(blockInfoByHeight(nextBlockToProcess), wrapErr("invalid block info"))
347+ then min([((periodEndHeight - nextBlockToProcess) + 1), blocksProcessingBatchSizeMax])
343348 else throwErr(wrapErr("invalid target block"))
344- let treasuryRewardOrFail = valueOrErrorMessage(rewardForOption(targetBlockInfo.rewards, treasuryAddressOrFail), wrapErr("invalid treasury reward"))
345- let generator = targetBlockInfo.generator
346- let blockProcessingRewardOrFail = valueOrErrorMessage(getInteger(factoryAddressOrFail, keyBlockProcessingReward()), wrapErr("invalid block processing reward"))
347- let available = valueOrElse(getInteger(factoryAddressOrFail, keyAvailable(generator)), 0)
348- let lpAssetAmount = if ((currentPriceOrFail > 0))
349- then fraction((treasuryRewardOrFail - blockProcessingRewardOrFail), SCALE8, currentPriceOrFail)
350- else 0
351- let factoryActions = [invoke(factoryAddressOrFail, "integerEntry", [keyNextBlockToProcess(), (nextBlockToProcess + 1)], nil), invoke(factoryAddressOrFail, "integerEntry", [keyAvailable(generator), (available + lpAssetAmount)], nil), invoke(factoryAddressOrFail, "transferWaves", [userAddressBytes, blockProcessingRewardOrFail], nil)]
352- $Tuple2(nil, factoryActions)
349+ let blockProcessingReward = valueOrErrorMessage(getInteger(factoryAddressOrFail, keyBlockProcessingReward()), wrapErr("invalid block processing reward"))
350+ let blockProcessingRewardByGenerator = (blockProcessingReward / blocksProcessingBatchSize)
351+ let blockProcessingRewardByGeneratorRemainder = (blockProcessingReward - (blockProcessingRewardByGenerator * blocksProcessingBatchSize))
352+ func map (acc,inc) = if ((inc >= blocksProcessingBatchSize))
353+ then acc
354+ else {
355+ let targetBlockHeight = (nextBlockToProcess + inc)
356+ let targetBlockInfo = valueOrErrorMessage(blockInfoByHeight(targetBlockHeight), wrapErr("invalid block info"))
357+ let treasuryRewardOrFail = valueOrErrorMessage(rewardForOption(targetBlockInfo.rewards, treasuryAddressOrFail), wrapErr(("invalid treasury reward for height " + toString(targetBlockHeight))))
358+ let generator = targetBlockInfo.generator
359+ let available = valueOrElse(getInteger(factoryAddressOrFail, keyAvailable(generator)), 0)
360+ let lpAssetAmount = if ((currentPriceOrFail > 0))
361+ then fraction((treasuryRewardOrFail - blockProcessingRewardByGenerator), SCALE8, currentPriceOrFail)
362+ else 0
363+ let factoryActionsSingle = [invoke(factoryAddressOrFail, "integerEntry", [keyBlockProcessed(targetBlockHeight), lpAssetAmount], nil), invoke(factoryAddressOrFail, "integerEntry", [keyAvailable(generator), (available + lpAssetAmount)], nil)]
364+ if ((factoryActionsSingle == factoryActionsSingle))
365+ then {
366+ let callerReward = if ((inc == (blocksProcessingBatchSize - 1)))
367+ then (blockProcessingRewardByGenerator + blockProcessingRewardByGeneratorRemainder)
368+ else blockProcessingRewardByGenerator
369+ (acc + callerReward)
370+ }
371+ else throw("Strict value is not equal to itself.")
372+ }
373+
374+ let callerReward = {
375+ let $l = [0, 1, 2, 3, 4]
376+ let $s = size($l)
377+ let $acc0 = 0
378+ func $f0_1 ($a,$i) = if (($i >= $s))
379+ then $a
380+ else map($a, $l[$i])
381+
382+ func $f0_2 ($a,$i) = if (($i >= $s))
383+ then $a
384+ else throw("List size exceeds 5")
385+
386+ $f0_2($f0_1($f0_1($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3), 4), 5)
387+ }
388+ if ((callerReward == callerReward))
389+ then {
390+ let actions = [invoke(factoryAddressOrFail, "transferWaves", [userAddressBytes, callerReward], nil), invoke(factoryAddressOrFail, "integerEntry", [keyNextBlockToProcess(), (nextBlockToProcess + blocksProcessingBatchSize)], nil)]
391+ if ((actions == actions))
392+ then $Tuple2(nil, unit)
393+ else throw("Strict value is not equal to itself.")
394+ }
395+ else throw("Strict value is not equal to itself.")
353396 }
354397 else throw("Strict value is not equal to itself.")
355398 }
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 7 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let SEP = "__"
55
66 let CONTRACT_NAME = "calculator.ride"
77
88 let SCALE8 = 100000000
99
1010 let PENDING = "PENDING"
1111
1212 let FINISHED = "FINISHED"
1313
1414 func wrapErr (s) = ((CONTRACT_NAME + ": ") + s)
1515
1616
1717 func throwErr (s) = throw(wrapErr(s))
1818
1919
2020 func keyFactoryAddress () = makeString(["%s", "factory"], SEP)
2121
2222
2323 func keyLpAssetId () = makeString(["%s", "lpAssetId"], SEP)
2424
2525
2626 func keyTreasuryAddress () = makeString(["%s", "treasury"], SEP)
2727
2828
2929 func keyAvailable (userAddress) = makeString(["%s%s", "available", toString(userAddress)], SEP)
3030
3131
3232 func keyClaimed (userAddress) = makeString(["%s%s", "claimed", toString(userAddress)], SEP)
3333
3434
3535 func keyCurrentPeriod () = makeString(["%s", "currentPeriod"], SEP)
3636
3737
3838 func keyPriceForPeriod (period) = makeString(["%s%d", "price", toString(period)], SEP)
3939
4040
4141 func keyStartHeight (period) = makeString(["%s%d", "startHeight", toString(period)], SEP)
4242
4343
4444 func keyPeriodLength () = "%s__periodLength"
4545
4646
4747 func keyBlockProcessingReward () = "%s__blockProcessingReward"
4848
4949
5050 func keyNextBlockToProcess () = "%s__nextBlockToProcess"
51+
52+
53+func keyBlockProcessed (height) = makeString(["%s%d", "blockProcessed", toString(height)], SEP)
5154
5255
5356 func keyWithdrawalRequest (userAddress,txId) = makeString(["%s%s%s", "withdrawal", toString(userAddress), toBase58String(txId)], SEP)
5457
5558
5659 func valueWithdrawalRequest (status,lpAssetAmount,targetPeriod,claimTxId) = {
5760 let claimTxIdStr = match claimTxId {
5861 case b: ByteVector =>
5962 toBase58String(b)
6063 case _: Unit =>
6164 "SOON"
6265 case _ =>
6366 throw("Match error")
6467 }
6568 makeString(["%s%d%d%s", status, toString(lpAssetAmount), toString(targetPeriod), claimTxIdStr], SEP)
6669 }
6770
6871
6972 func parseWithdrawalRequestValueOrFail (s) = {
7073 let parts = split(s, SEP)
7174 if ((size(parts) == 5))
7275 then {
7376 let status = parts[1]
7477 let lpAssetAmount = valueOrErrorMessage(parseInt(parts[2]), wrapErr("invalid lpAssetAmount"))
7578 let targetPeriod = valueOrErrorMessage(parseInt(parts[3]), wrapErr("invalid targetPeriod"))
7679 let claimTxId = parts[4]
7780 $Tuple4(status, lpAssetAmount, targetPeriod, claimTxId)
7881 }
7982 else throwErr("invalid withdrawal request value")
8083 }
8184
8285
8386 let factoryAddressOption = match getString(this, keyFactoryAddress()) {
8487 case s: String =>
8588 addressFromString(s)
8689 case _: Unit =>
8790 unit
8891 case _ =>
8992 throw("Match error")
9093 }
9194
9295 let factoryAddressOrFail = valueOrErrorMessage(factoryAddressOption, wrapErr("invalid factory address"))
9396
9497 let lpAssetIdOption = match factoryAddressOption {
9598 case a: Address =>
9699 match getString(a, keyLpAssetId()) {
97100 case s: String =>
98101 fromBase58String(s)
99102 case _: Unit =>
100103 unit
101104 case _ =>
102105 throw("Match error")
103106 }
104107 case _: Unit =>
105108 unit
106109 case _ =>
107110 throw("Match error")
108111 }
109112
110113 let lpAssetIdOrFail = valueOrErrorMessage(lpAssetIdOption, wrapErr("invalid lpAssetId"))
111114
112115 let treasuryAddressOption = match factoryAddressOption {
113116 case a: Address =>
114117 match getString(a, keyTreasuryAddress()) {
115118 case s: String =>
116119 addressFromString(s)
117120 case _: Unit =>
118121 unit
119122 case _ =>
120123 throw("Match error")
121124 }
122125 case _: Unit =>
123126 unit
124127 case _ =>
125128 throw("Match error")
126129 }
127130
128131 let treasuryAddressOrFail = valueOrErrorMessage(treasuryAddressOption, wrapErr("invalid treasury address"))
129132
130133 func onlyAddress (i,address) = if ((i.caller == address))
131134 then true
132135 else throwErr("permission denied")
133136
134137
135138 func onlyFactory (i) = onlyAddress(i, factoryAddressOrFail)
136139
137140
138141 func rewardForOption (rewards,target) = {
139142 let s = size(rewards)
140- let $t032473272 = rewards[0]
141- let a0 = $t032473272._1
142- let r0 = $t032473272._2
143- let $t032753300 = rewards[1]
144- let a1 = $t032753300._1
145- let r1 = $t032753300._2
146- let $t033033328 = rewards[2]
147- let a2 = $t033033328._1
148- let r2 = $t033033328._2
143+ let $t033473372 = rewards[0]
144+ let a0 = $t033473372._1
145+ let r0 = $t033473372._2
146+ let $t033753400 = rewards[1]
147+ let a1 = $t033753400._1
148+ let r1 = $t033753400._2
149+ let $t034033428 = rewards[2]
150+ let a2 = $t034033428._1
151+ let r2 = $t034033428._2
149152 if (if ((s > 0))
150153 then (a0 == target)
151154 else false)
152155 then r0
153156 else if (if ((s > 1))
154157 then (a1 == target)
155158 else false)
156159 then r1
157160 else if (if ((s > 2))
158161 then (a2 == target)
159162 else false)
160163 then r2
161164 else unit
162165 }
163166
164167
165168 @Callable(i)
166169 func claimLP (userAddressBytes) = {
167170 let checkCaller = onlyFactory(i)
168171 if ((checkCaller == checkCaller))
169172 then {
170173 let userAddress = Address(userAddressBytes)
171174 let available = valueOrElse(getInteger(factoryAddressOrFail, keyAvailable(userAddress)), 0)
172175 let claimed = valueOrElse(getInteger(factoryAddressOrFail, keyClaimed(userAddress)), 0)
173176 let factoryActions = if ((available > 0))
174177 then [invoke(factoryAddressOrFail, "transferAsset", [userAddressBytes, available, lpAssetIdOrFail], nil), invoke(factoryAddressOrFail, "integerEntry", [keyAvailable(userAddress), 0], nil), invoke(factoryAddressOrFail, "stringEntry", [keyClaimed(userAddress), (claimed + available)], nil)]
175178 else throwErr("nothing to claim")
176179 $Tuple2(nil, factoryActions)
177180 }
178181 else throw("Strict value is not equal to itself.")
179182 }
180183
181184
182185
183186 @Callable(i)
184187 func finalize (newTreasuryVolumeInWaves,xtnPrice,pwrManagersBonus,treasuryVolumeDiffAllocationCoef) = {
185188 let checks = [if ((i.originCaller == factoryAddressOrFail))
186189 then true
187190 else throwErr("permission denied"), if ((newTreasuryVolumeInWaves >= 0))
188191 then true
189192 else throwErr("invalid new treasury volume"), if ((xtnPrice >= 0))
190193 then true
191194 else throwErr("invalid XTN price"), if (if ((pwrManagersBonus >= 0))
192195 then (SCALE8 >= pwrManagersBonus)
193196 else false)
194197 then true
195198 else throwErr("invalid PWR managers bonus"), if (if ((treasuryVolumeDiffAllocationCoef >= -(SCALE8)))
196199 then (SCALE8 >= treasuryVolumeDiffAllocationCoef)
197200 else false)
198201 then true
199202 else throwErr("invalid treasury volume diff allocation coefficient")]
200203 if ((checks == checks))
201204 then {
202205 let currentPeriodOrFail = valueOrErrorMessage(getInteger(factoryAddressOrFail, keyCurrentPeriod()), wrapErr("invalid period"))
203206 let newPeriod = (currentPeriodOrFail + 1)
204207 let newPrice = SCALE8
205208 let lpAssetAmountToBurn = 0
206209 let factoryActions = [invoke(factoryAddressOrFail, "integerEntry", [keyCurrentPeriod(), newPeriod], nil), invoke(factoryAddressOrFail, "integerEntry", [keyPriceForPeriod(newPeriod), newPrice], nil), invoke(factoryAddressOrFail, "burn", [lpAssetAmountToBurn], nil)]
207210 $Tuple2(nil, factoryActions)
208211 }
209212 else throw("Strict value is not equal to itself.")
210213 }
211214
212215
213216
214217 @Callable(i)
215218 func invest (userAddressBytes) = {
216219 let checkCaller = onlyFactory(i)
217220 if ((checkCaller == checkCaller))
218221 then {
219222 let userAddress = Address(userAddressBytes)
220223 let currentPeriodOrFail = valueOrErrorMessage(getInteger(factoryAddressOrFail, keyCurrentPeriod()), wrapErr("invalid period"))
221224 let currentPriceOrFail = valueOrErrorMessage(getInteger(factoryAddressOrFail, keyPriceForPeriod(currentPeriodOrFail)), wrapErr("invalid price"))
222225 let payment = if ((size(i.payments) == 1))
223226 then i.payments[0]
224227 else throwErr("invalid payments")
225228 let paymentAmount = if (if ((payment.assetId == unit))
226229 then (payment.amount > 0)
227230 else false)
228231 then payment.amount
229232 else throwErr("invalid payment amount")
230233 let lpAssetAmount = if ((currentPriceOrFail > 0))
231234 then fraction(paymentAmount, SCALE8, currentPriceOrFail)
232235 else 0
233236 let factoryActions = [invoke(factoryAddressOrFail, "integerEntry", ["invested__WAVES", 0], nil), invoke(factoryAddressOrFail, "reissue", [lpAssetAmount], nil), invoke(factoryAddressOrFail, "transferAsset", [userAddressBytes, lpAssetAmount, lpAssetIdOrFail], nil), invoke(factoryAddressOrFail, "transferWaves", [treasuryAddressOrFail.bytes, paymentAmount], [AttachedPayment(unit, paymentAmount)])]
234237 $Tuple2(nil, factoryActions)
235238 }
236239 else throw("Strict value is not equal to itself.")
237240 }
238241
239242
240243
241244 @Callable(i)
242245 func withdraw (userAddressBytes) = {
243246 let checkCaller = onlyFactory(i)
244247 if ((checkCaller == checkCaller))
245248 then {
246249 let userAddress = Address(userAddressBytes)
247250 let currentPeriodOrFail = valueOrErrorMessage(getInteger(factoryAddressOrFail, keyCurrentPeriod()), wrapErr("invalid period"))
248251 let payment = if ((size(i.payments) == 1))
249252 then i.payments[0]
250253 else throwErr(wrapErr("invalid payments"))
251254 let paymentAssetId = if ((payment.assetId == lpAssetIdOrFail))
252255 then lpAssetIdOrFail
253256 else throwErr("invalid payment asset")
254257 let paymentAmount = if ((payment.amount > 0))
255258 then payment.amount
256259 else throwErr("invalid payment amount")
257260 let factoryActions = [invoke(factoryAddressOrFail, "stringEntry", [keyWithdrawalRequest(userAddress, i.transactionId), valueWithdrawalRequest(PENDING, paymentAmount, (currentPeriodOrFail + 1), unit)], nil)]
258261 if ((factoryActions == factoryActions))
259262 then $Tuple2([ScriptTransfer(factoryAddressOrFail, paymentAmount, paymentAssetId)], factoryActions)
260263 else throw("Strict value is not equal to itself.")
261264 }
262265 else throw("Strict value is not equal to itself.")
263266 }
264267
265268
266269
267270 @Callable(i)
268271 func cancelWithdraw (userAddressBytes,txId) = {
269272 let checkCaller = onlyFactory(i)
270273 if ((checkCaller == checkCaller))
271274 then {
272275 let userAddress = Address(userAddressBytes)
273276 let withdrawalRequestOption = valueOrErrorMessage(getString(factoryAddressOrFail, keyWithdrawalRequest(userAddress, txId)), wrapErr("invalid withdrawal request"))
274- let $t086058718 = parseWithdrawalRequestValueOrFail(withdrawalRequestOption)
275- let status = $t086058718._1
276- let lpAssetAmount = $t086058718._2
277- let targetPeriod = $t086058718._3
278- let claimTxId = $t086058718._4
277+ let $t087058818 = parseWithdrawalRequestValueOrFail(withdrawalRequestOption)
278+ let status = $t087058818._1
279+ let lpAssetAmount = $t087058818._2
280+ let targetPeriod = $t087058818._3
281+ let claimTxId = $t087058818._4
279282 if ((status == PENDING))
280283 then {
281284 let factoryActions = [invoke(factoryAddressOrFail, "deleteEntry", [keyWithdrawalRequest(userAddress, txId)], nil), invoke(factoryAddressOrFail, "transferAsset", [userAddressBytes, lpAssetAmount, lpAssetIdOrFail], nil)]
282285 if ((factoryActions == factoryActions))
283286 then $Tuple2(nil, factoryActions)
284287 else throw("Strict value is not equal to itself.")
285288 }
286289 else throwErr("invalid withdrawal request status")
287290 }
288291 else throw("Strict value is not equal to itself.")
289292 }
290293
291294
292295
293296 @Callable(i)
294297 func claimWaves (userAddressBytes,txId) = {
295298 let checkCaller = onlyFactory(i)
296299 if ((checkCaller == checkCaller))
297300 then {
298301 let userAddress = Address(userAddressBytes)
299302 let currentPeriodOrFail = valueOrErrorMessage(getInteger(factoryAddressOrFail, keyCurrentPeriod()), wrapErr("invalid period"))
300303 let withdrawalRequestOption = valueOrErrorMessage(getString(factoryAddressOrFail, keyWithdrawalRequest(userAddress, txId)), wrapErr("invalid withdrawal request"))
301- let $t095899702 = parseWithdrawalRequestValueOrFail(withdrawalRequestOption)
302- let status = $t095899702._1
303- let lpAssetAmount = $t095899702._2
304- let targetPeriod = $t095899702._3
305- let claimTxId = $t095899702._4
304+ let $t096899802 = parseWithdrawalRequestValueOrFail(withdrawalRequestOption)
305+ let status = $t096899802._1
306+ let lpAssetAmount = $t096899802._2
307+ let targetPeriod = $t096899802._3
308+ let claimTxId = $t096899802._4
306309 if ((status == FINISHED))
307310 then throwErr("invalid withdrawal request status")
308311 else if ((targetPeriod > currentPeriodOrFail))
309312 then throwErr("invalid withdrawal request period")
310313 else {
311314 let currentPriceOrFail = valueOrErrorMessage(getInteger(factoryAddressOrFail, keyPriceForPeriod(currentPeriodOrFail)), wrapErr("invalid price"))
312315 let amount = if ((currentPriceOrFail > 0))
313316 then fraction(lpAssetAmount, currentPriceOrFail, SCALE8)
314317 else 0
315318 let factoryActions = [invoke(factoryAddressOrFail, "stringEntry", [keyWithdrawalRequest(userAddress, txId), valueWithdrawalRequest(FINISHED, lpAssetAmount, targetPeriod, i.transactionId)], nil), invoke(factoryAddressOrFail, "burn", [lpAssetAmount], nil), invoke(factoryAddressOrFail, "transferWaves", [userAddressBytes, amount], nil)]
316319 $Tuple2(nil, factoryActions)
317320 }
318321 }
319322 else throw("Strict value is not equal to itself.")
320323 }
321324
322325
323326
324327 @Callable(i)
325328 func processBlocks (userAddressBytes) = {
326329 let checkCaller = onlyFactory(i)
327330 if ((checkCaller == checkCaller))
328331 then {
329332 let userAddress = Address(userAddressBytes)
330333 let currentPeriodOrFail = valueOrErrorMessage(getInteger(factoryAddressOrFail, keyCurrentPeriod()), wrapErr("invalid period"))
331334 let periodLength = valueOrErrorMessage(getInteger(factoryAddressOrFail, keyPeriodLength()), wrapErr("invalid period length"))
332335 let currentStartHeight = valueOrErrorMessage(getInteger(factoryAddressOrFail, keyStartHeight(currentPeriodOrFail)), wrapErr("invalid start height"))
333336 let currentPriceOrFail = valueOrErrorMessage(getInteger(factoryAddressOrFail, keyPriceForPeriod(currentPeriodOrFail)), wrapErr("invalid price"))
334337 let nextBlockToProcess = valueOrErrorMessage(getInteger(factoryAddressOrFail, keyNextBlockToProcess()), wrapErr("invalid next block to process"))
335- let targetBlockInfo = if (if (if ((height >= nextBlockToProcess))
338+ let periodEndHeight = ((currentStartHeight + periodLength) - 1)
339+ let blocksProcessingBatchSizeMax = 5
340+ let blocksProcessingBatchSize = if (if (if ((height >= nextBlockToProcess))
336341 then if ((nextBlockToProcess >= currentStartHeight))
337342 then true
338343 else (currentPeriodOrFail == 0)
339344 else false)
340- then ((currentStartHeight + periodLength) > nextBlockToProcess)
345+ then (periodEndHeight >= nextBlockToProcess)
341346 else false)
342- then valueOrErrorMessage(blockInfoByHeight(nextBlockToProcess), wrapErr("invalid block info"))
347+ then min([((periodEndHeight - nextBlockToProcess) + 1), blocksProcessingBatchSizeMax])
343348 else throwErr(wrapErr("invalid target block"))
344- let treasuryRewardOrFail = valueOrErrorMessage(rewardForOption(targetBlockInfo.rewards, treasuryAddressOrFail), wrapErr("invalid treasury reward"))
345- let generator = targetBlockInfo.generator
346- let blockProcessingRewardOrFail = valueOrErrorMessage(getInteger(factoryAddressOrFail, keyBlockProcessingReward()), wrapErr("invalid block processing reward"))
347- let available = valueOrElse(getInteger(factoryAddressOrFail, keyAvailable(generator)), 0)
348- let lpAssetAmount = if ((currentPriceOrFail > 0))
349- then fraction((treasuryRewardOrFail - blockProcessingRewardOrFail), SCALE8, currentPriceOrFail)
350- else 0
351- let factoryActions = [invoke(factoryAddressOrFail, "integerEntry", [keyNextBlockToProcess(), (nextBlockToProcess + 1)], nil), invoke(factoryAddressOrFail, "integerEntry", [keyAvailable(generator), (available + lpAssetAmount)], nil), invoke(factoryAddressOrFail, "transferWaves", [userAddressBytes, blockProcessingRewardOrFail], nil)]
352- $Tuple2(nil, factoryActions)
349+ let blockProcessingReward = valueOrErrorMessage(getInteger(factoryAddressOrFail, keyBlockProcessingReward()), wrapErr("invalid block processing reward"))
350+ let blockProcessingRewardByGenerator = (blockProcessingReward / blocksProcessingBatchSize)
351+ let blockProcessingRewardByGeneratorRemainder = (blockProcessingReward - (blockProcessingRewardByGenerator * blocksProcessingBatchSize))
352+ func map (acc,inc) = if ((inc >= blocksProcessingBatchSize))
353+ then acc
354+ else {
355+ let targetBlockHeight = (nextBlockToProcess + inc)
356+ let targetBlockInfo = valueOrErrorMessage(blockInfoByHeight(targetBlockHeight), wrapErr("invalid block info"))
357+ let treasuryRewardOrFail = valueOrErrorMessage(rewardForOption(targetBlockInfo.rewards, treasuryAddressOrFail), wrapErr(("invalid treasury reward for height " + toString(targetBlockHeight))))
358+ let generator = targetBlockInfo.generator
359+ let available = valueOrElse(getInteger(factoryAddressOrFail, keyAvailable(generator)), 0)
360+ let lpAssetAmount = if ((currentPriceOrFail > 0))
361+ then fraction((treasuryRewardOrFail - blockProcessingRewardByGenerator), SCALE8, currentPriceOrFail)
362+ else 0
363+ let factoryActionsSingle = [invoke(factoryAddressOrFail, "integerEntry", [keyBlockProcessed(targetBlockHeight), lpAssetAmount], nil), invoke(factoryAddressOrFail, "integerEntry", [keyAvailable(generator), (available + lpAssetAmount)], nil)]
364+ if ((factoryActionsSingle == factoryActionsSingle))
365+ then {
366+ let callerReward = if ((inc == (blocksProcessingBatchSize - 1)))
367+ then (blockProcessingRewardByGenerator + blockProcessingRewardByGeneratorRemainder)
368+ else blockProcessingRewardByGenerator
369+ (acc + callerReward)
370+ }
371+ else throw("Strict value is not equal to itself.")
372+ }
373+
374+ let callerReward = {
375+ let $l = [0, 1, 2, 3, 4]
376+ let $s = size($l)
377+ let $acc0 = 0
378+ func $f0_1 ($a,$i) = if (($i >= $s))
379+ then $a
380+ else map($a, $l[$i])
381+
382+ func $f0_2 ($a,$i) = if (($i >= $s))
383+ then $a
384+ else throw("List size exceeds 5")
385+
386+ $f0_2($f0_1($f0_1($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3), 4), 5)
387+ }
388+ if ((callerReward == callerReward))
389+ then {
390+ let actions = [invoke(factoryAddressOrFail, "transferWaves", [userAddressBytes, callerReward], nil), invoke(factoryAddressOrFail, "integerEntry", [keyNextBlockToProcess(), (nextBlockToProcess + blocksProcessingBatchSize)], nil)]
391+ if ((actions == actions))
392+ then $Tuple2(nil, unit)
393+ else throw("Strict value is not equal to itself.")
394+ }
395+ else throw("Strict value is not equal to itself.")
353396 }
354397 else throw("Strict value is not equal to itself.")
355398 }
356399
357400
358401 @Verifier(tx)
359402 func verify () = sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey)
360403

github/deemru/w8io/026f985 
58.44 ms