tx · 3zNmEVWWUG5rThBpign4tgGk3zF6tH2MW2qUDw6SitH2 3PFe3tWVs5Ckv25NLpjnk7FePThMjfcFvxM: -0.01000000 Waves 2023.12.26 11:20 [3969333] smart account 3PFe3tWVs5Ckv25NLpjnk7FePThMjfcFvxM > SELF 0.00000000 Waves
{ "type": 13, "id": "3zNmEVWWUG5rThBpign4tgGk3zF6tH2MW2qUDw6SitH2", "fee": 1000000, "feeAssetId": null, "timestamp": 1703578868936, "version": 2, "chainId": 87, "sender": "3PFe3tWVs5Ckv25NLpjnk7FePThMjfcFvxM", "senderPublicKey": "9hMgJtjZvTDCisH8nZfVJrhvXAMDRww5a3DvqA41oebE", "proofs": [ "5ECprrCxrya9weXXMtmdGkQFhv6hdmMKCRdvXNNpcpk5YatzRu68VTTAZXg4gfsLSJr8S4E2948hfKvKpKeMYx7v" ], "script": "base64:BgITCAISAwoBARIAEgMKAQgSAwoBCAkAA1NFUAICX18AEW1haW5fY29udHJhY3Rfa2V5Ag1tYWluX2NvbnRyYWN0ABptYWluX2NvbnRyYWN0X2xwX3Bvb2xzX2tleQIIbHBfcG9vbHMAKm1haW5fY29udHJhY3RfY2xhaW1fcG9vbF9yZXdhcmRzX2Z1bmNfbmFtZQIQY2xhaW1Qb29sUmV3YXJkcwAWd2F2ZXNfZXhjaGFuZ2VfYWRkcmVzcwEaAVez5uZVGBFpsOQzD4hRQ6ScrtbVSwNLEVgADHR3YXBfYWRkcmVzcwEaAVdWr1FiJSk5tW/fptjM4r5LDlD9oMpAzwQACXNidF9hc3NldAEgDZ6U5N95Irl+cE0MjjGbPQcPgrJ95ZAG5OSeB6DqUcIACHd4X2Fzc2V0ASCTARyrqcduJVfOZp5xtr2qa/g86FgLKu7ZoE67PNwUsQEPYXNBZGRyZXNzU3RyaW5nAQdhZGRyZXNzBAckbWF0Y2gwCQCmCAEFB2FkZHJlc3MDCQABAgUHJG1hdGNoMAIHQWRkcmVzcwQBYQUHJG1hdGNoMAkApQgBBQFhCQACAQIgZmFpbCB0byBjYXN0IGludG8gQWRkcmVzcyBTdHJpbmcEAWkBGGNsYWltUmV3YXJkc09uVGhyZWVQb29scwECaWQEFW1haW5fY29udHJhY3RfYWRkcmVzcwkBEUBleHRyTmF0aXZlKDEwNjIpAQkBC3ZhbHVlT3JFbHNlAgkAoggBBRFtYWluX2NvbnRyYWN0X2tleQIjM1A4RUg2U0xOMW5VeTkyQ1F6dTUzMXlYQ3lXYXhoczNRaHMEBXBvb2xzCQC1CQIJARFAZXh0ck5hdGl2ZSgxMDUzKQIFFW1haW5fY29udHJhY3RfYWRkcmVzcwUabWFpbl9jb250cmFjdF9scF9wb29sc19rZXkFA1NFUAQIc2l4UG9vbHMDCQAAAgUCaWQAAAkAzAgCCQCRAwIFBXBvb2xzAAAJAMwIAgkAkQMCBQVwb29scwABCQDMCAIJAJEDAgUFcG9vbHMAAgUDbmlsAwkAAAIFAmlkAAEJAMwIAgkAkQMCBQVwb29scwADCQDMCAIJAJEDAgUFcG9vbHMABAkAzAgCCQCRAwIFBXBvb2xzAAUFA25pbAMJAAACBQJpZAACCQDMCAIJAJEDAgUFcG9vbHMABgkAzAgCCQCRAwIFBXBvb2xzAAcJAMwIAgkAkQMCBQVwb29scwAIBQNuaWwDCQAAAgUCaWQAAwkAzAgCCQCRAwIFBXBvb2xzAAkJAMwIAgkAkQMCBQVwb29scwAKCQDMCAIJAJEDAgUFcG9vbHMACwUDbmlsBQNuaWwKAQxwb29sc0FjdGlvbnMCA2FjYwRwb29sBBBpbnZvY2F0aW9uUmVzdWx0CQD8BwQFFW1haW5fY29udHJhY3RfYWRkcmVzcwUqbWFpbl9jb250cmFjdF9jbGFpbV9wb29sX3Jld2FyZHNfZnVuY19uYW1lCQDMCAIFBHBvb2wFA25pbAUDbmlsAwkAAAIFEGludm9jYXRpb25SZXN1bHQFEGludm9jYXRpb25SZXN1bHQFA2FjYwkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgQGcmVzdWx0CgACJGwFCHNpeFBvb2xzCgACJHMJAJADAQUCJGwKAAUkYWNjMAUEdW5pdAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEMcG9vbHNBY3Rpb25zAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhRMaXN0IHNpemUgZXhjZWVkcyAxNQkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgAHAAgACQAKAAsADAANAA4ADwMJAAACBQZyZXN1bHQFBnJlc3VsdAUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBEm1haW5faW5mb19yZWFkb25seQAEDW1haW5fY29udHJhY3QJAQt2YWx1ZU9yRWxzZQIJAKIIAQURbWFpbl9jb250cmFjdF9rZXkCIzNQOEVINlNMTjFuVXk5MkNRenU1MzF5WEN5V2F4aHMzUWhzBBVtYWluX2NvbnRyYWN0X2FkZHJlc3MJARFAZXh0ck5hdGl2ZSgxMDYyKQEFDW1haW5fY29udHJhY3QECHRvdGFsR3d4BAZyZXN1bHQJAPwHBAkBB0FkZHJlc3MBBRZ3YXZlc19leGNoYW5nZV9hZGRyZXNzAhNnd3hVc2VySW5mb1JFQURPTkxZCQDMCAIFDW1haW5fY29udHJhY3QFA25pbAUDbmlsAwkAAAIFBnJlc3VsdAUGcmVzdWx0BAckbWF0Y2gwBQZyZXN1bHQDCQABAgUHJG1hdGNoMAIJTGlzdFtBbnldBAN2YWwFByRtYXRjaDAKAAFACQCRAwIFA3ZhbAAAAwkAAQIFAUACA0ludAUBQAkAAgEJAKwCAgkAAwEFAUACGCBjb3VsZG4ndCBiZSBjYXN0IHRvIEludAkAAgECGEZBVEFMOiBJbmNvbnNpc3RlbnQgZGF0YQkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgMJAAACBQh0b3RhbEd3eAUIdG90YWxHd3gEDnNidF9zdGFrZV9wb29sCQERQGV4dHJOYXRpdmUoMTA1MykCBRVtYWluX2NvbnRyYWN0X2FkZHJlc3MCDnNidF9zdGFrZV9wb29sBBZhZGRpdGlvbmFsX3Jld2FyZF9wb29sCQERQGV4dHJOYXRpdmUoMTA1MykCBRVtYWluX2NvbnRyYWN0X2FkZHJlc3MCFmFkZGl0aW9uYWxfcmV3YXJkX3Bvb2wED3RvdGFsX3d4X2xvY2tlZAkBEUBleHRyTmF0aXZlKDEwNTApAgUVbWFpbl9jb250cmFjdF9hZGRyZXNzAg90b3RhbF93eF9sb2NrZWQEEm1haW5fY29udHJhY3RfZGF0YQkAlgoEBQh0b3RhbEd3eAUOc2J0X3N0YWtlX3Bvb2wFFmFkZGl0aW9uYWxfcmV3YXJkX3Bvb2wFD3RvdGFsX3d4X2xvY2tlZAQFcG9vbHMJALUJAgkBEUBleHRyTmF0aXZlKDEwNTMpAgUVbWFpbl9jb250cmFjdF9hZGRyZXNzBRptYWluX2NvbnRyYWN0X2xwX3Bvb2xzX2tleQUDU0VQCgEVcG9vbHNfZGF0YV9jb2xsZWN0aW5nAgNhY2MEcG9vbAQMcG9vbF9hZGRyZXNzCQERQGV4dHJOYXRpdmUoMTA2MikBBQRwb29sBApwb29sX3Rva2VuCQERQGV4dHJOYXRpdmUoMTA1MykCBQxwb29sX2FkZHJlc3MCBXRva2VuBBFwb29sX3Rva2VuX2Ftb3VudAkBEUBleHRyTmF0aXZlKDEwNTApAgUMcG9vbF9hZGRyZXNzAgZ0b2tlbnMEEnBvb2xfcmV3YXJkX2Fzc2V0cwkAtQkCCQERQGV4dHJOYXRpdmUoMTA1MykCBQxwb29sX2FkZHJlc3MCB3Jld2FyZHMCASwEC3Bvb2xfa2lsbGVkCQERQGV4dHJOYXRpdmUoMTA1MSkCBQxwb29sX2FkZHJlc3MCCWlzX2tpbGxlZAQScG9vbF9sb2NrZWRfcGVyaW9kCQERQGV4dHJOYXRpdmUoMTA1MCkCBQxwb29sX2FkZHJlc3MCDWxvY2tlZF9wZXJpb2QKASNwb29sc19yZXdhcmRfYXNzZXRzX3R3YXBfY29sbGVjdGluZwIDYWNjCnBvb2xfYXNzZXQEC3R3YXBfcmVzdWx0CQD8BwQJAQdBZGRyZXNzAQUMdHdhcF9hZGRyZXNzAgl0d2FwTU9OVEgJAMwIAgUEcG9vbAkAzAgCBQpwb29sX2Fzc2V0CQDMCAIFCnBvb2xfdG9rZW4FA25pbAUDbmlsAwkAAAIFC3R3YXBfcmVzdWx0BQt0d2FwX3Jlc3VsdAQHJG1hdGNoMAULdHdhcF9yZXN1bHQDCQABAgUHJG1hdGNoMAIGU3RyaW5nBAN2YWwFByRtYXRjaDAJAM4IAgUDYWNjCQDMCAIJAKwCAgkArAICBQpwb29sX2Fzc2V0AgFfBQN2YWwFA25pbAkAAgECGEZBVEFMOiBJbmNvbnNpc3RlbnQgZGF0YQkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgQQcG9vbF90d2FwX3Jlc3VsdAoAAiRsBRJwb29sX3Jld2FyZF9hc3NldHMKAAIkcwkAkAMBBQIkbAoABSRhY2MwBQNuaWwKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBI3Bvb2xzX3Jld2FyZF9hc3NldHNfdHdhcF9jb2xsZWN0aW5nAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhNMaXN0IHNpemUgZXhjZWVkcyAzCQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADCQDOCAIFA2FjYwkAzAgCCQCYCgYFBHBvb2wFCnBvb2xfdG9rZW4FEXBvb2xfdG9rZW5fYW1vdW50BQtwb29sX2tpbGxlZAUScG9vbF9sb2NrZWRfcGVyaW9kBRBwb29sX3R3YXBfcmVzdWx0BQNuaWwECnBvb2xzX2RhdGEKAAIkbAkAzggCBQVwb29scwkAzAgCBQ5zYnRfc3Rha2VfcG9vbAUDbmlsCgACJHMJAJADAQUCJGwKAAUkYWNjMAUDbmlsCgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJARVwb29sc19kYXRhX2NvbGxlY3RpbmcCBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECFExpc3Qgc2l6ZSBleGNlZWRzIDE1CQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGAAcACAAJAAoACwAMAA0ADgAPCQCUCgIFA25pbAkAlAoCBRJtYWluX2NvbnRyYWN0X2RhdGEFCnBvb2xzX2RhdGEJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQESdXNlcl9pbmZvX3JlYWRvbmx5AQR1c2VyBA1tYWluX2NvbnRyYWN0CQELdmFsdWVPckVsc2UCCQCiCAEFEW1haW5fY29udHJhY3Rfa2V5AiMzUDhFSDZTTE4xblV5OTJDUXp1NTMxeVhDeVdheGhzM1FocwQVbWFpbl9jb250cmFjdF9hZGRyZXNzCQERQGV4dHJOYXRpdmUoMTA2MikBBQ1tYWluX2NvbnRyYWN0BA5zYnRfc3Rha2VfcG9vbAkBEUBleHRyTmF0aXZlKDEwNTMpAgUVbWFpbl9jb250cmFjdF9hZGRyZXNzAg5zYnRfc3Rha2VfcG9vbAQWYWRkaXRpb25hbF9yZXdhcmRfcG9vbAkBEUBleHRyTmF0aXZlKDEwNTMpAgUVbWFpbl9jb250cmFjdF9hZGRyZXNzAhZhZGRpdGlvbmFsX3Jld2FyZF9wb29sBA90b3RhbF93eF9sb2NrZWQJARFAZXh0ck5hdGl2ZSgxMDUwKQIFFW1haW5fY29udHJhY3RfYWRkcmVzcwIPdG90YWxfd3hfbG9ja2VkBBZzYnRfc3Rha2VfcG9vbF9hZGRyZXNzCQERQGV4dHJOYXRpdmUoMTA2MikBBQ5zYnRfc3Rha2VfcG9vbAQadXNlcl9zYnRfcG9vbF90b3RhbF9sb2NrZWQKAAFACQD8BwQFFnNidF9zdGFrZV9wb29sX2FkZHJlc3MCEGNsYWltYWJsZV90b2tlbnMJAMwIAgUEdXNlcgUDbmlsBQNuaWwDCQABAgUBQAIDSW50BQFACQACAQkArAICCQADAQUBQAIYIGNvdWxkbid0IGJlIGNhc3QgdG8gSW50AwkAAAIFGnVzZXJfc2J0X3Bvb2xfdG90YWxfbG9ja2VkBRp1c2VyX3NidF9wb29sX3RvdGFsX2xvY2tlZAQedXNlcl9zYnRfcG9vbF90b3RhbF9jbGFpbWVkX3d4CgABQAkA/AcEBRZzYnRfc3Rha2VfcG9vbF9hZGRyZXNzAg5jbGFpbWVkX3Jld2FyZAkAzAgCBQR1c2VyCQDMCAIJANgEAQUJc2J0X2Fzc2V0BQNuaWwFA25pbAMJAAECBQFAAgNJbnQFAUAJAAIBCQCsAgIJAAMBBQFAAhggY291bGRuJ3QgYmUgY2FzdCB0byBJbnQDCQAAAgUedXNlcl9zYnRfcG9vbF90b3RhbF9jbGFpbWVkX3d4BR51c2VyX3NidF9wb29sX3RvdGFsX2NsYWltZWRfd3gEGnVzZXJfc2J0X3Bvb2xfdW5jbGFpbWVkX3d4CgABQAkA/AcEBRZzYnRfc3Rha2VfcG9vbF9hZGRyZXNzAhBjbGFpbWFibGVfcmV3YXJkCQDMCAIFBHVzZXIJAMwIAgkA2AQBBQh3eF9hc3NldAUDbmlsBQNuaWwDCQABAgUBQAIDSW50BQFACQACAQkArAICCQADAQUBQAIYIGNvdWxkbid0IGJlIGNhc3QgdG8gSW50AwkAAAIFGnVzZXJfc2J0X3Bvb2xfdW5jbGFpbWVkX3d4BRp1c2VyX3NidF9wb29sX3VuY2xhaW1lZF93eAQfdXNlcl9zYnRfcG9vbF93YWl0aW5nX3RvX3VubG9jawoAAUAJAPwHBAUWc2J0X3N0YWtlX3Bvb2xfYWRkcmVzcwIUdXNlcl9sb2NrZWRfcmVhZG9ubHkJAMwIAgUEdXNlcgUDbmlsBQNuaWwDCQABAgUBQAIDSW50BQFACQACAQkArAICCQADAQUBQAIYIGNvdWxkbid0IGJlIGNhc3QgdG8gSW50AwkAAAIFH3VzZXJfc2J0X3Bvb2xfd2FpdGluZ190b191bmxvY2sFH3VzZXJfc2J0X3Bvb2xfd2FpdGluZ190b191bmxvY2sEEnVzZXJfc2J0X3Bvb2xfZGF0YQkAlgoEBRp1c2VyX3NidF9wb29sX3RvdGFsX2xvY2tlZAUedXNlcl9zYnRfcG9vbF90b3RhbF9jbGFpbWVkX3d4BRp1c2VyX3NidF9wb29sX3VuY2xhaW1lZF93eAUfdXNlcl9zYnRfcG9vbF93YWl0aW5nX3RvX3VubG9jawQFcG9vbHMJALUJAgkBEUBleHRyTmF0aXZlKDEwNTMpAgUVbWFpbl9jb250cmFjdF9hZGRyZXNzBRptYWluX2NvbnRyYWN0X2xwX3Bvb2xzX2tleQUDU0VQCgEVcG9vbHNfZGF0YV9hY2NvdW50aW5nAgNhY2MEcG9vbAQMcG9vbF9hZGRyZXNzCQERQGV4dHJOYXRpdmUoMTA2MikBBQRwb29sBApwb29sX3Rva2VuCQERQGV4dHJOYXRpdmUoMTA1MykCBQxwb29sX2FkZHJlc3MCBXRva2VuBBJ1c2VyX3N0YWtlZF9hbW91bnQKAAFACQD8BwQFDHBvb2xfYWRkcmVzcwIQY2xhaW1hYmxlX3Rva2VucwkAzAgCBQR1c2VyBQNuaWwFA25pbAMJAAECBQFAAgNJbnQFAUAJAAIBCQCsAgIJAAMBBQFAAhggY291bGRuJ3QgYmUgY2FzdCB0byBJbnQDCQAAAgUSdXNlcl9zdGFrZWRfYW1vdW50BRJ1c2VyX3N0YWtlZF9hbW91bnQEFXVzZXJfdG90YWxfd3hfY2xhaW1lZAoAAUAJAPwHBAUMcG9vbF9hZGRyZXNzAg5jbGFpbWVkX3Jld2FyZAkAzAgCBQR1c2VyCQDMCAIJANgEAQUId3hfYXNzZXQFA25pbAUDbmlsAwkAAQIFAUACA0ludAUBQAkAAgEJAKwCAgkAAwEFAUACGCBjb3VsZG4ndCBiZSBjYXN0IHRvIEludAMJAAACBRV1c2VyX3RvdGFsX3d4X2NsYWltZWQFFXVzZXJfdG90YWxfd3hfY2xhaW1lZAQWdXNlcl90b3RhbF9zYnRfY2xhaW1lZAoAAUAJAPwHBAUMcG9vbF9hZGRyZXNzAg5jbGFpbWVkX3Jld2FyZAkAzAgCBQR1c2VyCQDMCAIJANgEAQUJc2J0X2Fzc2V0BQNuaWwFA25pbAMJAAECBQFAAgNJbnQFAUAJAAIBCQCsAgIJAAMBBQFAAhggY291bGRuJ3QgYmUgY2FzdCB0byBJbnQDCQAAAgUWdXNlcl90b3RhbF9zYnRfY2xhaW1lZAUWdXNlcl90b3RhbF9zYnRfY2xhaW1lZAQRdXNlcl91bmNsYWltZWRfd3gKAAFACQD8BwQFDHBvb2xfYWRkcmVzcwIQY2xhaW1hYmxlX3Jld2FyZAkAzAgCBQR1c2VyCQDMCAIJANgEAQUId3hfYXNzZXQFA25pbAUDbmlsAwkAAQIFAUACA0ludAUBQAkAAgEJAKwCAgkAAwEFAUACGCBjb3VsZG4ndCBiZSBjYXN0IHRvIEludAMJAAACBRF1c2VyX3VuY2xhaW1lZF93eAURdXNlcl91bmNsYWltZWRfd3gEEnVzZXJfdW5jbGFpbWVkX1NidAoAAUAJAPwHBAUMcG9vbF9hZGRyZXNzAhBjbGFpbWFibGVfcmV3YXJkCQDMCAIFBHVzZXIJAMwIAgkA2AQBBQlzYnRfYXNzZXQFA25pbAUDbmlsAwkAAQIFAUACA0ludAUBQAkAAgEJAKwCAgkAAwEFAUACGCBjb3VsZG4ndCBiZSBjYXN0IHRvIEludAMJAAACBRJ1c2VyX3VuY2xhaW1lZF9TYnQFEnVzZXJfdW5jbGFpbWVkX1NidAkAzggCBQNhY2MJAMwIAgkAmQoHBQRwb29sBQpwb29sX3Rva2VuBRJ1c2VyX3N0YWtlZF9hbW91bnQFFXVzZXJfdG90YWxfd3hfY2xhaW1lZAUWdXNlcl90b3RhbF9zYnRfY2xhaW1lZAURdXNlcl91bmNsYWltZWRfd3gFEnVzZXJfdW5jbGFpbWVkX1NidAUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuBA91c2VyX3Bvb2xzX2RhdGEKAAIkbAUFcG9vbHMKAAIkcwkAkAMBBQIkbAoABSRhY2MwBQNuaWwKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBFXBvb2xzX2RhdGFfYWNjb3VudGluZwIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQIUTGlzdCBzaXplIGV4Y2VlZHMgMTUJAQUkZjBfMgIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYABwAIAAkACgALAAwADQAOAA8JAJQKAgUDbmlsCQCUCgIFEnVzZXJfc2J0X3Bvb2xfZGF0YQUPdXNlcl9wb29sc19kYXRhCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBD3NldE1haW5Db250cmFjdAEHYWRkcmVzcwMJAQIhPQIFBHRoaXMIBQFpBmNhbGxlcgkAAgECCW9ubHkgc2VsZgkAzAgCCQELU3RyaW5nRW50cnkCBRFtYWluX2NvbnRyYWN0X2tleQkBD2FzQWRkcmVzc1N0cmluZwEFB2FkZHJlc3MFA25pbAECdHgBBnZlcmlmeQAJAPQDAwgFAnR4CWJvZHlCeXRlcwkAkQMCCAUCdHgGcHJvb2ZzAAAIBQJ0eA9zZW5kZXJQdWJsaWNLZXmCChwU", "height": 3969333, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 5nqXni4Hczwj4NKdQCnfV5UUGDJdSoYao4UG3m85AetK Next: AeDnuCb1KS8pW6zf8KMhmnRSgDASKDja7Z7gktmcQShi Diff:
Old | New | Differences | |
---|---|---|---|
26 | 26 | ||
27 | 27 | ||
28 | 28 | @Callable(i) | |
29 | - | func | |
29 | + | func claimRewardsOnThreePools (id) = { | |
30 | 30 | let main_contract_address = addressFromStringValue(valueOrElse(getString(main_contract_key), "3P8EH6SLN1nUy92CQzu531yXCyWaxhs3Qhs")) | |
31 | 31 | let pools = split(getStringValue(main_contract_address, main_contract_lp_pools_key), SEP) | |
32 | - | let sixPools = if (!(isSecond)) | |
33 | - | then [pools[0], pools[1], pools[2], pools[3], pools[4], pools[5]] | |
34 | - | else [pools[6], pools[7], pools[8], pools[9], pools[10], pools[11]] | |
32 | + | let sixPools = if ((id == 0)) | |
33 | + | then [pools[0], pools[1], pools[2]] | |
34 | + | else if ((id == 1)) | |
35 | + | then [pools[3], pools[4], pools[5]] | |
36 | + | else if ((id == 2)) | |
37 | + | then [pools[6], pools[7], pools[8]] | |
38 | + | else if ((id == 3)) | |
39 | + | then [pools[9], pools[10], pools[11]] | |
40 | + | else nil | |
35 | 41 | func poolsActions (acc,pool) = { | |
36 | 42 | let invocationResult = invoke(main_contract_address, main_contract_claim_pool_rewards_func_name, [pool], nil) | |
37 | 43 | if ((invocationResult == invocationResult)) |
Old | New | Differences | |
---|---|---|---|
1 | 1 | {-# STDLIB_VERSION 6 #-} | |
2 | 2 | {-# SCRIPT_TYPE ACCOUNT #-} | |
3 | 3 | {-# CONTENT_TYPE DAPP #-} | |
4 | 4 | let SEP = "__" | |
5 | 5 | ||
6 | 6 | let main_contract_key = "main_contract" | |
7 | 7 | ||
8 | 8 | let main_contract_lp_pools_key = "lp_pools" | |
9 | 9 | ||
10 | 10 | let main_contract_claim_pool_rewards_func_name = "claimPoolRewards" | |
11 | 11 | ||
12 | 12 | let waves_exchange_address = base58'3PJL8Hn8LACaSBWLQ3UVhctA5cTQLBFwBAP' | |
13 | 13 | ||
14 | 14 | let twap_address = base58'3P9qEs3aQgRgzBLo7hRvQahNRJvTTGoTWAP' | |
15 | 15 | ||
16 | 16 | let sbt_asset = base58'vAYvjoLheNuvi2wRdQYK9NUjJ6ZQ5EkAtx7jy36rK13' | |
17 | 17 | ||
18 | 18 | let wx_asset = base58'Atqv59EYzjFGuitKVnMRk6H8FukjoV3ktPorbEys25on' | |
19 | 19 | ||
20 | 20 | func asAddressString (address) = match addressFromString(address) { | |
21 | 21 | case a: Address => | |
22 | 22 | toString(a) | |
23 | 23 | case _ => | |
24 | 24 | throw("fail to cast into Address String") | |
25 | 25 | } | |
26 | 26 | ||
27 | 27 | ||
28 | 28 | @Callable(i) | |
29 | - | func | |
29 | + | func claimRewardsOnThreePools (id) = { | |
30 | 30 | let main_contract_address = addressFromStringValue(valueOrElse(getString(main_contract_key), "3P8EH6SLN1nUy92CQzu531yXCyWaxhs3Qhs")) | |
31 | 31 | let pools = split(getStringValue(main_contract_address, main_contract_lp_pools_key), SEP) | |
32 | - | let sixPools = if (!(isSecond)) | |
33 | - | then [pools[0], pools[1], pools[2], pools[3], pools[4], pools[5]] | |
34 | - | else [pools[6], pools[7], pools[8], pools[9], pools[10], pools[11]] | |
32 | + | let sixPools = if ((id == 0)) | |
33 | + | then [pools[0], pools[1], pools[2]] | |
34 | + | else if ((id == 1)) | |
35 | + | then [pools[3], pools[4], pools[5]] | |
36 | + | else if ((id == 2)) | |
37 | + | then [pools[6], pools[7], pools[8]] | |
38 | + | else if ((id == 3)) | |
39 | + | then [pools[9], pools[10], pools[11]] | |
40 | + | else nil | |
35 | 41 | func poolsActions (acc,pool) = { | |
36 | 42 | let invocationResult = invoke(main_contract_address, main_contract_claim_pool_rewards_func_name, [pool], nil) | |
37 | 43 | if ((invocationResult == invocationResult)) | |
38 | 44 | then acc | |
39 | 45 | else throw("Strict value is not equal to itself.") | |
40 | 46 | } | |
41 | 47 | ||
42 | 48 | let result = { | |
43 | 49 | let $l = sixPools | |
44 | 50 | let $s = size($l) | |
45 | 51 | let $acc0 = unit | |
46 | 52 | func $f0_1 ($a,$i) = if (($i >= $s)) | |
47 | 53 | then $a | |
48 | 54 | else poolsActions($a, $l[$i]) | |
49 | 55 | ||
50 | 56 | func $f0_2 ($a,$i) = if (($i >= $s)) | |
51 | 57 | then $a | |
52 | 58 | else throw("List size exceeds 15") | |
53 | 59 | ||
54 | 60 | $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($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15) | |
55 | 61 | } | |
56 | 62 | if ((result == result)) | |
57 | 63 | then nil | |
58 | 64 | else throw("Strict value is not equal to itself.") | |
59 | 65 | } | |
60 | 66 | ||
61 | 67 | ||
62 | 68 | ||
63 | 69 | @Callable(i) | |
64 | 70 | func main_info_readonly () = { | |
65 | 71 | let main_contract = valueOrElse(getString(main_contract_key), "3P8EH6SLN1nUy92CQzu531yXCyWaxhs3Qhs") | |
66 | 72 | let main_contract_address = addressFromStringValue(main_contract) | |
67 | 73 | let totalGwx = { | |
68 | 74 | let result = invoke(Address(waves_exchange_address), "gwxUserInfoREADONLY", [main_contract], nil) | |
69 | 75 | if ((result == result)) | |
70 | 76 | then match result { | |
71 | 77 | case val: List[Any] => | |
72 | 78 | let @ = val[0] | |
73 | 79 | if ($isInstanceOf(@, "Int")) | |
74 | 80 | then @ | |
75 | 81 | else throw(($getType(@) + " couldn't be cast to Int")) | |
76 | 82 | case _ => | |
77 | 83 | throw("FATAL: Inconsistent data") | |
78 | 84 | } | |
79 | 85 | else throw("Strict value is not equal to itself.") | |
80 | 86 | } | |
81 | 87 | if ((totalGwx == totalGwx)) | |
82 | 88 | then { | |
83 | 89 | let sbt_stake_pool = getStringValue(main_contract_address, "sbt_stake_pool") | |
84 | 90 | let additional_reward_pool = getStringValue(main_contract_address, "additional_reward_pool") | |
85 | 91 | let total_wx_locked = getIntegerValue(main_contract_address, "total_wx_locked") | |
86 | 92 | let main_contract_data = $Tuple4(totalGwx, sbt_stake_pool, additional_reward_pool, total_wx_locked) | |
87 | 93 | let pools = split(getStringValue(main_contract_address, main_contract_lp_pools_key), SEP) | |
88 | 94 | func pools_data_collecting (acc,pool) = { | |
89 | 95 | let pool_address = addressFromStringValue(pool) | |
90 | 96 | let pool_token = getStringValue(pool_address, "token") | |
91 | 97 | let pool_token_amount = getIntegerValue(pool_address, "tokens") | |
92 | 98 | let pool_reward_assets = split(getStringValue(pool_address, "rewards"), ",") | |
93 | 99 | let pool_killed = getBooleanValue(pool_address, "is_killed") | |
94 | 100 | let pool_locked_period = getIntegerValue(pool_address, "locked_period") | |
95 | 101 | func pools_reward_assets_twap_collecting (acc,pool_asset) = { | |
96 | 102 | let twap_result = invoke(Address(twap_address), "twapMONTH", [pool, pool_asset, pool_token], nil) | |
97 | 103 | if ((twap_result == twap_result)) | |
98 | 104 | then match twap_result { | |
99 | 105 | case val: String => | |
100 | 106 | (acc ++ [((pool_asset + "_") + val)]) | |
101 | 107 | case _ => | |
102 | 108 | throw("FATAL: Inconsistent data") | |
103 | 109 | } | |
104 | 110 | else throw("Strict value is not equal to itself.") | |
105 | 111 | } | |
106 | 112 | ||
107 | 113 | let pool_twap_result = { | |
108 | 114 | let $l = pool_reward_assets | |
109 | 115 | let $s = size($l) | |
110 | 116 | let $acc0 = nil | |
111 | 117 | func $f0_1 ($a,$i) = if (($i >= $s)) | |
112 | 118 | then $a | |
113 | 119 | else pools_reward_assets_twap_collecting($a, $l[$i]) | |
114 | 120 | ||
115 | 121 | func $f0_2 ($a,$i) = if (($i >= $s)) | |
116 | 122 | then $a | |
117 | 123 | else throw("List size exceeds 3") | |
118 | 124 | ||
119 | 125 | $f0_2($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3) | |
120 | 126 | } | |
121 | 127 | (acc ++ [$Tuple6(pool, pool_token, pool_token_amount, pool_killed, pool_locked_period, pool_twap_result)]) | |
122 | 128 | } | |
123 | 129 | ||
124 | 130 | let pools_data = { | |
125 | 131 | let $l = (pools ++ [sbt_stake_pool]) | |
126 | 132 | let $s = size($l) | |
127 | 133 | let $acc0 = nil | |
128 | 134 | func $f0_1 ($a,$i) = if (($i >= $s)) | |
129 | 135 | then $a | |
130 | 136 | else pools_data_collecting($a, $l[$i]) | |
131 | 137 | ||
132 | 138 | func $f0_2 ($a,$i) = if (($i >= $s)) | |
133 | 139 | then $a | |
134 | 140 | else throw("List size exceeds 15") | |
135 | 141 | ||
136 | 142 | $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($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15) | |
137 | 143 | } | |
138 | 144 | $Tuple2(nil, $Tuple2(main_contract_data, pools_data)) | |
139 | 145 | } | |
140 | 146 | else throw("Strict value is not equal to itself.") | |
141 | 147 | } | |
142 | 148 | ||
143 | 149 | ||
144 | 150 | ||
145 | 151 | @Callable(i) | |
146 | 152 | func user_info_readonly (user) = { | |
147 | 153 | let main_contract = valueOrElse(getString(main_contract_key), "3P8EH6SLN1nUy92CQzu531yXCyWaxhs3Qhs") | |
148 | 154 | let main_contract_address = addressFromStringValue(main_contract) | |
149 | 155 | let sbt_stake_pool = getStringValue(main_contract_address, "sbt_stake_pool") | |
150 | 156 | let additional_reward_pool = getStringValue(main_contract_address, "additional_reward_pool") | |
151 | 157 | let total_wx_locked = getIntegerValue(main_contract_address, "total_wx_locked") | |
152 | 158 | let sbt_stake_pool_address = addressFromStringValue(sbt_stake_pool) | |
153 | 159 | let user_sbt_pool_total_locked = { | |
154 | 160 | let @ = invoke(sbt_stake_pool_address, "claimable_tokens", [user], nil) | |
155 | 161 | if ($isInstanceOf(@, "Int")) | |
156 | 162 | then @ | |
157 | 163 | else throw(($getType(@) + " couldn't be cast to Int")) | |
158 | 164 | } | |
159 | 165 | if ((user_sbt_pool_total_locked == user_sbt_pool_total_locked)) | |
160 | 166 | then { | |
161 | 167 | let user_sbt_pool_total_claimed_wx = { | |
162 | 168 | let @ = invoke(sbt_stake_pool_address, "claimed_reward", [user, toBase58String(sbt_asset)], nil) | |
163 | 169 | if ($isInstanceOf(@, "Int")) | |
164 | 170 | then @ | |
165 | 171 | else throw(($getType(@) + " couldn't be cast to Int")) | |
166 | 172 | } | |
167 | 173 | if ((user_sbt_pool_total_claimed_wx == user_sbt_pool_total_claimed_wx)) | |
168 | 174 | then { | |
169 | 175 | let user_sbt_pool_unclaimed_wx = { | |
170 | 176 | let @ = invoke(sbt_stake_pool_address, "claimable_reward", [user, toBase58String(wx_asset)], nil) | |
171 | 177 | if ($isInstanceOf(@, "Int")) | |
172 | 178 | then @ | |
173 | 179 | else throw(($getType(@) + " couldn't be cast to Int")) | |
174 | 180 | } | |
175 | 181 | if ((user_sbt_pool_unclaimed_wx == user_sbt_pool_unclaimed_wx)) | |
176 | 182 | then { | |
177 | 183 | let user_sbt_pool_waiting_to_unlock = { | |
178 | 184 | let @ = invoke(sbt_stake_pool_address, "user_locked_readonly", [user], nil) | |
179 | 185 | if ($isInstanceOf(@, "Int")) | |
180 | 186 | then @ | |
181 | 187 | else throw(($getType(@) + " couldn't be cast to Int")) | |
182 | 188 | } | |
183 | 189 | if ((user_sbt_pool_waiting_to_unlock == user_sbt_pool_waiting_to_unlock)) | |
184 | 190 | then { | |
185 | 191 | let user_sbt_pool_data = $Tuple4(user_sbt_pool_total_locked, user_sbt_pool_total_claimed_wx, user_sbt_pool_unclaimed_wx, user_sbt_pool_waiting_to_unlock) | |
186 | 192 | let pools = split(getStringValue(main_contract_address, main_contract_lp_pools_key), SEP) | |
187 | 193 | func pools_data_accounting (acc,pool) = { | |
188 | 194 | let pool_address = addressFromStringValue(pool) | |
189 | 195 | let pool_token = getStringValue(pool_address, "token") | |
190 | 196 | let user_staked_amount = { | |
191 | 197 | let @ = invoke(pool_address, "claimable_tokens", [user], nil) | |
192 | 198 | if ($isInstanceOf(@, "Int")) | |
193 | 199 | then @ | |
194 | 200 | else throw(($getType(@) + " couldn't be cast to Int")) | |
195 | 201 | } | |
196 | 202 | if ((user_staked_amount == user_staked_amount)) | |
197 | 203 | then { | |
198 | 204 | let user_total_wx_claimed = { | |
199 | 205 | let @ = invoke(pool_address, "claimed_reward", [user, toBase58String(wx_asset)], nil) | |
200 | 206 | if ($isInstanceOf(@, "Int")) | |
201 | 207 | then @ | |
202 | 208 | else throw(($getType(@) + " couldn't be cast to Int")) | |
203 | 209 | } | |
204 | 210 | if ((user_total_wx_claimed == user_total_wx_claimed)) | |
205 | 211 | then { | |
206 | 212 | let user_total_sbt_claimed = { | |
207 | 213 | let @ = invoke(pool_address, "claimed_reward", [user, toBase58String(sbt_asset)], nil) | |
208 | 214 | if ($isInstanceOf(@, "Int")) | |
209 | 215 | then @ | |
210 | 216 | else throw(($getType(@) + " couldn't be cast to Int")) | |
211 | 217 | } | |
212 | 218 | if ((user_total_sbt_claimed == user_total_sbt_claimed)) | |
213 | 219 | then { | |
214 | 220 | let user_unclaimed_wx = { | |
215 | 221 | let @ = invoke(pool_address, "claimable_reward", [user, toBase58String(wx_asset)], nil) | |
216 | 222 | if ($isInstanceOf(@, "Int")) | |
217 | 223 | then @ | |
218 | 224 | else throw(($getType(@) + " couldn't be cast to Int")) | |
219 | 225 | } | |
220 | 226 | if ((user_unclaimed_wx == user_unclaimed_wx)) | |
221 | 227 | then { | |
222 | 228 | let user_unclaimed_Sbt = { | |
223 | 229 | let @ = invoke(pool_address, "claimable_reward", [user, toBase58String(sbt_asset)], nil) | |
224 | 230 | if ($isInstanceOf(@, "Int")) | |
225 | 231 | then @ | |
226 | 232 | else throw(($getType(@) + " couldn't be cast to Int")) | |
227 | 233 | } | |
228 | 234 | if ((user_unclaimed_Sbt == user_unclaimed_Sbt)) | |
229 | 235 | then (acc ++ [$Tuple7(pool, pool_token, user_staked_amount, user_total_wx_claimed, user_total_sbt_claimed, user_unclaimed_wx, user_unclaimed_Sbt)]) | |
230 | 236 | else throw("Strict value is not equal to itself.") | |
231 | 237 | } | |
232 | 238 | else throw("Strict value is not equal to itself.") | |
233 | 239 | } | |
234 | 240 | else throw("Strict value is not equal to itself.") | |
235 | 241 | } | |
236 | 242 | else throw("Strict value is not equal to itself.") | |
237 | 243 | } | |
238 | 244 | else throw("Strict value is not equal to itself.") | |
239 | 245 | } | |
240 | 246 | ||
241 | 247 | let user_pools_data = { | |
242 | 248 | let $l = pools | |
243 | 249 | let $s = size($l) | |
244 | 250 | let $acc0 = nil | |
245 | 251 | func $f0_1 ($a,$i) = if (($i >= $s)) | |
246 | 252 | then $a | |
247 | 253 | else pools_data_accounting($a, $l[$i]) | |
248 | 254 | ||
249 | 255 | func $f0_2 ($a,$i) = if (($i >= $s)) | |
250 | 256 | then $a | |
251 | 257 | else throw("List size exceeds 15") | |
252 | 258 | ||
253 | 259 | $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($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15) | |
254 | 260 | } | |
255 | 261 | $Tuple2(nil, $Tuple2(user_sbt_pool_data, user_pools_data)) | |
256 | 262 | } | |
257 | 263 | else throw("Strict value is not equal to itself.") | |
258 | 264 | } | |
259 | 265 | else throw("Strict value is not equal to itself.") | |
260 | 266 | } | |
261 | 267 | else throw("Strict value is not equal to itself.") | |
262 | 268 | } | |
263 | 269 | else throw("Strict value is not equal to itself.") | |
264 | 270 | } | |
265 | 271 | ||
266 | 272 | ||
267 | 273 | ||
268 | 274 | @Callable(i) | |
269 | 275 | func setMainContract (address) = if ((this != i.caller)) | |
270 | 276 | then throw("only self") | |
271 | 277 | else [StringEntry(main_contract_key, asAddressString(address))] | |
272 | 278 | ||
273 | 279 | ||
274 | 280 | @Verifier(tx) | |
275 | 281 | func verify () = sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey) | |
276 | 282 |
github/deemru/w8io/0e76f2f 48.14 ms ◑