function finishExchange(bytes32 exchangeId) private { require(address(this) == batteryOwner[exchanges[exchangeId].itemProposer], "Proposer's battery not locked"); require(address(this) == batteryOwner[exchanges[exchangeId].itemExecuter], "Executor's battery not locked"); if (exchanges[exchangeId].valueProposer > exchanges[exchangeId].valueExecuter){ require(lockedBalances[exchanges[exchangeId].executer] >= exchanges[exchangeId].valueProposer.sub(exchanges[exchangeId].valueExecuter)); address(this).call(abi.encodeWithSignature("transfer(address,uint256)", exchanges[exchangeId].proposer), exchanges[exchangeId].valueProposer.sub(exchanges[exchangeId].valueExecuter)); } else { require(lockedBalances[exchanges[exchangeId].proposer] >= exchanges[exchangeId].valueExecuter.sub(exchanges[exchangeId].valueProposer)); address(this).call(abi.encodeWithSignature("transfer(address,uint256)", exchanges[exchangeId].executer), exchanges[exchangeId].valueExecuter.sub(exchanges[exchangeId].valueProposer)); } if (battery[exchanges[exchangeId].itemProposer].publicDomain) { if (exchanges[exchangeId].itemProposer != 0) { address(this).call(abi.encodeWithSignature("changeBatteryOwner(address,uint256)", exchanges[exchangeId].executer, exchanges[exchangeId].itemProposer)); } if (exchanges[exchangeId].itemExecuter != 0) { address(this).call(abi.encodeWithSignature("changeBatteryOwner(address,uint256)", exchanges[exchangeId].proposer, exchanges[exchangeId].itemExecuter)); } } else if (msg.sender == batteryOwner[exchanges[exchangeId].itemProposer]) { //retirada battery[exchanges[exchangeId].itemProposer].privateCharger = address(0); } else { //entrega al pto carga battery[exchanges[exchangeId].itemProposer].privateCharger = msg.sender; } exchanges[exchangeId].executed = true; emit Execution(exchanges[exchangeId].proposer, msg.sender, exchanges[exchangeId].itemProposer, exchanges[exchangeId].itemExecuter); }
0.4.18