tx · HY2sn8wwEwNKgiUNvRnAM8xrbXAjHwBviFTHw9tncSVC

3NCWFHDzdPHZC6636ZkMLNDup9mjpbTLs7h:  -0.01300000 Waves

2024.02.12 14:41 [2972991] smart account 3NCWFHDzdPHZC6636ZkMLNDup9mjpbTLs7h > SELF 0.00000000 Waves

{ "type": 13, "id": "HY2sn8wwEwNKgiUNvRnAM8xrbXAjHwBviFTHw9tncSVC", "fee": 1300000, "feeAssetId": null, "timestamp": 1707738085318, "version": 2, "chainId": 84, "sender": "3NCWFHDzdPHZC6636ZkMLNDup9mjpbTLs7h", "senderPublicKey": "3z8Q6Zu3KppVmn6fJJvrLc1Wo3krVHSvfaNcerm82md2", "proofs": [ "5BQAMQaS7GLVDYqb2YaSJjQAmwe9MwtGcoNXuKpeXEthybi4zX7qUYiSzgF1pvMKuBfvMU57gJZk796vvHGUh6qc" ], "script": "base64:BgIvCAISAwoBARIDCgEIEgMKAQgSBAoCCAgSAwoBCBIECgIIARIECgIIARIDCgEBEgAlAAxjb250cmFjdEZpbGUCEWwybXBfbGVhc2luZy5yaWRlAANTRVACAl9fAAZzY2FsZTgAgMLXLwEIdGhyb3dFcnIBA21zZwkAAgEJAKwCAgkArAICBQxjb250cmFjdEZpbGUCAjogBQNtc2cACmtleUFzc2V0SWQJALkJAgkAzAgCAgIlcwkAzAgCAgdhc3NldElkBQNuaWwFA1NFUAARa2V5UGVyaW9kT2Zmc2V0SWQJALkJAgkAzAgCAgIlcwkAzAgCAghvZmZzZXRJZAUDbmlsBQNTRVAAFWtleVBlcmlvZE9mZnNldEhlaWdodAkAuQkCCQDMCAICAiVzCQDMCAICDG9mZnNldEhlaWdodAUDbmlsBQNTRVAAD2tleVBlcmlvZExlbmd0aAkAuQkCCQDMCAICAiVzCQDMCAICDHBlcmlvZExlbmd0aAUDbmlsBQNTRVAADnBlcmlvZE9mZnNldElkCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMFEWtleVBlcmlvZE9mZnNldElkAAAADHBlcmlvZExlbmd0aAkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzBQ9rZXlQZXJpb2RMZW5ndGgAkE4AEnBlcmlvZE9mZnNldEhlaWdodAkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzBRVrZXlQZXJpb2RPZmZzZXRIZWlnaHQA////////////AQAPY3VycmVudFBlcmlvZElkAwMJAGYCBQZoZWlnaHQFEnBlcmlvZE9mZnNldEhlaWdodAkBAiE9AgUScGVyaW9kT2Zmc2V0SGVpZ2h0AP///////////wEHCQBkAgkAaQIJAGUCBQZoZWlnaHQFEnBlcmlvZE9mZnNldEhlaWdodAUMcGVyaW9kTGVuZ3RoBQ5wZXJpb2RPZmZzZXRJZAkAlgMBCQDMCAIAAAkAzAgCCQBlAgUOcGVyaW9kT2Zmc2V0SWQAAQUDbmlsABNjdXJyZW50UGVyaW9kSGVpZ2h0CQBkAgUScGVyaW9kT2Zmc2V0SGVpZ2h0CQBoAgkAZQIFD2N1cnJlbnRQZXJpb2RJZAUOcGVyaW9kT2Zmc2V0SWQFDHBlcmlvZExlbmd0aAAQbmV4dFBlcmlvZEhlaWdodAkAZAIFE2N1cnJlbnRQZXJpb2RIZWlnaHQFDHBlcmlvZExlbmd0aAESa2V5TGVhc2luZ05vZGVEYXRhAQtub2RlQWRkcmVzcwkAuQkCCQDMCAICAiVzCQDMCAIFC25vZGVBZGRyZXNzBQNuaWwFA1NFUAEWa2V5VXNlckxlYXNpbmdOb2RlTGlzdAELdXNlckFkZHJlc3MJALkJAgkAzAgCAgQlcyVzCQDMCAICE3VzZXJMZWFzaW5nTm9kZUxpc3QJAMwIAgULdXNlckFkZHJlc3MFA25pbAUDU0VQARZrZXlVc2VyTGVhc2luZ05vZGVEYXRhAgt1c2VyQWRkcmVzcwtub2RlQWRkcmVzcwkAuQkCCQDMCAICBCVzJXMJAMwIAgULbm9kZUFkZHJlc3MJAMwIAgULdXNlckFkZHJlc3MFA25pbAUDU0VQAQ5rZXlVc2VyVG9DbGFpbQELdXNlckFkZHJlc3MJALkJAgkAzAgCAgQlcyVzCQDMCAICB3RvQ2xhaW0JAMwIAgULdXNlckFkZHJlc3MFA25pbAUDU0VQAA1hc3NldElkU3RyaW5nCQELdmFsdWVPckVsc2UCCQCdCAIFBHRoaXMFCmtleUFzc2V0SWQCBVdBVkVTAAxhc3NldElkQnl0ZXMDCQAAAgUNYXNzZXRJZFN0cmluZwIFV0FWRVMFBHVuaXQJANkEAQUNYXNzZXRJZFN0cmluZwEOaXNWYWxpZEFkZHJlc3MBB2FkZHJlc3MEByRtYXRjaDAJAKYIAQUHYWRkcmVzcwMJAAECBQckbWF0Y2gwAgdBZGRyZXNzBAFhBQckbWF0Y2gwBgcBE2dldExlYXNpbmdOb2RlRW50cnkDC25vZGVBZGRyZXNzDWN1cnJlbnRMZWFzZWQKbmV4dExlYXNlZAQLdmFsdWVTdHJpbmcJALkJAgkAzAgCAgglZCVkJWQlZAkAzAgCCQCkAwEFE2N1cnJlbnRQZXJpb2RIZWlnaHQJAMwIAgkApAMBBQ1jdXJyZW50TGVhc2VkCQDMCAIJAKQDAQUQbmV4dFBlcmlvZEhlaWdodAkAzAgCCQCkAwEFCm5leHRMZWFzZWQFA25pbAUDU0VQCQELU3RyaW5nRW50cnkCCQESa2V5TGVhc2luZ05vZGVEYXRhAQULbm9kZUFkZHJlc3MFC3ZhbHVlU3RyaW5nARJnZXRMZWFzaW5nTm9kZURhdGEBC25vZGVBZGRyZXNzBBRsZWFzaW5nRGF0YVN0cmluZ1JhdwkAnQgCBQR0aGlzCQESa2V5TGVhc2luZ05vZGVEYXRhAQULbm9kZUFkZHJlc3MEByRtYXRjaDAFFGxlYXNpbmdEYXRhU3RyaW5nUmF3AwkAAQIFByRtYXRjaDACBlN0cmluZwQCZHMFByRtYXRjaDAECGRhdGFMaXN0CQC1CQIFAmRzBQNTRVAEEW5vZGVDdXJyZW50UGVyaW9kCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUIZGF0YUxpc3QAAQQRbm9kZUN1cnJlbnRMZWFzZWQJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQhkYXRhTGlzdAACBA5ub2RlTmV4dFBlcmlvZAkBDXBhcnNlSW50VmFsdWUBCQCRAwIFCGRhdGFMaXN0AAMEDm5vZGVOZXh0TGVhc2VkCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUIZGF0YUxpc3QABAMJAGYCBQ5ub2RlTmV4dFBlcmlvZAUGaGVpZ2h0CQCUCgIFEW5vZGVDdXJyZW50TGVhc2VkBQ5ub2RlTmV4dExlYXNlZAkAlAoCBQ5ub2RlTmV4dExlYXNlZAUObm9kZU5leHRMZWFzZWQJAJQKAgAAAAABE2dldFVzZXJMZWFzaW5nRW50cnkEC25vZGVBZGRyZXNzC3VzZXJBZGRyZXNzEXVzZXJDdXJyZW50TGVhc2VkDnVzZXJOZXh0TGVhc2VkBAt2YWx1ZVN0cmluZwkAuQkCCQDMCAICCCVkJWQlZCVkCQDMCAIJAKQDAQUTY3VycmVudFBlcmlvZEhlaWdodAkAzAgCCQCkAwEFEXVzZXJDdXJyZW50TGVhc2VkCQDMCAIJAKQDAQUQbmV4dFBlcmlvZEhlaWdodAkAzAgCCQCkAwEFDnVzZXJOZXh0TGVhc2VkBQNuaWwFA1NFUAkBC1N0cmluZ0VudHJ5AgkBFmtleVVzZXJMZWFzaW5nTm9kZURhdGECBQt1c2VyQWRkcmVzcwULbm9kZUFkZHJlc3MFC3ZhbHVlU3RyaW5nARJnZXRVc2VyTGVhc2luZ0RhdGECC25vZGVBZGRyZXNzC3VzZXJBZGRyZXNzBBRsZWFzaW5nRGF0YVN0cmluZ1JhdwkAnQgCBQR0aGlzCQEWa2V5VXNlckxlYXNpbmdOb2RlRGF0YQIFC3VzZXJBZGRyZXNzBQtub2RlQWRkcmVzcwQHJG1hdGNoMAUUbGVhc2luZ0RhdGFTdHJpbmdSYXcDCQABAgUHJG1hdGNoMAIGU3RyaW5nBAJkcwUHJG1hdGNoMAQIZGF0YUxpc3QJALUJAgUCZHMFA1NFUAQRdXNlckN1cnJlbnRQZXJpb2QJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQhkYXRhTGlzdAABBBF1c2VyQ3VycmVudExlYXNlZAkBDXBhcnNlSW50VmFsdWUBCQCRAwIFCGRhdGFMaXN0AAIEDnVzZXJOZXh0UGVyaW9kCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUIZGF0YUxpc3QAAwQOdXNlck5leHRMZWFzZWQJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQhkYXRhTGlzdAAEAwkAZgIFDnVzZXJOZXh0UGVyaW9kBQZoZWlnaHQJAJQKAgURdXNlckN1cnJlbnRMZWFzZWQFDnVzZXJOZXh0TGVhc2VkCQCUCgIFDnVzZXJOZXh0TGVhc2VkBQ51c2VyTmV4dExlYXNlZAkAlAoCAAAAAAETZ2V0VXNlclRvQ2xhaW1FbnRyeQMLdXNlckFkZHJlc3MHdG9DbGFpbQh0b1VubG9jawQLdmFsdWVTdHJpbmcJALkJAgkAzAgCAgglZCVkJWQlZAkAzAgCCQCkAwEFE2N1cnJlbnRQZXJpb2RIZWlnaHQJAMwIAgkApAMBBQd0b0NsYWltCQDMCAIJAKQDAQUQbmV4dFBlcmlvZEhlaWdodAkAzAgCCQCkAwEFCHRvVW5sb2NrBQNuaWwFA1NFUAkBC1N0cmluZ0VudHJ5AgkBDmtleVVzZXJUb0NsYWltAQULdXNlckFkZHJlc3MFC3ZhbHVlU3RyaW5nARVnZXRVc2VyVG9DbGFpbUJhbGFuY2UBC3VzZXJBZGRyZXNzBBJ1c2VyVG9DbGFpbURhdGFSYXcJAJ0IAgUEdGhpcwkBDmtleVVzZXJUb0NsYWltAQULdXNlckFkZHJlc3MEByRtYXRjaDAFEnVzZXJUb0NsYWltRGF0YVJhdwMJAAECBQckbWF0Y2gwAgZTdHJpbmcEAmRzBQckbWF0Y2gwBAhkYXRhTGlzdAkAtQkCBQJkcwUDU0VQBA1jdXJyZW50UGVyaW9kCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUIZGF0YUxpc3QAAQQHdG9DbGFpbQkBDXBhcnNlSW50VmFsdWUBCQCRAwIFCGRhdGFMaXN0AAIECm5leHRQZXJpb2QJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQhkYXRhTGlzdAADBAh0b1VubG9jawkBDXBhcnNlSW50VmFsdWUBCQCRAwIFCGRhdGFMaXN0AAQDCQBmAgUKbmV4dFBlcmlvZAUGaGVpZ2h0CQCUCgIFB3RvQ2xhaW0FCHRvVW5sb2NrCQCUCgIJAGQCBQd0b0NsYWltBQh0b1VubG9jawAACQCUCgIAAAAAARZnZXRVc2VyTGVhc2luZ05vZGVMaXN0AQt1c2VyQWRkcmVzcwQUbGVhc2luZ0RhdGFTdHJpbmdSYXcJAJ0IAgUEdGhpcwkBFmtleVVzZXJMZWFzaW5nTm9kZUxpc3QBBQt1c2VyQWRkcmVzcwQHJG1hdGNoMAUUbGVhc2luZ0RhdGFTdHJpbmdSYXcDCQABAgUHJG1hdGNoMAIGU3RyaW5nBAJkcwUHJG1hdGNoMAQIZGF0YUxpc3QJAL0JAgUCZHMFA1NFUAUIZGF0YUxpc3QFA25pbAEUZ2V0VXNlck5vZGVMaXN0RW50cnkCC3VzZXJBZGRyZXNzCG5vZGVMaXN0AwkAAAIJAJADAQUIbm9kZUxpc3QAAAkBC0RlbGV0ZUVudHJ5AQkBFmtleVVzZXJMZWFzaW5nTm9kZUxpc3QBBQt1c2VyQWRkcmVzcwkBC1N0cmluZ0VudHJ5AgkBFmtleVVzZXJMZWFzaW5nTm9kZUxpc3QBBQt1c2VyQWRkcmVzcwkAuwkCBQhub2RlTGlzdAUDU0VQARFhZGROb2RlVG9Ob2RlTGlzdAILdXNlckFkZHJlc3MLbm9kZUFkZHJlc3MECG5vZGVMaXN0CQEWZ2V0VXNlckxlYXNpbmdOb2RlTGlzdAEFC3VzZXJBZGRyZXNzAwkBD2NvbnRhaW5zRWxlbWVudAIFCG5vZGVMaXN0BQtub2RlQWRkcmVzcwUIbm9kZUxpc3QJAM0IAgUIbm9kZUxpc3QFC25vZGVBZGRyZXNzARZyZW1vdmVOb2RlRnJvbU5vZGVMaXN0Agt1c2VyQWRkcmVzcwtub2RlQWRkcmVzcwQIbm9kZUxpc3QJARZnZXRVc2VyTGVhc2luZ05vZGVMaXN0AQULdXNlckFkZHJlc3MEByRtYXRjaDAJAM8IAgUIbm9kZUxpc3QFC25vZGVBZGRyZXNzAwkAAQIFByRtYXRjaDACA0ludAQFaW5kZXgFByRtYXRjaDAJANEIAgUIbm9kZUxpc3QFBWluZGV4BQhub2RlTGlzdAEPZ2V0U3Rha2VBY3Rpb25zAwtub2RlQWRkcmVzcwt1c2VyQWRkcmVzcwFpBAZjaGVja3MJAMwIAgMJAAACCQCQAwEIBQFpCHBheW1lbnRzAAEGCQEIdGhyb3dFcnIBAiBwYXltZW50IHNpemUgc2hvdWxkIGJlIGV4YWN0bHkgMQkAzAgCAwkAAAIICQCRAwIIBQFpCHBheW1lbnRzAAAHYXNzZXRJZAUMYXNzZXRJZEJ5dGVzBgkBCHRocm93RXJyAQkAuQkCCQDMCAICGnBheW1lbnQgYXNzZXRJZCBzaG91bGQgYmU6CQDMCAIFDWFzc2V0SWRTdHJpbmcFA25pbAIBIAkAzAgCAwkBDmlzVmFsaWRBZGRyZXNzAQULbm9kZUFkZHJlc3MGCQEIdGhyb3dFcnIBCQC5CQIJAMwIAgIabm9kZSBhZGRyZXNzIGlzIG5vdCB2YWxpZDoJAMwIAgULbm9kZUFkZHJlc3MFA25pbAIBIAkAzAgCAwkBDmlzVmFsaWRBZGRyZXNzAQULdXNlckFkZHJlc3MGCQEIdGhyb3dFcnIBCQC5CQIJAMwIAgIadXNlciBhZGRyZXNzIGlzIG5vdCB2YWxpZDoJAMwIAgULdXNlckFkZHJlc3MFA25pbAIBIAUDbmlsAwkAAAIFBmNoZWNrcwUGY2hlY2tzBBF1c2VyTGVhc2luZ0Ftb3VudAgJAJEDAggFAWkIcGF5bWVudHMAAAZhbW91bnQECyR0MDY2OTg2NzcxCQESZ2V0TGVhc2luZ05vZGVEYXRhAQULbm9kZUFkZHJlc3MEEW5vZGVDdXJyZW50TGVhc2VkCAULJHQwNjY5ODY3NzECXzEEDm5vZGVOZXh0TGVhc2VkCAULJHQwNjY5ODY3NzECXzIEEG5ld05vZGVOZXh0TGVhc2UJAGQCBQ5ub2RlTmV4dExlYXNlZAURdXNlckxlYXNpbmdBbW91bnQECyR0MDY4Mzk2OTI1CQESZ2V0VXNlckxlYXNpbmdEYXRhAgULbm9kZUFkZHJlc3MFC3VzZXJBZGRyZXNzBBF1c2VyQ3VycmVudExlYXNlZAgFCyR0MDY4Mzk2OTI1Al8xBA51c2VyTmV4dExlYXNlZAgFCyR0MDY4Mzk2OTI1Al8yBBFuZXdVc2VyTmV4dExlYXNlZAkAZAIFDnVzZXJOZXh0TGVhc2VkBRF1c2VyTGVhc2luZ0Ftb3VudAkAzAgCCQETZ2V0TGVhc2luZ05vZGVFbnRyeQMFC25vZGVBZGRyZXNzBRFub2RlQ3VycmVudExlYXNlZAUQbmV3Tm9kZU5leHRMZWFzZQkAzAgCCQETZ2V0VXNlckxlYXNpbmdFbnRyeQQFC25vZGVBZGRyZXNzBQt1c2VyQWRkcmVzcwURdXNlckN1cnJlbnRMZWFzZWQFEW5ld1VzZXJOZXh0TGVhc2VkCQDMCAIJARRnZXRVc2VyTm9kZUxpc3RFbnRyeQIFC3VzZXJBZGRyZXNzCQERYWRkTm9kZVRvTm9kZUxpc3QCBQt1c2VyQWRkcmVzcwULbm9kZUFkZHJlc3MFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgERZ2V0VW5zdGFrZUFjdGlvbnMDC25vZGVBZGRyZXNzC3VzZXJBZGRyZXNzDXVuc3Rha2VBbW91bnQECyR0MDc1NDM3NjE2CQESZ2V0TGVhc2luZ05vZGVEYXRhAQULbm9kZUFkZHJlc3MEEW5vZGVDdXJyZW50TGVhc2VkCAULJHQwNzU0Mzc2MTYCXzEEDm5vZGVOZXh0TGVhc2VkCAULJHQwNzU0Mzc2MTYCXzIECyR0MDc2MjE3NzA3CQESZ2V0VXNlckxlYXNpbmdEYXRhAgULbm9kZUFkZHJlc3MFC3VzZXJBZGRyZXNzBBF1c2VyQ3VycmVudExlYXNlZAgFCyR0MDc2MjE3NzA3Al8xBA51c2VyTmV4dExlYXNlZAgFCyR0MDc2MjE3NzA3Al8yBAZjaGVja3MJAMwIAgMJAGYCBQ11bnN0YWtlQW1vdW50AAAGCQEIdGhyb3dFcnIBAid1bnN0YWtlIGFtb3VudCBzaG91bGQgYmUgZ3JlYXRlciB0aGFuIDAJAMwIAgMJAGcCBQ51c2VyTmV4dExlYXNlZAUNdW5zdGFrZUFtb3VudAYJAQh0aHJvd0VycgECOXVuc3Rha2UgYW1vdW50IHNob3VsZCBiZSBsZXNzIG9yIGVxdWFsIHVzZXIgc3Rha2VkIGFtb3VudAkAzAgCAwkAZwIFDm5vZGVOZXh0TGVhc2VkBQ11bnN0YWtlQW1vdW50BgkBCHRocm93RXJyAQI5dW5zdGFrZSBhbW91bnQgc2hvdWxkIGJlIGxlc3Mgb3IgZXF1YWwgbm9kZSBzdGFrZWQgYW1vdW50CQDMCAIDCQEOaXNWYWxpZEFkZHJlc3MBBQtub2RlQWRkcmVzcwYJAQh0aHJvd0VycgEJALkJAgkAzAgCAhpub2RlIGFkZHJlc3MgaXMgbm90IHZhbGlkOgkAzAgCBQtub2RlQWRkcmVzcwUDbmlsAgEgCQDMCAIDCQEOaXNWYWxpZEFkZHJlc3MBBQt1c2VyQWRkcmVzcwYJAQh0aHJvd0VycgEJALkJAgkAzAgCAhp1c2VyIGFkZHJlc3MgaXMgbm90IHZhbGlkOgkAzAgCBQt1c2VyQWRkcmVzcwUDbmlsAgEgBQNuaWwDCQAAAgUGY2hlY2tzBQZjaGVja3MEEG5ld05vZGVOZXh0TGVhc2UJAGUCBQ5ub2RlTmV4dExlYXNlZAUNdW5zdGFrZUFtb3VudAQRbmV3VXNlck5leHRMZWFzZWQJAGUCBQ51c2VyTmV4dExlYXNlZAUNdW5zdGFrZUFtb3VudAQLJHQwODQwMDg1MDUJARVnZXRVc2VyVG9DbGFpbUJhbGFuY2UBBQt1c2VyQWRkcmVzcwQHdG9DbGFpbQgFCyR0MDg0MDA4NTA1Al8xBAh0b1VubG9jawgFCyR0MDg0MDA4NTA1Al8yBAtuZXdUb1VubG9jawkAZAIFCHRvVW5sb2NrBQ11bnN0YWtlQW1vdW50BBFyZW1vdmVOb2RlQWN0aW9ucwMJAAACBRFuZXdVc2VyTmV4dExlYXNlZAAACQDMCAIJARRnZXRVc2VyTm9kZUxpc3RFbnRyeQIFC3VzZXJBZGRyZXNzCQEWcmVtb3ZlTm9kZUZyb21Ob2RlTGlzdAIFC3VzZXJBZGRyZXNzBQtub2RlQWRkcmVzcwUDbmlsBQNuaWwJAM4IAgkAzAgCCQETZ2V0TGVhc2luZ05vZGVFbnRyeQMFC25vZGVBZGRyZXNzBRFub2RlQ3VycmVudExlYXNlZAUQbmV3Tm9kZU5leHRMZWFzZQkAzAgCCQETZ2V0VXNlckxlYXNpbmdFbnRyeQQFC25vZGVBZGRyZXNzBQt1c2VyQWRkcmVzcwURdXNlckN1cnJlbnRMZWFzZWQFEW5ld1VzZXJOZXh0TGVhc2VkCQDMCAIJARNnZXRVc2VyVG9DbGFpbUVudHJ5AwULdXNlckFkZHJlc3MFB3RvQ2xhaW0FC25ld1RvVW5sb2NrBQNuaWwFEXJlbW92ZU5vZGVBY3Rpb25zCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuARdnZXRDbGFpbVVubG9ja2VkQWN0aW9ucwILdXNlckFkZHJlc3MLY2xhaW1BbW91bnQECyR0MDkwNzU5MTM1CQEVZ2V0VXNlclRvQ2xhaW1CYWxhbmNlAQULdXNlckFkZHJlc3MEB3RvQ2xhaW0IBQskdDA5MDc1OTEzNQJfMQQIdG9VbmxvY2sIBQskdDA5MDc1OTEzNQJfMgQGY2hlY2tzCQDMCAIDCQBmAgULY2xhaW1BbW91bnQAAAYJAQh0aHJvd0VycgECJWNsYWltIGFtb3VudCBzaG91bGQgYmUgZ3JlYXRlciB0aGFuIDAJAMwIAgMJAGcCBQd0b0NsYWltBQtjbGFpbUFtb3VudAYJAQh0aHJvd0VycgECNGNsYWltIGFtb3VudCBzaG91bGQgYmUgbGVzcyBvciBlcXVhbCB1bmxvY2tlZCBhbW91bnQJAMwIAgMJAQ5pc1ZhbGlkQWRkcmVzcwEFC3VzZXJBZGRyZXNzBgkBCHRocm93RXJyAQkAuQkCCQDMCAICGnVzZXIgYWRkcmVzcyBpcyBub3QgdmFsaWQ6CQDMCAIFC3VzZXJBZGRyZXNzBQNuaWwCASAFA25pbAMJAAACBQZjaGVja3MFBmNoZWNrcwQKbmV3VG9DbGFpbQkAZQIFB3RvQ2xhaW0FC2NsYWltQW1vdW50CQDMCAIJARNnZXRVc2VyVG9DbGFpbUVudHJ5AwULdXNlckFkZHJlc3MFCm5ld1RvQ2xhaW0FCHRvVW5sb2NrCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMJARFAZXh0ck5hdGl2ZSgxMDYyKQEFC3VzZXJBZGRyZXNzBQtjbGFpbUFtb3VudAUMYXNzZXRJZEJ5dGVzBQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BG2dldFN0YWtlRnJvbVVubG9ja2VkQWN0aW9ucwMLbm9kZUFkZHJlc3MLdXNlckFkZHJlc3MRdXNlckxlYXNpbmdBbW91bnQECyR0MDk3NzU5ODM1CQEVZ2V0VXNlclRvQ2xhaW1CYWxhbmNlAQULdXNlckFkZHJlc3MEB3RvQ2xhaW0IBQskdDA5Nzc1OTgzNQJfMQQIdG9VbmxvY2sIBQskdDA5Nzc1OTgzNQJfMgQJYXZhaWxhYmxlCQBkAgUIdG9VbmxvY2sFB3RvQ2xhaW0EBmNoZWNrcwkAzAgCAwkAZgIFEXVzZXJMZWFzaW5nQW1vdW50AAAGCQEIdGhyb3dFcnIBAh9hbW91bnQgc2hvdWxkIGJlIGdyZWF0ZXIgdGhhbiAwCQDMCAIDCQBnAgUJYXZhaWxhYmxlBRF1c2VyTGVhc2luZ0Ftb3VudAYJAQh0aHJvd0VycgECK2Ftb3VudCBzaG91bGQgYmUgbGVzcyBvciBlcXVhbCB0byBhdmFpbGFibGUJAMwIAgMJAQ5pc1ZhbGlkQWRkcmVzcwEFC25vZGVBZGRyZXNzBgkBCHRocm93RXJyAQkAuQkCCQDMCAICGm5vZGUgYWRkcmVzcyBpcyBub3QgdmFsaWQ6CQDMCAIFC25vZGVBZGRyZXNzBQNuaWwCASAJAMwIAgMJAQ5pc1ZhbGlkQWRkcmVzcwEFC3VzZXJBZGRyZXNzBgkBCHRocm93RXJyAQkAuQkCCQDMCAICGnVzZXIgYWRkcmVzcyBpcyBub3QgdmFsaWQ6CQDMCAIFC3VzZXJBZGRyZXNzBQNuaWwCASAFA25pbAMJAAACBQZjaGVja3MFBmNoZWNrcwQNJHQwMTAzMTIxMDM4NQkBEmdldExlYXNpbmdOb2RlRGF0YQEFC25vZGVBZGRyZXNzBBFub2RlQ3VycmVudExlYXNlZAgFDSR0MDEwMzEyMTAzODUCXzEEDm5vZGVOZXh0TGVhc2VkCAUNJHQwMTAzMTIxMDM4NQJfMgQQbmV3Tm9kZU5leHRMZWFzZQkAZAIFDm5vZGVOZXh0TGVhc2VkBRF1c2VyTGVhc2luZ0Ftb3VudAQNJHQwMTA0NTMxMDUzOQkBEmdldFVzZXJMZWFzaW5nRGF0YQIFC25vZGVBZGRyZXNzBQt1c2VyQWRkcmVzcwQRdXNlckN1cnJlbnRMZWFzZWQIBQ0kdDAxMDQ1MzEwNTM5Al8xBA51c2VyTmV4dExlYXNlZAgFDSR0MDEwNDUzMTA1MzkCXzIEEW5ld1VzZXJOZXh0TGVhc2VkCQBkAgUOdXNlck5leHRMZWFzZWQFEXVzZXJMZWFzaW5nQW1vdW50BAtuZXdUb1VubG9jawkAlgMBCQDMCAIAAAkAzAgCCQBlAgUIdG9VbmxvY2sFEXVzZXJMZWFzaW5nQW1vdW50BQNuaWwECm5ld1RvQ2xhaW0JAJcDAQkAzAgCBQd0b0NsYWltCQDMCAIJAGQCBQd0b0NsYWltCQBlAgUIdG9VbmxvY2sFEXVzZXJMZWFzaW5nQW1vdW50BQNuaWwJAMwIAgkBE2dldExlYXNpbmdOb2RlRW50cnkDBQtub2RlQWRkcmVzcwURbm9kZUN1cnJlbnRMZWFzZWQFDm5vZGVOZXh0TGVhc2VkCQDMCAIJARNnZXRVc2VyTGVhc2luZ0VudHJ5BAULbm9kZUFkZHJlc3MFC3VzZXJBZGRyZXNzBRF1c2VyQ3VycmVudExlYXNlZAURbmV3VXNlck5leHRMZWFzZWQJAMwIAgkBE2dldFVzZXJUb0NsYWltRW50cnkDBQt1c2VyQWRkcmVzcwUKbmV3VG9DbGFpbQULbmV3VG9VbmxvY2sJAMwIAgkBFGdldFVzZXJOb2RlTGlzdEVudHJ5AgULdXNlckFkZHJlc3MJARFhZGROb2RlVG9Ob2RlTGlzdAIFC3VzZXJBZGRyZXNzBQtub2RlQWRkcmVzcwUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuARxnZXRTZXROZXdQZXJpb2RMZW5ndGhBY3Rpb25zAQ9uZXdQZXJpb2RMZW5ndGgEBWNoZWNrCQDMCAIDCQBmAgUPbmV3UGVyaW9kTGVuZ3RoAAAGCQEIdGhyb3dFcnIBAiZwZXJpb2QgbGVuZ3RoIHNob3VsZCBiZSBncmVhdGVyIHRoYW4gMAUDbmlsAwkAAAIFBWNoZWNrBQVjaGVjawMJAAACBRJwZXJpb2RPZmZzZXRIZWlnaHQA////////////AQkAzAgCCQEMSW50ZWdlckVudHJ5AgUPa2V5UGVyaW9kTGVuZ3RoBQ9uZXdQZXJpb2RMZW5ndGgJAMwIAgkBDEludGVnZXJFbnRyeQIFFWtleVBlcmlvZE9mZnNldEhlaWdodAUGaGVpZ2h0BQNuaWwEEW5ld1BlcmlvZE9mZnNldElkCQBkAgUPY3VycmVudFBlcmlvZElkAAEED25ld09mZnNldEhlaWdodAkAZAIJAGgCBQxwZXJpb2RMZW5ndGgJAGUCBRFuZXdQZXJpb2RPZmZzZXRJZAUOcGVyaW9kT2Zmc2V0SWQFEnBlcmlvZE9mZnNldEhlaWdodAkAzAgCCQEMSW50ZWdlckVudHJ5AgURa2V5UGVyaW9kT2Zmc2V0SWQFEW5ld1BlcmlvZE9mZnNldElkCQDMCAIJAQxJbnRlZ2VyRW50cnkCBRVrZXlQZXJpb2RPZmZzZXRIZWlnaHQFD25ld09mZnNldEhlaWdodAkAzAgCCQEMSW50ZWdlckVudHJ5AgUPa2V5UGVyaW9kTGVuZ3RoBQ9uZXdQZXJpb2RMZW5ndGgFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgENZ2V0UGVyaW9kRGF0YQAJAJUKAwUGaGVpZ2h0BRNjdXJyZW50UGVyaW9kSGVpZ2h0BRBuZXh0UGVyaW9kSGVpZ2h0CQFpARJzZXROZXdQZXJpb2RMZW5ndGgBD25ld1BlcmlvZExlbmd0aAkBHGdldFNldE5ld1BlcmlvZExlbmd0aEFjdGlvbnMBBQ9uZXdQZXJpb2RMZW5ndGgBaQETZ2V0Tm9kZURhdGFSRUFET05MWQELbm9kZUFkZHJlc3MEDSR0MDEyMDg3MTIxNTEJARJnZXRMZWFzaW5nTm9kZURhdGEBBQtub2RlQWRkcmVzcwQMY3VycmVudExlYXNlCAUNJHQwMTIwODcxMjE1MQJfMQQKbmV4dExlYXNlZAgFDSR0MDEyMDg3MTIxNTECXzIEDSR0MDEyMTU2MTIyMDUJAQ1nZXRQZXJpb2REYXRhAAQNY3VycmVudFBlcmlvZAgFDSR0MDEyMTU2MTIyMDUCXzEECm5leHRQZXJpb2QIBQ0kdDAxMjE1NjEyMjA1Al8yCQCUCgIFA25pbAkAlgoEBQxjdXJyZW50TGVhc2UFCm5leHRMZWFzZWQFDWN1cnJlbnRQZXJpb2QFCm5leHRQZXJpb2QBaQETZ2V0VXNlckRhdGFSRUFET05MWQELdXNlckFkZHJlc3MEDSR0MDEyMzQxMTI0MDEJARVnZXRVc2VyVG9DbGFpbUJhbGFuY2UBBQt1c2VyQWRkcmVzcwQHdG9DbGFpbQgFDSR0MDEyMzQxMTI0MDECXzEECHRvVW5sb2NrCAUNJHQwMTIzNDExMjQwMQJfMgQIbm9kZUxpc3QJARZnZXRVc2VyTGVhc2luZ05vZGVMaXN0AQULdXNlckFkZHJlc3MJAJQKAgUDbmlsCQCWCgQFB3RvQ2xhaW0FCHRvVW5sb2NrCQENZ2V0UGVyaW9kRGF0YQAFCG5vZGVMaXN0AWkBCHN0YWtlRm9yAgtub2RlQWRkcmVzcwt1c2VyQWRkcmVzcwkBD2dldFN0YWtlQWN0aW9ucwMFC25vZGVBZGRyZXNzBQt1c2VyQWRkcmVzcwUBaQFpAQVzdGFrZQELbm9kZUFkZHJlc3MEC3VzZXJBZGRyZXNzCQClCAEIBQFpBmNhbGxlcgkBD2dldFN0YWtlQWN0aW9ucwMFC25vZGVBZGRyZXNzBQt1c2VyQWRkcmVzcwUBaQFpARFzdGFrZUZyb21VbmxvY2tlZAILbm9kZUFkZHJlc3MGYW1vdW50BAt1c2VyQWRkcmVzcwkApQgBCAUBaQZjYWxsZXIJARtnZXRTdGFrZUZyb21VbmxvY2tlZEFjdGlvbnMDBQtub2RlQWRkcmVzcwULdXNlckFkZHJlc3MFBmFtb3VudAFpAQd1bnN0YWtlAgtub2RlQWRkcmVzcwZhbW91bnQEC3VzZXJBZGRyZXNzCQClCAEIBQFpBmNhbGxlcgkBEWdldFVuc3Rha2VBY3Rpb25zAwULbm9kZUFkZHJlc3MFC3VzZXJBZGRyZXNzBQZhbW91bnQBaQEFY2xhaW0BBmFtb3VudAQLdXNlckFkZHJlc3MJAKUIAQgFAWkGY2FsbGVyCQEXZ2V0Q2xhaW1VbmxvY2tlZEFjdGlvbnMCBQt1c2VyQWRkcmVzcwUGYW1vdW50AWkBCGNsYWltQWxsAAQLdXNlckFkZHJlc3MJAKUIAQgFAWkGY2FsbGVyBA0kdDAxMzM1NDEzNDE0CQEVZ2V0VXNlclRvQ2xhaW1CYWxhbmNlAQULdXNlckFkZHJlc3MEB3RvQ2xhaW0IBQ0kdDAxMzM1NDEzNDE0Al8xBAh0b1VubG9jawgFDSR0MDEzMzU0MTM0MTQCXzIJARdnZXRDbGFpbVVubG9ja2VkQWN0aW9ucwIFC3VzZXJBZGRyZXNzBQd0b0NsYWltANEpKk4=", "height": 2972991, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 7gShWbxXeGEHPD7bhARcBjud47w6DTRcPddq47HYDjSp Next: FnM5niybaRHAzGUDCTqcCXp5YmWFPANhmr39Q2pQHZPV Diff:
OldNewDifferences
298298 }
299299
300300
301+func getPeriodData () = $Tuple3(height, currentPeriodHeight, nextPeriodHeight)
302+
303+
301304 @Callable(i)
302305 func setNewPeriodLength (newPeriodLength) = getSetNewPeriodLengthActions(newPeriodLength)
303306
304307
305308
306309 @Callable(i)
307-func getUserData (userAddress) = {
308- let $t01199912059 = getUserToClaimBalance(userAddress)
309- let toClaim = $t01199912059._1
310- let toUnlock = $t01199912059._2
310+func getNodeDataREADONLY (nodeAddress) = {
311+ let $t01208712151 = getLeasingNodeData(nodeAddress)
312+ let currentLease = $t01208712151._1
313+ let nextLeased = $t01208712151._2
314+ let $t01215612205 = getPeriodData()
315+ let currentPeriod = $t01215612205._1
316+ let nextPeriod = $t01215612205._2
317+ $Tuple2(nil, $Tuple4(currentLease, nextLeased, currentPeriod, nextPeriod))
318+ }
319+
320+
321+
322+@Callable(i)
323+func getUserDataREADONLY (userAddress) = {
324+ let $t01234112401 = getUserToClaimBalance(userAddress)
325+ let toClaim = $t01234112401._1
326+ let toUnlock = $t01234112401._2
311327 let nodeList = getUserLeasingNodeList(userAddress)
312- $Tuple2(nil, $Tuple3(toClaim, toUnlock, nodeList))
328+ $Tuple2(nil, $Tuple4(toClaim, toUnlock, getPeriodData(), nodeList))
313329 }
314330
315331
354370 @Callable(i)
355371 func claimAll () = {
356372 let userAddress = toString(i.caller)
357- let $t01299513055 = getUserToClaimBalance(userAddress)
358- let toClaim = $t01299513055._1
359- let toUnlock = $t01299513055._2
373+ let $t01335413414 = getUserToClaimBalance(userAddress)
374+ let toClaim = $t01335413414._1
375+ let toUnlock = $t01335413414._2
360376 getClaimUnlockedActions(userAddress, toClaim)
361377 }
362378
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let contractFile = "l2mp_leasing.ride"
55
66 let SEP = "__"
77
88 let scale8 = 100000000
99
1010 func throwErr (msg) = throw(((contractFile + ": ") + msg))
1111
1212
1313 let keyAssetId = makeString(["%s", "assetId"], SEP)
1414
1515 let keyPeriodOffsetId = makeString(["%s", "offsetId"], SEP)
1616
1717 let keyPeriodOffsetHeight = makeString(["%s", "offsetHeight"], SEP)
1818
1919 let keyPeriodLength = makeString(["%s", "periodLength"], SEP)
2020
2121 let periodOffsetId = valueOrElse(getInteger(this, keyPeriodOffsetId), 0)
2222
2323 let periodLength = valueOrElse(getInteger(this, keyPeriodLength), 10000)
2424
2525 let periodOffsetHeight = valueOrElse(getInteger(this, keyPeriodOffsetHeight), -1)
2626
2727 let currentPeriodId = if (if ((height > periodOffsetHeight))
2828 then (periodOffsetHeight != -1)
2929 else false)
3030 then (((height - periodOffsetHeight) / periodLength) + periodOffsetId)
3131 else max([0, (periodOffsetId - 1)])
3232
3333 let currentPeriodHeight = (periodOffsetHeight + ((currentPeriodId - periodOffsetId) * periodLength))
3434
3535 let nextPeriodHeight = (currentPeriodHeight + periodLength)
3636
3737 func keyLeasingNodeData (nodeAddress) = makeString(["%s", nodeAddress], SEP)
3838
3939
4040 func keyUserLeasingNodeList (userAddress) = makeString(["%s%s", "userLeasingNodeList", userAddress], SEP)
4141
4242
4343 func keyUserLeasingNodeData (userAddress,nodeAddress) = makeString(["%s%s", nodeAddress, userAddress], SEP)
4444
4545
4646 func keyUserToClaim (userAddress) = makeString(["%s%s", "toClaim", userAddress], SEP)
4747
4848
4949 let assetIdString = valueOrElse(getString(this, keyAssetId), "WAVES")
5050
5151 let assetIdBytes = if ((assetIdString == "WAVES"))
5252 then unit
5353 else fromBase58String(assetIdString)
5454
5555 func isValidAddress (address) = match addressFromString(address) {
5656 case a: Address =>
5757 true
5858 case _ =>
5959 false
6060 }
6161
6262
6363 func getLeasingNodeEntry (nodeAddress,currentLeased,nextLeased) = {
6464 let valueString = makeString(["%d%d%d%d", toString(currentPeriodHeight), toString(currentLeased), toString(nextPeriodHeight), toString(nextLeased)], SEP)
6565 StringEntry(keyLeasingNodeData(nodeAddress), valueString)
6666 }
6767
6868
6969 func getLeasingNodeData (nodeAddress) = {
7070 let leasingDataStringRaw = getString(this, keyLeasingNodeData(nodeAddress))
7171 match leasingDataStringRaw {
7272 case ds: String =>
7373 let dataList = split(ds, SEP)
7474 let nodeCurrentPeriod = parseIntValue(dataList[1])
7575 let nodeCurrentLeased = parseIntValue(dataList[2])
7676 let nodeNextPeriod = parseIntValue(dataList[3])
7777 let nodeNextLeased = parseIntValue(dataList[4])
7878 if ((nodeNextPeriod > height))
7979 then $Tuple2(nodeCurrentLeased, nodeNextLeased)
8080 else $Tuple2(nodeNextLeased, nodeNextLeased)
8181 case _ =>
8282 $Tuple2(0, 0)
8383 }
8484 }
8585
8686
8787 func getUserLeasingEntry (nodeAddress,userAddress,userCurrentLeased,userNextLeased) = {
8888 let valueString = makeString(["%d%d%d%d", toString(currentPeriodHeight), toString(userCurrentLeased), toString(nextPeriodHeight), toString(userNextLeased)], SEP)
8989 StringEntry(keyUserLeasingNodeData(userAddress, nodeAddress), valueString)
9090 }
9191
9292
9393 func getUserLeasingData (nodeAddress,userAddress) = {
9494 let leasingDataStringRaw = getString(this, keyUserLeasingNodeData(userAddress, nodeAddress))
9595 match leasingDataStringRaw {
9696 case ds: String =>
9797 let dataList = split(ds, SEP)
9898 let userCurrentPeriod = parseIntValue(dataList[1])
9999 let userCurrentLeased = parseIntValue(dataList[2])
100100 let userNextPeriod = parseIntValue(dataList[3])
101101 let userNextLeased = parseIntValue(dataList[4])
102102 if ((userNextPeriod > height))
103103 then $Tuple2(userCurrentLeased, userNextLeased)
104104 else $Tuple2(userNextLeased, userNextLeased)
105105 case _ =>
106106 $Tuple2(0, 0)
107107 }
108108 }
109109
110110
111111 func getUserToClaimEntry (userAddress,toClaim,toUnlock) = {
112112 let valueString = makeString(["%d%d%d%d", toString(currentPeriodHeight), toString(toClaim), toString(nextPeriodHeight), toString(toUnlock)], SEP)
113113 StringEntry(keyUserToClaim(userAddress), valueString)
114114 }
115115
116116
117117 func getUserToClaimBalance (userAddress) = {
118118 let userToClaimDataRaw = getString(this, keyUserToClaim(userAddress))
119119 match userToClaimDataRaw {
120120 case ds: String =>
121121 let dataList = split(ds, SEP)
122122 let currentPeriod = parseIntValue(dataList[1])
123123 let toClaim = parseIntValue(dataList[2])
124124 let nextPeriod = parseIntValue(dataList[3])
125125 let toUnlock = parseIntValue(dataList[4])
126126 if ((nextPeriod > height))
127127 then $Tuple2(toClaim, toUnlock)
128128 else $Tuple2((toClaim + toUnlock), 0)
129129 case _ =>
130130 $Tuple2(0, 0)
131131 }
132132 }
133133
134134
135135 func getUserLeasingNodeList (userAddress) = {
136136 let leasingDataStringRaw = getString(this, keyUserLeasingNodeList(userAddress))
137137 match leasingDataStringRaw {
138138 case ds: String =>
139139 let dataList = split_51C(ds, SEP)
140140 dataList
141141 case _ =>
142142 nil
143143 }
144144 }
145145
146146
147147 func getUserNodeListEntry (userAddress,nodeList) = if ((size(nodeList) == 0))
148148 then DeleteEntry(keyUserLeasingNodeList(userAddress))
149149 else StringEntry(keyUserLeasingNodeList(userAddress), makeString_11C(nodeList, SEP))
150150
151151
152152 func addNodeToNodeList (userAddress,nodeAddress) = {
153153 let nodeList = getUserLeasingNodeList(userAddress)
154154 if (containsElement(nodeList, nodeAddress))
155155 then nodeList
156156 else (nodeList :+ nodeAddress)
157157 }
158158
159159
160160 func removeNodeFromNodeList (userAddress,nodeAddress) = {
161161 let nodeList = getUserLeasingNodeList(userAddress)
162162 match indexOf(nodeList, nodeAddress) {
163163 case index: Int =>
164164 removeByIndex(nodeList, index)
165165 case _ =>
166166 nodeList
167167 }
168168 }
169169
170170
171171 func getStakeActions (nodeAddress,userAddress,i) = {
172172 let checks = [if ((size(i.payments) == 1))
173173 then true
174174 else throwErr("payment size should be exactly 1"), if ((i.payments[0].assetId == assetIdBytes))
175175 then true
176176 else throwErr(makeString(["payment assetId should be:", assetIdString], " ")), if (isValidAddress(nodeAddress))
177177 then true
178178 else throwErr(makeString(["node address is not valid:", nodeAddress], " ")), if (isValidAddress(userAddress))
179179 then true
180180 else throwErr(makeString(["user address is not valid:", userAddress], " "))]
181181 if ((checks == checks))
182182 then {
183183 let userLeasingAmount = i.payments[0].amount
184184 let $t066986771 = getLeasingNodeData(nodeAddress)
185185 let nodeCurrentLeased = $t066986771._1
186186 let nodeNextLeased = $t066986771._2
187187 let newNodeNextLease = (nodeNextLeased + userLeasingAmount)
188188 let $t068396925 = getUserLeasingData(nodeAddress, userAddress)
189189 let userCurrentLeased = $t068396925._1
190190 let userNextLeased = $t068396925._2
191191 let newUserNextLeased = (userNextLeased + userLeasingAmount)
192192 [getLeasingNodeEntry(nodeAddress, nodeCurrentLeased, newNodeNextLease), getUserLeasingEntry(nodeAddress, userAddress, userCurrentLeased, newUserNextLeased), getUserNodeListEntry(userAddress, addNodeToNodeList(userAddress, nodeAddress))]
193193 }
194194 else throw("Strict value is not equal to itself.")
195195 }
196196
197197
198198 func getUnstakeActions (nodeAddress,userAddress,unstakeAmount) = {
199199 let $t075437616 = getLeasingNodeData(nodeAddress)
200200 let nodeCurrentLeased = $t075437616._1
201201 let nodeNextLeased = $t075437616._2
202202 let $t076217707 = getUserLeasingData(nodeAddress, userAddress)
203203 let userCurrentLeased = $t076217707._1
204204 let userNextLeased = $t076217707._2
205205 let checks = [if ((unstakeAmount > 0))
206206 then true
207207 else throwErr("unstake amount should be greater than 0"), if ((userNextLeased >= unstakeAmount))
208208 then true
209209 else throwErr("unstake amount should be less or equal user staked amount"), if ((nodeNextLeased >= unstakeAmount))
210210 then true
211211 else throwErr("unstake amount should be less or equal node staked amount"), if (isValidAddress(nodeAddress))
212212 then true
213213 else throwErr(makeString(["node address is not valid:", nodeAddress], " ")), if (isValidAddress(userAddress))
214214 then true
215215 else throwErr(makeString(["user address is not valid:", userAddress], " "))]
216216 if ((checks == checks))
217217 then {
218218 let newNodeNextLease = (nodeNextLeased - unstakeAmount)
219219 let newUserNextLeased = (userNextLeased - unstakeAmount)
220220 let $t084008505 = getUserToClaimBalance(userAddress)
221221 let toClaim = $t084008505._1
222222 let toUnlock = $t084008505._2
223223 let newToUnlock = (toUnlock + unstakeAmount)
224224 let removeNodeActions = if ((newUserNextLeased == 0))
225225 then [getUserNodeListEntry(userAddress, removeNodeFromNodeList(userAddress, nodeAddress))]
226226 else nil
227227 ([getLeasingNodeEntry(nodeAddress, nodeCurrentLeased, newNodeNextLease), getUserLeasingEntry(nodeAddress, userAddress, userCurrentLeased, newUserNextLeased), getUserToClaimEntry(userAddress, toClaim, newToUnlock)] ++ removeNodeActions)
228228 }
229229 else throw("Strict value is not equal to itself.")
230230 }
231231
232232
233233 func getClaimUnlockedActions (userAddress,claimAmount) = {
234234 let $t090759135 = getUserToClaimBalance(userAddress)
235235 let toClaim = $t090759135._1
236236 let toUnlock = $t090759135._2
237237 let checks = [if ((claimAmount > 0))
238238 then true
239239 else throwErr("claim amount should be greater than 0"), if ((toClaim >= claimAmount))
240240 then true
241241 else throwErr("claim amount should be less or equal unlocked amount"), if (isValidAddress(userAddress))
242242 then true
243243 else throwErr(makeString(["user address is not valid:", userAddress], " "))]
244244 if ((checks == checks))
245245 then {
246246 let newToClaim = (toClaim - claimAmount)
247247 [getUserToClaimEntry(userAddress, newToClaim, toUnlock), ScriptTransfer(addressFromStringValue(userAddress), claimAmount, assetIdBytes)]
248248 }
249249 else throw("Strict value is not equal to itself.")
250250 }
251251
252252
253253 func getStakeFromUnlockedActions (nodeAddress,userAddress,userLeasingAmount) = {
254254 let $t097759835 = getUserToClaimBalance(userAddress)
255255 let toClaim = $t097759835._1
256256 let toUnlock = $t097759835._2
257257 let available = (toUnlock + toClaim)
258258 let checks = [if ((userLeasingAmount > 0))
259259 then true
260260 else throwErr("amount should be greater than 0"), if ((available >= userLeasingAmount))
261261 then true
262262 else throwErr("amount should be less or equal to available"), if (isValidAddress(nodeAddress))
263263 then true
264264 else throwErr(makeString(["node address is not valid:", nodeAddress], " ")), if (isValidAddress(userAddress))
265265 then true
266266 else throwErr(makeString(["user address is not valid:", userAddress], " "))]
267267 if ((checks == checks))
268268 then {
269269 let $t01031210385 = getLeasingNodeData(nodeAddress)
270270 let nodeCurrentLeased = $t01031210385._1
271271 let nodeNextLeased = $t01031210385._2
272272 let newNodeNextLease = (nodeNextLeased + userLeasingAmount)
273273 let $t01045310539 = getUserLeasingData(nodeAddress, userAddress)
274274 let userCurrentLeased = $t01045310539._1
275275 let userNextLeased = $t01045310539._2
276276 let newUserNextLeased = (userNextLeased + userLeasingAmount)
277277 let newToUnlock = max([0, (toUnlock - userLeasingAmount)])
278278 let newToClaim = min([toClaim, (toClaim + (toUnlock - userLeasingAmount))])
279279 [getLeasingNodeEntry(nodeAddress, nodeCurrentLeased, nodeNextLeased), getUserLeasingEntry(nodeAddress, userAddress, userCurrentLeased, newUserNextLeased), getUserToClaimEntry(userAddress, newToClaim, newToUnlock), getUserNodeListEntry(userAddress, addNodeToNodeList(userAddress, nodeAddress))]
280280 }
281281 else throw("Strict value is not equal to itself.")
282282 }
283283
284284
285285 func getSetNewPeriodLengthActions (newPeriodLength) = {
286286 let check = [if ((newPeriodLength > 0))
287287 then true
288288 else throwErr("period length should be greater than 0")]
289289 if ((check == check))
290290 then if ((periodOffsetHeight == -1))
291291 then [IntegerEntry(keyPeriodLength, newPeriodLength), IntegerEntry(keyPeriodOffsetHeight, height)]
292292 else {
293293 let newPeriodOffsetId = (currentPeriodId + 1)
294294 let newOffsetHeight = ((periodLength * (newPeriodOffsetId - periodOffsetId)) + periodOffsetHeight)
295295 [IntegerEntry(keyPeriodOffsetId, newPeriodOffsetId), IntegerEntry(keyPeriodOffsetHeight, newOffsetHeight), IntegerEntry(keyPeriodLength, newPeriodLength)]
296296 }
297297 else throw("Strict value is not equal to itself.")
298298 }
299299
300300
301+func getPeriodData () = $Tuple3(height, currentPeriodHeight, nextPeriodHeight)
302+
303+
301304 @Callable(i)
302305 func setNewPeriodLength (newPeriodLength) = getSetNewPeriodLengthActions(newPeriodLength)
303306
304307
305308
306309 @Callable(i)
307-func getUserData (userAddress) = {
308- let $t01199912059 = getUserToClaimBalance(userAddress)
309- let toClaim = $t01199912059._1
310- let toUnlock = $t01199912059._2
310+func getNodeDataREADONLY (nodeAddress) = {
311+ let $t01208712151 = getLeasingNodeData(nodeAddress)
312+ let currentLease = $t01208712151._1
313+ let nextLeased = $t01208712151._2
314+ let $t01215612205 = getPeriodData()
315+ let currentPeriod = $t01215612205._1
316+ let nextPeriod = $t01215612205._2
317+ $Tuple2(nil, $Tuple4(currentLease, nextLeased, currentPeriod, nextPeriod))
318+ }
319+
320+
321+
322+@Callable(i)
323+func getUserDataREADONLY (userAddress) = {
324+ let $t01234112401 = getUserToClaimBalance(userAddress)
325+ let toClaim = $t01234112401._1
326+ let toUnlock = $t01234112401._2
311327 let nodeList = getUserLeasingNodeList(userAddress)
312- $Tuple2(nil, $Tuple3(toClaim, toUnlock, nodeList))
328+ $Tuple2(nil, $Tuple4(toClaim, toUnlock, getPeriodData(), nodeList))
313329 }
314330
315331
316332
317333 @Callable(i)
318334 func stakeFor (nodeAddress,userAddress) = getStakeActions(nodeAddress, userAddress, i)
319335
320336
321337
322338 @Callable(i)
323339 func stake (nodeAddress) = {
324340 let userAddress = toString(i.caller)
325341 getStakeActions(nodeAddress, userAddress, i)
326342 }
327343
328344
329345
330346 @Callable(i)
331347 func stakeFromUnlocked (nodeAddress,amount) = {
332348 let userAddress = toString(i.caller)
333349 getStakeFromUnlockedActions(nodeAddress, userAddress, amount)
334350 }
335351
336352
337353
338354 @Callable(i)
339355 func unstake (nodeAddress,amount) = {
340356 let userAddress = toString(i.caller)
341357 getUnstakeActions(nodeAddress, userAddress, amount)
342358 }
343359
344360
345361
346362 @Callable(i)
347363 func claim (amount) = {
348364 let userAddress = toString(i.caller)
349365 getClaimUnlockedActions(userAddress, amount)
350366 }
351367
352368
353369
354370 @Callable(i)
355371 func claimAll () = {
356372 let userAddress = toString(i.caller)
357- let $t01299513055 = getUserToClaimBalance(userAddress)
358- let toClaim = $t01299513055._1
359- let toUnlock = $t01299513055._2
373+ let $t01335413414 = getUserToClaimBalance(userAddress)
374+ let toClaim = $t01335413414._1
375+ let toUnlock = $t01335413414._2
360376 getClaimUnlockedActions(userAddress, toClaim)
361377 }
362378
363379

github/deemru/w8io/169f3d6 
40.19 ms