tx · 6BgrDabx9GWUT8VB4TSLWuKzfCL76W45pNJuix8NF1xh 3PEgVPqJ3NYWbRn1CLELUpuY9KCmragc7sY: -0.01600000 Waves 2024.04.24 08:26 [4142434] smart account 3PEgVPqJ3NYWbRn1CLELUpuY9KCmragc7sY > SELF 0.00000000 Waves
{ "type": 13, "id": "6BgrDabx9GWUT8VB4TSLWuKzfCL76W45pNJuix8NF1xh", "fee": 1600000, "feeAssetId": null, "timestamp": 1713936421973, "version": 2, "chainId": 87, "sender": "3PEgVPqJ3NYWbRn1CLELUpuY9KCmragc7sY", "senderPublicKey": "8bCz9o3CUTfKKYBmcfJcAwKVKxEmLhGGyULemkcJwtkB", "proofs": [ "5BuB5rYfunzNnJfjaqgerVVE2HWjYnvn9j33Yh8kS178vk4SDytxUwN6ayXKddHQKXqnwz6XhsdrPB7wFYZUeki1" ], "script": "base64:BgIrCAISABIAEgASABIAEgMKAQgSABIAEgASABIDCgEIEgMKAQESABIECgIIASIBDXRyeUdldEludGVnZXICB2FkZHJlc3MDa2V5BAckbWF0Y2gwCQCaCAIFB2FkZHJlc3MFA2tleQMJAAECBQckbWF0Y2gwAgNJbnQEAWIFByRtYXRjaDAFAWIAAAEMdHJ5R2V0U3RyaW5nAgdhZGRyZXNzA2tleQQHJG1hdGNoMAkAnQgCBQdhZGRyZXNzBQNrZXkDCQABAgUHJG1hdGNoMAIGU3RyaW5nBAFiBQckbWF0Y2gwBQFiAgAAAmQ4AIDC1y8AAmQ2AMCEPQAHcG9vbEJCQgEaAVdS7pNWFE1+B4zShQ/mflxXN34cn+88gh0ADXB1enpsZVN0YWtpbmcJAQdBZGRyZXNzAQEaAVeUaIz57qK5qp/W9Y68qY9nGpwG9BYpibsADHB1enpsZU1hcmtldAkBB0FkZHJlc3MBARoBV12L8V/LKCBrH2ajyG7aC6iX7Q/o/clE8QAHYnVybnh0bgEgJE91eWp+Mzm4+wz/hKlxXF7KLd4zoMRdafnqRBHsTFQACXdoaXJscG9vbAEgWeON3MK1I7pKFNzE0K8UCeZk5gS+JQYLJk7lUG2XWccABnB1enpsZQEg8Rr+Jf72mTj0aSrE3+ES1keyxsoOujcJr3dtH46i5WMABHJvbWUBIItflAGEw2XBJDSO/xv8cJExSGrJMeqoy5Pz+Z80RAjPAARzdXJmASCS0fRK4hEBK/R+6t4hjj3F+8nyfc6Hsu1SGfA6TiRY9QAMcHV6emxlU3Rha2VkCQENdHJ5R2V0SW50ZWdlcgIFDXB1enpsZVN0YWtpbmcJAKwCAgkApQgBBQR0aGlzAgdfc3Rha2VkAAxwdXp6bGVJblBvb2wJAQ10cnlHZXRJbnRlZ2VyAgkBB0FkZHJlc3MBBQdwb29sQkJCCQCsAgIJAKwCAgIHZ2xvYmFsXwkA2AQBBQZwdXp6bGUCCF9iYWxhbmNlAAxwcm9qZWN0U3Rha2UJAQ10cnlHZXRJbnRlZ2VyAgkBB0FkZHJlc3MBBQdwb29sQkJCCQCsAgIJAKUIAQUEdGhpcwIMX2luZGV4U3Rha2VkAAp0b3RhbFN0YWtlCQENdHJ5R2V0SW50ZWdlcgIJAQdBZGRyZXNzAQUHcG9vbEJCQgIXZ2xvYmFsX3Bvb2xUb2tlbl9hbW91bnQAC2Fzc2V0V2VpZ2h0CQENdHJ5R2V0SW50ZWdlcgIJAQdBZGRyZXNzAQUHcG9vbEJCQgkArAICCQCsAgICB3N0YXRpY18JANgEAQUGcHV6emxlAgdfd2VpZ2h0AA1CQkJscEluUHV6emxlCQBrAwkAaAIJAGkCBQxwdXp6bGVJblBvb2wFC2Fzc2V0V2VpZ2h0AJBOBQxwcm9qZWN0U3Rha2UFCnRvdGFsU3Rha2UAFmtleUFkZHJlc3Nlc1JlZ2lzdGVyZWQCFEFkZHJlc3NlcyByZWdpc3RlcmVkAAlhZGRyZXNzZXMJALMCAgkBDHRyeUdldFN0cmluZwIFBHRoaXMFFmtleUFkZHJlc3Nlc1JlZ2lzdGVyZWQAAQAQa2V5QnVybnh0bkFtb3VudAIWQlVSTi1YVE4gdG90YWwgcmV3YXJkcwANa2V5Um9tZUFtb3VudAISUk9NRSB0b3RhbCByZXdhcmRzAA9rZXlQdXp6bGVBbW91bnQCFFBVWlpMRSB0b3RhbCByZXdhcmRzAA5rZXlXYXZlc0Ftb3VudAITV0FWRVMgdG90YWwgcmV3YXJkcwASa2V5V2hpcmxwb29sQW1vdW50AhdXSElSTFBPT0wgdG90YWwgcmV3YXJkcwATa2V5VG90YWxQdXp6bGVWYWx1ZQISVG90YWwgcHV6emxlIHZhbHVlABNrZXlUb3RhbEJ1cm54dG5QYWlkAhNUb3RhbCBCVVJOLVhUTiBwYWlkABVrZXlUb3RhbFdoaXJscG9vbFBhaWQCFFRvdGFsIFdISVJMUE9PTCBwYWlkABBrZXlUb3RhbFJvbWVQYWlkAg9Ub3RhbCBST01FIHBhaWQAEWtleVRvdGFsV2F2ZXNQYWlkAhBUb3RhbCBXQVZFUyBwYWlkAA5rZXlSb21lQmFsYW5jZQIMUk9NRSBiYWxhbmNlAAdXRlNsaXN0CQDMCAICLEducHk1blZhalBQM1hRUVZ4ckhib01Bc1h0am55V0F4eWJNRGRLcmJyOHNECQDMCAICLEJUOVE0bVFkUVFtZWkycjVZTk1CTWFzWkJRajdteU5haXo2UUhiYTVjUFhTCQDMCAICLEJNdmt5RnRQVm1GYXRwRlI5UVZGS1I1TVlUY1pWVFkyVlV3RloyNXZyQUFjCQDMCAICLDc3UnF1OFRMakJkTXREdVhkOW81ZlVTR282NHpRZTVGQ2NhbzVMOEh0OWo4CQDMCAICLDhLbmhCTFY0OVNESnpxMVNTeTFZdkdIWVk2bTdRMTQ2YlY3UTZHS3FRYjVDCQDMCAICLEZGeHNVZktiSEVXNHpaeXdMVUw1NWlwOE5xcDZmY1dEc3E3eTNhbjl5UWhlCQDMCAICLDVuUVJlZEdIb1ZwRVFhc01RaXZiMVVNdkZCQ0hYZWZYUFh0VVJiTU1uZnN1CQDMCAICLDZOM01TRnRKR3ZUNzl1Y1g0cExmdHhQN2ZHczhEbm1ZZFBlZHZub05iVnQ5CQDMCAICK2RGQzJpSkw0TERXYXNxOVl6SGYya1dmUE5QNjlUeWFtaWk5M25zOUJIdk0JAMwIAgIsQTE1OFQ3eVpMdG11aU1FczIxUDlqVjJmdGJNWHp5M01uZkhNRXUxZU1BR0sFA25pbAAHQkJCbGlzdAkAzAgCAiw5cEN4b0d0RDE4R2VIOWdDZW16cXJqSE1NamZ5QlFEZnNyUkF1eFNSYWdNYwkAzAgCAiw3RGdGZ0NrQmpWRGM1UDlaZ3dzVkw5U2lUaTdrWEp1UzRhUlZnYjdaSFczawkAzAgCAiw3NmJUdkU4dHRIdnN1TjFGdUg0S2M4UVVXNGtMNG04YzFjamZzWHkyR2ZiVgkAzAgCAiw0WnJmNEg1dGlGY1FMOGVRbW5BMndKMVhXUEVCSDZoMUcyTWVmWkRZbWNDQgkAzAgCAiwyRHRDNG5Gbnh6NVVNNm1ialB3TVZacFFXWkZVcXhzNTJvWnJCZU5SazlBbwkAzAgCAixEalpHTUFGZm9RV2tNVzNTNUZUc1FOM2pvbmNadDZCc21obkVLM2dnTHhtTgkAzAgCAixCbmVhWlhENm92REpjVjVyZ2ZyOGhzSFphTVFzSlE4REg2YTVnVG5HQ3BCYwkAzAgCAiw0RUtmZ3pGa2Q1VUdLcmpuYUpWM3c3YXJnVzFZbUY0aHE1NHhXUUZ6QVhiOQkAzAgCAiw4aEdEa1dLaXUyaWdEcFdUM0hwcjRtY2hERDZ4d0o5aEdtMmgyam5VdlRxegkAzAgCAixFM1puU2VqcFhMMVhyNlZHNFFvTGg4eG9kOU5NZ3BQZTQ3M3I5UWsySGliTAUDbmlsAA1TVVJGYm9hcmRMaXN0CQDMCAICLER6TFNnRWFCQjRVTmJQQ1pla1BTemJRODVLb2tNQjdkMUtSUm16VVB1NWhzCQDMCAICK1dtV3pzYmIzUE52eko0dzRGYjczS2NvTkdMWHVtZ1laYWdWMjJ6RWlYMXcJAMwIAgIsN1JyeGJnYXlVa3NQSHJBNzk5cEt1Q3I2MXJlVDhuRU5kcUNrZ1ZIUGdhTjIJAMwIAgIsRm1ETGZ6c3BiVkplS2hLZHVMRFViYTJIb1ZkUnJLdHN3REtNVTNlOXFqdFAJAMwIAgIsSG1RdlZ5UWRFamFmTHJwS1BTaWdkYWZ2Y1l2TGJOWUdFZ1ZDeExaUld0MXkJAMwIAgIsMnJWeE5NWHV2dWc3NFRvckxRWkdDMkVSSGpBYkpuVlVnTlhRMWtKbXRuQWUJAMwIAgIsOXliOXlHSm02Z3pWb3pCSHVRVkhCZEFuemZjdDNOOWJScGRqak5VbnJ6Y0MJAMwIAgIrczFTZkdWc2hmMmpLQ0E5S3Z2S0t2VXVLOHV0cDNOZTNlZThMcDZLS0xSdwkAzAgCAiwzRTN5YjdUdkRLNzYyZG4xMWRtUkx3YXBnaGFlZlFVRXl1blZkWFNOcDR0QgkAzAgCAixGSDc1VHZBcHlWdGZkOVg1YTFBcjE5TnM5RE5KdnpwekxGRTVwamgxd2k0aAkAzAgCAixFZ3FrYkR5V1JQZ1ZOVnF0RUV0UlN6V2NHRDMzb3JWb0UyYnpZZEFkaWVRUwkAzAgCAixEc0t5SnBKQ1pjRnY5alNuUWJRVkc0SngzV1NQMUt0ZkhoQUtUa1NLclZCagkAzAgCAixBZXNQcjVVRkRnWTVqWlhZVVo4SmtiWXRKb3ZWZERIYnkxNVNDa3NFaG1KSwkAzAgCAixBVnNmZHF3Mm01YVVOeGExSFk5ZW1MbUNMQmZWQUdUeFZ1NGVmM3hFREtDOAkAzAgCAiw1amR2U1NZMks3aDhVaVVDWFVnSzlUN3pmTXJ5cXcyaXRLUDhCeXNkWEREawkAzAgCAixBNHZvS1plczhNVkRBWHlRaktrYjZiZEVjcU1idkI0cHR6YnBxWXF2ZUc1bgkAzAgCAiwzNG9aS2FXSHBTSnJadkdMZFl1NVdHOFdXWGc3cndGMkhIeDhLMTVHZlVDUQkAzAgCAiw3N01jQ0hrbU5yUk00RGpxa1NNOUI4WWp1SmNLdG42N2pRZ2UxcHpaclE4VAkAzAgCAiw3TkVGQm52R0dNZllkQm5oTUxOcHVWZ1MyMkxwY2dYQ1pnSGZtOERIbW1pQQkAzAgCAixHb0Y5eW9reEhnUE5veG9XZ2pqZG1HZVdoY0xZQXJTc3hxZmZSdGZZR3RmcwUDbmlsDgFpAQppbnZva2VDbEkxAAMJAQIhPQIIBQFpBmNhbGxlcgUEdGhpcwkAAgECHGFjY2VzcyBvbmx5IGJ5IHByb2plY3Qgb3duZXIEAmNsCQD8BwQFBHRoaXMCEWNsYWltSW52ZXN0UHV6emxlBQNuaWwFA25pbAMJAAACBQJjbAUCY2wEAmR0CQD8BwQFBHRoaXMCBGRhdGEFA25pbAUDbmlsAwkAAAIFAmR0BQJkdAUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBEWNsYWltSW52ZXN0UHV6emxlAAMJAQIhPQIIBQFpBmNhbGxlcgUEdGhpcwkAAgECHGFjY2VzcyBvbmx5IGJ5IHByb2plY3Qgb3duZXIEEmNsYWltUHV6emxlU3Rha2luZwkA/AcEBQ1wdXp6bGVTdGFraW5nAgtjbGFpbVJld2FyZAUDbmlsBQNuaWwDCQAAAgUSY2xhaW1QdXp6bGVTdGFraW5nBRJjbGFpbVB1enpsZVN0YWtpbmcED3Bvb2xPbmVUb2tlbkludgkA/AcECQEHQWRkcmVzcwEBGgFX/SXDvU5hlEHvul4SY4/FOW9JtYg69eltAiFnZW5lcmF0ZUluZGV4V2l0aE9uZVRva2VuQW5kU3Rha2UJAMwIAgkA2AQBBQdwb29sQkJCBQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIFBnB1enpsZQkA8AcCBQR0aGlzBQZwdXp6bGUFA25pbAMJAAACBQ9wb29sT25lVG9rZW5JbnYFD3Bvb2xPbmVUb2tlbkludgkAzAgCCQEMSW50ZWdlckVudHJ5AgIVQWN0aXZhdGVkIGJsb2NraGVpZ2h0BQZoZWlnaHQJAMwIAgkBDEludGVnZXJFbnRyeQIFEGtleUJ1cm54dG5BbW91bnQJAPAHAgUEdGhpcwUHYnVybnh0bgkAzAgCCQEMSW50ZWdlckVudHJ5AgUNa2V5Um9tZUFtb3VudAkAZQIJAPAHAgUEdGhpcwUEcm9tZQkBEUBleHRyTmF0aXZlKDEwNTApAgUEdGhpcwUOa2V5Um9tZUJhbGFuY2UJAMwIAgkBDEludGVnZXJFbnRyeQIFDmtleVdhdmVzQW1vdW50AwkAZgIJAGUCCAkA7wcBBQR0aGlzCWF2YWlsYWJsZQUCZDgAAAkAZQIICQDvBwEFBHRoaXMJYXZhaWxhYmxlBQJkOAAACQDMCAIJAQxJbnRlZ2VyRW50cnkCBRJrZXlXaGlybHBvb2xBbW91bnQJAPAHAgUEdGhpcwUJd2hpcmxwb29sBQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEEZGF0YQADCQECIT0CCAUBaQZjYWxsZXIFBHRoaXMJAAIBAhxhY2Nlc3Mgb25seSBieSBwcm9qZWN0IG93bmVyCQDMCAIJAQxJbnRlZ2VyRW50cnkCAg5wdXp6bGUgYmFsYW5jZQkA8AcCBQR0aGlzBQZwdXp6bGUJAMwIAgkBDEludGVnZXJFbnRyeQICDXB1enpsZSBzdGFrZWQFDHB1enpsZVN0YWtlZAkAzAgCCQEMSW50ZWdlckVudHJ5AgINcHV6emxlIEJCQiBMUAUNQkJCbHBJblB1enpsZQkAzAgCCQEMSW50ZWdlckVudHJ5AgUTa2V5VG90YWxQdXp6bGVWYWx1ZQkAZAIJAGQCCQDwBwIFBHRoaXMFBnB1enpsZQUMcHV6emxlU3Rha2VkBQ1CQkJscEluUHV6emxlCQDMCAIJAQxJbnRlZ2VyRW50cnkCAhBXRlMgcHV6emxlIHZhbHVlCQBrAwkAawMJAQ10cnlHZXRJbnRlZ2VyAgUEdGhpcwUTa2V5VG90YWxQdXp6bGVWYWx1ZQABAG4ACgAJCQDMCAIJAQxJbnRlZ2VyRW50cnkCAhBCQkIgcHV6emxlIHZhbHVlCQBrAwkAawMJAQ10cnlHZXRJbnRlZ2VyAgUEdGhpcwUTa2V5VG90YWxQdXp6bGVWYWx1ZQAKAG4ACgAJBQNuaWwBaQEIaW52b2tlcjIAAwkBAiE9AggFAWkGY2FsbGVyBQR0aGlzCQACAQIcYWNjZXNzIG9ubHkgYnkgcHJvamVjdCBvd25lcgQBdAkA/AcEBQR0aGlzAg50cmFja1RvdGFsUGFpZAUDbmlsBQNuaWwDCQAAAgUBdAUBdAQEbGlzdAkAvAkCBQlhZGRyZXNzZXMCASwKAQFyAgVhY2N1bQdhZGRyZXNzCQD8BwQFBHRoaXMCEWRpc3RyaWJ1dGVSZXdhcmRzCQDMCAIFB2FkZHJlc3MFA25pbAUDbmlsBAdpbnZva2VyCgACJGwFBGxpc3QKAAIkcwkAkAMBBQIkbAoABSRhY2MwBQNuaWwKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBAXICBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECFExpc3Qgc2l6ZSBleGNlZWRzIDQwCQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGAAcACAAJAAoACwAMAA0ADgAPABAAEQASABMAFAAVABYAFwAYABkAGgAbABwAHQAeAB8AIAAhACIAIwAkACUAJgAnACgDCQAAAgUHaW52b2tlcgUHaW52b2tlcgQCYnMJAPwHBAUEdGhpcwIIYnVyblN1cmYFA25pbAUDbmlsAwkAAAIFAmJzBQJicwUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBDnRyYWNrVG90YWxQYWlkAAMJAQIhPQIIBQFpBmNhbGxlcgUEdGhpcwkAAgECHGFjY2VzcyBvbmx5IGJ5IHByb2plY3Qgb3duZXIEDWFtb3VudEJ1cm54dG4JAQ10cnlHZXRJbnRlZ2VyAgUEdGhpcwUQa2V5QnVybnh0bkFtb3VudAQPYW1vdW50V2hpcmxwb29sCQENdHJ5R2V0SW50ZWdlcgIFBHRoaXMFEmtleVdoaXJscG9vbEFtb3VudAQLYW1vdW50V2F2ZXMJAQ10cnlHZXRJbnRlZ2VyAgUEdGhpcwUOa2V5V2F2ZXNBbW91bnQECmFtb3VudFJvbWUJAQ10cnlHZXRJbnRlZ2VyAgUEdGhpcwUNa2V5Um9tZUFtb3VudAkAzAgCCQEMSW50ZWdlckVudHJ5AgUTa2V5VG90YWxCdXJueHRuUGFpZAkAZAIFDWFtb3VudEJ1cm54dG4JAQ10cnlHZXRJbnRlZ2VyAgUEdGhpcwUTa2V5VG90YWxCdXJueHRuUGFpZAkAzAgCCQEMSW50ZWdlckVudHJ5AgUVa2V5VG90YWxXaGlybHBvb2xQYWlkCQBkAgUPYW1vdW50V2hpcmxwb29sCQENdHJ5R2V0SW50ZWdlcgIFBHRoaXMFFWtleVRvdGFsV2hpcmxwb29sUGFpZAkAzAgCCQEMSW50ZWdlckVudHJ5AgURa2V5VG90YWxXYXZlc1BhaWQJAGQCBQthbW91bnRXYXZlcwkBDXRyeUdldEludGVnZXICBQR0aGlzBRFrZXlUb3RhbFdhdmVzUGFpZAkAzAgCCQEMSW50ZWdlckVudHJ5AgUQa2V5VG90YWxSb21lUGFpZAkAZAIFCmFtb3VudFJvbWUJAQ10cnlHZXRJbnRlZ2VyAgUEdGhpcwUQa2V5VG90YWxSb21lUGFpZAUDbmlsAWkBEWRpc3RyaWJ1dGVSZXdhcmRzAQdhZGRyZXNzAwkBAiE9AggFAWkGY2FsbGVyBQR0aGlzCQACAQIcYWNjZXNzIG9u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CQBrAwkBDXRyeUdldEludGVnZXICBQR0aGlzBRBrZXlCdXJueHRuQW1vdW50CQBkAgUIc2hhcmVXRlMJAGgCBQhzaGFyZUJCQgAKAG4ED2Ftb3VudFdoaXJscG9vbAkAawMJAQ10cnlHZXRJbnRlZ2VyAgUEdGhpcwUSa2V5V2hpcmxwb29sQW1vdW50CQBkAgUIc2hhcmVXRlMJAGgCBQhzaGFyZUJCQgAKAG4EC2Ftb3VudFdhdmVzCQBrAwkBDXRyeUdldEludGVnZXICBQR0aGlzBQ5rZXlXYXZlc0Ftb3VudAkAZAIFCHNoYXJlV0ZTCQBoAgUIc2hhcmVCQkIACgBuBAphbW91bnRSb21lCQBrAwkBDXRyeUdldEludGVnZXICBQR0aGlzBQ1rZXlSb21lQW1vdW50CQBkAgUIc2hhcmVXRlMJAGgCBQhzaGFyZUJCQgAKAG4JAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwkBEUBleHRyTmF0aXZlKDEwNjIpAQUHYWRkcmVzcwUNYW1vdW50QnVybnh0bgUHYnVybnh0bgkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCQERQGV4dHJOYXRpdmUoMTA2MikBBQdhZGRyZXNzBQ9hbW91bnRXaGlybHBvb2wFCXdoaXJscG9vbAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCQERQGV4dHJOYXRpdmUoMTA2MikBBQdhZGRyZXNzBQthbW91bnRXYXZlcwUEdW5pdAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCQERQGV4dHJOYXRpdmUoMTA2MikBBQdhZGRyZXNzBQphbW91bnRSb21lBQRyb21lCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMJARFAZXh0ck5hdGl2ZSgxMDYyKQEFB2FkZHJlc3MJAGgCBQ9hbW91bnRTVVJGYm9hcmQFAmQ2BQRzdXJmBQNuaWwBaQEIYnVyblN1cmYAAwkBAiE9AggFAWkGY2FsbGVyBQR0aGlzCQACAQIcYWNjZXNzIG9ubHkgYnkgcHJvamVjdCBvd25lcgkAzAgCCQEEQnVybgIFBHN1cmYFAmQ2CQDMCAIJAQxJbnRlZ2VyRW50cnkCAhFTVVJGIHRvdGFsIGJ1cm5lZAkAZAIJAQ10cnlHZXRJbnRlZ2VyAgUEdGhpcwIRU1VSRiB0b3RhbCBidXJuZWQFAmQ2BQNuaWwBaQEIcmVnaXN0ZXIAAwkBCGNvbnRhaW5zAgkBDHRyeUdldFN0cmluZwIFBHRoaXMFFmtleUFkZHJlc3Nlc1JlZ2lzdGVyZWQJAKUIAQgFAWkGY2FsbGVyCQACAQISYWxyZWFkeSByZWdpc3RlcmVkAwkAAAIJAJADAQkAvAkCBQlhZGRyZXNzZXMCASwAHgkAAgECC21heCByZWFjaGVkCQDMCAIJAQtTdHJpbmdFbnRyeQIFFmtleUFkZHJlc3Nlc1JlZ2lzdGVyZWQJAKwCAgkArAICCQEMdHJ5R2V0U3RyaW5nAgUEdGhpcwUWa2V5QWRkcmVzc2VzUmVnaXN0ZXJlZAkApQgBCAUBaQZjYWxsZXICASwFA25pbAFpAQ5jbGFpbUJ5QW55Ym9keQADCQBmAgkAZAIJARFAZXh0ck5hdGl2ZSgxMDUwKQIFBHRoaXMCFUFjdGl2YXRlZCBibG9ja2hlaWdodAkAaAIAHgCgCwUGaGVpZ2h0CQACAQkArAICAhZXYWl0IHRpbGwgYmxvY2toZWlnaHQ6CQCkAwEJAGQCCQERQGV4dHJOYXRpdmUoMTA1MCkCBQR0aGlzAhVBY3RpdmF0ZWQgYmxvY2toZWlnaHQJAGgCAB4AoAsEE3B1enpsZUJhbGFuY2VCZWZvcmUJAPAHAgUEdGhpcwUGcHV6emxlAwkAAAIFE3B1enpsZUJhbGFuY2VCZWZvcmUFE3B1enpsZUJhbGFuY2VCZWZvcmUEEmNsYWltUHV6emxlU3Rha2luZwkA/AcEBQ1wdXp6bGVTdGFraW5nAgtjbGFpbVJld2FyZAUDbmlsBQNuaWwDCQAAAgUSY2xhaW1QdXp6bGVTdGFraW5nBRJjbGFpbVB1enpsZVN0YWtpbmcECGNsYWltSW52CQD8BwQJAQdBZGRyZXNzAQUHcG9vbEJCQgIRY2xhaW1JbmRleFJld2FyZHMFA25pbAUDbmlsAwkAAAIFCGNsYWltSW52BQhjbGFpbUludgQScHV6emxlQmFsYW5jZUFmdGVyCQDwBwIFBHRoaXMFBnB1enpsZQkAzAgCCQEMSW50ZWdlckVudHJ5AgUQa2V5QnVybnh0bkFtb3VudAkA8AcCBQR0aGlzBQdidXJueHRuCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQ1rZXlSb21lQW1vdW50CQBlAgkA8AcCBQR0aGlzBQRyb21lCQERQGV4dHJOYXRpdmUoMTA1MCkCBQR0aGlzBQ5rZXlSb21lQmFsYW5jZQkAzAgCCQEMSW50ZWdlckVudHJ5AgUPa2V5UHV6emxlQW1vdW50CQBlAgUScHV6emxlQmFsYW5jZUFmdGVyBRNwdXp6bGVCYWxhbmNlQmVmb3JlCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQ5rZXlXYXZlc0Ftb3VudAMJAGYCCQBlAggJAO8HAQUEdGhpcwlhdmFpbGFibGUFAmQ4AAAJAGUCCAkA7wcBBQR0aGlzCWF2YWlsYWJsZQUCZDgAAAkAzAgCCQEMSW50ZWdlckVudHJ5AgUSa2V5V2hpcmxwb29sQW1vdW50CQDwBwIFBHRoaXMFCXdoaXJscG9vbAUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBEGludm9rZXJCeUFueWJvZHkAAwkAZgIJAGQCCQERQGV4dHJOYXRpdmUoMTA1MCkCBQR0aGlzAhVBY3RpdmF0ZWQgYmxvY2toZWlnaHQJAGgCAB4AoAsFBmhlaWdodAkAAgEJAKwCAgIWV2FpdCB0aWxsIGJsb2NraGVpZ2h0OgkApAMBCQBkAgkBEUBleHRyTmF0aXZlKDEwNTApAgUEdGhpcwIVQWN0aXZhdGVkIGJsb2NraGVpZ2h0CQBoAgAeAKALBAF0CQD8BwQFBHRoaXMCDnRyYWNrVG90YWxQYWlkBQNuaWwFA25pbAMJAAACBQF0BQF0BARsaXN0CQC8CQIFCWFkZHJlc3NlcwIBLAoBAXICBWFjY3VtB2FkZHJlc3MJAPwHBAUEdGhpcwISZGlzdHJpYnV0ZVJld2FyZHNCCQDMCAIFB2FkZHJlc3MFA25pbAUDbmlsBAdpbnZva2VyCgACJGwFBGxpc3QKAAIkcwkAkAMBBQIkbAoABSRhY2MwBQNuaWwKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkB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ZGRyZXNzCQDZBAEFCVNVUkZib2FyZAMJAAACCQEMdHJ5R2V0U3RyaW5nAgUMcHV6emxlTWFya2V0CQCsAgIJAKwCAgIEbmZ0XwUJU1VSRmJvYXJkAgdfc2VsbGVyBQdhZGRyZXNzAAEAAAQPYW1vdW50U1VSRmJvYXJkCgACJGwFDVNVUkZib2FyZExpc3QKAAIkcwkAkAMBBQIkbAoABSRhY2MwAAAKAQUkZjJfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBCWZvbGRGdW5jQwIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMl8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQIUTGlzdCBzaXplIGV4Y2VlZHMgMjAJAQUkZjJfMgIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYABwAIAAkACgALAAwADQAOAA8AEAARABIAEwAUAwkAAAIJAGQCCQBkAgUIc2hhcmVXRlMFCHNoYXJlQkJCBQ9hbW91bnRTVVJGYm9hcmQAAAQEbGlzdAkAvAkCBQlhZGRyZXNzZXMCASwECm5vTkZUaW5kZXgJAQV2YWx1ZQEJAM8IAgUEbGlzdAUHYWRkcmVzcwQObGlzdE1pbnVzTm9ORlQJANEIAgUEbGlzdAUKbm9ORlRpbmRleAQNbWludXNOb05GVHN0cgkArAICCQC5CQIFDmxpc3RNaW51c05vTkZUAgEsAgEsCQDMCAIJAQtTdHJpbmdFbnRyeQIFFmtleUFkZHJlc3Nlc1JlZ2lzdGVyZWQFDW1pbnVzTm9ORlRzdHIFA25pbAQNYW1vdW50QnVybnh0bgkAawMJAQ10cnlHZXRJbnRlZ2VyAgUEdGhpcwUQa2V5QnVybnh0bkFtb3VudAkAZAIFCHNoYXJlV0ZTCQBoAgUIc2hhcmVCQkIACgBuBA9hbW91bnRXaGlybHBvb2wJAGsDCQENdHJ5R2V0SW50ZWdlcgIFBHRoaXMFEmtleVdoaXJscG9vbEFtb3VudAkAZAIFCHNoYXJlV0ZTCQBoAgUIc2hhcmVCQkIACgBuBAthbW91bnRXYXZlcwkAawMJAQ10cnlHZXRJbnRlZ2VyAgUEdGhpcwUOa2V5V2F2ZXNBbW91bnQJAGQCBQhzaGFyZVdGUwkAaAIFCHNoYXJlQkJCAAoAbgQKYW1vdW50Um9tZQkAawMJAQ10cnlHZXRJbnRlZ2VyAgUEdGhpcwUNa2V5Um9tZUFtb3VudAkAZAIFCHNoYXJlV0ZTCQBoAgUIc2hhcmVCQkIACgBuBAxhbW91bnRQdXp6bGUJAGsDCQENdHJ5R2V0SW50ZWdlcgIFBHRoaXMFD2tleVB1enpsZUFtb3VudAkAZAIFCHNoYXJlV0ZTCQBoAgUIc2hhcmVCQkIACgBuCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMJARFAZXh0ck5hdGl2ZSgxMDYyKQEFB2FkZHJlc3MFDWFtb3VudEJ1cm54dG4FB2J1cm54dG4JAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwkBEUBleHRyTmF0aXZlKDEwNjIpAQUHYWRkcmVzcwUPYW1vdW50V2hpcmxwb29sBQl3aGlybHBvb2wJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwkBEUBleHRyTmF0aXZlKDEwNjIpAQUHYWRkcmVzcwULYW1vdW50V2F2ZXMFBHVuaXQJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwkBEUBleHRyTmF0aXZlKDEwNjIpAQUHYWRkcmVzcwUKYW1vdW50Um9tZQUEcm9tZQkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCQERQGV4dHJOYXRpdmUoMTA2MikBBQdhZGRyZXNzBQxhbW91bnRQdXp6bGUFBnB1enpsZQkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCQERQGV4dHJOYXRpdmUoMTA2MikBBQdhZGRyZXNzCQBoAgUPYW1vdW50U1VSRmJvYXJkBQJkNgUEc3VyZgUDbmlsAWkBDnNldFJvbWVCYWxhbmNlAQZhbW91bnQDCQECIT0CCAUBaQZjYWxsZXIFBHRoaXMJAAIBAhxhY2Nlc3Mgb25seSBieSBwcm9qZWN0IG93bmVyCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQ5rZXlSb21lQmFsYW5jZQkAaAIFBmFtb3VudAUCZDYFA25pbAFpAQtkZWxldGVFbnRyeQADCQECIT0CCAUBaQZjYWxsZXIFBHRoaXMJAAIBAhxhY2Nlc3Mgb25seSBieSBwcm9qZWN0IG93bmVyCQDMCAIJAQtEZWxldGVFbnRyeQEFFmtleUFkZHJlc3Nlc1JlZ2lzdGVyZWQFA25pbAFpARJjaGFuZ2VJbnRlZ2VyRW50cnkCCWtleVN0cmluZwdpbnRlZ2VyAwkBAiE9AggFAWkGY2FsbGVyBQR0aGlzCQACAQIcYWNjZXNzIG9ubHkgYnkgcHJvamVjdCBvd25lcgkAzAgCCQEMSW50ZWdlckVudHJ5AgUJa2V5U3RyaW5nBQdpbnRlZ2VyBQNuaWwASAD/Jg==", "height": 4142434, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: GY9iiANudyYr6wYpGj7o9HTzTxrgJhnVLXSUESTtTcyN Next: 4UCb1X9zy84SzvrDjcPZU1HxXgbSjpv1CifiHQkvZQLG Diff:
Old | New | Differences | |
---|---|---|---|
25 | 25 | ||
26 | 26 | let puzzleStaking = Address(base58'3PFTbywqxtFfukX3HyT881g4iW5K4QL3FAS') | |
27 | 27 | ||
28 | - | let bbbPoolId = base58'3P9VPwVfNj3dDevQZt1Z951A4K57cmQmCgk' | |
29 | - | ||
30 | 28 | let puzzleMarket = Address(base58'3PATXDVE53rKJtkwXYV3tvuLVS2fDtGtKCc') | |
31 | 29 | ||
32 | 30 | let burnxtn = base58'3SjxA2YLdfF9fTRbzLm9xFn27C6MW34W1YsdJ6Axefns' | |
41 | 39 | ||
42 | 40 | let puzzleStaked = tryGetInteger(puzzleStaking, (toString(this) + "_staked")) | |
43 | 41 | ||
44 | - | let puzzleInPool = tryGetInteger(Address( | |
42 | + | let puzzleInPool = tryGetInteger(Address(poolBBB), (("global_" + toBase58String(puzzle)) + "_balance")) | |
45 | 43 | ||
46 | - | let projectStake = tryGetInteger(Address( | |
44 | + | let projectStake = tryGetInteger(Address(poolBBB), (toString(this) + "_indexStaked")) | |
47 | 45 | ||
48 | - | let totalStake = tryGetInteger(Address( | |
46 | + | let totalStake = tryGetInteger(Address(poolBBB), "global_poolToken_amount") | |
49 | 47 | ||
50 | - | let assetWeight = tryGetInteger(Address( | |
48 | + | let assetWeight = tryGetInteger(Address(poolBBB), (("static_" + toBase58String(puzzle)) + "_weight")) | |
51 | 49 | ||
52 | 50 | let BBBlpInPuzzle = fraction(((puzzleInPool / assetWeight) * 10000), projectStake, totalStake) | |
53 | 51 | ||
74 | 72 | let keyTotalRomePaid = "Total ROME paid" | |
75 | 73 | ||
76 | 74 | let keyTotalWavesPaid = "Total WAVES paid" | |
75 | + | ||
76 | + | let keyRomeBalance = "ROME balance" | |
77 | 77 | ||
78 | 78 | let WFSlist = ["Gnpy5nVajPP3XQQVxrHboMAsXtjnyWAxybMDdKrbr8sD", "BT9Q4mQdQQmei2r5YNMBMasZBQj7myNaiz6QHba5cPXS", "BMvkyFtPVmFatpFR9QVFKR5MYTcZVTY2VUwFZ25vrAAc", "77Rqu8TLjBdMtDuXd9o5fUSGo64zQe5FCcao5L8Ht9j8", "8KnhBLV49SDJzq1SSy1YvGHYY6m7Q146bV7Q6GKqQb5C", "FFxsUfKbHEW4zZywLUL55ip8Nqp6fcWDsq7y3an9yQhe", "5nQRedGHoVpEQasMQivb1UMvFBCHXefXPXtURbMMnfsu", "6N3MSFtJGvT79ucX4pLftxP7fGs8DnmYdPedvnoNbVt9", "dFC2iJL4LDWasq9YzHf2kWfPNP69Tyamii93ns9BHvM", "A158T7yZLtmuiMEs21P9jV2ftbMXzy3MnfHMEu1eMAGK"] | |
79 | 79 | ||
102 | 102 | func claimInvestPuzzle () = if ((i.caller != this)) | |
103 | 103 | then throw("access only by project owner") | |
104 | 104 | else { | |
105 | - | let | |
106 | - | if (( | |
105 | + | let claimPuzzleStaking = invoke(puzzleStaking, "claimReward", nil, nil) | |
106 | + | if ((claimPuzzleStaking == claimPuzzleStaking)) | |
107 | 107 | then { | |
108 | - | let claimPuzzleStaking = invoke(puzzleStaking, "claimReward", nil, nil) | |
109 | - | if ((claimPuzzleStaking == claimPuzzleStaking)) | |
110 | - | then { | |
111 | - | let poolOneTokenInv = invoke(Address(base58'3PR1Qvi9mHT35SwWEkLSqqE2L8thiPLdVWU'), "generateIndexWithOneTokenAndStake", [toBase58String(poolBBB)], [AttachedPayment(puzzle, assetBalance(this, puzzle))]) | |
112 | - | if ((poolOneTokenInv == poolOneTokenInv)) | |
113 | - | then { | |
114 | - | let romeBalanceAfter = assetBalance(this, rome) | |
115 | - | [IntegerEntry("Activated blockheight", height), IntegerEntry(keyBurnxtnAmount, assetBalance(this, burnxtn)), IntegerEntry(keyRomeAmount, (romeBalanceAfter - romeBalanceBefore)), IntegerEntry(keyWavesAmount, if (((wavesBalance(this).available - d8) > 0)) | |
116 | - | then (wavesBalance(this).available - d8) | |
117 | - | else 0), IntegerEntry(keyWhirlpoolAmount, assetBalance(this, whirlpool))] | |
118 | - | } | |
119 | - | else throw("Strict value is not equal to itself.") | |
120 | - | } | |
108 | + | let poolOneTokenInv = invoke(Address(base58'3PR1Qvi9mHT35SwWEkLSqqE2L8thiPLdVWU'), "generateIndexWithOneTokenAndStake", [toBase58String(poolBBB)], [AttachedPayment(puzzle, assetBalance(this, puzzle))]) | |
109 | + | if ((poolOneTokenInv == poolOneTokenInv)) | |
110 | + | then [IntegerEntry("Activated blockheight", height), IntegerEntry(keyBurnxtnAmount, assetBalance(this, burnxtn)), IntegerEntry(keyRomeAmount, (assetBalance(this, rome) - getIntegerValue(this, keyRomeBalance))), IntegerEntry(keyWavesAmount, if (((wavesBalance(this).available - d8) > 0)) | |
111 | + | then (wavesBalance(this).available - d8) | |
112 | + | else 0), IntegerEntry(keyWhirlpoolAmount, assetBalance(this, whirlpool))] | |
121 | 113 | else throw("Strict value is not equal to itself.") | |
122 | 114 | } | |
123 | 115 | else throw("Strict value is not equal to itself.") | |
283 | 275 | let puzzleBalanceBefore = assetBalance(this, puzzle) | |
284 | 276 | if ((puzzleBalanceBefore == puzzleBalanceBefore)) | |
285 | 277 | then { | |
286 | - | let | |
287 | - | if (( | |
278 | + | let claimPuzzleStaking = invoke(puzzleStaking, "claimReward", nil, nil) | |
279 | + | if ((claimPuzzleStaking == claimPuzzleStaking)) | |
288 | 280 | then { | |
289 | - | let | |
290 | - | if (( | |
281 | + | let claimInv = invoke(Address(poolBBB), "claimIndexRewards", nil, nil) | |
282 | + | if ((claimInv == claimInv)) | |
291 | 283 | then { | |
292 | - | let claimInv = invoke(Address(poolBBB), "claimIndexRewards", nil, nil) | |
293 | - | if ((claimInv == claimInv)) | |
294 | - | then { | |
295 | - | let puzzleBalanceAfter = assetBalance(this, puzzle) | |
296 | - | let romeBalanceAfter = assetBalance(this, rome) | |
297 | - | [IntegerEntry(keyBurnxtnAmount, assetBalance(this, burnxtn)), IntegerEntry(keyRomeAmount, (romeBalanceAfter - romeBalanceBefore)), IntegerEntry(keyPuzzleAmount, (puzzleBalanceAfter - puzzleBalanceBefore)), IntegerEntry(keyWavesAmount, if (((wavesBalance(this).available - d8) > 0)) | |
298 | - | then (wavesBalance(this).available - d8) | |
299 | - | else 0), IntegerEntry(keyWhirlpoolAmount, assetBalance(this, whirlpool))] | |
300 | - | } | |
301 | - | else throw("Strict value is not equal to itself.") | |
284 | + | let puzzleBalanceAfter = assetBalance(this, puzzle) | |
285 | + | [IntegerEntry(keyBurnxtnAmount, assetBalance(this, burnxtn)), IntegerEntry(keyRomeAmount, (assetBalance(this, rome) - getIntegerValue(this, keyRomeBalance))), IntegerEntry(keyPuzzleAmount, (puzzleBalanceAfter - puzzleBalanceBefore)), IntegerEntry(keyWavesAmount, if (((wavesBalance(this).available - d8) > 0)) | |
286 | + | then (wavesBalance(this).available - d8) | |
287 | + | else 0), IntegerEntry(keyWhirlpoolAmount, assetBalance(this, whirlpool))] | |
302 | 288 | } | |
303 | 289 | else throw("Strict value is not equal to itself.") | |
304 | 290 | } | |
426 | 412 | ||
427 | 413 | ||
428 | 414 | @Callable(i) | |
415 | + | func setRomeBalance (amount) = if ((i.caller != this)) | |
416 | + | then throw("access only by project owner") | |
417 | + | else [IntegerEntry(keyRomeBalance, (amount * d6))] | |
418 | + | ||
419 | + | ||
420 | + | ||
421 | + | @Callable(i) | |
429 | 422 | func deleteEntry () = if ((i.caller != this)) | |
430 | 423 | then throw("access only by project owner") | |
431 | 424 | else [DeleteEntry(keyAddressesRegistered)] |
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 d6 = 1000000 | |
23 | 23 | ||
24 | 24 | let poolBBB = base58'3P9VPwVfNj3dDevQZt1Z951A4K57cmQmCgk' | |
25 | 25 | ||
26 | 26 | let puzzleStaking = Address(base58'3PFTbywqxtFfukX3HyT881g4iW5K4QL3FAS') | |
27 | 27 | ||
28 | - | let bbbPoolId = base58'3P9VPwVfNj3dDevQZt1Z951A4K57cmQmCgk' | |
29 | - | ||
30 | 28 | let puzzleMarket = Address(base58'3PATXDVE53rKJtkwXYV3tvuLVS2fDtGtKCc') | |
31 | 29 | ||
32 | 30 | let burnxtn = base58'3SjxA2YLdfF9fTRbzLm9xFn27C6MW34W1YsdJ6Axefns' | |
33 | 31 | ||
34 | 32 | let whirlpool = base58'73tY3E6Gd5AWYmsuq8m8Kek7KnJNAYyS3GoveTbc6jCi' | |
35 | 33 | ||
36 | 34 | let puzzle = base58'HEB8Qaw9xrWpWs8tHsiATYGBWDBtP2S7kcPALrMu43AS' | |
37 | 35 | ||
38 | 36 | let rome = base58'AP4Cb5xLYGH6ZigHreCZHoXpQTWDkPsG2BHqfDUx6taJ' | |
39 | 37 | ||
40 | 38 | let surf = base58'At8D6NFFpheCbvKVnjVoeLL84Eo8NZn6ovManxfLaFWL' | |
41 | 39 | ||
42 | 40 | let puzzleStaked = tryGetInteger(puzzleStaking, (toString(this) + "_staked")) | |
43 | 41 | ||
44 | - | let puzzleInPool = tryGetInteger(Address( | |
42 | + | let puzzleInPool = tryGetInteger(Address(poolBBB), (("global_" + toBase58String(puzzle)) + "_balance")) | |
45 | 43 | ||
46 | - | let projectStake = tryGetInteger(Address( | |
44 | + | let projectStake = tryGetInteger(Address(poolBBB), (toString(this) + "_indexStaked")) | |
47 | 45 | ||
48 | - | let totalStake = tryGetInteger(Address( | |
46 | + | let totalStake = tryGetInteger(Address(poolBBB), "global_poolToken_amount") | |
49 | 47 | ||
50 | - | let assetWeight = tryGetInteger(Address( | |
48 | + | let assetWeight = tryGetInteger(Address(poolBBB), (("static_" + toBase58String(puzzle)) + "_weight")) | |
51 | 49 | ||
52 | 50 | let BBBlpInPuzzle = fraction(((puzzleInPool / assetWeight) * 10000), projectStake, totalStake) | |
53 | 51 | ||
54 | 52 | let keyAddressesRegistered = "Addresses registered" | |
55 | 53 | ||
56 | 54 | let addresses = dropRight(tryGetString(this, keyAddressesRegistered), 1) | |
57 | 55 | ||
58 | 56 | let keyBurnxtnAmount = "BURN-XTN total rewards" | |
59 | 57 | ||
60 | 58 | let keyRomeAmount = "ROME total rewards" | |
61 | 59 | ||
62 | 60 | let keyPuzzleAmount = "PUZZLE total rewards" | |
63 | 61 | ||
64 | 62 | let keyWavesAmount = "WAVES total rewards" | |
65 | 63 | ||
66 | 64 | let keyWhirlpoolAmount = "WHIRLPOOL total rewards" | |
67 | 65 | ||
68 | 66 | let keyTotalPuzzleValue = "Total puzzle value" | |
69 | 67 | ||
70 | 68 | let keyTotalBurnxtnPaid = "Total BURN-XTN paid" | |
71 | 69 | ||
72 | 70 | let keyTotalWhirlpoolPaid = "Total WHIRLPOOL paid" | |
73 | 71 | ||
74 | 72 | let keyTotalRomePaid = "Total ROME paid" | |
75 | 73 | ||
76 | 74 | let keyTotalWavesPaid = "Total WAVES paid" | |
75 | + | ||
76 | + | let keyRomeBalance = "ROME balance" | |
77 | 77 | ||
78 | 78 | let WFSlist = ["Gnpy5nVajPP3XQQVxrHboMAsXtjnyWAxybMDdKrbr8sD", "BT9Q4mQdQQmei2r5YNMBMasZBQj7myNaiz6QHba5cPXS", "BMvkyFtPVmFatpFR9QVFKR5MYTcZVTY2VUwFZ25vrAAc", "77Rqu8TLjBdMtDuXd9o5fUSGo64zQe5FCcao5L8Ht9j8", "8KnhBLV49SDJzq1SSy1YvGHYY6m7Q146bV7Q6GKqQb5C", "FFxsUfKbHEW4zZywLUL55ip8Nqp6fcWDsq7y3an9yQhe", "5nQRedGHoVpEQasMQivb1UMvFBCHXefXPXtURbMMnfsu", "6N3MSFtJGvT79ucX4pLftxP7fGs8DnmYdPedvnoNbVt9", "dFC2iJL4LDWasq9YzHf2kWfPNP69Tyamii93ns9BHvM", "A158T7yZLtmuiMEs21P9jV2ftbMXzy3MnfHMEu1eMAGK"] | |
79 | 79 | ||
80 | 80 | let BBBlist = ["9pCxoGtD18GeH9gCemzqrjHMMjfyBQDfsrRAuxSRagMc", "7DgFgCkBjVDc5P9ZgwsVL9SiTi7kXJuS4aRVgb7ZHW3k", "76bTvE8ttHvsuN1FuH4Kc8QUW4kL4m8c1cjfsXy2GfbV", "4Zrf4H5tiFcQL8eQmnA2wJ1XWPEBH6h1G2MefZDYmcCB", "2DtC4nFnxz5UM6mbjPwMVZpQWZFUqxs52oZrBeNRk9Ao", "DjZGMAFfoQWkMW3S5FTsQN3joncZt6BsmhnEK3ggLxmN", "BneaZXD6ovDJcV5rgfr8hsHZaMQsJQ8DH6a5gTnGCpBc", "4EKfgzFkd5UGKrjnaJV3w7argW1YmF4hq54xWQFzAXb9", "8hGDkWKiu2igDpWT3Hpr4mchDD6xwJ9hGm2h2jnUvTqz", "E3ZnSejpXL1Xr6VG4QoLh8xod9NMgpPe473r9Qk2HibL"] | |
81 | 81 | ||
82 | 82 | let SURFboardList = ["DzLSgEaBB4UNbPCZekPSzbQ85KokMB7d1KRRmzUPu5hs", "WmWzsbb3PNvzJ4w4Fb73KcoNGLXumgYZagV22zEiX1w", "7RrxbgayUksPHrA799pKuCr61reT8nENdqCkgVHPgaN2", "FmDLfzspbVJeKhKduLDUba2HoVdRrKtswDKMU3e9qjtP", "HmQvVyQdEjafLrpKPSigdafvcYvLbNYGEgVCxLZRWt1y", "2rVxNMXuvug74TorLQZGC2ERHjAbJnVUgNXQ1kJmtnAe", "9yb9yGJm6gzVozBHuQVHBdAnzfct3N9bRpdjjNUnrzcC", "s1SfGVshf2jKCA9KvvKKvUuK8utp3Ne3ee8Lp6KKLRw", "3E3yb7TvDK762dn11dmRLwapghaefQUEyunVdXSNp4tB", "FH75TvApyVtfd9X5a1Ar19Ns9DNJvzpzLFE5pjh1wi4h", "EgqkbDyWRPgVNVqtEEtRSzWcGD33orVoE2bzYdAdieQS", "DsKyJpJCZcFv9jSnQbQVG4Jx3WSP1KtfHhAKTkSKrVBj", "AesPr5UFDgY5jZXYUZ8JkbYtJovVdDHby15SCksEhmJK", "AVsfdqw2m5aUNxa1HY9emLmCLBfVAGTxVu4ef3xEDKC8", "5jdvSSY2K7h8UiUCXUgK9T7zfMryqw2itKP8BysdXDDk", "A4voKZes8MVDAXyQjKkb6bdEcqMbvB4ptzbpqYqveG5n", "34oZKaWHpSJrZvGLdYu5WG8WWXg7rwF2HHx8K15GfUCQ", "77McCHkmNrRM4DjqkSM9B8YjuJcKtn67jQge1pzZrQ8T", "7NEFBnvGGMfYdBnhMLNpuVgS22LpcgXCZgHfm8DHmmiA", "GoF9yokxHgPNoxoWgjjdmGeWhcLYArSsxqffRtfYGtfs"] | |
83 | 83 | ||
84 | 84 | @Callable(i) | |
85 | 85 | func invokeClI1 () = if ((i.caller != this)) | |
86 | 86 | then throw("access only by project owner") | |
87 | 87 | else { | |
88 | 88 | let cl = invoke(this, "claimInvestPuzzle", nil, nil) | |
89 | 89 | if ((cl == cl)) | |
90 | 90 | then { | |
91 | 91 | let dt = invoke(this, "data", nil, nil) | |
92 | 92 | if ((dt == dt)) | |
93 | 93 | then nil | |
94 | 94 | else throw("Strict value is not equal to itself.") | |
95 | 95 | } | |
96 | 96 | else throw("Strict value is not equal to itself.") | |
97 | 97 | } | |
98 | 98 | ||
99 | 99 | ||
100 | 100 | ||
101 | 101 | @Callable(i) | |
102 | 102 | func claimInvestPuzzle () = if ((i.caller != this)) | |
103 | 103 | then throw("access only by project owner") | |
104 | 104 | else { | |
105 | - | let | |
106 | - | if (( | |
105 | + | let claimPuzzleStaking = invoke(puzzleStaking, "claimReward", nil, nil) | |
106 | + | if ((claimPuzzleStaking == claimPuzzleStaking)) | |
107 | 107 | then { | |
108 | - | let claimPuzzleStaking = invoke(puzzleStaking, "claimReward", nil, nil) | |
109 | - | if ((claimPuzzleStaking == claimPuzzleStaking)) | |
110 | - | then { | |
111 | - | let poolOneTokenInv = invoke(Address(base58'3PR1Qvi9mHT35SwWEkLSqqE2L8thiPLdVWU'), "generateIndexWithOneTokenAndStake", [toBase58String(poolBBB)], [AttachedPayment(puzzle, assetBalance(this, puzzle))]) | |
112 | - | if ((poolOneTokenInv == poolOneTokenInv)) | |
113 | - | then { | |
114 | - | let romeBalanceAfter = assetBalance(this, rome) | |
115 | - | [IntegerEntry("Activated blockheight", height), IntegerEntry(keyBurnxtnAmount, assetBalance(this, burnxtn)), IntegerEntry(keyRomeAmount, (romeBalanceAfter - romeBalanceBefore)), IntegerEntry(keyWavesAmount, if (((wavesBalance(this).available - d8) > 0)) | |
116 | - | then (wavesBalance(this).available - d8) | |
117 | - | else 0), IntegerEntry(keyWhirlpoolAmount, assetBalance(this, whirlpool))] | |
118 | - | } | |
119 | - | else throw("Strict value is not equal to itself.") | |
120 | - | } | |
108 | + | let poolOneTokenInv = invoke(Address(base58'3PR1Qvi9mHT35SwWEkLSqqE2L8thiPLdVWU'), "generateIndexWithOneTokenAndStake", [toBase58String(poolBBB)], [AttachedPayment(puzzle, assetBalance(this, puzzle))]) | |
109 | + | if ((poolOneTokenInv == poolOneTokenInv)) | |
110 | + | then [IntegerEntry("Activated blockheight", height), IntegerEntry(keyBurnxtnAmount, assetBalance(this, burnxtn)), IntegerEntry(keyRomeAmount, (assetBalance(this, rome) - getIntegerValue(this, keyRomeBalance))), IntegerEntry(keyWavesAmount, if (((wavesBalance(this).available - d8) > 0)) | |
111 | + | then (wavesBalance(this).available - d8) | |
112 | + | else 0), IntegerEntry(keyWhirlpoolAmount, assetBalance(this, whirlpool))] | |
121 | 113 | else throw("Strict value is not equal to itself.") | |
122 | 114 | } | |
123 | 115 | else throw("Strict value is not equal to itself.") | |
124 | 116 | } | |
125 | 117 | ||
126 | 118 | ||
127 | 119 | ||
128 | 120 | @Callable(i) | |
129 | 121 | func data () = if ((i.caller != this)) | |
130 | 122 | then throw("access only by project owner") | |
131 | 123 | else [IntegerEntry("puzzle balance", assetBalance(this, puzzle)), IntegerEntry("puzzle staked", puzzleStaked), IntegerEntry("puzzle BBB LP", BBBlpInPuzzle), IntegerEntry(keyTotalPuzzleValue, ((assetBalance(this, puzzle) + puzzleStaked) + BBBlpInPuzzle)), IntegerEntry("WFS puzzle value", fraction(fraction(tryGetInteger(this, keyTotalPuzzleValue), 1, 110), 10, 9)), IntegerEntry("BBB puzzle value", fraction(fraction(tryGetInteger(this, keyTotalPuzzleValue), 10, 110), 10, 9))] | |
132 | 124 | ||
133 | 125 | ||
134 | 126 | ||
135 | 127 | @Callable(i) | |
136 | 128 | func invoker2 () = if ((i.caller != this)) | |
137 | 129 | then throw("access only by project owner") | |
138 | 130 | else { | |
139 | 131 | let t = invoke(this, "trackTotalPaid", nil, nil) | |
140 | 132 | if ((t == t)) | |
141 | 133 | then { | |
142 | 134 | let list = split_4C(addresses, ",") | |
143 | 135 | func r (accum,address) = invoke(this, "distributeRewards", [address], nil) | |
144 | 136 | ||
145 | 137 | let invoker = { | |
146 | 138 | let $l = list | |
147 | 139 | let $s = size($l) | |
148 | 140 | let $acc0 = nil | |
149 | 141 | func $f0_1 ($a,$i) = if (($i >= $s)) | |
150 | 142 | then $a | |
151 | 143 | else r($a, $l[$i]) | |
152 | 144 | ||
153 | 145 | func $f0_2 ($a,$i) = if (($i >= $s)) | |
154 | 146 | then $a | |
155 | 147 | else throw("List size exceeds 40") | |
156 | 148 | ||
157 | 149 | $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($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) | |
158 | 150 | } | |
159 | 151 | if ((invoker == invoker)) | |
160 | 152 | then { | |
161 | 153 | let bs = invoke(this, "burnSurf", nil, nil) | |
162 | 154 | if ((bs == bs)) | |
163 | 155 | then nil | |
164 | 156 | else throw("Strict value is not equal to itself.") | |
165 | 157 | } | |
166 | 158 | else throw("Strict value is not equal to itself.") | |
167 | 159 | } | |
168 | 160 | else throw("Strict value is not equal to itself.") | |
169 | 161 | } | |
170 | 162 | ||
171 | 163 | ||
172 | 164 | ||
173 | 165 | @Callable(i) | |
174 | 166 | func trackTotalPaid () = if ((i.caller != this)) | |
175 | 167 | then throw("access only by project owner") | |
176 | 168 | else { | |
177 | 169 | let amountBurnxtn = tryGetInteger(this, keyBurnxtnAmount) | |
178 | 170 | let amountWhirlpool = tryGetInteger(this, keyWhirlpoolAmount) | |
179 | 171 | let amountWaves = tryGetInteger(this, keyWavesAmount) | |
180 | 172 | let amountRome = tryGetInteger(this, keyRomeAmount) | |
181 | 173 | [IntegerEntry(keyTotalBurnxtnPaid, (amountBurnxtn + tryGetInteger(this, keyTotalBurnxtnPaid))), IntegerEntry(keyTotalWhirlpoolPaid, (amountWhirlpool + tryGetInteger(this, keyTotalWhirlpoolPaid))), IntegerEntry(keyTotalWavesPaid, (amountWaves + tryGetInteger(this, keyTotalWavesPaid))), IntegerEntry(keyTotalRomePaid, (amountRome + tryGetInteger(this, keyTotalRomePaid)))] | |
182 | 174 | } | |
183 | 175 | ||
184 | 176 | ||
185 | 177 | ||
186 | 178 | @Callable(i) | |
187 | 179 | func distributeRewards (address) = if ((i.caller != this)) | |
188 | 180 | then throw("access only by project owner") | |
189 | 181 | else { | |
190 | 182 | func foldFunc (acc,WFS) = ((acc + assetBalance(addressFromStringValue(address), fromBase58String(WFS))) + (if ((tryGetString(puzzleMarket, (("nft_" + WFS) + "_seller")) == address)) | |
191 | 183 | then 1 | |
192 | 184 | else 0)) | |
193 | 185 | ||
194 | 186 | let shareWFS = { | |
195 | 187 | let $l = WFSlist | |
196 | 188 | let $s = size($l) | |
197 | 189 | let $acc0 = 0 | |
198 | 190 | func $f0_1 ($a,$i) = if (($i >= $s)) | |
199 | 191 | then $a | |
200 | 192 | else foldFunc($a, $l[$i]) | |
201 | 193 | ||
202 | 194 | func $f0_2 ($a,$i) = if (($i >= $s)) | |
203 | 195 | then $a | |
204 | 196 | else throw("List size exceeds 10") | |
205 | 197 | ||
206 | 198 | $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) | |
207 | 199 | } | |
208 | 200 | func foldFuncB (acc,BBB) = ((acc + assetBalance(addressFromStringValue(address), fromBase58String(BBB))) + (if ((tryGetString(puzzleMarket, (("nft_" + BBB) + "_seller")) == address)) | |
209 | 201 | then 1 | |
210 | 202 | else 0)) | |
211 | 203 | ||
212 | 204 | let shareBBB = { | |
213 | 205 | let $l = BBBlist | |
214 | 206 | let $s = size($l) | |
215 | 207 | let $acc0 = 0 | |
216 | 208 | func $f1_1 ($a,$i) = if (($i >= $s)) | |
217 | 209 | then $a | |
218 | 210 | else foldFuncB($a, $l[$i]) | |
219 | 211 | ||
220 | 212 | func $f1_2 ($a,$i) = if (($i >= $s)) | |
221 | 213 | then $a | |
222 | 214 | else throw("List size exceeds 10") | |
223 | 215 | ||
224 | 216 | $f1_2($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10) | |
225 | 217 | } | |
226 | 218 | func foldFuncC (acc,SURFboard) = ((acc + assetBalance(addressFromStringValue(address), fromBase58String(SURFboard))) + (if ((tryGetString(puzzleMarket, (("nft_" + SURFboard) + "_seller")) == address)) | |
227 | 219 | then 1 | |
228 | 220 | else 0)) | |
229 | 221 | ||
230 | 222 | let amountSURFboard = { | |
231 | 223 | let $l = SURFboardList | |
232 | 224 | let $s = size($l) | |
233 | 225 | let $acc0 = 0 | |
234 | 226 | func $f2_1 ($a,$i) = if (($i >= $s)) | |
235 | 227 | then $a | |
236 | 228 | else foldFuncC($a, $l[$i]) | |
237 | 229 | ||
238 | 230 | func $f2_2 ($a,$i) = if (($i >= $s)) | |
239 | 231 | then $a | |
240 | 232 | else throw("List size exceeds 20") | |
241 | 233 | ||
242 | 234 | $f2_2($f2_1($f2_1($f2_1($f2_1($f2_1($f2_1($f2_1($f2_1($f2_1($f2_1($f2_1($f2_1($f2_1($f2_1($f2_1($f2_1($f2_1($f2_1($f2_1($f2_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20) | |
243 | 235 | } | |
244 | 236 | if ((((shareWFS + shareBBB) + amountSURFboard) == 0)) | |
245 | 237 | then { | |
246 | 238 | let list = split_4C(addresses, ",") | |
247 | 239 | let noNFTindex = value(indexOf(list, address)) | |
248 | 240 | let listMinusNoNFT = removeByIndex(list, noNFTindex) | |
249 | 241 | let minusNoNFTstr = (makeString(listMinusNoNFT, ",") + ",") | |
250 | 242 | [StringEntry(keyAddressesRegistered, minusNoNFTstr)] | |
251 | 243 | } | |
252 | 244 | else { | |
253 | 245 | let amountBurnxtn = fraction(tryGetInteger(this, keyBurnxtnAmount), (shareWFS + (shareBBB * 10)), 110) | |
254 | 246 | let amountWhirlpool = fraction(tryGetInteger(this, keyWhirlpoolAmount), (shareWFS + (shareBBB * 10)), 110) | |
255 | 247 | let amountWaves = fraction(tryGetInteger(this, keyWavesAmount), (shareWFS + (shareBBB * 10)), 110) | |
256 | 248 | let amountRome = fraction(tryGetInteger(this, keyRomeAmount), (shareWFS + (shareBBB * 10)), 110) | |
257 | 249 | [ScriptTransfer(addressFromStringValue(address), amountBurnxtn, burnxtn), ScriptTransfer(addressFromStringValue(address), amountWhirlpool, whirlpool), ScriptTransfer(addressFromStringValue(address), amountWaves, unit), ScriptTransfer(addressFromStringValue(address), amountRome, rome), ScriptTransfer(addressFromStringValue(address), (amountSURFboard * d6), surf)] | |
258 | 250 | } | |
259 | 251 | } | |
260 | 252 | ||
261 | 253 | ||
262 | 254 | ||
263 | 255 | @Callable(i) | |
264 | 256 | func burnSurf () = if ((i.caller != this)) | |
265 | 257 | then throw("access only by project owner") | |
266 | 258 | else [Burn(surf, d6), IntegerEntry("SURF total burned", (tryGetInteger(this, "SURF total burned") + d6))] | |
267 | 259 | ||
268 | 260 | ||
269 | 261 | ||
270 | 262 | @Callable(i) | |
271 | 263 | func register () = if (contains(tryGetString(this, keyAddressesRegistered), toString(i.caller))) | |
272 | 264 | then throw("already registered") | |
273 | 265 | else if ((size(split_4C(addresses, ",")) == 30)) | |
274 | 266 | then throw("max reached") | |
275 | 267 | else [StringEntry(keyAddressesRegistered, ((tryGetString(this, keyAddressesRegistered) + toString(i.caller)) + ","))] | |
276 | 268 | ||
277 | 269 | ||
278 | 270 | ||
279 | 271 | @Callable(i) | |
280 | 272 | func claimByAnybody () = if (((getIntegerValue(this, "Activated blockheight") + (30 * 1440)) > height)) | |
281 | 273 | then throw(("Wait till blockheight:" + toString((getIntegerValue(this, "Activated blockheight") + (30 * 1440))))) | |
282 | 274 | else { | |
283 | 275 | let puzzleBalanceBefore = assetBalance(this, puzzle) | |
284 | 276 | if ((puzzleBalanceBefore == puzzleBalanceBefore)) | |
285 | 277 | then { | |
286 | - | let | |
287 | - | if (( | |
278 | + | let claimPuzzleStaking = invoke(puzzleStaking, "claimReward", nil, nil) | |
279 | + | if ((claimPuzzleStaking == claimPuzzleStaking)) | |
288 | 280 | then { | |
289 | - | let | |
290 | - | if (( | |
281 | + | let claimInv = invoke(Address(poolBBB), "claimIndexRewards", nil, nil) | |
282 | + | if ((claimInv == claimInv)) | |
291 | 283 | then { | |
292 | - | let claimInv = invoke(Address(poolBBB), "claimIndexRewards", nil, nil) | |
293 | - | if ((claimInv == claimInv)) | |
294 | - | then { | |
295 | - | let puzzleBalanceAfter = assetBalance(this, puzzle) | |
296 | - | let romeBalanceAfter = assetBalance(this, rome) | |
297 | - | [IntegerEntry(keyBurnxtnAmount, assetBalance(this, burnxtn)), IntegerEntry(keyRomeAmount, (romeBalanceAfter - romeBalanceBefore)), IntegerEntry(keyPuzzleAmount, (puzzleBalanceAfter - puzzleBalanceBefore)), IntegerEntry(keyWavesAmount, if (((wavesBalance(this).available - d8) > 0)) | |
298 | - | then (wavesBalance(this).available - d8) | |
299 | - | else 0), IntegerEntry(keyWhirlpoolAmount, assetBalance(this, whirlpool))] | |
300 | - | } | |
301 | - | else throw("Strict value is not equal to itself.") | |
284 | + | let puzzleBalanceAfter = assetBalance(this, puzzle) | |
285 | + | [IntegerEntry(keyBurnxtnAmount, assetBalance(this, burnxtn)), IntegerEntry(keyRomeAmount, (assetBalance(this, rome) - getIntegerValue(this, keyRomeBalance))), IntegerEntry(keyPuzzleAmount, (puzzleBalanceAfter - puzzleBalanceBefore)), IntegerEntry(keyWavesAmount, if (((wavesBalance(this).available - d8) > 0)) | |
286 | + | then (wavesBalance(this).available - d8) | |
287 | + | else 0), IntegerEntry(keyWhirlpoolAmount, assetBalance(this, whirlpool))] | |
302 | 288 | } | |
303 | 289 | else throw("Strict value is not equal to itself.") | |
304 | 290 | } | |
305 | 291 | else throw("Strict value is not equal to itself.") | |
306 | 292 | } | |
307 | 293 | else throw("Strict value is not equal to itself.") | |
308 | 294 | } | |
309 | 295 | ||
310 | 296 | ||
311 | 297 | ||
312 | 298 | @Callable(i) | |
313 | 299 | func invokerByAnybody () = if (((getIntegerValue(this, "Activated blockheight") + (30 * 1440)) > height)) | |
314 | 300 | then throw(("Wait till blockheight:" + toString((getIntegerValue(this, "Activated blockheight") + (30 * 1440))))) | |
315 | 301 | else { | |
316 | 302 | let t = invoke(this, "trackTotalPaid", nil, nil) | |
317 | 303 | if ((t == t)) | |
318 | 304 | then { | |
319 | 305 | let list = split_4C(addresses, ",") | |
320 | 306 | func r (accum,address) = invoke(this, "distributeRewardsB", [address], nil) | |
321 | 307 | ||
322 | 308 | let invoker = { | |
323 | 309 | let $l = list | |
324 | 310 | let $s = size($l) | |
325 | 311 | let $acc0 = nil | |
326 | 312 | func $f0_1 ($a,$i) = if (($i >= $s)) | |
327 | 313 | then $a | |
328 | 314 | else r($a, $l[$i]) | |
329 | 315 | ||
330 | 316 | func $f0_2 ($a,$i) = if (($i >= $s)) | |
331 | 317 | then $a | |
332 | 318 | else throw("List size exceeds 40") | |
333 | 319 | ||
334 | 320 | $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($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) | |
335 | 321 | } | |
336 | 322 | if ((invoker == invoker)) | |
337 | 323 | then { | |
338 | 324 | let bs = invoke(this, "burnSurf", nil, nil) | |
339 | 325 | if ((bs == bs)) | |
340 | 326 | then nil | |
341 | 327 | else throw("Strict value is not equal to itself.") | |
342 | 328 | } | |
343 | 329 | else throw("Strict value is not equal to itself.") | |
344 | 330 | } | |
345 | 331 | else throw("Strict value is not equal to itself.") | |
346 | 332 | } | |
347 | 333 | ||
348 | 334 | ||
349 | 335 | ||
350 | 336 | @Callable(i) | |
351 | 337 | func distributeRewardsB (address) = if ((i.caller != this)) | |
352 | 338 | then throw("access only by project owner") | |
353 | 339 | else { | |
354 | 340 | func foldFunc (acc,WFS) = ((acc + assetBalance(addressFromStringValue(address), fromBase58String(WFS))) + (if ((tryGetString(puzzleMarket, (("nft_" + WFS) + "_seller")) == address)) | |
355 | 341 | then 1 | |
356 | 342 | else 0)) | |
357 | 343 | ||
358 | 344 | let shareWFS = { | |
359 | 345 | let $l = WFSlist | |
360 | 346 | let $s = size($l) | |
361 | 347 | let $acc0 = 0 | |
362 | 348 | func $f0_1 ($a,$i) = if (($i >= $s)) | |
363 | 349 | then $a | |
364 | 350 | else foldFunc($a, $l[$i]) | |
365 | 351 | ||
366 | 352 | func $f0_2 ($a,$i) = if (($i >= $s)) | |
367 | 353 | then $a | |
368 | 354 | else throw("List size exceeds 10") | |
369 | 355 | ||
370 | 356 | $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) | |
371 | 357 | } | |
372 | 358 | func foldFuncB (acc,BBB) = ((acc + assetBalance(addressFromStringValue(address), fromBase58String(BBB))) + (if ((tryGetString(puzzleMarket, (("nft_" + BBB) + "_seller")) == address)) | |
373 | 359 | then 1 | |
374 | 360 | else 0)) | |
375 | 361 | ||
376 | 362 | let shareBBB = { | |
377 | 363 | let $l = BBBlist | |
378 | 364 | let $s = size($l) | |
379 | 365 | let $acc0 = 0 | |
380 | 366 | func $f1_1 ($a,$i) = if (($i >= $s)) | |
381 | 367 | then $a | |
382 | 368 | else foldFuncB($a, $l[$i]) | |
383 | 369 | ||
384 | 370 | func $f1_2 ($a,$i) = if (($i >= $s)) | |
385 | 371 | then $a | |
386 | 372 | else throw("List size exceeds 10") | |
387 | 373 | ||
388 | 374 | $f1_2($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10) | |
389 | 375 | } | |
390 | 376 | func foldFuncC (acc,SURFboard) = ((acc + assetBalance(addressFromStringValue(address), fromBase58String(SURFboard))) + (if ((tryGetString(puzzleMarket, (("nft_" + SURFboard) + "_seller")) == address)) | |
391 | 377 | then 1 | |
392 | 378 | else 0)) | |
393 | 379 | ||
394 | 380 | let amountSURFboard = { | |
395 | 381 | let $l = SURFboardList | |
396 | 382 | let $s = size($l) | |
397 | 383 | let $acc0 = 0 | |
398 | 384 | func $f2_1 ($a,$i) = if (($i >= $s)) | |
399 | 385 | then $a | |
400 | 386 | else foldFuncC($a, $l[$i]) | |
401 | 387 | ||
402 | 388 | func $f2_2 ($a,$i) = if (($i >= $s)) | |
403 | 389 | then $a | |
404 | 390 | else throw("List size exceeds 20") | |
405 | 391 | ||
406 | 392 | $f2_2($f2_1($f2_1($f2_1($f2_1($f2_1($f2_1($f2_1($f2_1($f2_1($f2_1($f2_1($f2_1($f2_1($f2_1($f2_1($f2_1($f2_1($f2_1($f2_1($f2_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20) | |
407 | 393 | } | |
408 | 394 | if ((((shareWFS + shareBBB) + amountSURFboard) == 0)) | |
409 | 395 | then { | |
410 | 396 | let list = split_4C(addresses, ",") | |
411 | 397 | let noNFTindex = value(indexOf(list, address)) | |
412 | 398 | let listMinusNoNFT = removeByIndex(list, noNFTindex) | |
413 | 399 | let minusNoNFTstr = (makeString(listMinusNoNFT, ",") + ",") | |
414 | 400 | [StringEntry(keyAddressesRegistered, minusNoNFTstr)] | |
415 | 401 | } | |
416 | 402 | else { | |
417 | 403 | let amountBurnxtn = fraction(tryGetInteger(this, keyBurnxtnAmount), (shareWFS + (shareBBB * 10)), 110) | |
418 | 404 | let amountWhirlpool = fraction(tryGetInteger(this, keyWhirlpoolAmount), (shareWFS + (shareBBB * 10)), 110) | |
419 | 405 | let amountWaves = fraction(tryGetInteger(this, keyWavesAmount), (shareWFS + (shareBBB * 10)), 110) | |
420 | 406 | let amountRome = fraction(tryGetInteger(this, keyRomeAmount), (shareWFS + (shareBBB * 10)), 110) | |
421 | 407 | let amountPuzzle = fraction(tryGetInteger(this, keyPuzzleAmount), (shareWFS + (shareBBB * 10)), 110) | |
422 | 408 | [ScriptTransfer(addressFromStringValue(address), amountBurnxtn, burnxtn), ScriptTransfer(addressFromStringValue(address), amountWhirlpool, whirlpool), ScriptTransfer(addressFromStringValue(address), amountWaves, unit), ScriptTransfer(addressFromStringValue(address), amountRome, rome), ScriptTransfer(addressFromStringValue(address), amountPuzzle, puzzle), ScriptTransfer(addressFromStringValue(address), (amountSURFboard * d6), surf)] | |
423 | 409 | } | |
424 | 410 | } | |
425 | 411 | ||
426 | 412 | ||
427 | 413 | ||
428 | 414 | @Callable(i) | |
415 | + | func setRomeBalance (amount) = if ((i.caller != this)) | |
416 | + | then throw("access only by project owner") | |
417 | + | else [IntegerEntry(keyRomeBalance, (amount * d6))] | |
418 | + | ||
419 | + | ||
420 | + | ||
421 | + | @Callable(i) | |
429 | 422 | func deleteEntry () = if ((i.caller != this)) | |
430 | 423 | then throw("access only by project owner") | |
431 | 424 | else [DeleteEntry(keyAddressesRegistered)] | |
432 | 425 | ||
433 | 426 | ||
434 | 427 | ||
435 | 428 | @Callable(i) | |
436 | 429 | func changeIntegerEntry (keyString,integer) = if ((i.caller != this)) | |
437 | 430 | then throw("access only by project owner") | |
438 | 431 | else [IntegerEntry(keyString, integer)] | |
439 | 432 | ||
440 | 433 |
github/deemru/w8io/6500d08 61.65 ms ◑