tx · 4tAFdtWtx24NrvTB3nY8y47DxRNVcHkMgEmjNRGz9EPJ 3MsH5PGAzchQox92fKoATyqvbbZGtCnM7HL: -0.01000000 Waves 2022.10.11 16:23 [2267734] smart account 3MsH5PGAzchQox92fKoATyqvbbZGtCnM7HL > SELF 0.00000000 Waves
{ "type": 13, "id": "4tAFdtWtx24NrvTB3nY8y47DxRNVcHkMgEmjNRGz9EPJ", "fee": 1000000, "feeAssetId": null, "timestamp": 1665494673105, "version": 2, "chainId": 84, "sender": "3MsH5PGAzchQox92fKoATyqvbbZGtCnM7HL", "senderPublicKey": "6hLKKefEEN4wfGHMRuQoWStMfcXVjfTvah6x2UCEi9P9", "proofs": [ "5vsH7FC33qLzX2zLrjA2ZdxzHXqau1xEb4uFwumBQbBYqDZMgZwSHYf75YZakhdnqURrVF1Phq8qDHH49sWrEER6" ], "script": "base64:AAIEAAAAAAAAAAQIAhIAAAAAEgAAAAARa2V5QWN0aXZhdGVIZWlnaHQCAAAAD2FjdGl2YXRlX2hlaWdodAAAAAAPa2V5RmluaXNoSGVpZ2h0AgAAAA1maW5pc2hfaGVpZ2h0AAAAAA5hY3RpdmF0ZUhlaWdodAkBAAAAEUBleHRyTmF0aXZlKDEwNTApAAAAAgUAAAAEdGhpcwUAAAARa2V5QWN0aXZhdGVIZWlnaHQAAAAADGZpbmlzaEhlaWdodAkBAAAAEUBleHRyTmF0aXZlKDEwNTApAAAAAgUAAAAEdGhpcwUAAAAPa2V5RmluaXNoSGVpZ2h0AAAAAA50b3RhbFNoYXJlU1dPUAAAAFrzEHpAAAAAAAAEU1dPUAEAAAAgEv+BIJFIbrNA9tN9ExhCV/1vofsy06rszWo/nWl9O/gAAAAABm9yYWNsZQkBAAAAB0FkZHJlc3MAAAABAQAAABoBVEgTlwzA0zPMJTKAtin3p2RogKvjzHtLmQAAAAAYa2V5VXNlclNXT1BDbGFpbWVkQW1vdW50AgAAABRfU1dPUF9jbGFpbWVkX2Ftb3VudAAAAAAca2V5VXNlclNXT1BMYXN0Q2xhaW1lZEFtb3VudAIAAAAZX1NXT1BfbGFzdF9jbGFpbWVkX2Ftb3VudAAAAAAPa2V5QWRtaW5QdWJLZXkxAgAAAAthZG1pbl9wdWJfMQAAAAAPa2V5QWRtaW5QdWJLZXkyAgAAAAthZG1pbl9wdWJfMgAAAAAPa2V5QWRtaW5QdWJLZXkzAgAAAAthZG1pbl9wdWJfMwEAAAALZ2V0QWRtaW5QdWIAAAABAAAAC2tleUFkbWluUHViBAAAAAckbWF0Y2gwCQAEHQAAAAIFAAAABm9yYWNsZQUAAAALa2V5QWRtaW5QdWIDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAABlN0cmluZwQAAAAGc3RyaW5nBQAAAAckbWF0Y2gwCQACWQAAAAEFAAAABnN0cmluZwQAAAAHbm90aGluZwUAAAAHJG1hdGNoMAkAAAIAAAABAgAAABlBZG1pbiBwdWJsaWMga2V5IGlzIGVtcHR5AAAAAAxhZG1pblB1YktleTEJAQAAAAtnZXRBZG1pblB1YgAAAAEFAAAAD2tleUFkbWluUHViS2V5MQAAAAAMYWRtaW5QdWJLZXkyCQEAAAALZ2V0QWRtaW5QdWIAAAABBQAAAA9rZXlBZG1pblB1YktleTIAAAAADGFkbWluUHViS2V5MwkBAAAAC2dldEFkbWluUHViAAAAAQUAAAAPa2V5QWRtaW5QdWJLZXkzAQAAAA5nZXRDYWxsZXJTaGFyZQAAAAEAAAAGY2FsbGVyBAAAAAtjYWxsZXJTaGFyZQkABBoAAAACBQAAAAR0aGlzCQABLAAAAAICAAAABnNoYXJlXwkABCUAAAABBQAAAAZjYWxsZXIEAAAAEWNhbGxlclNoYXJlQW1vdW50BAAAAAckbWF0Y2gwBQAAAAtjYWxsZXJTaGFyZQMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAADSW50BAAAAAVzaGFyZQUAAAAHJG1hdGNoMAUAAAAFc2hhcmUDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAABFVuaXQEAAAABXNoYXJlBQAAAAckbWF0Y2gwCQAAAgAAAAECAAAANU9ubHkgZWFybHkgbGlxdWlkaXR5IHByb3ZpZGVycyBjYW4gY2FsbCB0aGlzIGZ1bmN0aW9uCQAAAgAAAAECAAAAC01hdGNoIGVycm9yBQAAABFjYWxsZXJTaGFyZUFtb3VudAEAAAAQZ2V0Q2xhaW1lZEFtb3VudAAAAAEAAAAGY2FsbGVyBAAAAA9jYWxsZXJXaXRoZHJhd24JAAQaAAAAAgUAAAAEdGhpcwkAASwAAAACCQAEJQAAAAEFAAAABmNhbGxlcgUAAAAYa2V5VXNlclNXT1BDbGFpbWVkQW1vdW50BAAAABVjYWxsZXJXaXRoZHJhd25BbW91bnQEAAAAByRtYXRjaDAFAAAAD2NhbGxlcldpdGhkcmF3bgMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAADSW50BAAAAAVzaGFyZQUAAAAHJG1hdGNoMAUAAAAFc2hhcmUDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAABFVuaXQEAAAABXNoYXJlBQAAAAckbWF0Y2gwAAAAAAAAAAAACQAAAgAAAAECAAAAC01hdGNoIGVycm9yBQAAABVjYWxsZXJXaXRoZHJhd25BbW91bnQAAAABAAAAAWkBAAAACWNsYWltU1dPUAAAAAAEAAAADWJsb2NrRHVyYXRpb24JAABlAAAAAgUAAAAMZmluaXNoSGVpZ2h0BQAAAA5hY3RpdmF0ZUhlaWdodAQAAAAPY3VycmVudER1cmF0aW9uAwkAAGYAAAACBQAAAAxmaW5pc2hIZWlnaHQFAAAABmhlaWdodAUAAAAGaGVpZ2h0BQAAAAxmaW5pc2hIZWlnaHQEAAAACXVzZXJTaGFyZQkBAAAADmdldENhbGxlclNoYXJlAAAAAQgFAAAAAWkAAAAGY2FsbGVyBAAAABF1c2VyQ2xhaW1lZEFtb3VudAkBAAAAEGdldENsYWltZWRBbW91bnQAAAABCAUAAAABaQAAAAZjYWxsZXIEAAAAC2NsYWltQW1vdW50CQAAZQAAAAIJAABrAAAAAwkAAGUAAAACBQAAAA9jdXJyZW50RHVyYXRpb24FAAAADmFjdGl2YXRlSGVpZ2h0BQAAAAl1c2VyU2hhcmUFAAAADWJsb2NrRHVyYXRpb24FAAAAEXVzZXJDbGFpbWVkQW1vdW50BAAAABR1c2VyQ2xhaW1lZEFtb3VudE5ldwkAAGQAAAACBQAAABF1c2VyQ2xhaW1lZEFtb3VudAUAAAALY2xhaW1BbW91bnQJAARMAAAAAgkBAAAADlNjcmlwdFRyYW5zZmVyAAAAAwgFAAAAAWkAAAAGY2FsbGVyBQAAAAtjbGFpbUFtb3VudAUAAAAEU1dPUAkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkAASwAAAACCQAEJQAAAAEIBQAAAAFpAAAABmNhbGxlcgUAAAAYa2V5VXNlclNXT1BDbGFpbWVkQW1vdW50BQAAABR1c2VyQ2xhaW1lZEFtb3VudE5ldwkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkAASwAAAACCQAEJQAAAAEIBQAAAAFpAAAABmNhbGxlcgUAAAAca2V5VXNlclNXT1BMYXN0Q2xhaW1lZEFtb3VudAUAAAALY2xhaW1BbW91bnQFAAAAA25pbAAAAAEAAAACdHgBAAAABnZlcmlmeQAAAAAEAAAAByRtYXRjaDAFAAAAAnR4BAAAABJhZG1pblB1YktleTFTaWduZWQDCQAB9AAAAAMIBQAAAAJ0eAAAAAlib2R5Qnl0ZXMJAAGRAAAAAggFAAAAAnR4AAAABnByb29mcwAAAAAAAAAAAAUAAAAMYWRtaW5QdWJLZXkxAAAAAAAAAAABAAAAAAAAAAAABAAAABJhZG1pblB1YktleTJTaWduZWQDCQAB9AAAAAMIBQAAAAJ0eAAAAAlib2R5Qnl0ZXMJAAGRAAAAAggFAAAAAnR4AAAABnByb29mcwAAAAAAAAAAAQUAAAAMYWRtaW5QdWJLZXkyAAAAAAAAAAABAAAAAAAAAAAABAAAABJhZG1pblB1YktleTNTaWduZWQDCQAB9AAAAAMIBQAAAAJ0eAAAAAlib2R5Qnl0ZXMJAAGRAAAAAggFAAAAAnR4AAAABnByb29mcwAAAAAAAAAAAgUAAAAMYWRtaW5QdWJLZXkzAAAAAAAAAAABAAAAAAAAAAAACQAAZwAAAAIJAABkAAAAAgkAAGQAAAACBQAAABJhZG1pblB1YktleTFTaWduZWQFAAAAEmFkbWluUHViS2V5MlNpZ25lZAUAAAASYWRtaW5QdWJLZXkzU2lnbmVkAAAAAAAAAAACoL4Ytw==", "height": 2267734, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: none Next: none Full:
Old | New | Differences | |
---|---|---|---|
1 | - | # no script | |
1 | + | {-# STDLIB_VERSION 4 #-} | |
2 | + | {-# SCRIPT_TYPE ACCOUNT #-} | |
3 | + | {-# CONTENT_TYPE DAPP #-} | |
4 | + | let keyActivateHeight = "activate_height" | |
5 | + | ||
6 | + | let keyFinishHeight = "finish_height" | |
7 | + | ||
8 | + | let activateHeight = getIntegerValue(this, keyActivateHeight) | |
9 | + | ||
10 | + | let finishHeight = getIntegerValue(this, keyFinishHeight) | |
11 | + | ||
12 | + | let totalShareSWOP = 100000000000000 | |
13 | + | ||
14 | + | let SWOP = base58'2HAJrwa8q4SxBx9cHYaBTQdBjdk5wwqdof7ccpAx2uhZ' | |
15 | + | ||
16 | + | let oracle = Address(base58'3MvVBtsXroQpy1tsPw21TU2ET9A8WfmrNjz') | |
17 | + | ||
18 | + | let keyUserSWOPClaimedAmount = "_SWOP_claimed_amount" | |
19 | + | ||
20 | + | let keyUserSWOPLastClaimedAmount = "_SWOP_last_claimed_amount" | |
21 | + | ||
22 | + | let keyAdminPubKey1 = "admin_pub_1" | |
23 | + | ||
24 | + | let keyAdminPubKey2 = "admin_pub_2" | |
25 | + | ||
26 | + | let keyAdminPubKey3 = "admin_pub_3" | |
27 | + | ||
28 | + | func getAdminPub (keyAdminPub) = match getString(oracle, keyAdminPub) { | |
29 | + | case string: String => | |
30 | + | fromBase58String(string) | |
31 | + | case nothing => | |
32 | + | throw("Admin public key is empty") | |
33 | + | } | |
34 | + | ||
35 | + | ||
36 | + | let adminPubKey1 = getAdminPub(keyAdminPubKey1) | |
37 | + | ||
38 | + | let adminPubKey2 = getAdminPub(keyAdminPubKey2) | |
39 | + | ||
40 | + | let adminPubKey3 = getAdminPub(keyAdminPubKey3) | |
41 | + | ||
42 | + | func getCallerShare (caller) = { | |
43 | + | let callerShare = getInteger(this, ("share_" + toString(caller))) | |
44 | + | let callerShareAmount = match callerShare { | |
45 | + | case share: Int => | |
46 | + | share | |
47 | + | case share: Unit => | |
48 | + | throw("Only early liquidity providers can call this function") | |
49 | + | case _ => | |
50 | + | throw("Match error") | |
51 | + | } | |
52 | + | callerShareAmount | |
53 | + | } | |
54 | + | ||
55 | + | ||
56 | + | func getClaimedAmount (caller) = { | |
57 | + | let callerWithdrawn = getInteger(this, (toString(caller) + keyUserSWOPClaimedAmount)) | |
58 | + | let callerWithdrawnAmount = match callerWithdrawn { | |
59 | + | case share: Int => | |
60 | + | share | |
61 | + | case share: Unit => | |
62 | + | 0 | |
63 | + | case _ => | |
64 | + | throw("Match error") | |
65 | + | } | |
66 | + | callerWithdrawnAmount | |
67 | + | } | |
68 | + | ||
69 | + | ||
70 | + | @Callable(i) | |
71 | + | func claimSWOP () = { | |
72 | + | let blockDuration = (finishHeight - activateHeight) | |
73 | + | let currentDuration = if ((finishHeight > height)) | |
74 | + | then height | |
75 | + | else finishHeight | |
76 | + | let userShare = getCallerShare(i.caller) | |
77 | + | let userClaimedAmount = getClaimedAmount(i.caller) | |
78 | + | let claimAmount = (fraction((currentDuration - activateHeight), userShare, blockDuration) - userClaimedAmount) | |
79 | + | let userClaimedAmountNew = (userClaimedAmount + claimAmount) | |
80 | + | [ScriptTransfer(i.caller, claimAmount, SWOP), IntegerEntry((toString(i.caller) + keyUserSWOPClaimedAmount), userClaimedAmountNew), IntegerEntry((toString(i.caller) + keyUserSWOPLastClaimedAmount), claimAmount)] | |
81 | + | } | |
82 | + | ||
83 | + | ||
84 | + | @Verifier(tx) | |
85 | + | func verify () = match tx { | |
86 | + | case _ => | |
87 | + | let adminPubKey1Signed = if (sigVerify(tx.bodyBytes, tx.proofs[0], adminPubKey1)) | |
88 | + | then 1 | |
89 | + | else 0 | |
90 | + | let adminPubKey2Signed = if (sigVerify(tx.bodyBytes, tx.proofs[1], adminPubKey2)) | |
91 | + | then 1 | |
92 | + | else 0 | |
93 | + | let adminPubKey3Signed = if (sigVerify(tx.bodyBytes, tx.proofs[2], adminPubKey3)) | |
94 | + | then 1 | |
95 | + | else 0 | |
96 | + | (((adminPubKey1Signed + adminPubKey2Signed) + adminPubKey3Signed) >= 2) | |
97 | + | } | |
98 | + |
github/deemru/w8io/169f3d6 37.30 ms ◑