Skip to content

Commit 0c15011

Browse files
committed
fix(solana/gmp): use abi_encode for EVM-compatible struct encoding
abi_encode_params encodes struct fields as flat top-level parameters, omitting the leading 32-byte offset that Solidity's abi.decode(data, (StructType)) expects. Switch to abi_encode which wraps the struct in a 1-tuple, matching the format produced by Solidity's abi.encode.
1 parent 5a58e61 commit 0c15011

File tree

1 file changed

+3
-4
lines changed
  • programs/solana/programs/ics27-gmp/src/instructions

1 file changed

+3
-4
lines changed

programs/solana/programs/ics27-gmp/src/instructions/send_call.rs

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -189,7 +189,7 @@ pub(crate) fn send_call_inner<'info>(
189189
payload: msg.payload.clone().into(),
190190
memo: msg.memo.clone(),
191191
}
192-
.abi_encode_params()
192+
.abi_encode()
193193
} else {
194194
packet_data.encode_vec()
195195
};
@@ -707,9 +707,8 @@ mod tests {
707707
memo: "test memo".to_string(),
708708
};
709709

710-
let encoded = original.abi_encode_params();
711-
let decoded =
712-
GmpPacketDataAbi::abi_decode_params(&encoded).expect("ABI decoding should succeed");
710+
let encoded = original.abi_encode();
711+
let decoded = GmpPacketDataAbi::abi_decode(&encoded).expect("ABI decoding should succeed");
713712

714713
assert_eq!(decoded.sender, "solana_sender_pubkey");
715714
assert_eq!(

0 commit comments

Comments
 (0)