Wallet mit web3.eth.accounts.wallet.add hinzufügen

Auf web3 0.20.1 verwende ich Infura, um einen Vertrag für Rinkeby bereitzustellen. Dies erfordert wahrscheinlich, dass ich eine Brieftasche hinzufüge web3.accounts, um das benötigte Gas bereitzustellen.

Als ich den folgenden nodejs-Code ausführte,

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});

folgender Fehler ist aufgetreten:

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

TypeError: Cannot read property 'add' of undefined

Liegt das daran, dass web3.eth.accounts.wallet.addes sich um eine web3 v1.0-Funktion handelt? Wenn ja, was ist der entsprechende Code, der in v0.20.1 benötigt wird?

Antworten (4)

Erstellen Sie zuerst ein Wallet-Objekt. Der erste Parameter ist die Anzahl der gewünschten Konten und der zweite Parameter ist ein 32-Byte-Zufallsarray als Entropie

var wallet = w3.eth.accounts.wallet.create(0, utils.entropy())

Fügen Sie dann mit ein neues Konto zu Ihrer erstellten Brieftasche hinzu

var newAccount = w3.eth.accounts.privateKeyToAccount(textPrivateKey.text)
wallet.add(newAccount)

Web3 v1.0 ist meiner Erfahrung nach weit überlegen, daher empfehle ich, bei Bedarf umzuschalten.

Noch eine Lösung für dein Problem

Wir können diese Methode auch verwenden, um Wallet in unseren eth.wallets hinzuzufügen

Zu beachtende Punkte: -

  1. Wir nehmen die Werte der Schnittstelle und des Bytecodes aus einer anderen Datei, in der unser Vertragscode kompiliert ist.
  2. hdwalletprovider geben Sie Ihre 12-Wörter-Mnemonik und Rinkeby-Adresse ein

`const hdwalletprovider=require('truffle-hdwallet-provider'); const 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();`

Wenn Sie v1.0 verwenden, versuchen Sie web3.eth.accounts.create(\*Passcode here*\);, neue Brieftaschen zu erstellen