tx · 78wCSZXshmt5KwAVGPkv6nGCgo7PRKLS1Wa3roxGAkZi

3NCWFHDzdPHZC6636ZkMLNDup9mjpbTLs7h:  -0.01100000 Waves

2024.02.12 15:38 [2973051] smart account 3NCWFHDzdPHZC6636ZkMLNDup9mjpbTLs7h > SELF 0.00000000 Waves

{ "type": 13, "id": "78wCSZXshmt5KwAVGPkv6nGCgo7PRKLS1Wa3roxGAkZi", "fee": 1100000, "feeAssetId": null, "timestamp": 1707741531257, "version": 2, "chainId": 84, "sender": "3NCWFHDzdPHZC6636ZkMLNDup9mjpbTLs7h", "senderPublicKey": "3z8Q6Zu3KppVmn6fJJvrLc1Wo3krVHSvfaNcerm82md2", "proofs": [ "4mJSCMmQFFrtP27q1uSoJyCC6DJKrAeKER4VsSYoHoDZkeHUZQLdZ4WmUdcsWKPAgEy9fHMGAQWZUd61TeqVu2Aw" ], "script": "base64:BgIvCAISAwoBARIDCgEIEgMKAQgSBAoCCAgSAwoBCBIECgIIARIECgIIARIDCgEBEgAeAAxjb250cmFjdEZpbGUCEWwybXBfbGVhc2luZy5yaWRlAANTRVACAl9fAQh0aHJvd0VycgEDbXNnCQACAQkArAICCQCsAgIFDGNvbnRyYWN0RmlsZQICOiAFA21zZwAKa2V5QXNzZXRJZAkAuQkCCQDMCAICAiVzCQDMCAICB2Fzc2V0SWQFA25pbAUDU0VQABFrZXlQZXJpb2RPZmZzZXRJZAkAuQkCCQDMCAICAiVzCQDMCAICCG9mZnNldElkBQNuaWwFA1NFUAAVa2V5UGVyaW9kT2Zmc2V0SGVpZ2h0CQC5CQIJAMwIAgICJXMJAMwIAgIMb2Zmc2V0SGVpZ2h0BQNuaWwFA1NFUAAPa2V5UGVyaW9kTGVuZ3RoCQC5CQIJAMwIAgICJXMJAMwIAgIMcGVyaW9kTGVuZ3RoBQNuaWwFA1NFUAAOcGVyaW9kT2Zmc2V0SWQJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwURa2V5UGVyaW9kT2Zmc2V0SWQAAAAMcGVyaW9kTGVuZ3RoCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMFD2tleVBlcmlvZExlbmd0aACQTgAScGVyaW9kT2Zmc2V0SGVpZ2h0CQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMFFWtleVBlcmlvZE9mZnNldEhlaWdodAD///////////8BAA9jdXJyZW50UGVyaW9kSWQDAwkAZgIFBmhlaWdodAUScGVyaW9kT2Zmc2V0SGVpZ2h0CQECIT0CBRJwZXJpb2RPZmZzZXRIZWlnaHQA////////////AQcJAGQCCQBpAgkAZQIFBmhlaWdodAUScGVyaW9kT2Zmc2V0SGVpZ2h0BQxwZXJpb2RMZW5ndGgFDnBlcmlvZE9mZnNldElkCQCWAwEJAMwIAgAACQDMCAIJAGUCBQ5wZXJpb2RPZmZzZXRJZAABBQNuaWwAE2N1cnJlbnRQZXJpb2RIZWlnaHQJAGQCBRJwZXJpb2RPZmZzZXRIZWlnaHQJAGgCCQBlAgUPY3VycmVudFBlcmlvZElkBQ5wZXJpb2RPZmZzZXRJZAUMcGVyaW9kTGVuZ3RoABBuZXh0UGVyaW9kSGVpZ2h0CQBkAgUTY3VycmVudFBlcmlvZEhlaWdodAUMcGVyaW9kTGVuZ3RoARJrZXlMZWFzaW5nTm9kZURhdGEBC25vZGVBZGRyZXNzCQC5CQIJAMwIAgICJXMJAMwIAgULbm9kZUFkZHJlc3MFA25pbAUDU0VQAQ5rZXlVc2VyVG9DbGFpbQELdXNlckFkZHJlc3MJALkJAgkAzAgCAgQlcyVzCQDMCAICB3RvQ2xhaW0JAMwIAgULdXNlckFkZHJlc3MFA25pbAUDU0VQARZrZXlVc2VyTGVhc2luZ05vZGVEYXRhAgt1c2VyQWRkcmVzcwtub2RlQWRkcmVzcwkAuQkCCQDMCAICBCVzJXMJAMwIAgULbm9kZUFkZHJlc3MJAMwIAgULdXNlckFkZHJlc3MFA25pbAUDU0VQAA1hc3NldElkU3RyaW5nCQELdmFsdWVPckVsc2UCCQCdCAIFBHRoaXMFCmtleUFzc2V0SWQCBVdBVkVTAAxhc3NldElkQnl0ZXMDCQAAAgUNYXNzZXRJZFN0cmluZwIFV0FWRVMFBHVuaXQJANkEAQUNYXNzZXRJZFN0cmluZwEOaXNWYWxpZEFkZHJlc3MBB2FkZHJlc3MEByRtYXRjaDAJAKYIAQUHYWRkcmVzcwMJAAECBQckbWF0Y2gwAgdBZGRyZXNzBAFhBQckbWF0Y2gwBgcBE2dldExlYXNpbmdOb2RlRW50cnkDC25vZGVBZGRyZXNzDWN1cnJlbnRMZWFzZWQKbmV4dExlYXNlZAQLdmFsdWVTdHJpbmcJALkJAgkAzAgCAgglZCVkJWQlZAkAzAgCCQCkAwEFE2N1cnJlbnRQZXJpb2RIZWlnaHQJAMwIAgkApAMBBQ1jdXJyZW50TGVhc2VkCQDMCAIJAKQDAQUQbmV4dFBlcmlvZEhlaWdodAkAzAgCCQCkAwEFCm5leHRMZWFzZWQFA25pbAUDU0VQCQELU3RyaW5nRW50cnkCCQESa2V5TGVhc2luZ05vZGVEYXRhAQULbm9kZUFkZHJlc3MFC3ZhbHVlU3RyaW5nARJnZXRMZWFzaW5nTm9kZURhdGEBC25vZGVBZGRyZXNzBBhsZWFzaW5nTm9kZURhdGFTdHJpbmdSYXcJAJ0IAgUEdGhpcwkBEmtleUxlYXNpbmdOb2RlRGF0YQEFC25vZGVBZGRyZXNzBAckbWF0Y2gwBRhsZWFzaW5nTm9kZURhdGFTdHJpbmdSYXcDCQABAgUHJG1hdGNoMAIGU3RyaW5nBAJkcwUHJG1hdGNoMAQIZGF0YUxpc3QJALUJAgUCZHMFA1NFUAQRbm9kZUN1cnJlbnRQZXJpb2QJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQhkYXRhTGlzdAABBBFub2RlQ3VycmVudExlYXNlZAkBDXBhcnNlSW50VmFsdWUBCQCRAwIFCGRhdGFMaXN0AAIEDm5vZGVOZXh0UGVyaW9kCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUIZGF0YUxpc3QAAwQObm9kZU5leHRMZWFzZWQJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQhkYXRhTGlzdAAEAwkAZgIFDm5vZGVOZXh0UGVyaW9kBQZoZWlnaHQJAJQKAgURbm9kZUN1cnJlbnRMZWFzZWQFDm5vZGVOZXh0TGVhc2VkCQCUCgIFDm5vZGVOZXh0TGVhc2VkBQ5ub2RlTmV4dExlYXNlZAkAlAoCAAAAAAETZ2V0VXNlckxlYXNpbmdFbnRyeQQLbm9kZUFkZHJlc3MLdXNlckFkZHJlc3MRdXNlckN1cnJlbnRMZWFzZWQOdXNlck5leHRMZWFzZWQEC3ZhbHVlU3RyaW5nCQC5CQIJAMwIAgIIJWQlZCVkJWQJAMwIAgkApAMBBRNjdXJyZW50UGVyaW9kSGVpZ2h0CQDMCAIJAKQDAQURdXNlckN1cnJlbnRMZWFzZWQJAMwIAgkApAMBBRBuZXh0UGVyaW9kSGVpZ2h0CQDMCAIJAKQDAQUOdXNlck5leHRMZWFzZWQFA25pbAUDU0VQCQELU3RyaW5nRW50cnkCCQEWa2V5VXNlckxlYXNpbmdOb2RlRGF0YQIFC3VzZXJBZGRyZXNzBQtub2RlQWRkcmVzcwULdmFsdWVTdHJpbmcBEmdldFVzZXJMZWFzaW5nRGF0YQILbm9kZUFkZHJlc3MLdXNlckFkZHJlc3MEGGxlYXNpbmdVc2VyRGF0YVN0cmluZ1JhdwkAnQgCBQR0aGlzCQEWa2V5VXNlckxlYXNpbmdOb2RlRGF0YQIFC3VzZXJBZGRyZXNzBQtub2RlQWRkcmVzcwQHJG1hdGNoMAUYbGVhc2luZ1VzZXJEYXRhU3RyaW5nUmF3AwkAAQIFByRtYXRjaDACBlN0cmluZwQCZHMFByRtYXRjaDAECGRhdGFMaXN0CQC1CQIFAmRzBQNTRVAEEXVzZXJDdXJyZW50UGVyaW9kCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUIZGF0YUxpc3QAAQQRdXNlckN1cnJlbnRMZWFzZWQJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQhkYXRhTGlzdAACBA51c2VyTmV4dFBlcmlvZAkBDXBhcnNlSW50VmFsdWUBCQCRAwIFCGRhdGFMaXN0AAMEDnVzZXJOZXh0TGVhc2VkCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUIZGF0YUxpc3QABAMJAGYCBQ51c2VyTmV4dFBlcmlvZAUGaGVpZ2h0CQCUCgIFEXVzZXJDdXJyZW50TGVhc2VkBQ51c2VyTmV4dExlYXNlZAkAlAoCBQ51c2VyTmV4dExlYXNlZAUOdXNlck5leHRMZWFzZWQJAJQKAgAAAAABE2dldFVzZXJUb0NsYWltRW50cnkDC3VzZXJBZGRyZXNzB3RvQ2xhaW0IdG9VbmxvY2sEC3ZhbHVlU3RyaW5nCQC5CQIJAMwIAgIIJWQlZCVkJWQJAMwIAgkApAMBBRNjdXJyZW50UGVyaW9kSGVpZ2h0CQDMCAIJAKQDAQUHdG9DbGFpbQkAzAgCCQCkAwEFEG5leHRQZXJpb2RIZWlnaHQJAMwIAgkApAMBBQh0b1VubG9jawUDbmlsBQNTRVAJAQtTdHJpbmdFbnRyeQIJAQ5rZXlVc2VyVG9DbGFpbQEFC3VzZXJBZGRyZXNzBQt2YWx1ZVN0cmluZwEVZ2V0VXNlclRvQ2xhaW1CYWxhbmNlAQt1c2VyQWRkcmVzcwQYdXNlclRvQ2xhaW1EYXRhU3RyaW5nUmF3CQCdCAIFBHRoaXMJAQ5rZXlVc2VyVG9DbGFpbQEFC3VzZXJBZGRyZXNzBAckbWF0Y2gwBRh1c2VyVG9DbGFpbURhdGFTdHJpbmdSYXcDCQABAgUHJG1hdGNoMAIGU3RyaW5nBAJkcwUHJG1hdGNoMAQIZGF0YUxpc3QJALUJAgUCZHMFA1NFUAQNY3VycmVudFBlcmlvZAkBDXBhcnNlSW50VmFsdWUBCQCRAwIFCGRhdGFMaXN0AAEEB3RvQ2xhaW0JAQ1wYXJzZUludFZhbHVlAQkAkQMCBQhkYXRhTGlzdAACBApuZXh0UGVyaW9kCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUIZGF0YUxpc3QAAwQIdG9VbmxvY2sJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQhkYXRhTGlzdAAEAwkAZgIFCm5leHRQZXJpb2QFBmhlaWdodAkAlAoCBQd0b0NsYWltBQh0b1VubG9jawkAlAoCCQBkAgUHdG9DbGFpbQUIdG9VbmxvY2sAAAkAlAoCAAAAAAEPZ2V0U3Rha2VBY3Rpb25zAwtub2RlQWRkcmVzcwt1c2VyQWRkcmVzcwFpBAZjaGVja3MJAMwIAgMJAAACCQCQAwEIBQFpCHBheW1lbnRzAAEGCQEIdGhyb3dFcnIBAiBwYXltZW50IHNpemUgc2hvdWxkIGJlIGV4YWN0bHkgMQkAzAgCAwkAAAIICQCRAwIIBQFpCHBheW1lbnRzAAAHYXNzZXRJZAUMYXNzZXRJZEJ5dGVzBgkBCHRocm93RXJyAQkAuQkCCQDMCAICGnBheW1lbnQgYXNzZXRJZCBzaG91bGQgYmU6CQDMCAIFDWFzc2V0SWRTdHJpbmcFA25pbAIBIAkAzAgCAwkBDmlzVmFsaWRBZGRyZXNzAQULbm9kZUFkZHJlc3MGCQEIdGhyb3dFcnIBCQC5CQIJAMwIAgIabm9kZSBhZGRyZXNzIGlzIG5vdCB2YWxpZDoJAMwIAgULbm9kZUFkZHJlc3MFA25pbAIBIAkAzAgCAwkBDmlzVmFsaWRBZGRyZXNzAQULdXNlckFkZHJlc3MGCQEIdGhyb3dFcnIBCQC5CQIJAMwIAgIadXNlciBhZGRyZXNzIGlzIG5vdCB2YWxpZDoJAMwIAgULdXNlckFkZHJlc3MFA25pbAIBIAUDbmlsAwkAAAIFBmNoZWNrcwUGY2hlY2tzBBF1c2VyTGVhc2luZ0Ftb3VudAgJAJEDAggFAWkIcGF5bWVudHMAAAZhbW91bnQECyR0MDU1MDk1NTgyCQESZ2V0TGVhc2luZ05vZGVEYXRhAQULbm9kZUFkZHJlc3MEEW5vZGVDdXJyZW50TGVhc2VkCAULJHQwNTUwOTU1ODICXzEEDm5vZGVOZXh0TGVhc2VkCAULJHQwNTUwOTU1ODICXzIEEG5ld05vZGVOZXh0TGVhc2UJAGQCBQ5ub2RlTmV4dExlYXNlZAURdXNlckxlYXNpbmdBbW91bnQECyR0MDU2NTA1NzM2CQESZ2V0VXNlckxlYXNpbmdEYXRhAgULbm9kZUFkZHJlc3MFC3VzZXJBZGRyZXNzBBF1c2VyQ3VycmVudExlYXNlZAgFCyR0MDU2NTA1NzM2Al8xBA51c2VyTmV4dExlYXNlZAgFCyR0MDU2NTA1NzM2Al8yBBFuZXdVc2VyTmV4dExlYXNlZAkAZAIFDnVzZXJOZXh0TGVhc2VkBRF1c2VyTGVhc2luZ0Ftb3VudAkAzAgCCQETZ2V0TGVhc2luZ05vZGVFbnRyeQMFC25vZGVBZGRyZXNzBRFub2RlQ3VycmVudExlYXNlZAUQbmV3Tm9kZU5leHRMZWFzZQkAzAgCCQETZ2V0VXNlckxlYXNpbmdFbnRyeQQFC25vZGVBZGRyZXNzBQt1c2VyQWRkcmVzcwURdXNlckN1cnJlbnRMZWFzZWQFEW5ld1VzZXJOZXh0TGVhc2VkBQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BEWdldFVuc3Rha2VBY3Rpb25zAwtub2RlQWRkcmVzcwt1c2VyQWRkcmVzcw11bnN0YWtlQW1vdW50BAskdDA2MDgwNjE1MwkBEmdldExlYXNpbmdOb2RlRGF0YQEFC25vZGVBZGRyZXNzBBFub2RlQ3VycmVudExlYXNlZAgFCyR0MDYwODA2MTUzAl8xBA5ub2RlTmV4dExlYXNlZAgFCyR0MDYwODA2MTUzAl8yBAskdDA2MTU4NjI0NAkBEmdldFVzZXJMZWFzaW5nRGF0YQIFC25vZGVBZGRyZXNzBQt1c2VyQWRkcmVzcwQRdXNlckN1cnJlbnRMZWFzZWQIBQskdDA2MTU4NjI0NAJfMQQOdXNlck5leHRMZWFzZWQIBQskdDA2MTU4NjI0NAJfMgQGY2hlY2tzCQDMCAIDCQBmAgUNdW5zdGFrZUFtb3VudAAABgkBCHRocm93RXJyAQIndW5zdGFrZSBhbW91bnQgc2hvdWxkIGJlIGdyZWF0ZXIgdGhhbiAwCQDMCAIDCQBnAgUOdXNlck5leHRMZWFzZWQFDXVuc3Rha2VBbW91bnQGCQEIdGhyb3dFcnIBAjl1bnN0YWtlIGFtb3VudCBzaG91bGQgYmUgbGVzcyBvciBlcXVhbCB1c2VyIHN0YWtlZCBhbW91bnQJAMwIAgMJAGcCBQ5ub2RlTmV4dExlYXNlZAUNdW5zdGFrZUFtb3VudAYJAQh0aHJvd0VycgECOXVuc3Rha2UgYW1vdW50IHNob3VsZCBiZSBsZXNzIG9yIGVxdWFsIG5vZGUgc3Rha2VkIGFtb3VudAkAzAgCAwkBDmlzVmFsaWRBZGRyZXNzAQULbm9kZUFkZHJlc3MGCQEIdGhyb3dFcnIBCQC5CQIJAMwIAgIabm9kZSBhZGRyZXNzIGlzIG5vdCB2YWxpZDoJAMwIAgULbm9kZUFkZHJlc3MFA25pbAIBIAkAzAgCAwkBDmlzVmFsaWRBZGRyZXNzAQULdXNlckFkZHJlc3MGCQEIdGhyb3dFcnIBCQC5CQIJAMwIAgIadXNlciBhZGRyZXNzIGlzIG5vdCB2YWxpZDoJAMwIAgULdXNlckFkZHJlc3MFA25pbAIBIAUDbmlsAwkAAAIFBmNoZWNrcwUGY2hlY2tzBBBuZXdOb2RlTmV4dExlYXNlCQBlAgUObm9kZU5leHRMZWFzZWQFDXVuc3Rha2VBbW91bnQEEW5ld1VzZXJOZXh0TGVhc2VkCQBlAgUOdXNlck5leHRMZWFzZWQFDXVuc3Rha2VBbW91bnQECyR0MDY5Mzc3MDQyCQEVZ2V0VXNlclRvQ2xhaW1CYWxhbmNlAQULdXNlckFkZHJlc3MEB3RvQ2xhaW0IBQskdDA2OTM3NzA0MgJfMQQIdG9VbmxvY2sIBQskdDA2OTM3NzA0MgJfMgQLbmV3VG9VbmxvY2sJAGQCBQh0b1VubG9jawUNdW5zdGFrZUFtb3VudAkAzAgCCQETZ2V0TGVhc2luZ05vZGVFbnRyeQMFC25vZGVBZGRyZXNzBRFub2RlQ3VycmVudExlYXNlZAUQbmV3Tm9kZU5leHRMZWFzZQkAzAgCCQETZ2V0VXNlckxlYXNpbmdFbnRyeQQFC25vZGVBZGRyZXNzBQt1c2VyQWRkcmVzcwURdXNlckN1cnJlbnRMZWFzZWQFEW5ld1VzZXJOZXh0TGVhc2VkCQDMCAIJARNnZXRVc2VyVG9DbGFpbUVudHJ5AwULdXNlckFkZHJlc3MFB3RvQ2xhaW0FC25ld1RvVW5sb2NrBQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BF2dldENsYWltVW5sb2NrZWRBY3Rpb25zAgt1c2VyQWRkcmVzcwtjbGFpbUFtb3VudAQLJHQwNzQxNzc0NzcJARVnZXRVc2VyVG9DbGFpbUJhbGFuY2UBBQt1c2VyQWRkcmVzcwQHdG9DbGFpbQgFCyR0MDc0MTc3NDc3Al8xBAh0b1VubG9jawgFCyR0MDc0MTc3NDc3Al8yBAZjaGVja3MJAMwIAgMJAGYCBQtjbGFpbUFtb3VudAAABgkBCHRocm93RXJyAQIlY2xhaW0gYW1vdW50IHNob3VsZCBiZSBncmVhdGVyIHRoYW4gMAkAzAgCAwkAZwIFB3RvQ2xhaW0FC2NsYWltQW1vdW50BgkBCHRocm93RXJyAQI0Y2xhaW0gYW1vdW50IHNob3VsZCBiZSBsZXNzIG9yIGVxdWFsIHVubG9ja2VkIGFtb3VudAkAzAgCAwkBDmlzVmFsaWRBZGRyZXNzAQULdXNlckFkZHJlc3MGCQEIdGhyb3dFcnIBCQC5CQIJAMwIAgIadXNlciBhZGRyZXNzIGlzIG5vdCB2YWxpZDoJAMwIAgULdXNlckFkZHJlc3MFA25pbAIBIAUDbmlsAwkAAAIFBmNoZWNrcwUGY2hlY2tzBApuZXdUb0NsYWltCQBlAgUHdG9DbGFpbQULY2xhaW1BbW91bnQJAMwIAgkBE2dldFVzZXJUb0NsYWltRW50cnkDBQt1c2VyQWRkcmVzcwUKbmV3VG9DbGFpbQUIdG9VbmxvY2sJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwkBEUBleHRyTmF0aXZlKDEwNjIpAQULdXNlckFkZHJlc3MFC2NsYWltQW1vdW50BQxhc3NldElkQnl0ZXMFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgEbZ2V0U3Rha2VGcm9tVW5sb2NrZWRBY3Rpb25zAwtub2RlQWRkcmVzcwt1c2VyQWRkcmVzcxF1c2VyTGVhc2luZ0Ftb3VudAQLJHQwODExNzgxNzcJARVnZXRVc2VyVG9DbGFpbUJhbGFuY2UBBQt1c2VyQWRkcmVzcwQHdG9DbGFpbQgFCyR0MDgxMTc4MTc3Al8xBAh0b1VubG9jawgFCyR0MDgxMTc4MTc3Al8yBAlhdmFpbGFibGUJAGQCBQh0b1VubG9jawUHdG9DbGFpbQQGY2hlY2tzCQDMCAIDCQBmAgURdXNlckxlYXNpbmdBbW91bnQAAAYJAQh0aHJvd0VycgECH2Ftb3VudCBzaG91bGQgYmUgZ3JlYXRlciB0aGFuIDAJAMwIAgMJAGcCBQlhdmFpbGFibGUFEXVzZXJMZWFzaW5nQW1vdW50BgkBCHRocm93RXJyAQIrYW1vdW50IHNob3VsZCBiZSBsZXNzIG9yIGVxdWFsIHRvIGF2YWlsYWJsZQkAzAgCAwkBDmlzVmFsaWRBZGRyZXNzAQULbm9kZUFkZHJlc3MGCQEIdGhyb3dFcnIBCQC5CQIJAMwIAgIabm9kZSBhZGRyZXNzIGlzIG5vdCB2YWxpZDoJAMwIAgULbm9kZUFkZHJlc3MFA25pbAIBIAkAzAgCAwkBDmlzVmFsaWRBZGRyZXNzAQULdXNlckFkZHJlc3MGCQEIdGhyb3dFcnIBCQC5CQIJAMwIAgIadXNlciBhZGRyZXNzIGlzIG5vdCB2YWxpZDoJAMwIAgULdXNlckFkZHJlc3MFA25pbAIBIAUDbmlsAwkAAAIFBmNoZWNrcwUGY2hlY2tzBAskdDA4NjU0ODcyNwkBEmdldExlYXNpbmdOb2RlRGF0YQEFC25vZGVBZGRyZXNzBBFub2RlQ3VycmVudExlYXNlZAgFCyR0MDg2NTQ4NzI3Al8xBA5ub2RlTmV4dExlYXNlZAgFCyR0MDg2NTQ4NzI3Al8yBBBuZXdOb2RlTmV4dExlYXNlCQBkAgUObm9kZU5leHRMZWFzZWQFEXVzZXJMZWFzaW5nQW1vdW50BAskdDA4Nzk1ODg4MQkBEmdldFVzZXJMZWFzaW5nRGF0YQIFC25vZGVBZGRyZXNzBQt1c2VyQWRkcmVzcwQRdXNlckN1cnJlbnRMZWFzZWQIBQskdDA4Nzk1ODg4MQJfMQQOdXNlck5leHRMZWFzZWQIBQskdDA4Nzk1ODg4MQJfMgQRbmV3VXNlck5leHRMZWFzZWQJAGQCBQ51c2VyTmV4dExlYXNlZAURdXNlckxlYXNpbmdBbW91bnQEC25ld1RvVW5sb2NrCQCWAwEJAMwIAgAACQDMCAIJAGUCBQh0b1VubG9jawURdXNlckxlYXNpbmdBbW91bnQFA25pbAQKbmV3VG9DbGFpbQkAlwMBCQDMCAIFB3RvQ2xhaW0JAMwIAgkAZAIFB3RvQ2xhaW0JAGUCBQh0b1VubG9jawURdXNlckxlYXNpbmdBbW91bnQFA25pbAkAzAgCCQETZ2V0TGVhc2luZ05vZGVFbnRyeQMFC25vZGVBZGRyZXNzBRFub2RlQ3VycmVudExlYXNlZAUObm9kZU5leHRMZWFzZWQJAMwIAgkBE2dldFVzZXJMZWFzaW5nRW50cnkEBQtub2RlQWRkcmVzcwULdXNlckFkZHJlc3MFEXVzZXJDdXJyZW50TGVhc2VkBRFuZXdVc2VyTmV4dExlYXNlZAkAzAgCCQETZ2V0VXNlclRvQ2xhaW1FbnRyeQMFC3VzZXJBZGRyZXNzBQpuZXdUb0NsYWltBQtuZXdUb1VubG9jawUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuARxnZXRTZXROZXdQZXJpb2RMZW5ndGhBY3Rpb25zAQ9uZXdQZXJpb2RMZW5ndGgEBWNoZWNrCQDMCAIDCQBmAgUPbmV3UGVyaW9kTGVuZ3RoAAAGCQEIdGhyb3dFcnIBAiZwZXJpb2QgbGVuZ3RoIHNob3VsZCBiZSBncmVhdGVyIHRoYW4gMAUDbmlsAwkAAAIFBWNoZWNrBQVjaGVjawMJAAACBRJwZXJpb2RPZmZzZXRIZWlnaHQA////////////AQkAzAgCCQEMSW50ZWdlckVudHJ5AgUPa2V5UGVyaW9kTGVuZ3RoBQ9uZXdQZXJpb2RMZW5ndGgJAMwIAgkBDEludGVnZXJFbnRyeQIFFWtleVBlcmlvZE9mZnNldEhlaWdodAUGaGVpZ2h0BQNuaWwEEW5ld1BlcmlvZE9mZnNldElkCQBkAgUPY3VycmVudFBlcmlvZElkAAEED25ld09mZnNldEhlaWdodAkAZAIJAGgCBQxwZXJpb2RMZW5ndGgJAGUCBRFuZXdQZXJpb2RPZmZzZXRJZAUOcGVyaW9kT2Zmc2V0SWQFEnBlcmlvZE9mZnNldEhlaWdodAkAzAgCCQEMSW50ZWdlckVudHJ5AgURa2V5UGVyaW9kT2Zmc2V0SWQFEW5ld1BlcmlvZE9mZnNldElkCQDMCAIJAQxJbnRlZ2VyRW50cnkCBRVrZXlQZXJpb2RPZmZzZXRIZWlnaHQFD25ld09mZnNldEhlaWdodAkAzAgCCQEMSW50ZWdlckVudHJ5AgUPa2V5UGVyaW9kTGVuZ3RoBQ9uZXdQZXJpb2RMZW5ndGgFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkBaQESc2V0TmV3UGVyaW9kTGVuZ3RoAQ9uZXdQZXJpb2RMZW5ndGgJARxnZXRTZXROZXdQZXJpb2RMZW5ndGhBY3Rpb25zAQUPbmV3UGVyaW9kTGVuZ3RoAWkBE2dldE5vZGVEYXRhUkVBRE9OTFkBC25vZGVBZGRyZXNzBA0kdDAxMDI2MTEwMzI1CQESZ2V0TGVhc2luZ05vZGVEYXRhAQULbm9kZUFkZHJlc3MEDGN1cnJlbnRMZWFzZQgFDSR0MDEwMjYxMTAzMjUCXzEECm5leHRMZWFzZWQIBQ0kdDAxMDI2MTEwMzI1Al8yCQCUCgIFA25pbAkAlwoFBRNjdXJyZW50UGVyaW9kSGVpZ2h0BQxjdXJyZW50TGVhc2UFEG5leHRQZXJpb2RIZWlnaHQFCm5leHRMZWFzZWQFBmhlaWdodAFpARNnZXRVc2VyRGF0YVJFQURPTkxZAQt1c2VyQWRkcmVzcwQNJHQwMTA0ODExMDU0MQkBFWdldFVzZXJUb0NsYWltQmFsYW5jZQEFC3VzZXJBZGRyZXNzBAd0b0NsYWltCAUNJHQwMTA0ODExMDU0MQJfMQQIdG9VbmxvY2sIBQ0kdDAxMDQ4MTEwNTQxAl8yCQCUCgIFA25pbAkAlwoFBRNjdXJyZW50UGVyaW9kSGVpZ2h0BQd0b0NsYWltBRBuZXh0UGVyaW9kSGVpZ2h0BQh0b1VubG9jawUGaGVpZ2h0AWkBCHN0YWtlRm9yAgtub2RlQWRkcmVzcwt1c2VyQWRkcmVzcwkBD2dldFN0YWtlQWN0aW9ucwMFC25vZGVBZGRyZXNzBQt1c2VyQWRkcmVzcwUBaQFpAQVzdGFrZQELbm9kZUFkZHJlc3MEC3VzZXJBZGRyZXNzCQClCAEIBQFpBmNhbGxlcgkBD2dldFN0YWtlQWN0aW9ucwMFC25vZGVBZGRyZXNzBQt1c2VyQWRkcmVzcwUBaQFpARFzdGFrZUZyb21VbmxvY2tlZAILbm9kZUFkZHJlc3MGYW1vdW50BAt1c2VyQWRkcmVzcwkApQgBCAUBaQZjYWxsZXIJARtnZXRTdGFrZUZyb21VbmxvY2tlZEFjdGlvbnMDBQtub2RlQWRkcmVzcwULdXNlckFkZHJlc3MFBmFtb3VudAFpAQd1bnN0YWtlAgtub2RlQWRkcmVzcwZhbW91bnQEC3VzZXJBZGRyZXNzCQClCAEIBQFpBmNhbGxlcgkBEWdldFVuc3Rha2VBY3Rpb25zAwULbm9kZUFkZHJlc3MFC3VzZXJBZGRyZXNzBQZhbW91bnQBaQEFY2xhaW0BBmFtb3VudAQLdXNlckFkZHJlc3MJAKUIAQgFAWkGY2FsbGVyCQEXZ2V0Q2xhaW1VbmxvY2tlZEFjdGlvbnMCBQt1c2VyQWRkcmVzcwUGYW1vdW50AWkBCGNsYWltQWxsAAQLdXNlckFkZHJlc3MJAKUIAQgFAWkGY2FsbGVyBA0kdDAxMTQ1OTExNTE5CQEVZ2V0VXNlclRvQ2xhaW1CYWxhbmNlAQULdXNlckFkZHJlc3MEB3RvQ2xhaW0IBQ0kdDAxMTQ1OTExNTE5Al8xBAh0b1VubG9jawgFDSR0MDExNDU5MTE1MTkCXzIJARdnZXRDbGFpbVVubG9ja2VkQWN0aW9ucwIFC3VzZXJBZGRyZXNzBQd0b0NsYWltAK6xtYc=", "height": 2973051, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: HsjWvuS1WgMYTbsG5ziMVtVzZx916WBJ9B2VuSC7MSxi Next: BnxhjRvsFxx5GWYAGufgqtCv1BbJxM2tH3hs67eYkZd7 Diff:
OldNewDifferences
44 let contractFile = "l2mp_leasing.ride"
55
66 let SEP = "__"
7-
8-let scale8 = 100000000
97
108 func throwErr (msg) = throw(((contractFile + ": ") + msg))
119
3735 func keyLeasingNodeData (nodeAddress) = makeString(["%s", nodeAddress], SEP)
3836
3937
40-func keyUserLeasingNodeList (userAddress) = makeString(["%s%s", "userLeasingNodeList", userAddress], SEP)
38+func keyUserToClaim (userAddress) = makeString(["%s%s", "toClaim", userAddress], SEP)
4139
4240
4341 func keyUserLeasingNodeData (userAddress,nodeAddress) = makeString(["%s%s", nodeAddress, userAddress], SEP)
44-
45-
46-func keyUserToClaim (userAddress) = makeString(["%s%s", "toClaim", userAddress], SEP)
4742
4843
4944 let assetIdString = valueOrElse(getString(this, keyAssetId), "WAVES")
6762
6863
6964 func getLeasingNodeData (nodeAddress) = {
70- let leasingDataStringRaw = getString(this, keyLeasingNodeData(nodeAddress))
71- match leasingDataStringRaw {
65+ let leasingNodeDataStringRaw = getString(this, keyLeasingNodeData(nodeAddress))
66+ match leasingNodeDataStringRaw {
7267 case ds: String =>
7368 let dataList = split(ds, SEP)
7469 let nodeCurrentPeriod = parseIntValue(dataList[1])
9186
9287
9388 func getUserLeasingData (nodeAddress,userAddress) = {
94- let leasingDataStringRaw = getString(this, keyUserLeasingNodeData(userAddress, nodeAddress))
95- match leasingDataStringRaw {
89+ let leasingUserDataStringRaw = getString(this, keyUserLeasingNodeData(userAddress, nodeAddress))
90+ match leasingUserDataStringRaw {
9691 case ds: String =>
9792 let dataList = split(ds, SEP)
9893 let userCurrentPeriod = parseIntValue(dataList[1])
115110
116111
117112 func getUserToClaimBalance (userAddress) = {
118- let userToClaimDataRaw = getString(this, keyUserToClaim(userAddress))
119- match userToClaimDataRaw {
113+ let userToClaimDataStringRaw = getString(this, keyUserToClaim(userAddress))
114+ match userToClaimDataStringRaw {
120115 case ds: String =>
121116 let dataList = split(ds, SEP)
122117 let currentPeriod = parseIntValue(dataList[1])
128123 else $Tuple2((toClaim + toUnlock), 0)
129124 case _ =>
130125 $Tuple2(0, 0)
131- }
132- }
133-
134-
135-func getUserLeasingNodeList (userAddress) = {
136- let leasingDataStringRaw = getString(this, keyUserLeasingNodeList(userAddress))
137- match leasingDataStringRaw {
138- case ds: String =>
139- let dataList = split_51C(ds, SEP)
140- dataList
141- case _ =>
142- nil
143- }
144- }
145-
146-
147-func getUserNodeListEntry (userAddress,nodeList) = if ((size(nodeList) == 0))
148- then DeleteEntry(keyUserLeasingNodeList(userAddress))
149- else StringEntry(keyUserLeasingNodeList(userAddress), makeString_11C(nodeList, SEP))
150-
151-
152-func addNodeToNodeList (userAddress,nodeAddress) = {
153- let nodeList = getUserLeasingNodeList(userAddress)
154- if (containsElement(nodeList, nodeAddress))
155- then nodeList
156- else (nodeList :+ nodeAddress)
157- }
158-
159-
160-func removeNodeFromNodeList (userAddress,nodeAddress) = {
161- let nodeList = getUserLeasingNodeList(userAddress)
162- match indexOf(nodeList, nodeAddress) {
163- case index: Int =>
164- removeByIndex(nodeList, index)
165- case _ =>
166- nodeList
167126 }
168127 }
169128
181140 if ((checks == checks))
182141 then {
183142 let userLeasingAmount = i.payments[0].amount
184- let $t066986771 = getLeasingNodeData(nodeAddress)
185- let nodeCurrentLeased = $t066986771._1
186- let nodeNextLeased = $t066986771._2
143+ let $t055095582 = getLeasingNodeData(nodeAddress)
144+ let nodeCurrentLeased = $t055095582._1
145+ let nodeNextLeased = $t055095582._2
187146 let newNodeNextLease = (nodeNextLeased + userLeasingAmount)
188- let $t068396925 = getUserLeasingData(nodeAddress, userAddress)
189- let userCurrentLeased = $t068396925._1
190- let userNextLeased = $t068396925._2
147+ let $t056505736 = getUserLeasingData(nodeAddress, userAddress)
148+ let userCurrentLeased = $t056505736._1
149+ let userNextLeased = $t056505736._2
191150 let newUserNextLeased = (userNextLeased + userLeasingAmount)
192-[getLeasingNodeEntry(nodeAddress, nodeCurrentLeased, newNodeNextLease), getUserLeasingEntry(nodeAddress, userAddress, userCurrentLeased, newUserNextLeased), getUserNodeListEntry(userAddress, addNodeToNodeList(userAddress, nodeAddress))]
151+[getLeasingNodeEntry(nodeAddress, nodeCurrentLeased, newNodeNextLease), getUserLeasingEntry(nodeAddress, userAddress, userCurrentLeased, newUserNextLeased)]
193152 }
194153 else throw("Strict value is not equal to itself.")
195154 }
196155
197156
198157 func getUnstakeActions (nodeAddress,userAddress,unstakeAmount) = {
199- let $t075437616 = getLeasingNodeData(nodeAddress)
200- let nodeCurrentLeased = $t075437616._1
201- let nodeNextLeased = $t075437616._2
202- let $t076217707 = getUserLeasingData(nodeAddress, userAddress)
203- let userCurrentLeased = $t076217707._1
204- let userNextLeased = $t076217707._2
158+ let $t060806153 = getLeasingNodeData(nodeAddress)
159+ let nodeCurrentLeased = $t060806153._1
160+ let nodeNextLeased = $t060806153._2
161+ let $t061586244 = getUserLeasingData(nodeAddress, userAddress)
162+ let userCurrentLeased = $t061586244._1
163+ let userNextLeased = $t061586244._2
205164 let checks = [if ((unstakeAmount > 0))
206165 then true
207166 else throwErr("unstake amount should be greater than 0"), if ((userNextLeased >= unstakeAmount))
217176 then {
218177 let newNodeNextLease = (nodeNextLeased - unstakeAmount)
219178 let newUserNextLeased = (userNextLeased - unstakeAmount)
220- let $t084008505 = getUserToClaimBalance(userAddress)
221- let toClaim = $t084008505._1
222- let toUnlock = $t084008505._2
179+ let $t069377042 = getUserToClaimBalance(userAddress)
180+ let toClaim = $t069377042._1
181+ let toUnlock = $t069377042._2
223182 let newToUnlock = (toUnlock + unstakeAmount)
224- let removeNodeActions = if ((newUserNextLeased == 0))
225- then [getUserNodeListEntry(userAddress, removeNodeFromNodeList(userAddress, nodeAddress))]
226- else nil
227- ([getLeasingNodeEntry(nodeAddress, nodeCurrentLeased, newNodeNextLease), getUserLeasingEntry(nodeAddress, userAddress, userCurrentLeased, newUserNextLeased), getUserToClaimEntry(userAddress, toClaim, newToUnlock)] ++ removeNodeActions)
183+[getLeasingNodeEntry(nodeAddress, nodeCurrentLeased, newNodeNextLease), getUserLeasingEntry(nodeAddress, userAddress, userCurrentLeased, newUserNextLeased), getUserToClaimEntry(userAddress, toClaim, newToUnlock)]
228184 }
229185 else throw("Strict value is not equal to itself.")
230186 }
231187
232188
233189 func getClaimUnlockedActions (userAddress,claimAmount) = {
234- let $t090759135 = getUserToClaimBalance(userAddress)
235- let toClaim = $t090759135._1
236- let toUnlock = $t090759135._2
190+ let $t074177477 = getUserToClaimBalance(userAddress)
191+ let toClaim = $t074177477._1
192+ let toUnlock = $t074177477._2
237193 let checks = [if ((claimAmount > 0))
238194 then true
239195 else throwErr("claim amount should be greater than 0"), if ((toClaim >= claimAmount))
251207
252208
253209 func getStakeFromUnlockedActions (nodeAddress,userAddress,userLeasingAmount) = {
254- let $t097759835 = getUserToClaimBalance(userAddress)
255- let toClaim = $t097759835._1
256- let toUnlock = $t097759835._2
210+ let $t081178177 = getUserToClaimBalance(userAddress)
211+ let toClaim = $t081178177._1
212+ let toUnlock = $t081178177._2
257213 let available = (toUnlock + toClaim)
258214 let checks = [if ((userLeasingAmount > 0))
259215 then true
266222 else throwErr(makeString(["user address is not valid:", userAddress], " "))]
267223 if ((checks == checks))
268224 then {
269- let $t01031210385 = getLeasingNodeData(nodeAddress)
270- let nodeCurrentLeased = $t01031210385._1
271- let nodeNextLeased = $t01031210385._2
225+ let $t086548727 = getLeasingNodeData(nodeAddress)
226+ let nodeCurrentLeased = $t086548727._1
227+ let nodeNextLeased = $t086548727._2
272228 let newNodeNextLease = (nodeNextLeased + userLeasingAmount)
273- let $t01045310539 = getUserLeasingData(nodeAddress, userAddress)
274- let userCurrentLeased = $t01045310539._1
275- let userNextLeased = $t01045310539._2
229+ let $t087958881 = getUserLeasingData(nodeAddress, userAddress)
230+ let userCurrentLeased = $t087958881._1
231+ let userNextLeased = $t087958881._2
276232 let newUserNextLeased = (userNextLeased + userLeasingAmount)
277233 let newToUnlock = max([0, (toUnlock - userLeasingAmount)])
278234 let newToClaim = min([toClaim, (toClaim + (toUnlock - userLeasingAmount))])
279-[getLeasingNodeEntry(nodeAddress, nodeCurrentLeased, nodeNextLeased), getUserLeasingEntry(nodeAddress, userAddress, userCurrentLeased, newUserNextLeased), getUserToClaimEntry(userAddress, newToClaim, newToUnlock), getUserNodeListEntry(userAddress, addNodeToNodeList(userAddress, nodeAddress))]
235+[getLeasingNodeEntry(nodeAddress, nodeCurrentLeased, nodeNextLeased), getUserLeasingEntry(nodeAddress, userAddress, userCurrentLeased, newUserNextLeased), getUserToClaimEntry(userAddress, newToClaim, newToUnlock)]
280236 }
281237 else throw("Strict value is not equal to itself.")
282238 }
305261
306262 @Callable(i)
307263 func getNodeDataREADONLY (nodeAddress) = {
308- let $t01200712071 = getLeasingNodeData(nodeAddress)
309- let currentLease = $t01200712071._1
310- let nextLeased = $t01200712071._2
264+ let $t01026110325 = getLeasingNodeData(nodeAddress)
265+ let currentLease = $t01026110325._1
266+ let nextLeased = $t01026110325._2
311267 $Tuple2(nil, $Tuple5(currentPeriodHeight, currentLease, nextPeriodHeight, nextLeased, height))
312268 }
313269
315271
316272 @Callable(i)
317273 func getUserDataREADONLY (userAddress) = {
318- let $t01222712287 = getUserToClaimBalance(userAddress)
319- let toClaim = $t01222712287._1
320- let toUnlock = $t01222712287._2
321- let nodeList = getUserLeasingNodeList(userAddress)
322- $Tuple2(nil, $Tuple6(currentPeriodHeight, toClaim, nextPeriodHeight, toUnlock, height, nodeList))
274+ let $t01048110541 = getUserToClaimBalance(userAddress)
275+ let toClaim = $t01048110541._1
276+ let toUnlock = $t01048110541._2
277+ $Tuple2(nil, $Tuple5(currentPeriodHeight, toClaim, nextPeriodHeight, toUnlock, height))
323278 }
324279
325280
364319 @Callable(i)
365320 func claimAll () = {
366321 let userAddress = toString(i.caller)
367- let $t01327013330 = getUserToClaimBalance(userAddress)
368- let toClaim = $t01327013330._1
369- let toUnlock = $t01327013330._2
322+ let $t01145911519 = getUserToClaimBalance(userAddress)
323+ let toClaim = $t01145911519._1
324+ let toUnlock = $t01145911519._2
370325 getClaimUnlockedActions(userAddress, toClaim)
371326 }
372327
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let contractFile = "l2mp_leasing.ride"
55
66 let SEP = "__"
7-
8-let scale8 = 100000000
97
108 func throwErr (msg) = throw(((contractFile + ": ") + msg))
119
1210
1311 let keyAssetId = makeString(["%s", "assetId"], SEP)
1412
1513 let keyPeriodOffsetId = makeString(["%s", "offsetId"], SEP)
1614
1715 let keyPeriodOffsetHeight = makeString(["%s", "offsetHeight"], SEP)
1816
1917 let keyPeriodLength = makeString(["%s", "periodLength"], SEP)
2018
2119 let periodOffsetId = valueOrElse(getInteger(this, keyPeriodOffsetId), 0)
2220
2321 let periodLength = valueOrElse(getInteger(this, keyPeriodLength), 10000)
2422
2523 let periodOffsetHeight = valueOrElse(getInteger(this, keyPeriodOffsetHeight), -1)
2624
2725 let currentPeriodId = if (if ((height > periodOffsetHeight))
2826 then (periodOffsetHeight != -1)
2927 else false)
3028 then (((height - periodOffsetHeight) / periodLength) + periodOffsetId)
3129 else max([0, (periodOffsetId - 1)])
3230
3331 let currentPeriodHeight = (periodOffsetHeight + ((currentPeriodId - periodOffsetId) * periodLength))
3432
3533 let nextPeriodHeight = (currentPeriodHeight + periodLength)
3634
3735 func keyLeasingNodeData (nodeAddress) = makeString(["%s", nodeAddress], SEP)
3836
3937
40-func keyUserLeasingNodeList (userAddress) = makeString(["%s%s", "userLeasingNodeList", userAddress], SEP)
38+func keyUserToClaim (userAddress) = makeString(["%s%s", "toClaim", userAddress], SEP)
4139
4240
4341 func keyUserLeasingNodeData (userAddress,nodeAddress) = makeString(["%s%s", nodeAddress, userAddress], SEP)
44-
45-
46-func keyUserToClaim (userAddress) = makeString(["%s%s", "toClaim", userAddress], SEP)
4742
4843
4944 let assetIdString = valueOrElse(getString(this, keyAssetId), "WAVES")
5045
5146 let assetIdBytes = if ((assetIdString == "WAVES"))
5247 then unit
5348 else fromBase58String(assetIdString)
5449
5550 func isValidAddress (address) = match addressFromString(address) {
5651 case a: Address =>
5752 true
5853 case _ =>
5954 false
6055 }
6156
6257
6358 func getLeasingNodeEntry (nodeAddress,currentLeased,nextLeased) = {
6459 let valueString = makeString(["%d%d%d%d", toString(currentPeriodHeight), toString(currentLeased), toString(nextPeriodHeight), toString(nextLeased)], SEP)
6560 StringEntry(keyLeasingNodeData(nodeAddress), valueString)
6661 }
6762
6863
6964 func getLeasingNodeData (nodeAddress) = {
70- let leasingDataStringRaw = getString(this, keyLeasingNodeData(nodeAddress))
71- match leasingDataStringRaw {
65+ let leasingNodeDataStringRaw = getString(this, keyLeasingNodeData(nodeAddress))
66+ match leasingNodeDataStringRaw {
7267 case ds: String =>
7368 let dataList = split(ds, SEP)
7469 let nodeCurrentPeriod = parseIntValue(dataList[1])
7570 let nodeCurrentLeased = parseIntValue(dataList[2])
7671 let nodeNextPeriod = parseIntValue(dataList[3])
7772 let nodeNextLeased = parseIntValue(dataList[4])
7873 if ((nodeNextPeriod > height))
7974 then $Tuple2(nodeCurrentLeased, nodeNextLeased)
8075 else $Tuple2(nodeNextLeased, nodeNextLeased)
8176 case _ =>
8277 $Tuple2(0, 0)
8378 }
8479 }
8580
8681
8782 func getUserLeasingEntry (nodeAddress,userAddress,userCurrentLeased,userNextLeased) = {
8883 let valueString = makeString(["%d%d%d%d", toString(currentPeriodHeight), toString(userCurrentLeased), toString(nextPeriodHeight), toString(userNextLeased)], SEP)
8984 StringEntry(keyUserLeasingNodeData(userAddress, nodeAddress), valueString)
9085 }
9186
9287
9388 func getUserLeasingData (nodeAddress,userAddress) = {
94- let leasingDataStringRaw = getString(this, keyUserLeasingNodeData(userAddress, nodeAddress))
95- match leasingDataStringRaw {
89+ let leasingUserDataStringRaw = getString(this, keyUserLeasingNodeData(userAddress, nodeAddress))
90+ match leasingUserDataStringRaw {
9691 case ds: String =>
9792 let dataList = split(ds, SEP)
9893 let userCurrentPeriod = parseIntValue(dataList[1])
9994 let userCurrentLeased = parseIntValue(dataList[2])
10095 let userNextPeriod = parseIntValue(dataList[3])
10196 let userNextLeased = parseIntValue(dataList[4])
10297 if ((userNextPeriod > height))
10398 then $Tuple2(userCurrentLeased, userNextLeased)
10499 else $Tuple2(userNextLeased, userNextLeased)
105100 case _ =>
106101 $Tuple2(0, 0)
107102 }
108103 }
109104
110105
111106 func getUserToClaimEntry (userAddress,toClaim,toUnlock) = {
112107 let valueString = makeString(["%d%d%d%d", toString(currentPeriodHeight), toString(toClaim), toString(nextPeriodHeight), toString(toUnlock)], SEP)
113108 StringEntry(keyUserToClaim(userAddress), valueString)
114109 }
115110
116111
117112 func getUserToClaimBalance (userAddress) = {
118- let userToClaimDataRaw = getString(this, keyUserToClaim(userAddress))
119- match userToClaimDataRaw {
113+ let userToClaimDataStringRaw = getString(this, keyUserToClaim(userAddress))
114+ match userToClaimDataStringRaw {
120115 case ds: String =>
121116 let dataList = split(ds, SEP)
122117 let currentPeriod = parseIntValue(dataList[1])
123118 let toClaim = parseIntValue(dataList[2])
124119 let nextPeriod = parseIntValue(dataList[3])
125120 let toUnlock = parseIntValue(dataList[4])
126121 if ((nextPeriod > height))
127122 then $Tuple2(toClaim, toUnlock)
128123 else $Tuple2((toClaim + toUnlock), 0)
129124 case _ =>
130125 $Tuple2(0, 0)
131- }
132- }
133-
134-
135-func getUserLeasingNodeList (userAddress) = {
136- let leasingDataStringRaw = getString(this, keyUserLeasingNodeList(userAddress))
137- match leasingDataStringRaw {
138- case ds: String =>
139- let dataList = split_51C(ds, SEP)
140- dataList
141- case _ =>
142- nil
143- }
144- }
145-
146-
147-func getUserNodeListEntry (userAddress,nodeList) = if ((size(nodeList) == 0))
148- then DeleteEntry(keyUserLeasingNodeList(userAddress))
149- else StringEntry(keyUserLeasingNodeList(userAddress), makeString_11C(nodeList, SEP))
150-
151-
152-func addNodeToNodeList (userAddress,nodeAddress) = {
153- let nodeList = getUserLeasingNodeList(userAddress)
154- if (containsElement(nodeList, nodeAddress))
155- then nodeList
156- else (nodeList :+ nodeAddress)
157- }
158-
159-
160-func removeNodeFromNodeList (userAddress,nodeAddress) = {
161- let nodeList = getUserLeasingNodeList(userAddress)
162- match indexOf(nodeList, nodeAddress) {
163- case index: Int =>
164- removeByIndex(nodeList, index)
165- case _ =>
166- nodeList
167126 }
168127 }
169128
170129
171130 func getStakeActions (nodeAddress,userAddress,i) = {
172131 let checks = [if ((size(i.payments) == 1))
173132 then true
174133 else throwErr("payment size should be exactly 1"), if ((i.payments[0].assetId == assetIdBytes))
175134 then true
176135 else throwErr(makeString(["payment assetId should be:", assetIdString], " ")), if (isValidAddress(nodeAddress))
177136 then true
178137 else throwErr(makeString(["node address is not valid:", nodeAddress], " ")), if (isValidAddress(userAddress))
179138 then true
180139 else throwErr(makeString(["user address is not valid:", userAddress], " "))]
181140 if ((checks == checks))
182141 then {
183142 let userLeasingAmount = i.payments[0].amount
184- let $t066986771 = getLeasingNodeData(nodeAddress)
185- let nodeCurrentLeased = $t066986771._1
186- let nodeNextLeased = $t066986771._2
143+ let $t055095582 = getLeasingNodeData(nodeAddress)
144+ let nodeCurrentLeased = $t055095582._1
145+ let nodeNextLeased = $t055095582._2
187146 let newNodeNextLease = (nodeNextLeased + userLeasingAmount)
188- let $t068396925 = getUserLeasingData(nodeAddress, userAddress)
189- let userCurrentLeased = $t068396925._1
190- let userNextLeased = $t068396925._2
147+ let $t056505736 = getUserLeasingData(nodeAddress, userAddress)
148+ let userCurrentLeased = $t056505736._1
149+ let userNextLeased = $t056505736._2
191150 let newUserNextLeased = (userNextLeased + userLeasingAmount)
192-[getLeasingNodeEntry(nodeAddress, nodeCurrentLeased, newNodeNextLease), getUserLeasingEntry(nodeAddress, userAddress, userCurrentLeased, newUserNextLeased), getUserNodeListEntry(userAddress, addNodeToNodeList(userAddress, nodeAddress))]
151+[getLeasingNodeEntry(nodeAddress, nodeCurrentLeased, newNodeNextLease), getUserLeasingEntry(nodeAddress, userAddress, userCurrentLeased, newUserNextLeased)]
193152 }
194153 else throw("Strict value is not equal to itself.")
195154 }
196155
197156
198157 func getUnstakeActions (nodeAddress,userAddress,unstakeAmount) = {
199- let $t075437616 = getLeasingNodeData(nodeAddress)
200- let nodeCurrentLeased = $t075437616._1
201- let nodeNextLeased = $t075437616._2
202- let $t076217707 = getUserLeasingData(nodeAddress, userAddress)
203- let userCurrentLeased = $t076217707._1
204- let userNextLeased = $t076217707._2
158+ let $t060806153 = getLeasingNodeData(nodeAddress)
159+ let nodeCurrentLeased = $t060806153._1
160+ let nodeNextLeased = $t060806153._2
161+ let $t061586244 = getUserLeasingData(nodeAddress, userAddress)
162+ let userCurrentLeased = $t061586244._1
163+ let userNextLeased = $t061586244._2
205164 let checks = [if ((unstakeAmount > 0))
206165 then true
207166 else throwErr("unstake amount should be greater than 0"), if ((userNextLeased >= unstakeAmount))
208167 then true
209168 else throwErr("unstake amount should be less or equal user staked amount"), if ((nodeNextLeased >= unstakeAmount))
210169 then true
211170 else throwErr("unstake amount should be less or equal node staked amount"), if (isValidAddress(nodeAddress))
212171 then true
213172 else throwErr(makeString(["node address is not valid:", nodeAddress], " ")), if (isValidAddress(userAddress))
214173 then true
215174 else throwErr(makeString(["user address is not valid:", userAddress], " "))]
216175 if ((checks == checks))
217176 then {
218177 let newNodeNextLease = (nodeNextLeased - unstakeAmount)
219178 let newUserNextLeased = (userNextLeased - unstakeAmount)
220- let $t084008505 = getUserToClaimBalance(userAddress)
221- let toClaim = $t084008505._1
222- let toUnlock = $t084008505._2
179+ let $t069377042 = getUserToClaimBalance(userAddress)
180+ let toClaim = $t069377042._1
181+ let toUnlock = $t069377042._2
223182 let newToUnlock = (toUnlock + unstakeAmount)
224- let removeNodeActions = if ((newUserNextLeased == 0))
225- then [getUserNodeListEntry(userAddress, removeNodeFromNodeList(userAddress, nodeAddress))]
226- else nil
227- ([getLeasingNodeEntry(nodeAddress, nodeCurrentLeased, newNodeNextLease), getUserLeasingEntry(nodeAddress, userAddress, userCurrentLeased, newUserNextLeased), getUserToClaimEntry(userAddress, toClaim, newToUnlock)] ++ removeNodeActions)
183+[getLeasingNodeEntry(nodeAddress, nodeCurrentLeased, newNodeNextLease), getUserLeasingEntry(nodeAddress, userAddress, userCurrentLeased, newUserNextLeased), getUserToClaimEntry(userAddress, toClaim, newToUnlock)]
228184 }
229185 else throw("Strict value is not equal to itself.")
230186 }
231187
232188
233189 func getClaimUnlockedActions (userAddress,claimAmount) = {
234- let $t090759135 = getUserToClaimBalance(userAddress)
235- let toClaim = $t090759135._1
236- let toUnlock = $t090759135._2
190+ let $t074177477 = getUserToClaimBalance(userAddress)
191+ let toClaim = $t074177477._1
192+ let toUnlock = $t074177477._2
237193 let checks = [if ((claimAmount > 0))
238194 then true
239195 else throwErr("claim amount should be greater than 0"), if ((toClaim >= claimAmount))
240196 then true
241197 else throwErr("claim amount should be less or equal unlocked amount"), if (isValidAddress(userAddress))
242198 then true
243199 else throwErr(makeString(["user address is not valid:", userAddress], " "))]
244200 if ((checks == checks))
245201 then {
246202 let newToClaim = (toClaim - claimAmount)
247203 [getUserToClaimEntry(userAddress, newToClaim, toUnlock), ScriptTransfer(addressFromStringValue(userAddress), claimAmount, assetIdBytes)]
248204 }
249205 else throw("Strict value is not equal to itself.")
250206 }
251207
252208
253209 func getStakeFromUnlockedActions (nodeAddress,userAddress,userLeasingAmount) = {
254- let $t097759835 = getUserToClaimBalance(userAddress)
255- let toClaim = $t097759835._1
256- let toUnlock = $t097759835._2
210+ let $t081178177 = getUserToClaimBalance(userAddress)
211+ let toClaim = $t081178177._1
212+ let toUnlock = $t081178177._2
257213 let available = (toUnlock + toClaim)
258214 let checks = [if ((userLeasingAmount > 0))
259215 then true
260216 else throwErr("amount should be greater than 0"), if ((available >= userLeasingAmount))
261217 then true
262218 else throwErr("amount should be less or equal to available"), if (isValidAddress(nodeAddress))
263219 then true
264220 else throwErr(makeString(["node address is not valid:", nodeAddress], " ")), if (isValidAddress(userAddress))
265221 then true
266222 else throwErr(makeString(["user address is not valid:", userAddress], " "))]
267223 if ((checks == checks))
268224 then {
269- let $t01031210385 = getLeasingNodeData(nodeAddress)
270- let nodeCurrentLeased = $t01031210385._1
271- let nodeNextLeased = $t01031210385._2
225+ let $t086548727 = getLeasingNodeData(nodeAddress)
226+ let nodeCurrentLeased = $t086548727._1
227+ let nodeNextLeased = $t086548727._2
272228 let newNodeNextLease = (nodeNextLeased + userLeasingAmount)
273- let $t01045310539 = getUserLeasingData(nodeAddress, userAddress)
274- let userCurrentLeased = $t01045310539._1
275- let userNextLeased = $t01045310539._2
229+ let $t087958881 = getUserLeasingData(nodeAddress, userAddress)
230+ let userCurrentLeased = $t087958881._1
231+ let userNextLeased = $t087958881._2
276232 let newUserNextLeased = (userNextLeased + userLeasingAmount)
277233 let newToUnlock = max([0, (toUnlock - userLeasingAmount)])
278234 let newToClaim = min([toClaim, (toClaim + (toUnlock - userLeasingAmount))])
279-[getLeasingNodeEntry(nodeAddress, nodeCurrentLeased, nodeNextLeased), getUserLeasingEntry(nodeAddress, userAddress, userCurrentLeased, newUserNextLeased), getUserToClaimEntry(userAddress, newToClaim, newToUnlock), getUserNodeListEntry(userAddress, addNodeToNodeList(userAddress, nodeAddress))]
235+[getLeasingNodeEntry(nodeAddress, nodeCurrentLeased, nodeNextLeased), getUserLeasingEntry(nodeAddress, userAddress, userCurrentLeased, newUserNextLeased), getUserToClaimEntry(userAddress, newToClaim, newToUnlock)]
280236 }
281237 else throw("Strict value is not equal to itself.")
282238 }
283239
284240
285241 func getSetNewPeriodLengthActions (newPeriodLength) = {
286242 let check = [if ((newPeriodLength > 0))
287243 then true
288244 else throwErr("period length should be greater than 0")]
289245 if ((check == check))
290246 then if ((periodOffsetHeight == -1))
291247 then [IntegerEntry(keyPeriodLength, newPeriodLength), IntegerEntry(keyPeriodOffsetHeight, height)]
292248 else {
293249 let newPeriodOffsetId = (currentPeriodId + 1)
294250 let newOffsetHeight = ((periodLength * (newPeriodOffsetId - periodOffsetId)) + periodOffsetHeight)
295251 [IntegerEntry(keyPeriodOffsetId, newPeriodOffsetId), IntegerEntry(keyPeriodOffsetHeight, newOffsetHeight), IntegerEntry(keyPeriodLength, newPeriodLength)]
296252 }
297253 else throw("Strict value is not equal to itself.")
298254 }
299255
300256
301257 @Callable(i)
302258 func setNewPeriodLength (newPeriodLength) = getSetNewPeriodLengthActions(newPeriodLength)
303259
304260
305261
306262 @Callable(i)
307263 func getNodeDataREADONLY (nodeAddress) = {
308- let $t01200712071 = getLeasingNodeData(nodeAddress)
309- let currentLease = $t01200712071._1
310- let nextLeased = $t01200712071._2
264+ let $t01026110325 = getLeasingNodeData(nodeAddress)
265+ let currentLease = $t01026110325._1
266+ let nextLeased = $t01026110325._2
311267 $Tuple2(nil, $Tuple5(currentPeriodHeight, currentLease, nextPeriodHeight, nextLeased, height))
312268 }
313269
314270
315271
316272 @Callable(i)
317273 func getUserDataREADONLY (userAddress) = {
318- let $t01222712287 = getUserToClaimBalance(userAddress)
319- let toClaim = $t01222712287._1
320- let toUnlock = $t01222712287._2
321- let nodeList = getUserLeasingNodeList(userAddress)
322- $Tuple2(nil, $Tuple6(currentPeriodHeight, toClaim, nextPeriodHeight, toUnlock, height, nodeList))
274+ let $t01048110541 = getUserToClaimBalance(userAddress)
275+ let toClaim = $t01048110541._1
276+ let toUnlock = $t01048110541._2
277+ $Tuple2(nil, $Tuple5(currentPeriodHeight, toClaim, nextPeriodHeight, toUnlock, height))
323278 }
324279
325280
326281
327282 @Callable(i)
328283 func stakeFor (nodeAddress,userAddress) = getStakeActions(nodeAddress, userAddress, i)
329284
330285
331286
332287 @Callable(i)
333288 func stake (nodeAddress) = {
334289 let userAddress = toString(i.caller)
335290 getStakeActions(nodeAddress, userAddress, i)
336291 }
337292
338293
339294
340295 @Callable(i)
341296 func stakeFromUnlocked (nodeAddress,amount) = {
342297 let userAddress = toString(i.caller)
343298 getStakeFromUnlockedActions(nodeAddress, userAddress, amount)
344299 }
345300
346301
347302
348303 @Callable(i)
349304 func unstake (nodeAddress,amount) = {
350305 let userAddress = toString(i.caller)
351306 getUnstakeActions(nodeAddress, userAddress, amount)
352307 }
353308
354309
355310
356311 @Callable(i)
357312 func claim (amount) = {
358313 let userAddress = toString(i.caller)
359314 getClaimUnlockedActions(userAddress, amount)
360315 }
361316
362317
363318
364319 @Callable(i)
365320 func claimAll () = {
366321 let userAddress = toString(i.caller)
367- let $t01327013330 = getUserToClaimBalance(userAddress)
368- let toClaim = $t01327013330._1
369- let toUnlock = $t01327013330._2
322+ let $t01145911519 = getUserToClaimBalance(userAddress)
323+ let toClaim = $t01145911519._1
324+ let toUnlock = $t01145911519._2
370325 getClaimUnlockedActions(userAddress, toClaim)
371326 }
372327
373328

github/deemru/w8io/873ac7e 
57.57 ms