diff --git a/src/lib/CorsaBitcoin.sol b/src/lib/CorsaBitcoin.sol index fb57f7b..6da8ac8 100644 --- a/src/lib/CorsaBitcoin.sol +++ b/src/lib/CorsaBitcoin.sol @@ -51,19 +51,9 @@ library CorsaBitcoin { return returndata; } - function broadcastBitcoinTx(bytes memory signedTx) internal returns (bytes32) { - (bool success, bytes memory returndata) = - BTC_PRECOMPILE.call(abi.encodePacked(BROADCAST_LEADING_BYTES, signedTx)); + function broadcastBitcoinTx(bytes memory signedTx) internal { + (bool success,) = BTC_PRECOMPILE.call(abi.encodePacked(BROADCAST_LEADING_BYTES, signedTx)); if (!success) revert PrecompileCallFailed(); - - require(returndata.length == 32, "Invalid txid length"); - - bytes32 txid; - assembly { - txid := mload(add(returndata, 32)) - } - - return txid; } function createAndSignBitcoinTx(address signer, uint64 amount, uint64 blockHeight, string memory destinationAddress) diff --git a/src/uBTC.sol b/src/uBTC.sol index 15e5233..223ef48 100644 --- a/src/uBTC.sol +++ b/src/uBTC.sol @@ -84,9 +84,9 @@ contract uBTC is WETH, Ownable { _mint(msg.sender, amount); // Broadcast signed btc tx - bytes32 txid = CorsaBitcoin.broadcastBitcoinTx(signedTx); + CorsaBitcoin.broadcastBitcoinTx(signedTx); - emit Deposit(txid, amount); + emit Deposit(btcTx.txid, amount); } function withdraw(uint64 amount, uint32 btcBlockHeight, string calldata dest) public { @@ -102,10 +102,13 @@ contract uBTC is WETH, Ownable { // Create Bitcoin transaction using the UTXOs bytes memory signedTx = CorsaBitcoin.createAndSignBitcoinTx(address(this), amount, btcBlockHeight, dest); + // Decode signed bitcoin tx + CorsaBitcoin.BitcoinTx memory btcTx = CorsaBitcoin.decodeBitcoinTx(signedTx); + // Broadcast signed BTC tx - bytes32 txid = CorsaBitcoin.broadcastBitcoinTx(signedTx); + CorsaBitcoin.broadcastBitcoinTx(signedTx); - emit Withdraw(txid, amount); + emit Withdraw(btcTx.txid, amount); } function adminBurn(address wallet, uint256 amount) public onlyOwner {