tx · HEQiLGTf1dhgxCqdktd982YwvXjNLQWVu114VGtQ7pxD

3N2PjXqef29HexCE7PeGZa9eRjS2jVeaFe4:  -0.01700000 Waves

2023.09.20 13:42 [2763599] smart account 3N2PjXqef29HexCE7PeGZa9eRjS2jVeaFe4 > SELF 0.00000000 Waves

{ "type": 13, "id": "HEQiLGTf1dhgxCqdktd982YwvXjNLQWVu114VGtQ7pxD", "fee": 1700000, "feeAssetId": null, "timestamp": 1695206574510, "version": 2, "chainId": 84, "sender": "3N2PjXqef29HexCE7PeGZa9eRjS2jVeaFe4", "senderPublicKey": "DU1U4j8FqHUMRr9WgfF3yo67ULEFkjp7dtMWMpjBK1ar", "proofs": [ "4azX4Qrq36HHUdQ18cBMspvpdR4iAzjYYTYzAR69mUwxAMZmapEPC1UZHAWzBkacmAiPz2E2py7egW9FRrx8mFCd", "2cowGCw1tYQBjoEGUi2ZBbWhZRLJZ6c1U9Z5jPjnRDLtUQ4GVLRf5gJ5DfbcqezcEF6nMTyVvayPiqEzxU6aRnv1" ], "script": "base64:BgI0CAISABIDCgEIEgMKAQgSBwoFCAgICAESABIDCgEBEgASABIDCgEIEgUKAwgICBIAEgASACMABlNDQUxFOACAwtcvAA1QRVJDRU5UX1NDQUxFAJBOAAlTRVBBUkFUT1ICAl9fAAlrSW50ZXJlc3QCCGludGVyZXN0AA1rVXNlckludGVyZXN0Ag1fdXNlckludGVyZXN0AA5rVXNlckF2YWlsYWJsZQITX3VzZXJBdmFpbGFibGVDbGFpbQAQa1VzZXJUb2tlblN0YWtlZAIQX3VzZXJUb2tlblN0YWtlZAARa1RvdGFsVG9rZW5TdGFrZWQCEHRvdGFsVG9rZW5TdGFrZWQADGtORlRJbnRlcmVzdAILTkZUSW50ZXJlc3QAEGtORlRVc2VySW50ZXJlc3QCEF9ORlRVc2VySW50ZXJlc3QAFmtORlRVc2VyQXZhaWxhYmxlQ2xhaW0CFl9ORlRVc2VyQXZhaWxhYmxlQ2xhaW0AD2tORlRUb3RhbFN0YWtlZAIOTkZUVG90YWxTdGFrZWQADmt1c2VyTkZUU3Rha2VkAg5fdXNlck5GVFN0YWtlZAAQa3VzZXJORlRTdGFrZWRJZAIQX3VzZXJORlRTdGFrZWRJZAALa05GVENyZWF0ZWQCC19ORlRDcmVhdGVkAAxrTGFzdEFpcmRyb3ACDF9sYXN0QWlyZHJvcAAIa1Rva2VuaWQCB3Rva2VuSWQADmtQZXJzZW50Rm9yTkZUAg1wZXJjZW50Rm9yTkZUAA9rTkZUQ3JlYXRlZExpc3QCDm5mdENyZWF0ZWRMaXN0AAdrQWN0aXZlAgZhY3RpdmUACWtBZG1pbjFQSwILYWRtaW5fcHViXzEACWtBZG1pbjJQSwILYWRtaW5fcHViXzIACWtBZG1pbjNQSwILYWRtaW5fcHViXzMACGFkbWluMVBLCQDZBAEJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQR0aGlzBQlrQWRtaW4xUEsCEkNhbid0IGdldCBhZG1pbjFQSwAIYWRtaW4yUEsJANkEAQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIFBHRoaXMFCWtBZG1pbjJQSwISQ2FuJ3QgZ2V0IGFkbWluMlBLAAhhZG1pbjNQSwkA2QQBCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgUEdGhpcwUJa0FkbWluM1BLAhRDYW4ndCBnZXQgb3BlcmF0b3JQSwAHdG9rZW5JZAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIFBHRoaXMFCGtUb2tlbmlkAhdDYW4ndCBnZXQgc3Rha2luZyB0b2tlbgELaXNBZG1pbkNhbGwBAWkDCQEPY29udGFpbnNFbGVtZW50AgkAzAgCBQhhZG1pbjFQSwkAzAgCBQhhZG1pbjJQSwkAzAgCBQhhZG1pbjNQSwUDbmlsCAUBaQ9jYWxsZXJQdWJsaWNLZXkFBHVuaXQJAAIBAiFPbmx5IGFkbWluIGNhbiBjYWxsIHRoaXMgZnVuY3Rpb24BCmlzU2VsZkNhbGwBAWkDCQAAAggFAWkGY2FsbGVyBQR0aGlzBQR1bml0CQACAQIrT25seSBjb250cmFjdCBpdHNlbGYgY2FuIGNhbGwgdGhpcyBmdW5jdGlvbgEIaXNBY3RpdmUAAwkBC3ZhbHVlT3JFbHNlAgkAmwgCBQR0aGlzBQdrQWN0aXZlBgUEdW5pdAkAAgECH0RBcHAgaXMgaW5hY3RpdmUgYXQgdGhpcyBtb21lbnQBDGFzc2V0SWRUb1N0cgEHYXNzZXRJZAQHJG1hdGNoMAUHYXNzZXRJZAMJAAECBQckbWF0Y2gwAgpCeXRlVmVjdG9yBAJpZAUHJG1hdGNoMAkA2AQBBQJpZAMJAAECBQckbWF0Y2gwAgRVbml0BAV3YXZlcwUHJG1hdGNoMAIFV0FWRVMJAAIBAgxOb3QgQXNzZXQgaWQBCWNsYWltQ2FsYwEEdXNlcgQQdG90YWxUb2tlblN0YWtlZAkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzBRFrVG90YWxUb2tlblN0YWtlZAAABAtjdXJJbnRlcmVzdAkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzBQlrSW50ZXJlc3QAAAQRYXZhaWxhYmxlRm9yQ2xhaW0JAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwkArAICBQR1c2VyBQ5rVXNlckF2YWlsYWJsZQAABAx1c2VySW50ZXJlc3QJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwkArAICBQR1c2VyBQ1rVXNlckludGVyZXN0BQtjdXJJbnRlcmVzdAQPdXNlclRva2VuU3Rha2VkCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMJAKwCAgUEdXNlcgUQa1VzZXJUb2tlblN0YWtlZAAABAtjbGFpbUFtb3VudAkAawMFD3VzZXJUb2tlblN0YWtlZAkAZQIFC2N1ckludGVyZXN0BQx1c2VySW50ZXJlc3QFBlNDQUxFOAkAlgoEBQtjdXJJbnRlcmVzdAkAZAIFC2NsYWltQW1vdW50BRFhdmFpbGFibGVGb3JDbGFpbQUPdXNlclRva2VuU3Rha2VkBRB0b3RhbFRva2VuU3Rha2VkAQxjbGFpbUNhbGNOZnQBBHVzZXIEDnRvdGFsTmZ0U3Rha2VkCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMFD2tORlRUb3RhbFN0YWtlZAAABAtjdXJJbnRlcmVzdAkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzBQxrTkZUSW50ZXJlc3QAAAQRYXZhaWxhYmxlRm9yQ2xhaW0JAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwkArAICBQR1c2VyBRZrTkZUVXNlckF2YWlsYWJsZUNsYWltAAAEDHVzZXJJbnRlcmVzdAkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzCQCsAgIFBHVzZXIFEGtORlRVc2VySW50ZXJlc3QFC2N1ckludGVyZXN0BA11c2VyTmZ0U3Rha2VkCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMJAKwCAgUEdXNlcgUOa3VzZXJORlRTdGFrZWQAAAQLY2xhaW1BbW91bnQJAGgCBQ11c2VyTmZ0U3Rha2VkCQBlAgULY3VySW50ZXJlc3QFDHVzZXJJbnRlcmVzdAkAlgoEBQtjdXJJbnRlcmVzdAkAZAIFC2NsYWltQW1vdW50BRFhdmFpbGFibGVGb3JDbGFpbQUNdXNlck5mdFN0YWtlZAUOdG90YWxOZnRTdGFrZWQBDGNhbGNUb2tlbkFwcgAEC2xhc3RBaXJkcm9wCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMFDGtMYXN0QWlyZHJvcAAABBB0b3RhbFRva2VuU3Rha2VkCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMFEWtUb3RhbFRva2VuU3Rha2VkAAAEDnRvdGFsTkZUU3Rha2VkCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMFD2tORlRUb3RhbFN0YWtlZAAABA1wZXJjZW50Rm9yTkZUCQERQGV4dHJOYXRpdmUoMTA1MCkCBQR0aGlzBQ5rUGVyc2VudEZvck5GVAQMdG9rZW5BaXJkcm9wAwkAAAIFDnRvdGFsTkZUU3Rha2VkAAAFC2xhc3RBaXJkcm9wCQBrAwULbGFzdEFpcmRyb3AJAGUCAGQJAJcDAQkAzAgCBQ1wZXJjZW50Rm9yTkZUCQDMCAIJAGgCBQ50b3RhbE5GVFN0YWtlZAAKBQNuaWwAZAkAaAIJAGsDBQx0b2tlbkFpcmRyb3AFDVBFUkNFTlRfU0NBTEUFEHRvdGFsVG9rZW5TdGFrZWQANAEQZ2V0VXNlclN0YWtlZE5GVAEEdXNlcgoBBmZvck5mdAIEdU5GVAVuZnRJZAMJAQlpc0RlZmluZWQBCQCbCAIFBHRoaXMJAKwCAgkArAICCQCsAgIFBHVzZXICAV8FBW5mdElkBRBrdXNlck5GVFN0YWtlZElkCQDNCAIFBHVORlQFBW5mdElkBQR1TkZUBAduZnRzU3RyCQELdmFsdWVPckVsc2UCCQCdCAIFBHRoaXMFD2tORlRDcmVhdGVkTGlzdAIABAduZnRMaXN0AwkAAAIFB25mdHNTdHICAAUDbmlsCQC1CQIFB25mdHNTdHIFCVNFUEFSQVRPUgQIdXNlck5mdHMKAAIkbAUHbmZ0TGlzdAoAAiRzCQCQAwEFAiRsCgAFJGFjYzAFA25pbAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEGZm9yTmZ0AgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhNMaXN0IHNpemUgZXhjZWVkcyA1CQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQkAuQkCBQh1c2VyTmZ0cwIBLA0BaQEQZ2V0U3RhdHNSRUFET05MWQAEA2FwcgkBDGNhbGNUb2tlbkFwcgAEEHRvdGFsVG9rZW5TdGFrZWQJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwURa1RvdGFsVG9rZW5TdGFrZWQAAAQOdG90YWxOZnRTdGFrZWQJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwUPa05GVFRvdGFsU3Rha2VkAAAJAJQKAgUDbmlsCQC5CQIJAMwIAgIGJWQlZCVkCQDMCAIJAKQDAQUDYXByCQDMCAIJAKQDAQUQdG90YWxUb2tlblN0YWtlZAkAzAgCCQCkAwEFDnRvdGFsTmZ0U3Rha2VkBQNuaWwFCVNFUEFSQVRPUgFpARZnZXRTdGF0c0J5VXNlclJFQURPTkxZAQR1c2VyBAh1c2VyQWRkcgkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCmCAEFBHVzZXICEldyb25nIHVzZXIgYWRkcmVzcwQLJHQwNDUwMDQ1OTYJAQljbGFpbUNhbGMBBQR1c2VyBA91c2VyTmV3SW50ZXJlc3QIBQskdDA0NTAwNDU5NgJfMQQUY2xhaW1BbW91bnRBdmFpbGFibGUIBQskdDA0NTAwNDU5NgJfMgQPdXNlclRva2VuU3Rha2VkCAULJHQwNDUwMDQ1OTYCXzMEEHRvdGFsVG9rZW5TdGFrZWQIBQskdDA0NTAwNDU5NgJfNAQLJHQwNDU5OTQ3MDAJAQxjbGFpbUNhbGNOZnQBBQR1c2VyBBJ1c2VyTmV3SW50ZXJlc3RORlQIBQskdDA0NTk5NDcwMAJfMQQXY2xhaW1BbW91bnRBdmFpbGFibGVORlQIBQskdDA0NTk5NDcwMAJfMgQNdXNlck5GVFN0YWtlZAgFCyR0MDQ1OTk0NzAwAl8zBA50b3RhbE5GVFN0YWtlZAgFCyR0MDQ1OTk0NzAwAl80BBB1c2VyVG9rZW5CYWxhbmNlCQDwBwIFCHVzZXJBZGRyCQDZBAEFB3Rva2VuSWQECHVzZXJOZnRzCQEQZ2V0VXNlclN0YWtlZE5GVAEFBHVzZXIJAJQKAgUDbmlsCQC5CQIJAMwIAgIKJWQlZCVkJWQlcwkAzAgCCQCkAwEFEHVzZXJUb2tlbkJhbGFuY2UJAMwIAgkApAMBBQ91c2VyVG9rZW5TdGFrZWQJAMwIAgkApAMBBRRjbGFpbUFtb3VudEF2YWlsYWJsZQkAzAgCCQCkAwEFF2NsYWltQW1vdW50QXZhaWxhYmxlTkZUCQDMCAIFCHVzZXJOZnRzBQNuaWwFCVNFUEFSQVRPUgFpARRnZXRVc2VyU3RhdHNSRUFET05MWQEEdXNlcgQDYXByCQEMY2FsY1Rva2VuQXByAAQLJHQwNTE0NTU3NDQDCQAAAgUEdXNlcgIACQCWCgQAAAAAAAAAAAQIdXNlckFkZHIJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkApggBBQR1c2VyAhJXcm9uZyB1c2VyIGFkZHJlc3MECyR0MDUzODI1NDc4CQEJY2xhaW1DYWxjAQUEdXNlcgQPdXNlck5ld0ludGVyZXN0CAULJHQwNTM4MjU0NzgCXzEEFGNsYWltQW1vdW50QXZhaWxhYmxlCAULJHQwNTM4MjU0NzgCXzIED3VzZXJUb2tlblN0YWtlZAgFCyR0MDUzODI1NDc4Al8zBBB0b3RhbFRva2VuU3Rha2VkCAULJHQwNTM4MjU0NzgCXzQECyR0MDU0ODU1NTg2CQEMY2xhaW1DYWxjTmZ0AQUEdXNlcgQSdXNlck5ld0ludGVyZXN0TkZUCAULJHQwNTQ4NTU1ODYCXzEEF2NsYWltQW1vdW50QXZhaWxhYmxlTkZUCAULJHQwNTQ4NTU1ODYCXzIEDXVzZXJORlRTdGFrZWQIBQskdDA1NDg1NTU4NgJfMwQOdG90YWxORlRTdGFrZWQIBQskdDA1NDg1NTU4NgJfNAQLdXNlckJhbGFuY2UJAPAHAgUIdXNlckFkZHIJANkEAQUHdG9rZW5JZAkAlgoEBQt1c2VyQmFsYW5jZQUPdXNlclRva2VuU3Rha2VkBRRjbGFpbUFtb3VudEF2YWlsYWJsZQUXY2xhaW1BbW91bnRBdmFpbGFibGVORlQEEHVzZXJUb2tlbkJhbGFuY2UIBQskdDA1MTQ1NTc0NAJfMQQPdXNlclRva2VuU3Rha2VkCAULJHQwNTE0NTU3NDQCXzIEFGNsYWltQW1vdW50QXZhaWxhYmxlCAULJHQwNTE0NTU3NDQCXzMEF2NsYWltQW1vdW50QXZhaWxhYmxlTkZUCAULJHQwNTE0NTU3NDQCXzQJAJQKAgUDbmlsCQC5CQIJAMwIAgIKJWQlZCVkJWQlZAkAzAgCCQCkAwEFA2FwcgkAzAgCCQCkAwEFEHVzZXJUb2tlbkJhbGFuY2UJAMwIAgkApAMBBQ91c2VyVG9rZW5TdGFrZWQJAMwIAgkApAMBBRRjbGFpbUFtb3VudEF2YWlsYWJsZQkAzAgCCQCkAwEFF2NsYWltQW1vdW50QXZhaWxhYmxlTkZUBQNuaWwFCVNFUEFSQVRPUgFpAQRpbml0BQd0b2tlbklkB2FkbTFQdWIHYWRtMlB1YgdhZG0zUHViDHRvTkZUUGVyY2VudAkBC3ZhbHVlT3JFbHNlAgkBCmlzU2VsZkNhbGwBBQFpAwkBCWlzRGVmaW5lZAEJAJ0IAgUEdGhpcwUIa1Rva2VuaWQJAAIBAhNEQXBwIGFscmVhZHkgaW5pdGVkAwkBASEBCQEJaXNEZWZpbmVkAQkA7AcBCQDZBAEFB3Rva2VuSWQJAAIBAiBhc3NldCBpZCBpcyBub3QgY29ycmVjdCBhc3NldCBpZAMJAQIhPQIJAMgBAQkA2QQBBQdhZG0xUHViACAJAAIBAiFncm91cDFBZG1pbjFQdWJLZXkgaXMgbm90IGNvcnJlY3QDCQECIT0CCQDIAQEJANkEAQUHYWRtMlB1YgAgCQACAQIhZ3JvdXAxQWRtaW4xUHViS2V5IGlzIG5vdCBjb3JyZWN0AwkBAiE9AgkAyAEBCQDZBAEFB2FkbTNQdWIAIAkAAgECIWdyb3VwMUFkbWluMVB1YktleSBpcyBub3QgY29ycmVjdAkAzAgCCQELU3RyaW5nRW50cnkCBQhrVG9rZW5pZAUHdG9rZW5JZAkAzAgCCQELU3RyaW5nRW50cnkCBQlrQWRtaW4xUEsFB2FkbTFQdWIJAMwIAgkBC1N0cmluZ0VudHJ5AgUJa0FkbWluMlBLBQdhZG0yUHViCQDMCAIJAQtTdHJpbmdFbnRyeQIFCWtBZG1pbjNQSwUHYWRtM1B1YgkAzAgCCQEMSW50ZWdlckVudHJ5AgUOa1BlcnNlbnRGb3JORlQFDHRvTkZUUGVyY2VudAUDbmlsAWkBBXN0YWtlAAkBC3ZhbHVlT3JFbHNlAgkBCGlzQWN0aXZlAAMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAQkAAgECFE9uZSBwYXltZW50IGV4cGVjdGVkBAskdDA2OTQ3NzAyMgkAlAoCCAkAkQMCCAUBaQhwYXltZW50cwAABmFtb3VudAgJAJEDAggFAWkIcGF5bWVudHMAAAdhc3NldElkBAlwbXRBbW91bnQIBQskdDA2OTQ3NzAyMgJfMQQKcG10QXNzZXRJZAgFCyR0MDY5NDc3MDIyAl8yAwkBAiE9AgUKcG10QXNzZXRJZAkA2QQBBQd0b2tlbklkCQACAQITV3JvbmcgcGF5bWVudCBhc3NldAQEdXNlcgkApQgBCAUBaQZjYWxsZXIECyR0MDcxNDM3MjM5CQEJY2xhaW1DYWxjAQUEdXNlcgQPdXNlck5ld0ludGVyZXN0CAULJHQwNzE0MzcyMzkCXzEEFGNsYWltQW1vdW50QXZhaWxhYmxlCAULJHQwNzE0MzcyMzkCXzIED3VzZXJUb2tlblN0YWtlZAgFCyR0MDcxNDM3MjM5Al8zBBB0b3RhbFRva2VuU3Rha2VkCAULJHQwNzE0MzcyMzkCXzQJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgUEdXNlcgUNa1VzZXJJbnRlcmVzdAUPdXNlck5ld0ludGVyZXN0CQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIFBHVzZXIFDmtVc2VyQXZhaWxhYmxlBRRjbGFpbUFtb3VudEF2YWlsYWJsZQkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICBQR1c2VyBRBrVXNlclRva2VuU3Rha2VkCQBkAgUPdXNlclRva2VuU3Rha2VkBQlwbXRBbW91bnQJAMwIAgkBDEludGVnZXJFbnRyeQIFEWtUb3RhbFRva2VuU3Rha2VkCQBkAgUQdG90YWxUb2tlblN0YWtlZAUJcG10QW1vdW50BQNuaWwBaQEHdW5zdGFrZQEGYW1vdW50CQELdmFsdWVPckVsc2UCCQEIaXNBY3RpdmUABAR1c2VyCQClCAEIBQFpBmNhbGxlcgMJAGcCAAAFBmFtb3VudAkAAgECHUFtb3VudCBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAwBAskdDA3Njc3Nzc3MwkBCWNsYWltQ2FsYwEFBHVzZXIED3VzZXJOZXdJbnRlcmVzdAgFCyR0MDc2Nzc3NzczAl8xBBRjbGFpbUFtb3VudEF2YWlsYWJsZQgFCyR0MDc2Nzc3NzczAl8yBA91c2VyVG9rZW5TdGFrZWQIBQskdDA3Njc3Nzc3MwJfMwQQdG90YWxUb2tlblN0YWtlZAgFCyR0MDc2Nzc3NzczAl80AwkAZgIFBmFtb3VudAUPdXNlclRva2VuU3Rha2VkCQACAQIiWW91IGNhbid0IHVuc3Rha2UgbW9yZSB0aGFuIHN0YWtlZAkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICBQR1c2VyBQ1rVXNlckludGVyZXN0BQ91c2VyTmV3SW50ZXJlc3QJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgUEdXNlcgUOa1VzZXJBdmFpbGFibGUFFGNsYWltQW1vdW50QXZhaWxhYmxlCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIFBHVzZXIFEGtVc2VyVG9rZW5TdGFrZWQJAGUCBQ91c2VyVG9rZW5TdGFrZWQFBmFtb3VudAkAzAgCCQEMSW50ZWdlckVudHJ5AgURa1RvdGFsVG9rZW5TdGFrZWQJAGUCBRB0b3RhbFRva2VuU3Rha2VkBQZhbW91bnQJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwgFAWkGY2FsbGVyBQZhbW91bnQJANkEAQUHdG9rZW5JZAUDbmlsAWkBBWNsYWltAAkBC3ZhbHVlT3JFbHNlAgkBCGlzQWN0aXZlAAQEdXNlcgkApQgBCAUBaQZjYWxsZXIECyR0MDgyNzk4Mzc1CQEJY2xhaW1DYWxjAQUEdXNlcgQPdXNlck5ld0ludGVyZXN0CAULJHQwODI3OTgzNzUCXzEEFGNsYWltQW1vdW50QXZhaWxhYmxlCAULJHQwODI3OTgzNzUCXzIED3VzZXJUb2tlblN0YWtlZAgFCyR0MDgyNzk4Mzc1Al8zBBB0b3RhbFRva2VuU3Rha2VkCAULJHQwODI3OTgzNzUCXzQECyR0MDgzNzg4NDc5CQEMY2xhaW1DYWxjTmZ0AQUEdXNlcgQSdXNlck5ld0ludGVyZXN0TkZUCAULJHQwODM3ODg0NzkCXzEEF2NsYWltQW1vdW50QXZhaWxhYmxlTkZUCAULJHQwODM3ODg0NzkCXzIEDXVzZXJORlRTdGFrZWQIBQskdDA4Mzc4ODQ3OQJfMwQOdG90YWxORlRTdGFrZWQIBQskdDA4Mzc4ODQ3OQJfNAMJAAACCQBkAgUUY2xhaW1BbW91bnRBdmFpbGFibGUFF2NsYWltQW1vdW50QXZhaWxhYmxlTkZUAAAJAAIBAhBOb3RoaW5nIHRvIGNsYWltCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIFBHVzZXIFDWtVc2VySW50ZXJlc3QFD3VzZXJOZXdJbnRlcmVzdAkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICBQR1c2VyBQ5rVXNlckF2YWlsYWJsZQAACQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIFBHVzZXIFEGtORlRVc2VySW50ZXJlc3QFEnVzZXJOZXdJbnRlcmVzdE5GVAkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICBQR1c2VyBRZrTkZUVXNlckF2YWlsYWJsZUNsYWltAAAJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwgFAWkGY2FsbGVyCQBkAgUUY2xhaW1BbW91bnRBdmFpbGFibGUFF2NsYWltQW1vdW50QXZhaWxhYmxlTkZUCQDZBAEFB3Rva2VuSWQFA25pbAFpAQhzdGFrZU5GVAAJAQt2YWx1ZU9yRWxzZQIJAQhpc0FjdGl2ZQADCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAEJAAIBAhRPbmUgcGF5bWVudCBleHBlY3RlZAQLJHQwOTAzNTkxMTAJAJQKAggJAJEDAggFAWkIcGF5bWVudHMAAAZhbW91bnQICQCRAwIIBQFpCHBheW1lbnRzAAAHYXNzZXRJZAQJcG10QW1vdW50CAULJHQwOTAzNTkxMTACXzEECnBtdEFzc2V0SWQIBQskdDA5MDM1OTExMAJfMgQNcG10QXNzZXRJZFN0cgkBDGFzc2V0SWRUb1N0cgEFCnBtdEFzc2V0SWQDCQEBIQEJAQlpc0RlZmluZWQBCQCdCAIFBHRoaXMJAKwCAgUNcG10QXNzZXRJZFN0cgULa05GVENyZWF0ZWQJAAIBAg9Xcm9uZyBuZnQgYXNzZXQEBHVzZXIJAKUIAQgFAWkGY2FsbGVyBAskdDA5MjkxOTM4NgkBDGNsYWltQ2FsY05mdAEFBHVzZXIED3VzZXJOZXdJbnRlcmVzdAgFCyR0MDkyOTE5Mzg2Al8xBBRjbGFpbUFtb3VudEF2YWlsYWJsZQgFCyR0MDkyOTE5Mzg2Al8yBA11c2VyTkZUU3Rha2VkCAULJHQwOTI5MTkzODYCXzMEDnRvdGFsTkZUU3Rha2VkCAULJHQwOTI5MTkzODYCXzQJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgUEdXNlcgUQa05GVFVzZXJJbnRlcmVzdAUPdXNlck5ld0ludGVyZXN0CQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIFBHVzZXIFFmtORlRVc2VyQXZhaWxhYmxlQ2xhaW0FFGNsYWltQW1vdW50QXZhaWxhYmxlCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIFBHVzZXIFDmt1c2VyTkZUU3Rha2VkCQBkAgUNdXNlck5GVFN0YWtlZAABCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQ9rTkZUVG90YWxTdGFrZWQJAGQCBQ50b3RhbE5GVFN0YWtlZAABCQDMCAIJAQxCb29sZWFuRW50cnkCCQCsAgIJAKwCAgkArAICBQR1c2VyAgFfBQ1wbXRBc3NldElkU3RyBRBrdXNlck5GVFN0YWtlZElkBgUDbmlsAWkBCnVuc3Rha2VORlQBAmlkCQELdmFsdWVPckVsc2UCCQEIaXNBY3RpdmUABAR1c2VyCQClCAEIBQFpBmNhbGxlcgMJAQEhAQkBCWlzRGVmaW5lZAEJAJsIAgUEdGhpcwkArAICCQCsAgIJAKwCAgUEdXNlcgIBXwUCaWQFEGt1c2VyTkZUU3Rha2VkSWQJAAIBAhFZb3UgZGlkbid0IHN0YWtlZAQMJHQwOTkyNDEwMDE5CQEMY2xhaW1DYWxjTmZ0AQUEdXNlcgQPdXNlck5ld0ludGVyZXN0CAUMJHQwOTkyNDEwMDE5Al8xBBRjbGFpbUFtb3VudEF2YWlsYWJsZQgFDCR0MDk5MjQxMDAxOQJfMgQNdXNlck5GVFN0YWtlZAgFDCR0MDk5MjQxMDAxOQJfMwQOdG90YWxORlRTdGFrZWQIBQwkdDA5OTI0MTAwMTkCXzQJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgUEdXNlcgUQa05GVFVzZXJJbnRlcmVzdAUPdXNlck5ld0ludGVyZXN0CQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIFBHVzZXIFFmtORlRVc2VyQXZhaWxhYmxlQ2xhaW0FFGNsYWltQW1vdW50QXZhaWxhYmxlCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIFBHVzZXIFDmt1c2VyTkZUU3Rha2VkCQBlAgUNdXNlck5GVFN0YWtlZAABCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQ9rTkZUVG90YWxTdGFrZWQJAGUCBQ50b3RhbE5GVFN0YWtlZAABCQDMCAIJAQtEZWxldGVFbnRyeQEJAKwCAgkArAICCQCsAgIFBHVzZXICAV8FAmlkBRBrdXNlck5GVFN0YWtlZElkCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMIBQFpBmNhbGxlcgABCQDZBAEFAmlkBQNuaWwBaQEIaXNzdWVORlQDCHVzZXJBZGRyBG5hbWUFZGVzY3IJAQt2YWx1ZU9yRWxzZQIJAQhpc0FjdGl2ZQAJAQt2YWx1ZU9yRWxzZQIJAQtpc0FkbWluQ2FsbAEFAWkEBXVBZGRyCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKYIAQUIdXNlckFkZHICEldyb25nIHVzZXIgYWRkcmVzcwQFaXNzdWUJAMIIBQUEbmFtZQUFZGVzY3IAAQAABwQFbmZ0SWQJALgIAQUFaXNzdWUEB25mdExpc3QJAQt2YWx1ZU9yRWxzZQIJAJ0IAgUEdGhpcwUPa05GVENyZWF0ZWRMaXN0AgAECm5ld05mdExpc3QJAKwCAgUHbmZ0TGlzdAMJAQIhPQIFB25mdExpc3QCAAkArAICBQlTRVBBUkFUT1IJANgEAQUFbmZ0SWQJAKwCAgIACQDYBAEFBW5mdElkCQDMCAIFBWlzc3VlCQDMCAIJAQtTdHJpbmdFbnRyeQIJAKwCAgkA2AQBBQVuZnRJZAULa05GVENyZWF0ZWQFCHVzZXJBZGRyCQDMCAIJAQtTdHJpbmdFbnRyeQIFD2tORlRDcmVhdGVkTGlzdAUKbmV3TmZ0TGlzdAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDBQV1QWRkcgABBQVuZnRJZAUDbmlsAWkBB2FpcmRyb3AACQELdmFsdWVPckVsc2UCCQEIaXNBY3RpdmUACQELdmFsdWVPckVsc2UCCQELaXNBZG1pbkNhbGwBBQFpAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwABCQACAQIUT25lIHBheW1lbnQgZXhwZWN0ZWQEDSR0MDExMTg5MTEyNjQJAJQKAggJAJEDAggFAWkIcGF5bWVudHMAAAZhbW91bnQICQCRAwIIBQFpCHBheW1lbnRzAAAHYXNzZXRJZAQJcG10QW1vdW50CAUNJHQwMTExODkxMTI2NAJfMQQKcG10QXNzZXRJZAgFDSR0MDExMTg5MTEyNjQCXzIDCQECIT0CBQpwbXRBc3NldElkCQDZBAEFB3Rva2VuSWQJAAIBAhNXcm9uZyBwYXltZW50IGFzc2V0BA1wZXJjZW50Rm9yTkZUCQERQGV4dHJOYXRpdmUoMTA1MCkCBQR0aGlzBQ5rUGVyc2VudEZvck5GVAQQdG90YWxUb2tlblN0YWtlZAkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzBRFrVG90YWxUb2tlblN0YWtlZAAABA50b3RhbE5GVFN0YWtlZAkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzBQ9rTkZUVG90YWxTdGFrZWQAAAQLY3VySW50ZXJlc3QJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwUJa0ludGVyZXN0AAAEDmN1ck5GVEludGVyZXN0CQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMFDGtORlRJbnRlcmVzdAAABA0kdDAxMTY4NzExODkxAwkAAAIFDnRvdGFsTkZUU3Rha2VkAAAJAJQKAgAABQlwbXRBbW91bnQEBG5mdFAJAGsDBQlwbXRBbW91bnQJAJcDAQkAzAgCBQ1wZXJjZW50Rm9yTkZUCQDMCAIJAGgCBQ50b3RhbE5GVFN0YWtlZAAKBQNuaWwAZAkAlAoCBQRuZnRQCQBlAgUJcG10QW1vdW50BQRuZnRQBAZwbXRORlQIBQ0kdDAxMTY4NzExODkxAl8xBAhwbXRUb2tlbggFDSR0MDExNjg3MTE4OTECXzIEC2ludGVyZXN0TmV3AwkAZgIFEHRvdGFsVG9rZW5TdGFrZWQAAAkAZAIFC2N1ckludGVyZXN0CQBrAwUIcG10VG9rZW4FBlNDQUxFOAUQdG90YWxUb2tlblN0YWtlZAULY3VySW50ZXJlc3QEDmludGVyZXN0TkZUTmV3AwkAZgIFDnRvdGFsTkZUU3Rha2VkAAAJAGQCBQ5jdXJORlRJbnRlcmVzdAkAaQIFBnBtdE5GVAUOdG90YWxORlRTdGFrZWQFDmN1ck5GVEludGVyZXN0CQDMCAIJAQxJbnRlZ2VyRW50cnkCBQlrSW50ZXJlc3QFC2ludGVyZXN0TmV3CQDMCAIJAQxJbnRlZ2VyRW50cnkCBQxrTkZUSW50ZXJlc3QFDmludGVyZXN0TkZUTmV3CQDMCAIJAQxJbnRlZ2VyRW50cnkCBQxrTGFzdEFpcmRyb3AFCXBtdEFtb3VudAUDbmlsAWkBCGFjdGl2YXRlAAkBC3ZhbHVlT3JFbHNlAgkBC2lzQWRtaW5DYWxsAQUBaQMJAQt2YWx1ZU9yRWxzZQIJAJsIAgUEdGhpcwUHa0FjdGl2ZQYJAAIBAhNkQXBwIGFscmVhZHkgYWN0aXZlCQDMCAIJAQxCb29sZWFuRW50cnkCBQdrQWN0aXZlBgUDbmlsAWkBCHNodXRkb3duAAkBC3ZhbHVlT3JFbHNlAgkBC2lzQWRtaW5DYWxsAQUBaQMJAQEhAQkBC3ZhbHVlT3JFbHNlAgkAmwgCBQR0aGlzBQdrQWN0aXZlBgkAAgECFWRBcHAgYWxyZWFkeSBzaHV0ZG93bgkAzAgCCQEMQm9vbGVhbkVudHJ5AgUHa0FjdGl2ZQcFA25pbAECdHgBBnZlcmlmeQAEE211bHRpU2lnbmVkQnlBZG1pbnMEEmFkbWluUHViS2V5MVNpZ25lZAMJAPQDAwgFAnR4CWJvZHlCeXRlcwkAkQMCCAUCdHgGcHJvb2ZzAAAFCGFkbWluMVBLAAEAAAQSYWRtaW5QdWJLZXkyU2lnbmVkAwkA9AMDCAUCdHgJYm9keUJ5dGVzCQCRAwIIBQJ0eAZwcm9vZnMAAQUIYWRtaW4yUEsAAQAABBJhZG1pblB1YktleTNTaWduZWQDCQD0AwMIBQJ0eAlib2R5Qnl0ZXMJAJEDAggFAnR4BnByb29mcwACBQhhZG1pbjNQSwABAAAJAGcCCQBkAgkAZAIFEmFkbWluUHViS2V5MVNpZ25lZAUSYWRtaW5QdWJLZXkyU2lnbmVkBRJhZG1pblB1YktleTNTaWduZWQAAgQHJG1hdGNoMAUCdHgDCQABAgUHJG1hdGNoMAIXSW52b2tlU2NyaXB0VHJhbnNhY3Rpb24EA2ludgUHJG1hdGNoMAQGaXNTZWxmCQD0AwMIBQJ0eAlib2R5Qnl0ZXMJAJEDAggFAnR4BnByb29mcwAACAUCdHgPc2VuZGVyUHVibGljS2V5BAppc1JpZ2h0RmVlAwkAAAIIBQNpbnYDZmVlAKD3NgkAAAIIBQNpbnYKZmVlQXNzZXRJZAUEdW5pdAcECmlzSW5pdENhbGwJAAACCAUDaW52CGZ1bmN0aW9uAgRpbml0BAxpc25vUGF5bWVudHMJAAACCQCQAwEIBQNpbnYIcGF5bWVudHMAAAMDAwMFCmlzUmlnaHRGZWUFCmlzSW5pdENhbGwHBQZpc1NlbGYHBQxpc25vUGF5bWVudHMHBgUTbXVsdGlTaWduZWRCeUFkbWlucwUTbXVsdGlTaWduZWRCeUFkbWluc8O7Tc8=", "height": 2763599, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: B6XsqtpfhnLBRPBPkyqoX2gZYPs1Tas714q4N4KJTMPH Next: BPbGKRJCsMb33aWkhW6arytEBw6MyfygwetTKwCJ2ccu Diff:
OldNewDifferences
345345 let totalNFTStaked = valueOrElse(getInteger(this, kNFTTotalStaked), 0)
346346 let curInterest = valueOrElse(getInteger(this, kInterest), 0)
347347 let curNFTInterest = valueOrElse(getInteger(this, kNFTInterest), 0)
348- let $t01168711897 = if ((totalNFTStaked == 0))
348+ let $t01168711891 = if ((totalNFTStaked == 0))
349349 then $Tuple2(0, pmtAmount)
350350 else {
351- let nftP = fraction(pmtAmount, (100 - min([percentForNFT, (totalNFTStaked * 10)])), 100)
351+ let nftP = fraction(pmtAmount, min([percentForNFT, (totalNFTStaked * 10)]), 100)
352352 $Tuple2(nftP, (pmtAmount - nftP))
353353 }
354- let pmtNFT = $t01168711897._1
355- let pmtToken = $t01168711897._2
354+ let pmtNFT = $t01168711891._1
355+ let pmtToken = $t01168711891._2
356356 let interestNew = if ((totalTokenStaked > 0))
357357 then (curInterest + fraction(pmtToken, SCALE8, totalTokenStaked))
358358 else curInterest
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let SCALE8 = 100000000
55
66 let PERCENT_SCALE = 10000
77
88 let SEPARATOR = "__"
99
1010 let kInterest = "interest"
1111
1212 let kUserInterest = "_userInterest"
1313
1414 let kUserAvailable = "_userAvailableClaim"
1515
1616 let kUserTokenStaked = "_userTokenStaked"
1717
1818 let kTotalTokenStaked = "totalTokenStaked"
1919
2020 let kNFTInterest = "NFTInterest"
2121
2222 let kNFTUserInterest = "_NFTUserInterest"
2323
2424 let kNFTUserAvailableClaim = "_NFTUserAvailableClaim"
2525
2626 let kNFTTotalStaked = "NFTTotalStaked"
2727
2828 let kuserNFTStaked = "_userNFTStaked"
2929
3030 let kuserNFTStakedId = "_userNFTStakedId"
3131
3232 let kNFTCreated = "_NFTCreated"
3333
3434 let kLastAirdrop = "_lastAirdrop"
3535
3636 let kTokenid = "tokenId"
3737
3838 let kPersentForNFT = "percentForNFT"
3939
4040 let kNFTCreatedList = "nftCreatedList"
4141
4242 let kActive = "active"
4343
4444 let kAdmin1PK = "admin_pub_1"
4545
4646 let kAdmin2PK = "admin_pub_2"
4747
4848 let kAdmin3PK = "admin_pub_3"
4949
5050 let admin1PK = fromBase58String(valueOrErrorMessage(getString(this, kAdmin1PK), "Can't get admin1PK"))
5151
5252 let admin2PK = fromBase58String(valueOrErrorMessage(getString(this, kAdmin2PK), "Can't get admin2PK"))
5353
5454 let admin3PK = fromBase58String(valueOrErrorMessage(getString(this, kAdmin3PK), "Can't get operatorPK"))
5555
5656 let tokenId = valueOrErrorMessage(getString(this, kTokenid), "Can't get staking token")
5757
5858 func isAdminCall (i) = if (containsElement([admin1PK, admin2PK, admin3PK], i.callerPublicKey))
5959 then unit
6060 else throw("Only admin can call this function")
6161
6262
6363 func isSelfCall (i) = if ((i.caller == this))
6464 then unit
6565 else throw("Only contract itself can call this function")
6666
6767
6868 func isActive () = if (valueOrElse(getBoolean(this, kActive), true))
6969 then unit
7070 else throw("DApp is inactive at this moment")
7171
7272
7373 func assetIdToStr (assetId) = match assetId {
7474 case id: ByteVector =>
7575 toBase58String(id)
7676 case waves: Unit =>
7777 "WAVES"
7878 case _ =>
7979 throw("Not Asset id")
8080 }
8181
8282
8383 func claimCalc (user) = {
8484 let totalTokenStaked = valueOrElse(getInteger(this, kTotalTokenStaked), 0)
8585 let curInterest = valueOrElse(getInteger(this, kInterest), 0)
8686 let availableForClaim = valueOrElse(getInteger(this, (user + kUserAvailable)), 0)
8787 let userInterest = valueOrElse(getInteger(this, (user + kUserInterest)), curInterest)
8888 let userTokenStaked = valueOrElse(getInteger(this, (user + kUserTokenStaked)), 0)
8989 let claimAmount = fraction(userTokenStaked, (curInterest - userInterest), SCALE8)
9090 $Tuple4(curInterest, (claimAmount + availableForClaim), userTokenStaked, totalTokenStaked)
9191 }
9292
9393
9494 func claimCalcNft (user) = {
9595 let totalNftStaked = valueOrElse(getInteger(this, kNFTTotalStaked), 0)
9696 let curInterest = valueOrElse(getInteger(this, kNFTInterest), 0)
9797 let availableForClaim = valueOrElse(getInteger(this, (user + kNFTUserAvailableClaim)), 0)
9898 let userInterest = valueOrElse(getInteger(this, (user + kNFTUserInterest)), curInterest)
9999 let userNftStaked = valueOrElse(getInteger(this, (user + kuserNFTStaked)), 0)
100100 let claimAmount = (userNftStaked * (curInterest - userInterest))
101101 $Tuple4(curInterest, (claimAmount + availableForClaim), userNftStaked, totalNftStaked)
102102 }
103103
104104
105105 func calcTokenApr () = {
106106 let lastAirdrop = valueOrElse(getInteger(this, kLastAirdrop), 0)
107107 let totalTokenStaked = valueOrElse(getInteger(this, kTotalTokenStaked), 0)
108108 let totalNFTStaked = valueOrElse(getInteger(this, kNFTTotalStaked), 0)
109109 let percentForNFT = getIntegerValue(this, kPersentForNFT)
110110 let tokenAirdrop = if ((totalNFTStaked == 0))
111111 then lastAirdrop
112112 else fraction(lastAirdrop, (100 - min([percentForNFT, (totalNFTStaked * 10)])), 100)
113113 (fraction(tokenAirdrop, PERCENT_SCALE, totalTokenStaked) * 52)
114114 }
115115
116116
117117 func getUserStakedNFT (user) = {
118118 func forNft (uNFT,nftId) = if (isDefined(getBoolean(this, (((user + "_") + nftId) + kuserNFTStakedId))))
119119 then (uNFT :+ nftId)
120120 else uNFT
121121
122122 let nftsStr = valueOrElse(getString(this, kNFTCreatedList), "")
123123 let nftList = if ((nftsStr == ""))
124124 then nil
125125 else split(nftsStr, SEPARATOR)
126126 let userNfts = {
127127 let $l = nftList
128128 let $s = size($l)
129129 let $acc0 = nil
130130 func $f0_1 ($a,$i) = if (($i >= $s))
131131 then $a
132132 else forNft($a, $l[$i])
133133
134134 func $f0_2 ($a,$i) = if (($i >= $s))
135135 then $a
136136 else throw("List size exceeds 5")
137137
138138 $f0_2($f0_1($f0_1($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3), 4), 5)
139139 }
140140 makeString(userNfts, ",")
141141 }
142142
143143
144144 @Callable(i)
145145 func getStatsREADONLY () = {
146146 let apr = calcTokenApr()
147147 let totalTokenStaked = valueOrElse(getInteger(this, kTotalTokenStaked), 0)
148148 let totalNftStaked = valueOrElse(getInteger(this, kNFTTotalStaked), 0)
149149 $Tuple2(nil, makeString(["%d%d%d", toString(apr), toString(totalTokenStaked), toString(totalNftStaked)], SEPARATOR))
150150 }
151151
152152
153153
154154 @Callable(i)
155155 func getStatsByUserREADONLY (user) = {
156156 let userAddr = valueOrErrorMessage(addressFromString(user), "Wrong user address")
157157 let $t045004596 = claimCalc(user)
158158 let userNewInterest = $t045004596._1
159159 let claimAmountAvailable = $t045004596._2
160160 let userTokenStaked = $t045004596._3
161161 let totalTokenStaked = $t045004596._4
162162 let $t045994700 = claimCalcNft(user)
163163 let userNewInterestNFT = $t045994700._1
164164 let claimAmountAvailableNFT = $t045994700._2
165165 let userNFTStaked = $t045994700._3
166166 let totalNFTStaked = $t045994700._4
167167 let userTokenBalance = assetBalance(userAddr, fromBase58String(tokenId))
168168 let userNfts = getUserStakedNFT(user)
169169 $Tuple2(nil, makeString(["%d%d%d%d%s", toString(userTokenBalance), toString(userTokenStaked), toString(claimAmountAvailable), toString(claimAmountAvailableNFT), userNfts], SEPARATOR))
170170 }
171171
172172
173173
174174 @Callable(i)
175175 func getUserStatsREADONLY (user) = {
176176 let apr = calcTokenApr()
177177 let $t051455744 = if ((user == ""))
178178 then $Tuple4(0, 0, 0, 0)
179179 else {
180180 let userAddr = valueOrErrorMessage(addressFromString(user), "Wrong user address")
181181 let $t053825478 = claimCalc(user)
182182 let userNewInterest = $t053825478._1
183183 let claimAmountAvailable = $t053825478._2
184184 let userTokenStaked = $t053825478._3
185185 let totalTokenStaked = $t053825478._4
186186 let $t054855586 = claimCalcNft(user)
187187 let userNewInterestNFT = $t054855586._1
188188 let claimAmountAvailableNFT = $t054855586._2
189189 let userNFTStaked = $t054855586._3
190190 let totalNFTStaked = $t054855586._4
191191 let userBalance = assetBalance(userAddr, fromBase58String(tokenId))
192192 $Tuple4(userBalance, userTokenStaked, claimAmountAvailable, claimAmountAvailableNFT)
193193 }
194194 let userTokenBalance = $t051455744._1
195195 let userTokenStaked = $t051455744._2
196196 let claimAmountAvailable = $t051455744._3
197197 let claimAmountAvailableNFT = $t051455744._4
198198 $Tuple2(nil, makeString(["%d%d%d%d%d", toString(apr), toString(userTokenBalance), toString(userTokenStaked), toString(claimAmountAvailable), toString(claimAmountAvailableNFT)], SEPARATOR))
199199 }
200200
201201
202202
203203 @Callable(i)
204204 func init (tokenId,adm1Pub,adm2Pub,adm3Pub,toNFTPercent) = valueOrElse(isSelfCall(i), if (isDefined(getString(this, kTokenid)))
205205 then throw("DApp already inited")
206206 else if (!(isDefined(assetInfo(fromBase58String(tokenId)))))
207207 then throw("asset id is not correct asset id")
208208 else if ((size(fromBase58String(adm1Pub)) != 32))
209209 then throw("group1Admin1PubKey is not correct")
210210 else if ((size(fromBase58String(adm2Pub)) != 32))
211211 then throw("group1Admin1PubKey is not correct")
212212 else if ((size(fromBase58String(adm3Pub)) != 32))
213213 then throw("group1Admin1PubKey is not correct")
214214 else [StringEntry(kTokenid, tokenId), StringEntry(kAdmin1PK, adm1Pub), StringEntry(kAdmin2PK, adm2Pub), StringEntry(kAdmin3PK, adm3Pub), IntegerEntry(kPersentForNFT, toNFTPercent)])
215215
216216
217217
218218 @Callable(i)
219219 func stake () = valueOrElse(isActive(), if ((size(i.payments) != 1))
220220 then throw("One payment expected")
221221 else {
222222 let $t069477022 = $Tuple2(i.payments[0].amount, i.payments[0].assetId)
223223 let pmtAmount = $t069477022._1
224224 let pmtAssetId = $t069477022._2
225225 if ((pmtAssetId != fromBase58String(tokenId)))
226226 then throw("Wrong payment asset")
227227 else {
228228 let user = toString(i.caller)
229229 let $t071437239 = claimCalc(user)
230230 let userNewInterest = $t071437239._1
231231 let claimAmountAvailable = $t071437239._2
232232 let userTokenStaked = $t071437239._3
233233 let totalTokenStaked = $t071437239._4
234234 [IntegerEntry((user + kUserInterest), userNewInterest), IntegerEntry((user + kUserAvailable), claimAmountAvailable), IntegerEntry((user + kUserTokenStaked), (userTokenStaked + pmtAmount)), IntegerEntry(kTotalTokenStaked, (totalTokenStaked + pmtAmount))]
235235 }
236236 })
237237
238238
239239
240240 @Callable(i)
241241 func unstake (amount) = valueOrElse(isActive(), {
242242 let user = toString(i.caller)
243243 if ((0 >= amount))
244244 then throw("Amount must be greater than 0")
245245 else {
246246 let $t076777773 = claimCalc(user)
247247 let userNewInterest = $t076777773._1
248248 let claimAmountAvailable = $t076777773._2
249249 let userTokenStaked = $t076777773._3
250250 let totalTokenStaked = $t076777773._4
251251 if ((amount > userTokenStaked))
252252 then throw("You can't unstake more than staked")
253253 else [IntegerEntry((user + kUserInterest), userNewInterest), IntegerEntry((user + kUserAvailable), claimAmountAvailable), IntegerEntry((user + kUserTokenStaked), (userTokenStaked - amount)), IntegerEntry(kTotalTokenStaked, (totalTokenStaked - amount)), ScriptTransfer(i.caller, amount, fromBase58String(tokenId))]
254254 }
255255 })
256256
257257
258258
259259 @Callable(i)
260260 func claim () = valueOrElse(isActive(), {
261261 let user = toString(i.caller)
262262 let $t082798375 = claimCalc(user)
263263 let userNewInterest = $t082798375._1
264264 let claimAmountAvailable = $t082798375._2
265265 let userTokenStaked = $t082798375._3
266266 let totalTokenStaked = $t082798375._4
267267 let $t083788479 = claimCalcNft(user)
268268 let userNewInterestNFT = $t083788479._1
269269 let claimAmountAvailableNFT = $t083788479._2
270270 let userNFTStaked = $t083788479._3
271271 let totalNFTStaked = $t083788479._4
272272 if (((claimAmountAvailable + claimAmountAvailableNFT) == 0))
273273 then throw("Nothing to claim")
274274 else [IntegerEntry((user + kUserInterest), userNewInterest), IntegerEntry((user + kUserAvailable), 0), IntegerEntry((user + kNFTUserInterest), userNewInterestNFT), IntegerEntry((user + kNFTUserAvailableClaim), 0), ScriptTransfer(i.caller, (claimAmountAvailable + claimAmountAvailableNFT), fromBase58String(tokenId))]
275275 })
276276
277277
278278
279279 @Callable(i)
280280 func stakeNFT () = valueOrElse(isActive(), if ((size(i.payments) != 1))
281281 then throw("One payment expected")
282282 else {
283283 let $t090359110 = $Tuple2(i.payments[0].amount, i.payments[0].assetId)
284284 let pmtAmount = $t090359110._1
285285 let pmtAssetId = $t090359110._2
286286 let pmtAssetIdStr = assetIdToStr(pmtAssetId)
287287 if (!(isDefined(getString(this, (pmtAssetIdStr + kNFTCreated)))))
288288 then throw("Wrong nft asset")
289289 else {
290290 let user = toString(i.caller)
291291 let $t092919386 = claimCalcNft(user)
292292 let userNewInterest = $t092919386._1
293293 let claimAmountAvailable = $t092919386._2
294294 let userNFTStaked = $t092919386._3
295295 let totalNFTStaked = $t092919386._4
296296 [IntegerEntry((user + kNFTUserInterest), userNewInterest), IntegerEntry((user + kNFTUserAvailableClaim), claimAmountAvailable), IntegerEntry((user + kuserNFTStaked), (userNFTStaked + 1)), IntegerEntry(kNFTTotalStaked, (totalNFTStaked + 1)), BooleanEntry((((user + "_") + pmtAssetIdStr) + kuserNFTStakedId), true)]
297297 }
298298 })
299299
300300
301301
302302 @Callable(i)
303303 func unstakeNFT (id) = valueOrElse(isActive(), {
304304 let user = toString(i.caller)
305305 if (!(isDefined(getBoolean(this, (((user + "_") + id) + kuserNFTStakedId)))))
306306 then throw("You didn't staked")
307307 else {
308308 let $t0992410019 = claimCalcNft(user)
309309 let userNewInterest = $t0992410019._1
310310 let claimAmountAvailable = $t0992410019._2
311311 let userNFTStaked = $t0992410019._3
312312 let totalNFTStaked = $t0992410019._4
313313 [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))]
314314 }
315315 })
316316
317317
318318
319319 @Callable(i)
320320 func issueNFT (userAddr,name,descr) = valueOrElse(isActive(), valueOrElse(isAdminCall(i), {
321321 let uAddr = valueOrErrorMessage(addressFromString(userAddr), "Wrong user address")
322322 let issue = Issue(name, descr, 1, 0, false)
323323 let nftId = calculateAssetId(issue)
324324 let nftList = valueOrElse(getString(this, kNFTCreatedList), "")
325325 let newNftList = (nftList + (if ((nftList != ""))
326326 then (SEPARATOR + toBase58String(nftId))
327327 else ("" + toBase58String(nftId))))
328328 [issue, StringEntry((toBase58String(nftId) + kNFTCreated), userAddr), StringEntry(kNFTCreatedList, newNftList), ScriptTransfer(uAddr, 1, nftId)]
329329 }))
330330
331331
332332
333333 @Callable(i)
334334 func airdrop () = valueOrElse(isActive(), valueOrElse(isAdminCall(i), if ((size(i.payments) != 1))
335335 then throw("One payment expected")
336336 else {
337337 let $t01118911264 = $Tuple2(i.payments[0].amount, i.payments[0].assetId)
338338 let pmtAmount = $t01118911264._1
339339 let pmtAssetId = $t01118911264._2
340340 if ((pmtAssetId != fromBase58String(tokenId)))
341341 then throw("Wrong payment asset")
342342 else {
343343 let percentForNFT = getIntegerValue(this, kPersentForNFT)
344344 let totalTokenStaked = valueOrElse(getInteger(this, kTotalTokenStaked), 0)
345345 let totalNFTStaked = valueOrElse(getInteger(this, kNFTTotalStaked), 0)
346346 let curInterest = valueOrElse(getInteger(this, kInterest), 0)
347347 let curNFTInterest = valueOrElse(getInteger(this, kNFTInterest), 0)
348- let $t01168711897 = if ((totalNFTStaked == 0))
348+ let $t01168711891 = if ((totalNFTStaked == 0))
349349 then $Tuple2(0, pmtAmount)
350350 else {
351- let nftP = fraction(pmtAmount, (100 - min([percentForNFT, (totalNFTStaked * 10)])), 100)
351+ let nftP = fraction(pmtAmount, min([percentForNFT, (totalNFTStaked * 10)]), 100)
352352 $Tuple2(nftP, (pmtAmount - nftP))
353353 }
354- let pmtNFT = $t01168711897._1
355- let pmtToken = $t01168711897._2
354+ let pmtNFT = $t01168711891._1
355+ let pmtToken = $t01168711891._2
356356 let interestNew = if ((totalTokenStaked > 0))
357357 then (curInterest + fraction(pmtToken, SCALE8, totalTokenStaked))
358358 else curInterest
359359 let interestNFTNew = if ((totalNFTStaked > 0))
360360 then (curNFTInterest + (pmtNFT / totalNFTStaked))
361361 else curNFTInterest
362362 [IntegerEntry(kInterest, interestNew), IntegerEntry(kNFTInterest, interestNFTNew), IntegerEntry(kLastAirdrop, pmtAmount)]
363363 }
364364 }))
365365
366366
367367
368368 @Callable(i)
369369 func activate () = valueOrElse(isAdminCall(i), if (valueOrElse(getBoolean(this, kActive), true))
370370 then throw("dApp already active")
371371 else [BooleanEntry(kActive, true)])
372372
373373
374374
375375 @Callable(i)
376376 func shutdown () = valueOrElse(isAdminCall(i), if (!(valueOrElse(getBoolean(this, kActive), true)))
377377 then throw("dApp already shutdown")
378378 else [BooleanEntry(kActive, false)])
379379
380380
381381 @Verifier(tx)
382382 func verify () = {
383383 let multiSignedByAdmins = {
384384 let adminPubKey1Signed = if (sigVerify(tx.bodyBytes, tx.proofs[0], admin1PK))
385385 then 1
386386 else 0
387387 let adminPubKey2Signed = if (sigVerify(tx.bodyBytes, tx.proofs[1], admin2PK))
388388 then 1
389389 else 0
390390 let adminPubKey3Signed = if (sigVerify(tx.bodyBytes, tx.proofs[2], admin3PK))
391391 then 1
392392 else 0
393393 (((adminPubKey1Signed + adminPubKey2Signed) + adminPubKey3Signed) >= 2)
394394 }
395395 match tx {
396396 case inv: InvokeScriptTransaction =>
397397 let isSelf = sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey)
398398 let isRightFee = if ((inv.fee == 900000))
399399 then (inv.feeAssetId == unit)
400400 else false
401401 let isInitCall = (inv.function == "init")
402402 let isnoPayments = (size(inv.payments) == 0)
403403 if (if (if (if (isRightFee)
404404 then isInitCall
405405 else false)
406406 then isSelf
407407 else false)
408408 then isnoPayments
409409 else false)
410410 then true
411411 else multiSignedByAdmins
412412 case _ =>
413413 multiSignedByAdmins
414414 }
415415 }
416416

github/deemru/w8io/3ef1775 
81.33 ms