Web3js

使用 web3.eth.accounts.wallet.add 添加錢包

  • April 9, 2022

在 web3 0.20.1 上,我使用 Infura 將合約部署到 Rinkeby。這可能需要我添加一個錢包來web3.accounts提供所需的氣體。

當我執行以下 nodejs 程式碼時,

Web3 = require('web3')
var web3 = new Web3(new Web3.providers.HttpProvider("https://rinkeby.infura.io/nyxynyx-api-key"))
var privateKey = 'nyxynyx-private-key'
web3.eth.accounts.wallet.add("0x" + privateKey);

var contractCode = '60606-contract-code-here';
var abi = [{"constant":false,"inputs":[{"name":"givenNumber","type":"uint8"}],"name":"setNumber","outputs":[],"type":"function"},{"constant":true,"inputs":[{"name":"givenNumber","type":"uint8"}],"name":"guessNumber","outputs":[{"name":"","type":"bool"}],"type":"function"},{"anonymous":false,"inputs":[{"indexed":false,"name":"from","type":"address"},{"indexed":false,"name":"value","type":"uint256"}],"name":"Deposit","type":"event"},{"anonymous":false,"inputs":[],"name":"SetNumber","type":"event"}];
GuessNumber = web3.eth.contract(abi)
var contractInstance = GuessNumber.new({from: web3.eth.accounts[0], gas: 200000, data: '0x' + contractCode});

遇到以下錯誤:

web3.eth.accounts.wallet.add("0x" + privateKey);
                       ^

TypeError: Cannot read property 'add' of undefined

這是因為web3.eth.accounts.wallet.add是 web3 v1.0 功能嗎?如果是,v0.20.1 中需要的等效程式碼是什麼?

Web3 v1.0 在我的體驗中要優越得多,所以我建議在方便的時候切換。

您問題的另一種解決方案

我們也可以使用這種方法在我們的 eth.wallets 中添加錢包

看點:-

  1. 我們從另一個文件中獲取介面和字節碼的值,該文件中編譯了我們的合約程式碼。
  2. hdwalletprovider 輸入你的 12 字助記符和 rinkeby 地址

`const hdwalletprovider=require(’truffle-hdwallet-provider’); 常量 Web3=require(‘web3’); const {interface,bytecode}=require(’./compile’);

const provider=new hdwalletprovider(
   'hello blue cat eng cook name version brave entire sail trumpet scrub', // 12 word mnemonic
   'https://rinkeby.infura.io/v3/5d5eaf76b6a84578a245e058b870a8aa' );

const web3=new Web3(provider);

const deploy=async() => {
   const accounts= await web3.eth.getAccounts();
   console.log(accounts[0]);

  const result=await new web3.eth.Contract(JSON.parse(interface))
  .deploy({data : bytecode})
  .send({gas: '10000000', from: accounts[0] });

  console.log(result.options.address);
};

deploy();`

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