tx · J5SDjSBRijMgCTmtGHGSL1xvahTHYiUBVjDSDLS1kHLB

3N2PjXqef29HexCE7PeGZa9eRjS2jVeaFe4:  -0.05000000 Waves

2023.08.27 13:16 [2728944] smart account 3N2PjXqef29HexCE7PeGZa9eRjS2jVeaFe4 > SELF 0.00000000 Waves

{ "type": 13, "id": "J5SDjSBRijMgCTmtGHGSL1xvahTHYiUBVjDSDLS1kHLB", "fee": 5000000, "feeAssetId": null, "timestamp": 1693131397048, "version": 2, "chainId": 84, "sender": "3N2PjXqef29HexCE7PeGZa9eRjS2jVeaFe4", "senderPublicKey": "DU1U4j8FqHUMRr9WgfF3yo67ULEFkjp7dtMWMpjBK1ar", "proofs": [ "5WQu6iqZsiLwgkaossvHWfCPGeEos3GZQS2F8iXrLPGunSNQnWFb2bEorXqHMGm2UMbUaw3NVMaGaJau4GGWtN68", "4biv5oJ7vD4rq7dP5Li5DZWsnsP9T9a7i2An1TkuQh5qzcZ3puv1NzHsAqqY3nDa4uMuVoyaLgNvXV5q4s9zLWJN" ], "script": "base64:BgImCAISBwoFCAgICAESABIDCgEBEgASABIDCgEIEgASBQoDCAgIEgAbAAZTQ0FMRTgAgMLXLwAJa0ludGVyZXN0AghpbnRlcmVzdAANa1VzZXJJbnRlcmVzdAINX3VzZXJJbnRlcmVzdAAOa1VzZXJBdmFpbGFibGUCE191c2VyQXZhaWxhYmxlQ2xhaW0AEGtVc2VyVG9rZW5TdGFrZWQCEF91c2VyVG9rZW5TdGFrZWQAEWtUb3RhbFRva2VuU3Rha2VkAhB0b3RhbFRva2VuU3Rha2VkAAxrTkZUSW50ZXJlc3QCC05GVEludGVyZXN0ABBrTkZUVXNlckludGVyZXN0AhBfTkZUVXNlckludGVyZXN0ABZrTkZUVXNlckF2YWlsYWJsZUNsYWltAhZfTkZUVXNlckF2YWlsYWJsZUNsYWltAA9rTkZUVG90YWxTdGFrZWQCDk5GVFRvdGFsU3Rha2VkAA5rdXNlck5GVFN0YWtlZAIOX3VzZXJORlRTdGFrZWQAEGt1c2VyTkZUU3Rha2VkSWQCEF91c2VyTkZUU3Rha2VkSWQAC2tORlRDcmVhdGVkAgtfTkZUQ3JlYXRlZAAIa1Rva2VuaWQCB3Rva2VuSWQADmtQZXJzZW50Rm9yTkZUAg1wZXJjZW50Rm9yTkZUAAlrQWRtaW4xUEsCC2FkbWluX3B1Yl8xAAlrQWRtaW4yUEsCC2FkbWluX3B1Yl8yAAlrQWRtaW4zUEsCC2FkbWluX3B1Yl8zAAhhZG1pbjFQSwkA2QQBCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgUEdGhpcwUJa0FkbWluMVBLAhJDYW4ndCBnZXQgYWRtaW4xUEsACGFkbWluMlBLCQDZBAEJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQR0aGlzBQlrQWRtaW4yUEsCEkNhbid0IGdldCBhZG1pbjJQSwAIYWRtaW4zUEsJANkEAQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIFBHRoaXMFCWtBZG1pbjNQSwIUQ2FuJ3QgZ2V0IG9wZXJhdG9yUEsAB3Rva2VuSWQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQR0aGlzBQhrVG9rZW5pZAIXQ2FuJ3QgZ2V0IHN0YWtpbmcgdG9rZW4BC2lzQWRtaW5DYWxsAQFpAwkBD2NvbnRhaW5zRWxlbWVudAIJAMwIAgUIYWRtaW4xUEsJAMwIAgUIYWRtaW4yUEsJAMwIAgUIYWRtaW4zUEsFA25pbAgFAWkPY2FsbGVyUHVibGljS2V5BQR1bml0CQACAQIhT25seSBhZG1pbiBjYW4gY2FsbCB0aGlzIGZ1bmN0aW9uAQppc1NlbGZDYWxsAQFpAwkAAAIIBQFpBmNhbGxlcgUEdGhpcwUEdW5pdAkAAgECK09ubHkgY29udHJhY3QgaXRzZWxmIGNhbiBjYWxsIHRoaXMgZnVuY3Rpb24BDGFzc2V0SWRUb1N0cgEHYXNzZXRJZAQHJG1hdGNoMAUHYXNzZXRJZAMJAAECBQckbWF0Y2gwAgpCeXRlVmVjdG9yBAJpZAUHJG1hdGNoMAkA2AQBBQJpZAMJAAECBQckbWF0Y2gwAgRVbml0BAV3YXZlcwUHJG1hdGNoMAIFV0FWRVMJAAIBAgxOb3QgQXNzZXQgaWQBCWNsYWltQ2FsYwEEdXNlcgQQdG90YWxUb2tlblN0YWtlZAkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzBRFrVG90YWxUb2tlblN0YWtlZAAABAtjdXJJbnRlcmVzdAkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzBQlrSW50ZXJlc3QAAAQRYXZhaWxhYmxlRm9yQ2xhaW0JAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwkArAICBQR1c2VyBQ5rVXNlckF2YWlsYWJsZQAABAx1c2VySW50ZXJlc3QJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwkArAICBQR1c2VyBQ1rVXNlckludGVyZXN0BQtjdXJJbnRlcmVzdAQPdXNlclRva2VuU3Rha2VkCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMJAKwCAgUEdXNlcgUQa1VzZXJUb2tlblN0YWtlZAAABAtjbGFpbUFtb3VudAkAawMFD3VzZXJUb2tlblN0YWtlZAkAZQIFC2N1ckludGVyZXN0BQx1c2VySW50ZXJlc3QFBlNDQUxFOAkAlgoEBQtjdXJJbnRlcmVzdAkAZAIFC2NsYWltQW1vdW50BRFhdmFpbGFibGVGb3JDbGFpbQUPdXNlclRva2VuU3Rha2VkBRB0b3RhbFRva2VuU3Rha2VkAQxjbGFpbUNhbGNOZnQBBHVzZXIEDnRvdGFsTmZ0U3Rha2VkCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMFD2tORlRUb3RhbFN0YWtlZAAABAtjdXJJbnRlcmVzdAkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzBQxrTkZUSW50ZXJlc3QAAAQRYXZhaWxhYmxlRm9yQ2xhaW0JAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwkArAICBQR1c2VyBRZrTkZUVXNlckF2YWlsYWJsZUNsYWltAAAEDHVzZXJJbnRlcmVzdAkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzCQCsAgIFBHVzZXIFEGtORlRVc2VySW50ZXJlc3QFC2N1ckludGVyZXN0BA11c2VyTmZ0U3Rha2VkCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMJAKwCAgUEdXNlcgUOa3VzZXJORlRTdGFrZWQAAAQLY2xhaW1BbW91bnQJAGsDBQ11c2VyTmZ0U3Rha2VkCQBlAgULY3VySW50ZXJlc3QFDHVzZXJJbnRlcmVzdAUGU0NBTEU4CQCWCgQFC2N1ckludGVyZXN0CQBkAgULY2xhaW1BbW91bnQFEWF2YWlsYWJsZUZvckNsYWltBQ11c2VyTmZ0U3Rha2VkBQ50b3RhbE5mdFN0YWtlZAkBaQEEaW5pdAUHdG9rZW5JZAdhZG0xUHViB2FkbTJQdWIHYWRtM1B1Ygx0b05GVFBlcmNlbnQJAQt2YWx1ZU9yRWxzZQIJAQppc1NlbGZDYWxsAQUBaQMJAQEhAQkBCWlzRGVmaW5lZAEJAOwHAQkA2QQBBQd0b2tlbklkCQACAQIgYXNzZXQgaWQgaXMgbm90IGNvcnJlY3QgYXNzZXQgaWQDCQECIT0CCQDIAQEJANkEAQUHYWRtMVB1YgAgCQACAQIhZ3JvdXAxQWRtaW4xUHViS2V5IGlzIG5vdCBjb3JyZWN0AwkBAiE9AgkAyAEBCQDZBAEFB2FkbTJQdWIAIAkAAgECIWdyb3VwMUFkbWluMVB1YktleSBpcyBub3QgY29ycmVjdAMJAQIhPQIJAMgBAQkA2QQBBQdhZG0zUHViACAJAAIBAiFncm91cDFBZG1pbjFQdWJLZXkgaXMgbm90IGNvcnJlY3QJAMwIAgkBC1N0cmluZ0VudHJ5AgUIa1Rva2VuaWQFB3Rva2VuSWQJAMwIAgkBC1N0cmluZ0VudHJ5AgUJa0FkbWluMVBLBQdhZG0xUHViCQDMCAIJAQtTdHJpbmdFbnRyeQIFCWtBZG1pbjJQSwUHYWRtMlB1YgkAzAgCCQELU3RyaW5nRW50cnkCBQlrQWRtaW4zUEsFB2FkbTNQdWIJAMwIAgkBDEludGVnZXJFbnRyeQIFDmtQZXJzZW50Rm9yTkZUBQx0b05GVFBlcmNlbnQFA25pbAFpAQVzdGFrZQADCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAEJAAIBAhRPbmUgcGF5bWVudCBleHBlY3RlZAQLJHQwMzYxNDM2ODkJAJQKAggJAJEDAggFAWkIcGF5bWVudHMAAAZhbW91bnQICQCRAwIIBQFpCHBheW1lbnRzAAAHYXNzZXRJZAQJcG10QW1vdW50CAULJHQwMzYxNDM2ODkCXzEECnBtdEFzc2V0SWQIBQskdDAzNjE0MzY4OQJfMgMJAQIhPQIFCnBtdEFzc2V0SWQJANkEAQUHdG9rZW5JZAkAAgECE1dyb25nIHBheW1lbnQgYXNzZXQEBHVzZXIJAKUIAQgFAWkGY2FsbGVyBAskdDAzODEwMzkwNgkBCWNsYWltQ2FsYwEFBHVzZXIED3VzZXJOZXdJbnRlcmVzdAgFCyR0MDM4MTAzOTA2Al8xBBRjbGFpbUFtb3VudEF2YWlsYWJsZQgFCyR0MDM4MTAzOTA2Al8yBA91c2VyVG9rZW5TdGFrZWQIBQskdDAzODEwMzkwNgJfMwQQdG90YWxUb2tlblN0YWtlZAgFCyR0MDM4MTAzOTA2Al80CQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIFBHVzZXIFDWtVc2VySW50ZXJlc3QFD3VzZXJOZXdJbnRlcmVzdAkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICBQR1c2VyBQ5rVXNlckF2YWlsYWJsZQUUY2xhaW1BbW91bnRBdmFpbGFibGUJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgUEdXNlcgUQa1VzZXJUb2tlblN0YWtlZAkAZAIFD3VzZXJUb2tlblN0YWtlZAUJcG10QW1vdW50CQDMCAIJAQxJbnRlZ2VyRW50cnkCBRFrVG90YWxUb2tlblN0YWtlZAkAZAIFEHRvdGFsVG9rZW5TdGFrZWQFCXBtdEFtb3VudAUDbmlsAWkBB3Vuc3Rha2UBBmFtb3VudAQEdXNlcgkApQgBCAUBaQZjYWxsZXIDCQBnAgAABQZhbW91bnQJAAIBAh1BbW91bnQgbXVzdCBiZSBncmVhdGVyIHRoYW4gMAQLJHQwNDMyMDQ0MTYJAQljbGFpbUNhbGMBBQR1c2VyBA91c2VyTmV3SW50ZXJlc3QIBQskdDA0MzIwNDQxNgJfMQQUY2xhaW1BbW91bnRBdmFpbGFibGUIBQskdDA0MzIwNDQxNgJfMgQPdXNlclRva2VuU3Rha2VkCAULJHQwNDMyMDQ0MTYCXzMEEHRvdGFsVG9rZW5TdGFrZWQIBQskdDA0MzIwNDQxNgJfNAMJAGYCBQZhbW91bnQFD3VzZXJUb2tlblN0YWtlZAkAAgECIllvdSBjYW4ndCB1bnN0YWtlIG1vcmUgdGhhbiBzdGFrZWQJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgUEdXNlcgUNa1VzZXJJbnRlcmVzdAUPdXNlck5ld0ludGVyZXN0CQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIFBHVzZXIFDmtVc2VyQXZhaWxhYmxlBRRjbGFpbUFtb3VudEF2YWlsYWJsZQkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICBQR1c2VyBRBrVXNlclRva2VuU3Rha2VkCQBlAgUPdXNlclRva2VuU3Rha2VkBQZhbW91bnQJAMwIAgkBDEludGVnZXJFbnRyeQIFEWtUb3RhbFRva2VuU3Rha2VkCQBlAgUQdG90YWxUb2tlblN0YWtlZAUGYW1vdW50BQNuaWwBaQEFY2xhaW0ABAR1c2VyCQClCAEIBQFpBmNhbGxlcgQLJHQwNDgzMjQ5MjgJAQljbGFpbUNhbGMBBQR1c2VyBA91c2VyTmV3SW50ZXJlc3QIBQskdDA0ODMyNDkyOAJfMQQUY2xhaW1BbW91bnRBdmFpbGFibGUIBQskdDA0ODMyNDkyOAJfMgQPdXNlclRva2VuU3Rha2VkCAULJHQwNDgzMjQ5MjgCXzMEEHRvdGFsVG9rZW5TdGFrZWQIBQskdDA0ODMyNDkyOAJfNAMJAAACBRRjbGFpbUFtb3VudEF2YWlsYWJsZQAACQACAQIQTm90aGluZyB0byBjbGFpbQkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICBQR1c2VyBQ1rVXNlckludGVyZXN0BQ91c2VyTmV3SW50ZXJlc3QJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgUEdXNlcgUOa1VzZXJBdmFpbGFibGUAAAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCAUBaQZjYWxsZXIFFGNsYWltQW1vdW50QXZhaWxhYmxlCQDZBAEFB3Rva2VuSWQFA25pbAFpAQhzdGFrZU5GVAADCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAAJAAIBAhRPbmUgcGF5bWVudCBleHBlY3RlZAQLJHQwNTI5MzUzNjgJAJQKAggJAJEDAggFAWkIcGF5bWVudHMAAAZhbW91bnQICQCRAwIIBQFpCHBheW1lbnRzAAAHYXNzZXRJZAQJcG10QW1vdW50CAULJHQwNTI5MzUzNjgCXzEECnBtdEFzc2V0SWQIBQskdDA1MjkzNTM2OAJfMgQNcG10QXNzZXRJZFN0cgkBDGFzc2V0SWRUb1N0cgEFCnBtdEFzc2V0SWQDCQEBIQEJAQlpc0RlZmluZWQBCQCdCAIFBHRoaXMJAKwCAgUNcG10QXNzZXRJZFN0cgULa05GVENyZWF0ZWQJAAIBAg9Xcm9uZyBuZnQgYXNzZXQEBHVzZXIJAKUIAQgFAWkGY2FsbGVyBAskdDA1NTQ5NTY0NAkBDGNsYWltQ2FsY05mdAEFBHVzZXIED3VzZXJOZXdJbnRlcmVzdAgFCyR0MDU1NDk1NjQ0Al8xBBRjbGFpbUFtb3VudEF2YWlsYWJsZQgFCyR0MDU1NDk1NjQ0Al8yBA11c2VyTkZUU3Rha2VkCAULJHQwNTU0OTU2NDQCXzMEDnRvdGFsTkZUU3Rha2VkCAULJHQwNTU0OTU2NDQCXzQJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgUEdXNlcgUQa05GVFVzZXJJbnRlcmVzdAUPdXNlck5ld0ludGVyZXN0CQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIFBHVzZXIFFmtORlRVc2VyQXZhaWxhYmxlQ2xhaW0FFGNsYWltQW1vdW50QXZhaWxhYmxlCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIFBHVzZXIFDmt1c2VyTkZUU3Rha2VkCQBkAgUNdXNlck5GVFN0YWtlZAUJcG10QW1vdW50CQDMCAIJAQxJbnRlZ2VyRW50cnkCBQ9rTkZUVG90YWxTdGFrZWQJAGQCBQ50b3RhbE5GVFN0YWtlZAUJcG10QW1vdW50CQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIJAKwCAgkArAICBQR1c2VyAgFfBQ1wbXRBc3NldElkU3RyBRBrdXNlck5GVFN0YWtlZElkAAEFA25pbAFpAQp1bnN0YWtlTkZUAQJpZAQEdXNlcgkApQgBCAUBaQZjYWxsZXIDCQEJaXNEZWZpbmVkAQkAnQgCBQR0aGlzCQCsAgIJAKwCAgkArAICBQR1c2VyBQJpZAIBXwUQa3VzZXJORlRTdGFrZWRJZAkAAgECEVlvdSBkaWRuJ3Qgc3Rha2VkBAskdDA2MTY5NjI2NAkBDGNsYWltQ2FsY05mdAEFBHVzZXIED3VzZXJOZXdJbnRlcmVzdAgFCyR0MDYxNjk2MjY0Al8xBBRjbGFpbUFtb3VudEF2YWlsYWJsZQgFCyR0MDYxNjk2MjY0Al8yBA11c2VyTkZUU3Rha2VkCAULJHQwNjE2OTYyNjQCXzMEDnRvdGFsTkZUU3Rha2VkCAULJHQwNjE2OTYyNjQCXzQJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgUEdXNlcgUQa05GVFVzZXJJbnRlcmVzdAUPdXNlck5ld0ludGVyZXN0CQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIFBHVzZXIFFmtORlRVc2VyQXZhaWxhYmxlQ2xhaW0FFGNsYWltQW1vdW50QXZhaWxhYmxlCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIFBHVzZXIFDmt1c2VyTkZUU3Rha2VkCQBlAgUNdXNlck5GVFN0YWtlZAABCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQ9rTkZUVG90YWxTdGFrZWQJAGUCBQ50b3RhbE5GVFN0YWtlZAABCQDMCAIJAQtEZWxldGVFbnRyeQEJAKwCAgkArAICCQCsAgIFBHVzZXICAV8FAmlkBRBrdXNlck5GVFN0YWtlZElkCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMIBQFpBmNhbGxlcgABCQDZBAEFAmlkBQNuaWwBaQEIY2xhaW1ORlQABAR1c2VyCQClCAEIBQFpBmNhbGxlcgQLJHQwNjY5ODY3OTMJAQxjbGFpbUNhbGNOZnQBBQR1c2VyBA91c2VyTmV3SW50ZXJlc3QIBQskdDA2Njk4Njc5MwJfMQQUY2xhaW1BbW91bnRBdmFpbGFibGUIBQskdDA2Njk4Njc5MwJfMgQNdXNlck5GVFN0YWtlZAgFCyR0MDY2OTg2NzkzAl8zBA50b3RhbE5GVFN0YWtlZAgFCyR0MDY2OTg2NzkzAl80AwkAAAIFFGNsYWltQW1vdW50QXZhaWxhYmxlAAAJAAIBAhBOb3RoaW5nIHRvIGNsYWltCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIFBHVzZXIFEGtORlRVc2VySW50ZXJlc3QFD3VzZXJOZXdJbnRlcmVzdAkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICBQR1c2VyBRZrTkZUVXNlckF2YWlsYWJsZUNsYWltAAAJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwgFAWkGY2FsbGVyBRRjbGFpbUFtb3VudEF2YWlsYWJsZQkA2QQBBQd0b2tlbklkBQNuaWwBaQEIaXNzdWVORlQDCHVzZXJBZGRyBG5hbWUFZGVzY3IJAQt2YWx1ZU9yRWxzZQIJAQtpc0FkbWluQ2FsbAEFAWkEBXVBZGRyCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKYIAQUIdXNlckFkZHICEldyb25nIHVzZXIgYWRkcmVzcwQFaXNzdWUJAMIIBQUEbmFtZQUFZGVzY3IAAQABBwQFbmZ0SWQJALgIAQUFaXNzdWUJAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICCQDYBAEFBW5mdElkBQtrTkZUQ3JlYXRlZAUIdXNlckFkZHIJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwUFdUFkZHIAAQUFbmZ0SWQFA25pbAFpAQdhaXJkcm9wAAkBC3ZhbHVlT3JFbHNlAgkBC2lzQWRtaW5DYWxsAQUBaQMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAQkAAgECFE9uZSBwYXltZW50IGV4cGVjdGVkBAskdDA3NTgyNzY1NwkAlAoCCAkAkQMCCAUBaQhwYXltZW50cwAABmFtb3VudAgJAJEDAggFAWkIcGF5bWVudHMAAAdhc3NldElkBAlwbXRBbW91bnQIBQskdDA3NTgyNzY1NwJfMQQKcG10QXNzZXRJZAgFCyR0MDc1ODI3NjU3Al8yAwkBAiE9AgUKcG10QXNzZXRJZAkA2QQBBQd0b2tlbklkCQACAQITV3JvbmcgcGF5bWVudCBhc3NldAQNcGVyY2VudEZvck5GVAkBEUBleHRyTmF0aXZlKDEwNTApAgUEdGhpcwUOa1BlcnNlbnRGb3JORlQEEHRvdGFsVG9rZW5TdGFrZWQJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwURa1RvdGFsVG9rZW5TdGFrZWQAAAQOdG90YWxORlRTdGFrZWQJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwUPa05GVFRvdGFsU3Rha2VkAAAEC2N1ckludGVyZXN0CQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMFCWtJbnRlcmVzdAAABA5jdXJORlRJbnRlcmVzdAkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzBQxrTkZUSW50ZXJlc3QAAAQLJHQwODA4MDgyNTUDCQAAAgUOdG90YWxORlRTdGFrZWQAAAkAlAoCAAAFCXBtdEFtb3VudAQEbmZ0UAkAawMFCXBtdEFtb3VudAUNcGVyY2VudEZvck5GVABkCQCUCgIFBG5mdFAJAGUCBQlwbXRBbW91bnQFBG5mdFAEBnBtdE5GVAgFCyR0MDgwODA4MjU1Al8xBAhwbXRUb2tlbggFCyR0MDgwODA4MjU1Al8yBAtpbnRlcmVzdE5ldwMJAGYCBRB0b3RhbFRva2VuU3Rha2VkAAAJAGQCBQtjdXJJbnRlcmVzdAkAawMFCHBtdFRva2VuBQZTQ0FMRTgFEHRvdGFsVG9rZW5TdGFrZWQFC2N1ckludGVyZXN0BA5pbnRlcmVzdE5GVE5ldwMJAGYCBQ50b3RhbE5GVFN0YWtlZAAACQBkAgUOY3VyTkZUSW50ZXJlc3QJAGsDBQZwbXRORlQFBlNDQUxFOAUOdG90YWxORlRTdGFrZWQFDmN1ck5GVEludGVyZXN0CQDMCAIJAQxJbnRlZ2VyRW50cnkCBQlrSW50ZXJlc3QFC2ludGVyZXN0TmV3CQDMCAIJAQxJbnRlZ2VyRW50cnkCBQxrTkZUSW50ZXJlc3QFDmludGVyZXN0TkZUTmV3BQNuaWwBAnR4AQZ2ZXJpZnkABBNtdWx0aVNpZ25lZEJ5QWRtaW5zBBJhZG1pblB1YktleTFTaWduZWQDCQD0AwMIBQJ0eAlib2R5Qnl0ZXMJAJEDAggFAnR4BnByb29mcwAABQhhZG1pbjFQSwABAAAEEmFkbWluUHViS2V5MlNpZ25lZAMJAPQDAwgFAnR4CWJvZHlCeXRlcwkAkQMCCAUCdHgGcHJvb2ZzAAEFCGFkbWluMlBLAAEAAAQSYWRtaW5QdWJLZXkzU2lnbmVkAwkA9AMDCAUCdHgJYm9keUJ5dGVzCQCRAwIIBQJ0eAZwcm9vZnMAAgUIYWRtaW4zUEsAAQAACQBnAgkAZAIJAGQCBRJhZG1pblB1YktleTFTaWduZWQFEmFkbWluUHViS2V5MlNpZ25lZAUSYWRtaW5QdWJLZXkzU2lnbmVkAAIEByRtYXRjaDAFAnR4AwkAAQIFByRtYXRjaDACF0ludm9rZVNjcmlwdFRyYW5zYWN0aW9uBANpbnYFByRtYXRjaDAEBmlzU2VsZgkA9AMDCAUCdHgJYm9keUJ5dGVzCQCRAwIIBQJ0eAZwcm9vZnMAAAgFAnR4D3NlbmRlclB1YmxpY0tleQQKaXNSaWdodEZlZQMJAAACCAUDaW52A2ZlZQCg9zYJAAACCAUDaW52CmZlZUFzc2V0SWQFBHVuaXQHBAppc0luaXRDYWxsCQAAAggFA2ludghmdW5jdGlvbgIEaW5pdAQMaXNub1BheW1lbnRzCQAAAgkAkAMBCAUDaW52CHBheW1lbnRzAAADAwMDBQppc1JpZ2h0RmVlBQppc0luaXRDYWxsBwUGaXNTZWxmBwUMaXNub1BheW1lbnRzBwYFE211bHRpU2lnbmVkQnlBZG1pbnMFE211bHRpU2lnbmVkQnlBZG1pbnM47SR6", "height": 2728944, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: AytsdXjvX7jJq5fbhP6ffSuXeWLg81f4B37mQFf1RoJn Next: 8T6vEMJpsX79mNPztRcnRGziBV7db3ebeAQgRM93bTb9 Diff:
OldNewDifferences
247247 let interestNew = if ((totalTokenStaked > 0))
248248 then (curInterest + fraction(pmtToken, SCALE8, totalTokenStaked))
249249 else curInterest
250- let interestNFTNew = if ((totalTokenStaked > 0))
250+ let interestNFTNew = if ((totalNFTStaked > 0))
251251 then (curNFTInterest + fraction(pmtNFT, SCALE8, totalNFTStaked))
252252 else curNFTInterest
253253 [IntegerEntry(kInterest, interestNew), IntegerEntry(kNFTInterest, interestNFTNew)]
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let SCALE8 = 100000000
55
66 let kInterest = "interest"
77
88 let kUserInterest = "_userInterest"
99
1010 let kUserAvailable = "_userAvailableClaim"
1111
1212 let kUserTokenStaked = "_userTokenStaked"
1313
1414 let kTotalTokenStaked = "totalTokenStaked"
1515
1616 let kNFTInterest = "NFTInterest"
1717
1818 let kNFTUserInterest = "_NFTUserInterest"
1919
2020 let kNFTUserAvailableClaim = "_NFTUserAvailableClaim"
2121
2222 let kNFTTotalStaked = "NFTTotalStaked"
2323
2424 let kuserNFTStaked = "_userNFTStaked"
2525
2626 let kuserNFTStakedId = "_userNFTStakedId"
2727
2828 let kNFTCreated = "_NFTCreated"
2929
3030 let kTokenid = "tokenId"
3131
3232 let kPersentForNFT = "percentForNFT"
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,toNFTPercent) = 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), IntegerEntry(kPersentForNFT, toNFTPercent)])
100100
101101
102102
103103 @Callable(i)
104104 func stake () = if ((size(i.payments) != 1))
105105 then throw("One payment expected")
106106 else {
107107 let $t036143689 = $Tuple2(i.payments[0].amount, i.payments[0].assetId)
108108 let pmtAmount = $t036143689._1
109109 let pmtAssetId = $t036143689._2
110110 if ((pmtAssetId != fromBase58String(tokenId)))
111111 then throw("Wrong payment asset")
112112 else {
113113 let user = toString(i.caller)
114114 let $t038103906 = claimCalc(user)
115115 let userNewInterest = $t038103906._1
116116 let claimAmountAvailable = $t038103906._2
117117 let userTokenStaked = $t038103906._3
118118 let totalTokenStaked = $t038103906._4
119119 [IntegerEntry((user + kUserInterest), userNewInterest), IntegerEntry((user + kUserAvailable), claimAmountAvailable), IntegerEntry((user + kUserTokenStaked), (userTokenStaked + pmtAmount)), IntegerEntry(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 $t043204416 = claimCalc(user)
132132 let userNewInterest = $t043204416._1
133133 let claimAmountAvailable = $t043204416._2
134134 let userTokenStaked = $t043204416._3
135135 let totalTokenStaked = $t043204416._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(kTotalTokenStaked, (totalTokenStaked - amount))]
139139 }
140140 }
141141
142142
143143
144144 @Callable(i)
145145 func claim () = {
146146 let user = toString(i.caller)
147147 let $t048324928 = claimCalc(user)
148148 let userNewInterest = $t048324928._1
149149 let claimAmountAvailable = $t048324928._2
150150 let userTokenStaked = $t048324928._3
151151 let totalTokenStaked = $t048324928._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 $t052935368 = $Tuple2(i.payments[0].amount, i.payments[0].assetId)
164164 let pmtAmount = $t052935368._1
165165 let pmtAssetId = $t052935368._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 $t055495644 = claimCalcNft(user)
172172 let userNewInterest = $t055495644._1
173173 let claimAmountAvailable = $t055495644._2
174174 let userNFTStaked = $t055495644._3
175175 let totalNFTStaked = $t055495644._4
176176 [IntegerEntry((user + kNFTUserInterest), userNewInterest), IntegerEntry((user + kNFTUserAvailableClaim), claimAmountAvailable), IntegerEntry((user + kuserNFTStaked), (userNFTStaked + pmtAmount)), IntegerEntry(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 $t061696264 = claimCalcNft(user)
189189 let userNewInterest = $t061696264._1
190190 let claimAmountAvailable = $t061696264._2
191191 let userNFTStaked = $t061696264._3
192192 let totalNFTStaked = $t061696264._4
193193 [IntegerEntry((user + kNFTUserInterest), userNewInterest), IntegerEntry((user + kNFTUserAvailableClaim), claimAmountAvailable), IntegerEntry((user + kuserNFTStaked), (userNFTStaked - 1)), IntegerEntry(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 $t066986793 = claimCalcNft(user)
203203 let userNewInterest = $t066986793._1
204204 let claimAmountAvailable = $t066986793._2
205205 let userNFTStaked = $t066986793._3
206206 let totalNFTStaked = $t066986793._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) != 1))
226226 then throw("One payment expected")
227227 else {
228228 let $t075827657 = $Tuple2(i.payments[0].amount, i.payments[0].assetId)
229229 let pmtAmount = $t075827657._1
230230 let pmtAssetId = $t075827657._2
231231 if ((pmtAssetId != fromBase58String(tokenId)))
232232 then throw("Wrong payment asset")
233233 else {
234234 let percentForNFT = getIntegerValue(this, kPersentForNFT)
235235 let totalTokenStaked = valueOrElse(getInteger(this, kTotalTokenStaked), 0)
236236 let totalNFTStaked = valueOrElse(getInteger(this, kNFTTotalStaked), 0)
237237 let curInterest = valueOrElse(getInteger(this, kInterest), 0)
238238 let curNFTInterest = valueOrElse(getInteger(this, kNFTInterest), 0)
239239 let $t080808255 = if ((totalNFTStaked == 0))
240240 then $Tuple2(0, pmtAmount)
241241 else {
242242 let nftP = fraction(pmtAmount, percentForNFT, 100)
243243 $Tuple2(nftP, (pmtAmount - nftP))
244244 }
245245 let pmtNFT = $t080808255._1
246246 let pmtToken = $t080808255._2
247247 let interestNew = if ((totalTokenStaked > 0))
248248 then (curInterest + fraction(pmtToken, SCALE8, totalTokenStaked))
249249 else curInterest
250- let interestNFTNew = if ((totalTokenStaked > 0))
250+ let interestNFTNew = if ((totalNFTStaked > 0))
251251 then (curNFTInterest + fraction(pmtNFT, SCALE8, totalNFTStaked))
252252 else curNFTInterest
253253 [IntegerEntry(kInterest, interestNew), IntegerEntry(kNFTInterest, interestNFTNew)]
254254 }
255255 })
256256
257257
258258 @Verifier(tx)
259259 func verify () = {
260260 let multiSignedByAdmins = {
261261 let adminPubKey1Signed = if (sigVerify(tx.bodyBytes, tx.proofs[0], admin1PK))
262262 then 1
263263 else 0
264264 let adminPubKey2Signed = if (sigVerify(tx.bodyBytes, tx.proofs[1], admin2PK))
265265 then 1
266266 else 0
267267 let adminPubKey3Signed = if (sigVerify(tx.bodyBytes, tx.proofs[2], admin3PK))
268268 then 1
269269 else 0
270270 (((adminPubKey1Signed + adminPubKey2Signed) + adminPubKey3Signed) >= 2)
271271 }
272272 match tx {
273273 case inv: InvokeScriptTransaction =>
274274 let isSelf = sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey)
275275 let isRightFee = if ((inv.fee == 900000))
276276 then (inv.feeAssetId == unit)
277277 else false
278278 let isInitCall = (inv.function == "init")
279279 let isnoPayments = (size(inv.payments) == 0)
280280 if (if (if (if (isRightFee)
281281 then isInitCall
282282 else false)
283283 then isSelf
284284 else false)
285285 then isnoPayments
286286 else false)
287287 then true
288288 else multiSignedByAdmins
289289 case _ =>
290290 multiSignedByAdmins
291291 }
292292 }
293293

github/deemru/w8io/026f985 
39.10 ms