tx · J7anBe2wxDgDYeysV1N7mvcH1STpU7xENFR5i7yZ1NEh 3PAkmJniMgnnAej5pYf2jFYkCbZow5pt9tr: -0.01300000 Waves 2024.03.12 09:01 [4080260] smart account 3PAkmJniMgnnAej5pYf2jFYkCbZow5pt9tr > SELF 0.00000000 Waves
{ "type": 13, "id": "J7anBe2wxDgDYeysV1N7mvcH1STpU7xENFR5i7yZ1NEh", "fee": 1300000, "feeAssetId": null, "timestamp": 1710223294348, "version": 2, "chainId": 87, "sender": "3PAkmJniMgnnAej5pYf2jFYkCbZow5pt9tr", "senderPublicKey": "A5AvSRrbVauQKBhPtuWTLTQdE5ka4nVCSDaVANpFur26", "proofs": [ "2iUBxhQLHdDfxbvh4D67tfceQ2Hf75aYZHbRjrMYsK2Fff7zjakefNzGAfGqwUcQyxTCzBrXvneyZ1vgTmvJNeSq" ], "script": "base64:BgIXCAISABIAEgMKAQESAwoBARIDCgEBEgBPAQ10cnlHZXRJbnRlZ2VyAgdhZGRyZXNzA2tleQQHJG1hdGNoMAkAmggCBQdhZGRyZXNzBQNrZXkDCQABAgUHJG1hdGNoMAIDSW50BAFiBQckbWF0Y2gwBQFiAAABDHRyeUdldFN0cmluZwIHYWRkcmVzcwNrZXkEByRtYXRjaDAJAJ0IAgUHYWRkcmVzcwUDa2V5AwkAAQIFByRtYXRjaDACBlN0cmluZwQBYgUHJG1hdGNoMAUBYgIAAAJkOACAwtcvAAt1bmxvY2tCbG9jawkAaAIAHgCgCwAKaGVpclB1YktleQEgGhWuLQ8iL9bocw38EUfyB7YO6jTez96WKtjdSBQafhAADHVubG9ja0Jsb2NrMgkAaAIAWgCgCwASUHV6emxlTWFzdGVyUHViS2V5ASA7NU1uP5+++FSclkQHgFarL+ITYEXEe/I/F0P0QgUmXQAMa2V5QWN0aXZhdGVkAhVBY3RpdmF0ZWQgYmxvY2toZWlnaHQAEmtleVN1cnBsdXNSZWNlaXZlZAIcc3VycGx1cyByZWNlaXZlZCBpbiB3YXZlbGV0cwATa2V5V2F2ZWxldHNSZWNlaXZlZAIgdG90YWwgV0FWRVMgcmVjZWl2ZWQgaW4gd2F2ZWxldHMAFWtleVdhdmVsZXRzUmVjZWl2ZWRCVAIpdG90YWwgd2F2ZWxldHMgcmVjZWl2ZWQgZm9yIGJhc2UgdHJlYXN1cnkAEmtleVdhdmVsZXRzUGFpZE91dAIgdG90YWwgV0FWRVMgcGFpZCBvdXQgaW4gd2F2ZWxldHMABmtleVJPSQIQUk9JIGJhc2lzIHBvaW50cwAWa2V5V2hpcmxwb29sSXNzdWVQcmljZQIhV0hJUkxQT09MIGlzc3VlIHByaWNlIGluIHdhdmVsZXRzABBidXJueHRuUFBUcG9vbElkARoBV/VGaCeADWjfTiZ1erSh0ygx4Am/9Xl5NwAMcHJvamVjdE93bmVyARoBV44d5lHKOCPOw5HDxFaL1YPTb4hW/zbdCwAPd2hpcmxwb29sUG9vbElkARoBVwlIVKiYtf/MSkbbEv1LyZMZRjdDmIfXzQAJYmJiUG9vbElkARoBV1Luk1YUTX4HjNKFD+Z+XFc3fhyf7zyCHQAMd2F2ZXM1cG9vbElkARoBV3d/C10uHsD5Iu4ETQIKuwPrdpc7IIHrJgAJd2hpcmxwb29sASBZ443cwrUjukoU3MTQrxQJ5mTmBL4lBgsmTuVQbZdZxwAPd2hpcmxwb29sU3RyaW5nCQDYBAEBIFnjjdzCtSO6ShTcxNCvFAnmZOYEviUGCyZO5VBtl1nHAAV3YXZlcwEEE6vZMwADZXRoASAlHvr/2CHJcJ77wLTePrerhp4FO2bv3Af8UeP1qDMocgAGc3dhdmVzASAIH8j3FjDtUcIpG+ysGo/8kHEcWTgt6yGBsDdB8EXRSgAGcHV6emxlASDxGv4l/vaZOPRpKsTf4RLWR7LGyg66Nwmvd20fjqLlYwACd3gBIJMBHKupx24lV85mnnG2vapr+DzoWAsq7tmgTrs83BSxAAtwb29sYm9vc3RTQwEaAVdJth4Q36ANT9jV0A+j44S32V46KbMRqawADFNXQVZFU19zdGFrZQkBB0FkZHJlc3MBARoBV33Je5MUef/nUfGxSsdv+WodgJVHz1gjfgAMV1hfRVRIX1dBVkVTCQEHQWRkcmVzcwEBGgFXC4DVEg9NSl4lMarlQ8+0Wdgjo0PbD+vBAA9XWF9QVVpaTEVfV0FWRVMJAQdBZGRyZXNzAQEaAVf4ceejCfpl3qKBvq915B89rMuUynWtBK8AC1dYX1dYX1dBVkVTCQEHQWRkcmVzcwEBGgFXmkQFmJm8tKiQ5rdVb7cYKMuIhtMFfR9WAAt3YXZlc0luUG9vbAkBDXRyeUdldEludGVnZXICCQEHQWRkcmVzcwEFEGJ1cm54dG5QUFRwb29sSWQJAKwCAgkArAICAgdnbG9iYWxfCQDYBAEFBXdhdmVzAghfYmFsYW5jZQAMcHJvamVjdFN0YWtlCQENdHJ5R2V0SW50ZWdlcgIJAQdBZGRyZXNzAQUQYnVybnh0blBQVHBvb2xJZAkArAICCQClCAEFBHRoaXMCDF9pbmRleFN0YWtlZAAKdG90YWxTdGFrZQkBDXRyeUdldEludGVnZXICCQEHQWRkcmVzcwEFEGJ1cm54dG5QUFRwb29sSWQCF2dsb2JhbF9wb29sVG9rZW5fYW1vdW50AQhfbG9hZEludAIEa2V5XwhkZWZhdWx0XwQHJG1hdGNoMAkAmggCBQxTV0FWRVNfc3Rha2UFBGtleV8DCQABAgUHJG1hdGNoMAIDSW50BAFhBQckbWF0Y2gwBQFhBQhkZWZhdWx0XwELX2xvYWRCaWdJbnQCBGtleV8IZGVmYXVsdF8EByRtYXRjaDAJAJwIAgUMU1dBVkVTX3N0YWtlBQRrZXlfAwkAAQIFByRtYXRjaDACCkJ5dGVWZWN0b3IEAWEFByRtYXRjaDAJAJ4DAQUBYQUIZGVmYXVsdF8ACGxhc3RSYXRlCQELX2xvYWRCaWdJbnQCAglMQVNUX1JBVEUJALYCAQCAoJSljR0AC2N1cnJlbnRSYXRlCQELX2xvYWRCaWdJbnQCAgxDVVJSRU5UX1JBVEUJALYCAQAAAApsYXN0SGVpZ2h0CQEIX2xvYWRJbnQCAgtMQVNUX0hFSUdIVAAAAAx0YXJnZXRIZWlnaHQJAJcDAQkAzAgCCQEIX2xvYWRJbnQCAg1UQVJHRVRfSEVJR0hUAAAJAMwIAgUGaGVpZ2h0BQNuaWwAD2xhc3RSYXRlVXBkYXRlZAkAtwICBQhsYXN0UmF0ZQkAuQICBQtjdXJyZW50UmF0ZQkAtgIBCQBlAgUMdGFyZ2V0SGVpZ2h0BQpsYXN0SGVpZ2h0AAtiYXNlQW1vdW50MgkAoAMBCQC9AgQJALYCAQkA8AcCBQxXWF9FVEhfV0FWRVMFBnN3YXZlcwUPbGFzdFJhdGVVcGRhdGVkCQC2AgEAgKCUpY0dBQVGTE9PUgALYmFzZUFtb3VudDMJAKADAQkAvQIECQC2AgEJAPAHAgUPV1hfUFVaWkxFX1dBVkVTBQZzd2F2ZXMFD2xhc3RSYXRlVXBkYXRlZAkAtgIBAICglKWNHQUFRkxPT1IAC2Jhc2VBbW91bnQ0CQCgAwEJAL0CBAkAtgIBCQDwBwIFC1dYX1dYX1dBVkVTBQZzd2F2ZXMFD2xhc3RSYXRlVXBkYXRlZAkAtgIBAICglKWNHQUFRkxPT1IACndhdmVzMkluV1gJAGQCCAkA7wcBBQxXWF9FVEhfV0FWRVMHcmVndWxhcgULYmFzZUFtb3VudDIAB2V0aEluV1gJAPAHAgUMV1hfRVRIX1dBVkVTBQNldGgACGV0aFdhdmVzCQBrAwUCZDgFCndhdmVzMkluV1gFB2V0aEluV1gACnB1enpsZUluV1gJAPAHAgUPV1hfUFVaWkxFX1dBVkVTBQZwdXp6bGUACndhdmVzM0luV1gJAGQCCAkA7wcBBQ9XWF9QVVpaTEVfV0FWRVMHcmVndWxhcgULYmFzZUFtb3VudDMAC3B1enpsZVdhdmVzCQBrAwUCZDgFCndhdmVzM0luV1gFCnB1enpsZUluV1gABnd4SW5XWAkA8AcCBQtXWF9XWF9XQVZFUwUCd3gACndhdmVzNEluV1gJAGQCCAkA7wcBBQtXWF9XWF9XQVZFUwdyZWd1bGFyBQtiYXNlQW1vdW50NAAHd3hXYXZlcwkAawMFAmQ4BQp3YXZlczRJbldYBQZ3eEluV1gAEHdhdmVzSW5XaGlybHBvb2wJAQ10cnlHZXRJbnRlZ2VyAgkBB0FkZHJlc3MBBQ93aGlybHBvb2xQb29sSWQJAKwCAgkArAICAgdnbG9iYWxfCQDYBAEFBXdhdmVzAghfYmFsYW5jZQAQd2hpcmxJbldoaXJscG9vbAkBDXRyeUdldEludGVnZXICCQEHQWRkcmVzcwEFD3doaXJscG9vbFBvb2xJZAkArAICCQCsAgICB2dsb2JhbF8FD3doaXJscG9vbFN0cmluZwIIX2JhbGFuY2UAEXByb2plY3RTdGFrZVdoaXJsCQENdHJ5R2V0SW50ZWdlcgIJAQdBZGRyZXNzAQUPd2hpcmxwb29sUG9vbElkCQCsAgIJAKUIAQUEdGhpcwIMX2luZGV4U3Rha2VkAA90b3RhbFN0YWtlV2hpcmwJAQ10cnlHZXRJbnRlZ2VyAgkBB0FkZHJlc3MBBQ93aGlybHBvb2xQb29sSWQCF2dsb2JhbF9wb29sVG9rZW5fYW1vdW50AAp3aGlybEluQkJCCQENdHJ5R2V0SW50ZWdlcgIJAQdBZGRyZXNzAQUJYmJiUG9vbElkCQCsAgIJAKwCAgIHZ2xvYmFsXwUPd2hpcmxwb29sU3RyaW5nAghfYmFsYW5jZQAKdG90YWxXaGlybAkAZAIFEHdoaXJsSW5XaGlybHBvb2wFCndoaXJsSW5CQkIADXdhdmVzSW5XNXBvb2wJAQ10cnlHZXRJbnRlZ2VyAgkBB0FkZHJlc3MBBQx3YXZlczVwb29sSWQJAKwCAgkArAICAgdnbG9iYWxfCQDYBAEFBXdhdmVzAghfYmFsYW5jZQAScHJvamVjdFN0YWtlVzVwb29sCQENdHJ5R2V0SW50ZWdlcgIJAQdBZGRyZXNzAQUMd2F2ZXM1cG9vbElkCQCsAgIJAKUIAQUEdGhpcwIMX2luZGV4U3Rha2VkABB0b3RhbFN0YWtlVzVwb29sCQENdHJ5R2V0SW50ZWdlcgIJAQdBZGRyZXNzAQUMd2F2ZXM1cG9vbElkAhdnbG9iYWxfcG9vbFRva2VuX2Ftb3VudAANa2V5VmF1bHRBc3NldAkBDHRyeUdldFN0cmluZwIJAQdBZGRyZXNzAQEaAVfa4655+8r5z+MDNCERUZp23XhlXEZbchgJAKwCAgkArAICAg8lcyVzJXNfX3ZhdWx0X18JAKUIAQUEdGhpcwIHX19XQVZFUwALV0FWRVNpbkVBU1QJAQ1wYXJzZUludFZhbHVlAQkAkQMCCQC1CQIFDWtleVZhdWx0QXNzZXQCAl9fAAIADmtleVZhdWx0QXNzZXQyCQEMdHJ5R2V0U3RyaW5nAgkBB0FkZHJlc3MBARoBV9rjrnn7yvnP4wM0IRFRmnbdeGVcRltyGAkArAICCQCsAgICDyVzJXMlc19fdmF1bHRfXwkApQgBBQR0aGlzAi5fXzNWdVY1V1RtRHo0N0RtZG4zUXBjWWp6YlNkaXBqUUU0Sk1kTmUxeFpwWDEzAAlFVEhpbkVBU1QJAQ1wYXJzZUludFZhbHVlAQkAkQMCCQC1CQIFDmtleVZhdWx0QXNzZXQyAgJfXwACABFFVEhpbkVBU1R3YXZlbGV0cwkAawMFCUVUSGluRUFTVAUIZXRoV2F2ZXMFAmQ4AA1wdXp6bGVTdGFraW5nCQEHQWRkcmVzcwEBGgFXlGiM+e6iuaqf1vWOvKmPZxqcBvQWKYm7AAxwdXp6bGVTdGFrZWQJAQ10cnlHZXRJbnRlZ2VyAgUNcHV6emxlU3Rha2luZwkArAICCQClCAEFBHRoaXMCB19zdGFrZWQAEFBVWlpMRWluV2F2ZWxldHMJAGsDBQxwdXp6bGVTdGFrZWQFC3B1enpsZVdhdmVzBQJkOAAJV1hzdGFraW5nCQEHQWRkcmVzcwEBGgFXs+bmVRgRabDkMw+IUUOknK7W1UsDSxFYAAVrZXlXWAIlJXMlZCVzX19wYXJhbUJ5VXNlck51bV9fMTM0NDVfX2Ftb3VudAAIV1hhbW91bnQJAQ10cnlHZXRJbnRlZ2VyAgUJV1hzdGFraW5nBQVrZXlXWAAMV1hpbldhdmVsZXRzCQBrAwUIV1hhbW91bnQFB3d4V2F2ZXMFAmQ4AAp0dmxJbldhdmVzCQBkAgkAZAIJAGQCCQBkAgkAZAIJAGsDCQBoAgULd2F2ZXNJblBvb2wACgUMcHJvamVjdFN0YWtlBQp0b3RhbFN0YWtlCQBrAwkAaAIFEHdhdmVzSW5XaGlybHBvb2wACgURcHJvamVjdFN0YWtlV2hpcmwFD3RvdGFsU3Rha2VXaGlybAURRVRIaW5FQVNUd2F2ZWxldHMFEFBVWlpMRWluV2F2ZWxldHMJAGsDCQBoAgUNd2F2ZXNJblc1cG9vbAAFBRJwcm9qZWN0U3Rha2VXNXBvb2wFEHRvdGFsU3Rha2VXNXBvb2wFDFdYaW5XYXZlbGV0cwAHdG90YWxCVAULV0FWRVNpbkVBU1QADXRvdGFsVHJlYXN1cnkJAGQCBQd0b3RhbEJUBQp0dmxJbldhdmVzAA93aGlybHBvb2xTdXBwbHkEByRtYXRjaDAJAOwHAQUJd2hpcmxwb29sAwkAAQIFByRtYXRjaDACBUFzc2V0BAVhc3NldAUHJG1hdGNoMAgFBWFzc2V0CHF1YW50aXR5CQACAQIQQ2FuJ3QgZmluZCBhc3NldAAFcHJpY2UDCQBnAgkAZAIJAGsDCQBkAgUKdHZsSW5XYXZlcwkBDXRyeUdldEludGVnZXICBQR0aGlzBRJrZXlTdXJwbHVzUmVjZWl2ZWQFAmQ4BQ93aGlybHBvb2xTdXBwbHkFAmQ4CQENdHJ5R2V0SW50ZWdlcgIFBHRoaXMFFmtleVdoaXJscG9vbElzc3VlUHJpY2UJAGQCCQBrAwkAZAIFCnR2bEluV2F2ZXMJAQ10cnlHZXRJbnRlZ2VyAgUEdGhpcwUSa2V5U3VycGx1c1JlY2VpdmVkBQJkOAUPd2hpcmxwb29sU3VwcGx5BQJkOAkBDXRyeUdldEludGVnZXICBQR0aGlzBRZrZXlXaGlybHBvb2xJc3N1ZVByaWNlBgFpARVidXlXSElSTFBPT0x3aXRoV0FWRVMABBZXaGlybHBvb2xCYWxhbmNlQmVmb3JlCQDwBwIFBHRoaXMFCXdoaXJscG9vbAMJAAACBRZXaGlybHBvb2xCYWxhbmNlQmVmb3JlBRZXaGlybHBvb2xCYWxhbmNlQmVmb3JlBANwbXQJAQV2YWx1ZQEJAJEDAggFAWkIcGF5bWVudHMAAAQHc3VycGx1cwkAawMJAGUCBQVwcmljZQUCZDgIBQNwbXQGYW1vdW50BQJkOAQLSXNzdWVBbW91bnQDCQBnAggFA3BtdAZhbW91bnQJAGsDCAUDcG10BmFtb3VudAUCZDgFBXByaWNlCQBrAwgFA3BtdAZhbW91bnQFAmQ4BQVwcmljZQkAAgECMHBsZWFzZSBjb250YWN0IHByb2plY3Qgb3duZXI6IGlzc3VlIGFtb3VudCBlcnJvcgQNY2xlYW5BbW91bnRJbgkAZQIIBQNwbXQGYW1vdW50CQBrAwgFA3BtdAZhbW91bnQAyAEAkE4ECUFtb3VudE91dAkAbgQFEHdoaXJsSW5XaGlybHBvb2wJAGUCCQBoAgUCZDgFAmQ4CQCgAwEJAHYGCQC9AgQJALYCAQUQd2F2ZXNJbldoaXJscG9vbAkAtgIBCQBoAgUCZDgFAmQ4CQC2AgEJAGQCBRB3YXZlc0luV2hpcmxwb29sBQ1jbGVhbkFtb3VudEluBQZIQUxGVVAAEAkAtgIBCQBrAwCgjQYAkE4AoPc2AAQAEAUHQ0VJTElORwkAaAIFAmQ4BQJkOAUERE9XTgMJAGYCCQBpAgUCZDgAFAgFA3BtdAZhbW91bnQJAAIBAhptaW5pbXVtIHBheW1lbnQgMC4wNSBXQVZFUwMJAQIhPQIIBQNwbXQHYXNzZXRJZAUEdW5pdAkAAgECF2F0dGFjaCBXQVZFUyB0b2tlbiBvbmx5BANidXkDCQBmAgUJQW1vdW50T3V0BQtJc3N1ZUFtb3VudAkA/AcECQEHQWRkcmVzcwEFD3doaXJscG9vbFBvb2xJZAIEc3dhcAkAzAgCBQ93aGlybHBvb2xTdHJpbmcJAMwIAgkAZAIFC0lzc3VlQW1vdW50AAEFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgUEdW5pdAgFA3BtdAZhbW91bnQFA25pbAUEdW5pdAMJAAACBQNidXkFA2J1eQQVV2hpcmxwb29sQmFsYW5jZUFmdGVyCQDwBwIFBHRoaXMFCXdoaXJscG9vbAQRV2hpcmxwb29sRnJvbVN3YXAJAGUCBRVXaGlybHBvb2xCYWxhbmNlQWZ0ZXIFFldoaXJscG9vbEJhbGFuY2VCZWZvcmUJAMwIAgkBB1JlaXNzdWUDBQl3aGlybHBvb2wDCQBnAgULSXNzdWVBbW91bnQFCUFtb3VudE91dAULSXNzdWVBbW91bnQAAAYJAMwIAgMJAGYCBQlBbW91bnRPdXQFC0lzc3VlQW1vdW50CQEOU2NyaXB0VHJhbnNmZXIDCAUBaQZjYWxsZXIFEVdoaXJscG9vbEZyb21Td2FwBQl3aGlybHBvb2wJAQ5TY3JpcHRUcmFuc2ZlcgMIBQFpBmNhbGxlcgULSXNzdWVBbW91bnQFCXdoaXJscG9vbAkAzAgCCQEMSW50ZWdlckVudHJ5AgUWa2V5V2hpcmxwb29sSXNzdWVQcmljZQUFcHJpY2UJAMwIAgkBDEludGVnZXJFbnRyeQIDCQBmAgUJQW1vdW50T3V0BQtJc3N1ZUFtb3VudAIVcHJpY2UgV0hJUkxQT09ML1dBVkVTAiBXSElSTFBPT0wvV0FWRVMgbWlkIG1hcmtldCBwcmljZQMJAGYCBQlBbW91bnRPdXQFC0lzc3VlQW1vdW50CQBrAwUCZDgIBQNwbXQGYW1vdW50BRFXaGlybHBvb2xGcm9tU3dhcAkAawMFAmQ4CQBoAgUQd2F2ZXNJbldoaXJscG9vbAAJBRB3aGlybEluV2hpcmxwb29sCQDMCAIJAQxJbnRlZ2VyRW50cnkCBRNrZXlXYXZlbGV0c1JlY2VpdmVkAwkAZwIFC0lzc3VlQW1vdW50BQlBbW91bnRPdXQJAGQCCAUDcG10BmFtb3VudAkBDXRyeUdldEludGVnZXICBQR0aGlzBRNrZXlXYXZlbGV0c1JlY2VpdmVkCQENdHJ5R2V0SW50ZWdlcgIFBHRoaXMFE2tleVdhdmVsZXRzUmVjZWl2ZWQJAMwIAgkBDEludGVnZXJFbnRyeQIFFWtleVdhdmVsZXRzUmVjZWl2ZWRCVAMJAGcCBQtJc3N1ZUFtb3VudAUJQW1vdW50T3V0CQBkAgkAZQIIBQNwbXQGYW1vdW50BQdzdXJwbHVzCQENdHJ5R2V0SW50ZWdlcgIFBHRoaXMFFWtleVdhdmVsZXRzUmVjZWl2ZWRCVAkBDXRyeUdldEludGVnZXICBQR0aGlzBRVrZXlXYXZlbGV0c1JlY2VpdmVkQlQJAMwIAgkBDEludGVnZXJFbnRyeQIFEmtleVN1cnBsdXNSZWNlaXZlZAMJAGYCBQlBbW91bnRPdXQFC0lzc3VlQW1vdW50CQERQGV4dHJOYXRpdmUoMTA1MCkCBQR0aGlzBRJrZXlTdXJwbHVzUmVjZWl2ZWQJAGQCBQdzdXJwbHVzCQERQGV4dHJOYXRpdmUoMTA1MCkCBQR0aGlzBRJrZXlTdXJwbHVzUmVjZWl2ZWQFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpARVwcmljZUFuZFRyZWFzdXJ5U3RhdHMACQDMCAIJAQxJbnRlZ2VyRW50cnkCAhZCVCBXQVZFUyBpbiBFQVNUIHZhdWx0BQtXQVZFU2luRUFTVAkAzAgCCQEMSW50ZWdlckVudHJ5AgIiU1QgQlVSTi1YVE4geCBQZXBlVGVhbSBpbiB3YXZlbGV0cwkAawMJAGgCBQt3YXZlc0luUG9vbAAKBQxwcm9qZWN0U3Rha2UFCnRvdGFsU3Rha2UJAMwIAgkBDEludGVnZXJFbnRyeQICHFNUIFdISVJMUE9PTCBBTU0gaW4gd2F2ZWxldHMJAGsDCQBoAgUQd2F2ZXNJbldoaXJscG9vbAAKBRFwcm9qZWN0U3Rha2VXaGlybAUPdG90YWxTdGFrZVdoaXJsCQDMCAIJAQxJbnRlZ2VyRW50cnkCAh5TVCBXYXZlcyA1cG9vbCBBTU0gaW4gd2F2ZWxldHMJAGsDCQBoAgUNd2F2ZXNJblc1cG9vbAAFBRJwcm9qZWN0U3Rha2VXNXBvb2wFEHRvdGFsU3Rha2VXNXBvb2wJAMwIAgkBDEludGVnZXJFbnRyeQICB1NUIGVFVEgFCUVUSGluRUFTVAkAzAgCCQEMSW50ZWdlckVudHJ5AgITU1QgZUVUSCBpbiB3YXZlbGV0cwURRVRIaW5FQVNUd2F2ZWxldHMJAMwIAgkBDEludGVnZXJFbnRyeQICCVNUIFBVWlpMRQUMcHV6emxlU3Rha2VkCQDMCAIJAQxJbnRlZ2VyRW50cnkCAhVTVCBQVVpaTEUgaW4gd2F2ZWxldHMFEFBVWlpMRWluV2F2ZWxldHMJAMwIAgkBDEludGVnZXJFbnRyeQICGFNUIFdYIGluIGdXWCBpbiB3YXZlbGV0cwUMV1hpbldhdmVsZXRzCQDMCAIJAQxJbnRlZ2VyRW50cnkCAhRUb3RhbCBTVCBpbiB3YXZlbGV0cwUKdHZsSW5XYXZlcwkAzAgCCQEMSW50ZWdlckVudHJ5AgUWa2V5V2hpcmxwb29sSXNzdWVQcmljZQUFcHJpY2UJAMwIAgkBDEludGVnZXJFbnRyeQICIFdISVJMUE9PTC9XQVZFUyBtaWQgbWFya2V0IHByaWNlCQBrAwUCZDgJAGgCBRB3YXZlc0luV2hpcmxwb29sAAkFEHdoaXJsSW5XaGlybHBvb2wJAMwIAgkBDEludGVnZXJFbnRyeQICFldISVJMUE9PTCB0b3RhbCBzdXBwbHkFD3doaXJscG9vbFN1cHBseQkAzAgCCQEMSW50ZWdlckVudHJ5AgIOVG90YWwgdHJlYXN1cnkFDXRvdGFsVHJlYXN1cnkJAMwIAgkBDEludGVnZXJFbnRyeQICDU5BViBXSElSTFBPT0wJAGsDBQJkOAkAZAIFDXRvdGFsVHJlYXN1cnkJAQ10cnlHZXRJbnRlZ2VyAgUEdGhpcwUSa2V5U3VycGx1c1JlY2VpdmVkBQ93aGlybHBvb2xTdXBwbHkJAMwIAgkBDEludGVnZXJFbnRyeQICJGJ1eWJhY2smaW52ZXN0IFdISVJMUE9PTCBBTU0gPDUlIE5BVgkAawMJAGsDBQJkOAkAZAIFDXRvdGFsVHJlYXN1cnkJAQ10cnlHZXRJbnRlZ2VyAgUEdGhpcwUSa2V5U3VycGx1c1JlY2VpdmVkBQ93aGlybHBvb2xTdXBwbHkAXwBkCQDMCAIJAQxJbnRlZ2VyRW50cnkCBRNrZXlXYXZlbGV0c1JlY2VpdmVkCQENdHJ5R2V0SW50ZWdlcgIFBHRoaXMFE2tleVdhdmVsZXRzUmVjZWl2ZWQJAMwIAgkBDEludGVnZXJFbnRyeQIFEmtleVN1cnBsdXNSZWNlaXZlZAkBDXRyeUdldEludGVnZXICBQR0aGlzBRJrZXlTdXJwbHVzUmVjZWl2ZWQJAMwIAgkBDEludGVnZXJFbnRyeQIFFWtleVdhdmVsZXRzUmVjZWl2ZWRCVAkBDXRyeUdldEludGVnZXICBQR0aGlzBRVrZXlXYXZlbGV0c1JlY2VpdmVkQlQJAMwIAgkBDEludGVnZXJFbnRyeQIFEmtleVdhdmVsZXRzUGFpZE91dAkBDXRyeUdldEludGVnZXICBQR0aGlzBRJrZXlXYXZlbGV0c1BhaWRPdXQJAMwIAgkBDEludGVnZXJFbnRyeQICFHRvdGFsIFdBVkVTIHJlY2VpdmVkCQBpAgkBDXRyeUdldEludGVnZXICBQR0aGlzBRNrZXlXYXZlbGV0c1JlY2VpdmVkBQJkOAkAzAgCCQEMSW50ZWdlckVudHJ5AgIXVG90YWwgdHJlYXN1cnkgaW4gV0FWRVMJAGkCBQ10b3RhbFRyZWFzdXJ5BQJkOAkAzAgCCQEMSW50ZWdlckVudHJ5AgIZc3VycGx1cyByZWNlaXZlZCBpbiBXQVZFUwkAaQIJAQ10cnlHZXRJbnRlZ2VyAgUEdGhpcwUSa2V5U3VycGx1c1JlY2VpdmVkBQJkOAkAzAgCCQEMSW50ZWdlckVudHJ5AgImdG90YWwgV0FWRVMgcmVjZWl2ZWQgZm9yIGJhc2UgdHJlYXN1cnkJAGkCCQENdHJ5R2V0SW50ZWdlcgIFBHRoaXMFFWtleVdhdmVsZXRzUmVjZWl2ZWRCVAUCZDgJAMwIAgkBDEludGVnZXJFbnRyeQICHXRvdGFsIFdBVkVTIHBhaWQgb3V0IGluIFdBVkVTCQBpAgkBDXRyeUdldEludGVnZXICBQR0aGlzBRJrZXlXYXZlbGV0c1BhaWRPdXQFAmQ4CQDMCAIJAQxJbnRlZ2VyRW50cnkCBQZrZXlST0kJAGsDCQENdHJ5R2V0SW50ZWdlcgIFBHRoaXMFEmtleVdhdmVsZXRzUGFpZE91dACQTgkBDXRyeUdldEludGVnZXICBQR0aGlzBRNrZXlXYXZlbGV0c1JlY2VpdmVkBQNuaWwBaQEMYm9vc3RQb29sQVBZAQZhbW91bnQDCQECIT0CCAUBaQZjYWxsZXIFBHRoaXMJAAIBAhxhY2Nlc3Mgb25seSBieSBwcm9qZWN0IG93bmVyBAthbW91bnRCb29zdAkAawMJAGgCBQZhbW91bnQFAmQ4AFAAZAMJAAACBQthbW91bnRCb29zdAULYW1vdW50Qm9vc3QEB3RvV2hpcmwJAGsDBQthbW91bnRCb29zdAUQd2hpcmxJbldoaXJscG9vbAUKdG90YWxXaGlybAMJAAACBQd0b1doaXJsBQd0b1doaXJsBAV0b0JCQgkAawMFC2Ftb3VudEJvb3N0BQp3aGlybEluQkJCBQp0b3RhbFdoaXJsAwkAAAIFBXRvQkJCBQV0b0JCQgQLYW1vdW50T3duZXIJAGsDCQBoAgUGYW1vdW50BQJkOAAUAGQDCQAAAgULYW1vdW50T3duZXIFC2Ftb3VudE93bmVyBAZib29zdFcJAPwHBAkBB0FkZHJlc3MBBQtwb29sYm9vc3RTQwILYWRkQm9vc3RpbmcJAMwIAgkA2AQBBQ93aGlybHBvb2xQb29sSWQJAMwIAgAHBQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIFBHVuaXQFB3RvV2hpcmwFA25pbAMJAAACBQZib29zdFcFBmJvb3N0VwQIYm9vc3RCQkIJAPwHBAkBB0FkZHJlc3MBBQtwb29sYm9vc3RTQwILYWRkQm9vc3RpbmcJAMwIAgkA2AQBBQliYmJQb29sSWQJAMwIAgAHBQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIFBHVuaXQFBXRvQkJCBQNuaWwDCQAAAgUIYm9vc3RCQkIFCGJvb3N0QkJCBAVjbGFpbQkA/AcECQEHQWRkcmVzcwEBGgFXL67xcGkDY58tIGVFIdRxHf4xnfL4rKNiAhNjbGFpbUxveWFsdHlSZXdhcmRzBQNuaWwFA25pbAMJAAACBQVjbGFpbQUFY2xhaW0JAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwkBB0FkZHJlc3MBBQxwcm9qZWN0T3duZXIFC2Ftb3VudE93bmVyBQR1bml0CQDMCAIJAQxJbnRlZ2VyRW50cnkCBRJrZXlXYXZlbGV0c1BhaWRPdXQJAGQCBQthbW91bnRCb29zdAkBDXRyeUdldEludGVnZXICBQR0aGlzBRJrZXlXYXZlbGV0c1BhaWRPdXQJAMwIAgkBDEludGVnZXJFbnRyeQIFBmtleVJPSQkAawMJAQ10cnlHZXRJbnRlZ2VyAgUEdGhpcwUSa2V5V2F2ZWxldHNQYWlkT3V0AJBOCQENdHJ5R2V0SW50ZWdlcgIFBHRoaXMFE2tleVdhdmVsZXRzUmVjZWl2ZWQJAMwIAgkBDEludGVnZXJFbnRyeQIFDGtleUFjdGl2YXRlZAUGaGVpZ2h0BQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEPdHJhbnNmZXJQb29sQVBZAQZhbW91bnQDCQECIT0CCAUBaQZjYWxsZXIFBHRoaXMJAAIBAhxhY2Nlc3Mgb25seSBieSBwcm9qZWN0IG93bmVyBAthbW91bnRCb29zdAkAawMJAGgCBQZhbW91bnQFAmQ4AFAAZAMJAAACBQthbW91bnRCb29zdAULYW1vdW50Qm9vc3QEB3RvV2hpcmwJAGsDBQthbW91bnRCb29zdAUQd2hpcmxJbldoaXJscG9vbAUKdG90YWxXaGlybAMJAAACBQd0b1doaXJsBQd0b1doaXJsBAV0b0JCQgkAawMFC2Ftb3VudEJvb3N0BQp3aGlybEluQkJCBQp0b3RhbFdoaXJsAwkAAAIFBXRvQkJCBQV0b0JCQgQLYW1vdW50T3duZXIJAGsDCQBoAgUGYW1vdW50BQJkOAAUAGQDCQAAAgULYW1vdW50T3duZXIFC2Ftb3VudE93bmVyBAVjbGFpbQkA/AcECQEHQWRkcmVzcwEBGgFXL67xcGkDY58tIGVFIdRxHf4xnfL4rKNiAhNjbGFpbUxveWFsdHlSZXdhcmRzBQNuaWwFA25pbAMJAAACBQVjbGFpbQUFY2xhaW0JAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwkBB0FkZHJlc3MBBQ93aGlybHBvb2xQb29sSWQFB3RvV2hpcmwFBHVuaXQJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwkBB0FkZHJlc3MBBQliYmJQb29sSWQFBXRvQkJCBQR1bml0CQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMJAQdBZGRyZXNzAQUMcHJvamVjdE93bmVyBQthbW91bnRPd25lcgUEdW5pdAkAzAgCCQEMSW50ZWdlckVudHJ5AgUSa2V5V2F2ZWxldHNQYWlkT3V0CQBkAgULYW1vdW50Qm9vc3QJAQ10cnlHZXRJbnRlZ2VyAgUEdGhpcwUSa2V5V2F2ZWxldHNQYWlkT3V0CQDMCAIJAQxJbnRlZ2VyRW50cnkCBQZrZXlST0kJAGsDCQENdHJ5R2V0SW50ZWdlcgIFBHRoaXMFEmtleVdhdmVsZXRzUGFpZE91dACQTgkBDXRyeUdldEludGVnZXICBQR0aGlzBRNrZXlXYXZlbGV0c1JlY2VpdmVkCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQxrZXlBY3RpdmF0ZWQFBmhlaWdodAUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBD3N1cnBsdXNJbnZlc3RlZAELYW1vdW50V0FWRVMDCQECIT0CCAUBaQZjYWxsZXIFBHRoaXMJAAIBAhxhY2Nlc3Mgb25seSBieSBwcm9qZWN0IG93bmVyBA5pbnZlc3RlZEFtb3VudAkAaAIFC2Ftb3VudFdBVkVTBQJkOAkAzAgCCQEMSW50ZWdlckVudHJ5AgUSa2V5U3VycGx1c1JlY2VpdmVkCQBlAgkBDXRyeUdldEludGVnZXICBQR0aGlzBRJrZXlTdXJwbHVzUmVjZWl2ZWQFDmludmVzdGVkQW1vdW50BQNuaWwBaQEId2l0aGRyYXcAAwkBAiE9AggFAWkGY2FsbGVyCQEHQWRkcmVzcwEBGgFXGIkbJG0v4kSlsrku0GQjUC4p33Iw2jJZCQACAQIJbm8gYWNjZXNzBAh3aXRoZHJhdwkA/AcECQEHQWRkcmVzcwEBGgFXdRLdk4IPW94ldhU5y0nVH1MoCcTocV4nAhV3aXRoZHJhd1Zlc3RlZEFsbFVTRE4JAMwIAgcJAMwIAgYFA25pbAUDbmlsAwkAAAIFCHdpdGhkcmF3BQh3aXRoZHJhdwUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAQJ0eAEGdmVyaWZ5AAMJAMUTAwgFAnR4CWJvZHlCeXRlcwkAkQMCCAUCdHgGcHJvb2ZzAAAIBQJ0eA9zZW5kZXJQdWJsaWNLZXkGAwkAZgIJAGQCCQERQGV4dHJOYXRpdmUoMTA1MCkCBQR0aGlzBQxrZXlBY3RpdmF0ZWQFC3VubG9ja0Jsb2NrBQZoZWlnaHQHAwkAxRMDCAUCdHgJYm9keUJ5dGVzCQCRAwIIBQJ0eAZwcm9vZnMAAAUKaGVpclB1YktleQYDCQBmAgkAZAIJARFAZXh0ck5hdGl2ZSgxMDUwKQIFBHRoaXMFDGtleUFjdGl2YXRlZAUMdW5sb2NrQmxvY2syBQZoZWlnaHQHCQDFEwMIBQJ0eAlib2R5Qnl0ZXMJAJEDAggFAnR4BnByb29mcwAABRJQdXp6bGVNYXN0ZXJQdWJLZXnYHnaS", "height": 4080260, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: GG95N1r4Hwjh3idZRKDnaun9tHqZieebCaSLxL2KKLVP Next: DxdCdKm4iv9JVee7SAMQEiaBX3KYfSSKgrWST7gD8LmE Diff:
Old | New | Differences | |
---|---|---|---|
153 | 153 | ||
154 | 154 | let WAVESinEAST = parseIntValue(split(keyVaultAsset, "__")[2]) | |
155 | 155 | ||
156 | - | let | |
156 | + | let keyVaultAsset2 = tryGetString(Address(base58'3PMtGnf3LXiEG6isDQLq1xMDKUqjQGqNHLb'), (("%s%s%s__vault__" + toString(this)) + "__3VuV5WTmDz47Dmdn3QpcYjzbSdipjQE4JMdNe1xZpX13")) | |
157 | 157 | ||
158 | - | let | |
158 | + | let ETHinEAST = parseIntValue(split(keyVaultAsset2, "__")[2]) | |
159 | 159 | ||
160 | - | let ETHatokenTotal = tryGetInteger(dAppaddress, "aTokenCirculation") | |
161 | - | ||
162 | - | let ETHtotalReserve = parseIntValue(split(tryGetString(dAppaddress, "reserveGlobalData"), "|")[1]) | |
163 | - | ||
164 | - | let ETHinVires = fraction(ETHatoken, ETHtotalReserve, ETHatokenTotal) | |
165 | - | ||
166 | - | let ETHinViresWavelets = fraction(ETHinVires, ethWaves, d8) | |
160 | + | let ETHinEASTwavelets = fraction(ETHinEAST, ethWaves, d8) | |
167 | 161 | ||
168 | 162 | let puzzleStaking = Address(base58'3PFTbywqxtFfukX3HyT881g4iW5K4QL3FAS') | |
169 | 163 | ||
179 | 173 | ||
180 | 174 | let WXinWavelets = fraction(WXamount, wxWaves, d8) | |
181 | 175 | ||
182 | - | let tvlInWaves = (((((fraction((wavesInPool * 10), projectStake, totalStake) + fraction((wavesInWhirlpool * 10), projectStakeWhirl, totalStakeWhirl)) + | |
176 | + | let tvlInWaves = (((((fraction((wavesInPool * 10), projectStake, totalStake) + fraction((wavesInWhirlpool * 10), projectStakeWhirl, totalStakeWhirl)) + ETHinEASTwavelets) + PUZZLEinWavelets) + fraction((wavesInW5pool * 5), projectStakeW5pool, totalStakeW5pool)) + WXinWavelets) | |
183 | 177 | ||
184 | 178 | let totalBT = WAVESinEAST | |
185 | 179 | ||
245 | 239 | ||
246 | 240 | ||
247 | 241 | @Callable(i) | |
248 | - | func priceAndTreasuryStats () = [IntegerEntry("BT WAVES in EAST vault", WAVESinEAST), IntegerEntry("ST BURN-XTN x PepeTeam in wavelets", fraction((wavesInPool * 10), projectStake, totalStake)), IntegerEntry("ST WHIRLPOOL AMM in wavelets", fraction((wavesInWhirlpool * 10), projectStakeWhirl, totalStakeWhirl)), IntegerEntry("ST Waves 5pool AMM in wavelets", fraction((wavesInW5pool * 5), projectStakeW5pool, totalStakeW5pool)), IntegerEntry("ST | |
242 | + | func priceAndTreasuryStats () = [IntegerEntry("BT WAVES in EAST vault", WAVESinEAST), IntegerEntry("ST BURN-XTN x PepeTeam in wavelets", fraction((wavesInPool * 10), projectStake, totalStake)), IntegerEntry("ST WHIRLPOOL AMM in wavelets", fraction((wavesInWhirlpool * 10), projectStakeWhirl, totalStakeWhirl)), IntegerEntry("ST Waves 5pool AMM in wavelets", fraction((wavesInW5pool * 5), projectStakeW5pool, totalStakeW5pool)), IntegerEntry("ST eETH", ETHinEAST), IntegerEntry("ST eETH in wavelets", ETHinEASTwavelets), IntegerEntry("ST PUZZLE", puzzleStaked), IntegerEntry("ST PUZZLE in wavelets", PUZZLEinWavelets), IntegerEntry("ST WX in gWX in wavelets", WXinWavelets), IntegerEntry("Total ST in wavelets", tvlInWaves), IntegerEntry(keyWhirlpoolIssuePrice, price), IntegerEntry("WHIRLPOOL/WAVES mid market price", fraction(d8, (wavesInWhirlpool * 9), whirlInWhirlpool)), IntegerEntry("WHIRLPOOL total supply", whirlpoolSupply), IntegerEntry("Total treasury", totalTreasury), IntegerEntry("NAV WHIRLPOOL", fraction(d8, (totalTreasury + tryGetInteger(this, keySurplusReceived)), whirlpoolSupply)), IntegerEntry("buyback&invest WHIRLPOOL AMM <5% NAV", fraction(fraction(d8, (totalTreasury + tryGetInteger(this, keySurplusReceived)), whirlpoolSupply), 95, 100)), IntegerEntry(keyWaveletsReceived, tryGetInteger(this, keyWaveletsReceived)), IntegerEntry(keySurplusReceived, tryGetInteger(this, keySurplusReceived)), IntegerEntry(keyWaveletsReceivedBT, tryGetInteger(this, keyWaveletsReceivedBT)), IntegerEntry(keyWaveletsPaidOut, tryGetInteger(this, keyWaveletsPaidOut)), IntegerEntry("total WAVES received", (tryGetInteger(this, keyWaveletsReceived) / d8)), IntegerEntry("Total treasury in WAVES", (totalTreasury / d8)), IntegerEntry("surplus received in WAVES", (tryGetInteger(this, keySurplusReceived) / d8)), IntegerEntry("total WAVES received for base treasury", (tryGetInteger(this, keyWaveletsReceivedBT) / d8)), IntegerEntry("total WAVES paid out in WAVES", (tryGetInteger(this, keyWaveletsPaidOut) / d8)), IntegerEntry(keyROI, fraction(tryGetInteger(this, keyWaveletsPaidOut), 10000, tryGetInteger(this, keyWaveletsReceived)))] | |
249 | 243 | ||
250 | 244 | ||
251 | 245 |
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 | func tryGetString (address,key) = match getString(address, key) { | |
13 | 13 | case b: String => | |
14 | 14 | b | |
15 | 15 | case _ => | |
16 | 16 | "" | |
17 | 17 | } | |
18 | 18 | ||
19 | 19 | ||
20 | 20 | let d8 = 100000000 | |
21 | 21 | ||
22 | 22 | let unlockBlock = (30 * 1440) | |
23 | 23 | ||
24 | 24 | let heirPubKey = base58'2kpmuzw1ZbrtgAN3BrR7vbEW1XrJoJKCstL7mf7XNf2P' | |
25 | 25 | ||
26 | 26 | let unlockBlock2 = (90 * 1440) | |
27 | 27 | ||
28 | 28 | let PuzzleMasterPubKey = base58'4z8CKSYQBKkzx7PBb5uBP1YPa6YAHRNTApW1sQVHT5eU' | |
29 | 29 | ||
30 | 30 | let keyActivated = "Activated blockheight" | |
31 | 31 | ||
32 | 32 | let keySurplusReceived = "surplus received in wavelets" | |
33 | 33 | ||
34 | 34 | let keyWaveletsReceived = "total WAVES received in wavelets" | |
35 | 35 | ||
36 | 36 | let keyWaveletsReceivedBT = "total wavelets received for base treasury" | |
37 | 37 | ||
38 | 38 | let keyWaveletsPaidOut = "total WAVES paid out in wavelets" | |
39 | 39 | ||
40 | 40 | let keyROI = "ROI basis points" | |
41 | 41 | ||
42 | 42 | let keyWhirlpoolIssuePrice = "WHIRLPOOL issue price in wavelets" | |
43 | 43 | ||
44 | 44 | let burnxtnPPTpoolId = base58'3PQHndCUVrv3wBuQjbvVP9SnGmfbfitGxfx' | |
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 waves5poolId = base58'3PCpjLGo4wDuv23kjmGF6mHs86Bf3soYvAq' | |
53 | 53 | ||
54 | 54 | let whirlpool = base58'73tY3E6Gd5AWYmsuq8m8Kek7KnJNAYyS3GoveTbc6jCi' | |
55 | 55 | ||
56 | 56 | let whirlpoolString = toBase58String(base58'73tY3E6Gd5AWYmsuq8m8Kek7KnJNAYyS3GoveTbc6jCi') | |
57 | 57 | ||
58 | 58 | let waves = base58'WAVES' | |
59 | 59 | ||
60 | 60 | let eth = base58'3VuV5WTmDz47Dmdn3QpcYjzbSdipjQE4JMdNe1xZpX13' | |
61 | 61 | ||
62 | 62 | let swaves = base58'YiNbofFzC17jEHHCMwrRcpy9MrrjabMMLZxg8g5xmf7' | |
63 | 63 | ||
64 | 64 | let puzzle = base58'HEB8Qaw9xrWpWs8tHsiATYGBWDBtP2S7kcPALrMu43AS' | |
65 | 65 | ||
66 | 66 | let wx = base58'Atqv59EYzjFGuitKVnMRk6H8FukjoV3ktPorbEys25on' | |
67 | 67 | ||
68 | 68 | let poolboostSC = base58'3P8eeDzUnoDNbQjW617pAe76cEUDQsP1m1V' | |
69 | 69 | ||
70 | 70 | let SWAVES_stake = Address(base58'3PDPzZVLhN1EuzGy4xAxjjTVkawKDLEaHiV') | |
71 | 71 | ||
72 | 72 | let WX_ETH_WAVES = Address(base58'3P2yiVnK48evTLr8MAZWavpE4WA4fw1weQg') | |
73 | 73 | ||
74 | 74 | let WX_PUZZLE_WAVES = Address(base58'3PQaYm4pbRVrNTTnL8pDJZTxhcmD4jRskrz') | |
75 | 75 | ||
76 | 76 | let WX_WX_WAVES = Address(base58'3PFzaH2ghpwANHFgjeva83N1yxzErELx2eh') | |
77 | 77 | ||
78 | 78 | let wavesInPool = tryGetInteger(Address(burnxtnPPTpoolId), (("global_" + toBase58String(waves)) + "_balance")) | |
79 | 79 | ||
80 | 80 | let projectStake = tryGetInteger(Address(burnxtnPPTpoolId), (toString(this) + "_indexStaked")) | |
81 | 81 | ||
82 | 82 | let totalStake = tryGetInteger(Address(burnxtnPPTpoolId), "global_poolToken_amount") | |
83 | 83 | ||
84 | 84 | func _loadInt (key_,default_) = match getInteger(SWAVES_stake, key_) { | |
85 | 85 | case a: Int => | |
86 | 86 | a | |
87 | 87 | case _ => | |
88 | 88 | default_ | |
89 | 89 | } | |
90 | 90 | ||
91 | 91 | ||
92 | 92 | func _loadBigInt (key_,default_) = match getBinary(SWAVES_stake, key_) { | |
93 | 93 | case a: ByteVector => | |
94 | 94 | toBigInt(a) | |
95 | 95 | case _ => | |
96 | 96 | default_ | |
97 | 97 | } | |
98 | 98 | ||
99 | 99 | ||
100 | 100 | let lastRate = _loadBigInt("LAST_RATE", toBigInt(1000000000000)) | |
101 | 101 | ||
102 | 102 | let currentRate = _loadBigInt("CURRENT_RATE", toBigInt(0)) | |
103 | 103 | ||
104 | 104 | let lastHeight = _loadInt("LAST_HEIGHT", 0) | |
105 | 105 | ||
106 | 106 | let targetHeight = min([_loadInt("TARGET_HEIGHT", 0), height]) | |
107 | 107 | ||
108 | 108 | let lastRateUpdated = (lastRate + (currentRate * toBigInt((targetHeight - lastHeight)))) | |
109 | 109 | ||
110 | 110 | let baseAmount2 = toInt(fraction(toBigInt(assetBalance(WX_ETH_WAVES, swaves)), lastRateUpdated, toBigInt(1000000000000), FLOOR)) | |
111 | 111 | ||
112 | 112 | let baseAmount3 = toInt(fraction(toBigInt(assetBalance(WX_PUZZLE_WAVES, swaves)), lastRateUpdated, toBigInt(1000000000000), FLOOR)) | |
113 | 113 | ||
114 | 114 | let baseAmount4 = toInt(fraction(toBigInt(assetBalance(WX_WX_WAVES, swaves)), lastRateUpdated, toBigInt(1000000000000), FLOOR)) | |
115 | 115 | ||
116 | 116 | let waves2InWX = (wavesBalance(WX_ETH_WAVES).regular + baseAmount2) | |
117 | 117 | ||
118 | 118 | let ethInWX = assetBalance(WX_ETH_WAVES, eth) | |
119 | 119 | ||
120 | 120 | let ethWaves = fraction(d8, waves2InWX, ethInWX) | |
121 | 121 | ||
122 | 122 | let puzzleInWX = assetBalance(WX_PUZZLE_WAVES, puzzle) | |
123 | 123 | ||
124 | 124 | let waves3InWX = (wavesBalance(WX_PUZZLE_WAVES).regular + baseAmount3) | |
125 | 125 | ||
126 | 126 | let puzzleWaves = fraction(d8, waves3InWX, puzzleInWX) | |
127 | 127 | ||
128 | 128 | let wxInWX = assetBalance(WX_WX_WAVES, wx) | |
129 | 129 | ||
130 | 130 | let waves4InWX = (wavesBalance(WX_WX_WAVES).regular + baseAmount4) | |
131 | 131 | ||
132 | 132 | let wxWaves = fraction(d8, waves4InWX, wxInWX) | |
133 | 133 | ||
134 | 134 | let wavesInWhirlpool = tryGetInteger(Address(whirlpoolPoolId), (("global_" + toBase58String(waves)) + "_balance")) | |
135 | 135 | ||
136 | 136 | let whirlInWhirlpool = tryGetInteger(Address(whirlpoolPoolId), (("global_" + whirlpoolString) + "_balance")) | |
137 | 137 | ||
138 | 138 | let projectStakeWhirl = tryGetInteger(Address(whirlpoolPoolId), (toString(this) + "_indexStaked")) | |
139 | 139 | ||
140 | 140 | let totalStakeWhirl = tryGetInteger(Address(whirlpoolPoolId), "global_poolToken_amount") | |
141 | 141 | ||
142 | 142 | let whirlInBBB = tryGetInteger(Address(bbbPoolId), (("global_" + whirlpoolString) + "_balance")) | |
143 | 143 | ||
144 | 144 | let totalWhirl = (whirlInWhirlpool + whirlInBBB) | |
145 | 145 | ||
146 | 146 | let wavesInW5pool = tryGetInteger(Address(waves5poolId), (("global_" + toBase58String(waves)) + "_balance")) | |
147 | 147 | ||
148 | 148 | let projectStakeW5pool = tryGetInteger(Address(waves5poolId), (toString(this) + "_indexStaked")) | |
149 | 149 | ||
150 | 150 | let totalStakeW5pool = tryGetInteger(Address(waves5poolId), "global_poolToken_amount") | |
151 | 151 | ||
152 | 152 | let keyVaultAsset = tryGetString(Address(base58'3PMtGnf3LXiEG6isDQLq1xMDKUqjQGqNHLb'), (("%s%s%s__vault__" + toString(this)) + "__WAVES")) | |
153 | 153 | ||
154 | 154 | let WAVESinEAST = parseIntValue(split(keyVaultAsset, "__")[2]) | |
155 | 155 | ||
156 | - | let | |
156 | + | let keyVaultAsset2 = tryGetString(Address(base58'3PMtGnf3LXiEG6isDQLq1xMDKUqjQGqNHLb'), (("%s%s%s__vault__" + toString(this)) + "__3VuV5WTmDz47Dmdn3QpcYjzbSdipjQE4JMdNe1xZpX13")) | |
157 | 157 | ||
158 | - | let | |
158 | + | let ETHinEAST = parseIntValue(split(keyVaultAsset2, "__")[2]) | |
159 | 159 | ||
160 | - | let ETHatokenTotal = tryGetInteger(dAppaddress, "aTokenCirculation") | |
161 | - | ||
162 | - | let ETHtotalReserve = parseIntValue(split(tryGetString(dAppaddress, "reserveGlobalData"), "|")[1]) | |
163 | - | ||
164 | - | let ETHinVires = fraction(ETHatoken, ETHtotalReserve, ETHatokenTotal) | |
165 | - | ||
166 | - | let ETHinViresWavelets = fraction(ETHinVires, ethWaves, d8) | |
160 | + | let ETHinEASTwavelets = fraction(ETHinEAST, ethWaves, d8) | |
167 | 161 | ||
168 | 162 | let puzzleStaking = Address(base58'3PFTbywqxtFfukX3HyT881g4iW5K4QL3FAS') | |
169 | 163 | ||
170 | 164 | let puzzleStaked = tryGetInteger(puzzleStaking, (toString(this) + "_staked")) | |
171 | 165 | ||
172 | 166 | let PUZZLEinWavelets = fraction(puzzleStaked, puzzleWaves, d8) | |
173 | 167 | ||
174 | 168 | let WXstaking = Address(base58'3PJL8Hn8LACaSBWLQ3UVhctA5cTQLBFwBAP') | |
175 | 169 | ||
176 | 170 | let keyWX = "%s%d%s__paramByUserNum__13445__amount" | |
177 | 171 | ||
178 | 172 | let WXamount = tryGetInteger(WXstaking, keyWX) | |
179 | 173 | ||
180 | 174 | let WXinWavelets = fraction(WXamount, wxWaves, d8) | |
181 | 175 | ||
182 | - | let tvlInWaves = (((((fraction((wavesInPool * 10), projectStake, totalStake) + fraction((wavesInWhirlpool * 10), projectStakeWhirl, totalStakeWhirl)) + | |
176 | + | let tvlInWaves = (((((fraction((wavesInPool * 10), projectStake, totalStake) + fraction((wavesInWhirlpool * 10), projectStakeWhirl, totalStakeWhirl)) + ETHinEASTwavelets) + PUZZLEinWavelets) + fraction((wavesInW5pool * 5), projectStakeW5pool, totalStakeW5pool)) + WXinWavelets) | |
183 | 177 | ||
184 | 178 | let totalBT = WAVESinEAST | |
185 | 179 | ||
186 | 180 | let totalTreasury = (totalBT + tvlInWaves) | |
187 | 181 | ||
188 | 182 | let whirlpoolSupply = match assetInfo(whirlpool) { | |
189 | 183 | case asset: Asset => | |
190 | 184 | asset.quantity | |
191 | 185 | case _ => | |
192 | 186 | throw("Can't find asset") | |
193 | 187 | } | |
194 | 188 | ||
195 | 189 | let price = if (((fraction((tvlInWaves + tryGetInteger(this, keySurplusReceived)), d8, whirlpoolSupply) + d8) >= tryGetInteger(this, keyWhirlpoolIssuePrice))) | |
196 | 190 | then (fraction((tvlInWaves + tryGetInteger(this, keySurplusReceived)), d8, whirlpoolSupply) + d8) | |
197 | 191 | else tryGetInteger(this, keyWhirlpoolIssuePrice) | |
198 | 192 | ||
199 | 193 | @Callable(i) | |
200 | 194 | func buyWHIRLPOOLwithWAVES () = { | |
201 | 195 | let WhirlpoolBalanceBefore = assetBalance(this, whirlpool) | |
202 | 196 | if ((WhirlpoolBalanceBefore == WhirlpoolBalanceBefore)) | |
203 | 197 | then { | |
204 | 198 | let pmt = value(i.payments[0]) | |
205 | 199 | let surplus = fraction((price - d8), pmt.amount, d8) | |
206 | 200 | let IssueAmount = if ((pmt.amount >= fraction(pmt.amount, d8, price))) | |
207 | 201 | then fraction(pmt.amount, d8, price) | |
208 | 202 | else throw("please contact project owner: issue amount error") | |
209 | 203 | let cleanAmountIn = (pmt.amount - fraction(pmt.amount, 200, 10000)) | |
210 | 204 | let AmountOut = fraction(whirlInWhirlpool, ((d8 * d8) - toInt(pow(fraction(toBigInt(wavesInWhirlpool), toBigInt((d8 * d8)), toBigInt((wavesInWhirlpool + cleanAmountIn)), HALFUP), 16, toBigInt(fraction(100000, 10000, 900000)), 4, 16, CEILING))), (d8 * d8), DOWN) | |
211 | 205 | if (((d8 / 20) > pmt.amount)) | |
212 | 206 | then throw("minimum payment 0.05 WAVES") | |
213 | 207 | else if ((pmt.assetId != unit)) | |
214 | 208 | then throw("attach WAVES token only") | |
215 | 209 | else { | |
216 | 210 | let buy = if ((AmountOut > IssueAmount)) | |
217 | 211 | then invoke(Address(whirlpoolPoolId), "swap", [whirlpoolString, (IssueAmount + 1)], [AttachedPayment(unit, pmt.amount)]) | |
218 | 212 | else unit | |
219 | 213 | if ((buy == buy)) | |
220 | 214 | then { | |
221 | 215 | let WhirlpoolBalanceAfter = assetBalance(this, whirlpool) | |
222 | 216 | let WhirlpoolFromSwap = (WhirlpoolBalanceAfter - WhirlpoolBalanceBefore) | |
223 | 217 | [Reissue(whirlpool, if ((IssueAmount >= AmountOut)) | |
224 | 218 | then IssueAmount | |
225 | 219 | else 0, true), if ((AmountOut > IssueAmount)) | |
226 | 220 | then ScriptTransfer(i.caller, WhirlpoolFromSwap, whirlpool) | |
227 | 221 | else ScriptTransfer(i.caller, IssueAmount, whirlpool), IntegerEntry(keyWhirlpoolIssuePrice, price), IntegerEntry(if ((AmountOut > IssueAmount)) | |
228 | 222 | then "price WHIRLPOOL/WAVES" | |
229 | 223 | else "WHIRLPOOL/WAVES mid market price", if ((AmountOut > IssueAmount)) | |
230 | 224 | then fraction(d8, pmt.amount, WhirlpoolFromSwap) | |
231 | 225 | else fraction(d8, (wavesInWhirlpool * 9), whirlInWhirlpool)), IntegerEntry(keyWaveletsReceived, if ((IssueAmount >= AmountOut)) | |
232 | 226 | then (pmt.amount + tryGetInteger(this, keyWaveletsReceived)) | |
233 | 227 | else tryGetInteger(this, keyWaveletsReceived)), IntegerEntry(keyWaveletsReceivedBT, if ((IssueAmount >= AmountOut)) | |
234 | 228 | then ((pmt.amount - surplus) + tryGetInteger(this, keyWaveletsReceivedBT)) | |
235 | 229 | else tryGetInteger(this, keyWaveletsReceivedBT)), IntegerEntry(keySurplusReceived, if ((AmountOut > IssueAmount)) | |
236 | 230 | then getIntegerValue(this, keySurplusReceived) | |
237 | 231 | else (surplus + getIntegerValue(this, keySurplusReceived)))] | |
238 | 232 | } | |
239 | 233 | else throw("Strict value is not equal to itself.") | |
240 | 234 | } | |
241 | 235 | } | |
242 | 236 | else throw("Strict value is not equal to itself.") | |
243 | 237 | } | |
244 | 238 | ||
245 | 239 | ||
246 | 240 | ||
247 | 241 | @Callable(i) | |
248 | - | func priceAndTreasuryStats () = [IntegerEntry("BT WAVES in EAST vault", WAVESinEAST), IntegerEntry("ST BURN-XTN x PepeTeam in wavelets", fraction((wavesInPool * 10), projectStake, totalStake)), IntegerEntry("ST WHIRLPOOL AMM in wavelets", fraction((wavesInWhirlpool * 10), projectStakeWhirl, totalStakeWhirl)), IntegerEntry("ST Waves 5pool AMM in wavelets", fraction((wavesInW5pool * 5), projectStakeW5pool, totalStakeW5pool)), IntegerEntry("ST | |
242 | + | func priceAndTreasuryStats () = [IntegerEntry("BT WAVES in EAST vault", WAVESinEAST), IntegerEntry("ST BURN-XTN x PepeTeam in wavelets", fraction((wavesInPool * 10), projectStake, totalStake)), IntegerEntry("ST WHIRLPOOL AMM in wavelets", fraction((wavesInWhirlpool * 10), projectStakeWhirl, totalStakeWhirl)), IntegerEntry("ST Waves 5pool AMM in wavelets", fraction((wavesInW5pool * 5), projectStakeW5pool, totalStakeW5pool)), IntegerEntry("ST eETH", ETHinEAST), IntegerEntry("ST eETH in wavelets", ETHinEASTwavelets), IntegerEntry("ST PUZZLE", puzzleStaked), IntegerEntry("ST PUZZLE in wavelets", PUZZLEinWavelets), IntegerEntry("ST WX in gWX in wavelets", WXinWavelets), IntegerEntry("Total ST in wavelets", tvlInWaves), IntegerEntry(keyWhirlpoolIssuePrice, price), IntegerEntry("WHIRLPOOL/WAVES mid market price", fraction(d8, (wavesInWhirlpool * 9), whirlInWhirlpool)), IntegerEntry("WHIRLPOOL total supply", whirlpoolSupply), IntegerEntry("Total treasury", totalTreasury), IntegerEntry("NAV WHIRLPOOL", fraction(d8, (totalTreasury + tryGetInteger(this, keySurplusReceived)), whirlpoolSupply)), IntegerEntry("buyback&invest WHIRLPOOL AMM <5% NAV", fraction(fraction(d8, (totalTreasury + tryGetInteger(this, keySurplusReceived)), whirlpoolSupply), 95, 100)), IntegerEntry(keyWaveletsReceived, tryGetInteger(this, keyWaveletsReceived)), IntegerEntry(keySurplusReceived, tryGetInteger(this, keySurplusReceived)), IntegerEntry(keyWaveletsReceivedBT, tryGetInteger(this, keyWaveletsReceivedBT)), IntegerEntry(keyWaveletsPaidOut, tryGetInteger(this, keyWaveletsPaidOut)), IntegerEntry("total WAVES received", (tryGetInteger(this, keyWaveletsReceived) / d8)), IntegerEntry("Total treasury in WAVES", (totalTreasury / d8)), IntegerEntry("surplus received in WAVES", (tryGetInteger(this, keySurplusReceived) / d8)), IntegerEntry("total WAVES received for base treasury", (tryGetInteger(this, keyWaveletsReceivedBT) / d8)), IntegerEntry("total WAVES paid out in WAVES", (tryGetInteger(this, keyWaveletsPaidOut) / d8)), IntegerEntry(keyROI, fraction(tryGetInteger(this, keyWaveletsPaidOut), 10000, tryGetInteger(this, keyWaveletsReceived)))] | |
249 | 243 | ||
250 | 244 | ||
251 | 245 | ||
252 | 246 | @Callable(i) | |
253 | 247 | func boostPoolAPY (amount) = if ((i.caller != this)) | |
254 | 248 | then throw("access only by project owner") | |
255 | 249 | else { | |
256 | 250 | let amountBoost = fraction((amount * d8), 80, 100) | |
257 | 251 | if ((amountBoost == amountBoost)) | |
258 | 252 | then { | |
259 | 253 | let toWhirl = fraction(amountBoost, whirlInWhirlpool, totalWhirl) | |
260 | 254 | if ((toWhirl == toWhirl)) | |
261 | 255 | then { | |
262 | 256 | let toBBB = fraction(amountBoost, whirlInBBB, totalWhirl) | |
263 | 257 | if ((toBBB == toBBB)) | |
264 | 258 | then { | |
265 | 259 | let amountOwner = fraction((amount * d8), 20, 100) | |
266 | 260 | if ((amountOwner == amountOwner)) | |
267 | 261 | then { | |
268 | 262 | let boostW = invoke(Address(poolboostSC), "addBoosting", [toBase58String(whirlpoolPoolId), 7], [AttachedPayment(unit, toWhirl)]) | |
269 | 263 | if ((boostW == boostW)) | |
270 | 264 | then { | |
271 | 265 | let boostBBB = invoke(Address(poolboostSC), "addBoosting", [toBase58String(bbbPoolId), 7], [AttachedPayment(unit, toBBB)]) | |
272 | 266 | if ((boostBBB == boostBBB)) | |
273 | 267 | then { | |
274 | 268 | let claim = invoke(Address(base58'3P6H24XKLyRX8RKwyA5ARsChE6WhjDcVBiZ'), "claimLoyaltyRewards", nil, nil) | |
275 | 269 | if ((claim == claim)) | |
276 | 270 | 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)] | |
277 | 271 | else throw("Strict value is not equal to itself.") | |
278 | 272 | } | |
279 | 273 | else throw("Strict value is not equal to itself.") | |
280 | 274 | } | |
281 | 275 | else throw("Strict value is not equal to itself.") | |
282 | 276 | } | |
283 | 277 | else throw("Strict value is not equal to itself.") | |
284 | 278 | } | |
285 | 279 | else throw("Strict value is not equal to itself.") | |
286 | 280 | } | |
287 | 281 | else throw("Strict value is not equal to itself.") | |
288 | 282 | } | |
289 | 283 | else throw("Strict value is not equal to itself.") | |
290 | 284 | } | |
291 | 285 | ||
292 | 286 | ||
293 | 287 | ||
294 | 288 | @Callable(i) | |
295 | 289 | func transferPoolAPY (amount) = if ((i.caller != this)) | |
296 | 290 | then throw("access only by project owner") | |
297 | 291 | else { | |
298 | 292 | let amountBoost = fraction((amount * d8), 80, 100) | |
299 | 293 | if ((amountBoost == amountBoost)) | |
300 | 294 | then { | |
301 | 295 | let toWhirl = fraction(amountBoost, whirlInWhirlpool, totalWhirl) | |
302 | 296 | if ((toWhirl == toWhirl)) | |
303 | 297 | then { | |
304 | 298 | let toBBB = fraction(amountBoost, whirlInBBB, totalWhirl) | |
305 | 299 | if ((toBBB == toBBB)) | |
306 | 300 | then { | |
307 | 301 | let amountOwner = fraction((amount * d8), 20, 100) | |
308 | 302 | if ((amountOwner == amountOwner)) | |
309 | 303 | then { | |
310 | 304 | let claim = invoke(Address(base58'3P6H24XKLyRX8RKwyA5ARsChE6WhjDcVBiZ'), "claimLoyaltyRewards", nil, nil) | |
311 | 305 | if ((claim == claim)) | |
312 | 306 | then [ScriptTransfer(Address(whirlpoolPoolId), toWhirl, unit), ScriptTransfer(Address(bbbPoolId), toBBB, unit), ScriptTransfer(Address(projectOwner), amountOwner, unit), IntegerEntry(keyWaveletsPaidOut, (amountBoost + tryGetInteger(this, keyWaveletsPaidOut))), IntegerEntry(keyROI, fraction(tryGetInteger(this, keyWaveletsPaidOut), 10000, tryGetInteger(this, keyWaveletsReceived))), IntegerEntry(keyActivated, height)] | |
313 | 307 | else throw("Strict value is not equal to itself.") | |
314 | 308 | } | |
315 | 309 | else throw("Strict value is not equal to itself.") | |
316 | 310 | } | |
317 | 311 | else throw("Strict value is not equal to itself.") | |
318 | 312 | } | |
319 | 313 | else throw("Strict value is not equal to itself.") | |
320 | 314 | } | |
321 | 315 | else throw("Strict value is not equal to itself.") | |
322 | 316 | } | |
323 | 317 | ||
324 | 318 | ||
325 | 319 | ||
326 | 320 | @Callable(i) | |
327 | 321 | func surplusInvested (amountWAVES) = if ((i.caller != this)) | |
328 | 322 | then throw("access only by project owner") | |
329 | 323 | else { | |
330 | 324 | let investedAmount = (amountWAVES * d8) | |
331 | 325 | [IntegerEntry(keySurplusReceived, (tryGetInteger(this, keySurplusReceived) - investedAmount))] | |
332 | 326 | } | |
333 | 327 | ||
334 | 328 | ||
335 | 329 | ||
336 | 330 | @Callable(i) | |
337 | 331 | func withdraw () = if ((i.caller != Address(base58'3P4AdC9J6MzTEi2LL9xgQN8EimMnbk4d6Nt'))) | |
338 | 332 | then throw("no access") | |
339 | 333 | else { | |
340 | 334 | let withdraw = invoke(Address(base58'3PCbvPVQfSvVu88ip8Fm5YjwJhjEYk1Txhk'), "withdrawVestedAllUSDN", [false, true], nil) | |
341 | 335 | if ((withdraw == withdraw)) | |
342 | 336 | then nil | |
343 | 337 | else throw("Strict value is not equal to itself.") | |
344 | 338 | } | |
345 | 339 | ||
346 | 340 | ||
347 | 341 | @Verifier(tx) | |
348 | 342 | func verify () = if (sigVerify_16Kb(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey)) | |
349 | 343 | then true | |
350 | 344 | else if (((getIntegerValue(this, keyActivated) + unlockBlock) > height)) | |
351 | 345 | then false | |
352 | 346 | else if (sigVerify_16Kb(tx.bodyBytes, tx.proofs[0], heirPubKey)) | |
353 | 347 | then true | |
354 | 348 | else if (((getIntegerValue(this, keyActivated) + unlockBlock2) > height)) | |
355 | 349 | then false | |
356 | 350 | else sigVerify_16Kb(tx.bodyBytes, tx.proofs[0], PuzzleMasterPubKey) | |
357 | 351 |
github/deemru/w8io/3ef1775 90.25 ms ◑