Web3js
Kovan 測試網上的“無效鏈 ID”
我正在嘗試從我的主賬戶向 Kovan 測試網上的測試賬戶發起交易(ETH 轉移),但我
Returned error: Invalid chain id.
從以下程式碼中收到錯誤消息:const Web3 = require("web3"); const EthereumTx = require("ethereumjs-tx").Transaction; const SK = process.env.PROD ? nice try ;) const PK = process.env.PROD ? "0x5A8721b7DE69b3538a4cC61614628f7c1A6E59Fb" : "0x33Bcd8bf72D594B0974beFd830a29CeC55079976"; const url = process.env.PROD ? "https://kovan.infura.io/v3/2bd0c2e1f29f4ab9b47374c6b50023c5" : "http://127.0.0.1:8545"; const web3Provider = new Web3.providers.HttpProvider(url); const web3 = new Web3(web3Provider); const { toWei, numberToHex: toHex } = web3.utils; const sendETH = async () => { const nonce = await web3.eth.getTransactionCount(PK); const tx = new EthereumTx({ from: PK, to: "0x8631c939359FBb8cb336532b191ED80b20287CD1", value: toHex(toWei(".1")), gas: toHex("21000"), nonce, }); tx.sign(Buffer.from(SK, "hex")); const serializedTx = tx.serialize(); web3.eth.sendSignedTransaction("0x" + serializedTx.toString("hex")); } sendETH();
當我將 PROD 設置為 false (在本地網路上測試)時,它工作正常。但是,每次我將 PROD 設置為 true(在 Kovan 上測試)時,我都會遇到這個頑固的錯誤。
嘿,你需要這樣做才能在 kovan 上進行測試
const tx = new EthereumTx({ from: PK, chainId: 42, // kovan chain id to: "0x8631c939359FBb8cb336532b191ED80b20287CD1", value: toHex(toWei(".1")), gas: toHex("21000"), nonce, });
在對 ethereumjs-tx 的源文件進行了一番探勘之後,我發現指定 chainId 和硬分叉的方法是在 EthereumTx 建構子中添加第二個對象。
該
chainId
欄位接受一個數字(chainId)或一個字元串(鏈名稱),它只是作為一個查詢來要求該鏈所需的數據。此欄位預設為"mainnet"
。該
hardfork
欄位的工作方式與該欄位類似chainId
,但它專門處理字元串。此欄位的預設值為"petersburg"
。我的解決方案如下:
const tx = new EthereumTx({ from: PK, to: "0x8631c939359FBb8cb336532b191ED80b20287CD1", value: toHex(toWei(".0001")), gas: toHex("21000"), nonce, }, { chain: 42 });
非常感謝 viraj 在評論中給出他的解決方案