tx · G3UbChRFVekeaBLVxAqGHtVQNZ2Drt6a873cNM426giT

3N2PjXqef29HexCE7PeGZa9eRjS2jVeaFe4:  -0.04000000 Waves

2023.08.27 13:00 [2728928] smart account 3N2PjXqef29HexCE7PeGZa9eRjS2jVeaFe4 > SELF 0.00000000 Waves

{ "type": 13, "id": "G3UbChRFVekeaBLVxAqGHtVQNZ2Drt6a873cNM426giT", "fee": 4000000, "feeAssetId": null, "timestamp": 1693130413288, "version": 2, "chainId": 84, "sender": "3N2PjXqef29HexCE7PeGZa9eRjS2jVeaFe4", "senderPublicKey": "DU1U4j8FqHUMRr9WgfF3yo67ULEFkjp7dtMWMpjBK1ar", "proofs": [ "5YhXPfg4pWDYG4NW1cxp5XwYwDHEhqyYhdKrqYC6HXGpTk8y4M9JUqZ5tgjo34o7QEBRW7QTsxiMV8mYcWJjHNqn", "33mmbWRSJPfo9ui4dAsQjB8qMQesDUhcsuqQEvL4Rt9LJoexQRQdXPvWDKG3dis4wikrVQTSNHacWveeqZ9bi94w" ], "script": "base64:BgIlCAISBgoECAgICBIAEgMKAQESABIAEgMKAQgSABIFCgMICAgSABsAC05GVF9QRVJDRU5UADIABlNDQUxFOACAwtcvAAlrSW50ZXJlc3QCCGludGVyZXN0AA1rVXNlckludGVyZXN0Ag1fdXNlckludGVyZXN0AA5rVXNlckF2YWlsYWJsZQITX3VzZXJBdmFpbGFibGVDbGFpbQAQa1VzZXJUb2tlblN0YWtlZAIQX3VzZXJUb2tlblN0YWtlZAARa1RvdGFsVG9rZW5TdGFrZWQCEHRvdGFsVG9rZW5TdGFrZWQADGtORlRJbnRlcmVzdAILTkZUSW50ZXJlc3QAEGtORlRVc2VySW50ZXJlc3QCEF9ORlRVc2VySW50ZXJlc3QAFmtORlRVc2VyQXZhaWxhYmxlQ2xhaW0CFU5GVFVzZXJBdmFpbGFibGVDbGFpbQAPa05GVFRvdGFsU3Rha2VkAg5ORlRUb3RhbFN0YWtlZAAOa3VzZXJORlRTdGFrZWQCDl91c2VyTkZUU3Rha2VkABBrdXNlck5GVFN0YWtlZElkAhBfdXNlck5GVFN0YWtlZElkAAhrVG9rZW5pZAIHdG9rZW5JZAALa05GVENyZWF0ZWQCC19ORlRDcmVhdGVkAAlrQWRtaW4xUEsCC2FkbWluX3B1Yl8xAAlrQWRtaW4yUEsCC2FkbWluX3B1Yl8yAAlrQWRtaW4zUEsCC2FkbWluX3B1Yl8zAAhhZG1pbjFQSwkA2QQBCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgUEdGhpcwUJa0FkbWluMVBLAhJDYW4ndCBnZXQgYWRtaW4xUEsACGFkbWluMlBLCQDZBAEJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQR0aGlzBQlrQWRtaW4yUEsCEkNhbid0IGdldCBhZG1pbjJQSwAIYWRtaW4zUEsJANkEAQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIFBHRoaXMFCWtBZG1pbjNQSwIUQ2FuJ3QgZ2V0IG9wZXJhdG9yUEsAB3Rva2VuSWQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQR0aGlzBQhrVG9rZW5pZAIXQ2FuJ3QgZ2V0IHN0YWtpbmcgdG9rZW4BC2lzQWRtaW5DYWxsAQFpAwkBD2NvbnRhaW5zRWxlbWVudAIJAMwIAgUIYWRtaW4xUEsJAMwIAgUIYWRtaW4yUEsJAMwIAgUIYWRtaW4zUEsFA25pbAgFAWkPY2FsbGVyUHVibGljS2V5BQR1bml0CQACAQIhT25seSBhZG1pbiBjYW4gY2FsbCB0aGlzIGZ1bmN0aW9uAQppc1NlbGZDYWxsAQFpAwkAAAIIBQFpBmNhbGxlcgUEdGhpcwUEdW5pdAkAAgECK09ubHkgY29udHJhY3QgaXRzZWxmIGNhbiBjYWxsIHRoaXMgZnVuY3Rpb24BDGFzc2V0SWRUb1N0cgEHYXNzZXRJZAQHJG1hdGNoMAUHYXNzZXRJZAMJAAECBQckbWF0Y2gwAgpCeXRlVmVjdG9yBAJpZAUHJG1hdGNoMAkA2AQBBQJpZAMJAAECBQckbWF0Y2gwAgRVbml0BAV3YXZlcwUHJG1hdGNoMAIFV0FWRVMJAAIBAgxOb3QgQXNzZXQgaWQBCWNsYWltQ2FsYwEEdXNlcgQQdG90YWxUb2tlblN0YWtlZAkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzBRFrVG90YWxUb2tlblN0YWtlZAAABAtjdXJJbnRlcmVzdAkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzBQlrSW50ZXJlc3QAAAQRYXZhaWxhYmxlRm9yQ2xhaW0JAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwkArAICBQR1c2VyBQ5rVXNlckF2YWlsYWJsZQAABAx1c2VySW50ZXJlc3QJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwkArAICBQR1c2VyBQ1rVXNlckludGVyZXN0BQtjdXJJbnRlcmVzdAQPdXNlclRva2VuU3Rha2VkCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMJAKwCAgUEdXNlcgUQa1VzZXJUb2tlblN0YWtlZAAABAtjbGFpbUFtb3VudAkAawMFD3VzZXJUb2tlblN0YWtlZAkAZQIFC2N1ckludGVyZXN0BQx1c2VySW50ZXJlc3QFBlNDQUxFOAkAlgoEBQtjdXJJbnRlcmVzdAkAZAIFC2NsYWltQW1vdW50BRFhdmFpbGFibGVGb3JDbGFpbQUPdXNlclRva2VuU3Rha2VkBRB0b3RhbFRva2VuU3Rha2VkAQxjbGFpbUNhbGNOZnQBBHVzZXIEDnRvdGFsTmZ0U3Rha2VkCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMFD2tORlRUb3RhbFN0YWtlZAAABAtjdXJJbnRlcmVzdAkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzBQxrTkZUSW50ZXJlc3QAAAQRYXZhaWxhYmxlRm9yQ2xhaW0JAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwkArAICBQR1c2VyBRZrTkZUVXNlckF2YWlsYWJsZUNsYWltAAAEDHVzZXJJbnRlcmVzdAkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzCQCsAgIFBHVzZXIFEGtORlRVc2VySW50ZXJlc3QFC2N1ckludGVyZXN0BA11c2VyTmZ0U3Rha2VkCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMJAKwCAgUEdXNlcgUOa3VzZXJORlRTdGFrZWQAAAQLY2xhaW1BbW91bnQJAGsDBQ11c2VyTmZ0U3Rha2VkCQBlAgULY3VySW50ZXJlc3QFDHVzZXJJbnRlcmVzdAUGU0NBTEU4CQCWCgQFC2N1ckludGVyZXN0CQBkAgULY2xhaW1BbW91bnQFEWF2YWlsYWJsZUZvckNsYWltBQ11c2VyTmZ0U3Rha2VkBQ50b3RhbE5mdFN0YWtlZAkBaQEEaW5pdAQHdG9rZW5JZAdhZG0xUHViB2FkbTJQdWIHYWRtM1B1YgkBC3ZhbHVlT3JFbHNlAgkBCmlzU2VsZkNhbGwBBQFpAwkBASEBCQEJaXNEZWZpbmVkAQkA7AcBCQDZBAEFB3Rva2VuSWQJAAIBAiBhc3NldCBpZCBpcyBub3QgY29ycmVjdCBhc3NldCBpZAMJAQIhPQIJAMgBAQkA2QQBBQdhZG0xUHViACAJAAIBAiFncm91cDFBZG1pbjFQdWJLZXkgaXMgbm90IGNvcnJlY3QDCQECIT0CCQDIAQEJANkEAQUHYWRtMlB1YgAgCQACAQIhZ3JvdXAxQWRtaW4xUHViS2V5IGlzIG5vdCBjb3JyZWN0AwkBAiE9AgkAyAEBCQDZBAEFB2FkbTNQdWIAIAkAAgECIWdyb3VwMUFkbWluMVB1YktleSBpcyBub3QgY29ycmVjdAkAzAgCCQELU3RyaW5nRW50cnkCBQhrVG9rZW5pZAUHdG9rZW5JZAkAzAgCCQELU3RyaW5nRW50cnkCBQlrQWRtaW4xUEsFB2FkbTFQdWIJAMwIAgkBC1N0cmluZ0VudHJ5AgUJa0FkbWluMlBLBQdhZG0yUHViCQDMCAIJAQtTdHJpbmdFbnRyeQIFCWtBZG1pbjNQSwUHYWRtM1B1YgUDbmlsAWkBBXN0YWtlAAMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAQkAAgECFE9uZSBwYXltZW50IGV4cGVjdGVkBAskdDAzNTI5MzYwNAkAlAoCCAkAkQMCCAUBaQhwYXltZW50cwAABmFtb3VudAgJAJEDAggFAWkIcGF5bWVudHMAAAdhc3NldElkBAlwbXRBbW91bnQIBQskdDAzNTI5MzYwNAJfMQQKcG10QXNzZXRJZAgFCyR0MDM1MjkzNjA0Al8yAwkBAiE9AgUKcG10QXNzZXRJZAkA2QQBBQd0b2tlbklkCQACAQITV3JvbmcgcGF5bWVudCBhc3NldAQEdXNlcgkApQgBCAUBaQZjYWxsZXIECyR0MDM3MjUzODIxCQEJY2xhaW1DYWxjAQUEdXNlcgQPdXNlck5ld0ludGVyZXN0CAULJHQwMzcyNTM4MjECXzEEFGNsYWltQW1vdW50QXZhaWxhYmxlCAULJHQwMzcyNTM4MjECXzIED3VzZXJUb2tlblN0YWtlZAgFCyR0MDM3MjUzODIxAl8zBBB0b3RhbFRva2VuU3Rha2VkCAULJHQwMzcyNTM4MjECXzQJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgUEdXNlcgUNa1VzZXJJbnRlcmVzdAUPdXNlck5ld0ludGVyZXN0CQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIFBHVzZXIFDmtVc2VyQXZhaWxhYmxlBRRjbGFpbUFtb3VudEF2YWlsYWJsZQkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICBQR1c2VyBRBrVXNlclRva2VuU3Rha2VkCQBkAgUPdXNlclRva2VuU3Rha2VkBQlwbXRBbW91bnQJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgUEdXNlcgURa1RvdGFsVG9rZW5TdGFrZWQJAGQCBRB0b3RhbFRva2VuU3Rha2VkBQlwbXRBbW91bnQFA25pbAFpAQd1bnN0YWtlAQZhbW91bnQEBHVzZXIJAKUIAQgFAWkGY2FsbGVyAwkAZwIAAAUGYW1vdW50CQACAQIdQW1vdW50IG11c3QgYmUgZ3JlYXRlciB0aGFuIDAECyR0MDQyNDI0MzM4CQEJY2xhaW1DYWxjAQUEdXNlcgQPdXNlck5ld0ludGVyZXN0CAULJHQwNDI0MjQzMzgCXzEEFGNsYWltQW1vdW50QXZhaWxhYmxlCAULJHQwNDI0MjQzMzgCXzIED3VzZXJUb2tlblN0YWtlZAgFCyR0MDQyNDI0MzM4Al8zBBB0b3RhbFRva2VuU3Rha2VkCAULJHQwNDI0MjQzMzgCXzQDCQBmAgUGYW1vdW50BQ91c2VyVG9rZW5TdGFrZWQJAAIBAiJZb3UgY2FuJ3QgdW5zdGFrZSBtb3JlIHRoYW4gc3Rha2VkCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIFBHVzZXIFDWtVc2VySW50ZXJlc3QFD3VzZXJOZXdJbnRlcmVzdAkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICBQR1c2VyBQ5rVXNlckF2YWlsYWJsZQUUY2xhaW1BbW91bnRBdmFpbGFibGUJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgUEdXNlcgUQa1VzZXJUb2tlblN0YWtlZAkAZQIFD3VzZXJUb2tlblN0YWtlZAUGYW1vdW50CQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIFBHVzZXIFEWtUb3RhbFRva2VuU3Rha2VkCQBlAgUQdG90YWxUb2tlblN0YWtlZAUGYW1vdW50BQNuaWwBaQEFY2xhaW0ABAR1c2VyCQClCAEIBQFpBmNhbGxlcgQLJHQwNDc2MTQ4NTcJAQljbGFpbUNhbGMBBQR1c2VyBA91c2VyTmV3SW50ZXJlc3QIBQskdDA0NzYxNDg1NwJfMQQUY2xhaW1BbW91bnRBdmFpbGFibGUIBQskdDA0NzYxNDg1NwJfMgQPdXNlclRva2VuU3Rha2VkCAULJHQwNDc2MTQ4NTcCXzMEEHRvdGFsVG9rZW5TdGFrZWQIBQskdDA0NzYxNDg1NwJfNAMJAAACBRRjbGFpbUFtb3VudEF2YWlsYWJsZQAACQACAQIQTm90aGluZyB0byBjbGFpbQkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICBQR1c2VyBQ1rVXNlckludGVyZXN0BQ91c2VyTmV3SW50ZXJlc3QJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgUEdXNlcgUOa1VzZXJBdmFpbGFibGUAAAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCAUBaQZjYWxsZXIFFGNsYWltQW1vdW50QXZhaWxhYmxlCQDZBAEFB3Rva2VuSWQFA25pbAFpAQhzdGFrZU5GVAADCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAAJAAIBAhRPbmUgcGF5bWVudCBleHBlY3RlZAQLJHQwNTIyMjUyOTcJAJQKAggJAJEDAggFAWkIcGF5bWVudHMAAAZhbW91bnQICQCRAwIIBQFpCHBheW1lbnRzAAAHYXNzZXRJZAQJcG10QW1vdW50CAULJHQwNTIyMjUyOTcCXzEECnBtdEFzc2V0SWQIBQskdDA1MjIyNTI5NwJfMgQNcG10QXNzZXRJZFN0cgkBDGFzc2V0SWRUb1N0cgEFCnBtdEFzc2V0SWQDCQEBIQEJAQlpc0RlZmluZWQBCQCdCAIFBHRoaXMJAKwCAgUNcG10QXNzZXRJZFN0cgULa05GVENyZWF0ZWQJAAIBAg9Xcm9uZyBuZnQgYXNzZXQEBHVzZXIJAKUIAQgFAWkGY2FsbGVyBAskdDA1NDc4NTU3MwkBDGNsYWltQ2FsY05mdAEFBHVzZXIED3VzZXJOZXdJbnRlcmVzdAgFCyR0MDU0Nzg1NTczAl8xBBRjbGFpbUFtb3VudEF2YWlsYWJsZQgFCyR0MDU0Nzg1NTczAl8yBA11c2VyTkZUU3Rha2VkCAULJHQwNTQ3ODU1NzMCXzMEDnRvdGFsTkZUU3Rha2VkCAULJHQwNTQ3ODU1NzMCXzQJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgUEdXNlcgUQa05GVFVzZXJJbnRlcmVzdAUPdXNlck5ld0ludGVyZXN0CQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIFBHVzZXIFFmtORlRVc2VyQXZhaWxhYmxlQ2xhaW0FFGNsYWltQW1vdW50QXZhaWxhYmxlCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIFBHVzZXIFDmt1c2VyTkZUU3Rha2VkCQBkAgUNdXNlck5GVFN0YWtlZAUJcG10QW1vdW50CQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIFBHVzZXIFD2tORlRUb3RhbFN0YWtlZAkAZAIFDnRvdGFsTkZUU3Rha2VkBQlwbXRBbW91bnQJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgkArAICCQCsAgIFBHVzZXICAV8FDXBtdEFzc2V0SWRTdHIFEGt1c2VyTkZUU3Rha2VkSWQAAQUDbmlsAWkBCnVuc3Rha2VORlQBAmlkBAR1c2VyCQClCAEIBQFpBmNhbGxlcgMJAQlpc0RlZmluZWQBCQCdCAIFBHRoaXMJAKwCAgkArAICCQCsAgIFBHVzZXIFAmlkAgFfBRBrdXNlck5GVFN0YWtlZElkCQACAQIRWW91IGRpZG4ndCBzdGFrZWQECyR0MDYxMDU2MjAwCQEMY2xhaW1DYWxjTmZ0AQUEdXNlcgQPdXNlck5ld0ludGVyZXN0CAULJHQwNjEwNTYyMDACXzEEFGNsYWltQW1vdW50QXZhaWxhYmxlCAULJHQwNjEwNTYyMDACXzIEDXVzZXJORlRTdGFrZWQIBQskdDA2MTA1NjIwMAJfMwQOdG90YWxORlRTdGFrZWQIBQskdDA2MTA1NjIwMAJfNAkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICBQR1c2VyBRBrTkZUVXNlckludGVyZXN0BQ91c2VyTmV3SW50ZXJlc3QJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgUEdXNlcgUWa05GVFVzZXJBdmFpbGFibGVDbGFpbQUUY2xhaW1BbW91bnRBdmFpbGFibGUJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgUEdXNlcgUOa3VzZXJORlRTdGFrZWQJAGUCBQ11c2VyTkZUU3Rha2VkAAEJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgUEdXNlcgUPa05GVFRvdGFsU3Rha2VkCQBlAgUOdG90YWxORlRTdGFrZWQAAQkAzAgCCQELRGVsZXRlRW50cnkBCQCsAgIJAKwCAgkArAICBQR1c2VyAgFfBQJpZAUQa3VzZXJORlRTdGFrZWRJZAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCAUBaQZjYWxsZXIAAQkA2QQBBQJpZAUDbmlsAWkBCGNsYWltTkZUAAQEdXNlcgkApQgBCAUBaQZjYWxsZXIECyR0MDY2NDE2NzM2CQEMY2xhaW1DYWxjTmZ0AQUEdXNlcgQPdXNlck5ld0ludGVyZXN0CAULJHQwNjY0MTY3MzYCXzEEFGNsYWltQW1vdW50QXZhaWxhYmxlCAULJHQwNjY0MTY3MzYCXzIEDXVzZXJORlRTdGFrZWQIBQskdDA2NjQxNjczNgJfMwQOdG90YWxORlRTdGFrZWQIBQskdDA2NjQxNjczNgJfNAMJAAACBRRjbGFpbUFtb3VudEF2YWlsYWJsZQAACQACAQIQTm90aGluZyB0byBjbGFpbQkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICBQR1c2VyBRBrTkZUVXNlckludGVyZXN0BQ91c2VyTmV3SW50ZXJlc3QJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgUEdXNlcgUWa05GVFVzZXJBdmFpbGFibGVDbGFpbQAACQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMIBQFpBmNhbGxlcgUUY2xhaW1BbW91bnRBdmFpbGFibGUJANkEAQUHdG9rZW5JZAUDbmlsAWkBCGlzc3VlTkZUAwh1c2VyQWRkcgRuYW1lBWRlc2NyCQELdmFsdWVPckVsc2UCCQELaXNBZG1pbkNhbGwBBQFpBAV1QWRkcgkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCmCAEFCHVzZXJBZGRyAhJXcm9uZyB1c2VyIGFkZHJlc3MEBWlzc3VlCQDCCAUFBG5hbWUFBWRlc2NyAAEAAQcEBW5mdElkCQC4CAEFBWlzc3VlCQDMCAIJAQtTdHJpbmdFbnRyeQIJAKwCAgkA2AQBBQVuZnRJZAULa05GVENyZWF0ZWQFCHVzZXJBZGRyCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMFBXVBZGRyAAEFBW5mdElkBQNuaWwBaQEHYWlyZHJvcAAJAQt2YWx1ZU9yRWxzZQIJAQtpc0FkbWluQ2FsbAEFAWkDCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAAJAAIBAhRPbmUgcGF5bWVudCBleHBlY3RlZAQLJHQwNzUyNTc2MDAJAJQKAggJAJEDAggFAWkIcGF5bWVudHMAAAZhbW91bnQICQCRAwIIBQFpCHBheW1lbnRzAAAHYXNzZXRJZAQJcG10QW1vdW50CAULJHQwNzUyNTc2MDACXzEECnBtdEFzc2V0SWQIBQskdDA3NTI1NzYwMAJfMgMJAQIhPQIFCnBtdEFzc2V0SWQJANkEAQUHdG9rZW5JZAkAAgECE1dyb25nIHBheW1lbnQgYXNzZXQEEHRvdGFsVG9rZW5TdGFrZWQJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwURa1RvdGFsVG9rZW5TdGFrZWQAAAQOdG90YWxORlRTdGFrZWQJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwUPa05GVFRvdGFsU3Rha2VkAAAEC2N1ckludGVyZXN0CQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMFCWtJbnRlcmVzdAAABA5jdXJORlRJbnRlcmVzdAkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzBQxrTkZUSW50ZXJlc3QAAAQGcG10TkZUCQBrAwUJcG10QW1vdW50BQtORlRfUEVSQ0VOVABkBAhwbXRUb2tlbgkAZQIFCXBtdEFtb3VudAUGcG10TkZUBAtpbnRlcmVzdE5ldwMJAGYCBRB0b3RhbFRva2VuU3Rha2VkAAAJAGQCBQtjdXJJbnRlcmVzdAkAawMFCHBtdFRva2VuBQZTQ0FMRTgFEHRvdGFsVG9rZW5TdGFrZWQFC2N1ckludGVyZXN0BA5pbnRlcmVzdE5GVE5ldwMJAGYCBRB0b3RhbFRva2VuU3Rha2VkAAAJAGQCBQ5jdXJORlRJbnRlcmVzdAkAawMFBnBtdE5GVAUGU0NBTEU4BQ50b3RhbE5GVFN0YWtlZAUOY3VyTkZUSW50ZXJlc3QJAMwIAgkBDEludGVnZXJFbnRyeQIFCWtJbnRlcmVzdAULaW50ZXJlc3ROZXcJAMwIAgkBDEludGVnZXJFbnRyeQIFDGtORlRJbnRlcmVzdAUOaW50ZXJlc3RORlROZXcFA25pbAECdHgBBnZlcmlmeQAEE211bHRpU2lnbmVkQnlBZG1pbnMEEmFkbWluUHViS2V5MVNpZ25lZAMJAPQDAwgFAnR4CWJvZHlCeXRlcwkAkQMCCAUCdHgGcHJvb2ZzAAAFCGFkbWluMVBLAAEAAAQSYWRtaW5QdWJLZXkyU2lnbmVkAwkA9AMDCAUCdHgJYm9keUJ5dGVzCQCRAwIIBQJ0eAZwcm9vZnMAAQUIYWRtaW4yUEsAAQAABBJhZG1pblB1YktleTNTaWduZWQDCQD0AwMIBQJ0eAlib2R5Qnl0ZXMJAJEDAggFAnR4BnByb29mcwACBQhhZG1pbjNQSwABAAAJAGcCCQBkAgkAZAIFEmFkbWluUHViS2V5MVNpZ25lZAUSYWRtaW5QdWJLZXkyU2lnbmVkBRJhZG1pblB1YktleTNTaWduZWQAAgQHJG1hdGNoMAUCdHgDCQABAgUHJG1hdGNoMAIXSW52b2tlU2NyaXB0VHJhbnNhY3Rpb24EA2ludgUHJG1hdGNoMAQGaXNTZWxmCQD0AwMIBQJ0eAlib2R5Qnl0ZXMJAJEDAggFAnR4BnByb29mcwAACAUCdHgPc2VuZGVyUHVibGljS2V5BAppc1JpZ2h0RmVlAwkAAAIIBQNpbnYDZmVlAKD3NgkAAAIIBQNpbnYKZmVlQXNzZXRJZAUEdW5pdAcECmlzSW5pdENhbGwJAAACCAUDaW52CGZ1bmN0aW9uAgRpbml0BAxpc25vUGF5bWVudHMJAAACCQCQAwEIBQNpbnYIcGF5bWVudHMAAAMDAwMFCmlzUmlnaHRGZWUFCmlzSW5pdENhbGwHBQZpc1NlbGYHBQxpc25vUGF5bWVudHMHBgUTbXVsdGlTaWduZWRCeUFkbWlucwUTbXVsdGlTaWduZWRCeUFkbWluc5FIevY=", "height": 2728928, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: FG9ZZoRkLLGHf4MHpoTP2emNCBZNtqmnK4Xn9VmYNSoG Next: DcJUGEkmfhJH7BNG2UzCu3pa354A5vPJu1XH9jcykJ1c Diff:
OldNewDifferences
101101
102102
103103 @Callable(i)
104-func stake () = if ((size(i.payments) != 0))
104+func stake () = if ((size(i.payments) != 1))
105105 then throw("One payment expected")
106106 else {
107107 let $t035293604 = $Tuple2(i.payments[0].amount, i.payments[0].assetId)
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let NFT_PERCENT = 50
55
66 let SCALE8 = 100000000
77
88 let kInterest = "interest"
99
1010 let kUserInterest = "_userInterest"
1111
1212 let kUserAvailable = "_userAvailableClaim"
1313
1414 let kUserTokenStaked = "_userTokenStaked"
1515
1616 let kTotalTokenStaked = "totalTokenStaked"
1717
1818 let kNFTInterest = "NFTInterest"
1919
2020 let kNFTUserInterest = "_NFTUserInterest"
2121
2222 let kNFTUserAvailableClaim = "NFTUserAvailableClaim"
2323
2424 let kNFTTotalStaked = "NFTTotalStaked"
2525
2626 let kuserNFTStaked = "_userNFTStaked"
2727
2828 let kuserNFTStakedId = "_userNFTStakedId"
2929
3030 let kTokenid = "tokenId"
3131
3232 let kNFTCreated = "_NFTCreated"
3333
3434 let kAdmin1PK = "admin_pub_1"
3535
3636 let kAdmin2PK = "admin_pub_2"
3737
3838 let kAdmin3PK = "admin_pub_3"
3939
4040 let admin1PK = fromBase58String(valueOrErrorMessage(getString(this, kAdmin1PK), "Can't get admin1PK"))
4141
4242 let admin2PK = fromBase58String(valueOrErrorMessage(getString(this, kAdmin2PK), "Can't get admin2PK"))
4343
4444 let admin3PK = fromBase58String(valueOrErrorMessage(getString(this, kAdmin3PK), "Can't get operatorPK"))
4545
4646 let tokenId = valueOrErrorMessage(getString(this, kTokenid), "Can't get staking token")
4747
4848 func isAdminCall (i) = if (containsElement([admin1PK, admin2PK, admin3PK], i.callerPublicKey))
4949 then unit
5050 else throw("Only admin can call this function")
5151
5252
5353 func isSelfCall (i) = if ((i.caller == this))
5454 then unit
5555 else throw("Only contract itself can call this function")
5656
5757
5858 func assetIdToStr (assetId) = match assetId {
5959 case id: ByteVector =>
6060 toBase58String(id)
6161 case waves: Unit =>
6262 "WAVES"
6363 case _ =>
6464 throw("Not Asset id")
6565 }
6666
6767
6868 func claimCalc (user) = {
6969 let totalTokenStaked = valueOrElse(getInteger(this, kTotalTokenStaked), 0)
7070 let curInterest = valueOrElse(getInteger(this, kInterest), 0)
7171 let availableForClaim = valueOrElse(getInteger(this, (user + kUserAvailable)), 0)
7272 let userInterest = valueOrElse(getInteger(this, (user + kUserInterest)), curInterest)
7373 let userTokenStaked = valueOrElse(getInteger(this, (user + kUserTokenStaked)), 0)
7474 let claimAmount = fraction(userTokenStaked, (curInterest - userInterest), SCALE8)
7575 $Tuple4(curInterest, (claimAmount + availableForClaim), userTokenStaked, totalTokenStaked)
7676 }
7777
7878
7979 func claimCalcNft (user) = {
8080 let totalNftStaked = valueOrElse(getInteger(this, kNFTTotalStaked), 0)
8181 let curInterest = valueOrElse(getInteger(this, kNFTInterest), 0)
8282 let availableForClaim = valueOrElse(getInteger(this, (user + kNFTUserAvailableClaim)), 0)
8383 let userInterest = valueOrElse(getInteger(this, (user + kNFTUserInterest)), curInterest)
8484 let userNftStaked = valueOrElse(getInteger(this, (user + kuserNFTStaked)), 0)
8585 let claimAmount = fraction(userNftStaked, (curInterest - userInterest), SCALE8)
8686 $Tuple4(curInterest, (claimAmount + availableForClaim), userNftStaked, totalNftStaked)
8787 }
8888
8989
9090 @Callable(i)
9191 func init (tokenId,adm1Pub,adm2Pub,adm3Pub) = valueOrElse(isSelfCall(i), if (!(isDefined(assetInfo(fromBase58String(tokenId)))))
9292 then throw("asset id is not correct asset id")
9393 else if ((size(fromBase58String(adm1Pub)) != 32))
9494 then throw("group1Admin1PubKey is not correct")
9595 else if ((size(fromBase58String(adm2Pub)) != 32))
9696 then throw("group1Admin1PubKey is not correct")
9797 else if ((size(fromBase58String(adm3Pub)) != 32))
9898 then throw("group1Admin1PubKey is not correct")
9999 else [StringEntry(kTokenid, tokenId), StringEntry(kAdmin1PK, adm1Pub), StringEntry(kAdmin2PK, adm2Pub), StringEntry(kAdmin3PK, adm3Pub)])
100100
101101
102102
103103 @Callable(i)
104-func stake () = if ((size(i.payments) != 0))
104+func stake () = if ((size(i.payments) != 1))
105105 then throw("One payment expected")
106106 else {
107107 let $t035293604 = $Tuple2(i.payments[0].amount, i.payments[0].assetId)
108108 let pmtAmount = $t035293604._1
109109 let pmtAssetId = $t035293604._2
110110 if ((pmtAssetId != fromBase58String(tokenId)))
111111 then throw("Wrong payment asset")
112112 else {
113113 let user = toString(i.caller)
114114 let $t037253821 = claimCalc(user)
115115 let userNewInterest = $t037253821._1
116116 let claimAmountAvailable = $t037253821._2
117117 let userTokenStaked = $t037253821._3
118118 let totalTokenStaked = $t037253821._4
119119 [IntegerEntry((user + kUserInterest), userNewInterest), IntegerEntry((user + kUserAvailable), claimAmountAvailable), IntegerEntry((user + kUserTokenStaked), (userTokenStaked + pmtAmount)), IntegerEntry((user + kTotalTokenStaked), (totalTokenStaked + pmtAmount))]
120120 }
121121 }
122122
123123
124124
125125 @Callable(i)
126126 func unstake (amount) = {
127127 let user = toString(i.caller)
128128 if ((0 >= amount))
129129 then throw("Amount must be greater than 0")
130130 else {
131131 let $t042424338 = claimCalc(user)
132132 let userNewInterest = $t042424338._1
133133 let claimAmountAvailable = $t042424338._2
134134 let userTokenStaked = $t042424338._3
135135 let totalTokenStaked = $t042424338._4
136136 if ((amount > userTokenStaked))
137137 then throw("You can't unstake more than staked")
138138 else [IntegerEntry((user + kUserInterest), userNewInterest), IntegerEntry((user + kUserAvailable), claimAmountAvailable), IntegerEntry((user + kUserTokenStaked), (userTokenStaked - amount)), IntegerEntry((user + kTotalTokenStaked), (totalTokenStaked - amount))]
139139 }
140140 }
141141
142142
143143
144144 @Callable(i)
145145 func claim () = {
146146 let user = toString(i.caller)
147147 let $t047614857 = claimCalc(user)
148148 let userNewInterest = $t047614857._1
149149 let claimAmountAvailable = $t047614857._2
150150 let userTokenStaked = $t047614857._3
151151 let totalTokenStaked = $t047614857._4
152152 if ((claimAmountAvailable == 0))
153153 then throw("Nothing to claim")
154154 else [IntegerEntry((user + kUserInterest), userNewInterest), IntegerEntry((user + kUserAvailable), 0), ScriptTransfer(i.caller, claimAmountAvailable, fromBase58String(tokenId))]
155155 }
156156
157157
158158
159159 @Callable(i)
160160 func stakeNFT () = if ((size(i.payments) != 0))
161161 then throw("One payment expected")
162162 else {
163163 let $t052225297 = $Tuple2(i.payments[0].amount, i.payments[0].assetId)
164164 let pmtAmount = $t052225297._1
165165 let pmtAssetId = $t052225297._2
166166 let pmtAssetIdStr = assetIdToStr(pmtAssetId)
167167 if (!(isDefined(getString(this, (pmtAssetIdStr + kNFTCreated)))))
168168 then throw("Wrong nft asset")
169169 else {
170170 let user = toString(i.caller)
171171 let $t054785573 = claimCalcNft(user)
172172 let userNewInterest = $t054785573._1
173173 let claimAmountAvailable = $t054785573._2
174174 let userNFTStaked = $t054785573._3
175175 let totalNFTStaked = $t054785573._4
176176 [IntegerEntry((user + kNFTUserInterest), userNewInterest), IntegerEntry((user + kNFTUserAvailableClaim), claimAmountAvailable), IntegerEntry((user + kuserNFTStaked), (userNFTStaked + pmtAmount)), IntegerEntry((user + kNFTTotalStaked), (totalNFTStaked + pmtAmount)), IntegerEntry((((user + "_") + pmtAssetIdStr) + kuserNFTStakedId), 1)]
177177 }
178178 }
179179
180180
181181
182182 @Callable(i)
183183 func unstakeNFT (id) = {
184184 let user = toString(i.caller)
185185 if (isDefined(getString(this, (((user + id) + "_") + kuserNFTStakedId))))
186186 then throw("You didn't staked")
187187 else {
188188 let $t061056200 = claimCalcNft(user)
189189 let userNewInterest = $t061056200._1
190190 let claimAmountAvailable = $t061056200._2
191191 let userNFTStaked = $t061056200._3
192192 let totalNFTStaked = $t061056200._4
193193 [IntegerEntry((user + kNFTUserInterest), userNewInterest), IntegerEntry((user + kNFTUserAvailableClaim), claimAmountAvailable), IntegerEntry((user + kuserNFTStaked), (userNFTStaked - 1)), IntegerEntry((user + kNFTTotalStaked), (totalNFTStaked - 1)), DeleteEntry((((user + "_") + id) + kuserNFTStakedId)), ScriptTransfer(i.caller, 1, fromBase58String(id))]
194194 }
195195 }
196196
197197
198198
199199 @Callable(i)
200200 func claimNFT () = {
201201 let user = toString(i.caller)
202202 let $t066416736 = claimCalcNft(user)
203203 let userNewInterest = $t066416736._1
204204 let claimAmountAvailable = $t066416736._2
205205 let userNFTStaked = $t066416736._3
206206 let totalNFTStaked = $t066416736._4
207207 if ((claimAmountAvailable == 0))
208208 then throw("Nothing to claim")
209209 else [IntegerEntry((user + kNFTUserInterest), userNewInterest), IntegerEntry((user + kNFTUserAvailableClaim), 0), ScriptTransfer(i.caller, claimAmountAvailable, fromBase58String(tokenId))]
210210 }
211211
212212
213213
214214 @Callable(i)
215215 func issueNFT (userAddr,name,descr) = valueOrElse(isAdminCall(i), {
216216 let uAddr = valueOrErrorMessage(addressFromString(userAddr), "Wrong user address")
217217 let issue = Issue(name, descr, 1, 1, false)
218218 let nftId = calculateAssetId(issue)
219219 [StringEntry((toBase58String(nftId) + kNFTCreated), userAddr), ScriptTransfer(uAddr, 1, nftId)]
220220 })
221221
222222
223223
224224 @Callable(i)
225225 func airdrop () = valueOrElse(isAdminCall(i), if ((size(i.payments) != 0))
226226 then throw("One payment expected")
227227 else {
228228 let $t075257600 = $Tuple2(i.payments[0].amount, i.payments[0].assetId)
229229 let pmtAmount = $t075257600._1
230230 let pmtAssetId = $t075257600._2
231231 if ((pmtAssetId != fromBase58String(tokenId)))
232232 then throw("Wrong payment asset")
233233 else {
234234 let totalTokenStaked = valueOrElse(getInteger(this, kTotalTokenStaked), 0)
235235 let totalNFTStaked = valueOrElse(getInteger(this, kNFTTotalStaked), 0)
236236 let curInterest = valueOrElse(getInteger(this, kInterest), 0)
237237 let curNFTInterest = valueOrElse(getInteger(this, kNFTInterest), 0)
238238 let pmtNFT = fraction(pmtAmount, NFT_PERCENT, 100)
239239 let pmtToken = (pmtAmount - pmtNFT)
240240 let interestNew = if ((totalTokenStaked > 0))
241241 then (curInterest + fraction(pmtToken, SCALE8, totalTokenStaked))
242242 else curInterest
243243 let interestNFTNew = if ((totalTokenStaked > 0))
244244 then (curNFTInterest + fraction(pmtNFT, SCALE8, totalNFTStaked))
245245 else curNFTInterest
246246 [IntegerEntry(kInterest, interestNew), IntegerEntry(kNFTInterest, interestNFTNew)]
247247 }
248248 })
249249
250250
251251 @Verifier(tx)
252252 func verify () = {
253253 let multiSignedByAdmins = {
254254 let adminPubKey1Signed = if (sigVerify(tx.bodyBytes, tx.proofs[0], admin1PK))
255255 then 1
256256 else 0
257257 let adminPubKey2Signed = if (sigVerify(tx.bodyBytes, tx.proofs[1], admin2PK))
258258 then 1
259259 else 0
260260 let adminPubKey3Signed = if (sigVerify(tx.bodyBytes, tx.proofs[2], admin3PK))
261261 then 1
262262 else 0
263263 (((adminPubKey1Signed + adminPubKey2Signed) + adminPubKey3Signed) >= 2)
264264 }
265265 match tx {
266266 case inv: InvokeScriptTransaction =>
267267 let isSelf = sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey)
268268 let isRightFee = if ((inv.fee == 900000))
269269 then (inv.feeAssetId == unit)
270270 else false
271271 let isInitCall = (inv.function == "init")
272272 let isnoPayments = (size(inv.payments) == 0)
273273 if (if (if (if (isRightFee)
274274 then isInitCall
275275 else false)
276276 then isSelf
277277 else false)
278278 then isnoPayments
279279 else false)
280280 then true
281281 else multiSignedByAdmins
282282 case _ =>
283283 multiSignedByAdmins
284284 }
285285 }
286286

github/deemru/w8io/169f3d6 
168.45 ms