Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 2 additions & 12 deletions src/lib/CorsaBitcoin.sol
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down
11 changes: 7 additions & 4 deletions src/uBTC.sol
Original file line number Diff line number Diff line change
Expand Up @@ -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 {
Expand All @@ -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 {
Expand Down