tx · 76KKBpX24LSTaddmJz4djsy1DN5HPsvhtLf3Ch63cCPA

3MxSmkN2k61JXHEgPiEGHXe3tbWWAXkjjFU:  -0.01000000 Waves

2023.03.31 11:01 [2513852] smart account 3MxSmkN2k61JXHEgPiEGHXe3tbWWAXkjjFU > SELF 0.00000000 Waves

{ "type": 13, "id": "76KKBpX24LSTaddmJz4djsy1DN5HPsvhtLf3Ch63cCPA", "fee": 1000000, "feeAssetId": null, "timestamp": 1680249704274, "version": 2, "chainId": 84, "sender": "3MxSmkN2k61JXHEgPiEGHXe3tbWWAXkjjFU", "senderPublicKey": "5JRYXWHUqnjC64QFkSFRwBLWTWkBwtSug7AR5qpayLFZ", "proofs": [ "4BpYtjx5NMkvxy8dGt2uxa5wwoRiAXbAzqCAeMG223qk3i87PnN3EMC4Ai52MJCAeNgBdwn7SN6BpzcpstqEmewa" ], "script": "base64:BgILCAISABIAEgMKAQgnAANTRVACAl9fAAltaW5BbW91bnQAoI0GAAVNVUxUNgDAhD0ABU1VTFQ4AIDC1y8ADHdhdmVzQXNzZXRJZAkA2QQBAgVXQVZFUwAJd3hBc3NldElkASCSG0YQuWLup/bT6hgi9eKCFpr4g0Ms8TlwYBOnuoF+kQALc3VyZkFzc2V0SWQBIJAAWRMLuH+bKhVbndPzPrUh6s437sYxcbQYniWC5wW/AAp4dG5Bc3NldElkASA+C5leh6zuoWVTiwSN3lzPL5Qn45NcugcClrS482RvjgAWbmV1dHJpbm9TdGFraW5nQWRkcmVzcwEaAVdraDjhA9SajJ8SG8YsvCMHOQvN7RLXCl8ADmNvbnN0cnVjdGVkS2V5Agtjb25zdHJ1Y3RlZAASdG90YWxTdXJmU3Rha2VkS2V5Ag90b3RhbFN1cmZTdGFrZWQAJXBlbmRpbmdUb3RhbFN1cmZBbW91bnRUb1dpdGhkcmF3YWxLZXkCInBlbmRpbmdUb3RhbFN1ZnRBbW91bnRUb1dpdGhkcmF3YWwAEmRldnNXYXZlc0Ftb3VudEtleQIPZGV2c1dhdmVzQW1vdW50ABFkZXZzU3VyZkFtb3VudEtleQIOZGV2c1N1cmZBbW91bnQAD2RldnNXeEFtb3VudEtleQIMZGV2c1d4QW1vdW50ABBkZXZzWHRuQW1vdW50S2V5AhBkZXZzWHRuQW1vdW50S2V5ABxjdXJyZW50V2l0aGRyYXdhbFBlcmlvZElkS2V5AhljdXJyZW50V2l0aGRyYXdhbFBlcmlvZElkABljdXJyZW50WFROU3dhcFBlcmlvZElkS2V5AhZjdXJyZW50WFROU3dhcFBlcmlvZElkACRjdXJyZW50U3VyZlN0YWtpbmdSZXdhcmRzUGVyaW9kSWRLZXkCJGN1cnJlbnRTdXJmU3Rha2luZ1Jld2FyZHNQZXJpb2RJZEtleQEqa2V5Q3VycmVudFh0blN3YXBQZXJpb2RYdG5BbW91bnRGb3JPbmVTdXJmAQhwZXJpb2RJZAkArAICCQCsAgICFGN1cnJlbnRYVE5Td2FwUGVyaW9kBQNTRVAJAKQDAQUIcGVyaW9kSWQBNmtleUN1cnJlbnRTdXJmU3Rha2luZ1Jld2FyZFBlcmlvZFdhdmVzQW1vdW50Rm9yT25lU3VyZgEIcGVyaW9kSWQJAKwCAgkArAICAiljdXJyZW50U3VyZlN0YWtpbmdSZXdhcmRQZXJpb2RXYXZlc0Ftb3VudAUDU0VQCQCkAwEFCHBlcmlvZElkATNrZXlDdXJyZW50U3VyZlN0YWtpbmdSZXdhcmRQZXJpb2RXeEFtb3VudEZvck9uZVN1cmYBCHBlcmlvZElkCQCsAgIJAKwCAgImY3VycmVudFN1cmZTdGFraW5nUmV3YXJkUGVyaW9kV3dBbW91bnQFA1NFUAkApAMBBQhwZXJpb2RJZAE0a2V5Q3VycmVudFN1cmZTdGFraW5nUmV3YXJkUGVyaW9kWHRuQW1vdW50Rm9yT25lU3VyZgEIcGVyaW9kSWQJAKwCAgkArAICAidjdXJyZW50U3VyZlN0YWtpbmdSZXdhcmRQZXJpb2RYdG5BbW91bnQFA1NFUAkApAMBBQhwZXJpb2RJZAEda2V5Q3VycmVudFVzZXJUb3RhbFN1cmZTdGFrZWQBB2FkZHJlc3MJAKwCAgkArAICAhpjdXJyZW50VXNlclRvdGFsU3VyZlN0YWtlZAUDU0VQBQdhZGRyZXNzASxrZXlDdXJyZW50VXNlclVuY2xhaW1lZFh0blN3YXBSZXdhcmRQZXJpb2RJZAEHYWRkcmVzcwkArAICCQCsAgICKWN1cnJlbnRVc2VyVW5jbGFpbWVkWHRuU3dhcFJld2FyZFBlcmlvZElkBQNTRVAFB2FkZHJlc3MBMGtleUN1cnJlbnRVc2VyVW5jbGFpbWVkU3VyZlN0YWtpbmdSZXdhcmRQZXJpb2RJZAEHYWRkcmVzcwkArAICCQCsAgICLWN1cnJlbnRVc2VyVW5jbGFpbWVkU3VyZlN0YWtpbmdSZXdhcmRQZXJpb2RJZAUDU0VQBQdhZGRyZXNzASdrZXlDdXJyZW50VXNlclBlbmRpbmdXaXRoZHJhd2FsUGVyaW9kSWQBB2FkZHJlc3MJAKwCAgkArAICAiRjdXJyZW50VXNlclBlbmRpbmdXaXRoZHJhd2FsUGVyaW9kSWQFA1NFUAUHYWRkcmVzcwEra2V5Q3VycmVudFVzZXJUb3RhbFN1cmZQZW5kaW5nRm9yV2l0aGRyYXdhbAEHYWRkcmVzcwkArAICCQCsAgICKGN1cnJlbnRVc2VyVG90YWxTdXJmUGVuZGluZ0ZvcldpdGhkcmF3YWwFA1NFUAUHYWRkcmVzcwEJYXNQYXltZW50AQF2BAckbWF0Y2gwBQF2AwkAAQIFByRtYXRjaDACD0F0dGFjaGVkUGF5bWVudAQBcAUHJG1hdGNoMAUBcAkAAgECIWZhaWwgdG8gY2FzdCBpbnRvIEF0dGFjaGVkUGF5bWVudAEFYXNJbnQBA3ZhbAQHJG1hdGNoMAUDdmFsAwkAAQIFByRtYXRjaDACA0ludAQGdmFsSW50BQckbWF0Y2gwBQZ2YWxJbnQJAAIBAhVmYWlsIHRvIGNhc3QgaW50byBJbnQBCmFzSW50T3JEZWYCA3ZhbAdkZWZhdWx0BAckbWF0Y2gwBQN2YWwDCQABAgUHJG1hdGNoMAIDSW50BAZ2YWxJbnQFByRtYXRjaDAFBnZhbEludAUHZGVmYXVsdAEIYXNTdHJpbmcBA3ZhbAQHJG1hdGNoMAUDdmFsAwkAAQIFByRtYXRjaDACBlN0cmluZwQJdmFsU3RyaW5nBQckbWF0Y2gwBQl2YWxTdHJpbmcJAAIBAhhmYWlsIHRvIGNhc3QgaW50byBTdHJpbmcBDWFzU3RyaW5nT3JEZWYCA3ZhbAdkZWZhdWx0BAckbWF0Y2gwBQN2YWwDCQABAgUHJG1hdGNoMAIGU3RyaW5nBAl2YWxTdHJpbmcFByRtYXRjaDAFCXZhbFN0cmluZwUHZGVmYXVsdAEJYXNCb29sZWFuAQN2YWwEByRtYXRjaDAFA3ZhbAMJAAECBQckbWF0Y2gwAgdCb29sZWFuBAd2YWxCb29sBQckbWF0Y2gwBQd2YWxCb29sCQACAQIZZmFpbCB0byBjYXN0IGludG8gQm9vbGVhbgEOYXNCb29sZWFuT3JEZWYCA3ZhbAdkZWZhdWx0BAckbWF0Y2gwBQN2YWwDCQABAgUHJG1hdGNoMAIHQm9vbGVhbgQHdmFsQm9vbAUHJG1hdGNoMAUHdmFsQm9vbAUHZGVmYXVsdAERY3VycmVudFByb3BvcnRpb24BD3h0blN3YXBMaW1pdE1heAQPdG90YWxTdXJmU3Rha2VkCQERQGV4dHJOYXRpdmUoMTA1NSkBBRJ0b3RhbFN1cmZTdGFrZWRLZXkJAL0CBAkAtgIBBQ90b3RhbFN1cmZTdGFrZWQJALYCAQUFTVVMVDYJALYCAQUPeHRuU3dhcExpbWl0TWF4BQZIQUxGVVABD2NoZWNrUHJvcG9ydGlvbgMPeHRuU3dhcExpbWl0TWF4CnN1cmZBbW91bnQJeG50QW1vdW50BApwcm9wb3J0aW9uCQERY3VycmVudFByb3BvcnRpb24BBQ94dG5Td2FwTGltaXRNYXgEEmV4cGVjdGVkU3VyZkFtb3VudAkAoAMBCQC9AgQFCnByb3BvcnRpb24JALYCAQUJeG50QW1vdW50CQC2AgEFBU1VTFQ2BQZIQUxGVVADCQAAAgUSZXhwZWN0ZWRTdXJmQW1vdW50BQpzdXJmQW1vdW50BgkAAgEJAKwCAgkArAICCQCsAgIJAKwCAgIFV2l0aCAJAKQDAQUPeHRuU3dhcExpbWl0TWF4Ah8gWE5UIGFtb3VudCB5b3Ugc2hvdWxkIHByb3ZpZGUgCQCkAwEFEmV4cGVjdGVkU3VyZkFtb3VudAIVIFNVUkYgYW1vdW50IHRvIHN0YWtlABtuZXV0cmlub190b3RhbFN1cmZTdGFrZWRLZXkCD3RvdGFsU3VyZlN0YWtlZAEga2V5TmV1dHJpbm9Ub3RhbFN1cmZTdGFrZWRCeVVzZXIBB2FkZHJlc3MJAKwCAgkArAICAhhuZXV0cmlub190b3RhbFN1cmZTdGFrZWQFA1NFUAUHYWRkcmVzcwMBaQEFc3Rha2UAAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwABCQACAQIrWW91IG11c3QgaW5jbHVkZSBvbmUgcGF5bWVudCBpbiB0cmFuc2FjdGlvbgQHcGF5bWVudAkBCWFzUGF5bWVudAEJAJEDAggFAWkIcGF5bWVudHMAAAMJAGcCAAAIBQdwYXltZW50BmFtb3VudAkAAgECJ1BheW1lbnQgYW1vdW50IG11c3QgYmUgYmlnZ2VyIHRoYW4gemVybwMJAQIhPQIIBQdwYXltZW50B2Fzc2V0SWQFC3N1cmZBc3NldElkCQACAQIlT25seSBTVVJGIFRva2VuIGFwcGljYWJsZSBmb3Igc3Rha2luZwQPdG90YWxTdXJmU3Rha2VkCQEKYXNJbnRPckRlZgIJAJ8IAQUbbmV1dHJpbm9fdG90YWxTdXJmU3Rha2VkS2V5AAAEFXRvdGFsU3VyZlN0YWtlZEJ5VXNlcgkBCmFzSW50T3JEZWYCCQCfCAEJASBrZXlOZXV0cmlub1RvdGFsU3VyZlN0YWtlZEJ5VXNlcgEJANgEAQgIBQFpBmNhbGxlcgVieXRlcwAACQDMCAIJAQxJbnRlZ2VyRW50cnkCBRtuZXV0cmlub190b3RhbFN1cmZTdGFrZWRLZXkJAGQCBQ90b3RhbFN1cmZTdGFrZWQIBQdwYXltZW50BmFtb3VudAkAzAgCCQEMSW50ZWdlckVudHJ5AgkBIGtleU5ldXRyaW5vVG90YWxTdXJmU3Rha2VkQnlVc2VyAQkA2AQBCAgFAWkGY2FsbGVyBWJ5dGVzCQBkAgUVdG90YWxTdXJmU3Rha2VkQnlVc2VyCAUHcGF5bWVudAZhbW91bnQFA25pbAFpAQd1bnN0YWtlAAUDbmlsAWkBDGluZm9SRUFET05MWQEHYWRkcmVzcwQPdG90YWxTdXJmU3Rha2VkCQEKYXNJbnRPckRlZgIJAJ8IAQUbbmV1dHJpbm9fdG90YWxTdXJmU3Rha2VkS2V5AAAEFXRvdGFsU3VyZlN0YWtlZEJ5VXNlcgkBCmFzSW50T3JEZWYCCQCfCAEJASBrZXlOZXV0cmlub1RvdGFsU3VyZlN0YWtlZEJ5VXNlcgEJANgEAQgIBQFpBmNhbGxlcgVieXRlcwAACQCUCgIFA25pbAkAlAoCBQ90b3RhbFN1cmZTdGFrZWQFFXRvdGFsU3VyZlN0YWtlZEJ5VXNlcgECdHgBBnZlcmlmeQAJAPQDAwgFAnR4CWJvZHlCeXRlcwkAkQMCCAUCdHgGcHJvb2ZzAAAIBQJ0eA9zZW5kZXJQdWJsaWNLZXnRWlJx", "height": 2513852, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: DYMyvXZDGxvLuhGV1VvqxXYLzbGfTurM7xquF2ms5Vvi Next: GyhwAabncgKoigJs73JH96vqogXh9ZS4d4Sg6xdLpXTk Diff:
OldNewDifferences
146146 func stake () = if ((size(i.payments) != 1))
147147 then throw("You must include one payment in transaction")
148148 else {
149- let payment = asPayment(i.payments[1])
149+ let payment = asPayment(i.payments[0])
150150 if ((0 >= payment.amount))
151151 then throw("Payment amount must be bigger than zero")
152152 else if ((payment.assetId != surfAssetId))
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let SEP = "__"
55
66 let minAmount = 100000
77
88 let MULT6 = 1000000
99
1010 let MULT8 = 100000000
1111
1212 let wavesAssetId = fromBase58String("WAVES")
1313
1414 let wxAssetId = base58'AqLeQKwfaLAqwqGYgcgGsadXKwst5JapwwnbDJaEvc3z'
1515
1616 let surfAssetId = base58'Ah81wWWsz6vvyADwx4rjuKVpPDrF5yWVye3RXYtzUUxN'
1717
1818 let xtnAssetId = base58'5BCY4djuj99w98B4jqabc4db1b23vfKTqY75RqicNyW5'
1919
2020 let neutrinoStakingAddress = base58'3PBiotFpqjRMkkeFBccnQNUXUopy7KFez5C'
2121
2222 let constructedKey = "constructed"
2323
2424 let totalSurfStakedKey = "totalSurfStaked"
2525
2626 let pendingTotalSurfAmountToWithdrawalKey = "pendingTotalSuftAmountToWithdrawal"
2727
2828 let devsWavesAmountKey = "devsWavesAmount"
2929
3030 let devsSurfAmountKey = "devsSurfAmount"
3131
3232 let devsWxAmountKey = "devsWxAmount"
3333
3434 let devsXtnAmountKey = "devsXtnAmountKey"
3535
3636 let currentWithdrawalPeriodIdKey = "currentWithdrawalPeriodId"
3737
3838 let currentXTNSwapPeriodIdKey = "currentXTNSwapPeriodId"
3939
4040 let currentSurfStakingRewardsPeriodIdKey = "currentSurfStakingRewardsPeriodIdKey"
4141
4242 func keyCurrentXtnSwapPeriodXtnAmountForOneSurf (periodId) = (("currentXTNSwapPeriod" + SEP) + toString(periodId))
4343
4444
4545 func keyCurrentSurfStakingRewardPeriodWavesAmountForOneSurf (periodId) = (("currentSurfStakingRewardPeriodWavesAmount" + SEP) + toString(periodId))
4646
4747
4848 func keyCurrentSurfStakingRewardPeriodWxAmountForOneSurf (periodId) = (("currentSurfStakingRewardPeriodWwAmount" + SEP) + toString(periodId))
4949
5050
5151 func keyCurrentSurfStakingRewardPeriodXtnAmountForOneSurf (periodId) = (("currentSurfStakingRewardPeriodXtnAmount" + SEP) + toString(periodId))
5252
5353
5454 func keyCurrentUserTotalSurfStaked (address) = (("currentUserTotalSurfStaked" + SEP) + address)
5555
5656
5757 func keyCurrentUserUnclaimedXtnSwapRewardPeriodId (address) = (("currentUserUnclaimedXtnSwapRewardPeriodId" + SEP) + address)
5858
5959
6060 func keyCurrentUserUnclaimedSurfStakingRewardPeriodId (address) = (("currentUserUnclaimedSurfStakingRewardPeriodId" + SEP) + address)
6161
6262
6363 func keyCurrentUserPendingWithdrawalPeriodId (address) = (("currentUserPendingWithdrawalPeriodId" + SEP) + address)
6464
6565
6666 func keyCurrentUserTotalSurfPendingForWithdrawal (address) = (("currentUserTotalSurfPendingForWithdrawal" + SEP) + address)
6767
6868
6969 func asPayment (v) = match v {
7070 case p: AttachedPayment =>
7171 p
7272 case _ =>
7373 throw("fail to cast into AttachedPayment")
7474 }
7575
7676
7777 func asInt (val) = match val {
7878 case valInt: Int =>
7979 valInt
8080 case _ =>
8181 throw("fail to cast into Int")
8282 }
8383
8484
8585 func asIntOrDef (val,default) = match val {
8686 case valInt: Int =>
8787 valInt
8888 case _ =>
8989 default
9090 }
9191
9292
9393 func asString (val) = match val {
9494 case valString: String =>
9595 valString
9696 case _ =>
9797 throw("fail to cast into String")
9898 }
9999
100100
101101 func asStringOrDef (val,default) = match val {
102102 case valString: String =>
103103 valString
104104 case _ =>
105105 default
106106 }
107107
108108
109109 func asBoolean (val) = match val {
110110 case valBool: Boolean =>
111111 valBool
112112 case _ =>
113113 throw("fail to cast into Boolean")
114114 }
115115
116116
117117 func asBooleanOrDef (val,default) = match val {
118118 case valBool: Boolean =>
119119 valBool
120120 case _ =>
121121 default
122122 }
123123
124124
125125 func currentProportion (xtnSwapLimitMax) = {
126126 let totalSurfStaked = getIntegerValue(totalSurfStakedKey)
127127 fraction(toBigInt(totalSurfStaked), toBigInt(MULT6), toBigInt(xtnSwapLimitMax), HALFUP)
128128 }
129129
130130
131131 func checkProportion (xtnSwapLimitMax,surfAmount,xntAmount) = {
132132 let proportion = currentProportion(xtnSwapLimitMax)
133133 let expectedSurfAmount = toInt(fraction(proportion, toBigInt(xntAmount), toBigInt(MULT6), HALFUP))
134134 if ((expectedSurfAmount == surfAmount))
135135 then true
136136 else throw((((("With " + toString(xtnSwapLimitMax)) + " XNT amount you should provide ") + toString(expectedSurfAmount)) + " SURF amount to stake"))
137137 }
138138
139139
140140 let neutrino_totalSurfStakedKey = "totalSurfStaked"
141141
142142 func keyNeutrinoTotalSurfStakedByUser (address) = (("neutrino_totalSurfStaked" + SEP) + address)
143143
144144
145145 @Callable(i)
146146 func stake () = if ((size(i.payments) != 1))
147147 then throw("You must include one payment in transaction")
148148 else {
149- let payment = asPayment(i.payments[1])
149+ let payment = asPayment(i.payments[0])
150150 if ((0 >= payment.amount))
151151 then throw("Payment amount must be bigger than zero")
152152 else if ((payment.assetId != surfAssetId))
153153 then throw("Only SURF Token appicable for staking")
154154 else {
155155 let totalSurfStaked = asIntOrDef(getInteger(neutrino_totalSurfStakedKey), 0)
156156 let totalSurfStakedByUser = asIntOrDef(getInteger(keyNeutrinoTotalSurfStakedByUser(toBase58String(i.caller.bytes))), 0)
157157 [IntegerEntry(neutrino_totalSurfStakedKey, (totalSurfStaked + payment.amount)), IntegerEntry(keyNeutrinoTotalSurfStakedByUser(toBase58String(i.caller.bytes)), (totalSurfStakedByUser + payment.amount))]
158158 }
159159 }
160160
161161
162162
163163 @Callable(i)
164164 func unstake () = nil
165165
166166
167167
168168 @Callable(i)
169169 func infoREADONLY (address) = {
170170 let totalSurfStaked = asIntOrDef(getInteger(neutrino_totalSurfStakedKey), 0)
171171 let totalSurfStakedByUser = asIntOrDef(getInteger(keyNeutrinoTotalSurfStakedByUser(toBase58String(i.caller.bytes))), 0)
172172 $Tuple2(nil, $Tuple2(totalSurfStaked, totalSurfStakedByUser))
173173 }
174174
175175
176176 @Verifier(tx)
177177 func verify () = sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey)
178178

github/deemru/w8io/169f3d6 
49.93 ms