From 3854966fe57a7b91e2c1c109eac16fa3d357e131 Mon Sep 17 00:00:00 2001 From: PowVT Date: Mon, 3 Feb 2025 09:41:12 -0500 Subject: [PATCH 1/2] rm btc broadcast precompile return data, use decode precompile for txid --- src/lib/CorsaBitcoin.sol | 13 ++----------- src/uBTC.sol | 11 +++++++---- 2 files changed, 9 insertions(+), 15 deletions(-) diff --git a/src/lib/CorsaBitcoin.sol b/src/lib/CorsaBitcoin.sol index fb57f7b..8048421 100644 --- a/src/lib/CorsaBitcoin.sol +++ b/src/lib/CorsaBitcoin.sol @@ -51,19 +51,10 @@ library CorsaBitcoin { return returndata; } - function broadcastBitcoinTx(bytes memory signedTx) internal returns (bytes32) { - (bool success, bytes memory returndata) = + 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 { From 1ee239153a840689c6ea768d0978941f64a0fa42 Mon Sep 17 00:00:00 2001 From: PowVT Date: Mon, 3 Feb 2025 09:42:56 -0500 Subject: [PATCH 2/2] fmt --- src/lib/CorsaBitcoin.sol | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/lib/CorsaBitcoin.sol b/src/lib/CorsaBitcoin.sol index 8048421..6da8ac8 100644 --- a/src/lib/CorsaBitcoin.sol +++ b/src/lib/CorsaBitcoin.sol @@ -52,8 +52,7 @@ library CorsaBitcoin { } function broadcastBitcoinTx(bytes memory signedTx) internal { - (bool success, ) = - BTC_PRECOMPILE.call(abi.encodePacked(BROADCAST_LEADING_BYTES, signedTx)); + (bool success,) = BTC_PRECOMPILE.call(abi.encodePacked(BROADCAST_LEADING_BYTES, signedTx)); if (!success) revert PrecompileCallFailed(); }