tx · AATwCftzGi2MLdfy2M5sgNXtbYs6WUDfaLBUFJzBtUYN

3NBPx1Fciu3JQNEGZ21jSnTdutLNGGBUSXh:  -0.01300000 Waves

2024.09.15 14:55 [3284744] smart account 3NBPx1Fciu3JQNEGZ21jSnTdutLNGGBUSXh > SELF 0.00000000 Waves

{ "type": 13, "id": "AATwCftzGi2MLdfy2M5sgNXtbYs6WUDfaLBUFJzBtUYN", "fee": 1300000, "feeAssetId": null, "timestamp": 1726401340538, "version": 2, "chainId": 84, "sender": "3NBPx1Fciu3JQNEGZ21jSnTdutLNGGBUSXh", "senderPublicKey": "3QtfC1XbLZXdeawMDeSERy9vvjUmj1XYd2GFmrvx7pWQ", "proofs": [ "2mAqwWd53aJkwEhJPaXFPcRFbXdTsftsbKjPSki47RXEQbs9HGaaijnSXoZSjJD6kBxYHVBMQkjr3cssQLjofChN" ], "script": "base64:BgIoCAISBAoCCAgSBAoCCAESAwoBBBIDCgEBEgASABIAEgMKAQgSAwoBCCwAA1NFUAICX18ABU1VTFQ4AIDC1y8AEVdMRzJBQ1JFU19ESVZJU09SAMgBAAVjaGFpbgkAyQECCQDKAQIIBQR0aGlzBWJ5dGVzAAEAAQAWZGVmYXVsdFJlc3QyQWRkcmVzc1N0cgQHJG1hdGNoMAUFY2hhaW4DCQAAAgEBVwUHJG1hdGNoMAIjM1BGd1l0YThiaUV6MzF6cGVGZTVESks4d0U1dHJTcFFWRjgDCQAAAgEBVAUHJG1hdGNoMAIjM043VXVZYXI2MjY0UDU4RkJoVldLUFFBaDRZdWEyaGduZ3YJAAIBAg1Vbmtub3duIGNoYWluABVvbGRTdGFraW5nQ29udHJhY3RTdHIEByRtYXRjaDAFBWNoYWluAwkAAAIBAVcFByRtYXRjaDACIzNQTG5jWHRTMVU4M0Q2Y1FiRkQzSDhyQkhQTGd6eFNGS1oxAwkAAAIBAVQFByRtYXRjaDACIzNOREN5Qkc1cTg1SnVhUmlpZ1VlRXRhaW55akNRVDNYcFptCQACAQINVW5rbm93biBjaGFpbgEPZ2V0U3RyaW5nT3JGYWlsAgdhZGRyZXNzA2tleQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIFB2FkZHJlc3MFA2tleQkAuQkCCQDMCAICCm1hbmRhdG9yeSAJAMwIAgkApQgBBQdhZGRyZXNzCQDMCAICAS4JAMwIAgUDa2V5CQDMCAICDyBpcyBub3QgZGVmaW5lZAUDbmlsAgAAEElkeENmZ0FjcmVzMkRhcHAAAQANSWR4Q2ZnV2xnRGFwcAACAQprZXlSZXN0Q2ZnAAIOJXNfX3Jlc3RDb25maWcBD2tleVJlc3QyQWRkcmVzcwACDSVzX19yZXN0MkFkZHIBEXJlYWRSZXN0Q2ZnT3JGYWlsAQRyZXN0CQC8CQIJAQ9nZXRTdHJpbmdPckZhaWwCBQRyZXN0CQEKa2V5UmVzdENmZwAFA1NFUAEYZ2V0Q29udHJhY3RBZGRyZXNzT3JGYWlsAghyZXN0MkNmZwNpZHgJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkApggBCQCRAwIFCHJlc3QyQ2ZnBQNpZHgJAKwCAgIqUmVzdCBjZmcgZG9lc24ndCBjb250YWluIGFkZHJlc3MgYXQgaW5kZXggCQCkAwEFA2lkeAANcmVzdDJDb250cmFjdAkBEUBleHRyTmF0aXZlKDEwNjIpAQkBC3ZhbHVlT3JFbHNlAgkAnQgCBQR0aGlzCQEPa2V5UmVzdDJBZGRyZXNzAAUWZGVmYXVsdFJlc3QyQWRkcmVzc1N0cgAIcmVzdDJDZmcJARFyZWFkUmVzdENmZ09yRmFpbAEFDXJlc3QyQ29udHJhY3QADmFjcmVzMkNvbnRyYWN0CQEYZ2V0Q29udHJhY3RBZGRyZXNzT3JGYWlsAgUIcmVzdDJDZmcFEElkeENmZ0FjcmVzMkRhcHAAC3dsZ0NvbnRyYWN0CQEYZ2V0Q29udHJhY3RBZGRyZXNzT3JGYWlsAgUIcmVzdDJDZmcFDUlkeENmZ1dsZ0RhcHAAE29sZEFjcmVzQ29udHJhY3RLZXkCEG9sZEFjcmVzQ29udHJhY3QBCmtleUJsb2NrZWQAAhBjb250cmFjdHNCbG9ja2VkARFrZXlMYXN0VHhJZEJ5VXNlcgEEYWRkcgkArAICAg9sYXN0VHhJZEJ5VXNlcl8FBGFkZHIADXdsZ0Fzc2V0SWRLZXkCC3dsZ19hc3NldElkAAp3bGdBc3NldElkCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJwIAgULd2xnQ29udHJhY3QFDXdsZ0Fzc2V0SWRLZXkCGFdMR09MRCBpcyBub3QgaXNzdWVkIHlldAAUYWNyZXNJc3N1ZWRBbW91bnRLZXkCEWFjcmVzSXNzdWVkQW1vdW50AA9hY3Jlc0Fzc2V0SWRLZXkCDGFjcmVzQXNzZXRJZAAMYWNyZXNBc3NldElkCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJwIAgUOYWNyZXMyQ29udHJhY3QFD2FjcmVzQXNzZXRJZEtleQIXQUNSRVMgaXMgbm90IGlzc3VlZCB5ZXQBGGtleUFjcmVzU3Rha2VkVGltZUJ5VXNlcgEEYWRkcgkArAICAhZhY3Jlc1N0YWtlZFRpbWVCeVVzZXJfBQRhZGRyARVrZXlTdGFrZWRMYW5kc0J5T3duZXIBCW93bmVyQWRkcgkArAICAhNzdGFrZWRMYW5kc0J5T3duZXJfBQlvd25lckFkZHIBFGtleVN0YWtlZER1Y2tCeU93bmVy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c2FjdGlvbklkBQNuaWwBEnN0YWtlQWNyZXNJbnRlcm5hbAIDYW10B2FkZHJlc3MECXdsZ1Jlc3VsdAkA/AcEBQt3bGdDb250cmFjdAISb25TdGFrZVVuc3Rha2VMYW5kCQDMCAIFB2FkZHJlc3MFA25pbAUDbmlsAwkAAAIFCXdsZ1Jlc3VsdAUJd2xnUmVzdWx0BANub3cIBQlsYXN0QmxvY2sJdGltZXN0YW1wBAd0aW1lS2V5CQEYa2V5QWNyZXNTdGFrZWRUaW1lQnlVc2VyAQUHYWRkcmVzcwQJYW1vdW50S2V5CQEXa2V5QWNyZXNTdGFrZWRBbXRCeVVzZXIBBQdhZGRyZXNzBA5uZXdBY3Jlc0Ftb3VudAkAZAIJAQt2YWx1ZU9yRWxzZQIJAJ8IAQUJYW1vdW50S2V5AAAFA2FtdAQIb2xkVG90YWwJAQt2YWx1ZU9yRWxzZQIJAJ8IAQUSYWNyZXNTdGFrZFRvdGFsS2V5AAAECXVzZXJGcEtleQkBFWtleUZhcm1pbmdQb3dlckJ5VXNlcgEFB2FkZHJlc3MEBW9sZEZwCQELdmFsdWVPckVsc2UCCQCfCAEFCXVzZXJGcEtleQAABAVuZXdGcAkBFmdldEZhcm1pbmdQb3dlckJ5QWNyZXMBBQ5uZXdBY3Jlc0Ftb3VudAQKb2xkVG90YWxGcAkBC3ZhbHVlT3JFbHNlAgkAnwgBBRR0b3RhbEZhcm1pbmdQb3dlcktleQAACQCUCgIJAMwIAgkBDEludGVnZXJFbnRyeQIFB3RpbWVLZXkIBQlsYXN0QmxvY2sJdGltZXN0YW1wCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQlhbW91bnRLZXkFDm5ld0FjcmVzQW1vdW50CQDMCAIJAQxJbnRlZ2VyRW50cnkCBRJhY3Jlc1N0YWtkVG90YWxLZXkJAGQCBQhvbGRUb3RhbAUDYW10CQDMCAIJAQxJbnRlZ2VyRW50cnkCBQl1c2VyRnBLZXkFBW5ld0ZwCQDMCAIJAQxJbnRlZ2VyRW50cnkCBRR0b3RhbEZhcm1pbmdQb3dlcktleQkAZAIJAGUCBQpvbGRUb3RhbEZwBQVvbGRGcAUFbmV3RnAFA25pbAUJd2xnUmVzdWx0CQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQFpAQ1jb25zdHJ1Y3RvclYxAglyZXN0MkFkZHIOb2xkQWNyQ29udHJhY3QDCQECIT0CCAUBaQZjYWxsZXIFBHRoaXMJAAIBAhFQZXJtaXNzaW9uIGRlbmllZAQOb2xkQWNyQ29udEFkZHIJARFAZXh0ck5hdGl2ZSgxMDYyKQEFDm9sZEFjckNvbnRyYWN0CQDMCAIJAQxJbnRlZ2VyRW50cnkCBRRhY3Jlc0lzc3VlZEFtb3VudEtleQkBEUBleHRyTmF0aXZlKDEwNTApAgUOb2xkQWNyQ29udEFkZHIFFGFjcmVzSXNzdWVkQW1vdW50S2V5CQDMCAIJAQtCaW5hcnlFbnRyeQIFD2FjcmVzQXNzZXRJZEtleQkBEUBleHRyTmF0aXZlKDEwNTIpAgUOb2xkQWNyQ29udEFkZHIFD2FjcmVzQXNzZXRJZEtleQkAzAgCCQELU3RyaW5nRW50cnkCCQEPa2V5UmVzdDJBZGRyZXNzAAUJcmVzdDJBZGRyCQDMCAIJAQtTdHJpbmdFbnRyeQIFE29sZEFjcmVzQ29udHJhY3RLZXkFDm9sZEFjckNvbnRyYWN0BQNuaWwBaQELc2F2ZUludGVnZXICA2tleQZhbW91bnQDCQECIT0CCAUBaQZjYWxsZXIFBHRoaXMJAAIBAiBzYXZlSW50ZWdlciBpcyBub3QgcHVibGljIG1ldGhvZAkAzAgCCQEMSW50ZWdlckVudHJ5AgUDa2V5BQZhbW91bnQFA25pbAFpAQpzZXRCbG9ja2VkAQlpc0Jsb2NrZWQDCQECIT0CCAUBaQZjYWxsZXIFBHRoaXMJAAIBAhFwZXJtaXNzaW9uIGRlbmllZAkAzAgCCQEMQm9vbGVhbkVudHJ5AgkBCmtleUJsb2NrZWQABQlpc0Jsb2NrZWQFA25pbAFpAQx1bnN0YWtlQWNyZXMBBmFtb3VudAQNcHJvbG9nQWN0aW9ucwkBBnByb2xvZwEFAWkDCQBnAgAABQZhbW91bnQJAAIBAhlBbW91bnQgc2hvdWxkIGJlIHBvc2l0aXZlBAdhZGRyZXNzCQClCAEIBQFpBmNhbGxlcgMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAAkAAgECFE5vIHBheW1lbnRzIHJlcXVpcmVkBAd0aW1lS2V5CQEYa2V5QWNyZXNTdGFrZWRUaW1lQnlVc2VyAQUHYWRkcmVzcwQJYW1vdW50S2V5CQEXa2V5QWNyZXNTdGFrZWRBbXRCeVVzZXIBBQdhZGRyZXNzBA5vbGRBY3Jlc0Ftb3VudAkBC3ZhbHVlT3JFbHNlAgkAnwgBBQlhbW91bnRLZXkAAAMJAGYCBQZhbW91bnQFDm9sZEFjcmVzQW1vdW50CQACAQkArAICCQCsAgIJAKwCAgIOWW91IGhhdmUgb25seSAJAQpmaXhlZFBvaW50AgUOb2xkQWNyZXNBbW91bnQACAIgIEFDUkVTIHN0YWtlZCwgdHJpZWQgdG8gdW5zdGFrZSAJAQpmaXhlZFBvaW50AgUGYW1vdW50AAgECG9sZFRvdGFsCQELdmFsdWVPckVsc2UCCQCfCAEFEmFjcmVzU3Rha2RUb3RhbEtleQAABAl3bGdSZXN1bHQJAPwHBAULd2xnQ29udHJhY3QCEm9uU3Rha2VVbnN0YWtlTGFuZAkAzAgCBQdhZGRyZXNzBQNuaWwFA25pbAQObmV3QWNyZXNBbW91bnQJAGUCBQ5vbGRBY3Jlc0Ftb3VudAUGYW1vdW50BAl1c2VyRnBLZXkJARVrZXlGYXJtaW5nUG93ZXJCeVVzZXIBBQdhZGRyZXNzBAVvbGRGcAkBC3ZhbHVlT3JFbHNlAgkAnwgBBQl1c2VyRnBLZXkAAAQFbmV3RnAJARZnZXRGYXJtaW5nUG93ZXJCeUFjcmVzAQUObmV3QWNyZXNBbW91bnQECm9sZFRvdGFsRnAJAQt2YWx1ZU9yRWxzZQIJAJ8IAQUUdG90YWxGYXJtaW5nUG93ZXJLZXkAAAkAlAoCCQDOCAIJAMwIAgkBDEludGVnZXJFbnRyeQIFB3RpbWVLZXkIBQlsYXN0QmxvY2sJdGltZXN0YW1wCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQlhbW91bnRLZXkJAGUCBQ5vbGRBY3Jlc0Ftb3VudAUGYW1vdW50CQDMCAIJAQxJbnRlZ2VyRW50cnkCBRJhY3Jlc1N0YWtkVG90YWxLZXkJAGUCBQhvbGRUb3RhbAUGYW1vdW50CQDMCAIJAQxJbnRlZ2VyRW50cnkCBQl1c2VyRnBLZXkFBW5ld0ZwCQDMCAIJAQxJbnRlZ2VyRW50cnkCBRR0b3RhbEZhcm1pbmdQb3dlcktleQkAZAIJAGUCBQpvbGRUb3RhbEZwBQVvbGRGcAUFbmV3RnAJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwgFAWkGY2FsbGVyBQZhbW91bnQFDGFjcmVzQXNzZXRJZAUDbmlsBQ1wcm9sb2dBY3Rpb25zBQl3bGdSZXN1bHQBaQEKc3Rha2VBY3JlcwAEDXByb2xvZ0FjdGlvbnMJAQZwcm9sb2cBBQFpBAdhZGRyZXNzCQClCAEIBQFpBmNhbGxlcgMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAQkAAgECImV4YWN0bHkgMSBwYXltZW50IG11c3QgYmUgYXR0YWNoZWQEA3BtdAkAkQMCCAUBaQhwYXltZW50cwAABANhbXQIBQNwbXQGYW1vdW50AwMJAQEhAQkBCWlzRGVmaW5lZAEIBQNwbXQHYXNzZXRJZAYJAQIhPQIJAQV2YWx1ZQEIBQNwbXQHYXNzZXRJZAUMYWNyZXNBc3NldElkCQACAQIUQUNSRVMgcGF5bWVudHMgb25seSEECyR0MDM4MzUzOTAxCQESc3Rha2VBY3Jlc0ludGVybmFsAgUDYW10BQdhZGRyZXNzBAdhY3Rpb25zCAULJHQwMzgzNTM5MDECXzEEEHdsZ0NsYWltZWRBbW91bnQIBQskdDAzODM1MzkwMQJfMgkAlAoCCQDOCAIFB2FjdGlvbnMFDXByb2xvZ0FjdGlvbnMFEHdsZ0NsYWltZWRBbW91bnQBaQEIYnV5QWNyZXMABA1wcm9sb2dBY3Rpb25zCQEGcHJvbG9nAQUBaQQHYWRkcmVzcwkApQgBCAUBaQZjYWxsZXIDCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAEJAAIBAiJleGFjdGx5IDEgcGF5bWVudCBtdXN0IGJlIGF0dGFjaGVkBANwbXQJAJEDAggFAWkIcGF5bWVudHMAAAQDYW10CAUDcG10BmFtb3VudAMDCQEBIQEJAQlpc0RlZmluZWQBCAUDcG10B2Fzc2V0SWQGCQECIT0CCQEFdmFsdWUBCAUDcG10B2Fzc2V0SWQFCndsZ0Fzc2V0SWQJAAIBAhVXTEdPTEQgcGF5bWVudHMgb25seSEDCQBmAgUFTVVMVDgFA2FtdAkAAgEJAKwCAgkArAICAhZNaW4gcGF5bWVudCBzaG91bGQgYmUgCQEKZml4ZWRQb2ludAIFBU1VTFQ4AAgCByBXTEdPTEQEC2FjcmVzQW1vdW50CQBpAgUDYW10BRFXTEcyQUNSRVNfRElWSVNPUgQPb2xkQWNyZXNBZGRyZXNzCQERQGV4dHJOYXRpdmUoMTA2MikBCQERQGV4dHJOYXRpdmUoMTA1OCkBBRNvbGRBY3Jlc0NvbnRyYWN0S2V5BANyZXEJAPwHBAUPb2xkQWNyZXNBZGRyZXNzAhRyZXF1ZXN0QWNyZXNDYWxsYmFjawkAzAgCBQthY3Jlc0Ftb3VudAUDbmlsBQNuaWwDCQAAAgUDcmVxBQNyZXEECXdsZ1JlbWFpbgkBBWFzSW50AQkA/AcEBQt3bGdDb250cmFjdAIKYnVybldsZ29sZAUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCBQp3bGdBc3NldElkBQNhbXQFA25pbAkAlAoCCQDOCAIJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwgFAWkGY2FsbGVyBQthY3Jlc0Ftb3VudAUMYWNyZXNBc3NldElkBQNuaWwFDXByb2xvZ0FjdGlvbnMFCXdsZ1JlbWFpbgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpARBjb252ZXJ0T2xkU3Rha2VzAAQHYWRkcmVzcwkApQgBCAUBaQZjYWxsZXIDCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAAJAAIBAhRObyBwYXltZW50cyByZXF1aXJlZAQPb2xkQWNyZXNBZGRyZXNzCQERQGV4dHJOYXRpdmUoMTA2MikBCQERQGV4dHJOYXRpdmUoMTA1OCkBBRNvbGRBY3Jlc0NvbnRyYWN0S2V5BAZhbW91bnQJAQt2YWx1ZU9yRWxzZQIJAJoIAgUPb2xkQWNyZXNBZGRyZXNzCQEXa2V5QWNyZXNTdGFrZWRBbXRCeVVzZXIBBQdhZGRyZXNzAAAECWdvdEFjcmVzMAMJAGYCBQZhbW91bnQAAAkBDGFzVHVwbGUySW50cwEJAPwHBAUPb2xkQWNyZXNBZGRyZXNzAhR1bnN0YWtlQWNyZXNDYWxsYmFjawkAzAgCBQZhbW91bnQJAMwIAgUHYWRkcmVzcwUDbmlsBQNuaWwJAJQKAgAAAAAEEW9sZFN0YWtpbmdB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Q2FsbGJhY2sJAMwIAgUHYWRkcmVzcwUDbmlsBQNuaWwDCQAAAgUIZmluYWxpemUFCGZpbmFsaXplBANyZXEJAPwHBAUPb2xkQWNyZXNBZGRyZXNzAhRyZXF1ZXN0QWNyZXNDYWxsYmFjawkAzAgCCQBkAgkAZAIJAGQCCAUCcnICXzEIBQJycgJfMggFAnJyAl8zCAUCcnICXzQFA25pbAUDbmlsAwkAAAIFA3JlcQUDcmVxBAVpc3N1ZQkAwggFAghGUE9XRVIxMAIpRmFybWluZ1Bvd2VyICsxMCUgTkZUIGZvciBXYXZlc0xhbmRzIGdhbWUAAQAABwkAlwoFCAUCcnICXzEIBQJycgJfMggFAnJyAl8zCAUCcnICXzQJAMwIAgUFaXNzdWUJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwgFAWkGY2FsbGVyAAEJALgIAQUFaXNzdWUFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAlwoFAAAAAAAAAAAFA25pbAQLZHVja0Fzc2V0SWQJAQt2YWx1ZU9yRWxzZQIJAJ0IAgURb2xkU3Rha2luZ0FkZHJlc3MJARRrZXlTdGFrZWREdWNrQnlPd25lcgEFB2FkZHJlc3MCAAQKZHVja1Jlc3VsdAMJAQIhPQIFC2R1Y2tBc3NldElkAgAJAQxhc1R1cGxlM0ludHMBCQD8BwQFEW9sZFN0YWtpbmdBZGRyZXNzAhN1bnN0YWtlRHVja0NhbGxiYWNrCQDMCAIFC2R1Y2tBc3NldElkCQDMCAIFB2FkZHJlc3MFA25pbAUDbmlsCQCVCgMAAAAAAAAEAXgJARJzdGFrZUFjcmVzSW50ZXJuYWwCCQBkAgkAZAIJAGQCCQBkAgkAZAIJAGQCCQBkAggFCWdvdEFjcmVzMAJfMQgFC2xhbmRzUmVzdWx0Al8xCAULbGFuZHNSZXN1bHQCXzIIBQtsYW5kc1Jlc3VsdAJfMwgFC2xhbmRzUmVzdWx0Al80CAUKZHVja1Jlc3VsdAJfMQgFCmR1Y2tSZXN1bHQCXzIIBQpkdWNrUmVzdWx0Al8zBQdhZGRyZXNzCQCUCgIJAM4IAggFC2xhbmRzUmVzdWx0Al81CAUBeAJfMQgFAXgCXzIBaQEUdW5zdGFrZUxhbmRzUkVBRE9OTFkBB2FkZHJlc3MEEW9sZFN0YWtpbmdBZGRyZXNzCQERQGV4dHJOYXRpdmUoMTA2MikBBRVvbGRTdGFraW5nQ29udHJhY3RTdHIECGxhbmRzU3RyCQCdCAIFEW9sZFN0YWtpbmdBZGRyZXNzCQEVa2V5U3Rha2VkTGFuZHNCeU93bmVyAQUHYWRkcmVzcwQLbGFuZHNSZXN1bHQDCQEJaXNEZWZpbmVkAQUIbGFuZHNTdHIEBWxhbmRzCQC9CQIJAQV2YWx1ZQEFCGxhbmRzU3RyAgFfCgEHb25lTGFuZAIDYWNjC2xhbmRBc3NldElkAwkAAAIFC2xhbmRBc3NldElkAgAJAAIBAhdsYW5kQXNzZXRJZCBpcyByZXF1aXJlZAQBcgkBDGFzVHVwbGU0SW50cwEJAPwHBAURb2xkU3Rha2luZ0FkZHJlc3MCE3Vuc3Rha2VMYW5kUkVBRE9OTFkJAMwIAgULbGFuZEFzc2V0SWQJAMwIAgUHYWRkcmVzcwUDbmlsBQNuaWwJAJYKBAkAZAIIBQNhY2MCXzEIBQFyAl8xCQBkAggFA2FjYwJfMggFAXICXzIJAGQCCAUDYWNjAl8zCAUBcgJfMwkAZAIIBQNhY2MCXzQIBQFyAl80CgACJGwFBWxhbmRzCgACJHMJAJADAQUCJGwKAAUkYWNjMAkAlgoEAAAAAAAAAAAKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBB29uZUxhbmQCBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECFUxpc3Qgc2l6ZSBleGNlZWRzIDEwMAkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgAHAAgACQAKAAsADAANAA4ADwAQABEAEgATABQAFQAWABcAGAAZABoAGwAcAB0AHgAfACAAIQAiACMAJAAlACYAJwAoACkAKgArACwALQAuAC8AMAAxADIAMwA0ADUANgA3ADgAOQA6ADsAPAA9AD4APwBAAEEAQgBDAEQARQBGAEcASABJAEoASwBMAE0ATgBPAFAAUQBSAFMAVABVAFYAVwBYAFkAWgBbAFwAXQBeAF8AYABhAGIAYwBkCQCWCgQAAAAAAAAAAAkAlAoCBQNuaWwFC2xhbmRzUmVzdWx0AWkBEnN0YWtlQWNyZXNDYWxsYmFjawEEYWRkcgMJAQIhPQIIBQFpBmNhbGxlcgkBEUBleHRyTmF0aXZlKDEwNjIpAQUVb2xkU3Rha2luZ0NvbnRyYWN0U3RyCQACAQIRUGVybWlzc2lvbiBkZW5pZWQJARJzdGFrZUFjcmVzSW50ZXJuYWwCCAkAkQMCCAUBaQhwYXltZW50cwAABmFtb3VudAUEYWRkcgDkMD+H", "height": 3284744, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 8zMiF1mFE5Jyrcvdr19CUm9zoahWib5iqRvzqEUz85wN Next: CdR8auZXQXnYMwGAbRf5TZgdv75sot9i6DWd56wQYCtG Diff:
OldNewDifferences
400400 }
401401
402402
403+
404+@Callable(i)
405+func stakeAcresCallback (addr) = if ((i.caller != addressFromStringValue(oldStakingContractStr)))
406+ then throw("Permission denied")
407+ else stakeAcresInternal(i.payments[0].amount, addr)
408+
409+
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_DIVISOR = 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)
241241 let newAcresAmount = (oldAcresAmount - amount)
242242 let userFpKey = keyFarmingPowerByUser(address)
243243 let oldFp = valueOrElse(getInteger(userFpKey), 0)
244244 let newFp = getFarmingPowerByAcres(newAcresAmount)
245245 let oldTotalFp = valueOrElse(getInteger(totalFarmingPowerKey), 0)
246246 $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)
247247 }
248248 }
249249 }
250250 }
251251
252252
253253
254254 @Callable(i)
255255 func stakeAcres () = {
256256 let prologActions = prolog(i)
257257 let address = toString(i.caller)
258258 if ((size(i.payments) != 1))
259259 then throw("exactly 1 payment must be attached")
260260 else {
261261 let pmt = i.payments[0]
262262 let amt = pmt.amount
263263 if (if (!(isDefined(pmt.assetId)))
264264 then true
265265 else (value(pmt.assetId) != acresAssetId))
266266 then throw("ACRES payments only!")
267267 else {
268268 let $t038353901 = stakeAcresInternal(amt, address)
269269 let actions = $t038353901._1
270270 let wlgClaimedAmount = $t038353901._2
271271 $Tuple2((actions ++ prologActions), wlgClaimedAmount)
272272 }
273273 }
274274 }
275275
276276
277277
278278 @Callable(i)
279279 func buyAcres () = {
280280 let prologActions = prolog(i)
281281 let address = toString(i.caller)
282282 if ((size(i.payments) != 1))
283283 then throw("exactly 1 payment must be attached")
284284 else {
285285 let pmt = i.payments[0]
286286 let amt = pmt.amount
287287 if (if (!(isDefined(pmt.assetId)))
288288 then true
289289 else (value(pmt.assetId) != wlgAssetId))
290290 then throw("WLGOLD payments only!")
291291 else if ((MULT8 > amt))
292292 then throw((("Min payment should be " + fixedPoint(MULT8, 8)) + " WLGOLD"))
293293 else {
294294 let acresAmount = (amt / WLG2ACRES_DIVISOR)
295295 let oldAcresAddress = addressFromStringValue(getStringValue(oldAcresContractKey))
296296 let req = invoke(oldAcresAddress, "requestAcresCallback", [acresAmount], nil)
297297 if ((req == req))
298298 then {
299299 let wlgRemain = asInt(invoke(wlgContract, "burnWlgold", nil, [AttachedPayment(wlgAssetId, amt)]))
300300 $Tuple2(([ScriptTransfer(i.caller, acresAmount, acresAssetId)] ++ prologActions), wlgRemain)
301301 }
302302 else throw("Strict value is not equal to itself.")
303303 }
304304 }
305305 }
306306
307307
308308
309309 @Callable(i)
310310 func convertOldStakes () = {
311311 let address = toString(i.caller)
312312 if ((size(i.payments) != 0))
313313 then throw("No payments required")
314314 else {
315315 let oldAcresAddress = addressFromStringValue(getStringValue(oldAcresContractKey))
316316 let amount = valueOrElse(getInteger(oldAcresAddress, keyAcresStakedAmtByUser(address)), 0)
317317 let gotAcres0 = if ((amount > 0))
318318 then asTuple2Ints(invoke(oldAcresAddress, "unstakeAcresCallback", [amount, address], nil))
319319 else $Tuple2(0, 0)
320320 let oldStakingAddress = addressFromStringValue(oldStakingContractStr)
321321 let landsStr = getString(oldStakingAddress, keyStakedLandsByOwner(address))
322322 let landsResult = if (isDefined(landsStr))
323323 then {
324324 let lands = split_51C(value(landsStr), "_")
325325 func oneLand (acc,landAssetId) = if ((landAssetId == ""))
326326 then throw("landAssetId is required")
327327 else {
328328 let r = asTuple5Ints(invoke(oldStakingAddress, "unstakeLandCallback", [landAssetId, address], nil))
329329 $Tuple4((acc._1 + r._1), (acc._2 + r._2), (acc._3 + r._3), (acc._4 + r._4))
330330 }
331331
332332 let rr = {
333333 let $l = lands
334334 let $s = size($l)
335335 let $acc0 = $Tuple4(0, 0, 0, 0)
336336 func $f0_1 ($a,$i) = if (($i >= $s))
337337 then $a
338338 else oneLand($a, $l[$i])
339339
340340 func $f0_2 ($a,$i) = if (($i >= $s))
341341 then $a
342342 else throw("List size exceeds 100")
343343
344344 $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)
345345 }
346346 let finalize = invoke(oldStakingAddress, "unstakeLandsFinalizeCallback", [address], nil)
347347 if ((finalize == finalize))
348348 then {
349349 let req = invoke(oldAcresAddress, "requestAcresCallback", [(((rr._1 + rr._2) + rr._3) + rr._4)], nil)
350350 if ((req == req))
351351 then {
352352 let issue = Issue("FPOWER10", "FarmingPower +10% NFT for WavesLands game", 1, 0, false)
353353 $Tuple5(rr._1, rr._2, rr._3, rr._4, [issue, ScriptTransfer(i.caller, 1, calculateAssetId(issue))])
354354 }
355355 else throw("Strict value is not equal to itself.")
356356 }
357357 else throw("Strict value is not equal to itself.")
358358 }
359359 else $Tuple5(0, 0, 0, 0, nil)
360360 let duckAssetId = valueOrElse(getString(oldStakingAddress, keyStakedDuckByOwner(address)), "")
361361 let duckResult = if ((duckAssetId != ""))
362362 then asTuple3Ints(invoke(oldStakingAddress, "unstakeDuckCallback", [duckAssetId, address], nil))
363363 else $Tuple3(0, 0, 0)
364364 let x = stakeAcresInternal((((((((gotAcres0._1 + landsResult._1) + landsResult._2) + landsResult._3) + landsResult._4) + duckResult._1) + duckResult._2) + duckResult._3), address)
365365 $Tuple2((landsResult._5 ++ x._1), x._2)
366366 }
367367 }
368368
369369
370370
371371 @Callable(i)
372372 func unstakeLandsREADONLY (address) = {
373373 let oldStakingAddress = addressFromStringValue(oldStakingContractStr)
374374 let landsStr = getString(oldStakingAddress, keyStakedLandsByOwner(address))
375375 let landsResult = if (isDefined(landsStr))
376376 then {
377377 let lands = split_51C(value(landsStr), "_")
378378 func oneLand (acc,landAssetId) = if ((landAssetId == ""))
379379 then throw("landAssetId is required")
380380 else {
381381 let r = asTuple4Ints(invoke(oldStakingAddress, "unstakeLandREADONLY", [landAssetId, address], nil))
382382 $Tuple4((acc._1 + r._1), (acc._2 + r._2), (acc._3 + r._3), (acc._4 + r._4))
383383 }
384384
385385 let $l = lands
386386 let $s = size($l)
387387 let $acc0 = $Tuple4(0, 0, 0, 0)
388388 func $f0_1 ($a,$i) = if (($i >= $s))
389389 then $a
390390 else oneLand($a, $l[$i])
391391
392392 func $f0_2 ($a,$i) = if (($i >= $s))
393393 then $a
394394 else throw("List size exceeds 100")
395395
396396 $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)
397397 }
398398 else $Tuple4(0, 0, 0, 0)
399399 $Tuple2(nil, landsResult)
400400 }
401401
402402
403+
404+@Callable(i)
405+func stakeAcresCallback (addr) = if ((i.caller != addressFromStringValue(oldStakingContractStr)))
406+ then throw("Permission denied")
407+ else stakeAcresInternal(i.payments[0].amount, addr)
408+
409+

github/deemru/w8io/169f3d6 
57.04 ms