Skip to content

Commit 03111f0

Browse files
committed
fix(wasm-solana): return empty string for unsigned (all-zeros) signatures
The parse_transaction function was blindly converting all signatures to base58, causing all-zeros placeholder signatures to become '1111111111111111111111111111111111111111111111111111111111111111'. Now checks each signature for all-zeros and returns empty string instead, matching the behavior of Transaction::id() which returns None for unsigned transactions. BTC-3025
1 parent 4ee3d1d commit 03111f0

1 file changed

Lines changed: 15 additions & 2 deletions

File tree

packages/wasm-solana/src/parser.rs

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -153,8 +153,21 @@ pub fn parse_transaction(bytes: &[u8]) -> Result<ParsedTransaction, String> {
153153
// Note: Instruction combining (e.g., CreateAccount + StakeInitialize → StakingActivate)
154154
// is handled by TypeScript in mapWasmInstructionsToBitGoJS for flexibility
155155

156-
// Extract signatures as base58 strings
157-
let signatures: Vec<String> = tx.signatures.iter().map(|s| s.to_string()).collect();
156+
// Extract signatures as base58 strings.
157+
// All-zeros signatures (unsigned placeholder slots) are returned as empty strings
158+
// so the JS side can simply use `signatures[0] || 'UNAVAILABLE'`.
159+
let signatures: Vec<String> = tx
160+
.signatures
161+
.iter()
162+
.map(|s| {
163+
let bytes: &[u8] = s.as_ref();
164+
if bytes.iter().all(|&b| b == 0) {
165+
String::new()
166+
} else {
167+
s.to_string()
168+
}
169+
})
170+
.collect();
158171

159172
Ok(ParsedTransaction {
160173
fee_payer,

0 commit comments

Comments
 (0)