Skip to content

Commit 43d370d

Browse files
authored
fix(swap): decode non-EVM receiver addresses from Bitcoin (#256)
1 parent 7337fca commit 43d370d

File tree

1 file changed

+9
-5
lines changed

1 file changed

+9
-5
lines changed

examples/swap/contracts/Swap.sol

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ contract Swap is
3434
error ApprovalFailed();
3535
error TransferFailed(string);
3636
error InsufficientAmount(string);
37+
error InvalidMessageLength();
3738

3839
event TokenSwap(
3940
bytes sender,
@@ -91,13 +92,16 @@ contract Swap is
9192
});
9293

9394
if (context.chainID == BITCOIN_TESTNET || context.chainID == BITCOIN) {
95+
if (message.length < 41) revert InvalidMessageLength();
9496
params.target = BytesHelperLib.bytesToAddress(message, 0);
95-
params.to = abi.encodePacked(
96-
BytesHelperLib.bytesToAddress(message, 20)
97-
);
98-
if (message.length >= 41) {
99-
params.withdraw = BytesHelperLib.bytesToBool(message, 40);
97+
params.to = new bytes(message.length - 21);
98+
for (uint256 i = 0; i < message.length - 21; i++) {
99+
params.to[i] = message[20 + i];
100100
}
101+
params.withdraw = BytesHelperLib.bytesToBool(
102+
message,
103+
message.length - 1
104+
);
101105
} else {
102106
(
103107
address targetToken,

0 commit comments

Comments
 (0)