Skip to content

Commit a11966d

Browse files
committed
Reentrancy protection
1 parent e78f4fd commit a11966d

1 file changed

Lines changed: 15 additions & 5 deletions

File tree

contracts/LedgerChannel.sol

Lines changed: 15 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -163,17 +163,27 @@ contract LedgerChannel {
163163
}
164164

165165
function LCOpenTimeout(bytes32 _lcID) public {
166-
require(msg.sender == Channels[_lcID].partyAddresses[0] && Channels[_lcID].isOpen == false);
167-
require(now > Channels[_lcID].LCopenTimeout);
166+
require(msg.sender == Channels[_lcID].partyAddresses[0], "Request not sent by channel party A");
167+
require(Channels[_lcID].isOpen == false, "Channel has been joined");
168+
require(now > Channels[_lcID].LCopenTimeout, "Channel timeout has not expire");
169+
170+
// reentrancy protection
171+
uint256 ethbalanceA = Channels[_lcID].ethBalances[0];
172+
uint256 tokenbalanceA = Channels[_lcID].erc20Balances[0];
173+
174+
Channels[_lcID].ethBalances[0] = 0;
175+
Channels[_lcID].ethBalances[1] = 0;
176+
Channels[_lcID].erc20Balances[0] = 0;
177+
Channels[_lcID].erc20Balances[1] = 0;
168178

169179
if(Channels[_lcID].initialDeposit[0] != 0) {
170-
Channels[_lcID].partyAddresses[0].transfer(Channels[_lcID].ethBalances[0]);
180+
Channels[_lcID].partyAddresses[0].transfer(ethbalanceA);
171181
}
172182
if(Channels[_lcID].initialDeposit[1] != 0) {
173-
require(Channels[_lcID].token.transfer(Channels[_lcID].partyAddresses[0], Channels[_lcID].erc20Balances[0]),"CreateChannel: token transfer failure");
183+
require(Channels[_lcID].token.transfer(Channels[_lcID].partyAddresses[0], tokenbalanceA),"CreateChannel: token transfer failure");
174184
}
175185

176-
emit DidLCClose(_lcID, 0, Channels[_lcID].ethBalances[0], Channels[_lcID].erc20Balances[0], 0, 0);
186+
emit DidLCClose(_lcID, 0, ethbalanceA, tokenbalanceA, 0, 0);
177187

178188
// only safe to delete since no action was taken on this channel
179189
delete Channels[_lcID];

0 commit comments

Comments
 (0)