Web3js
不使用 MetaMask 發送交易
我設計了一個使用 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);