tx · BxcCSwrqnSsQmv9htqdfFBTAjKAbundfLnUgtPHMk3MB

3N5Sz1ETDTFPUnYWTfwztE78iFNQXWQ2CoD:  -0.01400000 Waves

2023.09.07 13:07 [2744828] smart account 3N5Sz1ETDTFPUnYWTfwztE78iFNQXWQ2CoD > SELF 0.00000000 Waves

{ "type": 13, "id": "BxcCSwrqnSsQmv9htqdfFBTAjKAbundfLnUgtPHMk3MB", "fee": 1400000, "feeAssetId": null, "timestamp": 1694081207023, "version": 2, "chainId": 84, "sender": "3N5Sz1ETDTFPUnYWTfwztE78iFNQXWQ2CoD", "senderPublicKey": "DmMtNKJhVhsdi6iucCZHtWRbJUDSev79JbV6V8QnDQzU", "proofs": [ "pXYpqZzNtCyz6sxK3j3cGFNEseh33z4ZZEHLrEFrxkPBUX7VLW1RmCc794i1UvoMvHzZobqNwm8XfQdYU3NEXm4", "3k9g781b97HjkRuDPPmvav19iLB2UeeDKuXsGc1uNXjAMhWnMEDzDy4w3khoXU44JEhZinZ2NoyoiRSm8dcNujpc" ], "script": "base64:AAIFAAAAAAAAACAIAhIHCgUIAQgYARIDCgEBEgQKAgEBEgMKAQQSAwoBAQAAAA8AAAAAEGN1cnJlbnRMb2NrSWRLZXkCAAAADWN1cnJlbnRMb2NrSWQAAAAAEGFkbWluQ29udHJhY3RLZXkCAAAADWFkbWluQ29udHJhY3QAAAAAE3RyZWFzdXJ5Q29udHJhY3RLZXkCAAAAEHRyZWFzdXJ5Q29udHJhY3QAAAAADGlzRnJlZXplZEtleQIAAAAJaXNGcmVlemVkAAAAABBpc0NvbnN0cnVjdGVkS2V5AgAAAA1pc0NvbnN0cnVjdGVkAAAAAAx2ZXJpZmllcnNLZXkCAAAACXZlcmlmaWVycwAAAAAUdmVyaWZpZXJzUmVxdWlyZWRLZXkCAAAAEXZlcmlmaWVyc1JlcXVpcmVkAAAAABF1bmxvY2tGZWVCYXNpc0tleQIAAAAOdW5sb2NrRmVlQmFzaXMAAAAAA1NFUAIAAAACX18AAAAABk1VTFQxMAAAAAACVAvkAAEAAAAJYXNQYXltZW50AAAAAQAAAAF2BAAAAAckbWF0Y2gwBQAAAAF2AwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAA9BdHRhY2hlZFBheW1lbnQEAAAAAXAFAAAAByRtYXRjaDAFAAAAAXAJAAACAAAAAQIAAAAhZmFpbCB0byBjYXN0IGludG8gQXR0YWNoZWRQYXltZW50AQAAAAxhc0J5dGVWZWN0b3IAAAABAAAAAXYEAAAAByRtYXRjaDAFAAAAAXYDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAACkJ5dGVWZWN0b3IEAAAAAXAFAAAAByRtYXRjaDAFAAAAAXAJAAACAAAAAQIAAAAcZmFpbCB0byBjYXN0IGludG8gQnl0ZVZlY3RvcgEAAAAGa2V5SWRzAAAAAQAAAAdhZGRyZXNzCQABLAAAAAIJAAEsAAAAAgUAAAAHYWRkcmVzcwUAAAADU0VQAgAAAANpZHMBAAAAEW1heFRha2VhYmxlQW1vdW50AAAABAAAAApsb2NrSGVpZ2h0AAAADXZlc3RpbmdQZXJpb2QAAAAGYW1vdW50AAAAC3Rha2VkQW1vdW50AwkAAAAAAAACBQAAAAZhbW91bnQFAAAAC3Rha2VkQW1vdW50AAAAAAAAAAAABAAAAAxibG9ja3NQYXNzZWQJAABlAAAAAgUAAAAGaGVpZ2h0BQAAAApsb2NrSGVpZ2h0AwkAAGcAAAACBQAAAAxibG9ja3NQYXNzZWQFAAAADXZlc3RpbmdQZXJpb2QJAABlAAAAAgUAAAAGYW1vdW50BQAAAAt0YWtlZEFtb3VudAQAAAAOcGVyQmxvY2tVbmxvY2sJAAE9AAAABAkAATYAAAABBQAAAAZhbW91bnQJAAE2AAAAAQUAAAAGTVVMVDEwCQABNgAAAAEFAAAADXZlc3RpbmdQZXJpb2QFAAAABkhBTEZVUAQAAAAPYXZhaWxhYmxlVW5sb2NrCQABPQAAAAQFAAAADnBlckJsb2NrVW5sb2NrCQABNgAAAAEFAAAADGJsb2Nrc1Bhc3NlZAkAATYAAAABBQAAAAZNVUxUMTAFAAAABkhBTEZVUAkAAGUAAAACCQABoAAAAAEFAAAAD2F2YWlsYWJsZVVubG9jawUAAAALdGFrZWRBbW91bnQBAAAADnRyZWFzdXJ5QW1vdW50AAAAAQAAAAZhbW91bnQEAAAACGZlZUJhc2lzCQEAAAARQGV4dHJOYXRpdmUoMTA1NSkAAAABBQAAABF1bmxvY2tGZWVCYXNpc0tleQMJAAAAAAAAAgUAAAAIZmVlQmFzaXMAAAAAAAAAAAAAAAAAAAAAAAAJAAGgAAAAAQkAAT0AAAAECQABPQAAAAQJAAE2AAAAAQUAAAAGYW1vdW50CQABNgAAAAEFAAAABk1VTFQxMAkAATYAAAABAAAAAAAAAAPoBQAAAAZIQUxGVVAJAAE2AAAAAQUAAAAIZmVlQmFzaXMJAAE2AAAAAQUAAAAGTVVMVDEwBQAAAAZIQUxGVVAAAAAFAAAAAWkBAAAAC2NvbnN0cnVjdG9yAAAABQAAAAthZG1pbkFkcmVzcwAAAA51bmxvY2tGZWVCYXNpcwAAABB0cmVhc3VyeUNvbnRyYWN0AAAACXZlcmlmaWVycwAAABFyZXF1aXJlZFZlcmlmaWVycwMJAQAAAAlpc0RlZmluZWQAAAABCQAEIAAAAAEFAAAAEGlzQ29uc3RydWN0ZWRLZXkJAAACAAAAAQIAAAAjQ29uc3RydWN0b3IgY2FuIGJlIGNhbGxlZCBqdXN0IG9uY2UDCQAAZgAAAAIJAAGQAAAAAQUAAAAJdmVyaWZpZXJzAAAAAAAAAAAICQAAAgAAAAECAAAAGU1heCB2ZXJpZmllcnMgbnVtYmVyIGlzIDgJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgUAAAAQYWRtaW5Db250cmFjdEtleQUAAAALYWRtaW5BZHJlc3MJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIFAAAAEGN1cnJlbnRMb2NrSWRLZXkAAAAAAAAAAAAJAARMAAAAAgkBAAAADEJvb2xlYW5FbnRyeQAAAAIFAAAADGlzRnJlZXplZEtleQcJAARMAAAAAgkBAAAADEJvb2xlYW5FbnRyeQAAAAIFAAAAEGlzQ29uc3RydWN0ZWRLZXkGCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACBQAAABF1bmxvY2tGZWVCYXNpc0tleQUAAAAOdW5sb2NrRmVlQmFzaXMJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgUAAAATdHJlYXN1cnlDb250cmFjdEtleQUAAAAQdHJlYXN1cnlDb250cmFjdAkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACBQAAAAx2ZXJpZmllcnNLZXkJAAS5AAAAAgUAAAAJdmVyaWZpZXJzBQAAAANTRVAJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIFAAAAFHZlcmlmaWVyc1JlcXVpcmVkS2V5BQAAABFyZXF1aXJlZFZlcmlmaWVycwUAAAADbmlsAAAAAWkBAAAABGxvY2sAAAABAAAABnBlcmlvZAMJAQAAABFAZXh0ck5hdGl2ZSgxMDU2KQAAAAEFAAAADGlzRnJlZXplZEtleQkAAAIAAAABAgAAACBDb250cmFjdCBvcGVyYXRpb25zIGlzIHN1c3BlbmRlZAMJAQAAAAIhPQAAAAIJAAGQAAAAAQgFAAAAAWkAAAAIcGF5bWVudHMAAAAAAAAAAAEJAAACAAAAAQIAAAAUT25lIFBheW1lbnQgZXhwZWN0ZWQEAAAAB3BheW1lbnQJAQAAAAlhc1BheW1lbnQAAAABCQABkQAAAAIIBQAAAAFpAAAACHBheW1lbnRzAAAAAAAAAAAAAwkAAGcAAAACAAAAAAAAAAAACAUAAAAHcGF5bWVudAAAAAZhbW91bnQJAAACAAAAAQIAAAAXQW1vdW50IG11c3QgYmUgcG9zaXRpdmUDCQAAZgAAAAIAAAAAAAAABaAFAAAABnBlcmlvZAkAAAIAAAABAgAAACIyNCBob3VycyBpcyBtaW5pbXVtIHZlc3RpbmcgcGVyaW9kBAAAAA1jdXJyZW50TG9ja0lkCQEAAAARQGV4dHJOYXRpdmUoMTA1NSkAAAABBQAAABBjdXJyZW50TG9ja0lkS2V5BAAAABNjYWxsZXJBZGRyZXNzU3RyaW5nCQACWAAAAAEICAUAAAABaQAAAAZjYWxsZXIAAAAFYnl0ZXMEAAAAFHBheW1lbnRBc3NldElkU3RyaW5nAwkBAAAAASEAAAABCQEAAAAJaXNEZWZpbmVkAAAAAQgFAAAAB3BheW1lbnQAAAAHYXNzZXRJZAIAAAAFV0FWRVMJAAJYAAAAAQkBAAAADGFzQnl0ZVZlY3RvcgAAAAEIBQAAAAdwYXltZW50AAAAB2Fzc2V0SWQEAAAAA2tleQkAASwAAAACCQABLAAAAAIFAAAAE2NhbGxlckFkZHJlc3NTdHJpbmcFAAAAA1NFUAkAAaQAAAABBQAAAA1jdXJyZW50TG9ja0lkBAAAAARkYXRhCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAAaQAAAABBQAAAAZoZWlnaHQFAAAAA1NFUAkAAaQAAAABCAUAAAAHcGF5bWVudAAAAAZhbW91bnQFAAAAA1NFUAIAAAABMAUAAAADU0VQCQABpAAAAAEFAAAABnBlcmlvZAUAAAADU0VQBQAAABRwYXltZW50QXNzZXRJZFN0cmluZwQAAAAOcHJldmlvc1VzZXJJZHMJAQAAAAt2YWx1ZU9yRWxzZQAAAAIJAAQiAAAAAQkBAAAABmtleUlkcwAAAAEFAAAAE2NhbGxlckFkZHJlc3NTdHJpbmcCAAAAAAQAAAAKbmV3VXNlcklkcwMJAAAAAAAAAgkAATEAAAABBQAAAA5wcmV2aW9zVXNlcklkcwAAAAAAAAAAAAkAAaQAAAABBQAAAA1jdXJyZW50TG9ja0lkCQABLAAAAAIJAAEsAAAAAgUAAAAOcHJldmlvc1VzZXJJZHMFAAAAA1NFUAkAAaQAAAABBQAAAA1jdXJyZW50TG9ja0lkCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIFAAAAA2tleQUAAAAEZGF0YQkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACCQEAAAAGa2V5SWRzAAAAAQUAAAATY2FsbGVyQWRkcmVzc1N0cmluZwUAAAAKbmV3VXNlcklkcwkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgUAAAAQY3VycmVudExvY2tJZEtleQkAAGQAAAACBQAAAA1jdXJyZW50TG9ja0lkAAAAAAAAAAABBQAAAANuaWwAAAABaQEAAAAId2l0aGRyYXcAAAACAAAABmFtb3VudAAAAAZsb2NrSWQDCQEAAAARQGV4dHJOYXRpdmUoMTA1NikAAAABBQAAAAxpc0ZyZWV6ZWRLZXkJAAACAAAAAQIAAAAgQ29udHJhY3Qgb3BlcmF0aW9ucyBpcyBzdXNwZW5kZWQDAwkAAGcAAAACAAAAAAAAAAAABQAAAAZhbW91bnQGCQAAZgAAAAIAAAAAAAAAAAAFAAAABmxvY2tJZAkAAAIAAAABAgAAAChBbW91bnQgbXVzdCBiZSBwb3NpdGl2ZSBvciB3cm9uZyBsb2NrIGlkBAAAABNjYWxsZXJBZGRyZXNzU3RyaW5nCQACWAAAAAEICAUAAAABaQAAAAZjYWxsZXIAAAAFYnl0ZXMEAAAAA2tleQkAASwAAAACCQABLAAAAAIFAAAAE2NhbGxlckFkZHJlc3NTdHJpbmcFAAAAA1NFUAkAAaQAAAABBQAAAAZsb2NrSWQEAAAACWRhdGFBcnJheQkABLUAAAACCQEAAAARQGV4dHJOYXRpdmUoMTA1OCkAAAABBQAAAANrZXkFAAAAA1NFUAMJAQAAAAIhPQAAAAIJAAGQAAAAAQUAAAAJZGF0YUFycmF5AAAAAAAAAAAFCQAAAgAAAAECAAAADkludGVybmFsIGVycm9yBAAAAAxzdG9yZWRIZWlnaHQJAAGRAAAAAgUAAAAJZGF0YUFycmF5AAAAAAAAAAAABAAAAAxzdG9yZWRBbW91bnQJAAGRAAAAAgUAAAAJZGF0YUFycmF5AAAAAAAAAAABBAAAABFzdG9yZWRUYWtlZEFtb3VudAkAAZEAAAACBQAAAAlkYXRhQXJyYXkAAAAAAAAAAAIEAAAAE3N0b3JlZFZlc3RpbmdQZXJpb2QJAAGRAAAAAgUAAAAJZGF0YUFycmF5AAAAAAAAAAADBAAAAA1zdG9yZWRBc3NldElkCQABkQAAAAIFAAAACWRhdGFBcnJheQAAAAAAAAAABAQAAAAPYXZhaWxhYmxlQW1vdW50CQEAAAARbWF4VGFrZWFibGVBbW91bnQAAAAECQEAAAANcGFyc2VJbnRWYWx1ZQAAAAEFAAAADHN0b3JlZEhlaWdodAkBAAAADXBhcnNlSW50VmFsdWUAAAABBQAAABNzdG9yZWRWZXN0aW5nUGVyaW9kCQEAAAANcGFyc2VJbnRWYWx1ZQAAAAEFAAAADHN0b3JlZEFtb3VudAkBAAAADXBhcnNlSW50VmFsdWUAAAABBQAAABFzdG9yZWRUYWtlZEFtb3VudAMJAABmAAAAAgUAAAAGYW1vdW50BQAAAA9hdmFpbGFibGVBbW91bnQJAAACAAAAAQkAASwAAAACAgAAADZSZXF1ZXN0ZWQgYW1vdW50IGlzIHR3byBiaWcsIG1heCBhdmFpbGFibGUgYW1vdW50IGlzOiAJAAGkAAAAAQUAAAAPYXZhaWxhYmxlQW1vdW50BAAAAAduZXdEYXRhCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgUAAAAMc3RvcmVkSGVpZ2h0BQAAAANTRVAFAAAADHN0b3JlZEFtb3VudAUAAAADU0VQCQABpAAAAAEJAABkAAAAAgkBAAAADXBhcnNlSW50VmFsdWUAAAABBQAAABFzdG9yZWRUYWtlZEFtb3VudAUAAAAGYW1vdW50BQAAAANTRVAFAAAAE3N0b3JlZFZlc3RpbmdQZXJpb2QFAAAAA1NFUAUAAAANc3RvcmVkQXNzZXRJZAQAAAARYXNzZXRJZFRvVHJhbnNmZXIDCQAAAAAAAAIFAAAADXN0b3JlZEFzc2V0SWQCAAAABVdBVkVTBQAAAAR1bml0CQACWQAAAAEFAAAADXN0b3JlZEFzc2V0SWQEAAAAEGFtb3VudFRvVHJlYXN1cnkJAQAAAA50cmVhc3VyeUFtb3VudAAAAAEFAAAABmFtb3VudAQAAAAMYW1vdW50VG9Vc2VyCQAAZQAAAAIFAAAABmFtb3VudAUAAAAQYW1vdW50VG9UcmVhc3VyeQQAAAAQdHJlYXN1cnlDb250cmFjdAkBAAAAEUBleHRyTmF0aXZlKDEwNTgpAAAAAQUAAAATdHJlYXN1cnlDb250cmFjdEtleQQAAAARdHJhbnNhY3Rpb25SZXN1bHQJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgUAAAADa2V5BQAAAAduZXdEYXRhCQAETAAAAAIJAQAAAA5TY3JpcHRUcmFuc2ZlcgAAAAMIBQAAAAFpAAAABmNhbGxlcgUAAAAMYW1vdW50VG9Vc2VyBQAAABFhc3NldElkVG9UcmFuc2ZlcgUAAAADbmlsAwkAAGYAAAACBQAAABBhbW91bnRUb1RyZWFzdXJ5AAAAAAAAAAAACQAETAAAAAIJAQAAAA5TY3JpcHRUcmFuc2ZlcgAAAAMJAQAAAAdBZGRyZXNzAAAAAQkAAlkAAAABBQAAABB0cmVhc3VyeUNvbnRyYWN0BQAAABBhbW91bnRUb1RyZWFzdXJ5BQAAABFhc3NldElkVG9UcmFuc2ZlcgUAAAARdHJhbnNhY3Rpb25SZXN1bHQFAAAAEXRyYW5zYWN0aW9uUmVzdWx0AAAAAWkBAAAADmZyZWV6ZUNvbnRyYWN0AAAAAQAAAAppc1VuZnJlZXplBAAAAAxhZG1pbkFkZHJlc3MJAQAAABFAZXh0ck5hdGl2ZSgxMDU4KQAAAAEFAAAAEGFkbWluQ29udHJhY3RLZXkDCQEAAAACIT0AAAACBQAAAAxhZG1pbkFkZHJlc3MJAAJYAAAAAQgIBQAAAAFpAAAABmNhbGxlcgAAAAVieXRlcwkAAAIAAAABAgAAACpPbmx5IGFkbWluIGNvbnRyYWN0IGNhbiBjYWxsIHRoaXMgZnVuY3Rpb24JAARMAAAAAgkBAAAADEJvb2xlYW5FbnRyeQAAAAIFAAAADGlzRnJlZXplZEtleQkBAAAAASEAAAABBQAAAAppc1VuZnJlZXplBQAAAANuaWwAAAABaQEAAAAOY2hhbmdlRmVlQmFzaXMAAAABAAAAC25ld0ZlZUJhc2lzBAAAAAxhZG1pbkFkZHJlc3MJAQAAABFAZXh0ck5hdGl2ZSgxMDU4KQAAAAEFAAAAEGFkbWluQ29udHJhY3RLZXkDCQEAAAACIT0AAAACBQAAAAxhZG1pbkFkZHJlc3MJAAJYAAAAAQgIBQAAAAFpAAAABmNhbGxlcgAAAAVieXRlcwkAAAIAAAABAgAAACpPbmx5IGFkbWluIGNvbnRyYWN0IGNhbiBjYWxsIHRoaXMgZnVuY3Rpb24DCQAAZgAAAAIAAAAAAAAAAAAFAAAAC25ld0ZlZUJhc2lzCQAAAgAAAAECAAAAG0ZlZSBiYXNpcyBjYW4ndCBiZSBuZWdhdGl2ZQMJAABmAAAAAgUAAAALbmV3RmVlQmFzaXMAAAAAAAAAA+gJAAACAAAAAQIAAAApRmVlIGJhc2lzIGNhbid0IGJlIGJpZ2dlciB0aGFuIDEwIHBlcmNlbnQJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIFAAAAEXVubG9ja0ZlZUJhc2lzS2V5BQAAAAtuZXdGZWVCYXNpcwUAAAADbmlsAAAAAQAAAAJ0eAEAAAAGdmVyaWZ5AAAAAAQAAAAJdmVyaWZpZXJzCQAEtQAAAAIJAQAAABFAZXh0ck5hdGl2ZSgxMDU4KQAAAAEFAAAADHZlcmlmaWVyc0tleQUAAAADU0VQBAAAABF2ZXJpZmllcnNSZXF1aXJlZAkBAAAAEUBleHRyTmF0aXZlKDEwNTUpAAAAAQUAAAAUdmVyaWZpZXJzUmVxdWlyZWRLZXkKAQAAAANzdW0AAAACAAAABWFjY3VtAAAABG5leHQEAAAAFHZhbGlkYXRlZFByb29mc0NvdW50CAUAAAAFYWNjdW0AAAACXzEEAAAAEmN1cnJlbnRQcm9vZnNJbmRleAgFAAAABWFjY3VtAAAAAl8yBAAAAAppc1ZlcmlmaWVkAwkAAfQAAAADCAUAAAACdHgAAAAJYm9keUJ5dGVzCQABkQAAAAIIBQAAAAJ0eAAAAAZwcm9vZnMFAAAAEmN1cnJlbnRQcm9vZnNJbmRleAkAAlkAAAABBQAAAARuZXh0AAAAAAAAAAABAAAAAAAAAAAACQAFFAAAAAIJAABkAAAAAgUAAAAUdmFsaWRhdGVkUHJvb2ZzQ291bnQFAAAACmlzVmVyaWZpZWQJAABkAAAAAgUAAAASY3VycmVudFByb29mc0luZGV4AAAAAAAAAAABBAAAAA52YWxpZGF0aW9uRGF0YQoAAAAAAiRsBQAAAAl2ZXJpZmllcnMKAAAAAAIkcwkAAZAAAAABBQAAAAIkbAoAAAAABSRhY2MwCQAFFAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAKAQAAAAUkZjBfMQAAAAIAAAACJGEAAAACJGkDCQAAZwAAAAIFAAAAAiRpBQAAAAIkcwUAAAACJGEJAQAAAANzdW0AAAACBQAAAAIkYQkAAZEAAAACBQAAAAIkbAUAAAACJGkKAQAAAAUkZjBfMgAAAAIAAAACJGEAAAACJGkDCQAAZwAAAAIFAAAAAiRpBQAAAAIkcwUAAAACJGEJAAACAAAAAQIAAAATTGlzdCBzaXplIGV4Y2VlZHMgOAkBAAAABSRmMF8yAAAAAgkBAAAABSRmMF8xAAAAAgkBAAAABSRmMF8xAAAAAgkBAAAABSRmMF8xAAAAAgkBAAAABSRmMF8xAAAAAgkBAAAABSRmMF8xAAAAAgkBAAAABSRmMF8xAAAAAgkBAAAABSRmMF8xAAAAAgkBAAAABSRmMF8xAAAAAgUAAAAFJGFjYzAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAIAAAAAAAAAAAMAAAAAAAAAAAQAAAAAAAAAAAUAAAAAAAAAAAYAAAAAAAAAAAcAAAAAAAAAAAgJAABnAAAAAggFAAAADnZhbGlkYXRpb25EYXRhAAAAAl8xBQAAABF2ZXJpZmllcnNSZXF1aXJlZAoA8Z8=", "height": 2744828, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 8tKRcgDemGjUpRoBqcwPGcBhYGEoSPnSSX38iyZq6xcG Next: none Diff:
OldNewDifferences
4747 if ((blocksPassed >= vestingPeriod))
4848 then (amount - takedAmount)
4949 else {
50- let perBlockUnlock = fraction(amount, MULT10, vestingPeriod, HALFUP)
51- let availableUnlock = fraction(perBlockUnlock, blocksPassed, MULT10, HALFUP)
52- (availableUnlock - takedAmount)
50+ let perBlockUnlock = fraction(toBigInt(amount), toBigInt(MULT10), toBigInt(vestingPeriod), HALFUP)
51+ let availableUnlock = fraction(perBlockUnlock, toBigInt(blocksPassed), toBigInt(MULT10), HALFUP)
52+ (toInt(availableUnlock) - takedAmount)
5353 }
5454 }
5555
5858 let feeBasis = getIntegerValue(unlockFeeBasisKey)
5959 if ((feeBasis == 0))
6060 then 0
61- else fraction(fraction(amount, MULT10, 1000, HALFUP), feeBasis, MULT10, HALFUP)
61+ else toInt(fraction(fraction(toBigInt(amount), toBigInt(MULT10), toBigInt(1000), HALFUP), toBigInt(feeBasis), toBigInt(MULT10), HALFUP))
6262 }
6363
6464
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 5 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let currentLockIdKey = "currentLockId"
55
66 let adminContractKey = "adminContract"
77
88 let treasuryContractKey = "treasuryContract"
99
1010 let isFreezedKey = "isFreezed"
1111
1212 let isConstructedKey = "isConstructed"
1313
1414 let verifiersKey = "verifiers"
1515
1616 let verifiersRequiredKey = "verifiersRequired"
1717
1818 let unlockFeeBasisKey = "unlockFeeBasis"
1919
2020 let SEP = "__"
2121
2222 let MULT10 = 10000000000
2323
2424 func asPayment (v) = match v {
2525 case p: AttachedPayment =>
2626 p
2727 case _ =>
2828 throw("fail to cast into AttachedPayment")
2929 }
3030
3131
3232 func asByteVector (v) = match v {
3333 case p: ByteVector =>
3434 p
3535 case _ =>
3636 throw("fail to cast into ByteVector")
3737 }
3838
3939
4040 func keyIds (address) = ((address + SEP) + "ids")
4141
4242
4343 func maxTakeableAmount (lockHeight,vestingPeriod,amount,takedAmount) = if ((amount == takedAmount))
4444 then 0
4545 else {
4646 let blocksPassed = (height - lockHeight)
4747 if ((blocksPassed >= vestingPeriod))
4848 then (amount - takedAmount)
4949 else {
50- let perBlockUnlock = fraction(amount, MULT10, vestingPeriod, HALFUP)
51- let availableUnlock = fraction(perBlockUnlock, blocksPassed, MULT10, HALFUP)
52- (availableUnlock - takedAmount)
50+ let perBlockUnlock = fraction(toBigInt(amount), toBigInt(MULT10), toBigInt(vestingPeriod), HALFUP)
51+ let availableUnlock = fraction(perBlockUnlock, toBigInt(blocksPassed), toBigInt(MULT10), HALFUP)
52+ (toInt(availableUnlock) - takedAmount)
5353 }
5454 }
5555
5656
5757 func treasuryAmount (amount) = {
5858 let feeBasis = getIntegerValue(unlockFeeBasisKey)
5959 if ((feeBasis == 0))
6060 then 0
61- else fraction(fraction(amount, MULT10, 1000, HALFUP), feeBasis, MULT10, HALFUP)
61+ else toInt(fraction(fraction(toBigInt(amount), toBigInt(MULT10), toBigInt(1000), HALFUP), toBigInt(feeBasis), toBigInt(MULT10), HALFUP))
6262 }
6363
6464
6565 @Callable(i)
6666 func constructor (adminAdress,unlockFeeBasis,treasuryContract,verifiers,requiredVerifiers) = if (isDefined(getBoolean(isConstructedKey)))
6767 then throw("Constructor can be called just once")
6868 else if ((size(verifiers) > 8))
6969 then throw("Max verifiers number is 8")
7070 else [StringEntry(adminContractKey, adminAdress), IntegerEntry(currentLockIdKey, 0), BooleanEntry(isFreezedKey, false), BooleanEntry(isConstructedKey, true), IntegerEntry(unlockFeeBasisKey, unlockFeeBasis), StringEntry(treasuryContractKey, treasuryContract), StringEntry(verifiersKey, makeString(verifiers, SEP)), IntegerEntry(verifiersRequiredKey, requiredVerifiers)]
7171
7272
7373
7474 @Callable(i)
7575 func lock (period) = if (getBooleanValue(isFreezedKey))
7676 then throw("Contract operations is suspended")
7777 else if ((size(i.payments) != 1))
7878 then throw("One Payment expected")
7979 else {
8080 let payment = asPayment(i.payments[0])
8181 if ((0 >= payment.amount))
8282 then throw("Amount must be positive")
8383 else if ((1440 > period))
8484 then throw("24 hours is minimum vesting period")
8585 else {
8686 let currentLockId = getIntegerValue(currentLockIdKey)
8787 let callerAddressString = toBase58String(i.caller.bytes)
8888 let paymentAssetIdString = if (!(isDefined(payment.assetId)))
8989 then "WAVES"
9090 else toBase58String(asByteVector(payment.assetId))
9191 let key = ((callerAddressString + SEP) + toString(currentLockId))
9292 let data = ((((((((toString(height) + SEP) + toString(payment.amount)) + SEP) + "0") + SEP) + toString(period)) + SEP) + paymentAssetIdString)
9393 let previosUserIds = valueOrElse(getString(keyIds(callerAddressString)), "")
9494 let newUserIds = if ((size(previosUserIds) == 0))
9595 then toString(currentLockId)
9696 else ((previosUserIds + SEP) + toString(currentLockId))
9797 [StringEntry(key, data), StringEntry(keyIds(callerAddressString), newUserIds), IntegerEntry(currentLockIdKey, (currentLockId + 1))]
9898 }
9999 }
100100
101101
102102
103103 @Callable(i)
104104 func withdraw (amount,lockId) = if (getBooleanValue(isFreezedKey))
105105 then throw("Contract operations is suspended")
106106 else if (if ((0 >= amount))
107107 then true
108108 else (0 > lockId))
109109 then throw("Amount must be positive or wrong lock id")
110110 else {
111111 let callerAddressString = toBase58String(i.caller.bytes)
112112 let key = ((callerAddressString + SEP) + toString(lockId))
113113 let dataArray = split(getStringValue(key), SEP)
114114 if ((size(dataArray) != 5))
115115 then throw("Internal error")
116116 else {
117117 let storedHeight = dataArray[0]
118118 let storedAmount = dataArray[1]
119119 let storedTakedAmount = dataArray[2]
120120 let storedVestingPeriod = dataArray[3]
121121 let storedAssetId = dataArray[4]
122122 let availableAmount = maxTakeableAmount(parseIntValue(storedHeight), parseIntValue(storedVestingPeriod), parseIntValue(storedAmount), parseIntValue(storedTakedAmount))
123123 if ((amount > availableAmount))
124124 then throw(("Requested amount is two big, max available amount is: " + toString(availableAmount)))
125125 else {
126126 let newData = ((((((((storedHeight + SEP) + storedAmount) + SEP) + toString((parseIntValue(storedTakedAmount) + amount))) + SEP) + storedVestingPeriod) + SEP) + storedAssetId)
127127 let assetIdToTransfer = if ((storedAssetId == "WAVES"))
128128 then unit
129129 else fromBase58String(storedAssetId)
130130 let amountToTreasury = treasuryAmount(amount)
131131 let amountToUser = (amount - amountToTreasury)
132132 let treasuryContract = getStringValue(treasuryContractKey)
133133 let transactionResult = [StringEntry(key, newData), ScriptTransfer(i.caller, amountToUser, assetIdToTransfer)]
134134 if ((amountToTreasury > 0))
135135 then ScriptTransfer(Address(fromBase58String(treasuryContract)), amountToTreasury, assetIdToTransfer) :: transactionResult
136136 else transactionResult
137137 }
138138 }
139139 }
140140
141141
142142
143143 @Callable(i)
144144 func freezeContract (isUnfreeze) = {
145145 let adminAddress = getStringValue(adminContractKey)
146146 if ((adminAddress != toBase58String(i.caller.bytes)))
147147 then throw("Only admin contract can call this function")
148148 else [BooleanEntry(isFreezedKey, !(isUnfreeze))]
149149 }
150150
151151
152152
153153 @Callable(i)
154154 func changeFeeBasis (newFeeBasis) = {
155155 let adminAddress = getStringValue(adminContractKey)
156156 if ((adminAddress != toBase58String(i.caller.bytes)))
157157 then throw("Only admin contract can call this function")
158158 else if ((0 > newFeeBasis))
159159 then throw("Fee basis can't be negative")
160160 else if ((newFeeBasis > 1000))
161161 then throw("Fee basis can't be bigger than 10 percent")
162162 else [IntegerEntry(unlockFeeBasisKey, newFeeBasis)]
163163 }
164164
165165
166166 @Verifier(tx)
167167 func verify () = {
168168 let verifiers = split(getStringValue(verifiersKey), SEP)
169169 let verifiersRequired = getIntegerValue(verifiersRequiredKey)
170170 func sum (accum,next) = {
171171 let validatedProofsCount = accum._1
172172 let currentProofsIndex = accum._2
173173 let isVerified = if (sigVerify(tx.bodyBytes, tx.proofs[currentProofsIndex], fromBase58String(next)))
174174 then 1
175175 else 0
176176 $Tuple2((validatedProofsCount + isVerified), (currentProofsIndex + 1))
177177 }
178178
179179 let validationData = {
180180 let $l = verifiers
181181 let $s = size($l)
182182 let $acc0 = $Tuple2(0, 0)
183183 func $f0_1 ($a,$i) = if (($i >= $s))
184184 then $a
185185 else sum($a, $l[$i])
186186
187187 func $f0_2 ($a,$i) = if (($i >= $s))
188188 then $a
189189 else throw("List size exceeds 8")
190190
191191 $f0_2($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8)
192192 }
193193 (validationData._1 >= verifiersRequired)
194194 }
195195

github/deemru/w8io/169f3d6 
39.80 ms