INNER CODE UNIT · TypeScript
send
blueshift-gg/doppler · packages/kit/src/index.ts:86
async function send(rpc: DopplerRpc, payer: TransactionSigner, instructions: readonly Instruction[]): Promise<Signature> {
const { value: lifetime } = await rpc.getLatestBlockhash().send();
const transactionMessage = pipe(
createTransactionMessage({ version: 'legacy' }),
(m) => setTransactionMessageFeePayerSigner(payer, m),
(m) => setTransactionMessageLifetimeUsingBlockhash(lifetime, m),
(m) => appendTransactionMessageInstructions(instructions, m),
);
const transaction = await signTransactionMessageWithSigners(transactionMessage);
const signature = getSignatureFromTransaction(transaction);
await rpc.sendTransaction(getBase64EncodedWireTransaction(transaction), { encoding: 'base64' }).send();
for (;;) {
const { value: [status] } = await rpc.getSignatureStatuses([signature]).send();
if (status?.err) throw new Error(`transaction ${signature} failed: ${JSON.stringify(status.err)}`);
if (status?.confirmationStatus === 'confirmed' || status?.confirmationStatus === 'finalized') return signature;
if ((await rpc.getBlockHeight().send()) > lifetime.lastValidBlockHeight) throw new Error(`transaction ${signature} expired`);
await new Promise((resolve) => setTimeout(resolve, 400));
}