1、引言
如果用 browser 连接主网的 RPC server 会收到 error code 403 message 為 Access forbidden, contact your app developer or support@rpcpool.com. 错误,因为主网的 RPC server 会检查 HTTP Header 如果判断出來是 browser 就会报告 403 錯誤。
要解決这个问题就是换一个 RPC server ,可以注册免费的 RPC server 。
2、免费RPC Server
Solana RPC Server 是让开发者存取区块链数据的 Server , Solana 主网有提供一个(Solana Cluster RPC Endpoints (opens new window)),但是为了避免滥用,有设定一些网路存取的限制,存取太快会产生 HTTP 429 的错误。
所以要开发 Solana 应用程式最好还是有个自己的 RPC Server ,不过要建立自己的 RPC Server 代价相当高,根据 How to run a Solana RPC node (opens new window)这篇文章, CPU 要 32 core ,记忆体要 250 GB ,这样的硬体规格租下来可是相当花钱。
于是就有一些公司提供 RPC Server 服务,然后只要注册就可以使用到一些免费额度,这些免费额度对于开发 Solana 应用程式就相当够用了,以下几个是博主试过有免费额度又稳定的 Solana RPC server
Chainstack
一个月免费额度 300 万个 request
QuickNode
一个月免费额度 1000 万个 request
3、sol转账代码
import { useWallet } from 'solana-wallets-vue' import {Connection, clusterApiUrl, Keypair, SystemProgram, Transaction, PublicKey} from '@solana/web3.js'; const { publicKey, connected, sendTransaction } = useWallet(); const onClick = async () => { if (!publicKey) { console.log('error', `Send Transaction: Wallet not connected!`); return; } let signature = ''; try { // send 1 lamport to random account // https://solanacookbook.com/references/basic-transactions.html#how-to-send-sol const account = Keypair.generate(); const transaction = new Transaction().add( SystemProgram.transfer({ fromPubkey: publicKey.value, toPubkey: new PublicKey("接收地址"), lamports: 1_000_000, }) ); //const connection = new Connection(clusterApiUrl('devnet')); const connection = new Connection( "https://solana-mainnet.core.chainstack.com/xxx", //替换rpc链接 { wsEndpoint:'wss://solana-mainnet.core.chainstack.com/ws/xxx' //替换rpc链接 } ); signature = await sendTransaction(transaction, connection); await connection.confirmTransaction(signature, 'confirmed'); console.log("successs") } catch (error) { console.log('error', `Transaction failed! ${error?.message}`, signature); return; } }