站点图标 Chainstack

立即Solana 2.0升级做好准备

Solana 2.0升级即将到来Chainstack 充分Chainstack ,助您顺利完成此次重大版本更新!这不仅是一次升级,更是Solana 去中心化程度、安全性与性能的重要里程碑。作为Web3开发者,以下是您需要准备的全部内容,确保无缝过渡:

为什么Solana 2.0如此重要?

Agave作为基于Rust语言Solana客户端,旨在通过构建多客户端架构增强网络韧性。与之同步Solana 基于C语言的Firedancer客户端。这两款客户端将协同实现网络去中心化与强化,要求所有节点须在2024年10月21日前完成向Agave v2.0的迁移。

龙舌兰2.0升级涉及多种API方法,逐步淘汰旧版方法并替换为优化版本。此次变更旨在最大限度减少潜在干扰,且向后兼容的替代方案已广泛可用。

为应对关键变化

若您正在使用以下任何已弃用的API方法,请立即更新调用方式以确保与Agave 2.0兼容:

已弃用的方法替代方法
confirmTransactiongetSignatureStatuses
getSignatureStatusgetSignatureStatuses
getSignatureConfirmationgetSignatureStatuses
getConfirmedSignaturesForAddressgetSignaturesForAddress
getConfirmedBlockgetBlock
getConfirmedBlocksgetBlocks
getConfirmedBlocksWithLimitgetBlocksWithLimit
getConfirmedTransactiongetTransaction
getConfirmedSignaturesForAddress2getSignaturesForAddress
getRecentBlockhashgetLatestBlockhash
getFeesgetFeeForMessage
getFeeCalculatorForBlockhashisBlockhashValid 或 getFeeForMessage
getFeeRateGovernorgetFeeForMessage
getSnapshotSlotgetHighestSnapshotSlot
getStakeActivationgetAccountInfo |Solana (替代方案)

如何替换 confirmTransaction 与 getSignaturesStatuses?

替换已弃用的 confirmTransaction 方法及其 getSignaturesStatuses 替换时,可使用以下方法:

import { Connection, Transaction, SendOptions } from '@solana/web3.js';

async function sendAndConfirmTransaction(
  connection: Connection,
  transaction: Transaction,
  timeout: number = 30000, // 30 seconds default timeout
  options?: SendOptions
): Promise<string> {
  // Send the transaction
  const signature = await connection.sendTransaction(transaction, options?.signers || [], {
    ...options,
    skipPreflight: options?.skipPreflight || false
  });

  // Create a promise that will reject after the timeout
  const timeoutPromise = new Promise((_, reject) => {
    setTimeout(() => {
      reject(new Error(`Transaction confirmation timeout after ${timeout}ms`));
    }, timeout);
  });

  // Create the confirmation promise
  const confirmationPromise = (async () => {
    let done = false;
    while (!done) {
      // Get the status of the transaction
      const response = await connection.getSignatureStatuses([signature]);
      const status = response.value[0];

      if (status) {
        if (status.err) {
          throw new Error(`Transaction failed: ${status.err.toString()}`);
        }

        // Check if we have enough confirmations
        if (status.confirmationStatus === 'finalized') {
          done = true;
          return signature;
        }
      }

      // Wait a bit before checking again
      await new Promise(resolve => setTimeout(resolve, 1000));
    }
  })();

  // Race between timeout and confirmation
  try {
    return await Promise.race([confirmationPromise, timeoutPromise]);
  } catch (error) {
    // If it's a timeout error, we should still return the signature
    if (error.message.includes('timeout')) {
      return signature;
    }
    throw error;
  }
}

// Example usage
async function example() {
  const connection = new Connection('CHAINSTACK_NODE');
  const transaction = new Transaction();
  // ... add your transaction instructions here ...

  try {
    const signature = await sendAndConfirmTransaction(connection, transaction, 60000, {
      skipPreflight: false,
      // ... other options
    });
    console.log('Transaction confirmed:', signature);
  } catch (error) {
    console.error('Transaction failed:', error);
  }
}

Chainstack:为Agave 2.0做好准备

Chainstack已确保您的基础设施为Agave 2.0全面就绪,为您提供顺畅无缝的过渡体验:

为迎接Agave 2.0版本,请查阅Agave v2.0迁移指南并按需调整API调用。我们的支持团队随时待命为您提供协助,确保此次迁移过程尽可能顺畅无阻。

延伸阅读

将所有内容整合起来

Solana 2.0升级是网络发展的重要里程碑Chainstack全力确保您能无缝释放其全部潜力。通过将基础设施与Agave 2.0升级同步,我们为您提供必要工具,助您持续Solana构建可扩展、安全且高性能的去中心化应用(DApps)。

保持敏锐,抢占先机,Chainstack Solana 2.0,共同构筑Web3的未来。

在Chainstack上为您的项目注入强劲动力

您是否已经探索过Chainstack为您带来什么?立即免费开始体验

退出移动版