tx · 5AkrqBaM8YaRxQvKaaKNw5uqxVKHB6mXpE8Pw2iD7BqU 3N1iXCNZY1tjDef39ScB9LPBmooxdXoBJkD: -0.01000000 Waves 2023.06.20 04:38 [2630305] smart account 3N1iXCNZY1tjDef39ScB9LPBmooxdXoBJkD > SELF 0.00000000 Waves
{ "type": 13, "id": "5AkrqBaM8YaRxQvKaaKNw5uqxVKHB6mXpE8Pw2iD7BqU", "fee": 1000000, "feeAssetId": null, "timestamp": 1687225092849, "version": 2, "chainId": 84, "sender": "3N1iXCNZY1tjDef39ScB9LPBmooxdXoBJkD", "senderPublicKey": "9qMg5u3dj3rp3orXEZZNTWN7PUWnoijorcYJQDkwmRVX", "proofs": [ "3c8NaejjL6Zb3f3fXdhun9izxpAAZm3xF3Xzxt5WP5PcusHi9TZNonHNwftDbtBDvzQ3QkJtN2gCWEpaBt4rv5eP" ], "script": "base64:BgINCAISABIDCgEBEgASAAcABkFPNzdJZAEgzyJaViiQ6j2AZfKpNu2dCRFknFZgZaTAIjZxbKlGaRYACUFPNzdJZFN0cgIsRXdabXk2UjlVZ0gyNk1uQVl5Q3FmZ3JZaUtYelhVYk52aTFUSDV1RjVaaksABVNjYWxlAICglKWNHQENdHJ5R2V0SW50ZWdlcgEDa2V5BAckbWF0Y2gwCQCaCAIFBHRoaXMFA2tleQMJAAECBQckbWF0Y2gwAgNJbnQEAWIFByRtYXRjaDAFAWIAAAEMdHJ5R2V0U3RyaW5nAQNrZXkEByRtYXRjaDAJAJ0IAgUEdGhpcwUDa2V5AwkAAQIFByRtYXRjaDACBlN0cmluZwQBYQUHJG1hdGNoMAUBYQIAARBjbGFpbUFsaWFzUmVzdWx0AgdhZGRyZXNzCmFzc2V0SWRTdHIECmFkZHJlc3NTdHIJAKUIAQUHYWRkcmVzcwQPY3VycmVudEludGVyZXN0CQENdHJ5R2V0SW50ZWdlcgEJAKwCAgkArAICAhFnbG9iYWxfbGFzdENoZWNrXwUKYXNzZXRJZFN0cgIJX2ludGVyZXN0BBFsYXN0Q2hlY2tJbnRlcmVzdAkBDXRyeUdldEludGVnZXIBCQCsAgIJAKwCAgkArAICBQphZGRyZXNzU3RyAgtfbGFzdENoZWNrXwUKYXNzZXRJZFN0cgIJX2ludGVyZXN0BAxzdGFrZWRBbW91bnQDCQAAAgUKYXNzZXRJZFN0cgUJQU83N0lkU3RyCQENdHJ5R2V0SW50ZWdlcgEJAKwCAgUKYWRkcmVzc1N0cgIHX3N0YWtlZAkBDXRyeUdldEludGVnZXIBCQCsAgIJAKwCAgkArAICBQphZGRyZXNzU3RyAgFfBQphc3NldElkU3RyAgdfc3Rha2VkBAZyZXdhcmQDCQBmAgURbGFzdENoZWNrSW50ZXJlc3QAAAkAawMJAGUCBQ9jdXJyZW50SW50ZXJlc3QFEWxhc3RDaGVja0ludGVyZXN0BQxzdGFrZWRBbW91bnQFBVNjYWxlAAAJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgkArAICCQCsAgIFCmFkZHJlc3NTdHICC19sYXN0Q2hlY2tfBQphc3NldElkU3RyAglfaW50ZXJlc3QFD2N1cnJlbnRJbnRlcmVzdAkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICCQCsAgIJAKwCAgUKYWRkcmVzc1N0cgIBXwUKYXNzZXRJZFN0cgIIX2NsYWltZWQJAGQCCQENdHJ5R2V0SW50ZWdlcgEJAKwCAgkArAICCQCsAgIFCmFkZHJlc3NTdHICAV8FCmFzc2V0SWRTdHICCF9jbGFpbWVkBQZyZXdhcmQJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgkArAICCQCsAgIFCmFkZHJlc3NTdHICAV8FCmFzc2V0SWRTdHICCl9sYXN0Q2xhaW0IBQlsYXN0QmxvY2sJdGltZXN0YW1wCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMFB2FkZHJlc3MFBnJld2FyZAkA2QQBBQphc3NldElkU3RyBQNuaWwBC2NsYWltUmVzdWx0AQdhZGRyZXNzCQEQY2xhaW1BbGlhc1Jlc3VsdAIFB2FkZHJlc3MFCUFPNzdJZFN0cgQBaQEFc3Rha2UABAZhbW91bnQICQCRAwIIBQFpCHBheW1lbnRzAAAGYW1vdW50BAphZGRyZXNzU3RyCQClCAEIBQFpBmNhbGxlcgQKYXNzZXRJZFN0cgkA2AQBBQZBTzc3SWQED2N1cnJlbnRJbnRlcmVzdAkBDXRyeUdldEludGVnZXIBCQCsAgIJAKwCAgIRZ2xvYmFsX2xhc3RDaGVja18FCmFzc2V0SWRTdHICCV9pbnRlcmVzdAQRdG90YWxTdGFrZWRBbW91bnQJAQ10cnlHZXRJbnRlZ2VyAQINZ2xvYmFsX3N0YWtlZAMJAQIhPQIICQCRAwIIBQFpCHBheW1lbnRzAAAHYXNzZXRJZAUGQU83N0lkCQACAQIUd3JvbmcgYXNzZXQgYXR0YWNoZWQJAM4IAgkBC2NsYWltUmVzdWx0AQgFAWkGY2FsbGVyCQDMCAIJAQxJbnRlZ2VyRW50cnkCAg1nbG9iYWxfc3Rha2VkCQBkAgURdG90YWxTdGFrZWRBbW91bnQFBmFtb3VudAkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICBQphZGRyZXNzU3RyAgdfc3Rha2VkCQBkAgkBDXRyeUdldEludGVnZXIBCQCsAgIFCmFkZHJlc3NTdHICB19zdGFrZWQFBmFtb3VudAUDbmlsAWkBB3VuU3Rha2UBBmFtb3VudAQKYWRkcmVzc1N0cgkApQgBCAUBaQZjYWxsZXIEDHN0YWtlZEFtb3VudAkBDXRyeUdldEludGVnZXIBCQCsAgIFCmFkZHJlc3NTdHICB19zdGFrZWQDCQBmAgUGYW1vdW50BQxzdGFrZWRBbW91bnQJAAIBAh95b3UgZG9uJ3QgaGF2ZSB0b2tlbnMgYXZhaWxhYmxlCQDOCAIJAQtjbGFpbVJlc3VsdAEIBQFpBmNhbGxlcgkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICBQphZGRyZXNzU3RyAgdfc3Rha2VkCQBlAgUMc3Rha2VkQW1vdW50BQZhbW91bnQJAMwIAgkBDEludGVnZXJFbnRyeQICDWdsb2JhbF9zdGFrZWQJAGUCCQENdHJ5R2V0SW50ZWdlcgECDWdsb2JhbF9zdGFrZWQFBmFtb3VudAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCAUBaQZjYWxsZXIFBmFtb3VudAUGQU83N0lkBQNuaWwBaQELY2xhaW1SZXdhcmQACQELY2xhaW1SZXN1bHQBCAUBaQZjYWxsZXIBaQELdG9wVXBSZXdhcmQABAZhbW91bnQJAGsDCAkAkQMCCAUBaQhwYXltZW50cwAABmFtb3VudAAJAAoEC3VsdHJhQW1vdW50CQBlAggJAJEDAggFAWkIcGF5bWVudHMAAAZhbW91bnQFBmFtb3VudAQKYXNzZXRJZFN0cgkA2AQBCQEFdmFsdWUBCAkAkQMCCAUBaQhwYXltZW50cwAAB2Fzc2V0SWQED2N1cnJlbnRJbnRlcmVzdAkBDXRyeUdldEludGVnZXIBCQCsAgIJAKwCAgIRZ2xvYmFsX2xhc3RDaGVja18FCmFzc2V0SWRTdHICCV9pbnRlcmVzdAQRdG90YWxTdGFrZWRBbW91bnQJAQ10cnlHZXRJbnRlZ2VyAQINZ2xvYmFsX3N0YWtlZAQNaW50ZXJlc3REZWx0YQMJAGYCBRF0b3RhbFN0YWtlZEFtb3VudAAACQBrAwUGYW1vdW50BQVTY2FsZQURdG90YWxTdGFrZWRBbW91bnQAAAQUY3VycmVudFVsdHJhSW50ZXJlc3QJAQ10cnlHZXRJbnRlZ2VyAQIfZ2xvYmFsX2xhc3RDaGVja191bHRyYV9pbnRlcmVzdAQWdG90YWxVbHRyYVN0YWtlZEFtb3VudAkBDXRyeUdldEludGVnZXIBAhNnbG9iYWxfdWx0cmFfc3Rha2VkBBJ1bHRyYUludGVyZXN0RGVsdGEDCQBmAgURdG90YWxTdGFrZWRBbW91bnQAAAkAawMFBmFtb3VudAUFU2NhbGUFEXRvdGFsU3Rha2VkQW1vdW50AAADCQECIT0CCAkAkQMCCAUBaQhwYXltZW50cwAAB2Fzc2V0SWQFBkFPNzdJZAkAAgECFHdyb25nIGFzc2V0IGF0dGFjaGVkCQCUCgIJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgkArAICAgdnbG9iYWxfBQphc3NldElkU3RyAglfZWFybmluZ3MJAGQCCQENdHJ5R2V0SW50ZWdlcgEJAKwCAgkArAICAgdnbG9iYWxfBQphc3NldElkU3RyAglfZWFybmluZ3MFBmFtb3VudAkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICCQCsAgICEWdsb2JhbF9sYXN0Q2hlY2tfBQphc3NldElkU3RyAglfaW50ZXJlc3QJAGQCBQ9jdXJyZW50SW50ZXJlc3QFDWludGVyZXN0RGVsdGEJAMwIAgkBDEludGVnZXJFbnRyeQICFWdsb2JhbF91bHRyYV9lYXJuaW5ncwkAZAIJAQ10cnlHZXRJbnRlZ2VyAQIVZ2xvYmFsX3VsdHJhX2Vhcm5pbmdzBQt1bHRyYUFtb3VudAkAzAgCCQEMSW50ZWdlckVudHJ5AgIfZ2xvYmFsX2xhc3RDaGVja191bHRyYV9pbnRlcmVzdAkAZAIFFGN1cnJlbnRVbHRyYUludGVyZXN0BRJ1bHRyYUludGVyZXN0RGVsdGEFA25pbAUGYW1vdW50AQJ0eAEGdmVyaWZ5AAkA9AMDCAUCdHgJYm9keUJ5dGVzCQCRAwIIBQJ0eAZwcm9vZnMAAAgFAnR4D3NlbmRlclB1YmxpY0tlefct2os=", "height": 2630305, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 7iMFxWkdKEARHFpdtvgoutcLPKPw1GHdCn9SAumfynis Next: Bcb9y8WGuhSLGMFFop95b9XnoYFA3Jgh4kD84JHhYpVR Full:
Old | New | Differences | |
---|---|---|---|
1 | 1 | {-# STDLIB_VERSION 6 #-} | |
2 | 2 | {-# SCRIPT_TYPE ACCOUNT #-} | |
3 | 3 | {-# CONTENT_TYPE DAPP #-} | |
4 | + | let AO77Id = base58'EwZmy6R9UgH26MnAYyCqfgrYiKXzXUbNvi1TH5uF5ZjK' | |
5 | + | ||
6 | + | let AO77IdStr = "EwZmy6R9UgH26MnAYyCqfgrYiKXzXUbNvi1TH5uF5ZjK" | |
7 | + | ||
8 | + | let Scale = 1000000000000 | |
9 | + | ||
10 | + | func tryGetInteger (key) = match getInteger(this, key) { | |
11 | + | case b: Int => | |
12 | + | b | |
13 | + | case _ => | |
14 | + | 0 | |
15 | + | } | |
16 | + | ||
17 | + | ||
18 | + | func tryGetString (key) = match getString(this, key) { | |
19 | + | case a: String => | |
20 | + | a | |
21 | + | case _ => | |
22 | + | "" | |
23 | + | } | |
24 | + | ||
25 | + | ||
26 | + | func claimAliasResult (address,assetIdStr) = { | |
27 | + | let addressStr = toString(address) | |
28 | + | let currentInterest = tryGetInteger((("global_lastCheck_" + assetIdStr) + "_interest")) | |
29 | + | let lastCheckInterest = tryGetInteger((((addressStr + "_lastCheck_") + assetIdStr) + "_interest")) | |
30 | + | let stakedAmount = if ((assetIdStr == AO77IdStr)) | |
31 | + | then tryGetInteger((addressStr + "_staked")) | |
32 | + | else tryGetInteger((((addressStr + "_") + assetIdStr) + "_staked")) | |
33 | + | let reward = if ((lastCheckInterest > 0)) | |
34 | + | then fraction((currentInterest - lastCheckInterest), stakedAmount, Scale) | |
35 | + | else 0 | |
36 | + | [IntegerEntry((((addressStr + "_lastCheck_") + assetIdStr) + "_interest"), currentInterest), IntegerEntry((((addressStr + "_") + assetIdStr) + "_claimed"), (tryGetInteger((((addressStr + "_") + assetIdStr) + "_claimed")) + reward)), IntegerEntry((((addressStr + "_") + assetIdStr) + "_lastClaim"), lastBlock.timestamp), ScriptTransfer(address, reward, fromBase58String(assetIdStr))] | |
37 | + | } | |
38 | + | ||
39 | + | ||
40 | + | func claimResult (address) = claimAliasResult(address, AO77IdStr) | |
4 | 41 | ||
5 | 42 | ||
6 | 43 | @Callable(i) | |
7 | - | func OA8 () = $Tuple2([Issue(("S_" + take(toBase58String(i.caller.bytes), 6)), "", 1000000, 8, true)], unit) | |
44 | + | func stake () = { | |
45 | + | let amount = i.payments[0].amount | |
46 | + | let addressStr = toString(i.caller) | |
47 | + | let assetIdStr = toBase58String(AO77Id) | |
48 | + | let currentInterest = tryGetInteger((("global_lastCheck_" + assetIdStr) + "_interest")) | |
49 | + | let totalStakedAmount = tryGetInteger("global_staked") | |
50 | + | if ((i.payments[0].assetId != AO77Id)) | |
51 | + | then throw("wrong asset attached") | |
52 | + | else (claimResult(i.caller) ++ [IntegerEntry("global_staked", (totalStakedAmount + amount)), IntegerEntry((addressStr + "_staked"), (tryGetInteger((addressStr + "_staked")) + amount))]) | |
53 | + | } | |
8 | 54 | ||
55 | + | ||
56 | + | ||
57 | + | @Callable(i) | |
58 | + | func unStake (amount) = { | |
59 | + | let addressStr = toString(i.caller) | |
60 | + | let stakedAmount = tryGetInteger((addressStr + "_staked")) | |
61 | + | if ((amount > stakedAmount)) | |
62 | + | then throw("you don't have tokens available") | |
63 | + | else (claimResult(i.caller) ++ [IntegerEntry((addressStr + "_staked"), (stakedAmount - amount)), IntegerEntry("global_staked", (tryGetInteger("global_staked") - amount)), ScriptTransfer(i.caller, amount, AO77Id)]) | |
64 | + | } | |
65 | + | ||
66 | + | ||
67 | + | ||
68 | + | @Callable(i) | |
69 | + | func claimReward () = claimResult(i.caller) | |
70 | + | ||
71 | + | ||
72 | + | ||
73 | + | @Callable(i) | |
74 | + | func topUpReward () = { | |
75 | + | let amount = fraction(i.payments[0].amount, 9, 10) | |
76 | + | let ultraAmount = (i.payments[0].amount - amount) | |
77 | + | let assetIdStr = toBase58String(value(i.payments[0].assetId)) | |
78 | + | let currentInterest = tryGetInteger((("global_lastCheck_" + assetIdStr) + "_interest")) | |
79 | + | let totalStakedAmount = tryGetInteger("global_staked") | |
80 | + | let interestDelta = if ((totalStakedAmount > 0)) | |
81 | + | then fraction(amount, Scale, totalStakedAmount) | |
82 | + | else 0 | |
83 | + | let currentUltraInterest = tryGetInteger("global_lastCheck_ultra_interest") | |
84 | + | let totalUltraStakedAmount = tryGetInteger("global_ultra_staked") | |
85 | + | let ultraInterestDelta = if ((totalStakedAmount > 0)) | |
86 | + | then fraction(amount, Scale, totalStakedAmount) | |
87 | + | else 0 | |
88 | + | if ((i.payments[0].assetId != AO77Id)) | |
89 | + | then throw("wrong asset attached") | |
90 | + | else $Tuple2([IntegerEntry((("global_" + assetIdStr) + "_earnings"), (tryGetInteger((("global_" + assetIdStr) + "_earnings")) + amount)), IntegerEntry((("global_lastCheck_" + assetIdStr) + "_interest"), (currentInterest + interestDelta)), IntegerEntry("global_ultra_earnings", (tryGetInteger("global_ultra_earnings") + ultraAmount)), IntegerEntry("global_lastCheck_ultra_interest", (currentUltraInterest + ultraInterestDelta))], amount) | |
91 | + | } | |
92 | + | ||
93 | + | ||
94 | + | @Verifier(tx) | |
95 | + | func verify () = sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey) | |
9 | 96 |
github/deemru/w8io/026f985 31.74 ms ◑