@@ -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