I'm new to solana and I'm trying to combine two swap transactions I got from jupiter API. In my attempt I got multiple types of errors depending on how the transaction's structure. I will post an error logs example but sometimes its different
logs: [ 'Program ComputeBudget111111111111111111111111111111 invoke [1]', 'Program ComputeBudget111111111111111111111111111111 success', 'Program ComputeBudget111111111111111111111111111111 invoke [1]', 'Program ComputeBudget111111111111111111111111111111 success', 'Program ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL invoke [1]', 'Program log: CreateIdempotent', 'Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA invoke [2]', 'Program log: Instruction: GetAccountDataSize', 'Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA consumed 1569 of 1394295 compute units', 'Program return: TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA pQAAAAAAAAA=', 'Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA success', 'Program 11111111111111111111111111111111 invoke [2]', 'Program 11111111111111111111111111111111 success', 'Program log: Initialize the associated token account', 'Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA invoke [2]', 'Program log: Instruction: InitializeImmutableOwner', 'Program log: Please upgrade to SPL Token 2022 for immutable owner support', 'Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA consumed 1405 of 1387708 compute units', 'Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA success', 'Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA invoke [2]', 'Program log: Instruction: InitializeAccount3', 'Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA consumed 3158 of 1383826 compute units', 'Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA success', 'Program ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL consumed 19315 of 1399700 compute units', 'Program ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL success', 'Program JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4 invoke [1]', 'Program log: Instruction: SharedAccountsRoute', 'Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA invoke [2]', 'Program log: Instruction: TransferChecked', 'Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA consumed 6200 of 1363832 compute units', 'Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA success', 'Program log: AnchorError caused by account: swap_program. Error Code: ConstraintRaw. Error Number: 2003. Error Message: A raw constraint was violated.', 'Program JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4 consumed 30615 of 1380385 compute units', 'Program JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4 failed: custom program error: 0x7d3' ]
var serializedTransaction = await decodeBase64Transaction(transactionData1.swapTransaction);
const serializedTransaction2 = await decodeBase64Transaction(transactionData2.swapTransaction);
const instractions1 = serializedTransaction.message.compiledInstructions
const instractions2 = serializedTransaction2.message.compiledInstructions
// console.log(instractions1)
// console.log(instractions2)
var table1 = serializedTransaction.message.addressTableLookups
var table2 = serializedTransaction2.message.addressTableLookups
table1.push(...table2)
// console.log(table1)
// console.log(table2)
var addressLookupTableAccounts = await Promise.all(
table1.map(async (lookup) => {
// console.log(typeof(lookup.accountKey));
let publicKey;
if (lookup.accountKey instanceof PublicKey) {
publicKey = lookup.accountKey;
} else if (typeof lookup.accountKey === 'string') {
publicKey = new PublicKey(lookup.accountKey);
} else {
throw new Error("Invalid accountKey format");
}
const accountInfo = await connection.getAccountInfo(publicKey);
if (!accountInfo) {
throw new Error('Account info not found');
}
return new AddressLookupTableAccount({
key: publicKey,
state: AddressLookupTableAccount.deserialize(await connection.getAccountInfo(publicKey).then((res) => res.data)),
});
})
);
var message = TransactionMessage.decompile(serializedTransaction.message,{addressLookupTableAccounts: addressLookupTableAccounts})
var message2 = TransactionMessage.decompile(serializedTransaction2.message,{addressLookupTableAccounts: addressLookupTableAccounts})
message.instructions.push(...message2.instructions.slice(2))
console.log(addressLookupTableAccounts.length)
console.log(serializedTransaction.message.addressTableLookups.length)
message.recentBlockhash = serializedTransaction2.message.recentBlockhash
console.log(message.instructions)
serializedTransaction.message = message.compileToV0Message(addressLookupTableAccounts)
serializedTransaction.sign([wallet]);
const rawTransaction = serializedTransaction.serialize()
const { txid } = await connection.sendRawTransaction(rawTransaction,{preflightCommitment: 'confirmed'});
await connection.confirmTransaction(txid);
console.log(`Transaction ID: ${txid}`);```