透過 BlockChain RPC 調用 Pharos 合約

取得 RPC 地址

首先,請造訪 https://zan.top/service/apikeys 以取得 Pharos 鏈的 RPC 地址:

您需要登入 ZAN,系統會自動為您建立一個免費的 Access Key。大多數其他區塊鏈 RPC 服務供應商的流程也類似,您需要先取得一個地址,這個地址就是呼叫 RPC 服務的端點(Endpoint)。

透過命令列存取

您可以使用以下程式碼直接在 Shell 命令列中測試 RPC 連線是否正常:

curl --location 'https://api.zan.top/node/v1/pharos/testnet/${YOUR_ACCEEE_KEY}' \
--header 'Content-Type: application/json' \
--data '{"jsonrpc":"2.0","method":"eth_blockNumber","params":[],"id":1}'

請注意,${YOUR_ACCEEE_KEY} 需要替換為您自己的金鑰。您也可以直接使用 ZAN 網站上提供的程式碼來執行。

執行後,您將看到類似以下的輸出:

{"result":"0xdfedf7","id":1,"jsonrpc":"2.0"}

這表示 RPC 呼叫成功。

透過 JS SDK 呼叫合約

Pharos 是一條相容於 EVM 的 Layer 1 區塊鏈,因此完全可以直接使用以太坊的生態系統。您可以使用 ViemEthers 等 SDK 來呼叫合約。如果是前端開發(例如使用 React),還可以使用 wagmiAnt Design Web3 這類 SDK 和元件庫。

舉例來說,使用 Viem,您可以透過以下方式初始化 SDK 並呼叫 getBlockNumber 方法:

import { createPublicClient, http, defineChain } from 'viem'

// 1. 定義 Pharos 鏈配置
const pharos = defineChain({
  id: 688688,                 // Pharos 測試網的 chainId
  name: 'Pharos Testnet',
  nativeCurrency: {
    name: 'Ether',
    symbol: 'ETH',
    decimals: 18,
  },
  rpcUrls: {
    default: { http: ['https://api.zan.top/node/v1/pharos/testnet/${YOUR_ACCEEE_KEY}'] },
  },
  blockExplorers: {
    default: { name: 'Pharos Explorer', url: 'https://pharos-testnet.socialscan.io/' },
  },
})

// 2. 建立 PublicClient
const publicClient = createPublicClient({
  chain: pharos,
  transport: http(),   // 若不傳入 URL,預設使用 pharos.rpcUrls.default.http[0]
})

// 3. 使用
const blockNumber = await publicClient.getBlockNumber()
console.log('Pharos 區塊高度:', blockNumber)

有關 Pharos 鏈的詳細資訊,請參考:
https://docs.pharosnetwork.xyz/network-overview/pharos-networks

若要呼叫合約,可以使用 SDK 的 readContractsimulateContractwriteContract 方法。

  • readContract:底層呼叫的是 Ethereum JSON-RPC 的 eth_call 方法。不會消耗 Gas 且不會上鏈,適用於呼叫合約中的唯讀方法。
  • writeContract:呼叫的是 eth_sendTransaction,用於執行會修改合約狀態的操作。
  • simulateContract:Viem 透過呼叫 eth_call + eth_estimateGas 來模擬寫入操作。

對於 writeContract,由於需要簽署交易,您需要按照以下方式初始化錢包客戶端:

import { wagmiAbi } from './abi'
import { createWalletClient, custom } from 'viem'

// ...

const { request } = await publicClient.simulateContract({
  address: '0xFBA3912Ca04dd458c843e2EE08967fC04f3579c2',
  abi: wagmiAbi,
  functionName: 'mint',
  args: [69420],
  account
})

await walletClient.writeContract(request)

設定錢包的 RPC

錢包也需要與鏈互動,您可以透過設定自訂網路來使用自訂的 RPC 服務。以下以 MetaMask 為例:

  1. 點擊錢包左上角的網路選單。

  1. 編輯現有網路或新增自訂網路。

  1. 將 Pharos 測試網新增至 MetaMask:

這樣,錢包發起的交易和請求就會使用 ZAN 的 RPC 服務。這對於有特殊速度和效能需求的用戶非常有用。此外,若錢包尚未內建支援某些鏈,也可以透過這種方式新增至錢包。