Skip to content

Commit 59d08be

Browse files
committed
encode lengths as le bytes in Base Encoder library
1 parent a23db2e commit 59d08be

3 files changed

Lines changed: 29 additions & 12 deletions

File tree

‎base/Makefile‎

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,8 @@
33
BASE_RPC=https://base-sepolia.cbhq.net
44
# BASE_RPC=https://mainnet.base.org
55

6-
LOCAL_SOL = 0x08AF32D8482533F5C21DA4Eb99CD287dD52339F1
6+
LOCAL_SOL = 0xd51905478B98b496DF834fb5409eb2e42Fd3Eb2D
7+
LOCAL_SPL = 0x0B462901D26be439E8229315aBdA94Bb176b55df
78
REMOTE_SOL = 0x0501550155015501550155015501550155015501550155015501550155015501
89
REMOTE_SPL = 0xcd43b9e91032f9346b89b99c2155981f799ebf0d8cf4f56b03dbec65bdd6bbe5
910

@@ -51,3 +52,11 @@ bridge-sol-to-solana:
5152
TO=0x9827993b7b317eb6c74279d49074a13b33a3495a30637c86a7513922014ba424 \
5253
AMOUNT=1000000 \
5354
forge script BridgeTokensToSolanaScript --account testnet-admin --rpc-url $(BASE_RPC) --broadcast -vvvv
55+
56+
.PHONY: bridge-tokens-to-solana
57+
bridge-tokens-to-solana:
58+
LOCAL_TOKEN=$(LOCAL_SPL) \
59+
REMOTE_TOKEN=$(REMOTE_SPL) \
60+
TO=0x9827993b7b317eb6c74279d49074a13b33a3495a30637c86a7513922014ba424 \
61+
AMOUNT=1000000 \
62+
forge script BridgeTokensToSolanaScript --account testnet-admin --rpc-url $(BASE_RPC) --broadcast -vvvv

‎base/deployments/base_sepolia.json‎

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
{
2-
"MessagePasser": "0x7207c00BC575636Fa142beFaeFc927292E221aF7",
3-
"CrossChainMessenger": "0x9143A3f06fBB81B37A5e9da70F59c54cDc62436a",
4-
"Bridge": "0x351c4b815129D903700F6b35ce2c5d41b6d715d4",
5-
"CrossChainERC20Factory": "0x508B0a6351743E0cFD34d47508906E4845Dc4D22",
6-
"WrappedSOL": "0x08AF32D8482533F5C21DA4Eb99CD287dD52339F1",
7-
"WrappedSPL": "0x91EDe45e81F39f7508Bf35cFe8f5c551e4f39572"
2+
"MessagePasser": "0x4cDbC1CDDd0E1A109625A44770a7dF0e8dc65789",
3+
"CrossChainMessenger": "0x870e6d2d935a27b6422eE990C00F62F2860e8F26",
4+
"Bridge": "0x22B66c7FBC67f57d16FC94e862902098CD7b2972",
5+
"CrossChainERC20Factory": "0xf2e363E638bF585267d5f0B1B85275DD6B06e3BE",
6+
"WrappedSOL": "0xd51905478B98b496DF834fb5409eb2e42Fd3Eb2D",
7+
"WrappedSPL": "0x0B462901D26be439E8229315aBdA94Bb176b55df"
88
}

‎base/src/libraries/Encoder.sol‎

Lines changed: 13 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,23 @@
11
// SPDX-License-Identifier: MIT
22
pragma solidity ^0.8.15;
33

4+
import {LibBit} from "solady/utils/LibBit.sol";
5+
46
import {Bridge} from "../Bridge.sol";
57
import {CrossChainMessenger} from "../CrossChainMessenger.sol";
68
import {ISolanaMessagePasser} from "../interfaces/ISolanaMessagePasser.sol";
79

810
library Encoder {
11+
using LibBit for uint256;
12+
913
function encodeBridgePayload(Bridge.BridgePayload memory payload) internal pure returns (bytes memory) {
1014
return abi.encodePacked(
1115
payload.localToken,
1216
payload.remoteToken,
1317
payload.from,
1418
payload.to,
1519
payload.amount,
16-
uint32(payload.extraData.length),
20+
_getLeLength(payload.extraData.length),
1721
payload.extraData
1822
);
1923
}
@@ -23,13 +27,13 @@ library Encoder {
2327
pure
2428
returns (bytes memory)
2529
{
26-
bytes memory serializedIxs = abi.encodePacked(uint32(payload.ixs.length));
30+
bytes memory serializedIxs = abi.encodePacked(_getLeLength(payload.ixs.length));
2731

2832
for (uint256 i; i < payload.ixs.length; i++) {
2933
serializedIxs = abi.encodePacked(serializedIxs, serializeIx(payload.ixs[i]));
3034
}
3135

32-
return abi.encodePacked(payload.nonce, payload.sender, uint32(serializedIxs.length), serializedIxs);
36+
return abi.encodePacked(payload.nonce, payload.sender, _getLeLength(serializedIxs.length), serializedIxs);
3337
}
3438

3539
function encodeMessage(uint256 nonce, address sender, ISolanaMessagePasser.Instruction[] memory ixs)
@@ -48,14 +52,14 @@ library Encoder {
4852

4953
function serializeIx(ISolanaMessagePasser.Instruction memory ix) internal pure returns (bytes memory) {
5054
bytes memory data = abi.encodePacked(ix.programId);
51-
data = abi.encodePacked(data, uint32(ix.accounts.length));
55+
data = abi.encodePacked(data, _getLeLength(ix.accounts.length));
5256

5357
for (uint256 i; i < ix.accounts.length; i++) {
5458
ISolanaMessagePasser.AccountMeta memory account = ix.accounts[i];
5559
data = abi.encodePacked(data, account.pubKey, account.isWritable, account.isSigner);
5660
}
5761

58-
data = abi.encodePacked(data, uint32(ix.data.length), ix.data);
62+
data = abi.encodePacked(data, _getLeLength(ix.data.length), ix.data);
5963

6064
return data;
6165
}
@@ -70,4 +74,8 @@ library Encoder {
7074

7175
return abi.encodePacked(data, ix.data);
7276
}
77+
78+
function _getLeLength(uint256 inp) private pure returns (uint32) {
79+
return uint32(inp.reverseBytes() >> 224);
80+
}
7381
}

0 commit comments

Comments
 (0)