tx · 4FG8tqN6QasBdHEH4Fac2CZDVHPaPL6rL9UUAPGMJCCK 3NCWFHDzdPHZC6636ZkMLNDup9mjpbTLs7h: -0.01200000 Waves 2024.02.13 15:50 [2974489] smart account 3NCWFHDzdPHZC6636ZkMLNDup9mjpbTLs7h > SELF 0.00000000 Waves
{ "type": 13, "id": "4FG8tqN6QasBdHEH4Fac2CZDVHPaPL6rL9UUAPGMJCCK", "fee": 1200000, "feeAssetId": null, "timestamp": 1707828632810, "version": 2, "chainId": 84, "sender": "3NCWFHDzdPHZC6636ZkMLNDup9mjpbTLs7h", "senderPublicKey": "3z8Q6Zu3KppVmn6fJJvrLc1Wo3krVHSvfaNcerm82md2", "proofs": [ "5GT1Mn8K2PabESb8xnNtSDDUs4hLyMNFmGT8KdEgipTGPbVZQEaZ7RzRXG8C9THveXYXeojXifr5APf2TUfKZGSf" ], "script": "base64:BgIvCAISAwoBARIDCgEIEgMKAQgSBAoCCAgSAwoBCBIECgIIARIECgIIARIDCgEBEgAjAAxjb250cmFjdEZpbGUCEWwybXBfbGVhc2luZy5yaWRlAANTRVACAl9fAQh0aHJvd0VycgEDbXNnCQACAQkArAICCQCsAgIFDGNvbnRyYWN0RmlsZQICOiAFA21zZwAKa2V5QXNzZXRJZAkAuQkCCQDMCAICAiVzCQDMCAICB2Fzc2V0SWQFA25pbAUDU0VQAAxrZXlBZG1pbkxpc3QJALkJAgkAzAgCAgIlcwkAzAgCAglhZG1pbkxpc3QFA25pbAUDU0VQABFrZXlQZXJpb2RPZmZzZXRJZAkAuQkCCQDMCAICAiVzCQDMCAICCG9mZnNldElkBQNuaWwFA1NFUAAVa2V5UGVyaW9kT2Zmc2V0SGVpZ2h0CQC5CQIJAMwIAgICJXMJAMwIAgIMb2Zmc2V0SGVpZ2h0BQNuaWwFA1NFUAAPa2V5UGVyaW9kTGVuZ3RoCQC5CQIJAMwIAgICJXMJAMwIAgIMcGVyaW9kTGVuZ3RoBQNuaWwFA1NFUAAOcGVyaW9kT2Zmc2V0SWQJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwURa2V5UGVyaW9kT2Zmc2V0SWQAAAAMcGVyaW9kTGVuZ3RoCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMFD2tleVBlcmlvZExlbmd0aACQTgAScGVyaW9kT2Zmc2V0SGVpZ2h0CQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMFFWtleVBlcmlvZE9mZnNldEhlaWdodAD///////////8BAA9jdXJyZW50UGVyaW9kSWQDAwkAZgIFBmhlaWdodAUScGVyaW9kT2Zmc2V0SGVpZ2h0CQECIT0CBRJwZXJpb2RPZmZzZXRIZWlnaHQA////////////AQcJAGQCCQBpAgkAZQIFBmhlaWdodAUScGVyaW9kT2Zmc2V0SGVpZ2h0BQxwZXJpb2RMZW5ndGgFDnBlcmlvZE9mZnNldElkCQCWAwEJAMwIAgAACQDMCAIJAGUCBQ5wZXJpb2RPZmZzZXRJZAABBQNuaWwAE2N1cnJlbnRQZXJpb2RIZWlnaHQJAGQCBRJwZXJpb2RPZmZzZXRIZWlnaHQJAGgCCQBlAgUPY3VycmVudFBlcmlvZElkBQ5wZXJpb2RPZmZzZXRJZAUMcGVyaW9kTGVuZ3RoABBuZXh0UGVyaW9kSGVpZ2h0CQBkAgUTY3VycmVudFBlcmlvZEhlaWdodAUMcGVyaW9kTGVuZ3RoARJrZXlMZWFzaW5nTm9kZURhdGEBC25vZGVBZGRyZXNzCQC5CQIJAMwIAgICJXMJAMwIAgULbm9kZUFkZHJlc3MFA25pbAUDU0VQAQ5rZXlVc2VyVG9DbGFpbQELdXNlckFkZHJlc3MJALkJAgkAzAgCAgQlcyVzCQDMCAICB3RvQ2xhaW0JAMwIAgULdXNlckFkZHJlc3MFA25pbAUDU0VQARZrZXlVc2VyTGVhc2luZ05vZGVEYXRhAgt1c2VyQWRkcmVzcwtub2RlQWRkcmVzcwkAuQkCCQDMCAICBCVzJXMJAMwIAgULbm9kZUFkZHJlc3MJAMwIAgULdXNlckFkZHJlc3MFA25pbAUDU0VQARZrZXlOb2RlTGVhc2luZ0J5SGVpZ2h0AQtub2RlQWRkcmVzcwkAuQkCCQDMCAICBCVzJWQJAMwIAgULbm9kZUFkZHJlc3MJAMwIAgkApAMBBQZoZWlnaHQFA25pbAUDU0VQARZrZXlVc2VyTGVhc2luZ0J5SGVpZ2h0Agtub2RlQWRkcmVzcwt1c2VyQWRkcmVzcwkAuQkCCQDMCAICBiVzJXMlZAkAzAgCBQtub2RlQWRkcmVzcwkAzAgCBQt1c2VyQWRkcmVzcwkAzAgCCQCkAwEFBmhlaWdodAUDbmlsBQNTRVAADWFzc2V0SWRTdHJpbmcJAQt2YWx1ZU9yRWxzZQIJAJ0IAgUEdGhpcwUKa2V5QXNzZXRJZAIFV0FWRVMADGFzc2V0SWRCeXRlcwMJAAACBQ1hc3NldElkU3RyaW5nAgVXQVZFUwUEdW5pdAkA2QQBBQ1hc3NldElkU3RyaW5nAAxhZG1pbkxpc3RSYXcJALUJAgkBC3ZhbHVlT3JFbHNlAgkAnQgCBQR0aGlzBQxrZXlBZG1pbkxpc3QCAAUDU0VQAQdpc0FkbWluAQdhZGRyZXNzCQEPY29udGFpbnNFbGVtZW50AgUMYWRtaW5MaXN0UmF3BQdhZGRyZXNzAQ5pc1ZhbGlkQWRkcmVzcwEHYWRkcmVzcwQHJG1hdGNoMAkApggBBQdhZGRyZXNzAwkAAQIFByRtYXRjaDACB0FkZHJlc3MEAWEFByRtYXRjaDAGBwETZ2V0TGVhc2luZ05vZGVFbnRyeQMLbm9kZUFkZHJlc3MNY3VycmVudExlYXNlZApuZXh0TGVhc2VkBAt2YWx1ZVN0cmluZwkAuQkCCQDMCAICCCVkJWQlZCVkCQDMCAIJAKQDAQUTY3VycmVudFBlcmlvZEhlaWdodAkAzAgCCQCkAwEFDWN1cnJlbnRMZWFzZWQJAMwIAgkApAMBBRBuZXh0UGVyaW9kSGVpZ2h0CQDMCAIJAKQDAQUKbmV4dExlYXNlZAUDbmlsBQNTRVAJAQtTdHJpbmdFbnRyeQIJARJrZXlMZWFzaW5nTm9kZURhdGEBBQtub2RlQWRkcmVzcwULdmFsdWVTdHJpbmcBEmdldExlYXNpbmdOb2RlRGF0YQELbm9kZUFkZHJlc3MEGGxlYXNpbmdOb2RlRGF0YVN0cmluZ1JhdwkAnQgCBQR0aGlzCQESa2V5TGVhc2luZ05vZGVEYXRhAQULbm9kZUFkZHJlc3MEByRtYXRjaDAFGGxlYXNpbmdOb2RlRGF0YVN0cmluZ1JhdwMJAAECBQckbWF0Y2gwAgZTdHJpbmcEAmRzBQckbWF0Y2gwBAhkYXRhTGlzdAkAtQkCBQJkcwUDU0VQBBFub2RlQ3VycmVudFBlcmlvZAkBDXBhcnNlSW50VmFsdWUBCQCRAwIFCGRhdGFMaXN0AAEEEW5vZGVDdXJyZW50TGVhc2VkCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUIZGF0YUxpc3QAAgQObm9kZU5leHRQZXJpb2QJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQhkYXRhTGlzdAADBA5ub2RlTmV4dExlYXNlZAkBDXBhcnNlSW50VmFsdWUBCQCRAwIFCGRhdGFMaXN0AAQDCQBmAgUObm9kZU5leHRQZXJpb2QFBmhlaWdodAkAlAoCBRFub2RlQ3VycmVudExlYXNlZAUObm9kZU5leHRMZWFzZWQJAJQKAgUObm9kZU5leHRMZWFzZWQFDm5vZGVOZXh0TGVhc2VkCQCUCgIAAAAAARNnZXRVc2VyTGVhc2luZ0VudHJ5BAtub2RlQWRkcmVzcwt1c2VyQWRkcmVzcxF1c2VyQ3VycmVudExlYXNlZA51c2VyTmV4dExlYXNlZAQLdmFsdWVTdHJpbmcJALkJAgkAzAgCAgglZCVkJWQlZAkAzAgCCQCkAwEFE2N1cnJlbnRQZXJpb2RIZWlnaHQJAMwIAgkApAMBBRF1c2VyQ3VycmVudExlYXNlZAkAzAgCCQCkAwEFEG5leHRQZXJpb2RIZWlnaHQJAMwIAgkApAMBBQ51c2VyTmV4dExlYXNlZAUDbmlsBQNTRVAJAQtTdHJpbmdFbnRyeQIJARZrZXlVc2VyTGVhc2luZ05vZGVEYXRhAgULdXNlckFkZHJlc3MFC25vZGVBZGRyZXNzBQt2YWx1ZVN0cmluZwESZ2V0VXNlckxlYXNpbmdEYXRhAgtub2RlQWRkcmVzcwt1c2VyQWRkcmVzcwQYbGVhc2luZ1VzZXJEYXRhU3RyaW5nUmF3CQCdCAIFBHRoaXMJARZrZXlVc2VyTGVhc2luZ05vZGVEYXRhAgULdXNlckFkZHJlc3MFC25vZGVBZGRyZXNzBAckbWF0Y2gwBRhsZWFzaW5nVXNlckRhdGFTdHJpbmdSYXcDCQABAgUHJG1hdGNoMAIGU3RyaW5nBAJkcwUHJG1hdGNoMAQIZGF0YUxpc3QJALUJAgUCZHMFA1NFUAQRdXNlckN1cnJlbnRQZXJpb2QJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQhkYXRhTGlzdAABBBF1c2VyQ3VycmVudExlYXNlZAkBDXBhcnNlSW50VmFsdWUBCQCRAwIFCGRhdGFMaXN0AAIEDnVzZXJOZXh0UGVyaW9kCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUIZGF0YUxpc3QAAwQOdXNlck5leHRMZWFzZWQJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQhkYXRhTGlzdAAEAwkAZgIFDnVzZXJOZXh0UGVyaW9kBQZoZWlnaHQJAJQKAgURdXNlckN1cnJlbnRMZWFzZWQFDnVzZXJOZXh0TGVhc2VkCQCUCgIFDnVzZXJOZXh0TGVhc2VkBQ51c2VyTmV4dExlYXNlZAkAlAoCAAAAAAETZ2V0VXNlclRvQ2xhaW1FbnRyeQMLdXNlckFkZHJlc3MHdG9DbGFpbQh0b1VubG9jawQLdmFsdWVTdHJpbmcJALkJAgkAzAgCAgglZCVkJWQlZAkAzAgCCQCkAwEFE2N1cnJlbnRQZXJpb2RIZWlnaHQJAMwIAgkApAMBBQd0b0NsYWltCQDMCAIJAKQDAQUQbmV4dFBlcmlvZEhlaWdodAkAzAgCCQCkAwEFCHRvVW5sb2NrBQNuaWwFA1NFUAkBC1N0cmluZ0VudHJ5AgkBDmtleVVzZXJUb0NsYWltAQULdXNlckFkZHJlc3MFC3ZhbHVlU3RyaW5nARVnZXRVc2VyVG9DbGFpbUJhbGFuY2UBC3VzZXJBZGRyZXNzBBh1c2VyVG9DbGFpbURhdGFTdHJpbmdSYXcJAJ0IAgUEdGhpcwkBDmtleVVzZXJUb0NsYWltAQULdXNlckFkZHJlc3MEByRtYXRjaDAFGHVzZXJUb0NsYWltRGF0YVN0cmluZ1JhdwMJAAECBQckbWF0Y2gwAgZTdHJpbmcEAmRzBQckbWF0Y2gwBAhkYXRhTGlzdAkAtQkCBQJkcwUDU0VQBA1jdXJyZW50UGVyaW9kCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUIZGF0YUxpc3QAAQQHdG9DbGFpbQkBDXBhcnNlSW50VmFsdWUBCQCRAwIFCGRhdGFMaXN0AAIECm5leHRQZXJpb2QJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQhkYXRhTGlzdAADBAh0b1VubG9jawkBDXBhcnNlSW50VmFsdWUBCQCRAwIFCGRhdGFMaXN0AAQDCQBmAgUKbmV4dFBlcmlvZAUGaGVpZ2h0CQCUCgIFB3RvQ2xhaW0FCHRvVW5sb2NrCQCUCgIJAGQCBQd0b0NsYWltBQh0b1VubG9jawAACQCUCgIAAAAAAQ9nZXRTdGFrZUFjdGlvbnMDC25vZGVBZGRyZXNzC3VzZXJBZGRyZXNzAWkEBmNoZWNrcwkAzAgCAwkAAAIJAJADAQgFAWkIcGF5bWVudHMAAQYJAQh0aHJvd0VycgECIHBheW1lbnQgc2l6ZSBzaG91bGQgYmUgZXhhY3RseSAxCQDMCAIDCQAAAggJAJEDAggFAWkIcGF5bWVudHMAAAdhc3NldElkBQxhc3NldElkQnl0ZXMGCQEIdGhyb3dFcnIBCQC5CQIJAMwIAgIacGF5bWVudCBhc3NldElkIHNob3VsZCBiZToJAMwIAgUNYXNzZXRJZFN0cmluZwUDbmlsAgEgCQDMCAIDCQEOaXNWYWxpZEFkZHJlc3MBBQtub2RlQWRkcmVzcwYJAQh0aHJvd0VycgEJALkJAgkAzAgCAhpub2RlIGFkZHJlc3MgaXMgbm90IHZhbGlkOgkAzAgCBQtub2RlQWRkcmVzcwUDbmlsAgEgCQDMCAIDCQEOaXNWYWxpZEFkZHJlc3MBBQt1c2VyQWRkcmVzcwYJAQh0aHJvd0VycgEJALkJAgkAzAgCAhp1c2VyIGFkZHJlc3MgaXMgbm90IHZhbGlkOgkAzAgCBQt1c2VyQWRkcmVzcwUDbmlsAgEgBQNuaWwDCQAAAgUGY2hlY2tzBQZjaGVja3MEEXVzZXJMZWFzaW5nQW1vdW50CAkAkQMCCAUBaQhwYXltZW50cwAABmFtb3VudAQLJHQwNTk4ODYwNjEJARJnZXRMZWFzaW5nTm9kZURhdGEBBQtub2RlQWRkcmVzcwQRbm9kZUN1cnJlbnRMZWFzZWQIBQskdDA1OTg4NjA2MQJfMQQObm9kZU5leHRMZWFzZWQIBQskdDA1OTg4NjA2MQJfMgQQbmV3Tm9kZU5leHRMZWFzZQkAZAIFDm5vZGVOZXh0TGVhc2VkBRF1c2VyTGVhc2luZ0Ftb3VudAQLJHQwNjEyOTYyMTUJARJnZXRVc2VyTGVhc2luZ0RhdGECBQtub2RlQWRkcmVzcwULdXNlckFkZHJlc3MEEXVzZXJDdXJyZW50TGVhc2VkCAULJHQwNjEyOTYyMTUCXzEEDnVzZXJOZXh0TGVhc2VkCAULJHQwNjEyOTYyMTUCXzIEEW5ld1VzZXJOZXh0TGVhc2VkCQBkAgUOdXNlck5leHRMZWFzZWQFEXVzZXJMZWFzaW5nQW1vdW50CQDMCAIJARNnZXRMZWFzaW5nTm9kZUVudHJ5AwULbm9kZUFkZHJlc3MFEW5vZGVDdXJyZW50TGVhc2VkBRBuZXdOb2RlTmV4dExlYXNlCQDMCAIJARNnZXRVc2VyTGVhc2luZ0VudHJ5BAULbm9kZUFkZHJlc3MFC3VzZXJBZGRyZXNzBRF1c2VyQ3VycmVudExlYXNlZAURbmV3VXNlck5leHRMZWFzZWQJAMwIAgkBDEludGVnZXJFbnRyeQIJARZrZXlOb2RlTGVhc2luZ0J5SGVpZ2h0AQULbm9kZUFkZHJlc3MFEG5ld05vZGVOZXh0TGVhc2UJAMwIAgkBDEludGVnZXJFbnRyeQIJARZrZXlVc2VyTGVhc2luZ0J5SGVpZ2h0AgULbm9kZUFkZHJlc3MFC3VzZXJBZGRyZXNzBRFuZXdVc2VyTmV4dExlYXNlZAUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuARFnZXRVbnN0YWtlQWN0aW9ucwMLbm9kZUFkZHJlc3MLdXNlckFkZHJlc3MNdW5zdGFrZUFtb3VudAQLJHQwNjcyNzY4MDAJARJnZXRMZWFzaW5nTm9kZURhdGEBBQtub2RlQWRkcmVzcwQRbm9kZUN1cnJlbnRMZWFzZWQIBQskdDA2NzI3NjgwMAJfMQQObm9kZU5leHRMZWFzZWQIBQskdDA2NzI3NjgwMAJfMgQLJHQwNjgwNTY4OTEJARJnZXRVc2VyTGVhc2luZ0RhdGECBQtub2RlQWRkcmVzcwULdXNlckFkZHJlc3MEEXVzZXJDdXJyZW50TGVhc2VkCAULJHQwNjgwNTY4OTECXzEEDnVzZXJOZXh0TGVhc2VkCAULJHQwNjgwNTY4OTECXzIEBmNoZWNrcwkAzAgCAwkAZgIFDXVuc3Rha2VBbW91bnQAAAYJAQh0aHJvd0VycgECJ3Vuc3Rha2UgYW1vdW50IHNob3VsZCBiZSBncmVhdGVyIHRoYW4gMAkAzAgCAwkAZwIFDnVzZXJOZXh0TGVhc2VkBQ11bnN0YWtlQW1vdW50BgkBCHRocm93RXJyAQI5dW5zdGFrZSBhbW91bnQgc2hvdWxkIGJlIGxlc3Mgb3IgZXF1YWwgdXNlciBzdGFrZWQgYW1vdW50CQDMCAIDCQBnAgUObm9kZU5leHRMZWFzZWQFDXVuc3Rha2VBbW91bnQGCQEIdGhyb3dFcnIBAjl1bnN0YWtlIGFtb3VudCBzaG91bGQgYmUgbGVzcyBvciBlcXVhbCBub2RlIHN0YWtlZCBhbW91bnQJAMwIAgMJAQ5pc1ZhbGlkQWRkcmVzcwEFC25vZGVBZGRyZXNzBgkBCHRocm93RXJyAQkAuQkCCQDMCAICGm5vZGUgYWRkcmVzcyBpcyBub3QgdmFsaWQ6CQDMCAIFC25vZGVBZGRyZXNzBQNuaWwCASAJAMwIAgMJAQ5pc1ZhbGlkQWRkcmVzcwEFC3VzZXJBZGRyZXNzBgkBCHRocm93RXJyAQkAuQkCCQDMCAICGnVzZXIgYWRkcmVzcyBpcyBub3QgdmFsaWQ6CQDMCAIFC3VzZXJBZGRyZXNzBQNuaWwCASAFA25pbAMJAAACBQZjaGVja3MFBmNoZWNrcwQQbmV3Tm9kZU5leHRMZWFzZQkAZQIFDm5vZGVOZXh0TGVhc2VkBQ11bnN0YWtlQW1vdW50BBFuZXdVc2VyTmV4dExlYXNlZAkAZQIFDnVzZXJOZXh0TGVhc2VkBQ11bnN0YWtlQW1vdW50BAskdDA3NTg0NzY4OQkBFWdldFVzZXJUb0NsYWltQmFsYW5jZQEFC3VzZXJBZGRyZXNzBAd0b0NsYWltCAULJHQwNzU4NDc2ODkCXzEECHRvVW5sb2NrCAULJHQwNzU4NDc2ODkCXzIEC25ld1RvVW5sb2NrCQBkAgUIdG9VbmxvY2sFDXVuc3Rha2VBbW91bnQJAMwIAgkBE2dldExlYXNpbmdOb2RlRW50cnkDBQtub2RlQWRkcmVzcwURbm9kZUN1cnJlbnRMZWFzZWQFEG5ld05vZGVOZXh0TGVhc2UJAMwIAgkBE2dldFVzZXJMZWFzaW5nRW50cnkEBQtub2RlQWRkcmVzcwULdXNlckFkZHJlc3MFEXVzZXJDdXJyZW50TGVhc2VkBRFuZXdVc2VyTmV4dExlYXNlZAkAzAgCCQETZ2V0VXNlclRvQ2xhaW1FbnRyeQMFC3VzZXJBZGRyZXNzBQd0b0NsYWltBQtuZXdUb1VubG9jawkAzAgCCQEMSW50ZWdlckVudHJ5AgkBFmtleU5vZGVMZWFzaW5nQnlIZWlnaHQBBQtub2RlQWRkcmVzcwUQbmV3Tm9kZU5leHRMZWFzZQkAzAgCCQEMSW50ZWdlckVudHJ5AgkBFmtleVVzZXJMZWFzaW5nQnlIZWlnaHQCBQtub2RlQWRkcmVzcwULdXNlckFkZHJlc3MFEW5ld1VzZXJOZXh0TGVhc2VkBQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BF2dldENsYWltVW5sb2NrZWRBY3Rpb25zAgt1c2VyQWRkcmVzcwtjbGFpbUFtb3VudAQLJHQwODIzMjgyOTIJARVnZXRVc2VyVG9DbGFpbUJhbGFuY2UBBQt1c2VyQWRkcmVzcwQHdG9DbGFpbQgFCyR0MDgyMzI4MjkyAl8xBAh0b1VubG9jawgFCyR0MDgyMzI4MjkyAl8yBAZjaGVja3MJAMwIAgMJAGYCBQtjbGFpbUFtb3VudAAABgkBCHRocm93RXJyAQIlY2xhaW0gYW1vdW50IHNob3VsZCBiZSBncmVhdGVyIHRoYW4gMAkAzAgCAwkAZwIFB3RvQ2xhaW0FC2NsYWltQW1vdW50BgkBCHRocm93RXJyAQI0Y2xhaW0gYW1vdW50IHNob3VsZCBiZSBsZXNzIG9yIGVxdWFsIHVubG9ja2VkIGFtb3VudAkAzAgCAwkBDmlzVmFsaWRBZGRyZXNzAQULdXNlckFkZHJlc3MGCQEIdGhyb3dFcnIBCQC5CQIJAMwIAgIadXNlciBhZGRyZXNzIGlzIG5vdCB2YWxpZDoJAMwIAgULdXNlckFkZHJlc3MFA25pbAIBIAUDbmlsAwkAAAIFBmNoZWNrcwUGY2hlY2tzBApuZXdUb0NsYWltCQBlAgUHdG9DbGFpbQULY2xhaW1BbW91bnQJAMwIAgkBE2dldFVzZXJUb0NsYWltRW50cnkDBQt1c2VyQWRkcmVzcwUKbmV3VG9DbGFpbQUIdG9VbmxvY2sJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwkBEUBleHRyTmF0aXZlKDEwNjIpAQULdXNlckFkZHJlc3MFC2NsYWltQW1vdW50BQxhc3NldElkQnl0ZXMFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgEbZ2V0U3Rha2VGcm9tVW5sb2NrZWRBY3Rpb25zAwtub2RlQWRkcmVzcwt1c2VyQWRkcmVzcxF1c2VyTGVhc2luZ0Ftb3VudAQLJHQwODkzMjg5OTIJARVnZXRVc2VyVG9DbGFpbUJhbGFuY2UBBQt1c2VyQWRkcmVzcwQHdG9DbGFpbQgFCyR0MDg5MzI4OTkyAl8xBAh0b1VubG9jawgFCyR0MDg5MzI4OTkyAl8yBAlhdmFpbGFibGUJAGQCBQh0b1VubG9jawUHdG9DbGFpbQQGY2hlY2tzCQDMCAIDCQBmAgURdXNlckxlYXNpbmdBbW91bnQAAAYJAQh0aHJvd0VycgECH2Ftb3VudCBzaG91bGQgYmUgZ3JlYXRlciB0aGFuIDAJAMwIAgMJAGcCBQlhdmFpbGFibGUFEXVzZXJMZWFzaW5nQW1vdW50BgkBCHRocm93RXJyAQIrYW1vdW50IHNob3VsZCBiZSBsZXNzIG9yIGVxdWFsIHRvIGF2YWlsYWJsZQkAzAgCAwkBDmlzVmFsaWRBZGRyZXNzAQULbm9kZUFkZHJlc3MGCQEIdGhyb3dFcnIBCQC5CQIJAMwIAgIabm9kZSBhZGRyZXNzIGlzIG5vdCB2YWxpZDoJAMwIAgULbm9kZUFkZHJlc3MFA25pbAIBIAkAzAgCAwkBDmlzVmFsaWRBZGRyZXNzAQULdXNlckFkZHJlc3MGCQEIdGhyb3dFcnIBCQC5CQIJAMwIAgIadXNlciBhZGRyZXNzIGlzIG5vdCB2YWxpZDoJAMwIAgULdXNlckFkZHJlc3MFA25pbAIBIAUDbmlsAwkAAAIFBmNoZWNrcwUGY2hlY2tzBAskdDA5NDY5OTU0MgkBEmdldExlYXNpbmdOb2RlRGF0YQEFC25vZGVBZGRyZXNzBBFub2RlQ3VycmVudExlYXNlZAgFCyR0MDk0Njk5NTQyAl8xBA5ub2RlTmV4dExlYXNlZAgFCyR0MDk0Njk5NTQyAl8yBBBuZXdOb2RlTmV4dExlYXNlCQBkAgUObm9kZU5leHRMZWFzZWQFEXVzZXJMZWFzaW5nQW1vdW50BAskdDA5NjEwOTY5NgkBEmdldFVzZXJMZWFzaW5nRGF0YQIFC25vZGVBZGRyZXNzBQt1c2VyQWRkcmVzcwQRdXNlckN1cnJlbnRMZWFzZWQIBQskdDA5NjEwOTY5NgJfMQQOdXNlck5leHRMZWFzZWQIBQskdDA5NjEwOTY5NgJfMgQRbmV3VXNlck5leHRMZWFzZWQJAGQCBQ51c2VyTmV4dExlYXNlZAURdXNlckxlYXNpbmdBbW91bnQEC25ld1RvVW5sb2NrCQCWAwEJAMwIAgAACQDMCAIJAGUCBQh0b1VubG9jawURdXNlckxlYXNpbmdBbW91bnQFA25pbAQKbmV3VG9DbGFpbQkAlwMBCQDMCAIFB3RvQ2xhaW0JAMwIAgkAZAIFB3RvQ2xhaW0JAGUCBQh0b1VubG9jawURdXNlckxlYXNpbmdBbW91bnQFA25pbAkAzAgCCQETZ2V0TGVhc2luZ05vZGVFbnRyeQMFC25vZGVBZGRyZXNzBRFub2RlQ3VycmVudExlYXNlZAUQbmV3Tm9kZU5leHRMZWFzZQkAzAgCCQETZ2V0VXNlckxlYXNpbmdFbnRyeQQFC25vZGVBZGRyZXNzBQt1c2VyQWRkcmVzcwURdXNlckN1cnJlbnRMZWFzZWQFEW5ld1VzZXJOZXh0TGVhc2VkCQDMCAIJARNnZXRVc2VyVG9DbGFpbUVudHJ5AwULdXNlckFkZHJlc3MFCm5ld1RvQ2xhaW0FC25ld1RvVW5sb2NrCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEWa2V5Tm9kZUxlYXNpbmdCeUhlaWdodAEFC25vZGVBZGRyZXNzBRBuZXdOb2RlTmV4dExlYXNlCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEWa2V5VXNlckxlYXNpbmdCeUhlaWdodAIFC25vZGVBZGRyZXNzBQt1c2VyQWRkcmVzcwURbmV3VXNlck5leHRMZWFzZWQFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgEcZ2V0U2V0TmV3UGVyaW9kTGVuZ3RoQWN0aW9ucwEPbmV3UGVyaW9kTGVuZ3RoBAVjaGVjawkAzAgCAwkAZgIFD25ld1BlcmlvZExlbmd0aAAABgkBCHRocm93RXJyAQImcGVyaW9kIGxlbmd0aCBzaG91bGQgYmUgZ3JlYXRlciB0aGFuIDAFA25pbAMJAAACBQVjaGVjawUFY2hlY2sDCQAAAgUScGVyaW9kT2Zmc2V0SGVpZ2h0AP///////////wEJAMwIAgkBDEludGVnZXJFbnRyeQIFD2tleVBlcmlvZExlbmd0aAUPbmV3UGVyaW9kTGVuZ3RoCQDMCAIJAQxJbnRlZ2VyRW50cnkCBRVrZXlQZXJpb2RPZmZzZXRIZWlnaHQFBmhlaWdodAUDbmlsCQDMCAIJAQxJbnRlZ2VyRW50cnkCBRFrZXlQZXJpb2RPZmZzZXRJZAkAZAIFD2N1cnJlbnRQZXJpb2RJZAABCQDMCAIJAQxJbnRlZ2VyRW50cnkCBRVrZXlQZXJpb2RPZmZzZXRIZWlnaHQFEG5leHRQZXJpb2RIZWlnaHQJAMwIAgkBDEludGVnZXJFbnRyeQIFD2tleVBlcmlvZExlbmd0aAUPbmV3UGVyaW9kTGVuZ3RoBQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAWkBEnNldE5ld1BlcmlvZExlbmd0aAEPbmV3UGVyaW9kTGVuZ3RoBAZjaGVja3MJAMwIAgMJAQdpc0FkbWluAQkApQgBCAUBaQZjYWxsZXIGCQEIdGhyb3dFcnIBAhxpLmNhbGxlciBpcyBub3QgaW4gYWRtaW5MaXN0BQNuaWwDCQAAAgUGY2hlY2tzBQZjaGVja3MJARxnZXRTZXROZXdQZXJpb2RMZW5ndGhBY3Rpb25zAQUPbmV3UGVyaW9kTGVuZ3RoCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBE2dldE5vZGVEYXRhUkVBRE9OTFkBC25vZGVBZGRyZXNzBA0kdDAxMTM4MDExNDQ0CQESZ2V0TGVhc2luZ05vZGVEYXRhAQULbm9kZUFkZHJlc3MEDGN1cnJlbnRMZWFzZQgFDSR0MDExMzgwMTE0NDQCXzEECm5leHRMZWFzZWQIBQ0kdDAxMTM4MDExNDQ0Al8yCQCUCgIFA25pbAkAlwoFBRNjdXJyZW50UGVyaW9kSGVpZ2h0BQxjdXJyZW50TGVhc2UFEG5leHRQZXJpb2RIZWlnaHQFCm5leHRMZWFzZWQFBmhlaWdodAFpARNnZXRVc2VyRGF0YVJFQURPTkxZAQt1c2VyQWRkcmVzcwQNJHQwMTE3OTMxMTg1MwkBFWdldFVzZXJUb0NsYWltQmFsYW5jZQEFC3VzZXJBZGRyZXNzBAd0b0NsYWltCAUNJHQwMTE3OTMxMTg1MwJfMQQIdG9VbmxvY2sIBQ0kdDAxMTc5MzExODUzAl8yCQCUCgIFA25pbAkAlwoFBRNjdXJyZW50UGVyaW9kSGVpZ2h0BQd0b0NsYWltBRBuZXh0UGVyaW9kSGVpZ2h0BQh0b1VubG9jawUGaGVpZ2h0AWkBDmxlYXNlQnlBZGRyZXNzAgtub2RlQWRkcmVzcwt1c2VyQWRkcmVzcwkBD2dldFN0YWtlQWN0aW9ucwMFC25vZGVBZGRyZXNzBQt1c2VyQWRkcmVzcwUBaQFpAQVsZWFzZQELbm9kZUFkZHJlc3MEC3VzZXJBZGRyZXNzCQClCAEIBQFpBmNhbGxlcgkBD2dldFN0YWtlQWN0aW9ucwMFC25vZGVBZGRyZXNzBQt1c2VyQWRkcmVzcwUBaQFpARFsZWFzZUZyb21VbmxvY2tlZAILbm9kZUFkZHJlc3MGYW1vdW50BAt1c2VyQWRkcmVzcwkApQgBCAUBaQZjYWxsZXIJARtnZXRTdGFrZUZyb21VbmxvY2tlZEFjdGlvbnMDBQtub2RlQWRkcmVzcwULdXNlckFkZHJlc3MFBmFtb3VudAFpAQtjYW5jZWxMZWFzZQILbm9kZUFkZHJlc3MGYW1vdW50BAt1c2VyQWRkcmVzcwkApQgBCAUBaQZjYWxsZXIJARFnZXRVbnN0YWtlQWN0aW9ucwMFC25vZGVBZGRyZXNzBQt1c2VyQWRkcmVzcwUGYW1vdW50AWkBBWNsYWltAQZhbW91bnQEC3VzZXJBZGRyZXNzCQClCAEIBQFpBmNhbGxlcgkBF2dldENsYWltVW5sb2NrZWRBY3Rpb25zAgULdXNlckFkZHJlc3MFBmFtb3VudAFpAQhjbGFpbUFsbAAEC3VzZXJBZGRyZXNzCQClCAEIBQFpBmNhbGxlcgQNJHQwMTI3ODExMjg0MQkBFWdldFVzZXJUb0NsYWltQmFsYW5jZQEFC3VzZXJBZGRyZXNzBAd0b0NsYWltCAUNJHQwMTI3ODExMjg0MQJfMQQIdG9VbmxvY2sIBQ0kdDAxMjc4MTEyODQxAl8yBAZjaGVja3MJAMwIAgMJAGYCBQd0b0NsYWltAAAGCQEIdGhyb3dFcnIBAhBub3RoaW5nIHRvIGNsYWltBQNuaWwDCQAAAgUGY2hlY2tzBQZjaGVja3MJARdnZXRDbGFpbVVubG9ja2VkQWN0aW9ucwIFC3VzZXJBZGRyZXNzBQd0b0NsYWltCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuADxJ7/w=", "height": 2974489, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: ovpcsZnbKjoEq79eq2Ycohf1Zj8USiv3BW2zLRdw1PQ Next: FracjSDzeGMWzndkyggfFQAiABE3YrdrNMmXpr579s6f Diff:
Old | New | Differences | |
---|---|---|---|
10 | 10 | ||
11 | 11 | let e = makeString(["%s", "assetId"], b) | |
12 | 12 | ||
13 | - | let f = makeString(["%s", " | |
13 | + | let f = makeString(["%s", "adminList"], b) | |
14 | 14 | ||
15 | - | let g = makeString(["%s", " | |
15 | + | let g = makeString(["%s", "offsetId"], b) | |
16 | 16 | ||
17 | - | let h = makeString(["%s", " | |
17 | + | let h = makeString(["%s", "offsetHeight"], b) | |
18 | 18 | ||
19 | - | let i = | |
19 | + | let i = makeString(["%s", "periodLength"], b) | |
20 | 20 | ||
21 | - | let j = valueOrElse(getInteger(this, | |
21 | + | let j = valueOrElse(getInteger(this, g), 0) | |
22 | 22 | ||
23 | - | let k = valueOrElse(getInteger(this, | |
23 | + | let k = valueOrElse(getInteger(this, i), 10000) | |
24 | 24 | ||
25 | - | let l = if (if ((height > k)) | |
26 | - | then (k != -1) | |
25 | + | let l = valueOrElse(getInteger(this, h), -1) | |
26 | + | ||
27 | + | let m = if (if ((height > l)) | |
28 | + | then (l != -1) | |
27 | 29 | else false) | |
28 | - | then (((height - | |
29 | - | else max([0, ( | |
30 | + | then (((height - l) / k) + j) | |
31 | + | else max([0, (j - 1)]) | |
30 | 32 | ||
31 | - | let | |
33 | + | let n = (l + ((m - j) * k)) | |
32 | 34 | ||
33 | - | let | |
35 | + | let o = (n + k) | |
34 | 36 | ||
35 | - | func | |
37 | + | func p (q) = makeString(["%s", q], b) | |
36 | 38 | ||
37 | 39 | ||
38 | - | func | |
40 | + | func r (s) = makeString(["%s%s", "toClaim", s], b) | |
39 | 41 | ||
40 | 42 | ||
41 | - | func | |
43 | + | func t (s,q) = makeString(["%s%s", q, s], b) | |
42 | 44 | ||
43 | 45 | ||
44 | - | func | |
46 | + | func u (q) = makeString(["%s%d", q, toString(height)], b) | |
45 | 47 | ||
46 | 48 | ||
47 | - | func | |
49 | + | func v (q,s) = makeString(["%s%s%d", q, s, toString(height)], b) | |
48 | 50 | ||
49 | 51 | ||
50 | - | let | |
52 | + | let w = valueOrElse(getString(this, e), "WAVES") | |
51 | 53 | ||
52 | - | let | |
54 | + | let x = if ((w == "WAVES")) | |
53 | 55 | then unit | |
54 | - | else fromBase58String( | |
56 | + | else fromBase58String(w) | |
55 | 57 | ||
56 | - | func x (y) = { | |
57 | - | let z = addressFromString(y) | |
58 | - | if ($isInstanceOf(z, "Address")) | |
58 | + | let y = split(valueOrElse(getString(this, f), ""), b) | |
59 | + | ||
60 | + | func z (A) = containsElement(y, A) | |
61 | + | ||
62 | + | ||
63 | + | func B (A) = { | |
64 | + | let C = addressFromString(A) | |
65 | + | if ($isInstanceOf(C, "Address")) | |
59 | 66 | then { | |
60 | - | let | |
67 | + | let D = C | |
61 | 68 | true | |
62 | 69 | } | |
63 | 70 | else false | |
64 | 71 | } | |
65 | 72 | ||
66 | 73 | ||
67 | - | func | |
68 | - | let | |
69 | - | StringEntry( | |
74 | + | func E (q,F,G) = { | |
75 | + | let H = makeString(["%d%d%d%d", toString(n), toString(F), toString(o), toString(G)], b) | |
76 | + | StringEntry(p(q), H) | |
70 | 77 | } | |
71 | 78 | ||
72 | 79 | ||
73 | - | func | |
74 | - | let | |
75 | - | let | |
76 | - | if ($isInstanceOf( | |
80 | + | func I (q) = { | |
81 | + | let J = getString(this, p(q)) | |
82 | + | let C = J | |
83 | + | if ($isInstanceOf(C, "String")) | |
77 | 84 | then { | |
78 | - | let H = z | |
79 | - | let I = split(H, b) | |
80 | - | let J = parseIntValue(I[1]) | |
81 | - | let K = parseIntValue(I[2]) | |
82 | - | let L = parseIntValue(I[3]) | |
83 | - | let M = parseIntValue(I[4]) | |
84 | - | if ((L > height)) | |
85 | - | then $Tuple2(K, M) | |
86 | - | else $Tuple2(M, M) | |
87 | - | } | |
88 | - | else $Tuple2(0, 0) | |
89 | - | } | |
90 | - | ||
91 | - | ||
92 | - | func N (p,r,O,P) = { | |
93 | - | let E = makeString(["%d%d%d%d", toString(m), toString(O), toString(n), toString(P)], b) | |
94 | - | StringEntry(s(r, p), E) | |
95 | - | } | |
96 | - | ||
97 | - | ||
98 | - | func Q (p,r) = { | |
99 | - | let R = getString(this, s(r, p)) | |
100 | - | let z = R | |
101 | - | if ($isInstanceOf(z, "String")) | |
102 | - | then { | |
103 | - | let H = z | |
104 | - | let I = split(H, b) | |
105 | - | let S = parseIntValue(I[1]) | |
106 | - | let O = parseIntValue(I[2]) | |
107 | - | let T = parseIntValue(I[3]) | |
108 | - | let P = parseIntValue(I[4]) | |
109 | - | if ((T > height)) | |
110 | - | then $Tuple2(O, P) | |
85 | + | let K = C | |
86 | + | let L = split(K, b) | |
87 | + | let M = parseIntValue(L[1]) | |
88 | + | let N = parseIntValue(L[2]) | |
89 | + | let O = parseIntValue(L[3]) | |
90 | + | let P = parseIntValue(L[4]) | |
91 | + | if ((O > height)) | |
92 | + | then $Tuple2(N, P) | |
111 | 93 | else $Tuple2(P, P) | |
112 | 94 | } | |
113 | 95 | else $Tuple2(0, 0) | |
114 | 96 | } | |
115 | 97 | ||
116 | 98 | ||
117 | - | func | |
118 | - | let | |
119 | - | StringEntry(q | |
99 | + | func Q (q,s,R,S) = { | |
100 | + | let H = makeString(["%d%d%d%d", toString(n), toString(R), toString(o), toString(S)], b) | |
101 | + | StringEntry(t(s, q), H) | |
120 | 102 | } | |
121 | 103 | ||
122 | 104 | ||
123 | - | func | |
124 | - | let | |
125 | - | let | |
126 | - | if ($isInstanceOf( | |
105 | + | func T (q,s) = { | |
106 | + | let U = getString(this, t(s, q)) | |
107 | + | let C = U | |
108 | + | if ($isInstanceOf(C, "String")) | |
127 | 109 | then { | |
128 | - | let | |
129 | - | let | |
130 | - | let | |
131 | - | let | |
132 | - | let | |
133 | - | let | |
134 | - | if (( | |
135 | - | then $Tuple2( | |
136 | - | else $Tuple2( | |
110 | + | let K = C | |
111 | + | let L = split(K, b) | |
112 | + | let V = parseIntValue(L[1]) | |
113 | + | let R = parseIntValue(L[2]) | |
114 | + | let W = parseIntValue(L[3]) | |
115 | + | let S = parseIntValue(L[4]) | |
116 | + | if ((W > height)) | |
117 | + | then $Tuple2(R, S) | |
118 | + | else $Tuple2(S, S) | |
137 | 119 | } | |
138 | 120 | else $Tuple2(0, 0) | |
139 | 121 | } | |
140 | 122 | ||
141 | 123 | ||
142 | - | func ab (p,r,ac) = { | |
143 | - | let ad = [if ((size(ac.payments) == 1)) | |
124 | + | func X (s,Y,Z) = { | |
125 | + | let H = makeString(["%d%d%d%d", toString(n), toString(Y), toString(o), toString(Z)], b) | |
126 | + | StringEntry(r(s), H) | |
127 | + | } | |
128 | + | ||
129 | + | ||
130 | + | func aa (s) = { | |
131 | + | let ab = getString(this, r(s)) | |
132 | + | let C = ab | |
133 | + | if ($isInstanceOf(C, "String")) | |
134 | + | then { | |
135 | + | let K = C | |
136 | + | let L = split(K, b) | |
137 | + | let ac = parseIntValue(L[1]) | |
138 | + | let Y = parseIntValue(L[2]) | |
139 | + | let ad = parseIntValue(L[3]) | |
140 | + | let Z = parseIntValue(L[4]) | |
141 | + | if ((ad > height)) | |
142 | + | then $Tuple2(Y, Z) | |
143 | + | else $Tuple2((Y + Z), 0) | |
144 | + | } | |
145 | + | else $Tuple2(0, 0) | |
146 | + | } | |
147 | + | ||
148 | + | ||
149 | + | func ae (q,s,af) = { | |
150 | + | let ag = [if ((size(af.payments) == 1)) | |
144 | 151 | then true | |
145 | - | else c("payment size should be exactly 1"), if (( | |
152 | + | else c("payment size should be exactly 1"), if ((af.payments[0].assetId == x)) | |
146 | 153 | then true | |
147 | - | else c(makeString(["payment assetId should be:", | |
154 | + | else c(makeString(["payment assetId should be:", w], " ")), if (B(q)) | |
148 | 155 | then true | |
149 | - | else c(makeString(["node address is not valid:", | |
156 | + | else c(makeString(["node address is not valid:", q], " ")), if (B(s)) | |
150 | 157 | then true | |
151 | - | else c(makeString(["user address is not valid:", | |
152 | - | if (( | |
158 | + | else c(makeString(["user address is not valid:", s], " "))] | |
159 | + | if ((ag == ag)) | |
153 | 160 | then { | |
154 | - | let | |
155 | - | let | |
156 | - | let | |
157 | - | let | |
158 | - | let | |
159 | - | let | |
160 | - | let | |
161 | - | let | |
162 | - | let | |
163 | - | [ | |
161 | + | let ah = af.payments[0].amount | |
162 | + | let ai = I(q) | |
163 | + | let N = ai._1 | |
164 | + | let P = ai._2 | |
165 | + | let aj = (P + ah) | |
166 | + | let ak = T(q, s) | |
167 | + | let R = ak._1 | |
168 | + | let S = ak._2 | |
169 | + | let al = (S + ah) | |
170 | + | [E(q, N, aj), Q(q, s, R, al), IntegerEntry(u(q), aj), IntegerEntry(v(q, s), al)] | |
164 | 171 | } | |
165 | 172 | else throw("Strict value is not equal to itself.") | |
166 | 173 | } | |
167 | 174 | ||
168 | 175 | ||
169 | - | func | |
170 | - | let | |
171 | - | let | |
172 | - | let | |
173 | - | let | |
174 | - | let | |
175 | - | let | |
176 | - | let | |
176 | + | func am (q,s,an) = { | |
177 | + | let ao = I(q) | |
178 | + | let N = ao._1 | |
179 | + | let P = ao._2 | |
180 | + | let ap = T(q, s) | |
181 | + | let R = ap._1 | |
182 | + | let S = ap._2 | |
183 | + | let ag = [if ((an > 0)) | |
177 | 184 | then true | |
178 | - | else c("unstake amount should be greater than 0"), if (( | |
185 | + | else c("unstake amount should be greater than 0"), if ((S >= an)) | |
179 | 186 | then true | |
180 | - | else c("unstake amount should be less or equal user staked amount"), if (( | |
187 | + | else c("unstake amount should be less or equal user staked amount"), if ((P >= an)) | |
181 | 188 | then true | |
182 | - | else c("unstake amount should be less or equal node staked amount"), if ( | |
189 | + | else c("unstake amount should be less or equal node staked amount"), if (B(q)) | |
183 | 190 | then true | |
184 | - | else c(makeString(["node address is not valid:", | |
191 | + | else c(makeString(["node address is not valid:", q], " ")), if (B(s)) | |
185 | 192 | then true | |
186 | - | else c(makeString(["user address is not valid:", | |
187 | - | if (( | |
193 | + | else c(makeString(["user address is not valid:", s], " "))] | |
194 | + | if ((ag == ag)) | |
188 | 195 | then { | |
189 | - | let | |
190 | - | let | |
191 | - | let | |
192 | - | let | |
193 | - | let | |
194 | - | let | |
195 | - | [ | |
196 | + | let aj = (P - an) | |
197 | + | let al = (S - an) | |
198 | + | let aq = aa(s) | |
199 | + | let Y = aq._1 | |
200 | + | let Z = aq._2 | |
201 | + | let ar = (Z + an) | |
202 | + | [E(q, N, aj), Q(q, s, R, al), X(s, Y, ar), IntegerEntry(u(q), aj), IntegerEntry(v(q, s), al)] | |
196 | 203 | } | |
197 | 204 | else throw("Strict value is not equal to itself.") | |
198 | 205 | } | |
199 | 206 | ||
200 | 207 | ||
201 | - | func | |
202 | - | let | |
203 | - | let | |
204 | - | let | |
205 | - | let | |
208 | + | func as (s,at) = { | |
209 | + | let au = aa(s) | |
210 | + | let Y = au._1 | |
211 | + | let Z = au._2 | |
212 | + | let ag = [if ((at > 0)) | |
206 | 213 | then true | |
207 | - | else c("claim amount should be greater than 0"), if (( | |
214 | + | else c("claim amount should be greater than 0"), if ((Y >= at)) | |
208 | 215 | then true | |
209 | - | else c("claim amount should be less or equal unlocked amount"), if ( | |
216 | + | else c("claim amount should be less or equal unlocked amount"), if (B(s)) | |
210 | 217 | then true | |
211 | - | else c(makeString(["user address is not valid:", | |
212 | - | if (( | |
218 | + | else c(makeString(["user address is not valid:", s], " "))] | |
219 | + | if ((ag == ag)) | |
213 | 220 | then { | |
214 | - | let | |
215 | - | [ | |
221 | + | let av = (Y - at) | |
222 | + | [X(s, av, Z), ScriptTransfer(addressFromStringValue(s), at, x)] | |
216 | 223 | } | |
217 | 224 | else throw("Strict value is not equal to itself.") | |
218 | 225 | } | |
219 | 226 | ||
220 | 227 | ||
221 | - | func | |
222 | - | let | |
223 | - | let | |
224 | - | let | |
225 | - | let | |
226 | - | let | |
228 | + | func aw (q,s,ah) = { | |
229 | + | let ax = aa(s) | |
230 | + | let Y = ax._1 | |
231 | + | let Z = ax._2 | |
232 | + | let ay = (Z + Y) | |
233 | + | let ag = [if ((ah > 0)) | |
227 | 234 | then true | |
228 | - | else c("amount should be greater than 0"), if (( | |
235 | + | else c("amount should be greater than 0"), if ((ay >= ah)) | |
229 | 236 | then true | |
230 | - | else c("amount should be less or equal to available"), if ( | |
237 | + | else c("amount should be less or equal to available"), if (B(q)) | |
231 | 238 | then true | |
232 | - | else c(makeString(["node address is not valid:", | |
239 | + | else c(makeString(["node address is not valid:", q], " ")), if (B(s)) | |
233 | 240 | then true | |
234 | - | else c(makeString(["user address is not valid:", | |
235 | - | if (( | |
241 | + | else c(makeString(["user address is not valid:", s], " "))] | |
242 | + | if ((ag == ag)) | |
236 | 243 | then { | |
237 | - | let | |
238 | - | let | |
239 | - | let | |
240 | - | let | |
241 | - | let | |
242 | - | let | |
243 | - | let | |
244 | - | let | |
245 | - | let | |
246 | - | let | |
247 | - | [ | |
244 | + | let az = I(q) | |
245 | + | let N = az._1 | |
246 | + | let P = az._2 | |
247 | + | let aj = (P + ah) | |
248 | + | let aA = T(q, s) | |
249 | + | let R = aA._1 | |
250 | + | let S = aA._2 | |
251 | + | let al = (S + ah) | |
252 | + | let ar = max([0, (Z - ah)]) | |
253 | + | let av = min([Y, (Y + (Z - ah))]) | |
254 | + | [E(q, N, aj), Q(q, s, R, al), X(s, av, ar), IntegerEntry(u(q), aj), IntegerEntry(v(q, s), al)] | |
248 | 255 | } | |
249 | 256 | else throw("Strict value is not equal to itself.") | |
250 | 257 | } | |
251 | 258 | ||
252 | 259 | ||
253 | - | func | |
254 | - | let | |
260 | + | func aB (aC) = { | |
261 | + | let aD = [if ((aC > 0)) | |
255 | 262 | then true | |
256 | 263 | else c("period length should be greater than 0")] | |
257 | - | if (( | |
258 | - | then if (( | |
259 | - | then [IntegerEntry( | |
260 | - | else [IntegerEntry( | |
264 | + | if ((aD == aD)) | |
265 | + | then if ((l == -1)) | |
266 | + | then [IntegerEntry(i, aC), IntegerEntry(h, height)] | |
267 | + | else [IntegerEntry(g, (m + 1)), IntegerEntry(h, o), IntegerEntry(i, aC)] | |
261 | 268 | else throw("Strict value is not equal to itself.") | |
262 | 269 | } | |
263 | 270 | ||
264 | 271 | ||
265 | - | @Callable(ac) | |
266 | - | func setNewPeriodLength (az) = ay(az) | |
267 | - | ||
268 | - | ||
269 | - | ||
270 | - | @Callable(ac) | |
271 | - | func getNodeDataREADONLY (p) = { | |
272 | - | let aB = F(p) | |
273 | - | let aC = aB._1 | |
274 | - | let D = aB._2 | |
275 | - | $Tuple2(nil, $Tuple5(m, aC, n, D, height)) | |
272 | + | @Callable(af) | |
273 | + | func setNewPeriodLength (aC) = { | |
274 | + | let ag = [if (z(toString(af.caller))) | |
275 | + | then true | |
276 | + | else c("i.caller is not in adminList")] | |
277 | + | if ((ag == ag)) | |
278 | + | then aB(aC) | |
279 | + | else throw("Strict value is not equal to itself.") | |
276 | 280 | } | |
277 | 281 | ||
278 | 282 | ||
279 | 283 | ||
280 | - | @Callable( | |
281 | - | func | |
282 | - | let | |
283 | - | let | |
284 | - | let | |
285 | - | $Tuple2(nil, $Tuple5( | |
284 | + | @Callable(af) | |
285 | + | func getNodeDataREADONLY (q) = { | |
286 | + | let aE = I(q) | |
287 | + | let aF = aE._1 | |
288 | + | let G = aE._2 | |
289 | + | $Tuple2(nil, $Tuple5(n, aF, o, G, height)) | |
286 | 290 | } | |
287 | 291 | ||
288 | 292 | ||
289 | 293 | ||
290 | - | @Callable(ac) | |
291 | - | func stakeFor (p,r) = ab(p, r, ac) | |
292 | - | ||
293 | - | ||
294 | - | ||
295 | - | @Callable(ac) | |
296 | - | func stake (p) = { | |
297 | - | let r = toString(ac.caller) | |
298 | - | ab(p, r, ac) | |
294 | + | @Callable(af) | |
295 | + | func getUserDataREADONLY (s) = { | |
296 | + | let aG = aa(s) | |
297 | + | let Y = aG._1 | |
298 | + | let Z = aG._2 | |
299 | + | $Tuple2(nil, $Tuple5(n, Y, o, Z, height)) | |
299 | 300 | } | |
300 | 301 | ||
301 | 302 | ||
302 | 303 | ||
303 | - | @Callable(ac) | |
304 | - | func stakeFromUnlocked (p,aE) = { | |
305 | - | let r = toString(ac.caller) | |
306 | - | at(p, r, aE) | |
304 | + | @Callable(af) | |
305 | + | func leaseByAddress (q,s) = ae(q, s, af) | |
306 | + | ||
307 | + | ||
308 | + | ||
309 | + | @Callable(af) | |
310 | + | func lease (q) = { | |
311 | + | let s = toString(af.caller) | |
312 | + | ae(q, s, af) | |
307 | 313 | } | |
308 | 314 | ||
309 | 315 | ||
310 | 316 | ||
311 | - | @Callable( | |
312 | - | func | |
313 | - | let | |
314 | - | | |
317 | + | @Callable(af) | |
318 | + | func leaseFromUnlocked (q,aH) = { | |
319 | + | let s = toString(af.caller) | |
320 | + | aw(q, s, aH) | |
315 | 321 | } | |
316 | 322 | ||
317 | 323 | ||
318 | 324 | ||
319 | - | @Callable( | |
320 | - | func | |
321 | - | let | |
322 | - | | |
325 | + | @Callable(af) | |
326 | + | func cancelLease (q,aH) = { | |
327 | + | let s = toString(af.caller) | |
328 | + | am(q, s, aH) | |
323 | 329 | } | |
324 | 330 | ||
325 | 331 | ||
326 | 332 | ||
327 | - | @Callable(ac) | |
333 | + | @Callable(af) | |
334 | + | func claim (aH) = { | |
335 | + | let s = toString(af.caller) | |
336 | + | as(s, aH) | |
337 | + | } | |
338 | + | ||
339 | + | ||
340 | + | ||
341 | + | @Callable(af) | |
328 | 342 | func claimAll () = { | |
329 | - | let | |
330 | - | let | |
331 | - | let | |
332 | - | let | |
333 | - | let | |
343 | + | let s = toString(af.caller) | |
344 | + | let aI = aa(s) | |
345 | + | let Y = aI._1 | |
346 | + | let Z = aI._2 | |
347 | + | let ag = [if ((Y > 0)) | |
334 | 348 | then true | |
335 | 349 | else c("nothing to claim")] | |
336 | - | if (( | |
337 | - | then | |
350 | + | if ((ag == ag)) | |
351 | + | then as(s, Y) | |
338 | 352 | else throw("Strict value is not equal to itself.") | |
339 | 353 | } | |
340 | 354 |
Old | New | Differences | |
---|---|---|---|
1 | 1 | {-# STDLIB_VERSION 6 #-} | |
2 | 2 | {-# SCRIPT_TYPE ACCOUNT #-} | |
3 | 3 | {-# CONTENT_TYPE DAPP #-} | |
4 | 4 | let a = "l2mp_leasing.ride" | |
5 | 5 | ||
6 | 6 | let b = "__" | |
7 | 7 | ||
8 | 8 | func c (d) = throw(((a + ": ") + d)) | |
9 | 9 | ||
10 | 10 | ||
11 | 11 | let e = makeString(["%s", "assetId"], b) | |
12 | 12 | ||
13 | - | let f = makeString(["%s", " | |
13 | + | let f = makeString(["%s", "adminList"], b) | |
14 | 14 | ||
15 | - | let g = makeString(["%s", " | |
15 | + | let g = makeString(["%s", "offsetId"], b) | |
16 | 16 | ||
17 | - | let h = makeString(["%s", " | |
17 | + | let h = makeString(["%s", "offsetHeight"], b) | |
18 | 18 | ||
19 | - | let i = | |
19 | + | let i = makeString(["%s", "periodLength"], b) | |
20 | 20 | ||
21 | - | let j = valueOrElse(getInteger(this, | |
21 | + | let j = valueOrElse(getInteger(this, g), 0) | |
22 | 22 | ||
23 | - | let k = valueOrElse(getInteger(this, | |
23 | + | let k = valueOrElse(getInteger(this, i), 10000) | |
24 | 24 | ||
25 | - | let l = if (if ((height > k)) | |
26 | - | then (k != -1) | |
25 | + | let l = valueOrElse(getInteger(this, h), -1) | |
26 | + | ||
27 | + | let m = if (if ((height > l)) | |
28 | + | then (l != -1) | |
27 | 29 | else false) | |
28 | - | then (((height - | |
29 | - | else max([0, ( | |
30 | + | then (((height - l) / k) + j) | |
31 | + | else max([0, (j - 1)]) | |
30 | 32 | ||
31 | - | let | |
33 | + | let n = (l + ((m - j) * k)) | |
32 | 34 | ||
33 | - | let | |
35 | + | let o = (n + k) | |
34 | 36 | ||
35 | - | func | |
37 | + | func p (q) = makeString(["%s", q], b) | |
36 | 38 | ||
37 | 39 | ||
38 | - | func | |
40 | + | func r (s) = makeString(["%s%s", "toClaim", s], b) | |
39 | 41 | ||
40 | 42 | ||
41 | - | func | |
43 | + | func t (s,q) = makeString(["%s%s", q, s], b) | |
42 | 44 | ||
43 | 45 | ||
44 | - | func | |
46 | + | func u (q) = makeString(["%s%d", q, toString(height)], b) | |
45 | 47 | ||
46 | 48 | ||
47 | - | func | |
49 | + | func v (q,s) = makeString(["%s%s%d", q, s, toString(height)], b) | |
48 | 50 | ||
49 | 51 | ||
50 | - | let | |
52 | + | let w = valueOrElse(getString(this, e), "WAVES") | |
51 | 53 | ||
52 | - | let | |
54 | + | let x = if ((w == "WAVES")) | |
53 | 55 | then unit | |
54 | - | else fromBase58String( | |
56 | + | else fromBase58String(w) | |
55 | 57 | ||
56 | - | func x (y) = { | |
57 | - | let z = addressFromString(y) | |
58 | - | if ($isInstanceOf(z, "Address")) | |
58 | + | let y = split(valueOrElse(getString(this, f), ""), b) | |
59 | + | ||
60 | + | func z (A) = containsElement(y, A) | |
61 | + | ||
62 | + | ||
63 | + | func B (A) = { | |
64 | + | let C = addressFromString(A) | |
65 | + | if ($isInstanceOf(C, "Address")) | |
59 | 66 | then { | |
60 | - | let | |
67 | + | let D = C | |
61 | 68 | true | |
62 | 69 | } | |
63 | 70 | else false | |
64 | 71 | } | |
65 | 72 | ||
66 | 73 | ||
67 | - | func | |
68 | - | let | |
69 | - | StringEntry( | |
74 | + | func E (q,F,G) = { | |
75 | + | let H = makeString(["%d%d%d%d", toString(n), toString(F), toString(o), toString(G)], b) | |
76 | + | StringEntry(p(q), H) | |
70 | 77 | } | |
71 | 78 | ||
72 | 79 | ||
73 | - | func | |
74 | - | let | |
75 | - | let | |
76 | - | if ($isInstanceOf( | |
80 | + | func I (q) = { | |
81 | + | let J = getString(this, p(q)) | |
82 | + | let C = J | |
83 | + | if ($isInstanceOf(C, "String")) | |
77 | 84 | then { | |
78 | - | let H = z | |
79 | - | let I = split(H, b) | |
80 | - | let J = parseIntValue(I[1]) | |
81 | - | let K = parseIntValue(I[2]) | |
82 | - | let L = parseIntValue(I[3]) | |
83 | - | let M = parseIntValue(I[4]) | |
84 | - | if ((L > height)) | |
85 | - | then $Tuple2(K, M) | |
86 | - | else $Tuple2(M, M) | |
87 | - | } | |
88 | - | else $Tuple2(0, 0) | |
89 | - | } | |
90 | - | ||
91 | - | ||
92 | - | func N (p,r,O,P) = { | |
93 | - | let E = makeString(["%d%d%d%d", toString(m), toString(O), toString(n), toString(P)], b) | |
94 | - | StringEntry(s(r, p), E) | |
95 | - | } | |
96 | - | ||
97 | - | ||
98 | - | func Q (p,r) = { | |
99 | - | let R = getString(this, s(r, p)) | |
100 | - | let z = R | |
101 | - | if ($isInstanceOf(z, "String")) | |
102 | - | then { | |
103 | - | let H = z | |
104 | - | let I = split(H, b) | |
105 | - | let S = parseIntValue(I[1]) | |
106 | - | let O = parseIntValue(I[2]) | |
107 | - | let T = parseIntValue(I[3]) | |
108 | - | let P = parseIntValue(I[4]) | |
109 | - | if ((T > height)) | |
110 | - | then $Tuple2(O, P) | |
85 | + | let K = C | |
86 | + | let L = split(K, b) | |
87 | + | let M = parseIntValue(L[1]) | |
88 | + | let N = parseIntValue(L[2]) | |
89 | + | let O = parseIntValue(L[3]) | |
90 | + | let P = parseIntValue(L[4]) | |
91 | + | if ((O > height)) | |
92 | + | then $Tuple2(N, P) | |
111 | 93 | else $Tuple2(P, P) | |
112 | 94 | } | |
113 | 95 | else $Tuple2(0, 0) | |
114 | 96 | } | |
115 | 97 | ||
116 | 98 | ||
117 | - | func | |
118 | - | let | |
119 | - | StringEntry(q | |
99 | + | func Q (q,s,R,S) = { | |
100 | + | let H = makeString(["%d%d%d%d", toString(n), toString(R), toString(o), toString(S)], b) | |
101 | + | StringEntry(t(s, q), H) | |
120 | 102 | } | |
121 | 103 | ||
122 | 104 | ||
123 | - | func | |
124 | - | let | |
125 | - | let | |
126 | - | if ($isInstanceOf( | |
105 | + | func T (q,s) = { | |
106 | + | let U = getString(this, t(s, q)) | |
107 | + | let C = U | |
108 | + | if ($isInstanceOf(C, "String")) | |
127 | 109 | then { | |
128 | - | let | |
129 | - | let | |
130 | - | let | |
131 | - | let | |
132 | - | let | |
133 | - | let | |
134 | - | if (( | |
135 | - | then $Tuple2( | |
136 | - | else $Tuple2( | |
110 | + | let K = C | |
111 | + | let L = split(K, b) | |
112 | + | let V = parseIntValue(L[1]) | |
113 | + | let R = parseIntValue(L[2]) | |
114 | + | let W = parseIntValue(L[3]) | |
115 | + | let S = parseIntValue(L[4]) | |
116 | + | if ((W > height)) | |
117 | + | then $Tuple2(R, S) | |
118 | + | else $Tuple2(S, S) | |
137 | 119 | } | |
138 | 120 | else $Tuple2(0, 0) | |
139 | 121 | } | |
140 | 122 | ||
141 | 123 | ||
142 | - | func ab (p,r,ac) = { | |
143 | - | let ad = [if ((size(ac.payments) == 1)) | |
124 | + | func X (s,Y,Z) = { | |
125 | + | let H = makeString(["%d%d%d%d", toString(n), toString(Y), toString(o), toString(Z)], b) | |
126 | + | StringEntry(r(s), H) | |
127 | + | } | |
128 | + | ||
129 | + | ||
130 | + | func aa (s) = { | |
131 | + | let ab = getString(this, r(s)) | |
132 | + | let C = ab | |
133 | + | if ($isInstanceOf(C, "String")) | |
134 | + | then { | |
135 | + | let K = C | |
136 | + | let L = split(K, b) | |
137 | + | let ac = parseIntValue(L[1]) | |
138 | + | let Y = parseIntValue(L[2]) | |
139 | + | let ad = parseIntValue(L[3]) | |
140 | + | let Z = parseIntValue(L[4]) | |
141 | + | if ((ad > height)) | |
142 | + | then $Tuple2(Y, Z) | |
143 | + | else $Tuple2((Y + Z), 0) | |
144 | + | } | |
145 | + | else $Tuple2(0, 0) | |
146 | + | } | |
147 | + | ||
148 | + | ||
149 | + | func ae (q,s,af) = { | |
150 | + | let ag = [if ((size(af.payments) == 1)) | |
144 | 151 | then true | |
145 | - | else c("payment size should be exactly 1"), if (( | |
152 | + | else c("payment size should be exactly 1"), if ((af.payments[0].assetId == x)) | |
146 | 153 | then true | |
147 | - | else c(makeString(["payment assetId should be:", | |
154 | + | else c(makeString(["payment assetId should be:", w], " ")), if (B(q)) | |
148 | 155 | then true | |
149 | - | else c(makeString(["node address is not valid:", | |
156 | + | else c(makeString(["node address is not valid:", q], " ")), if (B(s)) | |
150 | 157 | then true | |
151 | - | else c(makeString(["user address is not valid:", | |
152 | - | if (( | |
158 | + | else c(makeString(["user address is not valid:", s], " "))] | |
159 | + | if ((ag == ag)) | |
153 | 160 | then { | |
154 | - | let | |
155 | - | let | |
156 | - | let | |
157 | - | let | |
158 | - | let | |
159 | - | let | |
160 | - | let | |
161 | - | let | |
162 | - | let | |
163 | - | [ | |
161 | + | let ah = af.payments[0].amount | |
162 | + | let ai = I(q) | |
163 | + | let N = ai._1 | |
164 | + | let P = ai._2 | |
165 | + | let aj = (P + ah) | |
166 | + | let ak = T(q, s) | |
167 | + | let R = ak._1 | |
168 | + | let S = ak._2 | |
169 | + | let al = (S + ah) | |
170 | + | [E(q, N, aj), Q(q, s, R, al), IntegerEntry(u(q), aj), IntegerEntry(v(q, s), al)] | |
164 | 171 | } | |
165 | 172 | else throw("Strict value is not equal to itself.") | |
166 | 173 | } | |
167 | 174 | ||
168 | 175 | ||
169 | - | func | |
170 | - | let | |
171 | - | let | |
172 | - | let | |
173 | - | let | |
174 | - | let | |
175 | - | let | |
176 | - | let | |
176 | + | func am (q,s,an) = { | |
177 | + | let ao = I(q) | |
178 | + | let N = ao._1 | |
179 | + | let P = ao._2 | |
180 | + | let ap = T(q, s) | |
181 | + | let R = ap._1 | |
182 | + | let S = ap._2 | |
183 | + | let ag = [if ((an > 0)) | |
177 | 184 | then true | |
178 | - | else c("unstake amount should be greater than 0"), if (( | |
185 | + | else c("unstake amount should be greater than 0"), if ((S >= an)) | |
179 | 186 | then true | |
180 | - | else c("unstake amount should be less or equal user staked amount"), if (( | |
187 | + | else c("unstake amount should be less or equal user staked amount"), if ((P >= an)) | |
181 | 188 | then true | |
182 | - | else c("unstake amount should be less or equal node staked amount"), if ( | |
189 | + | else c("unstake amount should be less or equal node staked amount"), if (B(q)) | |
183 | 190 | then true | |
184 | - | else c(makeString(["node address is not valid:", | |
191 | + | else c(makeString(["node address is not valid:", q], " ")), if (B(s)) | |
185 | 192 | then true | |
186 | - | else c(makeString(["user address is not valid:", | |
187 | - | if (( | |
193 | + | else c(makeString(["user address is not valid:", s], " "))] | |
194 | + | if ((ag == ag)) | |
188 | 195 | then { | |
189 | - | let | |
190 | - | let | |
191 | - | let | |
192 | - | let | |
193 | - | let | |
194 | - | let | |
195 | - | [ | |
196 | + | let aj = (P - an) | |
197 | + | let al = (S - an) | |
198 | + | let aq = aa(s) | |
199 | + | let Y = aq._1 | |
200 | + | let Z = aq._2 | |
201 | + | let ar = (Z + an) | |
202 | + | [E(q, N, aj), Q(q, s, R, al), X(s, Y, ar), IntegerEntry(u(q), aj), IntegerEntry(v(q, s), al)] | |
196 | 203 | } | |
197 | 204 | else throw("Strict value is not equal to itself.") | |
198 | 205 | } | |
199 | 206 | ||
200 | 207 | ||
201 | - | func | |
202 | - | let | |
203 | - | let | |
204 | - | let | |
205 | - | let | |
208 | + | func as (s,at) = { | |
209 | + | let au = aa(s) | |
210 | + | let Y = au._1 | |
211 | + | let Z = au._2 | |
212 | + | let ag = [if ((at > 0)) | |
206 | 213 | then true | |
207 | - | else c("claim amount should be greater than 0"), if (( | |
214 | + | else c("claim amount should be greater than 0"), if ((Y >= at)) | |
208 | 215 | then true | |
209 | - | else c("claim amount should be less or equal unlocked amount"), if ( | |
216 | + | else c("claim amount should be less or equal unlocked amount"), if (B(s)) | |
210 | 217 | then true | |
211 | - | else c(makeString(["user address is not valid:", | |
212 | - | if (( | |
218 | + | else c(makeString(["user address is not valid:", s], " "))] | |
219 | + | if ((ag == ag)) | |
213 | 220 | then { | |
214 | - | let | |
215 | - | [ | |
221 | + | let av = (Y - at) | |
222 | + | [X(s, av, Z), ScriptTransfer(addressFromStringValue(s), at, x)] | |
216 | 223 | } | |
217 | 224 | else throw("Strict value is not equal to itself.") | |
218 | 225 | } | |
219 | 226 | ||
220 | 227 | ||
221 | - | func | |
222 | - | let | |
223 | - | let | |
224 | - | let | |
225 | - | let | |
226 | - | let | |
228 | + | func aw (q,s,ah) = { | |
229 | + | let ax = aa(s) | |
230 | + | let Y = ax._1 | |
231 | + | let Z = ax._2 | |
232 | + | let ay = (Z + Y) | |
233 | + | let ag = [if ((ah > 0)) | |
227 | 234 | then true | |
228 | - | else c("amount should be greater than 0"), if (( | |
235 | + | else c("amount should be greater than 0"), if ((ay >= ah)) | |
229 | 236 | then true | |
230 | - | else c("amount should be less or equal to available"), if ( | |
237 | + | else c("amount should be less or equal to available"), if (B(q)) | |
231 | 238 | then true | |
232 | - | else c(makeString(["node address is not valid:", | |
239 | + | else c(makeString(["node address is not valid:", q], " ")), if (B(s)) | |
233 | 240 | then true | |
234 | - | else c(makeString(["user address is not valid:", | |
235 | - | if (( | |
241 | + | else c(makeString(["user address is not valid:", s], " "))] | |
242 | + | if ((ag == ag)) | |
236 | 243 | then { | |
237 | - | let | |
238 | - | let | |
239 | - | let | |
240 | - | let | |
241 | - | let | |
242 | - | let | |
243 | - | let | |
244 | - | let | |
245 | - | let | |
246 | - | let | |
247 | - | [ | |
244 | + | let az = I(q) | |
245 | + | let N = az._1 | |
246 | + | let P = az._2 | |
247 | + | let aj = (P + ah) | |
248 | + | let aA = T(q, s) | |
249 | + | let R = aA._1 | |
250 | + | let S = aA._2 | |
251 | + | let al = (S + ah) | |
252 | + | let ar = max([0, (Z - ah)]) | |
253 | + | let av = min([Y, (Y + (Z - ah))]) | |
254 | + | [E(q, N, aj), Q(q, s, R, al), X(s, av, ar), IntegerEntry(u(q), aj), IntegerEntry(v(q, s), al)] | |
248 | 255 | } | |
249 | 256 | else throw("Strict value is not equal to itself.") | |
250 | 257 | } | |
251 | 258 | ||
252 | 259 | ||
253 | - | func | |
254 | - | let | |
260 | + | func aB (aC) = { | |
261 | + | let aD = [if ((aC > 0)) | |
255 | 262 | then true | |
256 | 263 | else c("period length should be greater than 0")] | |
257 | - | if (( | |
258 | - | then if (( | |
259 | - | then [IntegerEntry( | |
260 | - | else [IntegerEntry( | |
264 | + | if ((aD == aD)) | |
265 | + | then if ((l == -1)) | |
266 | + | then [IntegerEntry(i, aC), IntegerEntry(h, height)] | |
267 | + | else [IntegerEntry(g, (m + 1)), IntegerEntry(h, o), IntegerEntry(i, aC)] | |
261 | 268 | else throw("Strict value is not equal to itself.") | |
262 | 269 | } | |
263 | 270 | ||
264 | 271 | ||
265 | - | @Callable(ac) | |
266 | - | func setNewPeriodLength (az) = ay(az) | |
267 | - | ||
268 | - | ||
269 | - | ||
270 | - | @Callable(ac) | |
271 | - | func getNodeDataREADONLY (p) = { | |
272 | - | let aB = F(p) | |
273 | - | let aC = aB._1 | |
274 | - | let D = aB._2 | |
275 | - | $Tuple2(nil, $Tuple5(m, aC, n, D, height)) | |
272 | + | @Callable(af) | |
273 | + | func setNewPeriodLength (aC) = { | |
274 | + | let ag = [if (z(toString(af.caller))) | |
275 | + | then true | |
276 | + | else c("i.caller is not in adminList")] | |
277 | + | if ((ag == ag)) | |
278 | + | then aB(aC) | |
279 | + | else throw("Strict value is not equal to itself.") | |
276 | 280 | } | |
277 | 281 | ||
278 | 282 | ||
279 | 283 | ||
280 | - | @Callable( | |
281 | - | func | |
282 | - | let | |
283 | - | let | |
284 | - | let | |
285 | - | $Tuple2(nil, $Tuple5( | |
284 | + | @Callable(af) | |
285 | + | func getNodeDataREADONLY (q) = { | |
286 | + | let aE = I(q) | |
287 | + | let aF = aE._1 | |
288 | + | let G = aE._2 | |
289 | + | $Tuple2(nil, $Tuple5(n, aF, o, G, height)) | |
286 | 290 | } | |
287 | 291 | ||
288 | 292 | ||
289 | 293 | ||
290 | - | @Callable(ac) | |
291 | - | func stakeFor (p,r) = ab(p, r, ac) | |
292 | - | ||
293 | - | ||
294 | - | ||
295 | - | @Callable(ac) | |
296 | - | func stake (p) = { | |
297 | - | let r = toString(ac.caller) | |
298 | - | ab(p, r, ac) | |
294 | + | @Callable(af) | |
295 | + | func getUserDataREADONLY (s) = { | |
296 | + | let aG = aa(s) | |
297 | + | let Y = aG._1 | |
298 | + | let Z = aG._2 | |
299 | + | $Tuple2(nil, $Tuple5(n, Y, o, Z, height)) | |
299 | 300 | } | |
300 | 301 | ||
301 | 302 | ||
302 | 303 | ||
303 | - | @Callable(ac) | |
304 | - | func stakeFromUnlocked (p,aE) = { | |
305 | - | let r = toString(ac.caller) | |
306 | - | at(p, r, aE) | |
304 | + | @Callable(af) | |
305 | + | func leaseByAddress (q,s) = ae(q, s, af) | |
306 | + | ||
307 | + | ||
308 | + | ||
309 | + | @Callable(af) | |
310 | + | func lease (q) = { | |
311 | + | let s = toString(af.caller) | |
312 | + | ae(q, s, af) | |
307 | 313 | } | |
308 | 314 | ||
309 | 315 | ||
310 | 316 | ||
311 | - | @Callable( | |
312 | - | func | |
313 | - | let | |
314 | - | | |
317 | + | @Callable(af) | |
318 | + | func leaseFromUnlocked (q,aH) = { | |
319 | + | let s = toString(af.caller) | |
320 | + | aw(q, s, aH) | |
315 | 321 | } | |
316 | 322 | ||
317 | 323 | ||
318 | 324 | ||
319 | - | @Callable( | |
320 | - | func | |
321 | - | let | |
322 | - | | |
325 | + | @Callable(af) | |
326 | + | func cancelLease (q,aH) = { | |
327 | + | let s = toString(af.caller) | |
328 | + | am(q, s, aH) | |
323 | 329 | } | |
324 | 330 | ||
325 | 331 | ||
326 | 332 | ||
327 | - | @Callable(ac) | |
333 | + | @Callable(af) | |
334 | + | func claim (aH) = { | |
335 | + | let s = toString(af.caller) | |
336 | + | as(s, aH) | |
337 | + | } | |
338 | + | ||
339 | + | ||
340 | + | ||
341 | + | @Callable(af) | |
328 | 342 | func claimAll () = { | |
329 | - | let | |
330 | - | let | |
331 | - | let | |
332 | - | let | |
333 | - | let | |
343 | + | let s = toString(af.caller) | |
344 | + | let aI = aa(s) | |
345 | + | let Y = aI._1 | |
346 | + | let Z = aI._2 | |
347 | + | let ag = [if ((Y > 0)) | |
334 | 348 | then true | |
335 | 349 | else c("nothing to claim")] | |
336 | - | if (( | |
337 | - | then | |
350 | + | if ((ag == ag)) | |
351 | + | then as(s, Y) | |
338 | 352 | else throw("Strict value is not equal to itself.") | |
339 | 353 | } | |
340 | 354 | ||
341 | 355 |
github/deemru/w8io/169f3d6 96.04 ms ◑![]()