tx · ANM5dtb6xGv6j2n8RGbD2oDR7gKZQzaanCvRvkpuMS2G 3PAkmJniMgnnAej5pYf2jFYkCbZow5pt9tr: -0.00700000 Waves 2024.05.21 08:44 [4181425] smart account 3PAkmJniMgnnAej5pYf2jFYkCbZow5pt9tr > SELF 0.00000000 Waves
{ "type": 13, "id": "ANM5dtb6xGv6j2n8RGbD2oDR7gKZQzaanCvRvkpuMS2G", "fee": 700000, "feeAssetId": null, "timestamp": 1716270294764, "version": 2, "chainId": 87, "sender": "3PAkmJniMgnnAej5pYf2jFYkCbZow5pt9tr", "senderPublicKey": "A5AvSRrbVauQKBhPtuWTLTQdE5ka4nVCSDaVANpFur26", "proofs": [ "54Nviam8y2oVQm8pTjjcZmePzrdA9cRyjP8LUHHRCVuv1eT2ZPVpqvWUgLkw7JgLi1WxWe2HoCwQmnNwMpHpT79V" ], "script": "base64:BgIbCAISABIECgIBBBIAEgASABIECgIEARIDCgEEJwENdHJ5R2V0SW50ZWdlcgIHYWRkcmVzcwNrZXkEByRtYXRjaDAJAJoIAgUHYWRkcmVzcwUDa2V5AwkAAQIFByRtYXRjaDACA0ludAQBYgUHJG1hdGNoMAUBYgAAAAJkNgDAhD0AAmQ4AIDC1y8ABHd4SWQBIJMBHKupx24lV85mnnG2vapr+DzoWAsq7tmgTrs83BSxAAV4dG5JZAEgtiYpwwT1zlORpA5LdSQvZIxRsfrfr1QpvUjSHSqyqtEAB2ludm9rZXIJAQdBZGRyZXNzAQEaAVcYiRskbS/iRKWyuS7QZCNQLinfcjDaMlkADHN3b3BXQVZFU3h0bgkBB0FkZHJlc3MBARoBV6ugnY67/HaJPzVO8b2xSyoDl1hFH8eK8wALdW5sb2NrQmxvY2sJAGgCAB4AoAsACmhlaXJQdWJLZXkBIBoVri0PIi/W6HMN/BFH8ge2Duo03s/elirY3UgUGn4QAAx1bmxvY2tCbG9jazIJAGgCAFoAoAsAElB1enpsZU1hc3RlclB1YktleQEgOzVNbj+fvvhUnJZEB4BWqy/iE2BFxHvyPxdD9EIFJl0ADGtleUFjdGl2YXRlZAIVQWN0aXZhdGVkIGJsb2NraGVpZ2h0ABNrZXlXYXZlbGV0c1JlY2VpdmVkAiB0b3RhbCBXQVZFUyByZWNlaXZlZCBpbiB3YXZlbGV0cwASa2V5V2F2ZWxldHNQYWlkT3V0AiB0b3RhbCBXQVZFUyBwYWlkIG91dCBpbiB3YXZlbGV0cwAGa2V5Uk9JAhBST0kgYmFzaXMgcG9pbnRzAA5rTGVhc2luZ0Ftb3VudAIObGVhc2luZ19hbW91bnQACmtMZWFzaW5nSWQCCmxlYXNpbmdfaWQACGtEaXNhYmxlAghkaXNhYmxlZAAMcHJvamVjdE93bmVyARoBV44d5lHKOCPOw5HDxFaL1YPTb4hW/zbdCwAPd2hpcmxwb29sUG9vbElkARoBVwlIVKiYtf/MSkbbEv1LyZMZRjdDmIfXzQAJYmJiUG9vbElkARoBV1Luk1YUTX4HjNKFD+Z+XFc3fhyf7zyCHQAOdm9sYXRpbGVQb29sSWQBGgFXhEA2wkVqc7O/ZMXSQRm+Xtgl9YL6D7miABJidXJueHRuV2hpcmxQb29sSWQBGgFXGCUUEzHiFPCLE3aJSZgT5fcL7rnq7WazAAtwb29sYm9vc3RTQwEaAVdJth4Q36ANT9jV0A+j44S32V46KbMRqawADnJld2FyZHNBZGRyZXNzCQEHQWRkcmVzcwEBGgFXL67xcGkDY58tIGVFIdRxHf4xnfL4rKNiAAl3aGlybHBvb2wBIFnjjdzCtSO6ShTcxNCvFAnmZOYEviUGCyZO5VBtl1nHAA93aGlybHBvb2xTdHJpbmcJANgEAQEgWeON3MK1I7pKFNzE0K8UCeZk5gS+JQYLJk7lUG2XWccABXdhdmVzAQQTq9kzAQx0b2tlbnNJblBvb2wCBnBvb2xJZAhhc3NldFN0cgkBDXRyeUdldEludGVnZXICCQEHQWRkcmVzcwEFBnBvb2xJZAkArAICCQCsAgICB2dsb2JhbF8FCGFzc2V0U3RyAghfYmFsYW5jZQAQd2F2ZXNJbldoaXJscG9vbAkBDHRva2Vuc0luUG9vbAIFD3doaXJscG9vbFBvb2xJZAkA2AQBBQV3YXZlcwAQd2hpcmxJbldoaXJscG9vbAkBDHRva2Vuc0luUG9vbAIFD3doaXJscG9vbFBvb2xJZAUPd2hpcmxwb29sU3RyaW5nAAp3aGlybEluQkJCCQEMdG9rZW5zSW5Qb29sAgUJYmJiUG9vbElkBQ93aGlybHBvb2xTdHJpbmcAD3doaXJsSW5Wb2xhdGlsZQkBDHRva2Vuc0luUG9vbAIFDnZvbGF0aWxlUG9vbElkBQ93aGlybHBvb2xTdHJpbmcAE3doaXJsSW5CdXJueHRuV2hpcmwJAQx0b2tlbnNJblBvb2wCBRJidXJueHRuV2hpcmxQb29sSWQFD3doaXJscG9vbFN0cmluZwAKdG90YWxXaGlybAkAZAIJAGQCCQBkAgUQd2hpcmxJbldoaXJscG9vbAUKd2hpcmxJbkJCQgUPd2hpcmxJblZvbGF0aWxlBRN3aGlybEluQnVybnh0bldoaXJsAA53aGlybHBvb2xXYXZlcwkAawMFAmQ4CQBpAgkAaAIFEHdhdmVzSW5XaGlybHBvb2wJAQ10cnlHZXRJbnRlZ2VyAgkBB0FkZHJlc3MBBQ93aGlybHBvb2xQb29sSWQJAKwCAgkArAICAgdzdGF0aWNfCQDYBAEFCXdoaXJscG9vbAIHX3dlaWdodADoBwUQd2hpcmxJbldoaXJscG9vbAAPd2hpcmxwb29sU3VwcGx5BAckbWF0Y2gwCQDsBwEFCXdoaXJscG9vbAMJAAECBQckbWF0Y2gwAgVBc3NldAQFYXNzZXQFByRtYXRjaDAIBQVhc3NldAhxdWFudGl0eQkAAgECEENhbid0IGZpbmQgYXNzZXQBBWJvb3N0AgZwb29sSWQGYW1vdW50CQD8BwQJAQdBZGRyZXNzAQULcG9vbGJvb3N0U0MCC2FkZEJvb3N0aW5nCQDMCAIFBnBvb2xJZAkAzAgCAAcFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgUEdW5pdAUGYW1vdW50BQNuaWwBBnN3YXBXWAMHYXNzZXRJbghhc3NldE91dAhhbW91bnRJbgkA/AcECQEHQWRkcmVzcwEBGgFXLio1NbENt/F5PuG3RtCedFJNezHQg64GAgRzd2FwCQDMCAIAAQkAzAgCCQDYBAEFCGFzc2V0T3V0CQDMCAIJAKUIAQUEdGhpcwUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCBQdhc3NldEluBQhhbW91bnRJbgUDbmlsBwFpAQpwcmljZVN0YXRzAAkAzAgCCQEMSW50ZWdlckVudHJ5AgIgV0hJUkxQT09ML1dBVkVTIG1pZCBtYXJrZXQgcHJpY2UFDndoaXJscG9vbFdhdmVzCQDMCAIJAQxJbnRlZ2VyRW50cnkCAhZXSElSTFBPT0wgdG90YWwgc3VwcGx5CQBpAgUPd2hpcmxwb29sU3VwcGx5BQJkOAkAzAgCCQEMSW50ZWdlckVudHJ5AgIUdG90YWwgV0FWRVMgcmVjZWl2ZWQJAGkCCQENdHJ5R2V0SW50ZWdlcgIFBHRoaXMFE2tleVdhdmVsZXRzUmVjZWl2ZWQFAmQ4CQDMCAIJAQxJbnRlZ2VyRW50cnkCAh10b3RhbCBXQVZFUyBwYWlkIG91dCBpbiBXQVZFUwkAaQIJAQ10cnlHZXRJbnRlZ2VyAgUEdGhpcwUSa2V5V2F2ZWxldHNQYWlkT3V0BQJkOAkAzAgCCQEMSW50ZWdlckVudHJ5AgUGa2V5Uk9JCQBrAwkBDXRyeUdldEludGVnZXICBQR0aGlzBRJrZXlXYXZlbGV0c1BhaWRPdXQAkE4JAQ10cnlHZXRJbnRlZ2VyAgUEdGhpcwUTa2V5V2F2ZWxldHNSZWNlaXZlZAUDbmlsAWkBDGJvb3N0UG9vbEFQWQIGYW1vdW50EnByb2plY3RPd25lclJld2FyZAMJAQIhPQIIBQFpBmNhbGxlcgUEdGhpcwkAAgECHGFjY2VzcyBvbmx5IGJ5IHByb2plY3Qgb3duZXIEC2Ftb3VudEJvb3N0AwkAAAIFEnByb2plY3RPd25lclJld2FyZAYJAGsDCQBoAgUGYW1vdW50BQJkOABQAGQFBmFtb3VudAQLYW1vdW50T3duZXIDCQAAAgUScHJvamVjdE93bmVyUmV3YXJkBgkAawMJAGgCBQZhbW91bnQFAmQ4ABQAZAAACgEMcmV3YXJkc1NoYXJlAQlwb29sU2hhcmUJAGsDBQthbW91bnRCb29zdAUJcG9vbFNoYXJlBQp0b3RhbFdoaXJsBAZib29zdFcJAQVib29zdAICIzNQMm15VGJkNXpwRUhjWW1OcGRXVHA1Z1hTNUI4dEwxUkNZCQEMcmV3YXJkc1NoYXJlAQUQd2hpcmxJbldoaXJscG9vbAMJAAACBQZib29zdFcFBmJvb3N0VwQIYm9vc3RCQkIJAQVib29zdAICIzNQOVZQd1ZmTmozZERldlFadDFaOTUxQTRLNTdjbVFtQ2drCQEMcmV3YXJkc1NoYXJlAQUKd2hpcmxJbkJCQgMJAAACBQhib29zdEJCQgUIYm9vc3RCQkIEDWJvb3N0Vm9sYXRpbGUJAQVib29zdAICIzNQRHpBckVCTlh1VG1jeldINThtSDVZTU5rVFZuWXROTFhLCQEMcmV3YXJkc1NoYXJlAQUPd2hpcmxJblZvbGF0aWxlAwkAAAIFDWJvb3N0Vm9sYXRpbGUFDWJvb3N0Vm9sYXRpbGUEEWJvb3N0QnVybnh0bldoaXJsCQEFYm9vc3QCAiMzUDQ4Wk42eWdoY29RYUhQdExNOVYyaEZjNWNkNEFSZDFoYwkBDHJld2FyZHNTaGFyZQEFE3doaXJsSW5CdXJueHRuV2hpcmwDCQAAAgURYm9vc3RCdXJueHRuV2hpcmwFEWJvb3N0QnVybnh0bldoaXJsBAVhZG1pbgkA/AcEBQ5yZXdhcmRzQWRkcmVzcwIMYWRtaW5SZXdhcmRzBQNuaWwFA25pbAMJAAACBQVhZG1pbgUFYWRtaW4JAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwkBB0FkZHJlc3MBBQxwcm9qZWN0T3duZXIFC2Ftb3VudE93bmVyBQR1bml0CQDMCAIJAQxJbnRlZ2VyRW50cnkCBRJrZXlXYXZlbGV0c1BhaWRPdXQJAGQCBQthbW91bnRCb29zdAkBDXRyeUdldEludGVnZXICBQR0aGlzBRJrZXlXYXZlbGV0c1BhaWRPdXQJAMwIAgkBDEludGVnZXJFbnRyeQIFBmtleVJPSQkAawMJAQ10cnlHZXRJbnRlZ2VyAgUEdGhpcwUSa2V5V2F2ZWxldHNQYWlkT3V0AJBOCQENdHJ5R2V0SW50ZWdlcgIFBHRoaXMFE2tleVdhdmVsZXRzUmVjZWl2ZWQJAMwIAgkBDEludGVnZXJFbnRyeQIFDGtleUFjdGl2YXRlZAUGaGVpZ2h0BQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEId2l0aGRyYXcAAwkBAiE9AggFAWkGY2FsbGVyCQEHQWRkcmVzcwEBGgFXGIkbJG0v4kSlsrku0GQjUC4p33Iw2jJZCQACAQIJbm8gYWNjZXNzBAh3aXRoZHJhdwkA/AcECQEHQWRkcmVzcwEBGgFXdRLdk4IPW94ldhU5y0nVH1MoCcTocV4nAhV3aXRoZHJhd1Zlc3RlZEFsbFVTRE4JAMwIAgcJAMwIAgYFA25pbAUDbmlsAwkAAAIFCHdpdGhkcmF3BQh3aXRoZHJhdwUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBCWFjdGl2YXRlZAADCQECIT0CCAUBaQZjYWxsZXIFBHRoaXMJAAIBAhN5b3UgYXJlIG5vdCBhbGxvd2VkCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQxrZXlBY3RpdmF0ZWQFBmhlaWdodAUDbmlsAWkBBHN3YXAAAwMJAQIhPQIIBQFpBmNhbGxlcgUEdGhpcwkBAiE9AggFAWkGY2FsbGVyBQdpbnZva2VyBwkAAgECCW5vIGFjY2VzcwMJAAACCQCgCAEFCGtEaXNhYmxlBgUDbmlsBAZhbW91bnQDCQBmAgkA8AcCBQR0aGlzBQV4dG5JZAkAaAIA6AcFAmQ2CQBoAgDoBwUCZDYJAPAHAgUEdGhpcwUFeHRuSWQEDHN3YXBYdG5XYXZlcwMJAGYCCQDwBwIFBHRoaXMFBXh0bklkAAAJAPwHBAUMc3dvcFdBVkVTeHRuAgxjYWxsRnVuY3Rpb24JAMwIAgIIZXhjaGFuZ2UJAMwIAgkAzAgCAgExBQNuaWwFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgUFeHRuSWQFBmFtb3VudAUDbmlsBQR1bml0AwkAAAIFDHN3YXBYdG5XYXZlcwUMc3dhcFh0bldhdmVzBAhhbW91bnRXWAMJAGYCCQDwBwIFBHRoaXMFBHd4SWQJAGgCAOgHBQJkNgkAaAIA6AcFAmQ4CQDwBwIFBHRoaXMFBHd4SWQEC3N3YXBXeFdhdmVzAwkAZgIJAPAHAgUEdGhpcwUEd3hJZAAACQEGc3dhcFdYAwUEd3hJZAEEE6vZMwUIYW1vdW50V1gFBHVuaXQDCQAAAgULc3dhcFd4V2F2ZXMFC3N3YXBXeFdhdmVzBQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEMc3Rha2VVbnN0YWtlAgVzdGFrZQZhbW91bnQDAwkBAiE9AggFAWkGY2FsbGVyBQR0aGlzCQECIT0CCAUBaQZjYWxsZXIFB2ludm9rZXIHCQACAQIJbm8gYWNjZXNzAwkAAAIJAKAIAQUIa0Rpc2FibGUGBQNuaWwDAwkAAAIFBXN0YWtlBgkAZwIFAmQ4CQBlAggJAO8HAQUEdGhpcwlhdmFpbGFibGUFAmQ4BwUDbmlsBARwb29sCQEHQWRkcmVzcwEBGgFXd9FKwAAmD1BtgyWzWnaE5eM5+V4NDHFEBAlsZWFzaW5nSWQJAJwIAgUEdGhpcwUKa0xlYXNpbmdJZAQNbGVhc2luZ0Ftb3VudAkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzBQ5rTGVhc2luZ0Ftb3VudAAABA5uZXdMZWFzZUFtb3VudAMFBXN0YWtlCQBlAgkAZAIFDWxlYXNpbmdBbW91bnQICQDvBwEFBHRoaXMJYXZhaWxhYmxlBQJkOAkAZQIFDWxlYXNpbmdBbW91bnQFBmFtb3VudAQIbmV3TGVhc2UJAMUIAwUEcG9vbAUObmV3TGVhc2VBbW91bnQAAQQKbmV3TGVhc2VJZAkAuQgBBQhuZXdMZWFzZQQJYmFzZUVudHJ5CQDMCAIFCG5ld0xlYXNlCQDMCAIJAQtCaW5hcnlFbnRyeQIFCmtMZWFzaW5nSWQFCm5ld0xlYXNlSWQJAMwIAgkBDEludGVnZXJFbnRyeQIFDmtMZWFzaW5nQW1vdW50BQ5uZXdMZWFzZUFtb3VudAUDbmlsBAckbWF0Y2gwBQlsZWFzaW5nSWQDCQABAgUHJG1hdGNoMAIKQnl0ZVZlY3RvcgQDbElkBQckbWF0Y2gwCQDOCAIJAMwIAgkBC0xlYXNlQ2FuY2VsAQUDbElkBQNuaWwFCWJhc2VFbnRyeQUJYmFzZUVudHJ5AWkBB2Rpc2FibGUBB2Rpc2FibGUDAwkBAiE9AggFAWkGY2FsbGVyBQR0aGlzCQECIT0CCAUBaQZjYWxsZXIFB2ludm9rZXIHCQACAQIJbm8gYWNjZXNzCQDMCAIJAQxCb29sZWFuRW50cnkCBQhrRGlzYWJsZQUHZGlzYWJsZQUDbmlsAQJ0eAEGdmVyaWZ5AAMJAMUTAwgFAnR4CWJvZHlCeXRlcwkAkQMCCAUCdHgGcHJvb2ZzAAAIBQJ0eA9zZW5kZXJQdWJsaWNLZXkGAwkAZgIJAGQCCQERQGV4dHJOYXRpdmUoMTA1MCkCBQR0aGlzBQxrZXlBY3RpdmF0ZWQFC3VubG9ja0Jsb2NrBQZoZWlnaHQHAwkAxRMDCAUCdHgJYm9keUJ5dGVzCQCRAwIIBQJ0eAZwcm9vZnMAAAUKaGVpclB1YktleQYDCQBmAgkAZAIJARFAZXh0ck5hdGl2ZSgxMDUwKQIFBHRoaXMFDGtleUFjdGl2YXRlZAUMdW5sb2NrQmxvY2syBQZoZWlnaHQHCQDFEwMIBQJ0eAlib2R5Qnl0ZXMJAJEDAggFAnR4BnByb29mcwAABRJQdXp6bGVNYXN0ZXJQdWJLZXnACpt0", "height": 4181425, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: HrumWfHF4LfFNjWSjbJJwRjPhmdDU9XfvenfKxWYJrmk Next: 2uXy2hB6Q69b9o3NERHww7PyLNaRmS8duvsjMr4gUtGN Diff:
Old | New | Differences | |
---|---|---|---|
195 | 195 | then throw("no access") | |
196 | 196 | else if ((getBoolean(kDisable) == true)) | |
197 | 197 | then nil | |
198 | - | else { | |
199 | - | let pool = Address(base58'3PCrRrwHEjGXFjYtXDsNv78f3Ch3CH3p6V1') | |
200 | - | let leasingId = getBinary(this, kLeasingId) | |
201 | - | let leasingAmount = valueOrElse(getInteger(this, kLeasingAmount), 0) | |
202 | - | let newLeaseAmount = if (stake) | |
203 | - | then ((leasingAmount + wavesBalance(this).available) - d8) | |
204 | - | else (leasingAmount - amount) | |
205 | - | let newLease = Lease(pool, newLeaseAmount, 1) | |
206 | - | let newLeaseId = calculateLeaseId(newLease) | |
207 | - | let baseEntry = [newLease, BinaryEntry(kLeasingId, newLeaseId), IntegerEntry(kLeasingAmount, newLeaseAmount)] | |
208 | - | match leasingId { | |
209 | - | case lId: ByteVector => | |
210 | - | ([LeaseCancel(lId)] ++ baseEntry) | |
211 | - | case _ => | |
212 | - | baseEntry | |
213 | - | } | |
214 | - | } | |
198 | + | else if (if ((stake == true)) | |
199 | + | then (d8 >= (wavesBalance(this).available - d8)) | |
200 | + | else false) | |
201 | + | then nil | |
202 | + | else { | |
203 | + | let pool = Address(base58'3PCrRrwHEjGXFjYtXDsNv78f3Ch3CH3p6V1') | |
204 | + | let leasingId = getBinary(this, kLeasingId) | |
205 | + | let leasingAmount = valueOrElse(getInteger(this, kLeasingAmount), 0) | |
206 | + | let newLeaseAmount = if (stake) | |
207 | + | then ((leasingAmount + wavesBalance(this).available) - d8) | |
208 | + | else (leasingAmount - amount) | |
209 | + | let newLease = Lease(pool, newLeaseAmount, 1) | |
210 | + | let newLeaseId = calculateLeaseId(newLease) | |
211 | + | let baseEntry = [newLease, BinaryEntry(kLeasingId, newLeaseId), IntegerEntry(kLeasingAmount, newLeaseAmount)] | |
212 | + | match leasingId { | |
213 | + | case lId: ByteVector => | |
214 | + | ([LeaseCancel(lId)] ++ baseEntry) | |
215 | + | case _ => | |
216 | + | baseEntry | |
217 | + | } | |
218 | + | } | |
215 | 219 | ||
216 | 220 | ||
217 | 221 |
Old | New | Differences | |
---|---|---|---|
1 | 1 | {-# STDLIB_VERSION 6 #-} | |
2 | 2 | {-# SCRIPT_TYPE ACCOUNT #-} | |
3 | 3 | {-# CONTENT_TYPE DAPP #-} | |
4 | 4 | func tryGetInteger (address,key) = match getInteger(address, key) { | |
5 | 5 | case b: Int => | |
6 | 6 | b | |
7 | 7 | case _ => | |
8 | 8 | 0 | |
9 | 9 | } | |
10 | 10 | ||
11 | 11 | ||
12 | 12 | let d6 = 1000000 | |
13 | 13 | ||
14 | 14 | let d8 = 100000000 | |
15 | 15 | ||
16 | 16 | let wxId = base58'Atqv59EYzjFGuitKVnMRk6H8FukjoV3ktPorbEys25on' | |
17 | 17 | ||
18 | 18 | let xtnId = base58'DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p' | |
19 | 19 | ||
20 | 20 | let invoker = Address(base58'3P4AdC9J6MzTEi2LL9xgQN8EimMnbk4d6Nt') | |
21 | 21 | ||
22 | 22 | let swopWAVESxtn = Address(base58'3PHaNgomBkrvEL2QnuJarQVJa71wjw9qiqG') | |
23 | 23 | ||
24 | 24 | let unlockBlock = (30 * 1440) | |
25 | 25 | ||
26 | 26 | let heirPubKey = base58'2kpmuzw1ZbrtgAN3BrR7vbEW1XrJoJKCstL7mf7XNf2P' | |
27 | 27 | ||
28 | 28 | let unlockBlock2 = (90 * 1440) | |
29 | 29 | ||
30 | 30 | let PuzzleMasterPubKey = base58'4z8CKSYQBKkzx7PBb5uBP1YPa6YAHRNTApW1sQVHT5eU' | |
31 | 31 | ||
32 | 32 | let keyActivated = "Activated blockheight" | |
33 | 33 | ||
34 | 34 | let keyWaveletsReceived = "total WAVES received in wavelets" | |
35 | 35 | ||
36 | 36 | let keyWaveletsPaidOut = "total WAVES paid out in wavelets" | |
37 | 37 | ||
38 | 38 | let keyROI = "ROI basis points" | |
39 | 39 | ||
40 | 40 | let kLeasingAmount = "leasing_amount" | |
41 | 41 | ||
42 | 42 | let kLeasingId = "leasing_id" | |
43 | 43 | ||
44 | 44 | let kDisable = "disabled" | |
45 | 45 | ||
46 | 46 | let projectOwner = base58'3PEtLVxDT8mxAh1SDAn8m7JTGNkdpkaFxBk' | |
47 | 47 | ||
48 | 48 | let whirlpoolPoolId = base58'3P2myTbd5zpEHcYmNpdWTp5gXS5B8tL1RCY' | |
49 | 49 | ||
50 | 50 | let bbbPoolId = base58'3P9VPwVfNj3dDevQZt1Z951A4K57cmQmCgk' | |
51 | 51 | ||
52 | 52 | let volatilePoolId = base58'3PDzArEBNXuTmczWH58mH5YMNkTVnYtNLXK' | |
53 | 53 | ||
54 | 54 | let burnxtnWhirlPoolId = base58'3P48ZN6yghcoQaHPtLM9V2hFc5cd4ARd1hc' | |
55 | 55 | ||
56 | 56 | let poolboostSC = base58'3P8eeDzUnoDNbQjW617pAe76cEUDQsP1m1V' | |
57 | 57 | ||
58 | 58 | let rewardsAddress = Address(base58'3P6H24XKLyRX8RKwyA5ARsChE6WhjDcVBiZ') | |
59 | 59 | ||
60 | 60 | let whirlpool = base58'73tY3E6Gd5AWYmsuq8m8Kek7KnJNAYyS3GoveTbc6jCi' | |
61 | 61 | ||
62 | 62 | let whirlpoolString = toBase58String(base58'73tY3E6Gd5AWYmsuq8m8Kek7KnJNAYyS3GoveTbc6jCi') | |
63 | 63 | ||
64 | 64 | let waves = base58'WAVES' | |
65 | 65 | ||
66 | 66 | func tokensInPool (poolId,assetStr) = tryGetInteger(Address(poolId), (("global_" + assetStr) + "_balance")) | |
67 | 67 | ||
68 | 68 | ||
69 | 69 | let wavesInWhirlpool = tokensInPool(whirlpoolPoolId, toBase58String(waves)) | |
70 | 70 | ||
71 | 71 | let whirlInWhirlpool = tokensInPool(whirlpoolPoolId, whirlpoolString) | |
72 | 72 | ||
73 | 73 | let whirlInBBB = tokensInPool(bbbPoolId, whirlpoolString) | |
74 | 74 | ||
75 | 75 | let whirlInVolatile = tokensInPool(volatilePoolId, whirlpoolString) | |
76 | 76 | ||
77 | 77 | let whirlInBurnxtnWhirl = tokensInPool(burnxtnWhirlPoolId, whirlpoolString) | |
78 | 78 | ||
79 | 79 | let totalWhirl = (((whirlInWhirlpool + whirlInBBB) + whirlInVolatile) + whirlInBurnxtnWhirl) | |
80 | 80 | ||
81 | 81 | let whirlpoolWaves = fraction(d8, ((wavesInWhirlpool * tryGetInteger(Address(whirlpoolPoolId), (("static_" + toBase58String(whirlpool)) + "_weight"))) / 1000), whirlInWhirlpool) | |
82 | 82 | ||
83 | 83 | let whirlpoolSupply = match assetInfo(whirlpool) { | |
84 | 84 | case asset: Asset => | |
85 | 85 | asset.quantity | |
86 | 86 | case _ => | |
87 | 87 | throw("Can't find asset") | |
88 | 88 | } | |
89 | 89 | ||
90 | 90 | func boost (poolId,amount) = invoke(Address(poolboostSC), "addBoosting", [poolId, 7], [AttachedPayment(unit, amount)]) | |
91 | 91 | ||
92 | 92 | ||
93 | 93 | func swapWX (assetIn,assetOut,amountIn) = invoke(Address(base58'3P68zNiufsu1viZpu1aY3cdahRRKcvV5N93'), "swap", [1, toBase58String(assetOut), toString(this)], [AttachedPayment(assetIn, amountIn)]) | |
94 | 94 | ||
95 | 95 | ||
96 | 96 | @Callable(i) | |
97 | 97 | func priceStats () = [IntegerEntry("WHIRLPOOL/WAVES mid market price", whirlpoolWaves), IntegerEntry("WHIRLPOOL total supply", (whirlpoolSupply / d8)), IntegerEntry("total WAVES received", (tryGetInteger(this, keyWaveletsReceived) / d8)), IntegerEntry("total WAVES paid out in WAVES", (tryGetInteger(this, keyWaveletsPaidOut) / d8)), IntegerEntry(keyROI, fraction(tryGetInteger(this, keyWaveletsPaidOut), 10000, tryGetInteger(this, keyWaveletsReceived)))] | |
98 | 98 | ||
99 | 99 | ||
100 | 100 | ||
101 | 101 | @Callable(i) | |
102 | 102 | func boostPoolAPY (amount,projectOwnerReward) = if ((i.caller != this)) | |
103 | 103 | then throw("access only by project owner") | |
104 | 104 | else { | |
105 | 105 | let amountBoost = if ((projectOwnerReward == true)) | |
106 | 106 | then fraction((amount * d8), 80, 100) | |
107 | 107 | else amount | |
108 | 108 | let amountOwner = if ((projectOwnerReward == true)) | |
109 | 109 | then fraction((amount * d8), 20, 100) | |
110 | 110 | else 0 | |
111 | 111 | func rewardsShare (poolShare) = fraction(amountBoost, poolShare, totalWhirl) | |
112 | 112 | ||
113 | 113 | let boostW = boost("3P2myTbd5zpEHcYmNpdWTp5gXS5B8tL1RCY", rewardsShare(whirlInWhirlpool)) | |
114 | 114 | if ((boostW == boostW)) | |
115 | 115 | then { | |
116 | 116 | let boostBBB = boost("3P9VPwVfNj3dDevQZt1Z951A4K57cmQmCgk", rewardsShare(whirlInBBB)) | |
117 | 117 | if ((boostBBB == boostBBB)) | |
118 | 118 | then { | |
119 | 119 | let boostVolatile = boost("3PDzArEBNXuTmczWH58mH5YMNkTVnYtNLXK", rewardsShare(whirlInVolatile)) | |
120 | 120 | if ((boostVolatile == boostVolatile)) | |
121 | 121 | then { | |
122 | 122 | let boostBurnxtnWhirl = boost("3P48ZN6yghcoQaHPtLM9V2hFc5cd4ARd1hc", rewardsShare(whirlInBurnxtnWhirl)) | |
123 | 123 | if ((boostBurnxtnWhirl == boostBurnxtnWhirl)) | |
124 | 124 | then { | |
125 | 125 | let admin = invoke(rewardsAddress, "adminRewards", nil, nil) | |
126 | 126 | if ((admin == admin)) | |
127 | 127 | then [ScriptTransfer(Address(projectOwner), amountOwner, unit), IntegerEntry(keyWaveletsPaidOut, (amountBoost + tryGetInteger(this, keyWaveletsPaidOut))), IntegerEntry(keyROI, fraction(tryGetInteger(this, keyWaveletsPaidOut), 10000, tryGetInteger(this, keyWaveletsReceived))), IntegerEntry(keyActivated, height)] | |
128 | 128 | else throw("Strict value is not equal to itself.") | |
129 | 129 | } | |
130 | 130 | else throw("Strict value is not equal to itself.") | |
131 | 131 | } | |
132 | 132 | else throw("Strict value is not equal to itself.") | |
133 | 133 | } | |
134 | 134 | else throw("Strict value is not equal to itself.") | |
135 | 135 | } | |
136 | 136 | else throw("Strict value is not equal to itself.") | |
137 | 137 | } | |
138 | 138 | ||
139 | 139 | ||
140 | 140 | ||
141 | 141 | @Callable(i) | |
142 | 142 | func withdraw () = if ((i.caller != Address(base58'3P4AdC9J6MzTEi2LL9xgQN8EimMnbk4d6Nt'))) | |
143 | 143 | then throw("no access") | |
144 | 144 | else { | |
145 | 145 | let withdraw = invoke(Address(base58'3PCbvPVQfSvVu88ip8Fm5YjwJhjEYk1Txhk'), "withdrawVestedAllUSDN", [false, true], nil) | |
146 | 146 | if ((withdraw == withdraw)) | |
147 | 147 | then nil | |
148 | 148 | else throw("Strict value is not equal to itself.") | |
149 | 149 | } | |
150 | 150 | ||
151 | 151 | ||
152 | 152 | ||
153 | 153 | @Callable(i) | |
154 | 154 | func activated () = if ((i.caller != this)) | |
155 | 155 | then throw("you are not allowed") | |
156 | 156 | else [IntegerEntry(keyActivated, height)] | |
157 | 157 | ||
158 | 158 | ||
159 | 159 | ||
160 | 160 | @Callable(i) | |
161 | 161 | func swap () = if (if ((i.caller != this)) | |
162 | 162 | then (i.caller != invoker) | |
163 | 163 | else false) | |
164 | 164 | then throw("no access") | |
165 | 165 | else if ((getBoolean(kDisable) == true)) | |
166 | 166 | then nil | |
167 | 167 | else { | |
168 | 168 | let amount = if ((assetBalance(this, xtnId) > (1000 * d6))) | |
169 | 169 | then (1000 * d6) | |
170 | 170 | else assetBalance(this, xtnId) | |
171 | 171 | let swapXtnWaves = if ((assetBalance(this, xtnId) > 0)) | |
172 | 172 | then invoke(swopWAVESxtn, "callFunction", ["exchange", ["1"]], [AttachedPayment(xtnId, amount)]) | |
173 | 173 | else unit | |
174 | 174 | if ((swapXtnWaves == swapXtnWaves)) | |
175 | 175 | then { | |
176 | 176 | let amountWX = if ((assetBalance(this, wxId) > (1000 * d6))) | |
177 | 177 | then (1000 * d8) | |
178 | 178 | else assetBalance(this, wxId) | |
179 | 179 | let swapWxWaves = if ((assetBalance(this, wxId) > 0)) | |
180 | 180 | then swapWX(wxId, base58'WAVES', amountWX) | |
181 | 181 | else unit | |
182 | 182 | if ((swapWxWaves == swapWxWaves)) | |
183 | 183 | then nil | |
184 | 184 | else throw("Strict value is not equal to itself.") | |
185 | 185 | } | |
186 | 186 | else throw("Strict value is not equal to itself.") | |
187 | 187 | } | |
188 | 188 | ||
189 | 189 | ||
190 | 190 | ||
191 | 191 | @Callable(i) | |
192 | 192 | func stakeUnstake (stake,amount) = if (if ((i.caller != this)) | |
193 | 193 | then (i.caller != invoker) | |
194 | 194 | else false) | |
195 | 195 | then throw("no access") | |
196 | 196 | else if ((getBoolean(kDisable) == true)) | |
197 | 197 | then nil | |
198 | - | else { | |
199 | - | let pool = Address(base58'3PCrRrwHEjGXFjYtXDsNv78f3Ch3CH3p6V1') | |
200 | - | let leasingId = getBinary(this, kLeasingId) | |
201 | - | let leasingAmount = valueOrElse(getInteger(this, kLeasingAmount), 0) | |
202 | - | let newLeaseAmount = if (stake) | |
203 | - | then ((leasingAmount + wavesBalance(this).available) - d8) | |
204 | - | else (leasingAmount - amount) | |
205 | - | let newLease = Lease(pool, newLeaseAmount, 1) | |
206 | - | let newLeaseId = calculateLeaseId(newLease) | |
207 | - | let baseEntry = [newLease, BinaryEntry(kLeasingId, newLeaseId), IntegerEntry(kLeasingAmount, newLeaseAmount)] | |
208 | - | match leasingId { | |
209 | - | case lId: ByteVector => | |
210 | - | ([LeaseCancel(lId)] ++ baseEntry) | |
211 | - | case _ => | |
212 | - | baseEntry | |
213 | - | } | |
214 | - | } | |
198 | + | else if (if ((stake == true)) | |
199 | + | then (d8 >= (wavesBalance(this).available - d8)) | |
200 | + | else false) | |
201 | + | then nil | |
202 | + | else { | |
203 | + | let pool = Address(base58'3PCrRrwHEjGXFjYtXDsNv78f3Ch3CH3p6V1') | |
204 | + | let leasingId = getBinary(this, kLeasingId) | |
205 | + | let leasingAmount = valueOrElse(getInteger(this, kLeasingAmount), 0) | |
206 | + | let newLeaseAmount = if (stake) | |
207 | + | then ((leasingAmount + wavesBalance(this).available) - d8) | |
208 | + | else (leasingAmount - amount) | |
209 | + | let newLease = Lease(pool, newLeaseAmount, 1) | |
210 | + | let newLeaseId = calculateLeaseId(newLease) | |
211 | + | let baseEntry = [newLease, BinaryEntry(kLeasingId, newLeaseId), IntegerEntry(kLeasingAmount, newLeaseAmount)] | |
212 | + | match leasingId { | |
213 | + | case lId: ByteVector => | |
214 | + | ([LeaseCancel(lId)] ++ baseEntry) | |
215 | + | case _ => | |
216 | + | baseEntry | |
217 | + | } | |
218 | + | } | |
215 | 219 | ||
216 | 220 | ||
217 | 221 | ||
218 | 222 | @Callable(i) | |
219 | 223 | func disable (disable) = if (if ((i.caller != this)) | |
220 | 224 | then (i.caller != invoker) | |
221 | 225 | else false) | |
222 | 226 | then throw("no access") | |
223 | 227 | else [BooleanEntry(kDisable, disable)] | |
224 | 228 | ||
225 | 229 | ||
226 | 230 | @Verifier(tx) | |
227 | 231 | func verify () = if (sigVerify_16Kb(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey)) | |
228 | 232 | then true | |
229 | 233 | else if (((getIntegerValue(this, keyActivated) + unlockBlock) > height)) | |
230 | 234 | then false | |
231 | 235 | else if (sigVerify_16Kb(tx.bodyBytes, tx.proofs[0], heirPubKey)) | |
232 | 236 | then true | |
233 | 237 | else if (((getIntegerValue(this, keyActivated) + unlockBlock2) > height)) | |
234 | 238 | then false | |
235 | 239 | else sigVerify_16Kb(tx.bodyBytes, tx.proofs[0], PuzzleMasterPubKey) | |
236 | 240 |
github/deemru/w8io/0e76f2f 58.99 ms ◑