#![cfg(all(feature = "evm", feature = "solana"))]
use aspens::orders::{derive_order_id, GaslessLockParams};
#[test]
fn evm_eip712_constants_are_pinned() {
assert_eq!(aspens::evm::MIDRIB_EIP712_NAME, "Midrib");
assert_eq!(aspens::evm::MIDRIB_EIP712_VERSION, "2");
}
#[test]
fn evm_gasless_lock_signing_hash_snapshot() {
use alloy_primitives::Address;
let arborter: Address = "0x0000000000000000000000000000000000000aA1"
.parse()
.unwrap();
let settler: Address = "0x0000000000000000000000000000000000000bB2"
.parse()
.unwrap();
let depositor = "0x0000000000000000000000000000000000000cC3";
let token_in = "0x0000000000000000000000000000000000000dD4";
let token_out = "0x0000000000000000000000000000000000000eE5";
let params = GaslessLockParams {
depositor_address: depositor,
token_contract: token_in,
token_contract_destination_chain: token_out,
destination_chain_id: "8453",
amount_in: 1_000_000,
amount_out: 2_000_000,
order_id: "",
deadline: 1_700_000_100,
nonce: 42,
open_deadline: 1_700_000_000,
user_signature: &[],
};
let digest = aspens::evm::gasless_lock_signing_hash(¶ms, arborter, settler, 84532).unwrap();
let expected_hex = "df311c324f054e2b139a5b25950d372ef729a4e5c7132256ca0990170cf4fe40";
assert_eq!(
hex::encode(digest),
expected_hex,
"EIP-712 digest drifted — align with arborter::chain_evm::gasless_lock_signing_hash"
);
}
#[test]
fn solana_gasless_lock_signing_message_snapshot() {
use aspens::solana::{gasless_lock_signing_message, OpenOrderArgs};
use solana_sdk::pubkey::Pubkey;
let instance = Pubkey::new_from_array([0x11; 32]);
let user = Pubkey::new_from_array([0x22; 32]);
let input_token = Pubkey::new_from_array([0x33; 32]);
let output_token_bytes = [0x44u8; 32];
let order = OpenOrderArgs {
order_id: [0x55; 32],
origin_chain_id: 501,
destination_chain_id: 8453,
input_token,
input_amount: 1_000_000,
output_token: output_token_bytes,
output_amount: 2_000_000,
};
let bytes = gasless_lock_signing_message(&instance, &user, 1_700_000_000, &order).unwrap();
assert_eq!(bytes.len(), 200, "OpenForSignedPayload byte length drifted");
let expected_hex = "1111111111111111111111111111111111111111111111111111111111111111\
2222222222222222222222222222222222222222222222222222222222222222\
00f1536500000000\
5555555555555555555555555555555555555555555555555555555555555555\
f501000000000000\
0521000000000000\
3333333333333333333333333333333333333333333333333333333333333333\
40420f0000000000\
4444444444444444444444444444444444444444444444444444444444444444\
80841e0000000000";
assert_eq!(
hex::encode(&bytes),
expected_hex,
"borsh layout drifted — align with arborter::chain_solana::gasless_lock_signing_message"
);
}
#[test]
fn solana_message_matches_arborter_fixture() {
use aspens::solana::{gasless_lock_signing_message, OpenOrderArgs};
use solana_sdk::pubkey::Pubkey;
let instance = Pubkey::new_from_array([1u8; 32]);
let user = Pubkey::new_from_array([2u8; 32]);
let mint = Pubkey::new_from_array([3u8; 32]);
let order = OpenOrderArgs {
order_id: [4u8; 32],
origin_chain_id: 501,
destination_chain_id: 1,
input_token: mint,
input_amount: 1_000_000,
output_token: [5u8; 32],
output_amount: 1_000_000,
};
let msg = gasless_lock_signing_message(&instance, &user, 99, &order).unwrap();
assert_eq!(msg.len(), 200, "layout diverged from arborter");
assert_eq!(&msg[..32], instance.as_ref());
assert_eq!(&msg[32..64], user.as_ref());
assert_eq!(&msg[64..72], 99u64.to_le_bytes());
assert_eq!(&msg[72..104], &[4u8; 32]); }
#[test]
fn evm_hash_matches_arborter_fixture() {
use alloy_primitives::{address, Address};
let arborter: Address = address!("1111111111111111111111111111111111111111");
let origin_settler: Address = address!("2222222222222222222222222222222222222222");
let token = address!("3333333333333333333333333333333333333333");
let dest_token = address!("4444444444444444444444444444444444444444");
let depositor = address!("5555555555555555555555555555555555555555");
let origin_chain_id: u64 = 13337;
let depositor_s = depositor.to_string();
let token_s = token.to_string();
let dest_token_s = dest_token.to_string();
let sig_placeholder = vec![0u8; 65];
let params = GaslessLockParams {
depositor_address: &depositor_s,
token_contract: &token_s,
token_contract_destination_chain: &dest_token_s,
destination_chain_id: "1",
amount_in: 1_000_000,
amount_out: 1_000_000,
order_id: "",
deadline: 2_000_000_000,
open_deadline: 1_999_000_000,
nonce: 42,
user_signature: &sig_placeholder,
};
let digest =
aspens::evm::gasless_lock_signing_hash(¶ms, arborter, origin_settler, origin_chain_id)
.unwrap();
let expected_hex = "959bb32ae0a4690b5cfcc13110bddce3ba5f1bc29301168221493ea40ab884fe";
assert_eq!(
hex::encode(digest),
expected_hex,
"EIP-712 digest diverged from arborter fixture"
);
}
#[test]
fn derive_order_id_snapshot() {
let id = derive_order_id(
&[0xAAu8; 32],
42,
501,
8453,
b"InputMintPubkey32BytesRepresentat",
b"0xOutputTokenAddressEvmLower4321",
1_000_000,
2_000_000,
);
let expected_hex = "642e8b1deac921a7ddc00254b847ed1eb90169b1d3a70a34b541b66617b63843";
assert_eq!(hex::encode(id), expected_hex);
}