Web3js

不使用 MetaMask 發送交易

  • June 15, 2019

我設計了一個使用 web3 部署在 Rinkeby 上的合約。我還實現了一個反應應用程序來與區塊鏈互動。我想在沒有元遮罩的情況下使用我的應用程序,但在 Chrome 中出現此錯誤**“在給定選項和預設選項中都沒有指定“發件人”地址。”** 當我嘗試發送這樣的交易時:

await tracker.methods
     .createAsset(name, description, manufacturer, price)
     .send({
       from: accounts[0],
       value: web3.utils.toWei(this.state.amountToStake, "ether"),
       gas: "1000000"
     });

根據下面的程式碼,有人可以告訴我我做錯了什麼嗎?

web3 腳本:

import Web3 from "web3";
let web3; 
const provider = new Web3.providers.HttpProvider( // creating my own provider
"https://rinkeby.infura.io/v3/..."
);
web3 = new Web3(provider);

export default web3;

部署腳本:

const HDWalletProvider = require("truffle-hdwallet-provider");
const Web3 = require("web3");

const compiledTracker = require("./build/AssetTracker.json");

const provider = new HDWalletProvider("mnemonic",
"https://rinkeby.infura.io/v3/...");

const web3 = new Web3(provider);

const deploy = async () => {
const accounts = await web3.eth.getAccounts();


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

注意:使用 MetaMask 一切正常,但我需要在沒有 MetaMask 的情況下發送交易,這就是我使用 Rinkeby 定義提供程序的原因。

您正在使用與 Infura 的直接連接。

const provider = new Web3.providers.HttpProvider( // creating my own provider
   "https://rinkeby.infura.io/v3/..."
);
web3 = new Web3(provider);

Infura 不提供帳戶管理。如果您想使用 Infura 並在客戶端創建交易,您必須使用庫來簽署交易。

您可以使用HDWalletProvider從助記詞派生的錢包。例如,您的部署腳本應該可以正常工作。

const provider = new HDWalletProvider("mnemonic", "https://rinkeby.infura.io/v3/...");
const web3 = new Web3(provider);

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