019bab3b-a9ce-7222-9441-b6180eb0d007
Open this run to answer one question: is this real attacker-relevant behavior with real impact, or just normal contract plumbing?
| ID | Type | Status | Attempts | Heartbeat |
|---|---|---|---|---|
| 38198 | artifact.fetch | complete | 1 / 3 | 3 months ago |
| 38199 | proxy.resolve | complete | 1 / 3 | 3 months ago |
| 38200 | tool.cast_disasm | complete | 1 / 3 | 3 months ago |
| 38201 | analysis.bundle | complete | 1 / 3 | 3 months ago |
| 38202 | capability.graph | complete | 1 / 3 | 3 months ago |
| 38203 | detector.run | complete | 1 / 3 | 3 months ago |
| 38204 | validation.fork | complete | 1 / 3 | 3 months ago |
| 38898 | report.consolidate | complete | 1 / 6 | 3 months ago |
| 38899 | tool.slither | complete | 1 / 2 | 3 months ago |
{
"status": "not_proxy"
}
'forge clean' running (wd: /tmp/slither-n6e8sup9)
'forge config --json' running
'forge build --build-info --skip ./test/** ./script/** --force' running (wd: /tmp/slither-n6e8sup9)
GovTreasurer.safeGDAOTransfer(address,uint256) (contracts/Contract.sol#1105-1113) ignores return value by gdao.transfer(_to,GDAOBal) (contracts/Contract.sol#1109-1110)
GovTreasurer.safeGDAOTransfer(address,uint256) (contracts/Contract.sol#1105-1113) ignores return value by gdao.transfer(_to,_amount) (contracts/Contract.sol#1112-1113)
Reference: https://github.com/crytic/slither/wiki/Detector-Documentation#unchecked-transfer
GovTreasurer.pendingGDAO(uint256,address) (contracts/Contract.sol#1000-1019) performs a multiplication on the result of a division:
- GDAOReward = multiplier.mul(GDAOPerBlock).mul(pool.allocPoint).div(totalAllocPoint) (contracts/Contract.sol#1015-1016)
- accGDAOPerShare = accGDAOPerShare.add(GDAOReward.mul(1e12).div(lpSupply)) (contracts/Contract.sol#1016-1017)
GovTreasurer.updatePool(uint256) (contracts/Contract.sol#1030-1040) performs a multiplication on the result of a division:
- GDAOReward = multiplier.mul(GDAOPerBlock).mul(pool.allocPoint).div(totalAllocPoint) (contracts/Contract.sol#1036-1037)
- pool.accGDAOPerShare = pool.accGDAOPerShare.add(GDAOReward.mul(1e12).div(lpSupply)) (contracts/Contract.sol#1038-1040)
Reference: https://github.com/crytic/slither/wiki/Detector-Documentation#divide-before-multiply
GovTreasurer.updatePool(uint256) (contracts/Contract.sol#1030-1040) uses a dangerous strict equality:
- lpSupply == 0 (contracts/Contract.sol#1034)
Reference: https://github.com/crytic/slither/wiki/Detector-Documentation#dangerous-strict-equalities
Reentrancy in GovTreasurer.add(uint256,IERC20,uint256,bool) (contracts/Contract.sol#963-976):
External calls:
- massUpdatePools() (contracts/Contract.sol#965)
- gdao.transfer(_to,GDAOBal) (contracts/Contract.sol#1109-1110)
- gdao.transfer(_to,_amount) (contracts/Contract.sol#1112-1113)
State variables written after the call(s):
- poolInfo.push(PoolInfo({token:_token,allocPoint:_allocPoint,taxRate:_taxRate,lastRewardBlock:lastRewardBlock,accGDAOPerShare:0})) (contracts/Contract.sol#968-976)
GovTreasurer.poolInfo (contracts/Contract.sol#940) can be used in cross function reentrancies:
- GovTreasurer.add(uint256,IERC20,uint256,bool) (contracts/Contract.sol#963-976)
- GovTreasurer.checkPoolDuplicate(IERC20) (contracts/Contract.sol#955-963)
- GovTreasurer.deposit(uint256,uint256) (contracts/Contract.sol#1059-1089)
- GovTreasurer.emergencyWithdraw(uint256) (contracts/Contract.sol#1047-1059)
- GovTreasurer.massUpdatePools() (contracts/Contract.sol#1021-1029)
- GovTreasurer.pendingGDAO(uint256,address) (contracts/Contract.sol#1000-1019)
- GovTreasurer.poolInfo (contracts/Contract.sol#940)
- GovTreasurer.poolLength() (contracts/Contract.sol#953-954)
- GovTreasurer.set(uint256,uint256,bool) (contracts/Contract.sol#976-985)
- GovTreasurer.updatePool(uint256) (contracts/Contract.sol#1030-1040)
- GovTreasurer.withdraw(uint256,uint256) (contracts/Contract.sol#1089-1104)
- totalAllocPoint = totalAllocPoint.add(_allocPoint) (contracts/Contract.sol#967)
GovTreasurer.totalAllocPoint (contracts/Contract.sol#942) can be used in cross function reentrancies:
- GovTreasurer.add(uint256,IERC20,uint256,bool) (contracts/Contract.sol#963-976)
- GovTreasurer.pendingGDAO(uint256,address) (contracts/Contract.sol#1000-1019)
- GovTreasurer.set(uint256,uint256,bool) (contracts/Contract.sol#976-985)
- GovTreasurer.totalAllocPoint (contracts/Contract.sol#942)
- GovTreasurer.updatePool(uint256) (contracts/Contract.sol#1030-1040)
Reentrancy in GovTreasurer.deposit(uint256,uint256) (contracts/Contract.sol#1059-1089):
External calls:
- updatePool(_pid) (contracts/Contract.sol#1063)
- gdao.transfer(_to,GDAOBal) (contracts/Contract.sol#1109-1110)
- gdao.transfer(_to,_amount) (contracts/Contract.sol#1112-1113)
- safeGDAOTransfer(msg.sender,pending) (contracts/Contract.sol#1071)
- gdao.transfer(_to,GDAOBal) (contracts/Contract.sol#1109-1110)
- gdao.transfer(_to,_amount) (contracts/Contract.sol#1112-1113)
- pool.token.safeTransferFrom(address(msg.sender),address(this),_amount.sub(taxedAmount)) (contracts/Contract.sol#1075-1077)
- pool.token.safeTransferFrom(address(msg.sender),address(treasury),taxedAmount) (contracts/Contract.sol#1077-1079)
State variables written after the call(s):
- user.amount = user.amount.add(_amount.sub(taxedAmount)) (contracts/Contract.sol#1080-1082)
GovTreasurer.userInfo (contracts/Contract.sol#940-941) can be used in cross function reentrancies:
- GovTreasurer.deposit(uint256,uint256) (contracts/Contract.sol#1059-1089)
- GovTreasurer.emergencyWithdraw(uint256) (contracts/Contract.sol#1047-1059)
- GovTreasurer.pendingGDAO(uint256,address) (contracts/Contract.sol#1000-1019)
- GovTreasurer.userInfo (contracts/Contract.sol#940-941)
- GovTreasurer.withdraw(uint256,uint256) (contracts/Contract.sol#1089-1104)
- user.rewardDebt = user.amount.mul(pool.accGDAOPerShare).div(1e12) (contracts/Contract.sol#1083-1085)
GovTreasurer.userInfo (contracts/Contract.sol#940-941) can be used in cross function reentrancies:
- GovTreasurer.deposit(uint256,uint256) (contracts/Contract.sol#1059-1089)
- GovTreasurer.emergencyWithdraw(uint256) (contracts/Contract.sol#1047-1059)
- GovTreasurer.pendingGDAO(uint256,address) (contracts/Contract.sol#1000-1019)
- GovTreasurer.userInfo (contracts/Contract.sol#940-941)
- GovTreasurer.withdraw(uint256,uint256) (contracts/Contract.sol#1089-1104)
Reentrancy in GovTreasurer.set(uint256,uint256,bool) (contracts/Contract.sol#976-985):
External calls:
- massUpdatePools() (contracts/Contract.sol#982)
- gdao.transfer(_to,GDAOBal) (contracts/Contract.sol#1109-1110)
- gdao.transfer(_to,_amount) (contracts/Contract.sol#1112-1113)
State variables written after the call(s):
- poolInfo[_pid].allocPoint = _allocPoint (contracts/Contract.sol#984-985)
GovTreasurer.poolInfo (contracts/Contract.sol#940) can be used in cross function reentrancies:
- GovTreasurer.add(uint256,IERC20,uint256,bool) (contracts/Contract.sol#963-976)
- GovTreasurer.checkPoolDuplicate(IERC20) (contracts/Contract.sol#955-963)
- GovTreasurer.deposit(uint256,uint256) (contracts/Contract.sol#1059-1089)
- GovTreasurer.emergencyWithdraw(uint256) (contracts/Contract.sol#1047-1059)
- GovTreasurer.massUpdatePools() (contracts/Contract.sol#1021-1029)
- GovTreasurer.pendingGDAO(uint256,address) (contracts/Contract.sol#1000-1019)
- GovTreasurer.poolInfo (contracts/Contract.sol#940)
- GovTreasurer.poolLength() (contracts/Contract.sol#953-954)
- GovTreasurer.set(uint256,uint256,bool) (contracts/Contract.sol#976-985)
- GovTreasurer.updatePool(uint256) (contracts/Contract.sol#1030-1040)
- GovTreasurer.withdraw(uint256,uint256) (contracts/Contract.sol#1089-1104)
- totalAllocPoint = totalAllocPoint.sub(poolInfo[_pid].allocPoint).add(_allocPoint) (contracts/Contract.sol#982-984)
GovTreasurer.totalAllocPoint (contracts/Contract.sol#942) can be used in cross function reentrancies:
- GovTreasurer.add(uint256,IERC20,uint256,bool) (contracts/Contract.sol#963-976)
- GovTreasurer.pendingGDAO(uint256,address) (contracts/Contract.sol#1000-1019)
- GovTreasurer.set(uint256,uint256,bool) (contracts/Contract.sol#976-985)
- GovTreasurer.totalAllocPoint (contracts/Contract.sol#942)
- GovTreasurer.updatePool(uint256) (contracts/Contract.sol#1030-1040)
Reentrancy in GovTreasurer.updatePool(uint256) (contracts/Contract.sol#1030-1040):
External calls:
- safeGDAOTransfer(address(this),GDAOReward) (contracts/Contract.sol#1037-1038)
- gdao.transfer(_to,GDAOBal) (contracts/Contract.sol#1109-1110)
- gdao.transfer(_to,_amount) (contracts/Contract.sol#1112-1113)
State variables written after the call(s):
- pool.accGDAOPerShare = pool.accGDAOPerShare.add(GDAOReward.mul(1e12).div(lpSupply)) (contracts/Contract.sol#1038-1040)
GovTreasurer.poolInfo (contracts/Contract.sol#940) can be used in cross function reentrancies:
- GovTreasurer.add(uint256,IERC20,uint256,bool) (contracts/Contract.sol#963-976)
- GovTreasurer.checkPoolDuplicate(IERC20) (contracts/Contract.sol#955-963)
- GovTreasurer.deposit(uint256,uint256) (contracts/Contract.sol#1059-1089)
- GovTreasurer.emergencyWithdraw(uint256) (contracts/Contract.sol#1047-1059)
- GovTreasurer.massUpdatePools() (contracts/Contract.sol#1021-1029)
- GovTreasurer.pendingGDAO(uint256,address) (contracts/Contract.sol#1000-1019)
- GovTreasurer.poolInfo (contracts/Contract.sol#940)
- GovTreasurer.poolLength() (contracts/Contract.sol#953-954)
- GovTreasurer.set(uint256,uint256,bool) (contracts/Contract.sol#976-985)
- GovTreasurer.updatePool(uint256) (contracts/Contract.sol#1030-1040)
- GovTreasurer.withdraw(uint256,uint256) (contracts/Contract.sol#1089-1104)
- pool.lastRewardBlock = block.number (contracts/Contract.sol#1040)
GovTreasurer.poolInfo (contracts/Contract.sol#940) can be used in cross function reentrancies:
- GovTreasurer.add(uint256,IERC20,uint256,bool) (contracts/Contract.sol#963-976)
- GovTreasurer.checkPoolDuplicate(IERC20) (contracts/Contract.sol#955-963)
- GovTreasurer.deposit(uint256,uint256) (contracts/Contract.sol#1059-1089)
- GovTreasurer.emergencyWithdraw(uint256) (contracts/Contract.sol#1047-1059)
- GovTreasurer.massUpdatePools() (contracts/Contract.sol#1021-1029)
- GovTreasurer.pendingGDAO(uint256,address) (contracts/Contract.sol#1000-1019)
- GovTreasurer.poolInfo (contracts/Contract.sol#940)
- GovTreasurer.poolLength() (contracts/Contract.sol#953-954)
- GovTreasurer.set(uint256,uint256,bool) (contracts/Contract.sol#976-985)
- GovTreasurer.updatePool(uint256) (contracts/Contract.sol#1030-1040)
- GovTreasurer.withdraw(uint256,uint256) (contracts/Contract.sol#1089-1104)
Reentrancy in GovTreasurer.withdraw(uint256,uint256) (contracts/Contract.sol#1089-1104):
External calls:
- updatePool(_pid) (contracts/Contract.sol#1095)
- gdao.transfer(_to,GDAOBal) (contracts/Contract.sol#1109-1110)
- gdao.transfer(_to,_amount) (contracts/Contract.sol#1112-1113)
- safeGDAOTransfer(msg.sender,pending) (contracts/Contract.sol#1097-1098)
- gdao.transfer(_to,GDAOBal) (contracts/Contract.sol#1109-1110)
- gdao.transfer(_to,_amount) (contracts/Contract.sol#1112-1113)
State variables written after the call(s):
- user.amount = user.amount.sub(_amount) (contracts/Contract.sol#1099-1102)
GovTreasurer.userInfo (contracts/Contract.sol#940-941) can be used in cross function reentrancies:
- GovTreasurer.deposit(uint256,uint256) (contracts/Contract.sol#1059-1089)
- GovTreasurer.emergencyWithdraw(uint256) (contracts/Contract.sol#1047-1059)
- GovTreasurer.pendingGDAO(uint256,address) (contracts/Contract.sol#1000-1019)
- GovTreasurer.userInfo (contracts/Contract.sol#940-941)
- GovTreasurer.withdraw(uint256,uint256) (contracts/Contract.sol#1089-1104)
Reentrancy in GovTreasurer.withdraw(uint256,uint256) (contracts/Contract.sol#1089-1104):
External calls:
- updatePool(_pid) (contracts/Contract.sol#1095)
- gdao.transfer(_to,GDAOBal) (contracts/Contract.sol#1109-1110)
- gdao.transfer(_to,_amount) (contracts/Contract.sol#1112-1113)
- safeGDAOTransfer(msg.sender,pending) (contracts/Contract.sol#1097-1098)
- gdao.transfer(_to,GDAOBal) (contracts/Contract.sol#1109-1110)
- gdao.transfer(_to,_amount) (contracts/Contract.sol#1112-1113)
- pool.token.safeTransfer(address(msg.sender),_amount) (contracts/Contract.sol#1102-1103)
State variables written after the call(s):
- user.rewardDebt = user.amount.mul(pool.accGDAOPerShare).div(1e12) (contracts/Contract.sol#1103-1104)
GovTreasurer.userInfo (contracts/Contract.sol#940-941) can be used in cross function reentrancies:
- GovTreasurer.deposit(uint256,uint256) (contracts/Contract.sol#1059-1089)
- GovTreasurer.emergencyWithdraw(uint256) (contracts/Contract.sol#1047-1059)
- GovTreasurer.pendingGDAO(uint256,address) (contracts/Contract.sol#1000-1019)
- GovTreasurer.userInfo (contracts/Contract.sol#940-941)
- GovTreasurer.withdraw(uint256,uint256) (contracts/Contract.sol#1089-1104)
Reference: https://github.com/crytic/slither/wiki/Detector-Documentation#reentrancy-vulnerabilities-1
GovTreasurer.add(uint256,IERC20,uint256,bool) (contracts/Contract.sol#963-976) should emit an event for:
- totalAllocPoint = totalAllocPoint.add(_allocPoint) (contracts/Contract.sol#967)
GovTreasurer.set(uint256,uint256,bool) (contracts/Contract.sol#976-985) should emit an event for:
- totalAllocPoint = totalAllocPoint.sub(poolInfo[_pid].allocPoint).add(_allocPoint) (contracts/Contract.sol#982-984)
Reference: https://github.com/crytic/slither/wiki/Detector-Documentation#missing-events-arithmetic
GovTreasurer.constructor(IERC20,address,uint256,uint256,uint256)._treasury (contracts/Contract.sol#947-949) lacks a zero-check on :
- treasury = _treasury (contracts/Contract.sol#952)
GovTreasurer.dev(address)._devaddr (contracts/Contract.sol#1114) lacks a zero-check on :
- devaddr = _devaddr (contracts/Contract.sol#1116)
Reference: https://github.com/crytic/slither/wiki/Detector-Documentation#missing-zero-address-validation
GovTreasurer.updatePool(uint256) (contracts/Contract.sol#1030-1040) has external calls inside a loop: lpSupply = pool.token.balanceOf(address(this)) (contracts/Contract.sol#1033-1034)
Calls stack containing the loop:
GovTreasurer.add(uint256,IERC20,uint256,bool)
GovTreasurer.massUpdatePools()
GovTreasurer.safeGDAOTransfer(address,uint256) (contracts/Contract.sol#1105-1113) has external calls inside a loop: GDAOBal = gdao.balanceOf(address(this)) (contracts/Contract.sol#1108)
Calls stack containing the loop:
GovTreasurer.add(uint256,IERC20,uint256,bool)
GovTreasurer.massUpdatePools()
GovTreasurer.updatePool(uint256)
GovTreasurer.safeGDAOTransfer(address,uint256) (contracts/Contract.sol#1105-1113) has external calls inside a loop: gdao.transfer(_to,GDAOBal) (contracts/Contract.sol#1109-1110)
Calls stack containing the loop:
GovTreasurer.add(uint256,IERC20,uint256,bool)
GovTreasurer.massUpdatePools()
GovTreasurer.updatePool(uint256)
GovTreasurer.safeGDAOTransfer(address,uint256) (contracts/Contract.sol#1105-1113) has external calls inside a loop: gdao.transfer(_to,_amount) (contracts/Contract.sol#1112-1113)
Calls stack containing the loop:
GovTreasurer.add(uint256,IERC20,uint256,bool)
GovTreasurer.massUpdatePools()
GovTreasurer.updatePool(uint256)
GovTreasurer.updatePool(uint256) (contracts/Contract.sol#1030-1040) has external calls inside a loop: lpSupply = pool.token.balanceOf(address(this)) (contracts/Contract.sol#1033-1034)
Calls stack containing the loop:
GovTreasurer.set(uint256,uint256,bool)
GovTreasurer.massUpdatePools()
GovTreasurer.safeGDAOTransfer(address,uint256) (contracts/Contract.sol#1105-1113) has external calls inside a loop: GDAOBal = gdao.balanceOf(address(this)) (contracts/Contract.sol#1108)
Calls stack containing the loop:
GovTreasurer.set(uint256,uint256,bool)
GovTreasurer.massUpdatePools()
GovTreasurer.updatePool(uint256)
GovTreasurer.safeGDAOTransfer(address,uint256) (contracts/Contract.sol#1105-1113) has external calls inside a loop: gdao.transfer(_to,GDAOBal) (contracts/Contract.sol#1109-1110)
Calls stack containing the loop:
GovTreasurer.set(uint256,uint256,bool)
GovTreasurer.massUpdatePools()
GovTreasurer.updatePool(uint256)
GovTreasurer.safeGDAOTransfer(address,uint256) (contracts/Contract.sol#1105-1113) has external calls inside a loop: gdao.transfer(_to,_amount) (contracts/Contract.sol#1112-1113)
Calls stack containing the loop:
GovTreasurer.set(uint256,uint256,bool)
GovTreasurer.massUpdatePools()
GovTreasurer.updatePool(uint256)
GovTreasurer.updatePool(uint256) (contracts/Contract.sol#1030-1040) has external calls inside a loop: lpSupply = pool.token.balanceOf(address(this)) (contracts/Contract.sol#1033-1034)
Calls stack containing the loop:
GovTreasurer.massUpdatePools()
GovTreasurer.safeGDAOTransfer(address,uint256) (contracts/Contract.sol#1105-1113) has external calls inside a loop: GDAOBal = gdao.balanceOf(address(this)) (contracts/Contract.sol#1108)
Calls stack containing the loop:
GovTreasurer.massUpdatePools()
GovTreasurer.updatePool(uint256)
GovTreasurer.safeGDAOTransfer(address,uint256) (contracts/Contract.sol#1105-1113) has external calls inside a loop: gdao.transfer(_to,GDAOBal) (contracts/Contract.sol#1109-1110)
Calls stack containing the loop:
GovTreasurer.massUpdatePools()
GovTreasurer.updatePool(uint256)
GovTreasurer.safeGDAOTransfer(address,uint256) (contracts/Contract.sol#1105-1113) has external calls inside a loop: gdao.transfer(_to,_amount) (contracts/Contract.sol#1112-1113)
Calls stack containing the loop:
GovTreasurer.massUpdatePools()
GovTreasurer.updatePool(uint256)
Reference: https://github.com/crytic/slither/wiki/Detector-Documentation/#calls-inside-a-loop
Reentrancy in GovTreasurer.deposit(uint256,uint256) (contracts/Contract.sol#1059-1089):
External calls:
- updatePool(_pid) (contracts/Contract.sol#1063)
- gdao.transfer(_to,GDAOBal) (contracts/Contract.sol#1109-1110)
- gdao.transfer(_to,_amount) (contracts/Contract.sol#1112-1113)
- safeGDAOTransfer(msg.sender,pending) (contracts/Contract.sol#1071)
- gdao.transfer(_to,GDAOBal) (contracts/Contract.sol#1109-1110)
- gdao.transfer(_to,_amount) (contracts/Contract.sol#1112-1113)
- pool.token.safeTransferFrom(address(msg.sender),address(this),_amount.sub(taxedAmount)) (contracts/Contract.sol#1075-1077)
- pool.token.safeTransferFrom(address(msg.sender),address(treasury),taxedAmount) (contracts/Contract.sol#1077-1079)
Event emitted after the call(s):
- Deposit(msg.sender,_pid,_amount.sub(taxedAmount)) (contracts/Contract.sol#1085-1089)
Reentrancy in GovTreasurer.emergencyWithdraw(uint256) (contracts/Contract.sol#1047-1059):
External calls:
- pool.token.safeTransfer(address(msg.sender),user.amount) (contracts/Contract.sol#1054-1057)
Event emitted after the call(s):
- EmergencyWithdraw(msg.sender,_pid,user.amount) (contracts/Contract.sol#1057-1058)
Reentrancy in GovTreasurer.withdraw(uint256,uint256) (contracts/Contract.sol#1089-1104):
External calls:
- updatePool(_pid) (contracts/Contract.sol#1095)
- gdao.transfer(_to,GDAOBal) (contracts/Contract.sol#1109-1110)
- gdao.transfer(_to,_amount) (contracts/Contract.sol#1112-1113)
- safeGDAOTransfer(msg.sender,pending) (contracts/Contract.sol#1097-1098)
- gdao.transfer(_to,GDAOBal) (contracts/Contract.sol#1109-1110)
- gdao.transfer(_to,_amount) (contracts/Contract.sol#1112-1113)
- pool.token.safeTransfer(address(msg.sender),_amount) (contracts/Contract.sol#1102-1103)
Event emitted after the call(s):
- Withdraw(msg.sender,_pid,_amount) (contracts/Contract.sol#1104)
Reference: https://github.com/crytic/slither/wiki/Detector-Documentation#reentrancy-vulnerabilities-3
Address.isContract(address) (contracts/Contract.sol#317-327) uses assembly
- INLINE ASM (contracts/Contract.sol#326)
Address._verifyCallResult(bool,bytes,string) (contracts/Contract.sol#437-452) uses assembly
- INLINE ASM (contracts/Contract.sol#447-450)
Reference: https://github.com/crytic/slither/wiki/Detector-Documentation#assembly-usage
Context._msgData() (contracts/Contract.sol#824-833) is never used and should be removed
Reference: https://github.com/crytic/slither/wiki/Detector-Documentation#dead-code
Version constraint 0.6.12 contains known severe issues (https://solidity.readthedocs.io/en/latest/bugs.html)
- FullInlinerNonExpressionSplitArgumentEvaluationOrder
- MissingSideEffectsOnSelectorAccess
- AbiReencodingHeadOverflowWithStaticArrayCleanup
- DirtyBytesArrayToStorage
- DataLocationChangeInInternalOverride
- NestedCalldataArrayAbiReencodingSizeValidation
- SignedImmutables
- ABIDecodeTwoDimensionalArrayMemory
- KeccakCaching
- EmptyByteArrayCopy
- DynamicArrayCleanup.
It is used by:
- 0.6.12 (contracts/Contract.sol#65)
solc-0.6.12 is an outdated solc version. Use a more recent version (at least 0.8.0), if possible.
Reference: https://github.com/crytic/slither/wiki/Detector-Documentation#incorrect-versions-of-solidity
Low level call in Address.sendValue(address,uint256) (contracts/Contract.sol#348-353):
- (success,None) = recipient.call{value: amount}() (contracts/Contract.sol#351)
Low level call in Address.functionCallWithValue(address,bytes,uint256,string) (contracts/Contract.sol#404-414):
- (success,returndata) = target.call{value: value}(data) (contracts/Contract.sol#412-414)
Low level call in Address.functionStaticCall(address,bytes,string) (contracts/Contract.sol#426-437):
- (success,returndata) = target.staticcall(data) (contracts/Contract.sol#434)
Reference: https://github.com/crytic/slither/wiki/Detector-Documentation#low-level-calls
Parameter GovTreasurer.checkPoolDuplicate(IERC20)._token (contracts/Contract.sol#955) is not in mixedCase
Parameter GovTreasurer.add(uint256,IERC20,uint256,bool)._allocPoint (contracts/Contract.sol#963) is not in mixedCase
Parameter GovTreasurer.add(uint256,IERC20,uint256,bool)._token (contracts/Contract.sol#963-964) is not in mixedCase
Parameter GovTreasurer.add(uint256,IERC20,uint256,bool)._taxRate (contracts/Contract.sol#964) is not in mixedCase
Parameter GovTreasurer.add(uint256,IERC20,uint256,bool)._withUpdate (contracts/Contract.sol#964) is not in mixedCase
Parameter GovTreasurer.set(uint256,uint256,bool)._pid (contracts/Contract.sol#977) is not in mixedCase
Parameter GovTreasurer.set(uint256,uint256,bool)._allocPoint (contracts/Contract.sol#977-978) is not in mixedCase
Parameter GovTreasurer.set(uint256,uint256,bool)._withUpdate (contracts/Contract.sol#978-981) is not in mixedCase
Parameter GovTreasurer.getMultiplier(uint256,uint256)._from (contracts/Contract.sol#990) is not in mixedCase
Parameter GovTreasurer.getMultiplier(uint256,uint256)._to (contracts/Contract.sol#990) is not in mixedCase
Parameter GovTreasurer.pendingGDAO(uint256,address)._pid (contracts/Contract.sol#1001) is not in mixedCase
Parameter GovTreasurer.pendingGDAO(uint256,address)._user (contracts/Contract.sol#1001) is not in mixedCase
Parameter GovTreasurer.updatePool(uint256)._pid (contracts/Contract.sol#1030) is not in mixedCase
Parameter GovTreasurer.emergencyWithdraw(uint256)._pid (contracts/Contract.sol#1047-1048) is not in mixedCase
Parameter GovTreasurer.deposit(uint256,uint256)._pid (contracts/Contract.sol#1060-1061) is not in mixedCase
Parameter GovTreasurer.deposit(uint256,uint256)._amount (contracts/Contract.sol#1061-1062) is not in mixedCase
Parameter GovTreasurer.withdraw(uint256,uint256)._pid (contracts/Contract.sol#1090) is not in mixedCase
Parameter GovTreasurer.withdraw(uint256,uint256)._amount (contracts/Contract.sol#1090) is not in mixedCase
Parameter GovTreasurer.safeGDAOTransfer(address,uint256)._to (contracts/Contract.sol#1106-1107) is not in mixedCase
Parameter GovTreasurer.safeGDAOTransfer(address,uint256)._amount (contracts/Contract.sol#1107-1108) is not in mixedCase
Parameter GovTreasurer.dev(address)._devaddr (contracts/Contract.sol#1114) is not in mixedCase
Variable GovTreasurer.GDAOPerBlock (contracts/Contract.sol#907-908) is not in mixedCase
Reference: https://github.com/crytic/slither/wiki/Detector-Documentation#conformance-to-solidity-naming-conventions
Redundant expression "this (contracts/Contract.sol#826)" inContext (contracts/Contract.sol#819-833)
Reference: https://github.com/crytic/slither/wiki/Detector-Documentation#redundant-statements
GovTreasurer.GDAOPerBlock (contracts/Contract.sol#907-908) should be immutable
GovTreasurer.bonusEndBlock (contracts/Contract.sol#904-907) should be immutable
GovTreasurer.gdao (contracts/Contract.sol#903-904) should be immutable
GovTreasurer.startBlock (contracts/Contract.sol#942-943) should be immutable
GovTreasurer.treasury (contracts/Contract.sol#903) should be immutable
Reference: https://github.com/crytic/slither/wiki/Detector-Documentation#state-variables-that-could-be-declared-immutable
. analyzed (8 contracts with 100 detectors), 66 result(s) found
{
"solc": {
"status": "ok",
"use_rc": 0,
"version": "0.6.12",
"strategy": "solc-select",
"solc_path": "/var/www/tripwire/.venv/bin/solc",
"install_rc": 0,
"use_stderr": null,
"use_stdout": "Switched global version to 0.6.12",
"install_stderr": null,
"install_stdout": "Version '0.6.12' is already installed, skipping..."
},
"solc_args": "--base-path /tmp/slither-n6e8sup9 --allow-paths /tmp/slither-n6e8sup9,/tmp/slither-n6e8sup9/lib,/tmp/slither-n6e8sup9/src",
"remappings": [],
"source_files": [
"contracts/Contract.sol"
],
"contract_count": 0,
"contract_names": [],
"detector_count": 66,
"workspace_hash": "ad7c364af4758fb0f74f12f8ed128e8ad535a1fd38cb8ebcfa0441c90c78ef57",
"duration_seconds": 0.8638007640838623,
"solc_version_requested": "0.6.12"
}
{"no_findings":false,"summary":"Found 1 medium reentrancy risk in reward payout ordering and 2 low issues (emergencyWithdraw transfers zero, unchecked ERC20 transfer return).","findings":[{"severity":"medium","category":"reentrancy","title":"Reward payout can be reentered before accounting updates","exploit_scenario":"If the reward token is ERC777 or otherwise triggers a callback on the recipient, a malicious user contract can reenter `deposit(0)`/`withdraw(0)` during `safeGDAOTransfer` and repeatedly claim the same pending rewards because `rewardDebt` is updated after the external call.","recommendation":"Update `user.rewardDebt` (and any other accounting) before transferring rewards and/or add a `nonReentrant` guard around `deposit` and `withdraw`.","evidence":"`safeGDAOTransfer(msg.sender, pending)` occurs before `user.rewardDebt` is updated in both `deposit` and `withdraw`.","locations":["contracts/Contract.sol:1095","contracts/Contract.sol:1098","contracts/Contract.sol:1108","contracts/Contract.sol:1118","contracts/Contract.sol:1121","contracts/Contract.sol:1129"]},{"severity":"low","category":"other","title":"Emergency withdraw always transfers zero tokens","exploit_scenario":"A user who calls `emergencyWithdraw` loses access to their deposit because the function zeroes `user.amount` before transferring, so it always sends 0 tokens.","recommendation":"Cache the user’s amount in a local variable, transfer that amount, then zero out `user.amount`/`user.rewardDebt` and emit the event with the cached amount.","evidence":"`user.amount` is set to 0 before `pool.token.safeTransfer(address(msg.sender), user.amount)`.","locations":["contracts/Contract.sol:1080","contracts/Contract.sol:1083"]},{"severity":"low","category":"other","title":"Reward transfers ignore ERC20 return values","exploit_scenario":"If `gdao.transfer` returns `false` instead of reverting, reward transfers can silently fail while accounting still advances, causing users to miss rewards and creating inconsistent state.","recommendation":"Use `SafeERC20.safeTransfer` for GDAO transfers or explicitly check the return value.","evidence":"`safeGDAOTransfer` calls `gdao.transfer` without checking the returned boolean.","locations":["contracts/Contract.sol:1134","contracts/Contract.sol:1137","contracts/Contract.sol:1139"]}]}
OpenAI Codex v0.77.0 (research preview)
--------
workdir: /tmp/codex-i0dtssbv
model: gpt-5.2-codex
provider: openai
approval: never
sandbox: read-only
reasoning effort: high
reasoning summaries: auto
session id: 019bab3e-9c5a-75e0-9565-a437d58b8262
--------
user
You are a security auditor. Audit this Solidity codebase for exploitable vulnerabilities.
Focus on: reentrancy, access control, upgradeability/proxy issues, signature validation, oracle manipulation,
accounting/invariant breaks, external call patterns, unchecked return values, and dangerous delegatecall.
Scope rules:
- You MUST fully read `AUDIT_BUNDLE.txt` before concluding. It contains the complete contents of all first-party Solidity sources in this workspace.
- Treat `lib/` and `@openzeppelin/` as third-party dependencies; skip them unless there is a concrete misuse angle in first-party code.
- If there are only dependency files and no first-party sources, set no_findings=true and explain in summary.
Output MUST be valid JSON matching the provided schema.
- If you find nothing meaningful: set no_findings=true and findings=[].
- Otherwise: set no_findings=false and include findings with severity/category/title and file/line locations when possible.
Output constraints (IMPORTANT):
- severity MUST be exactly one of: info, low, medium, high, critical (lowercase).
- category MUST be exactly one of: access_control, reentrancy, math, oracle, upgradeability, auth, other.
Keep summary short and concrete.
mcp startup: no servers
thinking
**Preparing to read AUDIT_BUNDLE.txt**
exec
/bin/bash -lc ls in /tmp/codex-i0dtssbv succeeded in 11ms:
AUDIT_BUNDLE.txt
codex-output-schema.json
contracts
exec
/bin/bash -lc 'cat AUDIT_BUNDLE.txt' in /tmp/codex-i0dtssbv succeeded in 26ms:
This file concatenates the full contents of first-party Solidity sources for auditing.
Do not treat dependency code under lib/ or @openzeppelin/ as first-party.
================================================================================
FILE: contracts/Contract.sol
================================================================================
////////////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////.////////////////////////////////.////////////////////////////////////
///////////////////////////////////.@.//////////////////////////////////.@./////////////////////////////////
////////////////////////////////.@@.//////////////////////////////////////.@@.//////////////////////////////
/////////////////////////////..@@@.////////////////////////////////////////.@@@..///////////////////////////
///////////////////////////.@@@@@.//////////////////////////////////////////.@@@@@./////////////////////////
/////////////////////////.@@@@@@@////////////////////////////////////////////@@@@@@@.///////////////////////
////////////////////////.@@@@@@@.////////////////////////////////////////////.@@@@@@@.//////////////////////
//////////////////..///.@@@@@@@@//////////////////////////////////////////////@@@@@@@@.///..////////////////
////////////////.@@.//.@@@@@@@@@//////////////////////////////////////////////@@@@@@@@@.//.@@.//////////////
///////////////@@@@.//@@@@@@@@@.//////////////////////////////////////////////.@@@@@@@@@//@@@@@/////////////
//////////////@@@@@@//@@@@@@@@@.//////////////////////////////////////////////.@@@@@@@@@//@@@@@@////////////
thinking
**Identifying contract vulnerabilities and logic bugs**
exec
/bin/bash -lc 'rg -n "contract GovTreasurer|function emergencyWithdraw|function deposit|function withdraw|safeGDAOTransfer" contracts/Contract.sol' in /tmp/codex-i0dtssbv succeeded in 41ms:
923:contract GovTreasurer is Ownable {
1064: safeGDAOTransfer(address(this), GDAOReward);
1076: function emergencyWithdraw(uint256 _pid) public {
1089: function deposit(uint256 _pid, uint256 _amount) public {
1098: safeGDAOTransfer(msg.sender, pending);
1113: function withdraw(uint256 _pid, uint256 _amount) public {
1121: safeGDAOTransfer(msg.sender, pending);
1134: function safeGDAOTransfer(address _to, uint256 _amount) internal {
thinking
**Preparing line numbering approach**
exec
/bin/bash -lc "nl -ba contracts/Contract.sol | sed -n '1048,1148p'" in /tmp/codex-i0dtssbv succeeded in 7ms:
1048 }
1049 }
1050
1051 // UPDATE | (ONE POOL) REWARD VARIABLES
1052 function updatePool(uint256 _pid) public {
1053 PoolInfo storage pool = poolInfo[_pid];
1054 if (block.number <= pool.lastRewardBlock) {
1055 return;
1056 }
1057 uint256 lpSupply = pool.token.balanceOf(address(this));
1058 if (lpSupply == 0) {
1059 pool.lastRewardBlock = block.number;
1060 return;
1061 }
1062 uint256 multiplier = getMultiplier(pool.lastRewardBlock, block.number);
1063 uint256 GDAOReward = multiplier.mul(GDAOPerBlock).mul(pool.allocPoint).div(totalAllocPoint);
1064 safeGDAOTransfer(address(this), GDAOReward);
1065 pool.accGDAOPerShare = pool.accGDAOPerShare.add(GDAOReward.mul(1e12).div(lpSupply));
1066 pool.lastRewardBlock = block.number;
1067 }
thinking
**Summarizing major vulnerability findings**
I'll organize the key issues by severity, highlighting medium-impact reentrancy risks in deposit/withdraw due to reward transfers before updating state, the emergencyWithdraw bug causing lost user funds, and low-severity unchecked return values in safeGDAOTransfer. I’ll explain the scenarios, root causes, and provide line references to make the findings clear and actionable.
thinking
**Preparing structured JSON report**
I'll create a precise JSON summary of the three main findings—medium reentrancy risk, low emergencyWithdraw bug, and low unchecked ERC20 return—detailing titles, scenarios, recommendations, evidence, and exact code locations to present a clear, actionable audit report.
codex
{"no_findings":false,"summary":"Found 1 medium reentrancy risk in reward payout ordering and 2 low issues (emergencyWithdraw transfers zero, unchecked ERC20 transfer return).","findings":[{"severity":"medium","category":"reentrancy","title":"Reward payout can be reentered before accounting updates","exploit_scenario":"If the reward token is ERC777 or otherwise triggers a callback on the recipient, a malicious user contract can reenter `deposit(0)`/`withdraw(0)` during `safeGDAOTransfer` and repeatedly claim the same pending rewards because `rewardDebt` is updated after the external call.","recommendation":"Update `user.rewardDebt` (and any other accounting) before transferring rewards and/or add a `nonReentrant` guard around `deposit` and `withdraw`.","evidence":"`safeGDAOTransfer(msg.sender, pending)` occurs before `user.rewardDebt` is updated in both `deposit` and `withdraw`.","locations":["contracts/Contract.sol:1095","contracts/Contract.sol:1098","contracts/Contract.sol:1108","contracts/Contract.sol:1118","contracts/Contract.sol:1121","contracts/Contract.sol:1129"]},{"severity":"low","category":"other","title":"Emergency withdraw always transfers zero tokens","exploit_scenario":"A user who calls `emergencyWithdraw` loses access to their deposit because the function zeroes `user.amount` before transferring, so it always sends 0 tokens.","recommendation":"Cache the user’s amount in a local variable, transfer that amount, then zero out `user.amount`/`user.rewardDebt` and emit the event with the cached amount.","evidence":"`user.amount` is set to 0 before `pool.token.safeTransfer(address(msg.sender), user.amount)`.","locations":["contracts/Contract.sol:1080","contracts/Contract.sol:1083"]},{"severity":"low","category":"other","title":"Reward transfers ignore ERC20 return values","exploit_scenario":"If `gdao.transfer` returns `false` instead of reverting, reward transfers can silently fail while accounting still advances, causing users to miss rewards and creating inconsistent state.","recommendation":"Use `SafeERC20.safeTransfer` for GDAO transfers or explicitly check the return value.","evidence":"`safeGDAOTransfer` calls `gdao.transfer` without checking the returned boolean.","locations":["contracts/Contract.sol:1134","contracts/Contract.sol:1137","contracts/Contract.sol:1139"]}]}
tokens used
28,371
{
"codex": {
"ran_at": "2026-01-11T04:12:05.267178+00:00",
"returncode": 0
},
"project": {
"mode": "source",
"file_count": 1,
"import_count": 0,
"first_party_contracts_count": 1
},
"summary": "Found 1 medium reentrancy risk in reward payout ordering and 2 low issues (emergencyWithdraw transfers zero, unchecked ERC20 transfer return).",
"raw_final": {
"summary": "Found 1 medium reentrancy risk in reward payout ordering and 2 low issues (emergencyWithdraw transfers zero, unchecked ERC20 transfer return).",
"findings": [
{
"title": "Reward payout can be reentered before accounting updates",
"category": "reentrancy",
"evidence": "`safeGDAOTransfer(msg.sender, pending)` occurs before `user.rewardDebt` is updated in both `deposit` and `withdraw`.",
"severity": "medium",
"locations": [
"contracts/Contract.sol:1095",
"contracts/Contract.sol:1098",
"contracts/Contract.sol:1108",
"contracts/Contract.sol:1118",
"contracts/Contract.sol:1121",
"contracts/Contract.sol:1129"
],
"recommendation": "Update `user.rewardDebt` (and any other accounting) before transferring rewards and/or add a `nonReentrant` guard around `deposit` and `withdraw`.",
"exploit_scenario": "If the reward token is ERC777 or otherwise triggers a callback on the recipient, a malicious user contract can reenter `deposit(0)`/`withdraw(0)` during `safeGDAOTransfer` and repeatedly claim the same pending rewards because `rewardDebt` is updated after the external call."
},
{
"title": "Emergency withdraw always transfers zero tokens",
"category": "other",
"evidence": "`user.amount` is set to 0 before `pool.token.safeTransfer(address(msg.sender), user.amount)`.",
"severity": "low",
"locations": [
"contracts/Contract.sol:1080",
"contracts/Contract.sol:1083"
],
"recommendation": "Cache the user\u2019s amount in a local variable, transfer that amount, then zero out `user.amount`/`user.rewardDebt` and emit the event with the cached amount.",
"exploit_scenario": "A user who calls `emergencyWithdraw` loses access to their deposit because the function zeroes `user.amount` before transferring, so it always sends 0 tokens."
},
{
"title": "Reward transfers ignore ERC20 return values",
"category": "other",
"evidence": "`safeGDAOTransfer` calls `gdao.transfer` without checking the returned boolean.",
"severity": "low",
"locations": [
"contracts/Contract.sol:1134",
"contracts/Contract.sol:1137",
"contracts/Contract.sol:1139"
],
"recommendation": "Use `SafeERC20.safeTransfer` for GDAO transfers or explicitly check the return value.",
"exploit_scenario": "If `gdao.transfer` returns `false` instead of reverting, reward transfers can silently fail while accounting still advances, causing users to miss rewards and creating inconsistent state."
}
],
"no_findings": false
},
"no_findings": false,
"schema_version": 1
}
00000000: PUSH1 0x80 00000002: PUSH1 0x40 00000004: MSTORE 00000005: CALLVALUE 00000006: DUP1 00000007: ISZERO 00000008: PUSH2 0x0010 0000000b: JUMPI 0000000c: PUSH1 0x00 0000000e: DUP1 0000000f: REVERT 00000010: JUMPDEST 00000011: POP 00000012: PUSH1 0x04 00000014: CALLDATASIZE 00000015: LT 00000016: PUSH2 0x014d 00000019: JUMPI 0000001a: PUSH1 0x00 0000001c: CALLDATALOAD 0000001d: PUSH1 0xe0 0000001f: SHR 00000020: DUP1 00000021: PUSH4 0x630b5ba1 00000026: GT 00000027: PUSH2 0x00c3 0000002a: JUMPI 0000002b: DUP1 0000002c: PUSH4 0x8dbb1e3a 00000031: GT 00000032: PUSH2 0x007c 00000035: JUMPI 00000036: DUP1 00000037: PUSH4 0x8dbb1e3a 0000003c: EQ 0000003d: PUSH2 0x049a 00000040: JUMPI 00000041: DUP1 00000042: PUSH4 0x93f1a40b 00000047: EQ 00000048: PUSH2 0x04e6 0000004b: JUMPI 0000004c: DUP1 0000004d: PUSH4 0x988d7a60 00000052: EQ 00000053: PUSH2 0x054f 00000056: JUMPI 00000057: DUP1 00000058: PUSH4 0xa29a0d90 0000005d: EQ 0000005e: PUSH2 0x05b3 00000061: JUMPI 00000062: DUP1 00000063: PUSH4 0xe2bbb158 00000068: EQ 00000069: PUSH2 0x05e7 0000006c: JUMPI 0000006d: DUP1 0000006e: PUSH4 0xf2fde38b 00000073: EQ 00000074: PUSH2 0x061f 00000077: JUMPI 00000078: PUSH2 0x014d 0000007b: JUMP 0000007c: JUMPDEST 0000007d: DUP1 0000007e: PUSH4 0x630b5ba1 00000083: EQ 00000084: PUSH2 0x03ac 00000087: JUMPI 00000088: DUP1 00000089: PUSH4 0x64482f79 0000008e: EQ 0000008f: PUSH2 0x03b6 00000092: JUMPI 00000093: DUP1 00000094: PUSH4 0x715018a6 00000099: EQ 0000009a: PUSH2 0x03fa 0000009d: JUMPI 0000009e: DUP1 0000009f: PUSH4 0x86059a8d 000000a4: EQ 000000a5: PUSH2 0x0404 000000a8: JUMPI 000000a9: DUP1 000000aa: PUSH4 0x8d88a90e 000000af: EQ 000000b0: PUSH2 0x0422 000000b3: JUMPI 000000b4: DUP1 000000b5: PUSH4 0x8da5cb5b 000000ba: EQ 000000bb: PUSH2 0x0466 000000be: JUMPI 000000bf: PUSH2 0x014d 000000c2: JUMP 000000c3: JUMPDEST 000000c4: DUP1 000000c5: PUSH4 0x40c5547d 000000ca: GT 000000cb: PUSH2 0x0115 000000ce: JUMPI 000000cf: DUP1 000000d0: PUSH4 0x40c5547d 000000d5: EQ 000000d6: PUSH2 0x0264 000000d9: JUMPI 000000da: DUP1 000000db: PUSH4 0x441a3e70 000000e0: EQ 000000e1: PUSH2 0x02c6 000000e4: JUMPI 000000e5: DUP1 000000e6: PUSH4 0x48cd4cb1 000000eb: EQ 000000ec: PUSH2 0x02fe 000000ef: JUMPI 000000f0: DUP1 000000f1: PUSH4 0x51eb05a6 000000f6: EQ 000000f7: PUSH2 0x031c 000000fa: JUMPI 000000fb: DUP1 000000fc: PUSH4 0x5312ea8e 00000101: EQ 00000102: PUSH2 0x034a 00000105: JUMPI 00000106: DUP1 00000107: PUSH4 0x61d027b3 0000010c: EQ 0000010d: PUSH2 0x0378 00000110: JUMPI 00000111: PUSH2 0x014d 00000114: JUMP 00000115: JUMPDEST 00000116: DUP1 00000117: PUSH4 0x081e3eda 0000011c: EQ 0000011d: PUSH2 0x0152 00000120: JUMPI 00000121: DUP1 00000122: PUSH4 0x1526fe27 00000127: EQ 00000128: PUSH2 0x0170 0000012b: JUMPI 0000012c: DUP1 0000012d: PUSH4 0x17caf6f1 00000132: EQ 00000133: PUSH2 0x01e4 00000136: JUMPI 00000137: DUP1 00000138: PUSH4 0x1aed6553 0000013d: EQ 0000013e: PUSH2 0x0202 00000141: JUMPI 00000142: DUP1 00000143: PUSH4 0x322d0d4a 00000148: EQ 00000149: PUSH2 0x0220 0000014c: JUMPI 0000014d: JUMPDEST 0000014e: PUSH1 0x00 00000150: DUP1 00000151: REVERT 00000152: JUMPDEST 00000153: PUSH2 0x015a 00000156: PUSH2 0x0663 00000159: JUMP 0000015a: JUMPDEST 0000015b: PUSH1 0x40 0000015d: MLOAD 0000015e: DUP1 0000015f: DUP3 00000160: DUP2 00000161: MSTORE 00000162: PUSH1 0x20 00000164: ADD 00000165: SWAP2 00000166: POP 00000167: POP 00000168: PUSH1 0x40 0000016a: MLOAD 0000016b: DUP1 0000016c: SWAP2 0000016d: SUB 0000016e: SWAP1 0000016f: RETURN 00000170: JUMPDEST 00000171: PUSH2 0x019c 00000174: PUSH1 0x04 00000176: DUP1 00000177: CALLDATASIZE 00000178: SUB 00000179: PUSH1 0x20 0000017b: DUP2 0000017c: LT 0000017d: ISZERO 0000017e: PUSH2 0x0186 00000181: JUMPI 00000182: PUSH1 0x00 00000184: DUP1 00000185: REVERT 00000186: JUMPDEST 00000187: DUP2 00000188: ADD 00000189: SWAP1 0000018a: DUP1 0000018b: DUP1 0000018c: CALLDATALOAD 0000018d: SWAP1 0000018e: PUSH1 0x20 00000190: ADD 00000191: SWAP1 00000192: SWAP3 00000193: SWAP2 00000194: SWAP1 00000195: POP 00000196: POP 00000197: POP 00000198: PUSH2 0x0670 0000019b: JUMP 0000019c: JUMPDEST 0000019d: PUSH1 0x40 0000019f: MLOAD 000001a0: DUP1 000001a1: DUP7 000001a2: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000001b7: AND 000001b8: DUP2 000001b9: MSTORE 000001ba: PUSH1 0x20 000001bc: ADD 000001bd: DUP6 000001be: DUP2 000001bf: MSTORE 000001c0: PUSH1 0x20 000001c2: ADD 000001c3: DUP5 000001c4: DUP2 000001c5: MSTORE 000001c6: PUSH1 0x20 000001c8: ADD 000001c9: DUP4 000001ca: DUP2 000001cb: MSTORE 000001cc: PUSH1 0x20 000001ce: ADD 000001cf: DUP3 000001d0: DUP2 000001d1: MSTORE 000001d2: PUSH1 0x20 000001d4: ADD 000001d5: SWAP6 000001d6: POP 000001d7: POP 000001d8: POP 000001d9: POP 000001da: POP 000001db: POP 000001dc: PUSH1 0x40 000001de: MLOAD 000001df: DUP1 000001e0: SWAP2 000001e1: SUB 000001e2: SWAP1 000001e3: RETURN 000001e4: JUMPDEST 000001e5: PUSH2 0x01ec 000001e8: PUSH2 0x06d3 000001eb: JUMP 000001ec: JUMPDEST 000001ed: PUSH1 0x40 000001ef: MLOAD 000001f0: DUP1 000001f1: DUP3 000001f2: DUP2 000001f3: MSTORE 000001f4: PUSH1 0x20 000001f6: ADD 000001f7: SWAP2 000001f8: POP 000001f9: POP 000001fa: PUSH1 0x40 000001fc: MLOAD 000001fd: DUP1 000001fe: SWAP2 000001ff: SUB 00000200: SWAP1 00000201: RETURN 00000202: JUMPDEST 00000203: PUSH2 0x020a 00000206: PUSH2 0x06d9 00000209: JUMP 0000020a: JUMPDEST 0000020b: PUSH1 0x40 0000020d: MLOAD 0000020e: DUP1 0000020f: DUP3 00000210: DUP2 00000211: MSTORE 00000212: PUSH1 0x20 00000214: ADD 00000215: SWAP2 00000216: POP 00000217: POP 00000218: PUSH1 0x40 0000021a: MLOAD 0000021b: DUP1 0000021c: SWAP2 0000021d: SUB 0000021e: SWAP1 0000021f: RETURN 00000220: JUMPDEST 00000221: PUSH2 0x0262 00000224: PUSH1 0x04 00000226: DUP1 00000227: CALLDATASIZE 00000228: SUB 00000229: PUSH1 0x20 0000022b: DUP2 0000022c: LT 0000022d: ISZERO 0000022e: PUSH2 0x0236 00000231: JUMPI 00000232: PUSH1 0x00 00000234: DUP1 00000235: REVERT 00000236: JUMPDEST 00000237: DUP2 00000238: ADD 00000239: SWAP1 0000023a: DUP1 0000023b: DUP1 0000023c: CALLDATALOAD 0000023d: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000252: AND 00000253: SWAP1 00000254: PUSH1 0x20 00000256: ADD 00000257: SWAP1 00000258: SWAP3 00000259: SWAP2 0000025a: SWAP1 0000025b: POP 0000025c: POP 0000025d: POP 0000025e: PUSH2 0x06df 00000261: JUMP 00000262: JUMPDEST 00000263: STOP 00000264: JUMPDEST 00000265: PUSH2 0x02b0 00000268: PUSH1 0x04 0000026a: DUP1 0000026b: CALLDATASIZE 0000026c: SUB 0000026d: PUSH1 0x40 0000026f: DUP2 00000270: LT 00000271: ISZERO 00000272: PUSH2 0x027a 00000275: JUMPI 00000276: PUSH1 0x00 00000278: DUP1 00000279: REVERT 0000027a: JUMPDEST 0000027b: DUP2 0000027c: ADD 0000027d: SWAP1 0000027e: DUP1 0000027f: DUP1 00000280: CALLDATALOAD 00000281: SWAP1 00000282: PUSH1 0x20 00000284: ADD 00000285: SWAP1 00000286: SWAP3 00000287: SWAP2 00000288: SWAP1 00000289: DUP1 0000028a: CALLDATALOAD 0000028b: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000002a0: AND 000002a1: SWAP1 000002a2: PUSH1 0x20 000002a4: ADD 000002a5: SWAP1 000002a6: SWAP3 000002a7: SWAP2 000002a8: SWAP1 000002a9: POP 000002aa: POP 000002ab: POP 000002ac: PUSH2 0x07e4 000002af: JUMP 000002b0: JUMPDEST 000002b1: PUSH1 0x40 000002b3: MLOAD 000002b4: DUP1 000002b5: DUP3 000002b6: DUP2 000002b7: MSTORE 000002b8: PUSH1 0x20 000002ba: ADD 000002bb: SWAP2 000002bc: POP 000002bd: POP 000002be: PUSH1 0x40 000002c0: MLOAD 000002c1: DUP1 000002c2: SWAP2 000002c3: SUB 000002c4: SWAP1 000002c5: RETURN 000002c6: JUMPDEST 000002c7: PUSH2 0x02fc 000002ca: PUSH1 0x04 000002cc: DUP1 000002cd: CALLDATASIZE 000002ce: SUB 000002cf: PUSH1 0x40 000002d1: DUP2 000002d2: LT 000002d3: ISZERO 000002d4: PUSH2 0x02dc 000002d7: JUMPI 000002d8: PUSH1 0x00 000002da: DUP1 000002db: REVERT 000002dc: JUMPDEST 000002dd: DUP2 000002de: ADD 000002df: SWAP1 000002e0: DUP1 000002e1: DUP1 000002e2: CALLDATALOAD 000002e3: SWAP1 000002e4: PUSH1 0x20 000002e6: ADD 000002e7: SWAP1 000002e8: SWAP3 000002e9: SWAP2 000002ea: SWAP1 000002eb: DUP1 000002ec: CALLDATALOAD 000002ed: SWAP1 000002ee: PUSH1 0x20 000002f0: ADD 000002f1: SWAP1 000002f2: SWAP3 000002f3: SWAP2 000002f4: SWAP1 000002f5: POP 000002f6: POP 000002f7: POP 000002f8: PUSH2 0x0a2a 000002fb: JUMP 000002fc: JUMPDEST 000002fd: STOP 000002fe: JUMPDEST 000002ff: PUSH2 0x0306 00000302: PUSH2 0x0c88 00000305: JUMP 00000306: JUMPDEST 00000307: PUSH1 0x40 00000309: MLOAD 0000030a: DUP1 0000030b: DUP3 0000030c: DUP2 0000030d: MSTORE 0000030e: PUSH1 0x20 00000310: ADD 00000311: SWAP2 00000312: POP 00000313: POP 00000314: PUSH1 0x40 00000316: MLOAD 00000317: DUP1 00000318: SWAP2 00000319: SUB 0000031a: SWAP1 0000031b: RETURN 0000031c: JUMPDEST 0000031d: PUSH2 0x0348 00000320: PUSH1 0x04 00000322: DUP1 00000323: CALLDATASIZE 00000324: SUB 00000325: PUSH1 0x20 00000327: DUP2 00000328: LT 00000329: ISZERO 0000032a: PUSH2 0x0332 0000032d: JUMPI 0000032e: PUSH1 0x00 00000330: DUP1 00000331: REVERT 00000332: JUMPDEST 00000333: DUP2 00000334: ADD 00000335: SWAP1 00000336: DUP1 00000337: DUP1 00000338: CALLDATALOAD 00000339: SWAP1 0000033a: PUSH1 0x20 0000033c: ADD 0000033d: SWAP1 0000033e: SWAP3 0000033f: SWAP2 00000340: SWAP1 00000341: POP 00000342: POP 00000343: POP 00000344: PUSH2 0x0c8e 00000347: JUMP 00000348: JUMPDEST 00000349: STOP 0000034a: JUMPDEST 0000034b: PUSH2 0x0376 0000034e: PUSH1 0x04 00000350: DUP1 00000351: CALLDATASIZE 00000352: SUB 00000353: PUSH1 0x20 00000355: DUP2 00000356: LT 00000357: ISZERO 00000358: PUSH2 0x0360 0000035b: JUMPI 0000035c: PUSH1 0x00 0000035e: DUP1 0000035f: REVERT 00000360: JUMPDEST 00000361: DUP2 00000362: ADD 00000363: SWAP1 00000364: DUP1 00000365: DUP1 00000366: CALLDATALOAD 00000367: SWAP1 00000368: PUSH1 0x20 0000036a: ADD 0000036b: SWAP1 0000036c: SWAP3 0000036d: SWAP2 0000036e: SWAP1 0000036f: POP 00000370: POP 00000371: POP 00000372: PUSH2 0x0e59 00000375: JUMP 00000376: JUMPDEST 00000377: STOP 00000378: JUMPDEST 00000379: PUSH2 0x0380 0000037c: PUSH2 0x0f8b 0000037f: JUMP 00000380: JUMPDEST 00000381: PUSH1 0x40 00000383: MLOAD 00000384: DUP1 00000385: DUP3 00000386: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 0000039b: AND 0000039c: DUP2 0000039d: MSTORE 0000039e: PUSH1 0x20 000003a0: ADD 000003a1: SWAP2 000003a2: POP 000003a3: POP 000003a4: PUSH1 0x40 000003a6: MLOAD 000003a7: DUP1 000003a8: SWAP2 000003a9: SUB 000003aa: SWAP1 000003ab: RETURN 000003ac: JUMPDEST 000003ad: PUSH2 0x03b4 000003b0: PUSH2 0x0fb1 000003b3: JUMP 000003b4: JUMPDEST 000003b5: STOP 000003b6: JUMPDEST 000003b7: PUSH2 0x03f8 000003ba: PUSH1 0x04 000003bc: DUP1 000003bd: CALLDATASIZE 000003be: SUB 000003bf: PUSH1 0x60 000003c1: DUP2 000003c2: LT 000003c3: ISZERO 000003c4: PUSH2 0x03cc 000003c7: JUMPI 000003c8: PUSH1 0x00 000003ca: DUP1 000003cb: REVERT 000003cc: JUMPDEST 000003cd: DUP2 000003ce: ADD 000003cf: SWAP1 000003d0: DUP1 000003d1: DUP1 000003d2: CALLDATALOAD 000003d3: SWAP1 000003d4: PUSH1 0x20 000003d6: ADD 000003d7: SWAP1 000003d8: SWAP3 000003d9: SWAP2 000003da: SWAP1 000003db: DUP1 000003dc: CALLDATALOAD 000003dd: SWAP1 000003de: PUSH1 0x20 000003e0: ADD 000003e1: SWAP1 000003e2: SWAP3 000003e3: SWAP2 000003e4: SWAP1 000003e5: DUP1 000003e6: CALLDATALOAD 000003e7: ISZERO 000003e8: ISZERO 000003e9: SWAP1 000003ea: PUSH1 0x20 000003ec: ADD 000003ed: SWAP1 000003ee: SWAP3 000003ef: SWAP2 000003f0: SWAP1 000003f1: POP 000003f2: POP 000003f3: POP 000003f4: PUSH2 0x0fde 000003f7: JUMP 000003f8: JUMPDEST 000003f9: STOP 000003fa: JUMPDEST 000003fb: PUSH2 0x0402 000003fe: PUSH2 0x1128 00000401: JUMP 00000402: JUMPDEST 00000403: STOP 00000404: JUMPDEST 00000405: PUSH2 0x040c 00000408: PUSH2 0x12ae 0000040b: JUMP 0000040c: JUMPDEST 0000040d: PUSH1 0x40 0000040f: MLOAD 00000410: DUP1 00000411: DUP3 00000412: DUP2 00000413: MSTORE 00000414: PUSH1 0x20 00000416: ADD 00000417: SWAP2 00000418: POP 00000419: POP 0000041a: PUSH1 0x40 0000041c: MLOAD 0000041d: DUP1 0000041e: SWAP2 0000041f: SUB 00000420: SWAP1 00000421: RETURN 00000422: JUMPDEST 00000423: PUSH2 0x0464 00000426: PUSH1 0x04 00000428: DUP1 00000429: CALLDATASIZE 0000042a: SUB 0000042b: PUSH1 0x20 0000042d: DUP2 0000042e: LT 0000042f: ISZERO 00000430: PUSH2 0x0438 00000433: JUMPI 00000434: PUSH1 0x00 00000436: DUP1 00000437: REVERT 00000438: JUMPDEST 00000439: DUP2 0000043a: ADD 0000043b: SWAP1 0000043c: DUP1 0000043d: DUP1 0000043e: CALLDATALOAD 0000043f: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000454: AND 00000455: SWAP1 00000456: PUSH1 0x20 00000458: ADD 00000459: SWAP1 0000045a: SWAP3 0000045b: SWAP2 0000045c: SWAP1 0000045d: POP 0000045e: POP 0000045f: POP 00000460: PUSH2 0x12b4 00000463: JUMP 00000464: JUMPDEST 00000465: STOP 00000466: JUMPDEST 00000467: PUSH2 0x046e 0000046a: PUSH2 0x13bb 0000046d: JUMP 0000046e: JUMPDEST 0000046f: PUSH1 0x40 00000471: MLOAD 00000472: DUP1 00000473: DUP3 00000474: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000489: AND 0000048a: DUP2 0000048b: MSTORE 0000048c: PUSH1 0x20 0000048e: ADD 0000048f: SWAP2 00000490: POP 00000491: POP 00000492: PUSH1 0x40 00000494: MLOAD 00000495: DUP1 00000496: SWAP2 00000497: SUB 00000498: SWAP1 00000499: RETURN 0000049a: JUMPDEST 0000049b: PUSH2 0x04d0 0000049e: PUSH1 0x04 000004a0: DUP1 000004a1: CALLDATASIZE 000004a2: SUB 000004a3: PUSH1 0x40 000004a5: DUP2 000004a6: LT 000004a7: ISZERO 000004a8: PUSH2 0x04b0 000004ab: JUMPI 000004ac: PUSH1 0x00 000004ae: DUP1 000004af: REVERT 000004b0: JUMPDEST 000004b1: DUP2 000004b2: ADD 000004b3: SWAP1 000004b4: DUP1 000004b5: DUP1 000004b6: CALLDATALOAD 000004b7: SWAP1 000004b8: PUSH1 0x20 000004ba: ADD 000004bb: SWAP1 000004bc: SWAP3 000004bd: SWAP2 000004be: SWAP1 000004bf: DUP1 000004c0: CALLDATALOAD 000004c1: SWAP1 000004c2: PUSH1 0x20 000004c4: ADD 000004c5: SWAP1 000004c6: SWAP3 000004c7: SWAP2 000004c8: SWAP1 000004c9: POP 000004ca: POP 000004cb: POP 000004cc: PUSH2 0x13e4 000004cf: JUMP 000004d0: JUMPDEST 000004d1: PUSH1 0x40 000004d3: MLOAD 000004d4: DUP1 000004d5: DUP3 000004d6: DUP2 000004d7: MSTORE 000004d8: PUSH1 0x20 000004da: ADD 000004db: SWAP2 000004dc: POP 000004dd: POP 000004de: PUSH1 0x40 000004e0: MLOAD 000004e1: DUP1 000004e2: SWAP2 000004e3: SUB 000004e4: SWAP1 000004e5: RETURN 000004e6: JUMPDEST 000004e7: PUSH2 0x0532 000004ea: PUSH1 0x04 000004ec: DUP1 000004ed: CALLDATASIZE 000004ee: SUB 000004ef: PUSH1 0x40 000004f1: DUP2 000004f2: LT 000004f3: ISZERO 000004f4: PUSH2 0x04fc 000004f7: JUMPI 000004f8: PUSH1 0x00 000004fa: DUP1 000004fb: REVERT 000004fc: JUMPDEST 000004fd: DUP2 000004fe: ADD 000004ff: SWAP1 00000500: DUP1 00000501: DUP1 00000502: CALLDATALOAD 00000503: SWAP1 00000504: PUSH1 0x20 00000506: ADD 00000507: SWAP1 00000508: SWAP3 00000509: SWAP2 0000050a: SWAP1 0000050b: DUP1 0000050c: CALLDATALOAD 0000050d: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000522: AND 00000523: SWAP1 00000524: PUSH1 0x20 00000526: ADD 00000527: SWAP1 00000528: SWAP3 00000529: SWAP2 0000052a: SWAP1 0000052b: POP 0000052c: POP 0000052d: POP 0000052e: PUSH2 0x1486 00000531: JUMP 00000532: JUMPDEST 00000533: PUSH1 0x40 00000535: MLOAD 00000536: DUP1 00000537: DUP4 00000538: DUP2 00000539: MSTORE 0000053a: PUSH1 0x20 0000053c: ADD 0000053d: DUP3 0000053e: DUP2 0000053f: MSTORE 00000540: PUSH1 0x20 00000542: ADD 00000543: SWAP3 00000544: POP 00000545: POP 00000546: POP 00000547: PUSH1 0x40 00000549: MLOAD 0000054a: DUP1 0000054b: SWAP2 0000054c: SUB 0000054d: SWAP1 0000054e: RETURN 0000054f: JUMPDEST 00000550: PUSH2 0x05b1 00000553: PUSH1 0x04 00000555: DUP1 00000556: CALLDATASIZE 00000557: SUB 00000558: PUSH1 0x80 0000055a: DUP2 0000055b: LT 0000055c: ISZERO 0000055d: PUSH2 0x0565 00000560: JUMPI 00000561: PUSH1 0x00 00000563: DUP1 00000564: REVERT 00000565: JUMPDEST 00000566: DUP2 00000567: ADD 00000568: SWAP1 00000569: DUP1 0000056a: DUP1 0000056b: CALLDATALOAD 0000056c: SWAP1 0000056d: PUSH1 0x20 0000056f: ADD 00000570: SWAP1 00000571: SWAP3 00000572: SWAP2 00000573: SWAP1 00000574: DUP1 00000575: CALLDATALOAD 00000576: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 0000058b: AND 0000058c: SWAP1 0000058d: PUSH1 0x20 0000058f: ADD 00000590: SWAP1 00000591: SWAP3 00000592: SWAP2 00000593: SWAP1 00000594: DUP1 00000595: CALLDATALOAD 00000596: SWAP1 00000597: PUSH1 0x20 00000599: ADD 0000059a: SWAP1 0000059b: SWAP3 0000059c: SWAP2 0000059d: SWAP1 0000059e: DUP1 0000059f: CALLDATALOAD 000005a0: ISZERO 000005a1: ISZERO 000005a2: SWAP1 000005a3: PUSH1 0x20 000005a5: ADD 000005a6: SWAP1 000005a7: SWAP3 000005a8: SWAP2 000005a9: SWAP1 000005aa: POP 000005ab: POP 000005ac: POP 000005ad: PUSH2 0x14b7 000005b0: JUMP 000005b1: JUMPDEST 000005b2: STOP 000005b3: JUMPDEST 000005b4: PUSH2 0x05bb 000005b7: PUSH2 0x16a1 000005ba: JUMP 000005bb: JUMPDEST 000005bc: PUSH1 0x40 000005be: MLOAD 000005bf: DUP1 000005c0: DUP3 000005c1: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000005d6: AND 000005d7: DUP2 000005d8: MSTORE 000005d9: PUSH1 0x20 000005db: ADD 000005dc: SWAP2 000005dd: POP 000005de: POP 000005df: PUSH1 0x40 000005e1: MLOAD 000005e2: DUP1 000005e3: SWAP2 000005e4: SUB 000005e5: SWAP1 000005e6: RETURN 000005e7: JUMPDEST 000005e8: PUSH2 0x061d 000005eb: PUSH1 0x04 000005ed: DUP1 000005ee: CALLDATASIZE 000005ef: SUB 000005f0: PUSH1 0x40 000005f2: DUP2 000005f3: LT 000005f4: ISZERO 000005f5: PUSH2 0x05fd 000005f8: JUMPI 000005f9: PUSH1 0x00 000005fb: DUP1 000005fc: REVERT 000005fd: JUMPDEST 000005fe: DUP2 000005ff: ADD 00000600: SWAP1 00000601: DUP1 00000602: DUP1 00000603: CALLDATALOAD 00000604: SWAP1 00000605: PUSH1 0x20 00000607: ADD 00000608: SWAP1 00000609: SWAP3 0000060a: SWAP2 0000060b: SWAP1 0000060c: DUP1 0000060d: CALLDATALOAD 0000060e: SWAP1 0000060f: PUSH1 0x20 00000611: ADD 00000612: SWAP1 00000613: SWAP3 00000614: SWAP2 00000615: SWAP1 00000616: POP 00000617: POP 00000618: POP 00000619: PUSH2 0x16c7 0000061c: JUMP 0000061d: JUMPDEST 0000061e: STOP 0000061f: JUMPDEST 00000620: PUSH2 0x0661 00000623: PUSH1 0x04 00000625: DUP1 00000626: CALLDATASIZE 00000627: SUB 00000628: PUSH1 0x20 0000062a: DUP2 0000062b: LT 0000062c: ISZERO 0000062d: PUSH2 0x0635 00000630: JUMPI 00000631: PUSH1 0x00 00000633: DUP1 00000634: REVERT 00000635: JUMPDEST 00000636: DUP2 00000637: ADD 00000638: SWAP1 00000639: DUP1 0000063a: DUP1 0000063b: CALLDATALOAD 0000063c: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000651: AND 00000652: SWAP1 00000653: PUSH1 0x20 00000655: ADD 00000656: SWAP1 00000657: SWAP3 00000658: SWAP2 00000659: SWAP1 0000065a: POP 0000065b: POP 0000065c: POP 0000065d: PUSH2 0x1980 00000660: JUMP 00000661: JUMPDEST 00000662: STOP 00000663: JUMPDEST 00000664: PUSH1 0x00 00000666: PUSH1 0x06 00000668: DUP1 00000669: SLOAD 0000066a: SWAP1 0000066b: POP 0000066c: SWAP1 0000066d: POP 0000066e: SWAP1 0000066f: JUMP 00000670: JUMPDEST 00000671: PUSH1 0x06 00000673: DUP2 00000674: DUP2 00000675: SLOAD 00000676: DUP2 00000677: LT 00000678: PUSH2 0x067d 0000067b: JUMPI 0000067c: INVALID 0000067d: JUMPDEST 0000067e: SWAP1 0000067f: PUSH1 0x00 00000681: MSTORE 00000682: PUSH1 0x20 00000684: PUSH1 0x00 00000686: KECCAK256 00000687: SWAP1 00000688: PUSH1 0x05 0000068a: MUL 0000068b: ADD 0000068c: PUSH1 0x00 0000068e: SWAP2 0000068f: POP 00000690: SWAP1 00000691: POP 00000692: DUP1 00000693: PUSH1 0x00 00000695: ADD 00000696: PUSH1 0x00 00000698: SWAP1 00000699: SLOAD 0000069a: SWAP1 0000069b: PUSH2 0x0100 0000069e: EXP 0000069f: SWAP1 000006a0: DIV 000006a1: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000006b6: AND 000006b7: SWAP1 000006b8: DUP1 000006b9: PUSH1 0x01 000006bb: ADD 000006bc: SLOAD 000006bd: SWAP1 000006be: DUP1 000006bf: PUSH1 0x02 000006c1: ADD 000006c2: SLOAD 000006c3: SWAP1 000006c4: DUP1 000006c5: PUSH1 0x03 000006c7: ADD 000006c8: SLOAD 000006c9: SWAP1 000006ca: DUP1 000006cb: PUSH1 0x04 000006cd: ADD 000006ce: SLOAD 000006cf: SWAP1 000006d0: POP 000006d1: DUP6 000006d2: JUMP 000006d3: JUMPDEST 000006d4: PUSH1 0x08 000006d6: SLOAD 000006d7: DUP2 000006d8: JUMP 000006d9: JUMPDEST 000006da: PUSH1 0x04 000006dc: SLOAD 000006dd: DUP2 000006de: JUMP 000006df: JUMPDEST 000006e0: PUSH1 0x00 000006e2: PUSH1 0x06 000006e4: DUP1 000006e5: SLOAD 000006e6: SWAP1 000006e7: POP 000006e8: SWAP1 000006e9: POP 000006ea: PUSH1 0x00 000006ec: JUMPDEST 000006ed: DUP2 000006ee: DUP2 000006ef: LT 000006f0: ISZERO 000006f1: PUSH2 0x07df 000006f4: JUMPI 000006f5: DUP3 000006f6: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 0000070b: AND 0000070c: PUSH1 0x06 0000070e: DUP3 0000070f: DUP2 00000710: SLOAD 00000711: DUP2 00000712: LT 00000713: PUSH2 0x0718 00000716: JUMPI 00000717: INVALID 00000718: JUMPDEST 00000719: SWAP1 0000071a: PUSH1 0x00 0000071c: MSTORE 0000071d: PUSH1 0x20 0000071f: PUSH1 0x00 00000721: KECCAK256 00000722: SWAP1 00000723: PUSH1 0x05 00000725: MUL 00000726: ADD 00000727: PUSH1 0x00 00000729: ADD 0000072a: PUSH1 0x00 0000072c: SWAP1 0000072d: SLOAD 0000072e: SWAP1 0000072f: PUSH2 0x0100 00000732: EXP 00000733: SWAP1 00000734: DIV 00000735: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 0000074a: AND 0000074b: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000760: AND 00000761: EQ 00000762: ISZERO 00000763: PUSH2 0x07d4 00000766: JUMPI 00000767: PUSH1 0x40 00000769: MLOAD 0000076a: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000 0000078b: DUP2 0000078c: MSTORE 0000078d: PUSH1 0x04 0000078f: ADD 00000790: DUP1 00000791: DUP1 00000792: PUSH1 0x20 00000794: ADD 00000795: DUP3 00000796: DUP2 00000797: SUB 00000798: DUP3 00000799: MSTORE 0000079a: PUSH1 0x13 0000079c: DUP2 0000079d: MSTORE 0000079e: PUSH1 0x20 000007a0: ADD 000007a1: DUP1 000007a2: PUSH32 0x6164643a206578697374696e6720706f6f6c3f00000000000000000000000000 000007c3: DUP2 000007c4: MSTORE 000007c5: POP 000007c6: PUSH1 0x20 000007c8: ADD 000007c9: SWAP2 000007ca: POP 000007cb: POP 000007cc: PUSH1 0x40 000007ce: MLOAD 000007cf: DUP1 000007d0: SWAP2 000007d1: SUB 000007d2: SWAP1 000007d3: REVERT 000007d4: JUMPDEST 000007d5: DUP1 000007d6: PUSH1 0x01 000007d8: ADD 000007d9: SWAP1 000007da: POP 000007db: PUSH2 0x06ec 000007de: JUMP 000007df: JUMPDEST 000007e0: POP 000007e1: POP 000007e2: POP 000007e3: JUMP 000007e4: JUMPDEST 000007e5: PUSH1 0x00 000007e7: DUP1 000007e8: PUSH1 0x06 000007ea: DUP5 000007eb: DUP2 000007ec: SLOAD 000007ed: DUP2 000007ee: LT 000007ef: PUSH2 0x07f4 000007f2: JUMPI 000007f3: INVALID 000007f4: JUMPDEST 000007f5: SWAP1 000007f6: PUSH1 0x00 000007f8: MSTORE 000007f9: PUSH1 0x20 000007fb: PUSH1 0x00 000007fd: KECCAK256 000007fe: SWAP1 000007ff: PUSH1 0x05 00000801: MUL 00000802: ADD 00000803: SWAP1 00000804: POP 00000805: PUSH1 0x00 00000807: PUSH1 0x07 00000809: PUSH1 0x00 0000080b: DUP7 0000080c: DUP2 0000080d: MSTORE 0000080e: PUSH1 0x20 00000810: ADD 00000811: SWAP1 00000812: DUP2 00000813: MSTORE 00000814: PUSH1 0x20 00000816: ADD 00000817: PUSH1 0x00 00000819: KECCAK256 0000081a: PUSH1 0x00 0000081c: DUP6 0000081d: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000832: AND 00000833: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000848: AND 00000849: DUP2 0000084a: MSTORE 0000084b: PUSH1 0x20 0000084d: ADD 0000084e: SWAP1 0000084f: DUP2 00000850: MSTORE 00000851: PUSH1 0x20 00000853: ADD 00000854: PUSH1 0x00 00000856: KECCAK256 00000857: SWAP1 00000858: POP 00000859: PUSH1 0x00 0000085b: DUP3 0000085c: PUSH1 0x04 0000085e: ADD 0000085f: SLOAD 00000860: SWAP1 00000861: POP 00000862: PUSH1 0x00 00000864: DUP4 00000865: PUSH1 0x00 00000867: ADD 00000868: PUSH1 0x00 0000086a: SWAP1 0000086b: SLOAD 0000086c: SWAP1 0000086d: PUSH2 0x0100 00000870: EXP 00000871: SWAP1 00000872: DIV 00000873: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000888: AND 00000889: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 0000089e: AND 0000089f: PUSH4 0x70a08231 000008a4: ADDRESS 000008a5: PUSH1 0x40 000008a7: MLOAD 000008a8: DUP3 000008a9: PUSH4 0xffffffff 000008ae: AND 000008af: PUSH1 0xe0 000008b1: SHL 000008b2: DUP2 000008b3: MSTORE 000008b4: PUSH1 0x04 000008b6: ADD 000008b7: DUP1 000008b8: DUP3 000008b9: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000008ce: AND 000008cf: DUP2 000008d0: MSTORE 000008d1: PUSH1 0x20 000008d3: ADD 000008d4: SWAP2 000008d5: POP 000008d6: POP 000008d7: PUSH1 0x20 000008d9: PUSH1 0x40 000008db: MLOAD 000008dc: DUP1 000008dd: DUP4 000008de: SUB 000008df: DUP2 000008e0: DUP7 000008e1: DUP1 000008e2: EXTCODESIZE 000008e3: ISZERO 000008e4: DUP1 000008e5: ISZERO 000008e6: PUSH2 0x08ee 000008e9: JUMPI 000008ea: PUSH1 0x00 000008ec: DUP1 000008ed: REVERT 000008ee: JUMPDEST 000008ef: POP 000008f0: GAS 000008f1: STATICCALL 000008f2: ISZERO 000008f3: DUP1 000008f4: ISZERO 000008f5: PUSH2 0x0902 000008f8: JUMPI 000008f9: RETURNDATASIZE 000008fa: PUSH1 0x00 000008fc: DUP1 000008fd: RETURNDATACOPY 000008fe: RETURNDATASIZE 000008ff: PUSH1 0x00 00000901: REVERT 00000902: JUMPDEST 00000903: POP 00000904: POP 00000905: POP 00000906: POP 00000907: PUSH1 0x40 00000909: MLOAD 0000090a: RETURNDATASIZE 0000090b: PUSH1 0x20 0000090d: DUP2 0000090e: LT 0000090f: ISZERO 00000910: PUSH2 0x0918 00000913: JUMPI 00000914: PUSH1 0x00 00000916: DUP1 00000917: REVERT 00000918: JUMPDEST 00000919: DUP2 0000091a: ADD 0000091b: SWAP1 0000091c: DUP1 0000091d: DUP1 0000091e: MLOAD 0000091f: SWAP1 00000920: PUSH1 0x20 00000922: ADD 00000923: SWAP1 00000924: SWAP3 00000925: SWAP2 00000926: SWAP1 00000927: POP 00000928: POP 00000929: POP 0000092a: SWAP1 0000092b: POP 0000092c: DUP4 0000092d: PUSH1 0x03 0000092f: ADD 00000930: SLOAD 00000931: NUMBER 00000932: GT 00000933: DUP1 00000934: ISZERO 00000935: PUSH2 0x093f 00000938: JUMPI 00000939: POP 0000093a: PUSH1 0x00 0000093c: DUP2 0000093d: EQ 0000093e: ISZERO 0000093f: JUMPDEST 00000940: ISZERO 00000941: PUSH2 0x09da 00000944: JUMPI 00000945: PUSH1 0x00 00000947: PUSH2 0x0954 0000094a: DUP6 0000094b: PUSH1 0x03 0000094d: ADD 0000094e: SLOAD 0000094f: NUMBER 00000950: PUSH2 0x13e4 00000953: JUMP 00000954: JUMPDEST 00000955: SWAP1 00000956: POP 00000957: PUSH1 0x00 00000959: PUSH2 0x0997 0000095c: PUSH1 0x08 0000095e: SLOAD 0000095f: PUSH2 0x0989 00000962: DUP9 00000963: PUSH1 0x01 00000965: ADD 00000966: SLOAD 00000967: PUSH2 0x097b 0000096a: PUSH1 0x05 0000096c: SLOAD 0000096d: DUP8 0000096e: PUSH2 0x1b8b 00000971: SWAP1 00000972: SWAP2 00000973: SWAP1 00000974: PUSH4 0xffffffff 00000979: AND 0000097a: JUMP 0000097b: JUMPDEST 0000097c: PUSH2 0x1b8b 0000097f: SWAP1 00000980: SWAP2 00000981: SWAP1 00000982: PUSH4 0xffffffff 00000987: AND 00000988: JUMP 00000989: JUMPDEST 0000098a: PUSH2 0x1c11 0000098d: SWAP1 0000098e: SWAP2 0000098f: SWAP1 00000990: PUSH4 0xffffffff 00000995: AND 00000996: JUMP 00000997: JUMPDEST 00000998: SWAP1 00000999: POP 0000099a: PUSH2 0x09d5 0000099d: PUSH2 0x09c6 000009a0: DUP5 000009a1: PUSH2 0x09b8 000009a4: PUSH5 0xe8d4a51000 000009aa: DUP6 000009ab: PUSH2 0x1b8b 000009ae: SWAP1 000009af: SWAP2 000009b0: SWAP1 000009b1: PUSH4 0xffffffff 000009b6: AND 000009b7: JUMP 000009b8: JUMPDEST 000009b9: PUSH2 0x1c11 000009bc: SWAP1 000009bd: SWAP2 000009be: SWAP1 000009bf: PUSH4 0xffffffff 000009c4: AND 000009c5: JUMP 000009c6: JUMPDEST 000009c7: DUP6 000009c8: PUSH2 0x1c5b 000009cb: SWAP1 000009cc: SWAP2 000009cd: SWAP1 000009ce: PUSH4 0xffffffff 000009d3: AND 000009d4: JUMP 000009d5: JUMPDEST 000009d6: SWAP4 000009d7: POP 000009d8: POP 000009d9: POP 000009da: JUMPDEST 000009db: PUSH2 0x0a1e 000009de: DUP4 000009df: PUSH1 0x01 000009e1: ADD 000009e2: SLOAD 000009e3: PUSH2 0x0a10 000009e6: PUSH5 0xe8d4a51000 000009ec: PUSH2 0x0a02 000009ef: DUP7 000009f0: DUP9 000009f1: PUSH1 0x00 000009f3: ADD 000009f4: SLOAD 000009f5: PUSH2 0x1b8b 000009f8: SWAP1 000009f9: SWAP2 000009fa: SWAP1 000009fb: PUSH4 0xffffffff 00000a00: AND 00000a01: JUMP 00000a02: JUMPDEST 00000a03: PUSH2 0x1c11 00000a06: SWAP1 00000a07: SWAP2 00000a08: SWAP1 00000a09: PUSH4 0xffffffff 00000a0e: AND 00000a0f: JUMP 00000a10: JUMPDEST 00000a11: PUSH2 0x1ce3 00000a14: SWAP1 00000a15: SWAP2 00000a16: SWAP1 00000a17: PUSH4 0xffffffff 00000a1c: AND 00000a1d: JUMP 00000a1e: JUMPDEST 00000a1f: SWAP5 00000a20: POP 00000a21: POP 00000a22: POP 00000a23: POP 00000a24: POP 00000a25: SWAP3 00000a26: SWAP2 00000a27: POP 00000a28: POP 00000a29: JUMP 00000a2a: JUMPDEST 00000a2b: PUSH1 0x00 00000a2d: PUSH1 0x06 00000a2f: DUP4 00000a30: DUP2 00000a31: SLOAD 00000a32: DUP2 00000a33: LT 00000a34: PUSH2 0x0a39 00000a37: JUMPI 00000a38: INVALID 00000a39: JUMPDEST 00000a3a: SWAP1 00000a3b: PUSH1 0x00 00000a3d: MSTORE 00000a3e: PUSH1 0x20 00000a40: PUSH1 0x00 00000a42: KECCAK256 00000a43: SWAP1 00000a44: PUSH1 0x05 00000a46: MUL 00000a47: ADD 00000a48: SWAP1 00000a49: POP 00000a4a: PUSH1 0x00 00000a4c: PUSH1 0x07 00000a4e: PUSH1 0x00 00000a50: DUP6 00000a51: DUP2 00000a52: MSTORE 00000a53: PUSH1 0x20 00000a55: ADD 00000a56: SWAP1 00000a57: DUP2 00000a58: MSTORE 00000a59: PUSH1 0x20 00000a5b: ADD 00000a5c: PUSH1 0x00 00000a5e: KECCAK256 00000a5f: PUSH1 0x00 00000a61: CALLER 00000a62: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000a77: AND 00000a78: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000a8d: AND 00000a8e: DUP2 00000a8f: MSTORE 00000a90: PUSH1 0x20 00000a92: ADD 00000a93: SWAP1 00000a94: DUP2 00000a95: MSTORE 00000a96: PUSH1 0x20 00000a98: ADD 00000a99: PUSH1 0x00 00000a9b: KECCAK256 00000a9c: SWAP1 00000a9d: POP 00000a9e: DUP3 00000a9f: DUP2 00000aa0: PUSH1 0x00 00000aa2: ADD 00000aa3: SLOAD 00000aa4: LT 00000aa5: ISZERO 00000aa6: PUSH2 0x0b17 00000aa9: JUMPI 00000aaa: PUSH1 0x40 00000aac: MLOAD 00000aad: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000 00000ace: DUP2 00000acf: MSTORE 00000ad0: PUSH1 0x04 00000ad2: ADD 00000ad3: DUP1 00000ad4: DUP1 00000ad5: PUSH1 0x20 00000ad7: ADD 00000ad8: DUP3 00000ad9: DUP2 00000ada: SUB 00000adb: DUP3 00000adc: MSTORE 00000add: PUSH1 0x12 00000adf: DUP2 00000ae0: MSTORE 00000ae1: PUSH1 0x20 00000ae3: ADD 00000ae4: DUP1 00000ae5: PUSH32 0x77697468647261773a206e6f7420676f6f640000000000000000000000000000 00000b06: DUP2 00000b07: MSTORE 00000b08: POP 00000b09: PUSH1 0x20 00000b0b: ADD 00000b0c: SWAP2 00000b0d: POP 00000b0e: POP 00000b0f: PUSH1 0x40 00000b11: MLOAD 00000b12: DUP1 00000b13: SWAP2 00000b14: SUB 00000b15: SWAP1 00000b16: REVERT 00000b17: JUMPDEST 00000b18: PUSH2 0x0b20 00000b1b: DUP5 00000b1c: PUSH2 0x0c8e 00000b1f: JUMP 00000b20: JUMPDEST 00000b21: PUSH1 0x00 00000b23: PUSH2 0x0b6a 00000b26: DUP3 00000b27: PUSH1 0x01 00000b29: ADD 00000b2a: SLOAD 00000b2b: PUSH2 0x0b5c 00000b2e: PUSH5 0xe8d4a51000 00000b34: PUSH2 0x0b4e 00000b37: DUP8 00000b38: PUSH1 0x04 00000b3a: ADD 00000b3b: SLOAD 00000b3c: DUP8 00000b3d: PUSH1 0x00 00000b3f: ADD 00000b40: SLOAD 00000b41: PUSH2 0x1b8b 00000b44: SWAP1 00000b45: SWAP2 00000b46: SWAP1 00000b47: PUSH4 0xffffffff 00000b4c: AND 00000b4d: JUMP 00000b4e: JUMPDEST 00000b4f: PUSH2 0x1c11 00000b52: SWAP1 00000b53: SWAP2 00000b54: SWAP1 00000b55: PUSH4 0xffffffff 00000b5a: AND 00000b5b: JUMP 00000b5c: JUMPDEST 00000b5d: PUSH2 0x1ce3 00000b60: SWAP1 00000b61: SWAP2 00000b62: SWAP1 00000b63: PUSH4 0xffffffff 00000b68: AND 00000b69: JUMP 00000b6a: JUMPDEST 00000b6b: SWAP1 00000b6c: POP 00000b6d: PUSH1 0x00 00000b6f: DUP2 00000b70: GT 00000b71: ISZERO 00000b72: PUSH2 0x0b80 00000b75: JUMPI 00000b76: PUSH2 0x0b7f 00000b79: CALLER 00000b7a: DUP3 00000b7b: PUSH2 0x1d2d 00000b7e: JUMP 00000b7f: JUMPDEST 00000b80: JUMPDEST 00000b81: PUSH1 0x00 00000b83: DUP5 00000b84: GT 00000b85: ISZERO 00000b86: PUSH2 0x0bf8 00000b89: JUMPI 00000b8a: PUSH2 0x0ba0 00000b8d: DUP5 00000b8e: DUP4 00000b8f: PUSH1 0x00 00000b91: ADD 00000b92: SLOAD 00000b93: PUSH2 0x1ce3 00000b96: SWAP1 00000b97: SWAP2 00000b98: SWAP1 00000b99: PUSH4 0xffffffff 00000b9e: AND 00000b9f: JUMP 00000ba0: JUMPDEST 00000ba1: DUP3 00000ba2: PUSH1 0x00 00000ba4: ADD 00000ba5: DUP2 00000ba6: SWAP1 00000ba7: SSTORE 00000ba8: POP 00000ba9: PUSH2 0x0bf7 00000bac: CALLER 00000bad: DUP6 00000bae: DUP6 00000baf: PUSH1 0x00 00000bb1: ADD 00000bb2: PUSH1 0x00 00000bb4: SWAP1 00000bb5: SLOAD 00000bb6: SWAP1 00000bb7: PUSH2 0x0100 00000bba: EXP 00000bbb: SWAP1 00000bbc: DIV 00000bbd: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000bd2: AND 00000bd3: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000be8: AND 00000be9: PUSH2 0x1fa6 00000bec: SWAP1 00000bed: SWAP3 00000bee: SWAP2 00000bef: SWAP1 00000bf0: PUSH4 0xffffffff 00000bf5: AND 00000bf6: JUMP 00000bf7: JUMPDEST 00000bf8: JUMPDEST 00000bf9: PUSH2 0x0c2a 00000bfc: PUSH5 0xe8d4a51000 00000c02: PUSH2 0x0c1c 00000c05: DUP6 00000c06: PUSH1 0x04 00000c08: ADD 00000c09: SLOAD 00000c0a: DUP6 00000c0b: PUSH1 0x00 00000c0d: ADD 00000c0e: SLOAD 00000c0f: PUSH2 0x1b8b 00000c12: SWAP1 00000c13: SWAP2 00000c14: SWAP1 00000c15: PUSH4 0xffffffff 00000c1a: AND 00000c1b: JUMP 00000c1c: JUMPDEST 00000c1d: PUSH2 0x1c11 00000c20: SWAP1 00000c21: SWAP2 00000c22: SWAP1 00000c23: PUSH4 0xffffffff 00000c28: AND 00000c29: JUMP 00000c2a: JUMPDEST 00000c2b: DUP3 00000c2c: PUSH1 0x01 00000c2e: ADD 00000c2f: DUP2 00000c30: SWAP1 00000c31: SSTORE 00000c32: POP 00000c33: DUP5 00000c34: CALLER 00000c35: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000c4a: AND 00000c4b: PUSH32 0xf279e6a1f5e320cca91135676d9cb6e44ca8a08c0b88342bcdb1144f6511b568 00000c6c: DUP7 00000c6d: PUSH1 0x40 00000c6f: MLOAD 00000c70: DUP1 00000c71: DUP3 00000c72: DUP2 00000c73: MSTORE 00000c74: PUSH1 0x20 00000c76: ADD 00000c77: SWAP2 00000c78: POP 00000c79: POP 00000c7a: PUSH1 0x40 00000c7c: MLOAD 00000c7d: DUP1 00000c7e: SWAP2 00000c7f: SUB 00000c80: SWAP1 00000c81: LOG3 00000c82: POP 00000c83: POP 00000c84: POP 00000c85: POP 00000c86: POP 00000c87: JUMP 00000c88: JUMPDEST 00000c89: PUSH1 0x09 00000c8b: SLOAD 00000c8c: DUP2 00000c8d: JUMP 00000c8e: JUMPDEST 00000c8f: PUSH1 0x00 00000c91: PUSH1 0x06 00000c93: DUP3 00000c94: DUP2 00000c95: SLOAD 00000c96: DUP2 00000c97: LT 00000c98: PUSH2 0x0c9d 00000c9b: JUMPI 00000c9c: INVALID 00000c9d: JUMPDEST 00000c9e: SWAP1 00000c9f: PUSH1 0x00 00000ca1: MSTORE 00000ca2: PUSH1 0x20 00000ca4: PUSH1 0x00 00000ca6: KECCAK256 00000ca7: SWAP1 00000ca8: PUSH1 0x05 00000caa: MUL 00000cab: ADD 00000cac: SWAP1 00000cad: POP 00000cae: DUP1 00000caf: PUSH1 0x03 00000cb1: ADD 00000cb2: SLOAD 00000cb3: NUMBER 00000cb4: GT 00000cb5: PUSH2 0x0cbe 00000cb8: JUMPI 00000cb9: POP 00000cba: PUSH2 0x0e56 00000cbd: JUMP 00000cbe: JUMPDEST 00000cbf: PUSH1 0x00 00000cc1: DUP2 00000cc2: PUSH1 0x00 00000cc4: ADD 00000cc5: PUSH1 0x00 00000cc7: SWAP1 00000cc8: SLOAD 00000cc9: SWAP1 00000cca: PUSH2 0x0100 00000ccd: EXP 00000cce: SWAP1 00000ccf: DIV 00000cd0: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000ce5: AND 00000ce6: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000cfb: AND 00000cfc: PUSH4 0x70a08231 00000d01: ADDRESS 00000d02: PUSH1 0x40 00000d04: MLOAD 00000d05: DUP3 00000d06: PUSH4 0xffffffff 00000d0b: AND 00000d0c: PUSH1 0xe0 00000d0e: SHL 00000d0f: DUP2 00000d10: MSTORE 00000d11: PUSH1 0x04 00000d13: ADD 00000d14: DUP1 00000d15: DUP3 00000d16: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000d2b: AND 00000d2c: DUP2 00000d2d: MSTORE 00000d2e: PUSH1 0x20 00000d30: ADD 00000d31: SWAP2 00000d32: POP 00000d33: POP 00000d34: PUSH1 0x20 00000d36: PUSH1 0x40 00000d38: MLOAD 00000d39: DUP1 00000d3a: DUP4 00000d3b: SUB 00000d3c: DUP2 00000d3d: DUP7 00000d3e: DUP1 00000d3f: EXTCODESIZE 00000d40: ISZERO 00000d41: DUP1 00000d42: ISZERO 00000d43: PUSH2 0x0d4b 00000d46: JUMPI 00000d47: PUSH1 0x00 00000d49: DUP1 00000d4a: REVERT 00000d4b: JUMPDEST 00000d4c: POP 00000d4d: GAS 00000d4e: STATICCALL 00000d4f: ISZERO 00000d50: DUP1 00000d51: ISZERO 00000d52: PUSH2 0x0d5f 00000d55: JUMPI 00000d56: RETURNDATASIZE 00000d57: PUSH1 0x00 00000d59: DUP1 00000d5a: RETURNDATACOPY 00000d5b: RETURNDATASIZE 00000d5c: PUSH1 0x00 00000d5e: REVERT 00000d5f: JUMPDEST 00000d60: POP 00000d61: POP 00000d62: POP 00000d63: POP 00000d64: PUSH1 0x40 00000d66: MLOAD 00000d67: RETURNDATASIZE 00000d68: PUSH1 0x20 00000d6a: DUP2 00000d6b: LT 00000d6c: ISZERO 00000d6d: PUSH2 0x0d75 00000d70: JUMPI 00000d71: PUSH1 0x00 00000d73: DUP1 00000d74: REVERT 00000d75: JUMPDEST 00000d76: DUP2 00000d77: ADD 00000d78: SWAP1 00000d79: DUP1 00000d7a: DUP1 00000d7b: MLOAD 00000d7c: SWAP1 00000d7d: PUSH1 0x20 00000d7f: ADD 00000d80: SWAP1 00000d81: SWAP3 00000d82: SWAP2 00000d83: SWAP1 00000d84: POP 00000d85: POP 00000d86: POP 00000d87: SWAP1 00000d88: POP 00000d89: PUSH1 0x00 00000d8b: DUP2 00000d8c: EQ 00000d8d: ISZERO 00000d8e: PUSH2 0x0da1 00000d91: JUMPI 00000d92: NUMBER 00000d93: DUP3 00000d94: PUSH1 0x03 00000d96: ADD 00000d97: DUP2 00000d98: SWAP1 00000d99: SSTORE 00000d9a: POP 00000d9b: POP 00000d9c: POP 00000d9d: PUSH2 0x0e56 00000da0: JUMP 00000da1: JUMPDEST 00000da2: PUSH1 0x00 00000da4: PUSH2 0x0db1 00000da7: DUP4 00000da8: PUSH1 0x03 00000daa: ADD 00000dab: SLOAD 00000dac: NUMBER 00000dad: PUSH2 0x13e4 00000db0: JUMP 00000db1: JUMPDEST 00000db2: SWAP1 00000db3: POP 00000db4: PUSH1 0x00 00000db6: PUSH2 0x0df4 00000db9: PUSH1 0x08 00000dbb: SLOAD 00000dbc: PUSH2 0x0de6 00000dbf: DUP7 00000dc0: PUSH1 0x01 00000dc2: ADD 00000dc3: SLOAD 00000dc4: PUSH2 0x0dd8 00000dc7: PUSH1 0x05 00000dc9: SLOAD 00000dca: DUP8 00000dcb: PUSH2 0x1b8b 00000dce: SWAP1 00000dcf: SWAP2 00000dd0: SWAP1 00000dd1: PUSH4 0xffffffff 00000dd6: AND 00000dd7: JUMP 00000dd8: JUMPDEST 00000dd9: PUSH2 0x1b8b 00000ddc: SWAP1 00000ddd: SWAP2 00000dde: SWAP1 00000ddf: PUSH4 0xffffffff 00000de4: AND 00000de5: JUMP 00000de6: JUMPDEST 00000de7: PUSH2 0x1c11 00000dea: SWAP1 00000deb: SWAP2 00000dec: SWAP1 00000ded: PUSH4 0xffffffff 00000df2: AND 00000df3: JUMP 00000df4: JUMPDEST 00000df5: SWAP1 00000df6: POP 00000df7: PUSH2 0x0e00 00000dfa: ADDRESS 00000dfb: DUP3 00000dfc: PUSH2 0x1d2d 00000dff: JUMP 00000e00: JUMPDEST 00000e01: PUSH2 0x0e40 00000e04: PUSH2 0x0e2d 00000e07: DUP5 00000e08: PUSH2 0x0e1f 00000e0b: PUSH5 0xe8d4a51000 00000e11: DUP6 00000e12: PUSH2 0x1b8b 00000e15: SWAP1 00000e16: SWAP2 00000e17: SWAP1 00000e18: PUSH4 0xffffffff 00000e1d: AND 00000e1e: JUMP 00000e1f: JUMPDEST 00000e20: PUSH2 0x1c11 00000e23: SWAP1 00000e24: SWAP2 00000e25: SWAP1 00000e26: PUSH4 0xffffffff 00000e2b: AND 00000e2c: JUMP 00000e2d: JUMPDEST 00000e2e: DUP6 00000e2f: PUSH1 0x04 00000e31: ADD 00000e32: SLOAD 00000e33: PUSH2 0x1c5b 00000e36: SWAP1 00000e37: SWAP2 00000e38: SWAP1 00000e39: PUSH4 0xffffffff 00000e3e: AND 00000e3f: JUMP 00000e40: JUMPDEST 00000e41: DUP5 00000e42: PUSH1 0x04 00000e44: ADD 00000e45: DUP2 00000e46: SWAP1 00000e47: SSTORE 00000e48: POP 00000e49: NUMBER 00000e4a: DUP5 00000e4b: PUSH1 0x03 00000e4d: ADD 00000e4e: DUP2 00000e4f: SWAP1 00000e50: SSTORE 00000e51: POP 00000e52: POP 00000e53: POP 00000e54: POP 00000e55: POP 00000e56: JUMPDEST 00000e57: POP 00000e58: JUMP 00000e59: JUMPDEST 00000e5a: PUSH1 0x00 00000e5c: PUSH1 0x06 00000e5e: DUP3 00000e5f: DUP2 00000e60: SLOAD 00000e61: DUP2 00000e62: LT 00000e63: PUSH2 0x0e68 00000e66: JUMPI 00000e67: INVALID 00000e68: JUMPDEST 00000e69: SWAP1 00000e6a: PUSH1 0x00 00000e6c: MSTORE 00000e6d: PUSH1 0x20 00000e6f: PUSH1 0x00 00000e71: KECCAK256 00000e72: SWAP1 00000e73: PUSH1 0x05 00000e75: MUL 00000e76: ADD 00000e77: SWAP1 00000e78: POP 00000e79: PUSH1 0x00 00000e7b: PUSH1 0x07 00000e7d: PUSH1 0x00 00000e7f: DUP5 00000e80: DUP2 00000e81: MSTORE 00000e82: PUSH1 0x20 00000e84: ADD 00000e85: SWAP1 00000e86: DUP2 00000e87: MSTORE 00000e88: PUSH1 0x20 00000e8a: ADD 00000e8b: PUSH1 0x00 00000e8d: KECCAK256 00000e8e: PUSH1 0x00 00000e90: CALLER 00000e91: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000ea6: AND 00000ea7: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000ebc: AND 00000ebd: DUP2 00000ebe: MSTORE 00000ebf: PUSH1 0x20 00000ec1: ADD 00000ec2: SWAP1 00000ec3: DUP2 00000ec4: MSTORE 00000ec5: PUSH1 0x20 00000ec7: ADD 00000ec8: PUSH1 0x00 00000eca: KECCAK256 00000ecb: SWAP1 00000ecc: POP 00000ecd: PUSH1 0x00 00000ecf: DUP2 00000ed0: PUSH1 0x00 00000ed2: ADD 00000ed3: DUP2 00000ed4: SWAP1 00000ed5: SSTORE 00000ed6: POP 00000ed7: PUSH1 0x00 00000ed9: DUP2 00000eda: PUSH1 0x01 00000edc: ADD 00000edd: DUP2 00000ede: SWAP1 00000edf: SSTORE 00000ee0: POP 00000ee1: PUSH2 0x0f33 00000ee4: CALLER 00000ee5: DUP3 00000ee6: PUSH1 0x00 00000ee8: ADD 00000ee9: SLOAD 00000eea: DUP5 00000eeb: PUSH1 0x00 00000eed: ADD 00000eee: PUSH1 0x00 00000ef0: SWAP1 00000ef1: SLOAD 00000ef2: SWAP1 00000ef3: PUSH2 0x0100 00000ef6: EXP 00000ef7: SWAP1 00000ef8: DIV 00000ef9: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000f0e: AND 00000f0f: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000f24: AND 00000f25: PUSH2 0x1fa6 00000f28: SWAP1 00000f29: SWAP3 00000f2a: SWAP2 00000f2b: SWAP1 00000f2c: PUSH4 0xffffffff 00000f31: AND 00000f32: JUMP 00000f33: JUMPDEST 00000f34: DUP3 00000f35: CALLER 00000f36: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000f4b: AND 00000f4c: PUSH32 0xbb757047c2b5f3974fe26b7c10f732e7bce710b0952a71082702781e62ae0595 00000f6d: DUP4 00000f6e: PUSH1 0x00 00000f70: ADD 00000f71: SLOAD 00000f72: PUSH1 0x40 00000f74: MLOAD 00000f75: DUP1 00000f76: DUP3 00000f77: DUP2 00000f78: MSTORE 00000f79: PUSH1 0x20 00000f7b: ADD 00000f7c: SWAP2 00000f7d: POP 00000f7e: POP 00000f7f: PUSH1 0x40 00000f81: MLOAD 00000f82: DUP1 00000f83: SWAP2 00000f84: SUB 00000f85: SWAP1 00000f86: LOG3 00000f87: POP 00000f88: POP 00000f89: POP 00000f8a: JUMP 00000f8b: JUMPDEST 00000f8c: PUSH1 0x02 00000f8e: PUSH1 0x00 00000f90: SWAP1 00000f91: SLOAD 00000f92: SWAP1 00000f93: PUSH2 0x0100 00000f96: EXP 00000f97: SWAP1 00000f98: DIV 00000f99: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000fae: AND 00000faf: DUP2 00000fb0: JUMP 00000fb1: JUMPDEST 00000fb2: PUSH1 0x00 00000fb4: PUSH1 0x06 00000fb6: DUP1 00000fb7: SLOAD 00000fb8: SWAP1 00000fb9: POP 00000fba: SWAP1 00000fbb: POP 00000fbc: PUSH1 0x00 00000fbe: JUMPDEST 00000fbf: DUP2 00000fc0: DUP2 00000fc1: LT 00000fc2: ISZERO 00000fc3: PUSH2 0x0fda 00000fc6: JUMPI 00000fc7: PUSH2 0x0fcf 00000fca: DUP2 00000fcb: PUSH2 0x0c8e 00000fce: JUMP 00000fcf: JUMPDEST 00000fd0: DUP1 00000fd1: PUSH1 0x01 00000fd3: ADD 00000fd4: SWAP1 00000fd5: POP 00000fd6: PUSH2 0x0fbe 00000fd9: JUMP 00000fda: JUMPDEST 00000fdb: POP 00000fdc: POP 00000fdd: JUMP 00000fde: JUMPDEST 00000fdf: PUSH2 0x0fe6 00000fe2: PUSH2 0x2048 00000fe5: JUMP 00000fe6: JUMPDEST 00000fe7: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000ffc: AND 00000ffd: PUSH1 0x00 00000fff: DUP1 00001000: SLOAD 00001001: SWAP1 00001002: PUSH2 0x0100 00001005: EXP 00001006: SWAP1 00001007: DIV 00001008: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 0000101d: AND 0000101e: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001033: AND 00001034: EQ 00001035: PUSH2 0x10a6 00001038: JUMPI 00001039: PUSH1 0x40 0000103b: MLOAD 0000103c: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000 0000105d: DUP2 0000105e: MSTORE 0000105f: PUSH1 0x04 00001061: ADD 00001062: DUP1 00001063: DUP1 00001064: PUSH1 0x20 00001066: ADD 00001067: DUP3 00001068: DUP2 00001069: SUB 0000106a: DUP3 0000106b: MSTORE 0000106c: PUSH1 0x20 0000106e: DUP2 0000106f: MSTORE 00001070: PUSH1 0x20 00001072: ADD 00001073: DUP1 00001074: PUSH32 0x4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572 00001095: DUP2 00001096: MSTORE 00001097: POP 00001098: PUSH1 0x20 0000109a: ADD 0000109b: SWAP2 0000109c: POP 0000109d: POP 0000109e: PUSH1 0x40 000010a0: MLOAD 000010a1: DUP1 000010a2: SWAP2 000010a3: SUB 000010a4: SWAP1 000010a5: REVERT 000010a6: JUMPDEST 000010a7: DUP1 000010a8: ISZERO 000010a9: PUSH2 0x10b5 000010ac: JUMPI 000010ad: PUSH2 0x10b4 000010b0: PUSH2 0x0fb1 000010b3: JUMP 000010b4: JUMPDEST 000010b5: JUMPDEST 000010b6: PUSH2 0x10fa 000010b9: DUP3 000010ba: PUSH2 0x10ec 000010bd: PUSH1 0x06 000010bf: DUP7 000010c0: DUP2 000010c1: SLOAD 000010c2: DUP2 000010c3: LT 000010c4: PUSH2 0x10c9 000010c7: JUMPI 000010c8: INVALID 000010c9: JUMPDEST 000010ca: SWAP1 000010cb: PUSH1 0x00 000010cd: MSTORE 000010ce: PUSH1 0x20 000010d0: PUSH1 0x00 000010d2: KECCAK256 000010d3: SWAP1 000010d4: PUSH1 0x05 000010d6: MUL 000010d7: ADD 000010d8: PUSH1 0x01 000010da: ADD 000010db: SLOAD 000010dc: PUSH1 0x08 000010de: SLOAD 000010df: PUSH2 0x1ce3 000010e2: SWAP1 000010e3: SWAP2 000010e4: SWAP1 000010e5: PUSH4 0xffffffff 000010ea: AND 000010eb: JUMP 000010ec: JUMPDEST 000010ed: PUSH2 0x1c5b 000010f0: SWAP1 000010f1: SWAP2 000010f2: SWAP1 000010f3: PUSH4 0xffffffff 000010f8: AND 000010f9: JUMP 000010fa: JUMPDEST 000010fb: PUSH1 0x08 000010fd: DUP2 000010fe: SWAP1 000010ff: SSTORE 00001100: POP 00001101: DUP2 00001102: PUSH1 0x06 00001104: DUP5 00001105: DUP2 00001106: SLOAD 00001107: DUP2 00001108: LT 00001109: PUSH2 0x110e 0000110c: JUMPI 0000110d: INVALID 0000110e: JUMPDEST 0000110f: SWAP1 00001110: PUSH1 0x00 00001112: MSTORE 00001113: PUSH1 0x20 00001115: PUSH1 0x00 00001117: KECCAK256 00001118: SWAP1 00001119: PUSH1 0x05 0000111b: MUL 0000111c: ADD 0000111d: PUSH1 0x01 0000111f: ADD 00001120: DUP2 00001121: SWAP1 00001122: SSTORE 00001123: POP 00001124: POP 00001125: POP 00001126: POP 00001127: JUMP 00001128: JUMPDEST 00001129: PUSH2 0x1130 0000112c: PUSH2 0x2048 0000112f: JUMP 00001130: JUMPDEST 00001131: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001146: AND 00001147: PUSH1 0x00 00001149: DUP1 0000114a: SLOAD 0000114b: SWAP1 0000114c: PUSH2 0x0100 0000114f: EXP 00001150: SWAP1 00001151: DIV 00001152: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001167: AND 00001168: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 0000117d: AND 0000117e: EQ 0000117f: PUSH2 0x11f0 00001182: JUMPI 00001183: PUSH1 0x40 00001185: MLOAD 00001186: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000 000011a7: DUP2 000011a8: MSTORE 000011a9: PUSH1 0x04 000011ab: ADD 000011ac: DUP1 000011ad: DUP1 000011ae: PUSH1 0x20 000011b0: ADD 000011b1: DUP3 000011b2: DUP2 000011b3: SUB 000011b4: DUP3 000011b5: MSTORE 000011b6: PUSH1 0x20 000011b8: DUP2 000011b9: MSTORE 000011ba: PUSH1 0x20 000011bc: ADD 000011bd: DUP1 000011be: PUSH32 0x4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572 000011df: DUP2 000011e0: MSTORE 000011e1: POP 000011e2: PUSH1 0x20 000011e4: ADD 000011e5: SWAP2 000011e6: POP 000011e7: POP 000011e8: PUSH1 0x40 000011ea: MLOAD 000011eb: DUP1 000011ec: SWAP2 000011ed: SUB 000011ee: SWAP1 000011ef: REVERT 000011f0: JUMPDEST 000011f1: PUSH1 0x00 000011f3: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001208: AND 00001209: PUSH1 0x00 0000120b: DUP1 0000120c: SLOAD 0000120d: SWAP1 0000120e: PUSH2 0x0100 00001211: EXP 00001212: SWAP1 00001213: DIV 00001214: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001229: AND 0000122a: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 0000123f: AND 00001240: PUSH32 0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0 00001261: PUSH1 0x40 00001263: MLOAD 00001264: PUSH1 0x40 00001266: MLOAD 00001267: DUP1 00001268: SWAP2 00001269: SUB 0000126a: SWAP1 0000126b: LOG3 0000126c: PUSH1 0x00 0000126e: DUP1 0000126f: PUSH1 0x00 00001271: PUSH2 0x0100 00001274: EXP 00001275: DUP2 00001276: SLOAD 00001277: DUP2 00001278: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 0000128d: MUL 0000128e: NOT 0000128f: AND 00001290: SWAP1 00001291: DUP4 00001292: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000012a7: AND 000012a8: MUL 000012a9: OR 000012aa: SWAP1 000012ab: SSTORE 000012ac: POP 000012ad: JUMP 000012ae: JUMPDEST 000012af: PUSH1 0x05 000012b1: SLOAD 000012b2: DUP2 000012b3: JUMP 000012b4: JUMPDEST 000012b5: PUSH1 0x01 000012b7: PUSH1 0x00 000012b9: SWAP1 000012ba: SLOAD 000012bb: SWAP1 000012bc: PUSH2 0x0100 000012bf: EXP 000012c0: SWAP1 000012c1: DIV 000012c2: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000012d7: AND 000012d8: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000012ed: AND 000012ee: CALLER 000012ef: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001304: AND 00001305: EQ 00001306: PUSH2 0x1377 00001309: JUMPI 0000130a: PUSH1 0x40 0000130c: MLOAD 0000130d: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000 0000132e: DUP2 0000132f: MSTORE 00001330: PUSH1 0x04 00001332: ADD 00001333: DUP1 00001334: DUP1 00001335: PUSH1 0x20 00001337: ADD 00001338: DUP3 00001339: DUP2 0000133a: SUB 0000133b: DUP3 0000133c: MSTORE 0000133d: PUSH1 0x09 0000133f: DUP2 00001340: MSTORE 00001341: PUSH1 0x20 00001343: ADD 00001344: DUP1 00001345: PUSH32 0x6465763a207775743f0000000000000000000000000000000000000000000000 00001366: DUP2 00001367: MSTORE 00001368: POP 00001369: PUSH1 0x20 0000136b: ADD 0000136c: SWAP2 0000136d: POP 0000136e: POP 0000136f: PUSH1 0x40 00001371: MLOAD 00001372: DUP1 00001373: SWAP2 00001374: SUB 00001375: SWAP1 00001376: REVERT 00001377: JUMPDEST 00001378: DUP1 00001379: PUSH1 0x01 0000137b: PUSH1 0x00 0000137d: PUSH2 0x0100 00001380: EXP 00001381: DUP2 00001382: SLOAD 00001383: DUP2 00001384: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001399: MUL 0000139a: NOT 0000139b: AND 0000139c: SWAP1 0000139d: DUP4 0000139e: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000013b3: AND 000013b4: MUL 000013b5: OR 000013b6: SWAP1 000013b7: SSTORE 000013b8: POP 000013b9: POP 000013ba: JUMP 000013bb: JUMPDEST 000013bc: PUSH1 0x00 000013be: DUP1 000013bf: PUSH1 0x00 000013c1: SWAP1 000013c2: SLOAD 000013c3: SWAP1 000013c4: PUSH2 0x0100 000013c7: EXP 000013c8: SWAP1 000013c9: DIV 000013ca: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000013df: AND 000013e0: SWAP1 000013e1: POP 000013e2: SWAP1 000013e3: JUMP 000013e4: JUMPDEST 000013e5: PUSH1 0x00 000013e7: PUSH1 0x09 000013e9: SLOAD 000013ea: DUP4 000013eb: LT 000013ec: ISZERO 000013ed: PUSH2 0x13f8 000013f0: JUMPI 000013f1: PUSH1 0x09 000013f3: SLOAD 000013f4: PUSH2 0x13fa 000013f7: JUMP 000013f8: JUMPDEST 000013f9: DUP3 000013fa: JUMPDEST 000013fb: SWAP3 000013fc: POP 000013fd: PUSH1 0x04 000013ff: SLOAD 00001400: DUP3 00001401: GT 00001402: PUSH2 0x141f 00001405: JUMPI 00001406: PUSH2 0x1418 00001409: DUP4 0000140a: DUP4 0000140b: PUSH2 0x1ce3 0000140e: SWAP1 0000140f: SWAP2 00001410: SWAP1 00001411: PUSH4 0xffffffff 00001416: AND 00001417: JUMP 00001418: JUMPDEST 00001419: SWAP1 0000141a: POP 0000141b: PUSH2 0x1480 0000141e: JUMP 0000141f: JUMPDEST 00001420: PUSH1 0x04 00001422: SLOAD 00001423: DUP4 00001424: LT 00001425: PUSH2 0x1442 00001428: JUMPI 00001429: PUSH2 0x143b 0000142c: DUP4 0000142d: DUP4 0000142e: PUSH2 0x1ce3 00001431: SWAP1 00001432: SWAP2 00001433: SWAP1 00001434: PUSH4 0xffffffff 00001439: AND 0000143a: JUMP 0000143b: JUMPDEST 0000143c: SWAP1 0000143d: POP 0000143e: PUSH2 0x1480 00001441: JUMP 00001442: JUMPDEST 00001443: PUSH2 0x147d 00001446: PUSH2 0x145a 00001449: PUSH1 0x04 0000144b: SLOAD 0000144c: DUP5 0000144d: PUSH2 0x1ce3 00001450: SWAP1 00001451: SWAP2 00001452: SWAP1 00001453: PUSH4 0xffffffff 00001458: AND 00001459: JUMP 0000145a: JUMPDEST 0000145b: PUSH2 0x146f 0000145e: DUP6 0000145f: PUSH1 0x04 00001461: SLOAD 00001462: PUSH2 0x1ce3 00001465: SWAP1 00001466: SWAP2 00001467: SWAP1 00001468: PUSH4 0xffffffff 0000146d: AND 0000146e: JUMP 0000146f: JUMPDEST 00001470: PUSH2 0x1c5b 00001473: SWAP1 00001474: SWAP2 00001475: SWAP1 00001476: PUSH4 0xffffffff 0000147b: AND 0000147c: JUMP 0000147d: JUMPDEST 0000147e: SWAP1 0000147f: POP 00001480: JUMPDEST 00001481: SWAP3 00001482: SWAP2 00001483: POP 00001484: POP 00001485: JUMP 00001486: JUMPDEST 00001487: PUSH1 0x07 00001489: PUSH1 0x20 0000148b: MSTORE 0000148c: DUP2 0000148d: PUSH1 0x00 0000148f: MSTORE 00001490: PUSH1 0x40 00001492: PUSH1 0x00 00001494: KECCAK256 00001495: PUSH1 0x20 00001497: MSTORE 00001498: DUP1 00001499: PUSH1 0x00 0000149b: MSTORE 0000149c: PUSH1 0x40 0000149e: PUSH1 0x00 000014a0: KECCAK256 000014a1: PUSH1 0x00 000014a3: SWAP2 000014a4: POP 000014a5: SWAP2 000014a6: POP 000014a7: POP 000014a8: DUP1 000014a9: PUSH1 0x00 000014ab: ADD 000014ac: SLOAD 000014ad: SWAP1 000014ae: DUP1 000014af: PUSH1 0x01 000014b1: ADD 000014b2: SLOAD 000014b3: SWAP1 000014b4: POP 000014b5: DUP3 000014b6: JUMP 000014b7: JUMPDEST 000014b8: PUSH2 0x14bf 000014bb: PUSH2 0x2048 000014be: JUMP 000014bf: JUMPDEST 000014c0: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000014d5: AND 000014d6: PUSH1 0x00 000014d8: DUP1 000014d9: SLOAD 000014da: SWAP1 000014db: PUSH2 0x0100 000014de: EXP 000014df: SWAP1 000014e0: DIV 000014e1: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000014f6: AND 000014f7: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 0000150c: AND 0000150d: EQ 0000150e: PUSH2 0x157f 00001511: JUMPI 00001512: PUSH1 0x40 00001514: MLOAD 00001515: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000 00001536: DUP2 00001537: MSTORE 00001538: PUSH1 0x04 0000153a: ADD 0000153b: DUP1 0000153c: DUP1 0000153d: PUSH1 0x20 0000153f: ADD 00001540: DUP3 00001541: DUP2 00001542: SUB 00001543: DUP3 00001544: MSTORE 00001545: PUSH1 0x20 00001547: DUP2 00001548: MSTORE 00001549: PUSH1 0x20 0000154b: ADD 0000154c: DUP1 0000154d: PUSH32 0x4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572 0000156e: DUP2 0000156f: MSTORE 00001570: POP 00001571: PUSH1 0x20 00001573: ADD 00001574: SWAP2 00001575: POP 00001576: POP 00001577: PUSH1 0x40 00001579: MLOAD 0000157a: DUP1 0000157b: SWAP2 0000157c: SUB 0000157d: SWAP1 0000157e: REVERT 0000157f: JUMPDEST 00001580: DUP1 00001581: ISZERO 00001582: PUSH2 0x158e 00001585: JUMPI 00001586: PUSH2 0x158d 00001589: PUSH2 0x0fb1 0000158c: JUMP 0000158d: JUMPDEST 0000158e: JUMPDEST 0000158f: PUSH1 0x00 00001591: PUSH1 0x09 00001593: SLOAD 00001594: NUMBER 00001595: GT 00001596: PUSH2 0x15a1 00001599: JUMPI 0000159a: PUSH1 0x09 0000159c: SLOAD 0000159d: PUSH2 0x15a3 000015a0: JUMP 000015a1: JUMPDEST 000015a2: NUMBER 000015a3: JUMPDEST 000015a4: SWAP1 000015a5: POP 000015a6: PUSH2 0x15ba 000015a9: DUP6 000015aa: PUSH1 0x08 000015ac: SLOAD 000015ad: PUSH2 0x1c5b 000015b0: SWAP1 000015b1: SWAP2 000015b2: SWAP1 000015b3: PUSH4 0xffffffff 000015b8: AND 000015b9: JUMP 000015ba: JUMPDEST 000015bb: PUSH1 0x08 000015bd: DUP2 000015be: SWAP1 000015bf: SSTORE 000015c0: POP 000015c1: PUSH1 0x06 000015c3: PUSH1 0x40 000015c5: MLOAD 000015c6: DUP1 000015c7: PUSH1 0xa0 000015c9: ADD 000015ca: PUSH1 0x40 000015cc: MSTORE 000015cd: DUP1 000015ce: DUP7 000015cf: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000015e4: AND 000015e5: DUP2 000015e6: MSTORE 000015e7: PUSH1 0x20 000015e9: ADD 000015ea: DUP8 000015eb: DUP2 000015ec: MSTORE 000015ed: PUSH1 0x20 000015ef: ADD 000015f0: DUP6 000015f1: DUP2 000015f2: MSTORE 000015f3: PUSH1 0x20 000015f5: ADD 000015f6: DUP4 000015f7: DUP2 000015f8: MSTORE 000015f9: PUSH1 0x20 000015fb: ADD 000015fc: PUSH1 0x00 000015fe: DUP2 000015ff: MSTORE 00001600: POP 00001601: SWAP1 00001602: DUP1 00001603: PUSH1 0x01 00001605: DUP2 00001606: SLOAD 00001607: ADD 00001608: DUP1 00001609: DUP3 0000160a: SSTORE 0000160b: DUP1 0000160c: SWAP2 0000160d: POP 0000160e: POP 0000160f: PUSH1 0x01 00001611: SWAP1 00001612: SUB 00001613: SWAP1 00001614: PUSH1 0x00 00001616: MSTORE 00001617: PUSH1 0x20 00001619: PUSH1 0x00 0000161b: KECCAK256 0000161c: SWAP1 0000161d: PUSH1 0x05 0000161f: MUL 00001620: ADD 00001621: PUSH1 0x00 00001623: SWAP1 00001624: SWAP2 00001625: SWAP1 00001626: SWAP2 00001627: SWAP1 00001628: SWAP2 00001629: POP 0000162a: PUSH1 0x00 0000162c: DUP3 0000162d: ADD 0000162e: MLOAD 0000162f: DUP2 00001630: PUSH1 0x00 00001632: ADD 00001633: PUSH1 0x00 00001635: PUSH2 0x0100 00001638: EXP 00001639: DUP2 0000163a: SLOAD 0000163b: DUP2 0000163c: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001651: MUL 00001652: NOT 00001653: AND 00001654: SWAP1 00001655: DUP4 00001656: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 0000166b: AND 0000166c: MUL 0000166d: OR 0000166e: SWAP1 0000166f: SSTORE 00001670: POP 00001671: PUSH1 0x20 00001673: DUP3 00001674: ADD 00001675: MLOAD 00001676: DUP2 00001677: PUSH1 0x01 00001679: ADD 0000167a: SSTORE 0000167b: PUSH1 0x40 0000167d: DUP3 0000167e: ADD 0000167f: MLOAD 00001680: DUP2 00001681: PUSH1 0x02 00001683: ADD 00001684: SSTORE 00001685: PUSH1 0x60 00001687: DUP3 00001688: ADD 00001689: MLOAD 0000168a: DUP2 0000168b: PUSH1 0x03 0000168d: ADD 0000168e: SSTORE 0000168f: PUSH1 0x80 00001691: DUP3 00001692: ADD 00001693: MLOAD 00001694: DUP2 00001695: PUSH1 0x04 00001697: ADD 00001698: SSTORE 00001699: POP 0000169a: POP 0000169b: POP 0000169c: POP 0000169d: POP 0000169e: POP 0000169f: POP 000016a0: JUMP 000016a1: JUMPDEST 000016a2: PUSH1 0x03 000016a4: PUSH1 0x00 000016a6: SWAP1 000016a7: SLOAD 000016a8: SWAP1 000016a9: PUSH2 0x0100 000016ac: EXP 000016ad: SWAP1 000016ae: DIV 000016af: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000016c4: AND 000016c5: DUP2 000016c6: JUMP 000016c7: JUMPDEST 000016c8: PUSH1 0x00 000016ca: PUSH1 0x06 000016cc: DUP4 000016cd: DUP2 000016ce: SLOAD 000016cf: DUP2 000016d0: LT 000016d1: PUSH2 0x16d6 000016d4: JUMPI 000016d5: INVALID 000016d6: JUMPDEST 000016d7: SWAP1 000016d8: PUSH1 0x00 000016da: MSTORE 000016db: PUSH1 0x20 000016dd: PUSH1 0x00 000016df: KECCAK256 000016e0: SWAP1 000016e1: PUSH1 0x05 000016e3: MUL 000016e4: ADD 000016e5: SWAP1 000016e6: POP 000016e7: PUSH1 0x00 000016e9: PUSH1 0x07 000016eb: PUSH1 0x00 000016ed: DUP6 000016ee: DUP2 000016ef: MSTORE 000016f0: PUSH1 0x20 000016f2: ADD 000016f3: SWAP1 000016f4: DUP2 000016f5: MSTORE 000016f6: PUSH1 0x20 000016f8: ADD 000016f9: PUSH1 0x00 000016fb: KECCAK256 000016fc: PUSH1 0x00 000016fe: CALLER 000016ff: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001714: AND 00001715: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 0000172a: AND 0000172b: DUP2 0000172c: MSTORE 0000172d: PUSH1 0x20 0000172f: ADD 00001730: SWAP1 00001731: DUP2 00001732: MSTORE 00001733: PUSH1 0x20 00001735: ADD 00001736: PUSH1 0x00 00001738: KECCAK256 00001739: SWAP1 0000173a: POP 0000173b: PUSH2 0x1743 0000173e: DUP5 0000173f: PUSH2 0x0c8e 00001742: JUMP 00001743: JUMPDEST 00001744: PUSH1 0x00 00001746: PUSH2 0x175c 00001749: DUP4 0000174a: PUSH1 0x02 0000174c: ADD 0000174d: SLOAD 0000174e: DUP6 0000174f: PUSH2 0x1c11 00001752: SWAP1 00001753: SWAP2 00001754: SWAP1 00001755: PUSH4 0xffffffff 0000175a: AND 0000175b: JUMP 0000175c: JUMPDEST 0000175d: SWAP1 0000175e: POP 0000175f: PUSH1 0x00 00001761: DUP3 00001762: PUSH1 0x00 00001764: ADD 00001765: SLOAD 00001766: GT 00001767: ISZERO 00001768: PUSH2 0x17cd 0000176b: JUMPI 0000176c: PUSH1 0x00 0000176e: PUSH2 0x17b5 00001771: DUP4 00001772: PUSH1 0x01 00001774: ADD 00001775: SLOAD 00001776: PUSH2 0x17a7 00001779: PUSH5 0xe8d4a51000 0000177f: PUSH2 0x1799 00001782: DUP9 00001783: PUSH1 0x04 00001785: ADD 00001786: SLOAD 00001787: DUP9 00001788: PUSH1 0x00 0000178a: ADD 0000178b: SLOAD 0000178c: PUSH2 0x1b8b 0000178f: SWAP1 00001790: SWAP2 00001791: SWAP1 00001792: PUSH4 0xffffffff 00001797: AND 00001798: JUMP 00001799: JUMPDEST 0000179a: PUSH2 0x1c11 0000179d: SWAP1 0000179e: SWAP2 0000179f: SWAP1 000017a0: PUSH4 0xffffffff 000017a5: AND 000017a6: JUMP 000017a7: JUMPDEST 000017a8: PUSH2 0x1ce3 000017ab: SWAP1 000017ac: SWAP2 000017ad: SWAP1 000017ae: PUSH4 0xffffffff 000017b3: AND 000017b4: JUMP 000017b5: JUMPDEST 000017b6: SWAP1 000017b7: POP 000017b8: PUSH1 0x00 000017ba: DUP2 000017bb: GT 000017bc: ISZERO 000017bd: PUSH2 0x17cb 000017c0: JUMPI 000017c1: PUSH2 0x17ca 000017c4: CALLER 000017c5: DUP3 000017c6: PUSH2 0x1d2d 000017c9: JUMP 000017ca: JUMPDEST 000017cb: JUMPDEST 000017cc: POP 000017cd: JUMPDEST 000017ce: PUSH1 0x00 000017d0: DUP5 000017d1: GT 000017d2: ISZERO 000017d3: PUSH2 0x18de 000017d6: JUMPI 000017d7: PUSH2 0x1839 000017da: CALLER 000017db: ADDRESS 000017dc: PUSH2 0x17ee 000017df: DUP5 000017e0: DUP9 000017e1: PUSH2 0x1ce3 000017e4: SWAP1 000017e5: SWAP2 000017e6: SWAP1 000017e7: PUSH4 0xffffffff 000017ec: AND 000017ed: JUMP 000017ee: JUMPDEST 000017ef: DUP7 000017f0: PUSH1 0x00 000017f2: ADD 000017f3: PUSH1 0x00 000017f5: SWAP1 000017f6: SLOAD 000017f7: SWAP1 000017f8: PUSH2 0x0100 000017fb: EXP 000017fc: SWAP1 000017fd: DIV 000017fe: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001813: AND 00001814: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001829: AND 0000182a: PUSH2 0x2050 0000182d: SWAP1 0000182e: SWAP4 0000182f: SWAP3 00001830: SWAP2 00001831: SWAP1 00001832: PUSH4 0xffffffff 00001837: AND 00001838: JUMP 00001839: JUMPDEST 0000183a: PUSH2 0x18ac 0000183d: CALLER 0000183e: PUSH1 0x02 00001840: PUSH1 0x00 00001842: SWAP1 00001843: SLOAD 00001844: SWAP1 00001845: PUSH2 0x0100 00001848: EXP 00001849: SWAP1 0000184a: DIV 0000184b: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001860: AND 00001861: DUP4 00001862: DUP7 00001863: PUSH1 0x00 00001865: ADD 00001866: PUSH1 0x00 00001868: SWAP1 00001869: SLOAD 0000186a: SWAP1 0000186b: PUSH2 0x0100 0000186e: EXP 0000186f: SWAP1 00001870: DIV 00001871: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001886: AND 00001887: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 0000189c: AND 0000189d: PUSH2 0x2050 000018a0: SWAP1 000018a1: SWAP4 000018a2: SWAP3 000018a3: SWAP2 000018a4: SWAP1 000018a5: PUSH4 0xffffffff 000018aa: AND 000018ab: JUMP 000018ac: JUMPDEST 000018ad: PUSH2 0x18d5 000018b0: PUSH2 0x18c2 000018b3: DUP3 000018b4: DUP7 000018b5: PUSH2 0x1ce3 000018b8: SWAP1 000018b9: SWAP2 000018ba: SWAP1 000018bb: PUSH4 0xffffffff 000018c0: AND 000018c1: JUMP 000018c2: JUMPDEST 000018c3: DUP4 000018c4: PUSH1 0x00 000018c6: ADD 000018c7: SLOAD 000018c8: PUSH2 0x1c5b 000018cb: SWAP1 000018cc: SWAP2 000018cd: SWAP1 000018ce: PUSH4 0xffffffff 000018d3: AND 000018d4: JUMP 000018d5: JUMPDEST 000018d6: DUP3 000018d7: PUSH1 0x00 000018d9: ADD 000018da: DUP2 000018db: SWAP1 000018dc: SSTORE 000018dd: POP 000018de: JUMPDEST 000018df: PUSH2 0x1910 000018e2: PUSH5 0xe8d4a51000 000018e8: PUSH2 0x1902 000018eb: DUP6 000018ec: PUSH1 0x04 000018ee: ADD 000018ef: SLOAD 000018f0: DUP6 000018f1: PUSH1 0x00 000018f3: ADD 000018f4: SLOAD 000018f5: PUSH2 0x1b8b 000018f8: SWAP1 000018f9: SWAP2 000018fa: SWAP1 000018fb: PUSH4 0xffffffff 00001900: AND 00001901: JUMP 00001902: JUMPDEST 00001903: PUSH2 0x1c11 00001906: SWAP1 00001907: SWAP2 00001908: SWAP1 00001909: PUSH4 0xffffffff 0000190e: AND 0000190f: JUMP 00001910: JUMPDEST 00001911: DUP3 00001912: PUSH1 0x01 00001914: ADD 00001915: DUP2 00001916: SWAP1 00001917: SSTORE 00001918: POP 00001919: DUP5 0000191a: CALLER 0000191b: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001930: AND 00001931: PUSH32 0x90890809c654f11d6e72a28fa60149770a0d11ec6c92319d6ceb2bb0a4ea1a15 00001952: PUSH2 0x1964 00001955: DUP5 00001956: DUP9 00001957: PUSH2 0x1ce3 0000195a: SWAP1 0000195b: SWAP2 0000195c: SWAP1 0000195d: PUSH4 0xffffffff 00001962: AND 00001963: JUMP 00001964: JUMPDEST 00001965: PUSH1 0x40 00001967: MLOAD 00001968: DUP1 00001969: DUP3 0000196a: DUP2 0000196b: MSTORE 0000196c: PUSH1 0x20 0000196e: ADD 0000196f: SWAP2 00001970: POP 00001971: POP 00001972: PUSH1 0x40 00001974: MLOAD 00001975: DUP1 00001976: SWAP2 00001977: SUB 00001978: SWAP1 00001979: LOG3 0000197a: POP 0000197b: POP 0000197c: POP 0000197d: POP 0000197e: POP 0000197f: JUMP 00001980: JUMPDEST 00001981: PUSH2 0x1988 00001984: PUSH2 0x2048 00001987: JUMP 00001988: JUMPDEST 00001989: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 0000199e: AND 0000199f: PUSH1 0x00 000019a1: DUP1 000019a2: SLOAD 000019a3: SWAP1 000019a4: PUSH2 0x0100 000019a7: EXP 000019a8: SWAP1 000019a9: DIV 000019aa: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000019bf: AND 000019c0: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000019d5: AND 000019d6: EQ 000019d7: PUSH2 0x1a48 000019da: JUMPI 000019db: PUSH1 0x40 000019dd: MLOAD 000019de: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000 000019ff: DUP2 00001a00: MSTORE 00001a01: PUSH1 0x04 00001a03: ADD 00001a04: DUP1 00001a05: DUP1 00001a06: PUSH1 0x20 00001a08: ADD 00001a09: DUP3 00001a0a: DUP2 00001a0b: SUB 00001a0c: DUP3 00001a0d: MSTORE 00001a0e: PUSH1 0x20 00001a10: DUP2 00001a11: MSTORE 00001a12: PUSH1 0x20 00001a14: ADD 00001a15: DUP1 00001a16: PUSH32 0x4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572 00001a37: DUP2 00001a38: MSTORE 00001a39: POP 00001a3a: PUSH1 0x20 00001a3c: ADD 00001a3d: SWAP2 00001a3e: POP 00001a3f: POP 00001a40: PUSH1 0x40 00001a42: MLOAD 00001a43: DUP1 00001a44: SWAP2 00001a45: SUB 00001a46: SWAP1 00001a47: REVERT 00001a48: JUMPDEST 00001a49: PUSH1 0x00 00001a4b: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001a60: AND 00001a61: DUP2 00001a62: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001a77: AND 00001a78: EQ 00001a79: ISZERO 00001a7a: PUSH2 0x1ace 00001a7d: JUMPI 00001a7e: PUSH1 0x40 00001a80: MLOAD 00001a81: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000 00001aa2: DUP2 00001aa3: MSTORE 00001aa4: PUSH1 0x04 00001aa6: ADD 00001aa7: DUP1 00001aa8: DUP1 00001aa9: PUSH1 0x20 00001aab: ADD 00001aac: DUP3 00001aad: DUP2 00001aae: SUB 00001aaf: DUP3 00001ab0: MSTORE 00001ab1: PUSH1 0x26 00001ab3: DUP2 00001ab4: MSTORE 00001ab5: PUSH1 0x20 00001ab7: ADD 00001ab8: DUP1 00001ab9: PUSH2 0x2627 00001abc: PUSH1 0x26 00001abe: SWAP2 00001abf: CODECOPY 00001ac0: PUSH1 0x40 00001ac2: ADD 00001ac3: SWAP2 00001ac4: POP 00001ac5: POP 00001ac6: PUSH1 0x40 00001ac8: MLOAD 00001ac9: DUP1 00001aca: SWAP2 00001acb: SUB 00001acc: SWAP1 00001acd: REVERT 00001ace: JUMPDEST 00001acf: DUP1 00001ad0: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001ae5: AND 00001ae6: PUSH1 0x00 00001ae8: DUP1 00001ae9: SLOAD 00001aea: SWAP1 00001aeb: PUSH2 0x0100 00001aee: EXP 00001aef: SWAP1 00001af0: DIV 00001af1: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001b06: AND 00001b07: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001b1c: AND 00001b1d: PUSH32 0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0 00001b3e: PUSH1 0x40 00001b40: MLOAD 00001b41: PUSH1 0x40 00001b43: MLOAD 00001b44: DUP1 00001b45: SWAP2 00001b46: SUB 00001b47: SWAP1 00001b48: LOG3 00001b49: DUP1 00001b4a: PUSH1 0x00 00001b4c: DUP1 00001b4d: PUSH2 0x0100 00001b50: EXP 00001b51: DUP2 00001b52: SLOAD 00001b53: DUP2 00001b54: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001b69: MUL 00001b6a: NOT 00001b6b: AND 00001b6c: SWAP1 00001b6d: DUP4 00001b6e: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001b83: AND 00001b84: MUL 00001b85: OR 00001b86: SWAP1 00001b87: SSTORE 00001b88: POP 00001b89: POP 00001b8a: JUMP 00001b8b: JUMPDEST 00001b8c: PUSH1 0x00 00001b8e: DUP1 00001b8f: DUP4 00001b90: EQ 00001b91: ISZERO 00001b92: PUSH2 0x1b9e 00001b95: JUMPI 00001b96: PUSH1 0x00 00001b98: SWAP1 00001b99: POP 00001b9a: PUSH2 0x1c0b 00001b9d: JUMP 00001b9e: JUMPDEST 00001b9f: PUSH1 0x00 00001ba1: DUP3 00001ba2: DUP5 00001ba3: MUL 00001ba4: SWAP1 00001ba5: POP 00001ba6: DUP3 00001ba7: DUP5 00001ba8: DUP3 00001ba9: DUP2 00001baa: PUSH2 0x1baf 00001bad: JUMPI 00001bae: INVALID 00001baf: JUMPDEST 00001bb0: DIV 00001bb1: EQ 00001bb2: PUSH2 0x1c06 00001bb5: JUMPI 00001bb6: PUSH1 0x40 00001bb8: MLOAD 00001bb9: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000 00001bda: DUP2 00001bdb: MSTORE 00001bdc: PUSH1 0x04 00001bde: ADD 00001bdf: DUP1 00001be0: DUP1 00001be1: PUSH1 0x20 00001be3: ADD 00001be4: DUP3 00001be5: DUP2 00001be6: SUB 00001be7: DUP3 00001be8: MSTORE 00001be9: PUSH1 0x21 00001beb: DUP2 00001bec: MSTORE 00001bed: PUSH1 0x20 00001bef: ADD 00001bf0: DUP1 00001bf1: PUSH2 0x2673 00001bf4: PUSH1 0x21 00001bf6: SWAP2 00001bf7: CODECOPY 00001bf8: PUSH1 0x40 00001bfa: ADD 00001bfb: SWAP2 00001bfc: POP 00001bfd: POP 00001bfe: PUSH1 0x40 00001c00: MLOAD 00001c01: DUP1 00001c02: SWAP2 00001c03: SUB 00001c04: SWAP1 00001c05: REVERT 00001c06: JUMPDEST 00001c07: DUP1 00001c08: SWAP2 00001c09: POP 00001c0a: POP 00001c0b: JUMPDEST 00001c0c: SWAP3 00001c0d: SWAP2 00001c0e: POP 00001c0f: POP 00001c10: JUMP 00001c11: JUMPDEST 00001c12: PUSH1 0x00 00001c14: PUSH2 0x1c53 00001c17: DUP4 00001c18: DUP4 00001c19: PUSH1 0x40 00001c1b: MLOAD 00001c1c: DUP1 00001c1d: PUSH1 0x40 00001c1f: ADD 00001c20: PUSH1 0x40 00001c22: MSTORE 00001c23: DUP1 00001c24: PUSH1 0x1a 00001c26: DUP2 00001c27: MSTORE 00001c28: PUSH1 0x20 00001c2a: ADD 00001c2b: PUSH32 0x536166654d6174683a206469766973696f6e206279207a65726f000000000000 00001c4c: DUP2 00001c4d: MSTORE 00001c4e: POP 00001c4f: PUSH2 0x2111 00001c52: JUMP 00001c53: JUMPDEST 00001c54: SWAP1 00001c55: POP 00001c56: SWAP3 00001c57: SWAP2 00001c58: POP 00001c59: POP 00001c5a: JUMP 00001c5b: JUMPDEST 00001c5c: PUSH1 0x00 00001c5e: DUP1 00001c5f: DUP3 00001c60: DUP5 00001c61: ADD 00001c62: SWAP1 00001c63: POP 00001c64: DUP4 00001c65: DUP2 00001c66: LT 00001c67: ISZERO 00001c68: PUSH2 0x1cd9 00001c6b: JUMPI 00001c6c: PUSH1 0x40 00001c6e: MLOAD 00001c6f: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000 00001c90: DUP2 00001c91: MSTORE 00001c92: PUSH1 0x04 00001c94: ADD 00001c95: DUP1 00001c96: DUP1 00001c97: PUSH1 0x20 00001c99: ADD 00001c9a: DUP3 00001c9b: DUP2 00001c9c: SUB 00001c9d: DUP3 00001c9e: MSTORE 00001c9f: PUSH1 0x1b 00001ca1: DUP2 00001ca2: MSTORE 00001ca3: PUSH1 0x20 00001ca5: ADD 00001ca6: DUP1 00001ca7: PUSH32 0x536166654d6174683a206164646974696f6e206f766572666c6f770000000000 00001cc8: DUP2 00001cc9: MSTORE 00001cca: POP 00001ccb: PUSH1 0x20 00001ccd: ADD 00001cce: SWAP2 00001ccf: POP 00001cd0: POP 00001cd1: PUSH1 0x40 00001cd3: MLOAD 00001cd4: DUP1 00001cd5: SWAP2 00001cd6: SUB 00001cd7: SWAP1 00001cd8: REVERT 00001cd9: JUMPDEST 00001cda: DUP1 00001cdb: SWAP2 00001cdc: POP 00001cdd: POP 00001cde: SWAP3 00001cdf: SWAP2 00001ce0: POP 00001ce1: POP 00001ce2: JUMP 00001ce3: JUMPDEST 00001ce4: PUSH1 0x00 00001ce6: PUSH2 0x1d25 00001ce9: DUP4 00001cea: DUP4 00001ceb: PUSH1 0x40 00001ced: MLOAD 00001cee: DUP1 00001cef: PUSH1 0x40 00001cf1: ADD 00001cf2: PUSH1 0x40 00001cf4: MSTORE 00001cf5: DUP1 00001cf6: PUSH1 0x1e 00001cf8: DUP2 00001cf9: MSTORE 00001cfa: PUSH1 0x20 00001cfc: ADD 00001cfd: PUSH32 0x536166654d6174683a207375627472616374696f6e206f766572666c6f770000 00001d1e: DUP2 00001d1f: MSTORE 00001d20: POP 00001d21: PUSH2 0x21d7 00001d24: JUMP 00001d25: JUMPDEST 00001d26: SWAP1 00001d27: POP 00001d28: SWAP3 00001d29: SWAP2 00001d2a: POP 00001d2b: POP 00001d2c: JUMP 00001d2d: JUMPDEST 00001d2e: PUSH1 0x00 00001d30: PUSH1 0x03 00001d32: PUSH1 0x00 00001d34: SWAP1 00001d35: SLOAD 00001d36: SWAP1 00001d37: PUSH2 0x0100 00001d3a: EXP 00001d3b: SWAP1 00001d3c: DIV 00001d3d: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001d52: AND 00001d53: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001d68: AND 00001d69: PUSH4 0x70a08231 00001d6e: ADDRESS 00001d6f: PUSH1 0x40 00001d71: MLOAD 00001d72: DUP3 00001d73: PUSH4 0xffffffff 00001d78: AND 00001d79: PUSH1 0xe0 00001d7b: SHL 00001d7c: DUP2 00001d7d: MSTORE 00001d7e: PUSH1 0x04 00001d80: ADD 00001d81: DUP1 00001d82: DUP3 00001d83: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001d98: AND 00001d99: DUP2 00001d9a: MSTORE 00001d9b: PUSH1 0x20 00001d9d: ADD 00001d9e: SWAP2 00001d9f: POP 00001da0: POP 00001da1: PUSH1 0x20 00001da3: PUSH1 0x40 00001da5: MLOAD 00001da6: DUP1 00001da7: DUP4 00001da8: SUB 00001da9: DUP2 00001daa: DUP7 00001dab: DUP1 00001dac: EXTCODESIZE 00001dad: ISZERO 00001dae: DUP1 00001daf: ISZERO 00001db0: PUSH2 0x1db8 00001db3: JUMPI 00001db4: PUSH1 0x00 00001db6: DUP1 00001db7: REVERT 00001db8: JUMPDEST 00001db9: POP 00001dba: GAS 00001dbb: STATICCALL 00001dbc: ISZERO 00001dbd: DUP1 00001dbe: ISZERO 00001dbf: PUSH2 0x1dcc 00001dc2: JUMPI 00001dc3: RETURNDATASIZE 00001dc4: PUSH1 0x00 00001dc6: DUP1 00001dc7: RETURNDATACOPY 00001dc8: RETURNDATASIZE 00001dc9: PUSH1 0x00 00001dcb: REVERT 00001dcc: JUMPDEST 00001dcd: POP 00001dce: POP 00001dcf: POP 00001dd0: POP 00001dd1: PUSH1 0x40 00001dd3: MLOAD 00001dd4: RETURNDATASIZE 00001dd5: PUSH1 0x20 00001dd7: DUP2 00001dd8: LT 00001dd9: ISZERO 00001dda: PUSH2 0x1de2 00001ddd: JUMPI 00001dde: PUSH1 0x00 00001de0: DUP1 00001de1: REVERT 00001de2: JUMPDEST 00001de3: DUP2 00001de4: ADD 00001de5: SWAP1 00001de6: DUP1 00001de7: DUP1 00001de8: MLOAD 00001de9: SWAP1 00001dea: PUSH1 0x20 00001dec: ADD 00001ded: SWAP1 00001dee: SWAP3 00001def: SWAP2 00001df0: SWAP1 00001df1: POP 00001df2: POP 00001df3: POP 00001df4: SWAP1 00001df5: POP 00001df6: DUP1 00001df7: DUP3 00001df8: GT 00001df9: ISZERO 00001dfa: PUSH2 0x1ed1 00001dfd: JUMPI 00001dfe: PUSH1 0x03 00001e00: PUSH1 0x00 00001e02: SWAP1 00001e03: SLOAD 00001e04: SWAP1 00001e05: PUSH2 0x0100 00001e08: EXP 00001e09: SWAP1 00001e0a: DIV 00001e0b: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001e20: AND 00001e21: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001e36: AND 00001e37: PUSH4 0xa9059cbb 00001e3c: DUP5 00001e3d: DUP4 00001e3e: PUSH1 0x40 00001e40: MLOAD 00001e41: DUP4 00001e42: PUSH4 0xffffffff 00001e47: AND 00001e48: PUSH1 0xe0 00001e4a: SHL 00001e4b: DUP2 00001e4c: MSTORE 00001e4d: PUSH1 0x04 00001e4f: ADD 00001e50: DUP1 00001e51: DUP4 00001e52: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001e67: AND 00001e68: DUP2 00001e69: MSTORE 00001e6a: PUSH1 0x20 00001e6c: ADD 00001e6d: DUP3 00001e6e: DUP2 00001e6f: MSTORE 00001e70: PUSH1 0x20 00001e72: ADD 00001e73: SWAP3 00001e74: POP 00001e75: POP 00001e76: POP 00001e77: PUSH1 0x20 00001e79: PUSH1 0x40 00001e7b: MLOAD 00001e7c: DUP1 00001e7d: DUP4 00001e7e: SUB 00001e7f: DUP2 00001e80: PUSH1 0x00 00001e82: DUP8 00001e83: DUP1 00001e84: EXTCODESIZE 00001e85: ISZERO 00001e86: DUP1 00001e87: ISZERO 00001e88: PUSH2 0x1e90 00001e8b: JUMPI 00001e8c: PUSH1 0x00 00001e8e: DUP1 00001e8f: REVERT 00001e90: JUMPDEST 00001e91: POP 00001e92: GAS 00001e93: CALL 00001e94: ISZERO 00001e95: DUP1 00001e96: ISZERO 00001e97: PUSH2 0x1ea4 00001e9a: JUMPI 00001e9b: RETURNDATASIZE 00001e9c: PUSH1 0x00 00001e9e: DUP1 00001e9f: RETURNDATACOPY 00001ea0: RETURNDATASIZE 00001ea1: PUSH1 0x00 00001ea3: REVERT 00001ea4: JUMPDEST 00001ea5: POP 00001ea6: POP 00001ea7: POP 00001ea8: POP 00001ea9: PUSH1 0x40 00001eab: MLOAD 00001eac: RETURNDATASIZE 00001ead: PUSH1 0x20 00001eaf: DUP2 00001eb0: LT 00001eb1: ISZERO 00001eb2: PUSH2 0x1eba 00001eb5: JUMPI 00001eb6: PUSH1 0x00 00001eb8: DUP1 00001eb9: REVERT 00001eba: JUMPDEST 00001ebb: DUP2 00001ebc: ADD 00001ebd: SWAP1 00001ebe: DUP1 00001ebf: DUP1 00001ec0: MLOAD 00001ec1: SWAP1 00001ec2: PUSH1 0x20 00001ec4: ADD 00001ec5: SWAP1 00001ec6: SWAP3 00001ec7: SWAP2 00001ec8: SWAP1 00001ec9: POP 00001eca: POP 00001ecb: POP 00001ecc: POP 00001ecd: PUSH2 0x1fa1 00001ed0: JUMP 00001ed1: JUMPDEST 00001ed2: PUSH1 0x03 00001ed4: PUSH1 0x00 00001ed6: SWAP1 00001ed7: SLOAD 00001ed8: SWAP1 00001ed9: PUSH2 0x0100 00001edc: EXP 00001edd: SWAP1 00001ede: DIV 00001edf: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001ef4: AND 00001ef5: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001f0a: AND 00001f0b: PUSH4 0xa9059cbb 00001f10: DUP5 00001f11: DUP5 00001f12: PUSH1 0x40 00001f14: MLOAD 00001f15: DUP4 00001f16: PUSH4 0xffffffff 00001f1b: AND 00001f1c: PUSH1 0xe0 00001f1e: SHL 00001f1f: DUP2 00001f20: MSTORE 00001f21: PUSH1 0x04 00001f23: ADD 00001f24: DUP1 00001f25: DUP4 00001f26: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001f3b: AND 00001f3c: DUP2 00001f3d: MSTORE 00001f3e: PUSH1 0x20 00001f40: ADD 00001f41: DUP3 00001f42: DUP2 00001f43: MSTORE 00001f44: PUSH1 0x20 00001f46: ADD 00001f47: SWAP3 00001f48: POP 00001f49: POP 00001f4a: POP 00001f4b: PUSH1 0x20 00001f4d: PUSH1 0x40 00001f4f: MLOAD 00001f50: DUP1 00001f51: DUP4 00001f52: SUB 00001f53: DUP2 00001f54: PUSH1 0x00 00001f56: DUP8 00001f57: DUP1 00001f58: EXTCODESIZE 00001f59: ISZERO 00001f5a: DUP1 00001f5b: ISZERO 00001f5c: PUSH2 0x1f64 00001f5f: JUMPI 00001f60: PUSH1 0x00 00001f62: DUP1 00001f63: REVERT 00001f64: JUMPDEST 00001f65: POP 00001f66: GAS 00001f67: CALL 00001f68: ISZERO 00001f69: DUP1 00001f6a: ISZERO 00001f6b: PUSH2 0x1f78 00001f6e: JUMPI 00001f6f: RETURNDATASIZE 00001f70: PUSH1 0x00 00001f72: DUP1 00001f73: RETURNDATACOPY 00001f74: RETURNDATASIZE 00001f75: PUSH1 0x00 00001f77: REVERT 00001f78: JUMPDEST 00001f79: POP 00001f7a: POP 00001f7b: POP 00001f7c: POP 00001f7d: PUSH1 0x40 00001f7f: MLOAD 00001f80: RETURNDATASIZE 00001f81: PUSH1 0x20 00001f83: DUP2 00001f84: LT 00001f85: ISZERO 00001f86: PUSH2 0x1f8e 00001f89: JUMPI 00001f8a: PUSH1 0x00 00001f8c: DUP1 00001f8d: REVERT 00001f8e: JUMPDEST 00001f8f: DUP2 00001f90: ADD 00001f91: SWAP1 00001f92: DUP1 00001f93: DUP1 00001f94: MLOAD 00001f95: SWAP1 00001f96: PUSH1 0x20 00001f98: ADD 00001f99: SWAP1 00001f9a: SWAP3 00001f9b: SWAP2 00001f9c: SWAP1 00001f9d: POP 00001f9e: POP 00001f9f: POP 00001fa0: POP 00001fa1: JUMPDEST 00001fa2: POP 00001fa3: POP 00001fa4: POP 00001fa5: JUMP 00001fa6: JUMPDEST 00001fa7: PUSH2 0x2043 00001faa: DUP4 00001fab: PUSH4 0xa9059cbb 00001fb0: PUSH1 0xe0 00001fb2: SHL 00001fb3: DUP5 00001fb4: DUP5 00001fb5: PUSH1 0x40 00001fb7: MLOAD 00001fb8: PUSH1 0x24 00001fba: ADD 00001fbb: DUP1 00001fbc: DUP4 00001fbd: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001fd2: AND 00001fd3: DUP2 00001fd4: MSTORE 00001fd5: PUSH1 0x20 00001fd7: ADD 00001fd8: DUP3 00001fd9: DUP2 00001fda: MSTORE 00001fdb: PUSH1 0x20 00001fdd: ADD 00001fde: SWAP3 00001fdf: POP 00001fe0: POP 00001fe1: POP 00001fe2: PUSH1 0x40 00001fe4: MLOAD 00001fe5: PUSH1 0x20 00001fe7: DUP2 00001fe8: DUP4 00001fe9: SUB 00001fea: SUB 00001feb: DUP2 00001fec: MSTORE 00001fed: SWAP1 00001fee: PUSH1 0x40 00001ff0: MSTORE 00001ff1: SWAP1 00001ff2: PUSH28 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffff 0000200f: NOT 00002010: AND 00002011: PUSH1 0x20 00002013: DUP3 00002014: ADD 00002015: DUP1 00002016: MLOAD 00002017: PUSH28 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffff 00002034: DUP4 00002035: DUP2 00002036: DUP4 00002037: AND 00002038: OR 00002039: DUP4 0000203a: MSTORE 0000203b: POP 0000203c: POP 0000203d: POP 0000203e: POP 0000203f: PUSH2 0x2297 00002042: JUMP 00002043: JUMPDEST 00002044: POP 00002045: POP 00002046: POP 00002047: JUMP 00002048: JUMPDEST 00002049: PUSH1 0x00 0000204b: CALLER 0000204c: SWAP1 0000204d: POP 0000204e: SWAP1 0000204f: JUMP 00002050: JUMPDEST 00002051: PUSH2 0x210b 00002054: DUP5 00002055: PUSH4 0x23b872dd 0000205a: PUSH1 0xe0 0000205c: SHL 0000205d: DUP6 0000205e: DUP6 0000205f: DUP6 00002060: PUSH1 0x40 00002062: MLOAD 00002063: PUSH1 0x24 00002065: ADD 00002066: DUP1 00002067: DUP5 00002068: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 0000207d: AND 0000207e: DUP2 0000207f: MSTORE 00002080: PUSH1 0x20 00002082: ADD 00002083: DUP4 00002084: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00002099: AND 0000209a: DUP2 0000209b: MSTORE 0000209c: PUSH1 0x20 0000209e: ADD 0000209f: DUP3 000020a0: DUP2 000020a1: MSTORE 000020a2: PUSH1 0x20 000020a4: ADD 000020a5: SWAP4 000020a6: POP 000020a7: POP 000020a8: POP 000020a9: POP 000020aa: PUSH1 0x40 000020ac: MLOAD 000020ad: PUSH1 0x20 000020af: DUP2 000020b0: DUP4 000020b1: SUB 000020b2: SUB 000020b3: DUP2 000020b4: MSTORE 000020b5: SWAP1 000020b6: PUSH1 0x40 000020b8: MSTORE 000020b9: SWAP1 000020ba: PUSH28 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000020d7: NOT 000020d8: AND 000020d9: PUSH1 0x20 000020db: DUP3 000020dc: ADD 000020dd: DUP1 000020de: MLOAD 000020df: PUSH28 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000020fc: DUP4 000020fd: DUP2 000020fe: DUP4 000020ff: AND 00002100: OR 00002101: DUP4 00002102: MSTORE 00002103: POP 00002104: POP 00002105: POP 00002106: POP 00002107: PUSH2 0x2297 0000210a: JUMP 0000210b: JUMPDEST 0000210c: POP 0000210d: POP 0000210e: POP 0000210f: POP 00002110: JUMP 00002111: JUMPDEST 00002112: PUSH1 0x00 00002114: DUP1 00002115: DUP4 00002116: GT 00002117: DUP3 00002118: SWAP1 00002119: PUSH2 0x21bd 0000211c: JUMPI 0000211d: PUSH1 0x40 0000211f: MLOAD 00002120: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000 00002141: DUP2 00002142: MSTORE 00002143: PUSH1 0x04 00002145: ADD 00002146: DUP1 00002147: DUP1 00002148: PUSH1 0x20 0000214a: ADD 0000214b: DUP3 0000214c: DUP2 0000214d: SUB 0000214e: DUP3 0000214f: MSTORE 00002150: DUP4 00002151: DUP2 00002152: DUP2 00002153: MLOAD 00002154: DUP2 00002155: MSTORE 00002156: PUSH1 0x20 00002158: ADD 00002159: SWAP2 0000215a: POP 0000215b: DUP1 0000215c: MLOAD 0000215d: SWAP1 0000215e: PUSH1 0x20 00002160: ADD 00002161: SWAP1 00002162: DUP1 00002163: DUP4 00002164: DUP4 00002165: PUSH1 0x00 00002167: JUMPDEST 00002168: DUP4 00002169: DUP2 0000216a: LT 0000216b: ISZERO 0000216c: PUSH2 0x2182 0000216f: JUMPI 00002170: DUP1 00002171: DUP3 00002172: ADD 00002173: MLOAD 00002174: DUP2 00002175: DUP5 00002176: ADD 00002177: MSTORE 00002178: PUSH1 0x20 0000217a: DUP2 0000217b: ADD 0000217c: SWAP1 0000217d: POP 0000217e: PUSH2 0x2167 00002181: JUMP 00002182: JUMPDEST 00002183: POP 00002184: POP 00002185: POP 00002186: POP 00002187: SWAP1 00002188: POP 00002189: SWAP1 0000218a: DUP2 0000218b: ADD 0000218c: SWAP1 0000218d: PUSH1 0x1f 0000218f: AND 00002190: DUP1 00002191: ISZERO 00002192: PUSH2 0x21af 00002195: JUMPI 00002196: DUP1 00002197: DUP3 00002198: SUB 00002199: DUP1 0000219a: MLOAD 0000219b: PUSH1 0x01 0000219d: DUP4 0000219e: PUSH1 0x20 000021a0: SUB 000021a1: PUSH2 0x0100 000021a4: EXP 000021a5: SUB 000021a6: NOT 000021a7: AND 000021a8: DUP2 000021a9: MSTORE 000021aa: PUSH1 0x20 000021ac: ADD 000021ad: SWAP2 000021ae: POP 000021af: JUMPDEST 000021b0: POP 000021b1: SWAP3 000021b2: POP 000021b3: POP 000021b4: POP 000021b5: PUSH1 0x40 000021b7: MLOAD 000021b8: DUP1 000021b9: SWAP2 000021ba: SUB 000021bb: SWAP1 000021bc: REVERT 000021bd: JUMPDEST 000021be: POP 000021bf: PUSH1 0x00 000021c1: DUP4 000021c2: DUP6 000021c3: DUP2 000021c4: PUSH2 0x21c9 000021c7: JUMPI 000021c8: INVALID 000021c9: JUMPDEST 000021ca: DIV 000021cb: SWAP1 000021cc: POP 000021cd: DUP1 000021ce: SWAP2 000021cf: POP 000021d0: POP 000021d1: SWAP4 000021d2: SWAP3 000021d3: POP 000021d4: POP 000021d5: POP 000021d6: JUMP 000021d7: JUMPDEST 000021d8: PUSH1 0x00 000021da: DUP4 000021db: DUP4 000021dc: GT 000021dd: ISZERO 000021de: DUP3 000021df: SWAP1 000021e0: PUSH2 0x2284 000021e3: JUMPI 000021e4: PUSH1 0x40 000021e6: MLOAD 000021e7: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000 00002208: DUP2 00002209: MSTORE 0000220a: PUSH1 0x04 0000220c: ADD 0000220d: DUP1 0000220e: DUP1 0000220f: PUSH1 0x20 00002211: ADD 00002212: DUP3 00002213: DUP2 00002214: SUB 00002215: DUP3 00002216: MSTORE 00002217: DUP4 00002218: DUP2 00002219: DUP2 0000221a: MLOAD 0000221b: DUP2 0000221c: MSTORE 0000221d: PUSH1 0x20 0000221f: ADD 00002220: SWAP2 00002221: POP 00002222: DUP1 00002223: MLOAD 00002224: SWAP1 00002225: PUSH1 0x20 00002227: ADD 00002228: SWAP1 00002229: DUP1 0000222a: DUP4 0000222b: DUP4 0000222c: PUSH1 0x00 0000222e: JUMPDEST 0000222f: DUP4 00002230: DUP2 00002231: LT 00002232: ISZERO 00002233: PUSH2 0x2249 00002236: JUMPI 00002237: DUP1 00002238: DUP3 00002239: ADD 0000223a: MLOAD 0000223b: DUP2 0000223c: DUP5 0000223d: ADD 0000223e: MSTORE 0000223f: PUSH1 0x20 00002241: DUP2 00002242: ADD 00002243: SWAP1 00002244: POP 00002245: PUSH2 0x222e 00002248: JUMP 00002249: JUMPDEST 0000224a: POP 0000224b: POP 0000224c: POP 0000224d: POP 0000224e: SWAP1 0000224f: POP 00002250: SWAP1 00002251: DUP2 00002252: ADD 00002253: SWAP1 00002254: PUSH1 0x1f 00002256: AND 00002257: DUP1 00002258: ISZERO 00002259: PUSH2 0x2276 0000225c: JUMPI 0000225d: DUP1 0000225e: DUP3 0000225f: SUB 00002260: DUP1 00002261: MLOAD 00002262: PUSH1 0x01 00002264: DUP4 00002265: PUSH1 0x20 00002267: SUB 00002268: PUSH2 0x0100 0000226b: EXP 0000226c: SUB 0000226d: NOT 0000226e: AND 0000226f: DUP2 00002270: MSTORE 00002271: PUSH1 0x20 00002273: ADD 00002274: SWAP2 00002275: POP 00002276: JUMPDEST 00002277: POP 00002278: SWAP3 00002279: POP 0000227a: POP 0000227b: POP 0000227c: PUSH1 0x40 0000227e: MLOAD 0000227f: DUP1 00002280: SWAP2 00002281: SUB 00002282: SWAP1 00002283: REVERT 00002284: JUMPDEST 00002285: POP 00002286: PUSH1 0x00 00002288: DUP4 00002289: DUP6 0000228a: SUB 0000228b: SWAP1 0000228c: POP 0000228d: DUP1 0000228e: SWAP2 0000228f: POP 00002290: POP 00002291: SWAP4 00002292: SWAP3 00002293: POP 00002294: POP 00002295: POP 00002296: JUMP 00002297: JUMPDEST 00002298: PUSH1 0x60 0000229a: PUSH2 0x22f9 0000229d: DUP3 0000229e: PUSH1 0x40 000022a0: MLOAD 000022a1: DUP1 000022a2: PUSH1 0x40 000022a4: ADD 000022a5: PUSH1 0x40 000022a7: MSTORE 000022a8: DUP1 000022a9: PUSH1 0x20 000022ab: DUP2 000022ac: MSTORE 000022ad: PUSH1 0x20 000022af: ADD 000022b0: PUSH32 0x5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564 000022d1: DUP2 000022d2: MSTORE 000022d3: POP 000022d4: DUP6 000022d5: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000022ea: AND 000022eb: PUSH2 0x2386 000022ee: SWAP1 000022ef: SWAP3 000022f0: SWAP2 000022f1: SWAP1 000022f2: PUSH4 0xffffffff 000022f7: AND 000022f8: JUMP 000022f9: JUMPDEST 000022fa: SWAP1 000022fb: POP 000022fc: PUSH1 0x00 000022fe: DUP2 000022ff: MLOAD 00002300: GT 00002301: ISZERO 00002302: PUSH2 0x2381 00002305: JUMPI 00002306: DUP1 00002307: DUP1 00002308: PUSH1 0x20 0000230a: ADD 0000230b: SWAP1 0000230c: MLOAD 0000230d: PUSH1 0x20 0000230f: DUP2 00002310: LT 00002311: ISZERO 00002312: PUSH2 0x231a 00002315: JUMPI 00002316: PUSH1 0x00 00002318: DUP1 00002319: REVERT 0000231a: JUMPDEST 0000231b: DUP2 0000231c: ADD 0000231d: SWAP1 0000231e: DUP1 0000231f: DUP1 00002320: MLOAD 00002321: SWAP1 00002322: PUSH1 0x20 00002324: ADD 00002325: SWAP1 00002326: SWAP3 00002327: SWAP2 00002328: SWAP1 00002329: POP 0000232a: POP 0000232b: POP 0000232c: PUSH2 0x2380 0000232f: JUMPI 00002330: PUSH1 0x40 00002332: MLOAD 00002333: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000 00002354: DUP2 00002355: MSTORE 00002356: PUSH1 0x04 00002358: ADD 00002359: DUP1 0000235a: DUP1 0000235b: PUSH1 0x20 0000235d: ADD 0000235e: DUP3 0000235f: DUP2 00002360: SUB 00002361: DUP3 00002362: MSTORE 00002363: PUSH1 0x2a 00002365: DUP2 00002366: MSTORE 00002367: PUSH1 0x20 00002369: ADD 0000236a: DUP1 0000236b: PUSH2 0x2694 0000236e: PUSH1 0x2a 00002370: SWAP2 00002371: CODECOPY 00002372: PUSH1 0x40 00002374: ADD 00002375: SWAP2 00002376: POP 00002377: POP 00002378: PUSH1 0x40 0000237a: MLOAD 0000237b: DUP1 0000237c: SWAP2 0000237d: SUB 0000237e: SWAP1 0000237f: REVERT 00002380: JUMPDEST 00002381: JUMPDEST 00002382: POP 00002383: POP 00002384: POP 00002385: JUMP 00002386: JUMPDEST 00002387: PUSH1 0x60 00002389: PUSH2 0x2395 0000238c: DUP5 0000238d: DUP5 0000238e: PUSH1 0x00 00002390: DUP6 00002391: PUSH2 0x239e 00002394: JUMP 00002395: JUMPDEST 00002396: SWAP1 00002397: POP 00002398: SWAP4 00002399: SWAP3 0000239a: POP 0000239b: POP 0000239c: POP 0000239d: JUMP 0000239e: JUMPDEST 0000239f: PUSH1 0x60 000023a1: DUP3 000023a2: SELFBALANCE 000023a3: LT 000023a4: ISZERO 000023a5: PUSH2 0x23f9 000023a8: JUMPI 000023a9: PUSH1 0x40 000023ab: MLOAD 000023ac: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000 000023cd: DUP2 000023ce: MSTORE 000023cf: PUSH1 0x04 000023d1: ADD 000023d2: DUP1 000023d3: DUP1 000023d4: PUSH1 0x20 000023d6: ADD 000023d7: DUP3 000023d8: DUP2 000023d9: SUB 000023da: DUP3 000023db: MSTORE 000023dc: PUSH1 0x26 000023de: DUP2 000023df: MSTORE 000023e0: PUSH1 0x20 000023e2: ADD 000023e3: DUP1 000023e4: PUSH2 0x264d 000023e7: PUSH1 0x26 000023e9: SWAP2 000023ea: CODECOPY 000023eb: PUSH1 0x40 000023ed: ADD 000023ee: SWAP2 000023ef: POP 000023f0: POP 000023f1: PUSH1 0x40 000023f3: MLOAD 000023f4: DUP1 000023f5: SWAP2 000023f6: SUB 000023f7: SWAP1 000023f8: REVERT 000023f9: JUMPDEST 000023fa: PUSH2 0x2402 000023fd: DUP6 000023fe: PUSH2 0x2547 00002401: JUMP 00002402: JUMPDEST 00002403: PUSH2 0x2474 00002406: JUMPI 00002407: PUSH1 0x40 00002409: MLOAD 0000240a: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000 0000242b: DUP2 0000242c: MSTORE 0000242d: PUSH1 0x04 0000242f: ADD 00002430: DUP1 00002431: DUP1 00002432: PUSH1 0x20 00002434: ADD 00002435: DUP3 00002436: DUP2 00002437: SUB 00002438: DUP3 00002439: MSTORE 0000243a: PUSH1 0x1d 0000243c: DUP2 0000243d: MSTORE 0000243e: PUSH1 0x20 00002440: ADD 00002441: DUP1 00002442: PUSH32 0x416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000 00002463: DUP2 00002464: MSTORE 00002465: POP 00002466: PUSH1 0x20 00002468: ADD 00002469: SWAP2 0000246a: POP 0000246b: POP 0000246c: PUSH1 0x40 0000246e: MLOAD 0000246f: DUP1 00002470: SWAP2 00002471: SUB 00002472: SWAP1 00002473: REVERT 00002474: JUMPDEST 00002475: PUSH1 0x00 00002477: PUSH1 0x60 00002479: DUP7 0000247a: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 0000248f: AND 00002490: DUP6 00002491: DUP8 00002492: PUSH1 0x40 00002494: MLOAD 00002495: DUP1 00002496: DUP3 00002497: DUP1 00002498: MLOAD 00002499: SWAP1 0000249a: PUSH1 0x20 0000249c: ADD 0000249d: SWAP1 0000249e: DUP1 0000249f: DUP4 000024a0: DUP4 000024a1: JUMPDEST 000024a2: PUSH1 0x20 000024a4: DUP4 000024a5: LT 000024a6: PUSH2 0x24c4 000024a9: JUMPI 000024aa: DUP1 000024ab: MLOAD 000024ac: DUP3 000024ad: MSTORE 000024ae: PUSH1 0x20 000024b0: DUP3 000024b1: ADD 000024b2: SWAP2 000024b3: POP 000024b4: PUSH1 0x20 000024b6: DUP2 000024b7: ADD 000024b8: SWAP1 000024b9: POP 000024ba: PUSH1 0x20 000024bc: DUP4 000024bd: SUB 000024be: SWAP3 000024bf: POP 000024c0: PUSH2 0x24a1 000024c3: JUMP 000024c4: JUMPDEST 000024c5: PUSH1 0x01 000024c7: DUP4 000024c8: PUSH1 0x20 000024ca: SUB 000024cb: PUSH2 0x0100 000024ce: EXP 000024cf: SUB 000024d0: DUP1 000024d1: NOT 000024d2: DUP3 000024d3: MLOAD 000024d4: AND 000024d5: DUP2 000024d6: DUP5 000024d7: MLOAD 000024d8: AND 000024d9: DUP1 000024da: DUP3 000024db: OR 000024dc: DUP6 000024dd: MSTORE 000024de: POP 000024df: POP 000024e0: POP 000024e1: POP 000024e2: POP 000024e3: POP 000024e4: SWAP1 000024e5: POP 000024e6: ADD 000024e7: SWAP2 000024e8: POP 000024e9: POP 000024ea: PUSH1 0x00 000024ec: PUSH1 0x40 000024ee: MLOAD 000024ef: DUP1 000024f0: DUP4 000024f1: SUB 000024f2: DUP2 000024f3: DUP6 000024f4: DUP8 000024f5: GAS 000024f6: CALL 000024f7: SWAP3 000024f8: POP 000024f9: POP 000024fa: POP 000024fb: RETURNDATASIZE 000024fc: DUP1 000024fd: PUSH1 0x00 000024ff: DUP2 00002500: EQ 00002501: PUSH2 0x2526 00002504: JUMPI 00002505: PUSH1 0x40 00002507: MLOAD 00002508: SWAP2 00002509: POP 0000250a: PUSH1 0x1f 0000250c: NOT 0000250d: PUSH1 0x3f 0000250f: RETURNDATASIZE 00002510: ADD 00002511: AND 00002512: DUP3 00002513: ADD 00002514: PUSH1 0x40 00002516: MSTORE 00002517: RETURNDATASIZE 00002518: DUP3 00002519: MSTORE 0000251a: RETURNDATASIZE 0000251b: PUSH1 0x00 0000251d: PUSH1 0x20 0000251f: DUP5 00002520: ADD 00002521: RETURNDATACOPY 00002522: PUSH2 0x252b 00002525: JUMP 00002526: JUMPDEST 00002527: PUSH1 0x60 00002529: SWAP2 0000252a: POP 0000252b: JUMPDEST 0000252c: POP 0000252d: SWAP2 0000252e: POP 0000252f: SWAP2 00002530: POP 00002531: PUSH2 0x253b 00002534: DUP3 00002535: DUP3 00002536: DUP7 00002537: PUSH2 0x255a 0000253a: JUMP 0000253b: JUMPDEST 0000253c: SWAP3 0000253d: POP 0000253e: POP 0000253f: POP 00002540: SWAP5 00002541: SWAP4 00002542: POP 00002543: POP 00002544: POP 00002545: POP 00002546: JUMP 00002547: JUMPDEST 00002548: PUSH1 0x00 0000254a: DUP1 0000254b: DUP3 0000254c: EXTCODESIZE 0000254d: SWAP1 0000254e: POP 0000254f: PUSH1 0x00 00002551: DUP2 00002552: GT 00002553: SWAP2 00002554: POP 00002555: POP 00002556: SWAP2 00002557: SWAP1 00002558: POP 00002559: JUMP 0000255a: JUMPDEST 0000255b: PUSH1 0x60 0000255d: DUP4 0000255e: ISZERO 0000255f: PUSH2 0x256a 00002562: JUMPI 00002563: DUP3 00002564: SWAP1 00002565: POP 00002566: PUSH2 0x261f 00002569: JUMP 0000256a: JUMPDEST 0000256b: PUSH1 0x00 0000256d: DUP4 0000256e: MLOAD 0000256f: GT 00002570: ISZERO 00002571: PUSH2 0x257d 00002574: JUMPI 00002575: DUP3 00002576: MLOAD 00002577: DUP1 00002578: DUP5 00002579: PUSH1 0x20 0000257b: ADD 0000257c: REVERT 0000257d: JUMPDEST 0000257e: DUP2 0000257f: PUSH1 0x40 00002581: MLOAD 00002582: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000 000025a3: DUP2 000025a4: MSTORE 000025a5: PUSH1 0x04 000025a7: ADD 000025a8: DUP1 000025a9: DUP1 000025aa: PUSH1 0x20 000025ac: ADD 000025ad: DUP3 000025ae: DUP2 000025af: SUB 000025b0: DUP3 000025b1: MSTORE 000025b2: DUP4 000025b3: DUP2 000025b4: DUP2 000025b5: MLOAD 000025b6: DUP2 000025b7: MSTORE 000025b8: PUSH1 0x20 000025ba: ADD 000025bb: SWAP2 000025bc: POP 000025bd: DUP1 000025be: MLOAD 000025bf: SWAP1 000025c0: PUSH1 0x20 000025c2: ADD 000025c3: SWAP1 000025c4: DUP1 000025c5: DUP4 000025c6: DUP4 000025c7: PUSH1 0x00 000025c9: JUMPDEST 000025ca: DUP4 000025cb: DUP2 000025cc: LT 000025cd: ISZERO 000025ce: PUSH2 0x25e4 000025d1: JUMPI 000025d2: DUP1 000025d3: DUP3 000025d4: ADD 000025d5: MLOAD 000025d6: DUP2 000025d7: DUP5 000025d8: ADD 000025d9: MSTORE 000025da: PUSH1 0x20 000025dc: DUP2 000025dd: ADD 000025de: SWAP1 000025df: POP 000025e0: PUSH2 0x25c9 000025e3: JUMP 000025e4: JUMPDEST 000025e5: POP 000025e6: POP 000025e7: POP 000025e8: POP 000025e9: SWAP1 000025ea: POP 000025eb: SWAP1 000025ec: DUP2 000025ed: ADD 000025ee: SWAP1 000025ef: PUSH1 0x1f 000025f1: AND 000025f2: DUP1 000025f3: ISZERO 000025f4: PUSH2 0x2611 000025f7: JUMPI 000025f8: DUP1 000025f9: DUP3 000025fa: SUB 000025fb: DUP1 000025fc: MLOAD 000025fd: PUSH1 0x01 000025ff: DUP4 00002600: PUSH1 0x20 00002602: SUB 00002603: PUSH2 0x0100 00002606: EXP 00002607: SUB 00002608: NOT 00002609: AND 0000260a: DUP2 0000260b: MSTORE 0000260c: PUSH1 0x20 0000260e: ADD 0000260f: SWAP2 00002610: POP 00002611: JUMPDEST 00002612: POP 00002613: SWAP3 00002614: POP 00002615: POP 00002616: POP 00002617: PUSH1 0x40 00002619: MLOAD 0000261a: DUP1 0000261b: SWAP2 0000261c: SUB 0000261d: SWAP1 0000261e: REVERT 0000261f: JUMPDEST 00002620: SWAP4 00002621: SWAP3 00002622: POP 00002623: POP 00002624: POP 00002625: JUMP 00002626: INVALID 00002627: UNKNOWN(0x4F) 00002628: PUSH24 0x6e61626c653a206e6577206f776e65722069732074686520 00002641: PUSH27 0x65726f2061646472657373416464726573733a20696e7375666669 0000265d: PUSH4 0x69656e74 00002662: KECCAK256 00002663: PUSH3 0x616c61 00002667: PUSH15 0x636520666f722063616c6c53616665 00002677: UNKNOWN(0x4D) 00002678: PUSH2 0x7468 0000267b: GASPRICE 0000267c: KECCAK256 0000267d: PUSH14 0x756c7469706c69636174696f6e20 0000268c: PUSH16 0x766572666c6f77536166654552433230 0000269d: GASPRICE 0000269e: KECCAK256 0000269f: GASLIMIT 000026a0: MSTORE 000026a1: NUMBER 000026a2: ORIGIN 000026a3: ADDRESS 000026a4: KECCAK256 000026a5: PUSH16 0x7065726174696f6e20646964206e6f74 000026b6: KECCAK256 000026b7: PUSH20 0x756363656564a2646970667358221220ccd2cbea 000026cc: RETURNDATASIZE 000026cd: DUP1 000026ce: DUP5 000026cf: SSTORE 000026d0: UNKNOWN(0x2D) 000026d1: UNKNOWN(0xDD) 000026d2: PUSH6 0xccaab5457424 000026d9: GASLIMIT 000026da: LOG0 000026db: PUSH18 0x0bf1711c8f7ed0bc4294c81964736f6c6343 000026ee: STOP 000026ef: MOD 000026f0: UNKNOWN(0x0C) 000026f1: STOP 000026f2: CALLER
| Severity | Category | Tool | Title | Confidence | Validated | Confirmed | Details |
|---|---|---|---|---|---|---|---|
| high | other | slither | GovTreasurer.safeGDAOTransfer(address,uint256) (contracts/Contract.sol#1105-1113) ignores return value by gdao.transfer(_to,GDAOBal) (contracts/Contract.sol#1109-1110) | 85 | no | — |
viewevidence_json{
"impact": "High",
"detector": "unchecked-transfer",
"elements": [
{
"name": "safeGDAOTransfer",
"type": "function",
"source_mapping": {
"lines": [
1105,
1106,
1107,
1108,
1109,
1110,
1111,
1112,
1113
],
"start": 46451,
"length": 271,
"ending_column": 38,
"is_dependency": false,
"filename_short": "contracts/Contract.sol",
"starting_column": 86,
"filename_absolute": "/tmp/slither-n6e8sup9/contracts/Contract.sol",
"filename_relative": "contracts/Contract.sol"
},
"type_specific_fields": {
"parent": {
"name": "GovTreasurer",
"type": "contract",
"source_mapping": {
"lines": [
900,
901,
902,
903,
904,
905,
906,
907,
908,
909,
910,
911,
912,
913,
914,
915,
916,
917,
918,
919,
920,
921,
922,
923,
924,
925,
926,
927,
928,
929,
930,
931,
932,
933,
934,
935,
936,
937,
938,
939,
940,
941,
942,
943,
944,
945,
946,
947,
948,
949,
950,
951,
952,
953,
954,
955,
956,
957,
958,
959,
960,
961,
962,
963,
964,
965,
966,
967,
968,
969,
970,
971,
972,
973,
974,
975,
976,
977,
978,
979,
980,
981,
982,
983,
984,
985,
986,
987,
988,
989,
990,
991,
992,
993,
994,
995,
996,
997,
998,
999,
1000,
1001,
1002,
1003,
1004,
1005,
1006,
1007,
1008,
1009,
1010,
1011,
1012,
1013,
1014,
1015,
1016,
1017,
1018,
1019,
1020,
1021,
1022,
1023,
1024,
1025,
1026,
1027,
1028,
1029,
1030,
1031,
1032,
1033,
1034,
1035,
1036,
1037,
1038,
1039,
1040,
1041,
1042,
1043,
1044,
1045,
1046,
1047,
1048,
1049,
1050,
1051,
1052,
1053,
1054,
1055,
1056,
1057,
1058,
1059,
1060,
1061,
1062,
1063,
1064,
1065,
1066,
1067,
1068,
1069,
1070,
1071,
1072,
1073,
1074,
1075,
1076,
1077,
1078,
1079,
1080,
1081,
1082,
1083,
1084,
1085,
1086,
1087,
1088,
1089,
1090,
1091,
1092,
1093,
1094,
1095,
1096,
1097,
1098,
1099,
1100,
1101,
1102,
1103,
1104,
1105,
1106,
1107,
1108,
1109,
1110,
1111,
1112,
1113,
1114,
1115,
1116
],
"start": 37921,
"length": 8974,
"ending_column": 38,
"is_dependency": false,
"filename_short": "contracts/Contract.sol",
"starting_column": 43,
"filename_absolute": "/tmp/slither-n6e8sup9/contracts/Contract.sol",
"filename_relative": "contracts/Contract.sol"
}
},
"signature": "safeGDAOTransfer(address,uint256)"
}
},
{
"name": "gdao.transfer(_to,GDAOBal)",
"type": "node",
"source_mapping": {
"lines": [
1109,
1110
],
"start": 46620,
"length": 27,
"ending_column": 7,
"is_dependency": false,
"filename_short": "contracts/Contract.sol",
"starting_column": 47,
"filename_absolute": "/tmp/slither-n6e8sup9/contracts/Contract.sol",
"filename_relative": "contracts/Contract.sol"
},
"type_specific_fields": {
"parent": {
"name": "safeGDAOTransfer",
"type": "function",
"source_mapping": {
"lines": [
1105,
1106,
1107,
1108,
1109,
1110,
1111,
1112,
1113
],
"start": 46451,
"length": 271,
"ending_column": 38,
"is_dependency": false,
"filename_short": "contracts/Contract.sol",
"starting_column": 86,
"filename_absolute": "/tmp/slither-n6e8sup9/contracts/Contract.sol",
"filename_relative": "contracts/Contract.sol"
},
"type_specific_fields": {
"parent": {
"name": "GovTreasurer",
"type": "contract",
"source_mapping": {
"lines": [
900,
901,
902,
903,
904,
905,
906,
907,
908,
909,
910,
911,
912,
913,
914,
915,
916,
917,
918,
919,
920,
921,
922,
923,
924,
925,
926,
927,
928,
929,
930,
931,
932,
933,
934,
935,
936,
937,
938,
939,
940,
941,
942,
943,
944,
945,
946,
947,
948,
949,
950,
951,
952,
953,
954,
955,
956,
957,
958,
959,
960,
961,
962,
963,
964,
965,
966,
967,
968,
969,
970,
971,
972,
973,
974,
975,
976,
977,
978,
979,
980,
981,
982,
983,
984,
985,
986,
987,
988,
989,
990,
991,
992,
993,
994,
995,
996,
997,
998,
999,
1000,
1001,
1002,
1003,
1004,
1005,
1006,
1007,
1008,
1009,
1010,
1011,
1012,
1013,
1014,
1015,
1016,
1017,
1018,
1019,
1020,
1021,
1022,
1023,
1024,
1025,
1026,
1027,
1028,
1029,
1030,
1031,
1032,
1033,
1034,
1035,
1036,
1037,
1038,
1039,
1040,
1041,
1042,
1043,
1044,
1045,
1046,
1047,
1048,
1049,
1050,
1051,
1052,
1053,
1054,
1055,
1056,
1057,
1058,
1059,
1060,
1061,
1062,
1063,
1064,
1065,
1066,
1067,
1068,
1069,
1070,
1071,
1072,
1073,
1074,
1075,
1076,
1077,
1078,
1079,
1080,
1081,
1082,
1083,
1084,
1085,
1086,
1087,
1088,
1089,
1090,
1091,
1092,
1093,
1094,
1095,
1096,
1097,
1098,
1099,
1100,
1101,
1102,
1103,
1104,
1105,
1106,
1107,
1108,
1109,
1110,
1111,
1112,
1113,
1114,
1115,
1116
],
"start": 37921,
"length": 8974,
"ending_column": 38,
"is_dependency": false,
"filename_short": "contracts/Contract.sol",
"starting_column": 43,
"filename_absolute": "/tmp/slither-n6e8sup9/contracts/Contract.sol",
"filename_relative": "contracts/Contract.sol"
}
},
"signature": "safeGDAOTransfer(address,uint256)"
}
}
}
}
],
"locations": [
{
"file": "contracts/Contract.sol",
"name": "safeGDAOTransfer",
"type": "function",
"lines": [
1105,
1106,
1107,
1108,
1109,
1110,
1111,
1112,
1113
]
},
{
"file": "contracts/Contract.sol",
"name": "gdao.transfer(_to,GDAOBal)",
"type": "node",
"lines": [
1109,
1110
]
}
],
"description": "GovTreasurer.safeGDAOTransfer(address,uint256) (contracts/Contract.sol#1105-1113) ignores return value by gdao.transfer(_to,GDAOBal) (contracts/Contract.sol#1109-1110)"
}
|
| high | auth | detector | Authorization based on tx.origin | 70 | no | — |
viewvalidation_json{
"reason": "missing sink mapping",
"status": "no_sink"
}
witness_json{
"notes": "heuristic witness; entrypoints are best-effort selectors with zeroed calldata",
"constraints": [],
"entrypoints": [
{
"calldata": "0x8dbb1e3a",
"selector": "0x8dbb1e3a",
"calldata_variants": [
"0x8dbb1e3a",
"0x8dbb1e3a0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x93f1a40b",
"selector": "0x93f1a40b",
"calldata_variants": [
"0x93f1a40b",
"0x93f1a40b0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x988d7a60",
"selector": "0x988d7a60",
"calldata_variants": [
"0x988d7a60",
"0x988d7a600000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xa29a0d90",
"selector": "0xa29a0d90",
"calldata_variants": [
"0xa29a0d90",
"0xa29a0d900000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xe2bbb158",
"selector": "0xe2bbb158",
"calldata_variants": [
"0xe2bbb158",
"0xe2bbb1580000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xf2fde38b",
"selector": "0xf2fde38b",
"calldata_variants": [
"0xf2fde38b",
"0xf2fde38b0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x630b5ba1",
"selector": "0x630b5ba1",
"calldata_variants": [
"0x630b5ba1",
"0x630b5ba10000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x64482f79",
"selector": "0x64482f79",
"calldata_variants": [
"0x64482f79",
"0x64482f790000000000000000000000000000000000000000000000000000000000000000"
]
}
]
}
evidence_json{
"guards_detected": [
{
"pc": 4846,
"type": "msg_sender_eq_const",
"value": "0xffffffffffffffffffffffffffffffffffffffff"
},
{
"pc": 9890,
"type": "tx_origin_used"
}
]
}
|
| high | other | slither | GovTreasurer.safeGDAOTransfer(address,uint256) (contracts/Contract.sol#1105-1113) ignores return value by gdao.transfer(_to,_amount) (contracts/Contract.sol#1112-1113) | 85 | no | — |
viewevidence_json{
"impact": "High",
"detector": "unchecked-transfer",
"elements": [
{
"name": "safeGDAOTransfer",
"type": "function",
"source_mapping": {
"lines": [
1105,
1106,
1107,
1108,
1109,
1110,
1111,
1112,
1113
],
"start": 46451,
"length": 271,
"ending_column": 38,
"is_dependency": false,
"filename_short": "contracts/Contract.sol",
"starting_column": 86,
"filename_absolute": "/tmp/slither-n6e8sup9/contracts/Contract.sol",
"filename_relative": "contracts/Contract.sol"
},
"type_specific_fields": {
"parent": {
"name": "GovTreasurer",
"type": "contract",
"source_mapping": {
"lines": [
900,
901,
902,
903,
904,
905,
906,
907,
908,
909,
910,
911,
912,
913,
914,
915,
916,
917,
918,
919,
920,
921,
922,
923,
924,
925,
926,
927,
928,
929,
930,
931,
932,
933,
934,
935,
936,
937,
938,
939,
940,
941,
942,
943,
944,
945,
946,
947,
948,
949,
950,
951,
952,
953,
954,
955,
956,
957,
958,
959,
960,
961,
962,
963,
964,
965,
966,
967,
968,
969,
970,
971,
972,
973,
974,
975,
976,
977,
978,
979,
980,
981,
982,
983,
984,
985,
986,
987,
988,
989,
990,
991,
992,
993,
994,
995,
996,
997,
998,
999,
1000,
1001,
1002,
1003,
1004,
1005,
1006,
1007,
1008,
1009,
1010,
1011,
1012,
1013,
1014,
1015,
1016,
1017,
1018,
1019,
1020,
1021,
1022,
1023,
1024,
1025,
1026,
1027,
1028,
1029,
1030,
1031,
1032,
1033,
1034,
1035,
1036,
1037,
1038,
1039,
1040,
1041,
1042,
1043,
1044,
1045,
1046,
1047,
1048,
1049,
1050,
1051,
1052,
1053,
1054,
1055,
1056,
1057,
1058,
1059,
1060,
1061,
1062,
1063,
1064,
1065,
1066,
1067,
1068,
1069,
1070,
1071,
1072,
1073,
1074,
1075,
1076,
1077,
1078,
1079,
1080,
1081,
1082,
1083,
1084,
1085,
1086,
1087,
1088,
1089,
1090,
1091,
1092,
1093,
1094,
1095,
1096,
1097,
1098,
1099,
1100,
1101,
1102,
1103,
1104,
1105,
1106,
1107,
1108,
1109,
1110,
1111,
1112,
1113,
1114,
1115,
1116
],
"start": 37921,
"length": 8974,
"ending_column": 38,
"is_dependency": false,
"filename_short": "contracts/Contract.sol",
"starting_column": 43,
"filename_absolute": "/tmp/slither-n6e8sup9/contracts/Contract.sol",
"filename_relative": "contracts/Contract.sol"
}
},
"signature": "safeGDAOTransfer(address,uint256)"
}
},
{
"name": "gdao.transfer(_to,_amount)",
"type": "node",
"source_mapping": {
"lines": [
1112,
1113
],
"start": 46678,
"length": 27,
"ending_column": 21,
"is_dependency": false,
"filename_short": "contracts/Contract.sol",
"starting_column": 29,
"filename_absolute": "/tmp/slither-n6e8sup9/contracts/Contract.sol",
"filename_relative": "contracts/Contract.sol"
},
"type_specific_fields": {
"parent": {
"name": "safeGDAOTransfer",
"type": "function",
"source_mapping": {
"lines": [
1105,
1106,
1107,
1108,
1109,
1110,
1111,
1112,
1113
],
"start": 46451,
"length": 271,
"ending_column": 38,
"is_dependency": false,
"filename_short": "contracts/Contract.sol",
"starting_column": 86,
"filename_absolute": "/tmp/slither-n6e8sup9/contracts/Contract.sol",
"filename_relative": "contracts/Contract.sol"
},
"type_specific_fields": {
"parent": {
"name": "GovTreasurer",
"type": "contract",
"source_mapping": {
"lines": [
900,
901,
902,
903,
904,
905,
906,
907,
908,
909,
910,
911,
912,
913,
914,
915,
916,
917,
918,
919,
920,
921,
922,
923,
924,
925,
926,
927,
928,
929,
930,
931,
932,
933,
934,
935,
936,
937,
938,
939,
940,
941,
942,
943,
944,
945,
946,
947,
948,
949,
950,
951,
952,
953,
954,
955,
956,
957,
958,
959,
960,
961,
962,
963,
964,
965,
966,
967,
968,
969,
970,
971,
972,
973,
974,
975,
976,
977,
978,
979,
980,
981,
982,
983,
984,
985,
986,
987,
988,
989,
990,
991,
992,
993,
994,
995,
996,
997,
998,
999,
1000,
1001,
1002,
1003,
1004,
1005,
1006,
1007,
1008,
1009,
1010,
1011,
1012,
1013,
1014,
1015,
1016,
1017,
1018,
1019,
1020,
1021,
1022,
1023,
1024,
1025,
1026,
1027,
1028,
1029,
1030,
1031,
1032,
1033,
1034,
1035,
1036,
1037,
1038,
1039,
1040,
1041,
1042,
1043,
1044,
1045,
1046,
1047,
1048,
1049,
1050,
1051,
1052,
1053,
1054,
1055,
1056,
1057,
1058,
1059,
1060,
1061,
1062,
1063,
1064,
1065,
1066,
1067,
1068,
1069,
1070,
1071,
1072,
1073,
1074,
1075,
1076,
1077,
1078,
1079,
1080,
1081,
1082,
1083,
1084,
1085,
1086,
1087,
1088,
1089,
1090,
1091,
1092,
1093,
1094,
1095,
1096,
1097,
1098,
1099,
1100,
1101,
1102,
1103,
1104,
1105,
1106,
1107,
1108,
1109,
1110,
1111,
1112,
1113,
1114,
1115,
1116
],
"start": 37921,
"length": 8974,
"ending_column": 38,
"is_dependency": false,
"filename_short": "contracts/Contract.sol",
"starting_column": 43,
"filename_absolute": "/tmp/slither-n6e8sup9/contracts/Contract.sol",
"filename_relative": "contracts/Contract.sol"
}
},
"signature": "safeGDAOTransfer(address,uint256)"
}
}
}
}
],
"locations": [
{
"file": "contracts/Contract.sol",
"name": "safeGDAOTransfer",
"type": "function",
"lines": [
1105,
1106,
1107,
1108,
1109,
1110,
1111,
1112,
1113
]
},
{
"file": "contracts/Contract.sol",
"name": "gdao.transfer(_to,_amount)",
"type": "node",
"lines": [
1112,
1113
]
}
],
"description": "GovTreasurer.safeGDAOTransfer(address,uint256) (contracts/Contract.sol#1105-1113) ignores return value by gdao.transfer(_to,_amount) (contracts/Contract.sol#1112-1113)"
}
|
| medium | reentrancy | slither | Reentrancy in GovTreasurer.withdraw(uint256,uint256) (contracts/Contract.sol#1089-1104): | 75 | no | — |
viewevidence_json{
"impact": "Medium",
"detector": "reentrancy-no-eth",
"elements": [
{
"name": "withdraw",
"type": "function",
"source_mapping": {
"lines": [
1089,
1090,
1091,
1092,
1093,
1094,
1095,
1096,
1097,
1098,
1099,
1100,
1101,
1102,
1103,
1104
],
"start": 45577,
"length": 771,
"ending_column": 78,
"is_dependency": false,
"filename_short": "contracts/Contract.sol",
"starting_column": 57,
"filename_absolute": "/tmp/slither-n6e8sup9/contracts/Contract.sol",
"filename_relative": "contracts/Contract.sol"
},
"type_specific_fields": {
"parent": {
"name": "GovTreasurer",
"type": "contract",
"source_mapping": {
"lines": [
900,
901,
902,
903,
904,
905,
906,
907,
908,
909,
910,
911,
912,
913,
914,
915,
916,
917,
918,
919,
920,
921,
922,
923,
924,
925,
926,
927,
928,
929,
930,
931,
932,
933,
934,
935,
936,
937,
938,
939,
940,
941,
942,
943,
944,
945,
946,
947,
948,
949,
950,
951,
952,
953,
954,
955,
956,
957,
958,
959,
960,
961,
962,
963,
964,
965,
966,
967,
968,
969,
970,
971,
972,
973,
974,
975,
976,
977,
978,
979,
980,
981,
982,
983,
984,
985,
986,
987,
988,
989,
990,
991,
992,
993,
994,
995,
996,
997,
998,
999,
1000,
1001,
1002,
1003,
1004,
1005,
1006,
1007,
1008,
1009,
1010,
1011,
1012,
1013,
1014,
1015,
1016,
1017,
1018,
1019,
1020,
1021,
1022,
1023,
1024,
1025,
1026,
1027,
1028,
1029,
1030,
1031,
1032,
1033,
1034,
1035,
1036,
1037,
1038,
1039,
1040,
1041,
1042,
1043,
1044,
1045,
1046,
1047,
1048,
1049,
1050,
1051,
1052,
1053,
1054,
1055,
1056,
1057,
1058,
1059,
1060,
1061,
1062,
1063,
1064,
1065,
1066,
1067,
1068,
1069,
1070,
1071,
1072,
1073,
1074,
1075,
1076,
1077,
1078,
1079,
1080,
1081,
1082,
1083,
1084,
1085,
1086,
1087,
1088,
1089,
1090,
1091,
1092,
1093,
1094,
1095,
1096,
1097,
1098,
1099,
1100,
1101,
1102,
1103,
1104,
1105,
1106,
1107,
1108,
1109,
1110,
1111,
1112,
1113,
1114,
1115,
1116
],
"start": 37921,
"length": 8974,
"ending_column": 38,
"is_dependency": false,
"filename_short": "contracts/Contract.sol",
"starting_column": 43,
"filename_absolute": "/tmp/slither-n6e8sup9/contracts/Contract.sol",
"filename_relative": "contracts/Contract.sol"
}
},
"signature": "withdraw(uint256,uint256)"
}
},
{
"name": "updatePool(_pid)",
"type": "node",
"source_mapping": {
"lines": [
1095
],
"start": 45814,
"length": 16,
"ending_column": 51,
"is_dependency": false,
"filename_short": "contracts/Contract.sol",
"starting_column": 35,
"filename_absolute": "/tmp/slither-n6e8sup9/contracts/Contract.sol",
"filename_relative": "contracts/Contract.sol"
},
"additional_fields": {
"underlying_type": "external_calls"
},
"type_specific_fields": {
"parent": {
"name": "withdraw",
"type": "function",
"source_mapping": {
"lines": [
1089,
1090,
1091,
1092,
1093,
1094,
1095,
1096,
1097,
1098,
1099,
1100,
1101,
1102,
1103,
1104
],
"start": 45577,
"length": 771,
"ending_column": 78,
"is_dependency": false,
"filename_short": "contracts/Contract.sol",
"starting_column": 57,
"filename_absolute": "/tmp/slither-n6e8sup9/contracts/Contract.sol",
"filename_relative": "contracts/Contract.sol"
},
"type_specific_fields": {
"parent": {
"name": "GovTreasurer",
"type": "contract",
"source_mapping": {
"lines": [
900,
901,
902,
903,
904,
905,
906,
907,
908,
909,
910,
911,
912,
913,
914,
915,
916,
917,
918,
919,
920,
921,
922,
923,
924,
925,
926,
927,
928,
929,
930,
931,
932,
933,
934,
935,
936,
937,
938,
939,
940,
941,
942,
943,
944,
945,
946,
947,
948,
949,
950,
951,
952,
953,
954,
955,
956,
957,
958,
959,
960,
961,
962,
963,
964,
965,
966,
967,
968,
969,
970,
971,
972,
973,
974,
975,
976,
977,
978,
979,
980,
981,
982,
983,
984,
985,
986,
987,
988,
989,
990,
991,
992,
993,
994,
995,
996,
997,
998,
999,
1000,
1001,
1002,
1003,
1004,
1005,
1006,
1007,
1008,
1009,
1010,
1011,
1012,
1013,
1014,
1015,
1016,
1017,
1018,
1019,
1020,
1021,
1022,
1023,
1024,
1025,
1026,
1027,
1028,
1029,
1030,
1031,
1032,
1033,
1034,
1035,
1036,
1037,
1038,
1039,
1040,
1041,
1042,
1043,
1044,
1045,
1046,
1047,
1048,
1049,
1050,
1051,
1052,
1053,
1054,
1055,
1056,
1057,
1058,
1059,
1060,
1061,
1062,
1063,
1064,
1065,
1066,
1067,
1068,
1069,
1070,
1071,
1072,
1073,
1074,
1075,
1076,
1077,
1078,
1079,
1080,
1081,
1082,
1083,
1084,
1085,
1086,
1087,
1088,
1089,
1090,
1091,
1092,
1093,
1094,
1095,
1096,
1097,
1098,
1099,
1100,
1101,
1102,
1103,
1104,
1105,
1106,
1107,
1108,
1109,
1110,
1111,
1112,
1113,
1114,
1115,
1116
],
"start": 37921,
"length": 8974,
"ending_column": 38,
"is_dependency": false,
"filename_short": "contracts/Contract.sol",
"starting_column": 43,
"filename_absolute": "/tmp/slither-n6e8sup9/contracts/Contract.sol",
"filename_relative": "contracts/Contract.sol"
}
},
"signature": "withdraw(uint256,uint256)"
}
}
}
},
{
"name": "gdao.transfer(_to,GDAOBal)",
"type": "node",
"source_mapping": {
"lines": [
1109,
1110
],
"start": 46620,
"length": 27,
"ending_column": 7,
"is_dependency": false,
"filename_short": "contracts/Contract.sol",
"starting_column": 47,
"filename_absolute": "/tmp/slither-n6e8sup9/contracts/Contract.sol",
"filename_relative": "contracts/Contract.sol"
},
"additional_fields": {
"underlying_type": "external_calls_sending_eth"
},
"type_specific_fields": {
"parent": {
"name": "safeGDAOTransfer",
"type": "function",
"source_mapping": {
"lines": [
1105,
1106,
1107,
1108,
1109,
1110,
1111,
1112,
1113
],
"start": 46451,
"length": 271,
"ending_column": 38,
"is_dependency": false,
"filename_short": "contracts/Contract.sol",
"starting_column": 86,
"filename_absolute": "/tmp/slither-n6e8sup9/contracts/Contract.sol",
"filename_relative": "contracts/Contract.sol"
},
"type_specific_fields": {
"parent": {
"name": "GovTreasurer",
"type": "contract",
"source_mapping": {
"lines": [
900,
901,
902,
903,
904,
905,
906,
907,
908,
909,
910,
911,
912,
913,
914,
915,
916,
917,
918,
919,
920,
921,
922,
923,
924,
925,
926,
927,
928,
929,
930,
931,
932,
933,
934,
935,
936,
937,
938,
939,
940,
941,
942,
943,
944,
945,
946,
947,
948,
949,
950,
951,
952,
953,
954,
955,
956,
957,
958,
959,
960,
961,
962,
963,
964,
965,
966,
967,
968,
969,
970,
971,
972,
973,
974,
975,
976,
977,
978,
979,
980,
981,
982,
983,
984,
985,
986,
987,
988,
989,
990,
991,
992,
993,
994,
995,
996,
997,
998,
999,
1000,
1001,
1002,
1003,
1004,
1005,
1006,
1007,
1008,
1009,
1010,
1011,
1012,
1013,
1014,
1015,
1016,
1017,
1018,
1019,
1020,
1021,
1022,
1023,
1024,
1025,
1026,
1027,
1028,
1029,
1030,
1031,
1032,
1033,
1034,
1035,
1036,
1037,
1038,
1039,
1040,
1041,
1042,
1043,
1044,
1045,
1046,
1047,
1048,
1049,
1050,
1051,
1052,
1053,
1054,
1055,
1056,
1057,
1058,
1059,
1060,
1061,
1062,
1063,
1064,
1065,
1066,
1067,
1068,
1069,
1070,
1071,
1072,
1073,
1074,
1075,
1076,
1077,
1078,
1079,
1080,
1081,
1082,
1083,
1084,
1085,
1086,
1087,
1088,
1089,
1090,
1091,
1092,
1093,
1094,
1095,
1096,
1097,
1098,
1099,
1100,
1101,
1102,
1103,
1104,
1105,
1106,
1107,
1108,
1109,
1110,
1111,
1112,
1113,
1114,
1115,
1116
],
"start": 37921,
"length": 8974,
"ending_column": 38,
"is_dependency": false,
"filename_short": "contracts/Contract.sol",
"starting_column": 43,
"filename_absolute": "/tmp/slither-n6e8sup9/contracts/Contract.sol",
"filename_relative": "contracts/Contract.sol"
}
},
"signature": "safeGDAOTransfer(address,uint256)"
}
}
}
},
{
"name": "gdao.transfer(_to,_amount)",
"type": "node",
"source_mapping": {
"lines": [
1112,
1113
],
"start": 46678,
"length": 27,
"ending_column": 21,
"is_dependency": false,
"filename_short": "contracts/Contract.sol",
"starting_column": 29,
"filename_absolute": "/tmp/slither-n6e8sup9/contracts/Contract.sol",
"filename_relative": "contracts/Contract.sol"
},
"additional_fields": {
"underlying_type": "external_calls_sending_eth"
},
"type_specific_fields": {
"parent": {
"name": "safeGDAOTransfer",
"type": "function",
"source_mapping": {
"lines": [
1105,
1106,
1107,
1108,
1109,
1110,
1111,
1112,
1113
],
"start": 46451,
"length": 271,
"ending_column": 38,
"is_dependency": false,
"filename_short": "contracts/Contract.sol",
"starting_column": 86,
"filename_absolute": "/tmp/slither-n6e8sup9/contracts/Contract.sol",
"filename_relative": "contracts/Contract.sol"
},
"type_specific_fields": {
"parent": {
"name": "GovTreasurer",
"type": "contract",
"source_mapping": {
"lines": [
900,
901,
902,
903,
904,
905,
906,
907,
908,
909,
910,
911,
912,
913,
914,
915,
916,
917,
918,
919,
920,
921,
922,
923,
924,
925,
926,
927,
928,
929,
930,
931,
932,
933,
934,
935,
936,
937,
938,
939,
940,
941,
942,
943,
944,
945,
946,
947,
948,
949,
950,
951,
952,
953,
954,
955,
956,
957,
958,
959,
960,
961,
962,
963,
964,
965,
966,
967,
968,
969,
970,
971,
972,
973,
974,
975,
976,
977,
978,
979,
980,
981,
982,
983,
984,
985,
986,
987,
988,
989,
990,
991,
992,
993,
994,
995,
996,
997,
998,
999,
1000,
1001,
1002,
1003,
1004,
1005,
1006,
1007,
1008,
1009,
1010,
1011,
1012,
1013,
1014,
1015,
1016,
1017,
1018,
1019,
1020,
1021,
1022,
1023,
1024,
1025,
1026,
1027,
1028,
1029,
1030,
1031,
1032,
1033,
1034,
1035,
1036,
1037,
1038,
1039,
1040,
1041,
1042,
1043,
1044,
1045,
1046,
1047,
1048,
1049,
1050,
1051,
1052,
1053,
1054,
1055,
1056,
1057,
1058,
1059,
1060,
1061,
1062,
1063,
1064,
1065,
1066,
1067,
1068,
1069,
1070,
1071,
1072,
1073,
1074,
1075,
1076,
1077,
1078,
1079,
1080,
1081,
1082,
1083,
1084,
1085,
1086,
1087,
1088,
1089,
1090,
1091,
1092,
1093,
1094,
1095,
1096,
1097,
1098,
1099,
1100,
1101,
1102,
1103,
1104,
1105,
1106,
1107,
1108,
1109,
1110,
1111,
1112,
1113,
1114,
1115,
1116
],
"start": 37921,
"length": 8974,
"ending_column": 38,
"is_dependency": false,
"filename_short": "contracts/Contract.sol",
"starting_column": 43,
"filename_absolute": "/tmp/slither-n6e8sup9/contracts/Contract.sol",
"filename_relative": "contracts/Contract.sol"
}
},
"signature": "safeGDAOTransfer(address,uint256)"
}
}
}
},
{
"name": "safeGDAOTransfer(msg.sender,pending)",
"type": "node",
"source_mapping": {
"lines": [
1097,
1098
],
"start": 45996,
"length": 37,
"ending_column": 4,
"is_dependency": false,
"filename_short": "contracts/Contract.sol",
"starting_column": 38,
"filename_absolute": "/tmp/slither-n6e8sup9/contracts/Contract.sol",
"filename_relative": "contracts/Contract.sol"
},
"additional_fields": {
"underlying_type": "external_calls"
},
"type_specific_fields": {
"parent": {
"name": "withdraw",
"type": "function",
"source_mapping": {
"lines": [
1089,
1090,
1091,
1092,
1093,
1094,
1095,
1096,
1097,
1098,
1099,
1100,
1101,
1102,
1103,
1104
],
"start": 45577,
"length": 771,
"ending_column": 78,
"is_dependency": false,
"filename_short": "contracts/Contract.sol",
"starting_column": 57,
"filename_absolute": "/tmp/slither-n6e8sup9/contracts/Contract.sol",
"filename_relative": "contracts/Contract.sol"
},
"type_specific_fields": {
"parent": {
"name": "GovTreasurer",
"type": "contract",
"source_mapping": {
"lines": [
900,
901,
902,
903,
904,
905,
906,
907,
908,
909,
910,
911,
912,
913,
914,
915,
916,
917,
918,
919,
920,
921,
922,
923,
924,
925,
926,
927,
928,
929,
930,
931,
932,
933,
934,
935,
936,
937,
938,
939,
940,
941,
942,
943,
944,
945,
946,
947,
948,
949,
950,
951,
952,
953,
954,
955,
956,
957,
958,
959,
960,
961,
962,
963,
964,
965,
966,
967,
968,
969,
970,
971,
972,
973,
974,
975,
976,
977,
978,
979,
980,
981,
982,
983,
984,
985,
986,
987,
988,
989,
990,
991,
992,
993,
994,
995,
996,
997,
998,
999,
1000,
1001,
1002,
1003,
1004,
1005,
1006,
1007,
1008,
1009,
1010,
1011,
1012,
1013,
1014,
1015,
1016,
1017,
1018,
1019,
1020,
1021,
1022,
1023,
1024,
1025,
1026,
1027,
1028,
1029,
1030,
1031,
1032,
1033,
1034,
1035,
1036,
1037,
1038,
1039,
1040,
1041,
1042,
1043,
1044,
1045,
1046,
1047,
1048,
1049,
1050,
1051,
1052,
1053,
1054,
1055,
1056,
1057,
1058,
1059,
1060,
1061,
1062,
1063,
1064,
1065,
1066,
1067,
1068,
1069,
1070,
1071,
1072,
1073,
1074,
1075,
1076,
1077,
1078,
1079,
1080,
1081,
1082,
1083,
1084,
1085,
1086,
1087,
1088,
1089,
1090,
1091,
1092,
1093,
1094,
1095,
1096,
1097,
1098,
1099,
1100,
1101,
1102,
1103,
1104,
1105,
1106,
1107,
1108,
1109,
1110,
1111,
1112,
1113,
1114,
1115,
1116
],
"start": 37921,
"length": 8974,
"ending_column": 38,
"is_dependency": false,
"filename_short": "contracts/Contract.sol",
"starting_column": 43,
"filename_absolute": "/tmp/slither-n6e8sup9/contracts/Contract.sol",
"filename_relative": "contracts/Contract.sol"
}
},
"signature": "withdraw(uint256,uint256)"
}
}
}
}
],
"locations": [
{
"file": "contracts/Contract.sol",
"name": "withdraw",
"type": "function",
"lines": [
1089,
1090,
1091,
1092,
1093,
1094,
1095,
1096,
1097,
1098,
1099,
1100,
1101,
1102,
1103,
1104
]
},
{
"file": "contracts/Contract.sol",
"name": "updatePool(_pid)",
"type": "node",
"lines": [
1095
]
},
{
"file": "contracts/Contract.sol",
"name": "gdao.transfer(_to,GDAOBal)",
"type": "node",
"lines": [
1109,
1110
]
},
{
"file": "contracts/Contract.sol",
"name": "gdao.transfer(_to,_amount)",
"type": "node",
"lines": [
1112,
1113
]
},
{
"file": "contracts/Contract.sol",
"name": "safeGDAOTransfer(msg.sender,pending)",
"type": "node",
"lines": [
1097,
1098
]
},
{
"file": "contracts/Contract.sol",
"name": "gdao.transfer(_to,GDAOBal)",
"type": "node",
"lines": [
1109,
1110
]
},
{
"file": "contracts/Contract.sol",
"name": "gdao.transfer(_to,_amount)",
"type": "node",
"lines": [
1112,
1113
]
},
{
"file": "contracts/Contract.sol",
"name": "pool.token.safeTransfer(address(msg.sender),_amount)",
"type": "node",
"lines": [
1102,
1103
]
},
{
"file": "contracts/Contract.sol",
"name": "user.rewardDebt = user.amount.mul(pool.accGDAOPerShare).div(1e12)",
"type": "node",
"lines": [
1103,
1104
]
}
],
"description": "Reentrancy in GovTreasurer.withdraw(uint256,uint256) (contracts/Contract.sol#1089-1104):\n\tExternal calls:\n\t- updatePool(_pid) (contracts/Contract.sol#1095)\n\t\t- gdao.transfer(_to,GDAOBal) (contracts/Contract.sol#1109-1110)\n\t\t- gdao.transfer(_to,_amount) (contracts/Contract.sol#1112-1113)\n\t- safeGDAOTransfer(msg.sender,pending) (contracts/Contract.sol#1097-1098)\n\t\t- gdao.transfer(_to,GDAOBal) (contracts/Contract.sol#1109-1110)\n\t\t- gdao.transfer(_to,_amount) (contracts/Contract.sol#1112-1113)\n\t- pool.token.safeTransfer(address(msg.sender),_amount) (contracts/Contract.sol#1102-1103)\n\tState variables written after the call(s):\n\t- user.rewardDebt = user.amount.mul(pool.accGDAOPerShare).div(1e12) (contracts/Contract.sol#1103-1104)\n\tGovTreasurer.userInfo (contracts/Contract.sol#940-941) can be used in cross function reentrancies:\n\t- GovTreasurer.deposit(uint256,uint256) (contracts/Contract.sol#1059-1089)\n\t- GovTreasurer.emergencyWithdraw(uint256) (contracts/Contract.sol#1047-1059)\n\t- GovTreasurer.pendingGDAO(uint256,address) (contracts/Contract.sol#1000-1019)\n\t- GovTreasurer.userInfo (contracts/Contract.sol#940-941)\n\t- GovTreasurer.withdraw(uint256,uint256) (contracts/Contract.sol#1089-1104)"
}
|
| medium | reentrancy | slither | Reentrancy in GovTreasurer.deposit(uint256,uint256) (contracts/Contract.sol#1059-1089): | 75 | no | — |
viewevidence_json{
"impact": "Medium",
"detector": "reentrancy-no-eth",
"elements": [
{
"name": "deposit",
"type": "function",
"source_mapping": {
"lines": [
1059,
1060,
1061,
1062,
1063,
1064,
1065,
1066,
1067,
1068,
1069,
1070,
1071,
1072,
1073,
1074,
1075,
1076,
1077,
1078,
1079,
1080,
1081,
1082,
1083,
1084,
1085,
1086,
1087,
1088,
1089
],
"start": 44437,
"length": 1100,
"ending_column": 17,
"is_dependency": false,
"filename_short": "contracts/Contract.sol",
"starting_column": 43,
"filename_absolute": "/tmp/slither-n6e8sup9/contracts/Contract.sol",
"filename_relative": "contracts/Contract.sol"
},
"type_specific_fields": {
"parent": {
"name": "GovTreasurer",
"type": "contract",
"source_mapping": {
"lines": [
900,
901,
902,
903,
904,
905,
906,
907,
908,
909,
910,
911,
912,
913,
914,
915,
916,
917,
918,
919,
920,
921,
922,
923,
924,
925,
926,
927,
928,
929,
930,
931,
932,
933,
934,
935,
936,
937,
938,
939,
940,
941,
942,
943,
944,
945,
946,
947,
948,
949,
950,
951,
952,
953,
954,
955,
956,
957,
958,
959,
960,
961,
962,
963,
964,
965,
966,
967,
968,
969,
970,
971,
972,
973,
974,
975,
976,
977,
978,
979,
980,
981,
982,
983,
984,
985,
986,
987,
988,
989,
990,
991,
992,
993,
994,
995,
996,
997,
998,
999,
1000,
1001,
1002,
1003,
1004,
1005,
1006,
1007,
1008,
1009,
1010,
1011,
1012,
1013,
1014,
1015,
1016,
1017,
1018,
1019,
1020,
1021,
1022,
1023,
1024,
1025,
1026,
1027,
1028,
1029,
1030,
1031,
1032,
1033,
1034,
1035,
1036,
1037,
1038,
1039,
1040,
1041,
1042,
1043,
1044,
1045,
1046,
1047,
1048,
1049,
1050,
1051,
1052,
1053,
1054,
1055,
1056,
1057,
1058,
1059,
1060,
1061,
1062,
1063,
1064,
1065,
1066,
1067,
1068,
1069,
1070,
1071,
1072,
1073,
1074,
1075,
1076,
1077,
1078,
1079,
1080,
1081,
1082,
1083,
1084,
1085,
1086,
1087,
1088,
1089,
1090,
1091,
1092,
1093,
1094,
1095,
1096,
1097,
1098,
1099,
1100,
1101,
1102,
1103,
1104,
1105,
1106,
1107,
1108,
1109,
1110,
1111,
1112,
1113,
1114,
1115,
1116
],
"start": 37921,
"length": 8974,
"ending_column": 38,
"is_dependency": false,
"filename_short": "contracts/Contract.sol",
"starting_column": 43,
"filename_absolute": "/tmp/slither-n6e8sup9/contracts/Contract.sol",
"filename_relative": "contracts/Contract.sol"
}
},
"signature": "deposit(uint256,uint256)"
}
},
{
"name": "updatePool(_pid)",
"type": "node",
"source_mapping": {
"lines": [
1063
],
"start": 44610,
"length": 16,
"ending_column": 69,
"is_dependency": false,
"filename_short": "contracts/Contract.sol",
"starting_column": 53,
"filename_absolute": "/tmp/slither-n6e8sup9/contracts/Contract.sol",
"filename_relative": "contracts/Contract.sol"
},
"additional_fields": {
"underlying_type": "external_calls"
},
"type_specific_fields": {
"parent": {
"name": "deposit",
"type": "function",
"source_mapping": {
"lines": [
1059,
1060,
1061,
1062,
1063,
1064,
1065,
1066,
1067,
1068,
1069,
1070,
1071,
1072,
1073,
1074,
1075,
1076,
1077,
1078,
1079,
1080,
1081,
1082,
1083,
1084,
1085,
1086,
1087,
1088,
1089
],
"start": 44437,
"length": 1100,
"ending_column": 17,
"is_dependency": false,
"filename_short": "contracts/Contract.sol",
"starting_column": 43,
"filename_absolute": "/tmp/slither-n6e8sup9/contracts/Contract.sol",
"filename_relative": "contracts/Contract.sol"
},
"type_specific_fields": {
"parent": {
"name": "GovTreasurer",
"type": "contract",
"source_mapping": {
"lines": [
900,
901,
902,
903,
904,
905,
906,
907,
908,
909,
910,
911,
912,
913,
914,
915,
916,
917,
918,
919,
920,
921,
922,
923,
924,
925,
926,
927,
928,
929,
930,
931,
932,
933,
934,
935,
936,
937,
938,
939,
940,
941,
942,
943,
944,
945,
946,
947,
948,
949,
950,
951,
952,
953,
954,
955,
956,
957,
958,
959,
960,
961,
962,
963,
964,
965,
966,
967,
968,
969,
970,
971,
972,
973,
974,
975,
976,
977,
978,
979,
980,
981,
982,
983,
984,
985,
986,
987,
988,
989,
990,
991,
992,
993,
994,
995,
996,
997,
998,
999,
1000,
1001,
1002,
1003,
1004,
1005,
1006,
1007,
1008,
1009,
1010,
1011,
1012,
1013,
1014,
1015,
1016,
1017,
1018,
1019,
1020,
1021,
1022,
1023,
1024,
1025,
1026,
1027,
1028,
1029,
1030,
1031,
1032,
1033,
1034,
1035,
1036,
1037,
1038,
1039,
1040,
1041,
1042,
1043,
1044,
1045,
1046,
1047,
1048,
1049,
1050,
1051,
1052,
1053,
1054,
1055,
1056,
1057,
1058,
1059,
1060,
1061,
1062,
1063,
1064,
1065,
1066,
1067,
1068,
1069,
1070,
1071,
1072,
1073,
1074,
1075,
1076,
1077,
1078,
1079,
1080,
1081,
1082,
1083,
1084,
1085,
1086,
1087,
1088,
1089,
1090,
1091,
1092,
1093,
1094,
1095,
1096,
1097,
1098,
1099,
1100,
1101,
1102,
1103,
1104,
1105,
1106,
1107,
1108,
1109,
1110,
1111,
1112,
1113,
1114,
1115,
1116
],
"start": 37921,
"length": 8974,
"ending_column": 38,
"is_dependency": false,
"filename_short": "contracts/Contract.sol",
"starting_column": 43,
"filename_absolute": "/tmp/slither-n6e8sup9/contracts/Contract.sol",
"filename_relative": "contracts/Contract.sol"
}
},
"signature": "deposit(uint256,uint256)"
}
}
}
},
{
"name": "gdao.transfer(_to,GDAOBal)",
"type": "node",
"source_mapping": {
"lines": [
1109,
1110
],
"start": 46620,
"length": 27,
"ending_column": 7,
"is_dependency": false,
"filename_short": "contracts/Contract.sol",
"starting_column": 47,
"filename_absolute": "/tmp/slither-n6e8sup9/contracts/Contract.sol",
"filename_relative": "contracts/Contract.sol"
},
"additional_fields": {
"underlying_type": "external_calls_sending_eth"
},
"type_specific_fields": {
"parent": {
"name": "safeGDAOTransfer",
"type": "function",
"source_mapping": {
"lines": [
1105,
1106,
1107,
1108,
1109,
1110,
1111,
1112,
1113
],
"start": 46451,
"length": 271,
"ending_column": 38,
"is_dependency": false,
"filename_short": "contracts/Contract.sol",
"starting_column": 86,
"filename_absolute": "/tmp/slither-n6e8sup9/contracts/Contract.sol",
"filename_relative": "contracts/Contract.sol"
},
"type_specific_fields": {
"parent": {
"name": "GovTreasurer",
"type": "contract",
"source_mapping": {
"lines": [
900,
901,
902,
903,
904,
905,
906,
907,
908,
909,
910,
911,
912,
913,
914,
915,
916,
917,
918,
919,
920,
921,
922,
923,
924,
925,
926,
927,
928,
929,
930,
931,
932,
933,
934,
935,
936,
937,
938,
939,
940,
941,
942,
943,
944,
945,
946,
947,
948,
949,
950,
951,
952,
953,
954,
955,
956,
957,
958,
959,
960,
961,
962,
963,
964,
965,
966,
967,
968,
969,
970,
971,
972,
973,
974,
975,
976,
977,
978,
979,
980,
981,
982,
983,
984,
985,
986,
987,
988,
989,
990,
991,
992,
993,
994,
995,
996,
997,
998,
999,
1000,
1001,
1002,
1003,
1004,
1005,
1006,
1007,
1008,
1009,
1010,
1011,
1012,
1013,
1014,
1015,
1016,
1017,
1018,
1019,
1020,
1021,
1022,
1023,
1024,
1025,
1026,
1027,
1028,
1029,
1030,
1031,
1032,
1033,
1034,
1035,
1036,
1037,
1038,
1039,
1040,
1041,
1042,
1043,
1044,
1045,
1046,
1047,
1048,
1049,
1050,
1051,
1052,
1053,
1054,
1055,
1056,
1057,
1058,
1059,
1060,
1061,
1062,
1063,
1064,
1065,
1066,
1067,
1068,
1069,
1070,
1071,
1072,
1073,
1074,
1075,
1076,
1077,
1078,
1079,
1080,
1081,
1082,
1083,
1084,
1085,
1086,
1087,
1088,
1089,
1090,
1091,
1092,
1093,
1094,
1095,
1096,
1097,
1098,
1099,
1100,
1101,
1102,
1103,
1104,
1105,
1106,
1107,
1108,
1109,
1110,
1111,
1112,
1113,
1114,
1115,
1116
],
"start": 37921,
"length": 8974,
"ending_column": 38,
"is_dependency": false,
"filename_short": "contracts/Contract.sol",
"starting_column": 43,
"filename_absolute": "/tmp/slither-n6e8sup9/contracts/Contract.sol",
"filename_relative": "contracts/Contract.sol"
}
},
"signature": "safeGDAOTransfer(address,uint256)"
}
}
}
},
{
"name": "gdao.transfer(_to,_amount)",
"type": "node",
"source_mapping": {
"lines": [
1112,
1113
],
"start": 46678,
"length": 27,
"ending_column": 21,
"is_dependency": false,
"filename_short": "contracts/Contract.sol",
"starting_column": 29,
"filename_absolute": "/tmp/slither-n6e8sup9/contracts/Contract.sol",
"filename_relative": "contracts/Contract.sol"
},
"additional_fields": {
"underlying_type": "external_calls_sending_eth"
},
"type_specific_fields": {
"parent": {
"name": "safeGDAOTransfer",
"type": "function",
"source_mapping": {
"lines": [
1105,
1106,
1107,
1108,
1109,
1110,
1111,
1112,
1113
],
"start": 46451,
"length": 271,
"ending_column": 38,
"is_dependency": false,
"filename_short": "contracts/Contract.sol",
"starting_column": 86,
"filename_absolute": "/tmp/slither-n6e8sup9/contracts/Contract.sol",
"filename_relative": "contracts/Contract.sol"
},
"type_specific_fields": {
"parent": {
"name": "GovTreasurer",
"type": "contract",
"source_mapping": {
"lines": [
900,
901,
902,
903,
904,
905,
906,
907,
908,
909,
910,
911,
912,
913,
914,
915,
916,
917,
918,
919,
920,
921,
922,
923,
924,
925,
926,
927,
928,
929,
930,
931,
932,
933,
934,
935,
936,
937,
938,
939,
940,
941,
942,
943,
944,
945,
946,
947,
948,
949,
950,
951,
952,
953,
954,
955,
956,
957,
958,
959,
960,
961,
962,
963,
964,
965,
966,
967,
968,
969,
970,
971,
972,
973,
974,
975,
976,
977,
978,
979,
980,
981,
982,
983,
984,
985,
986,
987,
988,
989,
990,
991,
992,
993,
994,
995,
996,
997,
998,
999,
1000,
1001,
1002,
1003,
1004,
1005,
1006,
1007,
1008,
1009,
1010,
1011,
1012,
1013,
1014,
1015,
1016,
1017,
1018,
1019,
1020,
1021,
1022,
1023,
1024,
1025,
1026,
1027,
1028,
1029,
1030,
1031,
1032,
1033,
1034,
1035,
1036,
1037,
1038,
1039,
1040,
1041,
1042,
1043,
1044,
1045,
1046,
1047,
1048,
1049,
1050,
1051,
1052,
1053,
1054,
1055,
1056,
1057,
1058,
1059,
1060,
1061,
1062,
1063,
1064,
1065,
1066,
1067,
1068,
1069,
1070,
1071,
1072,
1073,
1074,
1075,
1076,
1077,
1078,
1079,
1080,
1081,
1082,
1083,
1084,
1085,
1086,
1087,
1088,
1089,
1090,
1091,
1092,
1093,
1094,
1095,
1096,
1097,
1098,
1099,
1100,
1101,
1102,
1103,
1104,
1105,
1106,
1107,
1108,
1109,
1110,
1111,
1112,
1113,
1114,
1115,
1116
],
"start": 37921,
"length": 8974,
"ending_column": 38,
"is_dependency": false,
"filename_short": "contracts/Contract.sol",
"starting_column": 43,
"filename_absolute": "/tmp/slither-n6e8sup9/contracts/Contract.sol",
"filename_relative": "contracts/Contract.sol"
}
},
"signature": "safeGDAOTransfer(address,uint256)"
}
}
}
},
{
"name": "safeGDAOTransfer(msg.sender,pending)",
"type": "node",
"source_mapping": {
"lines": [
1071
],
"start": 44949,
"length": 37,
"ending_column": 44,
"is_dependency": false,
"filename_short": "contracts/Contract.sol",
"starting_column": 7,
"filename_absolute": "/tmp/slither-n6e8sup9/contracts/Contract.sol",
"filename_relative": "contracts/Contract.sol"
},
"additional_fields": {
"underlying_type": "external_calls"
},
"type_specific_fields": {
"parent": {
"name": "deposit",
"type": "function",
"source_mapping": {
"lines": [
1059,
1060,
1061,
1062,
1063,
1064,
1065,
1066,
1067,
1068,
1069,
1070,
1071,
1072,
1073,
1074,
1075,
1076,
1077,
1078,
1079,
1080,
1081,
1082,
1083,
1084,
1085,
1086,
1087,
1088,
1089
],
"start": 44437,
"length": 1100,
"ending_column": 17,
"is_dependency": false,
"filename_short": "contracts/Contract.sol",
"starting_column": 43,
"filename_absolute": "/tmp/slither-n6e8sup9/contracts/Contract.sol",
"filename_relative": "contracts/Contract.sol"
},
"type_specific_fields": {
"parent": {
"name": "GovTreasurer",
"type": "contract",
"source_mapping": {
"lines": [
900,
901,
902,
903,
904,
905,
906,
907,
908,
909,
910,
911,
912,
913,
914,
915,
916,
917,
918,
919,
920,
921,
922,
923,
924,
925,
926,
927,
928,
929,
930,
931,
932,
933,
934,
935,
936,
937,
938,
939,
940,
941,
942,
943,
944,
945,
946,
947,
948,
949,
950,
951,
952,
953,
954,
955,
956,
957,
958,
959,
960,
961,
962,
963,
964,
965,
966,
967,
968,
969,
970,
971,
972,
973,
974,
975,
976,
977,
978,
979,
980,
981,
982,
983,
984,
985,
986,
987,
988,
989,
990,
991,
992,
993,
994,
995,
996,
997,
998,
999,
1000,
1001,
1002,
1003,
1004,
1005,
1006,
1007,
1008,
1009,
1010,
1011,
1012,
1013,
1014,
1015,
1016,
1017,
1018,
1019,
1020,
1021,
1022,
1023,
1024,
1025,
1026,
1027,
1028,
1029,
1030,
1031,
1032,
1033,
1034,
1035,
1036,
1037,
1038,
1039,
1040,
1041,
1042,
1043,
1044,
1045,
1046,
1047,
1048,
1049,
1050,
1051,
1052,
1053,
1054,
1055,
1056,
1057,
1058,
1059,
1060,
1061,
1062,
1063,
1064,
1065,
1066,
1067,
1068,
1069,
1070,
1071,
1072,
1073,
1074,
1075,
1076,
1077,
1078,
1079,
1080,
1081,
1082,
1083,
1084,
1085,
1086,
1087,
1088,
1089,
1090,
1091,
1092,
1093,
1094,
1095,
1096,
1097,
1098,
1099,
1100,
1101,
1102,
1103,
1104,
1105,
1106,
1107,
1108,
1109,
1110,
1111,
1112,
1113,
1114,
1115,
1116
],
"start": 37921,
"length": 8974,
"ending_column": 38,
"is_dependency": false,
"filename_short": "contracts/Contract.sol",
"starting_column": 43,
"filename_absolute": "/tmp/slither-n6e8sup9/contracts/Contract.sol",
"filename_relative": "contracts/Contract.sol"
}
},
"signature": "deposit(uint256,uint256)"
}
}
}
}
],
"locations": [
{
"file": "contracts/Contract.sol",
"name": "deposit",
"type": "function",
"lines": [
1059,
1060,
1061,
1062,
1063,
1064,
1065,
1066,
1067,
1068,
1069,
1070,
1071,
1072,
1073,
1074,
1075,
1076,
1077,
1078,
1079,
1080,
1081,
1082,
1083,
1084,
1085,
1086,
1087,
1088,
1089
]
},
{
"file": "contracts/Contract.sol",
"name": "updatePool(_pid)",
"type": "node",
"lines": [
1063
]
},
{
"file": "contracts/Contract.sol",
"name": "gdao.transfer(_to,GDAOBal)",
"type": "node",
"lines": [
1109,
1110
]
},
{
"file": "contracts/Contract.sol",
"name": "gdao.transfer(_to,_amount)",
"type": "node",
"lines": [
1112,
1113
]
},
{
"file": "contracts/Contract.sol",
"name": "safeGDAOTransfer(msg.sender,pending)",
"type": "node",
"lines": [
1071
]
},
{
"file": "contracts/Contract.sol",
"name": "gdao.transfer(_to,GDAOBal)",
"type": "node",
"lines": [
1109,
1110
]
},
{
"file": "contracts/Contract.sol",
"name": "gdao.transfer(_to,_amount)",
"type": "node",
"lines": [
1112,
1113
]
},
{
"file": "contracts/Contract.sol",
"name": "pool.token.safeTransferFrom(address(msg.sender),address(this),_amount.sub(taxedAmount))",
"type": "node",
"lines": [
1075,
1076,
1077
]
},
{
"file": "contracts/Contract.sol",
"name": "pool.token.safeTransferFrom(address(msg.sender),address(treasury),taxedAmount)",
"type": "node",
"lines": [
1077,
1078,
1079
]
},
{
"file": "contracts/Contract.sol",
"name": "user.amount = user.amount.add(_amount.sub(taxedAmount))",
"type": "node",
"lines": [
1080,
1081,
1082
]
},
{
"file": "contracts/Contract.sol",
"name": "user.rewardDebt = user.amount.mul(pool.accGDAOPerShare).div(1e12)",
"type": "node",
"lines": [
1083,
1084,
1085
]
}
],
"description": "Reentrancy in GovTreasurer.deposit(uint256,uint256) (contracts/Contract.sol#1059-1089):\n\tExternal calls:\n\t- updatePool(_pid) (contracts/Contract.sol#1063)\n\t\t- gdao.transfer(_to,GDAOBal) (contracts/Contract.sol#1109-1110)\n\t\t- gdao.transfer(_to,_amount) (contracts/Contract.sol#1112-1113)\n\t- safeGDAOTransfer(msg.sender,pending) (contracts/Contract.sol#1071)\n\t\t- gdao.transfer(_to,GDAOBal) (contracts/Contract.sol#1109-1110)\n\t\t- gdao.transfer(_to,_amount) (contracts/Contract.sol#1112-1113)\n\t- pool.token.safeTransferFrom(address(msg.sender),address(this),_amount.sub(taxedAmount)) (contracts/Contract.sol#1075-1077)\n\t- pool.token.safeTransferFrom(address(msg.sender),address(treasury),taxedAmount) (contracts/Contract.sol#1077-1079)\n\tState variables written after the call(s):\n\t- user.amount = user.amount.add(_amount.sub(taxedAmount)) (contracts/Contract.sol#1080-1082)\n\tGovTreasurer.userInfo (contracts/Contract.sol#940-941) can be used in cross function reentrancies:\n\t- GovTreasurer.deposit(uint256,uint256) (contracts/Contract.sol#1059-1089)\n\t- GovTreasurer.emergencyWithdraw(uint256) (contracts/Contract.sol#1047-1059)\n\t- GovTreasurer.pendingGDAO(uint256,address) (contracts/Contract.sol#1000-1019)\n\t- GovTreasurer.userInfo (contracts/Contract.sol#940-941)\n\t- GovTreasurer.withdraw(uint256,uint256) (contracts/Contract.sol#1089-1104)\n\t- user.rewardDebt = user.amount.mul(pool.accGDAOPerShare).div(1e12) (contracts/Contract.sol#1083-1085)\n\tGovTreasurer.userInfo (contracts/Contract.sol#940-941) can be used in cross function reentrancies:\n\t- GovTreasurer.deposit(uint256,uint256) (contracts/Contract.sol#1059-1089)\n\t- GovTreasurer.emergencyWithdraw(uint256) (contracts/Contract.sol#1047-1059)\n\t- GovTreasurer.pendingGDAO(uint256,address) (contracts/Contract.sol#1000-1019)\n\t- GovTreasurer.userInfo (contracts/Contract.sol#940-941)\n\t- GovTreasurer.withdraw(uint256,uint256) (contracts/Contract.sol#1089-1104)"
}
|
| medium | reentrancy | slither | Reentrancy in GovTreasurer.set(uint256,uint256,bool) (contracts/Contract.sol#976-985): | 75 | no | — |
viewevidence_json{
"impact": "Medium",
"detector": "reentrancy-no-eth",
"elements": [
{
"name": "set",
"type": "function",
"source_mapping": {
"lines": [
976,
977,
978,
979,
980,
981,
982,
983,
984,
985
],
"start": 41180,
"length": 298,
"ending_column": 31,
"is_dependency": false,
"filename_short": "contracts/Contract.sol",
"starting_column": 51,
"filename_absolute": "/tmp/slither-n6e8sup9/contracts/Contract.sol",
"filename_relative": "contracts/Contract.sol"
},
"type_specific_fields": {
"parent": {
"name": "GovTreasurer",
"type": "contract",
"source_mapping": {
"lines": [
900,
901,
902,
903,
904,
905,
906,
907,
908,
909,
910,
911,
912,
913,
914,
915,
916,
917,
918,
919,
920,
921,
922,
923,
924,
925,
926,
927,
928,
929,
930,
931,
932,
933,
934,
935,
936,
937,
938,
939,
940,
941,
942,
943,
944,
945,
946,
947,
948,
949,
950,
951,
952,
953,
954,
955,
956,
957,
958,
959,
960,
961,
962,
963,
964,
965,
966,
967,
968,
969,
970,
971,
972,
973,
974,
975,
976,
977,
978,
979,
980,
981,
982,
983,
984,
985,
986,
987,
988,
989,
990,
991,
992,
993,
994,
995,
996,
997,
998,
999,
1000,
1001,
1002,
1003,
1004,
1005,
1006,
1007,
1008,
1009,
1010,
1011,
1012,
1013,
1014,
1015,
1016,
1017,
1018,
1019,
1020,
1021,
1022,
1023,
1024,
1025,
1026,
1027,
1028,
1029,
1030,
1031,
1032,
1033,
1034,
1035,
1036,
1037,
1038,
1039,
1040,
1041,
1042,
1043,
1044,
1045,
1046,
1047,
1048,
1049,
1050,
1051,
1052,
1053,
1054,
1055,
1056,
1057,
1058,
1059,
1060,
1061,
1062,
1063,
1064,
1065,
1066,
1067,
1068,
1069,
1070,
1071,
1072,
1073,
1074,
1075,
1076,
1077,
1078,
1079,
1080,
1081,
1082,
1083,
1084,
1085,
1086,
1087,
1088,
1089,
1090,
1091,
1092,
1093,
1094,
1095,
1096,
1097,
1098,
1099,
1100,
1101,
1102,
1103,
1104,
1105,
1106,
1107,
1108,
1109,
1110,
1111,
1112,
1113,
1114,
1115,
1116
],
"start": 37921,
"length": 8974,
"ending_column": 38,
"is_dependency": false,
"filename_short": "contracts/Contract.sol",
"starting_column": 43,
"filename_absolute": "/tmp/slither-n6e8sup9/contracts/Contract.sol",
"filename_relative": "contracts/Contract.sol"
}
},
"signature": "set(uint256,uint256,bool)"
}
},
{
"name": "massUpdatePools()",
"type": "node",
"source_mapping": {
"lines": [
982
],
"start": 41304,
"length": 17,
"ending_column": 33,
"is_dependency": false,
"filename_short": "contracts/Contract.sol",
"starting_column": 16,
"filename_absolute": "/tmp/slither-n6e8sup9/contracts/Contract.sol",
"filename_relative": "contracts/Contract.sol"
},
"additional_fields": {
"underlying_type": "external_calls"
},
"type_specific_fields": {
"parent": {
"name": "set",
"type": "function",
"source_mapping": {
"lines": [
976,
977,
978,
979,
980,
981,
982,
983,
984,
985
],
"start": 41180,
"length": 298,
"ending_column": 31,
"is_dependency": false,
"filename_short": "contracts/Contract.sol",
"starting_column": 51,
"filename_absolute": "/tmp/slither-n6e8sup9/contracts/Contract.sol",
"filename_relative": "contracts/Contract.sol"
},
"type_specific_fields": {
"parent": {
"name": "GovTreasurer",
"type": "contract",
"source_mapping": {
"lines": [
900,
901,
902,
903,
904,
905,
906,
907,
908,
909,
910,
911,
912,
913,
914,
915,
916,
917,
918,
919,
920,
921,
922,
923,
924,
925,
926,
927,
928,
929,
930,
931,
932,
933,
934,
935,
936,
937,
938,
939,
940,
941,
942,
943,
944,
945,
946,
947,
948,
949,
950,
951,
952,
953,
954,
955,
956,
957,
958,
959,
960,
961,
962,
963,
964,
965,
966,
967,
968,
969,
970,
971,
972,
973,
974,
975,
976,
977,
978,
979,
980,
981,
982,
983,
984,
985,
986,
987,
988,
989,
990,
991,
992,
993,
994,
995,
996,
997,
998,
999,
1000,
1001,
1002,
1003,
1004,
1005,
1006,
1007,
1008,
1009,
1010,
1011,
1012,
1013,
1014,
1015,
1016,
1017,
1018,
1019,
1020,
1021,
1022,
1023,
1024,
1025,
1026,
1027,
1028,
1029,
1030,
1031,
1032,
1033,
1034,
1035,
1036,
1037,
1038,
1039,
1040,
1041,
1042,
1043,
1044,
1045,
1046,
1047,
1048,
1049,
1050,
1051,
1052,
1053,
1054,
1055,
1056,
1057,
1058,
1059,
1060,
1061,
1062,
1063,
1064,
1065,
1066,
1067,
1068,
1069,
1070,
1071,
1072,
1073,
1074,
1075,
1076,
1077,
1078,
1079,
1080,
1081,
1082,
1083,
1084,
1085,
1086,
1087,
1088,
1089,
1090,
1091,
1092,
1093,
1094,
1095,
1096,
1097,
1098,
1099,
1100,
1101,
1102,
1103,
1104,
1105,
1106,
1107,
1108,
1109,
1110,
1111,
1112,
1113,
1114,
1115,
1116
],
"start": 37921,
"length": 8974,
"ending_column": 38,
"is_dependency": false,
"filename_short": "contracts/Contract.sol",
"starting_column": 43,
"filename_absolute": "/tmp/slither-n6e8sup9/contracts/Contract.sol",
"filename_relative": "contracts/Contract.sol"
}
},
"signature": "set(uint256,uint256,bool)"
}
}
}
},
{
"name": "gdao.transfer(_to,GDAOBal)",
"type": "node",
"source_mapping": {
"lines": [
1109,
1110
],
"start": 46620,
"length": 27,
"ending_column": 7,
"is_dependency": false,
"filename_short": "contracts/Contract.sol",
"starting_column": 47,
"filename_absolute": "/tmp/slither-n6e8sup9/contracts/Contract.sol",
"filename_relative": "contracts/Contract.sol"
},
"additional_fields": {
"underlying_type": "external_calls_sending_eth"
},
"type_specific_fields": {
"parent": {
"name": "safeGDAOTransfer",
"type": "function",
"source_mapping": {
"lines": [
1105,
1106,
1107,
1108,
1109,
1110,
1111,
1112,
1113
],
"start": 46451,
"length": 271,
"ending_column": 38,
"is_dependency": false,
"filename_short": "contracts/Contract.sol",
"starting_column": 86,
"filename_absolute": "/tmp/slither-n6e8sup9/contracts/Contract.sol",
"filename_relative": "contracts/Contract.sol"
},
"type_specific_fields": {
"parent": {
"name": "GovTreasurer",
"type": "contract",
"source_mapping": {
"lines": [
900,
901,
902,
903,
904,
905,
906,
907,
908,
909,
910,
911,
912,
913,
914,
915,
916,
917,
918,
919,
920,
921,
922,
923,
924,
925,
926,
927,
928,
929,
930,
931,
932,
933,
934,
935,
936,
937,
938,
939,
940,
941,
942,
943,
944,
945,
946,
947,
948,
949,
950,
951,
952,
953,
954,
955,
956,
957,
958,
959,
960,
961,
962,
963,
964,
965,
966,
967,
968,
969,
970,
971,
972,
973,
974,
975,
976,
977,
978,
979,
980,
981,
982,
983,
984,
985,
986,
987,
988,
989,
990,
991,
992,
993,
994,
995,
996,
997,
998,
999,
1000,
1001,
1002,
1003,
1004,
1005,
1006,
1007,
1008,
1009,
1010,
1011,
1012,
1013,
1014,
1015,
1016,
1017,
1018,
1019,
1020,
1021,
1022,
1023,
1024,
1025,
1026,
1027,
1028,
1029,
1030,
1031,
1032,
1033,
1034,
1035,
1036,
1037,
1038,
1039,
1040,
1041,
1042,
1043,
1044,
1045,
1046,
1047,
1048,
1049,
1050,
1051,
1052,
1053,
1054,
1055,
1056,
1057,
1058,
1059,
1060,
1061,
1062,
1063,
1064,
1065,
1066,
1067,
1068,
1069,
1070,
1071,
1072,
1073,
1074,
1075,
1076,
1077,
1078,
1079,
1080,
1081,
1082,
1083,
1084,
1085,
1086,
1087,
1088,
1089,
1090,
1091,
1092,
1093,
1094,
1095,
1096,
1097,
1098,
1099,
1100,
1101,
1102,
1103,
1104,
1105,
1106,
1107,
1108,
1109,
1110,
1111,
1112,
1113,
1114,
1115,
1116
],
"start": 37921,
"length": 8974,
"ending_column": 38,
"is_dependency": false,
"filename_short": "contracts/Contract.sol",
"starting_column": 43,
"filename_absolute": "/tmp/slither-n6e8sup9/contracts/Contract.sol",
"filename_relative": "contracts/Contract.sol"
}
},
"signature": "safeGDAOTransfer(address,uint256)"
}
}
}
},
{
"name": "gdao.transfer(_to,_amount)",
"type": "node",
"source_mapping": {
"lines": [
1112,
1113
],
"start": 46678,
"length": 27,
"ending_column": 21,
"is_dependency": false,
"filename_short": "contracts/Contract.sol",
"starting_column": 29,
"filename_absolute": "/tmp/slither-n6e8sup9/contracts/Contract.sol",
"filename_relative": "contracts/Contract.sol"
},
"additional_fields": {
"underlying_type": "external_calls_sending_eth"
},
"type_specific_fields": {
"parent": {
"name": "safeGDAOTransfer",
"type": "function",
"source_mapping": {
"lines": [
1105,
1106,
1107,
1108,
1109,
1110,
1111,
1112,
1113
],
"start": 46451,
"length": 271,
"ending_column": 38,
"is_dependency": false,
"filename_short": "contracts/Contract.sol",
"starting_column": 86,
"filename_absolute": "/tmp/slither-n6e8sup9/contracts/Contract.sol",
"filename_relative": "contracts/Contract.sol"
},
"type_specific_fields": {
"parent": {
"name": "GovTreasurer",
"type": "contract",
"source_mapping": {
"lines": [
900,
901,
902,
903,
904,
905,
906,
907,
908,
909,
910,
911,
912,
913,
914,
915,
916,
917,
918,
919,
920,
921,
922,
923,
924,
925,
926,
927,
928,
929,
930,
931,
932,
933,
934,
935,
936,
937,
938,
939,
940,
941,
942,
943,
944,
945,
946,
947,
948,
949,
950,
951,
952,
953,
954,
955,
956,
957,
958,
959,
960,
961,
962,
963,
964,
965,
966,
967,
968,
969,
970,
971,
972,
973,
974,
975,
976,
977,
978,
979,
980,
981,
982,
983,
984,
985,
986,
987,
988,
989,
990,
991,
992,
993,
994,
995,
996,
997,
998,
999,
1000,
1001,
1002,
1003,
1004,
1005,
1006,
1007,
1008,
1009,
1010,
1011,
1012,
1013,
1014,
1015,
1016,
1017,
1018,
1019,
1020,
1021,
1022,
1023,
1024,
1025,
1026,
1027,
1028,
1029,
1030,
1031,
1032,
1033,
1034,
1035,
1036,
1037,
1038,
1039,
1040,
1041,
1042,
1043,
1044,
1045,
1046,
1047,
1048,
1049,
1050,
1051,
1052,
1053,
1054,
1055,
1056,
1057,
1058,
1059,
1060,
1061,
1062,
1063,
1064,
1065,
1066,
1067,
1068,
1069,
1070,
1071,
1072,
1073,
1074,
1075,
1076,
1077,
1078,
1079,
1080,
1081,
1082,
1083,
1084,
1085,
1086,
1087,
1088,
1089,
1090,
1091,
1092,
1093,
1094,
1095,
1096,
1097,
1098,
1099,
1100,
1101,
1102,
1103,
1104,
1105,
1106,
1107,
1108,
1109,
1110,
1111,
1112,
1113,
1114,
1115,
1116
],
"start": 37921,
"length": 8974,
"ending_column": 38,
"is_dependency": false,
"filename_short": "contracts/Contract.sol",
"starting_column": 43,
"filename_absolute": "/tmp/slither-n6e8sup9/contracts/Contract.sol",
"filename_relative": "contracts/Contract.sol"
}
},
"signature": "safeGDAOTransfer(address,uint256)"
}
}
}
},
{
"name": "poolInfo[_pid].allocPoint = _allocPoint",
"type": "node",
"source_mapping": {
"lines": [
984,
985
],
"start": 41432,
"length": 39,
"ending_column": 24,
"is_dependency": false,
"filename_short": "contracts/Contract.sol",
"starting_column": 39,
"filename_absolute": "/tmp/slither-n6e8sup9/contracts/Contract.sol",
"filename_relative": "contracts/Contract.sol"
},
"additional_fields": {
"variable_name": "poolInfo",
"underlying_type": "variables_written"
},
"type_specific_fields": {
"parent": {
"name": "set",
"type": "function",
"source_mapping": {
"lines": [
976,
977,
978,
979,
980,
981,
982,
983,
984,
985
],
"start": 41180,
"length": 298,
"ending_column": 31,
"is_dependency": false,
"filename_short": "contracts/Contract.sol",
"starting_column": 51,
"filename_absolute": "/tmp/slither-n6e8sup9/contracts/Contract.sol",
"filename_relative": "contracts/Contract.sol"
},
"type_specific_fields": {
"parent": {
"name": "GovTreasurer",
"type": "contract",
"source_mapping": {
"lines": [
900,
901,
902,
903,
904,
905,
906,
907,
908,
909,
910,
911,
912,
913,
914,
915,
916,
917,
918,
919,
920,
921,
922,
923,
924,
925,
926,
927,
928,
929,
930,
931,
932,
933,
934,
935,
936,
937,
938,
939,
940,
941,
942,
943,
944,
945,
946,
947,
948,
949,
950,
951,
952,
953,
954,
955,
956,
957,
958,
959,
960,
961,
962,
963,
964,
965,
966,
967,
968,
969,
970,
971,
972,
973,
974,
975,
976,
977,
978,
979,
980,
981,
982,
983,
984,
985,
986,
987,
988,
989,
990,
991,
992,
993,
994,
995,
996,
997,
998,
999,
1000,
1001,
1002,
1003,
1004,
1005,
1006,
1007,
1008,
1009,
1010,
1011,
1012,
1013,
1014,
1015,
1016,
1017,
1018,
1019,
1020,
1021,
1022,
1023,
1024,
1025,
1026,
1027,
1028,
1029,
1030,
1031,
1032,
1033,
1034,
1035,
1036,
1037,
1038,
1039,
1040,
1041,
1042,
1043,
1044,
1045,
1046,
1047,
1048,
1049,
1050,
1051,
1052,
1053,
1054,
1055,
1056,
1057,
1058,
1059,
1060,
1061,
1062,
1063,
1064,
1065,
1066,
1067,
1068,
1069,
1070,
1071,
1072,
1073,
1074,
1075,
1076,
1077,
1078,
1079,
1080,
1081,
1082,
1083,
1084,
1085,
1086,
1087,
1088,
1089,
1090,
1091,
1092,
1093,
1094,
1095,
1096,
1097,
1098,
1099,
1100,
1101,
1102,
1103,
1104,
1105,
1106,
1107,
1108,
1109,
1110,
1111,
1112,
1113,
1114,
1115,
1116
],
"start": 37921,
"length": 8974,
"ending_column": 38,
"is_dependency": false,
"filename_short": "contracts/Contract.sol",
"starting_column": 43,
"filename_absolute": "/tmp/slither-n6e8sup9/contracts/Contract.sol",
"filename_relative": "contracts/Contract.sol"
}
},
"signature": "set(uint256,uint256,bool)"
}
}
}
}
],
"locations": [
{
"file": "contracts/Contract.sol",
"name": "set",
"type": "function",
"lines": [
976,
977,
978,
979,
980,
981,
982,
983,
984,
985
]
},
{
"file": "contracts/Contract.sol",
"name": "massUpdatePools()",
"type": "node",
"lines": [
982
]
},
{
"file": "contracts/Contract.sol",
"name": "gdao.transfer(_to,GDAOBal)",
"type": "node",
"lines": [
1109,
1110
]
},
{
"file": "contracts/Contract.sol",
"name": "gdao.transfer(_to,_amount)",
"type": "node",
"lines": [
1112,
1113
]
},
{
"file": "contracts/Contract.sol",
"name": "poolInfo[_pid].allocPoint = _allocPoint",
"type": "node",
"lines": [
984,
985
]
},
{
"file": "contracts/Contract.sol",
"name": "totalAllocPoint = totalAllocPoint.sub(poolInfo[_pid].allocPoint).add(_allocPoint)",
"type": "node",
"lines": [
982,
983,
984
]
}
],
"description": "Reentrancy in GovTreasurer.set(uint256,uint256,bool) (contracts/Contract.sol#976-985):\n\tExternal calls:\n\t- massUpdatePools() (contracts/Contract.sol#982)\n\t\t- gdao.transfer(_to,GDAOBal) (contracts/Contract.sol#1109-1110)\n\t\t- gdao.transfer(_to,_amount) (contracts/Contract.sol#1112-1113)\n\tState variables written after the call(s):\n\t- poolInfo[_pid].allocPoint = _allocPoint (contracts/Contract.sol#984-985)\n\tGovTreasurer.poolInfo (contracts/Contract.sol#940) can be used in cross function reentrancies:\n\t- GovTreasurer.add(uint256,IERC20,uint256,bool) (contracts/Contract.sol#963-976)\n\t- GovTreasurer.checkPoolDuplicate(IERC20) (contracts/Contract.sol#955-963)\n\t- GovTreasurer.deposit(uint256,uint256) (contracts/Contract.sol#1059-1089)\n\t- GovTreasurer.emergencyWithdraw(uint256) (contracts/Contract.sol#1047-1059)\n\t- GovTreasurer.massUpdatePools() (contracts/Contract.sol#1021-1029)\n\t- GovTreasurer.pendingGDAO(uint256,address) (contracts/Contract.sol#1000-1019)\n\t- GovTreasurer.poolInfo (contracts/Contract.sol#940)\n\t- GovTreasurer.poolLength() (contracts/Contract.sol#953-954)\n\t- GovTreasurer.set(uint256,uint256,bool) (contracts/Contract.sol#976-985)\n\t- GovTreasurer.updatePool(uint256) (contracts/Contract.sol#1030-1040)\n\t- GovTreasurer.withdraw(uint256,uint256) (contracts/Contract.sol#1089-1104)\n\t- totalAllocPoint = totalAllocPoint.sub(poolInfo[_pid].allocPoint).add(_allocPoint) (contracts/Contract.sol#982-984)\n\tGovTreasurer.totalAllocPoint (contracts/Contract.sol#942) can be used in cross function reentrancies:\n\t- GovTreasurer.add(uint256,IERC20,uint256,bool) (contracts/Contract.sol#963-976)\n\t- GovTreasurer.pendingGDAO(uint256,address) (contracts/Contract.sol#1000-1019)\n\t- GovTreasurer.set(uint256,uint256,bool) (contracts/Contract.sol#976-985)\n\t- GovTreasurer.totalAllocPoint (contracts/Contract.sol#942)\n\t- GovTreasurer.updatePool(uint256) (contracts/Contract.sol#1030-1040)"
}
|
| medium | other | detector | ETH value transfer possible | 40 | no | no |
viewtrace_id: 0xe159a4bc5ae9b4587d2879cb85fbd8b1f79af1b02422cc4ca92bde955fa2181f
call_targets:
0x4dac3e07316d2a31baabb252d89663dee8f76f09
target_varies:
no
classification:
constant_target
validation_json{
"sink": "CALL",
"errors": 0,
"status": "sink_reached",
"attempts": 1,
"trace_id": "0xe159a4bc5ae9b4587d2879cb85fbd8b1f79af1b02422cc4ca92bde955fa2181f",
"confirmed": false,
"trace_mode": "callTracer",
"call_targets": [
"0x4dac3e07316d2a31baabb252d89663dee8f76f09"
],
"matched_probe": null,
"target_varies": false,
"classification": "constant_target"
}
witness_json{
"notes": "heuristic witness; entrypoints are best-effort selectors with zeroed calldata",
"constraints": [],
"entrypoints": [
{
"calldata": "0x8dbb1e3a",
"selector": "0x8dbb1e3a",
"calldata_variants": [
"0x8dbb1e3a",
"0x8dbb1e3a0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x93f1a40b",
"selector": "0x93f1a40b",
"calldata_variants": [
"0x93f1a40b",
"0x93f1a40b0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x988d7a60",
"selector": "0x988d7a60",
"calldata_variants": [
"0x988d7a60",
"0x988d7a600000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xa29a0d90",
"selector": "0xa29a0d90",
"calldata_variants": [
"0xa29a0d90",
"0xa29a0d900000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xe2bbb158",
"selector": "0xe2bbb158",
"calldata_variants": [
"0xe2bbb158",
"0xe2bbb1580000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xf2fde38b",
"selector": "0xf2fde38b",
"calldata_variants": [
"0xf2fde38b",
"0xf2fde38b0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x630b5ba1",
"selector": "0x630b5ba1",
"calldata_variants": [
"0x630b5ba1",
"0x630b5ba10000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x64482f79",
"selector": "0x64482f79",
"calldata_variants": [
"0x64482f79",
"0x64482f790000000000000000000000000000000000000000000000000000000000000000"
]
}
]
}
evidence_json{
"examples": [
{
"pc": 7827,
"opcode": "CALL",
"returndata_checked": null,
"value_expression_category": "computed",
"target_expression_category": "computed"
},
{
"pc": 8039,
"opcode": "CALL",
"returndata_checked": null,
"value_expression_category": "computed",
"target_expression_category": "computed"
},
{
"pc": 9462,
"opcode": "CALL",
"returndata_checked": null,
"value_expression_category": "computed",
"target_expression_category": "computed"
}
],
"eth_value_calls": 3,
"guards_detected": [
{
"pc": 4846,
"type": "msg_sender_eq_const",
"value": "0xffffffffffffffffffffffffffffffffffffffff"
},
{
"pc": 9890,
"type": "tx_origin_used"
}
]
}
|
| medium | reentrancy | slither | Reentrancy in GovTreasurer.add(uint256,IERC20,uint256,bool) (contracts/Contract.sol#963-976): | 75 | no | — |
viewevidence_json{
"impact": "Medium",
"detector": "reentrancy-no-eth",
"elements": [
{
"name": "add",
"type": "function",
"source_mapping": {
"lines": [
963,
964,
965,
966,
967,
968,
969,
970,
971,
972,
973,
974,
975,
976
],
"start": 40588,
"length": 553,
"ending_column": 12,
"is_dependency": false,
"filename_short": "contracts/Contract.sol",
"starting_column": 45,
"filename_absolute": "/tmp/slither-n6e8sup9/contracts/Contract.sol",
"filename_relative": "contracts/Contract.sol"
},
"type_specific_fields": {
"parent": {
"name": "GovTreasurer",
"type": "contract",
"source_mapping": {
"lines": [
900,
901,
902,
903,
904,
905,
906,
907,
908,
909,
910,
911,
912,
913,
914,
915,
916,
917,
918,
919,
920,
921,
922,
923,
924,
925,
926,
927,
928,
929,
930,
931,
932,
933,
934,
935,
936,
937,
938,
939,
940,
941,
942,
943,
944,
945,
946,
947,
948,
949,
950,
951,
952,
953,
954,
955,
956,
957,
958,
959,
960,
961,
962,
963,
964,
965,
966,
967,
968,
969,
970,
971,
972,
973,
974,
975,
976,
977,
978,
979,
980,
981,
982,
983,
984,
985,
986,
987,
988,
989,
990,
991,
992,
993,
994,
995,
996,
997,
998,
999,
1000,
1001,
1002,
1003,
1004,
1005,
1006,
1007,
1008,
1009,
1010,
1011,
1012,
1013,
1014,
1015,
1016,
1017,
1018,
1019,
1020,
1021,
1022,
1023,
1024,
1025,
1026,
1027,
1028,
1029,
1030,
1031,
1032,
1033,
1034,
1035,
1036,
1037,
1038,
1039,
1040,
1041,
1042,
1043,
1044,
1045,
1046,
1047,
1048,
1049,
1050,
1051,
1052,
1053,
1054,
1055,
1056,
1057,
1058,
1059,
1060,
1061,
1062,
1063,
1064,
1065,
1066,
1067,
1068,
1069,
1070,
1071,
1072,
1073,
1074,
1075,
1076,
1077,
1078,
1079,
1080,
1081,
1082,
1083,
1084,
1085,
1086,
1087,
1088,
1089,
1090,
1091,
1092,
1093,
1094,
1095,
1096,
1097,
1098,
1099,
1100,
1101,
1102,
1103,
1104,
1105,
1106,
1107,
1108,
1109,
1110,
1111,
1112,
1113,
1114,
1115,
1116
],
"start": 37921,
"length": 8974,
"ending_column": 38,
"is_dependency": false,
"filename_short": "contracts/Contract.sol",
"starting_column": 43,
"filename_absolute": "/tmp/slither-n6e8sup9/contracts/Contract.sol",
"filename_relative": "contracts/Contract.sol"
}
},
"signature": "add(uint256,IERC20,uint256,bool)"
}
},
{
"name": "massUpdatePools()",
"type": "node",
"source_mapping": {
"lines": [
965
],
"start": 40740,
"length": 17,
"ending_column": 55,
"is_dependency": false,
"filename_short": "contracts/Contract.sol",
"starting_column": 38,
"filename_absolute": "/tmp/slither-n6e8sup9/contracts/Contract.sol",
"filename_relative": "contracts/Contract.sol"
},
"additional_fields": {
"underlying_type": "external_calls"
},
"type_specific_fields": {
"parent": {
"name": "add",
"type": "function",
"source_mapping": {
"lines": [
963,
964,
965,
966,
967,
968,
969,
970,
971,
972,
973,
974,
975,
976
],
"start": 40588,
"length": 553,
"ending_column": 12,
"is_dependency": false,
"filename_short": "contracts/Contract.sol",
"starting_column": 45,
"filename_absolute": "/tmp/slither-n6e8sup9/contracts/Contract.sol",
"filename_relative": "contracts/Contract.sol"
},
"type_specific_fields": {
"parent": {
"name": "GovTreasurer",
"type": "contract",
"source_mapping": {
"lines": [
900,
901,
902,
903,
904,
905,
906,
907,
908,
909,
910,
911,
912,
913,
914,
915,
916,
917,
918,
919,
920,
921,
922,
923,
924,
925,
926,
927,
928,
929,
930,
931,
932,
933,
934,
935,
936,
937,
938,
939,
940,
941,
942,
943,
944,
945,
946,
947,
948,
949,
950,
951,
952,
953,
954,
955,
956,
957,
958,
959,
960,
961,
962,
963,
964,
965,
966,
967,
968,
969,
970,
971,
972,
973,
974,
975,
976,
977,
978,
979,
980,
981,
982,
983,
984,
985,
986,
987,
988,
989,
990,
991,
992,
993,
994,
995,
996,
997,
998,
999,
1000,
1001,
1002,
1003,
1004,
1005,
1006,
1007,
1008,
1009,
1010,
1011,
1012,
1013,
1014,
1015,
1016,
1017,
1018,
1019,
1020,
1021,
1022,
1023,
1024,
1025,
1026,
1027,
1028,
1029,
1030,
1031,
1032,
1033,
1034,
1035,
1036,
1037,
1038,
1039,
1040,
1041,
1042,
1043,
1044,
1045,
1046,
1047,
1048,
1049,
1050,
1051,
1052,
1053,
1054,
1055,
1056,
1057,
1058,
1059,
1060,
1061,
1062,
1063,
1064,
1065,
1066,
1067,
1068,
1069,
1070,
1071,
1072,
1073,
1074,
1075,
1076,
1077,
1078,
1079,
1080,
1081,
1082,
1083,
1084,
1085,
1086,
1087,
1088,
1089,
1090,
1091,
1092,
1093,
1094,
1095,
1096,
1097,
1098,
1099,
1100,
1101,
1102,
1103,
1104,
1105,
1106,
1107,
1108,
1109,
1110,
1111,
1112,
1113,
1114,
1115,
1116
],
"start": 37921,
"length": 8974,
"ending_column": 38,
"is_dependency": false,
"filename_short": "contracts/Contract.sol",
"starting_column": 43,
"filename_absolute": "/tmp/slither-n6e8sup9/contracts/Contract.sol",
"filename_relative": "contracts/Contract.sol"
}
},
"signature": "add(uint256,IERC20,uint256,bool)"
}
}
}
},
{
"name": "gdao.transfer(_to,GDAOBal)",
"type": "node",
"source_mapping": {
"lines": [
1109,
1110
],
"start": 46620,
"length": 27,
"ending_column": 7,
"is_dependency": false,
"filename_short": "contracts/Contract.sol",
"starting_column": 47,
"filename_absolute": "/tmp/slither-n6e8sup9/contracts/Contract.sol",
"filename_relative": "contracts/Contract.sol"
},
"additional_fields": {
"underlying_type": "external_calls_sending_eth"
},
"type_specific_fields": {
"parent": {
"name": "safeGDAOTransfer",
"type": "function",
"source_mapping": {
"lines": [
1105,
1106,
1107,
1108,
1109,
1110,
1111,
1112,
1113
],
"start": 46451,
"length": 271,
"ending_column": 38,
"is_dependency": false,
"filename_short": "contracts/Contract.sol",
"starting_column": 86,
"filename_absolute": "/tmp/slither-n6e8sup9/contracts/Contract.sol",
"filename_relative": "contracts/Contract.sol"
},
"type_specific_fields": {
"parent": {
"name": "GovTreasurer",
"type": "contract",
"source_mapping": {
"lines": [
900,
901,
902,
903,
904,
905,
906,
907,
908,
909,
910,
911,
912,
913,
914,
915,
916,
917,
918,
919,
920,
921,
922,
923,
924,
925,
926,
927,
928,
929,
930,
931,
932,
933,
934,
935,
936,
937,
938,
939,
940,
941,
942,
943,
944,
945,
946,
947,
948,
949,
950,
951,
952,
953,
954,
955,
956,
957,
958,
959,
960,
961,
962,
963,
964,
965,
966,
967,
968,
969,
970,
971,
972,
973,
974,
975,
976,
977,
978,
979,
980,
981,
982,
983,
984,
985,
986,
987,
988,
989,
990,
991,
992,
993,
994,
995,
996,
997,
998,
999,
1000,
1001,
1002,
1003,
1004,
1005,
1006,
1007,
1008,
1009,
1010,
1011,
1012,
1013,
1014,
1015,
1016,
1017,
1018,
1019,
1020,
1021,
1022,
1023,
1024,
1025,
1026,
1027,
1028,
1029,
1030,
1031,
1032,
1033,
1034,
1035,
1036,
1037,
1038,
1039,
1040,
1041,
1042,
1043,
1044,
1045,
1046,
1047,
1048,
1049,
1050,
1051,
1052,
1053,
1054,
1055,
1056,
1057,
1058,
1059,
1060,
1061,
1062,
1063,
1064,
1065,
1066,
1067,
1068,
1069,
1070,
1071,
1072,
1073,
1074,
1075,
1076,
1077,
1078,
1079,
1080,
1081,
1082,
1083,
1084,
1085,
1086,
1087,
1088,
1089,
1090,
1091,
1092,
1093,
1094,
1095,
1096,
1097,
1098,
1099,
1100,
1101,
1102,
1103,
1104,
1105,
1106,
1107,
1108,
1109,
1110,
1111,
1112,
1113,
1114,
1115,
1116
],
"start": 37921,
"length": 8974,
"ending_column": 38,
"is_dependency": false,
"filename_short": "contracts/Contract.sol",
"starting_column": 43,
"filename_absolute": "/tmp/slither-n6e8sup9/contracts/Contract.sol",
"filename_relative": "contracts/Contract.sol"
}
},
"signature": "safeGDAOTransfer(address,uint256)"
}
}
}
},
{
"name": "gdao.transfer(_to,_amount)",
"type": "node",
"source_mapping": {
"lines": [
1112,
1113
],
"start": 46678,
"length": 27,
"ending_column": 21,
"is_dependency": false,
"filename_short": "contracts/Contract.sol",
"starting_column": 29,
"filename_absolute": "/tmp/slither-n6e8sup9/contracts/Contract.sol",
"filename_relative": "contracts/Contract.sol"
},
"additional_fields": {
"underlying_type": "external_calls_sending_eth"
},
"type_specific_fields": {
"parent": {
"name": "safeGDAOTransfer",
"type": "function",
"source_mapping": {
"lines": [
1105,
1106,
1107,
1108,
1109,
1110,
1111,
1112,
1113
],
"start": 46451,
"length": 271,
"ending_column": 38,
"is_dependency": false,
"filename_short": "contracts/Contract.sol",
"starting_column": 86,
"filename_absolute": "/tmp/slither-n6e8sup9/contracts/Contract.sol",
"filename_relative": "contracts/Contract.sol"
},
"type_specific_fields": {
"parent": {
"name": "GovTreasurer",
"type": "contract",
"source_mapping": {
"lines": [
900,
901,
902,
903,
904,
905,
906,
907,
908,
909,
910,
911,
912,
913,
914,
915,
916,
917,
918,
919,
920,
921,
922,
923,
924,
925,
926,
927,
928,
929,
930,
931,
932,
933,
934,
935,
936,
937,
938,
939,
940,
941,
942,
943,
944,
945,
946,
947,
948,
949,
950,
951,
952,
953,
954,
955,
956,
957,
958,
959,
960,
961,
962,
963,
964,
965,
966,
967,
968,
969,
970,
971,
972,
973,
974,
975,
976,
977,
978,
979,
980,
981,
982,
983,
984,
985,
986,
987,
988,
989,
990,
991,
992,
993,
994,
995,
996,
997,
998,
999,
1000,
1001,
1002,
1003,
1004,
1005,
1006,
1007,
1008,
1009,
1010,
1011,
1012,
1013,
1014,
1015,
1016,
1017,
1018,
1019,
1020,
1021,
1022,
1023,
1024,
1025,
1026,
1027,
1028,
1029,
1030,
1031,
1032,
1033,
1034,
1035,
1036,
1037,
1038,
1039,
1040,
1041,
1042,
1043,
1044,
1045,
1046,
1047,
1048,
1049,
1050,
1051,
1052,
1053,
1054,
1055,
1056,
1057,
1058,
1059,
1060,
1061,
1062,
1063,
1064,
1065,
1066,
1067,
1068,
1069,
1070,
1071,
1072,
1073,
1074,
1075,
1076,
1077,
1078,
1079,
1080,
1081,
1082,
1083,
1084,
1085,
1086,
1087,
1088,
1089,
1090,
1091,
1092,
1093,
1094,
1095,
1096,
1097,
1098,
1099,
1100,
1101,
1102,
1103,
1104,
1105,
1106,
1107,
1108,
1109,
1110,
1111,
1112,
1113,
1114,
1115,
1116
],
"start": 37921,
"length": 8974,
"ending_column": 38,
"is_dependency": false,
"filename_short": "contracts/Contract.sol",
"starting_column": 43,
"filename_absolute": "/tmp/slither-n6e8sup9/contracts/Contract.sol",
"filename_relative": "contracts/Contract.sol"
}
},
"signature": "safeGDAOTransfer(address,uint256)"
}
}
}
},
{
"name": "poolInfo.push(PoolInfo({token:_token,allocPoint:_allocPoint,taxRate:_taxRate,lastRewardBlock:lastRewardBlock,accGDAOPerShare:0}))",
"type": "node",
"source_mapping": {
"lines": [
968,
969,
970,
971,
972,
973,
974,
975,
976
],
"start": 40926,
"length": 208,
"ending_column": 5,
"is_dependency": false,
"filename_short": "contracts/Contract.sol",
"starting_column": 6,
"filename_absolute": "/tmp/slither-n6e8sup9/contracts/Contract.sol",
"filename_relative": "contracts/Contract.sol"
},
"additional_fields": {
"variable_name": "poolInfo",
"underlying_type": "variables_written"
},
"type_specific_fields": {
"parent": {
"name": "add",
"type": "function",
"source_mapping": {
"lines": [
963,
964,
965,
966,
967,
968,
969,
970,
971,
972,
973,
974,
975,
976
],
"start": 40588,
"length": 553,
"ending_column": 12,
"is_dependency": false,
"filename_short": "contracts/Contract.sol",
"starting_column": 45,
"filename_absolute": "/tmp/slither-n6e8sup9/contracts/Contract.sol",
"filename_relative": "contracts/Contract.sol"
},
"type_specific_fields": {
"parent": {
"name": "GovTreasurer",
"type": "contract",
"source_mapping": {
"lines": [
900,
901,
902,
903,
904,
905,
906,
907,
908,
909,
910,
911,
912,
913,
914,
915,
916,
917,
918,
919,
920,
921,
922,
923,
924,
925,
926,
927,
928,
929,
930,
931,
932,
933,
934,
935,
936,
937,
938,
939,
940,
941,
942,
943,
944,
945,
946,
947,
948,
949,
950,
951,
952,
953,
954,
955,
956,
957,
958,
959,
960,
961,
962,
963,
964,
965,
966,
967,
968,
969,
970,
971,
972,
973,
974,
975,
976,
977,
978,
979,
980,
981,
982,
983,
984,
985,
986,
987,
988,
989,
990,
991,
992,
993,
994,
995,
996,
997,
998,
999,
1000,
1001,
1002,
1003,
1004,
1005,
1006,
1007,
1008,
1009,
1010,
1011,
1012,
1013,
1014,
1015,
1016,
1017,
1018,
1019,
1020,
1021,
1022,
1023,
1024,
1025,
1026,
1027,
1028,
1029,
1030,
1031,
1032,
1033,
1034,
1035,
1036,
1037,
1038,
1039,
1040,
1041,
1042,
1043,
1044,
1045,
1046,
1047,
1048,
1049,
1050,
1051,
1052,
1053,
1054,
1055,
1056,
1057,
1058,
1059,
1060,
1061,
1062,
1063,
1064,
1065,
1066,
1067,
1068,
1069,
1070,
1071,
1072,
1073,
1074,
1075,
1076,
1077,
1078,
1079,
1080,
1081,
1082,
1083,
1084,
1085,
1086,
1087,
1088,
1089,
1090,
1091,
1092,
1093,
1094,
1095,
1096,
1097,
1098,
1099,
1100,
1101,
1102,
1103,
1104,
1105,
1106,
1107,
1108,
1109,
1110,
1111,
1112,
1113,
1114,
1115,
1116
],
"start": 37921,
"length": 8974,
"ending_column": 38,
"is_dependency": false,
"filename_short": "contracts/Contract.sol",
"starting_column": 43,
"filename_absolute": "/tmp/slither-n6e8sup9/contracts/Contract.sol",
"filename_relative": "contracts/Contract.sol"
}
},
"signature": "add(uint256,IERC20,uint256,bool)"
}
}
}
}
],
"locations": [
{
"file": "contracts/Contract.sol",
"name": "add",
"type": "function",
"lines": [
963,
964,
965,
966,
967,
968,
969,
970,
971,
972,
973,
974,
975,
976
]
},
{
"file": "contracts/Contract.sol",
"name": "massUpdatePools()",
"type": "node",
"lines": [
965
]
},
{
"file": "contracts/Contract.sol",
"name": "gdao.transfer(_to,GDAOBal)",
"type": "node",
"lines": [
1109,
1110
]
},
{
"file": "contracts/Contract.sol",
"name": "gdao.transfer(_to,_amount)",
"type": "node",
"lines": [
1112,
1113
]
},
{
"file": "contracts/Contract.sol",
"name": "poolInfo.push(PoolInfo({token:_token,allocPoint:_allocPoint,taxRate:_taxRate,lastRewardBlock:lastRewardBlock,accGDAOPerShare:0}))",
"type": "node",
"lines": [
968,
969,
970,
971,
972,
973,
974,
975,
976
]
},
{
"file": "contracts/Contract.sol",
"name": "totalAllocPoint = totalAllocPoint.add(_allocPoint)",
"type": "node",
"lines": [
967
]
}
],
"description": "Reentrancy in GovTreasurer.add(uint256,IERC20,uint256,bool) (contracts/Contract.sol#963-976):\n\tExternal calls:\n\t- massUpdatePools() (contracts/Contract.sol#965)\n\t\t- gdao.transfer(_to,GDAOBal) (contracts/Contract.sol#1109-1110)\n\t\t- gdao.transfer(_to,_amount) (contracts/Contract.sol#1112-1113)\n\tState variables written after the call(s):\n\t- poolInfo.push(PoolInfo({token:_token,allocPoint:_allocPoint,taxRate:_taxRate,lastRewardBlock:lastRewardBlock,accGDAOPerShare:0})) (contracts/Contract.sol#968-976)\n\tGovTreasurer.poolInfo (contracts/Contract.sol#940) can be used in cross function reentrancies:\n\t- GovTreasurer.add(uint256,IERC20,uint256,bool) (contracts/Contract.sol#963-976)\n\t- GovTreasurer.checkPoolDuplicate(IERC20) (contracts/Contract.sol#955-963)\n\t- GovTreasurer.deposit(uint256,uint256) (contracts/Contract.sol#1059-1089)\n\t- GovTreasurer.emergencyWithdraw(uint256) (contracts/Contract.sol#1047-1059)\n\t- GovTreasurer.massUpdatePools() (contracts/Contract.sol#1021-1029)\n\t- GovTreasurer.pendingGDAO(uint256,address) (contracts/Contract.sol#1000-1019)\n\t- GovTreasurer.poolInfo (contracts/Contract.sol#940)\n\t- GovTreasurer.poolLength() (contracts/Contract.sol#953-954)\n\t- GovTreasurer.set(uint256,uint256,bool) (contracts/Contract.sol#976-985)\n\t- GovTreasurer.updatePool(uint256) (contracts/Contract.sol#1030-1040)\n\t- GovTreasurer.withdraw(uint256,uint256) (contracts/Contract.sol#1089-1104)\n\t- totalAllocPoint = totalAllocPoint.add(_allocPoint) (contracts/Contract.sol#967)\n\tGovTreasurer.totalAllocPoint (contracts/Contract.sol#942) can be used in cross function reentrancies:\n\t- GovTreasurer.add(uint256,IERC20,uint256,bool) (contracts/Contract.sol#963-976)\n\t- GovTreasurer.pendingGDAO(uint256,address) (contracts/Contract.sol#1000-1019)\n\t- GovTreasurer.set(uint256,uint256,bool) (contracts/Contract.sol#976-985)\n\t- GovTreasurer.totalAllocPoint (contracts/Contract.sol#942)\n\t- GovTreasurer.updatePool(uint256) (contracts/Contract.sol#1030-1040)"
}
|
| medium | reentrancy | codex | Reward payout can be reentered before accounting updates | 75 | no | — |
viewevidence_json{
"evidence": "`safeGDAOTransfer(msg.sender, pending)` occurs before `user.rewardDebt` is updated in both `deposit` and `withdraw`.",
"locations": [
"contracts/Contract.sol:1095",
"contracts/Contract.sol:1098",
"contracts/Contract.sol:1108",
"contracts/Contract.sol:1118",
"contracts/Contract.sol:1121",
"contracts/Contract.sol:1129"
],
"recommendation": "Update `user.rewardDebt` (and any other accounting) before transferring rewards and/or add a `nonReentrant` guard around `deposit` and `withdraw`.",
"exploit_scenario": "If the reward token is ERC777 or otherwise triggers a callback on the recipient, a malicious user contract can reenter `deposit(0)`/`withdraw(0)` during `safeGDAOTransfer` and repeatedly claim the same pending rewards because `rewardDebt` is updated after the external call."
}
|
| medium | other | detector | Untrusted CALL target/value reachable | 45 | no | no |
viewtrace_id: 0xe159a4bc5ae9b4587d2879cb85fbd8b1f79af1b02422cc4ca92bde955fa2181f
call_targets:
0x4dac3e07316d2a31baabb252d89663dee8f76f09
target_varies:
no
classification:
constant_target
validation_json{
"sink": "CALL",
"errors": 0,
"status": "sink_reached",
"attempts": 1,
"trace_id": "0xe159a4bc5ae9b4587d2879cb85fbd8b1f79af1b02422cc4ca92bde955fa2181f",
"confirmed": false,
"trace_mode": "callTracer",
"call_targets": [
"0x4dac3e07316d2a31baabb252d89663dee8f76f09"
],
"matched_probe": null,
"target_varies": false,
"classification": "constant_target"
}
witness_json{
"notes": "heuristic witness; entrypoints are best-effort selectors with zeroed calldata",
"constraints": [],
"entrypoints": [
{
"calldata": "0x8dbb1e3a",
"selector": "0x8dbb1e3a",
"calldata_variants": [
"0x8dbb1e3a",
"0x8dbb1e3a0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x93f1a40b",
"selector": "0x93f1a40b",
"calldata_variants": [
"0x93f1a40b",
"0x93f1a40b0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x988d7a60",
"selector": "0x988d7a60",
"calldata_variants": [
"0x988d7a60",
"0x988d7a600000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xa29a0d90",
"selector": "0xa29a0d90",
"calldata_variants": [
"0xa29a0d90",
"0xa29a0d900000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xe2bbb158",
"selector": "0xe2bbb158",
"calldata_variants": [
"0xe2bbb158",
"0xe2bbb1580000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xf2fde38b",
"selector": "0xf2fde38b",
"calldata_variants": [
"0xf2fde38b",
"0xf2fde38b0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x630b5ba1",
"selector": "0x630b5ba1",
"calldata_variants": [
"0x630b5ba1",
"0x630b5ba10000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x64482f79",
"selector": "0x64482f79",
"calldata_variants": [
"0x64482f79",
"0x64482f790000000000000000000000000000000000000000000000000000000000000000"
]
}
]
}
evidence_json{
"examples": [
{
"pc": 7827,
"opcode": "CALL",
"returndata_checked": null,
"value_expression_category": "computed",
"target_expression_category": "computed"
},
{
"pc": 8039,
"opcode": "CALL",
"returndata_checked": null,
"value_expression_category": "computed",
"target_expression_category": "computed"
},
{
"pc": 9462,
"opcode": "CALL",
"returndata_checked": null,
"value_expression_category": "computed",
"target_expression_category": "computed"
}
],
"call_count": 3,
"guards_detected": [
{
"pc": 4846,
"type": "msg_sender_eq_const",
"value": "0xffffffffffffffffffffffffffffffffffffffff"
},
{
"pc": 9890,
"type": "tx_origin_used"
}
],
"untrusted_call_count": 3
}
|
| medium | reentrancy | slither | Reentrancy in GovTreasurer.withdraw(uint256,uint256) (contracts/Contract.sol#1089-1104): | 75 | no | — |
viewevidence_json{
"impact": "Medium",
"detector": "reentrancy-no-eth",
"elements": [
{
"name": "withdraw",
"type": "function",
"source_mapping": {
"lines": [
1089,
1090,
1091,
1092,
1093,
1094,
1095,
1096,
1097,
1098,
1099,
1100,
1101,
1102,
1103,
1104
],
"start": 45577,
"length": 771,
"ending_column": 78,
"is_dependency": false,
"filename_short": "contracts/Contract.sol",
"starting_column": 57,
"filename_absolute": "/tmp/slither-n6e8sup9/contracts/Contract.sol",
"filename_relative": "contracts/Contract.sol"
},
"type_specific_fields": {
"parent": {
"name": "GovTreasurer",
"type": "contract",
"source_mapping": {
"lines": [
900,
901,
902,
903,
904,
905,
906,
907,
908,
909,
910,
911,
912,
913,
914,
915,
916,
917,
918,
919,
920,
921,
922,
923,
924,
925,
926,
927,
928,
929,
930,
931,
932,
933,
934,
935,
936,
937,
938,
939,
940,
941,
942,
943,
944,
945,
946,
947,
948,
949,
950,
951,
952,
953,
954,
955,
956,
957,
958,
959,
960,
961,
962,
963,
964,
965,
966,
967,
968,
969,
970,
971,
972,
973,
974,
975,
976,
977,
978,
979,
980,
981,
982,
983,
984,
985,
986,
987,
988,
989,
990,
991,
992,
993,
994,
995,
996,
997,
998,
999,
1000,
1001,
1002,
1003,
1004,
1005,
1006,
1007,
1008,
1009,
1010,
1011,
1012,
1013,
1014,
1015,
1016,
1017,
1018,
1019,
1020,
1021,
1022,
1023,
1024,
1025,
1026,
1027,
1028,
1029,
1030,
1031,
1032,
1033,
1034,
1035,
1036,
1037,
1038,
1039,
1040,
1041,
1042,
1043,
1044,
1045,
1046,
1047,
1048,
1049,
1050,
1051,
1052,
1053,
1054,
1055,
1056,
1057,
1058,
1059,
1060,
1061,
1062,
1063,
1064,
1065,
1066,
1067,
1068,
1069,
1070,
1071,
1072,
1073,
1074,
1075,
1076,
1077,
1078,
1079,
1080,
1081,
1082,
1083,
1084,
1085,
1086,
1087,
1088,
1089,
1090,
1091,
1092,
1093,
1094,
1095,
1096,
1097,
1098,
1099,
1100,
1101,
1102,
1103,
1104,
1105,
1106,
1107,
1108,
1109,
1110,
1111,
1112,
1113,
1114,
1115,
1116
],
"start": 37921,
"length": 8974,
"ending_column": 38,
"is_dependency": false,
"filename_short": "contracts/Contract.sol",
"starting_column": 43,
"filename_absolute": "/tmp/slither-n6e8sup9/contracts/Contract.sol",
"filename_relative": "contracts/Contract.sol"
}
},
"signature": "withdraw(uint256,uint256)"
}
},
{
"name": "updatePool(_pid)",
"type": "node",
"source_mapping": {
"lines": [
1095
],
"start": 45814,
"length": 16,
"ending_column": 51,
"is_dependency": false,
"filename_short": "contracts/Contract.sol",
"starting_column": 35,
"filename_absolute": "/tmp/slither-n6e8sup9/contracts/Contract.sol",
"filename_relative": "contracts/Contract.sol"
},
"additional_fields": {
"underlying_type": "external_calls"
},
"type_specific_fields": {
"parent": {
"name": "withdraw",
"type": "function",
"source_mapping": {
"lines": [
1089,
1090,
1091,
1092,
1093,
1094,
1095,
1096,
1097,
1098,
1099,
1100,
1101,
1102,
1103,
1104
],
"start": 45577,
"length": 771,
"ending_column": 78,
"is_dependency": false,
"filename_short": "contracts/Contract.sol",
"starting_column": 57,
"filename_absolute": "/tmp/slither-n6e8sup9/contracts/Contract.sol",
"filename_relative": "contracts/Contract.sol"
},
"type_specific_fields": {
"parent": {
"name": "GovTreasurer",
"type": "contract",
"source_mapping": {
"lines": [
900,
901,
902,
903,
904,
905,
906,
907,
908,
909,
910,
911,
912,
913,
914,
915,
916,
917,
918,
919,
920,
921,
922,
923,
924,
925,
926,
927,
928,
929,
930,
931,
932,
933,
934,
935,
936,
937,
938,
939,
940,
941,
942,
943,
944,
945,
946,
947,
948,
949,
950,
951,
952,
953,
954,
955,
956,
957,
958,
959,
960,
961,
962,
963,
964,
965,
966,
967,
968,
969,
970,
971,
972,
973,
974,
975,
976,
977,
978,
979,
980,
981,
982,
983,
984,
985,
986,
987,
988,
989,
990,
991,
992,
993,
994,
995,
996,
997,
998,
999,
1000,
1001,
1002,
1003,
1004,
1005,
1006,
1007,
1008,
1009,
1010,
1011,
1012,
1013,
1014,
1015,
1016,
1017,
1018,
1019,
1020,
1021,
1022,
1023,
1024,
1025,
1026,
1027,
1028,
1029,
1030,
1031,
1032,
1033,
1034,
1035,
1036,
1037,
1038,
1039,
1040,
1041,
1042,
1043,
1044,
1045,
1046,
1047,
1048,
1049,
1050,
1051,
1052,
1053,
1054,
1055,
1056,
1057,
1058,
1059,
1060,
1061,
1062,
1063,
1064,
1065,
1066,
1067,
1068,
1069,
1070,
1071,
1072,
1073,
1074,
1075,
1076,
1077,
1078,
1079,
1080,
1081,
1082,
1083,
1084,
1085,
1086,
1087,
1088,
1089,
1090,
1091,
1092,
1093,
1094,
1095,
1096,
1097,
1098,
1099,
1100,
1101,
1102,
1103,
1104,
1105,
1106,
1107,
1108,
1109,
1110,
1111,
1112,
1113,
1114,
1115,
1116
],
"start": 37921,
"length": 8974,
"ending_column": 38,
"is_dependency": false,
"filename_short": "contracts/Contract.sol",
"starting_column": 43,
"filename_absolute": "/tmp/slither-n6e8sup9/contracts/Contract.sol",
"filename_relative": "contracts/Contract.sol"
}
},
"signature": "withdraw(uint256,uint256)"
}
}
}
},
{
"name": "gdao.transfer(_to,GDAOBal)",
"type": "node",
"source_mapping": {
"lines": [
1109,
1110
],
"start": 46620,
"length": 27,
"ending_column": 7,
"is_dependency": false,
"filename_short": "contracts/Contract.sol",
"starting_column": 47,
"filename_absolute": "/tmp/slither-n6e8sup9/contracts/Contract.sol",
"filename_relative": "contracts/Contract.sol"
},
"additional_fields": {
"underlying_type": "external_calls_sending_eth"
},
"type_specific_fields": {
"parent": {
"name": "safeGDAOTransfer",
"type": "function",
"source_mapping": {
"lines": [
1105,
1106,
1107,
1108,
1109,
1110,
1111,
1112,
1113
],
"start": 46451,
"length": 271,
"ending_column": 38,
"is_dependency": false,
"filename_short": "contracts/Contract.sol",
"starting_column": 86,
"filename_absolute": "/tmp/slither-n6e8sup9/contracts/Contract.sol",
"filename_relative": "contracts/Contract.sol"
},
"type_specific_fields": {
"parent": {
"name": "GovTreasurer",
"type": "contract",
"source_mapping": {
"lines": [
900,
901,
902,
903,
904,
905,
906,
907,
908,
909,
910,
911,
912,
913,
914,
915,
916,
917,
918,
919,
920,
921,
922,
923,
924,
925,
926,
927,
928,
929,
930,
931,
932,
933,
934,
935,
936,
937,
938,
939,
940,
941,
942,
943,
944,
945,
946,
947,
948,
949,
950,
951,
952,
953,
954,
955,
956,
957,
958,
959,
960,
961,
962,
963,
964,
965,
966,
967,
968,
969,
970,
971,
972,
973,
974,
975,
976,
977,
978,
979,
980,
981,
982,
983,
984,
985,
986,
987,
988,
989,
990,
991,
992,
993,
994,
995,
996,
997,
998,
999,
1000,
1001,
1002,
1003,
1004,
1005,
1006,
1007,
1008,
1009,
1010,
1011,
1012,
1013,
1014,
1015,
1016,
1017,
1018,
1019,
1020,
1021,
1022,
1023,
1024,
1025,
1026,
1027,
1028,
1029,
1030,
1031,
1032,
1033,
1034,
1035,
1036,
1037,
1038,
1039,
1040,
1041,
1042,
1043,
1044,
1045,
1046,
1047,
1048,
1049,
1050,
1051,
1052,
1053,
1054,
1055,
1056,
1057,
1058,
1059,
1060,
1061,
1062,
1063,
1064,
1065,
1066,
1067,
1068,
1069,
1070,
1071,
1072,
1073,
1074,
1075,
1076,
1077,
1078,
1079,
1080,
1081,
1082,
1083,
1084,
1085,
1086,
1087,
1088,
1089,
1090,
1091,
1092,
1093,
1094,
1095,
1096,
1097,
1098,
1099,
1100,
1101,
1102,
1103,
1104,
1105,
1106,
1107,
1108,
1109,
1110,
1111,
1112,
1113,
1114,
1115,
1116
],
"start": 37921,
"length": 8974,
"ending_column": 38,
"is_dependency": false,
"filename_short": "contracts/Contract.sol",
"starting_column": 43,
"filename_absolute": "/tmp/slither-n6e8sup9/contracts/Contract.sol",
"filename_relative": "contracts/Contract.sol"
}
},
"signature": "safeGDAOTransfer(address,uint256)"
}
}
}
},
{
"name": "gdao.transfer(_to,_amount)",
"type": "node",
"source_mapping": {
"lines": [
1112,
1113
],
"start": 46678,
"length": 27,
"ending_column": 21,
"is_dependency": false,
"filename_short": "contracts/Contract.sol",
"starting_column": 29,
"filename_absolute": "/tmp/slither-n6e8sup9/contracts/Contract.sol",
"filename_relative": "contracts/Contract.sol"
},
"additional_fields": {
"underlying_type": "external_calls_sending_eth"
},
"type_specific_fields": {
"parent": {
"name": "safeGDAOTransfer",
"type": "function",
"source_mapping": {
"lines": [
1105,
1106,
1107,
1108,
1109,
1110,
1111,
1112,
1113
],
"start": 46451,
"length": 271,
"ending_column": 38,
"is_dependency": false,
"filename_short": "contracts/Contract.sol",
"starting_column": 86,
"filename_absolute": "/tmp/slither-n6e8sup9/contracts/Contract.sol",
"filename_relative": "contracts/Contract.sol"
},
"type_specific_fields": {
"parent": {
"name": "GovTreasurer",
"type": "contract",
"source_mapping": {
"lines": [
900,
901,
902,
903,
904,
905,
906,
907,
908,
909,
910,
911,
912,
913,
914,
915,
916,
917,
918,
919,
920,
921,
922,
923,
924,
925,
926,
927,
928,
929,
930,
931,
932,
933,
934,
935,
936,
937,
938,
939,
940,
941,
942,
943,
944,
945,
946,
947,
948,
949,
950,
951,
952,
953,
954,
955,
956,
957,
958,
959,
960,
961,
962,
963,
964,
965,
966,
967,
968,
969,
970,
971,
972,
973,
974,
975,
976,
977,
978,
979,
980,
981,
982,
983,
984,
985,
986,
987,
988,
989,
990,
991,
992,
993,
994,
995,
996,
997,
998,
999,
1000,
1001,
1002,
1003,
1004,
1005,
1006,
1007,
1008,
1009,
1010,
1011,
1012,
1013,
1014,
1015,
1016,
1017,
1018,
1019,
1020,
1021,
1022,
1023,
1024,
1025,
1026,
1027,
1028,
1029,
1030,
1031,
1032,
1033,
1034,
1035,
1036,
1037,
1038,
1039,
1040,
1041,
1042,
1043,
1044,
1045,
1046,
1047,
1048,
1049,
1050,
1051,
1052,
1053,
1054,
1055,
1056,
1057,
1058,
1059,
1060,
1061,
1062,
1063,
1064,
1065,
1066,
1067,
1068,
1069,
1070,
1071,
1072,
1073,
1074,
1075,
1076,
1077,
1078,
1079,
1080,
1081,
1082,
1083,
1084,
1085,
1086,
1087,
1088,
1089,
1090,
1091,
1092,
1093,
1094,
1095,
1096,
1097,
1098,
1099,
1100,
1101,
1102,
1103,
1104,
1105,
1106,
1107,
1108,
1109,
1110,
1111,
1112,
1113,
1114,
1115,
1116
],
"start": 37921,
"length": 8974,
"ending_column": 38,
"is_dependency": false,
"filename_short": "contracts/Contract.sol",
"starting_column": 43,
"filename_absolute": "/tmp/slither-n6e8sup9/contracts/Contract.sol",
"filename_relative": "contracts/Contract.sol"
}
},
"signature": "safeGDAOTransfer(address,uint256)"
}
}
}
},
{
"name": "safeGDAOTransfer(msg.sender,pending)",
"type": "node",
"source_mapping": {
"lines": [
1097,
1098
],
"start": 45996,
"length": 37,
"ending_column": 4,
"is_dependency": false,
"filename_short": "contracts/Contract.sol",
"starting_column": 38,
"filename_absolute": "/tmp/slither-n6e8sup9/contracts/Contract.sol",
"filename_relative": "contracts/Contract.sol"
},
"additional_fields": {
"underlying_type": "external_calls"
},
"type_specific_fields": {
"parent": {
"name": "withdraw",
"type": "function",
"source_mapping": {
"lines": [
1089,
1090,
1091,
1092,
1093,
1094,
1095,
1096,
1097,
1098,
1099,
1100,
1101,
1102,
1103,
1104
],
"start": 45577,
"length": 771,
"ending_column": 78,
"is_dependency": false,
"filename_short": "contracts/Contract.sol",
"starting_column": 57,
"filename_absolute": "/tmp/slither-n6e8sup9/contracts/Contract.sol",
"filename_relative": "contracts/Contract.sol"
},
"type_specific_fields": {
"parent": {
"name": "GovTreasurer",
"type": "contract",
"source_mapping": {
"lines": [
900,
901,
902,
903,
904,
905,
906,
907,
908,
909,
910,
911,
912,
913,
914,
915,
916,
917,
918,
919,
920,
921,
922,
923,
924,
925,
926,
927,
928,
929,
930,
931,
932,
933,
934,
935,
936,
937,
938,
939,
940,
941,
942,
943,
944,
945,
946,
947,
948,
949,
950,
951,
952,
953,
954,
955,
956,
957,
958,
959,
960,
961,
962,
963,
964,
965,
966,
967,
968,
969,
970,
971,
972,
973,
974,
975,
976,
977,
978,
979,
980,
981,
982,
983,
984,
985,
986,
987,
988,
989,
990,
991,
992,
993,
994,
995,
996,
997,
998,
999,
1000,
1001,
1002,
1003,
1004,
1005,
1006,
1007,
1008,
1009,
1010,
1011,
1012,
1013,
1014,
1015,
1016,
1017,
1018,
1019,
1020,
1021,
1022,
1023,
1024,
1025,
1026,
1027,
1028,
1029,
1030,
1031,
1032,
1033,
1034,
1035,
1036,
1037,
1038,
1039,
1040,
1041,
1042,
1043,
1044,
1045,
1046,
1047,
1048,
1049,
1050,
1051,
1052,
1053,
1054,
1055,
1056,
1057,
1058,
1059,
1060,
1061,
1062,
1063,
1064,
1065,
1066,
1067,
1068,
1069,
1070,
1071,
1072,
1073,
1074,
1075,
1076,
1077,
1078,
1079,
1080,
1081,
1082,
1083,
1084,
1085,
1086,
1087,
1088,
1089,
1090,
1091,
1092,
1093,
1094,
1095,
1096,
1097,
1098,
1099,
1100,
1101,
1102,
1103,
1104,
1105,
1106,
1107,
1108,
1109,
1110,
1111,
1112,
1113,
1114,
1115,
1116
],
"start": 37921,
"length": 8974,
"ending_column": 38,
"is_dependency": false,
"filename_short": "contracts/Contract.sol",
"starting_column": 43,
"filename_absolute": "/tmp/slither-n6e8sup9/contracts/Contract.sol",
"filename_relative": "contracts/Contract.sol"
}
},
"signature": "withdraw(uint256,uint256)"
}
}
}
}
],
"locations": [
{
"file": "contracts/Contract.sol",
"name": "withdraw",
"type": "function",
"lines": [
1089,
1090,
1091,
1092,
1093,
1094,
1095,
1096,
1097,
1098,
1099,
1100,
1101,
1102,
1103,
1104
]
},
{
"file": "contracts/Contract.sol",
"name": "updatePool(_pid)",
"type": "node",
"lines": [
1095
]
},
{
"file": "contracts/Contract.sol",
"name": "gdao.transfer(_to,GDAOBal)",
"type": "node",
"lines": [
1109,
1110
]
},
{
"file": "contracts/Contract.sol",
"name": "gdao.transfer(_to,_amount)",
"type": "node",
"lines": [
1112,
1113
]
},
{
"file": "contracts/Contract.sol",
"name": "safeGDAOTransfer(msg.sender,pending)",
"type": "node",
"lines": [
1097,
1098
]
},
{
"file": "contracts/Contract.sol",
"name": "gdao.transfer(_to,GDAOBal)",
"type": "node",
"lines": [
1109,
1110
]
},
{
"file": "contracts/Contract.sol",
"name": "gdao.transfer(_to,_amount)",
"type": "node",
"lines": [
1112,
1113
]
},
{
"file": "contracts/Contract.sol",
"name": "user.amount = user.amount.sub(_amount)",
"type": "node",
"lines": [
1099,
1100,
1101,
1102
]
}
],
"description": "Reentrancy in GovTreasurer.withdraw(uint256,uint256) (contracts/Contract.sol#1089-1104):\n\tExternal calls:\n\t- updatePool(_pid) (contracts/Contract.sol#1095)\n\t\t- gdao.transfer(_to,GDAOBal) (contracts/Contract.sol#1109-1110)\n\t\t- gdao.transfer(_to,_amount) (contracts/Contract.sol#1112-1113)\n\t- safeGDAOTransfer(msg.sender,pending) (contracts/Contract.sol#1097-1098)\n\t\t- gdao.transfer(_to,GDAOBal) (contracts/Contract.sol#1109-1110)\n\t\t- gdao.transfer(_to,_amount) (contracts/Contract.sol#1112-1113)\n\tState variables written after the call(s):\n\t- user.amount = user.amount.sub(_amount) (contracts/Contract.sol#1099-1102)\n\tGovTreasurer.userInfo (contracts/Contract.sol#940-941) can be used in cross function reentrancies:\n\t- GovTreasurer.deposit(uint256,uint256) (contracts/Contract.sol#1059-1089)\n\t- GovTreasurer.emergencyWithdraw(uint256) (contracts/Contract.sol#1047-1059)\n\t- GovTreasurer.pendingGDAO(uint256,address) (contracts/Contract.sol#1000-1019)\n\t- GovTreasurer.userInfo (contracts/Contract.sol#940-941)\n\t- GovTreasurer.withdraw(uint256,uint256) (contracts/Contract.sol#1089-1104)"
}
|
| medium | reentrancy | slither | Reentrancy in GovTreasurer.updatePool(uint256) (contracts/Contract.sol#1030-1040): | 75 | no | — |
viewevidence_json{
"impact": "Medium",
"detector": "reentrancy-no-eth",
"elements": [
{
"name": "updatePool",
"type": "function",
"source_mapping": {
"lines": [
1030,
1031,
1032,
1033,
1034,
1035,
1036,
1037,
1038,
1039,
1040
],
"start": 43071,
"length": 722,
"ending_column": 68,
"is_dependency": false,
"filename_short": "contracts/Contract.sol",
"starting_column": 21,
"filename_absolute": "/tmp/slither-n6e8sup9/contracts/Contract.sol",
"filename_relative": "contracts/Contract.sol"
},
"type_specific_fields": {
"parent": {
"name": "GovTreasurer",
"type": "contract",
"source_mapping": {
"lines": [
900,
901,
902,
903,
904,
905,
906,
907,
908,
909,
910,
911,
912,
913,
914,
915,
916,
917,
918,
919,
920,
921,
922,
923,
924,
925,
926,
927,
928,
929,
930,
931,
932,
933,
934,
935,
936,
937,
938,
939,
940,
941,
942,
943,
944,
945,
946,
947,
948,
949,
950,
951,
952,
953,
954,
955,
956,
957,
958,
959,
960,
961,
962,
963,
964,
965,
966,
967,
968,
969,
970,
971,
972,
973,
974,
975,
976,
977,
978,
979,
980,
981,
982,
983,
984,
985,
986,
987,
988,
989,
990,
991,
992,
993,
994,
995,
996,
997,
998,
999,
1000,
1001,
1002,
1003,
1004,
1005,
1006,
1007,
1008,
1009,
1010,
1011,
1012,
1013,
1014,
1015,
1016,
1017,
1018,
1019,
1020,
1021,
1022,
1023,
1024,
1025,
1026,
1027,
1028,
1029,
1030,
1031,
1032,
1033,
1034,
1035,
1036,
1037,
1038,
1039,
1040,
1041,
1042,
1043,
1044,
1045,
1046,
1047,
1048,
1049,
1050,
1051,
1052,
1053,
1054,
1055,
1056,
1057,
1058,
1059,
1060,
1061,
1062,
1063,
1064,
1065,
1066,
1067,
1068,
1069,
1070,
1071,
1072,
1073,
1074,
1075,
1076,
1077,
1078,
1079,
1080,
1081,
1082,
1083,
1084,
1085,
1086,
1087,
1088,
1089,
1090,
1091,
1092,
1093,
1094,
1095,
1096,
1097,
1098,
1099,
1100,
1101,
1102,
1103,
1104,
1105,
1106,
1107,
1108,
1109,
1110,
1111,
1112,
1113,
1114,
1115,
1116
],
"start": 37921,
"length": 8974,
"ending_column": 38,
"is_dependency": false,
"filename_short": "contracts/Contract.sol",
"starting_column": 43,
"filename_absolute": "/tmp/slither-n6e8sup9/contracts/Contract.sol",
"filename_relative": "contracts/Contract.sol"
}
},
"signature": "updatePool(uint256)"
}
},
{
"name": "safeGDAOTransfer(address(this),GDAOReward)",
"type": "node",
"source_mapping": {
"lines": [
1037,
1038
],
"start": 43605,
"length": 43,
"ending_column": 22,
"is_dependency": false,
"filename_short": "contracts/Contract.sol",
"starting_column": 85,
"filename_absolute": "/tmp/slither-n6e8sup9/contracts/Contract.sol",
"filename_relative": "contracts/Contract.sol"
},
"additional_fields": {
"underlying_type": "external_calls"
},
"type_specific_fields": {
"parent": {
"name": "updatePool",
"type": "function",
"source_mapping": {
"lines": [
1030,
1031,
1032,
1033,
1034,
1035,
1036,
1037,
1038,
1039,
1040
],
"start": 43071,
"length": 722,
"ending_column": 68,
"is_dependency": false,
"filename_short": "contracts/Contract.sol",
"starting_column": 21,
"filename_absolute": "/tmp/slither-n6e8sup9/contracts/Contract.sol",
"filename_relative": "contracts/Contract.sol"
},
"type_specific_fields": {
"parent": {
"name": "GovTreasurer",
"type": "contract",
"source_mapping": {
"lines": [
900,
901,
902,
903,
904,
905,
906,
907,
908,
909,
910,
911,
912,
913,
914,
915,
916,
917,
918,
919,
920,
921,
922,
923,
924,
925,
926,
927,
928,
929,
930,
931,
932,
933,
934,
935,
936,
937,
938,
939,
940,
941,
942,
943,
944,
945,
946,
947,
948,
949,
950,
951,
952,
953,
954,
955,
956,
957,
958,
959,
960,
961,
962,
963,
964,
965,
966,
967,
968,
969,
970,
971,
972,
973,
974,
975,
976,
977,
978,
979,
980,
981,
982,
983,
984,
985,
986,
987,
988,
989,
990,
991,
992,
993,
994,
995,
996,
997,
998,
999,
1000,
1001,
1002,
1003,
1004,
1005,
1006,
1007,
1008,
1009,
1010,
1011,
1012,
1013,
1014,
1015,
1016,
1017,
1018,
1019,
1020,
1021,
1022,
1023,
1024,
1025,
1026,
1027,
1028,
1029,
1030,
1031,
1032,
1033,
1034,
1035,
1036,
1037,
1038,
1039,
1040,
1041,
1042,
1043,
1044,
1045,
1046,
1047,
1048,
1049,
1050,
1051,
1052,
1053,
1054,
1055,
1056,
1057,
1058,
1059,
1060,
1061,
1062,
1063,
1064,
1065,
1066,
1067,
1068,
1069,
1070,
1071,
1072,
1073,
1074,
1075,
1076,
1077,
1078,
1079,
1080,
1081,
1082,
1083,
1084,
1085,
1086,
1087,
1088,
1089,
1090,
1091,
1092,
1093,
1094,
1095,
1096,
1097,
1098,
1099,
1100,
1101,
1102,
1103,
1104,
1105,
1106,
1107,
1108,
1109,
1110,
1111,
1112,
1113,
1114,
1115,
1116
],
"start": 37921,
"length": 8974,
"ending_column": 38,
"is_dependency": false,
"filename_short": "contracts/Contract.sol",
"starting_column": 43,
"filename_absolute": "/tmp/slither-n6e8sup9/contracts/Contract.sol",
"filename_relative": "contracts/Contract.sol"
}
},
"signature": "updatePool(uint256)"
}
}
}
},
{
"name": "gdao.transfer(_to,GDAOBal)",
"type": "node",
"source_mapping": {
"lines": [
1109,
1110
],
"start": 46620,
"length": 27,
"ending_column": 7,
"is_dependency": false,
"filename_short": "contracts/Contract.sol",
"starting_column": 47,
"filename_absolute": "/tmp/slither-n6e8sup9/contracts/Contract.sol",
"filename_relative": "contracts/Contract.sol"
},
"additional_fields": {
"underlying_type": "external_calls_sending_eth"
},
"type_specific_fields": {
"parent": {
"name": "safeGDAOTransfer",
"type": "function",
"source_mapping": {
"lines": [
1105,
1106,
1107,
1108,
1109,
1110,
1111,
1112,
1113
],
"start": 46451,
"length": 271,
"ending_column": 38,
"is_dependency": false,
"filename_short": "contracts/Contract.sol",
"starting_column": 86,
"filename_absolute": "/tmp/slither-n6e8sup9/contracts/Contract.sol",
"filename_relative": "contracts/Contract.sol"
},
"type_specific_fields": {
"parent": {
"name": "GovTreasurer",
"type": "contract",
"source_mapping": {
"lines": [
900,
901,
902,
903,
904,
905,
906,
907,
908,
909,
910,
911,
912,
913,
914,
915,
916,
917,
918,
919,
920,
921,
922,
923,
924,
925,
926,
927,
928,
929,
930,
931,
932,
933,
934,
935,
936,
937,
938,
939,
940,
941,
942,
943,
944,
945,
946,
947,
948,
949,
950,
951,
952,
953,
954,
955,
956,
957,
958,
959,
960,
961,
962,
963,
964,
965,
966,
967,
968,
969,
970,
971,
972,
973,
974,
975,
976,
977,
978,
979,
980,
981,
982,
983,
984,
985,
986,
987,
988,
989,
990,
991,
992,
993,
994,
995,
996,
997,
998,
999,
1000,
1001,
1002,
1003,
1004,
1005,
1006,
1007,
1008,
1009,
1010,
1011,
1012,
1013,
1014,
1015,
1016,
1017,
1018,
1019,
1020,
1021,
1022,
1023,
1024,
1025,
1026,
1027,
1028,
1029,
1030,
1031,
1032,
1033,
1034,
1035,
1036,
1037,
1038,
1039,
1040,
1041,
1042,
1043,
1044,
1045,
1046,
1047,
1048,
1049,
1050,
1051,
1052,
1053,
1054,
1055,
1056,
1057,
1058,
1059,
1060,
1061,
1062,
1063,
1064,
1065,
1066,
1067,
1068,
1069,
1070,
1071,
1072,
1073,
1074,
1075,
1076,
1077,
1078,
1079,
1080,
1081,
1082,
1083,
1084,
1085,
1086,
1087,
1088,
1089,
1090,
1091,
1092,
1093,
1094,
1095,
1096,
1097,
1098,
1099,
1100,
1101,
1102,
1103,
1104,
1105,
1106,
1107,
1108,
1109,
1110,
1111,
1112,
1113,
1114,
1115,
1116
],
"start": 37921,
"length": 8974,
"ending_column": 38,
"is_dependency": false,
"filename_short": "contracts/Contract.sol",
"starting_column": 43,
"filename_absolute": "/tmp/slither-n6e8sup9/contracts/Contract.sol",
"filename_relative": "contracts/Contract.sol"
}
},
"signature": "safeGDAOTransfer(address,uint256)"
}
}
}
},
{
"name": "gdao.transfer(_to,_amount)",
"type": "node",
"source_mapping": {
"lines": [
1112,
1113
],
"start": 46678,
"length": 27,
"ending_column": 21,
"is_dependency": false,
"filename_short": "contracts/Contract.sol",
"starting_column": 29,
"filename_absolute": "/tmp/slither-n6e8sup9/contracts/Contract.sol",
"filename_relative": "contracts/Contract.sol"
},
"additional_fields": {
"underlying_type": "external_calls_sending_eth"
},
"type_specific_fields": {
"parent": {
"name": "safeGDAOTransfer",
"type": "function",
"source_mapping": {
"lines": [
1105,
1106,
1107,
1108,
1109,
1110,
1111,
1112,
1113
],
"start": 46451,
"length": 271,
"ending_column": 38,
"is_dependency": false,
"filename_short": "contracts/Contract.sol",
"starting_column": 86,
"filename_absolute": "/tmp/slither-n6e8sup9/contracts/Contract.sol",
"filename_relative": "contracts/Contract.sol"
},
"type_specific_fields": {
"parent": {
"name": "GovTreasurer",
"type": "contract",
"source_mapping": {
"lines": [
900,
901,
902,
903,
904,
905,
906,
907,
908,
909,
910,
911,
912,
913,
914,
915,
916,
917,
918,
919,
920,
921,
922,
923,
924,
925,
926,
927,
928,
929,
930,
931,
932,
933,
934,
935,
936,
937,
938,
939,
940,
941,
942,
943,
944,
945,
946,
947,
948,
949,
950,
951,
952,
953,
954,
955,
956,
957,
958,
959,
960,
961,
962,
963,
964,
965,
966,
967,
968,
969,
970,
971,
972,
973,
974,
975,
976,
977,
978,
979,
980,
981,
982,
983,
984,
985,
986,
987,
988,
989,
990,
991,
992,
993,
994,
995,
996,
997,
998,
999,
1000,
1001,
1002,
1003,
1004,
1005,
1006,
1007,
1008,
1009,
1010,
1011,
1012,
1013,
1014,
1015,
1016,
1017,
1018,
1019,
1020,
1021,
1022,
1023,
1024,
1025,
1026,
1027,
1028,
1029,
1030,
1031,
1032,
1033,
1034,
1035,
1036,
1037,
1038,
1039,
1040,
1041,
1042,
1043,
1044,
1045,
1046,
1047,
1048,
1049,
1050,
1051,
1052,
1053,
1054,
1055,
1056,
1057,
1058,
1059,
1060,
1061,
1062,
1063,
1064,
1065,
1066,
1067,
1068,
1069,
1070,
1071,
1072,
1073,
1074,
1075,
1076,
1077,
1078,
1079,
1080,
1081,
1082,
1083,
1084,
1085,
1086,
1087,
1088,
1089,
1090,
1091,
1092,
1093,
1094,
1095,
1096,
1097,
1098,
1099,
1100,
1101,
1102,
1103,
1104,
1105,
1106,
1107,
1108,
1109,
1110,
1111,
1112,
1113,
1114,
1115,
1116
],
"start": 37921,
"length": 8974,
"ending_column": 38,
"is_dependency": false,
"filename_short": "contracts/Contract.sol",
"starting_column": 43,
"filename_absolute": "/tmp/slither-n6e8sup9/contracts/Contract.sol",
"filename_relative": "contracts/Contract.sol"
}
},
"signature": "safeGDAOTransfer(address,uint256)"
}
}
}
},
{
"name": "pool.accGDAOPerShare = pool.accGDAOPerShare.add(GDAOReward.mul(1e12).div(lpSupply))",
"type": "node",
"source_mapping": {
"lines": [
1038,
1039,
1040
],
"start": 43658,
"length": 83,
"ending_column": 16,
"is_dependency": false,
"filename_short": "contracts/Contract.sol",
"starting_column": 32,
"filename_absolute": "/tmp/slither-n6e8sup9/contracts/Contract.sol",
"filename_relative": "contracts/Contract.sol"
},
"additional_fields": {
"variable_name": "poolInfo",
"underlying_type": "variables_written"
},
"type_specific_fields": {
"parent": {
"name": "updatePool",
"type": "function",
"source_mapping": {
"lines": [
1030,
1031,
1032,
1033,
1034,
1035,
1036,
1037,
1038,
1039,
1040
],
"start": 43071,
"length": 722,
"ending_column": 68,
"is_dependency": false,
"filename_short": "contracts/Contract.sol",
"starting_column": 21,
"filename_absolute": "/tmp/slither-n6e8sup9/contracts/Contract.sol",
"filename_relative": "contracts/Contract.sol"
},
"type_specific_fields": {
"parent": {
"name": "GovTreasurer",
"type": "contract",
"source_mapping": {
"lines": [
900,
901,
902,
903,
904,
905,
906,
907,
908,
909,
910,
911,
912,
913,
914,
915,
916,
917,
918,
919,
920,
921,
922,
923,
924,
925,
926,
927,
928,
929,
930,
931,
932,
933,
934,
935,
936,
937,
938,
939,
940,
941,
942,
943,
944,
945,
946,
947,
948,
949,
950,
951,
952,
953,
954,
955,
956,
957,
958,
959,
960,
961,
962,
963,
964,
965,
966,
967,
968,
969,
970,
971,
972,
973,
974,
975,
976,
977,
978,
979,
980,
981,
982,
983,
984,
985,
986,
987,
988,
989,
990,
991,
992,
993,
994,
995,
996,
997,
998,
999,
1000,
1001,
1002,
1003,
1004,
1005,
1006,
1007,
1008,
1009,
1010,
1011,
1012,
1013,
1014,
1015,
1016,
1017,
1018,
1019,
1020,
1021,
1022,
1023,
1024,
1025,
1026,
1027,
1028,
1029,
1030,
1031,
1032,
1033,
1034,
1035,
1036,
1037,
1038,
1039,
1040,
1041,
1042,
1043,
1044,
1045,
1046,
1047,
1048,
1049,
1050,
1051,
1052,
1053,
1054,
1055,
1056,
1057,
1058,
1059,
1060,
1061,
1062,
1063,
1064,
1065,
1066,
1067,
1068,
1069,
1070,
1071,
1072,
1073,
1074,
1075,
1076,
1077,
1078,
1079,
1080,
1081,
1082,
1083,
1084,
1085,
1086,
1087,
1088,
1089,
1090,
1091,
1092,
1093,
1094,
1095,
1096,
1097,
1098,
1099,
1100,
1101,
1102,
1103,
1104,
1105,
1106,
1107,
1108,
1109,
1110,
1111,
1112,
1113,
1114,
1115,
1116
],
"start": 37921,
"length": 8974,
"ending_column": 38,
"is_dependency": false,
"filename_short": "contracts/Contract.sol",
"starting_column": 43,
"filename_absolute": "/tmp/slither-n6e8sup9/contracts/Contract.sol",
"filename_relative": "contracts/Contract.sol"
}
},
"signature": "updatePool(uint256)"
}
}
}
}
],
"locations": [
{
"file": "contracts/Contract.sol",
"name": "updatePool",
"type": "function",
"lines": [
1030,
1031,
1032,
1033,
1034,
1035,
1036,
1037,
1038,
1039,
1040
]
},
{
"file": "contracts/Contract.sol",
"name": "safeGDAOTransfer(address(this),GDAOReward)",
"type": "node",
"lines": [
1037,
1038
]
},
{
"file": "contracts/Contract.sol",
"name": "gdao.transfer(_to,GDAOBal)",
"type": "node",
"lines": [
1109,
1110
]
},
{
"file": "contracts/Contract.sol",
"name": "gdao.transfer(_to,_amount)",
"type": "node",
"lines": [
1112,
1113
]
},
{
"file": "contracts/Contract.sol",
"name": "pool.accGDAOPerShare = pool.accGDAOPerShare.add(GDAOReward.mul(1e12).div(lpSupply))",
"type": "node",
"lines": [
1038,
1039,
1040
]
},
{
"file": "contracts/Contract.sol",
"name": "pool.lastRewardBlock = block.number",
"type": "node",
"lines": [
1040
]
}
],
"description": "Reentrancy in GovTreasurer.updatePool(uint256) (contracts/Contract.sol#1030-1040):\n\tExternal calls:\n\t- safeGDAOTransfer(address(this),GDAOReward) (contracts/Contract.sol#1037-1038)\n\t\t- gdao.transfer(_to,GDAOBal) (contracts/Contract.sol#1109-1110)\n\t\t- gdao.transfer(_to,_amount) (contracts/Contract.sol#1112-1113)\n\tState variables written after the call(s):\n\t- pool.accGDAOPerShare = pool.accGDAOPerShare.add(GDAOReward.mul(1e12).div(lpSupply)) (contracts/Contract.sol#1038-1040)\n\tGovTreasurer.poolInfo (contracts/Contract.sol#940) can be used in cross function reentrancies:\n\t- GovTreasurer.add(uint256,IERC20,uint256,bool) (contracts/Contract.sol#963-976)\n\t- GovTreasurer.checkPoolDuplicate(IERC20) (contracts/Contract.sol#955-963)\n\t- GovTreasurer.deposit(uint256,uint256) (contracts/Contract.sol#1059-1089)\n\t- GovTreasurer.emergencyWithdraw(uint256) (contracts/Contract.sol#1047-1059)\n\t- GovTreasurer.massUpdatePools() (contracts/Contract.sol#1021-1029)\n\t- GovTreasurer.pendingGDAO(uint256,address) (contracts/Contract.sol#1000-1019)\n\t- GovTreasurer.poolInfo (contracts/Contract.sol#940)\n\t- GovTreasurer.poolLength() (contracts/Contract.sol#953-954)\n\t- GovTreasurer.set(uint256,uint256,bool) (contracts/Contract.sol#976-985)\n\t- GovTreasurer.updatePool(uint256) (contracts/Contract.sol#1030-1040)\n\t- GovTreasurer.withdraw(uint256,uint256) (contracts/Contract.sol#1089-1104)\n\t- pool.lastRewardBlock = block.number (contracts/Contract.sol#1040)\n\tGovTreasurer.poolInfo (contracts/Contract.sol#940) can be used in cross function reentrancies:\n\t- GovTreasurer.add(uint256,IERC20,uint256,bool) (contracts/Contract.sol#963-976)\n\t- GovTreasurer.checkPoolDuplicate(IERC20) (contracts/Contract.sol#955-963)\n\t- GovTreasurer.deposit(uint256,uint256) (contracts/Contract.sol#1059-1089)\n\t- GovTreasurer.emergencyWithdraw(uint256) (contracts/Contract.sol#1047-1059)\n\t- GovTreasurer.massUpdatePools() (contracts/Contract.sol#1021-1029)\n\t- GovTreasurer.pendingGDAO(uint256,address) (contracts/Contract.sol#1000-1019)\n\t- GovTreasurer.poolInfo (contracts/Contract.sol#940)\n\t- GovTreasurer.poolLength() (contracts/Contract.sol#953-954)\n\t- GovTreasurer.set(uint256,uint256,bool) (contracts/Contract.sol#976-985)\n\t- GovTreasurer.updatePool(uint256) (contracts/Contract.sol#1030-1040)\n\t- GovTreasurer.withdraw(uint256,uint256) (contracts/Contract.sol#1089-1104)"
}
|
| low | other | codex | Reward transfers ignore ERC20 return values | 65 | no | — |
viewevidence_json{
"evidence": "`safeGDAOTransfer` calls `gdao.transfer` without checking the returned boolean.",
"locations": [
"contracts/Contract.sol:1134",
"contracts/Contract.sol:1137",
"contracts/Contract.sol:1139"
],
"recommendation": "Use `SafeERC20.safeTransfer` for GDAO transfers or explicitly check the return value.",
"exploit_scenario": "If `gdao.transfer` returns `false` instead of reverting, reward transfers can silently fail while accounting still advances, causing users to miss rewards and creating inconsistent state."
}
|
| low | other | codex | Emergency withdraw always transfers zero tokens | 65 | no | — |
viewevidence_json{
"evidence": "`user.amount` is set to 0 before `pool.token.safeTransfer(address(msg.sender), user.amount)`.",
"locations": [
"contracts/Contract.sol:1080",
"contracts/Contract.sol:1083"
],
"recommendation": "Cache the user\u2019s amount in a local variable, transfer that amount, then zero out `user.amount`/`user.rewardDebt` and emit the event with the cached amount.",
"exploit_scenario": "A user who calls `emergencyWithdraw` loses access to their deposit because the function zeroes `user.amount` before transferring, so it always sends 0 tokens."
}
|
| info | other | cast | Heavy EXTCODE*/BALANCE usage | 55 | no | — |
viewevidence_json{
"notes": "frequent external code or balance checks; may indicate introspection or validation logic",
"ext_balance_count": 6
}
|