019b477e-cb9b-7312-8564-e3032296405d
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 |
|---|---|---|---|---|
| 26715 | artifact.fetch | complete | 1 / 3 | 3 months ago |
| 26716 | tool.cast_disasm | complete | 1 / 3 | 3 months ago |
| 70162 | analysis.bundle | complete | 1 / 3 | 1 week ago |
| 70163 | capability.graph | complete | 1 / 3 | 1 week ago |
| 70164 | detector.run | complete | 1 / 3 | 1 week ago |
| 70165 | validation.fork | complete | 1 / 3 | 1 week ago |
| 113546 | report.consolidate | complete | 1 / 6 | 1 week ago |
| 113547 | tool.slither | complete | 1 / 2 | 1 week ago |
'forge clean' running (wd: /tmp/slither-qwrvhvqp)
'forge config --json' running
'forge build --build-info --skip ./test/** ./script/** --force' running (wd: /tmp/slither-qwrvhvqp)
X7TreasurySplitter._sendBalance(X7TreasurySplitter.Outlet) (contracts/Contract.sol#318-337) sends eth to arbitrary user
Dangerous calls:
- (success,None) = recipient.call{value: ethToSend}() (contracts/Contract.sol#332-333)
Reference: https://github.com/crytic/slither/wiki/Detector-Documentation#functions-that-send-ether-to-arbitrary-destinations
Reentrancy in X7TreasurySplitter._sendBalance(X7TreasurySplitter.Outlet) (contracts/Contract.sol#318-337):
External calls:
- (success,None) = recipient.call{value: ethToSend}() (contracts/Contract.sol#332-333)
State variables written after the call(s):
- outletBalance[outlet] += ethToSend (contracts/Contract.sol#334)
X7TreasurySplitter.outletBalance (contracts/Contract.sol#125-128) can be used in cross function reentrancies:
- X7TreasurySplitter._sendBalance(X7TreasurySplitter.Outlet) (contracts/Contract.sol#318-337)
- X7TreasurySplitter.divvyUp() (contracts/Contract.sol#184-211)
- X7TreasurySplitter.outletBalance (contracts/Contract.sol#125-128)
- reservedETH += ethToSend (contracts/Contract.sol#335-336)
X7TreasurySplitter.reservedETH (contracts/Contract.sol#122-123) can be used in cross function reentrancies:
- X7TreasurySplitter._sendBalance(X7TreasurySplitter.Outlet) (contracts/Contract.sol#318-337)
- X7TreasurySplitter.divvyUp() (contracts/Contract.sol#184-211)
- X7TreasurySplitter.reservedETH (contracts/Contract.sol#122-123)
Reentrancy in X7TreasurySplitter.pushAll() (contracts/Contract.sol#275-291):
External calls:
- _sendBalance(Outlet.X7DEV1) (contracts/Contract.sol#277-278)
- (success,None) = recipient.call{value: ethToSend}() (contracts/Contract.sol#332-333)
- _sendBalance(Outlet.X7DEV2) (contracts/Contract.sol#278-281)
- (success,None) = recipient.call{value: ethToSend}() (contracts/Contract.sol#332-333)
State variables written after the call(s):
- _sendBalance(Outlet.X7DEV2) (contracts/Contract.sol#278-281)
- outletBalance[outlet] = 0 (contracts/Contract.sol#326-327)
- outletBalance[outlet] += ethToSend (contracts/Contract.sol#334)
X7TreasurySplitter.outletBalance (contracts/Contract.sol#125-128) can be used in cross function reentrancies:
- X7TreasurySplitter._sendBalance(X7TreasurySplitter.Outlet) (contracts/Contract.sol#318-337)
- X7TreasurySplitter.divvyUp() (contracts/Contract.sol#184-211)
- X7TreasurySplitter.outletBalance (contracts/Contract.sol#125-128)
- _sendBalance(Outlet.X7DEV2) (contracts/Contract.sol#278-281)
- reservedETH -= ethToSend (contracts/Contract.sol#328-332)
- reservedETH += ethToSend (contracts/Contract.sol#335-336)
X7TreasurySplitter.reservedETH (contracts/Contract.sol#122-123) can be used in cross function reentrancies:
- X7TreasurySplitter._sendBalance(X7TreasurySplitter.Outlet) (contracts/Contract.sol#318-337)
- X7TreasurySplitter.divvyUp() (contracts/Contract.sol#184-211)
- X7TreasurySplitter.reservedETH (contracts/Contract.sol#122-123)
Reentrancy in X7TreasurySplitter.pushAll() (contracts/Contract.sol#275-291):
External calls:
- _sendBalance(Outlet.X7DEV1) (contracts/Contract.sol#277-278)
- (success,None) = recipient.call{value: ethToSend}() (contracts/Contract.sol#332-333)
- _sendBalance(Outlet.X7DEV2) (contracts/Contract.sol#278-281)
- (success,None) = recipient.call{value: ethToSend}() (contracts/Contract.sol#332-333)
- _sendBalance(Outlet.X7DEV3) (contracts/Contract.sol#281-282)
- (success,None) = recipient.call{value: ethToSend}() (contracts/Contract.sol#332-333)
State variables written after the call(s):
- _sendBalance(Outlet.X7DEV3) (contracts/Contract.sol#281-282)
- outletBalance[outlet] = 0 (contracts/Contract.sol#326-327)
- outletBalance[outlet] += ethToSend (contracts/Contract.sol#334)
X7TreasurySplitter.outletBalance (contracts/Contract.sol#125-128) can be used in cross function reentrancies:
- X7TreasurySplitter._sendBalance(X7TreasurySplitter.Outlet) (contracts/Contract.sol#318-337)
- X7TreasurySplitter.divvyUp() (contracts/Contract.sol#184-211)
- X7TreasurySplitter.outletBalance (contracts/Contract.sol#125-128)
- _sendBalance(Outlet.X7DEV3) (contracts/Contract.sol#281-282)
- reservedETH -= ethToSend (contracts/Contract.sol#328-332)
- reservedETH += ethToSend (contracts/Contract.sol#335-336)
X7TreasurySplitter.reservedETH (contracts/Contract.sol#122-123) can be used in cross function reentrancies:
- X7TreasurySplitter._sendBalance(X7TreasurySplitter.Outlet) (contracts/Contract.sol#318-337)
- X7TreasurySplitter.divvyUp() (contracts/Contract.sol#184-211)
- X7TreasurySplitter.reservedETH (contracts/Contract.sol#122-123)
Reentrancy in X7TreasurySplitter.pushAll() (contracts/Contract.sol#275-291):
External calls:
- _sendBalance(Outlet.X7DEV1) (contracts/Contract.sol#277-278)
- (success,None) = recipient.call{value: ethToSend}() (contracts/Contract.sol#332-333)
- _sendBalance(Outlet.X7DEV2) (contracts/Contract.sol#278-281)
- (success,None) = recipient.call{value: ethToSend}() (contracts/Contract.sol#332-333)
- _sendBalance(Outlet.X7DEV3) (contracts/Contract.sol#281-282)
- (success,None) = recipient.call{value: ethToSend}() (contracts/Contract.sol#332-333)
- _sendBalance(Outlet.X7DEV4) (contracts/Contract.sol#282)
- (success,None) = recipient.call{value: ethToSend}() (contracts/Contract.sol#332-333)
State variables written after the call(s):
- _sendBalance(Outlet.X7DEV4) (contracts/Contract.sol#282)
- outletBalance[outlet] = 0 (contracts/Contract.sol#326-327)
- outletBalance[outlet] += ethToSend (contracts/Contract.sol#334)
X7TreasurySplitter.outletBalance (contracts/Contract.sol#125-128) can be used in cross function reentrancies:
- X7TreasurySplitter._sendBalance(X7TreasurySplitter.Outlet) (contracts/Contract.sol#318-337)
- X7TreasurySplitter.divvyUp() (contracts/Contract.sol#184-211)
- X7TreasurySplitter.outletBalance (contracts/Contract.sol#125-128)
- _sendBalance(Outlet.X7DEV4) (contracts/Contract.sol#282)
- reservedETH -= ethToSend (contracts/Contract.sol#328-332)
- reservedETH += ethToSend (contracts/Contract.sol#335-336)
X7TreasurySplitter.reservedETH (contracts/Contract.sol#122-123) can be used in cross function reentrancies:
- X7TreasurySplitter._sendBalance(X7TreasurySplitter.Outlet) (contracts/Contract.sol#318-337)
- X7TreasurySplitter.divvyUp() (contracts/Contract.sol#184-211)
- X7TreasurySplitter.reservedETH (contracts/Contract.sol#122-123)
Reentrancy in X7TreasurySplitter.pushAll() (contracts/Contract.sol#275-291):
External calls:
- _sendBalance(Outlet.X7DEV1) (contracts/Contract.sol#277-278)
- (success,None) = recipient.call{value: ethToSend}() (contracts/Contract.sol#332-333)
- _sendBalance(Outlet.X7DEV2) (contracts/Contract.sol#278-281)
- (success,None) = recipient.call{value: ethToSend}() (contracts/Contract.sol#332-333)
- _sendBalance(Outlet.X7DEV3) (contracts/Contract.sol#281-282)
- (success,None) = recipient.call{value: ethToSend}() (contracts/Contract.sol#332-333)
- _sendBalance(Outlet.X7DEV4) (contracts/Contract.sol#282)
- (success,None) = recipient.call{value: ethToSend}() (contracts/Contract.sol#332-333)
- _sendBalance(Outlet.X7DEV5) (contracts/Contract.sol#283)
- (success,None) = recipient.call{value: ethToSend}() (contracts/Contract.sol#332-333)
State variables written after the call(s):
- _sendBalance(Outlet.X7DEV5) (contracts/Contract.sol#283)
- outletBalance[outlet] = 0 (contracts/Contract.sol#326-327)
- outletBalance[outlet] += ethToSend (contracts/Contract.sol#334)
X7TreasurySplitter.outletBalance (contracts/Contract.sol#125-128) can be used in cross function reentrancies:
- X7TreasurySplitter._sendBalance(X7TreasurySplitter.Outlet) (contracts/Contract.sol#318-337)
- X7TreasurySplitter.divvyUp() (contracts/Contract.sol#184-211)
- X7TreasurySplitter.outletBalance (contracts/Contract.sol#125-128)
- _sendBalance(Outlet.X7DEV5) (contracts/Contract.sol#283)
- reservedETH -= ethToSend (contracts/Contract.sol#328-332)
- reservedETH += ethToSend (contracts/Contract.sol#335-336)
X7TreasurySplitter.reservedETH (contracts/Contract.sol#122-123) can be used in cross function reentrancies:
- X7TreasurySplitter._sendBalance(X7TreasurySplitter.Outlet) (contracts/Contract.sol#318-337)
- X7TreasurySplitter.divvyUp() (contracts/Contract.sol#184-211)
- X7TreasurySplitter.reservedETH (contracts/Contract.sol#122-123)
Reentrancy in X7TreasurySplitter.pushAll() (contracts/Contract.sol#275-291):
External calls:
- _sendBalance(Outlet.X7DEV1) (contracts/Contract.sol#277-278)
- (success,None) = recipient.call{value: ethToSend}() (contracts/Contract.sol#332-333)
- _sendBalance(Outlet.X7DEV2) (contracts/Contract.sol#278-281)
- (success,None) = recipient.call{value: ethToSend}() (contracts/Contract.sol#332-333)
- _sendBalance(Outlet.X7DEV3) (contracts/Contract.sol#281-282)
- (success,None) = recipient.call{value: ethToSend}() (contracts/Contract.sol#332-333)
- _sendBalance(Outlet.X7DEV4) (contracts/Contract.sol#282)
- (success,None) = recipient.call{value: ethToSend}() (contracts/Contract.sol#332-333)
- _sendBalance(Outlet.X7DEV5) (contracts/Contract.sol#283)
- (success,None) = recipient.call{value: ethToSend}() (contracts/Contract.sol#332-333)
- _sendBalance(Outlet.X7DEV6) (contracts/Contract.sol#283-284)
- (success,None) = recipient.call{value: ethToSend}() (contracts/Contract.sol#332-333)
State variables written after the call(s):
- _sendBalance(Outlet.X7DEV6) (contracts/Contract.sol#283-284)
- outletBalance[outlet] = 0 (contracts/Contract.sol#326-327)
- outletBalance[outlet] += ethToSend (contracts/Contract.sol#334)
X7TreasurySplitter.outletBalance (contracts/Contract.sol#125-128) can be used in cross function reentrancies:
- X7TreasurySplitter._sendBalance(X7TreasurySplitter.Outlet) (contracts/Contract.sol#318-337)
- X7TreasurySplitter.divvyUp() (contracts/Contract.sol#184-211)
- X7TreasurySplitter.outletBalance (contracts/Contract.sol#125-128)
- _sendBalance(Outlet.X7DEV6) (contracts/Contract.sol#283-284)
- reservedETH -= ethToSend (contracts/Contract.sol#328-332)
- reservedETH += ethToSend (contracts/Contract.sol#335-336)
X7TreasurySplitter.reservedETH (contracts/Contract.sol#122-123) can be used in cross function reentrancies:
- X7TreasurySplitter._sendBalance(X7TreasurySplitter.Outlet) (contracts/Contract.sol#318-337)
- X7TreasurySplitter.divvyUp() (contracts/Contract.sol#184-211)
- X7TreasurySplitter.reservedETH (contracts/Contract.sol#122-123)
Reentrancy in X7TreasurySplitter.pushAll() (contracts/Contract.sol#275-291):
External calls:
- _sendBalance(Outlet.X7DEV1) (contracts/Contract.sol#277-278)
- (success,None) = recipient.call{value: ethToSend}() (contracts/Contract.sol#332-333)
- _sendBalance(Outlet.X7DEV2) (contracts/Contract.sol#278-281)
- (success,None) = recipient.call{value: ethToSend}() (contracts/Contract.sol#332-333)
- _sendBalance(Outlet.X7DEV3) (contracts/Contract.sol#281-282)
- (success,None) = recipient.call{value: ethToSend}() (contracts/Contract.sol#332-333)
- _sendBalance(Outlet.X7DEV4) (contracts/Contract.sol#282)
- (success,None) = recipient.call{value: ethToSend}() (contracts/Contract.sol#332-333)
- _sendBalance(Outlet.X7DEV5) (contracts/Contract.sol#283)
- (success,None) = recipient.call{value: ethToSend}() (contracts/Contract.sol#332-333)
- _sendBalance(Outlet.X7DEV6) (contracts/Contract.sol#283-284)
- (success,None) = recipient.call{value: ethToSend}() (contracts/Contract.sol#332-333)
- _sendBalance(Outlet.X7DEV7) (contracts/Contract.sol#285-287)
- (success,None) = recipient.call{value: ethToSend}() (contracts/Contract.sol#332-333)
State variables written after the call(s):
- _sendBalance(Outlet.X7DEV7) (contracts/Contract.sol#285-287)
- outletBalance[outlet] = 0 (contracts/Contract.sol#326-327)
- outletBalance[outlet] += ethToSend (contracts/Contract.sol#334)
X7TreasurySplitter.outletBalance (contracts/Contract.sol#125-128) can be used in cross function reentrancies:
- X7TreasurySplitter._sendBalance(X7TreasurySplitter.Outlet) (contracts/Contract.sol#318-337)
- X7TreasurySplitter.divvyUp() (contracts/Contract.sol#184-211)
- X7TreasurySplitter.outletBalance (contracts/Contract.sol#125-128)
- _sendBalance(Outlet.X7DEV7) (contracts/Contract.sol#285-287)
- reservedETH -= ethToSend (contracts/Contract.sol#328-332)
- reservedETH += ethToSend (contracts/Contract.sol#335-336)
X7TreasurySplitter.reservedETH (contracts/Contract.sol#122-123) can be used in cross function reentrancies:
- X7TreasurySplitter._sendBalance(X7TreasurySplitter.Outlet) (contracts/Contract.sol#318-337)
- X7TreasurySplitter.divvyUp() (contracts/Contract.sol#184-211)
- X7TreasurySplitter.reservedETH (contracts/Contract.sol#122-123)
Reentrancy in X7TreasurySplitter.pushAll() (contracts/Contract.sol#275-291):
External calls:
- _sendBalance(Outlet.X7DEV1) (contracts/Contract.sol#277-278)
- (success,None) = recipient.call{value: ethToSend}() (contracts/Contract.sol#332-333)
- _sendBalance(Outlet.X7DEV2) (contracts/Contract.sol#278-281)
- (success,None) = recipient.call{value: ethToSend}() (contracts/Contract.sol#332-333)
- _sendBalance(Outlet.X7DEV3) (contracts/Contract.sol#281-282)
- (success,None) = recipient.call{value: ethToSend}() (contracts/Contract.sol#332-333)
- _sendBalance(Outlet.X7DEV4) (contracts/Contract.sol#282)
- (success,None) = recipient.call{value: ethToSend}() (contracts/Contract.sol#332-333)
- _sendBalance(Outlet.X7DEV5) (contracts/Contract.sol#283)
- (success,None) = recipient.call{value: ethToSend}() (contracts/Contract.sol#332-333)
- _sendBalance(Outlet.X7DEV6) (contracts/Contract.sol#283-284)
- (success,None) = recipient.call{value: ethToSend}() (contracts/Contract.sol#332-333)
- _sendBalance(Outlet.X7DEV7) (contracts/Contract.sol#285-287)
- (success,None) = recipient.call{value: ethToSend}() (contracts/Contract.sol#332-333)
- _sendBalance(Outlet.REWARD_POOL) (contracts/Contract.sol#287-289)
- (success,None) = recipient.call{value: ethToSend}() (contracts/Contract.sol#332-333)
State variables written after the call(s):
- _sendBalance(Outlet.REWARD_POOL) (contracts/Contract.sol#287-289)
- outletBalance[outlet] = 0 (contracts/Contract.sol#326-327)
- outletBalance[outlet] += ethToSend (contracts/Contract.sol#334)
X7TreasurySplitter.outletBalance (contracts/Contract.sol#125-128) can be used in cross function reentrancies:
- X7TreasurySplitter._sendBalance(X7TreasurySplitter.Outlet) (contracts/Contract.sol#318-337)
- X7TreasurySplitter.divvyUp() (contracts/Contract.sol#184-211)
- X7TreasurySplitter.outletBalance (contracts/Contract.sol#125-128)
- _sendBalance(Outlet.REWARD_POOL) (contracts/Contract.sol#287-289)
- reservedETH -= ethToSend (contracts/Contract.sol#328-332)
- reservedETH += ethToSend (contracts/Contract.sol#335-336)
X7TreasurySplitter.reservedETH (contracts/Contract.sol#122-123) can be used in cross function reentrancies:
- X7TreasurySplitter._sendBalance(X7TreasurySplitter.Outlet) (contracts/Contract.sol#318-337)
- X7TreasurySplitter.divvyUp() (contracts/Contract.sol#184-211)
- X7TreasurySplitter.reservedETH (contracts/Contract.sol#122-123)
Reentrancy in X7TreasurySplitter.pushAll() (contracts/Contract.sol#275-291):
External calls:
- _sendBalance(Outlet.X7DEV1) (contracts/Contract.sol#277-278)
- (success,None) = recipient.call{value: ethToSend}() (contracts/Contract.sol#332-333)
- _sendBalance(Outlet.X7DEV2) (contracts/Contract.sol#278-281)
- (success,None) = recipient.call{value: ethToSend}() (contracts/Contract.sol#332-333)
- _sendBalance(Outlet.X7DEV3) (contracts/Contract.sol#281-282)
- (success,None) = recipient.call{value: ethToSend}() (contracts/Contract.sol#332-333)
- _sendBalance(Outlet.X7DEV4) (contracts/Contract.sol#282)
- (success,None) = recipient.call{value: ethToSend}() (contracts/Contract.sol#332-333)
- _sendBalance(Outlet.X7DEV5) (contracts/Contract.sol#283)
- (success,None) = recipient.call{value: ethToSend}() (contracts/Contract.sol#332-333)
- _sendBalance(Outlet.X7DEV6) (contracts/Contract.sol#283-284)
- (success,None) = recipient.call{value: ethToSend}() (contracts/Contract.sol#332-333)
- _sendBalance(Outlet.X7DEV7) (contracts/Contract.sol#285-287)
- (success,None) = recipient.call{value: ethToSend}() (contracts/Contract.sol#332-333)
- _sendBalance(Outlet.REWARD_POOL) (contracts/Contract.sol#287-289)
- (success,None) = recipient.call{value: ethToSend}() (contracts/Contract.sol#332-333)
- _sendBalance(Outlet.OTHER_SLOT1) (contracts/Contract.sol#289-290)
- (success,None) = recipient.call{value: ethToSend}() (contracts/Contract.sol#332-333)
State variables written after the call(s):
- _sendBalance(Outlet.OTHER_SLOT1) (contracts/Contract.sol#289-290)
- outletBalance[outlet] = 0 (contracts/Contract.sol#326-327)
- outletBalance[outlet] += ethToSend (contracts/Contract.sol#334)
X7TreasurySplitter.outletBalance (contracts/Contract.sol#125-128) can be used in cross function reentrancies:
- X7TreasurySplitter._sendBalance(X7TreasurySplitter.Outlet) (contracts/Contract.sol#318-337)
- X7TreasurySplitter.divvyUp() (contracts/Contract.sol#184-211)
- X7TreasurySplitter.outletBalance (contracts/Contract.sol#125-128)
- _sendBalance(Outlet.OTHER_SLOT1) (contracts/Contract.sol#289-290)
- reservedETH -= ethToSend (contracts/Contract.sol#328-332)
- reservedETH += ethToSend (contracts/Contract.sol#335-336)
X7TreasurySplitter.reservedETH (contracts/Contract.sol#122-123) can be used in cross function reentrancies:
- X7TreasurySplitter._sendBalance(X7TreasurySplitter.Outlet) (contracts/Contract.sol#318-337)
- X7TreasurySplitter.divvyUp() (contracts/Contract.sol#184-211)
- X7TreasurySplitter.reservedETH (contracts/Contract.sol#122-123)
Reentrancy in X7TreasurySplitter.pushAll() (contracts/Contract.sol#275-291):
External calls:
- _sendBalance(Outlet.X7DEV1) (contracts/Contract.sol#277-278)
- (success,None) = recipient.call{value: ethToSend}() (contracts/Contract.sol#332-333)
- _sendBalance(Outlet.X7DEV2) (contracts/Contract.sol#278-281)
- (success,None) = recipient.call{value: ethToSend}() (contracts/Contract.sol#332-333)
- _sendBalance(Outlet.X7DEV3) (contracts/Contract.sol#281-282)
- (success,None) = recipient.call{value: ethToSend}() (contracts/Contract.sol#332-333)
- _sendBalance(Outlet.X7DEV4) (contracts/Contract.sol#282)
- (success,None) = recipient.call{value: ethToSend}() (contracts/Contract.sol#332-333)
- _sendBalance(Outlet.X7DEV5) (contracts/Contract.sol#283)
- (success,None) = recipient.call{value: ethToSend}() (contracts/Contract.sol#332-333)
- _sendBalance(Outlet.X7DEV6) (contracts/Contract.sol#283-284)
- (success,None) = recipient.call{value: ethToSend}() (contracts/Contract.sol#332-333)
- _sendBalance(Outlet.X7DEV7) (contracts/Contract.sol#285-287)
- (success,None) = recipient.call{value: ethToSend}() (contracts/Contract.sol#332-333)
- _sendBalance(Outlet.REWARD_POOL) (contracts/Contract.sol#287-289)
- (success,None) = recipient.call{value: ethToSend}() (contracts/Contract.sol#332-333)
- _sendBalance(Outlet.OTHER_SLOT1) (contracts/Contract.sol#289-290)
- (success,None) = recipient.call{value: ethToSend}() (contracts/Contract.sol#332-333)
- _sendBalance(Outlet.OTHER_SLOT2) (contracts/Contract.sol#290-291)
- (success,None) = recipient.call{value: ethToSend}() (contracts/Contract.sol#332-333)
State variables written after the call(s):
- _sendBalance(Outlet.OTHER_SLOT2) (contracts/Contract.sol#290-291)
- outletBalance[outlet] = 0 (contracts/Contract.sol#326-327)
- outletBalance[outlet] += ethToSend (contracts/Contract.sol#334)
X7TreasurySplitter.outletBalance (contracts/Contract.sol#125-128) can be used in cross function reentrancies:
- X7TreasurySplitter._sendBalance(X7TreasurySplitter.Outlet) (contracts/Contract.sol#318-337)
- X7TreasurySplitter.divvyUp() (contracts/Contract.sol#184-211)
- X7TreasurySplitter.outletBalance (contracts/Contract.sol#125-128)
- _sendBalance(Outlet.OTHER_SLOT2) (contracts/Contract.sol#290-291)
- reservedETH -= ethToSend (contracts/Contract.sol#328-332)
- reservedETH += ethToSend (contracts/Contract.sol#335-336)
X7TreasurySplitter.reservedETH (contracts/Contract.sol#122-123) can be used in cross function reentrancies:
- X7TreasurySplitter._sendBalance(X7TreasurySplitter.Outlet) (contracts/Contract.sol#318-337)
- X7TreasurySplitter.divvyUp() (contracts/Contract.sol#184-211)
- X7TreasurySplitter.reservedETH (contracts/Contract.sol#122-123)
Reference: https://github.com/crytic/slither/wiki/Detector-Documentation#reentrancy-vulnerabilities
X7TreasurySplitter.rescueTokens(address) (contracts/Contract.sol#296-318) ignores return value by IERC20(tokenAddress).approve(address(router),tokenAmount) (contracts/Contract.sol#309-311)
Reference: https://github.com/crytic/slither/wiki/Detector-Documentation#unused-return
Version constraint ^0.8.15 contains known severe issues (https://solidity.readthedocs.io/en/latest/bugs.html)
- VerbatimInvalidDeduplication
- FullInlinerNonExpressionSplitArgumentEvaluationOrder
- MissingSideEffectsOnSelectorAccess
- StorageWriteRemovalBeforeConditionalTermination
- AbiReencodingHeadOverflowWithStaticArrayCleanup.
It is used by:
- ^0.8.15 (contracts/Contract.sol#1-2)
Reference: https://github.com/crytic/slither/wiki/Detector-Documentation#incorrect-versions-of-solidity
Low level call in X7TreasurySplitter._sendBalance(X7TreasurySplitter.Outlet) (contracts/Contract.sol#318-337):
- (success,None) = recipient.call{value: ethToSend}() (contracts/Contract.sol#332-333)
Reference: https://github.com/crytic/slither/wiki/Detector-Documentation#low-level-calls
Function IUniswapV2Router02.WETH() (contracts/Contract.sol#81-84) is not in mixedCase
Reference: https://github.com/crytic/slither/wiki/Detector-Documentation#conformance-to-solidity-naming-conventions
X7TreasurySplitter.divvyUp() (contracts/Contract.sol#184-211) uses literals with too many digits:
- outletBalance[Outlet.X7DEV1] += newETH * outletShare[Outlet.X7DEV1] / 100000 (contracts/Contract.sol#185-190)
X7TreasurySplitter.divvyUp() (contracts/Contract.sol#184-211) uses literals with too many digits:
- outletBalance[Outlet.X7DEV2] += newETH * outletShare[Outlet.X7DEV2] / 100000 (contracts/Contract.sol#191-193)
X7TreasurySplitter.divvyUp() (contracts/Contract.sol#184-211) uses literals with too many digits:
- outletBalance[Outlet.X7DEV3] += newETH * outletShare[Outlet.X7DEV3] / 100000 (contracts/Contract.sol#193-194)
X7TreasurySplitter.divvyUp() (contracts/Contract.sol#184-211) uses literals with too many digits:
- outletBalance[Outlet.X7DEV4] += newETH * outletShare[Outlet.X7DEV4] / 100000 (contracts/Contract.sol#194-195)
X7TreasurySplitter.divvyUp() (contracts/Contract.sol#184-211) uses literals with too many digits:
- outletBalance[Outlet.X7DEV5] += newETH * outletShare[Outlet.X7DEV5] / 100000 (contracts/Contract.sol#195-196)
X7TreasurySplitter.divvyUp() (contracts/Contract.sol#184-211) uses literals with too many digits:
- outletBalance[Outlet.X7DEV6] += newETH * outletShare[Outlet.X7DEV6] / 100000 (contracts/Contract.sol#196-197)
X7TreasurySplitter.divvyUp() (contracts/Contract.sol#184-211) uses literals with too many digits:
- outletBalance[Outlet.X7DEV7] += newETH * outletShare[Outlet.X7DEV7] / 100000 (contracts/Contract.sol#197-198)
X7TreasurySplitter.divvyUp() (contracts/Contract.sol#184-211) uses literals with too many digits:
- outletBalance[Outlet.REWARD_POOL] += newETH * outletShare[Outlet.REWARD_POOL] / 100000 (contracts/Contract.sol#198-199)
X7TreasurySplitter.divvyUp() (contracts/Contract.sol#184-211) uses literals with too many digits:
- outletBalance[Outlet.OTHER_SLOT1] += newETH * outletShare[Outlet.OTHER_SLOT1] / 100000 (contracts/Contract.sol#200)
Reference: https://github.com/crytic/slither/wiki/Detector-Documentation#too-many-digits
. analyzed (6 contracts with 100 detectors), 24 result(s) found
{
"solc": {
"status": "ok",
"use_rc": 0,
"version": "0.8.15",
"strategy": "solc-select",
"solc_path": "/var/www/tripwire/.venv/bin/solc",
"install_rc": 0,
"use_stderr": null,
"use_stdout": "Switched global version to 0.8.15",
"install_stderr": null,
"install_stdout": "Version '0.8.15' is already installed, skipping..."
},
"solc_args": "--base-path /tmp/slither-qwrvhvqp --allow-paths /tmp/slither-qwrvhvqp,/tmp/slither-qwrvhvqp/lib,/tmp/slither-qwrvhvqp/src",
"remappings": [],
"source_files": [
"contracts/Contract.sol"
],
"contract_count": 0,
"contract_names": [],
"detector_count": 24,
"workspace_hash": "bb6145b0005b2bdde1b21a3acd5d8bcdd2741feaea6f079ac20983f8a6a84fd2",
"duration_seconds": 0.9764564037322998,
"solc_version_requested": "0.8.15"
}
OpenAI Codex v0.118.0 (research preview) -------- workdir: /tmp/codex-vhwqqpg2 model: gpt-5.4 provider: openai approval: never sandbox: read-only reasoning effort: high reasoning summaries: none session id: 019d5c97-2b6f-7f11-9749-0d4a34204028 -------- 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. warning: Codex could not find system bubblewrap on PATH. Please install bubblewrap with your package manager. Codex will use the vendored bubblewrap in the meantime. ERROR: You've hit your usage limit. Visit https://chatgpt.com/codex/settings/usage to purchase more credits or try again at Apr 8th, 2026 9:11 AM. ERROR: You've hit your usage limit. Visit https://chatgpt.com/codex/settings/usage to purchase more credits or try again at Apr 8th, 2026 9:11 AM.
{
"codex": {
"ran_at": "2026-04-05T07:41:45.869356+00:00",
"returncode": 1
},
"project": {
"mode": "source",
"file_count": 1,
"import_count": 0,
"first_party_contracts_count": 1
},
"summary": null,
"no_findings": null,
"schema_version": 1
}
00000000: PUSH1 0x80 00000002: PUSH1 0x40 00000004: MSTORE 00000005: PUSH1 0x04 00000007: CALLDATASIZE 00000008: LT 00000009: PUSH2 0x012d 0000000c: JUMPI 0000000d: PUSH1 0x00 0000000f: CALLDATALOAD 00000010: PUSH1 0xe0 00000012: SHR 00000013: DUP1 00000014: PUSH4 0x7a1f88e9 00000019: GT 0000001a: PUSH2 0x00ab 0000001d: JUMPI 0000001e: DUP1 0000001f: PUSH4 0xc38ec0b6 00000024: GT 00000025: PUSH2 0x006f 00000028: JUMPI 00000029: DUP1 0000002a: PUSH4 0xc38ec0b6 0000002f: EQ 00000030: PUSH2 0x035b 00000033: JUMPI 00000034: DUP1 00000035: PUSH4 0xd552bc78 0000003a: EQ 0000003b: PUSH2 0x0370 0000003e: JUMPI 0000003f: DUP1 00000040: PUSH4 0xe70c11e5 00000045: EQ 00000046: PUSH2 0x0390 00000049: JUMPI 0000004a: DUP1 0000004b: PUSH4 0xf2fde38b 00000050: EQ 00000051: PUSH2 0x03a5 00000054: JUMPI 00000055: DUP1 00000056: PUSH4 0xf887ea40 0000005b: EQ 0000005c: PUSH2 0x03c5 0000005f: JUMPI 00000060: DUP1 00000061: PUSH4 0xfa314ed4 00000066: EQ 00000067: PUSH2 0x03e5 0000006a: JUMPI 0000006b: PUSH1 0x00 0000006d: DUP1 0000006e: REVERT 0000006f: JUMPDEST 00000070: DUP1 00000071: PUSH4 0x7a1f88e9 00000076: EQ 00000077: PUSH2 0x02a3 0000007a: JUMPI 0000007b: DUP1 0000007c: PUSH4 0x7e908958 00000081: EQ 00000082: PUSH2 0x02c3 00000085: JUMPI 00000086: DUP1 00000087: PUSH4 0x8a354977 0000008c: EQ 0000008d: PUSH2 0x02f0 00000090: JUMPI 00000091: DUP1 00000092: PUSH4 0x8da5cb5b 00000097: EQ 00000098: PUSH2 0x031d 0000009b: JUMPI 0000009c: DUP1 0000009d: PUSH4 0xc0d78655 000000a2: EQ 000000a3: PUSH2 0x033b 000000a6: JUMPI 000000a7: PUSH1 0x00 000000a9: DUP1 000000aa: REVERT 000000ab: JUMPDEST 000000ac: DUP1 000000ad: PUSH4 0x29a2192b 000000b2: GT 000000b3: PUSH2 0x00f2 000000b6: JUMPI 000000b7: DUP1 000000b8: PUSH4 0x29a2192b 000000bd: EQ 000000be: PUSH2 0x0203 000000c1: JUMPI 000000c2: DUP1 000000c3: PUSH4 0x2fbf6ea0 000000c8: EQ 000000c9: PUSH2 0x0218 000000cc: JUMPI 000000cd: DUP1 000000ce: PUSH4 0x6961e1dc 000000d3: EQ 000000d4: PUSH2 0x0255 000000d7: JUMPI 000000d8: DUP1 000000d9: PUSH4 0x715018a6 000000de: EQ 000000df: PUSH2 0x026a 000000e2: JUMPI 000000e3: DUP1 000000e4: PUSH4 0x77b9fda8 000000e9: EQ 000000ea: PUSH2 0x027f 000000ed: JUMPI 000000ee: PUSH1 0x00 000000f0: DUP1 000000f1: REVERT 000000f2: JUMPDEST 000000f3: DUP1 000000f4: PUSH3 0xae3bf8 000000f8: EQ 000000f9: PUSH2 0x0139 000000fc: JUMPI 000000fd: DUP1 000000fe: PUSH4 0x11ec9d34 00000103: EQ 00000104: PUSH2 0x015b 00000107: JUMPI 00000108: DUP1 00000109: PUSH4 0x1c2429f4 0000010e: EQ 0000010f: PUSH2 0x0170 00000112: JUMPI 00000113: DUP1 00000114: PUSH4 0x21af832e 00000119: EQ 0000011a: PUSH2 0x01c3 0000011d: JUMPI 0000011e: DUP1 0000011f: PUSH4 0x28c3a1a8 00000124: EQ 00000125: PUSH2 0x01e3 00000128: JUMPI 00000129: PUSH1 0x00 0000012b: DUP1 0000012c: REVERT 0000012d: JUMPDEST 0000012e: CALLDATASIZE 0000012f: PUSH2 0x0134 00000132: JUMPI 00000133: STOP 00000134: JUMPDEST 00000135: PUSH1 0x00 00000137: DUP1 00000138: REVERT 00000139: JUMPDEST 0000013a: CALLVALUE 0000013b: DUP1 0000013c: ISZERO 0000013d: PUSH2 0x0145 00000140: JUMPI 00000141: PUSH1 0x00 00000143: DUP1 00000144: REVERT 00000145: JUMPDEST 00000146: POP 00000147: PUSH2 0x0159 0000014a: PUSH2 0x0154 0000014d: CALLDATASIZE 0000014e: PUSH1 0x04 00000150: PUSH2 0x19cb 00000153: JUMP 00000154: JUMPDEST 00000155: PUSH2 0x0405 00000158: JUMP 00000159: JUMPDEST 0000015a: STOP 0000015b: JUMPDEST 0000015c: CALLVALUE 0000015d: DUP1 0000015e: ISZERO 0000015f: PUSH2 0x0167 00000162: JUMPI 00000163: PUSH1 0x00 00000165: DUP1 00000166: REVERT 00000167: JUMPDEST 00000168: POP 00000169: PUSH2 0x0159 0000016c: PUSH2 0x06d6 0000016f: JUMP 00000170: JUMPDEST 00000171: CALLVALUE 00000172: DUP1 00000173: ISZERO 00000174: PUSH2 0x017c 00000177: JUMPI 00000178: PUSH1 0x00 0000017a: DUP1 0000017b: REVERT 0000017c: JUMPDEST 0000017d: POP 0000017e: PUSH2 0x01a6 00000181: PUSH2 0x018b 00000184: CALLDATASIZE 00000185: PUSH1 0x04 00000187: PUSH2 0x1a03 0000018a: JUMP 0000018b: JUMPDEST 0000018c: PUSH1 0x04 0000018e: PUSH1 0x20 00000190: MSTORE 00000191: PUSH1 0x00 00000193: SWAP1 00000194: DUP2 00000195: MSTORE 00000196: PUSH1 0x40 00000198: SWAP1 00000199: KECCAK256 0000019a: SLOAD 0000019b: PUSH1 0x01 0000019d: PUSH1 0x01 0000019f: PUSH1 0xa0 000001a1: SHL 000001a2: SUB 000001a3: AND 000001a4: DUP2 000001a5: JUMP 000001a6: JUMPDEST 000001a7: PUSH1 0x40 000001a9: MLOAD 000001aa: PUSH1 0x01 000001ac: PUSH1 0x01 000001ae: PUSH1 0xa0 000001b0: SHL 000001b1: SUB 000001b2: SWAP1 000001b3: SWAP2 000001b4: AND 000001b5: DUP2 000001b6: MSTORE 000001b7: PUSH1 0x20 000001b9: ADD 000001ba: JUMPDEST 000001bb: PUSH1 0x40 000001bd: MLOAD 000001be: DUP1 000001bf: SWAP2 000001c0: SUB 000001c1: SWAP1 000001c2: RETURN 000001c3: JUMPDEST 000001c4: CALLVALUE 000001c5: DUP1 000001c6: ISZERO 000001c7: PUSH2 0x01cf 000001ca: JUMPI 000001cb: PUSH1 0x00 000001cd: DUP1 000001ce: REVERT 000001cf: JUMPDEST 000001d0: POP 000001d1: PUSH2 0x0159 000001d4: PUSH2 0x01de 000001d7: CALLDATASIZE 000001d8: PUSH1 0x04 000001da: PUSH2 0x1a03 000001dd: JUMP 000001de: JUMPDEST 000001df: PUSH2 0x0744 000001e2: JUMP 000001e3: JUMPDEST 000001e4: CALLVALUE 000001e5: DUP1 000001e6: ISZERO 000001e7: PUSH2 0x01ef 000001ea: JUMPI 000001eb: PUSH1 0x00 000001ed: DUP1 000001ee: REVERT 000001ef: JUMPDEST 000001f0: POP 000001f1: PUSH2 0x0159 000001f4: PUSH2 0x01fe 000001f7: CALLDATASIZE 000001f8: PUSH1 0x04 000001fa: PUSH2 0x1a1e 000001fd: JUMP 000001fe: JUMPDEST 000001ff: PUSH2 0x081d 00000202: JUMP 00000203: JUMPDEST 00000204: CALLVALUE 00000205: DUP1 00000206: ISZERO 00000207: PUSH2 0x020f 0000020a: JUMPI 0000020b: PUSH1 0x00 0000020d: DUP1 0000020e: REVERT 0000020f: JUMPDEST 00000210: POP 00000211: PUSH2 0x0159 00000214: PUSH2 0x0930 00000217: JUMP 00000218: JUMPDEST 00000219: CALLVALUE 0000021a: DUP1 0000021b: ISZERO 0000021c: PUSH2 0x0224 0000021f: JUMPI 00000220: PUSH1 0x00 00000222: DUP1 00000223: REVERT 00000224: JUMPDEST 00000225: POP 00000226: PUSH2 0x0248 00000229: PUSH2 0x0233 0000022c: CALLDATASIZE 0000022d: PUSH1 0x04 0000022f: PUSH2 0x19cb 00000232: JUMP 00000233: JUMPDEST 00000234: PUSH1 0x06 00000236: PUSH1 0x20 00000238: MSTORE 00000239: PUSH1 0x00 0000023b: SWAP1 0000023c: DUP2 0000023d: MSTORE 0000023e: PUSH1 0x40 00000240: SWAP1 00000241: KECCAK256 00000242: SLOAD 00000243: PUSH1 0xff 00000245: AND 00000246: DUP2 00000247: JUMP 00000248: JUMPDEST 00000249: PUSH1 0x40 0000024b: MLOAD 0000024c: PUSH2 0x01ba 0000024f: SWAP2 00000250: SWAP1 00000251: PUSH2 0x1a60 00000254: JUMP 00000255: JUMPDEST 00000256: CALLVALUE 00000257: DUP1 00000258: ISZERO 00000259: PUSH2 0x0261 0000025c: JUMPI 0000025d: PUSH1 0x00 0000025f: DUP1 00000260: REVERT 00000261: JUMPDEST 00000262: POP 00000263: PUSH2 0x0159 00000266: PUSH2 0x0971 00000269: JUMP 0000026a: JUMPDEST 0000026b: CALLVALUE 0000026c: DUP1 0000026d: ISZERO 0000026e: PUSH2 0x0276 00000271: JUMPI 00000272: PUSH1 0x00 00000274: DUP1 00000275: REVERT 00000276: JUMPDEST 00000277: POP 00000278: PUSH2 0x0159 0000027b: PUSH2 0x1012 0000027e: JUMP 0000027f: JUMPDEST 00000280: CALLVALUE 00000281: DUP1 00000282: ISZERO 00000283: PUSH2 0x028b 00000286: JUMPI 00000287: PUSH1 0x00 00000289: DUP1 0000028a: REVERT 0000028b: JUMPDEST 0000028c: POP 0000028d: PUSH2 0x0295 00000290: PUSH1 0x01 00000292: SLOAD 00000293: DUP2 00000294: JUMP 00000295: JUMPDEST 00000296: PUSH1 0x40 00000298: MLOAD 00000299: SWAP1 0000029a: DUP2 0000029b: MSTORE 0000029c: PUSH1 0x20 0000029e: ADD 0000029f: PUSH2 0x01ba 000002a2: JUMP 000002a3: JUMPDEST 000002a4: CALLVALUE 000002a5: DUP1 000002a6: ISZERO 000002a7: PUSH2 0x02af 000002aa: JUMPI 000002ab: PUSH1 0x00 000002ad: DUP1 000002ae: REVERT 000002af: JUMPDEST 000002b0: POP 000002b1: PUSH2 0x0159 000002b4: PUSH2 0x02be 000002b7: CALLDATASIZE 000002b8: PUSH1 0x04 000002ba: PUSH2 0x1a88 000002bd: JUMP 000002be: JUMPDEST 000002bf: PUSH2 0x1024 000002c2: JUMP 000002c3: JUMPDEST 000002c4: CALLVALUE 000002c5: DUP1 000002c6: ISZERO 000002c7: PUSH2 0x02cf 000002ca: JUMPI 000002cb: PUSH1 0x00 000002cd: DUP1 000002ce: REVERT 000002cf: JUMPDEST 000002d0: POP 000002d1: PUSH2 0x0295 000002d4: PUSH2 0x02de 000002d7: CALLDATASIZE 000002d8: PUSH1 0x04 000002da: PUSH2 0x1a03 000002dd: JUMP 000002de: JUMPDEST 000002df: PUSH1 0x03 000002e1: PUSH1 0x20 000002e3: MSTORE 000002e4: PUSH1 0x00 000002e6: SWAP1 000002e7: DUP2 000002e8: MSTORE 000002e9: PUSH1 0x40 000002eb: SWAP1 000002ec: KECCAK256 000002ed: SLOAD 000002ee: DUP2 000002ef: JUMP 000002f0: JUMPDEST 000002f1: CALLVALUE 000002f2: DUP1 000002f3: ISZERO 000002f4: PUSH2 0x02fc 000002f7: JUMPI 000002f8: PUSH1 0x00 000002fa: DUP1 000002fb: REVERT 000002fc: JUMPDEST 000002fd: POP 000002fe: PUSH2 0x0295 00000301: PUSH2 0x030b 00000304: CALLDATASIZE 00000305: PUSH1 0x04 00000307: PUSH2 0x1a03 0000030a: JUMP 0000030b: JUMPDEST 0000030c: PUSH1 0x05 0000030e: PUSH1 0x20 00000310: MSTORE 00000311: PUSH1 0x00 00000313: SWAP1 00000314: DUP2 00000315: MSTORE 00000316: PUSH1 0x40 00000318: SWAP1 00000319: KECCAK256 0000031a: SLOAD 0000031b: DUP2 0000031c: JUMP 0000031d: JUMPDEST 0000031e: CALLVALUE 0000031f: DUP1 00000320: ISZERO 00000321: PUSH2 0x0329 00000324: JUMPI 00000325: PUSH1 0x00 00000327: DUP1 00000328: REVERT 00000329: JUMPDEST 0000032a: POP 0000032b: PUSH1 0x00 0000032d: SLOAD 0000032e: PUSH1 0x01 00000330: PUSH1 0x01 00000332: PUSH1 0xa0 00000334: SHL 00000335: SUB 00000336: AND 00000337: PUSH2 0x01a6 0000033a: JUMP 0000033b: JUMPDEST 0000033c: CALLVALUE 0000033d: DUP1 0000033e: ISZERO 0000033f: PUSH2 0x0347 00000342: JUMPI 00000343: PUSH1 0x00 00000345: DUP1 00000346: REVERT 00000347: JUMPDEST 00000348: POP 00000349: PUSH2 0x0159 0000034c: PUSH2 0x0356 0000034f: CALLDATASIZE 00000350: PUSH1 0x04 00000352: PUSH2 0x19cb 00000355: JUMP 00000356: JUMPDEST 00000357: PUSH2 0x11da 0000035a: JUMP 0000035b: JUMPDEST 0000035c: CALLVALUE 0000035d: DUP1 0000035e: ISZERO 0000035f: PUSH2 0x0367 00000362: JUMPI 00000363: PUSH1 0x00 00000365: DUP1 00000366: REVERT 00000367: JUMPDEST 00000368: POP 00000369: PUSH2 0x0159 0000036c: PUSH2 0x121f 0000036f: JUMP 00000370: JUMPDEST 00000371: CALLVALUE 00000372: DUP1 00000373: ISZERO 00000374: PUSH2 0x037c 00000377: JUMPI 00000378: PUSH1 0x00 0000037a: DUP1 0000037b: REVERT 0000037c: JUMPDEST 0000037d: POP 0000037e: PUSH2 0x0159 00000381: PUSH2 0x038b 00000384: CALLDATASIZE 00000385: PUSH1 0x04 00000387: PUSH2 0x1a88 0000038a: JUMP 0000038b: JUMPDEST 0000038c: PUSH2 0x1358 0000038f: JUMP 00000390: JUMPDEST 00000391: CALLVALUE 00000392: DUP1 00000393: ISZERO 00000394: PUSH2 0x039c 00000397: JUMPI 00000398: PUSH1 0x00 0000039a: DUP1 0000039b: REVERT 0000039c: JUMPDEST 0000039d: POP 0000039e: PUSH2 0x0159 000003a1: PUSH2 0x1536 000003a4: JUMP 000003a5: JUMPDEST 000003a6: CALLVALUE 000003a7: DUP1 000003a8: ISZERO 000003a9: PUSH2 0x03b1 000003ac: JUMPI 000003ad: PUSH1 0x00 000003af: DUP1 000003b0: REVERT 000003b1: JUMPDEST 000003b2: POP 000003b3: PUSH2 0x0159 000003b6: PUSH2 0x03c0 000003b9: CALLDATASIZE 000003ba: PUSH1 0x04 000003bc: PUSH2 0x19cb 000003bf: JUMP 000003c0: JUMPDEST 000003c1: PUSH2 0x1566 000003c4: JUMP 000003c5: JUMPDEST 000003c6: CALLVALUE 000003c7: DUP1 000003c8: ISZERO 000003c9: PUSH2 0x03d1 000003cc: JUMPI 000003cd: PUSH1 0x00 000003cf: DUP1 000003d0: REVERT 000003d1: JUMPDEST 000003d2: POP 000003d3: PUSH1 0x02 000003d5: SLOAD 000003d6: PUSH2 0x01a6 000003d9: SWAP1 000003da: PUSH1 0x01 000003dc: PUSH1 0x01 000003de: PUSH1 0xa0 000003e0: SHL 000003e1: SUB 000003e2: AND 000003e3: DUP2 000003e4: JUMP 000003e5: JUMPDEST 000003e6: CALLVALUE 000003e7: DUP1 000003e8: ISZERO 000003e9: PUSH2 0x03f1 000003ec: JUMPI 000003ed: PUSH1 0x00 000003ef: DUP1 000003f0: REVERT 000003f1: JUMPDEST 000003f2: POP 000003f3: PUSH2 0x0159 000003f6: PUSH2 0x0400 000003f9: CALLDATASIZE 000003fa: PUSH1 0x04 000003fc: PUSH2 0x1acd 000003ff: JUMP 00000400: JUMPDEST 00000401: PUSH2 0x15e1 00000404: JUMP 00000405: JUMPDEST 00000406: PUSH1 0x02 00000408: PUSH1 0x00 0000040a: SWAP1 0000040b: SLOAD 0000040c: SWAP1 0000040d: PUSH2 0x0100 00000410: EXP 00000411: SWAP1 00000412: DIV 00000413: PUSH1 0x01 00000415: PUSH1 0x01 00000417: PUSH1 0xa0 00000419: SHL 0000041a: SUB 0000041b: AND 0000041c: PUSH1 0x01 0000041e: PUSH1 0x01 00000420: PUSH1 0xa0 00000422: SHL 00000423: SUB 00000424: AND 00000425: PUSH4 0xad5c4648 0000042a: PUSH1 0x40 0000042c: MLOAD 0000042d: DUP2 0000042e: PUSH4 0xffffffff 00000433: AND 00000434: PUSH1 0xe0 00000436: SHL 00000437: DUP2 00000438: MSTORE 00000439: PUSH1 0x04 0000043b: ADD 0000043c: PUSH1 0x20 0000043e: PUSH1 0x40 00000440: MLOAD 00000441: DUP1 00000442: DUP4 00000443: SUB 00000444: DUP2 00000445: DUP7 00000446: GAS 00000447: STATICCALL 00000448: ISZERO 00000449: DUP1 0000044a: ISZERO 0000044b: PUSH2 0x0458 0000044e: JUMPI 0000044f: RETURNDATASIZE 00000450: PUSH1 0x00 00000452: DUP1 00000453: RETURNDATACOPY 00000454: RETURNDATASIZE 00000455: PUSH1 0x00 00000457: REVERT 00000458: JUMPDEST 00000459: POP 0000045a: POP 0000045b: POP 0000045c: POP 0000045d: PUSH1 0x40 0000045f: MLOAD 00000460: RETURNDATASIZE 00000461: PUSH1 0x1f 00000463: NOT 00000464: PUSH1 0x1f 00000466: DUP3 00000467: ADD 00000468: AND 00000469: DUP3 0000046a: ADD 0000046b: DUP1 0000046c: PUSH1 0x40 0000046e: MSTORE 0000046f: POP 00000470: DUP2 00000471: ADD 00000472: SWAP1 00000473: PUSH2 0x047c 00000476: SWAP2 00000477: SWAP1 00000478: PUSH2 0x1b16 0000047b: JUMP 0000047c: JUMPDEST 0000047d: PUSH1 0x01 0000047f: PUSH1 0x01 00000481: PUSH1 0xa0 00000483: SHL 00000484: SUB 00000485: AND 00000486: DUP2 00000487: PUSH1 0x01 00000489: PUSH1 0x01 0000048b: PUSH1 0xa0 0000048d: SHL 0000048e: SUB 0000048f: AND 00000490: SUB 00000491: PUSH2 0x049f 00000494: JUMPI 00000495: PUSH2 0x049c 00000498: PUSH2 0x121f 0000049b: JUMP 0000049c: JUMPDEST 0000049d: POP 0000049e: JUMP 0000049f: JUMPDEST 000004a0: PUSH1 0x40 000004a2: MLOAD 000004a3: PUSH4 0x70a08231 000004a8: PUSH1 0xe0 000004aa: SHL 000004ab: DUP2 000004ac: MSTORE 000004ad: ADDRESS 000004ae: PUSH1 0x04 000004b0: DUP3 000004b1: ADD 000004b2: MSTORE 000004b3: PUSH1 0x00 000004b5: SWAP1 000004b6: PUSH1 0x01 000004b8: PUSH1 0x01 000004ba: PUSH1 0xa0 000004bc: SHL 000004bd: SUB 000004be: DUP4 000004bf: AND 000004c0: SWAP1 000004c1: PUSH4 0x70a08231 000004c6: SWAP1 000004c7: PUSH1 0x24 000004c9: ADD 000004ca: PUSH1 0x20 000004cc: PUSH1 0x40 000004ce: MLOAD 000004cf: DUP1 000004d0: DUP4 000004d1: SUB 000004d2: DUP2 000004d3: DUP7 000004d4: GAS 000004d5: STATICCALL 000004d6: ISZERO 000004d7: DUP1 000004d8: ISZERO 000004d9: PUSH2 0x04e6 000004dc: JUMPI 000004dd: RETURNDATASIZE 000004de: PUSH1 0x00 000004e0: DUP1 000004e1: RETURNDATACOPY 000004e2: RETURNDATASIZE 000004e3: PUSH1 0x00 000004e5: REVERT 000004e6: JUMPDEST 000004e7: POP 000004e8: POP 000004e9: POP 000004ea: POP 000004eb: PUSH1 0x40 000004ed: MLOAD 000004ee: RETURNDATASIZE 000004ef: PUSH1 0x1f 000004f1: NOT 000004f2: PUSH1 0x1f 000004f4: DUP3 000004f5: ADD 000004f6: AND 000004f7: DUP3 000004f8: ADD 000004f9: DUP1 000004fa: PUSH1 0x40 000004fc: MSTORE 000004fd: POP 000004fe: DUP2 000004ff: ADD 00000500: SWAP1 00000501: PUSH2 0x050a 00000504: SWAP2 00000505: SWAP1 00000506: PUSH2 0x1b33 00000509: JUMP 0000050a: JUMPDEST 0000050b: SWAP1 0000050c: POP 0000050d: DUP1 0000050e: ISZERO 0000050f: PUSH2 0x06d2 00000512: JUMPI 00000513: PUSH1 0x40 00000515: DUP1 00000516: MLOAD 00000517: PUSH1 0x02 00000519: DUP1 0000051a: DUP3 0000051b: MSTORE 0000051c: PUSH1 0x60 0000051e: DUP3 0000051f: ADD 00000520: DUP4 00000521: MSTORE 00000522: PUSH1 0x00 00000524: SWAP3 00000525: PUSH1 0x20 00000527: DUP4 00000528: ADD 00000529: SWAP1 0000052a: DUP1 0000052b: CALLDATASIZE 0000052c: DUP4 0000052d: CALLDATACOPY 0000052e: ADD 0000052f: SWAP1 00000530: POP 00000531: POP 00000532: SWAP1 00000533: POP 00000534: DUP3 00000535: DUP2 00000536: PUSH1 0x00 00000538: DUP2 00000539: MLOAD 0000053a: DUP2 0000053b: LT 0000053c: PUSH2 0x0547 0000053f: JUMPI 00000540: PUSH2 0x0547 00000543: PUSH2 0x1b4c 00000546: JUMP 00000547: JUMPDEST 00000548: PUSH1 0x01 0000054a: PUSH1 0x01 0000054c: PUSH1 0xa0 0000054e: SHL 0000054f: SUB 00000550: SWAP3 00000551: DUP4 00000552: AND 00000553: PUSH1 0x20 00000555: SWAP2 00000556: DUP3 00000557: MUL 00000558: SWAP3 00000559: SWAP1 0000055a: SWAP3 0000055b: ADD 0000055c: DUP2 0000055d: ADD 0000055e: SWAP2 0000055f: SWAP1 00000560: SWAP2 00000561: MSTORE 00000562: PUSH1 0x02 00000564: SLOAD 00000565: PUSH1 0x40 00000567: DUP1 00000568: MLOAD 00000569: PUSH4 0x15ab88c9 0000056e: PUSH1 0xe3 00000570: SHL 00000571: DUP2 00000572: MSTORE 00000573: SWAP1 00000574: MLOAD 00000575: SWAP2 00000576: SWAP1 00000577: SWAP4 00000578: AND 00000579: SWAP3 0000057a: PUSH4 0xad5c4648 0000057f: SWAP3 00000580: PUSH1 0x04 00000582: DUP1 00000583: DUP4 00000584: ADD 00000585: SWAP4 00000586: SWAP2 00000587: SWAP3 00000588: DUP3 00000589: SWAP1 0000058a: SUB 0000058b: ADD 0000058c: DUP2 0000058d: DUP7 0000058e: GAS 0000058f: STATICCALL 00000590: ISZERO 00000591: DUP1 00000592: ISZERO 00000593: PUSH2 0x05a0 00000596: JUMPI 00000597: RETURNDATASIZE 00000598: PUSH1 0x00 0000059a: DUP1 0000059b: RETURNDATACOPY 0000059c: RETURNDATASIZE 0000059d: PUSH1 0x00 0000059f: REVERT 000005a0: JUMPDEST 000005a1: POP 000005a2: POP 000005a3: POP 000005a4: POP 000005a5: PUSH1 0x40 000005a7: MLOAD 000005a8: RETURNDATASIZE 000005a9: PUSH1 0x1f 000005ab: NOT 000005ac: PUSH1 0x1f 000005ae: DUP3 000005af: ADD 000005b0: AND 000005b1: DUP3 000005b2: ADD 000005b3: DUP1 000005b4: PUSH1 0x40 000005b6: MSTORE 000005b7: POP 000005b8: DUP2 000005b9: ADD 000005ba: SWAP1 000005bb: PUSH2 0x05c4 000005be: SWAP2 000005bf: SWAP1 000005c0: PUSH2 0x1b16 000005c3: JUMP 000005c4: JUMPDEST 000005c5: DUP2 000005c6: PUSH1 0x01 000005c8: DUP2 000005c9: MLOAD 000005ca: DUP2 000005cb: LT 000005cc: PUSH2 0x05d7 000005cf: JUMPI 000005d0: PUSH2 0x05d7 000005d3: PUSH2 0x1b4c 000005d6: JUMP 000005d7: JUMPDEST 000005d8: PUSH1 0x01 000005da: PUSH1 0x01 000005dc: PUSH1 0xa0 000005de: SHL 000005df: SUB 000005e0: SWAP3 000005e1: DUP4 000005e2: AND 000005e3: PUSH1 0x20 000005e5: SWAP2 000005e6: DUP3 000005e7: MUL 000005e8: SWAP3 000005e9: SWAP1 000005ea: SWAP3 000005eb: ADD 000005ec: ADD 000005ed: MSTORE 000005ee: PUSH1 0x02 000005f0: SLOAD 000005f1: PUSH1 0x40 000005f3: MLOAD 000005f4: PUSH4 0x095ea7b3 000005f9: PUSH1 0xe0 000005fb: SHL 000005fc: DUP2 000005fd: MSTORE 000005fe: SWAP1 000005ff: DUP3 00000600: AND 00000601: PUSH1 0x04 00000603: DUP3 00000604: ADD 00000605: MSTORE 00000606: PUSH1 0x24 00000608: DUP2 00000609: ADD 0000060a: DUP5 0000060b: SWAP1 0000060c: MSTORE 0000060d: SWAP1 0000060e: DUP5 0000060f: AND 00000610: SWAP1 00000611: PUSH4 0x095ea7b3 00000616: SWAP1 00000617: PUSH1 0x44 00000619: ADD 0000061a: PUSH1 0x20 0000061c: PUSH1 0x40 0000061e: MLOAD 0000061f: DUP1 00000620: DUP4 00000621: SUB 00000622: DUP2 00000623: PUSH1 0x00 00000625: DUP8 00000626: GAS 00000627: CALL 00000628: ISZERO 00000629: DUP1 0000062a: ISZERO 0000062b: PUSH2 0x0638 0000062e: JUMPI 0000062f: RETURNDATASIZE 00000630: PUSH1 0x00 00000632: DUP1 00000633: RETURNDATACOPY 00000634: RETURNDATASIZE 00000635: PUSH1 0x00 00000637: REVERT 00000638: JUMPDEST 00000639: POP 0000063a: POP 0000063b: POP 0000063c: POP 0000063d: PUSH1 0x40 0000063f: MLOAD 00000640: RETURNDATASIZE 00000641: PUSH1 0x1f 00000643: NOT 00000644: PUSH1 0x1f 00000646: DUP3 00000647: ADD 00000648: AND 00000649: DUP3 0000064a: ADD 0000064b: DUP1 0000064c: PUSH1 0x40 0000064e: MSTORE 0000064f: POP 00000650: DUP2 00000651: ADD 00000652: SWAP1 00000653: PUSH2 0x065c 00000656: SWAP2 00000657: SWAP1 00000658: PUSH2 0x1b62 0000065b: JUMP 0000065c: JUMPDEST 0000065d: POP 0000065e: PUSH1 0x02 00000660: SLOAD 00000661: PUSH1 0x40 00000663: MLOAD 00000664: PUSH4 0x791ac947 00000669: PUSH1 0xe0 0000066b: SHL 0000066c: DUP2 0000066d: MSTORE 0000066e: PUSH1 0x01 00000670: PUSH1 0x01 00000672: PUSH1 0xa0 00000674: SHL 00000675: SUB 00000676: SWAP1 00000677: SWAP2 00000678: AND 00000679: SWAP1 0000067a: PUSH4 0x791ac947 0000067f: SWAP1 00000680: PUSH2 0x0696 00000683: SWAP1 00000684: DUP6 00000685: SWAP1 00000686: PUSH1 0x00 00000688: SWAP1 00000689: DUP7 0000068a: SWAP1 0000068b: ADDRESS 0000068c: SWAP1 0000068d: TIMESTAMP 0000068e: SWAP1 0000068f: PUSH1 0x04 00000691: ADD 00000692: PUSH2 0x1b7f 00000695: JUMP 00000696: JUMPDEST 00000697: PUSH1 0x00 00000699: PUSH1 0x40 0000069b: MLOAD 0000069c: DUP1 0000069d: DUP4 0000069e: SUB 0000069f: DUP2 000006a0: PUSH1 0x00 000006a2: DUP8 000006a3: DUP1 000006a4: EXTCODESIZE 000006a5: ISZERO 000006a6: DUP1 000006a7: ISZERO 000006a8: PUSH2 0x06b0 000006ab: JUMPI 000006ac: PUSH1 0x00 000006ae: DUP1 000006af: REVERT 000006b0: JUMPDEST 000006b1: POP 000006b2: GAS 000006b3: CALL 000006b4: ISZERO 000006b5: DUP1 000006b6: ISZERO 000006b7: PUSH2 0x06c4 000006ba: JUMPI 000006bb: RETURNDATASIZE 000006bc: PUSH1 0x00 000006be: DUP1 000006bf: RETURNDATACOPY 000006c0: RETURNDATASIZE 000006c1: PUSH1 0x00 000006c3: REVERT 000006c4: JUMPDEST 000006c5: POP 000006c6: POP 000006c7: POP 000006c8: POP 000006c9: PUSH2 0x06d0 000006cc: PUSH2 0x06d6 000006cf: JUMP 000006d0: JUMPDEST 000006d1: POP 000006d2: JUMPDEST 000006d3: POP 000006d4: POP 000006d5: JUMP 000006d6: JUMPDEST 000006d7: PUSH2 0x06de 000006da: PUSH2 0x0971 000006dd: JUMP 000006de: JUMPDEST 000006df: PUSH2 0x06e8 000006e2: PUSH1 0x01 000006e4: PUSH2 0x175e 000006e7: JUMP 000006e8: JUMPDEST 000006e9: PUSH2 0x06f2 000006ec: PUSH1 0x02 000006ee: PUSH2 0x175e 000006f1: JUMP 000006f2: JUMPDEST 000006f3: PUSH2 0x06fc 000006f6: PUSH1 0x03 000006f8: PUSH2 0x175e 000006fb: JUMP 000006fc: JUMPDEST 000006fd: PUSH2 0x0706 00000700: PUSH1 0x04 00000702: PUSH2 0x175e 00000705: JUMP 00000706: JUMPDEST 00000707: PUSH2 0x0710 0000070a: PUSH1 0x05 0000070c: PUSH2 0x175e 0000070f: JUMP 00000710: JUMPDEST 00000711: PUSH2 0x071a 00000714: PUSH1 0x06 00000716: PUSH2 0x175e 00000719: JUMP 0000071a: JUMPDEST 0000071b: PUSH2 0x0724 0000071e: PUSH1 0x07 00000720: PUSH2 0x175e 00000723: JUMP 00000724: JUMPDEST 00000725: PUSH2 0x072e 00000728: PUSH1 0x08 0000072a: PUSH2 0x175e 0000072d: JUMP 0000072e: JUMPDEST 0000072f: PUSH2 0x0738 00000732: PUSH1 0x09 00000734: PUSH2 0x175e 00000737: JUMP 00000738: JUMPDEST 00000739: PUSH2 0x0742 0000073c: PUSH1 0x0a 0000073e: PUSH2 0x175e 00000741: JUMP 00000742: JUMPDEST 00000743: JUMP 00000744: JUMPDEST 00000745: PUSH1 0x09 00000747: DUP2 00000748: PUSH1 0x0a 0000074a: DUP2 0000074b: GT 0000074c: ISZERO 0000074d: PUSH2 0x0758 00000750: JUMPI 00000751: PUSH2 0x0758 00000754: PUSH2 0x1a4a 00000757: JUMP 00000758: JUMPDEST 00000759: EQ 0000075a: ISZERO 0000075b: DUP1 0000075c: ISZERO 0000075d: PUSH2 0x0778 00000760: JUMPI 00000761: POP 00000762: PUSH1 0x0a 00000764: DUP2 00000765: PUSH1 0x0a 00000767: DUP2 00000768: GT 00000769: ISZERO 0000076a: PUSH2 0x0775 0000076d: JUMPI 0000076e: PUSH2 0x0775 00000771: PUSH2 0x1a4a 00000774: JUMP 00000775: JUMPDEST 00000776: EQ 00000777: ISZERO 00000778: JUMPDEST 00000779: PUSH2 0x0781 0000077c: JUMPI 0000077d: PUSH1 0x00 0000077f: DUP1 00000780: REVERT 00000781: JUMPDEST 00000782: PUSH1 0x07 00000784: PUSH1 0x00 00000786: DUP3 00000787: PUSH1 0x0a 00000789: DUP2 0000078a: GT 0000078b: ISZERO 0000078c: PUSH2 0x0797 0000078f: JUMPI 00000790: PUSH2 0x0797 00000793: PUSH2 0x1a4a 00000796: JUMP 00000797: JUMPDEST 00000798: PUSH1 0x0a 0000079a: DUP2 0000079b: GT 0000079c: ISZERO 0000079d: PUSH2 0x07a8 000007a0: JUMPI 000007a1: PUSH2 0x07a8 000007a4: PUSH2 0x1a4a 000007a7: JUMP 000007a8: JUMPDEST 000007a9: DUP2 000007aa: MSTORE 000007ab: PUSH1 0x20 000007ad: DUP1 000007ae: DUP3 000007af: ADD 000007b0: SWAP3 000007b1: SWAP1 000007b2: SWAP3 000007b3: MSTORE 000007b4: PUSH1 0x40 000007b6: SWAP1 000007b7: DUP2 000007b8: ADD 000007b9: PUSH1 0x00 000007bb: SWAP1 000007bc: DUP2 000007bd: KECCAK256 000007be: CALLER 000007bf: DUP3 000007c0: MSTORE 000007c1: SWAP1 000007c2: SWAP3 000007c3: MSTORE 000007c4: SWAP1 000007c5: KECCAK256 000007c6: SLOAD 000007c7: PUSH1 0xff 000007c9: AND 000007ca: PUSH2 0x07d2 000007cd: JUMPI 000007ce: PUSH1 0x00 000007d0: DUP1 000007d1: REVERT 000007d2: JUMPDEST 000007d3: PUSH1 0x01 000007d5: PUSH1 0x08 000007d7: PUSH1 0x00 000007d9: DUP4 000007da: PUSH1 0x0a 000007dc: DUP2 000007dd: GT 000007de: ISZERO 000007df: PUSH2 0x07ea 000007e2: JUMPI 000007e3: PUSH2 0x07ea 000007e6: PUSH2 0x1a4a 000007e9: JUMP 000007ea: JUMPDEST 000007eb: PUSH1 0x0a 000007ed: DUP2 000007ee: GT 000007ef: ISZERO 000007f0: PUSH2 0x07fb 000007f3: JUMPI 000007f4: PUSH2 0x07fb 000007f7: PUSH2 0x1a4a 000007fa: JUMP 000007fb: JUMPDEST 000007fc: DUP2 000007fd: MSTORE 000007fe: PUSH1 0x20 00000800: DUP2 00000801: ADD 00000802: SWAP2 00000803: SWAP1 00000804: SWAP2 00000805: MSTORE 00000806: PUSH1 0x40 00000808: ADD 00000809: PUSH1 0x00 0000080b: KECCAK256 0000080c: DUP1 0000080d: SLOAD 0000080e: PUSH1 0xff 00000810: NOT 00000811: AND 00000812: SWAP2 00000813: ISZERO 00000814: ISZERO 00000815: SWAP2 00000816: SWAP1 00000817: SWAP2 00000818: OR 00000819: SWAP1 0000081a: SSTORE 0000081b: POP 0000081c: JUMP 0000081d: JUMPDEST 0000081e: PUSH2 0x0825 00000821: PUSH2 0x18fd 00000824: JUMP 00000825: JUMPDEST 00000826: DUP1 00000827: PUSH2 0x0830 0000082a: DUP4 0000082b: DUP6 0000082c: PUSH2 0x1c06 0000082f: JUMP 00000830: JUMPDEST 00000831: PUSH2 0x083a 00000834: SWAP2 00000835: SWAP1 00000836: PUSH2 0x1c06 00000839: JUMP 0000083a: JUMPDEST 0000083b: PUSH2 0xc738 0000083e: EQ 0000083f: PUSH2 0x0847 00000842: JUMPI 00000843: PUSH1 0x00 00000845: DUP1 00000846: REVERT 00000847: JUMPDEST 00000848: PUSH2 0x084f 0000084b: PUSH2 0x0971 0000084e: JUMP 0000084f: JUMPDEST 00000850: PUSH1 0x05 00000852: PUSH1 0x20 00000854: SWAP1 00000855: DUP2 00000856: MSTORE 00000857: PUSH32 0xc0a4a8be475dfebc377ebef2d7c4ff47656f572a08dd92b81017efcdba0febe1 00000878: DUP1 00000879: SLOAD 0000087a: PUSH32 0xa18b128af1c8fc61ff46f02d146e54546f34d340574cf2cef6a753cba6b6701d 0000089b: DUP1 0000089c: SLOAD 0000089d: PUSH32 0xfb33122aa9f93cc639ebe80a7bc4784c11e6053dde89c6f4f7e268c6a623da1e 000008be: DUP1 000008bf: SLOAD 000008c0: SWAP5 000008c1: DUP10 000008c2: SWAP1 000008c3: SSTORE 000008c4: SWAP2 000008c5: DUP8 000008c6: SWAP1 000008c7: SSTORE 000008c8: PUSH1 0x08 000008ca: PUSH1 0x00 000008cc: MSTORE 000008cd: SWAP1 000008ce: DUP6 000008cf: SWAP1 000008d0: SSTORE 000008d1: PUSH1 0x40 000008d3: DUP1 000008d4: MLOAD 000008d5: DUP4 000008d6: DUP2 000008d7: MSTORE 000008d8: SWAP5 000008d9: DUP6 000008da: ADD 000008db: DUP3 000008dc: SWAP1 000008dd: MSTORE 000008de: DUP5 000008df: DUP2 000008e0: ADD 000008e1: DUP5 000008e2: SWAP1 000008e3: MSTORE 000008e4: PUSH1 0x60 000008e6: DUP6 000008e7: ADD 000008e8: DUP9 000008e9: SWAP1 000008ea: MSTORE 000008eb: PUSH1 0x80 000008ed: DUP6 000008ee: ADD 000008ef: DUP8 000008f0: SWAP1 000008f1: MSTORE 000008f2: PUSH1 0xa0 000008f4: DUP6 000008f5: ADD 000008f6: DUP7 000008f7: SWAP1 000008f8: MSTORE 000008f9: MLOAD 000008fa: SWAP2 000008fb: SWAP4 000008fc: SWAP1 000008fd: SWAP3 000008fe: SWAP2 000008ff: PUSH32 0xdeed4f0fd8bca5f6682a6458702a970d0b88c8f2a1f8674c34395bed6046e1ef 00000920: SWAP2 00000921: DUP2 00000922: SWAP1 00000923: SUB 00000924: PUSH1 0xc0 00000926: ADD 00000927: SWAP1 00000928: LOG1 00000929: POP 0000092a: POP 0000092b: POP 0000092c: POP 0000092d: POP 0000092e: POP 0000092f: JUMP 00000930: JUMPDEST 00000931: CALLER 00000932: PUSH1 0x00 00000934: SWAP1 00000935: DUP2 00000936: MSTORE 00000937: PUSH1 0x06 00000939: PUSH1 0x20 0000093b: MSTORE 0000093c: PUSH1 0x40 0000093e: DUP2 0000093f: KECCAK256 00000940: SLOAD 00000941: PUSH1 0xff 00000943: AND 00000944: SWAP1 00000945: DUP2 00000946: PUSH1 0x0a 00000948: DUP2 00000949: GT 0000094a: ISZERO 0000094b: PUSH2 0x0956 0000094e: JUMPI 0000094f: PUSH2 0x0956 00000952: PUSH2 0x1a4a 00000955: JUMP 00000956: JUMPDEST 00000957: SUB 00000958: PUSH2 0x0960 0000095b: JUMPI 0000095c: PUSH1 0x00 0000095e: DUP1 0000095f: REVERT 00000960: JUMPDEST 00000961: PUSH2 0x0968 00000964: PUSH2 0x0971 00000967: JUMP 00000968: JUMPDEST 00000969: PUSH2 0x049c 0000096c: DUP2 0000096d: PUSH2 0x175e 00000970: JUMP 00000971: JUMPDEST 00000972: PUSH1 0x00 00000974: PUSH1 0x01 00000976: SLOAD 00000977: SELFBALANCE 00000978: PUSH2 0x0981 0000097b: SWAP2 0000097c: SWAP1 0000097d: PUSH2 0x1c1e 00000980: JUMP 00000981: JUMPDEST 00000982: SWAP1 00000983: POP 00000984: DUP1 00000985: ISZERO 00000986: PUSH2 0x049c 00000989: JUMPI 0000098a: PUSH1 0x01 0000098c: PUSH1 0x00 0000098e: MSTORE 0000098f: PUSH1 0x05 00000991: PUSH1 0x20 00000993: MSTORE 00000994: PUSH32 0x1471eb6eb2c5e789fc3de43f8ce62938c7d1836ec861730447e2ada8fd81017b 000009b5: SLOAD 000009b6: PUSH3 0x0186a0 000009ba: SWAP1 000009bb: PUSH2 0x09c4 000009be: SWAP1 000009bf: DUP4 000009c0: PUSH2 0x1c35 000009c3: JUMP 000009c4: JUMPDEST 000009c5: PUSH2 0x09ce 000009c8: SWAP2 000009c9: SWAP1 000009ca: PUSH2 0x1c54 000009cd: JUMP 000009ce: JUMPDEST 000009cf: PUSH1 0x01 000009d1: PUSH1 0x00 000009d3: SWAP1 000009d4: DUP2 000009d5: MSTORE 000009d6: PUSH1 0x03 000009d8: PUSH1 0x20 000009da: MSTORE 000009db: PUSH32 0xa15bc60c955c405d20d9149c709e2460f1c2d9a497496a7f46004d1772c3054c 000009fc: DUP1 000009fd: SLOAD 000009fe: SWAP1 000009ff: SWAP2 00000a00: SWAP1 00000a01: PUSH2 0x0a0b 00000a04: SWAP1 00000a05: DUP5 00000a06: SWAP1 00000a07: PUSH2 0x1c06 00000a0a: JUMP 00000a0b: JUMPDEST 00000a0c: SWAP1 00000a0d: SWAP2 00000a0e: SSTORE 00000a0f: POP 00000a10: POP 00000a11: PUSH1 0x02 00000a13: PUSH1 0x00 00000a15: MSTORE 00000a16: PUSH1 0x05 00000a18: PUSH1 0x20 00000a1a: MSTORE 00000a1b: PUSH32 0x89832631fb3c3307a103ba2c84ab569c64d6182a18893dcd163f0f1c2090733a 00000a3c: SLOAD 00000a3d: PUSH3 0x0186a0 00000a41: SWAP1 00000a42: PUSH2 0x0a4b 00000a45: SWAP1 00000a46: DUP4 00000a47: PUSH2 0x1c35 00000a4a: JUMP 00000a4b: JUMPDEST 00000a4c: PUSH2 0x0a55 00000a4f: SWAP2 00000a50: SWAP1 00000a51: PUSH2 0x1c54 00000a54: JUMP 00000a55: JUMPDEST 00000a56: PUSH1 0x02 00000a58: PUSH1 0x00 00000a5a: SWAP1 00000a5b: DUP2 00000a5c: MSTORE 00000a5d: PUSH1 0x03 00000a5f: PUSH1 0x20 00000a61: MSTORE 00000a62: PUSH32 0xc3a24b0501bd2c13a7e57f2db4369ec4c223447539fc0724a9d55ac4a06ebd4d 00000a83: DUP1 00000a84: SLOAD 00000a85: SWAP1 00000a86: SWAP2 00000a87: SWAP1 00000a88: PUSH2 0x0a92 00000a8b: SWAP1 00000a8c: DUP5 00000a8d: SWAP1 00000a8e: PUSH2 0x1c06 00000a91: JUMP 00000a92: JUMPDEST 00000a93: SWAP1 00000a94: SWAP2 00000a95: SSTORE 00000a96: POP 00000a97: POP 00000a98: PUSH1 0x03 00000a9a: PUSH1 0x00 00000a9c: MSTORE 00000a9d: PUSH1 0x05 00000a9f: PUSH1 0x20 00000aa1: MSTORE 00000aa2: PUSH32 0xa9bc9a3a348c357ba16b37005d7e6b3236198c0e939f4af8c5f19b8deeb8ebc0 00000ac3: SLOAD 00000ac4: PUSH3 0x0186a0 00000ac8: SWAP1 00000ac9: PUSH2 0x0ad2 00000acc: SWAP1 00000acd: DUP4 00000ace: PUSH2 0x1c35 00000ad1: JUMP 00000ad2: JUMPDEST 00000ad3: PUSH2 0x0adc 00000ad6: SWAP2 00000ad7: SWAP1 00000ad8: PUSH2 0x1c54 00000adb: JUMP 00000adc: JUMPDEST 00000add: PUSH1 0x03 00000adf: PUSH1 0x00 00000ae1: DUP2 00000ae2: DUP2 00000ae3: MSTORE 00000ae4: PUSH1 0x20 00000ae6: SWAP2 00000ae7: SWAP1 00000ae8: SWAP2 00000ae9: MSTORE 00000aea: PUSH32 0xcbc4e5fb02c3d1de23a9f1e014b4d2ee5aeaea9505df5e855c9210bf472495af 00000b0b: DUP1 00000b0c: SLOAD 00000b0d: SWAP1 00000b0e: SWAP2 00000b0f: SWAP1 00000b10: PUSH2 0x0b1a 00000b13: SWAP1 00000b14: DUP5 00000b15: SWAP1 00000b16: PUSH2 0x1c06 00000b19: JUMP 00000b1a: JUMPDEST 00000b1b: SWAP1 00000b1c: SWAP2 00000b1d: SSTORE 00000b1e: POP 00000b1f: POP 00000b20: PUSH1 0x04 00000b22: PUSH1 0x00 00000b24: MSTORE 00000b25: PUSH1 0x05 00000b27: PUSH1 0x20 00000b29: MSTORE 00000b2a: PUSH32 0x3eec716f11ba9e820c81ca75eb978ffb45831ef8b7a53e5e422c26008e1ca6d5 00000b4b: SLOAD 00000b4c: PUSH3 0x0186a0 00000b50: SWAP1 00000b51: PUSH2 0x0b5a 00000b54: SWAP1 00000b55: DUP4 00000b56: PUSH2 0x1c35 00000b59: JUMP 00000b5a: JUMPDEST 00000b5b: PUSH2 0x0b64 00000b5e: SWAP2 00000b5f: SWAP1 00000b60: PUSH2 0x1c54 00000b63: JUMP 00000b64: JUMPDEST 00000b65: PUSH1 0x04 00000b67: PUSH1 0x00 00000b69: SWAP1 00000b6a: DUP2 00000b6b: MSTORE 00000b6c: PUSH1 0x03 00000b6e: PUSH1 0x20 00000b70: MSTORE 00000b71: PUSH32 0x83ec6a1f0257b830b5e016457c9cf1435391bf56cc98f369a58a54fe93772465 00000b92: DUP1 00000b93: SLOAD 00000b94: SWAP1 00000b95: SWAP2 00000b96: SWAP1 00000b97: PUSH2 0x0ba1 00000b9a: SWAP1 00000b9b: DUP5 00000b9c: SWAP1 00000b9d: PUSH2 0x1c06 00000ba0: JUMP 00000ba1: JUMPDEST 00000ba2: SWAP1 00000ba3: SWAP2 00000ba4: SSTORE 00000ba5: POP 00000ba6: POP 00000ba7: PUSH1 0x05 00000ba9: PUSH1 0x00 00000bab: DUP2 00000bac: SWAP1 00000bad: MSTORE 00000bae: PUSH1 0x20 00000bb0: MSTORE 00000bb1: PUSH32 0x458b30c2d72bfd2c6317304a4594ecbafe5f729d3111b65fdc3a33bd48e5432d 00000bd2: SLOAD 00000bd3: PUSH3 0x0186a0 00000bd7: SWAP1 00000bd8: PUSH2 0x0be1 00000bdb: SWAP1 00000bdc: DUP4 00000bdd: PUSH2 0x1c35 00000be0: JUMP 00000be1: JUMPDEST 00000be2: PUSH2 0x0beb 00000be5: SWAP2 00000be6: SWAP1 00000be7: PUSH2 0x1c54 00000bea: JUMP 00000beb: JUMPDEST 00000bec: PUSH1 0x05 00000bee: PUSH1 0x00 00000bf0: SWAP1 00000bf1: DUP2 00000bf2: MSTORE 00000bf3: PUSH1 0x03 00000bf5: PUSH1 0x20 00000bf7: MSTORE 00000bf8: PUSH32 0x405aad32e1adbac89bb7f176e338b8fc6e994ca210c9bb7bdca249b465942250 00000c19: DUP1 00000c1a: SLOAD 00000c1b: SWAP1 00000c1c: SWAP2 00000c1d: SWAP1 00000c1e: PUSH2 0x0c28 00000c21: SWAP1 00000c22: DUP5 00000c23: SWAP1 00000c24: PUSH2 0x1c06 00000c27: JUMP 00000c28: JUMPDEST 00000c29: SWAP1 00000c2a: SWAP2 00000c2b: SSTORE 00000c2c: POP 00000c2d: POP 00000c2e: PUSH1 0x06 00000c30: PUSH1 0x00 00000c32: MSTORE 00000c33: PUSH1 0x05 00000c35: PUSH1 0x20 00000c37: MSTORE 00000c38: PUSH32 0x069400f22b28c6c362558d92f66163cec5671cba50b61abd2eecfcd0eaeac518 00000c59: SLOAD 00000c5a: PUSH3 0x0186a0 00000c5e: SWAP1 00000c5f: PUSH2 0x0c68 00000c62: SWAP1 00000c63: DUP4 00000c64: PUSH2 0x1c35 00000c67: JUMP 00000c68: JUMPDEST 00000c69: PUSH2 0x0c72 00000c6c: SWAP2 00000c6d: SWAP1 00000c6e: PUSH2 0x1c54 00000c71: JUMP 00000c72: JUMPDEST 00000c73: PUSH1 0x06 00000c75: PUSH1 0x00 00000c77: SWAP1 00000c78: DUP2 00000c79: MSTORE 00000c7a: PUSH1 0x03 00000c7c: PUSH1 0x20 00000c7e: MSTORE 00000c7f: PUSH32 0xc69056f16cbaa3c616b828e333ab7d3a32310765507f8f58359e99ebb7a885f3 00000ca0: DUP1 00000ca1: SLOAD 00000ca2: SWAP1 00000ca3: SWAP2 00000ca4: SWAP1 00000ca5: PUSH2 0x0caf 00000ca8: SWAP1 00000ca9: DUP5 00000caa: SWAP1 00000cab: PUSH2 0x1c06 00000cae: JUMP 00000caf: JUMPDEST 00000cb0: SWAP1 00000cb1: SWAP2 00000cb2: SSTORE 00000cb3: POP 00000cb4: POP 00000cb5: PUSH1 0x07 00000cb7: PUSH1 0x00 00000cb9: MSTORE 00000cba: PUSH1 0x05 00000cbc: PUSH1 0x20 00000cbe: MSTORE 00000cbf: PUSH32 0xeddb6698d7c569ff62ff64f1f1492bf14a54594835ba0faac91f84b4f5d81460 00000ce0: SLOAD 00000ce1: PUSH3 0x0186a0 00000ce5: SWAP1 00000ce6: PUSH2 0x0cef 00000ce9: SWAP1 00000cea: DUP4 00000ceb: PUSH2 0x1c35 00000cee: JUMP 00000cef: JUMPDEST 00000cf0: PUSH2 0x0cf9 00000cf3: SWAP2 00000cf4: SWAP1 00000cf5: PUSH2 0x1c54 00000cf8: JUMP 00000cf9: JUMPDEST 00000cfa: PUSH1 0x07 00000cfc: PUSH1 0x00 00000cfe: SWAP1 00000cff: DUP2 00000d00: MSTORE 00000d01: PUSH1 0x03 00000d03: PUSH1 0x20 00000d05: MSTORE 00000d06: PUSH32 0xf2c49132ed1cee2a7e75bde50d332a2f81f1d01e5456d8a19d1df09bd561dbd2 00000d27: DUP1 00000d28: SLOAD 00000d29: SWAP1 00000d2a: SWAP2 00000d2b: SWAP1 00000d2c: PUSH2 0x0d36 00000d2f: SWAP1 00000d30: DUP5 00000d31: SWAP1 00000d32: PUSH2 0x1c06 00000d35: JUMP 00000d36: JUMPDEST 00000d37: SWAP1 00000d38: SWAP2 00000d39: SSTORE 00000d3a: POP 00000d3b: POP 00000d3c: PUSH1 0x08 00000d3e: PUSH1 0x00 00000d40: MSTORE 00000d41: PUSH1 0x05 00000d43: PUSH1 0x20 00000d45: MSTORE 00000d46: PUSH32 0xfb33122aa9f93cc639ebe80a7bc4784c11e6053dde89c6f4f7e268c6a623da1e 00000d67: SLOAD 00000d68: PUSH3 0x0186a0 00000d6c: SWAP1 00000d6d: PUSH2 0x0d76 00000d70: SWAP1 00000d71: DUP4 00000d72: PUSH2 0x1c35 00000d75: JUMP 00000d76: JUMPDEST 00000d77: PUSH2 0x0d80 00000d7a: SWAP2 00000d7b: SWAP1 00000d7c: PUSH2 0x1c54 00000d7f: JUMP 00000d80: JUMPDEST 00000d81: PUSH1 0x08 00000d83: PUSH1 0x00 00000d85: SWAP1 00000d86: DUP2 00000d87: MSTORE 00000d88: PUSH1 0x03 00000d8a: PUSH1 0x20 00000d8c: MSTORE 00000d8d: PUSH32 0x85aaa47b6dc46495bb8824fad4583769726fea36efd831a35556690b830a8fbe 00000dae: DUP1 00000daf: SLOAD 00000db0: SWAP1 00000db1: SWAP2 00000db2: SWAP1 00000db3: PUSH2 0x0dbd 00000db6: SWAP1 00000db7: DUP5 00000db8: SWAP1 00000db9: PUSH2 0x1c06 00000dbc: JUMP 00000dbd: JUMPDEST 00000dbe: SWAP1 00000dbf: SWAP2 00000dc0: SSTORE 00000dc1: POP 00000dc2: POP 00000dc3: PUSH1 0x09 00000dc5: PUSH1 0x00 00000dc7: MSTORE 00000dc8: PUSH1 0x05 00000dca: PUSH1 0x20 00000dcc: MSTORE 00000dcd: PUSH32 0xc0a4a8be475dfebc377ebef2d7c4ff47656f572a08dd92b81017efcdba0febe1 00000dee: SLOAD 00000def: PUSH3 0x0186a0 00000df3: SWAP1 00000df4: PUSH2 0x0dfd 00000df7: SWAP1 00000df8: DUP4 00000df9: PUSH2 0x1c35 00000dfc: JUMP 00000dfd: JUMPDEST 00000dfe: PUSH2 0x0e07 00000e01: SWAP2 00000e02: SWAP1 00000e03: PUSH2 0x1c54 00000e06: JUMP 00000e07: JUMPDEST 00000e08: PUSH1 0x09 00000e0a: PUSH1 0x00 00000e0c: SWAP1 00000e0d: DUP2 00000e0e: MSTORE 00000e0f: PUSH1 0x03 00000e11: PUSH1 0x20 00000e13: MSTORE 00000e14: PUSH32 0x8a8dc4e5242ea8b1ab1d60606dae757e6c2cca9f92a2cced9f72c19960bcb458 00000e35: DUP1 00000e36: SLOAD 00000e37: SWAP1 00000e38: SWAP2 00000e39: SWAP1 00000e3a: PUSH2 0x0e44 00000e3d: SWAP1 00000e3e: DUP5 00000e3f: SWAP1 00000e40: PUSH2 0x1c06 00000e43: JUMP 00000e44: JUMPDEST 00000e45: SWAP1 00000e46: SWAP2 00000e47: SSTORE 00000e48: POP 00000e49: POP 00000e4a: PUSH1 0x03 00000e4c: PUSH1 0x20 00000e4e: MSTORE 00000e4f: PUSH32 0x85aaa47b6dc46495bb8824fad4583769726fea36efd831a35556690b830a8fbe 00000e70: SLOAD 00000e71: PUSH32 0x8a8dc4e5242ea8b1ab1d60606dae757e6c2cca9f92a2cced9f72c19960bcb458 00000e92: SLOAD 00000e93: PUSH32 0xf2c49132ed1cee2a7e75bde50d332a2f81f1d01e5456d8a19d1df09bd561dbd2 00000eb4: SLOAD 00000eb5: PUSH32 0xc69056f16cbaa3c616b828e333ab7d3a32310765507f8f58359e99ebb7a885f3 00000ed6: SLOAD 00000ed7: PUSH32 0x405aad32e1adbac89bb7f176e338b8fc6e994ca210c9bb7bdca249b465942250 00000ef8: SLOAD 00000ef9: PUSH32 0x83ec6a1f0257b830b5e016457c9cf1435391bf56cc98f369a58a54fe93772465 00000f1a: SLOAD 00000f1b: PUSH32 0xcbc4e5fb02c3d1de23a9f1e014b4d2ee5aeaea9505df5e855c9210bf472495af 00000f3c: SLOAD 00000f3d: PUSH32 0xc3a24b0501bd2c13a7e57f2db4369ec4c223447539fc0724a9d55ac4a06ebd4d 00000f5e: SLOAD 00000f5f: PUSH1 0x01 00000f61: PUSH1 0x00 00000f63: MSTORE 00000f64: PUSH32 0xa15bc60c955c405d20d9149c709e2460f1c2d9a497496a7f46004d1772c3054c 00000f85: SLOAD 00000f86: PUSH2 0x0f8f 00000f89: SWAP1 00000f8a: SELFBALANCE 00000f8b: PUSH2 0x1c1e 00000f8e: JUMP 00000f8f: JUMPDEST 00000f90: PUSH2 0x0f99 00000f93: SWAP2 00000f94: SWAP1 00000f95: PUSH2 0x1c1e 00000f98: JUMP 00000f99: JUMPDEST 00000f9a: PUSH2 0x0fa3 00000f9d: SWAP2 00000f9e: SWAP1 00000f9f: PUSH2 0x1c1e 00000fa2: JUMP 00000fa3: JUMPDEST 00000fa4: PUSH2 0x0fad 00000fa7: SWAP2 00000fa8: SWAP1 00000fa9: PUSH2 0x1c1e 00000fac: JUMP 00000fad: JUMPDEST 00000fae: PUSH2 0x0fb7 00000fb1: SWAP2 00000fb2: SWAP1 00000fb3: PUSH2 0x1c1e 00000fb6: JUMP 00000fb7: JUMPDEST 00000fb8: PUSH2 0x0fc1 00000fbb: SWAP2 00000fbc: SWAP1 00000fbd: PUSH2 0x1c1e 00000fc0: JUMP 00000fc1: JUMPDEST 00000fc2: PUSH2 0x0fcb 00000fc5: SWAP2 00000fc6: SWAP1 00000fc7: PUSH2 0x1c1e 00000fca: JUMP 00000fcb: JUMPDEST 00000fcc: PUSH2 0x0fd5 00000fcf: SWAP2 00000fd0: SWAP1 00000fd1: PUSH2 0x1c1e 00000fd4: JUMP 00000fd5: JUMPDEST 00000fd6: PUSH2 0x0fdf 00000fd9: SWAP2 00000fda: SWAP1 00000fdb: PUSH2 0x1c1e 00000fde: JUMP 00000fdf: JUMPDEST 00000fe0: PUSH1 0x0a 00000fe2: PUSH1 0x00 00000fe4: MSTORE 00000fe5: PUSH1 0x05 00000fe7: PUSH1 0x20 00000fe9: MSTORE 00000fea: PUSH32 0xa18b128af1c8fc61ff46f02d146e54546f34d340574cf2cef6a753cba6b6701d 0000100b: SSTORE 0000100c: POP 0000100d: SELFBALANCE 0000100e: PUSH1 0x01 00001010: SSTORE 00001011: JUMP 00001012: JUMPDEST 00001013: PUSH2 0x101a 00001016: PUSH2 0x18fd 00001019: JUMP 0000101a: JUMPDEST 0000101b: PUSH2 0x0742 0000101e: PUSH1 0x00 00001020: PUSH2 0x1966 00001023: JUMP 00001024: JUMPDEST 00001025: PUSH2 0x102c 00001028: PUSH2 0x18fd 0000102b: JUMP 0000102c: JUMPDEST 0000102d: PUSH1 0x09 0000102f: DUP3 00001030: PUSH1 0x0a 00001032: DUP2 00001033: GT 00001034: ISZERO 00001035: PUSH2 0x1040 00001038: JUMPI 00001039: PUSH2 0x1040 0000103c: PUSH2 0x1a4a 0000103f: JUMP 00001040: JUMPDEST 00001041: EQ 00001042: DUP1 00001043: PUSH2 0x105d 00001046: JUMPI 00001047: POP 00001048: PUSH1 0x0a 0000104a: DUP3 0000104b: PUSH1 0x0a 0000104d: DUP2 0000104e: GT 0000104f: ISZERO 00001050: PUSH2 0x105b 00001053: JUMPI 00001054: PUSH2 0x105b 00001057: PUSH2 0x1a4a 0000105a: JUMP 0000105b: JUMPDEST 0000105c: EQ 0000105d: JUMPDEST 0000105e: DUP1 0000105f: PUSH2 0x1079 00001062: JUMPI 00001063: POP 00001064: PUSH1 0x08 00001066: DUP3 00001067: PUSH1 0x0a 00001069: DUP2 0000106a: GT 0000106b: ISZERO 0000106c: PUSH2 0x1077 0000106f: JUMPI 00001070: PUSH2 0x1077 00001073: PUSH2 0x1a4a 00001076: JUMP 00001077: JUMPDEST 00001078: EQ 00001079: JUMPDEST 0000107a: PUSH2 0x1082 0000107d: JUMPI 0000107e: PUSH1 0x00 00001080: DUP1 00001081: REVERT 00001082: JUMPDEST 00001083: PUSH1 0x08 00001085: PUSH1 0x00 00001087: DUP4 00001088: PUSH1 0x0a 0000108a: DUP2 0000108b: GT 0000108c: ISZERO 0000108d: PUSH2 0x1098 00001090: JUMPI 00001091: PUSH2 0x1098 00001094: PUSH2 0x1a4a 00001097: JUMP 00001098: JUMPDEST 00001099: PUSH1 0x0a 0000109b: DUP2 0000109c: GT 0000109d: ISZERO 0000109e: PUSH2 0x10a9 000010a1: JUMPI 000010a2: PUSH2 0x10a9 000010a5: PUSH2 0x1a4a 000010a8: JUMP 000010a9: JUMPDEST 000010aa: DUP2 000010ab: MSTORE 000010ac: PUSH1 0x20 000010ae: DUP2 000010af: ADD 000010b0: SWAP2 000010b1: SWAP1 000010b2: SWAP2 000010b3: MSTORE 000010b4: PUSH1 0x40 000010b6: ADD 000010b7: PUSH1 0x00 000010b9: KECCAK256 000010ba: SLOAD 000010bb: PUSH1 0xff 000010bd: AND 000010be: ISZERO 000010bf: PUSH2 0x10c7 000010c2: JUMPI 000010c3: PUSH1 0x00 000010c5: DUP1 000010c6: REVERT 000010c7: JUMPDEST 000010c8: PUSH1 0x00 000010ca: PUSH1 0x04 000010cc: PUSH1 0x00 000010ce: DUP5 000010cf: PUSH1 0x0a 000010d1: DUP2 000010d2: GT 000010d3: ISZERO 000010d4: PUSH2 0x10df 000010d7: JUMPI 000010d8: PUSH2 0x10df 000010db: PUSH2 0x1a4a 000010de: JUMP 000010df: JUMPDEST 000010e0: PUSH1 0x0a 000010e2: DUP2 000010e3: GT 000010e4: ISZERO 000010e5: PUSH2 0x10f0 000010e8: JUMPI 000010e9: PUSH2 0x10f0 000010ec: PUSH2 0x1a4a 000010ef: JUMP 000010f0: JUMPDEST 000010f1: DUP2 000010f2: MSTORE 000010f3: PUSH1 0x20 000010f5: DUP1 000010f6: DUP3 000010f7: ADD 000010f8: SWAP3 000010f9: SWAP1 000010fa: SWAP3 000010fb: MSTORE 000010fc: PUSH1 0x40 000010fe: SWAP1 000010ff: DUP2 00001100: ADD 00001101: PUSH1 0x00 00001103: SWAP1 00001104: DUP2 00001105: KECCAK256 00001106: SLOAD 00001107: PUSH1 0x01 00001109: PUSH1 0x01 0000110b: PUSH1 0xa0 0000110d: SHL 0000110e: SUB 0000110f: DUP7 00001110: DUP2 00001111: AND 00001112: DUP4 00001113: MSTORE 00001114: PUSH1 0x06 00001116: SWAP1 00001117: SWAP5 00001118: MSTORE 00001119: SWAP2 0000111a: SWAP1 0000111b: KECCAK256 0000111c: DUP1 0000111d: SLOAD 0000111e: SWAP3 0000111f: SWAP1 00001120: SWAP2 00001121: AND 00001122: SWAP3 00001123: POP 00001124: DUP5 00001125: SWAP2 00001126: PUSH1 0xff 00001128: NOT 00001129: AND 0000112a: PUSH1 0x01 0000112c: DUP4 0000112d: PUSH1 0x0a 0000112f: DUP2 00001130: GT 00001131: ISZERO 00001132: PUSH2 0x113d 00001135: JUMPI 00001136: PUSH2 0x113d 00001139: PUSH2 0x1a4a 0000113c: JUMP 0000113d: JUMPDEST 0000113e: MUL 0000113f: OR 00001140: SWAP1 00001141: SSTORE 00001142: POP 00001143: DUP2 00001144: PUSH1 0x04 00001146: PUSH1 0x00 00001148: DUP6 00001149: PUSH1 0x0a 0000114b: DUP2 0000114c: GT 0000114d: ISZERO 0000114e: PUSH2 0x1159 00001151: JUMPI 00001152: PUSH2 0x1159 00001155: PUSH2 0x1a4a 00001158: JUMP 00001159: JUMPDEST 0000115a: PUSH1 0x0a 0000115c: DUP2 0000115d: GT 0000115e: ISZERO 0000115f: PUSH2 0x116a 00001162: JUMPI 00001163: PUSH2 0x116a 00001166: PUSH2 0x1a4a 00001169: JUMP 0000116a: JUMPDEST 0000116b: DUP2 0000116c: MSTORE 0000116d: PUSH1 0x20 0000116f: DUP2 00001170: ADD 00001171: SWAP2 00001172: SWAP1 00001173: SWAP2 00001174: MSTORE 00001175: PUSH1 0x40 00001177: ADD 00001178: PUSH1 0x00 0000117a: KECCAK256 0000117b: DUP1 0000117c: SLOAD 0000117d: PUSH1 0x01 0000117f: PUSH1 0x01 00001181: PUSH1 0xa0 00001183: SHL 00001184: SUB 00001185: NOT 00001186: AND 00001187: PUSH1 0x01 00001189: PUSH1 0x01 0000118b: PUSH1 0xa0 0000118d: SHL 0000118e: SUB 0000118f: SWAP3 00001190: DUP4 00001191: AND 00001192: OR 00001193: SWAP1 00001194: SSTORE 00001195: DUP3 00001196: DUP2 00001197: AND 00001198: SWAP1 00001199: DUP3 0000119a: AND 0000119b: DUP5 0000119c: PUSH1 0x0a 0000119e: DUP2 0000119f: GT 000011a0: ISZERO 000011a1: PUSH2 0x11ac 000011a4: JUMPI 000011a5: PUSH2 0x11ac 000011a8: PUSH2 0x1a4a 000011ab: JUMP 000011ac: JUMPDEST 000011ad: PUSH1 0x40 000011af: MLOAD 000011b0: PUSH32 0x1120954952ac878da0df1accea126475f1a51a7913d160fd9cef502d0fa63404 000011d1: SWAP1 000011d2: PUSH1 0x00 000011d4: SWAP1 000011d5: LOG4 000011d6: POP 000011d7: POP 000011d8: POP 000011d9: JUMP 000011da: JUMPDEST 000011db: PUSH2 0x11e2 000011de: PUSH2 0x18fd 000011e1: JUMP 000011e2: JUMPDEST 000011e3: PUSH1 0x02 000011e5: SLOAD 000011e6: PUSH1 0x01 000011e8: PUSH1 0x01 000011ea: PUSH1 0xa0 000011ec: SHL 000011ed: SUB 000011ee: SWAP1 000011ef: DUP2 000011f0: AND 000011f1: SWAP1 000011f2: DUP3 000011f3: AND 000011f4: SUB 000011f5: PUSH2 0x11fd 000011f8: JUMPI 000011f9: PUSH1 0x00 000011fb: DUP1 000011fc: REVERT 000011fd: JUMPDEST 000011fe: PUSH1 0x02 00001200: DUP1 00001201: SLOAD 00001202: PUSH1 0x01 00001204: PUSH1 0x01 00001206: PUSH1 0xa0 00001208: SHL 00001209: SUB 0000120a: NOT 0000120b: AND 0000120c: PUSH1 0x01 0000120e: PUSH1 0x01 00001210: PUSH1 0xa0 00001212: SHL 00001213: SUB 00001214: SWAP3 00001215: SWAP1 00001216: SWAP3 00001217: AND 00001218: SWAP2 00001219: SWAP1 0000121a: SWAP2 0000121b: OR 0000121c: SWAP1 0000121d: SSTORE 0000121e: JUMP 0000121f: JUMPDEST 00001220: PUSH1 0x02 00001222: SLOAD 00001223: PUSH1 0x40 00001225: DUP1 00001226: MLOAD 00001227: PUSH4 0x15ab88c9 0000122c: PUSH1 0xe3 0000122e: SHL 0000122f: DUP2 00001230: MSTORE 00001231: SWAP1 00001232: MLOAD 00001233: PUSH1 0x00 00001235: SWAP3 00001236: PUSH1 0x01 00001238: PUSH1 0x01 0000123a: PUSH1 0xa0 0000123c: SHL 0000123d: SUB 0000123e: AND 0000123f: SWAP2 00001240: PUSH4 0xad5c4648 00001245: SWAP2 00001246: PUSH1 0x04 00001248: DUP1 00001249: DUP4 0000124a: ADD 0000124b: SWAP3 0000124c: PUSH1 0x20 0000124e: SWAP3 0000124f: SWAP2 00001250: SWAP1 00001251: DUP3 00001252: SWAP1 00001253: SUB 00001254: ADD 00001255: DUP2 00001256: DUP7 00001257: GAS 00001258: STATICCALL 00001259: ISZERO 0000125a: DUP1 0000125b: ISZERO 0000125c: PUSH2 0x1269 0000125f: JUMPI 00001260: RETURNDATASIZE 00001261: PUSH1 0x00 00001263: DUP1 00001264: RETURNDATACOPY 00001265: RETURNDATASIZE 00001266: PUSH1 0x00 00001268: REVERT 00001269: JUMPDEST 0000126a: POP 0000126b: POP 0000126c: POP 0000126d: POP 0000126e: PUSH1 0x40 00001270: MLOAD 00001271: RETURNDATASIZE 00001272: PUSH1 0x1f 00001274: NOT 00001275: PUSH1 0x1f 00001277: DUP3 00001278: ADD 00001279: AND 0000127a: DUP3 0000127b: ADD 0000127c: DUP1 0000127d: PUSH1 0x40 0000127f: MSTORE 00001280: POP 00001281: DUP2 00001282: ADD 00001283: SWAP1 00001284: PUSH2 0x128d 00001287: SWAP2 00001288: SWAP1 00001289: PUSH2 0x1b16 0000128c: JUMP 0000128d: JUMPDEST 0000128e: PUSH1 0x40 00001290: MLOAD 00001291: PUSH4 0x70a08231 00001296: PUSH1 0xe0 00001298: SHL 00001299: DUP2 0000129a: MSTORE 0000129b: ADDRESS 0000129c: PUSH1 0x04 0000129e: DUP3 0000129f: ADD 000012a0: MSTORE 000012a1: SWAP1 000012a2: SWAP2 000012a3: POP 000012a4: PUSH1 0x01 000012a6: PUSH1 0x01 000012a8: PUSH1 0xa0 000012aa: SHL 000012ab: SUB 000012ac: DUP3 000012ad: AND 000012ae: SWAP1 000012af: PUSH4 0x2e1a7d4d 000012b4: SWAP1 000012b5: DUP3 000012b6: SWAP1 000012b7: PUSH4 0x70a08231 000012bc: SWAP1 000012bd: PUSH1 0x24 000012bf: ADD 000012c0: PUSH1 0x20 000012c2: PUSH1 0x40 000012c4: MLOAD 000012c5: DUP1 000012c6: DUP4 000012c7: SUB 000012c8: DUP2 000012c9: DUP7 000012ca: GAS 000012cb: STATICCALL 000012cc: ISZERO 000012cd: DUP1 000012ce: ISZERO 000012cf: PUSH2 0x12dc 000012d2: JUMPI 000012d3: RETURNDATASIZE 000012d4: PUSH1 0x00 000012d6: DUP1 000012d7: RETURNDATACOPY 000012d8: RETURNDATASIZE 000012d9: PUSH1 0x00 000012db: REVERT 000012dc: JUMPDEST 000012dd: POP 000012de: POP 000012df: POP 000012e0: POP 000012e1: PUSH1 0x40 000012e3: MLOAD 000012e4: RETURNDATASIZE 000012e5: PUSH1 0x1f 000012e7: NOT 000012e8: PUSH1 0x1f 000012ea: DUP3 000012eb: ADD 000012ec: AND 000012ed: DUP3 000012ee: ADD 000012ef: DUP1 000012f0: PUSH1 0x40 000012f2: MSTORE 000012f3: POP 000012f4: DUP2 000012f5: ADD 000012f6: SWAP1 000012f7: PUSH2 0x1300 000012fa: SWAP2 000012fb: SWAP1 000012fc: PUSH2 0x1b33 000012ff: JUMP 00001300: JUMPDEST 00001301: PUSH1 0x40 00001303: MLOAD 00001304: DUP3 00001305: PUSH4 0xffffffff 0000130a: AND 0000130b: PUSH1 0xe0 0000130d: SHL 0000130e: DUP2 0000130f: MSTORE 00001310: PUSH1 0x04 00001312: ADD 00001313: PUSH2 0x131e 00001316: SWAP2 00001317: DUP2 00001318: MSTORE 00001319: PUSH1 0x20 0000131b: ADD 0000131c: SWAP1 0000131d: JUMP 0000131e: JUMPDEST 0000131f: PUSH1 0x00 00001321: PUSH1 0x40 00001323: MLOAD 00001324: DUP1 00001325: DUP4 00001326: SUB 00001327: DUP2 00001328: PUSH1 0x00 0000132a: DUP8 0000132b: DUP1 0000132c: EXTCODESIZE 0000132d: ISZERO 0000132e: DUP1 0000132f: ISZERO 00001330: PUSH2 0x1338 00001333: JUMPI 00001334: PUSH1 0x00 00001336: DUP1 00001337: REVERT 00001338: JUMPDEST 00001339: POP 0000133a: GAS 0000133b: CALL 0000133c: ISZERO 0000133d: DUP1 0000133e: ISZERO 0000133f: PUSH2 0x134c 00001342: JUMPI 00001343: RETURNDATASIZE 00001344: PUSH1 0x00 00001346: DUP1 00001347: RETURNDATACOPY 00001348: RETURNDATASIZE 00001349: PUSH1 0x00 0000134b: REVERT 0000134c: JUMPDEST 0000134d: POP 0000134e: POP 0000134f: POP 00001350: POP 00001351: PUSH2 0x049c 00001354: PUSH2 0x06d6 00001357: JUMP 00001358: JUMPDEST 00001359: PUSH1 0x08 0000135b: PUSH1 0x00 0000135d: DUP4 0000135e: PUSH1 0x0a 00001360: DUP2 00001361: GT 00001362: ISZERO 00001363: PUSH2 0x136e 00001366: JUMPI 00001367: PUSH2 0x136e 0000136a: PUSH2 0x1a4a 0000136d: JUMP 0000136e: JUMPDEST 0000136f: PUSH1 0x0a 00001371: DUP2 00001372: GT 00001373: ISZERO 00001374: PUSH2 0x137f 00001377: JUMPI 00001378: PUSH2 0x137f 0000137b: PUSH2 0x1a4a 0000137e: JUMP 0000137f: JUMPDEST 00001380: DUP2 00001381: MSTORE 00001382: PUSH1 0x20 00001384: DUP2 00001385: ADD 00001386: SWAP2 00001387: SWAP1 00001388: SWAP2 00001389: MSTORE 0000138a: PUSH1 0x40 0000138c: ADD 0000138d: PUSH1 0x00 0000138f: KECCAK256 00001390: SLOAD 00001391: PUSH1 0xff 00001393: AND 00001394: ISZERO 00001395: PUSH2 0x139d 00001398: JUMPI 00001399: PUSH1 0x00 0000139b: DUP1 0000139c: REVERT 0000139d: JUMPDEST 0000139e: DUP1 0000139f: PUSH1 0x01 000013a1: PUSH1 0x01 000013a3: PUSH1 0xa0 000013a5: SHL 000013a6: SUB 000013a7: AND 000013a8: PUSH1 0x04 000013aa: PUSH1 0x00 000013ac: DUP5 000013ad: PUSH1 0x0a 000013af: DUP2 000013b0: GT 000013b1: ISZERO 000013b2: PUSH2 0x13bd 000013b5: JUMPI 000013b6: PUSH2 0x13bd 000013b9: PUSH2 0x1a4a 000013bc: JUMP 000013bd: JUMPDEST 000013be: PUSH1 0x0a 000013c0: DUP2 000013c1: GT 000013c2: ISZERO 000013c3: PUSH2 0x13ce 000013c6: JUMPI 000013c7: PUSH2 0x13ce 000013ca: PUSH2 0x1a4a 000013cd: JUMP 000013ce: JUMPDEST 000013cf: DUP2 000013d0: MSTORE 000013d1: PUSH1 0x20 000013d3: DUP2 000013d4: ADD 000013d5: SWAP2 000013d6: SWAP1 000013d7: SWAP2 000013d8: MSTORE 000013d9: PUSH1 0x40 000013db: ADD 000013dc: PUSH1 0x00 000013de: KECCAK256 000013df: SLOAD 000013e0: PUSH1 0x01 000013e2: PUSH1 0x01 000013e4: PUSH1 0xa0 000013e6: SHL 000013e7: SUB 000013e8: AND 000013e9: SUB 000013ea: PUSH2 0x13f2 000013ed: JUMPI 000013ee: PUSH1 0x00 000013f0: DUP1 000013f1: REVERT 000013f2: JUMPDEST 000013f3: PUSH1 0x07 000013f5: PUSH1 0x00 000013f7: DUP4 000013f8: PUSH1 0x0a 000013fa: DUP2 000013fb: GT 000013fc: ISZERO 000013fd: PUSH2 0x1408 00001400: JUMPI 00001401: PUSH2 0x1408 00001404: PUSH2 0x1a4a 00001407: JUMP 00001408: JUMPDEST 00001409: PUSH1 0x0a 0000140b: DUP2 0000140c: GT 0000140d: ISZERO 0000140e: PUSH2 0x1419 00001411: JUMPI 00001412: PUSH2 0x1419 00001415: PUSH2 0x1a4a 00001418: JUMP 00001419: JUMPDEST 0000141a: DUP2 0000141b: MSTORE 0000141c: PUSH1 0x20 0000141e: DUP1 0000141f: DUP3 00001420: ADD 00001421: SWAP3 00001422: SWAP1 00001423: SWAP3 00001424: MSTORE 00001425: PUSH1 0x40 00001427: SWAP1 00001428: DUP2 00001429: ADD 0000142a: PUSH1 0x00 0000142c: SWAP1 0000142d: DUP2 0000142e: KECCAK256 0000142f: CALLER 00001430: DUP3 00001431: MSTORE 00001432: SWAP1 00001433: SWAP3 00001434: MSTORE 00001435: SWAP1 00001436: KECCAK256 00001437: SLOAD 00001438: PUSH1 0xff 0000143a: AND 0000143b: PUSH2 0x1443 0000143e: JUMPI 0000143f: PUSH1 0x00 00001441: DUP1 00001442: REVERT 00001443: JUMPDEST 00001444: PUSH1 0x09 00001446: DUP3 00001447: PUSH1 0x0a 00001449: DUP2 0000144a: GT 0000144b: ISZERO 0000144c: PUSH2 0x1457 0000144f: JUMPI 00001450: PUSH2 0x1457 00001453: PUSH2 0x1a4a 00001456: JUMP 00001457: JUMPDEST 00001458: EQ 00001459: ISZERO 0000145a: DUP1 0000145b: ISZERO 0000145c: PUSH2 0x1477 0000145f: JUMPI 00001460: POP 00001461: PUSH1 0x0a 00001463: DUP3 00001464: PUSH1 0x0a 00001466: DUP2 00001467: GT 00001468: ISZERO 00001469: PUSH2 0x1474 0000146c: JUMPI 0000146d: PUSH2 0x1474 00001470: PUSH2 0x1a4a 00001473: JUMP 00001474: JUMPDEST 00001475: EQ 00001476: ISZERO 00001477: JUMPDEST 00001478: DUP1 00001479: ISZERO 0000147a: PUSH2 0x1495 0000147d: JUMPI 0000147e: POP 0000147f: PUSH1 0x08 00001481: DUP3 00001482: PUSH1 0x0a 00001484: DUP2 00001485: GT 00001486: ISZERO 00001487: PUSH2 0x1492 0000148a: JUMPI 0000148b: PUSH2 0x1492 0000148e: PUSH2 0x1a4a 00001491: JUMP 00001492: JUMPDEST 00001493: EQ 00001494: ISZERO 00001495: JUMPDEST 00001496: PUSH2 0x149e 00001499: JUMPI 0000149a: PUSH1 0x00 0000149c: DUP1 0000149d: REVERT 0000149e: JUMPDEST 0000149f: PUSH1 0x01 000014a1: PUSH1 0x01 000014a3: PUSH1 0xa0 000014a5: SHL 000014a6: SUB 000014a7: DUP2 000014a8: AND 000014a9: PUSH1 0x00 000014ab: SWAP1 000014ac: DUP2 000014ad: MSTORE 000014ae: PUSH1 0x06 000014b0: PUSH1 0x20 000014b2: MSTORE 000014b3: PUSH1 0x40 000014b5: SWAP1 000014b6: KECCAK256 000014b7: DUP1 000014b8: SLOAD 000014b9: DUP4 000014ba: SWAP2 000014bb: SWAP1 000014bc: PUSH1 0xff 000014be: NOT 000014bf: AND 000014c0: PUSH1 0x01 000014c2: DUP4 000014c3: PUSH1 0x0a 000014c5: DUP2 000014c6: GT 000014c7: ISZERO 000014c8: PUSH2 0x14d3 000014cb: JUMPI 000014cc: PUSH2 0x14d3 000014cf: PUSH2 0x1a4a 000014d2: JUMP 000014d3: JUMPDEST 000014d4: MUL 000014d5: OR 000014d6: SWAP1 000014d7: SSTORE 000014d8: POP 000014d9: DUP1 000014da: PUSH1 0x04 000014dc: PUSH1 0x00 000014de: DUP5 000014df: PUSH1 0x0a 000014e1: DUP2 000014e2: GT 000014e3: ISZERO 000014e4: PUSH2 0x14ef 000014e7: JUMPI 000014e8: PUSH2 0x14ef 000014eb: PUSH2 0x1a4a 000014ee: JUMP 000014ef: JUMPDEST 000014f0: PUSH1 0x0a 000014f2: DUP2 000014f3: GT 000014f4: ISZERO 000014f5: PUSH2 0x1500 000014f8: JUMPI 000014f9: PUSH2 0x1500 000014fc: PUSH2 0x1a4a 000014ff: JUMP 00001500: JUMPDEST 00001501: DUP2 00001502: MSTORE 00001503: PUSH1 0x20 00001505: ADD 00001506: SWAP1 00001507: DUP2 00001508: MSTORE 00001509: PUSH1 0x20 0000150b: ADD 0000150c: PUSH1 0x00 0000150e: KECCAK256 0000150f: PUSH1 0x00 00001511: PUSH2 0x0100 00001514: EXP 00001515: DUP2 00001516: SLOAD 00001517: DUP2 00001518: PUSH1 0x01 0000151a: PUSH1 0x01 0000151c: PUSH1 0xa0 0000151e: SHL 0000151f: SUB 00001520: MUL 00001521: NOT 00001522: AND 00001523: SWAP1 00001524: DUP4 00001525: PUSH1 0x01 00001527: PUSH1 0x01 00001529: PUSH1 0xa0 0000152b: SHL 0000152c: SUB 0000152d: AND 0000152e: MUL 0000152f: OR 00001530: SWAP1 00001531: SSTORE 00001532: POP 00001533: POP 00001534: POP 00001535: JUMP 00001536: JUMPDEST 00001537: CALLER 00001538: PUSH1 0x00 0000153a: SWAP1 0000153b: DUP2 0000153c: MSTORE 0000153d: PUSH1 0x06 0000153f: PUSH1 0x20 00001541: MSTORE 00001542: PUSH1 0x40 00001544: DUP2 00001545: KECCAK256 00001546: SLOAD 00001547: PUSH1 0xff 00001549: AND 0000154a: SWAP1 0000154b: DUP2 0000154c: PUSH1 0x0a 0000154e: DUP2 0000154f: GT 00001550: ISZERO 00001551: PUSH2 0x155c 00001554: JUMPI 00001555: PUSH2 0x155c 00001558: PUSH2 0x1a4a 0000155b: JUMP 0000155c: JUMPDEST 0000155d: SUB 0000155e: PUSH2 0x0968 00001561: JUMPI 00001562: PUSH1 0x00 00001564: DUP1 00001565: REVERT 00001566: JUMPDEST 00001567: PUSH2 0x156e 0000156a: PUSH2 0x18fd 0000156d: JUMP 0000156e: JUMPDEST 0000156f: PUSH1 0x01 00001571: PUSH1 0x01 00001573: PUSH1 0xa0 00001575: SHL 00001576: SUB 00001577: DUP2 00001578: AND 00001579: PUSH2 0x15d8 0000157c: JUMPI 0000157d: PUSH1 0x40 0000157f: MLOAD 00001580: PUSH3 0x461bcd 00001584: PUSH1 0xe5 00001586: SHL 00001587: DUP2 00001588: MSTORE 00001589: PUSH1 0x20 0000158b: PUSH1 0x04 0000158d: DUP3 0000158e: ADD 0000158f: MSTORE 00001590: PUSH1 0x26 00001592: PUSH1 0x24 00001594: DUP3 00001595: ADD 00001596: MSTORE 00001597: PUSH32 0x4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061 000015b8: PUSH1 0x44 000015ba: DUP3 000015bb: ADD 000015bc: MSTORE 000015bd: PUSH6 0x646472657373 000015c4: PUSH1 0xd0 000015c6: SHL 000015c7: PUSH1 0x64 000015c9: DUP3 000015ca: ADD 000015cb: MSTORE 000015cc: PUSH1 0x84 000015ce: ADD 000015cf: JUMPDEST 000015d0: PUSH1 0x40 000015d2: MLOAD 000015d3: DUP1 000015d4: SWAP2 000015d5: SUB 000015d6: SWAP1 000015d7: REVERT 000015d8: JUMPDEST 000015d9: PUSH2 0x049c 000015dc: DUP2 000015dd: PUSH2 0x1966 000015e0: JUMP 000015e1: JUMPDEST 000015e2: PUSH1 0x08 000015e4: PUSH1 0x00 000015e6: DUP5 000015e7: PUSH1 0x0a 000015e9: DUP2 000015ea: GT 000015eb: ISZERO 000015ec: PUSH2 0x15f7 000015ef: JUMPI 000015f0: PUSH2 0x15f7 000015f3: PUSH2 0x1a4a 000015f6: JUMP 000015f7: JUMPDEST 000015f8: PUSH1 0x0a 000015fa: DUP2 000015fb: GT 000015fc: ISZERO 000015fd: PUSH2 0x1608 00001600: JUMPI 00001601: PUSH2 0x1608 00001604: PUSH2 0x1a4a 00001607: JUMP 00001608: JUMPDEST 00001609: DUP2 0000160a: MSTORE 0000160b: PUSH1 0x20 0000160d: DUP2 0000160e: ADD 0000160f: SWAP2 00001610: SWAP1 00001611: SWAP2 00001612: MSTORE 00001613: PUSH1 0x40 00001615: ADD 00001616: PUSH1 0x00 00001618: KECCAK256 00001619: SLOAD 0000161a: PUSH1 0xff 0000161c: AND 0000161d: ISZERO 0000161e: PUSH2 0x1626 00001621: JUMPI 00001622: PUSH1 0x00 00001624: DUP1 00001625: REVERT 00001626: JUMPDEST 00001627: PUSH1 0x09 00001629: DUP4 0000162a: PUSH1 0x0a 0000162c: DUP2 0000162d: GT 0000162e: ISZERO 0000162f: PUSH2 0x163a 00001632: JUMPI 00001633: PUSH2 0x163a 00001636: PUSH2 0x1a4a 00001639: JUMP 0000163a: JUMPDEST 0000163b: EQ 0000163c: ISZERO 0000163d: DUP1 0000163e: ISZERO 0000163f: PUSH2 0x165a 00001642: JUMPI 00001643: POP 00001644: PUSH1 0x0a 00001646: DUP4 00001647: PUSH1 0x0a 00001649: DUP2 0000164a: GT 0000164b: ISZERO 0000164c: PUSH2 0x1657 0000164f: JUMPI 00001650: PUSH2 0x1657 00001653: PUSH2 0x1a4a 00001656: JUMP 00001657: JUMPDEST 00001658: EQ 00001659: ISZERO 0000165a: JUMPDEST 0000165b: PUSH2 0x1663 0000165e: JUMPI 0000165f: PUSH1 0x00 00001661: DUP1 00001662: REVERT 00001663: JUMPDEST 00001664: PUSH1 0x07 00001666: PUSH1 0x00 00001668: DUP5 00001669: PUSH1 0x0a 0000166b: DUP2 0000166c: GT 0000166d: ISZERO 0000166e: PUSH2 0x1679 00001671: JUMPI 00001672: PUSH2 0x1679 00001675: PUSH2 0x1a4a 00001678: JUMP 00001679: JUMPDEST 0000167a: PUSH1 0x0a 0000167c: DUP2 0000167d: GT 0000167e: ISZERO 0000167f: PUSH2 0x168a 00001682: JUMPI 00001683: PUSH2 0x168a 00001686: PUSH2 0x1a4a 00001689: JUMP 0000168a: JUMPDEST 0000168b: DUP2 0000168c: MSTORE 0000168d: PUSH1 0x20 0000168f: DUP1 00001690: DUP3 00001691: ADD 00001692: SWAP3 00001693: SWAP1 00001694: SWAP3 00001695: MSTORE 00001696: PUSH1 0x40 00001698: SWAP1 00001699: DUP2 0000169a: ADD 0000169b: PUSH1 0x00 0000169d: SWAP1 0000169e: DUP2 0000169f: KECCAK256 000016a0: CALLER 000016a1: DUP3 000016a2: MSTORE 000016a3: SWAP1 000016a4: SWAP3 000016a5: MSTORE 000016a6: SWAP1 000016a7: KECCAK256 000016a8: SLOAD 000016a9: PUSH1 0xff 000016ab: AND 000016ac: PUSH2 0x16b4 000016af: JUMPI 000016b0: PUSH1 0x00 000016b2: DUP1 000016b3: REVERT 000016b4: JUMPDEST 000016b5: DUP1 000016b6: PUSH1 0x07 000016b8: PUSH1 0x00 000016ba: DUP6 000016bb: PUSH1 0x0a 000016bd: DUP2 000016be: GT 000016bf: ISZERO 000016c0: PUSH2 0x16cb 000016c3: JUMPI 000016c4: PUSH2 0x16cb 000016c7: PUSH2 0x1a4a 000016ca: JUMP 000016cb: JUMPDEST 000016cc: PUSH1 0x0a 000016ce: DUP2 000016cf: GT 000016d0: ISZERO 000016d1: PUSH2 0x16dc 000016d4: JUMPI 000016d5: PUSH2 0x16dc 000016d8: PUSH2 0x1a4a 000016db: JUMP 000016dc: JUMPDEST 000016dd: DUP2 000016de: MSTORE 000016df: PUSH1 0x20 000016e1: DUP1 000016e2: DUP3 000016e3: ADD 000016e4: SWAP3 000016e5: SWAP1 000016e6: SWAP3 000016e7: MSTORE 000016e8: PUSH1 0x40 000016ea: SWAP1 000016eb: DUP2 000016ec: ADD 000016ed: PUSH1 0x00 000016ef: SWAP1 000016f0: DUP2 000016f1: KECCAK256 000016f2: PUSH1 0x01 000016f4: PUSH1 0x01 000016f6: PUSH1 0xa0 000016f8: SHL 000016f9: SUB 000016fa: DUP8 000016fb: AND 000016fc: DUP1 000016fd: DUP4 000016fe: MSTORE 000016ff: SWAP4 00001700: MSTORE 00001701: KECCAK256 00001702: DUP1 00001703: SLOAD 00001704: PUSH1 0xff 00001706: NOT 00001707: AND 00001708: SWAP3 00001709: ISZERO 0000170a: ISZERO 0000170b: SWAP3 0000170c: SWAP1 0000170d: SWAP3 0000170e: OR 0000170f: SWAP1 00001710: SWAP2 00001711: SSTORE 00001712: CALLER 00001713: DUP5 00001714: PUSH1 0x0a 00001716: DUP2 00001717: GT 00001718: ISZERO 00001719: PUSH2 0x1724 0000171c: JUMPI 0000171d: PUSH2 0x1724 00001720: PUSH2 0x1a4a 00001723: JUMP 00001724: JUMPDEST 00001725: PUSH1 0x40 00001727: MLOAD 00001728: DUP5 00001729: ISZERO 0000172a: ISZERO 0000172b: DUP2 0000172c: MSTORE 0000172d: PUSH32 0x5f0724cb9277e9e41f988d0b363634b3d72e6fb6aa4ea0ea4e0ef4dc985861f1 0000174e: SWAP1 0000174f: PUSH1 0x20 00001751: ADD 00001752: PUSH1 0x40 00001754: MLOAD 00001755: DUP1 00001756: SWAP2 00001757: SUB 00001758: SWAP1 00001759: LOG4 0000175a: POP 0000175b: POP 0000175c: POP 0000175d: JUMP 0000175e: JUMPDEST 0000175f: PUSH1 0x00 00001761: DUP1 00001762: PUSH1 0x04 00001764: PUSH1 0x00 00001766: DUP5 00001767: PUSH1 0x0a 00001769: DUP2 0000176a: GT 0000176b: ISZERO 0000176c: PUSH2 0x1777 0000176f: JUMPI 00001770: PUSH2 0x1777 00001773: PUSH2 0x1a4a 00001776: JUMP 00001777: JUMPDEST 00001778: PUSH1 0x0a 0000177a: DUP2 0000177b: GT 0000177c: ISZERO 0000177d: PUSH2 0x1788 00001780: JUMPI 00001781: PUSH2 0x1788 00001784: PUSH2 0x1a4a 00001787: JUMP 00001788: JUMPDEST 00001789: DUP2 0000178a: MSTORE 0000178b: PUSH1 0x20 0000178d: DUP2 0000178e: ADD 0000178f: SWAP2 00001790: SWAP1 00001791: SWAP2 00001792: MSTORE 00001793: PUSH1 0x40 00001795: ADD 00001796: PUSH1 0x00 00001798: KECCAK256 00001799: SLOAD 0000179a: PUSH1 0x01 0000179c: PUSH1 0x01 0000179e: PUSH1 0xa0 000017a0: SHL 000017a1: SUB 000017a2: AND 000017a3: SWAP1 000017a4: POP 000017a5: DUP1 000017a6: PUSH2 0x17ae 000017a9: JUMPI 000017aa: POP 000017ab: POP 000017ac: POP 000017ad: JUMP 000017ae: JUMPDEST 000017af: PUSH1 0x00 000017b1: PUSH1 0x03 000017b3: PUSH1 0x00 000017b5: DUP6 000017b6: PUSH1 0x0a 000017b8: DUP2 000017b9: GT 000017ba: ISZERO 000017bb: PUSH2 0x17c6 000017be: JUMPI 000017bf: PUSH2 0x17c6 000017c2: PUSH2 0x1a4a 000017c5: JUMP 000017c6: JUMPDEST 000017c7: PUSH1 0x0a 000017c9: DUP2 000017ca: GT 000017cb: ISZERO 000017cc: PUSH2 0x17d7 000017cf: JUMPI 000017d0: PUSH2 0x17d7 000017d3: PUSH2 0x1a4a 000017d6: JUMP 000017d7: JUMPDEST 000017d8: DUP2 000017d9: MSTORE 000017da: PUSH1 0x20 000017dc: ADD 000017dd: SWAP1 000017de: DUP2 000017df: MSTORE 000017e0: PUSH1 0x20 000017e2: ADD 000017e3: PUSH1 0x00 000017e5: KECCAK256 000017e6: SLOAD 000017e7: SWAP1 000017e8: POP 000017e9: PUSH1 0x00 000017eb: PUSH1 0x03 000017ed: PUSH1 0x00 000017ef: DUP7 000017f0: PUSH1 0x0a 000017f2: DUP2 000017f3: GT 000017f4: ISZERO 000017f5: PUSH2 0x1800 000017f8: JUMPI 000017f9: PUSH2 0x1800 000017fc: PUSH2 0x1a4a 000017ff: JUMP 00001800: JUMPDEST 00001801: PUSH1 0x0a 00001803: DUP2 00001804: GT 00001805: ISZERO 00001806: PUSH2 0x1811 00001809: JUMPI 0000180a: PUSH2 0x1811 0000180d: PUSH2 0x1a4a 00001810: JUMP 00001811: JUMPDEST 00001812: DUP2 00001813: MSTORE 00001814: PUSH1 0x20 00001816: ADD 00001817: SWAP1 00001818: DUP2 00001819: MSTORE 0000181a: PUSH1 0x20 0000181c: ADD 0000181d: PUSH1 0x00 0000181f: KECCAK256 00001820: DUP2 00001821: SWAP1 00001822: SSTORE 00001823: POP 00001824: DUP1 00001825: PUSH1 0x01 00001827: PUSH1 0x00 00001829: DUP3 0000182a: DUP3 0000182b: SLOAD 0000182c: PUSH2 0x1835 0000182f: SWAP2 00001830: SWAP1 00001831: PUSH2 0x1c1e 00001834: JUMP 00001835: JUMPDEST 00001836: SWAP1 00001837: SWAP2 00001838: SSTORE 00001839: POP 0000183a: POP 0000183b: PUSH1 0x40 0000183d: MLOAD 0000183e: PUSH1 0x01 00001840: PUSH1 0x01 00001842: PUSH1 0xa0 00001844: SHL 00001845: SUB 00001846: DUP4 00001847: AND 00001848: SWAP1 00001849: DUP3 0000184a: SWAP1 0000184b: PUSH1 0x00 0000184d: DUP2 0000184e: DUP2 0000184f: DUP2 00001850: DUP6 00001851: DUP8 00001852: GAS 00001853: CALL 00001854: SWAP3 00001855: POP 00001856: POP 00001857: POP 00001858: RETURNDATASIZE 00001859: DUP1 0000185a: PUSH1 0x00 0000185c: DUP2 0000185d: EQ 0000185e: PUSH2 0x1883 00001861: JUMPI 00001862: PUSH1 0x40 00001864: MLOAD 00001865: SWAP2 00001866: POP 00001867: PUSH1 0x1f 00001869: NOT 0000186a: PUSH1 0x3f 0000186c: RETURNDATASIZE 0000186d: ADD 0000186e: AND 0000186f: DUP3 00001870: ADD 00001871: PUSH1 0x40 00001873: MSTORE 00001874: RETURNDATASIZE 00001875: DUP3 00001876: MSTORE 00001877: RETURNDATASIZE 00001878: PUSH1 0x00 0000187a: PUSH1 0x20 0000187c: DUP5 0000187d: ADD 0000187e: RETURNDATACOPY 0000187f: PUSH2 0x1888 00001882: JUMP 00001883: JUMPDEST 00001884: PUSH1 0x60 00001886: SWAP2 00001887: POP 00001888: JUMPDEST 00001889: POP 0000188a: POP 0000188b: DUP1 0000188c: SWAP4 0000188d: POP 0000188e: POP 0000188f: DUP3 00001890: PUSH2 0x18f7 00001893: JUMPI 00001894: DUP1 00001895: PUSH1 0x03 00001897: PUSH1 0x00 00001899: DUP7 0000189a: PUSH1 0x0a 0000189c: DUP2 0000189d: GT 0000189e: ISZERO 0000189f: PUSH2 0x18aa 000018a2: JUMPI 000018a3: PUSH2 0x18aa 000018a6: PUSH2 0x1a4a 000018a9: JUMP 000018aa: JUMPDEST 000018ab: PUSH1 0x0a 000018ad: DUP2 000018ae: GT 000018af: ISZERO 000018b0: PUSH2 0x18bb 000018b3: JUMPI 000018b4: PUSH2 0x18bb 000018b7: PUSH2 0x1a4a 000018ba: JUMP 000018bb: JUMPDEST 000018bc: DUP2 000018bd: MSTORE 000018be: PUSH1 0x20 000018c0: ADD 000018c1: SWAP1 000018c2: DUP2 000018c3: MSTORE 000018c4: PUSH1 0x20 000018c6: ADD 000018c7: PUSH1 0x00 000018c9: KECCAK256 000018ca: PUSH1 0x00 000018cc: DUP3 000018cd: DUP3 000018ce: SLOAD 000018cf: PUSH2 0x18d8 000018d2: SWAP2 000018d3: SWAP1 000018d4: PUSH2 0x1c06 000018d7: JUMP 000018d8: JUMPDEST 000018d9: SWAP3 000018da: POP 000018db: POP 000018dc: DUP2 000018dd: SWAP1 000018de: SSTORE 000018df: POP 000018e0: DUP1 000018e1: PUSH1 0x01 000018e3: PUSH1 0x00 000018e5: DUP3 000018e6: DUP3 000018e7: SLOAD 000018e8: PUSH2 0x18f1 000018eb: SWAP2 000018ec: SWAP1 000018ed: PUSH2 0x1c06 000018f0: JUMP 000018f1: JUMPDEST 000018f2: SWAP1 000018f3: SWAP2 000018f4: SSTORE 000018f5: POP 000018f6: POP 000018f7: JUMPDEST 000018f8: POP 000018f9: POP 000018fa: POP 000018fb: POP 000018fc: JUMP 000018fd: JUMPDEST 000018fe: CALLER 000018ff: PUSH2 0x1910 00001902: PUSH1 0x00 00001904: SLOAD 00001905: PUSH1 0x01 00001907: PUSH1 0x01 00001909: PUSH1 0xa0 0000190b: SHL 0000190c: SUB 0000190d: AND 0000190e: SWAP1 0000190f: JUMP 00001910: JUMPDEST 00001911: PUSH1 0x01 00001913: PUSH1 0x01 00001915: PUSH1 0xa0 00001917: SHL 00001918: SUB 00001919: AND 0000191a: EQ 0000191b: PUSH2 0x0742 0000191e: JUMPI 0000191f: PUSH1 0x40 00001921: MLOAD 00001922: PUSH3 0x461bcd 00001926: PUSH1 0xe5 00001928: SHL 00001929: DUP2 0000192a: MSTORE 0000192b: PUSH1 0x20 0000192d: PUSH1 0x04 0000192f: DUP3 00001930: ADD 00001931: DUP2 00001932: SWAP1 00001933: MSTORE 00001934: PUSH1 0x24 00001936: DUP3 00001937: ADD 00001938: MSTORE 00001939: PUSH32 0x4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572 0000195a: PUSH1 0x44 0000195c: DUP3 0000195d: ADD 0000195e: MSTORE 0000195f: PUSH1 0x64 00001961: ADD 00001962: PUSH2 0x15cf 00001965: JUMP 00001966: JUMPDEST 00001967: PUSH1 0x00 00001969: DUP1 0000196a: SLOAD 0000196b: PUSH1 0x01 0000196d: PUSH1 0x01 0000196f: PUSH1 0xa0 00001971: SHL 00001972: SUB 00001973: DUP4 00001974: DUP2 00001975: AND 00001976: PUSH1 0x01 00001978: PUSH1 0x01 0000197a: PUSH1 0xa0 0000197c: SHL 0000197d: SUB 0000197e: NOT 0000197f: DUP4 00001980: AND 00001981: DUP2 00001982: OR 00001983: DUP5 00001984: SSTORE 00001985: PUSH1 0x40 00001987: MLOAD 00001988: SWAP2 00001989: SWAP1 0000198a: SWAP3 0000198b: AND 0000198c: SWAP3 0000198d: DUP4 0000198e: SWAP2 0000198f: PUSH32 0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0 000019b0: SWAP2 000019b1: SWAP1 000019b2: LOG3 000019b3: POP 000019b4: POP 000019b5: JUMP 000019b6: JUMPDEST 000019b7: PUSH1 0x01 000019b9: PUSH1 0x01 000019bb: PUSH1 0xa0 000019bd: SHL 000019be: SUB 000019bf: DUP2 000019c0: AND 000019c1: DUP2 000019c2: EQ 000019c3: PUSH2 0x049c 000019c6: JUMPI 000019c7: PUSH1 0x00 000019c9: DUP1 000019ca: REVERT 000019cb: JUMPDEST 000019cc: PUSH1 0x00 000019ce: PUSH1 0x20 000019d0: DUP3 000019d1: DUP5 000019d2: SUB 000019d3: SLT 000019d4: ISZERO 000019d5: PUSH2 0x19dd 000019d8: JUMPI 000019d9: PUSH1 0x00 000019db: DUP1 000019dc: REVERT 000019dd: JUMPDEST 000019de: DUP2 000019df: CALLDATALOAD 000019e0: PUSH2 0x19e8 000019e3: DUP2 000019e4: PUSH2 0x19b6 000019e7: JUMP 000019e8: JUMPDEST 000019e9: SWAP4 000019ea: SWAP3 000019eb: POP 000019ec: POP 000019ed: POP 000019ee: JUMP 000019ef: JUMPDEST 000019f0: DUP1 000019f1: CALLDATALOAD 000019f2: PUSH1 0x0b 000019f4: DUP2 000019f5: LT 000019f6: PUSH2 0x19fe 000019f9: JUMPI 000019fa: PUSH1 0x00 000019fc: DUP1 000019fd: REVERT 000019fe: JUMPDEST 000019ff: SWAP2 00001a00: SWAP1 00001a01: POP 00001a02: JUMP 00001a03: JUMPDEST 00001a04: PUSH1 0x00 00001a06: PUSH1 0x20 00001a08: DUP3 00001a09: DUP5 00001a0a: SUB 00001a0b: SLT 00001a0c: ISZERO 00001a0d: PUSH2 0x1a15 00001a10: JUMPI 00001a11: PUSH1 0x00 00001a13: DUP1 00001a14: REVERT 00001a15: JUMPDEST 00001a16: PUSH2 0x19e8 00001a19: DUP3 00001a1a: PUSH2 0x19ef 00001a1d: JUMP 00001a1e: JUMPDEST 00001a1f: PUSH1 0x00 00001a21: DUP1 00001a22: PUSH1 0x00 00001a24: PUSH1 0x60 00001a26: DUP5 00001a27: DUP7 00001a28: SUB 00001a29: SLT 00001a2a: ISZERO 00001a2b: PUSH2 0x1a33 00001a2e: JUMPI 00001a2f: PUSH1 0x00 00001a31: DUP1 00001a32: REVERT 00001a33: JUMPDEST 00001a34: POP 00001a35: POP 00001a36: DUP2 00001a37: CALLDATALOAD 00001a38: SWAP4 00001a39: PUSH1 0x20 00001a3b: DUP4 00001a3c: ADD 00001a3d: CALLDATALOAD 00001a3e: SWAP4 00001a3f: POP 00001a40: PUSH1 0x40 00001a42: SWAP1 00001a43: SWAP3 00001a44: ADD 00001a45: CALLDATALOAD 00001a46: SWAP2 00001a47: SWAP1 00001a48: POP 00001a49: JUMP 00001a4a: JUMPDEST 00001a4b: PUSH4 0x4e487b71 00001a50: PUSH1 0xe0 00001a52: SHL 00001a53: PUSH1 0x00 00001a55: MSTORE 00001a56: PUSH1 0x21 00001a58: PUSH1 0x04 00001a5a: MSTORE 00001a5b: PUSH1 0x24 00001a5d: PUSH1 0x00 00001a5f: REVERT 00001a60: JUMPDEST 00001a61: PUSH1 0x20 00001a63: DUP2 00001a64: ADD 00001a65: PUSH1 0x0b 00001a67: DUP4 00001a68: LT 00001a69: PUSH2 0x1a82 00001a6c: JUMPI 00001a6d: PUSH4 0x4e487b71 00001a72: PUSH1 0xe0 00001a74: SHL 00001a75: PUSH1 0x00 00001a77: MSTORE 00001a78: PUSH1 0x21 00001a7a: PUSH1 0x04 00001a7c: MSTORE 00001a7d: PUSH1 0x24 00001a7f: PUSH1 0x00 00001a81: REVERT 00001a82: JUMPDEST 00001a83: SWAP2 00001a84: SWAP1 00001a85: MSTORE 00001a86: SWAP1 00001a87: JUMP 00001a88: JUMPDEST 00001a89: PUSH1 0x00 00001a8b: DUP1 00001a8c: PUSH1 0x40 00001a8e: DUP4 00001a8f: DUP6 00001a90: SUB 00001a91: SLT 00001a92: ISZERO 00001a93: PUSH2 0x1a9b 00001a96: JUMPI 00001a97: PUSH1 0x00 00001a99: DUP1 00001a9a: REVERT 00001a9b: JUMPDEST 00001a9c: PUSH2 0x1aa4 00001a9f: DUP4 00001aa0: PUSH2 0x19ef 00001aa3: JUMP 00001aa4: JUMPDEST 00001aa5: SWAP2 00001aa6: POP 00001aa7: PUSH1 0x20 00001aa9: DUP4 00001aaa: ADD 00001aab: CALLDATALOAD 00001aac: PUSH2 0x1ab4 00001aaf: DUP2 00001ab0: PUSH2 0x19b6 00001ab3: JUMP 00001ab4: JUMPDEST 00001ab5: DUP1 00001ab6: SWAP2 00001ab7: POP 00001ab8: POP 00001ab9: SWAP3 00001aba: POP 00001abb: SWAP3 00001abc: SWAP1 00001abd: POP 00001abe: JUMP 00001abf: JUMPDEST 00001ac0: DUP1 00001ac1: ISZERO 00001ac2: ISZERO 00001ac3: DUP2 00001ac4: EQ 00001ac5: PUSH2 0x049c 00001ac8: JUMPI 00001ac9: PUSH1 0x00 00001acb: DUP1 00001acc: REVERT 00001acd: JUMPDEST 00001ace: PUSH1 0x00 00001ad0: DUP1 00001ad1: PUSH1 0x00 00001ad3: PUSH1 0x60 00001ad5: DUP5 00001ad6: DUP7 00001ad7: SUB 00001ad8: SLT 00001ad9: ISZERO 00001ada: PUSH2 0x1ae2 00001add: JUMPI 00001ade: PUSH1 0x00 00001ae0: DUP1 00001ae1: REVERT 00001ae2: JUMPDEST 00001ae3: PUSH2 0x1aeb 00001ae6: DUP5 00001ae7: PUSH2 0x19ef 00001aea: JUMP 00001aeb: JUMPDEST 00001aec: SWAP3 00001aed: POP 00001aee: PUSH1 0x20 00001af0: DUP5 00001af1: ADD 00001af2: CALLDATALOAD 00001af3: PUSH2 0x1afb 00001af6: DUP2 00001af7: PUSH2 0x19b6 00001afa: JUMP 00001afb: JUMPDEST 00001afc: SWAP2 00001afd: POP 00001afe: PUSH1 0x40 00001b00: DUP5 00001b01: ADD 00001b02: CALLDATALOAD 00001b03: PUSH2 0x1b0b 00001b06: DUP2 00001b07: PUSH2 0x1abf 00001b0a: JUMP 00001b0b: JUMPDEST 00001b0c: DUP1 00001b0d: SWAP2 00001b0e: POP 00001b0f: POP 00001b10: SWAP3 00001b11: POP 00001b12: SWAP3 00001b13: POP 00001b14: SWAP3 00001b15: JUMP 00001b16: JUMPDEST 00001b17: PUSH1 0x00 00001b19: PUSH1 0x20 00001b1b: DUP3 00001b1c: DUP5 00001b1d: SUB 00001b1e: SLT 00001b1f: ISZERO 00001b20: PUSH2 0x1b28 00001b23: JUMPI 00001b24: PUSH1 0x00 00001b26: DUP1 00001b27: REVERT 00001b28: JUMPDEST 00001b29: DUP2 00001b2a: MLOAD 00001b2b: PUSH2 0x19e8 00001b2e: DUP2 00001b2f: PUSH2 0x19b6 00001b32: JUMP 00001b33: JUMPDEST 00001b34: PUSH1 0x00 00001b36: PUSH1 0x20 00001b38: DUP3 00001b39: DUP5 00001b3a: SUB 00001b3b: SLT 00001b3c: ISZERO 00001b3d: PUSH2 0x1b45 00001b40: JUMPI 00001b41: PUSH1 0x00 00001b43: DUP1 00001b44: REVERT 00001b45: JUMPDEST 00001b46: POP 00001b47: MLOAD 00001b48: SWAP2 00001b49: SWAP1 00001b4a: POP 00001b4b: JUMP 00001b4c: JUMPDEST 00001b4d: PUSH4 0x4e487b71 00001b52: PUSH1 0xe0 00001b54: SHL 00001b55: PUSH1 0x00 00001b57: MSTORE 00001b58: PUSH1 0x32 00001b5a: PUSH1 0x04 00001b5c: MSTORE 00001b5d: PUSH1 0x24 00001b5f: PUSH1 0x00 00001b61: REVERT 00001b62: JUMPDEST 00001b63: PUSH1 0x00 00001b65: PUSH1 0x20 00001b67: DUP3 00001b68: DUP5 00001b69: SUB 00001b6a: SLT 00001b6b: ISZERO 00001b6c: PUSH2 0x1b74 00001b6f: JUMPI 00001b70: PUSH1 0x00 00001b72: DUP1 00001b73: REVERT 00001b74: JUMPDEST 00001b75: DUP2 00001b76: MLOAD 00001b77: PUSH2 0x19e8 00001b7a: DUP2 00001b7b: PUSH2 0x1abf 00001b7e: JUMP 00001b7f: JUMPDEST 00001b80: PUSH1 0x00 00001b82: PUSH1 0xa0 00001b84: DUP3 00001b85: ADD 00001b86: DUP8 00001b87: DUP4 00001b88: MSTORE 00001b89: PUSH1 0x20 00001b8b: DUP8 00001b8c: DUP2 00001b8d: DUP6 00001b8e: ADD 00001b8f: MSTORE 00001b90: PUSH1 0xa0 00001b92: PUSH1 0x40 00001b94: DUP6 00001b95: ADD 00001b96: MSTORE 00001b97: DUP2 00001b98: DUP8 00001b99: MLOAD 00001b9a: DUP1 00001b9b: DUP5 00001b9c: MSTORE 00001b9d: PUSH1 0xc0 00001b9f: DUP7 00001ba0: ADD 00001ba1: SWAP2 00001ba2: POP 00001ba3: DUP3 00001ba4: DUP10 00001ba5: ADD 00001ba6: SWAP4 00001ba7: POP 00001ba8: PUSH1 0x00 00001baa: JUMPDEST 00001bab: DUP2 00001bac: DUP2 00001bad: LT 00001bae: ISZERO 00001baf: PUSH2 0x1bcf 00001bb2: JUMPI 00001bb3: DUP5 00001bb4: MLOAD 00001bb5: PUSH1 0x01 00001bb7: PUSH1 0x01 00001bb9: PUSH1 0xa0 00001bbb: SHL 00001bbc: SUB 00001bbd: AND 00001bbe: DUP4 00001bbf: MSTORE 00001bc0: SWAP4 00001bc1: DUP4 00001bc2: ADD 00001bc3: SWAP4 00001bc4: SWAP2 00001bc5: DUP4 00001bc6: ADD 00001bc7: SWAP2 00001bc8: PUSH1 0x01 00001bca: ADD 00001bcb: PUSH2 0x1baa 00001bce: JUMP 00001bcf: JUMPDEST 00001bd0: POP 00001bd1: POP 00001bd2: PUSH1 0x01 00001bd4: PUSH1 0x01 00001bd6: PUSH1 0xa0 00001bd8: SHL 00001bd9: SUB 00001bda: SWAP7 00001bdb: SWAP1 00001bdc: SWAP7 00001bdd: AND 00001bde: PUSH1 0x60 00001be0: DUP6 00001be1: ADD 00001be2: MSTORE 00001be3: POP 00001be4: POP 00001be5: POP 00001be6: PUSH1 0x80 00001be8: ADD 00001be9: MSTORE 00001bea: SWAP4 00001beb: SWAP3 00001bec: POP 00001bed: POP 00001bee: POP 00001bef: JUMP 00001bf0: JUMPDEST 00001bf1: PUSH4 0x4e487b71 00001bf6: PUSH1 0xe0 00001bf8: SHL 00001bf9: PUSH1 0x00 00001bfb: MSTORE 00001bfc: PUSH1 0x11 00001bfe: PUSH1 0x04 00001c00: MSTORE 00001c01: PUSH1 0x24 00001c03: PUSH1 0x00 00001c05: REVERT 00001c06: JUMPDEST 00001c07: PUSH1 0x00 00001c09: DUP3 00001c0a: NOT 00001c0b: DUP3 00001c0c: GT 00001c0d: ISZERO 00001c0e: PUSH2 0x1c19 00001c11: JUMPI 00001c12: PUSH2 0x1c19 00001c15: PUSH2 0x1bf0 00001c18: JUMP 00001c19: JUMPDEST 00001c1a: POP 00001c1b: ADD 00001c1c: SWAP1 00001c1d: JUMP 00001c1e: JUMPDEST 00001c1f: PUSH1 0x00 00001c21: DUP3 00001c22: DUP3 00001c23: LT 00001c24: ISZERO 00001c25: PUSH2 0x1c30 00001c28: JUMPI 00001c29: PUSH2 0x1c30 00001c2c: PUSH2 0x1bf0 00001c2f: JUMP 00001c30: JUMPDEST 00001c31: POP 00001c32: SUB 00001c33: SWAP1 00001c34: JUMP 00001c35: JUMPDEST 00001c36: PUSH1 0x00 00001c38: DUP2 00001c39: PUSH1 0x00 00001c3b: NOT 00001c3c: DIV 00001c3d: DUP4 00001c3e: GT 00001c3f: DUP3 00001c40: ISZERO 00001c41: ISZERO 00001c42: AND 00001c43: ISZERO 00001c44: PUSH2 0x1c4f 00001c47: JUMPI 00001c48: PUSH2 0x1c4f 00001c4b: PUSH2 0x1bf0 00001c4e: JUMP 00001c4f: JUMPDEST 00001c50: POP 00001c51: MUL 00001c52: SWAP1 00001c53: JUMP 00001c54: JUMPDEST 00001c55: PUSH1 0x00 00001c57: DUP3 00001c58: PUSH2 0x1c71 00001c5b: JUMPI 00001c5c: PUSH4 0x4e487b71 00001c61: PUSH1 0xe0 00001c63: SHL 00001c64: PUSH1 0x00 00001c66: MSTORE 00001c67: PUSH1 0x12 00001c69: PUSH1 0x04 00001c6b: MSTORE 00001c6c: PUSH1 0x24 00001c6e: PUSH1 0x00 00001c70: REVERT 00001c71: JUMPDEST 00001c72: POP 00001c73: DIV 00001c74: SWAP1 00001c75: JUMP 00001c76: INVALID 00001c77: LOG2 00001c78: PUSH5 0x6970667358 00001c7e: UNKNOWN(0x22) 00001c7f: SLT 00001c80: KECCAK256 00001c81: UNKNOWN(0xB0) 00001c82: PUSH20 0xa1b599ef247c8f9f4b0011114d4b94d1f8a78bc6 00001c97: EXTCODESIZE 00001c98: STATICCALL 00001c99: MOD 00001c9a: SMOD 00001c9b: CALL 00001c9c: UNKNOWN(0x2A) 00001c9d: UNKNOWN(0xAA) 00001c9e: UNKNOWN(0xCD) 00001c9f: PUSH15
| Severity | Category | Tool | Title | Confidence | Validated | Confirmed | Details |
|---|---|---|---|---|---|---|---|
| high | other | detector | Untrusted CALL target/value reachable | 60 | yes | yes |
viewtrace_id: 0x697a70e6d7c9f2a50064f5722c99c8e0741e54e5222b4ddf1eff9fc0728cd740
call_targets:
0x56d13422dbf491dd928541d54aba001c1eb68ae1, 0x5cf4288bf373bbe17f76948e39baf33b9f6ac2e0, 0x67e81f6f08e75b225e7cfaab7264344009e744a6, 0x70001e625f8c763be03ffb4135789c7116fef999, 0x7063e83df5349833a21f744398fd39d42fbc00f8, 0xaee254e8672f9cfd417cf8ad6cc35eb1be414340, 0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2, 0xce3890e8f5b0e4e7ebef4b7f4d9f12b110087232, 0xd0b5bd9039527b07f2bf3af63019f3526a5166a9, 0xefacd3261f3f2038220e725a6aca2d376a07aa8d, 0xf301a0077ea63befb9f0064ab698a6a4a133cd52
target_varies:
yes
classification:
target_varies
validation_json{
"sink": "CALL",
"errors": 0,
"status": "confirmed",
"attempts": 1,
"trace_id": "0x697a70e6d7c9f2a50064f5722c99c8e0741e54e5222b4ddf1eff9fc0728cd740",
"confirmed": true,
"trace_mode": "callTracer",
"call_targets": [
"0x56d13422dbf491dd928541d54aba001c1eb68ae1",
"0x5cf4288bf373bbe17f76948e39baf33b9f6ac2e0",
"0x67e81f6f08e75b225e7cfaab7264344009e744a6",
"0x70001e625f8c763be03ffb4135789c7116fef999",
"0x7063e83df5349833a21f744398fd39d42fbc00f8",
"0xaee254e8672f9cfd417cf8ad6cc35eb1be414340",
"0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2",
"0xce3890e8f5b0e4e7ebef4b7f4d9f12b110087232",
"0xd0b5bd9039527b07f2bf3af63019f3526a5166a9",
"0xefacd3261f3f2038220e725a6aca2d376a07aa8d",
"0xf301a0077ea63befb9f0064ab698a6a4a133cd52"
],
"matched_probe": null,
"target_varies": true,
"classification": "target_varies"
}
witness_json{
"notes": "heuristic witness; entrypoints are best-effort selectors with zeroed calldata",
"constraints": [],
"entrypoints": [
{
"calldata": "0xc38ec0b6",
"selector": "0xc38ec0b6",
"calldata_variants": [
"0xc38ec0b6",
"0xc38ec0b60000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xd552bc78",
"selector": "0xd552bc78",
"calldata_variants": [
"0xd552bc78",
"0xd552bc780000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xe70c11e5",
"selector": "0xe70c11e5",
"calldata_variants": [
"0xe70c11e5",
"0xe70c11e50000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xf2fde38b",
"selector": "0xf2fde38b",
"calldata_variants": [
"0xf2fde38b",
"0xf2fde38b0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xf887ea40",
"selector": "0xf887ea40",
"calldata_variants": [
"0xf887ea40",
"0xf887ea400000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xfa314ed4",
"selector": "0xfa314ed4",
"calldata_variants": [
"0xfa314ed4",
"0xfa314ed40000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x7a1f88e9",
"selector": "0x7a1f88e9",
"calldata_variants": [
"0x7a1f88e9",
"0x7a1f88e90000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x7e908958",
"selector": "0x7e908958",
"calldata_variants": [
"0x7e908958",
"0x7e9089580000000000000000000000000000000000000000000000000000000000000000"
]
}
]
}
evidence_json{
"examples": [
{
"pc": 1575,
"opcode": "CALL",
"returndata_checked": null,
"value_expression_category": "computed",
"target_expression_category": "computed"
},
{
"pc": 1715,
"opcode": "CALL",
"returndata_checked": null,
"value_expression_category": "computed",
"target_expression_category": "computed"
},
{
"pc": 4923,
"opcode": "CALL",
"returndata_checked": null,
"value_expression_category": "computed",
"target_expression_category": "computed"
}
],
"call_count": 5,
"guards_detected": [],
"untrusted_call_count": 5
}
|
| high | other | detector | ETH value transfer possible | 55 | yes | yes |
viewtrace_id: 0x697a70e6d7c9f2a50064f5722c99c8e0741e54e5222b4ddf1eff9fc0728cd740
call_targets:
0x56d13422dbf491dd928541d54aba001c1eb68ae1, 0x5cf4288bf373bbe17f76948e39baf33b9f6ac2e0, 0x67e81f6f08e75b225e7cfaab7264344009e744a6, 0x70001e625f8c763be03ffb4135789c7116fef999, 0x7063e83df5349833a21f744398fd39d42fbc00f8, 0xaee254e8672f9cfd417cf8ad6cc35eb1be414340, 0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2, 0xce3890e8f5b0e4e7ebef4b7f4d9f12b110087232, 0xd0b5bd9039527b07f2bf3af63019f3526a5166a9, 0xefacd3261f3f2038220e725a6aca2d376a07aa8d, 0xf301a0077ea63befb9f0064ab698a6a4a133cd52
target_varies:
yes
classification:
target_varies
validation_json{
"sink": "CALL",
"errors": 0,
"status": "confirmed",
"attempts": 1,
"trace_id": "0x697a70e6d7c9f2a50064f5722c99c8e0741e54e5222b4ddf1eff9fc0728cd740",
"confirmed": true,
"trace_mode": "callTracer",
"call_targets": [
"0x56d13422dbf491dd928541d54aba001c1eb68ae1",
"0x5cf4288bf373bbe17f76948e39baf33b9f6ac2e0",
"0x67e81f6f08e75b225e7cfaab7264344009e744a6",
"0x70001e625f8c763be03ffb4135789c7116fef999",
"0x7063e83df5349833a21f744398fd39d42fbc00f8",
"0xaee254e8672f9cfd417cf8ad6cc35eb1be414340",
"0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2",
"0xce3890e8f5b0e4e7ebef4b7f4d9f12b110087232",
"0xd0b5bd9039527b07f2bf3af63019f3526a5166a9",
"0xefacd3261f3f2038220e725a6aca2d376a07aa8d",
"0xf301a0077ea63befb9f0064ab698a6a4a133cd52"
],
"matched_probe": null,
"target_varies": true,
"classification": "target_varies"
}
witness_json{
"notes": "heuristic witness; entrypoints are best-effort selectors with zeroed calldata",
"constraints": [],
"entrypoints": [
{
"calldata": "0xc38ec0b6",
"selector": "0xc38ec0b6",
"calldata_variants": [
"0xc38ec0b6",
"0xc38ec0b60000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xd552bc78",
"selector": "0xd552bc78",
"calldata_variants": [
"0xd552bc78",
"0xd552bc780000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xe70c11e5",
"selector": "0xe70c11e5",
"calldata_variants": [
"0xe70c11e5",
"0xe70c11e50000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xf2fde38b",
"selector": "0xf2fde38b",
"calldata_variants": [
"0xf2fde38b",
"0xf2fde38b0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xf887ea40",
"selector": "0xf887ea40",
"calldata_variants": [
"0xf887ea40",
"0xf887ea400000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xfa314ed4",
"selector": "0xfa314ed4",
"calldata_variants": [
"0xfa314ed4",
"0xfa314ed40000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x7a1f88e9",
"selector": "0x7a1f88e9",
"calldata_variants": [
"0x7a1f88e9",
"0x7a1f88e90000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x7e908958",
"selector": "0x7e908958",
"calldata_variants": [
"0x7e908958",
"0x7e9089580000000000000000000000000000000000000000000000000000000000000000"
]
}
]
}
evidence_json{
"examples": [
{
"pc": 1575,
"opcode": "CALL",
"returndata_checked": null,
"value_expression_category": "computed",
"target_expression_category": "computed"
},
{
"pc": 1715,
"opcode": "CALL",
"returndata_checked": null,
"value_expression_category": "computed",
"target_expression_category": "computed"
},
{
"pc": 4923,
"opcode": "CALL",
"returndata_checked": null,
"value_expression_category": "computed",
"target_expression_category": "computed"
}
],
"eth_value_calls": 5,
"guards_detected": []
}
|
| high | other | slither | X7TreasurySplitter._sendBalance(X7TreasurySplitter.Outlet) (contracts/Contract.sol#318-337) sends eth to arbitrary user | 85 | no | — |
viewevidence_json{
"impact": "High",
"detector": "arbitrary-send-eth",
"elements": [
{
"name": "_sendBalance",
"type": "function",
"source_mapping": {
"lines": [
318,
319,
320,
321,
322,
323,
324,
325,
326,
327,
328,
329,
330,
331,
332,
333,
334,
335,
336,
337
],
"start": 13085,
"length": 516,
"ending_column": 1,
"is_dependency": false,
"filename_short": "contracts/Contract.sol",
"starting_column": 70,
"filename_absolute": "/tmp/slither-qwrvhvqp/contracts/Contract.sol",
"filename_relative": "contracts/Contract.sol"
},
"type_specific_fields": {
"parent": {
"name": "X7TreasurySplitter",
"type": "contract",
"source_mapping": {
"lines": [
109,
110,
111,
112,
113,
114,
115,
116,
117,
118,
119,
120,
121,
122,
123,
124,
125,
126,
127,
128,
129,
130,
131,
132,
133,
134,
135,
136,
137,
138,
139,
140,
141,
142,
143,
144,
145,
146,
147,
148,
149,
150,
151,
152,
153,
154,
155,
156,
157,
158,
159,
160,
161,
162,
163,
164,
165,
166,
167,
168,
169,
170,
171,
172,
173,
174,
175,
176,
177,
178,
179,
180,
181,
182,
183,
184,
185,
186,
187,
188,
189,
190,
191,
192,
193,
194,
195,
196,
197,
198,
199,
200,
201,
202,
203,
204,
205,
206,
207,
208,
209,
210,
211,
212,
213,
214,
215,
216,
217,
218,
219,
220,
221,
222,
223,
224,
225,
226,
227,
228,
229,
230,
231,
232,
233,
234,
235,
236,
237,
238,
239,
240,
241,
242,
243,
244,
245,
246,
247,
248,
249,
250,
251,
252,
253,
254,
255,
256,
257,
258,
259,
260,
261,
262,
263,
264,
265,
266,
267,
268,
269,
270,
271,
272,
273,
274,
275,
276,
277,
278,
279,
280,
281,
282,
283,
284,
285,
286,
287,
288,
289,
290,
291,
292,
293,
294,
295,
296,
297,
298,
299,
300,
301,
302,
303,
304,
305,
306,
307,
308,
309,
310,
311,
312,
313,
314,
315,
316,
317,
318,
319,
320,
321,
322,
323,
324,
325,
326,
327,
328,
329,
330,
331,
332,
333,
334,
335,
336,
337
],
"start": 3661,
"length": 9942,
"ending_column": 3,
"is_dependency": false,
"filename_short": "contracts/Contract.sol",
"starting_column": 6,
"filename_absolute": "/tmp/slither-qwrvhvqp/contracts/Contract.sol",
"filename_relative": "contracts/Contract.sol"
}
},
"signature": "_sendBalance(X7TreasurySplitter.Outlet)"
}
},
{
"name": "(success,None) = recipient.call{value: ethToSend}()",
"type": "node",
"source_mapping": {
"lines": [
332,
333
],
"start": 13425,
"length": 49,
"ending_column": 10,
"is_dependency": false,
"filename_short": "contracts/Contract.sol",
"starting_column": 14,
"filename_absolute": "/tmp/slither-qwrvhvqp/contracts/Contract.sol",
"filename_relative": "contracts/Contract.sol"
},
"type_specific_fields": {
"parent": {
"name": "_sendBalance",
"type": "function",
"source_mapping": {
"lines": [
318,
319,
320,
321,
322,
323,
324,
325,
326,
327,
328,
329,
330,
331,
332,
333,
334,
335,
336,
337
],
"start": 13085,
"length": 516,
"ending_column": 1,
"is_dependency": false,
"filename_short": "contracts/Contract.sol",
"starting_column": 70,
"filename_absolute": "/tmp/slither-qwrvhvqp/contracts/Contract.sol",
"filename_relative": "contracts/Contract.sol"
},
"type_specific_fields": {
"parent": {
"name": "X7TreasurySplitter",
"type": "contract",
"source_mapping": {
"lines": [
109,
110,
111,
112,
113,
114,
115,
116,
117,
118,
119,
120,
121,
122,
123,
124,
125,
126,
127,
128,
129,
130,
131,
132,
133,
134,
135,
136,
137,
138,
139,
140,
141,
142,
143,
144,
145,
146,
147,
148,
149,
150,
151,
152,
153,
154,
155,
156,
157,
158,
159,
160,
161,
162,
163,
164,
165,
166,
167,
168,
169,
170,
171,
172,
173,
174,
175,
176,
177,
178,
179,
180,
181,
182,
183,
184,
185,
186,
187,
188,
189,
190,
191,
192,
193,
194,
195,
196,
197,
198,
199,
200,
201,
202,
203,
204,
205,
206,
207,
208,
209,
210,
211,
212,
213,
214,
215,
216,
217,
218,
219,
220,
221,
222,
223,
224,
225,
226,
227,
228,
229,
230,
231,
232,
233,
234,
235,
236,
237,
238,
239,
240,
241,
242,
243,
244,
245,
246,
247,
248,
249,
250,
251,
252,
253,
254,
255,
256,
257,
258,
259,
260,
261,
262,
263,
264,
265,
266,
267,
268,
269,
270,
271,
272,
273,
274,
275,
276,
277,
278,
279,
280,
281,
282,
283,
284,
285,
286,
287,
288,
289,
290,
291,
292,
293,
294,
295,
296,
297,
298,
299,
300,
301,
302,
303,
304,
305,
306,
307,
308,
309,
310,
311,
312,
313,
314,
315,
316,
317,
318,
319,
320,
321,
322,
323,
324,
325,
326,
327,
328,
329,
330,
331,
332,
333,
334,
335,
336,
337
],
"start": 3661,
"length": 9942,
"ending_column": 3,
"is_dependency": false,
"filename_short": "contracts/Contract.sol",
"starting_column": 6,
"filename_absolute": "/tmp/slither-qwrvhvqp/contracts/Contract.sol",
"filename_relative": "contracts/Contract.sol"
}
},
"signature": "_sendBalance(X7TreasurySplitter.Outlet)"
}
}
}
}
],
"locations": [
{
"file": "contracts/Contract.sol",
"name": "_sendBalance",
"type": "function",
"lines": [
318,
319,
320,
321,
322,
323,
324,
325,
326,
327,
328,
329,
330,
331,
332,
333,
334,
335,
336,
337
]
},
{
"file": "contracts/Contract.sol",
"name": "(success,None) = recipient.call{value: ethToSend}()",
"type": "node",
"lines": [
332,
333
]
}
],
"description": "X7TreasurySplitter._sendBalance(X7TreasurySplitter.Outlet) (contracts/Contract.sol#318-337) sends eth to arbitrary user\n\tDangerous calls:\n\t- (success,None) = recipient.call{value: ethToSend}() (contracts/Contract.sol#332-333)"
}
|
| high | reentrancy | slither | Reentrancy in X7TreasurySplitter.pushAll() (contracts/Contract.sol#275-291): | 85 | no | — |
viewevidence_json{
"impact": "High",
"detector": "reentrancy-eth",
"elements": [
{
"name": "pushAll",
"type": "function",
"source_mapping": {
"lines": [
275,
276,
277,
278,
279,
280,
281,
282,
283,
284,
285,
286,
287,
288,
289,
290,
291
],
"start": 11688,
"length": 437,
"ending_column": 27,
"is_dependency": false,
"filename_short": "contracts/Contract.sol",
"starting_column": 49,
"filename_absolute": "/tmp/slither-qwrvhvqp/contracts/Contract.sol",
"filename_relative": "contracts/Contract.sol"
},
"type_specific_fields": {
"parent": {
"name": "X7TreasurySplitter",
"type": "contract",
"source_mapping": {
"lines": [
109,
110,
111,
112,
113,
114,
115,
116,
117,
118,
119,
120,
121,
122,
123,
124,
125,
126,
127,
128,
129,
130,
131,
132,
133,
134,
135,
136,
137,
138,
139,
140,
141,
142,
143,
144,
145,
146,
147,
148,
149,
150,
151,
152,
153,
154,
155,
156,
157,
158,
159,
160,
161,
162,
163,
164,
165,
166,
167,
168,
169,
170,
171,
172,
173,
174,
175,
176,
177,
178,
179,
180,
181,
182,
183,
184,
185,
186,
187,
188,
189,
190,
191,
192,
193,
194,
195,
196,
197,
198,
199,
200,
201,
202,
203,
204,
205,
206,
207,
208,
209,
210,
211,
212,
213,
214,
215,
216,
217,
218,
219,
220,
221,
222,
223,
224,
225,
226,
227,
228,
229,
230,
231,
232,
233,
234,
235,
236,
237,
238,
239,
240,
241,
242,
243,
244,
245,
246,
247,
248,
249,
250,
251,
252,
253,
254,
255,
256,
257,
258,
259,
260,
261,
262,
263,
264,
265,
266,
267,
268,
269,
270,
271,
272,
273,
274,
275,
276,
277,
278,
279,
280,
281,
282,
283,
284,
285,
286,
287,
288,
289,
290,
291,
292,
293,
294,
295,
296,
297,
298,
299,
300,
301,
302,
303,
304,
305,
306,
307,
308,
309,
310,
311,
312,
313,
314,
315,
316,
317,
318,
319,
320,
321,
322,
323,
324,
325,
326,
327,
328,
329,
330,
331,
332,
333,
334,
335,
336,
337
],
"start": 3661,
"length": 9942,
"ending_column": 3,
"is_dependency": false,
"filename_short": "contracts/Contract.sol",
"starting_column": 6,
"filename_absolute": "/tmp/slither-qwrvhvqp/contracts/Contract.sol",
"filename_relative": "contracts/Contract.sol"
}
},
"signature": "pushAll()"
}
},
{
"name": "_sendBalance(Outlet.X7DEV1)",
"type": "node",
"source_mapping": {
"lines": [
277,
278
],
"start": 11743,
"length": 27,
"ending_column": 19,
"is_dependency": false,
"filename_short": "contracts/Contract.sol",
"starting_column": 12,
"filename_absolute": "/tmp/slither-qwrvhvqp/contracts/Contract.sol",
"filename_relative": "contracts/Contract.sol"
},
"additional_fields": {
"underlying_type": "external_calls"
},
"type_specific_fields": {
"parent": {
"name": "pushAll",
"type": "function",
"source_mapping": {
"lines": [
275,
276,
277,
278,
279,
280,
281,
282,
283,
284,
285,
286,
287,
288,
289,
290,
291
],
"start": 11688,
"length": 437,
"ending_column": 27,
"is_dependency": false,
"filename_short": "contracts/Contract.sol",
"starting_column": 49,
"filename_absolute": "/tmp/slither-qwrvhvqp/contracts/Contract.sol",
"filename_relative": "contracts/Contract.sol"
},
"type_specific_fields": {
"parent": {
"name": "X7TreasurySplitter",
"type": "contract",
"source_mapping": {
"lines": [
109,
110,
111,
112,
113,
114,
115,
116,
117,
118,
119,
120,
121,
122,
123,
124,
125,
126,
127,
128,
129,
130,
131,
132,
133,
134,
135,
136,
137,
138,
139,
140,
141,
142,
143,
144,
145,
146,
147,
148,
149,
150,
151,
152,
153,
154,
155,
156,
157,
158,
159,
160,
161,
162,
163,
164,
165,
166,
167,
168,
169,
170,
171,
172,
173,
174,
175,
176,
177,
178,
179,
180,
181,
182,
183,
184,
185,
186,
187,
188,
189,
190,
191,
192,
193,
194,
195,
196,
197,
198,
199,
200,
201,
202,
203,
204,
205,
206,
207,
208,
209,
210,
211,
212,
213,
214,
215,
216,
217,
218,
219,
220,
221,
222,
223,
224,
225,
226,
227,
228,
229,
230,
231,
232,
233,
234,
235,
236,
237,
238,
239,
240,
241,
242,
243,
244,
245,
246,
247,
248,
249,
250,
251,
252,
253,
254,
255,
256,
257,
258,
259,
260,
261,
262,
263,
264,
265,
266,
267,
268,
269,
270,
271,
272,
273,
274,
275,
276,
277,
278,
279,
280,
281,
282,
283,
284,
285,
286,
287,
288,
289,
290,
291,
292,
293,
294,
295,
296,
297,
298,
299,
300,
301,
302,
303,
304,
305,
306,
307,
308,
309,
310,
311,
312,
313,
314,
315,
316,
317,
318,
319,
320,
321,
322,
323,
324,
325,
326,
327,
328,
329,
330,
331,
332,
333,
334,
335,
336,
337
],
"start": 3661,
"length": 9942,
"ending_column": 3,
"is_dependency": false,
"filename_short": "contracts/Contract.sol",
"starting_column": 6,
"filename_absolute": "/tmp/slither-qwrvhvqp/contracts/Contract.sol",
"filename_relative": "contracts/Contract.sol"
}
},
"signature": "pushAll()"
}
}
}
},
{
"name": "(success,None) = recipient.call{value: ethToSend}()",
"type": "node",
"source_mapping": {
"lines": [
332,
333
],
"start": 13425,
"length": 49,
"ending_column": 10,
"is_dependency": false,
"filename_short": "contracts/Contract.sol",
"starting_column": 14,
"filename_absolute": "/tmp/slither-qwrvhvqp/contracts/Contract.sol",
"filename_relative": "contracts/Contract.sol"
},
"additional_fields": {
"underlying_type": "external_calls_sending_eth"
},
"type_specific_fields": {
"parent": {
"name": "_sendBalance",
"type": "function",
"source_mapping": {
"lines": [
318,
319,
320,
321,
322,
323,
324,
325,
326,
327,
328,
329,
330,
331,
332,
333,
334,
335,
336,
337
],
"start": 13085,
"length": 516,
"ending_column": 1,
"is_dependency": false,
"filename_short": "contracts/Contract.sol",
"starting_column": 70,
"filename_absolute": "/tmp/slither-qwrvhvqp/contracts/Contract.sol",
"filename_relative": "contracts/Contract.sol"
},
"type_specific_fields": {
"parent": {
"name": "X7TreasurySplitter",
"type": "contract",
"source_mapping": {
"lines": [
109,
110,
111,
112,
113,
114,
115,
116,
117,
118,
119,
120,
121,
122,
123,
124,
125,
126,
127,
128,
129,
130,
131,
132,
133,
134,
135,
136,
137,
138,
139,
140,
141,
142,
143,
144,
145,
146,
147,
148,
149,
150,
151,
152,
153,
154,
155,
156,
157,
158,
159,
160,
161,
162,
163,
164,
165,
166,
167,
168,
169,
170,
171,
172,
173,
174,
175,
176,
177,
178,
179,
180,
181,
182,
183,
184,
185,
186,
187,
188,
189,
190,
191,
192,
193,
194,
195,
196,
197,
198,
199,
200,
201,
202,
203,
204,
205,
206,
207,
208,
209,
210,
211,
212,
213,
214,
215,
216,
217,
218,
219,
220,
221,
222,
223,
224,
225,
226,
227,
228,
229,
230,
231,
232,
233,
234,
235,
236,
237,
238,
239,
240,
241,
242,
243,
244,
245,
246,
247,
248,
249,
250,
251,
252,
253,
254,
255,
256,
257,
258,
259,
260,
261,
262,
263,
264,
265,
266,
267,
268,
269,
270,
271,
272,
273,
274,
275,
276,
277,
278,
279,
280,
281,
282,
283,
284,
285,
286,
287,
288,
289,
290,
291,
292,
293,
294,
295,
296,
297,
298,
299,
300,
301,
302,
303,
304,
305,
306,
307,
308,
309,
310,
311,
312,
313,
314,
315,
316,
317,
318,
319,
320,
321,
322,
323,
324,
325,
326,
327,
328,
329,
330,
331,
332,
333,
334,
335,
336,
337
],
"start": 3661,
"length": 9942,
"ending_column": 3,
"is_dependency": false,
"filename_short": "contracts/Contract.sol",
"starting_column": 6,
"filename_absolute": "/tmp/slither-qwrvhvqp/contracts/Contract.sol",
"filename_relative": "contracts/Contract.sol"
}
},
"signature": "_sendBalance(X7TreasurySplitter.Outlet)"
}
}
}
},
{
"name": "_sendBalance(Outlet.X7DEV2)",
"type": "node",
"source_mapping": {
"lines": [
278,
279,
280,
281
],
"start": 11780,
"length": 27,
"ending_column": 16,
"is_dependency": false,
"filename_short": "contracts/Contract.sol",
"starting_column": 29,
"filename_absolute": "/tmp/slither-qwrvhvqp/contracts/Contract.sol",
"filename_relative": "contracts/Contract.sol"
},
"additional_fields": {
"underlying_type": "external_calls"
},
"type_specific_fields": {
"parent": {
"name": "pushAll",
"type": "function",
"source_mapping": {
"lines": [
275,
276,
277,
278,
279,
280,
281,
282,
283,
284,
285,
286,
287,
288,
289,
290,
291
],
"start": 11688,
"length": 437,
"ending_column": 27,
"is_dependency": false,
"filename_short": "contracts/Contract.sol",
"starting_column": 49,
"filename_absolute": "/tmp/slither-qwrvhvqp/contracts/Contract.sol",
"filename_relative": "contracts/Contract.sol"
},
"type_specific_fields": {
"parent": {
"name": "X7TreasurySplitter",
"type": "contract",
"source_mapping": {
"lines": [
109,
110,
111,
112,
113,
114,
115,
116,
117,
118,
119,
120,
121,
122,
123,
124,
125,
126,
127,
128,
129,
130,
131,
132,
133,
134,
135,
136,
137,
138,
139,
140,
141,
142,
143,
144,
145,
146,
147,
148,
149,
150,
151,
152,
153,
154,
155,
156,
157,
158,
159,
160,
161,
162,
163,
164,
165,
166,
167,
168,
169,
170,
171,
172,
173,
174,
175,
176,
177,
178,
179,
180,
181,
182,
183,
184,
185,
186,
187,
188,
189,
190,
191,
192,
193,
194,
195,
196,
197,
198,
199,
200,
201,
202,
203,
204,
205,
206,
207,
208,
209,
210,
211,
212,
213,
214,
215,
216,
217,
218,
219,
220,
221,
222,
223,
224,
225,
226,
227,
228,
229,
230,
231,
232,
233,
234,
235,
236,
237,
238,
239,
240,
241,
242,
243,
244,
245,
246,
247,
248,
249,
250,
251,
252,
253,
254,
255,
256,
257,
258,
259,
260,
261,
262,
263,
264,
265,
266,
267,
268,
269,
270,
271,
272,
273,
274,
275,
276,
277,
278,
279,
280,
281,
282,
283,
284,
285,
286,
287,
288,
289,
290,
291,
292,
293,
294,
295,
296,
297,
298,
299,
300,
301,
302,
303,
304,
305,
306,
307,
308,
309,
310,
311,
312,
313,
314,
315,
316,
317,
318,
319,
320,
321,
322,
323,
324,
325,
326,
327,
328,
329,
330,
331,
332,
333,
334,
335,
336,
337
],
"start": 3661,
"length": 9942,
"ending_column": 3,
"is_dependency": false,
"filename_short": "contracts/Contract.sol",
"starting_column": 6,
"filename_absolute": "/tmp/slither-qwrvhvqp/contracts/Contract.sol",
"filename_relative": "contracts/Contract.sol"
}
},
"signature": "pushAll()"
}
}
}
},
{
"name": "(success,None) = recipient.call{value: ethToSend}()",
"type": "node",
"source_mapping": {
"lines": [
332,
333
],
"start": 13425,
"length": 49,
"ending_column": 10,
"is_dependency": false,
"filename_short": "contracts/Contract.sol",
"starting_column": 14,
"filename_absolute": "/tmp/slither-qwrvhvqp/contracts/Contract.sol",
"filename_relative": "contracts/Contract.sol"
},
"additional_fields": {
"underlying_type": "external_calls_sending_eth"
},
"type_specific_fields": {
"parent": {
"name": "_sendBalance",
"type": "function",
"source_mapping": {
"lines": [
318,
319,
320,
321,
322,
323,
324,
325,
326,
327,
328,
329,
330,
331,
332,
333,
334,
335,
336,
337
],
"start": 13085,
"length": 516,
"ending_column": 1,
"is_dependency": false,
"filename_short": "contracts/Contract.sol",
"starting_column": 70,
"filename_absolute": "/tmp/slither-qwrvhvqp/contracts/Contract.sol",
"filename_relative": "contracts/Contract.sol"
},
"type_specific_fields": {
"parent": {
"name": "X7TreasurySplitter",
"type": "contract",
"source_mapping": {
"lines": [
109,
110,
111,
112,
113,
114,
115,
116,
117,
118,
119,
120,
121,
122,
123,
124,
125,
126,
127,
128,
129,
130,
131,
132,
133,
134,
135,
136,
137,
138,
139,
140,
141,
142,
143,
144,
145,
146,
147,
148,
149,
150,
151,
152,
153,
154,
155,
156,
157,
158,
159,
160,
161,
162,
163,
164,
165,
166,
167,
168,
169,
170,
171,
172,
173,
174,
175,
176,
177,
178,
179,
180,
181,
182,
183,
184,
185,
186,
187,
188,
189,
190,
191,
192,
193,
194,
195,
196,
197,
198,
199,
200,
201,
202,
203,
204,
205,
206,
207,
208,
209,
210,
211,
212,
213,
214,
215,
216,
217,
218,
219,
220,
221,
222,
223,
224,
225,
226,
227,
228,
229,
230,
231,
232,
233,
234,
235,
236,
237,
238,
239,
240,
241,
242,
243,
244,
245,
246,
247,
248,
249,
250,
251,
252,
253,
254,
255,
256,
257,
258,
259,
260,
261,
262,
263,
264,
265,
266,
267,
268,
269,
270,
271,
272,
273,
274,
275,
276,
277,
278,
279,
280,
281,
282,
283,
284,
285,
286,
287,
288,
289,
290,
291,
292,
293,
294,
295,
296,
297,
298,
299,
300,
301,
302,
303,
304,
305,
306,
307,
308,
309,
310,
311,
312,
313,
314,
315,
316,
317,
318,
319,
320,
321,
322,
323,
324,
325,
326,
327,
328,
329,
330,
331,
332,
333,
334,
335,
336,
337
],
"start": 3661,
"length": 9942,
"ending_column": 3,
"is_dependency": false,
"filename_short": "contracts/Contract.sol",
"starting_column": 6,
"filename_absolute": "/tmp/slither-qwrvhvqp/contracts/Contract.sol",
"filename_relative": "contracts/Contract.sol"
}
},
"signature": "_sendBalance(X7TreasurySplitter.Outlet)"
}
}
}
}
],
"locations": [
{
"file": "contracts/Contract.sol",
"name": "pushAll",
"type": "function",
"lines": [
275,
276,
277,
278,
279,
280,
281,
282,
283,
284,
285,
286,
287,
288,
289,
290,
291
]
},
{
"file": "contracts/Contract.sol",
"name": "_sendBalance(Outlet.X7DEV1)",
"type": "node",
"lines": [
277,
278
]
},
{
"file": "contracts/Contract.sol",
"name": "(success,None) = recipient.call{value: ethToSend}()",
"type": "node",
"lines": [
332,
333
]
},
{
"file": "contracts/Contract.sol",
"name": "_sendBalance(Outlet.X7DEV2)",
"type": "node",
"lines": [
278,
279,
280,
281
]
},
{
"file": "contracts/Contract.sol",
"name": "(success,None) = recipient.call{value: ethToSend}()",
"type": "node",
"lines": [
332,
333
]
},
{
"file": "contracts/Contract.sol",
"name": "_sendBalance(Outlet.X7DEV3)",
"type": "node",
"lines": [
281,
282
]
},
{
"file": "contracts/Contract.sol",
"name": "(success,None) = recipient.call{value: ethToSend}()",
"type": "node",
"lines": [
332,
333
]
},
{
"file": "contracts/Contract.sol",
"name": "_sendBalance(Outlet.X7DEV4)",
"type": "node",
"lines": [
282
]
},
{
"file": "contracts/Contract.sol",
"name": "(success,None) = recipient.call{value: ethToSend}()",
"type": "node",
"lines": [
332,
333
]
},
{
"file": "contracts/Contract.sol",
"name": "_sendBalance(Outlet.X7DEV5)",
"type": "node",
"lines": [
283
]
},
{
"file": "contracts/Contract.sol",
"name": "(success,None) = recipient.call{value: ethToSend}()",
"type": "node",
"lines": [
332,
333
]
},
{
"file": "contracts/Contract.sol",
"name": "_sendBalance(Outlet.X7DEV6)",
"type": "node",
"lines": [
283,
284
]
},
{
"file": "contracts/Contract.sol",
"name": "(success,None) = recipient.call{value: ethToSend}()",
"type": "node",
"lines": [
332,
333
]
},
{
"file": "contracts/Contract.sol",
"name": "_sendBalance(Outlet.X7DEV7)",
"type": "node",
"lines": [
285,
286,
287
]
},
{
"file": "contracts/Contract.sol",
"name": "(success,None) = recipient.call{value: ethToSend}()",
"type": "node",
"lines": [
332,
333
]
},
{
"file": "contracts/Contract.sol",
"name": "_sendBalance(Outlet.REWARD_POOL)",
"type": "node",
"lines": [
287,
288,
289
]
},
{
"file": "contracts/Contract.sol",
"name": "(success,None) = recipient.call{value: ethToSend}()",
"type": "node",
"lines": [
332,
333
]
},
{
"file": "contracts/Contract.sol",
"name": "_sendBalance(Outlet.REWARD_POOL)",
"type": "node",
"lines": [
287,
288,
289
]
},
{
"file": "contracts/Contract.sol",
"name": "outletBalance[outlet] = 0",
"type": "node",
"lines": [
326,
327
]
},
{
"file": "contracts/Contract.sol",
"name": "outletBalance[outlet] += ethToSend",
"type": "node",
"lines": [
334
]
},
{
"file": "contracts/Contract.sol",
"name": "_sendBalance(Outlet.REWARD_POOL)",
"type": "node",
"lines": [
287,
288,
289
]
},
{
"file": "contracts/Contract.sol",
"name": "reservedETH -= ethToSend",
"type": "node",
"lines": [
328,
329,
330,
331,
332
]
},
{
"file": "contracts/Contract.sol",
"name": "reservedETH += ethToSend",
"type": "node",
"lines": [
335,
336
]
}
],
"description": "Reentrancy in X7TreasurySplitter.pushAll() (contracts/Contract.sol#275-291):\n\tExternal calls:\n\t- _sendBalance(Outlet.X7DEV1) (contracts/Contract.sol#277-278)\n\t\t- (success,None) = recipient.call{value: ethToSend}() (contracts/Contract.sol#332-333)\n\t- _sendBalance(Outlet.X7DEV2) (contracts/Contract.sol#278-281)\n\t\t- (success,None) = recipient.call{value: ethToSend}() (contracts/Contract.sol#332-333)\n\t- _sendBalance(Outlet.X7DEV3) (contracts/Contract.sol#281-282)\n\t\t- (success,None) = recipient.call{value: ethToSend}() (contracts/Contract.sol#332-333)\n\t- _sendBalance(Outlet.X7DEV4) (contracts/Contract.sol#282)\n\t\t- (success,None) = recipient.call{value: ethToSend}() (contracts/Contract.sol#332-333)\n\t- _sendBalance(Outlet.X7DEV5) (contracts/Contract.sol#283)\n\t\t- (success,None) = recipient.call{value: ethToSend}() (contracts/Contract.sol#332-333)\n\t- _sendBalance(Outlet.X7DEV6) (contracts/Contract.sol#283-284)\n\t\t- (success,None) = recipient.call{value: ethToSend}() (contracts/Contract.sol#332-333)\n\t- _sendBalance(Outlet.X7DEV7) (contracts/Contract.sol#285-287)\n\t\t- (success,None) = recipient.call{value: ethToSend}() (contracts/Contract.sol#332-333)\n\t- _sendBalance(Outlet.REWARD_POOL) (contracts/Contract.sol#287-289)\n\t\t- (success,None) = recipient.call{value: ethToSend}() (contracts/Contract.sol#332-333)\n\tState variables written after the call(s):\n\t- _sendBalance(Outlet.REWARD_POOL) (contracts/Contract.sol#287-289)\n\t\t- outletBalance[outlet] = 0 (contracts/Contract.sol#326-327)\n\t\t- outletBalance[outlet] += ethToSend (contracts/Contract.sol#334)\n\tX7TreasurySplitter.outletBalance (contracts/Contract.sol#125-128) can be used in cross function reentrancies:\n\t- X7TreasurySplitter._sendBalance(X7TreasurySplitter.Outlet) (contracts/Contract.sol#318-337)\n\t- X7TreasurySplitter.divvyUp() (contracts/Contract.sol#184-211)\n\t- X7TreasurySplitter.outletBalance (contracts/Contract.sol#125-128)\n\t- _sendBalance(Outlet.REWARD_POOL) (contracts/Contract.sol#287-289)\n\t\t- reservedETH -= ethToSend (contracts/Contract.sol#328-332)\n\t\t- reservedETH += ethToSend (contracts/Contract.sol#335-336)\n\tX7TreasurySplitter.reservedETH (contracts/Contract.sol#122-123) can be used in cross function reentrancies:\n\t- X7TreasurySplitter._sendBalance(X7TreasurySplitter.Outlet) (contracts/Contract.sol#318-337)\n\t- X7TreasurySplitter.divvyUp() (contracts/Contract.sol#184-211)\n\t- X7TreasurySplitter.reservedETH (contracts/Contract.sol#122-123)"
}
|
| high | reentrancy | slither | Reentrancy in X7TreasurySplitter.pushAll() (contracts/Contract.sol#275-291): | 85 | no | — |
viewevidence_json{
"impact": "High",
"detector": "reentrancy-eth",
"elements": [
{
"name": "pushAll",
"type": "function",
"source_mapping": {
"lines": [
275,
276,
277,
278,
279,
280,
281,
282,
283,
284,
285,
286,
287,
288,
289,
290,
291
],
"start": 11688,
"length": 437,
"ending_column": 27,
"is_dependency": false,
"filename_short": "contracts/Contract.sol",
"starting_column": 49,
"filename_absolute": "/tmp/slither-qwrvhvqp/contracts/Contract.sol",
"filename_relative": "contracts/Contract.sol"
},
"type_specific_fields": {
"parent": {
"name": "X7TreasurySplitter",
"type": "contract",
"source_mapping": {
"lines": [
109,
110,
111,
112,
113,
114,
115,
116,
117,
118,
119,
120,
121,
122,
123,
124,
125,
126,
127,
128,
129,
130,
131,
132,
133,
134,
135,
136,
137,
138,
139,
140,
141,
142,
143,
144,
145,
146,
147,
148,
149,
150,
151,
152,
153,
154,
155,
156,
157,
158,
159,
160,
161,
162,
163,
164,
165,
166,
167,
168,
169,
170,
171,
172,
173,
174,
175,
176,
177,
178,
179,
180,
181,
182,
183,
184,
185,
186,
187,
188,
189,
190,
191,
192,
193,
194,
195,
196,
197,
198,
199,
200,
201,
202,
203,
204,
205,
206,
207,
208,
209,
210,
211,
212,
213,
214,
215,
216,
217,
218,
219,
220,
221,
222,
223,
224,
225,
226,
227,
228,
229,
230,
231,
232,
233,
234,
235,
236,
237,
238,
239,
240,
241,
242,
243,
244,
245,
246,
247,
248,
249,
250,
251,
252,
253,
254,
255,
256,
257,
258,
259,
260,
261,
262,
263,
264,
265,
266,
267,
268,
269,
270,
271,
272,
273,
274,
275,
276,
277,
278,
279,
280,
281,
282,
283,
284,
285,
286,
287,
288,
289,
290,
291,
292,
293,
294,
295,
296,
297,
298,
299,
300,
301,
302,
303,
304,
305,
306,
307,
308,
309,
310,
311,
312,
313,
314,
315,
316,
317,
318,
319,
320,
321,
322,
323,
324,
325,
326,
327,
328,
329,
330,
331,
332,
333,
334,
335,
336,
337
],
"start": 3661,
"length": 9942,
"ending_column": 3,
"is_dependency": false,
"filename_short": "contracts/Contract.sol",
"starting_column": 6,
"filename_absolute": "/tmp/slither-qwrvhvqp/contracts/Contract.sol",
"filename_relative": "contracts/Contract.sol"
}
},
"signature": "pushAll()"
}
},
{
"name": "_sendBalance(Outlet.X7DEV1)",
"type": "node",
"source_mapping": {
"lines": [
277,
278
],
"start": 11743,
"length": 27,
"ending_column": 19,
"is_dependency": false,
"filename_short": "contracts/Contract.sol",
"starting_column": 12,
"filename_absolute": "/tmp/slither-qwrvhvqp/contracts/Contract.sol",
"filename_relative": "contracts/Contract.sol"
},
"additional_fields": {
"underlying_type": "external_calls"
},
"type_specific_fields": {
"parent": {
"name": "pushAll",
"type": "function",
"source_mapping": {
"lines": [
275,
276,
277,
278,
279,
280,
281,
282,
283,
284,
285,
286,
287,
288,
289,
290,
291
],
"start": 11688,
"length": 437,
"ending_column": 27,
"is_dependency": false,
"filename_short": "contracts/Contract.sol",
"starting_column": 49,
"filename_absolute": "/tmp/slither-qwrvhvqp/contracts/Contract.sol",
"filename_relative": "contracts/Contract.sol"
},
"type_specific_fields": {
"parent": {
"name": "X7TreasurySplitter",
"type": "contract",
"source_mapping": {
"lines": [
109,
110,
111,
112,
113,
114,
115,
116,
117,
118,
119,
120,
121,
122,
123,
124,
125,
126,
127,
128,
129,
130,
131,
132,
133,
134,
135,
136,
137,
138,
139,
140,
141,
142,
143,
144,
145,
146,
147,
148,
149,
150,
151,
152,
153,
154,
155,
156,
157,
158,
159,
160,
161,
162,
163,
164,
165,
166,
167,
168,
169,
170,
171,
172,
173,
174,
175,
176,
177,
178,
179,
180,
181,
182,
183,
184,
185,
186,
187,
188,
189,
190,
191,
192,
193,
194,
195,
196,
197,
198,
199,
200,
201,
202,
203,
204,
205,
206,
207,
208,
209,
210,
211,
212,
213,
214,
215,
216,
217,
218,
219,
220,
221,
222,
223,
224,
225,
226,
227,
228,
229,
230,
231,
232,
233,
234,
235,
236,
237,
238,
239,
240,
241,
242,
243,
244,
245,
246,
247,
248,
249,
250,
251,
252,
253,
254,
255,
256,
257,
258,
259,
260,
261,
262,
263,
264,
265,
266,
267,
268,
269,
270,
271,
272,
273,
274,
275,
276,
277,
278,
279,
280,
281,
282,
283,
284,
285,
286,
287,
288,
289,
290,
291,
292,
293,
294,
295,
296,
297,
298,
299,
300,
301,
302,
303,
304,
305,
306,
307,
308,
309,
310,
311,
312,
313,
314,
315,
316,
317,
318,
319,
320,
321,
322,
323,
324,
325,
326,
327,
328,
329,
330,
331,
332,
333,
334,
335,
336,
337
],
"start": 3661,
"length": 9942,
"ending_column": 3,
"is_dependency": false,
"filename_short": "contracts/Contract.sol",
"starting_column": 6,
"filename_absolute": "/tmp/slither-qwrvhvqp/contracts/Contract.sol",
"filename_relative": "contracts/Contract.sol"
}
},
"signature": "pushAll()"
}
}
}
},
{
"name": "(success,None) = recipient.call{value: ethToSend}()",
"type": "node",
"source_mapping": {
"lines": [
332,
333
],
"start": 13425,
"length": 49,
"ending_column": 10,
"is_dependency": false,
"filename_short": "contracts/Contract.sol",
"starting_column": 14,
"filename_absolute": "/tmp/slither-qwrvhvqp/contracts/Contract.sol",
"filename_relative": "contracts/Contract.sol"
},
"additional_fields": {
"underlying_type": "external_calls_sending_eth"
},
"type_specific_fields": {
"parent": {
"name": "_sendBalance",
"type": "function",
"source_mapping": {
"lines": [
318,
319,
320,
321,
322,
323,
324,
325,
326,
327,
328,
329,
330,
331,
332,
333,
334,
335,
336,
337
],
"start": 13085,
"length": 516,
"ending_column": 1,
"is_dependency": false,
"filename_short": "contracts/Contract.sol",
"starting_column": 70,
"filename_absolute": "/tmp/slither-qwrvhvqp/contracts/Contract.sol",
"filename_relative": "contracts/Contract.sol"
},
"type_specific_fields": {
"parent": {
"name": "X7TreasurySplitter",
"type": "contract",
"source_mapping": {
"lines": [
109,
110,
111,
112,
113,
114,
115,
116,
117,
118,
119,
120,
121,
122,
123,
124,
125,
126,
127,
128,
129,
130,
131,
132,
133,
134,
135,
136,
137,
138,
139,
140,
141,
142,
143,
144,
145,
146,
147,
148,
149,
150,
151,
152,
153,
154,
155,
156,
157,
158,
159,
160,
161,
162,
163,
164,
165,
166,
167,
168,
169,
170,
171,
172,
173,
174,
175,
176,
177,
178,
179,
180,
181,
182,
183,
184,
185,
186,
187,
188,
189,
190,
191,
192,
193,
194,
195,
196,
197,
198,
199,
200,
201,
202,
203,
204,
205,
206,
207,
208,
209,
210,
211,
212,
213,
214,
215,
216,
217,
218,
219,
220,
221,
222,
223,
224,
225,
226,
227,
228,
229,
230,
231,
232,
233,
234,
235,
236,
237,
238,
239,
240,
241,
242,
243,
244,
245,
246,
247,
248,
249,
250,
251,
252,
253,
254,
255,
256,
257,
258,
259,
260,
261,
262,
263,
264,
265,
266,
267,
268,
269,
270,
271,
272,
273,
274,
275,
276,
277,
278,
279,
280,
281,
282,
283,
284,
285,
286,
287,
288,
289,
290,
291,
292,
293,
294,
295,
296,
297,
298,
299,
300,
301,
302,
303,
304,
305,
306,
307,
308,
309,
310,
311,
312,
313,
314,
315,
316,
317,
318,
319,
320,
321,
322,
323,
324,
325,
326,
327,
328,
329,
330,
331,
332,
333,
334,
335,
336,
337
],
"start": 3661,
"length": 9942,
"ending_column": 3,
"is_dependency": false,
"filename_short": "contracts/Contract.sol",
"starting_column": 6,
"filename_absolute": "/tmp/slither-qwrvhvqp/contracts/Contract.sol",
"filename_relative": "contracts/Contract.sol"
}
},
"signature": "_sendBalance(X7TreasurySplitter.Outlet)"
}
}
}
},
{
"name": "_sendBalance(Outlet.X7DEV2)",
"type": "node",
"source_mapping": {
"lines": [
278,
279,
280,
281
],
"start": 11780,
"length": 27,
"ending_column": 16,
"is_dependency": false,
"filename_short": "contracts/Contract.sol",
"starting_column": 29,
"filename_absolute": "/tmp/slither-qwrvhvqp/contracts/Contract.sol",
"filename_relative": "contracts/Contract.sol"
},
"additional_fields": {
"underlying_type": "external_calls"
},
"type_specific_fields": {
"parent": {
"name": "pushAll",
"type": "function",
"source_mapping": {
"lines": [
275,
276,
277,
278,
279,
280,
281,
282,
283,
284,
285,
286,
287,
288,
289,
290,
291
],
"start": 11688,
"length": 437,
"ending_column": 27,
"is_dependency": false,
"filename_short": "contracts/Contract.sol",
"starting_column": 49,
"filename_absolute": "/tmp/slither-qwrvhvqp/contracts/Contract.sol",
"filename_relative": "contracts/Contract.sol"
},
"type_specific_fields": {
"parent": {
"name": "X7TreasurySplitter",
"type": "contract",
"source_mapping": {
"lines": [
109,
110,
111,
112,
113,
114,
115,
116,
117,
118,
119,
120,
121,
122,
123,
124,
125,
126,
127,
128,
129,
130,
131,
132,
133,
134,
135,
136,
137,
138,
139,
140,
141,
142,
143,
144,
145,
146,
147,
148,
149,
150,
151,
152,
153,
154,
155,
156,
157,
158,
159,
160,
161,
162,
163,
164,
165,
166,
167,
168,
169,
170,
171,
172,
173,
174,
175,
176,
177,
178,
179,
180,
181,
182,
183,
184,
185,
186,
187,
188,
189,
190,
191,
192,
193,
194,
195,
196,
197,
198,
199,
200,
201,
202,
203,
204,
205,
206,
207,
208,
209,
210,
211,
212,
213,
214,
215,
216,
217,
218,
219,
220,
221,
222,
223,
224,
225,
226,
227,
228,
229,
230,
231,
232,
233,
234,
235,
236,
237,
238,
239,
240,
241,
242,
243,
244,
245,
246,
247,
248,
249,
250,
251,
252,
253,
254,
255,
256,
257,
258,
259,
260,
261,
262,
263,
264,
265,
266,
267,
268,
269,
270,
271,
272,
273,
274,
275,
276,
277,
278,
279,
280,
281,
282,
283,
284,
285,
286,
287,
288,
289,
290,
291,
292,
293,
294,
295,
296,
297,
298,
299,
300,
301,
302,
303,
304,
305,
306,
307,
308,
309,
310,
311,
312,
313,
314,
315,
316,
317,
318,
319,
320,
321,
322,
323,
324,
325,
326,
327,
328,
329,
330,
331,
332,
333,
334,
335,
336,
337
],
"start": 3661,
"length": 9942,
"ending_column": 3,
"is_dependency": false,
"filename_short": "contracts/Contract.sol",
"starting_column": 6,
"filename_absolute": "/tmp/slither-qwrvhvqp/contracts/Contract.sol",
"filename_relative": "contracts/Contract.sol"
}
},
"signature": "pushAll()"
}
}
}
},
{
"name": "(success,None) = recipient.call{value: ethToSend}()",
"type": "node",
"source_mapping": {
"lines": [
332,
333
],
"start": 13425,
"length": 49,
"ending_column": 10,
"is_dependency": false,
"filename_short": "contracts/Contract.sol",
"starting_column": 14,
"filename_absolute": "/tmp/slither-qwrvhvqp/contracts/Contract.sol",
"filename_relative": "contracts/Contract.sol"
},
"additional_fields": {
"underlying_type": "external_calls_sending_eth"
},
"type_specific_fields": {
"parent": {
"name": "_sendBalance",
"type": "function",
"source_mapping": {
"lines": [
318,
319,
320,
321,
322,
323,
324,
325,
326,
327,
328,
329,
330,
331,
332,
333,
334,
335,
336,
337
],
"start": 13085,
"length": 516,
"ending_column": 1,
"is_dependency": false,
"filename_short": "contracts/Contract.sol",
"starting_column": 70,
"filename_absolute": "/tmp/slither-qwrvhvqp/contracts/Contract.sol",
"filename_relative": "contracts/Contract.sol"
},
"type_specific_fields": {
"parent": {
"name": "X7TreasurySplitter",
"type": "contract",
"source_mapping": {
"lines": [
109,
110,
111,
112,
113,
114,
115,
116,
117,
118,
119,
120,
121,
122,
123,
124,
125,
126,
127,
128,
129,
130,
131,
132,
133,
134,
135,
136,
137,
138,
139,
140,
141,
142,
143,
144,
145,
146,
147,
148,
149,
150,
151,
152,
153,
154,
155,
156,
157,
158,
159,
160,
161,
162,
163,
164,
165,
166,
167,
168,
169,
170,
171,
172,
173,
174,
175,
176,
177,
178,
179,
180,
181,
182,
183,
184,
185,
186,
187,
188,
189,
190,
191,
192,
193,
194,
195,
196,
197,
198,
199,
200,
201,
202,
203,
204,
205,
206,
207,
208,
209,
210,
211,
212,
213,
214,
215,
216,
217,
218,
219,
220,
221,
222,
223,
224,
225,
226,
227,
228,
229,
230,
231,
232,
233,
234,
235,
236,
237,
238,
239,
240,
241,
242,
243,
244,
245,
246,
247,
248,
249,
250,
251,
252,
253,
254,
255,
256,
257,
258,
259,
260,
261,
262,
263,
264,
265,
266,
267,
268,
269,
270,
271,
272,
273,
274,
275,
276,
277,
278,
279,
280,
281,
282,
283,
284,
285,
286,
287,
288,
289,
290,
291,
292,
293,
294,
295,
296,
297,
298,
299,
300,
301,
302,
303,
304,
305,
306,
307,
308,
309,
310,
311,
312,
313,
314,
315,
316,
317,
318,
319,
320,
321,
322,
323,
324,
325,
326,
327,
328,
329,
330,
331,
332,
333,
334,
335,
336,
337
],
"start": 3661,
"length": 9942,
"ending_column": 3,
"is_dependency": false,
"filename_short": "contracts/Contract.sol",
"starting_column": 6,
"filename_absolute": "/tmp/slither-qwrvhvqp/contracts/Contract.sol",
"filename_relative": "contracts/Contract.sol"
}
},
"signature": "_sendBalance(X7TreasurySplitter.Outlet)"
}
}
}
}
],
"locations": [
{
"file": "contracts/Contract.sol",
"name": "pushAll",
"type": "function",
"lines": [
275,
276,
277,
278,
279,
280,
281,
282,
283,
284,
285,
286,
287,
288,
289,
290,
291
]
},
{
"file": "contracts/Contract.sol",
"name": "_sendBalance(Outlet.X7DEV1)",
"type": "node",
"lines": [
277,
278
]
},
{
"file": "contracts/Contract.sol",
"name": "(success,None) = recipient.call{value: ethToSend}()",
"type": "node",
"lines": [
332,
333
]
},
{
"file": "contracts/Contract.sol",
"name": "_sendBalance(Outlet.X7DEV2)",
"type": "node",
"lines": [
278,
279,
280,
281
]
},
{
"file": "contracts/Contract.sol",
"name": "(success,None) = recipient.call{value: ethToSend}()",
"type": "node",
"lines": [
332,
333
]
},
{
"file": "contracts/Contract.sol",
"name": "_sendBalance(Outlet.X7DEV3)",
"type": "node",
"lines": [
281,
282
]
},
{
"file": "contracts/Contract.sol",
"name": "(success,None) = recipient.call{value: ethToSend}()",
"type": "node",
"lines": [
332,
333
]
},
{
"file": "contracts/Contract.sol",
"name": "_sendBalance(Outlet.X7DEV4)",
"type": "node",
"lines": [
282
]
},
{
"file": "contracts/Contract.sol",
"name": "(success,None) = recipient.call{value: ethToSend}()",
"type": "node",
"lines": [
332,
333
]
},
{
"file": "contracts/Contract.sol",
"name": "_sendBalance(Outlet.X7DEV5)",
"type": "node",
"lines": [
283
]
},
{
"file": "contracts/Contract.sol",
"name": "(success,None) = recipient.call{value: ethToSend}()",
"type": "node",
"lines": [
332,
333
]
},
{
"file": "contracts/Contract.sol",
"name": "_sendBalance(Outlet.X7DEV6)",
"type": "node",
"lines": [
283,
284
]
},
{
"file": "contracts/Contract.sol",
"name": "(success,None) = recipient.call{value: ethToSend}()",
"type": "node",
"lines": [
332,
333
]
},
{
"file": "contracts/Contract.sol",
"name": "_sendBalance(Outlet.X7DEV6)",
"type": "node",
"lines": [
283,
284
]
},
{
"file": "contracts/Contract.sol",
"name": "outletBalance[outlet] = 0",
"type": "node",
"lines": [
326,
327
]
},
{
"file": "contracts/Contract.sol",
"name": "outletBalance[outlet] += ethToSend",
"type": "node",
"lines": [
334
]
},
{
"file": "contracts/Contract.sol",
"name": "_sendBalance(Outlet.X7DEV6)",
"type": "node",
"lines": [
283,
284
]
},
{
"file": "contracts/Contract.sol",
"name": "reservedETH -= ethToSend",
"type": "node",
"lines": [
328,
329,
330,
331,
332
]
},
{
"file": "contracts/Contract.sol",
"name": "reservedETH += ethToSend",
"type": "node",
"lines": [
335,
336
]
}
],
"description": "Reentrancy in X7TreasurySplitter.pushAll() (contracts/Contract.sol#275-291):\n\tExternal calls:\n\t- _sendBalance(Outlet.X7DEV1) (contracts/Contract.sol#277-278)\n\t\t- (success,None) = recipient.call{value: ethToSend}() (contracts/Contract.sol#332-333)\n\t- _sendBalance(Outlet.X7DEV2) (contracts/Contract.sol#278-281)\n\t\t- (success,None) = recipient.call{value: ethToSend}() (contracts/Contract.sol#332-333)\n\t- _sendBalance(Outlet.X7DEV3) (contracts/Contract.sol#281-282)\n\t\t- (success,None) = recipient.call{value: ethToSend}() (contracts/Contract.sol#332-333)\n\t- _sendBalance(Outlet.X7DEV4) (contracts/Contract.sol#282)\n\t\t- (success,None) = recipient.call{value: ethToSend}() (contracts/Contract.sol#332-333)\n\t- _sendBalance(Outlet.X7DEV5) (contracts/Contract.sol#283)\n\t\t- (success,None) = recipient.call{value: ethToSend}() (contracts/Contract.sol#332-333)\n\t- _sendBalance(Outlet.X7DEV6) (contracts/Contract.sol#283-284)\n\t\t- (success,None) = recipient.call{value: ethToSend}() (contracts/Contract.sol#332-333)\n\tState variables written after the call(s):\n\t- _sendBalance(Outlet.X7DEV6) (contracts/Contract.sol#283-284)\n\t\t- outletBalance[outlet] = 0 (contracts/Contract.sol#326-327)\n\t\t- outletBalance[outlet] += ethToSend (contracts/Contract.sol#334)\n\tX7TreasurySplitter.outletBalance (contracts/Contract.sol#125-128) can be used in cross function reentrancies:\n\t- X7TreasurySplitter._sendBalance(X7TreasurySplitter.Outlet) (contracts/Contract.sol#318-337)\n\t- X7TreasurySplitter.divvyUp() (contracts/Contract.sol#184-211)\n\t- X7TreasurySplitter.outletBalance (contracts/Contract.sol#125-128)\n\t- _sendBalance(Outlet.X7DEV6) (contracts/Contract.sol#283-284)\n\t\t- reservedETH -= ethToSend (contracts/Contract.sol#328-332)\n\t\t- reservedETH += ethToSend (contracts/Contract.sol#335-336)\n\tX7TreasurySplitter.reservedETH (contracts/Contract.sol#122-123) can be used in cross function reentrancies:\n\t- X7TreasurySplitter._sendBalance(X7TreasurySplitter.Outlet) (contracts/Contract.sol#318-337)\n\t- X7TreasurySplitter.divvyUp() (contracts/Contract.sol#184-211)\n\t- X7TreasurySplitter.reservedETH (contracts/Contract.sol#122-123)"
}
|
| high | reentrancy | slither | Reentrancy in X7TreasurySplitter.pushAll() (contracts/Contract.sol#275-291): | 85 | no | — |
viewevidence_json{
"impact": "High",
"detector": "reentrancy-eth",
"elements": [
{
"name": "pushAll",
"type": "function",
"source_mapping": {
"lines": [
275,
276,
277,
278,
279,
280,
281,
282,
283,
284,
285,
286,
287,
288,
289,
290,
291
],
"start": 11688,
"length": 437,
"ending_column": 27,
"is_dependency": false,
"filename_short": "contracts/Contract.sol",
"starting_column": 49,
"filename_absolute": "/tmp/slither-qwrvhvqp/contracts/Contract.sol",
"filename_relative": "contracts/Contract.sol"
},
"type_specific_fields": {
"parent": {
"name": "X7TreasurySplitter",
"type": "contract",
"source_mapping": {
"lines": [
109,
110,
111,
112,
113,
114,
115,
116,
117,
118,
119,
120,
121,
122,
123,
124,
125,
126,
127,
128,
129,
130,
131,
132,
133,
134,
135,
136,
137,
138,
139,
140,
141,
142,
143,
144,
145,
146,
147,
148,
149,
150,
151,
152,
153,
154,
155,
156,
157,
158,
159,
160,
161,
162,
163,
164,
165,
166,
167,
168,
169,
170,
171,
172,
173,
174,
175,
176,
177,
178,
179,
180,
181,
182,
183,
184,
185,
186,
187,
188,
189,
190,
191,
192,
193,
194,
195,
196,
197,
198,
199,
200,
201,
202,
203,
204,
205,
206,
207,
208,
209,
210,
211,
212,
213,
214,
215,
216,
217,
218,
219,
220,
221,
222,
223,
224,
225,
226,
227,
228,
229,
230,
231,
232,
233,
234,
235,
236,
237,
238,
239,
240,
241,
242,
243,
244,
245,
246,
247,
248,
249,
250,
251,
252,
253,
254,
255,
256,
257,
258,
259,
260,
261,
262,
263,
264,
265,
266,
267,
268,
269,
270,
271,
272,
273,
274,
275,
276,
277,
278,
279,
280,
281,
282,
283,
284,
285,
286,
287,
288,
289,
290,
291,
292,
293,
294,
295,
296,
297,
298,
299,
300,
301,
302,
303,
304,
305,
306,
307,
308,
309,
310,
311,
312,
313,
314,
315,
316,
317,
318,
319,
320,
321,
322,
323,
324,
325,
326,
327,
328,
329,
330,
331,
332,
333,
334,
335,
336,
337
],
"start": 3661,
"length": 9942,
"ending_column": 3,
"is_dependency": false,
"filename_short": "contracts/Contract.sol",
"starting_column": 6,
"filename_absolute": "/tmp/slither-qwrvhvqp/contracts/Contract.sol",
"filename_relative": "contracts/Contract.sol"
}
},
"signature": "pushAll()"
}
},
{
"name": "_sendBalance(Outlet.X7DEV1)",
"type": "node",
"source_mapping": {
"lines": [
277,
278
],
"start": 11743,
"length": 27,
"ending_column": 19,
"is_dependency": false,
"filename_short": "contracts/Contract.sol",
"starting_column": 12,
"filename_absolute": "/tmp/slither-qwrvhvqp/contracts/Contract.sol",
"filename_relative": "contracts/Contract.sol"
},
"additional_fields": {
"underlying_type": "external_calls"
},
"type_specific_fields": {
"parent": {
"name": "pushAll",
"type": "function",
"source_mapping": {
"lines": [
275,
276,
277,
278,
279,
280,
281,
282,
283,
284,
285,
286,
287,
288,
289,
290,
291
],
"start": 11688,
"length": 437,
"ending_column": 27,
"is_dependency": false,
"filename_short": "contracts/Contract.sol",
"starting_column": 49,
"filename_absolute": "/tmp/slither-qwrvhvqp/contracts/Contract.sol",
"filename_relative": "contracts/Contract.sol"
},
"type_specific_fields": {
"parent": {
"name": "X7TreasurySplitter",
"type": "contract",
"source_mapping": {
"lines": [
109,
110,
111,
112,
113,
114,
115,
116,
117,
118,
119,
120,
121,
122,
123,
124,
125,
126,
127,
128,
129,
130,
131,
132,
133,
134,
135,
136,
137,
138,
139,
140,
141,
142,
143,
144,
145,
146,
147,
148,
149,
150,
151,
152,
153,
154,
155,
156,
157,
158,
159,
160,
161,
162,
163,
164,
165,
166,
167,
168,
169,
170,
171,
172,
173,
174,
175,
176,
177,
178,
179,
180,
181,
182,
183,
184,
185,
186,
187,
188,
189,
190,
191,
192,
193,
194,
195,
196,
197,
198,
199,
200,
201,
202,
203,
204,
205,
206,
207,
208,
209,
210,
211,
212,
213,
214,
215,
216,
217,
218,
219,
220,
221,
222,
223,
224,
225,
226,
227,
228,
229,
230,
231,
232,
233,
234,
235,
236,
237,
238,
239,
240,
241,
242,
243,
244,
245,
246,
247,
248,
249,
250,
251,
252,
253,
254,
255,
256,
257,
258,
259,
260,
261,
262,
263,
264,
265,
266,
267,
268,
269,
270,
271,
272,
273,
274,
275,
276,
277,
278,
279,
280,
281,
282,
283,
284,
285,
286,
287,
288,
289,
290,
291,
292,
293,
294,
295,
296,
297,
298,
299,
300,
301,
302,
303,
304,
305,
306,
307,
308,
309,
310,
311,
312,
313,
314,
315,
316,
317,
318,
319,
320,
321,
322,
323,
324,
325,
326,
327,
328,
329,
330,
331,
332,
333,
334,
335,
336,
337
],
"start": 3661,
"length": 9942,
"ending_column": 3,
"is_dependency": false,
"filename_short": "contracts/Contract.sol",
"starting_column": 6,
"filename_absolute": "/tmp/slither-qwrvhvqp/contracts/Contract.sol",
"filename_relative": "contracts/Contract.sol"
}
},
"signature": "pushAll()"
}
}
}
},
{
"name": "(success,None) = recipient.call{value: ethToSend}()",
"type": "node",
"source_mapping": {
"lines": [
332,
333
],
"start": 13425,
"length": 49,
"ending_column": 10,
"is_dependency": false,
"filename_short": "contracts/Contract.sol",
"starting_column": 14,
"filename_absolute": "/tmp/slither-qwrvhvqp/contracts/Contract.sol",
"filename_relative": "contracts/Contract.sol"
},
"additional_fields": {
"underlying_type": "external_calls_sending_eth"
},
"type_specific_fields": {
"parent": {
"name": "_sendBalance",
"type": "function",
"source_mapping": {
"lines": [
318,
319,
320,
321,
322,
323,
324,
325,
326,
327,
328,
329,
330,
331,
332,
333,
334,
335,
336,
337
],
"start": 13085,
"length": 516,
"ending_column": 1,
"is_dependency": false,
"filename_short": "contracts/Contract.sol",
"starting_column": 70,
"filename_absolute": "/tmp/slither-qwrvhvqp/contracts/Contract.sol",
"filename_relative": "contracts/Contract.sol"
},
"type_specific_fields": {
"parent": {
"name": "X7TreasurySplitter",
"type": "contract",
"source_mapping": {
"lines": [
109,
110,
111,
112,
113,
114,
115,
116,
117,
118,
119,
120,
121,
122,
123,
124,
125,
126,
127,
128,
129,
130,
131,
132,
133,
134,
135,
136,
137,
138,
139,
140,
141,
142,
143,
144,
145,
146,
147,
148,
149,
150,
151,
152,
153,
154,
155,
156,
157,
158,
159,
160,
161,
162,
163,
164,
165,
166,
167,
168,
169,
170,
171,
172,
173,
174,
175,
176,
177,
178,
179,
180,
181,
182,
183,
184,
185,
186,
187,
188,
189,
190,
191,
192,
193,
194,
195,
196,
197,
198,
199,
200,
201,
202,
203,
204,
205,
206,
207,
208,
209,
210,
211,
212,
213,
214,
215,
216,
217,
218,
219,
220,
221,
222,
223,
224,
225,
226,
227,
228,
229,
230,
231,
232,
233,
234,
235,
236,
237,
238,
239,
240,
241,
242,
243,
244,
245,
246,
247,
248,
249,
250,
251,
252,
253,
254,
255,
256,
257,
258,
259,
260,
261,
262,
263,
264,
265,
266,
267,
268,
269,
270,
271,
272,
273,
274,
275,
276,
277,
278,
279,
280,
281,
282,
283,
284,
285,
286,
287,
288,
289,
290,
291,
292,
293,
294,
295,
296,
297,
298,
299,
300,
301,
302,
303,
304,
305,
306,
307,
308,
309,
310,
311,
312,
313,
314,
315,
316,
317,
318,
319,
320,
321,
322,
323,
324,
325,
326,
327,
328,
329,
330,
331,
332,
333,
334,
335,
336,
337
],
"start": 3661,
"length": 9942,
"ending_column": 3,
"is_dependency": false,
"filename_short": "contracts/Contract.sol",
"starting_column": 6,
"filename_absolute": "/tmp/slither-qwrvhvqp/contracts/Contract.sol",
"filename_relative": "contracts/Contract.sol"
}
},
"signature": "_sendBalance(X7TreasurySplitter.Outlet)"
}
}
}
},
{
"name": "_sendBalance(Outlet.X7DEV2)",
"type": "node",
"source_mapping": {
"lines": [
278,
279,
280,
281
],
"start": 11780,
"length": 27,
"ending_column": 16,
"is_dependency": false,
"filename_short": "contracts/Contract.sol",
"starting_column": 29,
"filename_absolute": "/tmp/slither-qwrvhvqp/contracts/Contract.sol",
"filename_relative": "contracts/Contract.sol"
},
"additional_fields": {
"underlying_type": "external_calls"
},
"type_specific_fields": {
"parent": {
"name": "pushAll",
"type": "function",
"source_mapping": {
"lines": [
275,
276,
277,
278,
279,
280,
281,
282,
283,
284,
285,
286,
287,
288,
289,
290,
291
],
"start": 11688,
"length": 437,
"ending_column": 27,
"is_dependency": false,
"filename_short": "contracts/Contract.sol",
"starting_column": 49,
"filename_absolute": "/tmp/slither-qwrvhvqp/contracts/Contract.sol",
"filename_relative": "contracts/Contract.sol"
},
"type_specific_fields": {
"parent": {
"name": "X7TreasurySplitter",
"type": "contract",
"source_mapping": {
"lines": [
109,
110,
111,
112,
113,
114,
115,
116,
117,
118,
119,
120,
121,
122,
123,
124,
125,
126,
127,
128,
129,
130,
131,
132,
133,
134,
135,
136,
137,
138,
139,
140,
141,
142,
143,
144,
145,
146,
147,
148,
149,
150,
151,
152,
153,
154,
155,
156,
157,
158,
159,
160,
161,
162,
163,
164,
165,
166,
167,
168,
169,
170,
171,
172,
173,
174,
175,
176,
177,
178,
179,
180,
181,
182,
183,
184,
185,
186,
187,
188,
189,
190,
191,
192,
193,
194,
195,
196,
197,
198,
199,
200,
201,
202,
203,
204,
205,
206,
207,
208,
209,
210,
211,
212,
213,
214,
215,
216,
217,
218,
219,
220,
221,
222,
223,
224,
225,
226,
227,
228,
229,
230,
231,
232,
233,
234,
235,
236,
237,
238,
239,
240,
241,
242,
243,
244,
245,
246,
247,
248,
249,
250,
251,
252,
253,
254,
255,
256,
257,
258,
259,
260,
261,
262,
263,
264,
265,
266,
267,
268,
269,
270,
271,
272,
273,
274,
275,
276,
277,
278,
279,
280,
281,
282,
283,
284,
285,
286,
287,
288,
289,
290,
291,
292,
293,
294,
295,
296,
297,
298,
299,
300,
301,
302,
303,
304,
305,
306,
307,
308,
309,
310,
311,
312,
313,
314,
315,
316,
317,
318,
319,
320,
321,
322,
323,
324,
325,
326,
327,
328,
329,
330,
331,
332,
333,
334,
335,
336,
337
],
"start": 3661,
"length": 9942,
"ending_column": 3,
"is_dependency": false,
"filename_short": "contracts/Contract.sol",
"starting_column": 6,
"filename_absolute": "/tmp/slither-qwrvhvqp/contracts/Contract.sol",
"filename_relative": "contracts/Contract.sol"
}
},
"signature": "pushAll()"
}
}
}
},
{
"name": "(success,None) = recipient.call{value: ethToSend}()",
"type": "node",
"source_mapping": {
"lines": [
332,
333
],
"start": 13425,
"length": 49,
"ending_column": 10,
"is_dependency": false,
"filename_short": "contracts/Contract.sol",
"starting_column": 14,
"filename_absolute": "/tmp/slither-qwrvhvqp/contracts/Contract.sol",
"filename_relative": "contracts/Contract.sol"
},
"additional_fields": {
"underlying_type": "external_calls_sending_eth"
},
"type_specific_fields": {
"parent": {
"name": "_sendBalance",
"type": "function",
"source_mapping": {
"lines": [
318,
319,
320,
321,
322,
323,
324,
325,
326,
327,
328,
329,
330,
331,
332,
333,
334,
335,
336,
337
],
"start": 13085,
"length": 516,
"ending_column": 1,
"is_dependency": false,
"filename_short": "contracts/Contract.sol",
"starting_column": 70,
"filename_absolute": "/tmp/slither-qwrvhvqp/contracts/Contract.sol",
"filename_relative": "contracts/Contract.sol"
},
"type_specific_fields": {
"parent": {
"name": "X7TreasurySplitter",
"type": "contract",
"source_mapping": {
"lines": [
109,
110,
111,
112,
113,
114,
115,
116,
117,
118,
119,
120,
121,
122,
123,
124,
125,
126,
127,
128,
129,
130,
131,
132,
133,
134,
135,
136,
137,
138,
139,
140,
141,
142,
143,
144,
145,
146,
147,
148,
149,
150,
151,
152,
153,
154,
155,
156,
157,
158,
159,
160,
161,
162,
163,
164,
165,
166,
167,
168,
169,
170,
171,
172,
173,
174,
175,
176,
177,
178,
179,
180,
181,
182,
183,
184,
185,
186,
187,
188,
189,
190,
191,
192,
193,
194,
195,
196,
197,
198,
199,
200,
201,
202,
203,
204,
205,
206,
207,
208,
209,
210,
211,
212,
213,
214,
215,
216,
217,
218,
219,
220,
221,
222,
223,
224,
225,
226,
227,
228,
229,
230,
231,
232,
233,
234,
235,
236,
237,
238,
239,
240,
241,
242,
243,
244,
245,
246,
247,
248,
249,
250,
251,
252,
253,
254,
255,
256,
257,
258,
259,
260,
261,
262,
263,
264,
265,
266,
267,
268,
269,
270,
271,
272,
273,
274,
275,
276,
277,
278,
279,
280,
281,
282,
283,
284,
285,
286,
287,
288,
289,
290,
291,
292,
293,
294,
295,
296,
297,
298,
299,
300,
301,
302,
303,
304,
305,
306,
307,
308,
309,
310,
311,
312,
313,
314,
315,
316,
317,
318,
319,
320,
321,
322,
323,
324,
325,
326,
327,
328,
329,
330,
331,
332,
333,
334,
335,
336,
337
],
"start": 3661,
"length": 9942,
"ending_column": 3,
"is_dependency": false,
"filename_short": "contracts/Contract.sol",
"starting_column": 6,
"filename_absolute": "/tmp/slither-qwrvhvqp/contracts/Contract.sol",
"filename_relative": "contracts/Contract.sol"
}
},
"signature": "_sendBalance(X7TreasurySplitter.Outlet)"
}
}
}
}
],
"locations": [
{
"file": "contracts/Contract.sol",
"name": "pushAll",
"type": "function",
"lines": [
275,
276,
277,
278,
279,
280,
281,
282,
283,
284,
285,
286,
287,
288,
289,
290,
291
]
},
{
"file": "contracts/Contract.sol",
"name": "_sendBalance(Outlet.X7DEV1)",
"type": "node",
"lines": [
277,
278
]
},
{
"file": "contracts/Contract.sol",
"name": "(success,None) = recipient.call{value: ethToSend}()",
"type": "node",
"lines": [
332,
333
]
},
{
"file": "contracts/Contract.sol",
"name": "_sendBalance(Outlet.X7DEV2)",
"type": "node",
"lines": [
278,
279,
280,
281
]
},
{
"file": "contracts/Contract.sol",
"name": "(success,None) = recipient.call{value: ethToSend}()",
"type": "node",
"lines": [
332,
333
]
},
{
"file": "contracts/Contract.sol",
"name": "_sendBalance(Outlet.X7DEV3)",
"type": "node",
"lines": [
281,
282
]
},
{
"file": "contracts/Contract.sol",
"name": "(success,None) = recipient.call{value: ethToSend}()",
"type": "node",
"lines": [
332,
333
]
},
{
"file": "contracts/Contract.sol",
"name": "_sendBalance(Outlet.X7DEV3)",
"type": "node",
"lines": [
281,
282
]
},
{
"file": "contracts/Contract.sol",
"name": "outletBalance[outlet] = 0",
"type": "node",
"lines": [
326,
327
]
},
{
"file": "contracts/Contract.sol",
"name": "outletBalance[outlet] += ethToSend",
"type": "node",
"lines": [
334
]
},
{
"file": "contracts/Contract.sol",
"name": "_sendBalance(Outlet.X7DEV3)",
"type": "node",
"lines": [
281,
282
]
},
{
"file": "contracts/Contract.sol",
"name": "reservedETH -= ethToSend",
"type": "node",
"lines": [
328,
329,
330,
331,
332
]
},
{
"file": "contracts/Contract.sol",
"name": "reservedETH += ethToSend",
"type": "node",
"lines": [
335,
336
]
}
],
"description": "Reentrancy in X7TreasurySplitter.pushAll() (contracts/Contract.sol#275-291):\n\tExternal calls:\n\t- _sendBalance(Outlet.X7DEV1) (contracts/Contract.sol#277-278)\n\t\t- (success,None) = recipient.call{value: ethToSend}() (contracts/Contract.sol#332-333)\n\t- _sendBalance(Outlet.X7DEV2) (contracts/Contract.sol#278-281)\n\t\t- (success,None) = recipient.call{value: ethToSend}() (contracts/Contract.sol#332-333)\n\t- _sendBalance(Outlet.X7DEV3) (contracts/Contract.sol#281-282)\n\t\t- (success,None) = recipient.call{value: ethToSend}() (contracts/Contract.sol#332-333)\n\tState variables written after the call(s):\n\t- _sendBalance(Outlet.X7DEV3) (contracts/Contract.sol#281-282)\n\t\t- outletBalance[outlet] = 0 (contracts/Contract.sol#326-327)\n\t\t- outletBalance[outlet] += ethToSend (contracts/Contract.sol#334)\n\tX7TreasurySplitter.outletBalance (contracts/Contract.sol#125-128) can be used in cross function reentrancies:\n\t- X7TreasurySplitter._sendBalance(X7TreasurySplitter.Outlet) (contracts/Contract.sol#318-337)\n\t- X7TreasurySplitter.divvyUp() (contracts/Contract.sol#184-211)\n\t- X7TreasurySplitter.outletBalance (contracts/Contract.sol#125-128)\n\t- _sendBalance(Outlet.X7DEV3) (contracts/Contract.sol#281-282)\n\t\t- reservedETH -= ethToSend (contracts/Contract.sol#328-332)\n\t\t- reservedETH += ethToSend (contracts/Contract.sol#335-336)\n\tX7TreasurySplitter.reservedETH (contracts/Contract.sol#122-123) can be used in cross function reentrancies:\n\t- X7TreasurySplitter._sendBalance(X7TreasurySplitter.Outlet) (contracts/Contract.sol#318-337)\n\t- X7TreasurySplitter.divvyUp() (contracts/Contract.sol#184-211)\n\t- X7TreasurySplitter.reservedETH (contracts/Contract.sol#122-123)"
}
|
| high | reentrancy | slither | Reentrancy in X7TreasurySplitter.pushAll() (contracts/Contract.sol#275-291): | 85 | no | — |
viewevidence_json{
"impact": "High",
"detector": "reentrancy-eth",
"elements": [
{
"name": "pushAll",
"type": "function",
"source_mapping": {
"lines": [
275,
276,
277,
278,
279,
280,
281,
282,
283,
284,
285,
286,
287,
288,
289,
290,
291
],
"start": 11688,
"length": 437,
"ending_column": 27,
"is_dependency": false,
"filename_short": "contracts/Contract.sol",
"starting_column": 49,
"filename_absolute": "/tmp/slither-qwrvhvqp/contracts/Contract.sol",
"filename_relative": "contracts/Contract.sol"
},
"type_specific_fields": {
"parent": {
"name": "X7TreasurySplitter",
"type": "contract",
"source_mapping": {
"lines": [
109,
110,
111,
112,
113,
114,
115,
116,
117,
118,
119,
120,
121,
122,
123,
124,
125,
126,
127,
128,
129,
130,
131,
132,
133,
134,
135,
136,
137,
138,
139,
140,
141,
142,
143,
144,
145,
146,
147,
148,
149,
150,
151,
152,
153,
154,
155,
156,
157,
158,
159,
160,
161,
162,
163,
164,
165,
166,
167,
168,
169,
170,
171,
172,
173,
174,
175,
176,
177,
178,
179,
180,
181,
182,
183,
184,
185,
186,
187,
188,
189,
190,
191,
192,
193,
194,
195,
196,
197,
198,
199,
200,
201,
202,
203,
204,
205,
206,
207,
208,
209,
210,
211,
212,
213,
214,
215,
216,
217,
218,
219,
220,
221,
222,
223,
224,
225,
226,
227,
228,
229,
230,
231,
232,
233,
234,
235,
236,
237,
238,
239,
240,
241,
242,
243,
244,
245,
246,
247,
248,
249,
250,
251,
252,
253,
254,
255,
256,
257,
258,
259,
260,
261,
262,
263,
264,
265,
266,
267,
268,
269,
270,
271,
272,
273,
274,
275,
276,
277,
278,
279,
280,
281,
282,
283,
284,
285,
286,
287,
288,
289,
290,
291,
292,
293,
294,
295,
296,
297,
298,
299,
300,
301,
302,
303,
304,
305,
306,
307,
308,
309,
310,
311,
312,
313,
314,
315,
316,
317,
318,
319,
320,
321,
322,
323,
324,
325,
326,
327,
328,
329,
330,
331,
332,
333,
334,
335,
336,
337
],
"start": 3661,
"length": 9942,
"ending_column": 3,
"is_dependency": false,
"filename_short": "contracts/Contract.sol",
"starting_column": 6,
"filename_absolute": "/tmp/slither-qwrvhvqp/contracts/Contract.sol",
"filename_relative": "contracts/Contract.sol"
}
},
"signature": "pushAll()"
}
},
{
"name": "_sendBalance(Outlet.X7DEV1)",
"type": "node",
"source_mapping": {
"lines": [
277,
278
],
"start": 11743,
"length": 27,
"ending_column": 19,
"is_dependency": false,
"filename_short": "contracts/Contract.sol",
"starting_column": 12,
"filename_absolute": "/tmp/slither-qwrvhvqp/contracts/Contract.sol",
"filename_relative": "contracts/Contract.sol"
},
"additional_fields": {
"underlying_type": "external_calls"
},
"type_specific_fields": {
"parent": {
"name": "pushAll",
"type": "function",
"source_mapping": {
"lines": [
275,
276,
277,
278,
279,
280,
281,
282,
283,
284,
285,
286,
287,
288,
289,
290,
291
],
"start": 11688,
"length": 437,
"ending_column": 27,
"is_dependency": false,
"filename_short": "contracts/Contract.sol",
"starting_column": 49,
"filename_absolute": "/tmp/slither-qwrvhvqp/contracts/Contract.sol",
"filename_relative": "contracts/Contract.sol"
},
"type_specific_fields": {
"parent": {
"name": "X7TreasurySplitter",
"type": "contract",
"source_mapping": {
"lines": [
109,
110,
111,
112,
113,
114,
115,
116,
117,
118,
119,
120,
121,
122,
123,
124,
125,
126,
127,
128,
129,
130,
131,
132,
133,
134,
135,
136,
137,
138,
139,
140,
141,
142,
143,
144,
145,
146,
147,
148,
149,
150,
151,
152,
153,
154,
155,
156,
157,
158,
159,
160,
161,
162,
163,
164,
165,
166,
167,
168,
169,
170,
171,
172,
173,
174,
175,
176,
177,
178,
179,
180,
181,
182,
183,
184,
185,
186,
187,
188,
189,
190,
191,
192,
193,
194,
195,
196,
197,
198,
199,
200,
201,
202,
203,
204,
205,
206,
207,
208,
209,
210,
211,
212,
213,
214,
215,
216,
217,
218,
219,
220,
221,
222,
223,
224,
225,
226,
227,
228,
229,
230,
231,
232,
233,
234,
235,
236,
237,
238,
239,
240,
241,
242,
243,
244,
245,
246,
247,
248,
249,
250,
251,
252,
253,
254,
255,
256,
257,
258,
259,
260,
261,
262,
263,
264,
265,
266,
267,
268,
269,
270,
271,
272,
273,
274,
275,
276,
277,
278,
279,
280,
281,
282,
283,
284,
285,
286,
287,
288,
289,
290,
291,
292,
293,
294,
295,
296,
297,
298,
299,
300,
301,
302,
303,
304,
305,
306,
307,
308,
309,
310,
311,
312,
313,
314,
315,
316,
317,
318,
319,
320,
321,
322,
323,
324,
325,
326,
327,
328,
329,
330,
331,
332,
333,
334,
335,
336,
337
],
"start": 3661,
"length": 9942,
"ending_column": 3,
"is_dependency": false,
"filename_short": "contracts/Contract.sol",
"starting_column": 6,
"filename_absolute": "/tmp/slither-qwrvhvqp/contracts/Contract.sol",
"filename_relative": "contracts/Contract.sol"
}
},
"signature": "pushAll()"
}
}
}
},
{
"name": "(success,None) = recipient.call{value: ethToSend}()",
"type": "node",
"source_mapping": {
"lines": [
332,
333
],
"start": 13425,
"length": 49,
"ending_column": 10,
"is_dependency": false,
"filename_short": "contracts/Contract.sol",
"starting_column": 14,
"filename_absolute": "/tmp/slither-qwrvhvqp/contracts/Contract.sol",
"filename_relative": "contracts/Contract.sol"
},
"additional_fields": {
"underlying_type": "external_calls_sending_eth"
},
"type_specific_fields": {
"parent": {
"name": "_sendBalance",
"type": "function",
"source_mapping": {
"lines": [
318,
319,
320,
321,
322,
323,
324,
325,
326,
327,
328,
329,
330,
331,
332,
333,
334,
335,
336,
337
],
"start": 13085,
"length": 516,
"ending_column": 1,
"is_dependency": false,
"filename_short": "contracts/Contract.sol",
"starting_column": 70,
"filename_absolute": "/tmp/slither-qwrvhvqp/contracts/Contract.sol",
"filename_relative": "contracts/Contract.sol"
},
"type_specific_fields": {
"parent": {
"name": "X7TreasurySplitter",
"type": "contract",
"source_mapping": {
"lines": [
109,
110,
111,
112,
113,
114,
115,
116,
117,
118,
119,
120,
121,
122,
123,
124,
125,
126,
127,
128,
129,
130,
131,
132,
133,
134,
135,
136,
137,
138,
139,
140,
141,
142,
143,
144,
145,
146,
147,
148,
149,
150,
151,
152,
153,
154,
155,
156,
157,
158,
159,
160,
161,
162,
163,
164,
165,
166,
167,
168,
169,
170,
171,
172,
173,
174,
175,
176,
177,
178,
179,
180,
181,
182,
183,
184,
185,
186,
187,
188,
189,
190,
191,
192,
193,
194,
195,
196,
197,
198,
199,
200,
201,
202,
203,
204,
205,
206,
207,
208,
209,
210,
211,
212,
213,
214,
215,
216,
217,
218,
219,
220,
221,
222,
223,
224,
225,
226,
227,
228,
229,
230,
231,
232,
233,
234,
235,
236,
237,
238,
239,
240,
241,
242,
243,
244,
245,
246,
247,
248,
249,
250,
251,
252,
253,
254,
255,
256,
257,
258,
259,
260,
261,
262,
263,
264,
265,
266,
267,
268,
269,
270,
271,
272,
273,
274,
275,
276,
277,
278,
279,
280,
281,
282,
283,
284,
285,
286,
287,
288,
289,
290,
291,
292,
293,
294,
295,
296,
297,
298,
299,
300,
301,
302,
303,
304,
305,
306,
307,
308,
309,
310,
311,
312,
313,
314,
315,
316,
317,
318,
319,
320,
321,
322,
323,
324,
325,
326,
327,
328,
329,
330,
331,
332,
333,
334,
335,
336,
337
],
"start": 3661,
"length": 9942,
"ending_column": 3,
"is_dependency": false,
"filename_short": "contracts/Contract.sol",
"starting_column": 6,
"filename_absolute": "/tmp/slither-qwrvhvqp/contracts/Contract.sol",
"filename_relative": "contracts/Contract.sol"
}
},
"signature": "_sendBalance(X7TreasurySplitter.Outlet)"
}
}
}
},
{
"name": "_sendBalance(Outlet.X7DEV2)",
"type": "node",
"source_mapping": {
"lines": [
278,
279,
280,
281
],
"start": 11780,
"length": 27,
"ending_column": 16,
"is_dependency": false,
"filename_short": "contracts/Contract.sol",
"starting_column": 29,
"filename_absolute": "/tmp/slither-qwrvhvqp/contracts/Contract.sol",
"filename_relative": "contracts/Contract.sol"
},
"additional_fields": {
"underlying_type": "external_calls"
},
"type_specific_fields": {
"parent": {
"name": "pushAll",
"type": "function",
"source_mapping": {
"lines": [
275,
276,
277,
278,
279,
280,
281,
282,
283,
284,
285,
286,
287,
288,
289,
290,
291
],
"start": 11688,
"length": 437,
"ending_column": 27,
"is_dependency": false,
"filename_short": "contracts/Contract.sol",
"starting_column": 49,
"filename_absolute": "/tmp/slither-qwrvhvqp/contracts/Contract.sol",
"filename_relative": "contracts/Contract.sol"
},
"type_specific_fields": {
"parent": {
"name": "X7TreasurySplitter",
"type": "contract",
"source_mapping": {
"lines": [
109,
110,
111,
112,
113,
114,
115,
116,
117,
118,
119,
120,
121,
122,
123,
124,
125,
126,
127,
128,
129,
130,
131,
132,
133,
134,
135,
136,
137,
138,
139,
140,
141,
142,
143,
144,
145,
146,
147,
148,
149,
150,
151,
152,
153,
154,
155,
156,
157,
158,
159,
160,
161,
162,
163,
164,
165,
166,
167,
168,
169,
170,
171,
172,
173,
174,
175,
176,
177,
178,
179,
180,
181,
182,
183,
184,
185,
186,
187,
188,
189,
190,
191,
192,
193,
194,
195,
196,
197,
198,
199,
200,
201,
202,
203,
204,
205,
206,
207,
208,
209,
210,
211,
212,
213,
214,
215,
216,
217,
218,
219,
220,
221,
222,
223,
224,
225,
226,
227,
228,
229,
230,
231,
232,
233,
234,
235,
236,
237,
238,
239,
240,
241,
242,
243,
244,
245,
246,
247,
248,
249,
250,
251,
252,
253,
254,
255,
256,
257,
258,
259,
260,
261,
262,
263,
264,
265,
266,
267,
268,
269,
270,
271,
272,
273,
274,
275,
276,
277,
278,
279,
280,
281,
282,
283,
284,
285,
286,
287,
288,
289,
290,
291,
292,
293,
294,
295,
296,
297,
298,
299,
300,
301,
302,
303,
304,
305,
306,
307,
308,
309,
310,
311,
312,
313,
314,
315,
316,
317,
318,
319,
320,
321,
322,
323,
324,
325,
326,
327,
328,
329,
330,
331,
332,
333,
334,
335,
336,
337
],
"start": 3661,
"length": 9942,
"ending_column": 3,
"is_dependency": false,
"filename_short": "contracts/Contract.sol",
"starting_column": 6,
"filename_absolute": "/tmp/slither-qwrvhvqp/contracts/Contract.sol",
"filename_relative": "contracts/Contract.sol"
}
},
"signature": "pushAll()"
}
}
}
},
{
"name": "(success,None) = recipient.call{value: ethToSend}()",
"type": "node",
"source_mapping": {
"lines": [
332,
333
],
"start": 13425,
"length": 49,
"ending_column": 10,
"is_dependency": false,
"filename_short": "contracts/Contract.sol",
"starting_column": 14,
"filename_absolute": "/tmp/slither-qwrvhvqp/contracts/Contract.sol",
"filename_relative": "contracts/Contract.sol"
},
"additional_fields": {
"underlying_type": "external_calls_sending_eth"
},
"type_specific_fields": {
"parent": {
"name": "_sendBalance",
"type": "function",
"source_mapping": {
"lines": [
318,
319,
320,
321,
322,
323,
324,
325,
326,
327,
328,
329,
330,
331,
332,
333,
334,
335,
336,
337
],
"start": 13085,
"length": 516,
"ending_column": 1,
"is_dependency": false,
"filename_short": "contracts/Contract.sol",
"starting_column": 70,
"filename_absolute": "/tmp/slither-qwrvhvqp/contracts/Contract.sol",
"filename_relative": "contracts/Contract.sol"
},
"type_specific_fields": {
"parent": {
"name": "X7TreasurySplitter",
"type": "contract",
"source_mapping": {
"lines": [
109,
110,
111,
112,
113,
114,
115,
116,
117,
118,
119,
120,
121,
122,
123,
124,
125,
126,
127,
128,
129,
130,
131,
132,
133,
134,
135,
136,
137,
138,
139,
140,
141,
142,
143,
144,
145,
146,
147,
148,
149,
150,
151,
152,
153,
154,
155,
156,
157,
158,
159,
160,
161,
162,
163,
164,
165,
166,
167,
168,
169,
170,
171,
172,
173,
174,
175,
176,
177,
178,
179,
180,
181,
182,
183,
184,
185,
186,
187,
188,
189,
190,
191,
192,
193,
194,
195,
196,
197,
198,
199,
200,
201,
202,
203,
204,
205,
206,
207,
208,
209,
210,
211,
212,
213,
214,
215,
216,
217,
218,
219,
220,
221,
222,
223,
224,
225,
226,
227,
228,
229,
230,
231,
232,
233,
234,
235,
236,
237,
238,
239,
240,
241,
242,
243,
244,
245,
246,
247,
248,
249,
250,
251,
252,
253,
254,
255,
256,
257,
258,
259,
260,
261,
262,
263,
264,
265,
266,
267,
268,
269,
270,
271,
272,
273,
274,
275,
276,
277,
278,
279,
280,
281,
282,
283,
284,
285,
286,
287,
288,
289,
290,
291,
292,
293,
294,
295,
296,
297,
298,
299,
300,
301,
302,
303,
304,
305,
306,
307,
308,
309,
310,
311,
312,
313,
314,
315,
316,
317,
318,
319,
320,
321,
322,
323,
324,
325,
326,
327,
328,
329,
330,
331,
332,
333,
334,
335,
336,
337
],
"start": 3661,
"length": 9942,
"ending_column": 3,
"is_dependency": false,
"filename_short": "contracts/Contract.sol",
"starting_column": 6,
"filename_absolute": "/tmp/slither-qwrvhvqp/contracts/Contract.sol",
"filename_relative": "contracts/Contract.sol"
}
},
"signature": "_sendBalance(X7TreasurySplitter.Outlet)"
}
}
}
}
],
"locations": [
{
"file": "contracts/Contract.sol",
"name": "pushAll",
"type": "function",
"lines": [
275,
276,
277,
278,
279,
280,
281,
282,
283,
284,
285,
286,
287,
288,
289,
290,
291
]
},
{
"file": "contracts/Contract.sol",
"name": "_sendBalance(Outlet.X7DEV1)",
"type": "node",
"lines": [
277,
278
]
},
{
"file": "contracts/Contract.sol",
"name": "(success,None) = recipient.call{value: ethToSend}()",
"type": "node",
"lines": [
332,
333
]
},
{
"file": "contracts/Contract.sol",
"name": "_sendBalance(Outlet.X7DEV2)",
"type": "node",
"lines": [
278,
279,
280,
281
]
},
{
"file": "contracts/Contract.sol",
"name": "(success,None) = recipient.call{value: ethToSend}()",
"type": "node",
"lines": [
332,
333
]
},
{
"file": "contracts/Contract.sol",
"name": "_sendBalance(Outlet.X7DEV3)",
"type": "node",
"lines": [
281,
282
]
},
{
"file": "contracts/Contract.sol",
"name": "(success,None) = recipient.call{value: ethToSend}()",
"type": "node",
"lines": [
332,
333
]
},
{
"file": "contracts/Contract.sol",
"name": "_sendBalance(Outlet.X7DEV4)",
"type": "node",
"lines": [
282
]
},
{
"file": "contracts/Contract.sol",
"name": "(success,None) = recipient.call{value: ethToSend}()",
"type": "node",
"lines": [
332,
333
]
},
{
"file": "contracts/Contract.sol",
"name": "_sendBalance(Outlet.X7DEV5)",
"type": "node",
"lines": [
283
]
},
{
"file": "contracts/Contract.sol",
"name": "(success,None) = recipient.call{value: ethToSend}()",
"type": "node",
"lines": [
332,
333
]
},
{
"file": "contracts/Contract.sol",
"name": "_sendBalance(Outlet.X7DEV6)",
"type": "node",
"lines": [
283,
284
]
},
{
"file": "contracts/Contract.sol",
"name": "(success,None) = recipient.call{value: ethToSend}()",
"type": "node",
"lines": [
332,
333
]
},
{
"file": "contracts/Contract.sol",
"name": "_sendBalance(Outlet.X7DEV7)",
"type": "node",
"lines": [
285,
286,
287
]
},
{
"file": "contracts/Contract.sol",
"name": "(success,None) = recipient.call{value: ethToSend}()",
"type": "node",
"lines": [
332,
333
]
},
{
"file": "contracts/Contract.sol",
"name": "_sendBalance(Outlet.REWARD_POOL)",
"type": "node",
"lines": [
287,
288,
289
]
},
{
"file": "contracts/Contract.sol",
"name": "(success,None) = recipient.call{value: ethToSend}()",
"type": "node",
"lines": [
332,
333
]
},
{
"file": "contracts/Contract.sol",
"name": "_sendBalance(Outlet.OTHER_SLOT1)",
"type": "node",
"lines": [
289,
290
]
},
{
"file": "contracts/Contract.sol",
"name": "(success,None) = recipient.call{value: ethToSend}()",
"type": "node",
"lines": [
332,
333
]
},
{
"file": "contracts/Contract.sol",
"name": "_sendBalance(Outlet.OTHER_SLOT1)",
"type": "node",
"lines": [
289,
290
]
},
{
"file": "contracts/Contract.sol",
"name": "outletBalance[outlet] = 0",
"type": "node",
"lines": [
326,
327
]
},
{
"file": "contracts/Contract.sol",
"name": "outletBalance[outlet] += ethToSend",
"type": "node",
"lines": [
334
]
},
{
"file": "contracts/Contract.sol",
"name": "_sendBalance(Outlet.OTHER_SLOT1)",
"type": "node",
"lines": [
289,
290
]
},
{
"file": "contracts/Contract.sol",
"name": "reservedETH -= ethToSend",
"type": "node",
"lines": [
328,
329,
330,
331,
332
]
},
{
"file": "contracts/Contract.sol",
"name": "reservedETH += ethToSend",
"type": "node",
"lines": [
335,
336
]
}
],
"description": "Reentrancy in X7TreasurySplitter.pushAll() (contracts/Contract.sol#275-291):\n\tExternal calls:\n\t- _sendBalance(Outlet.X7DEV1) (contracts/Contract.sol#277-278)\n\t\t- (success,None) = recipient.call{value: ethToSend}() (contracts/Contract.sol#332-333)\n\t- _sendBalance(Outlet.X7DEV2) (contracts/Contract.sol#278-281)\n\t\t- (success,None) = recipient.call{value: ethToSend}() (contracts/Contract.sol#332-333)\n\t- _sendBalance(Outlet.X7DEV3) (contracts/Contract.sol#281-282)\n\t\t- (success,None) = recipient.call{value: ethToSend}() (contracts/Contract.sol#332-333)\n\t- _sendBalance(Outlet.X7DEV4) (contracts/Contract.sol#282)\n\t\t- (success,None) = recipient.call{value: ethToSend}() (contracts/Contract.sol#332-333)\n\t- _sendBalance(Outlet.X7DEV5) (contracts/Contract.sol#283)\n\t\t- (success,None) = recipient.call{value: ethToSend}() (contracts/Contract.sol#332-333)\n\t- _sendBalance(Outlet.X7DEV6) (contracts/Contract.sol#283-284)\n\t\t- (success,None) = recipient.call{value: ethToSend}() (contracts/Contract.sol#332-333)\n\t- _sendBalance(Outlet.X7DEV7) (contracts/Contract.sol#285-287)\n\t\t- (success,None) = recipient.call{value: ethToSend}() (contracts/Contract.sol#332-333)\n\t- _sendBalance(Outlet.REWARD_POOL) (contracts/Contract.sol#287-289)\n\t\t- (success,None) = recipient.call{value: ethToSend}() (contracts/Contract.sol#332-333)\n\t- _sendBalance(Outlet.OTHER_SLOT1) (contracts/Contract.sol#289-290)\n\t\t- (success,None) = recipient.call{value: ethToSend}() (contracts/Contract.sol#332-333)\n\tState variables written after the call(s):\n\t- _sendBalance(Outlet.OTHER_SLOT1) (contracts/Contract.sol#289-290)\n\t\t- outletBalance[outlet] = 0 (contracts/Contract.sol#326-327)\n\t\t- outletBalance[outlet] += ethToSend (contracts/Contract.sol#334)\n\tX7TreasurySplitter.outletBalance (contracts/Contract.sol#125-128) can be used in cross function reentrancies:\n\t- X7TreasurySplitter._sendBalance(X7TreasurySplitter.Outlet) (contracts/Contract.sol#318-337)\n\t- X7TreasurySplitter.divvyUp() (contracts/Contract.sol#184-211)\n\t- X7TreasurySplitter.outletBalance (contracts/Contract.sol#125-128)\n\t- _sendBalance(Outlet.OTHER_SLOT1) (contracts/Contract.sol#289-290)\n\t\t- reservedETH -= ethToSend (contracts/Contract.sol#328-332)\n\t\t- reservedETH += ethToSend (contracts/Contract.sol#335-336)\n\tX7TreasurySplitter.reservedETH (contracts/Contract.sol#122-123) can be used in cross function reentrancies:\n\t- X7TreasurySplitter._sendBalance(X7TreasurySplitter.Outlet) (contracts/Contract.sol#318-337)\n\t- X7TreasurySplitter.divvyUp() (contracts/Contract.sol#184-211)\n\t- X7TreasurySplitter.reservedETH (contracts/Contract.sol#122-123)"
}
|
| high | reentrancy | slither | Reentrancy in X7TreasurySplitter.pushAll() (contracts/Contract.sol#275-291): | 85 | no | — |
viewevidence_json{
"impact": "High",
"detector": "reentrancy-eth",
"elements": [
{
"name": "pushAll",
"type": "function",
"source_mapping": {
"lines": [
275,
276,
277,
278,
279,
280,
281,
282,
283,
284,
285,
286,
287,
288,
289,
290,
291
],
"start": 11688,
"length": 437,
"ending_column": 27,
"is_dependency": false,
"filename_short": "contracts/Contract.sol",
"starting_column": 49,
"filename_absolute": "/tmp/slither-qwrvhvqp/contracts/Contract.sol",
"filename_relative": "contracts/Contract.sol"
},
"type_specific_fields": {
"parent": {
"name": "X7TreasurySplitter",
"type": "contract",
"source_mapping": {
"lines": [
109,
110,
111,
112,
113,
114,
115,
116,
117,
118,
119,
120,
121,
122,
123,
124,
125,
126,
127,
128,
129,
130,
131,
132,
133,
134,
135,
136,
137,
138,
139,
140,
141,
142,
143,
144,
145,
146,
147,
148,
149,
150,
151,
152,
153,
154,
155,
156,
157,
158,
159,
160,
161,
162,
163,
164,
165,
166,
167,
168,
169,
170,
171,
172,
173,
174,
175,
176,
177,
178,
179,
180,
181,
182,
183,
184,
185,
186,
187,
188,
189,
190,
191,
192,
193,
194,
195,
196,
197,
198,
199,
200,
201,
202,
203,
204,
205,
206,
207,
208,
209,
210,
211,
212,
213,
214,
215,
216,
217,
218,
219,
220,
221,
222,
223,
224,
225,
226,
227,
228,
229,
230,
231,
232,
233,
234,
235,
236,
237,
238,
239,
240,
241,
242,
243,
244,
245,
246,
247,
248,
249,
250,
251,
252,
253,
254,
255,
256,
257,
258,
259,
260,
261,
262,
263,
264,
265,
266,
267,
268,
269,
270,
271,
272,
273,
274,
275,
276,
277,
278,
279,
280,
281,
282,
283,
284,
285,
286,
287,
288,
289,
290,
291,
292,
293,
294,
295,
296,
297,
298,
299,
300,
301,
302,
303,
304,
305,
306,
307,
308,
309,
310,
311,
312,
313,
314,
315,
316,
317,
318,
319,
320,
321,
322,
323,
324,
325,
326,
327,
328,
329,
330,
331,
332,
333,
334,
335,
336,
337
],
"start": 3661,
"length": 9942,
"ending_column": 3,
"is_dependency": false,
"filename_short": "contracts/Contract.sol",
"starting_column": 6,
"filename_absolute": "/tmp/slither-qwrvhvqp/contracts/Contract.sol",
"filename_relative": "contracts/Contract.sol"
}
},
"signature": "pushAll()"
}
},
{
"name": "_sendBalance(Outlet.X7DEV1)",
"type": "node",
"source_mapping": {
"lines": [
277,
278
],
"start": 11743,
"length": 27,
"ending_column": 19,
"is_dependency": false,
"filename_short": "contracts/Contract.sol",
"starting_column": 12,
"filename_absolute": "/tmp/slither-qwrvhvqp/contracts/Contract.sol",
"filename_relative": "contracts/Contract.sol"
},
"additional_fields": {
"underlying_type": "external_calls"
},
"type_specific_fields": {
"parent": {
"name": "pushAll",
"type": "function",
"source_mapping": {
"lines": [
275,
276,
277,
278,
279,
280,
281,
282,
283,
284,
285,
286,
287,
288,
289,
290,
291
],
"start": 11688,
"length": 437,
"ending_column": 27,
"is_dependency": false,
"filename_short": "contracts/Contract.sol",
"starting_column": 49,
"filename_absolute": "/tmp/slither-qwrvhvqp/contracts/Contract.sol",
"filename_relative": "contracts/Contract.sol"
},
"type_specific_fields": {
"parent": {
"name": "X7TreasurySplitter",
"type": "contract",
"source_mapping": {
"lines": [
109,
110,
111,
112,
113,
114,
115,
116,
117,
118,
119,
120,
121,
122,
123,
124,
125,
126,
127,
128,
129,
130,
131,
132,
133,
134,
135,
136,
137,
138,
139,
140,
141,
142,
143,
144,
145,
146,
147,
148,
149,
150,
151,
152,
153,
154,
155,
156,
157,
158,
159,
160,
161,
162,
163,
164,
165,
166,
167,
168,
169,
170,
171,
172,
173,
174,
175,
176,
177,
178,
179,
180,
181,
182,
183,
184,
185,
186,
187,
188,
189,
190,
191,
192,
193,
194,
195,
196,
197,
198,
199,
200,
201,
202,
203,
204,
205,
206,
207,
208,
209,
210,
211,
212,
213,
214,
215,
216,
217,
218,
219,
220,
221,
222,
223,
224,
225,
226,
227,
228,
229,
230,
231,
232,
233,
234,
235,
236,
237,
238,
239,
240,
241,
242,
243,
244,
245,
246,
247,
248,
249,
250,
251,
252,
253,
254,
255,
256,
257,
258,
259,
260,
261,
262,
263,
264,
265,
266,
267,
268,
269,
270,
271,
272,
273,
274,
275,
276,
277,
278,
279,
280,
281,
282,
283,
284,
285,
286,
287,
288,
289,
290,
291,
292,
293,
294,
295,
296,
297,
298,
299,
300,
301,
302,
303,
304,
305,
306,
307,
308,
309,
310,
311,
312,
313,
314,
315,
316,
317,
318,
319,
320,
321,
322,
323,
324,
325,
326,
327,
328,
329,
330,
331,
332,
333,
334,
335,
336,
337
],
"start": 3661,
"length": 9942,
"ending_column": 3,
"is_dependency": false,
"filename_short": "contracts/Contract.sol",
"starting_column": 6,
"filename_absolute": "/tmp/slither-qwrvhvqp/contracts/Contract.sol",
"filename_relative": "contracts/Contract.sol"
}
},
"signature": "pushAll()"
}
}
}
},
{
"name": "(success,None) = recipient.call{value: ethToSend}()",
"type": "node",
"source_mapping": {
"lines": [
332,
333
],
"start": 13425,
"length": 49,
"ending_column": 10,
"is_dependency": false,
"filename_short": "contracts/Contract.sol",
"starting_column": 14,
"filename_absolute": "/tmp/slither-qwrvhvqp/contracts/Contract.sol",
"filename_relative": "contracts/Contract.sol"
},
"additional_fields": {
"underlying_type": "external_calls_sending_eth"
},
"type_specific_fields": {
"parent": {
"name": "_sendBalance",
"type": "function",
"source_mapping": {
"lines": [
318,
319,
320,
321,
322,
323,
324,
325,
326,
327,
328,
329,
330,
331,
332,
333,
334,
335,
336,
337
],
"start": 13085,
"length": 516,
"ending_column": 1,
"is_dependency": false,
"filename_short": "contracts/Contract.sol",
"starting_column": 70,
"filename_absolute": "/tmp/slither-qwrvhvqp/contracts/Contract.sol",
"filename_relative": "contracts/Contract.sol"
},
"type_specific_fields": {
"parent": {
"name": "X7TreasurySplitter",
"type": "contract",
"source_mapping": {
"lines": [
109,
110,
111,
112,
113,
114,
115,
116,
117,
118,
119,
120,
121,
122,
123,
124,
125,
126,
127,
128,
129,
130,
131,
132,
133,
134,
135,
136,
137,
138,
139,
140,
141,
142,
143,
144,
145,
146,
147,
148,
149,
150,
151,
152,
153,
154,
155,
156,
157,
158,
159,
160,
161,
162,
163,
164,
165,
166,
167,
168,
169,
170,
171,
172,
173,
174,
175,
176,
177,
178,
179,
180,
181,
182,
183,
184,
185,
186,
187,
188,
189,
190,
191,
192,
193,
194,
195,
196,
197,
198,
199,
200,
201,
202,
203,
204,
205,
206,
207,
208,
209,
210,
211,
212,
213,
214,
215,
216,
217,
218,
219,
220,
221,
222,
223,
224,
225,
226,
227,
228,
229,
230,
231,
232,
233,
234,
235,
236,
237,
238,
239,
240,
241,
242,
243,
244,
245,
246,
247,
248,
249,
250,
251,
252,
253,
254,
255,
256,
257,
258,
259,
260,
261,
262,
263,
264,
265,
266,
267,
268,
269,
270,
271,
272,
273,
274,
275,
276,
277,
278,
279,
280,
281,
282,
283,
284,
285,
286,
287,
288,
289,
290,
291,
292,
293,
294,
295,
296,
297,
298,
299,
300,
301,
302,
303,
304,
305,
306,
307,
308,
309,
310,
311,
312,
313,
314,
315,
316,
317,
318,
319,
320,
321,
322,
323,
324,
325,
326,
327,
328,
329,
330,
331,
332,
333,
334,
335,
336,
337
],
"start": 3661,
"length": 9942,
"ending_column": 3,
"is_dependency": false,
"filename_short": "contracts/Contract.sol",
"starting_column": 6,
"filename_absolute": "/tmp/slither-qwrvhvqp/contracts/Contract.sol",
"filename_relative": "contracts/Contract.sol"
}
},
"signature": "_sendBalance(X7TreasurySplitter.Outlet)"
}
}
}
},
{
"name": "_sendBalance(Outlet.X7DEV2)",
"type": "node",
"source_mapping": {
"lines": [
278,
279,
280,
281
],
"start": 11780,
"length": 27,
"ending_column": 16,
"is_dependency": false,
"filename_short": "contracts/Contract.sol",
"starting_column": 29,
"filename_absolute": "/tmp/slither-qwrvhvqp/contracts/Contract.sol",
"filename_relative": "contracts/Contract.sol"
},
"additional_fields": {
"underlying_type": "external_calls"
},
"type_specific_fields": {
"parent": {
"name": "pushAll",
"type": "function",
"source_mapping": {
"lines": [
275,
276,
277,
278,
279,
280,
281,
282,
283,
284,
285,
286,
287,
288,
289,
290,
291
],
"start": 11688,
"length": 437,
"ending_column": 27,
"is_dependency": false,
"filename_short": "contracts/Contract.sol",
"starting_column": 49,
"filename_absolute": "/tmp/slither-qwrvhvqp/contracts/Contract.sol",
"filename_relative": "contracts/Contract.sol"
},
"type_specific_fields": {
"parent": {
"name": "X7TreasurySplitter",
"type": "contract",
"source_mapping": {
"lines": [
109,
110,
111,
112,
113,
114,
115,
116,
117,
118,
119,
120,
121,
122,
123,
124,
125,
126,
127,
128,
129,
130,
131,
132,
133,
134,
135,
136,
137,
138,
139,
140,
141,
142,
143,
144,
145,
146,
147,
148,
149,
150,
151,
152,
153,
154,
155,
156,
157,
158,
159,
160,
161,
162,
163,
164,
165,
166,
167,
168,
169,
170,
171,
172,
173,
174,
175,
176,
177,
178,
179,
180,
181,
182,
183,
184,
185,
186,
187,
188,
189,
190,
191,
192,
193,
194,
195,
196,
197,
198,
199,
200,
201,
202,
203,
204,
205,
206,
207,
208,
209,
210,
211,
212,
213,
214,
215,
216,
217,
218,
219,
220,
221,
222,
223,
224,
225,
226,
227,
228,
229,
230,
231,
232,
233,
234,
235,
236,
237,
238,
239,
240,
241,
242,
243,
244,
245,
246,
247,
248,
249,
250,
251,
252,
253,
254,
255,
256,
257,
258,
259,
260,
261,
262,
263,
264,
265,
266,
267,
268,
269,
270,
271,
272,
273,
274,
275,
276,
277,
278,
279,
280,
281,
282,
283,
284,
285,
286,
287,
288,
289,
290,
291,
292,
293,
294,
295,
296,
297,
298,
299,
300,
301,
302,
303,
304,
305,
306,
307,
308,
309,
310,
311,
312,
313,
314,
315,
316,
317,
318,
319,
320,
321,
322,
323,
324,
325,
326,
327,
328,
329,
330,
331,
332,
333,
334,
335,
336,
337
],
"start": 3661,
"length": 9942,
"ending_column": 3,
"is_dependency": false,
"filename_short": "contracts/Contract.sol",
"starting_column": 6,
"filename_absolute": "/tmp/slither-qwrvhvqp/contracts/Contract.sol",
"filename_relative": "contracts/Contract.sol"
}
},
"signature": "pushAll()"
}
}
}
},
{
"name": "(success,None) = recipient.call{value: ethToSend}()",
"type": "node",
"source_mapping": {
"lines": [
332,
333
],
"start": 13425,
"length": 49,
"ending_column": 10,
"is_dependency": false,
"filename_short": "contracts/Contract.sol",
"starting_column": 14,
"filename_absolute": "/tmp/slither-qwrvhvqp/contracts/Contract.sol",
"filename_relative": "contracts/Contract.sol"
},
"additional_fields": {
"underlying_type": "external_calls_sending_eth"
},
"type_specific_fields": {
"parent": {
"name": "_sendBalance",
"type": "function",
"source_mapping": {
"lines": [
318,
319,
320,
321,
322,
323,
324,
325,
326,
327,
328,
329,
330,
331,
332,
333,
334,
335,
336,
337
],
"start": 13085,
"length": 516,
"ending_column": 1,
"is_dependency": false,
"filename_short": "contracts/Contract.sol",
"starting_column": 70,
"filename_absolute": "/tmp/slither-qwrvhvqp/contracts/Contract.sol",
"filename_relative": "contracts/Contract.sol"
},
"type_specific_fields": {
"parent": {
"name": "X7TreasurySplitter",
"type": "contract",
"source_mapping": {
"lines": [
109,
110,
111,
112,
113,
114,
115,
116,
117,
118,
119,
120,
121,
122,
123,
124,
125,
126,
127,
128,
129,
130,
131,
132,
133,
134,
135,
136,
137,
138,
139,
140,
141,
142,
143,
144,
145,
146,
147,
148,
149,
150,
151,
152,
153,
154,
155,
156,
157,
158,
159,
160,
161,
162,
163,
164,
165,
166,
167,
168,
169,
170,
171,
172,
173,
174,
175,
176,
177,
178,
179,
180,
181,
182,
183,
184,
185,
186,
187,
188,
189,
190,
191,
192,
193,
194,
195,
196,
197,
198,
199,
200,
201,
202,
203,
204,
205,
206,
207,
208,
209,
210,
211,
212,
213,
214,
215,
216,
217,
218,
219,
220,
221,
222,
223,
224,
225,
226,
227,
228,
229,
230,
231,
232,
233,
234,
235,
236,
237,
238,
239,
240,
241,
242,
243,
244,
245,
246,
247,
248,
249,
250,
251,
252,
253,
254,
255,
256,
257,
258,
259,
260,
261,
262,
263,
264,
265,
266,
267,
268,
269,
270,
271,
272,
273,
274,
275,
276,
277,
278,
279,
280,
281,
282,
283,
284,
285,
286,
287,
288,
289,
290,
291,
292,
293,
294,
295,
296,
297,
298,
299,
300,
301,
302,
303,
304,
305,
306,
307,
308,
309,
310,
311,
312,
313,
314,
315,
316,
317,
318,
319,
320,
321,
322,
323,
324,
325,
326,
327,
328,
329,
330,
331,
332,
333,
334,
335,
336,
337
],
"start": 3661,
"length": 9942,
"ending_column": 3,
"is_dependency": false,
"filename_short": "contracts/Contract.sol",
"starting_column": 6,
"filename_absolute": "/tmp/slither-qwrvhvqp/contracts/Contract.sol",
"filename_relative": "contracts/Contract.sol"
}
},
"signature": "_sendBalance(X7TreasurySplitter.Outlet)"
}
}
}
}
],
"locations": [
{
"file": "contracts/Contract.sol",
"name": "pushAll",
"type": "function",
"lines": [
275,
276,
277,
278,
279,
280,
281,
282,
283,
284,
285,
286,
287,
288,
289,
290,
291
]
},
{
"file": "contracts/Contract.sol",
"name": "_sendBalance(Outlet.X7DEV1)",
"type": "node",
"lines": [
277,
278
]
},
{
"file": "contracts/Contract.sol",
"name": "(success,None) = recipient.call{value: ethToSend}()",
"type": "node",
"lines": [
332,
333
]
},
{
"file": "contracts/Contract.sol",
"name": "_sendBalance(Outlet.X7DEV2)",
"type": "node",
"lines": [
278,
279,
280,
281
]
},
{
"file": "contracts/Contract.sol",
"name": "(success,None) = recipient.call{value: ethToSend}()",
"type": "node",
"lines": [
332,
333
]
},
{
"file": "contracts/Contract.sol",
"name": "_sendBalance(Outlet.X7DEV3)",
"type": "node",
"lines": [
281,
282
]
},
{
"file": "contracts/Contract.sol",
"name": "(success,None) = recipient.call{value: ethToSend}()",
"type": "node",
"lines": [
332,
333
]
},
{
"file": "contracts/Contract.sol",
"name": "_sendBalance(Outlet.X7DEV4)",
"type": "node",
"lines": [
282
]
},
{
"file": "contracts/Contract.sol",
"name": "(success,None) = recipient.call{value: ethToSend}()",
"type": "node",
"lines": [
332,
333
]
},
{
"file": "contracts/Contract.sol",
"name": "_sendBalance(Outlet.X7DEV5)",
"type": "node",
"lines": [
283
]
},
{
"file": "contracts/Contract.sol",
"name": "(success,None) = recipient.call{value: ethToSend}()",
"type": "node",
"lines": [
332,
333
]
},
{
"file": "contracts/Contract.sol",
"name": "_sendBalance(Outlet.X7DEV5)",
"type": "node",
"lines": [
283
]
},
{
"file": "contracts/Contract.sol",
"name": "outletBalance[outlet] = 0",
"type": "node",
"lines": [
326,
327
]
},
{
"file": "contracts/Contract.sol",
"name": "outletBalance[outlet] += ethToSend",
"type": "node",
"lines": [
334
]
},
{
"file": "contracts/Contract.sol",
"name": "_sendBalance(Outlet.X7DEV5)",
"type": "node",
"lines": [
283
]
},
{
"file": "contracts/Contract.sol",
"name": "reservedETH -= ethToSend",
"type": "node",
"lines": [
328,
329,
330,
331,
332
]
},
{
"file": "contracts/Contract.sol",
"name": "reservedETH += ethToSend",
"type": "node",
"lines": [
335,
336
]
}
],
"description": "Reentrancy in X7TreasurySplitter.pushAll() (contracts/Contract.sol#275-291):\n\tExternal calls:\n\t- _sendBalance(Outlet.X7DEV1) (contracts/Contract.sol#277-278)\n\t\t- (success,None) = recipient.call{value: ethToSend}() (contracts/Contract.sol#332-333)\n\t- _sendBalance(Outlet.X7DEV2) (contracts/Contract.sol#278-281)\n\t\t- (success,None) = recipient.call{value: ethToSend}() (contracts/Contract.sol#332-333)\n\t- _sendBalance(Outlet.X7DEV3) (contracts/Contract.sol#281-282)\n\t\t- (success,None) = recipient.call{value: ethToSend}() (contracts/Contract.sol#332-333)\n\t- _sendBalance(Outlet.X7DEV4) (contracts/Contract.sol#282)\n\t\t- (success,None) = recipient.call{value: ethToSend}() (contracts/Contract.sol#332-333)\n\t- _sendBalance(Outlet.X7DEV5) (contracts/Contract.sol#283)\n\t\t- (success,None) = recipient.call{value: ethToSend}() (contracts/Contract.sol#332-333)\n\tState variables written after the call(s):\n\t- _sendBalance(Outlet.X7DEV5) (contracts/Contract.sol#283)\n\t\t- outletBalance[outlet] = 0 (contracts/Contract.sol#326-327)\n\t\t- outletBalance[outlet] += ethToSend (contracts/Contract.sol#334)\n\tX7TreasurySplitter.outletBalance (contracts/Contract.sol#125-128) can be used in cross function reentrancies:\n\t- X7TreasurySplitter._sendBalance(X7TreasurySplitter.Outlet) (contracts/Contract.sol#318-337)\n\t- X7TreasurySplitter.divvyUp() (contracts/Contract.sol#184-211)\n\t- X7TreasurySplitter.outletBalance (contracts/Contract.sol#125-128)\n\t- _sendBalance(Outlet.X7DEV5) (contracts/Contract.sol#283)\n\t\t- reservedETH -= ethToSend (contracts/Contract.sol#328-332)\n\t\t- reservedETH += ethToSend (contracts/Contract.sol#335-336)\n\tX7TreasurySplitter.reservedETH (contracts/Contract.sol#122-123) can be used in cross function reentrancies:\n\t- X7TreasurySplitter._sendBalance(X7TreasurySplitter.Outlet) (contracts/Contract.sol#318-337)\n\t- X7TreasurySplitter.divvyUp() (contracts/Contract.sol#184-211)\n\t- X7TreasurySplitter.reservedETH (contracts/Contract.sol#122-123)"
}
|
| high | reentrancy | slither | Reentrancy in X7TreasurySplitter._sendBalance(X7TreasurySplitter.Outlet) (contracts/Contract.sol#318-337): | 85 | no | — |
viewevidence_json{
"impact": "High",
"detector": "reentrancy-eth",
"elements": [
{
"name": "_sendBalance",
"type": "function",
"source_mapping": {
"lines": [
318,
319,
320,
321,
322,
323,
324,
325,
326,
327,
328,
329,
330,
331,
332,
333,
334,
335,
336,
337
],
"start": 13085,
"length": 516,
"ending_column": 1,
"is_dependency": false,
"filename_short": "contracts/Contract.sol",
"starting_column": 70,
"filename_absolute": "/tmp/slither-qwrvhvqp/contracts/Contract.sol",
"filename_relative": "contracts/Contract.sol"
},
"type_specific_fields": {
"parent": {
"name": "X7TreasurySplitter",
"type": "contract",
"source_mapping": {
"lines": [
109,
110,
111,
112,
113,
114,
115,
116,
117,
118,
119,
120,
121,
122,
123,
124,
125,
126,
127,
128,
129,
130,
131,
132,
133,
134,
135,
136,
137,
138,
139,
140,
141,
142,
143,
144,
145,
146,
147,
148,
149,
150,
151,
152,
153,
154,
155,
156,
157,
158,
159,
160,
161,
162,
163,
164,
165,
166,
167,
168,
169,
170,
171,
172,
173,
174,
175,
176,
177,
178,
179,
180,
181,
182,
183,
184,
185,
186,
187,
188,
189,
190,
191,
192,
193,
194,
195,
196,
197,
198,
199,
200,
201,
202,
203,
204,
205,
206,
207,
208,
209,
210,
211,
212,
213,
214,
215,
216,
217,
218,
219,
220,
221,
222,
223,
224,
225,
226,
227,
228,
229,
230,
231,
232,
233,
234,
235,
236,
237,
238,
239,
240,
241,
242,
243,
244,
245,
246,
247,
248,
249,
250,
251,
252,
253,
254,
255,
256,
257,
258,
259,
260,
261,
262,
263,
264,
265,
266,
267,
268,
269,
270,
271,
272,
273,
274,
275,
276,
277,
278,
279,
280,
281,
282,
283,
284,
285,
286,
287,
288,
289,
290,
291,
292,
293,
294,
295,
296,
297,
298,
299,
300,
301,
302,
303,
304,
305,
306,
307,
308,
309,
310,
311,
312,
313,
314,
315,
316,
317,
318,
319,
320,
321,
322,
323,
324,
325,
326,
327,
328,
329,
330,
331,
332,
333,
334,
335,
336,
337
],
"start": 3661,
"length": 9942,
"ending_column": 3,
"is_dependency": false,
"filename_short": "contracts/Contract.sol",
"starting_column": 6,
"filename_absolute": "/tmp/slither-qwrvhvqp/contracts/Contract.sol",
"filename_relative": "contracts/Contract.sol"
}
},
"signature": "_sendBalance(X7TreasurySplitter.Outlet)"
}
},
{
"name": "(success,None) = recipient.call{value: ethToSend}()",
"type": "node",
"source_mapping": {
"lines": [
332,
333
],
"start": 13425,
"length": 49,
"ending_column": 10,
"is_dependency": false,
"filename_short": "contracts/Contract.sol",
"starting_column": 14,
"filename_absolute": "/tmp/slither-qwrvhvqp/contracts/Contract.sol",
"filename_relative": "contracts/Contract.sol"
},
"additional_fields": {
"underlying_type": "external_calls"
},
"type_specific_fields": {
"parent": {
"name": "_sendBalance",
"type": "function",
"source_mapping": {
"lines": [
318,
319,
320,
321,
322,
323,
324,
325,
326,
327,
328,
329,
330,
331,
332,
333,
334,
335,
336,
337
],
"start": 13085,
"length": 516,
"ending_column": 1,
"is_dependency": false,
"filename_short": "contracts/Contract.sol",
"starting_column": 70,
"filename_absolute": "/tmp/slither-qwrvhvqp/contracts/Contract.sol",
"filename_relative": "contracts/Contract.sol"
},
"type_specific_fields": {
"parent": {
"name": "X7TreasurySplitter",
"type": "contract",
"source_mapping": {
"lines": [
109,
110,
111,
112,
113,
114,
115,
116,
117,
118,
119,
120,
121,
122,
123,
124,
125,
126,
127,
128,
129,
130,
131,
132,
133,
134,
135,
136,
137,
138,
139,
140,
141,
142,
143,
144,
145,
146,
147,
148,
149,
150,
151,
152,
153,
154,
155,
156,
157,
158,
159,
160,
161,
162,
163,
164,
165,
166,
167,
168,
169,
170,
171,
172,
173,
174,
175,
176,
177,
178,
179,
180,
181,
182,
183,
184,
185,
186,
187,
188,
189,
190,
191,
192,
193,
194,
195,
196,
197,
198,
199,
200,
201,
202,
203,
204,
205,
206,
207,
208,
209,
210,
211,
212,
213,
214,
215,
216,
217,
218,
219,
220,
221,
222,
223,
224,
225,
226,
227,
228,
229,
230,
231,
232,
233,
234,
235,
236,
237,
238,
239,
240,
241,
242,
243,
244,
245,
246,
247,
248,
249,
250,
251,
252,
253,
254,
255,
256,
257,
258,
259,
260,
261,
262,
263,
264,
265,
266,
267,
268,
269,
270,
271,
272,
273,
274,
275,
276,
277,
278,
279,
280,
281,
282,
283,
284,
285,
286,
287,
288,
289,
290,
291,
292,
293,
294,
295,
296,
297,
298,
299,
300,
301,
302,
303,
304,
305,
306,
307,
308,
309,
310,
311,
312,
313,
314,
315,
316,
317,
318,
319,
320,
321,
322,
323,
324,
325,
326,
327,
328,
329,
330,
331,
332,
333,
334,
335,
336,
337
],
"start": 3661,
"length": 9942,
"ending_column": 3,
"is_dependency": false,
"filename_short": "contracts/Contract.sol",
"starting_column": 6,
"filename_absolute": "/tmp/slither-qwrvhvqp/contracts/Contract.sol",
"filename_relative": "contracts/Contract.sol"
}
},
"signature": "_sendBalance(X7TreasurySplitter.Outlet)"
}
}
}
},
{
"name": "outletBalance[outlet] += ethToSend",
"type": "node",
"source_mapping": {
"lines": [
334
],
"start": 13512,
"length": 34,
"ending_column": 59,
"is_dependency": false,
"filename_short": "contracts/Contract.sol",
"starting_column": 25,
"filename_absolute": "/tmp/slither-qwrvhvqp/contracts/Contract.sol",
"filename_relative": "contracts/Contract.sol"
},
"additional_fields": {
"variable_name": "outletBalance",
"underlying_type": "variables_written"
},
"type_specific_fields": {
"parent": {
"name": "_sendBalance",
"type": "function",
"source_mapping": {
"lines": [
318,
319,
320,
321,
322,
323,
324,
325,
326,
327,
328,
329,
330,
331,
332,
333,
334,
335,
336,
337
],
"start": 13085,
"length": 516,
"ending_column": 1,
"is_dependency": false,
"filename_short": "contracts/Contract.sol",
"starting_column": 70,
"filename_absolute": "/tmp/slither-qwrvhvqp/contracts/Contract.sol",
"filename_relative": "contracts/Contract.sol"
},
"type_specific_fields": {
"parent": {
"name": "X7TreasurySplitter",
"type": "contract",
"source_mapping": {
"lines": [
109,
110,
111,
112,
113,
114,
115,
116,
117,
118,
119,
120,
121,
122,
123,
124,
125,
126,
127,
128,
129,
130,
131,
132,
133,
134,
135,
136,
137,
138,
139,
140,
141,
142,
143,
144,
145,
146,
147,
148,
149,
150,
151,
152,
153,
154,
155,
156,
157,
158,
159,
160,
161,
162,
163,
164,
165,
166,
167,
168,
169,
170,
171,
172,
173,
174,
175,
176,
177,
178,
179,
180,
181,
182,
183,
184,
185,
186,
187,
188,
189,
190,
191,
192,
193,
194,
195,
196,
197,
198,
199,
200,
201,
202,
203,
204,
205,
206,
207,
208,
209,
210,
211,
212,
213,
214,
215,
216,
217,
218,
219,
220,
221,
222,
223,
224,
225,
226,
227,
228,
229,
230,
231,
232,
233,
234,
235,
236,
237,
238,
239,
240,
241,
242,
243,
244,
245,
246,
247,
248,
249,
250,
251,
252,
253,
254,
255,
256,
257,
258,
259,
260,
261,
262,
263,
264,
265,
266,
267,
268,
269,
270,
271,
272,
273,
274,
275,
276,
277,
278,
279,
280,
281,
282,
283,
284,
285,
286,
287,
288,
289,
290,
291,
292,
293,
294,
295,
296,
297,
298,
299,
300,
301,
302,
303,
304,
305,
306,
307,
308,
309,
310,
311,
312,
313,
314,
315,
316,
317,
318,
319,
320,
321,
322,
323,
324,
325,
326,
327,
328,
329,
330,
331,
332,
333,
334,
335,
336,
337
],
"start": 3661,
"length": 9942,
"ending_column": 3,
"is_dependency": false,
"filename_short": "contracts/Contract.sol",
"starting_column": 6,
"filename_absolute": "/tmp/slither-qwrvhvqp/contracts/Contract.sol",
"filename_relative": "contracts/Contract.sol"
}
},
"signature": "_sendBalance(X7TreasurySplitter.Outlet)"
}
}
}
},
{
"name": "reservedETH += ethToSend",
"type": "node",
"source_mapping": {
"lines": [
335,
336
],
"start": 13560,
"length": 24,
"ending_column": 24,
"is_dependency": false,
"filename_short": "contracts/Contract.sol",
"starting_column": 2,
"filename_absolute": "/tmp/slither-qwrvhvqp/contracts/Contract.sol",
"filename_relative": "contracts/Contract.sol"
},
"additional_fields": {
"variable_name": "reservedETH",
"underlying_type": "variables_written"
},
"type_specific_fields": {
"parent": {
"name": "_sendBalance",
"type": "function",
"source_mapping": {
"lines": [
318,
319,
320,
321,
322,
323,
324,
325,
326,
327,
328,
329,
330,
331,
332,
333,
334,
335,
336,
337
],
"start": 13085,
"length": 516,
"ending_column": 1,
"is_dependency": false,
"filename_short": "contracts/Contract.sol",
"starting_column": 70,
"filename_absolute": "/tmp/slither-qwrvhvqp/contracts/Contract.sol",
"filename_relative": "contracts/Contract.sol"
},
"type_specific_fields": {
"parent": {
"name": "X7TreasurySplitter",
"type": "contract",
"source_mapping": {
"lines": [
109,
110,
111,
112,
113,
114,
115,
116,
117,
118,
119,
120,
121,
122,
123,
124,
125,
126,
127,
128,
129,
130,
131,
132,
133,
134,
135,
136,
137,
138,
139,
140,
141,
142,
143,
144,
145,
146,
147,
148,
149,
150,
151,
152,
153,
154,
155,
156,
157,
158,
159,
160,
161,
162,
163,
164,
165,
166,
167,
168,
169,
170,
171,
172,
173,
174,
175,
176,
177,
178,
179,
180,
181,
182,
183,
184,
185,
186,
187,
188,
189,
190,
191,
192,
193,
194,
195,
196,
197,
198,
199,
200,
201,
202,
203,
204,
205,
206,
207,
208,
209,
210,
211,
212,
213,
214,
215,
216,
217,
218,
219,
220,
221,
222,
223,
224,
225,
226,
227,
228,
229,
230,
231,
232,
233,
234,
235,
236,
237,
238,
239,
240,
241,
242,
243,
244,
245,
246,
247,
248,
249,
250,
251,
252,
253,
254,
255,
256,
257,
258,
259,
260,
261,
262,
263,
264,
265,
266,
267,
268,
269,
270,
271,
272,
273,
274,
275,
276,
277,
278,
279,
280,
281,
282,
283,
284,
285,
286,
287,
288,
289,
290,
291,
292,
293,
294,
295,
296,
297,
298,
299,
300,
301,
302,
303,
304,
305,
306,
307,
308,
309,
310,
311,
312,
313,
314,
315,
316,
317,
318,
319,
320,
321,
322,
323,
324,
325,
326,
327,
328,
329,
330,
331,
332,
333,
334,
335,
336,
337
],
"start": 3661,
"length": 9942,
"ending_column": 3,
"is_dependency": false,
"filename_short": "contracts/Contract.sol",
"starting_column": 6,
"filename_absolute": "/tmp/slither-qwrvhvqp/contracts/Contract.sol",
"filename_relative": "contracts/Contract.sol"
}
},
"signature": "_sendBalance(X7TreasurySplitter.Outlet)"
}
}
}
}
],
"locations": [
{
"file": "contracts/Contract.sol",
"name": "_sendBalance",
"type": "function",
"lines": [
318,
319,
320,
321,
322,
323,
324,
325,
326,
327,
328,
329,
330,
331,
332,
333,
334,
335,
336,
337
]
},
{
"file": "contracts/Contract.sol",
"name": "(success,None) = recipient.call{value: ethToSend}()",
"type": "node",
"lines": [
332,
333
]
},
{
"file": "contracts/Contract.sol",
"name": "outletBalance[outlet] += ethToSend",
"type": "node",
"lines": [
334
]
},
{
"file": "contracts/Contract.sol",
"name": "reservedETH += ethToSend",
"type": "node",
"lines": [
335,
336
]
}
],
"description": "Reentrancy in X7TreasurySplitter._sendBalance(X7TreasurySplitter.Outlet) (contracts/Contract.sol#318-337):\n\tExternal calls:\n\t- (success,None) = recipient.call{value: ethToSend}() (contracts/Contract.sol#332-333)\n\tState variables written after the call(s):\n\t- outletBalance[outlet] += ethToSend (contracts/Contract.sol#334)\n\tX7TreasurySplitter.outletBalance (contracts/Contract.sol#125-128) can be used in cross function reentrancies:\n\t- X7TreasurySplitter._sendBalance(X7TreasurySplitter.Outlet) (contracts/Contract.sol#318-337)\n\t- X7TreasurySplitter.divvyUp() (contracts/Contract.sol#184-211)\n\t- X7TreasurySplitter.outletBalance (contracts/Contract.sol#125-128)\n\t- reservedETH += ethToSend (contracts/Contract.sol#335-336)\n\tX7TreasurySplitter.reservedETH (contracts/Contract.sol#122-123) can be used in cross function reentrancies:\n\t- X7TreasurySplitter._sendBalance(X7TreasurySplitter.Outlet) (contracts/Contract.sol#318-337)\n\t- X7TreasurySplitter.divvyUp() (contracts/Contract.sol#184-211)\n\t- X7TreasurySplitter.reservedETH (contracts/Contract.sol#122-123)"
}
|
| high | reentrancy | slither | Reentrancy in X7TreasurySplitter.pushAll() (contracts/Contract.sol#275-291): | 85 | no | — |
viewevidence_json{
"impact": "High",
"detector": "reentrancy-eth",
"elements": [
{
"name": "pushAll",
"type": "function",
"source_mapping": {
"lines": [
275,
276,
277,
278,
279,
280,
281,
282,
283,
284,
285,
286,
287,
288,
289,
290,
291
],
"start": 11688,
"length": 437,
"ending_column": 27,
"is_dependency": false,
"filename_short": "contracts/Contract.sol",
"starting_column": 49,
"filename_absolute": "/tmp/slither-qwrvhvqp/contracts/Contract.sol",
"filename_relative": "contracts/Contract.sol"
},
"type_specific_fields": {
"parent": {
"name": "X7TreasurySplitter",
"type": "contract",
"source_mapping": {
"lines": [
109,
110,
111,
112,
113,
114,
115,
116,
117,
118,
119,
120,
121,
122,
123,
124,
125,
126,
127,
128,
129,
130,
131,
132,
133,
134,
135,
136,
137,
138,
139,
140,
141,
142,
143,
144,
145,
146,
147,
148,
149,
150,
151,
152,
153,
154,
155,
156,
157,
158,
159,
160,
161,
162,
163,
164,
165,
166,
167,
168,
169,
170,
171,
172,
173,
174,
175,
176,
177,
178,
179,
180,
181,
182,
183,
184,
185,
186,
187,
188,
189,
190,
191,
192,
193,
194,
195,
196,
197,
198,
199,
200,
201,
202,
203,
204,
205,
206,
207,
208,
209,
210,
211,
212,
213,
214,
215,
216,
217,
218,
219,
220,
221,
222,
223,
224,
225,
226,
227,
228,
229,
230,
231,
232,
233,
234,
235,
236,
237,
238,
239,
240,
241,
242,
243,
244,
245,
246,
247,
248,
249,
250,
251,
252,
253,
254,
255,
256,
257,
258,
259,
260,
261,
262,
263,
264,
265,
266,
267,
268,
269,
270,
271,
272,
273,
274,
275,
276,
277,
278,
279,
280,
281,
282,
283,
284,
285,
286,
287,
288,
289,
290,
291,
292,
293,
294,
295,
296,
297,
298,
299,
300,
301,
302,
303,
304,
305,
306,
307,
308,
309,
310,
311,
312,
313,
314,
315,
316,
317,
318,
319,
320,
321,
322,
323,
324,
325,
326,
327,
328,
329,
330,
331,
332,
333,
334,
335,
336,
337
],
"start": 3661,
"length": 9942,
"ending_column": 3,
"is_dependency": false,
"filename_short": "contracts/Contract.sol",
"starting_column": 6,
"filename_absolute": "/tmp/slither-qwrvhvqp/contracts/Contract.sol",
"filename_relative": "contracts/Contract.sol"
}
},
"signature": "pushAll()"
}
},
{
"name": "_sendBalance(Outlet.X7DEV1)",
"type": "node",
"source_mapping": {
"lines": [
277,
278
],
"start": 11743,
"length": 27,
"ending_column": 19,
"is_dependency": false,
"filename_short": "contracts/Contract.sol",
"starting_column": 12,
"filename_absolute": "/tmp/slither-qwrvhvqp/contracts/Contract.sol",
"filename_relative": "contracts/Contract.sol"
},
"additional_fields": {
"underlying_type": "external_calls"
},
"type_specific_fields": {
"parent": {
"name": "pushAll",
"type": "function",
"source_mapping": {
"lines": [
275,
276,
277,
278,
279,
280,
281,
282,
283,
284,
285,
286,
287,
288,
289,
290,
291
],
"start": 11688,
"length": 437,
"ending_column": 27,
"is_dependency": false,
"filename_short": "contracts/Contract.sol",
"starting_column": 49,
"filename_absolute": "/tmp/slither-qwrvhvqp/contracts/Contract.sol",
"filename_relative": "contracts/Contract.sol"
},
"type_specific_fields": {
"parent": {
"name": "X7TreasurySplitter",
"type": "contract",
"source_mapping": {
"lines": [
109,
110,
111,
112,
113,
114,
115,
116,
117,
118,
119,
120,
121,
122,
123,
124,
125,
126,
127,
128,
129,
130,
131,
132,
133,
134,
135,
136,
137,
138,
139,
140,
141,
142,
143,
144,
145,
146,
147,
148,
149,
150,
151,
152,
153,
154,
155,
156,
157,
158,
159,
160,
161,
162,
163,
164,
165,
166,
167,
168,
169,
170,
171,
172,
173,
174,
175,
176,
177,
178,
179,
180,
181,
182,
183,
184,
185,
186,
187,
188,
189,
190,
191,
192,
193,
194,
195,
196,
197,
198,
199,
200,
201,
202,
203,
204,
205,
206,
207,
208,
209,
210,
211,
212,
213,
214,
215,
216,
217,
218,
219,
220,
221,
222,
223,
224,
225,
226,
227,
228,
229,
230,
231,
232,
233,
234,
235,
236,
237,
238,
239,
240,
241,
242,
243,
244,
245,
246,
247,
248,
249,
250,
251,
252,
253,
254,
255,
256,
257,
258,
259,
260,
261,
262,
263,
264,
265,
266,
267,
268,
269,
270,
271,
272,
273,
274,
275,
276,
277,
278,
279,
280,
281,
282,
283,
284,
285,
286,
287,
288,
289,
290,
291,
292,
293,
294,
295,
296,
297,
298,
299,
300,
301,
302,
303,
304,
305,
306,
307,
308,
309,
310,
311,
312,
313,
314,
315,
316,
317,
318,
319,
320,
321,
322,
323,
324,
325,
326,
327,
328,
329,
330,
331,
332,
333,
334,
335,
336,
337
],
"start": 3661,
"length": 9942,
"ending_column": 3,
"is_dependency": false,
"filename_short": "contracts/Contract.sol",
"starting_column": 6,
"filename_absolute": "/tmp/slither-qwrvhvqp/contracts/Contract.sol",
"filename_relative": "contracts/Contract.sol"
}
},
"signature": "pushAll()"
}
}
}
},
{
"name": "(success,None) = recipient.call{value: ethToSend}()",
"type": "node",
"source_mapping": {
"lines": [
332,
333
],
"start": 13425,
"length": 49,
"ending_column": 10,
"is_dependency": false,
"filename_short": "contracts/Contract.sol",
"starting_column": 14,
"filename_absolute": "/tmp/slither-qwrvhvqp/contracts/Contract.sol",
"filename_relative": "contracts/Contract.sol"
},
"additional_fields": {
"underlying_type": "external_calls_sending_eth"
},
"type_specific_fields": {
"parent": {
"name": "_sendBalance",
"type": "function",
"source_mapping": {
"lines": [
318,
319,
320,
321,
322,
323,
324,
325,
326,
327,
328,
329,
330,
331,
332,
333,
334,
335,
336,
337
],
"start": 13085,
"length": 516,
"ending_column": 1,
"is_dependency": false,
"filename_short": "contracts/Contract.sol",
"starting_column": 70,
"filename_absolute": "/tmp/slither-qwrvhvqp/contracts/Contract.sol",
"filename_relative": "contracts/Contract.sol"
},
"type_specific_fields": {
"parent": {
"name": "X7TreasurySplitter",
"type": "contract",
"source_mapping": {
"lines": [
109,
110,
111,
112,
113,
114,
115,
116,
117,
118,
119,
120,
121,
122,
123,
124,
125,
126,
127,
128,
129,
130,
131,
132,
133,
134,
135,
136,
137,
138,
139,
140,
141,
142,
143,
144,
145,
146,
147,
148,
149,
150,
151,
152,
153,
154,
155,
156,
157,
158,
159,
160,
161,
162,
163,
164,
165,
166,
167,
168,
169,
170,
171,
172,
173,
174,
175,
176,
177,
178,
179,
180,
181,
182,
183,
184,
185,
186,
187,
188,
189,
190,
191,
192,
193,
194,
195,
196,
197,
198,
199,
200,
201,
202,
203,
204,
205,
206,
207,
208,
209,
210,
211,
212,
213,
214,
215,
216,
217,
218,
219,
220,
221,
222,
223,
224,
225,
226,
227,
228,
229,
230,
231,
232,
233,
234,
235,
236,
237,
238,
239,
240,
241,
242,
243,
244,
245,
246,
247,
248,
249,
250,
251,
252,
253,
254,
255,
256,
257,
258,
259,
260,
261,
262,
263,
264,
265,
266,
267,
268,
269,
270,
271,
272,
273,
274,
275,
276,
277,
278,
279,
280,
281,
282,
283,
284,
285,
286,
287,
288,
289,
290,
291,
292,
293,
294,
295,
296,
297,
298,
299,
300,
301,
302,
303,
304,
305,
306,
307,
308,
309,
310,
311,
312,
313,
314,
315,
316,
317,
318,
319,
320,
321,
322,
323,
324,
325,
326,
327,
328,
329,
330,
331,
332,
333,
334,
335,
336,
337
],
"start": 3661,
"length": 9942,
"ending_column": 3,
"is_dependency": false,
"filename_short": "contracts/Contract.sol",
"starting_column": 6,
"filename_absolute": "/tmp/slither-qwrvhvqp/contracts/Contract.sol",
"filename_relative": "contracts/Contract.sol"
}
},
"signature": "_sendBalance(X7TreasurySplitter.Outlet)"
}
}
}
},
{
"name": "_sendBalance(Outlet.X7DEV2)",
"type": "node",
"source_mapping": {
"lines": [
278,
279,
280,
281
],
"start": 11780,
"length": 27,
"ending_column": 16,
"is_dependency": false,
"filename_short": "contracts/Contract.sol",
"starting_column": 29,
"filename_absolute": "/tmp/slither-qwrvhvqp/contracts/Contract.sol",
"filename_relative": "contracts/Contract.sol"
},
"additional_fields": {
"underlying_type": "external_calls"
},
"type_specific_fields": {
"parent": {
"name": "pushAll",
"type": "function",
"source_mapping": {
"lines": [
275,
276,
277,
278,
279,
280,
281,
282,
283,
284,
285,
286,
287,
288,
289,
290,
291
],
"start": 11688,
"length": 437,
"ending_column": 27,
"is_dependency": false,
"filename_short": "contracts/Contract.sol",
"starting_column": 49,
"filename_absolute": "/tmp/slither-qwrvhvqp/contracts/Contract.sol",
"filename_relative": "contracts/Contract.sol"
},
"type_specific_fields": {
"parent": {
"name": "X7TreasurySplitter",
"type": "contract",
"source_mapping": {
"lines": [
109,
110,
111,
112,
113,
114,
115,
116,
117,
118,
119,
120,
121,
122,
123,
124,
125,
126,
127,
128,
129,
130,
131,
132,
133,
134,
135,
136,
137,
138,
139,
140,
141,
142,
143,
144,
145,
146,
147,
148,
149,
150,
151,
152,
153,
154,
155,
156,
157,
158,
159,
160,
161,
162,
163,
164,
165,
166,
167,
168,
169,
170,
171,
172,
173,
174,
175,
176,
177,
178,
179,
180,
181,
182,
183,
184,
185,
186,
187,
188,
189,
190,
191,
192,
193,
194,
195,
196,
197,
198,
199,
200,
201,
202,
203,
204,
205,
206,
207,
208,
209,
210,
211,
212,
213,
214,
215,
216,
217,
218,
219,
220,
221,
222,
223,
224,
225,
226,
227,
228,
229,
230,
231,
232,
233,
234,
235,
236,
237,
238,
239,
240,
241,
242,
243,
244,
245,
246,
247,
248,
249,
250,
251,
252,
253,
254,
255,
256,
257,
258,
259,
260,
261,
262,
263,
264,
265,
266,
267,
268,
269,
270,
271,
272,
273,
274,
275,
276,
277,
278,
279,
280,
281,
282,
283,
284,
285,
286,
287,
288,
289,
290,
291,
292,
293,
294,
295,
296,
297,
298,
299,
300,
301,
302,
303,
304,
305,
306,
307,
308,
309,
310,
311,
312,
313,
314,
315,
316,
317,
318,
319,
320,
321,
322,
323,
324,
325,
326,
327,
328,
329,
330,
331,
332,
333,
334,
335,
336,
337
],
"start": 3661,
"length": 9942,
"ending_column": 3,
"is_dependency": false,
"filename_short": "contracts/Contract.sol",
"starting_column": 6,
"filename_absolute": "/tmp/slither-qwrvhvqp/contracts/Contract.sol",
"filename_relative": "contracts/Contract.sol"
}
},
"signature": "pushAll()"
}
}
}
},
{
"name": "(success,None) = recipient.call{value: ethToSend}()",
"type": "node",
"source_mapping": {
"lines": [
332,
333
],
"start": 13425,
"length": 49,
"ending_column": 10,
"is_dependency": false,
"filename_short": "contracts/Contract.sol",
"starting_column": 14,
"filename_absolute": "/tmp/slither-qwrvhvqp/contracts/Contract.sol",
"filename_relative": "contracts/Contract.sol"
},
"additional_fields": {
"underlying_type": "external_calls_sending_eth"
},
"type_specific_fields": {
"parent": {
"name": "_sendBalance",
"type": "function",
"source_mapping": {
"lines": [
318,
319,
320,
321,
322,
323,
324,
325,
326,
327,
328,
329,
330,
331,
332,
333,
334,
335,
336,
337
],
"start": 13085,
"length": 516,
"ending_column": 1,
"is_dependency": false,
"filename_short": "contracts/Contract.sol",
"starting_column": 70,
"filename_absolute": "/tmp/slither-qwrvhvqp/contracts/Contract.sol",
"filename_relative": "contracts/Contract.sol"
},
"type_specific_fields": {
"parent": {
"name": "X7TreasurySplitter",
"type": "contract",
"source_mapping": {
"lines": [
109,
110,
111,
112,
113,
114,
115,
116,
117,
118,
119,
120,
121,
122,
123,
124,
125,
126,
127,
128,
129,
130,
131,
132,
133,
134,
135,
136,
137,
138,
139,
140,
141,
142,
143,
144,
145,
146,
147,
148,
149,
150,
151,
152,
153,
154,
155,
156,
157,
158,
159,
160,
161,
162,
163,
164,
165,
166,
167,
168,
169,
170,
171,
172,
173,
174,
175,
176,
177,
178,
179,
180,
181,
182,
183,
184,
185,
186,
187,
188,
189,
190,
191,
192,
193,
194,
195,
196,
197,
198,
199,
200,
201,
202,
203,
204,
205,
206,
207,
208,
209,
210,
211,
212,
213,
214,
215,
216,
217,
218,
219,
220,
221,
222,
223,
224,
225,
226,
227,
228,
229,
230,
231,
232,
233,
234,
235,
236,
237,
238,
239,
240,
241,
242,
243,
244,
245,
246,
247,
248,
249,
250,
251,
252,
253,
254,
255,
256,
257,
258,
259,
260,
261,
262,
263,
264,
265,
266,
267,
268,
269,
270,
271,
272,
273,
274,
275,
276,
277,
278,
279,
280,
281,
282,
283,
284,
285,
286,
287,
288,
289,
290,
291,
292,
293,
294,
295,
296,
297,
298,
299,
300,
301,
302,
303,
304,
305,
306,
307,
308,
309,
310,
311,
312,
313,
314,
315,
316,
317,
318,
319,
320,
321,
322,
323,
324,
325,
326,
327,
328,
329,
330,
331,
332,
333,
334,
335,
336,
337
],
"start": 3661,
"length": 9942,
"ending_column": 3,
"is_dependency": false,
"filename_short": "contracts/Contract.sol",
"starting_column": 6,
"filename_absolute": "/tmp/slither-qwrvhvqp/contracts/Contract.sol",
"filename_relative": "contracts/Contract.sol"
}
},
"signature": "_sendBalance(X7TreasurySplitter.Outlet)"
}
}
}
}
],
"locations": [
{
"file": "contracts/Contract.sol",
"name": "pushAll",
"type": "function",
"lines": [
275,
276,
277,
278,
279,
280,
281,
282,
283,
284,
285,
286,
287,
288,
289,
290,
291
]
},
{
"file": "contracts/Contract.sol",
"name": "_sendBalance(Outlet.X7DEV1)",
"type": "node",
"lines": [
277,
278
]
},
{
"file": "contracts/Contract.sol",
"name": "(success,None) = recipient.call{value: ethToSend}()",
"type": "node",
"lines": [
332,
333
]
},
{
"file": "contracts/Contract.sol",
"name": "_sendBalance(Outlet.X7DEV2)",
"type": "node",
"lines": [
278,
279,
280,
281
]
},
{
"file": "contracts/Contract.sol",
"name": "(success,None) = recipient.call{value: ethToSend}()",
"type": "node",
"lines": [
332,
333
]
},
{
"file": "contracts/Contract.sol",
"name": "_sendBalance(Outlet.X7DEV3)",
"type": "node",
"lines": [
281,
282
]
},
{
"file": "contracts/Contract.sol",
"name": "(success,None) = recipient.call{value: ethToSend}()",
"type": "node",
"lines": [
332,
333
]
},
{
"file": "contracts/Contract.sol",
"name": "_sendBalance(Outlet.X7DEV4)",
"type": "node",
"lines": [
282
]
},
{
"file": "contracts/Contract.sol",
"name": "(success,None) = recipient.call{value: ethToSend}()",
"type": "node",
"lines": [
332,
333
]
},
{
"file": "contracts/Contract.sol",
"name": "_sendBalance(Outlet.X7DEV4)",
"type": "node",
"lines": [
282
]
},
{
"file": "contracts/Contract.sol",
"name": "outletBalance[outlet] = 0",
"type": "node",
"lines": [
326,
327
]
},
{
"file": "contracts/Contract.sol",
"name": "outletBalance[outlet] += ethToSend",
"type": "node",
"lines": [
334
]
},
{
"file": "contracts/Contract.sol",
"name": "_sendBalance(Outlet.X7DEV4)",
"type": "node",
"lines": [
282
]
},
{
"file": "contracts/Contract.sol",
"name": "reservedETH -= ethToSend",
"type": "node",
"lines": [
328,
329,
330,
331,
332
]
},
{
"file": "contracts/Contract.sol",
"name": "reservedETH += ethToSend",
"type": "node",
"lines": [
335,
336
]
}
],
"description": "Reentrancy in X7TreasurySplitter.pushAll() (contracts/Contract.sol#275-291):\n\tExternal calls:\n\t- _sendBalance(Outlet.X7DEV1) (contracts/Contract.sol#277-278)\n\t\t- (success,None) = recipient.call{value: ethToSend}() (contracts/Contract.sol#332-333)\n\t- _sendBalance(Outlet.X7DEV2) (contracts/Contract.sol#278-281)\n\t\t- (success,None) = recipient.call{value: ethToSend}() (contracts/Contract.sol#332-333)\n\t- _sendBalance(Outlet.X7DEV3) (contracts/Contract.sol#281-282)\n\t\t- (success,None) = recipient.call{value: ethToSend}() (contracts/Contract.sol#332-333)\n\t- _sendBalance(Outlet.X7DEV4) (contracts/Contract.sol#282)\n\t\t- (success,None) = recipient.call{value: ethToSend}() (contracts/Contract.sol#332-333)\n\tState variables written after the call(s):\n\t- _sendBalance(Outlet.X7DEV4) (contracts/Contract.sol#282)\n\t\t- outletBalance[outlet] = 0 (contracts/Contract.sol#326-327)\n\t\t- outletBalance[outlet] += ethToSend (contracts/Contract.sol#334)\n\tX7TreasurySplitter.outletBalance (contracts/Contract.sol#125-128) can be used in cross function reentrancies:\n\t- X7TreasurySplitter._sendBalance(X7TreasurySplitter.Outlet) (contracts/Contract.sol#318-337)\n\t- X7TreasurySplitter.divvyUp() (contracts/Contract.sol#184-211)\n\t- X7TreasurySplitter.outletBalance (contracts/Contract.sol#125-128)\n\t- _sendBalance(Outlet.X7DEV4) (contracts/Contract.sol#282)\n\t\t- reservedETH -= ethToSend (contracts/Contract.sol#328-332)\n\t\t- reservedETH += ethToSend (contracts/Contract.sol#335-336)\n\tX7TreasurySplitter.reservedETH (contracts/Contract.sol#122-123) can be used in cross function reentrancies:\n\t- X7TreasurySplitter._sendBalance(X7TreasurySplitter.Outlet) (contracts/Contract.sol#318-337)\n\t- X7TreasurySplitter.divvyUp() (contracts/Contract.sol#184-211)\n\t- X7TreasurySplitter.reservedETH (contracts/Contract.sol#122-123)"
}
|
| high | reentrancy | slither | Reentrancy in X7TreasurySplitter.pushAll() (contracts/Contract.sol#275-291): | 85 | no | — |
viewevidence_json{
"impact": "High",
"detector": "reentrancy-eth",
"elements": [
{
"name": "pushAll",
"type": "function",
"source_mapping": {
"lines": [
275,
276,
277,
278,
279,
280,
281,
282,
283,
284,
285,
286,
287,
288,
289,
290,
291
],
"start": 11688,
"length": 437,
"ending_column": 27,
"is_dependency": false,
"filename_short": "contracts/Contract.sol",
"starting_column": 49,
"filename_absolute": "/tmp/slither-qwrvhvqp/contracts/Contract.sol",
"filename_relative": "contracts/Contract.sol"
},
"type_specific_fields": {
"parent": {
"name": "X7TreasurySplitter",
"type": "contract",
"source_mapping": {
"lines": [
109,
110,
111,
112,
113,
114,
115,
116,
117,
118,
119,
120,
121,
122,
123,
124,
125,
126,
127,
128,
129,
130,
131,
132,
133,
134,
135,
136,
137,
138,
139,
140,
141,
142,
143,
144,
145,
146,
147,
148,
149,
150,
151,
152,
153,
154,
155,
156,
157,
158,
159,
160,
161,
162,
163,
164,
165,
166,
167,
168,
169,
170,
171,
172,
173,
174,
175,
176,
177,
178,
179,
180,
181,
182,
183,
184,
185,
186,
187,
188,
189,
190,
191,
192,
193,
194,
195,
196,
197,
198,
199,
200,
201,
202,
203,
204,
205,
206,
207,
208,
209,
210,
211,
212,
213,
214,
215,
216,
217,
218,
219,
220,
221,
222,
223,
224,
225,
226,
227,
228,
229,
230,
231,
232,
233,
234,
235,
236,
237,
238,
239,
240,
241,
242,
243,
244,
245,
246,
247,
248,
249,
250,
251,
252,
253,
254,
255,
256,
257,
258,
259,
260,
261,
262,
263,
264,
265,
266,
267,
268,
269,
270,
271,
272,
273,
274,
275,
276,
277,
278,
279,
280,
281,
282,
283,
284,
285,
286,
287,
288,
289,
290,
291,
292,
293,
294,
295,
296,
297,
298,
299,
300,
301,
302,
303,
304,
305,
306,
307,
308,
309,
310,
311,
312,
313,
314,
315,
316,
317,
318,
319,
320,
321,
322,
323,
324,
325,
326,
327,
328,
329,
330,
331,
332,
333,
334,
335,
336,
337
],
"start": 3661,
"length": 9942,
"ending_column": 3,
"is_dependency": false,
"filename_short": "contracts/Contract.sol",
"starting_column": 6,
"filename_absolute": "/tmp/slither-qwrvhvqp/contracts/Contract.sol",
"filename_relative": "contracts/Contract.sol"
}
},
"signature": "pushAll()"
}
},
{
"name": "_sendBalance(Outlet.X7DEV1)",
"type": "node",
"source_mapping": {
"lines": [
277,
278
],
"start": 11743,
"length": 27,
"ending_column": 19,
"is_dependency": false,
"filename_short": "contracts/Contract.sol",
"starting_column": 12,
"filename_absolute": "/tmp/slither-qwrvhvqp/contracts/Contract.sol",
"filename_relative": "contracts/Contract.sol"
},
"additional_fields": {
"underlying_type": "external_calls"
},
"type_specific_fields": {
"parent": {
"name": "pushAll",
"type": "function",
"source_mapping": {
"lines": [
275,
276,
277,
278,
279,
280,
281,
282,
283,
284,
285,
286,
287,
288,
289,
290,
291
],
"start": 11688,
"length": 437,
"ending_column": 27,
"is_dependency": false,
"filename_short": "contracts/Contract.sol",
"starting_column": 49,
"filename_absolute": "/tmp/slither-qwrvhvqp/contracts/Contract.sol",
"filename_relative": "contracts/Contract.sol"
},
"type_specific_fields": {
"parent": {
"name": "X7TreasurySplitter",
"type": "contract",
"source_mapping": {
"lines": [
109,
110,
111,
112,
113,
114,
115,
116,
117,
118,
119,
120,
121,
122,
123,
124,
125,
126,
127,
128,
129,
130,
131,
132,
133,
134,
135,
136,
137,
138,
139,
140,
141,
142,
143,
144,
145,
146,
147,
148,
149,
150,
151,
152,
153,
154,
155,
156,
157,
158,
159,
160,
161,
162,
163,
164,
165,
166,
167,
168,
169,
170,
171,
172,
173,
174,
175,
176,
177,
178,
179,
180,
181,
182,
183,
184,
185,
186,
187,
188,
189,
190,
191,
192,
193,
194,
195,
196,
197,
198,
199,
200,
201,
202,
203,
204,
205,
206,
207,
208,
209,
210,
211,
212,
213,
214,
215,
216,
217,
218,
219,
220,
221,
222,
223,
224,
225,
226,
227,
228,
229,
230,
231,
232,
233,
234,
235,
236,
237,
238,
239,
240,
241,
242,
243,
244,
245,
246,
247,
248,
249,
250,
251,
252,
253,
254,
255,
256,
257,
258,
259,
260,
261,
262,
263,
264,
265,
266,
267,
268,
269,
270,
271,
272,
273,
274,
275,
276,
277,
278,
279,
280,
281,
282,
283,
284,
285,
286,
287,
288,
289,
290,
291,
292,
293,
294,
295,
296,
297,
298,
299,
300,
301,
302,
303,
304,
305,
306,
307,
308,
309,
310,
311,
312,
313,
314,
315,
316,
317,
318,
319,
320,
321,
322,
323,
324,
325,
326,
327,
328,
329,
330,
331,
332,
333,
334,
335,
336,
337
],
"start": 3661,
"length": 9942,
"ending_column": 3,
"is_dependency": false,
"filename_short": "contracts/Contract.sol",
"starting_column": 6,
"filename_absolute": "/tmp/slither-qwrvhvqp/contracts/Contract.sol",
"filename_relative": "contracts/Contract.sol"
}
},
"signature": "pushAll()"
}
}
}
},
{
"name": "(success,None) = recipient.call{value: ethToSend}()",
"type": "node",
"source_mapping": {
"lines": [
332,
333
],
"start": 13425,
"length": 49,
"ending_column": 10,
"is_dependency": false,
"filename_short": "contracts/Contract.sol",
"starting_column": 14,
"filename_absolute": "/tmp/slither-qwrvhvqp/contracts/Contract.sol",
"filename_relative": "contracts/Contract.sol"
},
"additional_fields": {
"underlying_type": "external_calls_sending_eth"
},
"type_specific_fields": {
"parent": {
"name": "_sendBalance",
"type": "function",
"source_mapping": {
"lines": [
318,
319,
320,
321,
322,
323,
324,
325,
326,
327,
328,
329,
330,
331,
332,
333,
334,
335,
336,
337
],
"start": 13085,
"length": 516,
"ending_column": 1,
"is_dependency": false,
"filename_short": "contracts/Contract.sol",
"starting_column": 70,
"filename_absolute": "/tmp/slither-qwrvhvqp/contracts/Contract.sol",
"filename_relative": "contracts/Contract.sol"
},
"type_specific_fields": {
"parent": {
"name": "X7TreasurySplitter",
"type": "contract",
"source_mapping": {
"lines": [
109,
110,
111,
112,
113,
114,
115,
116,
117,
118,
119,
120,
121,
122,
123,
124,
125,
126,
127,
128,
129,
130,
131,
132,
133,
134,
135,
136,
137,
138,
139,
140,
141,
142,
143,
144,
145,
146,
147,
148,
149,
150,
151,
152,
153,
154,
155,
156,
157,
158,
159,
160,
161,
162,
163,
164,
165,
166,
167,
168,
169,
170,
171,
172,
173,
174,
175,
176,
177,
178,
179,
180,
181,
182,
183,
184,
185,
186,
187,
188,
189,
190,
191,
192,
193,
194,
195,
196,
197,
198,
199,
200,
201,
202,
203,
204,
205,
206,
207,
208,
209,
210,
211,
212,
213,
214,
215,
216,
217,
218,
219,
220,
221,
222,
223,
224,
225,
226,
227,
228,
229,
230,
231,
232,
233,
234,
235,
236,
237,
238,
239,
240,
241,
242,
243,
244,
245,
246,
247,
248,
249,
250,
251,
252,
253,
254,
255,
256,
257,
258,
259,
260,
261,
262,
263,
264,
265,
266,
267,
268,
269,
270,
271,
272,
273,
274,
275,
276,
277,
278,
279,
280,
281,
282,
283,
284,
285,
286,
287,
288,
289,
290,
291,
292,
293,
294,
295,
296,
297,
298,
299,
300,
301,
302,
303,
304,
305,
306,
307,
308,
309,
310,
311,
312,
313,
314,
315,
316,
317,
318,
319,
320,
321,
322,
323,
324,
325,
326,
327,
328,
329,
330,
331,
332,
333,
334,
335,
336,
337
],
"start": 3661,
"length": 9942,
"ending_column": 3,
"is_dependency": false,
"filename_short": "contracts/Contract.sol",
"starting_column": 6,
"filename_absolute": "/tmp/slither-qwrvhvqp/contracts/Contract.sol",
"filename_relative": "contracts/Contract.sol"
}
},
"signature": "_sendBalance(X7TreasurySplitter.Outlet)"
}
}
}
},
{
"name": "_sendBalance(Outlet.X7DEV2)",
"type": "node",
"source_mapping": {
"lines": [
278,
279,
280,
281
],
"start": 11780,
"length": 27,
"ending_column": 16,
"is_dependency": false,
"filename_short": "contracts/Contract.sol",
"starting_column": 29,
"filename_absolute": "/tmp/slither-qwrvhvqp/contracts/Contract.sol",
"filename_relative": "contracts/Contract.sol"
},
"additional_fields": {
"underlying_type": "external_calls"
},
"type_specific_fields": {
"parent": {
"name": "pushAll",
"type": "function",
"source_mapping": {
"lines": [
275,
276,
277,
278,
279,
280,
281,
282,
283,
284,
285,
286,
287,
288,
289,
290,
291
],
"start": 11688,
"length": 437,
"ending_column": 27,
"is_dependency": false,
"filename_short": "contracts/Contract.sol",
"starting_column": 49,
"filename_absolute": "/tmp/slither-qwrvhvqp/contracts/Contract.sol",
"filename_relative": "contracts/Contract.sol"
},
"type_specific_fields": {
"parent": {
"name": "X7TreasurySplitter",
"type": "contract",
"source_mapping": {
"lines": [
109,
110,
111,
112,
113,
114,
115,
116,
117,
118,
119,
120,
121,
122,
123,
124,
125,
126,
127,
128,
129,
130,
131,
132,
133,
134,
135,
136,
137,
138,
139,
140,
141,
142,
143,
144,
145,
146,
147,
148,
149,
150,
151,
152,
153,
154,
155,
156,
157,
158,
159,
160,
161,
162,
163,
164,
165,
166,
167,
168,
169,
170,
171,
172,
173,
174,
175,
176,
177,
178,
179,
180,
181,
182,
183,
184,
185,
186,
187,
188,
189,
190,
191,
192,
193,
194,
195,
196,
197,
198,
199,
200,
201,
202,
203,
204,
205,
206,
207,
208,
209,
210,
211,
212,
213,
214,
215,
216,
217,
218,
219,
220,
221,
222,
223,
224,
225,
226,
227,
228,
229,
230,
231,
232,
233,
234,
235,
236,
237,
238,
239,
240,
241,
242,
243,
244,
245,
246,
247,
248,
249,
250,
251,
252,
253,
254,
255,
256,
257,
258,
259,
260,
261,
262,
263,
264,
265,
266,
267,
268,
269,
270,
271,
272,
273,
274,
275,
276,
277,
278,
279,
280,
281,
282,
283,
284,
285,
286,
287,
288,
289,
290,
291,
292,
293,
294,
295,
296,
297,
298,
299,
300,
301,
302,
303,
304,
305,
306,
307,
308,
309,
310,
311,
312,
313,
314,
315,
316,
317,
318,
319,
320,
321,
322,
323,
324,
325,
326,
327,
328,
329,
330,
331,
332,
333,
334,
335,
336,
337
],
"start": 3661,
"length": 9942,
"ending_column": 3,
"is_dependency": false,
"filename_short": "contracts/Contract.sol",
"starting_column": 6,
"filename_absolute": "/tmp/slither-qwrvhvqp/contracts/Contract.sol",
"filename_relative": "contracts/Contract.sol"
}
},
"signature": "pushAll()"
}
}
}
},
{
"name": "(success,None) = recipient.call{value: ethToSend}()",
"type": "node",
"source_mapping": {
"lines": [
332,
333
],
"start": 13425,
"length": 49,
"ending_column": 10,
"is_dependency": false,
"filename_short": "contracts/Contract.sol",
"starting_column": 14,
"filename_absolute": "/tmp/slither-qwrvhvqp/contracts/Contract.sol",
"filename_relative": "contracts/Contract.sol"
},
"additional_fields": {
"underlying_type": "external_calls_sending_eth"
},
"type_specific_fields": {
"parent": {
"name": "_sendBalance",
"type": "function",
"source_mapping": {
"lines": [
318,
319,
320,
321,
322,
323,
324,
325,
326,
327,
328,
329,
330,
331,
332,
333,
334,
335,
336,
337
],
"start": 13085,
"length": 516,
"ending_column": 1,
"is_dependency": false,
"filename_short": "contracts/Contract.sol",
"starting_column": 70,
"filename_absolute": "/tmp/slither-qwrvhvqp/contracts/Contract.sol",
"filename_relative": "contracts/Contract.sol"
},
"type_specific_fields": {
"parent": {
"name": "X7TreasurySplitter",
"type": "contract",
"source_mapping": {
"lines": [
109,
110,
111,
112,
113,
114,
115,
116,
117,
118,
119,
120,
121,
122,
123,
124,
125,
126,
127,
128,
129,
130,
131,
132,
133,
134,
135,
136,
137,
138,
139,
140,
141,
142,
143,
144,
145,
146,
147,
148,
149,
150,
151,
152,
153,
154,
155,
156,
157,
158,
159,
160,
161,
162,
163,
164,
165,
166,
167,
168,
169,
170,
171,
172,
173,
174,
175,
176,
177,
178,
179,
180,
181,
182,
183,
184,
185,
186,
187,
188,
189,
190,
191,
192,
193,
194,
195,
196,
197,
198,
199,
200,
201,
202,
203,
204,
205,
206,
207,
208,
209,
210,
211,
212,
213,
214,
215,
216,
217,
218,
219,
220,
221,
222,
223,
224,
225,
226,
227,
228,
229,
230,
231,
232,
233,
234,
235,
236,
237,
238,
239,
240,
241,
242,
243,
244,
245,
246,
247,
248,
249,
250,
251,
252,
253,
254,
255,
256,
257,
258,
259,
260,
261,
262,
263,
264,
265,
266,
267,
268,
269,
270,
271,
272,
273,
274,
275,
276,
277,
278,
279,
280,
281,
282,
283,
284,
285,
286,
287,
288,
289,
290,
291,
292,
293,
294,
295,
296,
297,
298,
299,
300,
301,
302,
303,
304,
305,
306,
307,
308,
309,
310,
311,
312,
313,
314,
315,
316,
317,
318,
319,
320,
321,
322,
323,
324,
325,
326,
327,
328,
329,
330,
331,
332,
333,
334,
335,
336,
337
],
"start": 3661,
"length": 9942,
"ending_column": 3,
"is_dependency": false,
"filename_short": "contracts/Contract.sol",
"starting_column": 6,
"filename_absolute": "/tmp/slither-qwrvhvqp/contracts/Contract.sol",
"filename_relative": "contracts/Contract.sol"
}
},
"signature": "_sendBalance(X7TreasurySplitter.Outlet)"
}
}
}
}
],
"locations": [
{
"file": "contracts/Contract.sol",
"name": "pushAll",
"type": "function",
"lines": [
275,
276,
277,
278,
279,
280,
281,
282,
283,
284,
285,
286,
287,
288,
289,
290,
291
]
},
{
"file": "contracts/Contract.sol",
"name": "_sendBalance(Outlet.X7DEV1)",
"type": "node",
"lines": [
277,
278
]
},
{
"file": "contracts/Contract.sol",
"name": "(success,None) = recipient.call{value: ethToSend}()",
"type": "node",
"lines": [
332,
333
]
},
{
"file": "contracts/Contract.sol",
"name": "_sendBalance(Outlet.X7DEV2)",
"type": "node",
"lines": [
278,
279,
280,
281
]
},
{
"file": "contracts/Contract.sol",
"name": "(success,None) = recipient.call{value: ethToSend}()",
"type": "node",
"lines": [
332,
333
]
},
{
"file": "contracts/Contract.sol",
"name": "_sendBalance(Outlet.X7DEV2)",
"type": "node",
"lines": [
278,
279,
280,
281
]
},
{
"file": "contracts/Contract.sol",
"name": "outletBalance[outlet] = 0",
"type": "node",
"lines": [
326,
327
]
},
{
"file": "contracts/Contract.sol",
"name": "outletBalance[outlet] += ethToSend",
"type": "node",
"lines": [
334
]
},
{
"file": "contracts/Contract.sol",
"name": "_sendBalance(Outlet.X7DEV2)",
"type": "node",
"lines": [
278,
279,
280,
281
]
},
{
"file": "contracts/Contract.sol",
"name": "reservedETH -= ethToSend",
"type": "node",
"lines": [
328,
329,
330,
331,
332
]
},
{
"file": "contracts/Contract.sol",
"name": "reservedETH += ethToSend",
"type": "node",
"lines": [
335,
336
]
}
],
"description": "Reentrancy in X7TreasurySplitter.pushAll() (contracts/Contract.sol#275-291):\n\tExternal calls:\n\t- _sendBalance(Outlet.X7DEV1) (contracts/Contract.sol#277-278)\n\t\t- (success,None) = recipient.call{value: ethToSend}() (contracts/Contract.sol#332-333)\n\t- _sendBalance(Outlet.X7DEV2) (contracts/Contract.sol#278-281)\n\t\t- (success,None) = recipient.call{value: ethToSend}() (contracts/Contract.sol#332-333)\n\tState variables written after the call(s):\n\t- _sendBalance(Outlet.X7DEV2) (contracts/Contract.sol#278-281)\n\t\t- outletBalance[outlet] = 0 (contracts/Contract.sol#326-327)\n\t\t- outletBalance[outlet] += ethToSend (contracts/Contract.sol#334)\n\tX7TreasurySplitter.outletBalance (contracts/Contract.sol#125-128) can be used in cross function reentrancies:\n\t- X7TreasurySplitter._sendBalance(X7TreasurySplitter.Outlet) (contracts/Contract.sol#318-337)\n\t- X7TreasurySplitter.divvyUp() (contracts/Contract.sol#184-211)\n\t- X7TreasurySplitter.outletBalance (contracts/Contract.sol#125-128)\n\t- _sendBalance(Outlet.X7DEV2) (contracts/Contract.sol#278-281)\n\t\t- reservedETH -= ethToSend (contracts/Contract.sol#328-332)\n\t\t- reservedETH += ethToSend (contracts/Contract.sol#335-336)\n\tX7TreasurySplitter.reservedETH (contracts/Contract.sol#122-123) can be used in cross function reentrancies:\n\t- X7TreasurySplitter._sendBalance(X7TreasurySplitter.Outlet) (contracts/Contract.sol#318-337)\n\t- X7TreasurySplitter.divvyUp() (contracts/Contract.sol#184-211)\n\t- X7TreasurySplitter.reservedETH (contracts/Contract.sol#122-123)"
}
|
| high | reentrancy | slither | Reentrancy in X7TreasurySplitter.pushAll() (contracts/Contract.sol#275-291): | 85 | no | — |
viewevidence_json{
"impact": "High",
"detector": "reentrancy-eth",
"elements": [
{
"name": "pushAll",
"type": "function",
"source_mapping": {
"lines": [
275,
276,
277,
278,
279,
280,
281,
282,
283,
284,
285,
286,
287,
288,
289,
290,
291
],
"start": 11688,
"length": 437,
"ending_column": 27,
"is_dependency": false,
"filename_short": "contracts/Contract.sol",
"starting_column": 49,
"filename_absolute": "/tmp/slither-qwrvhvqp/contracts/Contract.sol",
"filename_relative": "contracts/Contract.sol"
},
"type_specific_fields": {
"parent": {
"name": "X7TreasurySplitter",
"type": "contract",
"source_mapping": {
"lines": [
109,
110,
111,
112,
113,
114,
115,
116,
117,
118,
119,
120,
121,
122,
123,
124,
125,
126,
127,
128,
129,
130,
131,
132,
133,
134,
135,
136,
137,
138,
139,
140,
141,
142,
143,
144,
145,
146,
147,
148,
149,
150,
151,
152,
153,
154,
155,
156,
157,
158,
159,
160,
161,
162,
163,
164,
165,
166,
167,
168,
169,
170,
171,
172,
173,
174,
175,
176,
177,
178,
179,
180,
181,
182,
183,
184,
185,
186,
187,
188,
189,
190,
191,
192,
193,
194,
195,
196,
197,
198,
199,
200,
201,
202,
203,
204,
205,
206,
207,
208,
209,
210,
211,
212,
213,
214,
215,
216,
217,
218,
219,
220,
221,
222,
223,
224,
225,
226,
227,
228,
229,
230,
231,
232,
233,
234,
235,
236,
237,
238,
239,
240,
241,
242,
243,
244,
245,
246,
247,
248,
249,
250,
251,
252,
253,
254,
255,
256,
257,
258,
259,
260,
261,
262,
263,
264,
265,
266,
267,
268,
269,
270,
271,
272,
273,
274,
275,
276,
277,
278,
279,
280,
281,
282,
283,
284,
285,
286,
287,
288,
289,
290,
291,
292,
293,
294,
295,
296,
297,
298,
299,
300,
301,
302,
303,
304,
305,
306,
307,
308,
309,
310,
311,
312,
313,
314,
315,
316,
317,
318,
319,
320,
321,
322,
323,
324,
325,
326,
327,
328,
329,
330,
331,
332,
333,
334,
335,
336,
337
],
"start": 3661,
"length": 9942,
"ending_column": 3,
"is_dependency": false,
"filename_short": "contracts/Contract.sol",
"starting_column": 6,
"filename_absolute": "/tmp/slither-qwrvhvqp/contracts/Contract.sol",
"filename_relative": "contracts/Contract.sol"
}
},
"signature": "pushAll()"
}
},
{
"name": "_sendBalance(Outlet.X7DEV1)",
"type": "node",
"source_mapping": {
"lines": [
277,
278
],
"start": 11743,
"length": 27,
"ending_column": 19,
"is_dependency": false,
"filename_short": "contracts/Contract.sol",
"starting_column": 12,
"filename_absolute": "/tmp/slither-qwrvhvqp/contracts/Contract.sol",
"filename_relative": "contracts/Contract.sol"
},
"additional_fields": {
"underlying_type": "external_calls"
},
"type_specific_fields": {
"parent": {
"name": "pushAll",
"type": "function",
"source_mapping": {
"lines": [
275,
276,
277,
278,
279,
280,
281,
282,
283,
284,
285,
286,
287,
288,
289,
290,
291
],
"start": 11688,
"length": 437,
"ending_column": 27,
"is_dependency": false,
"filename_short": "contracts/Contract.sol",
"starting_column": 49,
"filename_absolute": "/tmp/slither-qwrvhvqp/contracts/Contract.sol",
"filename_relative": "contracts/Contract.sol"
},
"type_specific_fields": {
"parent": {
"name": "X7TreasurySplitter",
"type": "contract",
"source_mapping": {
"lines": [
109,
110,
111,
112,
113,
114,
115,
116,
117,
118,
119,
120,
121,
122,
123,
124,
125,
126,
127,
128,
129,
130,
131,
132,
133,
134,
135,
136,
137,
138,
139,
140,
141,
142,
143,
144,
145,
146,
147,
148,
149,
150,
151,
152,
153,
154,
155,
156,
157,
158,
159,
160,
161,
162,
163,
164,
165,
166,
167,
168,
169,
170,
171,
172,
173,
174,
175,
176,
177,
178,
179,
180,
181,
182,
183,
184,
185,
186,
187,
188,
189,
190,
191,
192,
193,
194,
195,
196,
197,
198,
199,
200,
201,
202,
203,
204,
205,
206,
207,
208,
209,
210,
211,
212,
213,
214,
215,
216,
217,
218,
219,
220,
221,
222,
223,
224,
225,
226,
227,
228,
229,
230,
231,
232,
233,
234,
235,
236,
237,
238,
239,
240,
241,
242,
243,
244,
245,
246,
247,
248,
249,
250,
251,
252,
253,
254,
255,
256,
257,
258,
259,
260,
261,
262,
263,
264,
265,
266,
267,
268,
269,
270,
271,
272,
273,
274,
275,
276,
277,
278,
279,
280,
281,
282,
283,
284,
285,
286,
287,
288,
289,
290,
291,
292,
293,
294,
295,
296,
297,
298,
299,
300,
301,
302,
303,
304,
305,
306,
307,
308,
309,
310,
311,
312,
313,
314,
315,
316,
317,
318,
319,
320,
321,
322,
323,
324,
325,
326,
327,
328,
329,
330,
331,
332,
333,
334,
335,
336,
337
],
"start": 3661,
"length": 9942,
"ending_column": 3,
"is_dependency": false,
"filename_short": "contracts/Contract.sol",
"starting_column": 6,
"filename_absolute": "/tmp/slither-qwrvhvqp/contracts/Contract.sol",
"filename_relative": "contracts/Contract.sol"
}
},
"signature": "pushAll()"
}
}
}
},
{
"name": "(success,None) = recipient.call{value: ethToSend}()",
"type": "node",
"source_mapping": {
"lines": [
332,
333
],
"start": 13425,
"length": 49,
"ending_column": 10,
"is_dependency": false,
"filename_short": "contracts/Contract.sol",
"starting_column": 14,
"filename_absolute": "/tmp/slither-qwrvhvqp/contracts/Contract.sol",
"filename_relative": "contracts/Contract.sol"
},
"additional_fields": {
"underlying_type": "external_calls_sending_eth"
},
"type_specific_fields": {
"parent": {
"name": "_sendBalance",
"type": "function",
"source_mapping": {
"lines": [
318,
319,
320,
321,
322,
323,
324,
325,
326,
327,
328,
329,
330,
331,
332,
333,
334,
335,
336,
337
],
"start": 13085,
"length": 516,
"ending_column": 1,
"is_dependency": false,
"filename_short": "contracts/Contract.sol",
"starting_column": 70,
"filename_absolute": "/tmp/slither-qwrvhvqp/contracts/Contract.sol",
"filename_relative": "contracts/Contract.sol"
},
"type_specific_fields": {
"parent": {
"name": "X7TreasurySplitter",
"type": "contract",
"source_mapping": {
"lines": [
109,
110,
111,
112,
113,
114,
115,
116,
117,
118,
119,
120,
121,
122,
123,
124,
125,
126,
127,
128,
129,
130,
131,
132,
133,
134,
135,
136,
137,
138,
139,
140,
141,
142,
143,
144,
145,
146,
147,
148,
149,
150,
151,
152,
153,
154,
155,
156,
157,
158,
159,
160,
161,
162,
163,
164,
165,
166,
167,
168,
169,
170,
171,
172,
173,
174,
175,
176,
177,
178,
179,
180,
181,
182,
183,
184,
185,
186,
187,
188,
189,
190,
191,
192,
193,
194,
195,
196,
197,
198,
199,
200,
201,
202,
203,
204,
205,
206,
207,
208,
209,
210,
211,
212,
213,
214,
215,
216,
217,
218,
219,
220,
221,
222,
223,
224,
225,
226,
227,
228,
229,
230,
231,
232,
233,
234,
235,
236,
237,
238,
239,
240,
241,
242,
243,
244,
245,
246,
247,
248,
249,
250,
251,
252,
253,
254,
255,
256,
257,
258,
259,
260,
261,
262,
263,
264,
265,
266,
267,
268,
269,
270,
271,
272,
273,
274,
275,
276,
277,
278,
279,
280,
281,
282,
283,
284,
285,
286,
287,
288,
289,
290,
291,
292,
293,
294,
295,
296,
297,
298,
299,
300,
301,
302,
303,
304,
305,
306,
307,
308,
309,
310,
311,
312,
313,
314,
315,
316,
317,
318,
319,
320,
321,
322,
323,
324,
325,
326,
327,
328,
329,
330,
331,
332,
333,
334,
335,
336,
337
],
"start": 3661,
"length": 9942,
"ending_column": 3,
"is_dependency": false,
"filename_short": "contracts/Contract.sol",
"starting_column": 6,
"filename_absolute": "/tmp/slither-qwrvhvqp/contracts/Contract.sol",
"filename_relative": "contracts/Contract.sol"
}
},
"signature": "_sendBalance(X7TreasurySplitter.Outlet)"
}
}
}
},
{
"name": "_sendBalance(Outlet.X7DEV2)",
"type": "node",
"source_mapping": {
"lines": [
278,
279,
280,
281
],
"start": 11780,
"length": 27,
"ending_column": 16,
"is_dependency": false,
"filename_short": "contracts/Contract.sol",
"starting_column": 29,
"filename_absolute": "/tmp/slither-qwrvhvqp/contracts/Contract.sol",
"filename_relative": "contracts/Contract.sol"
},
"additional_fields": {
"underlying_type": "external_calls"
},
"type_specific_fields": {
"parent": {
"name": "pushAll",
"type": "function",
"source_mapping": {
"lines": [
275,
276,
277,
278,
279,
280,
281,
282,
283,
284,
285,
286,
287,
288,
289,
290,
291
],
"start": 11688,
"length": 437,
"ending_column": 27,
"is_dependency": false,
"filename_short": "contracts/Contract.sol",
"starting_column": 49,
"filename_absolute": "/tmp/slither-qwrvhvqp/contracts/Contract.sol",
"filename_relative": "contracts/Contract.sol"
},
"type_specific_fields": {
"parent": {
"name": "X7TreasurySplitter",
"type": "contract",
"source_mapping": {
"lines": [
109,
110,
111,
112,
113,
114,
115,
116,
117,
118,
119,
120,
121,
122,
123,
124,
125,
126,
127,
128,
129,
130,
131,
132,
133,
134,
135,
136,
137,
138,
139,
140,
141,
142,
143,
144,
145,
146,
147,
148,
149,
150,
151,
152,
153,
154,
155,
156,
157,
158,
159,
160,
161,
162,
163,
164,
165,
166,
167,
168,
169,
170,
171,
172,
173,
174,
175,
176,
177,
178,
179,
180,
181,
182,
183,
184,
185,
186,
187,
188,
189,
190,
191,
192,
193,
194,
195,
196,
197,
198,
199,
200,
201,
202,
203,
204,
205,
206,
207,
208,
209,
210,
211,
212,
213,
214,
215,
216,
217,
218,
219,
220,
221,
222,
223,
224,
225,
226,
227,
228,
229,
230,
231,
232,
233,
234,
235,
236,
237,
238,
239,
240,
241,
242,
243,
244,
245,
246,
247,
248,
249,
250,
251,
252,
253,
254,
255,
256,
257,
258,
259,
260,
261,
262,
263,
264,
265,
266,
267,
268,
269,
270,
271,
272,
273,
274,
275,
276,
277,
278,
279,
280,
281,
282,
283,
284,
285,
286,
287,
288,
289,
290,
291,
292,
293,
294,
295,
296,
297,
298,
299,
300,
301,
302,
303,
304,
305,
306,
307,
308,
309,
310,
311,
312,
313,
314,
315,
316,
317,
318,
319,
320,
321,
322,
323,
324,
325,
326,
327,
328,
329,
330,
331,
332,
333,
334,
335,
336,
337
],
"start": 3661,
"length": 9942,
"ending_column": 3,
"is_dependency": false,
"filename_short": "contracts/Contract.sol",
"starting_column": 6,
"filename_absolute": "/tmp/slither-qwrvhvqp/contracts/Contract.sol",
"filename_relative": "contracts/Contract.sol"
}
},
"signature": "pushAll()"
}
}
}
},
{
"name": "(success,None) = recipient.call{value: ethToSend}()",
"type": "node",
"source_mapping": {
"lines": [
332,
333
],
"start": 13425,
"length": 49,
"ending_column": 10,
"is_dependency": false,
"filename_short": "contracts/Contract.sol",
"starting_column": 14,
"filename_absolute": "/tmp/slither-qwrvhvqp/contracts/Contract.sol",
"filename_relative": "contracts/Contract.sol"
},
"additional_fields": {
"underlying_type": "external_calls_sending_eth"
},
"type_specific_fields": {
"parent": {
"name": "_sendBalance",
"type": "function",
"source_mapping": {
"lines": [
318,
319,
320,
321,
322,
323,
324,
325,
326,
327,
328,
329,
330,
331,
332,
333,
334,
335,
336,
337
],
"start": 13085,
"length": 516,
"ending_column": 1,
"is_dependency": false,
"filename_short": "contracts/Contract.sol",
"starting_column": 70,
"filename_absolute": "/tmp/slither-qwrvhvqp/contracts/Contract.sol",
"filename_relative": "contracts/Contract.sol"
},
"type_specific_fields": {
"parent": {
"name": "X7TreasurySplitter",
"type": "contract",
"source_mapping": {
"lines": [
109,
110,
111,
112,
113,
114,
115,
116,
117,
118,
119,
120,
121,
122,
123,
124,
125,
126,
127,
128,
129,
130,
131,
132,
133,
134,
135,
136,
137,
138,
139,
140,
141,
142,
143,
144,
145,
146,
147,
148,
149,
150,
151,
152,
153,
154,
155,
156,
157,
158,
159,
160,
161,
162,
163,
164,
165,
166,
167,
168,
169,
170,
171,
172,
173,
174,
175,
176,
177,
178,
179,
180,
181,
182,
183,
184,
185,
186,
187,
188,
189,
190,
191,
192,
193,
194,
195,
196,
197,
198,
199,
200,
201,
202,
203,
204,
205,
206,
207,
208,
209,
210,
211,
212,
213,
214,
215,
216,
217,
218,
219,
220,
221,
222,
223,
224,
225,
226,
227,
228,
229,
230,
231,
232,
233,
234,
235,
236,
237,
238,
239,
240,
241,
242,
243,
244,
245,
246,
247,
248,
249,
250,
251,
252,
253,
254,
255,
256,
257,
258,
259,
260,
261,
262,
263,
264,
265,
266,
267,
268,
269,
270,
271,
272,
273,
274,
275,
276,
277,
278,
279,
280,
281,
282,
283,
284,
285,
286,
287,
288,
289,
290,
291,
292,
293,
294,
295,
296,
297,
298,
299,
300,
301,
302,
303,
304,
305,
306,
307,
308,
309,
310,
311,
312,
313,
314,
315,
316,
317,
318,
319,
320,
321,
322,
323,
324,
325,
326,
327,
328,
329,
330,
331,
332,
333,
334,
335,
336,
337
],
"start": 3661,
"length": 9942,
"ending_column": 3,
"is_dependency": false,
"filename_short": "contracts/Contract.sol",
"starting_column": 6,
"filename_absolute": "/tmp/slither-qwrvhvqp/contracts/Contract.sol",
"filename_relative": "contracts/Contract.sol"
}
},
"signature": "_sendBalance(X7TreasurySplitter.Outlet)"
}
}
}
}
],
"locations": [
{
"file": "contracts/Contract.sol",
"name": "pushAll",
"type": "function",
"lines": [
275,
276,
277,
278,
279,
280,
281,
282,
283,
284,
285,
286,
287,
288,
289,
290,
291
]
},
{
"file": "contracts/Contract.sol",
"name": "_sendBalance(Outlet.X7DEV1)",
"type": "node",
"lines": [
277,
278
]
},
{
"file": "contracts/Contract.sol",
"name": "(success,None) = recipient.call{value: ethToSend}()",
"type": "node",
"lines": [
332,
333
]
},
{
"file": "contracts/Contract.sol",
"name": "_sendBalance(Outlet.X7DEV2)",
"type": "node",
"lines": [
278,
279,
280,
281
]
},
{
"file": "contracts/Contract.sol",
"name": "(success,None) = recipient.call{value: ethToSend}()",
"type": "node",
"lines": [
332,
333
]
},
{
"file": "contracts/Contract.sol",
"name": "_sendBalance(Outlet.X7DEV3)",
"type": "node",
"lines": [
281,
282
]
},
{
"file": "contracts/Contract.sol",
"name": "(success,None) = recipient.call{value: ethToSend}()",
"type": "node",
"lines": [
332,
333
]
},
{
"file": "contracts/Contract.sol",
"name": "_sendBalance(Outlet.X7DEV4)",
"type": "node",
"lines": [
282
]
},
{
"file": "contracts/Contract.sol",
"name": "(success,None) = recipient.call{value: ethToSend}()",
"type": "node",
"lines": [
332,
333
]
},
{
"file": "contracts/Contract.sol",
"name": "_sendBalance(Outlet.X7DEV5)",
"type": "node",
"lines": [
283
]
},
{
"file": "contracts/Contract.sol",
"name": "(success,None) = recipient.call{value: ethToSend}()",
"type": "node",
"lines": [
332,
333
]
},
{
"file": "contracts/Contract.sol",
"name": "_sendBalance(Outlet.X7DEV6)",
"type": "node",
"lines": [
283,
284
]
},
{
"file": "contracts/Contract.sol",
"name": "(success,None) = recipient.call{value: ethToSend}()",
"type": "node",
"lines": [
332,
333
]
},
{
"file": "contracts/Contract.sol",
"name": "_sendBalance(Outlet.X7DEV7)",
"type": "node",
"lines": [
285,
286,
287
]
},
{
"file": "contracts/Contract.sol",
"name": "(success,None) = recipient.call{value: ethToSend}()",
"type": "node",
"lines": [
332,
333
]
},
{
"file": "contracts/Contract.sol",
"name": "_sendBalance(Outlet.X7DEV7)",
"type": "node",
"lines": [
285,
286,
287
]
},
{
"file": "contracts/Contract.sol",
"name": "outletBalance[outlet] = 0",
"type": "node",
"lines": [
326,
327
]
},
{
"file": "contracts/Contract.sol",
"name": "outletBalance[outlet] += ethToSend",
"type": "node",
"lines": [
334
]
},
{
"file": "contracts/Contract.sol",
"name": "_sendBalance(Outlet.X7DEV7)",
"type": "node",
"lines": [
285,
286,
287
]
},
{
"file": "contracts/Contract.sol",
"name": "reservedETH -= ethToSend",
"type": "node",
"lines": [
328,
329,
330,
331,
332
]
},
{
"file": "contracts/Contract.sol",
"name": "reservedETH += ethToSend",
"type": "node",
"lines": [
335,
336
]
}
],
"description": "Reentrancy in X7TreasurySplitter.pushAll() (contracts/Contract.sol#275-291):\n\tExternal calls:\n\t- _sendBalance(Outlet.X7DEV1) (contracts/Contract.sol#277-278)\n\t\t- (success,None) = recipient.call{value: ethToSend}() (contracts/Contract.sol#332-333)\n\t- _sendBalance(Outlet.X7DEV2) (contracts/Contract.sol#278-281)\n\t\t- (success,None) = recipient.call{value: ethToSend}() (contracts/Contract.sol#332-333)\n\t- _sendBalance(Outlet.X7DEV3) (contracts/Contract.sol#281-282)\n\t\t- (success,None) = recipient.call{value: ethToSend}() (contracts/Contract.sol#332-333)\n\t- _sendBalance(Outlet.X7DEV4) (contracts/Contract.sol#282)\n\t\t- (success,None) = recipient.call{value: ethToSend}() (contracts/Contract.sol#332-333)\n\t- _sendBalance(Outlet.X7DEV5) (contracts/Contract.sol#283)\n\t\t- (success,None) = recipient.call{value: ethToSend}() (contracts/Contract.sol#332-333)\n\t- _sendBalance(Outlet.X7DEV6) (contracts/Contract.sol#283-284)\n\t\t- (success,None) = recipient.call{value: ethToSend}() (contracts/Contract.sol#332-333)\n\t- _sendBalance(Outlet.X7DEV7) (contracts/Contract.sol#285-287)\n\t\t- (success,None) = recipient.call{value: ethToSend}() (contracts/Contract.sol#332-333)\n\tState variables written after the call(s):\n\t- _sendBalance(Outlet.X7DEV7) (contracts/Contract.sol#285-287)\n\t\t- outletBalance[outlet] = 0 (contracts/Contract.sol#326-327)\n\t\t- outletBalance[outlet] += ethToSend (contracts/Contract.sol#334)\n\tX7TreasurySplitter.outletBalance (contracts/Contract.sol#125-128) can be used in cross function reentrancies:\n\t- X7TreasurySplitter._sendBalance(X7TreasurySplitter.Outlet) (contracts/Contract.sol#318-337)\n\t- X7TreasurySplitter.divvyUp() (contracts/Contract.sol#184-211)\n\t- X7TreasurySplitter.outletBalance (contracts/Contract.sol#125-128)\n\t- _sendBalance(Outlet.X7DEV7) (contracts/Contract.sol#285-287)\n\t\t- reservedETH -= ethToSend (contracts/Contract.sol#328-332)\n\t\t- reservedETH += ethToSend (contracts/Contract.sol#335-336)\n\tX7TreasurySplitter.reservedETH (contracts/Contract.sol#122-123) can be used in cross function reentrancies:\n\t- X7TreasurySplitter._sendBalance(X7TreasurySplitter.Outlet) (contracts/Contract.sol#318-337)\n\t- X7TreasurySplitter.divvyUp() (contracts/Contract.sol#184-211)\n\t- X7TreasurySplitter.reservedETH (contracts/Contract.sol#122-123)"
}
|
| high | reentrancy | slither | Reentrancy in X7TreasurySplitter.pushAll() (contracts/Contract.sol#275-291): | 85 | no | — |
viewevidence_json{
"impact": "High",
"detector": "reentrancy-eth",
"elements": [
{
"name": "pushAll",
"type": "function",
"source_mapping": {
"lines": [
275,
276,
277,
278,
279,
280,
281,
282,
283,
284,
285,
286,
287,
288,
289,
290,
291
],
"start": 11688,
"length": 437,
"ending_column": 27,
"is_dependency": false,
"filename_short": "contracts/Contract.sol",
"starting_column": 49,
"filename_absolute": "/tmp/slither-qwrvhvqp/contracts/Contract.sol",
"filename_relative": "contracts/Contract.sol"
},
"type_specific_fields": {
"parent": {
"name": "X7TreasurySplitter",
"type": "contract",
"source_mapping": {
"lines": [
109,
110,
111,
112,
113,
114,
115,
116,
117,
118,
119,
120,
121,
122,
123,
124,
125,
126,
127,
128,
129,
130,
131,
132,
133,
134,
135,
136,
137,
138,
139,
140,
141,
142,
143,
144,
145,
146,
147,
148,
149,
150,
151,
152,
153,
154,
155,
156,
157,
158,
159,
160,
161,
162,
163,
164,
165,
166,
167,
168,
169,
170,
171,
172,
173,
174,
175,
176,
177,
178,
179,
180,
181,
182,
183,
184,
185,
186,
187,
188,
189,
190,
191,
192,
193,
194,
195,
196,
197,
198,
199,
200,
201,
202,
203,
204,
205,
206,
207,
208,
209,
210,
211,
212,
213,
214,
215,
216,
217,
218,
219,
220,
221,
222,
223,
224,
225,
226,
227,
228,
229,
230,
231,
232,
233,
234,
235,
236,
237,
238,
239,
240,
241,
242,
243,
244,
245,
246,
247,
248,
249,
250,
251,
252,
253,
254,
255,
256,
257,
258,
259,
260,
261,
262,
263,
264,
265,
266,
267,
268,
269,
270,
271,
272,
273,
274,
275,
276,
277,
278,
279,
280,
281,
282,
283,
284,
285,
286,
287,
288,
289,
290,
291,
292,
293,
294,
295,
296,
297,
298,
299,
300,
301,
302,
303,
304,
305,
306,
307,
308,
309,
310,
311,
312,
313,
314,
315,
316,
317,
318,
319,
320,
321,
322,
323,
324,
325,
326,
327,
328,
329,
330,
331,
332,
333,
334,
335,
336,
337
],
"start": 3661,
"length": 9942,
"ending_column": 3,
"is_dependency": false,
"filename_short": "contracts/Contract.sol",
"starting_column": 6,
"filename_absolute": "/tmp/slither-qwrvhvqp/contracts/Contract.sol",
"filename_relative": "contracts/Contract.sol"
}
},
"signature": "pushAll()"
}
},
{
"name": "_sendBalance(Outlet.X7DEV1)",
"type": "node",
"source_mapping": {
"lines": [
277,
278
],
"start": 11743,
"length": 27,
"ending_column": 19,
"is_dependency": false,
"filename_short": "contracts/Contract.sol",
"starting_column": 12,
"filename_absolute": "/tmp/slither-qwrvhvqp/contracts/Contract.sol",
"filename_relative": "contracts/Contract.sol"
},
"additional_fields": {
"underlying_type": "external_calls"
},
"type_specific_fields": {
"parent": {
"name": "pushAll",
"type": "function",
"source_mapping": {
"lines": [
275,
276,
277,
278,
279,
280,
281,
282,
283,
284,
285,
286,
287,
288,
289,
290,
291
],
"start": 11688,
"length": 437,
"ending_column": 27,
"is_dependency": false,
"filename_short": "contracts/Contract.sol",
"starting_column": 49,
"filename_absolute": "/tmp/slither-qwrvhvqp/contracts/Contract.sol",
"filename_relative": "contracts/Contract.sol"
},
"type_specific_fields": {
"parent": {
"name": "X7TreasurySplitter",
"type": "contract",
"source_mapping": {
"lines": [
109,
110,
111,
112,
113,
114,
115,
116,
117,
118,
119,
120,
121,
122,
123,
124,
125,
126,
127,
128,
129,
130,
131,
132,
133,
134,
135,
136,
137,
138,
139,
140,
141,
142,
143,
144,
145,
146,
147,
148,
149,
150,
151,
152,
153,
154,
155,
156,
157,
158,
159,
160,
161,
162,
163,
164,
165,
166,
167,
168,
169,
170,
171,
172,
173,
174,
175,
176,
177,
178,
179,
180,
181,
182,
183,
184,
185,
186,
187,
188,
189,
190,
191,
192,
193,
194,
195,
196,
197,
198,
199,
200,
201,
202,
203,
204,
205,
206,
207,
208,
209,
210,
211,
212,
213,
214,
215,
216,
217,
218,
219,
220,
221,
222,
223,
224,
225,
226,
227,
228,
229,
230,
231,
232,
233,
234,
235,
236,
237,
238,
239,
240,
241,
242,
243,
244,
245,
246,
247,
248,
249,
250,
251,
252,
253,
254,
255,
256,
257,
258,
259,
260,
261,
262,
263,
264,
265,
266,
267,
268,
269,
270,
271,
272,
273,
274,
275,
276,
277,
278,
279,
280,
281,
282,
283,
284,
285,
286,
287,
288,
289,
290,
291,
292,
293,
294,
295,
296,
297,
298,
299,
300,
301,
302,
303,
304,
305,
306,
307,
308,
309,
310,
311,
312,
313,
314,
315,
316,
317,
318,
319,
320,
321,
322,
323,
324,
325,
326,
327,
328,
329,
330,
331,
332,
333,
334,
335,
336,
337
],
"start": 3661,
"length": 9942,
"ending_column": 3,
"is_dependency": false,
"filename_short": "contracts/Contract.sol",
"starting_column": 6,
"filename_absolute": "/tmp/slither-qwrvhvqp/contracts/Contract.sol",
"filename_relative": "contracts/Contract.sol"
}
},
"signature": "pushAll()"
}
}
}
},
{
"name": "(success,None) = recipient.call{value: ethToSend}()",
"type": "node",
"source_mapping": {
"lines": [
332,
333
],
"start": 13425,
"length": 49,
"ending_column": 10,
"is_dependency": false,
"filename_short": "contracts/Contract.sol",
"starting_column": 14,
"filename_absolute": "/tmp/slither-qwrvhvqp/contracts/Contract.sol",
"filename_relative": "contracts/Contract.sol"
},
"additional_fields": {
"underlying_type": "external_calls_sending_eth"
},
"type_specific_fields": {
"parent": {
"name": "_sendBalance",
"type": "function",
"source_mapping": {
"lines": [
318,
319,
320,
321,
322,
323,
324,
325,
326,
327,
328,
329,
330,
331,
332,
333,
334,
335,
336,
337
],
"start": 13085,
"length": 516,
"ending_column": 1,
"is_dependency": false,
"filename_short": "contracts/Contract.sol",
"starting_column": 70,
"filename_absolute": "/tmp/slither-qwrvhvqp/contracts/Contract.sol",
"filename_relative": "contracts/Contract.sol"
},
"type_specific_fields": {
"parent": {
"name": "X7TreasurySplitter",
"type": "contract",
"source_mapping": {
"lines": [
109,
110,
111,
112,
113,
114,
115,
116,
117,
118,
119,
120,
121,
122,
123,
124,
125,
126,
127,
128,
129,
130,
131,
132,
133,
134,
135,
136,
137,
138,
139,
140,
141,
142,
143,
144,
145,
146,
147,
148,
149,
150,
151,
152,
153,
154,
155,
156,
157,
158,
159,
160,
161,
162,
163,
164,
165,
166,
167,
168,
169,
170,
171,
172,
173,
174,
175,
176,
177,
178,
179,
180,
181,
182,
183,
184,
185,
186,
187,
188,
189,
190,
191,
192,
193,
194,
195,
196,
197,
198,
199,
200,
201,
202,
203,
204,
205,
206,
207,
208,
209,
210,
211,
212,
213,
214,
215,
216,
217,
218,
219,
220,
221,
222,
223,
224,
225,
226,
227,
228,
229,
230,
231,
232,
233,
234,
235,
236,
237,
238,
239,
240,
241,
242,
243,
244,
245,
246,
247,
248,
249,
250,
251,
252,
253,
254,
255,
256,
257,
258,
259,
260,
261,
262,
263,
264,
265,
266,
267,
268,
269,
270,
271,
272,
273,
274,
275,
276,
277,
278,
279,
280,
281,
282,
283,
284,
285,
286,
287,
288,
289,
290,
291,
292,
293,
294,
295,
296,
297,
298,
299,
300,
301,
302,
303,
304,
305,
306,
307,
308,
309,
310,
311,
312,
313,
314,
315,
316,
317,
318,
319,
320,
321,
322,
323,
324,
325,
326,
327,
328,
329,
330,
331,
332,
333,
334,
335,
336,
337
],
"start": 3661,
"length": 9942,
"ending_column": 3,
"is_dependency": false,
"filename_short": "contracts/Contract.sol",
"starting_column": 6,
"filename_absolute": "/tmp/slither-qwrvhvqp/contracts/Contract.sol",
"filename_relative": "contracts/Contract.sol"
}
},
"signature": "_sendBalance(X7TreasurySplitter.Outlet)"
}
}
}
},
{
"name": "_sendBalance(Outlet.X7DEV2)",
"type": "node",
"source_mapping": {
"lines": [
278,
279,
280,
281
],
"start": 11780,
"length": 27,
"ending_column": 16,
"is_dependency": false,
"filename_short": "contracts/Contract.sol",
"starting_column": 29,
"filename_absolute": "/tmp/slither-qwrvhvqp/contracts/Contract.sol",
"filename_relative": "contracts/Contract.sol"
},
"additional_fields": {
"underlying_type": "external_calls"
},
"type_specific_fields": {
"parent": {
"name": "pushAll",
"type": "function",
"source_mapping": {
"lines": [
275,
276,
277,
278,
279,
280,
281,
282,
283,
284,
285,
286,
287,
288,
289,
290,
291
],
"start": 11688,
"length": 437,
"ending_column": 27,
"is_dependency": false,
"filename_short": "contracts/Contract.sol",
"starting_column": 49,
"filename_absolute": "/tmp/slither-qwrvhvqp/contracts/Contract.sol",
"filename_relative": "contracts/Contract.sol"
},
"type_specific_fields": {
"parent": {
"name": "X7TreasurySplitter",
"type": "contract",
"source_mapping": {
"lines": [
109,
110,
111,
112,
113,
114,
115,
116,
117,
118,
119,
120,
121,
122,
123,
124,
125,
126,
127,
128,
129,
130,
131,
132,
133,
134,
135,
136,
137,
138,
139,
140,
141,
142,
143,
144,
145,
146,
147,
148,
149,
150,
151,
152,
153,
154,
155,
156,
157,
158,
159,
160,
161,
162,
163,
164,
165,
166,
167,
168,
169,
170,
171,
172,
173,
174,
175,
176,
177,
178,
179,
180,
181,
182,
183,
184,
185,
186,
187,
188,
189,
190,
191,
192,
193,
194,
195,
196,
197,
198,
199,
200,
201,
202,
203,
204,
205,
206,
207,
208,
209,
210,
211,
212,
213,
214,
215,
216,
217,
218,
219,
220,
221,
222,
223,
224,
225,
226,
227,
228,
229,
230,
231,
232,
233,
234,
235,
236,
237,
238,
239,
240,
241,
242,
243,
244,
245,
246,
247,
248,
249,
250,
251,
252,
253,
254,
255,
256,
257,
258,
259,
260,
261,
262,
263,
264,
265,
266,
267,
268,
269,
270,
271,
272,
273,
274,
275,
276,
277,
278,
279,
280,
281,
282,
283,
284,
285,
286,
287,
288,
289,
290,
291,
292,
293,
294,
295,
296,
297,
298,
299,
300,
301,
302,
303,
304,
305,
306,
307,
308,
309,
310,
311,
312,
313,
314,
315,
316,
317,
318,
319,
320,
321,
322,
323,
324,
325,
326,
327,
328,
329,
330,
331,
332,
333,
334,
335,
336,
337
],
"start": 3661,
"length": 9942,
"ending_column": 3,
"is_dependency": false,
"filename_short": "contracts/Contract.sol",
"starting_column": 6,
"filename_absolute": "/tmp/slither-qwrvhvqp/contracts/Contract.sol",
"filename_relative": "contracts/Contract.sol"
}
},
"signature": "pushAll()"
}
}
}
},
{
"name": "(success,None) = recipient.call{value: ethToSend}()",
"type": "node",
"source_mapping": {
"lines": [
332,
333
],
"start": 13425,
"length": 49,
"ending_column": 10,
"is_dependency": false,
"filename_short": "contracts/Contract.sol",
"starting_column": 14,
"filename_absolute": "/tmp/slither-qwrvhvqp/contracts/Contract.sol",
"filename_relative": "contracts/Contract.sol"
},
"additional_fields": {
"underlying_type": "external_calls_sending_eth"
},
"type_specific_fields": {
"parent": {
"name": "_sendBalance",
"type": "function",
"source_mapping": {
"lines": [
318,
319,
320,
321,
322,
323,
324,
325,
326,
327,
328,
329,
330,
331,
332,
333,
334,
335,
336,
337
],
"start": 13085,
"length": 516,
"ending_column": 1,
"is_dependency": false,
"filename_short": "contracts/Contract.sol",
"starting_column": 70,
"filename_absolute": "/tmp/slither-qwrvhvqp/contracts/Contract.sol",
"filename_relative": "contracts/Contract.sol"
},
"type_specific_fields": {
"parent": {
"name": "X7TreasurySplitter",
"type": "contract",
"source_mapping": {
"lines": [
109,
110,
111,
112,
113,
114,
115,
116,
117,
118,
119,
120,
121,
122,
123,
124,
125,
126,
127,
128,
129,
130,
131,
132,
133,
134,
135,
136,
137,
138,
139,
140,
141,
142,
143,
144,
145,
146,
147,
148,
149,
150,
151,
152,
153,
154,
155,
156,
157,
158,
159,
160,
161,
162,
163,
164,
165,
166,
167,
168,
169,
170,
171,
172,
173,
174,
175,
176,
177,
178,
179,
180,
181,
182,
183,
184,
185,
186,
187,
188,
189,
190,
191,
192,
193,
194,
195,
196,
197,
198,
199,
200,
201,
202,
203,
204,
205,
206,
207,
208,
209,
210,
211,
212,
213,
214,
215,
216,
217,
218,
219,
220,
221,
222,
223,
224,
225,
226,
227,
228,
229,
230,
231,
232,
233,
234,
235,
236,
237,
238,
239,
240,
241,
242,
243,
244,
245,
246,
247,
248,
249,
250,
251,
252,
253,
254,
255,
256,
257,
258,
259,
260,
261,
262,
263,
264,
265,
266,
267,
268,
269,
270,
271,
272,
273,
274,
275,
276,
277,
278,
279,
280,
281,
282,
283,
284,
285,
286,
287,
288,
289,
290,
291,
292,
293,
294,
295,
296,
297,
298,
299,
300,
301,
302,
303,
304,
305,
306,
307,
308,
309,
310,
311,
312,
313,
314,
315,
316,
317,
318,
319,
320,
321,
322,
323,
324,
325,
326,
327,
328,
329,
330,
331,
332,
333,
334,
335,
336,
337
],
"start": 3661,
"length": 9942,
"ending_column": 3,
"is_dependency": false,
"filename_short": "contracts/Contract.sol",
"starting_column": 6,
"filename_absolute": "/tmp/slither-qwrvhvqp/contracts/Contract.sol",
"filename_relative": "contracts/Contract.sol"
}
},
"signature": "_sendBalance(X7TreasurySplitter.Outlet)"
}
}
}
}
],
"locations": [
{
"file": "contracts/Contract.sol",
"name": "pushAll",
"type": "function",
"lines": [
275,
276,
277,
278,
279,
280,
281,
282,
283,
284,
285,
286,
287,
288,
289,
290,
291
]
},
{
"file": "contracts/Contract.sol",
"name": "_sendBalance(Outlet.X7DEV1)",
"type": "node",
"lines": [
277,
278
]
},
{
"file": "contracts/Contract.sol",
"name": "(success,None) = recipient.call{value: ethToSend}()",
"type": "node",
"lines": [
332,
333
]
},
{
"file": "contracts/Contract.sol",
"name": "_sendBalance(Outlet.X7DEV2)",
"type": "node",
"lines": [
278,
279,
280,
281
]
},
{
"file": "contracts/Contract.sol",
"name": "(success,None) = recipient.call{value: ethToSend}()",
"type": "node",
"lines": [
332,
333
]
},
{
"file": "contracts/Contract.sol",
"name": "_sendBalance(Outlet.X7DEV3)",
"type": "node",
"lines": [
281,
282
]
},
{
"file": "contracts/Contract.sol",
"name": "(success,None) = recipient.call{value: ethToSend}()",
"type": "node",
"lines": [
332,
333
]
},
{
"file": "contracts/Contract.sol",
"name": "_sendBalance(Outlet.X7DEV4)",
"type": "node",
"lines": [
282
]
},
{
"file": "contracts/Contract.sol",
"name": "(success,None) = recipient.call{value: ethToSend}()",
"type": "node",
"lines": [
332,
333
]
},
{
"file": "contracts/Contract.sol",
"name": "_sendBalance(Outlet.X7DEV5)",
"type": "node",
"lines": [
283
]
},
{
"file": "contracts/Contract.sol",
"name": "(success,None) = recipient.call{value: ethToSend}()",
"type": "node",
"lines": [
332,
333
]
},
{
"file": "contracts/Contract.sol",
"name": "_sendBalance(Outlet.X7DEV6)",
"type": "node",
"lines": [
283,
284
]
},
{
"file": "contracts/Contract.sol",
"name": "(success,None) = recipient.call{value: ethToSend}()",
"type": "node",
"lines": [
332,
333
]
},
{
"file": "contracts/Contract.sol",
"name": "_sendBalance(Outlet.X7DEV7)",
"type": "node",
"lines": [
285,
286,
287
]
},
{
"file": "contracts/Contract.sol",
"name": "(success,None) = recipient.call{value: ethToSend}()",
"type": "node",
"lines": [
332,
333
]
},
{
"file": "contracts/Contract.sol",
"name": "_sendBalance(Outlet.REWARD_POOL)",
"type": "node",
"lines": [
287,
288,
289
]
},
{
"file": "contracts/Contract.sol",
"name": "(success,None) = recipient.call{value: ethToSend}()",
"type": "node",
"lines": [
332,
333
]
},
{
"file": "contracts/Contract.sol",
"name": "_sendBalance(Outlet.OTHER_SLOT1)",
"type": "node",
"lines": [
289,
290
]
},
{
"file": "contracts/Contract.sol",
"name": "(success,None) = recipient.call{value: ethToSend}()",
"type": "node",
"lines": [
332,
333
]
},
{
"file": "contracts/Contract.sol",
"name": "_sendBalance(Outlet.OTHER_SLOT2)",
"type": "node",
"lines": [
290,
291
]
},
{
"file": "contracts/Contract.sol",
"name": "(success,None) = recipient.call{value: ethToSend}()",
"type": "node",
"lines": [
332,
333
]
},
{
"file": "contracts/Contract.sol",
"name": "_sendBalance(Outlet.OTHER_SLOT2)",
"type": "node",
"lines": [
290,
291
]
},
{
"file": "contracts/Contract.sol",
"name": "outletBalance[outlet] = 0",
"type": "node",
"lines": [
326,
327
]
},
{
"file": "contracts/Contract.sol",
"name": "outletBalance[outlet] += ethToSend",
"type": "node",
"lines": [
334
]
},
{
"file": "contracts/Contract.sol",
"name": "_sendBalance(Outlet.OTHER_SLOT2)",
"type": "node",
"lines": [
290,
291
]
},
{
"file": "contracts/Contract.sol",
"name": "reservedETH -= ethToSend",
"type": "node",
"lines": [
328,
329,
330,
331,
332
]
},
{
"file": "contracts/Contract.sol",
"name": "reservedETH += ethToSend",
"type": "node",
"lines": [
335,
336
]
}
],
"description": "Reentrancy in X7TreasurySplitter.pushAll() (contracts/Contract.sol#275-291):\n\tExternal calls:\n\t- _sendBalance(Outlet.X7DEV1) (contracts/Contract.sol#277-278)\n\t\t- (success,None) = recipient.call{value: ethToSend}() (contracts/Contract.sol#332-333)\n\t- _sendBalance(Outlet.X7DEV2) (contracts/Contract.sol#278-281)\n\t\t- (success,None) = recipient.call{value: ethToSend}() (contracts/Contract.sol#332-333)\n\t- _sendBalance(Outlet.X7DEV3) (contracts/Contract.sol#281-282)\n\t\t- (success,None) = recipient.call{value: ethToSend}() (contracts/Contract.sol#332-333)\n\t- _sendBalance(Outlet.X7DEV4) (contracts/Contract.sol#282)\n\t\t- (success,None) = recipient.call{value: ethToSend}() (contracts/Contract.sol#332-333)\n\t- _sendBalance(Outlet.X7DEV5) (contracts/Contract.sol#283)\n\t\t- (success,None) = recipient.call{value: ethToSend}() (contracts/Contract.sol#332-333)\n\t- _sendBalance(Outlet.X7DEV6) (contracts/Contract.sol#283-284)\n\t\t- (success,None) = recipient.call{value: ethToSend}() (contracts/Contract.sol#332-333)\n\t- _sendBalance(Outlet.X7DEV7) (contracts/Contract.sol#285-287)\n\t\t- (success,None) = recipient.call{value: ethToSend}() (contracts/Contract.sol#332-333)\n\t- _sendBalance(Outlet.REWARD_POOL) (contracts/Contract.sol#287-289)\n\t\t- (success,None) = recipient.call{value: ethToSend}() (contracts/Contract.sol#332-333)\n\t- _sendBalance(Outlet.OTHER_SLOT1) (contracts/Contract.sol#289-290)\n\t\t- (success,None) = recipient.call{value: ethToSend}() (contracts/Contract.sol#332-333)\n\t- _sendBalance(Outlet.OTHER_SLOT2) (contracts/Contract.sol#290-291)\n\t\t- (success,None) = recipient.call{value: ethToSend}() (contracts/Contract.sol#332-333)\n\tState variables written after the call(s):\n\t- _sendBalance(Outlet.OTHER_SLOT2) (contracts/Contract.sol#290-291)\n\t\t- outletBalance[outlet] = 0 (contracts/Contract.sol#326-327)\n\t\t- outletBalance[outlet] += ethToSend (contracts/Contract.sol#334)\n\tX7TreasurySplitter.outletBalance (contracts/Contract.sol#125-128) can be used in cross function reentrancies:\n\t- X7TreasurySplitter._sendBalance(X7TreasurySplitter.Outlet) (contracts/Contract.sol#318-337)\n\t- X7TreasurySplitter.divvyUp() (contracts/Contract.sol#184-211)\n\t- X7TreasurySplitter.outletBalance (contracts/Contract.sol#125-128)\n\t- _sendBalance(Outlet.OTHER_SLOT2) (contracts/Contract.sol#290-291)\n\t\t- reservedETH -= ethToSend (contracts/Contract.sol#328-332)\n\t\t- reservedETH += ethToSend (contracts/Contract.sol#335-336)\n\tX7TreasurySplitter.reservedETH (contracts/Contract.sol#122-123) can be used in cross function reentrancies:\n\t- X7TreasurySplitter._sendBalance(X7TreasurySplitter.Outlet) (contracts/Contract.sol#318-337)\n\t- X7TreasurySplitter.divvyUp() (contracts/Contract.sol#184-211)\n\t- X7TreasurySplitter.reservedETH (contracts/Contract.sol#122-123)"
}
|