Skip to content

Commit 8c568ef

Browse files
committed
simplify solana side
1 parent 456ed8d commit 8c568ef

10 files changed

Lines changed: 34 additions & 9 deletions

File tree

base/src/libraries/SVMBridgeLib.sol

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,6 @@ library SVMBridgeLib {
3737
result = abi.encodePacked(
3838
result,
3939
uint8(0), // Sol
40-
transfer.localToken, // remote_token
4140
transfer.to, // to
4241
SVMLib.toU64LittleEndian(transfer.remoteAmount) // amount
4342
);

base/test/libraries/SVMBridgeLib.t.sol

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -87,7 +87,6 @@ contract SVMBridgeLibTest is Test {
8787
bytes memory expected = abi.encodePacked(
8888
uint8(1), // Transfer variant
8989
uint8(0), // Sol token type
90-
transfer.localToken, // remote_token (20 bytes)
9190
transfer.to, // to (32 bytes)
9291
SVMLib.toU64LittleEndian(transfer.remoteAmount), // amount (8 bytes)
9392
SVMLib.serializeIxs(ixs) // instructions
@@ -114,7 +113,6 @@ contract SVMBridgeLibTest is Test {
114113
bytes memory expected = abi.encodePacked(
115114
uint8(1), // Transfer variant
116115
uint8(0), // Sol token type
117-
transfer.localToken, // remote_token (20 bytes)
118116
transfer.to,
119117
SVMLib.toU64LittleEndian(transfer.remoteAmount),
120118
SVMLib.serializeIxs(ixs)
@@ -257,7 +255,6 @@ contract SVMBridgeLibTest is Test {
257255
bytes memory expected = abi.encodePacked(
258256
uint8(1), // Transfer variant
259257
uint8(0), // Sol token type
260-
transfer.localToken, // remote_token (20 bytes)
261258
transfer.to,
262259
SVMLib.toU64LittleEndian(type(uint64).max),
263260
SVMLib.serializeIxs(ixs)
@@ -337,7 +334,6 @@ contract SVMBridgeLibTest is Test {
337334
bytes memory expectedTransfer = abi.encodePacked(
338335
uint8(1),
339336
uint8(0),
340-
transfer.localToken,
341337
transfer.to,
342338
SVMLib.toU64LittleEndian(1000),
343339
SVMLib.serializeIxs(ixs)

solana/Cargo.lock

Lines changed: 1 addition & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

solana/programs/bridge/Cargo.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,3 +37,4 @@ solana-loader-v3-interface = { version = "3.0.0", features = ["serde"] }
3737
solana-message = "2.2.1"
3838
solana-signer = "2.2.1"
3939
solana-transaction = "2.2.1"
40+
hex-literal = "0.4.1"

solana/programs/bridge/src/common/state/bridge.rs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -187,6 +187,9 @@ pub struct ProtocolConfig {
187187
/// Block interval requirement for output root registration. Every Base block associated with a
188188
/// submitted output root must be a multiple of this number.
189189
pub block_interval_requirement: u64,
190+
191+
/// The Base evm address of SOL
192+
pub sol_base_address: [u8; 20],
190193
}
191194

192195
impl ProtocolConfig {
@@ -200,6 +203,8 @@ impl ProtocolConfig {
200203
self.block_interval_requirement <= 1000,
201204
BridgeError::InvalidBlockIntervalRequirement
202205
);
206+
207+
require!(self.sol_base_address != [0u8; 20], BridgeError::ZeroAddress);
203208
Ok(())
204209
}
205210
}

solana/programs/bridge/src/errors.rs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -143,4 +143,7 @@ pub enum BridgeError {
143143
// Call Type Validation (6900-6999)
144144
#[msg("Creation with non-zero target")]
145145
CreationWithNonZeroTarget = 6900,
146+
147+
#[msg("Zero address")]
148+
ZeroAddress,
146149
}

solana/programs/bridge/src/solana_to_base/instructions/bridge_sol.rs

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -190,12 +190,18 @@ mod tests {
190190
assert_eq!(outgoing_message_data.nonce, 0);
191191
assert_eq!(outgoing_message_data.sender, from.pubkey());
192192

193+
let bridge = svm.get_account(&bridge_pda).unwrap();
194+
let bridge = Bridge::try_deserialize(&mut &bridge.data[..]).unwrap();
195+
193196
// Verify the message content
194197
match outgoing_message_data.message {
195198
crate::solana_to_base::Message::Transfer(transfer) => {
196199
assert_eq!(transfer.to, to);
197200
assert_eq!(transfer.local_token, NATIVE_SOL_PUBKEY);
198-
assert_eq!(transfer.remote_token, [0u8; 20]);
201+
assert_eq!(
202+
transfer.remote_token,
203+
bridge.protocol_config.sol_base_address
204+
);
199205
assert_eq!(transfer.amount, amount);
200206
assert!(transfer.call.is_none());
201207
}
@@ -287,12 +293,18 @@ mod tests {
287293
let outgoing_message_data =
288294
OutgoingMessage::try_deserialize(&mut &outgoing_message_account.data[..]).unwrap();
289295

296+
let bridge = svm.get_account(&bridge_pda).unwrap();
297+
let bridge = Bridge::try_deserialize(&mut &bridge.data[..]).unwrap();
298+
290299
// Verify the message content including call
291300
match outgoing_message_data.message {
292301
crate::solana_to_base::Message::Transfer(transfer) => {
293302
assert_eq!(transfer.to, to);
294303
assert_eq!(transfer.local_token, NATIVE_SOL_PUBKEY);
295-
assert_eq!(transfer.remote_token, [0u8; 20]);
304+
assert_eq!(
305+
transfer.remote_token,
306+
bridge.protocol_config.sol_base_address
307+
);
296308
assert_eq!(transfer.amount, amount);
297309

298310
let transfer_call = transfer.call.expect("Expected call to be present");

solana/programs/bridge/src/solana_to_base/instructions/buffered/bridge_sol.rs

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -259,12 +259,18 @@ mod tests {
259259
assert_eq!(outgoing_message_data.nonce, 0);
260260
assert_eq!(outgoing_message_data.sender, from.pubkey());
261261

262+
let bridge = svm.get_account(&bridge_pda).unwrap();
263+
let bridge = Bridge::try_deserialize(&mut &bridge.data[..]).unwrap();
264+
262265
// Verify the message content matches the call buffer data
263266
match outgoing_message_data.message {
264267
crate::solana_to_base::Message::Transfer(transfer) => {
265268
assert_eq!(transfer.to, to);
266269
assert_eq!(transfer.local_token, NATIVE_SOL_PUBKEY);
267-
assert_eq!(transfer.remote_token, [0u8; 20]);
270+
assert_eq!(
271+
transfer.remote_token,
272+
bridge.protocol_config.sol_base_address
273+
);
268274
assert_eq!(transfer.amount, amount);
269275

270276
let transfer_call = transfer.call.expect("Expected call to be present");

solana/programs/bridge/src/solana_to_base/internal/bridge_sol.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ pub fn bridge_sol_internal<'info>(
3333
TransferOp {
3434
to,
3535
local_token: NATIVE_SOL_PUBKEY,
36-
remote_token: [0u8; 20],
36+
remote_token: bridge.protocol_config.sol_base_address,
3737
amount,
3838
call,
3939
},

solana/programs/bridge/src/test_utils/mod.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ use anchor_spl::{
2121
spl_token_metadata_interface::state::TokenMetadata,
2222
},
2323
};
24+
use hex_literal::hex;
2425
use litesvm::LiteSVM;
2526
use solana_account::Account;
2627
use solana_keypair::Keypair;
@@ -69,6 +70,7 @@ impl ProtocolConfig {
6970
pub fn test_new() -> Self {
7071
Self {
7172
block_interval_requirement: 300,
73+
sol_base_address: hex!("C5b9112382f3c87AFE8e1A28fa52452aF81085AD"),
7274
}
7375
}
7476
}

0 commit comments

Comments
 (0)