Web3js

Kovan 測試網上的“無效鏈 ID”

  • November 14, 2021

我正在嘗試從我的主賬戶向 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 在評論中給出他的解決方案

引用自:https://ethereum.stackexchange.com/questions/97627