tx · 2b4k2v9V4QPpAYj1UMVF52Kofuvb55uFBkjiwHpBSxHw

3NCWFHDzdPHZC6636ZkMLNDup9mjpbTLs7h:  -0.01300000 Waves

2024.02.12 14:08 [2972957] smart account 3NCWFHDzdPHZC6636ZkMLNDup9mjpbTLs7h > SELF 0.00000000 Waves

{ "type": 13, "id": "2b4k2v9V4QPpAYj1UMVF52Kofuvb55uFBkjiwHpBSxHw", "fee": 1300000, "feeAssetId": null, "timestamp": 1707736105628, "version": 2, "chainId": 84, "sender": "3NCWFHDzdPHZC6636ZkMLNDup9mjpbTLs7h", "senderPublicKey": "3z8Q6Zu3KppVmn6fJJvrLc1Wo3krVHSvfaNcerm82md2", "proofs": [ "3M5fRvXuRDzwTdYfZBfqRyEDTRmjmxZfxWX5aiX7B6JqASSwK5amCV16PKaVRLjnsVrL9EpqPRJpJ8PiEegd6GnM" ], "script": "base64:BgIqCAISAwoBARIDCgEIEgQKAggIEgMKAQgSBAoCCAESBAoCCAESAwoBARIAJAAMY29udHJhY3RGaWxlAhFsMm1wX2xlYXNpbmcucmlkZQADU0VQAgJfXwAGc2NhbGU4AIDC1y8BCHRocm93RXJyAQNtc2cJAAIBCQCsAgIJAKwCAgUMY29udHJhY3RGaWxlAgI6IAUDbXNnAAprZXlBc3NldElkCQC5CQIJAMwIAgICJXMJAMwIAgIHYXNzZXRJZAUDbmlsBQNTRVAAEWtleVBlcmlvZE9mZnNldElkCQC5CQIJAMwIAgICJXMJAMwIAgIIb2Zmc2V0SWQFA25pbAUDU0VQABVrZXlQZXJpb2RPZmZzZXRIZWlnaHQJALkJAgkAzAgCAgIlcwkAzAgCAgxvZmZzZXRIZWlnaHQFA25pbAUDU0VQAA9rZXlQZXJpb2RMZW5ndGgJALkJAgkAzAgCAgIlcwkAzAgCAgxwZXJpb2RMZW5ndGgFA25pbAUDU0VQAA5wZXJpb2RPZmZzZXRJZAkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzBRFrZXlQZXJpb2RPZmZzZXRJZAAAAAxwZXJpb2RMZW5ndGgJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwUPa2V5UGVyaW9kTGVuZ3RoAJBOABJwZXJpb2RPZmZzZXRIZWlnaHQJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwUVa2V5UGVyaW9kT2Zmc2V0SGVpZ2h0AP///////////wEAD2N1cnJlbnRQZXJpb2RJZAMDCQBmAgUGaGVpZ2h0BRJwZXJpb2RPZmZzZXRIZWlnaHQJAQIhPQIFEnBlcmlvZE9mZnNldEhlaWdodAD///////////8BBwkAZAIJAGkCCQBlAgUGaGVpZ2h0BRJwZXJpb2RPZmZzZXRIZWlnaHQFDHBlcmlvZExlbmd0aAUOcGVyaW9kT2Zmc2V0SWQJAJYDAQkAzAgCAAAJAMwIAgkAZQIFDnBlcmlvZE9mZnNldElkAAEFA25pbAATY3VycmVudFBlcmlvZEhlaWdodAkAZAIFEnBlcmlvZE9mZnNldEhlaWdodAkAaAIJAGUCBQ9jdXJyZW50UGVyaW9kSWQFDnBlcmlvZE9mZnNldElkBQxwZXJpb2RMZW5ndGgAEG5leHRQZXJpb2RIZWlnaHQJAGQCBRNjdXJyZW50UGVyaW9kSGVpZ2h0BQxwZXJpb2RMZW5ndGgBEmtleUxlYXNpbmdOb2RlRGF0YQELbm9kZUFkZHJlc3MJALkJAgkAzAgCAgIlcwkAzAgCBQtub2RlQWRkcmVzcwUDbmlsBQNTRVABFmtleVVzZXJMZWFzaW5nTm9kZUxpc3QBC3VzZXJBZGRyZXNzCQC5CQIJAMwIAgIEJXMlcwkAzAgCAhN1c2VyTGVhc2luZ05vZGVMaXN0CQDMCAIFC3VzZXJBZGRyZXNzBQNuaWwFA1NFUAEWa2V5VXNlckxlYXNpbmdOb2RlRGF0YQILdXNlckFkZHJlc3MLbm9kZUFkZHJlc3MJALkJAgkAzAgCAgQlcyVzCQDMCAIFC25vZGVBZGRyZXNzCQDMCAIFC3VzZXJBZGRyZXNzBQNuaWwFA1NFUAEOa2V5VXNlclRvQ2xhaW0BC3VzZXJBZGRyZXNzCQC5CQIJAMwIAgIEJXMlcwkAzAgCAgd0b0NsYWltCQDMCAIFC3VzZXJBZGRyZXNzBQNuaWwFA1NFUAANYXNzZXRJZFN0cmluZwkBC3ZhbHVlT3JFbHNlAgkAnQgCBQR0aGlzBQprZXlBc3NldElkAgVXQVZFUwAMYXNzZXRJZEJ5dGVzAwkAAAIFDWFzc2V0SWRTdHJpbmcCBVdBVkVTBQR1bml0CQDZBAEFDWFzc2V0SWRTdHJpbmcBDmlzVmFsaWRBZGRyZXNzAQdhZGRyZXNzBAckbWF0Y2gwCQCmCAEFB2FkZHJlc3MDCQABAgUHJG1hdGNoMAIHQWRkcmVzcwQBYQUHJG1hdGNoMAYHARNnZXRMZWFzaW5nTm9kZUVudHJ5BQtub2RlQWRkcmVzcw1jdXJyZW50UGVyaW9kDWN1cnJlbnRMZWFzZWQKbmV4dFBlcmlvZApuZXh0TGVhc2VkBAt2YWx1ZVN0cmluZwkAuQkCCQDMCAICCCVkJWQlZCVkCQDMCAIJAKQDAQUNY3VycmVudFBlcmlvZAkAzAgCCQCkAwEFDWN1cnJlbnRMZWFzZWQJAMwIAgkApAMBBQpuZXh0UGVyaW9kCQDMCAIJAKQDAQUKbmV4dExlYXNlZAUDbmlsBQNTRVAJAQtTdHJpbmdFbnRyeQIJARJrZXlMZWFzaW5nTm9kZURhdGEBBQtub2RlQWRkcmVzcwULdmFsdWVTdHJpbmcBEmdldExlYXNpbmdOb2RlRGF0YQELbm9kZUFkZHJlc3MEFGxlYXNpbmdEYXRhU3RyaW5nUmF3CQCdCAIFBHRoaXMJARJrZXlMZWFzaW5nTm9kZURhdGEBBQtub2RlQWRkcmVzcwQHJG1hdGNoMAUUbGVhc2luZ0RhdGFTdHJpbmdSYXcDCQABAgUHJG1hdGNoMAIGU3RyaW5nBAJkcwUHJG1hdGNoMAQIZGF0YUxpc3QJALUJAgUCZHMFA1NFUAQRbm9kZUN1cnJlbnRQZXJpb2QJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQhkYXRhTGlzdAABBBFub2RlQ3VycmVudExlYXNlZAkBDXBhcnNlSW50VmFsdWUBCQCRAwIFCGRhdGFMaXN0AAIEDm5vZGVOZXh0UGVyaW9kCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUIZGF0YUxpc3QAAwQObm9kZU5leHRMZWFzZWQJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQhkYXRhTGlzdAAEAwkAZgIFDm5vZGVOZXh0UGVyaW9kBQZoZWlnaHQJAJYKBAURbm9kZUN1cnJlbnRQZXJpb2QFEW5vZGVDdXJyZW50TGVhc2VkBQ5ub2RlTmV4dFBlcmlvZAUObm9kZU5leHRMZWFzZWQJAJYKBAUTY3VycmVudFBlcmlvZEhlaWdodAUObm9kZU5leHRMZWFzZWQFEG5leHRQZXJpb2RIZWlnaHQFDm5vZGVOZXh0TGVhc2VkCQCWCgQAAAAAAAAAAAETZ2V0VXNlckxlYXNpbmdFbnRyeQYLbm9kZUFkZHJlc3MLdXNlckFkZHJlc3MRdXNlckN1cnJlbnRQZXJpb2QRdXNlckN1cnJlbnRMZWFzZWQOdXNlck5leHRQZXJpb2QOdXNlck5leHRMZWFzZWQEC3ZhbHVlU3RyaW5nCQC5CQIJAMwIAgIIJWQlZCVkJWQJAMwIAgkApAMBBRF1c2VyQ3VycmVudFBlcmlvZAkAzAgCCQCkAwEFEXVzZXJDdXJyZW50TGVhc2VkCQDMCAIJAKQDAQUOdXNlck5leHRQZXJpb2QJAMwIAgkApAMBBQ51c2VyTmV4dExlYXNlZAUDbmlsBQNTRVAJAQtTdHJpbmdFbnRyeQIJARZrZXlVc2VyTGVhc2luZ05vZGVEYXRhAgULdXNlckFkZHJlc3MFC25vZGVBZGRyZXNzBQt2YWx1ZVN0cmluZwESZ2V0VXNlckxlYXNpbmdEYXRhAgtub2RlQWRkcmVzcwt1c2VyQWRkcmVzcwQUbGVhc2luZ0RhdGFTdHJpbmdSYXcJAJ0IAgUEdGhpcwkBFmtleVVzZXJMZWFzaW5nTm9kZURhdGECBQt1c2VyQWRkcmVzcwULbm9kZUFkZHJlc3MEByRtYXRjaDAFFGxlYXNpbmdEYXRhU3RyaW5nUmF3AwkAAQIFByRtYXRjaDACBlN0cmluZwQCZHMFByRtYXRjaDAECGRhdGFMaXN0CQC1CQIFAmRzBQNTRVAEEXVzZXJDdXJyZW50UGVyaW9kCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUIZGF0YUxpc3QAAQQRdXNlckN1cnJlbnRMZWFzZWQJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQhkYXRhTGlzdAACBA51c2VyTmV4dFBlcmlvZAkBDXBhcnNlSW50VmFsdWUBCQCRAwIFCGRhdGFMaXN0AAMEDnVzZXJOZXh0TGVhc2VkCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUIZGF0YUxpc3QABAMJAGYCBQ51c2VyTmV4dFBlcmlvZAUGaGVpZ2h0CQCWCgQFEXVzZXJDdXJyZW50UGVyaW9kBRF1c2VyQ3VycmVudExlYXNlZAUOdXNlck5leHRQZXJpb2QFDnVzZXJOZXh0TGVhc2VkCQCWCgQFE2N1cnJlbnRQZXJpb2RIZWlnaHQFDnVzZXJOZXh0TGVhc2VkBRBuZXh0UGVyaW9kSGVpZ2h0BQ51c2VyTmV4dExlYXNlZAkAlgoEAAAAAAAAAAABE2dldFVzZXJUb0NsYWltRW50cnkFC3VzZXJBZGRyZXNzDWN1cnJlbnRQZXJpb2QHdG9DbGFpbQpuZXh0UGVyaW9kCHRvVW5sb2NrBAt2YWx1ZVN0cmluZwkAuQkCCQDMCAICCCVkJWQlZCVkCQDMCAIJAKQDAQUNY3VycmVudFBlcmlvZAkAzAgCCQCkAwEFB3RvQ2xhaW0JAMwIAgkApAMBBQpuZXh0UGVyaW9kCQDMCAIJAKQDAQUIdG9VbmxvY2sFA25pbAUDU0VQCQELU3RyaW5nRW50cnkCCQEOa2V5VXNlclRvQ2xhaW0BBQt1c2VyQWRkcmVzcwULdmFsdWVTdHJpbmcBFWdldFVzZXJUb0NsYWltQmFsYW5jZQELdXNlckFkZHJlc3MEEnVzZXJUb0NsYWltRGF0YVJhdwkAnQgCBQR0aGlzCQEOa2V5VXNlclRvQ2xhaW0BBQt1c2VyQWRkcmVzcwQHJG1hdGNoMAUSdXNlclRvQ2xhaW1EYXRhUmF3AwkAAQIFByRtYXRjaDACBlN0cmluZwQCZHMFByRtYXRjaDAECGRhdGFMaXN0CQC1CQIFAmRzBQNTRVAEDWN1cnJlbnRQZXJpb2QJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQhkYXRhTGlzdAABBAd0b0NsYWltCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUIZGF0YUxpc3QAAgQKbmV4dFBlcmlvZAkBDXBhcnNlSW50VmFsdWUBCQCRAwIFCGRhdGFMaXN0AAMECHRvVW5sb2NrCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUIZGF0YUxpc3QABAMJAGYCBQpuZXh0UGVyaW9kBQZoZWlnaHQJAJYKBAUNY3VycmVudFBlcmlvZAUHdG9DbGFpbQUKbmV4dFBlcmlvZAUIdG9VbmxvY2sJAJYKBAUTY3VycmVudFBlcmlvZEhlaWdodAkAZAIFB3RvQ2xhaW0FCHRvVW5sb2NrBRBuZXh0UGVyaW9kSGVpZ2h0AAAJAJYKBAAAAAAAAAAAARZnZXRVc2VyTGVhc2luZ05vZGVMaXN0AQt1c2VyQWRkcmVzcwQUbGVhc2luZ0RhdGFTdHJpbmdSYXcJAJ0IAgUEdGhpcwkBFmtleVVzZXJMZWFzaW5nTm9kZUxpc3QBBQt1c2VyQWRkcmVzcwQHJG1hdGNoMAUUbGVhc2luZ0RhdGFTdHJpbmdSYXcDCQABAgUHJG1hdGNoMAIGU3RyaW5nBAJkcwUHJG1hdGNoMAQIZGF0YUxpc3QJAL0JAgUCZHMFA1NFUAUIZGF0YUxpc3QFA25pbAEUZ2V0VXNlck5vZGVMaXN0RW50cnkCC3VzZXJBZGRyZXNzCG5vZGVMaXN0AwkAAAIJAJADAQUIbm9kZUxpc3QAAAkBC0RlbGV0ZUVudHJ5AQkBFmtleVVzZXJMZWFzaW5nTm9kZUxpc3QBBQt1c2VyQWRkcmVzcwkBC1N0cmluZ0VudHJ5AgkBFmtleVVzZXJMZWFzaW5nTm9kZUxpc3QBBQt1c2VyQWRkcmVzcwkAuwkCBQhub2RlTGlzdAUDU0VQARFhZGROb2RlVG9Ob2RlTGlzdAILdXNlckFkZHJlc3MLbm9kZUFkZHJlc3MECG5vZGVMaXN0CQEWZ2V0VXNlckxlYXNpbmdOb2RlTGlzdAEFC3VzZXJBZGRyZXNzAwkBD2NvbnRhaW5zRWxlbWVudAIFCG5vZGVMaXN0BQtub2RlQWRkcmVzcwUIbm9kZUxpc3QJAM0IAgUIbm9kZUxpc3QFC25vZGVBZGRyZXNzARZyZW1vdmVOb2RlRnJvbU5vZGVMaXN0Agt1c2VyQWRkcmVzcwtub2RlQWRkcmVzcwQIbm9kZUxpc3QJARZnZXRVc2VyTGVhc2luZ05vZGVMaXN0AQULdXNlckFkZHJlc3MEByRtYXRjaDAJAM8IAgUIbm9kZUxpc3QFC25vZGVBZGRyZXNzAwkAAQIFByRtYXRjaDACA0ludAQFaW5kZXgFByRtYXRjaDAJANEIAgUIbm9kZUxpc3QFBWluZGV4BQhub2RlTGlzdAEPZ2V0U3Rha2VBY3Rpb25zAwtub2RlQWRkcmVzcwt1c2VyQWRkcmVzcwFpBAZjaGVja3MJAMwIAgMJAAACCQCQAwEIBQFpCHBheW1lbnRzAAEGCQEIdGhyb3dFcnIBAiBwYXltZW50IHNpemUgc2hvdWxkIGJlIGV4YWN0bHkgMQkAzAgCAwkAAAIICQCRAwIIBQFpCHBheW1lbnRzAAAHYXNzZXRJZAUMYXNzZXRJZEJ5dGVzBgkBCHRocm93RXJyAQkAuQkCCQDMCAICGnBheW1lbnQgYXNzZXRJZCBzaG91bGQgYmU6CQDMCAIFDWFzc2V0SWRTdHJpbmcFA25pbAIBIAkAzAgCAwkBDmlzVmFsaWRBZGRyZXNzAQULbm9kZUFkZHJlc3MGCQEIdGhyb3dFcnIBCQC5CQIJAMwIAgIabm9kZSBhZGRyZXNzIGlzIG5vdCB2YWxpZDoJAMwIAgULbm9kZUFkZHJlc3MFA25pbAIBIAkAzAgCAwkBDmlzVmFsaWRBZGRyZXNzAQULdXNlckFkZHJlc3MGCQEIdGhyb3dFcnIBCQC5CQIJAMwIAgIadXNlciBhZGRyZXNzIGlzIG5vdCB2YWxpZDoJAMwIAgULdXNlckFkZHJlc3MFA25pbAIBIAUDbmlsAwkAAAIFBmNoZWNrcwUGY2hlY2tzBBF1c2VyTGVhc2luZ0Ftb3VudAgJAJEDAggFAWkIcGF5bWVudHMAAAZhbW91bnQECyR0MDcwMzk3MTQ3CQESZ2V0TGVhc2luZ05vZGVEYXRhAQULbm9kZUFkZHJlc3MEEW5vZGVDdXJyZW50UGVyaW9kCAULJHQwNzAzOTcxNDcCXzEEEW5vZGVDdXJyZW50TGVhc2VkCAULJHQwNzAzOTcxNDcCXzIEDm5vZGVOZXh0UGVyaW9kCAULJHQwNzAzOTcxNDcCXzMEDm5vZGVOZXh0TGVhc2VkCAULJHQwNzAzOTcxNDcCXzQEEG5ld05vZGVOZXh0TGVhc2UJAGQCBQ5ub2RlTmV4dExlYXNlZAURdXNlckxlYXNpbmdBbW91bnQECyR0MDcyMTU3MzM2CQESZ2V0VXNlckxlYXNpbmdEYXRhAgULbm9kZUFkZHJlc3MFC3VzZXJBZGRyZXNzBBF1c2VyQ3VycmVudFBlcmlvZAgFCyR0MDcyMTU3MzM2Al8xBBF1c2VyQ3VycmVudExlYXNlZAgFCyR0MDcyMTU3MzM2Al8yBA51c2VyTmV4dFBlcmlvZAgFCyR0MDcyMTU3MzM2Al8zBA51c2VyTmV4dExlYXNlZAgFCyR0MDcyMTU3MzM2Al80BBFuZXdVc2VyTmV4dExlYXNlZAkAZAIFDnVzZXJOZXh0TGVhc2VkBRF1c2VyTGVhc2luZ0Ftb3VudAkAzAgCCQETZ2V0TGVhc2luZ05vZGVFbnRyeQUFC25vZGVBZGRyZXNzBRFub2RlQ3VycmVudFBlcmlvZAURbm9kZUN1cnJlbnRMZWFzZWQFDm5vZGVOZXh0UGVyaW9kBRBuZXdOb2RlTmV4dExlYXNlCQDMCAIJARNnZXRVc2VyTGVhc2luZ0VudHJ5BgULbm9kZUFkZHJlc3MFC3VzZXJBZGRyZXNzBRF1c2VyQ3VycmVudFBlcmlvZAURdXNlckN1cnJlbnRMZWFzZWQFDnVzZXJOZXh0UGVyaW9kBRFuZXdVc2VyTmV4dExlYXNlZAkAzAgCCQEUZ2V0VXNlck5vZGVMaXN0RW50cnkCBQt1c2VyQWRkcmVzcwkBEWFkZE5vZGVUb05vZGVMaXN0AgULdXNlckFkZHJlc3MFC25vZGVBZGRyZXNzBQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BEWdldFVuc3Rha2VBY3Rpb25zAwtub2RlQWRkcmVzcwt1c2VyQWRkcmVzcw11bnN0YWtlQW1vdW50BAskdDA4MDI0ODEzMgkBEmdldExlYXNpbmdOb2RlRGF0YQEFC25vZGVBZGRyZXNzBBFub2RlQ3VycmVudFBlcmlvZAgFCyR0MDgwMjQ4MTMyAl8xBBFub2RlQ3VycmVudExlYXNlZAgFCyR0MDgwMjQ4MTMyAl8yBA5ub2RlTmV4dFBlcmlvZAgFCyR0MDgwMjQ4MTMyAl8zBA5ub2RlTmV4dExlYXNlZAgFCyR0MDgwMjQ4MTMyAl80BAskdDA4MTM3ODI1OAkBEmdldFVzZXJMZWFzaW5nRGF0YQIFC25vZGVBZGRyZXNzBQt1c2VyQWRkcmVzcwQRdXNlckN1cnJlbnRQZXJpb2QIBQskdDA4MTM3ODI1OAJfMQQRdXNlckN1cnJlbnRMZWFzZWQIBQskdDA4MTM3ODI1OAJfMgQOdXNlck5leHRQZXJpb2QIBQskdDA4MTM3ODI1OAJfMwQOdXNlck5leHRMZWFzZWQIBQskdDA4MTM3ODI1OAJfNAQGY2hlY2tzCQDMCAIDCQBmAgUNdW5zdGFrZUFtb3VudAAABgkBCHRocm93RXJyAQIndW5zdGFrZSBhbW91bnQgc2hvdWxkIGJlIGdyZWF0ZXIgdGhhbiAwCQDMCAIDCQBnAgUOdXNlck5leHRMZWFzZWQFDXVuc3Rha2VBbW91bnQGCQEIdGhyb3dFcnIBAjl1bnN0YWtlIGFtb3VudCBzaG91bGQgYmUgbGVzcyBvciBlcXVhbCB1c2VyIHN0YWtlZCBhbW91bnQJAMwIAgMJAGcCBQ5ub2RlTmV4dExlYXNlZAUNdW5zdGFrZUFtb3VudAYJAQh0aHJvd0VycgECOXVuc3Rha2UgYW1vdW50IHNob3VsZCBiZSBsZXNzIG9yIGVxdWFsIG5vZGUgc3Rha2VkIGFtb3VudAkAzAgCAwkBDmlzVmFsaWRBZGRyZXNzAQULbm9kZUFkZHJlc3MGCQEIdGhyb3dFcnIBCQC5CQIJAMwIAgIabm9kZSBhZGRyZXNzIGlzIG5vdCB2YWxpZDoJAMwIAgULbm9kZUFkZHJlc3MFA25pbAIBIAkAzAgCAwkBDmlzVmFsaWRBZGRyZXNzAQULdXNlckFkZHJlc3MGCQEIdGhyb3dFcnIBCQC5CQIJAMwIAgIadXNlciBhZGRyZXNzIGlzIG5vdCB2YWxpZDoJAMwIAgULdXNlckFkZHJlc3MFA25pbAIBIAUDbmlsAwkAAAIFBmNoZWNrcwUGY2hlY2tzBBBuZXdOb2RlTmV4dExlYXNlCQBlAgUObm9kZU5leHRMZWFzZWQFDXVuc3Rha2VBbW91bnQEEW5ld1VzZXJOZXh0TGVhc2VkCQBlAgUOdXNlck5leHRMZWFzZWQFDXVuc3Rha2VBbW91bnQECyR0MDg5NTE5MDgzCQEVZ2V0VXNlclRvQ2xhaW1CYWxhbmNlAQULdXNlckFkZHJlc3MEDWN1cnJlbnRQZXJpb2QIBQskdDA4OTUxOTA4MwJfMQQHdG9DbGFpbQgFCyR0MDg5NTE5MDgzAl8yBApuZXh0UGVyaW9kCAULJHQwODk1MTkwODMCXzMECHRvVW5sb2NrCAULJHQwODk1MTkwODMCXzQEC25ld1RvVW5sb2NrCQBkAgUIdG9VbmxvY2sFDXVuc3Rha2VBbW91bnQEEXJlbW92ZU5vZGVBY3Rpb25zAwkAAAIFEW5ld1VzZXJOZXh0TGVhc2VkAAAJAMwIAgkBFGdldFVzZXJOb2RlTGlzdEVudHJ5AgULdXNlckFkZHJlc3MJARZyZW1vdmVOb2RlRnJvbU5vZGVMaXN0AgULdXNlckFkZHJlc3MFC25vZGVBZGRyZXNzBQNuaWwFA25pbAkAzggCCQDMCAIJARNnZXRMZWFzaW5nTm9kZUVudHJ5BQULbm9kZUFkZHJlc3MFEW5vZGVDdXJyZW50UGVyaW9kBRFub2RlQ3VycmVudExlYXNlZAUObm9kZU5leHRQZXJpb2QFEG5ld05vZGVOZXh0TGVhc2UJAMwIAgkBE2dldFVzZXJMZWFzaW5nRW50cnkGBQtub2RlQWRkcmVzcwULdXNlckFkZHJlc3MFEXVzZXJDdXJyZW50UGVyaW9kBRF1c2VyQ3VycmVudExlYXNlZAUOdXNlck5leHRQZXJpb2QFEW5ld1VzZXJOZXh0TGVhc2VkCQDMCAIJARNnZXRVc2VyVG9DbGFpbUVudHJ5BQULdXNlckFkZHJlc3MFDWN1cnJlbnRQZXJpb2QFB3RvQ2xhaW0FCm5leHRQZXJpb2QFC25ld1RvVW5sb2NrBQNuaWwFEXJlbW92ZU5vZGVBY3Rpb25zCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuARdnZXRDbGFpbVVubG9ja2VkQWN0aW9ucwILdXNlckFkZHJlc3MLY2xhaW1BbW91bnQECyR0MDk3NTA5ODM3CQEVZ2V0VXNlclRvQ2xhaW1CYWxhbmNlAQULdXNlckFkZHJlc3MEDWN1cnJlbnRQZXJpb2QIBQskdDA5NzUwOTgzNwJfMQQHdG9DbGFpbQgFCyR0MDk3NTA5ODM3Al8yBApuZXh0UGVyaW9kCAULJHQwOTc1MDk4MzcCXzMECHRvVW5sb2NrCAULJHQwOTc1MDk4MzcCXzQEBmNoZWNrcwkAzAgCAwkAZgIFC2NsYWltQW1vdW50AAAGCQEIdGhyb3dFcnIBAiVjbGFpbSBhbW91bnQgc2hvdWxkIGJlIGdyZWF0ZXIgdGhhbiAwCQDMCAIDCQBnAgUHdG9DbGFpbQULY2xhaW1BbW91bnQGCQEIdGhyb3dFcnIBAjRjbGFpbSBhbW91bnQgc2hvdWxkIGJlIGxlc3Mgb3IgZXF1YWwgdW5sb2NrZWQgYW1vdW50CQDMCAIDCQEOaXNWYWxpZEFkZHJlc3MBBQt1c2VyQWRkcmVzcwYJAQh0aHJvd0VycgEJALkJAgkAzAgCAhp1c2VyIGFkZHJlc3MgaXMgbm90IHZhbGlkOgkAzAgCBQt1c2VyQWRkcmVzcwUDbmlsAgEgBQNuaWwDCQAAAgUGY2hlY2tzBQZjaGVja3MECm5ld1RvQ2xhaW0JAGUCBQd0b0NsYWltBQtjbGFpbUFtb3VudAkAzAgCCQETZ2V0VXNlclRvQ2xhaW1FbnRyeQUFC3VzZXJBZGRyZXNzBQ1jdXJyZW50UGVyaW9kBQpuZXdUb0NsYWltBQpuZXh0UGVyaW9kBQh0b1VubG9jawkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCQERQGV4dHJOYXRpdmUoMTA2MikBBQt1c2VyQWRkcmVzcwULY2xhaW1BbW91bnQFDGFzc2V0SWRCeXRlcwUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuARtnZXRTdGFrZUZyb21VbmxvY2tlZEFjdGlvbnMDC25vZGVBZGRyZXNzC3VzZXJBZGRyZXNzEXVzZXJMZWFzaW5nQW1vdW50BA0kdDAxMDUwNDEwNTkxCQEVZ2V0VXNlclRvQ2xhaW1CYWxhbmNlAQULdXNlckFkZHJlc3MEDWN1cnJlbnRQZXJpb2QIBQ0kdDAxMDUwNDEwNTkxAl8xBAd0b0NsYWltCAUNJHQwMTA1MDQxMDU5MQJfMgQKbmV4dFBlcmlvZAgFDSR0MDEwNTA0MTA1OTECXzMECHRvVW5sb2NrCAUNJHQwMTA1MDQxMDU5MQJfNAQJYXZhaWxhYmxlCQBkAgUIdG9VbmxvY2sFB3RvQ2xhaW0EBmNoZWNrcwkAzAgCAwkAZgIFEXVzZXJMZWFzaW5nQW1vdW50AAAGCQEIdGhyb3dFcnIBAh9hbW91bnQgc2hvdWxkIGJlIGdyZWF0ZXIgdGhhbiAwCQDMCAIDCQBnAgUJYXZhaWxhYmxlBRF1c2VyTGVhc2luZ0Ftb3VudAYJAQh0aHJvd0VycgECK2Ftb3VudCBzaG91bGQgYmUgbGVzcyBvciBlcXVhbCB0byBhdmFpbGFibGUJAMwIAgMJAQ5pc1ZhbGlkQWRkcmVzcwEFC25vZGVBZGRyZXNzBgkBCHRocm93RXJyAQkAuQkCCQDMCAICGm5vZGUgYWRkcmVzcyBpcyBub3QgdmFsaWQ6CQDMCAIFC25vZGVBZGRyZXNzBQNuaWwCASAJAMwIAgMJAQ5pc1ZhbGlkQWRkcmVzcwEFC3VzZXJBZGRyZXNzBgkBCHRocm93RXJyAQkAuQkCCQDMCAICGnVzZXIgYWRkcmVzcyBpcyBub3QgdmFsaWQ6CQDMCAIFC3VzZXJBZGRyZXNzBQNuaWwCASAFA25pbAMJAAACBQZjaGVja3MFBmNoZWNrcwQNJHQwMTEwNjgxMTE3NgkBEmdldExlYXNpbmdOb2RlRGF0YQEFC25vZGVBZGRyZXNzBBFub2RlQ3VycmVudFBlcmlvZAgFDSR0MDExMDY4MTExNzYCXzEEEW5vZGVDdXJyZW50TGVhc2VkCAUNJHQwMTEwNjgxMTE3NgJfMgQObm9kZU5leHRQZXJpb2QIBQ0kdDAxMTA2ODExMTc2Al8zBA5ub2RlTmV4dExlYXNlZAgFDSR0MDExMDY4MTExNzYCXzQEEG5ld05vZGVOZXh0TGVhc2UJAGQCBQ5ub2RlTmV4dExlYXNlZAURdXNlckxlYXNpbmdBbW91bnQEDSR0MDExMjQ0MTEzNjUJARJnZXRVc2VyTGVhc2luZ0RhdGECBQtub2RlQWRkcmVzcwULdXNlckFkZHJlc3MEEXVzZXJDdXJyZW50UGVyaW9kCAUNJHQwMTEyNDQxMTM2NQJfMQQRdXNlckN1cnJlbnRMZWFzZWQIBQ0kdDAxMTI0NDExMzY1Al8yBA51c2VyTmV4dFBlcmlvZAgFDSR0MDExMjQ0MTEzNjUCXzMEDnVzZXJOZXh0TGVhc2VkCAUNJHQwMTEyNDQxMTM2NQJfNAQRbmV3VXNlck5leHRMZWFzZWQJAGQCBQ51c2VyTmV4dExlYXNlZAURdXNlckxlYXNpbmdBbW91bnQEC25ld1RvVW5sb2NrCQCWAwEJAMwIAgAACQDMCAIJAGUCBQh0b1VubG9jawURdXNlckxlYXNpbmdBbW91bnQFA25pbAQKbmV3VG9DbGFpbQkAlwMBCQDMCAIFB3RvQ2xhaW0JAMwIAgkAZAIFB3RvQ2xhaW0JAGUCBQh0b1VubG9jawURdXNlckxlYXNpbmdBbW91bnQFA25pbAkAzAgCCQETZ2V0TGVhc2luZ05vZGVFbnRyeQUFC25vZGVBZGRyZXNzBRFub2RlQ3VycmVudFBlcmlvZAURbm9kZUN1cnJlbnRMZWFzZWQFDm5vZGVOZXh0UGVyaW9kBQ5ub2RlTmV4dExlYXNlZAkAzAgCCQETZ2V0VXNlckxlYXNpbmdFbnRyeQYFC25vZGVBZGRyZXNzBQt1c2VyQWRkcmVzcwURdXNlckN1cnJlbnRQZXJpb2QFEXVzZXJDdXJyZW50TGVhc2VkBQ51c2VyTmV4dFBlcmlvZAURbmV3VXNlck5leHRMZWFzZWQJAMwIAgkBE2dldFVzZXJUb0NsYWltRW50cnkFBQt1c2VyQWRkcmVzcwUNY3VycmVudFBlcmlvZAUKbmV3VG9DbGFpbQUKbmV4dFBlcmlvZAULbmV3VG9VbmxvY2sJAMwIAgkBFGdldFVzZXJOb2RlTGlzdEVudHJ5AgULdXNlckFkZHJlc3MJARFhZGROb2RlVG9Ob2RlTGlzdAIFC3VzZXJBZGRyZXNzBQtub2RlQWRkcmVzcwUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuARxnZXRTZXROZXdQZXJpb2RMZW5ndGhBY3Rpb25zAQ9uZXdQZXJpb2RMZW5ndGgEBWNoZWNrCQDMCAIDCQBmAgUPbmV3UGVyaW9kTGVuZ3RoAAAGCQEIdGhyb3dFcnIBAiZwZXJpb2QgbGVuZ3RoIHNob3VsZCBiZSBncmVhdGVyIHRoYW4gMAUDbmlsAwkAAAIFBWNoZWNrBQVjaGVjawMJAAACBRJwZXJpb2RPZmZzZXRIZWlnaHQA////////////AQkAzAgCCQEMSW50ZWdlckVudHJ5AgUPa2V5UGVyaW9kTGVuZ3RoBQ9uZXdQZXJpb2RMZW5ndGgJAMwIAgkBDEludGVnZXJFbnRyeQIFFWtleVBlcmlvZE9mZnNldEhlaWdodAUGaGVpZ2h0BQNuaWwEEW5ld1BlcmlvZE9mZnNldElkCQBkAgUPY3VycmVudFBlcmlvZElkAAEED25ld09mZnNldEhlaWdodAkAZAIJAGgCBQxwZXJpb2RMZW5ndGgJAGUCBRFuZXdQZXJpb2RPZmZzZXRJZAUOcGVyaW9kT2Zmc2V0SWQFEnBlcmlvZE9mZnNldEhlaWdodAkAzAgCCQEMSW50ZWdlckVudHJ5AgURa2V5UGVyaW9kT2Zmc2V0SWQFEW5ld1BlcmlvZE9mZnNldElkCQDMCAIJAQxJbnRlZ2VyRW50cnkCBRVrZXlQZXJpb2RPZmZzZXRIZWlnaHQFD25ld09mZnNldEhlaWdodAkAzAgCCQEMSW50ZWdlckVudHJ5AgUPa2V5UGVyaW9kTGVuZ3RoBQ9uZXdQZXJpb2RMZW5ndGgFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLggBaQESc2V0TmV3UGVyaW9kTGVuZ3RoAQ9uZXdQZXJpb2RMZW5ndGgJARxnZXRTZXROZXdQZXJpb2RMZW5ndGhBY3Rpb25zAQUPbmV3UGVyaW9kTGVuZ3RoAWkBC2dldFVzZXJEYXRhAQt1c2VyQWRkcmVzcwQNJHQwMTI5MjIxMzAwOQkBFWdldFVzZXJUb0NsYWltQmFsYW5jZQEFC3VzZXJBZGRyZXNzBA1jdXJyZW50UGVyaW9kCAUNJHQwMTI5MjIxMzAwOQJfMQQHdG9DbGFpbQgFDSR0MDEyOTIyMTMwMDkCXzIECm5leHRQZXJpb2QIBQ0kdDAxMjkyMjEzMDA5Al8zBAh0b1VubG9jawgFDSR0MDEyOTIyMTMwMDkCXzQECG5vZGVMaXN0CQEWZ2V0VXNlckxlYXNpbmdOb2RlTGlzdAEFC3VzZXJBZGRyZXNzCQCUCgIFA25pbAkAlgoEBQd0b0NsYWltBQh0b1VubG9jawkAZAIFCHRvVW5sb2NrBQd0b0NsYWltBQhub2RlTGlzdAFpAQhzdGFrZUZvcgILbm9kZUFkZHJlc3MLdXNlckFkZHJlc3MJAQ9nZXRTdGFrZUFjdGlvbnMDBQtub2RlQWRkcmVzcwULdXNlckFkZHJlc3MFAWkBaQEFc3Rha2UBC25vZGVBZGRyZXNzBAt1c2VyQWRkcmVzcwkApQgBCAUBaQZjYWxsZXIJAQ9nZXRTdGFrZUFjdGlvbnMDBQtub2RlQWRkcmVzcwULdXNlckFkZHJlc3MFAWkBaQERc3Rha2VGcm9tVW5sb2NrZWQCC25vZGVBZGRyZXNzBmFtb3VudAQLdXNlckFkZHJlc3MJAKUIAQgFAWkGY2FsbGVyCQEbZ2V0U3Rha2VGcm9tVW5sb2NrZWRBY3Rpb25zAwULbm9kZUFkZHJlc3MFC3VzZXJBZGRyZXNzBQZhbW91bnQBaQEHdW5zdGFrZQILbm9kZUFkZHJlc3MGYW1vdW50BAt1c2VyQWRkcmVzcwkApQgBCAUBaQZjYWxsZXIJARFnZXRVbnN0YWtlQWN0aW9ucwMFC25vZGVBZGRyZXNzBQt1c2VyQWRkcmVzcwUGYW1vdW50AWkBBWNsYWltAQZhbW91bnQEC3VzZXJBZGRyZXNzCQClCAEIBQFpBmNhbGxlcgkBF2dldENsYWltVW5sb2NrZWRBY3Rpb25zAgULdXNlckFkZHJlc3MFBmFtb3VudAFpAQhjbGFpbUFsbAAEC3VzZXJBZGRyZXNzCQClCAEIBQFpBmNhbGxlcgQNJHQwMTM5NjcxNDA1NAkBFWdldFVzZXJUb0NsYWltQmFsYW5jZQEFC3VzZXJBZGRyZXNzBA1jdXJyZW50UGVyaW9kCAUNJHQwMTM5NjcxNDA1NAJfMQQHdG9DbGFpbQgFDSR0MDEzOTY3MTQwNTQCXzIECm5leHRQZXJpb2QIBQ0kdDAxMzk2NzE0MDU0Al8zBAh0b1VubG9jawgFDSR0MDEzOTY3MTQwNTQCXzQJARdnZXRDbGFpbVVubG9ja2VkQWN0aW9ucwIFC3VzZXJBZGRyZXNzBQd0b0NsYWltAHSl5cE=", "height": 2972957, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 42vGnGiVpH7pUFxoMExUo42xj52nfGRJQskBfYrVXMw1 Next: 4bqmQ7FBJubFQ1x7VGeeiTsrhHD8zohN3tShLrDLe9PJ Diff:
OldNewDifferences
329329 let nextPeriod = $t01292213009._3
330330 let toUnlock = $t01292213009._4
331331 let nodeList = getUserLeasingNodeList(userAddress)
332- $Tuple2(nil, $Tuple5($Tuple2(currentPeriodId, periodLength), toClaim, toUnlock, (toUnlock + toClaim), nodeList))
332+ $Tuple2(nil, $Tuple4(toClaim, toUnlock, (toUnlock + toClaim), nodeList))
333333 }
334334
335335
374374 @Callable(i)
375375 func claimAll () = {
376376 let userAddress = toString(i.caller)
377- let $t01400014087 = getUserToClaimBalance(userAddress)
378- let currentPeriod = $t01400014087._1
379- let toClaim = $t01400014087._2
380- let nextPeriod = $t01400014087._3
381- let toUnlock = $t01400014087._4
377+ let $t01396714054 = getUserToClaimBalance(userAddress)
378+ let currentPeriod = $t01396714054._1
379+ let toClaim = $t01396714054._2
380+ let nextPeriod = $t01396714054._3
381+ let toUnlock = $t01396714054._4
382382 getClaimUnlockedActions(userAddress, toClaim)
383383 }
384384
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,currentPeriod,currentLeased,nextPeriod,nextLeased) = {
6464 let valueString = makeString(["%d%d%d%d", toString(currentPeriod), toString(currentLeased), toString(nextPeriod), 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 $Tuple4(nodeCurrentPeriod, nodeCurrentLeased, nodeNextPeriod, nodeNextLeased)
8080 else $Tuple4(currentPeriodHeight, nodeNextLeased, nextPeriodHeight, nodeNextLeased)
8181 case _ =>
8282 $Tuple4(0, 0, 0, 0)
8383 }
8484 }
8585
8686
8787 func getUserLeasingEntry (nodeAddress,userAddress,userCurrentPeriod,userCurrentLeased,userNextPeriod,userNextLeased) = {
8888 let valueString = makeString(["%d%d%d%d", toString(userCurrentPeriod), toString(userCurrentLeased), toString(userNextPeriod), 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 $Tuple4(userCurrentPeriod, userCurrentLeased, userNextPeriod, userNextLeased)
104104 else $Tuple4(currentPeriodHeight, userNextLeased, nextPeriodHeight, userNextLeased)
105105 case _ =>
106106 $Tuple4(0, 0, 0, 0)
107107 }
108108 }
109109
110110
111111 func getUserToClaimEntry (userAddress,currentPeriod,toClaim,nextPeriod,toUnlock) = {
112112 let valueString = makeString(["%d%d%d%d", toString(currentPeriod), toString(toClaim), toString(nextPeriod), 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 $Tuple4(currentPeriod, toClaim, nextPeriod, toUnlock)
128128 else $Tuple4(currentPeriodHeight, (toClaim + toUnlock), nextPeriodHeight, 0)
129129 case _ =>
130130 $Tuple4(0, 0, 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 $t070397147 = getLeasingNodeData(nodeAddress)
185185 let nodeCurrentPeriod = $t070397147._1
186186 let nodeCurrentLeased = $t070397147._2
187187 let nodeNextPeriod = $t070397147._3
188188 let nodeNextLeased = $t070397147._4
189189 let newNodeNextLease = (nodeNextLeased + userLeasingAmount)
190190 let $t072157336 = getUserLeasingData(nodeAddress, userAddress)
191191 let userCurrentPeriod = $t072157336._1
192192 let userCurrentLeased = $t072157336._2
193193 let userNextPeriod = $t072157336._3
194194 let userNextLeased = $t072157336._4
195195 let newUserNextLeased = (userNextLeased + userLeasingAmount)
196196 [getLeasingNodeEntry(nodeAddress, nodeCurrentPeriod, nodeCurrentLeased, nodeNextPeriod, newNodeNextLease), getUserLeasingEntry(nodeAddress, userAddress, userCurrentPeriod, userCurrentLeased, userNextPeriod, newUserNextLeased), getUserNodeListEntry(userAddress, addNodeToNodeList(userAddress, nodeAddress))]
197197 }
198198 else throw("Strict value is not equal to itself.")
199199 }
200200
201201
202202 func getUnstakeActions (nodeAddress,userAddress,unstakeAmount) = {
203203 let $t080248132 = getLeasingNodeData(nodeAddress)
204204 let nodeCurrentPeriod = $t080248132._1
205205 let nodeCurrentLeased = $t080248132._2
206206 let nodeNextPeriod = $t080248132._3
207207 let nodeNextLeased = $t080248132._4
208208 let $t081378258 = getUserLeasingData(nodeAddress, userAddress)
209209 let userCurrentPeriod = $t081378258._1
210210 let userCurrentLeased = $t081378258._2
211211 let userNextPeriod = $t081378258._3
212212 let userNextLeased = $t081378258._4
213213 let checks = [if ((unstakeAmount > 0))
214214 then true
215215 else throwErr("unstake amount should be greater than 0"), if ((userNextLeased >= unstakeAmount))
216216 then true
217217 else throwErr("unstake amount should be less or equal user staked amount"), if ((nodeNextLeased >= unstakeAmount))
218218 then true
219219 else throwErr("unstake amount should be less or equal node staked amount"), if (isValidAddress(nodeAddress))
220220 then true
221221 else throwErr(makeString(["node address is not valid:", nodeAddress], " ")), if (isValidAddress(userAddress))
222222 then true
223223 else throwErr(makeString(["user address is not valid:", userAddress], " "))]
224224 if ((checks == checks))
225225 then {
226226 let newNodeNextLease = (nodeNextLeased - unstakeAmount)
227227 let newUserNextLeased = (userNextLeased - unstakeAmount)
228228 let $t089519083 = getUserToClaimBalance(userAddress)
229229 let currentPeriod = $t089519083._1
230230 let toClaim = $t089519083._2
231231 let nextPeriod = $t089519083._3
232232 let toUnlock = $t089519083._4
233233 let newToUnlock = (toUnlock + unstakeAmount)
234234 let removeNodeActions = if ((newUserNextLeased == 0))
235235 then [getUserNodeListEntry(userAddress, removeNodeFromNodeList(userAddress, nodeAddress))]
236236 else nil
237237 ([getLeasingNodeEntry(nodeAddress, nodeCurrentPeriod, nodeCurrentLeased, nodeNextPeriod, newNodeNextLease), getUserLeasingEntry(nodeAddress, userAddress, userCurrentPeriod, userCurrentLeased, userNextPeriod, newUserNextLeased), getUserToClaimEntry(userAddress, currentPeriod, toClaim, nextPeriod, newToUnlock)] ++ removeNodeActions)
238238 }
239239 else throw("Strict value is not equal to itself.")
240240 }
241241
242242
243243 func getClaimUnlockedActions (userAddress,claimAmount) = {
244244 let $t097509837 = getUserToClaimBalance(userAddress)
245245 let currentPeriod = $t097509837._1
246246 let toClaim = $t097509837._2
247247 let nextPeriod = $t097509837._3
248248 let toUnlock = $t097509837._4
249249 let checks = [if ((claimAmount > 0))
250250 then true
251251 else throwErr("claim amount should be greater than 0"), if ((toClaim >= claimAmount))
252252 then true
253253 else throwErr("claim amount should be less or equal unlocked amount"), if (isValidAddress(userAddress))
254254 then true
255255 else throwErr(makeString(["user address is not valid:", userAddress], " "))]
256256 if ((checks == checks))
257257 then {
258258 let newToClaim = (toClaim - claimAmount)
259259 [getUserToClaimEntry(userAddress, currentPeriod, newToClaim, nextPeriod, toUnlock), ScriptTransfer(addressFromStringValue(userAddress), claimAmount, assetIdBytes)]
260260 }
261261 else throw("Strict value is not equal to itself.")
262262 }
263263
264264
265265 func getStakeFromUnlockedActions (nodeAddress,userAddress,userLeasingAmount) = {
266266 let $t01050410591 = getUserToClaimBalance(userAddress)
267267 let currentPeriod = $t01050410591._1
268268 let toClaim = $t01050410591._2
269269 let nextPeriod = $t01050410591._3
270270 let toUnlock = $t01050410591._4
271271 let available = (toUnlock + toClaim)
272272 let checks = [if ((userLeasingAmount > 0))
273273 then true
274274 else throwErr("amount should be greater than 0"), if ((available >= userLeasingAmount))
275275 then true
276276 else throwErr("amount should be less or equal to available"), if (isValidAddress(nodeAddress))
277277 then true
278278 else throwErr(makeString(["node address is not valid:", nodeAddress], " ")), if (isValidAddress(userAddress))
279279 then true
280280 else throwErr(makeString(["user address is not valid:", userAddress], " "))]
281281 if ((checks == checks))
282282 then {
283283 let $t01106811176 = getLeasingNodeData(nodeAddress)
284284 let nodeCurrentPeriod = $t01106811176._1
285285 let nodeCurrentLeased = $t01106811176._2
286286 let nodeNextPeriod = $t01106811176._3
287287 let nodeNextLeased = $t01106811176._4
288288 let newNodeNextLease = (nodeNextLeased + userLeasingAmount)
289289 let $t01124411365 = getUserLeasingData(nodeAddress, userAddress)
290290 let userCurrentPeriod = $t01124411365._1
291291 let userCurrentLeased = $t01124411365._2
292292 let userNextPeriod = $t01124411365._3
293293 let userNextLeased = $t01124411365._4
294294 let newUserNextLeased = (userNextLeased + userLeasingAmount)
295295 let newToUnlock = max([0, (toUnlock - userLeasingAmount)])
296296 let newToClaim = min([toClaim, (toClaim + (toUnlock - userLeasingAmount))])
297297 [getLeasingNodeEntry(nodeAddress, nodeCurrentPeriod, nodeCurrentLeased, nodeNextPeriod, nodeNextLeased), getUserLeasingEntry(nodeAddress, userAddress, userCurrentPeriod, userCurrentLeased, userNextPeriod, newUserNextLeased), getUserToClaimEntry(userAddress, currentPeriod, newToClaim, nextPeriod, newToUnlock), getUserNodeListEntry(userAddress, addNodeToNodeList(userAddress, nodeAddress))]
298298 }
299299 else throw("Strict value is not equal to itself.")
300300 }
301301
302302
303303 func getSetNewPeriodLengthActions (newPeriodLength) = {
304304 let check = [if ((newPeriodLength > 0))
305305 then true
306306 else throwErr("period length should be greater than 0")]
307307 if ((check == check))
308308 then if ((periodOffsetHeight == -1))
309309 then [IntegerEntry(keyPeriodLength, newPeriodLength), IntegerEntry(keyPeriodOffsetHeight, height)]
310310 else {
311311 let newPeriodOffsetId = (currentPeriodId + 1)
312312 let newOffsetHeight = ((periodLength * (newPeriodOffsetId - periodOffsetId)) + periodOffsetHeight)
313313 [IntegerEntry(keyPeriodOffsetId, newPeriodOffsetId), IntegerEntry(keyPeriodOffsetHeight, newOffsetHeight), IntegerEntry(keyPeriodLength, newPeriodLength)]
314314 }
315315 else throw("Strict value is not equal to itself.")
316316 }
317317
318318
319319 @Callable(i)
320320 func setNewPeriodLength (newPeriodLength) = getSetNewPeriodLengthActions(newPeriodLength)
321321
322322
323323
324324 @Callable(i)
325325 func getUserData (userAddress) = {
326326 let $t01292213009 = getUserToClaimBalance(userAddress)
327327 let currentPeriod = $t01292213009._1
328328 let toClaim = $t01292213009._2
329329 let nextPeriod = $t01292213009._3
330330 let toUnlock = $t01292213009._4
331331 let nodeList = getUserLeasingNodeList(userAddress)
332- $Tuple2(nil, $Tuple5($Tuple2(currentPeriodId, periodLength), toClaim, toUnlock, (toUnlock + toClaim), nodeList))
332+ $Tuple2(nil, $Tuple4(toClaim, toUnlock, (toUnlock + toClaim), nodeList))
333333 }
334334
335335
336336
337337 @Callable(i)
338338 func stakeFor (nodeAddress,userAddress) = getStakeActions(nodeAddress, userAddress, i)
339339
340340
341341
342342 @Callable(i)
343343 func stake (nodeAddress) = {
344344 let userAddress = toString(i.caller)
345345 getStakeActions(nodeAddress, userAddress, i)
346346 }
347347
348348
349349
350350 @Callable(i)
351351 func stakeFromUnlocked (nodeAddress,amount) = {
352352 let userAddress = toString(i.caller)
353353 getStakeFromUnlockedActions(nodeAddress, userAddress, amount)
354354 }
355355
356356
357357
358358 @Callable(i)
359359 func unstake (nodeAddress,amount) = {
360360 let userAddress = toString(i.caller)
361361 getUnstakeActions(nodeAddress, userAddress, amount)
362362 }
363363
364364
365365
366366 @Callable(i)
367367 func claim (amount) = {
368368 let userAddress = toString(i.caller)
369369 getClaimUnlockedActions(userAddress, amount)
370370 }
371371
372372
373373
374374 @Callable(i)
375375 func claimAll () = {
376376 let userAddress = toString(i.caller)
377- let $t01400014087 = getUserToClaimBalance(userAddress)
378- let currentPeriod = $t01400014087._1
379- let toClaim = $t01400014087._2
380- let nextPeriod = $t01400014087._3
381- let toUnlock = $t01400014087._4
377+ let $t01396714054 = getUserToClaimBalance(userAddress)
378+ let currentPeriod = $t01396714054._1
379+ let toClaim = $t01396714054._2
380+ let nextPeriod = $t01396714054._3
381+ let toUnlock = $t01396714054._4
382382 getClaimUnlockedActions(userAddress, toClaim)
383383 }
384384
385385

github/deemru/w8io/026f985 
47.99 ms