tx · AwAPsXvM7a85MJqvyhaKeQHETwBc2HPFhuCgSFMBFdyU

3NBPx1Fciu3JQNEGZ21jSnTdutLNGGBUSXh:  -0.01300000 Waves

2024.09.13 17:18 [3281976] smart account 3NBPx1Fciu3JQNEGZ21jSnTdutLNGGBUSXh > SELF 0.00000000 Waves

{ "type": 13, "id": "AwAPsXvM7a85MJqvyhaKeQHETwBc2HPFhuCgSFMBFdyU", "fee": 1300000, "feeAssetId": null, "timestamp": 1726237135039, "version": 2, "chainId": 84, "sender": "3NBPx1Fciu3JQNEGZ21jSnTdutLNGGBUSXh", "senderPublicKey": "3QtfC1XbLZXdeawMDeSERy9vvjUmj1XYd2GFmrvx7pWQ", "proofs": [ "Q2XsvZQXJkLhwDWakejKqvxV5TpAVwWSBRNnMtpcfUawAL6E3fKvKTdr9zDgro1YR3nfwKR7pam73zx5KpfEgFN" ], "script": "base64:BgIjCAISBAoCCAgSBAoCCAESAwoBBBIDCgEBEgASABIAEgMKAQgsAANTRVACAl9fAAVNVUxUOACAwtcvABRXTEcyQUNSRVNfTVVMVElQTElFUgDIAQAFY2hhaW4JAMkBAgkAygECCAUEdGhpcwVieXRlcwABAAEAFmRlZmF1bHRSZXN0MkFkZHJlc3NTdHIEByRtYXRjaDAFBWNoYWluAwkAAAIBAVcFByRtYXRjaDACIzNQRndZdGE4YmlFejMxenBlRmU1REpLOHdFNXRyU3BRVkY4AwkAAAIBAVQFByRtYXRjaDACIzNON1V1WWFyNjI2NFA1OEZCaFZXS1BRQWg0WXVhMmhnbmd2CQACAQINVW5rbm93biBjaGFpbgAVb2xkU3Rha2luZ0NvbnRyYWN0U3RyBAckbWF0Y2gwBQVjaGFpbgMJAAACAQFXBQckbWF0Y2gwAiMzUExuY1h0UzFVODNENmNRYkZEM0g4ckJIUExnenhTRktaMQMJAAACAQFUBQckbWF0Y2gwAiMzTkRDeUJHNXE4NUp1YVJpaWdVZUV0YWlueWpDUVQzWHBabQkAAgECDVVua25vd24gY2hhaW4BD2dldFN0cmluZ09yRmFpbAIHYWRkcmVzcwNrZXkJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQdhZGRyZXNzBQNrZXkJALkJAgkAzAgCAgptYW5kYXRvcnkgCQDMCAIJAKUIAQUHYWRkcmVzcwkAzAgCAgEuCQDMCAIFA2tleQkAzAgCAg8gaXMgbm90IGRlZmluZWQFA25pbAIAABBJZHhDZmdBY3JlczJEYXBwAAEADUlkeENmZ1dsZ0RhcHAAAgEKa2V5UmVzdENmZwACDiVzX19yZXN0Q29uZmlnAQ9rZXlSZXN0MkFkZHJlc3MAAg0lc19fcmVzdDJBZGRyARFyZWFkUmVzdENmZ09yRmFpbAEEcmVzdAkAvAkCCQEPZ2V0U3RyaW5nT3JGYWlsAgUEcmVzdAkBCmtleVJlc3RDZmcABQNTRVABGGdldENvbnRyYWN0QWRkcmVzc09yRmFpbAIIcmVzdDJDZmcDaWR4CQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKYIAQkAkQMCBQhyZXN0MkNmZwUDaWR4CQCsAgICKlJlc3QgY2ZnIGRvZXNuJ3QgY29udGFpbiBhZGRyZXNzIGF0IGluZGV4IAkApAMBBQNpZHgADXJlc3QyQ29udHJhY3QJARFAZXh0ck5hdGl2ZSgxMDYyKQEJAQt2YWx1ZU9yRWxzZQIJAJ0IAgUEdGhpcwkBD2tleVJlc3QyQWRkcmVzcwAFFmRlZmF1bHRSZXN0MkFkZHJlc3NTdHIACHJlc3QyQ2ZnCQERcmVhZFJlc3RDZmdPckZhaWwBBQ1yZXN0MkNvbnRyYWN0AA5hY3JlczJDb250cmFjdAkBGGdldENvbnRyYWN0QWRkcmVzc09yRmFpbAIFCHJlc3QyQ2ZnBRBJZHhDZmdBY3JlczJEYXBwAAt3bGdDb250cmFjdAkBGGdldENvbnRyYWN0QWRkcmVzc09yRmFpbAIFCHJlc3QyQ2ZnBQ1JZHhDZmdXbGdEYXBwABNvbGRBY3Jlc0NvbnRyYWN0S2V5AhBvbGRBY3Jlc0NvbnRyYWN0AQprZXlCbG9ja2VkAAIQY29udHJhY3RzQmxvY2tlZAERa2V5TGFzdFR4SWRCeVVzZXIBBGFkZHIJAKwCAgIPbGFzdFR4SWRCeVVzZXJfBQRhZGRyAA13bGdBc3NldElkS2V5Agt3bGdfYXNzZXRJZAAKd2xnQXNzZXRJZAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCcCAIFC3dsZ0NvbnRyYWN0BQ13bGdBc3NldElkS2V5AhhXTEdPTEQgaXMgbm90IGlzc3VlZCB5ZXQAFGFjcmVzSXNzdWVkQW1vdW50S2V5AhFhY3Jlc0lzc3VlZEFtb3VudAAPYWNyZXNBc3NldElkS2V5AgxhY3Jlc0Fzc2V0SWQADGFjcmVzQXNzZXRJZAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCcCAIFDmFjcmVzMkNvbnRyYWN0BQ9hY3Jlc0Fzc2V0SWRLZXkCF0FDUkVTIGlzIG5vdCBpc3N1ZWQgeWV0ARhrZXlBY3Jlc1N0YWtlZFRpbWVCeVVzZXIBBGFkZHIJAKwCAgIWYWNyZXNTdGFrZWRUaW1lQnlVc2VyXwUEYWRkcgEVa2V5U3Rha2VkTGFuZHNCeU93bmVyAQlvd25lckFkZHIJAKwCAgITc3Rha2VkTGFuZHNCeU93bmVyXwUJb3duZXJBZGRyARRrZXlTdGFrZWREdWNrQnlPd25lcgEJ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Y3Rpb25JZAUDbmlsARJzdGFrZUFjcmVzSW50ZXJuYWwCA2FtdAdhZGRyZXNzBAl3bGdSZXN1bHQJAPwHBAULd2xnQ29udHJhY3QCEm9uU3Rha2VVbnN0YWtlTGFuZAkAzAgCBQdhZGRyZXNzBQNuaWwFA25pbAMJAAACBQl3bGdSZXN1bHQFCXdsZ1Jlc3VsdAQDbm93CAUJbGFzdEJsb2NrCXRpbWVzdGFtcAQHdGltZUtleQkBGGtleUFjcmVzU3Rha2VkVGltZUJ5VXNlcgEFB2FkZHJlc3MECWFtb3VudEtleQkBF2tleUFjcmVzU3Rha2VkQW10QnlVc2VyAQUHYWRkcmVzcwQObmV3QWNyZXNBbW91bnQJAGQCCQELdmFsdWVPckVsc2UCCQCfCAEFCWFtb3VudEtleQAABQNhbXQECG9sZFRvdGFsCQELdmFsdWVPckVsc2UCCQCfCAEFEmFjcmVzU3Rha2RUb3RhbEtleQAABAl1c2VyRnBLZXkJARVrZXlGYXJtaW5nUG93ZXJCeVVzZXIBBQdhZGRyZXNzBAVvbGRGcAkBC3ZhbHVlT3JFbHNlAgkAnwgBBQl1c2VyRnBLZXkAAAQFbmV3RnAJARZnZXRGYXJtaW5nUG93ZXJCeUFjcmVzAQUObmV3QWNyZXNBbW91bnQECm9sZFRvdGFsRnAJAQt2YWx1ZU9yRWxzZQIJAJ8IAQUUdG90YWxGYXJtaW5nUG93ZXJLZXkAAAkAlAoCCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQd0aW1lS2V5CAUJbGFzdEJsb2NrCXRpbWVzdGFtcAkAzAgCCQEMSW50ZWdlckVudHJ5AgUJYW1vdW50S2V5BQ5uZXdBY3Jlc0Ftb3VudAkAzAgCCQEMSW50ZWdlckVudHJ5AgUSYWNyZXNTdGFrZFRvdGFsS2V5CQBkAgUIb2xkVG90YWwFA2FtdAkAzAgCCQEMSW50ZWdlckVudHJ5AgUJdXNlckZwS2V5BQVuZXdGcAkAzAgCCQEMSW50ZWdlckVudHJ5AgUUdG90YWxGYXJtaW5nUG93ZXJLZXkJAGQCCQBlAgUKb2xkVG90YWxGcAUFb2xkRnAFBW5ld0ZwBQNuaWwFCXdsZ1Jlc3VsdAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLggBaQENY29uc3RydWN0b3JWMQIJcmVzdDJBZGRyDm9sZEFjckNvbnRyYWN0AwkBAiE9AggFAWkGY2FsbGVyBQR0aGlzCQACAQIRUGVybWlzc2lvbiBkZW5pZWQEDm9sZEFjckNvbnRBZGRyCQERQGV4dHJOYXRpdmUoMTA2MikBBQ5vbGRBY3JDb250cmFjdAkAzAgCCQEMSW50ZWdlckVudHJ5AgUUYWNyZXNJc3N1ZWRBbW91bnRLZXkJARFAZXh0ck5hdGl2ZSgxMDUwKQIFDm9sZEFjckNvbnRBZGRyBRRhY3Jlc0lzc3VlZEFtb3VudEtleQkAzAgCCQELQmluYXJ5RW50cnkCBQ9hY3Jlc0Fzc2V0SWRLZXkJARFAZXh0ck5hdGl2ZSgxMDUyKQIFDm9sZEFjckNvbnRBZGRyBQ9hY3Jlc0Fzc2V0SWRLZXkJAMwIAgkBC1N0cmluZ0VudHJ5AgkBD2tleVJlc3QyQWRkcmVzcwAFCXJlc3QyQWRkcgkAzAgCCQELU3RyaW5nRW50cnkCBRNvbGRBY3Jlc0NvbnRyYWN0S2V5BQ5vbGRBY3JDb250cmFjdAUDbmlsAWkBC3NhdmVJbnRlZ2VyAgNrZXkGYW1vdW50AwkBAiE9AggFAWkGY2FsbGVyBQR0aGlzCQACAQIgc2F2ZUludGVnZXIgaXMgbm90IHB1YmxpYyBtZXRob2QJAMwIAgkBDEludGVnZXJFbnRyeQIFA2tleQUGYW1vdW50BQNuaWwBaQEKc2V0QmxvY2tlZAEJaXNCbG9ja2VkAwkBAiE9AggFAWkGY2FsbGVyBQR0aGlzCQACAQIRcGVybWlzc2lvbiBkZW5pZWQJAMwIAgkBDEJvb2xlYW5FbnRyeQIJAQprZXlCbG9ja2VkAAUJaXNCbG9ja2VkBQNuaWwBaQEMdW5zdGFrZUFjcmVzAQZhbW91bnQEDXByb2xvZ0FjdGlvbnMJAQZwcm9sb2cBBQFpAwkAZwIAAAUGYW1vdW50CQACAQIZQW1vdW50IHNob3VsZCBiZSBwb3NpdGl2ZQQHYWRkcmVzcwkApQgBCAUBaQZjYWxsZXIDCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAAJAAIBAhRObyBwYXltZW50cyByZXF1aXJlZAQHdGltZUtleQkBGGtleUFjcmVzU3Rha2VkVGltZUJ5VXNlcgEFB2FkZHJlc3MECWFtb3VudEtleQkBF2tleUFjcmVzU3Rha2VkQW10QnlVc2VyAQUHYWRkcmVzcwQOb2xkQWNyZXNBbW91bnQJAQt2YWx1ZU9yRWxzZQIJAJ8IAQUJYW1vdW50S2V5AAADCQBmAgUGYW1vdW50BQ5vbGRBY3Jlc0Ftb3VudAkAAgEJAKwCAgkArAICCQCsAgICDllvdSBoYXZlIG9ubHkgCQEKZml4ZWRQb2ludAIFDm9sZEFjcmVzQW1vdW50AAgCICBBQ1JFUyBzdGFrZWQsIHRyaWVkIHRvIHVuc3Rha2UgCQEKZml4ZWRQb2ludAIFBmFtb3VudAAIBAhvbGRUb3RhbAkBC3ZhbHVlT3JFbHNlAgkAnwgBBRJhY3Jlc1N0YWtkVG90YWxLZXkAAAQJd2xnUmVzdWx0CQD8BwQFC3dsZ0NvbnRyYWN0AhJvblN0YWtlVW5zdGFrZUxhbmQJAMwIAgUHYWRkcmVzcwUDbmlsBQNuaWwEDm5ld0FjcmVzQW1vdW50CQBlAgUOb2xkQWNyZXNBbW91bnQFBmFtb3VudAQJdXNlckZwS2V5CQEVa2V5RmFybWluZ1Bvd2VyQnlVc2VyAQUHYWRkcmVzcwQFb2xkRnAJAQt2YWx1ZU9yRWxzZQIJAJ8IAQUJdXNlckZwS2V5AAAEBW5ld0ZwCQEWZ2V0RmFybWluZ1Bvd2VyQnlBY3JlcwEFDm5ld0FjcmVzQW1vdW50BApvbGRUb3RhbEZwCQELdmFsdWVPckVsc2UCCQCfCAEFFHRvdGFsRmFybWluZ1Bvd2VyS2V5AAAJAJQKAgkAzggCCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQd0aW1lS2V5CAUJbGFzdEJsb2NrCXRpbWVzdGFtcAkAzAgCCQEMSW50ZWdlckVudHJ5AgUJYW1vdW50S2V5CQBlAgUOb2xkQWNyZXNBbW91bnQFBmFtb3VudAkAzAgCCQEMSW50ZWdlckVudHJ5AgUSYWNyZXNTdGFrZFRvdGFsS2V5CQBlAgUIb2xkVG90YWwFBmFtb3VudAkAzAgCCQEMSW50ZWdlckVudHJ5AgUJdXNlckZwS2V5BQVuZXdGcAkAzAgCCQEMSW50ZWdlckVudHJ5AgUUdG90YWxGYXJtaW5nUG93ZXJLZXkJAGQCCQBlAgUKb2xkVG90YWxGcAUFb2xkRnAFBW5ld0ZwCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMIBQFpBmNhbGxlcgUGYW1vdW50BQxhY3Jlc0Fzc2V0SWQFA25pbAUNcHJvbG9nQWN0aW9ucwUJd2xnUmVzdWx0AWkBCnN0YWtlQWNyZXMABA1wcm9sb2dBY3Rpb25zCQEGcHJvbG9nAQUBaQQHYWRkcmVzcwkApQgBCAUBaQZjYWxsZXIDCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAEJAAIBAiJleGFjdGx5IDEgcGF5bWVudCBtdXN0IGJlIGF0dGFjaGVkBANwbXQJAJEDAggFAWkIcGF5bWVudHMAAAQDYW10CAUDcG10BmFtb3VudAMDCQEBIQEJAQlpc0RlZmluZWQBCAUDcG10B2Fzc2V0SWQGCQECIT0CCQEFdmFsdWUBCAUDcG10B2Fzc2V0SWQFDGFjcmVzQXNzZXRJZAkAAgECFEFDUkVTIHBheW1lbnRzIG9ubHkhBAskdDAzODM1MzkwMQkBEnN0YWtlQWNyZXNJbnRlcm5hbAIFA2FtdAUHYWRkcmVzcwQHYWN0aW9ucwgFCyR0MDM4MzUzOTAxAl8xBBB3bGdDbGFpbWVkQW1vdW50CAULJHQwMzgzNTM5MDECXzIJAJQKAgkAzggCBQdhY3Rpb25zBQ1wcm9sb2dBY3Rpb25zBRB3bGdDbGFpbWVkQW1vdW50AWkBCGJ1eUFjcmVzAAQNcHJvbG9nQWN0aW9ucwkBBnByb2xvZwEFAWkEB2FkZHJlc3MJAKUIAQgFAWkGY2FsbGVyAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwABCQACAQIiZXhhY3RseSAxIHBheW1lbnQgbXVzdCBiZSBhdHRhY2hlZAQDcG10CQCRAwIIBQFpCHBheW1lbnRzAAAEA2FtdAgFA3BtdAZhbW91bnQDAwkBASEBCQEJaXNEZWZpbmVkAQgFA3BtdAdhc3NldElkBgkBAiE9AgkBBXZhbHVlAQgFA3BtdAdhc3NldElkBQp3bGdBc3NldElkCQACAQIVV0xHT0xEIHBheW1lbnRzIG9ubHkhAwkAZgIFBU1VTFQ4BQNhbXQJAAIBCQCsAgIJAKwCAgIWTWluIHBheW1lbnQgc2hvdWxkIGJlIAkBCmZpeGVkUG9pbnQCBQVNVUxUOAAIAgcgV0xHT0xEBAthY3Jlc0Ftb3VudAkAaAIFA2FtdAUUV0xHMkFDUkVTX01VTFRJUExJRVIECXdsZ1JlbWFpbgkBBWFzSW50AQkA/AcEBQ5hY3JlczJDb250cmFjdAIKYnVybldsZ29sZAUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCBQp3bGdBc3NldElkBQNhbXQFA25pbAkAlAoCCQDOCAIJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwgFAWkGY2FsbGVyBQthY3Jlc0Ftb3VudAUMYWNyZXNBc3NldElkBQNuaWwFDXByb2xvZ0FjdGlvbnMFCXdsZ1JlbWFpbgFpARBjb252ZXJ0T2xkU3Rha2VzAAQHYWRkcmVzcwkApQgBCAUBaQZjYWxsZXIDCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAAJAAIBAhRObyBwYXltZW50cyByZXF1aXJlZAQPb2xkQWNyZXNBZGRyZXNzCQERQGV4dHJOYXRpdmUoMTA2MikBCQERQGV4dHJOYXRpdmUoMTA1OCkBBRNvbGRBY3Jlc0NvbnRyYWN0S2V5BAZhbW91bnQJAQt2YWx1ZU9yRWxzZQIJAJoIAgUPb2xkQWNyZXNBZGRyZXNzCQEXa2V5QWNyZXNTdGFrZWRBbXRCeVVzZXIBBQdhZGRyZXNzAAAECWdvdEFjcmVzMAMJAGYCBQZhbW91bnQAAAkBDGFzVHVwbGUySW50cwEJAPwHBAUPb2xkQWNyZXNBZGRyZXNzAhR1bnN0YWtlQWNyZXNDYWxsYmFjawkAzAgCBQZhbW91bnQJAMwIAgUHYWRkcmVzcwUDbmlsBQNuaWwJAJQKAgAAAAAEEW9sZFN0YWtpbmdBZGRyZXNzCQERQGV4dHJOYXRpdmUoMTA2MikBBRVvbGRTdGFraW5nQ29udHJhY3RTdHIECGxhbmRzU3RyCQCdCAIFEW9sZFN0YWtpbmdBZGRyZXNzCQEVa2V5U3Rha2VkTGFuZHNCeU93bmVyAQUHYWRkcmVzcwQLbGFuZHNSZXN1bHQDCQEJaXNEZWZpbmVkAQUIbGFuZHNTdHIEBWxhbmRzCQC9CQIJAQV2YWx1ZQEFCGxhbmRzU3RyAgFfCgEHb25lTGFuZAIDYWNjC2xhbmRBc3NldElkAwkAAAIFC2xhbmRBc3NldElkAgAJAAIBAhdsYW5kQXNzZXRJZCBpcyByZXF1aXJlZAQBcgkBDGFzVHVwbGU1SW50cwEJAPwHBAURb2xkU3Rha2luZ0FkZHJlc3MCE3Vuc3Rha2VMYW5kQ2FsbGJhY2sJAMwIAgULbGFuZEFzc2V0SWQJAMwIAgUHYWRkcmVzcwUDbmlsBQNuaWwJAJYKBAkAZAIIBQNhY2MCXzEIBQFyAl8xCQBkAggFA2FjYwJfMggFAXICXzIJAGQCCAUDYWNjAl8zCAUBcgJfMwkAZAIIBQNhY2MCXzQIBQFyAl80BAJycgoAAiRsBQVsYW5kcwoAAiRzCQCQAwEFAiRsCgAFJGFjYzAJAJYKBAAAAAAAAAAACgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQdvbmVMYW5kAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhVMaXN0IHNpemUgZXhjZWVkcyAxMDAJAQUkZjBfMgIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYABwAIAAkACgALAAwADQAOAA8AEAARABIAEwAUABUAFgAXABgAGQAaABsAHAAdAB4AHwAgACEAIgAjACQAJQAmACcAKAApACoAKwAsAC0ALgAvADAAMQAyADMANAA1ADYANwA4ADkAOgA7ADwAPQA+AD8AQABBAEIAQwBEAEUARgBHAEgASQBKAEsATABNAE4ATwBQAFEAUgBTAFQAVQBWAFcAWABZAFoAWwBcAF0AXgBfAGAAYQBiAGMAZAQIZmluYWxpemUJAPwHBAURb2xkU3Rha2luZ0FkZHJlc3MCHHVuc3Rha2VMYW5kc0ZpbmFsaXplQ2FsbGJhY2sJAMwIAgUHYWRkcmVzcwUDbmlsBQNuaWwDCQAAAgUIZmluYWxpemUFCGZpbmFsaXplBANyZXEJAPwHBAUPb2xkQWNyZXNBZGRyZXNzAhRyZXF1ZXN0QWNyZXNDYWxsYmFjawkAzAgCCQBkAgkAZAIJAGQCCAUCcnICXzEIBQJycgJfMggFAnJyAl8zCAUCcnICXzQFA25pbAUDbmlsAwkAAAIFA3JlcQUDcmVxBAVpc3N1ZQkAwggFAghGUE9XRVIxMAIpRmFybWluZ1Bvd2VyICsxMCUgTkZUIGZvciBXYXZlc0xhbmRzIGdhbWUAAQAABwkAlwoFCAUCcnICXzEIBQJycgJfMggFAnJyAl8zCAUCcnICXzQJAMwIAgUFaXNzdWUJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwgFAWkGY2FsbGVyAAEJALgIAQUFaXNzdWUFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAlwoFAAAAAAAAAAAFA25pbAQLZHVja0Fzc2V0SWQJAQt2YWx1ZU9yRWxzZQIJAJ0IAgURb2xkU3Rha2luZ0FkZHJlc3MJARRrZXlTdGFrZWREdWNrQnlPd25lcgEFB2FkZHJlc3MCAAQKZHVja1Jlc3VsdAMJAQIhPQIFC2R1Y2tBc3NldElkAgAJAQxhc1R1cGxlM0ludHMBCQD8BwQFEW9sZFN0YWtpbmdBZGRyZXNzAhN1bnN0YWtlRHVja0NhbGxiYWNrCQDMCAIFC2R1Y2tBc3NldElkCQDMCAIFB2FkZHJlc3MFA25pbAUDbmlsCQCVCgMAAAAAAAAEAXgJARJzdGFrZUFjcmVzSW50ZXJuYWwCCQBkAgkAZAIJAGQCCQBkAgkAZAIJAGQCCQBkAggFCWdvdEFjcmVzMAJfMQgFC2xhbmRzUmVzdWx0Al8xCAULbGFuZHNSZXN1bHQCXzIIBQtsYW5kc1Jlc3VsdAJfMwgFC2xhbmRzUmVzdWx0Al80CAUKZHVja1Jlc3VsdAJfMQgFCmR1Y2tSZXN1bHQCXzIIBQpkdWNrUmVzdWx0Al8zBQdhZGRyZXNzCQCUCgIJAM4IAggFC2xhbmRzUmVzdWx0Al81CAUBeAJfMQgFAXgCXzIBaQEUdW5zdGFrZUxhbmRzUkVBRE9OTFkBB2FkZHJlc3MEEW9sZFN0YWtpbmdBZGRyZXNzCQERQGV4dHJOYXRpdmUoMTA2MikBBRVvbGRTdGFraW5nQ29udHJhY3RTdHIECGxhbmRzU3RyCQCdCAIFEW9sZFN0YWtpbmdBZGRyZXNzCQEVa2V5U3Rha2VkTGFuZHNCeU93bmVyAQUHYWRkcmVzcwQLbGFuZHNSZXN1bHQDCQEJaXNEZWZp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", "height": 3281976, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 3ZvBNMGscMe4p9anH7ECxscfYEsvpKUBvE7UwtAAEy7T Next: AN5TD7JJW2AcHcCQAkeTMG1jeMxXvyBsod7zqmfkna8e Diff:
OldNewDifferences
238238 else {
239239 let oldTotal = valueOrElse(getInteger(acresStakdTotalKey), 0)
240240 let wlgResult = invoke(wlgContract, "onStakeUnstakeLand", [address], nil)
241- $Tuple2(([IntegerEntry(timeKey, lastBlock.timestamp), IntegerEntry(amountKey, (oldAcresAmount - amount)), IntegerEntry(acresStakdTotalKey, (oldTotal - amount)), ScriptTransfer(i.caller, amount, acresAssetId)] ++ prologActions), wlgResult)
241+ let newAcresAmount = (oldAcresAmount - amount)
242+ let userFpKey = keyFarmingPowerByUser(address)
243+ let oldFp = valueOrElse(getInteger(userFpKey), 0)
244+ let newFp = getFarmingPowerByAcres(newAcresAmount)
245+ let oldTotalFp = valueOrElse(getInteger(totalFarmingPowerKey), 0)
246+ $Tuple2(([IntegerEntry(timeKey, lastBlock.timestamp), IntegerEntry(amountKey, (oldAcresAmount - amount)), IntegerEntry(acresStakdTotalKey, (oldTotal - amount)), IntegerEntry(userFpKey, newFp), IntegerEntry(totalFarmingPowerKey, ((oldTotalFp - oldFp) + newFp)), ScriptTransfer(i.caller, amount, acresAssetId)] ++ prologActions), wlgResult)
242247 }
243248 }
244249 }
260265 else (value(pmt.assetId) != acresAssetId))
261266 then throw("ACRES payments only!")
262267 else {
263- let $t034623528 = stakeAcresInternal(amt, address)
264- let actions = $t034623528._1
265- let wlgClaimedAmount = $t034623528._2
268+ let $t038353901 = stakeAcresInternal(amt, address)
269+ let actions = $t038353901._1
270+ let wlgClaimedAmount = $t038353901._2
266271 $Tuple2((actions ++ prologActions), wlgClaimedAmount)
267272 }
268273 }
335340 let finalize = invoke(oldStakingAddress, "unstakeLandsFinalizeCallback", [address], nil)
336341 if ((finalize == finalize))
337342 then {
338- let req = invoke(oldAcresAddress, "requestAcresCallback", [(((rr._1 + rr._2) + rr._3) + rr._4), address], nil)
343+ let req = invoke(oldAcresAddress, "requestAcresCallback", [(((rr._1 + rr._2) + rr._3) + rr._4)], nil)
339344 if ((req == req))
340345 then {
341346 let issue = Issue("FPOWER10", "FarmingPower +10% NFT for WavesLands game", 1, 0, false)
350355 let duckResult = if ((duckAssetId != ""))
351356 then asTuple3Ints(invoke(oldStakingAddress, "unstakeDuckCallback", [duckAssetId, address], nil))
352357 else $Tuple3(0, 0, 0)
353- let x = stakeAcresInternal(((((((((gotAcres0._1 + gotAcres0._2) + landsResult._1) + landsResult._2) + landsResult._3) + landsResult._4) + duckResult._1) + duckResult._2) + duckResult._3), address)
358+ let x = stakeAcresInternal((((((((gotAcres0._1 + landsResult._1) + landsResult._2) + landsResult._3) + landsResult._4) + duckResult._1) + duckResult._2) + duckResult._3), address)
354359 $Tuple2((landsResult._5 ++ x._1), x._2)
355360 }
356361 }
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let SEP = "__"
55
66 let MULT8 = 100000000
77
88 let WLG2ACRES_MULTIPLIER = 200
99
1010 let chain = take(drop(this.bytes, 1), 1)
1111
1212 let defaultRest2AddressStr = match chain {
1313 case _ =>
1414 if ((base58'2W' == $match0))
1515 then "3PFwYta8biEz31zpeFe5DJK8wE5trSpQVF8"
1616 else if ((base58'2T' == $match0))
1717 then "3N7UuYar6264P58FBhVWKPQAh4Yua2hgngv"
1818 else throw("Unknown chain")
1919 }
2020
2121 let oldStakingContractStr = match chain {
2222 case _ =>
2323 if ((base58'2W' == $match0))
2424 then "3PLncXtS1U83D6cQbFD3H8rBHPLgzxSFKZ1"
2525 else if ((base58'2T' == $match0))
2626 then "3NDCyBG5q85JuaRiigUeEtainyjCQT3XpZm"
2727 else throw("Unknown chain")
2828 }
2929
3030 func getStringOrFail (address,key) = valueOrErrorMessage(getString(address, key), makeString(["mandatory ", toString(address), ".", key, " is not defined"], ""))
3131
3232
3333 let IdxCfgAcres2Dapp = 1
3434
3535 let IdxCfgWlgDapp = 2
3636
3737 func keyRestCfg () = "%s__restConfig"
3838
3939
4040 func keyRest2Address () = "%s__rest2Addr"
4141
4242
4343 func readRestCfgOrFail (rest) = split_4C(getStringOrFail(rest, keyRestCfg()), SEP)
4444
4545
4646 func getContractAddressOrFail (rest2Cfg,idx) = valueOrErrorMessage(addressFromString(rest2Cfg[idx]), ("Rest cfg doesn't contain address at index " + toString(idx)))
4747
4848
4949 let rest2Contract = addressFromStringValue(valueOrElse(getString(this, keyRest2Address()), defaultRest2AddressStr))
5050
5151 let rest2Cfg = readRestCfgOrFail(rest2Contract)
5252
5353 let acres2Contract = getContractAddressOrFail(rest2Cfg, IdxCfgAcres2Dapp)
5454
5555 let wlgContract = getContractAddressOrFail(rest2Cfg, IdxCfgWlgDapp)
5656
5757 let oldAcresContractKey = "oldAcresContract"
5858
5959 func keyBlocked () = "contractsBlocked"
6060
6161
6262 func keyLastTxIdByUser (addr) = ("lastTxIdByUser_" + addr)
6363
6464
6565 let wlgAssetIdKey = "wlg_assetId"
6666
6767 let wlgAssetId = valueOrErrorMessage(getBinary(wlgContract, wlgAssetIdKey), "WLGOLD is not issued yet")
6868
6969 let acresIssuedAmountKey = "acresIssuedAmount"
7070
7171 let acresAssetIdKey = "acresAssetId"
7272
7373 let acresAssetId = valueOrErrorMessage(getBinary(acres2Contract, acresAssetIdKey), "ACRES is not issued yet")
7474
7575 func keyAcresStakedTimeByUser (addr) = ("acresStakedTimeByUser_" + addr)
7676
7777
7878 func keyStakedLandsByOwner (ownerAddr) = ("stakedLandsByOwner_" + ownerAddr)
7979
8080
8181 func keyStakedDuckByOwner (ownerAddr) = ("stakedDuckByOwner_" + ownerAddr)
8282
8383
8484 func asInt (v) = match v {
8585 case n: Int =>
8686 n
8787 case _ =>
8888 throw("fail to cast into Int")
8989 }
9090
9191
9292 func asTuple5Ints (val) = match val {
9393 case t: (Int, Int, Int, Int, Int) =>
9494 t
9595 case _ =>
9696 throw("fail to cast into (Int, Int, Int, Int, Int)")
9797 }
9898
9999
100100 func asTuple4Ints (val) = match val {
101101 case t: (Int, Int, Int, Int) =>
102102 t
103103 case _ =>
104104 throw("fail to cast into (Int, Int, Int, Int)")
105105 }
106106
107107
108108 func asTuple3Ints (val) = match val {
109109 case t: (Int, Int, Int) =>
110110 t
111111 case _ =>
112112 throw("fail to cast into (Int, Int, Int)")
113113 }
114114
115115
116116 func asTuple2Ints (val) = match val {
117117 case t: (Int, Int) =>
118118 t
119119 case _ =>
120120 throw("fail to cast into (Int, Int)")
121121 }
122122
123123
124124 func fixedPoint (val,decimals) = {
125125 let tenPow = pow(10, 0, decimals, 0, 0, DOWN)
126126 let lowPart = toString((val % tenPow))
127127 let zeroes = drop(toString(tenPow), (1 + size(lowPart)))
128128 (((toString((val / tenPow)) + ".") + zeroes) + lowPart)
129129 }
130130
131131
132132 let M8_ = 100000000
133133
134134 func keyAcresStakedAmtByUser (addr) = ("acresStakedAmountByUser_" + addr)
135135
136136
137137 func keyFarmingPowerByUser (addr) = ("farmingPowerByUser_" + addr)
138138
139139
140140 let acresStakdTotalKey = "acresStakedAmountTotal"
141141
142142 let totalFarmingPowerKey = "totalFarmingPower"
143143
144144 let levels = [10, 20, 40, 80, 150, 250, 400, 700, 1000]
145145
146146 func getLevelByAcres (acres) = {
147147 let acr = (acres / M8_)
148148 func checker (acc,item) = if ((item > acr))
149149 then acc
150150 else (acc + 1)
151151
152152 let idx = {
153153 let $l = levels
154154 let $s = size($l)
155155 let $acc0 = 0
156156 func $f0_1 ($a,$i) = if (($i >= $s))
157157 then $a
158158 else checker($a, $l[$i])
159159
160160 func $f0_2 ($a,$i) = if (($i >= $s))
161161 then $a
162162 else throw("List size exceeds 10")
163163
164164 $f0_2($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
165165 }
166166 (idx + 1)
167167 }
168168
169169
170170 func getFarmingPowerByAcres (acres) = ((acres * 20) * (getLevelByAcres(acres) + 4))
171171
172172
173173 func prolog (i) = if (if ((i.originCaller != rest2Contract))
174174 then valueOrElse(getBoolean(keyBlocked()), false)
175175 else false)
176176 then throw("Contracts are under maintenance")
177177 else [StringEntry(keyLastTxIdByUser(toString(i.originCaller)), toBase58String(i.transactionId))]
178178
179179
180180 func stakeAcresInternal (amt,address) = {
181181 let wlgResult = invoke(wlgContract, "onStakeUnstakeLand", [address], nil)
182182 if ((wlgResult == wlgResult))
183183 then {
184184 let now = lastBlock.timestamp
185185 let timeKey = keyAcresStakedTimeByUser(address)
186186 let amountKey = keyAcresStakedAmtByUser(address)
187187 let newAcresAmount = (valueOrElse(getInteger(amountKey), 0) + amt)
188188 let oldTotal = valueOrElse(getInteger(acresStakdTotalKey), 0)
189189 let userFpKey = keyFarmingPowerByUser(address)
190190 let oldFp = valueOrElse(getInteger(userFpKey), 0)
191191 let newFp = getFarmingPowerByAcres(newAcresAmount)
192192 let oldTotalFp = valueOrElse(getInteger(totalFarmingPowerKey), 0)
193193 $Tuple2([IntegerEntry(timeKey, lastBlock.timestamp), IntegerEntry(amountKey, newAcresAmount), IntegerEntry(acresStakdTotalKey, (oldTotal + amt)), IntegerEntry(userFpKey, newFp), IntegerEntry(totalFarmingPowerKey, ((oldTotalFp - oldFp) + newFp))], wlgResult)
194194 }
195195 else throw("Strict value is not equal to itself.")
196196 }
197197
198198
199199 @Callable(i)
200200 func constructorV1 (rest2Addr,oldAcrContract) = if ((i.caller != this))
201201 then throw("Permission denied")
202202 else {
203203 let oldAcrContAddr = addressFromStringValue(oldAcrContract)
204204 [IntegerEntry(acresIssuedAmountKey, getIntegerValue(oldAcrContAddr, acresIssuedAmountKey)), BinaryEntry(acresAssetIdKey, getBinaryValue(oldAcrContAddr, acresAssetIdKey)), StringEntry(keyRest2Address(), rest2Addr), StringEntry(oldAcresContractKey, oldAcrContract)]
205205 }
206206
207207
208208
209209 @Callable(i)
210210 func saveInteger (key,amount) = if ((i.caller != this))
211211 then throw("saveInteger is not public method")
212212 else [IntegerEntry(key, amount)]
213213
214214
215215
216216 @Callable(i)
217217 func setBlocked (isBlocked) = if ((i.caller != this))
218218 then throw("permission denied")
219219 else [BooleanEntry(keyBlocked(), isBlocked)]
220220
221221
222222
223223 @Callable(i)
224224 func unstakeAcres (amount) = {
225225 let prologActions = prolog(i)
226226 if ((0 >= amount))
227227 then throw("Amount should be positive")
228228 else {
229229 let address = toString(i.caller)
230230 if ((size(i.payments) != 0))
231231 then throw("No payments required")
232232 else {
233233 let timeKey = keyAcresStakedTimeByUser(address)
234234 let amountKey = keyAcresStakedAmtByUser(address)
235235 let oldAcresAmount = valueOrElse(getInteger(amountKey), 0)
236236 if ((amount > oldAcresAmount))
237237 then throw(((("You have only " + fixedPoint(oldAcresAmount, 8)) + " ACRES staked, tried to unstake ") + fixedPoint(amount, 8)))
238238 else {
239239 let oldTotal = valueOrElse(getInteger(acresStakdTotalKey), 0)
240240 let wlgResult = invoke(wlgContract, "onStakeUnstakeLand", [address], nil)
241- $Tuple2(([IntegerEntry(timeKey, lastBlock.timestamp), IntegerEntry(amountKey, (oldAcresAmount - amount)), IntegerEntry(acresStakdTotalKey, (oldTotal - amount)), ScriptTransfer(i.caller, amount, acresAssetId)] ++ prologActions), wlgResult)
241+ let newAcresAmount = (oldAcresAmount - amount)
242+ let userFpKey = keyFarmingPowerByUser(address)
243+ let oldFp = valueOrElse(getInteger(userFpKey), 0)
244+ let newFp = getFarmingPowerByAcres(newAcresAmount)
245+ let oldTotalFp = valueOrElse(getInteger(totalFarmingPowerKey), 0)
246+ $Tuple2(([IntegerEntry(timeKey, lastBlock.timestamp), IntegerEntry(amountKey, (oldAcresAmount - amount)), IntegerEntry(acresStakdTotalKey, (oldTotal - amount)), IntegerEntry(userFpKey, newFp), IntegerEntry(totalFarmingPowerKey, ((oldTotalFp - oldFp) + newFp)), ScriptTransfer(i.caller, amount, acresAssetId)] ++ prologActions), wlgResult)
242247 }
243248 }
244249 }
245250 }
246251
247252
248253
249254 @Callable(i)
250255 func stakeAcres () = {
251256 let prologActions = prolog(i)
252257 let address = toString(i.caller)
253258 if ((size(i.payments) != 1))
254259 then throw("exactly 1 payment must be attached")
255260 else {
256261 let pmt = i.payments[0]
257262 let amt = pmt.amount
258263 if (if (!(isDefined(pmt.assetId)))
259264 then true
260265 else (value(pmt.assetId) != acresAssetId))
261266 then throw("ACRES payments only!")
262267 else {
263- let $t034623528 = stakeAcresInternal(amt, address)
264- let actions = $t034623528._1
265- let wlgClaimedAmount = $t034623528._2
268+ let $t038353901 = stakeAcresInternal(amt, address)
269+ let actions = $t038353901._1
270+ let wlgClaimedAmount = $t038353901._2
266271 $Tuple2((actions ++ prologActions), wlgClaimedAmount)
267272 }
268273 }
269274 }
270275
271276
272277
273278 @Callable(i)
274279 func buyAcres () = {
275280 let prologActions = prolog(i)
276281 let address = toString(i.caller)
277282 if ((size(i.payments) != 1))
278283 then throw("exactly 1 payment must be attached")
279284 else {
280285 let pmt = i.payments[0]
281286 let amt = pmt.amount
282287 if (if (!(isDefined(pmt.assetId)))
283288 then true
284289 else (value(pmt.assetId) != wlgAssetId))
285290 then throw("WLGOLD payments only!")
286291 else if ((MULT8 > amt))
287292 then throw((("Min payment should be " + fixedPoint(MULT8, 8)) + " WLGOLD"))
288293 else {
289294 let acresAmount = (amt * WLG2ACRES_MULTIPLIER)
290295 let wlgRemain = asInt(invoke(acres2Contract, "burnWlgold", nil, [AttachedPayment(wlgAssetId, amt)]))
291296 $Tuple2(([ScriptTransfer(i.caller, acresAmount, acresAssetId)] ++ prologActions), wlgRemain)
292297 }
293298 }
294299 }
295300
296301
297302
298303 @Callable(i)
299304 func convertOldStakes () = {
300305 let address = toString(i.caller)
301306 if ((size(i.payments) != 0))
302307 then throw("No payments required")
303308 else {
304309 let oldAcresAddress = addressFromStringValue(getStringValue(oldAcresContractKey))
305310 let amount = valueOrElse(getInteger(oldAcresAddress, keyAcresStakedAmtByUser(address)), 0)
306311 let gotAcres0 = if ((amount > 0))
307312 then asTuple2Ints(invoke(oldAcresAddress, "unstakeAcresCallback", [amount, address], nil))
308313 else $Tuple2(0, 0)
309314 let oldStakingAddress = addressFromStringValue(oldStakingContractStr)
310315 let landsStr = getString(oldStakingAddress, keyStakedLandsByOwner(address))
311316 let landsResult = if (isDefined(landsStr))
312317 then {
313318 let lands = split_51C(value(landsStr), "_")
314319 func oneLand (acc,landAssetId) = if ((landAssetId == ""))
315320 then throw("landAssetId is required")
316321 else {
317322 let r = asTuple5Ints(invoke(oldStakingAddress, "unstakeLandCallback", [landAssetId, address], nil))
318323 $Tuple4((acc._1 + r._1), (acc._2 + r._2), (acc._3 + r._3), (acc._4 + r._4))
319324 }
320325
321326 let rr = {
322327 let $l = lands
323328 let $s = size($l)
324329 let $acc0 = $Tuple4(0, 0, 0, 0)
325330 func $f0_1 ($a,$i) = if (($i >= $s))
326331 then $a
327332 else oneLand($a, $l[$i])
328333
329334 func $f0_2 ($a,$i) = if (($i >= $s))
330335 then $a
331336 else throw("List size exceeds 100")
332337
333338 $f0_2($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40), 41), 42), 43), 44), 45), 46), 47), 48), 49), 50), 51), 52), 53), 54), 55), 56), 57), 58), 59), 60), 61), 62), 63), 64), 65), 66), 67), 68), 69), 70), 71), 72), 73), 74), 75), 76), 77), 78), 79), 80), 81), 82), 83), 84), 85), 86), 87), 88), 89), 90), 91), 92), 93), 94), 95), 96), 97), 98), 99), 100)
334339 }
335340 let finalize = invoke(oldStakingAddress, "unstakeLandsFinalizeCallback", [address], nil)
336341 if ((finalize == finalize))
337342 then {
338- let req = invoke(oldAcresAddress, "requestAcresCallback", [(((rr._1 + rr._2) + rr._3) + rr._4), address], nil)
343+ let req = invoke(oldAcresAddress, "requestAcresCallback", [(((rr._1 + rr._2) + rr._3) + rr._4)], nil)
339344 if ((req == req))
340345 then {
341346 let issue = Issue("FPOWER10", "FarmingPower +10% NFT for WavesLands game", 1, 0, false)
342347 $Tuple5(rr._1, rr._2, rr._3, rr._4, [issue, ScriptTransfer(i.caller, 1, calculateAssetId(issue))])
343348 }
344349 else throw("Strict value is not equal to itself.")
345350 }
346351 else throw("Strict value is not equal to itself.")
347352 }
348353 else $Tuple5(0, 0, 0, 0, nil)
349354 let duckAssetId = valueOrElse(getString(oldStakingAddress, keyStakedDuckByOwner(address)), "")
350355 let duckResult = if ((duckAssetId != ""))
351356 then asTuple3Ints(invoke(oldStakingAddress, "unstakeDuckCallback", [duckAssetId, address], nil))
352357 else $Tuple3(0, 0, 0)
353- let x = stakeAcresInternal(((((((((gotAcres0._1 + gotAcres0._2) + landsResult._1) + landsResult._2) + landsResult._3) + landsResult._4) + duckResult._1) + duckResult._2) + duckResult._3), address)
358+ let x = stakeAcresInternal((((((((gotAcres0._1 + landsResult._1) + landsResult._2) + landsResult._3) + landsResult._4) + duckResult._1) + duckResult._2) + duckResult._3), address)
354359 $Tuple2((landsResult._5 ++ x._1), x._2)
355360 }
356361 }
357362
358363
359364
360365 @Callable(i)
361366 func unstakeLandsREADONLY (address) = {
362367 let oldStakingAddress = addressFromStringValue(oldStakingContractStr)
363368 let landsStr = getString(oldStakingAddress, keyStakedLandsByOwner(address))
364369 let landsResult = if (isDefined(landsStr))
365370 then {
366371 let lands = split_51C(value(landsStr), "_")
367372 func oneLand (acc,landAssetId) = if ((landAssetId == ""))
368373 then throw("landAssetId is required")
369374 else {
370375 let r = asTuple4Ints(invoke(oldStakingAddress, "unstakeLandREADONLY", [landAssetId, address], nil))
371376 $Tuple4((acc._1 + r._1), (acc._2 + r._2), (acc._3 + r._3), (acc._4 + r._4))
372377 }
373378
374379 let $l = lands
375380 let $s = size($l)
376381 let $acc0 = $Tuple4(0, 0, 0, 0)
377382 func $f0_1 ($a,$i) = if (($i >= $s))
378383 then $a
379384 else oneLand($a, $l[$i])
380385
381386 func $f0_2 ($a,$i) = if (($i >= $s))
382387 then $a
383388 else throw("List size exceeds 100")
384389
385390 $f0_2($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40), 41), 42), 43), 44), 45), 46), 47), 48), 49), 50), 51), 52), 53), 54), 55), 56), 57), 58), 59), 60), 61), 62), 63), 64), 65), 66), 67), 68), 69), 70), 71), 72), 73), 74), 75), 76), 77), 78), 79), 80), 81), 82), 83), 84), 85), 86), 87), 88), 89), 90), 91), 92), 93), 94), 95), 96), 97), 98), 99), 100)
386391 }
387392 else $Tuple4(0, 0, 0, 0)
388393 $Tuple2(nil, landsResult)
389394 }
390395
391396

github/deemru/w8io/026f985 
56.29 ms