tx · BPbGKRJCsMb33aWkhW6arytEBw6MyfygwetTKwCJ2ccu

3N2PjXqef29HexCE7PeGZa9eRjS2jVeaFe4:  -0.01500000 Waves

2023.11.07 15:26 [2832926] smart account 3N2PjXqef29HexCE7PeGZa9eRjS2jVeaFe4 > SELF 0.00000000 Waves

{ "type": 13, "id": "BPbGKRJCsMb33aWkhW6arytEBw6MyfygwetTKwCJ2ccu", "fee": 1500000, "feeAssetId": null, "timestamp": 1699360054626, "version": 2, "chainId": 84, "sender": "3N2PjXqef29HexCE7PeGZa9eRjS2jVeaFe4", "senderPublicKey": "DU1U4j8FqHUMRr9WgfF3yo67ULEFkjp7dtMWMpjBK1ar", "proofs": [ "DSCFsBnb8vQySRDUwVyPggKZbzb9kVu2kWFzcXVoGa6bUuMmiL7cdG4d9GJgjskifuz3ZDxAB2eLF7z21cXH1fs", "48UtMFCPH3HBVfMFYBY8xrf1AXkJLiW3P5D5cZFNyopD8QKV92doPJfFW4yjPqhsHttf5oJhCo6PArWF6mgWA6HZ" ], "script": "base64:BgIuCAISABIDCgEIEgYKBAgICAgSABIDCgEBEgASABIDCgEIEgUKAwgICBIAEgASACAABlNDQUxFOACAwtcvAA1QRVJDRU5UX1NDQUxFAJBOAAlTRVBBUkFUT1ICAl9fAAlrSW50ZXJlc3QCCGludGVyZXN0AA1rVXNlckludGVyZXN0Ag1fdXNlckludGVyZXN0AA5rVXNlckF2YWlsYWJsZQITX3VzZXJBdmFpbGFibGVDbGFpbQAQa1VzZXJUb2tlblN0YWtlZAIQX3VzZXJUb2tlblN0YWtlZAARa1RvdGFsVG9rZW5TdGFrZWQCEHRvdGFsVG9rZW5TdGFrZWQADGtORlRJbnRlcmVzdAILTkZUSW50ZXJlc3QAEGtORlRVc2VySW50ZXJlc3QCEF9ORlRVc2VySW50ZXJlc3QAFmtORlRVc2VyQXZhaWxhYmxlQ2xhaW0CFl9ORlRVc2VyQXZhaWxhYmxlQ2xhaW0AD2tORlRUb3RhbFN0YWtlZAIOTkZUVG90YWxTdGFrZWQADmt1c2VyTkZUU3Rha2VkAg5fdXNlck5GVFN0YWtlZAAQa3VzZXJORlRTdGFrZWRJZAIQX3VzZXJORlRTdGFrZWRJZAALa05GVENyZWF0ZWQCC19ORlRDcmVhdGVkAAxrTGFzdEFpcmRyb3ACDF9sYXN0QWlyZHJvcAAIa1Rva2VuaWQCB3Rva2VuSWQAB2tBY3RpdmUCBmFjdGl2ZQAJa0FkbWluMVBLAgthZG1pbl9wdWJfMQAJa0FkbWluMlBLAgthZG1pbl9wdWJfMgAJa0FkbWluM1BLAgthZG1pbl9wdWJfMwAIYWRtaW4xUEsJANkEAQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIFBHRoaXMFCWtBZG1pbjFQSwISQ2FuJ3QgZ2V0IGFkbWluMVBLAAhhZG1pbjJQSwkA2QQBCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgUEdGhpcwUJa0FkbWluMlBLAhJDYW4ndCBnZXQgYWRtaW4yUEsACGFkbWluM1BLCQDZBAEJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQR0aGlzBQlrQWRtaW4zUEsCFENhbid0IGdldCBvcGVyYXRvclBLAAd0b2tlbklkCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgUEdGhpcwUIa1Rva2VuaWQCF0Nhbid0IGdldCBzdGFraW5nIHRva2VuAQtpc0FkbWluQ2FsbAEBaQMJAQ9jb250YWluc0VsZW1lbnQCCQDMCAIFCGFkbWluMVBLCQDMCAIFCGFkbWluMlBLCQDMCAIFCGFkbWluM1BLBQNuaWwIBQFpD2NhbGxlclB1YmxpY0tleQUEdW5pdAkAAgECIU9ubHkgYWRtaW4gY2FuIGNhbGwgdGhpcyBmdW5jdGlvbgEKaXNTZWxmQ2FsbAEBaQMJAAACCAUBaQZjYWxsZXIFBHRoaXMFBHVuaXQJAAIBAitPbmx5IGNvbnRyYWN0IGl0c2VsZiBjYW4gY2FsbCB0aGlzIGZ1bmN0aW9uAQhpc0FjdGl2ZQADCQELdmFsdWVPckVsc2UCCQCbCAIFBHRoaXMFB2tBY3RpdmUGBQR1bml0CQACAQIfREFwcCBpcyBpbmFjdGl2ZSBhdCB0aGlzIG1vbWVudAEMYXNzZXRJZFRvU3RyAQdhc3NldElkBAckbWF0Y2gwBQdhc3NldElkAwkAAQIFByRtYXRjaDACCkJ5dGVWZWN0b3IEAmlkBQckbWF0Y2gwCQDYBAEFAmlkAwkAAQIFByRtYXRjaDACBFVuaXQEBXdhdmVzBQckbWF0Y2gwAgVXQVZFUwkAAgECDE5vdCBBc3NldCBpZAEJY2xhaW1DYWxjAQR1c2VyBBB0b3RhbFRva2VuU3Rha2VkCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMFEWtUb3RhbFRva2VuU3Rha2VkAAAEC2N1ckludGVyZXN0CQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMFCWtJbnRlcmVzdAAABBFhdmFpbGFibGVGb3JDbGFpbQkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzCQCsAgIFBHVzZXIFDmtVc2VyQXZhaWxhYmxlAAAEDHVzZXJJbnRlcmVzdAkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzCQCsAgIFBHVzZXIFDWtVc2VySW50ZXJlc3QFC2N1ckludGVyZXN0BA91c2VyVG9rZW5TdGFrZWQJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwkArAICBQR1c2VyBRBrVXNlclRva2VuU3Rha2VkAAAEC2NsYWltQW1vdW50CQBrAwUPdXNlclRva2VuU3Rha2VkCQBlAgULY3VySW50ZXJlc3QFDHVzZXJJbnRlcmVzdAUGU0NBTEU4CQCWCgQFC2N1ckludGVyZXN0CQBkAgULY2xhaW1BbW91bnQFEWF2YWlsYWJsZUZvckNsYWltBQ91c2VyVG9rZW5TdGFrZWQFEHRvdGFsVG9rZW5TdGFrZWQBDGNsYWltQ2FsY05mdAEEdXNlcgQOdG90YWxOZnRTdGFrZWQJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwUPa05GVFRvdGFsU3Rha2VkAAAEC2N1ckludGVyZXN0CQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMFDGtORlRJbnRlcmVzdAAABBFhdmFpbGFibGVGb3JDbGFpbQkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzCQCsAgIFBHVzZXIFFmtORlRVc2VyQXZhaWxhYmxlQ2xhaW0AAAQMdXNlckludGVyZXN0CQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMJAKwCAgUEdXNlcgUQa05GVFVzZXJJbnRlcmVzdAULY3VySW50ZXJlc3QEDXVzZXJOZnRTdGFrZWQJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwkArAICBQR1c2VyBQ5rdXNlck5GVFN0YWtlZAAABAtjbGFpbUFtb3VudAkAaAIFDXVzZXJOZnRTdGFrZWQJAGUCBQtjdXJJbnRlcmVzdAUMdXNlckludGVyZXN0CQCWCgQFC2N1ckludGVyZXN0CQBkAgULY2xhaW1BbW91bnQFEWF2YWlsYWJsZUZvckNsYWltBQ11c2VyTmZ0U3Rha2VkBQ50b3RhbE5mdFN0YWtlZAEMY2FsY1Rva2VuQXByAAQLbGFzdEFpcmRyb3AJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwUMa0xhc3RBaXJkcm9wAAAEEHRvdGFsVG9rZW5TdGFrZWQJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwURa1RvdGFsVG9rZW5TdGFrZWQAAAQOdG90YWxORlRTdGFrZWQJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwUPa05GVFRvdGFsU3Rha2VkAAAEDHRva2VuQWlyZHJvcAMJAAACBQ50b3RhbE5GVFN0YWtlZAAABQtsYXN0QWlyZHJvcAkAawMFC2xhc3RBaXJkcm9wCQBlAgBkBQ50b3RhbE5GVFN0YWtlZABkCQBoAgkAawMFDHRva2VuQWlyZHJvcAUNUEVSQ0VOVF9TQ0FMRQUQdG90YWxUb2tlblN0YWtlZAA0DAFpARBnZXRTdGF0c1JFQURPTkxZAAQDYXByCQEMY2FsY1Rva2VuQXByAAQQdG90YWxUb2tlblN0YWtlZAkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzBRFrVG90YWxUb2tlblN0YWtlZAAABA50b3RhbE5mdFN0YWtlZAkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzBQ9rTkZUVG90YWxTdGFrZWQAAAkAlAoCBQNuaWwJALkJAgkAzAgCAgYlZCVkJWQJAMwIAgkApAMBBQNhcHIJAMwIAgkApAMBBRB0b3RhbFRva2VuU3Rha2VkCQDMCAIJAKQDAQUOdG90YWxOZnRTdGFrZWQFA25pbAUJU0VQQVJBVE9SAWkBFmdldFN0YXRzQnlVc2VyUkVBRE9OTFkBBHVzZXIECHVzZXJBZGRyCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKYIAQUEdXNlcgISV3JvbmcgdXNlciBhZGRyZXNzBAskdDAzOTA3NDAwMwkBCWNsYWltQ2FsYwEFBHVzZXIED3VzZXJOZXdJbnRlcmVzdAgFCyR0MDM5MDc0MDAzAl8xBBRjbGFpbUFtb3VudEF2YWlsYWJsZQgFCyR0MDM5MDc0MDAzAl8yBA91c2VyVG9rZW5TdGFrZWQIBQskdDAzOTA3NDAwMwJfMwQQdG90YWxUb2tlblN0YWtlZAgFCyR0MDM5MDc0MDAzAl80BAskdDA0MDA2NDEwNwkBDGNsYWltQ2FsY05mdAEFBHVzZXIEEnVzZXJOZXdJbnRlcmVzdE5GVAgFCyR0MDQwMDY0MTA3Al8xBBdjbGFpbUFtb3VudEF2YWlsYWJsZU5GVAgFCyR0MDQwMDY0MTA3Al8yBA11c2VyTkZUU3Rha2VkCAULJHQwNDAwNjQxMDcCXzMEDnRvdGFsTkZUU3Rha2VkCAULJHQwNDAwNjQxMDcCXzQEEHVzZXJUb2tlbkJhbGFuY2UJAPAHAgUIdXNlckFkZHIJANkEAQUHdG9rZW5JZAkAlAoCBQNuaWwJALkJAgkAzAgCAgolZCVkJWQlZCVzCQDMCAIJAKQDAQUQdXNlclRva2VuQmFsYW5jZQkAzAgCCQCkAwEFD3VzZXJUb2tlblN0YWtlZAkAzAgCCQCkAwEFFGNsYWltQW1vdW50QXZhaWxhYmxlCQDMCAIJAKQDAQUXY2xhaW1BbW91bnRBdmFpbGFibGVORlQFA25pbAUJU0VQQVJBVE9SAWkBBGluaXQEB3Rva2VuSWQHYWRtMVB1YgdhZG0yUHViB2FkbTNQdWIJAQt2YWx1ZU9yRWxzZQIJAQppc1NlbGZDYWxsAQUBaQMJAQlpc0RlZmluZWQBCQCdCAIFBHRoaXMFCGtUb2tlbmlkCQACAQITREFwcCBhbHJlYWR5IGluaXRlZAMJAQEhAQkBCWlzRGVmaW5lZAEJAOwHAQkA2QQBBQd0b2tlbklkCQACAQIgYXNzZXQgaWQgaXMgbm90IGNvcnJlY3QgYXNzZXQgaWQDCQECIT0CCQDIAQEJANkEAQUHYWRtMVB1YgAgCQACAQIhZ3JvdXAxQWRtaW4xUHViS2V5IGlzIG5vdCBjb3JyZWN0AwkBAiE9AgkAyAEBCQDZBAEFB2FkbTJQdWIAIAkAAgECIWdyb3VwMUFkbWluMVB1YktleSBpcyBub3QgY29ycmVjdAMJAQIhPQIJAMgBAQkA2QQBBQdhZG0zUHViACAJAAIBAiFncm91cDFBZG1pbjFQdWJLZXkgaXMgbm90IGNvcnJlY3QJAMwIAgkBC1N0cmluZ0VudHJ5AgUIa1Rva2VuaWQFB3Rva2VuSWQJAMwIAgkBC1N0cmluZ0VudHJ5AgUJa0FkbWluMVBLBQdhZG0xUHViCQDMCAIJAQtTdHJpbmdFbnRyeQIFCWtBZG1pbjJQSwUHYWRtMlB1YgkAzAgCCQELU3RyaW5nRW50cnkCBQlrQWRtaW4zUEsFB2FkbTNQdWIFA25pbAFpAQVzdGFrZQAJAQt2YWx1ZU9yRWxzZQIJAQhpc0FjdGl2ZQADCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAEJAAIBAhRPbmUgcGF5bWVudCBleHBlY3RlZAQLJHQwNTI5NjUzNzEJAJQKAggJAJEDAggFAWkIcGF5bWVudHMAAAZhbW91bnQICQCRAwIIBQFpCHBheW1lbnRzAAAHYXNzZXRJZAQJcG10QW1vdW50CAULJHQwNTI5NjUzNzECXzEECnBtdEFzc2V0SWQIBQskdDA1Mjk2NTM3MQJfMgMJAQIhPQIFCnBtdEFzc2V0SWQJANkEAQUHdG9rZW5JZAkAAgECE1dyb25nIHBheW1lbnQgYXNzZXQEBHVzZXIJAKUIAQgFAWkGY2FsbGVyBAskdDA1NDkyNTU4OAkBCWNsYWltQ2FsYwEFBHVzZXIED3VzZXJOZXdJbnRlcmVzdAgFCyR0MDU0OTI1NTg4Al8xBBRjbGFpbUFtb3VudEF2YWlsYWJsZQgFCyR0MDU0OTI1NTg4Al8yBA91c2VyVG9rZW5TdGFrZWQIBQskdDA1NDkyNTU4OAJfMwQQdG90YWxUb2tlblN0YWtlZAgFCyR0MDU0OTI1NTg4Al80CQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIFBHVzZXIFDWtVc2VySW50ZXJlc3QFD3VzZXJOZXdJbnRlcmVzdAkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICBQR1c2VyBQ5rVXNlckF2YWlsYWJsZQUUY2xhaW1BbW91bnRBdmFpbGFibGUJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgUEdXNlcgUQa1VzZXJUb2tlblN0YWtlZAkAZAIFD3VzZXJUb2tlblN0YWtlZAUJcG10QW1vdW50CQDMCAIJAQxJbnRlZ2VyRW50cnkCBRFrVG90YWxUb2tlblN0YWtlZAkAZAIFEHRvdGFsVG9rZW5TdGFrZWQFCXBtdEFtb3VudAUDbmlsAWkBB3Vuc3Rha2UBBmFtb3VudAkBC3ZhbHVlT3JFbHNlAgkBCGlzQWN0aXZlAAQEdXNlcgkApQgBCAUBaQZjYWxsZXIDCQBnAgAABQZhbW91bnQJAAIBAh1BbW91bnQgbXVzdCBiZSBncmVhdGVyIHRoYW4gMAQLJHQwNjAyNjYxMjIJAQljbGFpbUNhbGMBBQR1c2VyBA91c2VyTmV3SW50ZXJlc3QIBQskdDA2MDI2NjEyMgJfMQQUY2xhaW1BbW91bnRBdmFpbGFibGUIBQskdDA2MDI2NjEyMgJfMgQPdXNlclRva2VuU3Rha2VkCAULJHQwNjAyNjYxMjICXzMEEHRvdGFsVG9rZW5TdGFrZWQIBQskdDA2MDI2NjEyMgJfNAMJAGYCBQZhbW91bnQFD3VzZXJUb2tlblN0YWtlZAkAAgECIllvdSBjYW4ndCB1bnN0YWtlIG1vcmUgdGhhbiBzdGFrZWQJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgUEdXNlcgUNa1VzZXJJbnRlcmVzdAUPdXNlck5ld0ludGVyZXN0CQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIFBHVzZXIFDmtVc2VyQXZhaWxhYmxlBRRjbGFpbUFtb3VudEF2YWlsYWJsZQkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICBQR1c2VyBRBrVXNlclRva2VuU3Rha2VkCQBlAgUPdXNlclRva2VuU3Rha2VkBQZhbW91bnQJAMwIAgkBDEludGVnZXJFbnRyeQIFEWtUb3RhbFRva2VuU3Rha2VkCQBlAgUQdG90YWxUb2tlblN0YWtlZAUGYW1vdW50CQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMIBQFpBmNhbGxlcgUGYW1vdW50CQDZBAEFB3Rva2VuSWQFA25pbAFpAQVjbGFpbQAJAQt2YWx1ZU9yRWxzZQIJAQhpc0FjdGl2ZQAEBHVzZXIJAKUIAQgFAWkGY2FsbGVyBAskdDA2NjI4NjcyNAkBCWNsYWltQ2FsYwEFBHVzZXIED3VzZXJOZXdJbnRlcmVzdAgFCyR0MDY2Mjg2NzI0Al8xBBRjbGFpbUFtb3VudEF2YWlsYWJsZQgFCyR0MDY2Mjg2NzI0Al8yBA91c2VyVG9rZW5TdGFrZWQIBQskdDA2NjI4NjcyNAJfMwQQdG90YWxUb2tlblN0YWtlZAgFCyR0MDY2Mjg2NzI0Al80BAskdDA2NzI3NjgyOAkBDGNsYWltQ2FsY05mdAEFBHVzZXIEEnVzZXJOZXdJbnRlcmVzdE5GVAgFCyR0MDY3Mjc2ODI4Al8xBBdjbGFpbUFtb3VudEF2YWlsYWJsZU5GVAgFCyR0MDY3Mjc2ODI4Al8yBA11c2VyTkZUU3Rha2VkCAULJHQwNjcyNzY4MjgCXzMEDnRvdGFsTkZUU3Rha2VkCAULJHQwNjcyNzY4MjgCXzQDCQAAAgkAZAIFFGNsYWltQW1vdW50QXZhaWxhYmxlBRdjbGFpbUFtb3VudEF2YWlsYWJsZU5GVAAACQACAQIQTm90aGluZyB0byBjbGFpbQkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICBQR1c2VyBQ1rVXNlckludGVyZXN0BQ91c2VyTmV3SW50ZXJlc3QJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgUEdXNlcgUOa1VzZXJBdmFpbGFibGUAAAkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICBQR1c2VyBRBrTkZUVXNlckludGVyZXN0BRJ1c2VyTmV3SW50ZXJlc3RORlQJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgUEdXNlcgUWa05GVFVzZXJBdmFpbGFibGVDbGFpbQAACQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMIBQFpBmNhbGxlcgkAZAIFFGNsYWltQW1vdW50QXZhaWxhYmxlBRdjbGFpbUFtb3VudEF2YWlsYWJsZU5GVAkA2QQBBQd0b2tlbklkBQNuaWwBaQEIc3Rha2VORlQACQELdmFsdWVPckVsc2UCCQEIaXNBY3RpdmUAAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwABCQACAQIUT25lIHBheW1lbnQgZXhwZWN0ZWQECyR0MDczODQ3NDU5CQCUCgIICQCRAwIIBQFpCHBheW1lbnRzAAAGYW1vdW50CAkAkQMCCAUBaQhwYXltZW50cwAAB2Fzc2V0SWQECXBtdEFtb3VudAgFCyR0MDczODQ3NDU5Al8xBApwbXRBc3NldElkCAULJHQwNzM4NDc0NTkCXzIEDXBtdEFzc2V0SWRTdHIJAQxhc3NldElkVG9TdHIBBQpwbXRBc3NldElkAwkBASEBCQEJaXNEZWZpbmVkAQkAnQgCBQR0aGlzCQCsAgIFDXBtdEFzc2V0SWRTdHIFC2tORlRDcmVhdGVkCQACAQIPV3JvbmcgbmZ0IGFzc2V0BAR1c2VyCQClCAEIBQFpBmNhbGxlcgQLJHQwNzY0MDc3MzUJAQxjbGFpbUNhbGNOZnQBBQR1c2VyBA91c2VyTmV3SW50ZXJlc3QIBQskdDA3NjQwNzczNQJfMQQUY2xhaW1BbW91bnRBdmFpbGFibGUIBQskdDA3NjQwNzczNQJfMgQNdXNlck5GVFN0YWtlZAgFCyR0MDc2NDA3NzM1Al8zBA50b3RhbE5GVFN0YWtlZAgFCyR0MDc2NDA3NzM1Al80CQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIFBHVzZXIFEGtORlRVc2VySW50ZXJlc3QFD3VzZXJOZXdJbnRlcmVzdAkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICBQR1c2VyBRZrTkZUVXNlckF2YWlsYWJsZUNsYWltBRRjbGFpbUFtb3VudEF2YWlsYWJsZQkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICBQR1c2VyBQ5rdXNlck5GVFN0YWtlZAkAZAIFDXVzZXJORlRTdGFrZWQAAQkAzAgCCQEMSW50ZWdlckVudHJ5AgUPa05GVFRvdGFsU3Rha2VkCQBkAgUOdG90YWxORlRTdGFrZWQAAQkAzAgCCQEMQm9vbGVhbkVudHJ5AgkArAICCQCsAgIJAKwCAgUEdXNlcgIBXwUNcG10QXNzZXRJZFN0cgUQa3VzZXJORlRTdGFrZWRJZAYFA25pbAFpAQp1bnN0YWtlTkZUAQJpZAkBC3ZhbHVlT3JFbHNlAgkBCGlzQWN0aXZlAAQEdXNlcgkApQgBCAUBaQZjYWxsZXIDCQEBIQEJAQlpc0RlZmluZWQBCQCbCAIFBHRoaXMJAKwCAgkArAICCQCsAgIFBHVzZXICAV8FAmlkBRBrdXNlck5GVFN0YWtlZElkCQACAQIRWW91IGRpZG4ndCBzdGFrZWQECyR0MDgyNzM4MzY4CQEMY2xhaW1DYWxjTmZ0AQUEdXNlcgQPdXNlck5ld0ludGVyZXN0CAULJHQwODI3MzgzNjgCXzEEFGNsYWltQW1vdW50QXZhaWxhYmxlCAULJHQwODI3MzgzNjgCXzIEDXVzZXJORlRTdGFrZWQIBQskdDA4MjczODM2OAJfMwQOdG90YWxORlRTdGFrZWQIBQskdDA4MjczODM2OAJfNAkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICBQR1c2VyBRBrTkZUVXNlckludGVyZXN0BQ91c2VyTmV3SW50ZXJlc3QJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgUEdXNlcgUWa05GVFVzZXJBdmFpbGFibGVDbGFpbQUUY2xhaW1BbW91bnRBdmFpbGFibGUJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgUEdXNlcgUOa3VzZXJORlRTdGFrZWQJAGUCBQ11c2VyTkZUU3Rha2VkAAEJAMwIAgkBDEludGVnZXJFbnRyeQIFD2tORlRUb3RhbFN0YWtlZAkAZQIFDnRvdGFsTkZUU3Rha2VkAAEJAMwIAgkBC0RlbGV0ZUVudHJ5AQkArAICCQCsAgIJAKwCAgUEdXNlcgIBXwUCaWQFEGt1c2VyTkZUU3Rha2VkSWQJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwgFAWkGY2FsbGVyAAEJANkEAQUCaWQFA25pbAFpAQhpc3N1ZU5GVAMIdXNlckFkZHIEbmFtZQVkZXNjcgkBC3ZhbHVlT3JFbHNlAgkBCGlzQWN0aXZlAAkBC3ZhbHVlT3JFbHNlAgkBC2lzQWRtaW5DYWxsAQUBaQQFdUFkZHIJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkApggBBQh1c2VyQWRkcgISV3JvbmcgdXNlciBhZGRyZXNzBAVpc3N1ZQkAwggFBQRuYW1lBQVkZXNjcgABAAAHBAVuZnRJZAkAuAgBBQVpc3N1ZQkAzAgCBQVpc3N1ZQkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgIJANgEAQUFbmZ0SWQFC2tORlRDcmVhdGVkBQh1c2VyQWRkcgkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDBQV1QWRkcgABBQVuZnRJZAUDbmlsAWkBB2FpcmRyb3AACQELdmFsdWVPckVsc2UCCQEIaXNBY3RpdmUACQELdmFsdWVPckVsc2UCCQELaXNBZG1pbkNhbGwBBQFpAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwABCQACAQIUT25lIHBheW1lbnQgZXhwZWN0ZWQECyR0MDkzMDk5Mzg0CQCUCgIICQCRAwIIBQFpCHBheW1lbnRzAAAGYW1vdW50CAkAkQMCCAUBaQhwYXltZW50cwAAB2Fzc2V0SWQECXBtdEFtb3VudAgFCyR0MDkzMDk5Mzg0Al8xBApwbXRBc3NldElkCAULJHQwOTMwOTkzODQCXzIDCQECIT0CBQpwbXRBc3NldElkCQDZBAEFB3Rva2VuSWQJAAIBAhNXcm9uZyBwYXltZW50IGFzc2V0BBB0b3RhbFRva2VuU3Rha2VkCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMFEWtUb3RhbFRva2VuU3Rha2VkAAAEDnRvdGFsTkZUU3Rha2VkCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMFD2tORlRUb3RhbFN0YWtlZAAABAtjdXJJbnRlcmVzdAkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzBQlrSW50ZXJlc3QAAAQOY3VyTkZUSW50ZXJlc3QJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwUMa05GVEludGVyZXN0AAAECyR0MDk3NDg5OTI0AwkAAAIFDnRvdGFsTkZUU3Rha2VkAAAJAJQKAgAABQlwbXRBbW91bnQEBG5mdFAJAGsDBQlwbXRBbW91bnQFDnRvdGFsTkZUU3Rha2VkAGQJAJQKAgUEbmZ0UAkAZQIFCXBtdEFtb3VudAUEbmZ0UAQGcG10TkZUCAULJHQwOTc0ODk5MjQCXzEECHBtdFRva2VuCAULJHQwOTc0ODk5MjQCXzIEC2ludGVyZXN0TmV3AwkAZgIFEHRvdGFsVG9rZW5TdGFrZWQAAAkAZAIFC2N1ckludGVyZXN0CQBrAwUIcG10VG9rZW4FBlNDQUxFOAUQdG90YWxUb2tlblN0YWtlZAULY3VySW50ZXJlc3QEDmludGVyZXN0TkZUTmV3AwkAZgIFDnRvdGFsTkZUU3Rha2VkAAAJAGQCBQ5jdXJORlRJbnRlcmVzdAkAaQIFBnBtdE5GVAUOdG90YWxORlRTdGFrZWQFDmN1ck5GVEludGVyZXN0CQDMCAIJAQxJbnRlZ2VyRW50cnkCBQlrSW50ZXJlc3QFC2ludGVyZXN0TmV3CQDMCAIJAQxJbnRlZ2VyRW50cnkCBQxrTkZUSW50ZXJlc3QFDmludGVyZXN0TkZUTmV3CQDMCAIJAQxJbnRlZ2VyRW50cnkCBQxrTGFzdEFpcmRyb3AFCXBtdEFtb3VudAUDbmlsAWkBCGFjdGl2YXRlAAkBC3ZhbHVlT3JFbHNlAgkBC2lzQWRtaW5DYWxsAQUBaQMJAQt2YWx1ZU9yRWxzZQIJAJsIAgUEdGhpcwUHa0FjdGl2ZQYJAAIBAhNkQXBwIGFscmVhZHkgYWN0aXZlCQDMCAIJAQxCb29sZWFuRW50cnkCBQdrQWN0aXZlBgUDbmlsAWkBCHNodXRkb3duAAkBC3ZhbHVlT3JFbHNlAgkBC2lzQWRtaW5DYWxsAQUBaQMJAQEhAQkBC3ZhbHVlT3JFbHNlAgkAmwgCBQR0aGlzBQdrQWN0aXZlBgkAAgECFWRBcHAgYWxyZWFkeSBzaHV0ZG93bgkAzAgCCQEMQm9vbGVhbkVudHJ5AgUHa0FjdGl2ZQcFA25pbAECdHgBBnZlcmlmeQAEE211bHRpU2lnbmVkQnlBZG1pbnMEEmFkbWluUHViS2V5MVNpZ25lZAMJAPQDAwgFAnR4CWJvZHlCeXRlcwkAkQMCCAUCdHgGcHJvb2ZzAAAFCGFkbWluMVBLAAEAAAQSYWRtaW5QdWJLZXkyU2lnbmVkAwkA9AMDCAUCdHgJYm9keUJ5dGVzCQCRAwIIBQJ0eAZwcm9vZnMAAQUIYWRtaW4yUEsAAQAABBJhZG1pblB1YktleTNTaWduZWQDCQD0AwMIBQJ0eAlib2R5Qnl0ZXMJAJEDAggFAnR4BnByb29mcwACBQhhZG1pbjNQSwABAAAJAGcCCQBkAgkAZAIFEmFkbWluUHViS2V5MVNpZ25lZAUSYWRtaW5QdWJLZXkyU2lnbmVkBRJhZG1pblB1YktleTNTaWduZWQAAgQHJG1hdGNoMAUCdHgDCQABAgUHJG1hdGNoMAIXSW52b2tlU2NyaXB0VHJhbnNhY3Rpb24EA2ludgUHJG1hdGNoMAQGaXNTZWxmCQD0AwMIBQJ0eAlib2R5Qnl0ZXMJAJEDAggFAnR4BnByb29mcwAACAUCdHgPc2VuZGVyUHVibGljS2V5BAppc1JpZ2h0RmVlAwkAAAIIBQNpbnYDZmVlAKD3NgkAAAIIBQNpbnYKZmVlQXNzZXRJZAUEdW5pdAcECmlzSW5pdENhbGwJAAACCAUDaW52CGZ1bmN0aW9uAgRpbml0BAxpc25vUGF5bWVudHMJAAACCQCQAwEIBQNpbnYIcGF5bWVudHMAAAMDAwMFCmlzUmlnaHRGZWUFCmlzSW5pdENhbGwHBQZpc1NlbGYHBQxpc25vUGF5bWVudHMHBgUTbXVsdGlTaWduZWRCeUFkbWlucwUTbXVsdGlTaWduZWRCeUFkbWluc3PXXsY=", "height": 2832926, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: HEQiLGTf1dhgxCqdktd982YwvXjNLQWVu114VGtQ7pxD Next: none Diff:
OldNewDifferences
3434 let kLastAirdrop = "_lastAirdrop"
3535
3636 let kTokenid = "tokenId"
37-
38-let kPersentForNFT = "percentForNFT"
39-
40-let kNFTCreatedList = "nftCreatedList"
4137
4238 let kActive = "active"
4339
106102 let lastAirdrop = valueOrElse(getInteger(this, kLastAirdrop), 0)
107103 let totalTokenStaked = valueOrElse(getInteger(this, kTotalTokenStaked), 0)
108104 let totalNFTStaked = valueOrElse(getInteger(this, kNFTTotalStaked), 0)
109- let percentForNFT = getIntegerValue(this, kPersentForNFT)
110105 let tokenAirdrop = if ((totalNFTStaked == 0))
111106 then lastAirdrop
112- else fraction(lastAirdrop, (100 - min([percentForNFT, (totalNFTStaked * 10)])), 100)
107+ else fraction(lastAirdrop, (100 - totalNFTStaked), 100)
113108 (fraction(tokenAirdrop, PERCENT_SCALE, totalTokenStaked) * 52)
114- }
115-
116-
117-func getUserStakedNFT (user) = {
118- func forNft (uNFT,nftId) = if (isDefined(getBoolean(this, (((user + "_") + nftId) + kuserNFTStakedId))))
119- then (uNFT :+ nftId)
120- else uNFT
121-
122- let nftsStr = valueOrElse(getString(this, kNFTCreatedList), "")
123- let nftList = if ((nftsStr == ""))
124- then nil
125- else split(nftsStr, SEPARATOR)
126- let userNfts = {
127- let $l = nftList
128- let $s = size($l)
129- let $acc0 = nil
130- func $f0_1 ($a,$i) = if (($i >= $s))
131- then $a
132- else forNft($a, $l[$i])
133-
134- func $f0_2 ($a,$i) = if (($i >= $s))
135- then $a
136- else throw("List size exceeds 5")
137-
138- $f0_2($f0_1($f0_1($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3), 4), 5)
139- }
140- makeString(userNfts, ",")
141109 }
142110
143111
154122 @Callable(i)
155123 func getStatsByUserREADONLY (user) = {
156124 let userAddr = valueOrErrorMessage(addressFromString(user), "Wrong user address")
157- let $t045004596 = claimCalc(user)
158- let userNewInterest = $t045004596._1
159- let claimAmountAvailable = $t045004596._2
160- let userTokenStaked = $t045004596._3
161- let totalTokenStaked = $t045004596._4
162- let $t045994700 = claimCalcNft(user)
163- let userNewInterestNFT = $t045994700._1
164- let claimAmountAvailableNFT = $t045994700._2
165- let userNFTStaked = $t045994700._3
166- let totalNFTStaked = $t045994700._4
125+ let $t039074003 = claimCalc(user)
126+ let userNewInterest = $t039074003._1
127+ let claimAmountAvailable = $t039074003._2
128+ let userTokenStaked = $t039074003._3
129+ let totalTokenStaked = $t039074003._4
130+ let $t040064107 = claimCalcNft(user)
131+ let userNewInterestNFT = $t040064107._1
132+ let claimAmountAvailableNFT = $t040064107._2
133+ let userNFTStaked = $t040064107._3
134+ let totalNFTStaked = $t040064107._4
167135 let userTokenBalance = assetBalance(userAddr, fromBase58String(tokenId))
168- let userNfts = getUserStakedNFT(user)
169- $Tuple2(nil, makeString(["%d%d%d%d%s", toString(userTokenBalance), toString(userTokenStaked), toString(claimAmountAvailable), toString(claimAmountAvailableNFT), userNfts], SEPARATOR))
136+ $Tuple2(nil, makeString(["%d%d%d%d%s", toString(userTokenBalance), toString(userTokenStaked), toString(claimAmountAvailable), toString(claimAmountAvailableNFT)], SEPARATOR))
170137 }
171138
172139
173140
174141 @Callable(i)
175-func getUserStatsREADONLY (user) = {
176- let apr = calcTokenApr()
177- let $t051455744 = if ((user == ""))
178- then $Tuple4(0, 0, 0, 0)
179- else {
180- let userAddr = valueOrErrorMessage(addressFromString(user), "Wrong user address")
181- let $t053825478 = claimCalc(user)
182- let userNewInterest = $t053825478._1
183- let claimAmountAvailable = $t053825478._2
184- let userTokenStaked = $t053825478._3
185- let totalTokenStaked = $t053825478._4
186- let $t054855586 = claimCalcNft(user)
187- let userNewInterestNFT = $t054855586._1
188- let claimAmountAvailableNFT = $t054855586._2
189- let userNFTStaked = $t054855586._3
190- let totalNFTStaked = $t054855586._4
191- let userBalance = assetBalance(userAddr, fromBase58String(tokenId))
192- $Tuple4(userBalance, userTokenStaked, claimAmountAvailable, claimAmountAvailableNFT)
193- }
194- let userTokenBalance = $t051455744._1
195- let userTokenStaked = $t051455744._2
196- let claimAmountAvailable = $t051455744._3
197- let claimAmountAvailableNFT = $t051455744._4
198- $Tuple2(nil, makeString(["%d%d%d%d%d", toString(apr), toString(userTokenBalance), toString(userTokenStaked), toString(claimAmountAvailable), toString(claimAmountAvailableNFT)], SEPARATOR))
199- }
200-
201-
202-
203-@Callable(i)
204-func init (tokenId,adm1Pub,adm2Pub,adm3Pub,toNFTPercent) = valueOrElse(isSelfCall(i), if (isDefined(getString(this, kTokenid)))
142+func init (tokenId,adm1Pub,adm2Pub,adm3Pub) = valueOrElse(isSelfCall(i), if (isDefined(getString(this, kTokenid)))
205143 then throw("DApp already inited")
206144 else if (!(isDefined(assetInfo(fromBase58String(tokenId)))))
207145 then throw("asset id is not correct asset id")
211149 then throw("group1Admin1PubKey is not correct")
212150 else if ((size(fromBase58String(adm3Pub)) != 32))
213151 then throw("group1Admin1PubKey is not correct")
214- else [StringEntry(kTokenid, tokenId), StringEntry(kAdmin1PK, adm1Pub), StringEntry(kAdmin2PK, adm2Pub), StringEntry(kAdmin3PK, adm3Pub), IntegerEntry(kPersentForNFT, toNFTPercent)])
152+ else [StringEntry(kTokenid, tokenId), StringEntry(kAdmin1PK, adm1Pub), StringEntry(kAdmin2PK, adm2Pub), StringEntry(kAdmin3PK, adm3Pub)])
215153
216154
217155
219157 func stake () = valueOrElse(isActive(), if ((size(i.payments) != 1))
220158 then throw("One payment expected")
221159 else {
222- let $t069477022 = $Tuple2(i.payments[0].amount, i.payments[0].assetId)
223- let pmtAmount = $t069477022._1
224- let pmtAssetId = $t069477022._2
160+ let $t052965371 = $Tuple2(i.payments[0].amount, i.payments[0].assetId)
161+ let pmtAmount = $t052965371._1
162+ let pmtAssetId = $t052965371._2
225163 if ((pmtAssetId != fromBase58String(tokenId)))
226164 then throw("Wrong payment asset")
227165 else {
228166 let user = toString(i.caller)
229- let $t071437239 = claimCalc(user)
230- let userNewInterest = $t071437239._1
231- let claimAmountAvailable = $t071437239._2
232- let userTokenStaked = $t071437239._3
233- let totalTokenStaked = $t071437239._4
167+ let $t054925588 = claimCalc(user)
168+ let userNewInterest = $t054925588._1
169+ let claimAmountAvailable = $t054925588._2
170+ let userTokenStaked = $t054925588._3
171+ let totalTokenStaked = $t054925588._4
234172 [IntegerEntry((user + kUserInterest), userNewInterest), IntegerEntry((user + kUserAvailable), claimAmountAvailable), IntegerEntry((user + kUserTokenStaked), (userTokenStaked + pmtAmount)), IntegerEntry(kTotalTokenStaked, (totalTokenStaked + pmtAmount))]
235173 }
236174 })
243181 if ((0 >= amount))
244182 then throw("Amount must be greater than 0")
245183 else {
246- let $t076777773 = claimCalc(user)
247- let userNewInterest = $t076777773._1
248- let claimAmountAvailable = $t076777773._2
249- let userTokenStaked = $t076777773._3
250- let totalTokenStaked = $t076777773._4
184+ let $t060266122 = claimCalc(user)
185+ let userNewInterest = $t060266122._1
186+ let claimAmountAvailable = $t060266122._2
187+ let userTokenStaked = $t060266122._3
188+ let totalTokenStaked = $t060266122._4
251189 if ((amount > userTokenStaked))
252190 then throw("You can't unstake more than staked")
253191 else [IntegerEntry((user + kUserInterest), userNewInterest), IntegerEntry((user + kUserAvailable), claimAmountAvailable), IntegerEntry((user + kUserTokenStaked), (userTokenStaked - amount)), IntegerEntry(kTotalTokenStaked, (totalTokenStaked - amount)), ScriptTransfer(i.caller, amount, fromBase58String(tokenId))]
259197 @Callable(i)
260198 func claim () = valueOrElse(isActive(), {
261199 let user = toString(i.caller)
262- let $t082798375 = claimCalc(user)
263- let userNewInterest = $t082798375._1
264- let claimAmountAvailable = $t082798375._2
265- let userTokenStaked = $t082798375._3
266- let totalTokenStaked = $t082798375._4
267- let $t083788479 = claimCalcNft(user)
268- let userNewInterestNFT = $t083788479._1
269- let claimAmountAvailableNFT = $t083788479._2
270- let userNFTStaked = $t083788479._3
271- let totalNFTStaked = $t083788479._4
200+ let $t066286724 = claimCalc(user)
201+ let userNewInterest = $t066286724._1
202+ let claimAmountAvailable = $t066286724._2
203+ let userTokenStaked = $t066286724._3
204+ let totalTokenStaked = $t066286724._4
205+ let $t067276828 = claimCalcNft(user)
206+ let userNewInterestNFT = $t067276828._1
207+ let claimAmountAvailableNFT = $t067276828._2
208+ let userNFTStaked = $t067276828._3
209+ let totalNFTStaked = $t067276828._4
272210 if (((claimAmountAvailable + claimAmountAvailableNFT) == 0))
273211 then throw("Nothing to claim")
274212 else [IntegerEntry((user + kUserInterest), userNewInterest), IntegerEntry((user + kUserAvailable), 0), IntegerEntry((user + kNFTUserInterest), userNewInterestNFT), IntegerEntry((user + kNFTUserAvailableClaim), 0), ScriptTransfer(i.caller, (claimAmountAvailable + claimAmountAvailableNFT), fromBase58String(tokenId))]
280218 func stakeNFT () = valueOrElse(isActive(), if ((size(i.payments) != 1))
281219 then throw("One payment expected")
282220 else {
283- let $t090359110 = $Tuple2(i.payments[0].amount, i.payments[0].assetId)
284- let pmtAmount = $t090359110._1
285- let pmtAssetId = $t090359110._2
221+ let $t073847459 = $Tuple2(i.payments[0].amount, i.payments[0].assetId)
222+ let pmtAmount = $t073847459._1
223+ let pmtAssetId = $t073847459._2
286224 let pmtAssetIdStr = assetIdToStr(pmtAssetId)
287225 if (!(isDefined(getString(this, (pmtAssetIdStr + kNFTCreated)))))
288226 then throw("Wrong nft asset")
289227 else {
290228 let user = toString(i.caller)
291- let $t092919386 = claimCalcNft(user)
292- let userNewInterest = $t092919386._1
293- let claimAmountAvailable = $t092919386._2
294- let userNFTStaked = $t092919386._3
295- let totalNFTStaked = $t092919386._4
229+ let $t076407735 = claimCalcNft(user)
230+ let userNewInterest = $t076407735._1
231+ let claimAmountAvailable = $t076407735._2
232+ let userNFTStaked = $t076407735._3
233+ let totalNFTStaked = $t076407735._4
296234 [IntegerEntry((user + kNFTUserInterest), userNewInterest), IntegerEntry((user + kNFTUserAvailableClaim), claimAmountAvailable), IntegerEntry((user + kuserNFTStaked), (userNFTStaked + 1)), IntegerEntry(kNFTTotalStaked, (totalNFTStaked + 1)), BooleanEntry((((user + "_") + pmtAssetIdStr) + kuserNFTStakedId), true)]
297235 }
298236 })
305243 if (!(isDefined(getBoolean(this, (((user + "_") + id) + kuserNFTStakedId)))))
306244 then throw("You didn't staked")
307245 else {
308- let $t0992410019 = claimCalcNft(user)
309- let userNewInterest = $t0992410019._1
310- let claimAmountAvailable = $t0992410019._2
311- let userNFTStaked = $t0992410019._3
312- let totalNFTStaked = $t0992410019._4
246+ let $t082738368 = claimCalcNft(user)
247+ let userNewInterest = $t082738368._1
248+ let claimAmountAvailable = $t082738368._2
249+ let userNFTStaked = $t082738368._3
250+ let totalNFTStaked = $t082738368._4
313251 [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))]
314252 }
315253 })
321259 let uAddr = valueOrErrorMessage(addressFromString(userAddr), "Wrong user address")
322260 let issue = Issue(name, descr, 1, 0, false)
323261 let nftId = calculateAssetId(issue)
324- let nftList = valueOrElse(getString(this, kNFTCreatedList), "")
325- let newNftList = (nftList + (if ((nftList != ""))
326- then (SEPARATOR + toBase58String(nftId))
327- else ("" + toBase58String(nftId))))
328-[issue, StringEntry((toBase58String(nftId) + kNFTCreated), userAddr), StringEntry(kNFTCreatedList, newNftList), ScriptTransfer(uAddr, 1, nftId)]
262+[issue, StringEntry((toBase58String(nftId) + kNFTCreated), userAddr), ScriptTransfer(uAddr, 1, nftId)]
329263 }))
330264
331265
334268 func airdrop () = valueOrElse(isActive(), valueOrElse(isAdminCall(i), if ((size(i.payments) != 1))
335269 then throw("One payment expected")
336270 else {
337- let $t01118911264 = $Tuple2(i.payments[0].amount, i.payments[0].assetId)
338- let pmtAmount = $t01118911264._1
339- let pmtAssetId = $t01118911264._2
271+ let $t093099384 = $Tuple2(i.payments[0].amount, i.payments[0].assetId)
272+ let pmtAmount = $t093099384._1
273+ let pmtAssetId = $t093099384._2
340274 if ((pmtAssetId != fromBase58String(tokenId)))
341275 then throw("Wrong payment asset")
342276 else {
343- let percentForNFT = getIntegerValue(this, kPersentForNFT)
344277 let totalTokenStaked = valueOrElse(getInteger(this, kTotalTokenStaked), 0)
345278 let totalNFTStaked = valueOrElse(getInteger(this, kNFTTotalStaked), 0)
346279 let curInterest = valueOrElse(getInteger(this, kInterest), 0)
347280 let curNFTInterest = valueOrElse(getInteger(this, kNFTInterest), 0)
348- let $t01168711891 = if ((totalNFTStaked == 0))
281+ let $t097489924 = if ((totalNFTStaked == 0))
349282 then $Tuple2(0, pmtAmount)
350283 else {
351- let nftP = fraction(pmtAmount, min([percentForNFT, (totalNFTStaked * 10)]), 100)
284+ let nftP = fraction(pmtAmount, totalNFTStaked, 100)
352285 $Tuple2(nftP, (pmtAmount - nftP))
353286 }
354- let pmtNFT = $t01168711891._1
355- let pmtToken = $t01168711891._2
287+ let pmtNFT = $t097489924._1
288+ let pmtToken = $t097489924._2
356289 let interestNew = if ((totalTokenStaked > 0))
357290 then (curInterest + fraction(pmtToken, SCALE8, totalTokenStaked))
358291 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"
37-
38-let kPersentForNFT = "percentForNFT"
39-
40-let kNFTCreatedList = "nftCreatedList"
4137
4238 let kActive = "active"
4339
4440 let kAdmin1PK = "admin_pub_1"
4541
4642 let kAdmin2PK = "admin_pub_2"
4743
4844 let kAdmin3PK = "admin_pub_3"
4945
5046 let admin1PK = fromBase58String(valueOrErrorMessage(getString(this, kAdmin1PK), "Can't get admin1PK"))
5147
5248 let admin2PK = fromBase58String(valueOrErrorMessage(getString(this, kAdmin2PK), "Can't get admin2PK"))
5349
5450 let admin3PK = fromBase58String(valueOrErrorMessage(getString(this, kAdmin3PK), "Can't get operatorPK"))
5551
5652 let tokenId = valueOrErrorMessage(getString(this, kTokenid), "Can't get staking token")
5753
5854 func isAdminCall (i) = if (containsElement([admin1PK, admin2PK, admin3PK], i.callerPublicKey))
5955 then unit
6056 else throw("Only admin can call this function")
6157
6258
6359 func isSelfCall (i) = if ((i.caller == this))
6460 then unit
6561 else throw("Only contract itself can call this function")
6662
6763
6864 func isActive () = if (valueOrElse(getBoolean(this, kActive), true))
6965 then unit
7066 else throw("DApp is inactive at this moment")
7167
7268
7369 func assetIdToStr (assetId) = match assetId {
7470 case id: ByteVector =>
7571 toBase58String(id)
7672 case waves: Unit =>
7773 "WAVES"
7874 case _ =>
7975 throw("Not Asset id")
8076 }
8177
8278
8379 func claimCalc (user) = {
8480 let totalTokenStaked = valueOrElse(getInteger(this, kTotalTokenStaked), 0)
8581 let curInterest = valueOrElse(getInteger(this, kInterest), 0)
8682 let availableForClaim = valueOrElse(getInteger(this, (user + kUserAvailable)), 0)
8783 let userInterest = valueOrElse(getInteger(this, (user + kUserInterest)), curInterest)
8884 let userTokenStaked = valueOrElse(getInteger(this, (user + kUserTokenStaked)), 0)
8985 let claimAmount = fraction(userTokenStaked, (curInterest - userInterest), SCALE8)
9086 $Tuple4(curInterest, (claimAmount + availableForClaim), userTokenStaked, totalTokenStaked)
9187 }
9288
9389
9490 func claimCalcNft (user) = {
9591 let totalNftStaked = valueOrElse(getInteger(this, kNFTTotalStaked), 0)
9692 let curInterest = valueOrElse(getInteger(this, kNFTInterest), 0)
9793 let availableForClaim = valueOrElse(getInteger(this, (user + kNFTUserAvailableClaim)), 0)
9894 let userInterest = valueOrElse(getInteger(this, (user + kNFTUserInterest)), curInterest)
9995 let userNftStaked = valueOrElse(getInteger(this, (user + kuserNFTStaked)), 0)
10096 let claimAmount = (userNftStaked * (curInterest - userInterest))
10197 $Tuple4(curInterest, (claimAmount + availableForClaim), userNftStaked, totalNftStaked)
10298 }
10399
104100
105101 func calcTokenApr () = {
106102 let lastAirdrop = valueOrElse(getInteger(this, kLastAirdrop), 0)
107103 let totalTokenStaked = valueOrElse(getInteger(this, kTotalTokenStaked), 0)
108104 let totalNFTStaked = valueOrElse(getInteger(this, kNFTTotalStaked), 0)
109- let percentForNFT = getIntegerValue(this, kPersentForNFT)
110105 let tokenAirdrop = if ((totalNFTStaked == 0))
111106 then lastAirdrop
112- else fraction(lastAirdrop, (100 - min([percentForNFT, (totalNFTStaked * 10)])), 100)
107+ else fraction(lastAirdrop, (100 - totalNFTStaked), 100)
113108 (fraction(tokenAirdrop, PERCENT_SCALE, totalTokenStaked) * 52)
114- }
115-
116-
117-func getUserStakedNFT (user) = {
118- func forNft (uNFT,nftId) = if (isDefined(getBoolean(this, (((user + "_") + nftId) + kuserNFTStakedId))))
119- then (uNFT :+ nftId)
120- else uNFT
121-
122- let nftsStr = valueOrElse(getString(this, kNFTCreatedList), "")
123- let nftList = if ((nftsStr == ""))
124- then nil
125- else split(nftsStr, SEPARATOR)
126- let userNfts = {
127- let $l = nftList
128- let $s = size($l)
129- let $acc0 = nil
130- func $f0_1 ($a,$i) = if (($i >= $s))
131- then $a
132- else forNft($a, $l[$i])
133-
134- func $f0_2 ($a,$i) = if (($i >= $s))
135- then $a
136- else throw("List size exceeds 5")
137-
138- $f0_2($f0_1($f0_1($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3), 4), 5)
139- }
140- makeString(userNfts, ",")
141109 }
142110
143111
144112 @Callable(i)
145113 func getStatsREADONLY () = {
146114 let apr = calcTokenApr()
147115 let totalTokenStaked = valueOrElse(getInteger(this, kTotalTokenStaked), 0)
148116 let totalNftStaked = valueOrElse(getInteger(this, kNFTTotalStaked), 0)
149117 $Tuple2(nil, makeString(["%d%d%d", toString(apr), toString(totalTokenStaked), toString(totalNftStaked)], SEPARATOR))
150118 }
151119
152120
153121
154122 @Callable(i)
155123 func getStatsByUserREADONLY (user) = {
156124 let userAddr = valueOrErrorMessage(addressFromString(user), "Wrong user address")
157- let $t045004596 = claimCalc(user)
158- let userNewInterest = $t045004596._1
159- let claimAmountAvailable = $t045004596._2
160- let userTokenStaked = $t045004596._3
161- let totalTokenStaked = $t045004596._4
162- let $t045994700 = claimCalcNft(user)
163- let userNewInterestNFT = $t045994700._1
164- let claimAmountAvailableNFT = $t045994700._2
165- let userNFTStaked = $t045994700._3
166- let totalNFTStaked = $t045994700._4
125+ let $t039074003 = claimCalc(user)
126+ let userNewInterest = $t039074003._1
127+ let claimAmountAvailable = $t039074003._2
128+ let userTokenStaked = $t039074003._3
129+ let totalTokenStaked = $t039074003._4
130+ let $t040064107 = claimCalcNft(user)
131+ let userNewInterestNFT = $t040064107._1
132+ let claimAmountAvailableNFT = $t040064107._2
133+ let userNFTStaked = $t040064107._3
134+ let totalNFTStaked = $t040064107._4
167135 let userTokenBalance = assetBalance(userAddr, fromBase58String(tokenId))
168- let userNfts = getUserStakedNFT(user)
169- $Tuple2(nil, makeString(["%d%d%d%d%s", toString(userTokenBalance), toString(userTokenStaked), toString(claimAmountAvailable), toString(claimAmountAvailableNFT), userNfts], SEPARATOR))
136+ $Tuple2(nil, makeString(["%d%d%d%d%s", toString(userTokenBalance), toString(userTokenStaked), toString(claimAmountAvailable), toString(claimAmountAvailableNFT)], SEPARATOR))
170137 }
171138
172139
173140
174141 @Callable(i)
175-func getUserStatsREADONLY (user) = {
176- let apr = calcTokenApr()
177- let $t051455744 = if ((user == ""))
178- then $Tuple4(0, 0, 0, 0)
179- else {
180- let userAddr = valueOrErrorMessage(addressFromString(user), "Wrong user address")
181- let $t053825478 = claimCalc(user)
182- let userNewInterest = $t053825478._1
183- let claimAmountAvailable = $t053825478._2
184- let userTokenStaked = $t053825478._3
185- let totalTokenStaked = $t053825478._4
186- let $t054855586 = claimCalcNft(user)
187- let userNewInterestNFT = $t054855586._1
188- let claimAmountAvailableNFT = $t054855586._2
189- let userNFTStaked = $t054855586._3
190- let totalNFTStaked = $t054855586._4
191- let userBalance = assetBalance(userAddr, fromBase58String(tokenId))
192- $Tuple4(userBalance, userTokenStaked, claimAmountAvailable, claimAmountAvailableNFT)
193- }
194- let userTokenBalance = $t051455744._1
195- let userTokenStaked = $t051455744._2
196- let claimAmountAvailable = $t051455744._3
197- let claimAmountAvailableNFT = $t051455744._4
198- $Tuple2(nil, makeString(["%d%d%d%d%d", toString(apr), toString(userTokenBalance), toString(userTokenStaked), toString(claimAmountAvailable), toString(claimAmountAvailableNFT)], SEPARATOR))
199- }
200-
201-
202-
203-@Callable(i)
204-func init (tokenId,adm1Pub,adm2Pub,adm3Pub,toNFTPercent) = valueOrElse(isSelfCall(i), if (isDefined(getString(this, kTokenid)))
142+func init (tokenId,adm1Pub,adm2Pub,adm3Pub) = valueOrElse(isSelfCall(i), if (isDefined(getString(this, kTokenid)))
205143 then throw("DApp already inited")
206144 else if (!(isDefined(assetInfo(fromBase58String(tokenId)))))
207145 then throw("asset id is not correct asset id")
208146 else if ((size(fromBase58String(adm1Pub)) != 32))
209147 then throw("group1Admin1PubKey is not correct")
210148 else if ((size(fromBase58String(adm2Pub)) != 32))
211149 then throw("group1Admin1PubKey is not correct")
212150 else if ((size(fromBase58String(adm3Pub)) != 32))
213151 then throw("group1Admin1PubKey is not correct")
214- else [StringEntry(kTokenid, tokenId), StringEntry(kAdmin1PK, adm1Pub), StringEntry(kAdmin2PK, adm2Pub), StringEntry(kAdmin3PK, adm3Pub), IntegerEntry(kPersentForNFT, toNFTPercent)])
152+ else [StringEntry(kTokenid, tokenId), StringEntry(kAdmin1PK, adm1Pub), StringEntry(kAdmin2PK, adm2Pub), StringEntry(kAdmin3PK, adm3Pub)])
215153
216154
217155
218156 @Callable(i)
219157 func stake () = valueOrElse(isActive(), if ((size(i.payments) != 1))
220158 then throw("One payment expected")
221159 else {
222- let $t069477022 = $Tuple2(i.payments[0].amount, i.payments[0].assetId)
223- let pmtAmount = $t069477022._1
224- let pmtAssetId = $t069477022._2
160+ let $t052965371 = $Tuple2(i.payments[0].amount, i.payments[0].assetId)
161+ let pmtAmount = $t052965371._1
162+ let pmtAssetId = $t052965371._2
225163 if ((pmtAssetId != fromBase58String(tokenId)))
226164 then throw("Wrong payment asset")
227165 else {
228166 let user = toString(i.caller)
229- let $t071437239 = claimCalc(user)
230- let userNewInterest = $t071437239._1
231- let claimAmountAvailable = $t071437239._2
232- let userTokenStaked = $t071437239._3
233- let totalTokenStaked = $t071437239._4
167+ let $t054925588 = claimCalc(user)
168+ let userNewInterest = $t054925588._1
169+ let claimAmountAvailable = $t054925588._2
170+ let userTokenStaked = $t054925588._3
171+ let totalTokenStaked = $t054925588._4
234172 [IntegerEntry((user + kUserInterest), userNewInterest), IntegerEntry((user + kUserAvailable), claimAmountAvailable), IntegerEntry((user + kUserTokenStaked), (userTokenStaked + pmtAmount)), IntegerEntry(kTotalTokenStaked, (totalTokenStaked + pmtAmount))]
235173 }
236174 })
237175
238176
239177
240178 @Callable(i)
241179 func unstake (amount) = valueOrElse(isActive(), {
242180 let user = toString(i.caller)
243181 if ((0 >= amount))
244182 then throw("Amount must be greater than 0")
245183 else {
246- let $t076777773 = claimCalc(user)
247- let userNewInterest = $t076777773._1
248- let claimAmountAvailable = $t076777773._2
249- let userTokenStaked = $t076777773._3
250- let totalTokenStaked = $t076777773._4
184+ let $t060266122 = claimCalc(user)
185+ let userNewInterest = $t060266122._1
186+ let claimAmountAvailable = $t060266122._2
187+ let userTokenStaked = $t060266122._3
188+ let totalTokenStaked = $t060266122._4
251189 if ((amount > userTokenStaked))
252190 then throw("You can't unstake more than staked")
253191 else [IntegerEntry((user + kUserInterest), userNewInterest), IntegerEntry((user + kUserAvailable), claimAmountAvailable), IntegerEntry((user + kUserTokenStaked), (userTokenStaked - amount)), IntegerEntry(kTotalTokenStaked, (totalTokenStaked - amount)), ScriptTransfer(i.caller, amount, fromBase58String(tokenId))]
254192 }
255193 })
256194
257195
258196
259197 @Callable(i)
260198 func claim () = valueOrElse(isActive(), {
261199 let user = toString(i.caller)
262- let $t082798375 = claimCalc(user)
263- let userNewInterest = $t082798375._1
264- let claimAmountAvailable = $t082798375._2
265- let userTokenStaked = $t082798375._3
266- let totalTokenStaked = $t082798375._4
267- let $t083788479 = claimCalcNft(user)
268- let userNewInterestNFT = $t083788479._1
269- let claimAmountAvailableNFT = $t083788479._2
270- let userNFTStaked = $t083788479._3
271- let totalNFTStaked = $t083788479._4
200+ let $t066286724 = claimCalc(user)
201+ let userNewInterest = $t066286724._1
202+ let claimAmountAvailable = $t066286724._2
203+ let userTokenStaked = $t066286724._3
204+ let totalTokenStaked = $t066286724._4
205+ let $t067276828 = claimCalcNft(user)
206+ let userNewInterestNFT = $t067276828._1
207+ let claimAmountAvailableNFT = $t067276828._2
208+ let userNFTStaked = $t067276828._3
209+ let totalNFTStaked = $t067276828._4
272210 if (((claimAmountAvailable + claimAmountAvailableNFT) == 0))
273211 then throw("Nothing to claim")
274212 else [IntegerEntry((user + kUserInterest), userNewInterest), IntegerEntry((user + kUserAvailable), 0), IntegerEntry((user + kNFTUserInterest), userNewInterestNFT), IntegerEntry((user + kNFTUserAvailableClaim), 0), ScriptTransfer(i.caller, (claimAmountAvailable + claimAmountAvailableNFT), fromBase58String(tokenId))]
275213 })
276214
277215
278216
279217 @Callable(i)
280218 func stakeNFT () = valueOrElse(isActive(), if ((size(i.payments) != 1))
281219 then throw("One payment expected")
282220 else {
283- let $t090359110 = $Tuple2(i.payments[0].amount, i.payments[0].assetId)
284- let pmtAmount = $t090359110._1
285- let pmtAssetId = $t090359110._2
221+ let $t073847459 = $Tuple2(i.payments[0].amount, i.payments[0].assetId)
222+ let pmtAmount = $t073847459._1
223+ let pmtAssetId = $t073847459._2
286224 let pmtAssetIdStr = assetIdToStr(pmtAssetId)
287225 if (!(isDefined(getString(this, (pmtAssetIdStr + kNFTCreated)))))
288226 then throw("Wrong nft asset")
289227 else {
290228 let user = toString(i.caller)
291- let $t092919386 = claimCalcNft(user)
292- let userNewInterest = $t092919386._1
293- let claimAmountAvailable = $t092919386._2
294- let userNFTStaked = $t092919386._3
295- let totalNFTStaked = $t092919386._4
229+ let $t076407735 = claimCalcNft(user)
230+ let userNewInterest = $t076407735._1
231+ let claimAmountAvailable = $t076407735._2
232+ let userNFTStaked = $t076407735._3
233+ let totalNFTStaked = $t076407735._4
296234 [IntegerEntry((user + kNFTUserInterest), userNewInterest), IntegerEntry((user + kNFTUserAvailableClaim), claimAmountAvailable), IntegerEntry((user + kuserNFTStaked), (userNFTStaked + 1)), IntegerEntry(kNFTTotalStaked, (totalNFTStaked + 1)), BooleanEntry((((user + "_") + pmtAssetIdStr) + kuserNFTStakedId), true)]
297235 }
298236 })
299237
300238
301239
302240 @Callable(i)
303241 func unstakeNFT (id) = valueOrElse(isActive(), {
304242 let user = toString(i.caller)
305243 if (!(isDefined(getBoolean(this, (((user + "_") + id) + kuserNFTStakedId)))))
306244 then throw("You didn't staked")
307245 else {
308- let $t0992410019 = claimCalcNft(user)
309- let userNewInterest = $t0992410019._1
310- let claimAmountAvailable = $t0992410019._2
311- let userNFTStaked = $t0992410019._3
312- let totalNFTStaked = $t0992410019._4
246+ let $t082738368 = claimCalcNft(user)
247+ let userNewInterest = $t082738368._1
248+ let claimAmountAvailable = $t082738368._2
249+ let userNFTStaked = $t082738368._3
250+ let totalNFTStaked = $t082738368._4
313251 [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))]
314252 }
315253 })
316254
317255
318256
319257 @Callable(i)
320258 func issueNFT (userAddr,name,descr) = valueOrElse(isActive(), valueOrElse(isAdminCall(i), {
321259 let uAddr = valueOrErrorMessage(addressFromString(userAddr), "Wrong user address")
322260 let issue = Issue(name, descr, 1, 0, false)
323261 let nftId = calculateAssetId(issue)
324- let nftList = valueOrElse(getString(this, kNFTCreatedList), "")
325- let newNftList = (nftList + (if ((nftList != ""))
326- then (SEPARATOR + toBase58String(nftId))
327- else ("" + toBase58String(nftId))))
328-[issue, StringEntry((toBase58String(nftId) + kNFTCreated), userAddr), StringEntry(kNFTCreatedList, newNftList), ScriptTransfer(uAddr, 1, nftId)]
262+[issue, StringEntry((toBase58String(nftId) + kNFTCreated), userAddr), ScriptTransfer(uAddr, 1, nftId)]
329263 }))
330264
331265
332266
333267 @Callable(i)
334268 func airdrop () = valueOrElse(isActive(), valueOrElse(isAdminCall(i), if ((size(i.payments) != 1))
335269 then throw("One payment expected")
336270 else {
337- let $t01118911264 = $Tuple2(i.payments[0].amount, i.payments[0].assetId)
338- let pmtAmount = $t01118911264._1
339- let pmtAssetId = $t01118911264._2
271+ let $t093099384 = $Tuple2(i.payments[0].amount, i.payments[0].assetId)
272+ let pmtAmount = $t093099384._1
273+ let pmtAssetId = $t093099384._2
340274 if ((pmtAssetId != fromBase58String(tokenId)))
341275 then throw("Wrong payment asset")
342276 else {
343- let percentForNFT = getIntegerValue(this, kPersentForNFT)
344277 let totalTokenStaked = valueOrElse(getInteger(this, kTotalTokenStaked), 0)
345278 let totalNFTStaked = valueOrElse(getInteger(this, kNFTTotalStaked), 0)
346279 let curInterest = valueOrElse(getInteger(this, kInterest), 0)
347280 let curNFTInterest = valueOrElse(getInteger(this, kNFTInterest), 0)
348- let $t01168711891 = if ((totalNFTStaked == 0))
281+ let $t097489924 = if ((totalNFTStaked == 0))
349282 then $Tuple2(0, pmtAmount)
350283 else {
351- let nftP = fraction(pmtAmount, min([percentForNFT, (totalNFTStaked * 10)]), 100)
284+ let nftP = fraction(pmtAmount, totalNFTStaked, 100)
352285 $Tuple2(nftP, (pmtAmount - nftP))
353286 }
354- let pmtNFT = $t01168711891._1
355- let pmtToken = $t01168711891._2
287+ let pmtNFT = $t097489924._1
288+ let pmtToken = $t097489924._2
356289 let interestNew = if ((totalTokenStaked > 0))
357290 then (curInterest + fraction(pmtToken, SCALE8, totalTokenStaked))
358291 else curInterest
359292 let interestNFTNew = if ((totalNFTStaked > 0))
360293 then (curNFTInterest + (pmtNFT / totalNFTStaked))
361294 else curNFTInterest
362295 [IntegerEntry(kInterest, interestNew), IntegerEntry(kNFTInterest, interestNFTNew), IntegerEntry(kLastAirdrop, pmtAmount)]
363296 }
364297 }))
365298
366299
367300
368301 @Callable(i)
369302 func activate () = valueOrElse(isAdminCall(i), if (valueOrElse(getBoolean(this, kActive), true))
370303 then throw("dApp already active")
371304 else [BooleanEntry(kActive, true)])
372305
373306
374307
375308 @Callable(i)
376309 func shutdown () = valueOrElse(isAdminCall(i), if (!(valueOrElse(getBoolean(this, kActive), true)))
377310 then throw("dApp already shutdown")
378311 else [BooleanEntry(kActive, false)])
379312
380313
381314 @Verifier(tx)
382315 func verify () = {
383316 let multiSignedByAdmins = {
384317 let adminPubKey1Signed = if (sigVerify(tx.bodyBytes, tx.proofs[0], admin1PK))
385318 then 1
386319 else 0
387320 let adminPubKey2Signed = if (sigVerify(tx.bodyBytes, tx.proofs[1], admin2PK))
388321 then 1
389322 else 0
390323 let adminPubKey3Signed = if (sigVerify(tx.bodyBytes, tx.proofs[2], admin3PK))
391324 then 1
392325 else 0
393326 (((adminPubKey1Signed + adminPubKey2Signed) + adminPubKey3Signed) >= 2)
394327 }
395328 match tx {
396329 case inv: InvokeScriptTransaction =>
397330 let isSelf = sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey)
398331 let isRightFee = if ((inv.fee == 900000))
399332 then (inv.feeAssetId == unit)
400333 else false
401334 let isInitCall = (inv.function == "init")
402335 let isnoPayments = (size(inv.payments) == 0)
403336 if (if (if (if (isRightFee)
404337 then isInitCall
405338 else false)
406339 then isSelf
407340 else false)
408341 then isnoPayments
409342 else false)
410343 then true
411344 else multiSignedByAdmins
412345 case _ =>
413346 multiSignedByAdmins
414347 }
415348 }
416349

github/deemru/w8io/169f3d6 
69.24 ms