tx · 5kPHywu2r7uJELS5FWoKxTqTu9WXqjerKGuD16khPKbG

3MuS6qVvhBR6wSynFRdcE3fVqmGBjoc7Hhx:  -0.00900000 Waves

2023.06.09 10:49 [2614855] smart account 3MuS6qVvhBR6wSynFRdcE3fVqmGBjoc7Hhx > SELF 0.00000000 Waves

{ "type": 13, "id": "5kPHywu2r7uJELS5FWoKxTqTu9WXqjerKGuD16khPKbG", "fee": 900000, "feeAssetId": null, "timestamp": 1686296977350, "version": 2, "chainId": 84, "sender": "3MuS6qVvhBR6wSynFRdcE3fVqmGBjoc7Hhx", "senderPublicKey": "62CHk4MqTdq3LqeUycy7TPnpvwrjgerSa2FqAY2EafXn", "proofs": [ "49H5udLtqMEftWaymNLJwmWdJXnELc5TPHAfaHAGRxRvjuY8zhqMTeatf9gVQnDM2qcSkAY8zBewow5BWJjf1tLt" ], "script": "base64:BwJKCAISBAoCCAgSBAoCCAESBAoCCAQSBAoCCAISAwoBCBIDCgEBEgMKAQESBQoDAgECEgQKAgIBEgASABIDCgEIEgASABIDCgEIEgAcAANTRVACAl9fABBjb250cmFjdEZpbGVuYW1lAgxmYWN0b3J5LnJpZGUBB3dyYXBFcnIBAXMJAKwCAgkArAICBRBjb250cmFjdEZpbGVuYW1lAgI6IAUBcwEIdGhyb3dFcnIBAXMJAAIBCQEHd3JhcEVycgEFAXMBFGtleUNhbGN1bGF0b3JBZGRyZXNzAAIOJXNfX2NhbGN1bGF0b3IBEmtleVRyZWFzdXJ5QWRkcmVzcwACDCVzX190cmVhc3VyeQEPa2V5Q2hpbGRBZGRyZXNzAAIJJXNfX2NoaWxkARhrZXlCbG9ja1Byb2Nlc3NpbmdSZXdhcmQAAhklc19fYmxvY2tQcm9jZXNzaW5nUmV3YXJkARVrZXlOZXh0QmxvY2tUb1Byb2Nlc3MAAhYlc19fbmV4dEJsb2NrVG9Qcm9jZXNzAQxrZXlMcEFzc2V0SWQAAg0lc19fbHBBc3NldElkABdjYWxjdWxhdG9yQWRkcmVzc09wdGlvbgQHJG1hdGNoMAkAnQgCBQR0aGlzCQEUa2V5Q2FsY3VsYXRvckFkZHJlc3MAAwkAAQIFByRtYXRjaDACBlN0cmluZwQBcwUHJG1hdGNoMAkApggBBQFzAwkAAQIFByRtYXRjaDACBFVuaXQFBHVuaXQJAAIBAgtNYXRjaCBlcnJvcgAXY2FsY3VsYXRvckFkZHJlc3NPckZhaWwJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgUXY2FsY3VsYXRvckFkZHJlc3NPcHRpb24JAQd3cmFwRXJyAQIaaW52YWxpZCBjYWxjdWxhdG9yIGFkZHJlc3MBEGtleUNvbmZpZ0FkZHJlc3MAAgolc19fY29uZmlnARJrZXlDaGlsZHJlbkFkZHJlc3MAAhFjb250cmFjdF9jaGlsZHJlbgEWa2V5Vm90aW5nUmVzdWx0QWRkcmVzcwACFmNvbnRyYWN0X3ZvdGluZ19yZXN1bHQBGWtleVByb3Bvc2FsQWxsb3dCcm9hZGNhc3QCB2FkZHJlc3MEdHhJZAkArAICCQCsAgIJAKwCAgIZcHJvcG9zYWxfYWxsb3dfYnJvYWRjYXN0XwkApQgBBQdhZGRyZXNzAgFfCQDYBAEFBHR4SWQBEWtleUludmVzdGVkQnlVc2VyAgxjaGlsZEFkZHJlc3MLdXNlckFkZHJlc3MJALkJAgkAzAgCAghpbnZlc3RvcgkAzAgCCQClCAEFDGNoaWxkQWRkcmVzcwkAzAgCCQClCAEFC3VzZXJBZGRyZXNzBQNuaWwCAV8AE2NvbmZpZ0FkZHJlc3NPcHRpb24EByRtYXRjaDAJAJ0IAgUEdGhpcwkBEGtleUNvbmZpZ0FkZHJlc3MAAwkAAQIFByRtYXRjaDACBlN0cmluZwQBcwUHJG1hdGNoMAkApggBBQFzAwkAAQIFByRtYXRjaDACBFVuaXQFBHVuaXQJAAIBAgtNYXRjaCBlcnJvcgATY29uZmlnQWRkcmVzc09yRmFpbAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCBRNjb25maWdBZGRyZXNzT3B0aW9uCQEHd3JhcEVycgECFmludmFsaWQgY29uZmlnIGFkZHJlc3MAGXZvdGluZ1Jlc3VsdEFkZHJlc3NPcHRpb24EByRtYXRjaDAFE2NvbmZpZ0FkZHJlc3NPcHRpb24DCQABAgUHJG1hdGNoMAIHQWRkcmVzcwQBYQUHJG1hdGNoMAQHJG1hdGNoMQkAnQgCBQFhCQEWa2V5Vm90aW5nUmVzdWx0QWRkcmVzcwADCQABAgUHJG1hdGNoMQIGU3RyaW5nBAFzBQckbWF0Y2gxCQCmCAEFAXMDCQABAgUHJG1hdGNoMQIEVW5pdAUEdW5pdAkAAgECC01hdGNoIGVycm9yAwkAAQIFByRtYXRjaDACBFVuaXQFBHVuaXQJAAIBAgtNYXRjaCBlcnJvcgAZdm90aW5nUmVzdWx0QWRkcmVzc09yRmFpbAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCBRl2b3RpbmdSZXN1bHRBZGRyZXNzT3B0aW9uCQEHd3JhcEVycgECHWludmFsaWQgdm90aW5nIHJlc3VsdCBhZGRyZXNzABVjaGlsZHJlbkFkZHJlc3NPcHRpb24EByRtYXRjaDAFE2NvbmZpZ0FkZHJlc3NPcHRpb24DCQABAgUHJG1hdGNoMAIHQWRkcmVzcwQBYQUHJG1hdGNoMAQHJG1hdGNoMQkAnQgCBQFhCQESa2V5Q2hpbGRyZW5BZGRyZXNzAAMJAAECBQckbWF0Y2gxAgZTdHJpbmcEAXMFByRtYXRjaDEJAKYIAQUBcwMJAAECBQckbWF0Y2gxAgRVbml0BQR1bml0CQACAQILTWF0Y2ggZXJyb3IDCQABAgUHJG1hdGNoMAIEVW5pdAUEdW5pdAkAAgECC01hdGNoIGVycm9yABVjaGlsZHJlbkFkZHJlc3NPckZhaWwJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgUVY2hpbGRyZW5BZGRyZXNzT3B0aW9uCQEHd3JhcEVycgECGGludmFsaWQgY2hpbGRyZW4gYWRkcmVzcwAPbHBBc3NldElkT3B0aW9uBAckbWF0Y2gwCQCdCAIFBHRoaXMJAQxrZXlMcEFzc2V0SWQAAwkAAQIFByRtYXRjaDACBlN0cmluZwQBcwUHJG1hdGNoMAkA2QQBBQFzAwkAAQIFByRtYXRjaDACBFVuaXQFBHVuaXQJAAIBAgtNYXRjaCBlcnJvcgAPbHBBc3NldElkT3JGYWlsCQETdmFsdWVPckVycm9yTWVzc2FnZQIFD2xwQXNzZXRJZE9wdGlvbgkBB3dyYXBFcnIBAhFpbnZhbGlkIGxwQXNzZXRJZAELb25seUFkZHJlc3MCAWkHYWRkcmVzcwMJAAACCAUBaQZjYWxsZXIFB2FkZHJlc3MGCQEIdGhyb3dFcnIBAhFwZXJtaXNzaW9uIGRlbmllZAEIb25seVRoaXMBAWkJAQtvbmx5QWRkcmVzcwIFAWkFBHRoaXMBDm9ubHlDYWxjdWxhdG9yAQFpCQELb25seUFkZHJlc3MCBQFpBRdjYWxjdWxhdG9yQWRkcmVzc09yRmFpbBABaQELc3RyaW5nRW50cnkCA2tleQN2YWwDCQEOb25seUNhbGN1bGF0b3IBBQFpCQCUCgIJAMwIAgkBC1N0cmluZ0VudHJ5AgUDa2V5BQN2YWwFA25pbAUDa2V5CQCUCgIFA25pbAUEdW5pdAFpAQxpbnRlZ2VyRW50cnkCA2tleQN2YWwDCQEOb25seUNhbGN1bGF0b3IBBQFpCQCUCgIJAMwIAgkBDEludGVnZXJFbnRyeQIFA2tleQUDdmFsBQNuaWwFA2tleQkAlAoCBQNuaWwFBHVuaXQBaQEMYm9vbGVhbkVudHJ5AgNrZXkDdmFsAwkBDm9ubHlDYWxjdWxhdG9yAQUBaQkAlAoCCQDMCAIJAQxCb29sZWFuRW50cnkCBQNrZXkFA3ZhbAUDbmlsBQNrZXkJAJQKAgUDbmlsBQR1bml0AWkBC2JpbmFyeUVudHJ5AgNrZXkDdmFsAwkBDm9ubHlDYWxjdWxhdG9yAQUBaQkAlAoCCQDMCAIJAQtCaW5hcnlFbnRyeQIFA2tleQUDdmFsBQNuaWwFA2tleQkAlAoCBQNuaWwFBHVuaXQBaQELZGVsZXRlRW50cnkBA2tleQMJAQ5vbmx5Q2FsY3VsYXRvcgEFAWkJAJQKAgkAzAgCCQELRGVsZXRlRW50cnkBBQNrZXkFA25pbAUDa2V5CQCUCgIFA25pbAUEdW5pdAFpAQdyZWlzc3VlAQZhbW91bnQDCQEOb25seUNhbGN1bGF0b3IBBQFpCQCUCgIJAMwIAgkBB1JlaXNzdWUDBQ9scEFzc2V0SWRPckZhaWwFBmFtb3VudAYFA25pbAUGYW1vdW50CQCUCgIFA25pbAUEdW5pdAFpAQRidXJuAQZhbW91bnQDCQEOb25seUNhbGN1bGF0b3IBBQFpCQCUCgIJAMwIAgkBBEJ1cm4CBQ9scEFzc2V0SWRPckZhaWwFBmFtb3VudAUDbmlsBQZhbW91bnQJAJQKAgUDbmlsBQR1bml0AWkBDXRyYW5zZmVyQXNzZXQDDnJlY2VwaWVudEJ5dGVzBmFtb3VudAdhc3NldElkAwkBDm9ubHlDYWxjdWxhdG9yAQUBaQkAlAoCCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMJAQdBZGRyZXNzAQUOcmVjZXBpZW50Qnl0ZXMFBmFtb3VudAUHYXNzZXRJZAUDbmlsBQZhbW91bnQJAJQKAgUDbmlsBQR1bml0AWkBDXRyYW5zZmVyV2F2ZXMCDnJlY2VwaWVudEJ5dGVzBmFtb3VudAMJAQ5vbmx5Q2FsY3VsYXRvcgEFAWkJAJQKAgkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCQEHQWRkcmVzcwEFDnJlY2VwaWVudEJ5dGVzBQZhbW91bnQFBHVuaXQFA25pbAUGYW1vdW50CQCUCgIFA25pbAUEdW5pdAFpAQhmaW5hbGl6ZQAJAQh0aHJvd0VycgECE25vdCBpbXBsZW1lbnRlZCB5ZXQBaQEHY2xhaW1MUAAJAJQKAgUDbmlsCQD9BwQFF2NhbGN1bGF0b3JBZGRyZXNzT3JGYWlsAgdjbGFpbUxQCQDMCAIICAUBaQZjYWxsZXIFYnl0ZXMFA25pbAgFAWkIcGF5bWVudHMBaQEKY2xhaW1XYXZlcwEHdHhJZFN0cgkAlAoCBQNuaWwJAP0HBAUXY2FsY3VsYXRvckFkZHJlc3NPckZhaWwCCmNsYWltV2F2ZXMJAMwIAggIBQFpBmNhbGxlcgVieXRlcwkAzAgCCQDZBAEFB3R4SWRTdHIFA25pbAgFAWkIcGF5bWVudHMBaQEGaW52ZXN0AAkAlAoCBQNuaWwJAP0HBAUXY2FsY3VsYXRvckFkZHJlc3NPckZhaWwCBmludmVzdAkAzAgCCAgFAWkGY2FsbGVyBWJ5dGVzBQNuaWwIBQFpCHBheW1lbnRzAWkBCHdpdGhkcmF3AAkAlAoCBQNuaWwJAP0HBAUXY2FsY3VsYXRvckFkZHJlc3NPckZhaWwCCHdpdGhkcmF3CQDMCAIICAUBaQZjYWxsZXIFYnl0ZXMFA25pbAgFAWkIcGF5bWVudHMBaQEOY2FuY2VsV2l0aGRyYXcBB3R4SWRTdHIJAJQKAgUDbmlsCQD9BwQFF2NhbGN1bGF0b3JBZGRyZXNzT3JGYWlsAg5jYW5jZWxXaXRoZHJhdwkAzAgCCAgFAWkGY2FsbGVyBWJ5dGVzCQDMCAIJANkEAQUHdHhJZFN0cgUDbmlsCAUBaQhwYXltZW50cwFpAQ1wcm9jZXNzQmxvY2tzAAkAlAoCBQNuaWwJAP0HBAUXY2FsY3VsYXRvckFkZHJlc3NPckZhaWwCDXByb2Nlc3NCbG9ja3MJAMwIAggIBQFpBmNhbGxlcgVieXRlcwUDbmlsCAUBaQhwYXltZW50cwECdHgBBnZlcmlmeQAECmJ5UHJvcG9zYWwJAQt2YWx1ZU9yRWxzZQIJAJsIAgUZdm90aW5nUmVzdWx0QWRkcmVzc09yRmFpbAkBGWtleVByb3Bvc2FsQWxsb3dCcm9hZGNhc3QCBQR0aGlzCAUCdHgCaWQHBAdieU93bmVyCQD0AwMIBQJ0eAlib2R5Qnl0ZXMJAJEDAggFAnR4BnByb29mcwAACAUCdHgPc2VuZGVyUHVibGljS2V5AwkBAiE9AgUZdm90aW5nUmVzdWx0QWRkcmVzc09wdGlvbgUEdW5pdAUKYnlQcm9wb3NhbAUHYnlPd25lctvcxdQ=", "height": 2614855, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 48QrQ3AjAtGBdSpYJk7cYKtZZWDK53LtAVAu25y1ipC8 Next: ELMqEzSHmqrnBk1AhLsm5bsNR45yBZCXxNK3DFakMPes Diff:
OldNewDifferences
193193
194194
195195 @Callable(i)
196-func claimLP () = $Tuple2(nil, invoke(calculatorAddressOrFail, "claimLP", [i.caller.bytes], i.payments))
196+func claimLP () = $Tuple2(nil, reentrantInvoke(calculatorAddressOrFail, "claimLP", [i.caller.bytes], i.payments))
197197
198198
199199
200200 @Callable(i)
201-func claimWaves (txIdStr) = $Tuple2(nil, invoke(calculatorAddressOrFail, "claimWaves", [i.caller.bytes, fromBase58String(txIdStr)], i.payments))
201+func claimWaves (txIdStr) = $Tuple2(nil, reentrantInvoke(calculatorAddressOrFail, "claimWaves", [i.caller.bytes, fromBase58String(txIdStr)], i.payments))
202202
203203
204204
205205 @Callable(i)
206-func invest () = $Tuple2(nil, invoke(calculatorAddressOrFail, "invest", [i.caller.bytes], i.payments))
206+func invest () = $Tuple2(nil, reentrantInvoke(calculatorAddressOrFail, "invest", [i.caller.bytes], i.payments))
207207
208208
209209
210210 @Callable(i)
211-func withdraw () = $Tuple2(nil, invoke(calculatorAddressOrFail, "withdraw", [i.caller.bytes], i.payments))
211+func withdraw () = $Tuple2(nil, reentrantInvoke(calculatorAddressOrFail, "withdraw", [i.caller.bytes], i.payments))
212212
213213
214214
215215 @Callable(i)
216-func cancelWithdraw (txIdStr) = $Tuple2(nil, invoke(calculatorAddressOrFail, "cancelWithdraw", [i.caller.bytes, fromBase58String(txIdStr)], i.payments))
216+func cancelWithdraw (txIdStr) = $Tuple2(nil, reentrantInvoke(calculatorAddressOrFail, "cancelWithdraw", [i.caller.bytes, fromBase58String(txIdStr)], i.payments))
217217
218218
219219
220220 @Callable(i)
221-func processBlocks () = $Tuple2(nil, invoke(calculatorAddressOrFail, "processBlocks", [i.caller.bytes], i.payments))
221+func processBlocks () = $Tuple2(nil, reentrantInvoke(calculatorAddressOrFail, "processBlocks", [i.caller.bytes], i.payments))
222222
223223
224224 @Verifier(tx)
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 7 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let SEP = "__"
55
66 let contractFilename = "factory.ride"
77
88 func wrapErr (s) = ((contractFilename + ": ") + s)
99
1010
1111 func throwErr (s) = throw(wrapErr(s))
1212
1313
1414 func keyCalculatorAddress () = "%s__calculator"
1515
1616
1717 func keyTreasuryAddress () = "%s__treasury"
1818
1919
2020 func keyChildAddress () = "%s__child"
2121
2222
2323 func keyBlockProcessingReward () = "%s__blockProcessingReward"
2424
2525
2626 func keyNextBlockToProcess () = "%s__nextBlockToProcess"
2727
2828
2929 func keyLpAssetId () = "%s__lpAssetId"
3030
3131
3232 let calculatorAddressOption = match getString(this, keyCalculatorAddress()) {
3333 case s: String =>
3434 addressFromString(s)
3535 case _: Unit =>
3636 unit
3737 case _ =>
3838 throw("Match error")
3939 }
4040
4141 let calculatorAddressOrFail = valueOrErrorMessage(calculatorAddressOption, wrapErr("invalid calculator address"))
4242
4343 func keyConfigAddress () = "%s__config"
4444
4545
4646 func keyChildrenAddress () = "contract_children"
4747
4848
4949 func keyVotingResultAddress () = "contract_voting_result"
5050
5151
5252 func keyProposalAllowBroadcast (address,txId) = ((("proposal_allow_broadcast_" + toString(address)) + "_") + toBase58String(txId))
5353
5454
5555 func keyInvestedByUser (childAddress,userAddress) = makeString(["investor", toString(childAddress), toString(userAddress)], "_")
5656
5757
5858 let configAddressOption = match getString(this, keyConfigAddress()) {
5959 case s: String =>
6060 addressFromString(s)
6161 case _: Unit =>
6262 unit
6363 case _ =>
6464 throw("Match error")
6565 }
6666
6767 let configAddressOrFail = valueOrErrorMessage(configAddressOption, wrapErr("invalid config address"))
6868
6969 let votingResultAddressOption = match configAddressOption {
7070 case a: Address =>
7171 match getString(a, keyVotingResultAddress()) {
7272 case s: String =>
7373 addressFromString(s)
7474 case _: Unit =>
7575 unit
7676 case _ =>
7777 throw("Match error")
7878 }
7979 case _: Unit =>
8080 unit
8181 case _ =>
8282 throw("Match error")
8383 }
8484
8585 let votingResultAddressOrFail = valueOrErrorMessage(votingResultAddressOption, wrapErr("invalid voting result address"))
8686
8787 let childrenAddressOption = match configAddressOption {
8888 case a: Address =>
8989 match getString(a, keyChildrenAddress()) {
9090 case s: String =>
9191 addressFromString(s)
9292 case _: Unit =>
9393 unit
9494 case _ =>
9595 throw("Match error")
9696 }
9797 case _: Unit =>
9898 unit
9999 case _ =>
100100 throw("Match error")
101101 }
102102
103103 let childrenAddressOrFail = valueOrErrorMessage(childrenAddressOption, wrapErr("invalid children address"))
104104
105105 let lpAssetIdOption = match getString(this, keyLpAssetId()) {
106106 case s: String =>
107107 fromBase58String(s)
108108 case _: Unit =>
109109 unit
110110 case _ =>
111111 throw("Match error")
112112 }
113113
114114 let lpAssetIdOrFail = valueOrErrorMessage(lpAssetIdOption, wrapErr("invalid lpAssetId"))
115115
116116 func onlyAddress (i,address) = if ((i.caller == address))
117117 then true
118118 else throwErr("permission denied")
119119
120120
121121 func onlyThis (i) = onlyAddress(i, this)
122122
123123
124124 func onlyCalculator (i) = onlyAddress(i, calculatorAddressOrFail)
125125
126126
127127 @Callable(i)
128128 func stringEntry (key,val) = if (onlyCalculator(i))
129129 then $Tuple2([StringEntry(key, val)], key)
130130 else $Tuple2(nil, unit)
131131
132132
133133
134134 @Callable(i)
135135 func integerEntry (key,val) = if (onlyCalculator(i))
136136 then $Tuple2([IntegerEntry(key, val)], key)
137137 else $Tuple2(nil, unit)
138138
139139
140140
141141 @Callable(i)
142142 func booleanEntry (key,val) = if (onlyCalculator(i))
143143 then $Tuple2([BooleanEntry(key, val)], key)
144144 else $Tuple2(nil, unit)
145145
146146
147147
148148 @Callable(i)
149149 func binaryEntry (key,val) = if (onlyCalculator(i))
150150 then $Tuple2([BinaryEntry(key, val)], key)
151151 else $Tuple2(nil, unit)
152152
153153
154154
155155 @Callable(i)
156156 func deleteEntry (key) = if (onlyCalculator(i))
157157 then $Tuple2([DeleteEntry(key)], key)
158158 else $Tuple2(nil, unit)
159159
160160
161161
162162 @Callable(i)
163163 func reissue (amount) = if (onlyCalculator(i))
164164 then $Tuple2([Reissue(lpAssetIdOrFail, amount, true)], amount)
165165 else $Tuple2(nil, unit)
166166
167167
168168
169169 @Callable(i)
170170 func burn (amount) = if (onlyCalculator(i))
171171 then $Tuple2([Burn(lpAssetIdOrFail, amount)], amount)
172172 else $Tuple2(nil, unit)
173173
174174
175175
176176 @Callable(i)
177177 func transferAsset (recepientBytes,amount,assetId) = if (onlyCalculator(i))
178178 then $Tuple2([ScriptTransfer(Address(recepientBytes), amount, assetId)], amount)
179179 else $Tuple2(nil, unit)
180180
181181
182182
183183 @Callable(i)
184184 func transferWaves (recepientBytes,amount) = if (onlyCalculator(i))
185185 then $Tuple2([ScriptTransfer(Address(recepientBytes), amount, unit)], amount)
186186 else $Tuple2(nil, unit)
187187
188188
189189
190190 @Callable(i)
191191 func finalize () = throwErr("not implemented yet")
192192
193193
194194
195195 @Callable(i)
196-func claimLP () = $Tuple2(nil, invoke(calculatorAddressOrFail, "claimLP", [i.caller.bytes], i.payments))
196+func claimLP () = $Tuple2(nil, reentrantInvoke(calculatorAddressOrFail, "claimLP", [i.caller.bytes], i.payments))
197197
198198
199199
200200 @Callable(i)
201-func claimWaves (txIdStr) = $Tuple2(nil, invoke(calculatorAddressOrFail, "claimWaves", [i.caller.bytes, fromBase58String(txIdStr)], i.payments))
201+func claimWaves (txIdStr) = $Tuple2(nil, reentrantInvoke(calculatorAddressOrFail, "claimWaves", [i.caller.bytes, fromBase58String(txIdStr)], i.payments))
202202
203203
204204
205205 @Callable(i)
206-func invest () = $Tuple2(nil, invoke(calculatorAddressOrFail, "invest", [i.caller.bytes], i.payments))
206+func invest () = $Tuple2(nil, reentrantInvoke(calculatorAddressOrFail, "invest", [i.caller.bytes], i.payments))
207207
208208
209209
210210 @Callable(i)
211-func withdraw () = $Tuple2(nil, invoke(calculatorAddressOrFail, "withdraw", [i.caller.bytes], i.payments))
211+func withdraw () = $Tuple2(nil, reentrantInvoke(calculatorAddressOrFail, "withdraw", [i.caller.bytes], i.payments))
212212
213213
214214
215215 @Callable(i)
216-func cancelWithdraw (txIdStr) = $Tuple2(nil, invoke(calculatorAddressOrFail, "cancelWithdraw", [i.caller.bytes, fromBase58String(txIdStr)], i.payments))
216+func cancelWithdraw (txIdStr) = $Tuple2(nil, reentrantInvoke(calculatorAddressOrFail, "cancelWithdraw", [i.caller.bytes, fromBase58String(txIdStr)], i.payments))
217217
218218
219219
220220 @Callable(i)
221-func processBlocks () = $Tuple2(nil, invoke(calculatorAddressOrFail, "processBlocks", [i.caller.bytes], i.payments))
221+func processBlocks () = $Tuple2(nil, reentrantInvoke(calculatorAddressOrFail, "processBlocks", [i.caller.bytes], i.payments))
222222
223223
224224 @Verifier(tx)
225225 func verify () = {
226226 let byProposal = valueOrElse(getBoolean(votingResultAddressOrFail, keyProposalAllowBroadcast(this, tx.id)), false)
227227 let byOwner = sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey)
228228 if ((votingResultAddressOption != unit))
229229 then byProposal
230230 else byOwner
231231 }
232232

github/deemru/w8io/3ef1775 
49.67 ms