tx · b9pot6JkR7Qxo98BvwKAy32KiVhCG3eC6i34CPByJuF

3NBPx1Fciu3JQNEGZ21jSnTdutLNGGBUSXh:  -0.01700000 Waves

2024.11.20 00:57 [3378895] smart account 3NBPx1Fciu3JQNEGZ21jSnTdutLNGGBUSXh > SELF 0.00000000 Waves

{ "type": 13, "id": "b9pot6JkR7Qxo98BvwKAy32KiVhCG3eC6i34CPByJuF", "fee": 1700000, "feeAssetId": null, "timestamp": 1732053443147, "version": 2, "chainId": 84, "sender": "3NBPx1Fciu3JQNEGZ21jSnTdutLNGGBUSXh", "senderPublicKey": "3QtfC1XbLZXdeawMDeSERy9vvjUmj1XYd2GFmrvx7pWQ", "proofs": [ "4xm1vCgypxJTvBL87bB46ATvbxgnG6YYqmQX1oG7uNxpidgMPXDnukaxCKzhde2vp6YeKpTE2xdvp9MNphpNjXvL" ], "script": "base64:BgI9CAISABIECgIICBIDCgEEEgMKAQESABIAEgMKAQESABIECgIIARIAEgMKAQgSAwoBCBIECgIIARIECgIIAT4AA1NFUAICX18ABU1VTFQ2AMCEPQAFTVVMVDcAgK3iBAAFTVVMVDgAgMLXLwAKREFZX01JTExJUwCAuJkpABVVU0RUMkFDUkVTX01VTFRJUExJRVIACgATT05FX1BFUkNFTlRfRElWSVNPUgBkAAVjaGFpbgkAyQECCQDKAQIIBQR0aGlzBWJ5dGVzAAEAAQALdXNkdEFzc2V0SWQEByRtYXRjaDAFBWNoYWluAwkAAAIBAVcFByRtYXRjaDABIITaerIIAz9O0bvKju6Lk7zJgt0LXfoHlqjUI/moD/+5AwkAAAIBAVQFByRtYXRjaDABIFWx2J9yh4Lv5eNbjawFq2XemkOhLxa7BfMat4el8cUYCQACAQINVW5rbm93biBjaGFpbgAWZGVmYXVsdFJlc3QyQWRkcmVzc1N0cgQHJG1hdGNoMAUFY2hhaW4DCQAAAgEBVwUHJG1hdGNoMAIjM1BGd1l0YThiaUV6MzF6cGVGZTVESks4d0U1dHJTcFFWRjgDCQAAAgEBVAUHJG1hdGNoMAIjM043VXVZYXI2MjY0UDU4RkJoVldLUFFBaDRZdWEyaGduZ3YJAAIBAg1Vbmtub3duIGNoYWluAA5hcmJpdHJhZ2VEZWxheQQHJG1hdGNoMAUFY2hhaW4DCQAAAgEBVwUHJG1hdGNoMAUKREFZX01JTExJUwMJAAACAQFUBQckbWF0Y2gwAODUAwkAAgECDVVua25vd24gY2hhaW4AFW9sZFN0YWtpbmdDb250cmFjdFN0cgQHJG1hdGNoMAUFY2hhaW4DCQAAAgEBVwUHJG1hdGNoMAIjM1BMbmNYdFMxVTgzRDZjUWJGRDNIOHJCSFBMZ3p4U0ZLWjEDCQAAAgEBVAUHJG1hdGNoMAIjM05EQ3lCRzVxODVKdWFSaWlnVWVFdGFpbnlqQ1FUM1hwWm0JAAIBAg1Vbmtub3duIGNoYWluAQ9nZXRTdHJpbmdPckZhaWwCB2FkZHJlc3MDa2V5CQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgUHYWRkcmVzcwUDa2V5CQC5CQIJAMwIAgIKbWFuZGF0b3J5IAkAzAgCCQClCAEFB2FkZHJlc3MJAMwIAgIBLgkAzAgCBQNrZXkJAMwIAgIPIGlzIG5vdCBkZWZpbmVkBQNuaWwCAAAQSWR4Q2ZnQWNyZXMyRGFwcAABAA1JZHhDZmdXbGdEYXBwAAIAFElkeENmZ0ludmVzdEZ1bmREYXBwAAUBCmtleVJlc3RDZmcAAg4lc19fcmVzdENvbmZpZwEPa2V5UmVzdDJBZGRyZXNzAAINJXNfX3Jlc3QyQWRkcgERcmVhZFJlc3RDZmdPckZhaWwBBHJlc3QJALwJAgkBD2dldFN0cmluZ09yRmFpbAIFBHJlc3QJAQprZXlSZXN0Q2ZnAAUDU0VQARhnZXRDb250cmFjdEFkZHJlc3NPckZhaWwCCHJlc3QyQ2ZnA2lkeAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCmCAEJAJEDAgUIcmVzdDJDZmcFA2lkeAkArAICAipSZXN0IGNmZyBkb2Vzbid0IGNvbnRhaW4gYWRkcmVzcyBhdCBpbmRleCAJAKQDAQUDaWR4AA1yZXN0MkNvbnRyYWN0CQERQGV4dHJOYXRpdmUoMTA2MikBCQELdmFsdWVPckVsc2UCCQCdCAIFBHRoaXMJAQ9rZXlSZXN0MkFkZHJlc3MABRZkZWZhdWx0UmVzdDJBZGRyZXNzU3RyAAhyZXN0MkNmZwkBEXJlYWRSZXN0Q2ZnT3JGYWlsAQUNcmVzdDJDb250cmFjdAAOYWNyZXMyQ29udHJhY3QJARhnZXRDb250cmFjdEFkZHJlc3NPckZhaWwCBQhyZXN0MkNmZwUQSWR4Q2ZnQWNyZXMyRGFwcAALd2xnQ29udHJhY3QJARhnZXRDb250cmFjdEFkZHJlc3NPckZhaWwCBQhyZXN0MkNmZwUNSWR4Q2ZnV2xnRGFwcAASaW52ZXN0RnVuZENvbnRyYWN0CQEYZ2V0Q29udHJhY3RBZGRyZXNzT3JGYWlsAgUIcmVzdDJDZmcFFElkeENmZ0ludmVzdEZ1bmREYXBwABNvbGRBY3Jlc0NvbnRyYWN0S2V5AhBvbGRBY3Jlc0NvbnRyYWN0AQprZXlCbG9ja2VkAAIQY29udHJhY3RzQmxvY2tlZAERa2V5TGFzdFR4SWRCeVVzZXIBBGFkZHIJAKwCAgIPbGFzdFR4SWRCeVVzZXJfBQRhZGRyABRhY3Jlc0lzc3VlZEFtb3VudEtleQIRYWNyZXNJc3N1ZWRBbW91bnQAD2FjcmVzQXNzZXRJZEtleQIMYWNyZXNBc3NldElkAAxhY3Jlc0Fzc2V0SWQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnAgCBQ5hY3JlczJDb250cmFjdAUPYWNyZXNBc3NldElkS2V5AhdBQ1JFUyBpcyBub3QgaXNzdWVkIHlldAEYa2V5QWNyZXNTdGFrZWRUaW1lQnlVc2VyAQRhZGRyCQCsAgICFmFjcmVzU3Rha2VkVGltZUJ5VXNlcl8FBGFkZHIBFWtleVN0YWtlZExhbmRzQnlPd25lcgEJb3duZXJBZGRyCQCsAgICE3N0YWtlZExhbmRzQnlPd25lcl8FCW93bmVyQWRkcgEUa2V5U3Rha2VkRHVja0J5T3duZXIBCW93bmVyQWRkcgkArAICAhJzdGFrZWREdWNrQnlPd25lcl8FCW93bmVyQWRkcgEFYXNJbnQBAXYEByRtYXRjaDAFAXYDCQABAgUHJG1hdGNoMAIDSW50BAFuBQckbWF0Y2gwBQFuCQACAQIVZmFpbCB0byBjYXN0IGludG8gSW50AQxhc1R1cGxlNUludHMBA3ZhbAQHJG1hdGNoMAUDdmFsAwkAAQIFByRtYXRjaDACGShJbnQsIEludCwgSW50LCBJbnQsIEludCkEAXQFByRtYXRjaDAFAXQJAAIBAitmYWlsIHRvIGNhc3QgaW50byAoSW50LCBJbnQsIEludCwgSW50LCBJbnQpAQxhc1R1cGxlNEludHMBA3ZhbAQHJG1hdGNoMAUDdmFsAwkAAQIFByRtYXRjaDACFChJbnQsIEludCwgSW50LCBJbnQpBAF0BQckbWF0Y2gwBQF0CQACAQImZmFpbCB0byBjYXN0IGludG8gKEludCwgSW50LCBJbnQsIEludCkBDGFzVHVwbGUzSW50cwEDdmFsBAckbWF0Y2gwBQN2YWwDCQABAgUHJG1hdGNoMAIPKEludCwgSW50LCBJbnQpBAF0BQckbWF0Y2gwBQF0CQACAQIhZmFpbCB0byBjYXN0IGludG8gKEludCwgSW50LCBJbnQpAQxhc1R1cGxlMkludHMBA3ZhbAQHJG1hdGNoMAUDdmFsAwkAAQIFByRtYXRjaDACCihJbnQsIEludCkEAXQFByRtYXRjaDAFAXQJAAIBAhxmYWlsIHRvIGNhc3QgaW50byAoSW50LCBJbnQpAQpmaXhlZFBvaW50AgN2YWwIZGVjaW1hbHMEBnRlblBvdwkAbAYACgAABQhkZWNpbWFscwAAAAAFBERPV04EB2xvd1BhcnQJAKQDAQkAagIFA3ZhbAUGdGVuUG93BAZ6ZXJvZXMJALACAgkApAMBBQZ0ZW5Qb3cJAGQCAAEJALECAQUHbG93UGFydAkArAICCQCsAgIJAKwCAgkApAMBCQBpAgUDdmFsBQZ0ZW5Qb3cCAS4FBnplcm9lcwUHbG93UGFydAADTThfAIDC1y8AD3dsZ0lzc3VlZEFtdEtleQIQd2xnX2lzc3VlZEFtb3VudAAOemJJc3N1ZWRBbXRLZXkCEnpiaWxsX2lzc3VlZEFtb3VudAEXa2V5QWNyZXNTdGFrZWRBbXRCeVVzZXIBBGFkZHIJAKwCAgIYYWNyZXNTdGFrZWRBbW91bnRCeVVzZXJfBQRhZGRyARVrZXlGYXJtaW5nUG93ZXJCeVVzZXIBBGFkZHIJAKwCAgITZmFybWluZ1Bvd2VyQnlVc2VyXwUEYWRkcgASYWNyZXNTdGFrZFRvdGFsS2V5AhZhY3Jlc1N0YWtlZEFtb3VudFRvdGFsABR0b3RhbEZhcm1pbmdQb3dlcktleQIRdG90YWxGYXJtaW5nUG93ZXIAFUlkeER0eDNQZXJjQ29udmVyc2lvbgAAAApsZXZlbEFjcmVzCQDMCAIAAAkAzAgCAAoJAMwIAgAUCQDMCAIAKAkAzAgCAFAJAMwIAgCWAQkAzAgCAPoBCQDMCAIAkAMJAMwIAgC8BQkAzAgCAOgHBQNuaWwBD2dldExldmVsQnlBY3JlcwEFYWNyZXMEA2FjcgkAaQIJAGQCBQVhY3JlcwD/wdcvBQNNOF8KAQdjaGVja2VyAgNhY2MEaXRlbQMJAGcCBQRpdGVtBQNhY3IFA2FjYwkAZAIFA2FjYwABCgACJGwFCmxldmVsQWNyZXMKAAIkcwkAkAMBBQIkbAoABSRhY2MwAAAKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBB2NoZWNrZXICBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECFExpc3Qgc2l6ZSBleGNlZWRzIDEwCQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGAAcACAAJAAoBFmdldEZhcm1pbmdQb3dlckJ5QWNyZXMBBWFjcmVzCQBoAgkAaAIFBWFjcmVzABQJAGQCCQEPZ2V0TGV2ZWxCeUFjcmVzAQUFYWNyZXMABAEZa2V5TGFzdFdsZ1RyYWRlVGltZUJ5VXNlcgEEYWRkcgkArAICAhBsYXN0QXJiVGltZVVzZXJfBQRhZGRyABRrZXlMYXN0QWNyZXNTZWxsVGltZQIRbGFzdEFjcmVzU2VsbFRpbWUAEGtleUxhc3RMaW1pdExlZnQCDWxhc3RMaW1pdExlZnQACGR0eEFycmF5BAckbWF0Y2gwBQVjaGFpbgMJAAACAQFXBQckbWF0Y2gwBQNuaWwDCQAAAgEBVAUHJG1hdGNoMAUDbmlsCQACAQINVW5rbm93biBjaGFpbgAPbmZ0RGVzY3JpcHRpb25zCQDMCAICMUZhcm1pbmdQb3dlciArMyUgTkZUIGZvciBXYXZlc0xhbmRzIGxveWFsIHBsYXllcnMJAMwIAgIURmFybWluZ1Bvd2VyICsxJSBORlQFA25pbAAIbmZ0TmFtZXMJAMwIAgIJRlBPV0VSKzMlCQDMCAICB0ZQT1dFUjEFA25pbAEGcHJvbG9nAQFpAwMJAQIhPQIIBQFpDG9yaWdpbkNhbGxlcgUNcmVzdDJDb250cmFjdAkBC3ZhbHVlT3JFbHNlAgkAoAgBCQEKa2V5QmxvY2tlZAAHBwkAAgECH0NvbnRyYWN0cyBhcmUgdW5kZXIgbWFpbnRlbmFuY2UJAMwIAgkBC1N0cmluZ0VudHJ5AgkBEWtleUxhc3RUeElkQnlVc2VyAQkApQgBCAUBaQxvcmlnaW5DYWxsZXIJANgEAQgFAWkNdHJhbnNhY3Rpb25JZAUDbmlsARBpc3N1ZU5GVGludGVybmFsAQhuZnRJbmRleAMJAGcCBQhuZnRJbmRleAkAkAMBBQhkdHhBcnJheQkAAgECFm5mdEluZGV4IG91dCBvZiBib3VuZHMEBWlzc3VlCQDCCAUJAJEDAgUIbmZ0TmFtZXMFCG5mdEluZGV4CQCsAgIJAKwCAgkAkQMCBQhkdHhBcnJheQUIbmZ0SW5kZXgFA1NFUAkAkQMCBQ9uZnREZXNjcmlwdGlvbnMFCG5mdEluZGV4AAEAAAcJAJQKAgUFaXNzdWUJALgIAQUFaXNzdWUBGXN0YWtlVW5zdGFrZUFjcmVzSW50ZXJuYWwCA2FtdAdhZGRyZXNzBAl3bGdSZXN1bHQJAPwHBAULd2xnQ29udHJhY3QCEm9uU3Rha2VVbnN0YWtlTGFuZAkAzAgCBQdhZGRyZXNzBQNuaWwFA25pbAMJAAACBQl3bGdSZXN1bHQFCXdsZ1Jlc3VsdAQDbm93CAUJbGFzdEJsb2NrCXRpbWVzdGFtcAQHdGltZUtleQkBGGtleUFjcmVzU3Rha2VkVGltZUJ5VXNlcgEFB2FkZHJlc3MECWFtb3VudEtleQkBF2tleUFjcmVzU3Rha2VkQW10QnlVc2VyAQUHYWRkcmVzcwQOb2xkQWNyZXNBbW91bnQJAQt2YWx1ZU9yRWxzZQIJAJ8IAQUJYW1vdW50S2V5AAADAwkAZgIAAAUDYW10CQBmAgAACQBkAgUOb2xkQWNyZXNBbW91bnQFA2FtdAcJAAIBCQCsAgIJAKwCAgkArAICAg5Zb3UgaGF2ZSBvbmx5IAkBCmZpeGVkUG9pbnQCBQ5vbGRBY3Jlc0Ftb3VudAAIAiAgQUNSRVMgc3Rha2VkLCB0cmllZCB0byB1bnN0YWtlIAkBCmZpeGVkUG9pbnQCCQEBLQEFA2FtdAAIBA5uZXdBY3Jlc0Ftb3VudAkAZAIFDm9sZEFjcmVzQW1vdW50BQNhbXQECG9sZFRvdGFsCQELdmFsdWVPckVsc2UCCQCfCAEFEmFjcmVzU3Rha2RUb3RhbEtleQAABAl1c2VyRnBLZXkJARVrZXlGYXJtaW5nUG93ZXJCeVVzZXIBBQdhZGRyZXNzBAVvbGRGcAkBC3ZhbHVlT3JFbHNlAgkAnwgBBQl1c2VyRnBLZXkAAAQFbmV3RnAJARZnZXRGYXJtaW5nUG93ZXJCeUFjcmVzAQUObmV3QWNyZXNBbW91bnQECm9sZFRvdGFsRnAJAQt2YWx1ZU9yRWxzZQIJAJ8IAQUUdG90YWxGYXJtaW5nUG93ZXJLZXkAAAkAlAoCCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQd0aW1lS2V5CAUJbGFzdEJsb2NrCXRpbWVzdGFtcAkAzAgCCQEMSW50ZWdlckVudHJ5AgUJYW1vdW50S2V5BQ5uZXdBY3Jlc0Ftb3VudAkAzAgCCQEMSW50ZWdlckVudHJ5AgUSYWNyZXNTdGFrZFRvdGFsS2V5CQBkAgUIb2xkVG90YWwFA2FtdAkAzAgCCQEMSW50ZWdlckVudHJ5AgUJdXNlckZwS2V5BQVuZXdGcAkAzAgCCQEMSW50ZWdlckVudHJ5AgUUdG90YWxGYXJtaW5nUG93ZXJLZXkJAGQCCQBlAgUKb2xkVG90YWxGcAUFb2xkRnAFBW5ld0ZwBQNuaWwFCXdsZ1Jlc3VsdAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgELZ2V0V2xnUHJpY2UBFXVzZHRCYWxhbmNlQ29ycmVjdGlvbgQMaXNzdWVkQW1vdW50CQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJoIAgULd2xnQ29udHJhY3QFD3dsZ0lzc3VlZEFtdEtleQIYV0xHT0xEIGlzIG5vdCBpc3N1ZWQgeWV0BAZ3bGdVc2QJAPAHAgULd2xnQ29udHJhY3QFC3VzZHRBc3NldElkBAlhY3JlczJVc2QJAGUCCQDwBwIFDmFjcmVzMkNvbnRyYWN0BQt1c2R0QXNzZXRJZAUVdXNkdEJhbGFuY2VDb3JyZWN0aW9uBA9pbnZlc3RGdW5kVG90YWwJAGQCCQDwBwIFEmludmVzdEZ1bmRDb250cmFjdAULdXNkdEFzc2V0SWQJAQt2YWx1ZU9yRWxzZQIJAJoIAgUSaW52ZXN0RnVuZENvbnRyYWN0BQ56Yklzc3VlZEFtdEtleQAABA10b3RhbEZ1bmRzVXNkCQBkAgkAZAIFCWFjcmVzMlVzZAUGd2xnVXNkBQ9pbnZlc3RGdW5kVG90YWwJAGsDBQ10b3RhbEZ1bmRzVXNkBQVNVUxUOAUMaXNzdWVkQW1vdW50ARFnZXRTd2FwTGltaXRBY3JlcwAEBndsZ1VzZAkA8AcCBQt3bGdDb250cmFjdAULdXNkdEFzc2V0SWQECWFjcmVzMlVzZAkA8AcCBQR0aGlzBQt1c2R0QXNzZXRJZAQPaW52ZXN0RnVuZFRvdGFsCQBkAgkA8AcCBRJpbnZlc3RGdW5kQ29udHJhY3QFC3VzZHRBc3NldElkCQELdmFsdWVPckVsc2UCCQCaCAIFEmludmVzdEZ1bmRDb250cmFjdAUOemJJc3N1ZWRBbXRLZXkAAAQMZGVmYXVsdExpbWl0CQBpAgkAZAIJAGQCBQlhY3JlczJVc2QFBndsZ1VzZAUPaW52ZXN0RnVuZFRvdGFsBRNPTkVfUEVSQ0VOVF9ESVZJU09SBA1sYXN0TGltaXRMZWZ0CQELdmFsdWVPckVsc2UCCQCfCAEFEGtleUxhc3RMaW1pdExlZnQFDGRlZmF1bHRMaW1pdAQIbGFzdFRpbWUJAQt2YWx1ZU9yRWxzZQIJAJ8IAQUUa2V5TGFzdEFjcmVzU2VsbFRpbWUAAAQDbm93CAUJbGFzdEJsb2NrCXRpbWVzdGFtcAQMY3VycmVudExpbWl0CQBkAgUNbGFzdExpbWl0TGVmdAkAawMFDGRlZmF1bHRMaW1pdAkAZQIFA25vdwUIbGFzdFRpbWUFCkRBWV9NSUxMSVMEDWxpbWl0TGVmdFVzZHQJAJcDAQkAzAgCBQxjdXJyZW50TGltaXQJAMwIAgUMZGVmYXVsdExpbWl0BQNuaWwJAJQKAgkBDEludGVnZXJFbnRyeQIFFGtleUxhc3RBY3Jlc1NlbGxUaW1lBQNub3cFDWxpbWl0TGVmdFVzZHQOAWkBCnNhdmVMYXN0VHgAAwkBASEBCQEPY29udGFpbnNFbGVtZW50AgkAzAgCBQt3bGdDb250cmFjdAUDbmlsCAUBaQZjYWxsZXIJAAIBAg1BY2Nlc3MgZGVuaWVkCQCUCgIJAQZwcm9sb2cBBQFpACoBaQENY29uc3RydWN0b3JWMQIJcmVzdDJBZGRyDm9sZEFjckNvbnRyYWN0AwkBAiE9AggFAWkGY2FsbGVyBQR0aGlzCQACAQIRUGVybWlzc2lvbiBkZW5pZWQEDm9sZEFjckNvbnRBZGRyCQERQGV4dHJOYXRpdmUoMTA2MikBBQ5vbGRBY3JDb250cmFjdAkAzAgCCQEMSW50ZWdlckVudHJ5AgUUYWNyZXNJc3N1ZWRBbW91bnRLZXkJARFAZXh0ck5hdGl2ZSgxMDUwKQIFDm9sZEFjckNvbnRBZGRyBRRhY3Jlc0lzc3VlZEFtb3VudEtleQkAzAgCCQELQmluYXJ5RW50cnkCBQ9hY3Jlc0Fzc2V0SWRLZXkJARFAZXh0ck5hdGl2ZSgxMDUyKQIFDm9sZEFjckNvbnRBZGRyBQ9hY3Jlc0Fzc2V0SWRLZXkJAMwIAgkBC1N0cmluZ0VudHJ5AgkBD2tleVJlc3QyQWRkcmVzcwAFCXJlc3QyQWRkcgkAzAgCCQELU3RyaW5nRW50cnkCBRNvbGRBY3Jlc0NvbnRyYWN0S2V5BQ5vbGRBY3JDb250cmFjdAUDbmlsAWkBCnNldEJsb2NrZWQBCWlzQmxvY2tlZAMJAQIhPQIIBQFpBmNhbGxlcgUEdGhpcwkAAgECEXBlcm1pc3Npb24gZGVuaWVkCQDMCAIJAQxCb29sZWFuRW50cnkCCQEKa2V5QmxvY2tlZAAFCWlzQmxvY2tlZAUDbmlsAWkBDHVuc3Rha2VBY3JlcwEGYW1vdW50BA1wcm9sb2dBY3Rpb25zCQEGcHJvbG9nAQUBaQMJAGcCAAAFBmFtb3VudAkAAgECGUFtb3VudCBzaG91bGQgYmUgcG9zaXRpdmUEB2FkZHJlc3MJAKUIAQgFAWkGY2FsbGVyAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwAACQACAQIUTm8gcGF5bWVudHMgcmVxdWlyZWQEDmFyYlJlbGVhc2VUaW1lCQBkAgkBC3ZhbHVlT3JFbHNlAgkAmggCBQt3bGdDb250cmFjdAkBGWtleUxhc3RXbGdUcmFkZVRpbWVCeVVzZXIBBQdhZGRyZXNzAAAFDmFyYml0cmFnZURlbGF5AwkAZgIFDmFyYlJlbGVhc2VUaW1lCAUJbGFzdEJsb2NrCXRpbWVzdGFtcAkAAgEJAKwCAgItWW91IHRyYWRlZCBzb21lIFdMR09MRCwgY2Fubm90IHVuc3Rha2UgdW50aWwgCQCkAwEFDmFyYlJlbGVhc2VUaW1lBAskdDA1MzIzNTQwMAkBGXN0YWtlVW5zdGFrZUFjcmVzSW50ZXJuYWwCCQEBLQEFBmFtb3VudAUHYWRkcmVzcwQHYWN0aW9ucwgFCyR0MDUzMjM1NDAwAl8xBBB3bGdDbGFpbWVkQW1vdW50CAULJHQwNTMyMzU0MDACXzIJAJQKAgkAzggCCQDNCAIFB2FjdGlvbnMJAQ5TY3JpcHRUcmFuc2ZlcgMIBQFpBmNhbGxlcgUGYW1vdW50BQxhY3Jlc0Fzc2V0SWQFDXByb2xvZ0FjdGlvbnMFEHdsZ0NsYWltZWRBbW91bnQBaQEKc3Rha2VBY3JlcwAEDXByb2xvZ0FjdGlvbnMJAQZwcm9sb2cBBQFpBAdhZGRyZXNzCQClCAEIBQFpBmNhbGxlcgMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAQkAAgECImV4YWN0bHkgMSBwYXltZW50IG11c3QgYmUgYXR0YWNoZWQEA3BtdAkAkQMCCAUBaQhwYXltZW50cwAABANhbXQIBQNwbXQGYW1vdW50AwMJAQEhAQkBCWlzRGVmaW5lZAEIBQNwbXQHYXNzZXRJZAYJAQIhPQIJAQV2YWx1ZQEIBQNwbXQHYXNzZXRJZAUMYWNyZXNBc3NldElkCQACAQIUQUNSRVMgcGF5bWVudHMgb25seSEECyR0MDU4NTE1OTI0CQEZc3Rha2VVbnN0YWtlQWNyZXNJbnRlcm5hbAIFA2FtdAUHYWRkcmVzcwQHYWN0aW9ucwgFCyR0MDU4NTE1OTI0Al8xBBB3bGdDbGFpbWVkQW1vdW50CAULJHQwNTg1MTU5MjQCXzIJAJQKAgkAzggCBQdhY3Rpb25zBQ1wcm9sb2dBY3Rpb25zBRB3bGdDbGFpbWVkQW1vdW50AWkBCGJ1eUFjcmVzAAQNcHJvbG9nQWN0aW9ucwkBBnByb2xvZwEFAWkDCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAEJAAIBAiJleGFjdGx5IDEgcGF5bWVudCBtdXN0IGJlIGF0dGFjaGVkBANwbXQJAJEDAggFAWkIcGF5bWVudHMAAAQKdXNkdEFtb3VudAgFA3BtdAZhbW91bnQDAwkBASEBCQEJaXNEZWZpbmVkAQgFA3BtdAdhc3NldElkBgkBAiE9AgkBBXZhbHVlAQgFA3BtdAdhc3NldElkBQt1c2R0QXNzZXRJZAkAAgECE1VTRFQgcGF5bWVudHMgb25seSEDCQBmAgUFTVVMVDYFCnVzZHRBbW91bnQJAAIBCQCsAgIJAKwCAgIWTWluIHBheW1lbnQgc2hvdWxkIGJlIAkBCmZpeGVkUG9pbnQCBQVNVUxUNgAGAgUgVVNEVAQLYWNyZXNBbW91bnQJAGgCBQp1c2R0QW1vdW50BRVVU0RUMkFDUkVTX01VTFRJUExJRVIECXdsZ0Ftb3VudAkAawMFCnVzZHRBbW91bnQFBU1VTFQ4CQELZ2V0V2xnUHJpY2UBBQp1c2R0QW1vdW50BA9vbGRBY3Jlc0FkZHJlc3MJARFAZXh0ck5hdGl2ZSgxMDYyKQEJARFAZXh0ck5hdGl2ZSgxMDU4KQEFE29sZEFjcmVzQ29udHJhY3RLZXkEA3JlcQkA/AcEBQ9vbGRBY3Jlc0FkZHJlc3MCFHJlcXVlc3RBY3Jlc0NhbGxiYWNrCQDMCAIFC2FjcmVzQW1vdW50BQNuaWwFA25pbAMJAAACBQNyZXEFA3JlcQQJd2xnUmVtYWluCQEFYXNJbnQBCQD8BwQFC3dsZ0NvbnRyYWN0AgpidXJuV2xnb2xkCQDMCAIFCXdsZ0Ftb3VudAUDbmlsBQNuaWwJAJQKAgkAzggCCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMIBQFpBmNhbGxlcgULYWNyZXNBbW91bnQFDGFjcmVzQXNzZXRJZAUDbmlsBQ1wcm9sb2dBY3Rpb25zBQl3bGdSZW1haW4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEQYnV5QWNyZXNSRUFET05MWQEKdXNkdEFtb3VudAQLYWNyZXNBbW91bnQJAGgCBQp1c2R0QW1vdW50BRVVU0RUMkFDUkVTX01VTFRJUExJRVIECXdsZ1RvQnVybgkAawMFCnVzZHRBbW91bnQFBU1VTFQ4CQELZ2V0V2xnUHJpY2UBBQp1c2R0QW1vdW50CQCUCgIFA25pbAkAzAgCBQthY3Jlc0Ftb3VudAkAzAgCBQVNVUxUNgkAzAgCBQthY3Jlc0Ftb3VudAkAzAgCBQl3bGdUb0J1cm4FA25pbAFpAQlzZWxsQWNyZXMABA1wcm9sb2dBY3Rpb25zCQEGcHJvbG9nAQUBaQMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAQkAAgECImV4YWN0bHkgMSBwYXltZW50IG11c3QgYmUgYXR0YWNoZWQEA3BtdAkAkQMCCAUBaQhwYXltZW50cwAABAthY3Jlc0Ftb3VudAgFA3BtdAZhbW91bnQDAwkBASEBCQEJaXNEZWZpbmVkAQgFA3BtdAdhc3NldElkBgkBAiE9AgkBBXZhbHVlAQgFA3BtdAdhc3NldElkBQxhY3Jlc0Fzc2V0SWQJAAIBAhRBQ1JFUyBwYXltZW50cyBvbmx5IQMJAGYCBQVNVUxUNwULYWNyZXNBbW91bnQJAAIBCQCsAgIJAKwCAgIWTWluIHBheW1lbnQgc2hvdWxkIGJlIAkBCmZpeGVkUG9pbnQCBQVNVUxUNwAIAgYgQUNSRVMEBGFkZHIJAKUIAQgFAWkGY2FsbGVyBAskdDA3NzgxNzgyOQkBEWdldFN3YXBMaW1pdEFjcmVzAAQLbGltaXRBY3Rpb24IBQskdDA3NzgxNzgyOQJfMQQHbWF4VXNkdAgFCyR0MDc3ODE3ODI5Al8yBAhtYXhBY3JlcwkAaAIFB21heFVzZHQFFVVTRFQyQUNSRVNfTVVMVElQTElFUgMJAGYCBQthY3Jlc0Ftb3VudAUIbWF4QWNyZXMJAAIBCQCsAgIJAKwCAgIRWW91IGNhbiBzZWxsIG1heCAJAQpmaXhlZFBvaW50AgUIbWF4QWNyZXMACAIGIEFDUkVTBAp1c2R0QW1vdW50CQBpAgkAaQIFC2FjcmVzQW1vdW50BRVVU0RUMkFDUkVTX01VTFRJUExJRVIAAgkAlAoCCQDOCAIJAMwIAgULbGltaXRBY3Rpb24JAMwIAgkBDEludGVnZXJFbnRyeQIFEGtleUxhc3RMaW1pdExlZnQJAGUCBQdtYXhVc2R0BQp1c2R0QW1vdW50CQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMIBQFpBmNhbGxlcgUKdXNkdEFtb3VudAULdXNkdEFzc2V0SWQFA25pbAUNcHJvbG9nQWN0aW9ucwUKdXNkdEFtb3VudAFpARFzZWxsQWNyZXNSRUFET05MWQIHYWRkcmVzcwthY3Jlc0Ftb3VudAQLJHQwODMyNTgzNzMJARFnZXRTd2FwTGltaXRBY3JlcwAEC2xpbWl0QWN0aW9uCAULJHQwODMyNTgzNzMCXzEEB21heFVzZHQIBQskdDA4MzI1ODM3MwJfMgQKdXNkdEFtb3VudAkAaQIJAGkCBQthY3Jlc0Ftb3VudAUVVVNEVDJBQ1JFU19NVUxUSVBMSUVSAAIJAJQKAgUDbmlsCQDMCAIFCnVzZHRBbW91bnQJAMwIAgUFTVVMVDcJAMwIAgkAaAIFB21heFVzZHQFFVVTRFQyQUNSRVNfTVVMVElQTElFUgkAzAgCAAAFA25pbAFpARBjb252ZXJ0T2xkU3Rha2VzAAMJAQIhPQIIBQFpBmNhbGxlcgUEdGhpcwkAAgECFFRlbXBvcmFyaWx5IGRpc2FibGVkBAdhZGRyZXNzCQClCAEIBQFpBmNhbGxlcgMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAAkAAgECFE5vIHBheW1lbnRzIHJlcXVpcmVkBA9vbGRBY3Jlc0FkZHJlc3MJARFAZXh0ck5hdGl2ZSgxMDYyKQEJARFAZXh0ck5hdGl2ZSgxMDU4KQEFE29sZEFjcmVzQ29udHJhY3RLZXkEBmFtb3VudAkBC3ZhbHVlT3JFbHNlAgkAmggCBQ9vbGRBY3Jlc0FkZHJlc3MJARdrZXlBY3Jlc1N0YWtlZEFtdEJ5VXNlcgEFB2FkZHJlc3MAAAQJZ290QWNyZXMwAwkAZgIFBmFtb3VudAAACQEMYXNUdXBsZTJJbnRzAQkA/AcEBQ9vbGRBY3Jlc0FkZHJlc3MCFHVuc3Rha2VBY3Jlc0NhbGxiYWNrCQDMCAIFBmFtb3VudAkAzAgCBQdhZGRyZXNzBQNuaWwFA25pbAkAlAoCAAAAAAQRb2xkU3Rha2luZ0FkZHJlc3MJARFAZXh0ck5hdGl2ZSgxMDYyKQEFFW9sZFN0YWtpbmdDb250cmFjdFN0cgQIbGFuZHNTdHIJAJ0IAgURb2xkU3Rha2luZ0FkZHJlc3MJARVrZXlTdGFrZWRMYW5kc0J5T3duZXIBBQdhZGRyZXNzBAtsYW5kc1Jlc3VsdAMJAQlpc0RlZmluZWQBBQhsYW5kc1N0cgQFbGFuZHMJAL0JAgkBBXZhbHVlAQUIbGFuZHNTdHICAV8KAQdvbmVMYW5kAgNhY2MLbGFuZEFzc2V0SWQDCQAAAgULbGFuZEFzc2V0SWQCAAkAAgECF2xhbmRBc3NldElkIGlzIHJlcXVpcmVkBAFyCQEMYXNUdXBsZTVJbnRzAQkA/AcEBRFvbGRTdGFraW5nQWRkcmVzcwITdW5zdGFrZUxhbmRDYWxsYmFjawkAzAgCBQtsYW5kQXNzZXRJZAkAzAgCBQdhZGRyZXNzBQNuaWwFA25pbAkAlgoECQBkAggFA2FjYwJfMQgFAXICXzEJAGQCCAUD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U3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQCXCgUAAAAAAAAAAAUDbmlsBAtkdWNrQXNzZXRJZAkBC3ZhbHVlT3JFbHNlAgkAnQgCBRFvbGRTdGFraW5nQWRkcmVzcwkBFGtleVN0YWtlZER1Y2tCeU93bmVyAQUHYWRkcmVzcwIABApkdWNrUmVzdWx0AwkBAiE9AgULZHVja0Fzc2V0SWQCAAkBDGFzVHVwbGUzSW50cwEJAPwHBAURb2xkU3Rha2luZ0FkZHJlc3MCE3Vuc3Rha2VEdWNrQ2FsbGJhY2sJAMwIAgULZHVja0Fzc2V0SWQJAMwIAgUHYWRkcmVzcwUDbmlsBQNuaWwJAJUKAwAAAAAAAAQBeAkBGXN0YWtlVW5zdGFrZUFjcmVzSW50ZXJuYWwCCQBkAgkAZAIJAGQCCQBkAgkAZAIJAGQCCQBkAggFCWdvdEFjcmVzMAJfMQgFC2xhbmRzUmVzdWx0Al8xCAULbGFuZHNSZXN1bHQCXzIIBQtsYW5kc1Jlc3VsdAJfMwgFC2xhbmRzUmVzdWx0Al80CAUKZHVja1Jlc3VsdAJfMQgFCmR1Y2tSZXN1bHQCXzIIBQpkdWNrUmVzdWx0Al8zBQdhZGRyZXNzCQCUCgIJAM4IAggFC2xhbmRzUmVzdWx0Al81CAUBeAJfMQgFAXgCXzIBaQEUdW5zdGFrZUxhbmRzUkVBRE9OTFkBB2FkZHJlc3MEEW9sZFN0YWtpbmdBZGRyZXNzCQERQGV4dHJOYXRpdmUoMTA2MikBBRVvbGRTdGFraW5nQ29udHJhY3RTdHIECGxhbmRzU3RyCQCdCAIFEW9sZFN0YWtpbmdBZGRyZXNzCQEVa2V5U3Rha2VkTGFuZHNCeU93bmVyAQUHYWRkcmVzcwQLbGFuZHNSZXN1bHQDCQEJaXNEZWZpbmVkAQUIbGFuZHNTdHIEBWxhbmRzCQC9CQIJAQV2YWx1ZQEFCGxhbmRzU3RyAgFfCgEHb25lTGFuZAIDYWNjC2xhbmRBc3NldElkAwkAAAIFC2xhbmRBc3NldElkAgAJAAIBAhdsYW5kQXNzZXRJZCBpcyByZXF1aXJlZAQBcgkBDGFzVHVwbGU0SW50cwEJAPwHBAURb2xkU3Rha2luZ0FkZHJlc3MCE3Vuc3Rha2VMYW5kUkVBRE9OTFkJAMwIAgULbGFuZEFzc2V0SWQJAMwIAgUHYWRkcmVzcwUDbmlsBQNuaWwJAJYKBAkAZAIIBQNhY2MCXzEIBQFyAl8xCQBkAggFA2FjYwJfMggFAXICXzIJAGQCCAUDYWNjAl8zCAUBcgJfMwkAZAIIBQNhY2MCXzQIBQFyAl80CgACJGwFBWxhbmRzCgACJHMJAJADAQUCJGwKAAUkYWNjMAkAlgoEAAAAAAAAAAAKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBB29uZUxhbmQCBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECFUxpc3Qgc2l6ZSBleGNlZWRzIDEwMAkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgAHAAgACQAKAAsADAANAA4ADwAQABEAEgATABQAFQAWABcAGAAZABoAGwAcAB0AHgAfACAAIQAiACMAJAAlACYAJwAoACkAKgArACwALQAuAC8AMAAxADIAMwA0ADUANgA3ADgAOQA6ADsAPAA9AD4APwBAAEEAQgBDAEQARQBGAEcASABJAEoASwBMAE0ATgBPAFAAUQBSAFMAVABVAFYAVwBYAFkAWgBbAFwAXQBeAF8AYABhAGIAYwBkCQCWCgQAAAAAAAAAAAkAlAoCBQNuaWwFC2xhbmRzUmVzdWx0AWkBEnN0YWtlQWNyZXNDYWxsYmFjawEEYWRkcgMJAQIhPQIIBQFpBmNhbGxlcgkBEUBleHRyTmF0aXZlKDEwNjIpAQUVb2xkU3Rha2luZ0NvbnRyYWN0U3RyCQACAQIRUGVybWlzc2lvbiBkZW5pZWQJARlzdGFrZVVuc3Rha2VBY3Jlc0ludGVybmFsAggJAJEDAggFAWkIcGF5bWVudHMAAAZhbW91bnQFBGFkZHIBaQEac2ltdWxhdGVTdGFrZUFjcmVzUkVBRE9OTFkCB2FkZHJlc3MLYWRkZWRBbW91bnQECWFtb3VudEtleQkBF2tleUFjcmVzU3Rha2VkQW10QnlVc2VyAQUHYWRkcmVzcwQObmV3QWNyZXNBbW91bnQJAGQCCQELdmFsdWVPckVsc2UCCQCfCAEFCWFtb3VudEtleQAABQthZGRlZEFtb3VudAQIb2xkVG90YWwJAQt2YWx1ZU9yRWxzZQIJAJ8IAQUSYWNyZXNTdGFrZFRvdGFsS2V5AAAECXVzZXJGcEtleQkBFWtleUZhcm1pbmdQb3dlckJ5VXNlcgEFB2FkZHJlc3MEBW9sZEZwCQELdmFsdWVPckVsc2UCCQCfCAEFCXVzZXJGcEtleQAABAVuZXdGcAkBFmdldEZhcm1pbmdQb3dlckJ5QWNyZXMBBQ5uZXdBY3Jlc0Ftb3VudAQKb2xkVG90YWxGcAkBC3ZhbHVlT3JFbHNlAgkAnwgBBRR0b3RhbEZhcm1pbmdQb3dlcktleQAABApuZXdUb3RhbEZwCQBkAgkAZQIFCm9sZFRvdGFsRnAFBW9sZEZwBQVuZXdGcAkAlAoCBQNuaWwJAMwIAgUFb2xkRnAJAMwIAgUFbmV3RnAJAMwIAgUKb2xkVG90YWxGcAkAzAgCBQpuZXdUb3RhbEZwBQNuaWwBaQEIaXNzdWVORlQCCmZvckFkZHJlc3MIbmZ0SW5kZXgDCQECIT0CCAUBaQZjYWxsZXIFC3dsZ0NvbnRyYWN0CQACAQIRUGVybWlzc2lvbiBkZW5pZWQEDSR0MDEyNzY5MTI4MjEJARBpc3N1ZU5GVGludGVybmFsAQUIbmZ0SW5kZXgEBWlzc3VlCAUNJHQwMTI3NjkxMjgyMQJfMQQKbmZ0QXNzZXRJZAgFDSR0MDEyNzY5MTI4MjECXzIJAJQKAgkAzAgCBQVpc3N1ZQkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCQERQGV4dHJOYXRpdmUoMTA2MikBBQpmb3JBZGRyZXNzAAEFCm5mdEFzc2V0SWQFA25pbAUKbmZ0QXNzZXRJZACkjHL5", "height": 3378895, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: FcTWp4WzTCLigzVMZSH4PvkNe1HfREUgqRqna38yowBC Next: none Diff:
OldNewDifferences
171171
172172 let totalFarmingPowerKey = "totalFarmingPower"
173173
174+let IdxDtx3PercConversion = 0
175+
174176 let levelAcres = [0, 10, 20, 40, 80, 150, 250, 400, 700, 1000]
175177
176178 func getLevelByAcres (acres) = {
200202 func keyLastWlgTradeTimeByUser (addr) = ("lastArbTimeUser_" + addr)
201203
202204
205+let keyLastAcresSellTime = "lastAcresSellTime"
206+
207+let keyLastLimitLeft = "lastLimitLeft"
208+
209+let dtxArray = match chain {
210+ case _ =>
211+ if ((base58'2W' == $match0))
212+ then nil
213+ else if ((base58'2T' == $match0))
214+ then nil
215+ else throw("Unknown chain")
216+}
217+
218+let nftDescriptions = ["FarmingPower +3% NFT for WavesLands loyal players", "FarmingPower +1% NFT"]
219+
220+let nftNames = ["FPOWER+3%", "FPOWER1"]
221+
203222 func prolog (i) = if (if ((i.originCaller != rest2Contract))
204223 then valueOrElse(getBoolean(keyBlocked()), false)
205224 else false)
206225 then throw("Contracts are under maintenance")
207226 else [StringEntry(keyLastTxIdByUser(toString(i.originCaller)), toBase58String(i.transactionId))]
227+
228+
229+func issueNFTinternal (nftIndex) = if ((nftIndex >= size(dtxArray)))
230+ then throw("nftIndex out of bounds")
231+ else {
232+ let issue = Issue(nftNames[nftIndex], ((dtxArray[nftIndex] + SEP) + nftDescriptions[nftIndex]), 1, 0, false)
233+ $Tuple2(issue, calculateAssetId(issue))
234+ }
208235
209236
210237 func stakeUnstakeAcresInternal (amt,address) = {
242269 fraction(totalFundsUsd, MULT8, issuedAmount)
243270 }
244271
245-
246-let keyLastAcresSellTime = "lastAcresSellTime"
247-
248-let keyLastLimitLeft = "lastLimitLeft"
249272
250273 func getSwapLimitAcres () = {
251274 let wlgUsd = assetBalance(wlgContract, usdtAssetId)
299322 if ((arbReleaseTime > lastBlock.timestamp))
300323 then throw(("You traded some WLGOLD, cannot unstake until " + toString(arbReleaseTime)))
301324 else {
302- let $t047564833 = stakeUnstakeAcresInternal(-(amount), address)
303- let actions = $t047564833._1
304- let wlgClaimedAmount = $t047564833._2
325+ let $t053235400 = stakeUnstakeAcresInternal(-(amount), address)
326+ let actions = $t053235400._1
327+ let wlgClaimedAmount = $t053235400._2
305328 $Tuple2(((actions :+ ScriptTransfer(i.caller, amount, acresAssetId)) ++ prologActions), wlgClaimedAmount)
306329 }
307330 }
324347 else (value(pmt.assetId) != acresAssetId))
325348 then throw("ACRES payments only!")
326349 else {
327- let $t052845357 = stakeUnstakeAcresInternal(amt, address)
328- let actions = $t052845357._1
329- let wlgClaimedAmount = $t052845357._2
350+ let $t058515924 = stakeUnstakeAcresInternal(amt, address)
351+ let actions = $t058515924._1
352+ let wlgClaimedAmount = $t058515924._2
330353 $Tuple2((actions ++ prologActions), wlgClaimedAmount)
331354 }
332355 }
390413 then throw((("Min payment should be " + fixedPoint(MULT7, 8)) + " ACRES"))
391414 else {
392415 let addr = toString(i.caller)
393- let $t072147262 = getSwapLimitAcres()
394- let limitAction = $t072147262._1
395- let maxUsdt = $t072147262._2
416+ let $t077817829 = getSwapLimitAcres()
417+ let limitAction = $t077817829._1
418+ let maxUsdt = $t077817829._2
396419 let maxAcres = (maxUsdt * USDT2ACRES_MULTIPLIER)
397420 if ((acresAmount > maxAcres))
398421 then throw((("You can sell max " + fixedPoint(maxAcres, 8)) + " ACRES"))
408431
409432 @Callable(i)
410433 func sellAcresREADONLY (address,acresAmount) = {
411- let $t077587806 = getSwapLimitAcres()
412- let limitAction = $t077587806._1
413- let maxUsdt = $t077587806._2
434+ let $t083258373 = getSwapLimitAcres()
435+ let limitAction = $t083258373._1
436+ let maxUsdt = $t083258373._2
414437 let usdtAmount = ((acresAmount / USDT2ACRES_MULTIPLIER) / 2)
415438 $Tuple2(nil, [usdtAmount, MULT7, (maxUsdt * USDT2ACRES_MULTIPLIER), 0])
416439 }
462485 let req = invoke(oldAcresAddress, "requestAcresCallback", [(((rr._1 + rr._2) + rr._3) + rr._4)], nil)
463486 if ((req == req))
464487 then {
465- let issue = Issue("FPOWER10", "FarmingPower +10% NFT for WavesLands game", 1, 0, false)
466- $Tuple5(rr._1, rr._2, rr._3, rr._4, [issue, ScriptTransfer(i.caller, 1, calculateAssetId(issue))])
488+ let $t01024510310 = issueNFTinternal(IdxDtx3PercConversion)
489+ let issue = $t01024510310._1
490+ let nftAssetId = $t01024510310._2
491+ $Tuple5(rr._1, rr._2, rr._3, rr._4, [issue, ScriptTransfer(i.caller, 1, nftAssetId)])
467492 }
468493 else throw("Strict value is not equal to itself.")
469494 }
535560 }
536561
537562
563+
564+@Callable(i)
565+func issueNFT (forAddress,nftIndex) = if ((i.caller != wlgContract))
566+ then throw("Permission denied")
567+ else {
568+ let $t01276912821 = issueNFTinternal(nftIndex)
569+ let issue = $t01276912821._1
570+ let nftAssetId = $t01276912821._2
571+ $Tuple2([issue, ScriptTransfer(addressFromStringValue(forAddress), 1, nftAssetId)], nftAssetId)
572+ }
573+
574+
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let SEP = "__"
55
66 let MULT6 = 1000000
77
88 let MULT7 = 10000000
99
1010 let MULT8 = 100000000
1111
1212 let DAY_MILLIS = 86400000
1313
1414 let USDT2ACRES_MULTIPLIER = 10
1515
1616 let ONE_PERCENT_DIVISOR = 100
1717
1818 let chain = take(drop(this.bytes, 1), 1)
1919
2020 let usdtAssetId = match chain {
2121 case _ =>
2222 if ((base58'2W' == $match0))
2323 then base58'9wc3LXNA4TEBsXyKtoLE9mrbDD7WMHXvXrCjZvabLAsi'
2424 else if ((base58'2T' == $match0))
2525 then base58'6mWwf9mZBjVgkC54idpyaZLQfAosD914wT8fGf2iiY63'
2626 else throw("Unknown chain")
2727 }
2828
2929 let defaultRest2AddressStr = match chain {
3030 case _ =>
3131 if ((base58'2W' == $match0))
3232 then "3PFwYta8biEz31zpeFe5DJK8wE5trSpQVF8"
3333 else if ((base58'2T' == $match0))
3434 then "3N7UuYar6264P58FBhVWKPQAh4Yua2hgngv"
3535 else throw("Unknown chain")
3636 }
3737
3838 let arbitrageDelay = match chain {
3939 case _ =>
4040 if ((base58'2W' == $match0))
4141 then DAY_MILLIS
4242 else if ((base58'2T' == $match0))
4343 then 60000
4444 else throw("Unknown chain")
4545 }
4646
4747 let oldStakingContractStr = match chain {
4848 case _ =>
4949 if ((base58'2W' == $match0))
5050 then "3PLncXtS1U83D6cQbFD3H8rBHPLgzxSFKZ1"
5151 else if ((base58'2T' == $match0))
5252 then "3NDCyBG5q85JuaRiigUeEtainyjCQT3XpZm"
5353 else throw("Unknown chain")
5454 }
5555
5656 func getStringOrFail (address,key) = valueOrErrorMessage(getString(address, key), makeString(["mandatory ", toString(address), ".", key, " is not defined"], ""))
5757
5858
5959 let IdxCfgAcres2Dapp = 1
6060
6161 let IdxCfgWlgDapp = 2
6262
6363 let IdxCfgInvestFundDapp = 5
6464
6565 func keyRestCfg () = "%s__restConfig"
6666
6767
6868 func keyRest2Address () = "%s__rest2Addr"
6969
7070
7171 func readRestCfgOrFail (rest) = split_4C(getStringOrFail(rest, keyRestCfg()), SEP)
7272
7373
7474 func getContractAddressOrFail (rest2Cfg,idx) = valueOrErrorMessage(addressFromString(rest2Cfg[idx]), ("Rest cfg doesn't contain address at index " + toString(idx)))
7575
7676
7777 let rest2Contract = addressFromStringValue(valueOrElse(getString(this, keyRest2Address()), defaultRest2AddressStr))
7878
7979 let rest2Cfg = readRestCfgOrFail(rest2Contract)
8080
8181 let acres2Contract = getContractAddressOrFail(rest2Cfg, IdxCfgAcres2Dapp)
8282
8383 let wlgContract = getContractAddressOrFail(rest2Cfg, IdxCfgWlgDapp)
8484
8585 let investFundContract = getContractAddressOrFail(rest2Cfg, IdxCfgInvestFundDapp)
8686
8787 let oldAcresContractKey = "oldAcresContract"
8888
8989 func keyBlocked () = "contractsBlocked"
9090
9191
9292 func keyLastTxIdByUser (addr) = ("lastTxIdByUser_" + addr)
9393
9494
9595 let acresIssuedAmountKey = "acresIssuedAmount"
9696
9797 let acresAssetIdKey = "acresAssetId"
9898
9999 let acresAssetId = valueOrErrorMessage(getBinary(acres2Contract, acresAssetIdKey), "ACRES is not issued yet")
100100
101101 func keyAcresStakedTimeByUser (addr) = ("acresStakedTimeByUser_" + addr)
102102
103103
104104 func keyStakedLandsByOwner (ownerAddr) = ("stakedLandsByOwner_" + ownerAddr)
105105
106106
107107 func keyStakedDuckByOwner (ownerAddr) = ("stakedDuckByOwner_" + ownerAddr)
108108
109109
110110 func asInt (v) = match v {
111111 case n: Int =>
112112 n
113113 case _ =>
114114 throw("fail to cast into Int")
115115 }
116116
117117
118118 func asTuple5Ints (val) = match val {
119119 case t: (Int, Int, Int, Int, Int) =>
120120 t
121121 case _ =>
122122 throw("fail to cast into (Int, Int, Int, Int, Int)")
123123 }
124124
125125
126126 func asTuple4Ints (val) = match val {
127127 case t: (Int, Int, Int, Int) =>
128128 t
129129 case _ =>
130130 throw("fail to cast into (Int, Int, Int, Int)")
131131 }
132132
133133
134134 func asTuple3Ints (val) = match val {
135135 case t: (Int, Int, Int) =>
136136 t
137137 case _ =>
138138 throw("fail to cast into (Int, Int, Int)")
139139 }
140140
141141
142142 func asTuple2Ints (val) = match val {
143143 case t: (Int, Int) =>
144144 t
145145 case _ =>
146146 throw("fail to cast into (Int, Int)")
147147 }
148148
149149
150150 func fixedPoint (val,decimals) = {
151151 let tenPow = pow(10, 0, decimals, 0, 0, DOWN)
152152 let lowPart = toString((val % tenPow))
153153 let zeroes = drop(toString(tenPow), (1 + size(lowPart)))
154154 (((toString((val / tenPow)) + ".") + zeroes) + lowPart)
155155 }
156156
157157
158158 let M8_ = 100000000
159159
160160 let wlgIssuedAmtKey = "wlg_issuedAmount"
161161
162162 let zbIssuedAmtKey = "zbill_issuedAmount"
163163
164164 func keyAcresStakedAmtByUser (addr) = ("acresStakedAmountByUser_" + addr)
165165
166166
167167 func keyFarmingPowerByUser (addr) = ("farmingPowerByUser_" + addr)
168168
169169
170170 let acresStakdTotalKey = "acresStakedAmountTotal"
171171
172172 let totalFarmingPowerKey = "totalFarmingPower"
173173
174+let IdxDtx3PercConversion = 0
175+
174176 let levelAcres = [0, 10, 20, 40, 80, 150, 250, 400, 700, 1000]
175177
176178 func getLevelByAcres (acres) = {
177179 let acr = ((acres + 99999999) / M8_)
178180 func checker (acc,item) = if ((item >= acr))
179181 then acc
180182 else (acc + 1)
181183
182184 let $l = levelAcres
183185 let $s = size($l)
184186 let $acc0 = 0
185187 func $f0_1 ($a,$i) = if (($i >= $s))
186188 then $a
187189 else checker($a, $l[$i])
188190
189191 func $f0_2 ($a,$i) = if (($i >= $s))
190192 then $a
191193 else throw("List size exceeds 10")
192194
193195 $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)
194196 }
195197
196198
197199 func getFarmingPowerByAcres (acres) = ((acres * 20) * (getLevelByAcres(acres) + 4))
198200
199201
200202 func keyLastWlgTradeTimeByUser (addr) = ("lastArbTimeUser_" + addr)
201203
202204
205+let keyLastAcresSellTime = "lastAcresSellTime"
206+
207+let keyLastLimitLeft = "lastLimitLeft"
208+
209+let dtxArray = match chain {
210+ case _ =>
211+ if ((base58'2W' == $match0))
212+ then nil
213+ else if ((base58'2T' == $match0))
214+ then nil
215+ else throw("Unknown chain")
216+}
217+
218+let nftDescriptions = ["FarmingPower +3% NFT for WavesLands loyal players", "FarmingPower +1% NFT"]
219+
220+let nftNames = ["FPOWER+3%", "FPOWER1"]
221+
203222 func prolog (i) = if (if ((i.originCaller != rest2Contract))
204223 then valueOrElse(getBoolean(keyBlocked()), false)
205224 else false)
206225 then throw("Contracts are under maintenance")
207226 else [StringEntry(keyLastTxIdByUser(toString(i.originCaller)), toBase58String(i.transactionId))]
227+
228+
229+func issueNFTinternal (nftIndex) = if ((nftIndex >= size(dtxArray)))
230+ then throw("nftIndex out of bounds")
231+ else {
232+ let issue = Issue(nftNames[nftIndex], ((dtxArray[nftIndex] + SEP) + nftDescriptions[nftIndex]), 1, 0, false)
233+ $Tuple2(issue, calculateAssetId(issue))
234+ }
208235
209236
210237 func stakeUnstakeAcresInternal (amt,address) = {
211238 let wlgResult = invoke(wlgContract, "onStakeUnstakeLand", [address], nil)
212239 if ((wlgResult == wlgResult))
213240 then {
214241 let now = lastBlock.timestamp
215242 let timeKey = keyAcresStakedTimeByUser(address)
216243 let amountKey = keyAcresStakedAmtByUser(address)
217244 let oldAcresAmount = valueOrElse(getInteger(amountKey), 0)
218245 if (if ((0 > amt))
219246 then (0 > (oldAcresAmount + amt))
220247 else false)
221248 then throw(((("You have only " + fixedPoint(oldAcresAmount, 8)) + " ACRES staked, tried to unstake ") + fixedPoint(-(amt), 8)))
222249 else {
223250 let newAcresAmount = (oldAcresAmount + amt)
224251 let oldTotal = valueOrElse(getInteger(acresStakdTotalKey), 0)
225252 let userFpKey = keyFarmingPowerByUser(address)
226253 let oldFp = valueOrElse(getInteger(userFpKey), 0)
227254 let newFp = getFarmingPowerByAcres(newAcresAmount)
228255 let oldTotalFp = valueOrElse(getInteger(totalFarmingPowerKey), 0)
229256 $Tuple2([IntegerEntry(timeKey, lastBlock.timestamp), IntegerEntry(amountKey, newAcresAmount), IntegerEntry(acresStakdTotalKey, (oldTotal + amt)), IntegerEntry(userFpKey, newFp), IntegerEntry(totalFarmingPowerKey, ((oldTotalFp - oldFp) + newFp))], wlgResult)
230257 }
231258 }
232259 else throw("Strict value is not equal to itself.")
233260 }
234261
235262
236263 func getWlgPrice (usdtBalanceCorrection) = {
237264 let issuedAmount = valueOrErrorMessage(getInteger(wlgContract, wlgIssuedAmtKey), "WLGOLD is not issued yet")
238265 let wlgUsd = assetBalance(wlgContract, usdtAssetId)
239266 let acres2Usd = (assetBalance(acres2Contract, usdtAssetId) - usdtBalanceCorrection)
240267 let investFundTotal = (assetBalance(investFundContract, usdtAssetId) + valueOrElse(getInteger(investFundContract, zbIssuedAmtKey), 0))
241268 let totalFundsUsd = ((acres2Usd + wlgUsd) + investFundTotal)
242269 fraction(totalFundsUsd, MULT8, issuedAmount)
243270 }
244271
245-
246-let keyLastAcresSellTime = "lastAcresSellTime"
247-
248-let keyLastLimitLeft = "lastLimitLeft"
249272
250273 func getSwapLimitAcres () = {
251274 let wlgUsd = assetBalance(wlgContract, usdtAssetId)
252275 let acres2Usd = assetBalance(this, usdtAssetId)
253276 let investFundTotal = (assetBalance(investFundContract, usdtAssetId) + valueOrElse(getInteger(investFundContract, zbIssuedAmtKey), 0))
254277 let defaultLimit = (((acres2Usd + wlgUsd) + investFundTotal) / ONE_PERCENT_DIVISOR)
255278 let lastLimitLeft = valueOrElse(getInteger(keyLastLimitLeft), defaultLimit)
256279 let lastTime = valueOrElse(getInteger(keyLastAcresSellTime), 0)
257280 let now = lastBlock.timestamp
258281 let currentLimit = (lastLimitLeft + fraction(defaultLimit, (now - lastTime), DAY_MILLIS))
259282 let limitLeftUsdt = min([currentLimit, defaultLimit])
260283 $Tuple2(IntegerEntry(keyLastAcresSellTime, now), limitLeftUsdt)
261284 }
262285
263286
264287 @Callable(i)
265288 func saveLastTx () = if (!(containsElement([wlgContract], i.caller)))
266289 then throw("Access denied")
267290 else $Tuple2(prolog(i), 42)
268291
269292
270293
271294 @Callable(i)
272295 func constructorV1 (rest2Addr,oldAcrContract) = if ((i.caller != this))
273296 then throw("Permission denied")
274297 else {
275298 let oldAcrContAddr = addressFromStringValue(oldAcrContract)
276299 [IntegerEntry(acresIssuedAmountKey, getIntegerValue(oldAcrContAddr, acresIssuedAmountKey)), BinaryEntry(acresAssetIdKey, getBinaryValue(oldAcrContAddr, acresAssetIdKey)), StringEntry(keyRest2Address(), rest2Addr), StringEntry(oldAcresContractKey, oldAcrContract)]
277300 }
278301
279302
280303
281304 @Callable(i)
282305 func setBlocked (isBlocked) = if ((i.caller != this))
283306 then throw("permission denied")
284307 else [BooleanEntry(keyBlocked(), isBlocked)]
285308
286309
287310
288311 @Callable(i)
289312 func unstakeAcres (amount) = {
290313 let prologActions = prolog(i)
291314 if ((0 >= amount))
292315 then throw("Amount should be positive")
293316 else {
294317 let address = toString(i.caller)
295318 if ((size(i.payments) != 0))
296319 then throw("No payments required")
297320 else {
298321 let arbReleaseTime = (valueOrElse(getInteger(wlgContract, keyLastWlgTradeTimeByUser(address)), 0) + arbitrageDelay)
299322 if ((arbReleaseTime > lastBlock.timestamp))
300323 then throw(("You traded some WLGOLD, cannot unstake until " + toString(arbReleaseTime)))
301324 else {
302- let $t047564833 = stakeUnstakeAcresInternal(-(amount), address)
303- let actions = $t047564833._1
304- let wlgClaimedAmount = $t047564833._2
325+ let $t053235400 = stakeUnstakeAcresInternal(-(amount), address)
326+ let actions = $t053235400._1
327+ let wlgClaimedAmount = $t053235400._2
305328 $Tuple2(((actions :+ ScriptTransfer(i.caller, amount, acresAssetId)) ++ prologActions), wlgClaimedAmount)
306329 }
307330 }
308331 }
309332 }
310333
311334
312335
313336 @Callable(i)
314337 func stakeAcres () = {
315338 let prologActions = prolog(i)
316339 let address = toString(i.caller)
317340 if ((size(i.payments) != 1))
318341 then throw("exactly 1 payment must be attached")
319342 else {
320343 let pmt = i.payments[0]
321344 let amt = pmt.amount
322345 if (if (!(isDefined(pmt.assetId)))
323346 then true
324347 else (value(pmt.assetId) != acresAssetId))
325348 then throw("ACRES payments only!")
326349 else {
327- let $t052845357 = stakeUnstakeAcresInternal(amt, address)
328- let actions = $t052845357._1
329- let wlgClaimedAmount = $t052845357._2
350+ let $t058515924 = stakeUnstakeAcresInternal(amt, address)
351+ let actions = $t058515924._1
352+ let wlgClaimedAmount = $t058515924._2
330353 $Tuple2((actions ++ prologActions), wlgClaimedAmount)
331354 }
332355 }
333356 }
334357
335358
336359
337360 @Callable(i)
338361 func buyAcres () = {
339362 let prologActions = prolog(i)
340363 if ((size(i.payments) != 1))
341364 then throw("exactly 1 payment must be attached")
342365 else {
343366 let pmt = i.payments[0]
344367 let usdtAmount = pmt.amount
345368 if (if (!(isDefined(pmt.assetId)))
346369 then true
347370 else (value(pmt.assetId) != usdtAssetId))
348371 then throw("USDT payments only!")
349372 else if ((MULT6 > usdtAmount))
350373 then throw((("Min payment should be " + fixedPoint(MULT6, 6)) + " USDT"))
351374 else {
352375 let acresAmount = (usdtAmount * USDT2ACRES_MULTIPLIER)
353376 let wlgAmount = fraction(usdtAmount, MULT8, getWlgPrice(usdtAmount))
354377 let oldAcresAddress = addressFromStringValue(getStringValue(oldAcresContractKey))
355378 let req = invoke(oldAcresAddress, "requestAcresCallback", [acresAmount], nil)
356379 if ((req == req))
357380 then {
358381 let wlgRemain = asInt(invoke(wlgContract, "burnWlgold", [wlgAmount], nil))
359382 $Tuple2(([ScriptTransfer(i.caller, acresAmount, acresAssetId)] ++ prologActions), wlgRemain)
360383 }
361384 else throw("Strict value is not equal to itself.")
362385 }
363386 }
364387 }
365388
366389
367390
368391 @Callable(i)
369392 func buyAcresREADONLY (usdtAmount) = {
370393 let acresAmount = (usdtAmount * USDT2ACRES_MULTIPLIER)
371394 let wlgToBurn = fraction(usdtAmount, MULT8, getWlgPrice(usdtAmount))
372395 $Tuple2(nil, [acresAmount, MULT6, acresAmount, wlgToBurn])
373396 }
374397
375398
376399
377400 @Callable(i)
378401 func sellAcres () = {
379402 let prologActions = prolog(i)
380403 if ((size(i.payments) != 1))
381404 then throw("exactly 1 payment must be attached")
382405 else {
383406 let pmt = i.payments[0]
384407 let acresAmount = pmt.amount
385408 if (if (!(isDefined(pmt.assetId)))
386409 then true
387410 else (value(pmt.assetId) != acresAssetId))
388411 then throw("ACRES payments only!")
389412 else if ((MULT7 > acresAmount))
390413 then throw((("Min payment should be " + fixedPoint(MULT7, 8)) + " ACRES"))
391414 else {
392415 let addr = toString(i.caller)
393- let $t072147262 = getSwapLimitAcres()
394- let limitAction = $t072147262._1
395- let maxUsdt = $t072147262._2
416+ let $t077817829 = getSwapLimitAcres()
417+ let limitAction = $t077817829._1
418+ let maxUsdt = $t077817829._2
396419 let maxAcres = (maxUsdt * USDT2ACRES_MULTIPLIER)
397420 if ((acresAmount > maxAcres))
398421 then throw((("You can sell max " + fixedPoint(maxAcres, 8)) + " ACRES"))
399422 else {
400423 let usdtAmount = ((acresAmount / USDT2ACRES_MULTIPLIER) / 2)
401424 $Tuple2(([limitAction, IntegerEntry(keyLastLimitLeft, (maxUsdt - usdtAmount)), ScriptTransfer(i.caller, usdtAmount, usdtAssetId)] ++ prologActions), usdtAmount)
402425 }
403426 }
404427 }
405428 }
406429
407430
408431
409432 @Callable(i)
410433 func sellAcresREADONLY (address,acresAmount) = {
411- let $t077587806 = getSwapLimitAcres()
412- let limitAction = $t077587806._1
413- let maxUsdt = $t077587806._2
434+ let $t083258373 = getSwapLimitAcres()
435+ let limitAction = $t083258373._1
436+ let maxUsdt = $t083258373._2
414437 let usdtAmount = ((acresAmount / USDT2ACRES_MULTIPLIER) / 2)
415438 $Tuple2(nil, [usdtAmount, MULT7, (maxUsdt * USDT2ACRES_MULTIPLIER), 0])
416439 }
417440
418441
419442
420443 @Callable(i)
421444 func convertOldStakes () = if ((i.caller != this))
422445 then throw("Temporarily disabled")
423446 else {
424447 let address = toString(i.caller)
425448 if ((size(i.payments) != 0))
426449 then throw("No payments required")
427450 else {
428451 let oldAcresAddress = addressFromStringValue(getStringValue(oldAcresContractKey))
429452 let amount = valueOrElse(getInteger(oldAcresAddress, keyAcresStakedAmtByUser(address)), 0)
430453 let gotAcres0 = if ((amount > 0))
431454 then asTuple2Ints(invoke(oldAcresAddress, "unstakeAcresCallback", [amount, address], nil))
432455 else $Tuple2(0, 0)
433456 let oldStakingAddress = addressFromStringValue(oldStakingContractStr)
434457 let landsStr = getString(oldStakingAddress, keyStakedLandsByOwner(address))
435458 let landsResult = if (isDefined(landsStr))
436459 then {
437460 let lands = split_51C(value(landsStr), "_")
438461 func oneLand (acc,landAssetId) = if ((landAssetId == ""))
439462 then throw("landAssetId is required")
440463 else {
441464 let r = asTuple5Ints(invoke(oldStakingAddress, "unstakeLandCallback", [landAssetId, address], nil))
442465 $Tuple4((acc._1 + r._1), (acc._2 + r._2), (acc._3 + r._3), (acc._4 + r._4))
443466 }
444467
445468 let rr = {
446469 let $l = lands
447470 let $s = size($l)
448471 let $acc0 = $Tuple4(0, 0, 0, 0)
449472 func $f0_1 ($a,$i) = if (($i >= $s))
450473 then $a
451474 else oneLand($a, $l[$i])
452475
453476 func $f0_2 ($a,$i) = if (($i >= $s))
454477 then $a
455478 else throw("List size exceeds 100")
456479
457480 $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)
458481 }
459482 let finalize = invoke(oldStakingAddress, "unstakeLandsFinalizeCallback", [address], nil)
460483 if ((finalize == finalize))
461484 then {
462485 let req = invoke(oldAcresAddress, "requestAcresCallback", [(((rr._1 + rr._2) + rr._3) + rr._4)], nil)
463486 if ((req == req))
464487 then {
465- let issue = Issue("FPOWER10", "FarmingPower +10% NFT for WavesLands game", 1, 0, false)
466- $Tuple5(rr._1, rr._2, rr._3, rr._4, [issue, ScriptTransfer(i.caller, 1, calculateAssetId(issue))])
488+ let $t01024510310 = issueNFTinternal(IdxDtx3PercConversion)
489+ let issue = $t01024510310._1
490+ let nftAssetId = $t01024510310._2
491+ $Tuple5(rr._1, rr._2, rr._3, rr._4, [issue, ScriptTransfer(i.caller, 1, nftAssetId)])
467492 }
468493 else throw("Strict value is not equal to itself.")
469494 }
470495 else throw("Strict value is not equal to itself.")
471496 }
472497 else $Tuple5(0, 0, 0, 0, nil)
473498 let duckAssetId = valueOrElse(getString(oldStakingAddress, keyStakedDuckByOwner(address)), "")
474499 let duckResult = if ((duckAssetId != ""))
475500 then asTuple3Ints(invoke(oldStakingAddress, "unstakeDuckCallback", [duckAssetId, address], nil))
476501 else $Tuple3(0, 0, 0)
477502 let x = stakeUnstakeAcresInternal((((((((gotAcres0._1 + landsResult._1) + landsResult._2) + landsResult._3) + landsResult._4) + duckResult._1) + duckResult._2) + duckResult._3), address)
478503 $Tuple2((landsResult._5 ++ x._1), x._2)
479504 }
480505 }
481506
482507
483508
484509 @Callable(i)
485510 func unstakeLandsREADONLY (address) = {
486511 let oldStakingAddress = addressFromStringValue(oldStakingContractStr)
487512 let landsStr = getString(oldStakingAddress, keyStakedLandsByOwner(address))
488513 let landsResult = if (isDefined(landsStr))
489514 then {
490515 let lands = split_51C(value(landsStr), "_")
491516 func oneLand (acc,landAssetId) = if ((landAssetId == ""))
492517 then throw("landAssetId is required")
493518 else {
494519 let r = asTuple4Ints(invoke(oldStakingAddress, "unstakeLandREADONLY", [landAssetId, address], nil))
495520 $Tuple4((acc._1 + r._1), (acc._2 + r._2), (acc._3 + r._3), (acc._4 + r._4))
496521 }
497522
498523 let $l = lands
499524 let $s = size($l)
500525 let $acc0 = $Tuple4(0, 0, 0, 0)
501526 func $f0_1 ($a,$i) = if (($i >= $s))
502527 then $a
503528 else oneLand($a, $l[$i])
504529
505530 func $f0_2 ($a,$i) = if (($i >= $s))
506531 then $a
507532 else throw("List size exceeds 100")
508533
509534 $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)
510535 }
511536 else $Tuple4(0, 0, 0, 0)
512537 $Tuple2(nil, landsResult)
513538 }
514539
515540
516541
517542 @Callable(i)
518543 func stakeAcresCallback (addr) = if ((i.caller != addressFromStringValue(oldStakingContractStr)))
519544 then throw("Permission denied")
520545 else stakeUnstakeAcresInternal(i.payments[0].amount, addr)
521546
522547
523548
524549 @Callable(i)
525550 func simulateStakeAcresREADONLY (address,addedAmount) = {
526551 let amountKey = keyAcresStakedAmtByUser(address)
527552 let newAcresAmount = (valueOrElse(getInteger(amountKey), 0) + addedAmount)
528553 let oldTotal = valueOrElse(getInteger(acresStakdTotalKey), 0)
529554 let userFpKey = keyFarmingPowerByUser(address)
530555 let oldFp = valueOrElse(getInteger(userFpKey), 0)
531556 let newFp = getFarmingPowerByAcres(newAcresAmount)
532557 let oldTotalFp = valueOrElse(getInteger(totalFarmingPowerKey), 0)
533558 let newTotalFp = ((oldTotalFp - oldFp) + newFp)
534559 $Tuple2(nil, [oldFp, newFp, oldTotalFp, newTotalFp])
535560 }
536561
537562
563+
564+@Callable(i)
565+func issueNFT (forAddress,nftIndex) = if ((i.caller != wlgContract))
566+ then throw("Permission denied")
567+ else {
568+ let $t01276912821 = issueNFTinternal(nftIndex)
569+ let issue = $t01276912821._1
570+ let nftAssetId = $t01276912821._2
571+ $Tuple2([issue, ScriptTransfer(addressFromStringValue(forAddress), 1, nftAssetId)], nftAssetId)
572+ }
573+
574+

github/deemru/w8io/026f985 
62.67 ms