tx · Eh52Cg3tEoteQCsW3X17rjqMpGjubyTRTNvMbQH8jKVR

3Ms38PbYnARMUMorWK8SqRBhKKQq2yhXPB1:  -0.01300000 Waves

2022.10.20 11:14 [2280469] smart account 3Ms38PbYnARMUMorWK8SqRBhKKQq2yhXPB1 > SELF 0.00000000 Waves

{ "type": 13, "id": "Eh52Cg3tEoteQCsW3X17rjqMpGjubyTRTNvMbQH8jKVR", "fee": 1300000, "feeAssetId": null, "timestamp": 1666253777606, "version": 1, "sender": "3Ms38PbYnARMUMorWK8SqRBhKKQq2yhXPB1", "senderPublicKey": "3EfudNNQNACtTotZKwkRu97fZW5fFjUPwuP1gd3oBHJs", "proofs": [ "4nrDiN3PpfXRYd3zxqF73RZqtxW6pKGQwLSjTZDwgyfQyccgPSayuWutP35bBjWTbUXDQikg9ZW8qreMXL64RmPK" ], "script": "base64:AAIFAAAAAAAABs8IAhIFCgMBAQgSAwoBARIAEgMKAQESAwoBCBIAIgNTRVAiC2tleVJlZmVycmFsIgxrZXlXeEFzc2V0SWQiE2tleU1hbmFnZXJQdWJsaWNLZXkiGmtleVBlbmRpbmdNYW5hZ2VyUHVibGljS2V5IhVJZHhDZmdDbGFpbVN0YXJ0QmxvY2siGElkeENmZ0NsYWltVmVzdGluZ1BlcmlvZCISSWR4Q2ZnQ2xhaW1Bc3NldElkIhRJZHhDZmdDbGFpbUFzc2V0TXVsdCIVSWR4Q2ZnQ2xhaW1Bc3NldE93bmVyIhtJZHhDZmdDbGFpbUFzc2V0VG90YWxBbW91bnQiG0lkeFRvdGFsc1RvdGFsQ2xhaW1lZEFtb3VudCIYSWR4VG90YWxzUmVtYWluaW5nQW1vdW50IhpJZHhUb3RhbHNMYXN0Q2xhaW1lZEhlaWdodCIIdGhyb3dFcnIiA21zZyIPZ2V0U3RyaW5nT3JGYWlsIgNrZXkiEmZvcm1hdENvbmZpZ1N0cmluZyIPY2xhaW1TdGFydEJsb2NrIg12ZXN0aW5nUGVyaW9kIg1hc3NldElkQmFzZTU4Iglhc3NldE11bHQiCmFzc2V0T3duZXIiDWFzc2V0VG90YWxBbXQiDGZvcm1hdENvbmZpZyIPY2xhaW1Bc3NldE93bmVyIhVjbGFpbUFzc2V0VG90YWxBbW91bnQiEmZvcm1hdFRvdGFsc1N0cmluZyISdG90YWxDbGFpbWVkQW1vdW50IhdyZW1haW5pbmdBbW91bnRGb3JDbGFpbSIRbGFzdENsYWltZWRIZWlnaHQiE2Zvcm1hdEhpc3RvcnlSZWNvcmQiEmNsYWltZWRBc3NldEFtb3VudCIOY2xhaW1pbmdCbG9ja3MiFGZpcnN0Q2FsdWxhdGlvbkJsb2NrIhNsYXN0Q2FsdWxhdGlvbkJsb2NrIglrZXlDb25maWciCWtleVRvdGFscyISa2V5QW1vdW50VW5jbGFpbWVkIhlrZXlPcGVyYXRpb25IaXN0b3J5UmVjb3JkIgR0eXBlIgt1c2VyQWRkcmVzcyIGdHhJZDU4Ig9yZWFkQ29uZmlnQXJyYXkiD3JlYWRUb3RhbHNBcnJheSILVG90YWxzRW50cnkiCW9yaWdBcnJheSIKY2xhaW1lZEFtdCIUbmV3TGFzdENsYWltZWRIZWlnaHQiD3JlbWFpbmluZ0Ftb3VudCIVbmV3VG90YWxDbGFpbWVkQW1vdW50IhJuZXdSZW1haW5pbmdBbW91bnQiGkNsYWltT3BlcmF0aW9uSGlzdG9yeUVudHJ5IhVmaXJzdENhbGN1bGF0aW9uQmxvY2siFGxhc3RDYWxjdWxhdGlvbkJsb2NrIgR0eElkIhZtYW5hZ2VyUHVibGljS2V5T3JVbml0IgckbWF0Y2gwIgFzIh1wZW5kaW5nTWFuYWdlclB1YmxpY0tleU9yVW5pdCILbXVzdE1hbmFnZXIiAWkiAnBkIgJwayILY2xhaW1Db21tb24iBmFtb3VudCIIY2ZnQXJyYXkiE2NmZ0NsYWltU3RhcnRIZWlnaHQiEGNmZ0NsYWltRHVyYXRpb24iC2NmZ0NsYWltRW5kIg9jZmdDbGFpbUFzc2V0SWQiEmNmZ0NsYWltQXNzZXRPd25lciIYY2ZnQ2xhaW1Bc3NldFRvdGFsQW1vdW50Ig9vcmlnVG90YWxzQXJyYXkiFHRvdGFsUmVtYWluaW5nQW1vdW50Ig9hbW91bnRBdmFpbGFibGUiD2Ftb3VudFVuY2xhaW1lZCIUYW1vdW50QXZhaWxhYmxlVG90YWwiDWFtb3VudFRvQ2xhaW0iEmFtb3VudFVuY2xhaW1lZE5ldyITdmVzdGluZ1BlcmlvZEJsb2NrcyISYmVuZWZpY2lhcnlBZGRyZXNzIgp2ZXN0aW5nRW5kIhhiZW5lZmljaWFyeUFkZHJlc3NQYXJzZWQiA3BtdCIMY2xhaW1Bc3NldElkIg5jbGFpbUFzc2V0SW5mbyIOY2xhaW1Bc3NldElkNTgiDmNsYWltQXNzZXRNdWx0IhBjbGFpbUFzc2V0QW1vdW50Igh3eEFtb3VudCIXcmVmZXJyYWxDb250cmFjdEFkZHJlc3MiDG11c3RSZWZlcnJhbCIJd3hBc3NldElkIhdwZW5kaW5nTWFuYWdlclB1YmxpY0tleSILY2hlY2tDYWxsZXIiFWNoZWNrTWFuYWdlclB1YmxpY0tleSICcG0iBWhhc1BNIgdjaGVja1BNIgJ0eCIGdmVyaWZ5Ig90YXJnZXRQdWJsaWNLZXkAAAAgAAAAAAFhAgAAAAJfXwAAAAABYgkABLkAAAACCQAETAAAAAICAAAAAiVz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", "chainId": 84, "height": 2280469, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: FuAM13VtSqt6ZEoxLHxtWqk71LZR751juqjjTyXX9KSb Next: 6B9y1Sydv8etjJdJT95VQm2Gv7N1LSobBKjirc9MBNDJ Full:
OldNewDifferences
11 {-# STDLIB_VERSION 5 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let SEP = "__"
55
66 let keyReferral = makeString(["%s", "referral"], SEP)
77
88 let keyWxAssetId = makeString(["%s", "wxAssetId"], SEP)
99
1010 func keyManagerPublicKey () = "%s__managerPublicKey"
1111
1212
1313 func keyPendingManagerPublicKey () = "%s__pendingManagerPublicKey"
1414
1515
1616 let IdxCfgClaimStartBlock = 1
1717
1818 let IdxCfgClaimVestingPeriod = 2
1919
2020 let IdxCfgClaimAssetId = 3
2121
2222 let IdxCfgClaimAssetMult = 4
2323
2424 let IdxCfgClaimAssetOwner = 5
2525
2626 let IdxCfgClaimAssetTotalAmount = 6
2727
2828 let IdxTotalsTotalClaimedAmount = 1
2929
3030 let IdxTotalsRemainingAmount = 2
3131
3232 let IdxTotalsLastClaimedHeight = 3
3333
3434 func throwErr (msg) = throw(makeString(["marketing.ride:", msg], " "))
3535
3636
3737 func getStringOrFail (key) = valueOrErrorMessage(getString(key), (("mandatory this." + key) + " is not defined"))
3838
3939
4040 func formatConfigString (claimStartBlock,vestingPeriod,assetIdBase58,assetMult,assetOwner,assetTotalAmt) = makeString(["%d%d%s%d%s%d%", claimStartBlock, vestingPeriod, assetIdBase58, assetMult, assetOwner, assetTotalAmt], SEP)
4141
4242
4343 func formatConfig (claimStartBlock,vestingPeriod,assetIdBase58,assetMult,claimAssetOwner,claimAssetTotalAmount) = formatConfigString(toString(claimStartBlock), toString(vestingPeriod), assetIdBase58, toString(assetMult), claimAssetOwner, toString(claimAssetTotalAmount))
4444
4545
4646 func formatTotalsString (totalClaimedAmount,remainingAmountForClaim,lastClaimedHeight) = makeString(["%d%d%d", totalClaimedAmount, remainingAmountForClaim, lastClaimedHeight], SEP)
4747
4848
4949 func formatHistoryRecord (claimedAssetAmount,claimingBlocks,firstCalulationBlock,lastCalulationBlock) = makeString(["%d%d%d%d%d%d", toString(height), toString(lastBlock.timestamp), toString(claimedAssetAmount), toString(claimingBlocks), toString(firstCalulationBlock), toString(lastCalulationBlock)], SEP)
5050
5151
5252 func keyConfig () = "%s__config"
5353
5454
5555 func keyTotals () = "%s__totals"
5656
5757
5858 let keyAmountUnclaimed = makeString(["%s", "amountUnclaimed"], SEP)
5959
6060 func keyOperationHistoryRecord (type,userAddress,txId58) = makeString(["%s%s%s%s__history", type, userAddress, txId58], SEP)
6161
6262
6363 func readConfigArray () = split(getStringOrFail(keyConfig()), SEP)
6464
6565
6666 func readTotalsArray () = split(getStringOrFail(keyTotals()), SEP)
6767
6868
6969 func TotalsEntry (key,origArray,claimedAmt,newLastClaimedHeight) = {
7070 let totalClaimedAmount = parseIntValue(origArray[IdxTotalsTotalClaimedAmount])
7171 let remainingAmount = parseIntValue(origArray[IdxTotalsRemainingAmount])
7272 let lastClaimedHeight = parseIntValue(origArray[IdxTotalsLastClaimedHeight])
7373 let newTotalClaimedAmount = (totalClaimedAmount + claimedAmt)
7474 let newRemainingAmount = (remainingAmount - claimedAmt)
7575 if ((0 > newRemainingAmount))
7676 then throw("invalid math")
7777 else StringEntry(key, formatTotalsString(toString(newTotalClaimedAmount), toString(newRemainingAmount), toString(newLastClaimedHeight)))
7878 }
7979
8080
8181 func ClaimOperationHistoryEntry (userAddress,claimedAssetAmount,claimingBlocks,firstCalculationBlock,lastCalculationBlock,txId) = StringEntry(keyOperationHistoryRecord("claim", userAddress, toBase58String(txId)), formatHistoryRecord(claimedAssetAmount, claimingBlocks, firstCalculationBlock, lastCalculationBlock))
8282
8383
8484 func managerPublicKeyOrUnit () = match getString(keyManagerPublicKey()) {
8585 case s: String =>
8686 fromBase58String(s)
8787 case _: Unit =>
8888 unit
8989 case _ =>
9090 throw("Match error")
9191 }
9292
9393
9494 func pendingManagerPublicKeyOrUnit () = match getString(keyPendingManagerPublicKey()) {
9595 case s: String =>
9696 fromBase58String(s)
9797 case _: Unit =>
9898 unit
9999 case _ =>
100100 throw("Match error")
101101 }
102102
103103
104104 func mustManager (i) = {
105105 let pd = throwErr("permission denied")
106106 match managerPublicKeyOrUnit() {
107107 case pk: ByteVector =>
108108 if ((i.callerPublicKey == pk))
109109 then true
110110 else pd
111111 case _: Unit =>
112112 if ((i.caller == this))
113113 then true
114114 else pd
115115 case _ =>
116116 throw("Match error")
117117 }
118118 }
119119
120120
121121 func claimCommon (i,amount) = {
122122 let cfgArray = readConfigArray()
123123 let cfgClaimStartHeight = parseIntValue(cfgArray[IdxCfgClaimStartBlock])
124124 let cfgClaimDuration = parseIntValue(cfgArray[IdxCfgClaimVestingPeriod])
125125 let cfgClaimEnd = (cfgClaimStartHeight + cfgClaimDuration)
126126 let cfgClaimAssetId = fromBase58String(cfgArray[IdxCfgClaimAssetId])
127127 let cfgClaimAssetOwner = addressFromStringValue(cfgArray[IdxCfgClaimAssetOwner])
128128 let cfgClaimAssetTotalAmount = parseIntValue(cfgArray[IdxCfgClaimAssetTotalAmount])
129129 let origTotalsArray = readTotalsArray()
130130 let totalClaimedAmount = parseIntValue(origTotalsArray[IdxTotalsTotalClaimedAmount])
131131 let totalRemainingAmount = parseIntValue(origTotalsArray[IdxTotalsRemainingAmount])
132132 let lastClaimedHeight = parseIntValue(origTotalsArray[IdxTotalsLastClaimedHeight])
133133 if ((i.caller != cfgClaimAssetOwner))
134134 then throw("permissions denied")
135135 else if ((cfgClaimStartHeight > height))
136136 then throw(("Wait claim start block: " + toString(cfgClaimStartHeight)))
137137 else {
138138 let lastCalulationBlock = if ((height > cfgClaimEnd))
139139 then cfgClaimEnd
140140 else height
141141 let firstCalulationBlock = if ((lastClaimedHeight == 0))
142142 then cfgClaimStartHeight
143143 else lastClaimedHeight
144144 let claimingBlocks = (lastCalulationBlock - firstCalulationBlock)
145145 let amountAvailable = fraction(cfgClaimAssetTotalAmount, claimingBlocks, cfgClaimDuration)
146146 let amountUnclaimed = valueOrElse(getInteger(this, keyAmountUnclaimed), 0)
147147 let amountAvailableTotal = (amountAvailable + amountUnclaimed)
148148 let amountToClaim = if (if ((0 >= amount))
149149 then true
150150 else (amount >= amountAvailableTotal))
151151 then amountAvailableTotal
152152 else amount
153153 let amountUnclaimedNew = (amountAvailableTotal - amountToClaim)
154154 $Tuple2([IntegerEntry(keyAmountUnclaimed, amountUnclaimedNew), ScriptTransfer(cfgClaimAssetOwner, amountToClaim, cfgClaimAssetId), TotalsEntry(keyTotals(), readTotalsArray(), amountToClaim, lastCalulationBlock), ClaimOperationHistoryEntry(toString(cfgClaimAssetOwner), amountToClaim, claimingBlocks, firstCalulationBlock, lastCalulationBlock, i.transactionId)], amountToClaim)
155155 }
156156 }
157157
158158
159159 @Callable(i)
160160 func constructor (claimStartBlock,vestingPeriodBlocks,beneficiaryAddress) = {
161161 let vestingEnd = (claimStartBlock + vestingPeriodBlocks)
162162 if (isDefined(getString(keyConfig())))
163163 then throw("already initialized")
164164 else if ((size(i.payments) != 1))
165165 then throw("exactly 1 payment must be attached")
166166 else if ((i.callerPublicKey != base58'2Cbd8ozG7A1RyRNC3nNnZgHu7Ru4K3JCfpyPkhqr9zxq'))
167167 then throw("not authorized")
168168 else {
169169 let beneficiaryAddressParsed = valueOrErrorMessage(addressFromString(beneficiaryAddress), "Invalid beneficiarAddress passed")
170170 let pmt = value(i.payments[0])
171171 let claimAssetId = value(pmt.assetId)
172172 let claimAssetInfo = valueOrErrorMessage(assetInfo(claimAssetId), "fail to load ido asset info")
173173 let claimAssetId58 = toBase58String(claimAssetId)
174174 let claimAssetMult = pow(10, 0, claimAssetInfo.decimals, 0, 0, DOWN)
175175 let claimAssetAmount = pmt.amount
176176 [StringEntry(keyConfig(), formatConfig(claimStartBlock, vestingPeriodBlocks, claimAssetId58, claimAssetMult, toString(beneficiaryAddressParsed), claimAssetAmount)), StringEntry(keyTotals(), formatTotalsString("0", toString(claimAssetAmount), "0"))]
177177 }
178178 }
179179
180180
181181
182182 @Callable(i)
183183 func claimAmount (amount) = claimCommon(i, amount)
184184
185185
186186
187187 @Callable(i)
188188 func claim () = claimCommon(i, -1)
189189
190190
191191
192192 @Callable(i)
193193 func withdrawReferralReward (wxAmount) = {
194194 let referralContractAddress = value(getString(keyReferral))
195195 let mustReferral = if ((toString(i.caller) == referralContractAddress))
196196 then true
197197 else throwErr("permission denied")
198198 if ((mustReferral == mustReferral))
199199 then {
200200 let wxAssetId = fromBase58String(value(getString(keyWxAssetId)))
201201 $Tuple2([ScriptTransfer(i.caller, wxAmount, wxAssetId), ClaimOperationHistoryEntry(referralContractAddress, wxAmount, 0, 0, 0, i.transactionId)], unit)
202202 }
203203 else throw("Strict value is not equal to itself.")
204204 }
205205
206206
207207
208208 @Callable(i)
209209 func setManager (pendingManagerPublicKey) = {
210210 let checkCaller = mustManager(i)
211211 if ((checkCaller == checkCaller))
212212 then {
213213 let checkManagerPublicKey = fromBase58String(pendingManagerPublicKey)
214214 if ((checkManagerPublicKey == checkManagerPublicKey))
215215 then [StringEntry(keyPendingManagerPublicKey(), pendingManagerPublicKey)]
216216 else throw("Strict value is not equal to itself.")
217217 }
218218 else throw("Strict value is not equal to itself.")
219219 }
220220
221221
222222
223223 @Callable(i)
224224 func confirmManager () = {
225225 let pm = pendingManagerPublicKeyOrUnit()
226226 let hasPM = if (isDefined(pm))
227227 then true
228228 else throwErr("no pending manager")
229229 if ((hasPM == hasPM))
230230 then {
231231 let checkPM = if ((i.callerPublicKey == value(pm)))
232232 then true
233233 else throwErr("you are not pending manager")
234234 if ((checkPM == checkPM))
235235 then [StringEntry(keyManagerPublicKey(), toBase58String(value(pm))), DeleteEntry(keyPendingManagerPublicKey())]
236236 else throw("Strict value is not equal to itself.")
237237 }
238238 else throw("Strict value is not equal to itself.")
239239 }
240240
241241
242242 @Verifier(tx)
243243 func verify () = {
244244 let targetPublicKey = match managerPublicKeyOrUnit() {
245245 case pk: ByteVector =>
246246 pk
247247 case _: Unit =>
248248 tx.senderPublicKey
249249 case _ =>
250250 throw("Match error")
251251 }
252252 sigVerify(tx.bodyBytes, tx.proofs[0], targetPublicKey)
253253 }
254254

github/deemru/w8io/fabc49c 
92.18 ms