Untitled

 avatar
unknown
plain_text
a month ago
2.4 kB
7
Indexable
async function testSendNozomiTx(connection, signer, nozomiEndpoint) {
  const tipIx = SystemProgram.transfer({
    fromPubkey: signer.publicKey,
    toPubkey: NOZOMI_TIP,
    lamports: MIN_TIP_AMOUNT, // 1,000,000 lamports = 0.001 SOL
  });

  const instructions = [tipIx];

  const signature = await sendNozomiTx(instructions, signer, nozomiEndpoint, connection);
  console.log('Test transaction signature:', signature);
}
 
async function sendNozomiTx(ixs, signer, nozomiEndpoint, connection) {
  const computeUnitLimitIx = ComputeBudgetProgram.setComputeUnitLimit({ units: 1_000_000 });
  const computeUnitPriceIx = ComputeBudgetProgram.setComputeUnitPrice({ microLamports: 1_000_000 });

  ixs.unshift(computeUnitPriceIx, computeUnitLimitIx);

  const tipIx = SystemProgram.transfer({
    fromPubkey: signer.publicKey,
    toPubkey: NOZOMI_TIP,
    lamports: MIN_TIP_AMOUNT,
  });
  ixs.push(tipIx);

  const transaction = new Transaction().add(...ixs);

  try {
    const { blockhash, lastValidBlockHeight } = await connection.getLatestBlockhash('finalized');
    transaction.recentBlockhash = blockhash;
    transaction.feePayer = signer.publicKey;

    transaction.sign(signer);

    if (!transaction.signature) {
      throw new Error('Transaction is not signed.');
    }

    const serializedTx = transaction.serialize();

    console.log("Serialized Transaction (Buffer):", serializedTx);
    console.log("Base64 Transaction:", serializedTx.toString('base64'));

    const base64Tx = serializedTx.toString('base64');

    const payload = {
      jsonrpc: '2.0',
      id: 1,
      method: 'sendTransaction',
      params: [base64Tx],
    };

    console.log("Nozomi Payload:", JSON.stringify(payload, null, 2));

    const response = await fetch(nozomiEndpoint, {
      method: 'POST',
      headers: { 'Content-Type': 'application/json' },
      body: JSON.stringify(payload),
    });

    const result = await response.json();

    console.log("Nozomi API Response:", result);

    if (result.error) {
      console.error('Nozomi sendTransaction Error:', result.error);
      return null;
    }

    const signature = result.result;
    console.log("Transaction sent via Nozomi with signature:", signature);
    return signature;
  } catch (error) {
    console.error("Error sending transaction via Nozomi:", error);
    return null;
  }
}
Leave a Comment