导出的常量合约抛出错误"Provider does not have a request or send method to use."



我试图创建一个助手类,在那里我可以实例化我的dapp所需的合同。目前,我正试图导出dai的合同实例,以便使用它进行支付。dai.js:

import Web3 from 'web3'
import daiAbi from '../../artifactsUse/dai.json'
import {web3Modal} from '../Client/Helpers/provider'
const DaiAddress = "0x5592EC0cfb4dbc12D3aB100b257153436a1f0FEa"
const provider = web3Modal.connect()
const web3  = new Web3(provider)
const dai = new web3.eth.Contract(daiAbi.abi,DaiAddress)
export {dai}
在<<p> strong> purchase.js 我导入它链接如下:
import {dai} from '../../abi/dai'

然后我用它来处理事务:

const purchaseTokensWithDAI = async(price)=>{
if(!accounts)
{
await faucet()
}
const crowdsale = new web3.eth.Contract(props.IcoContract.abi,IcoAddress)
//const dai = new web3.eth.Contract(props.DaiContract.abi, DaiAddress)
await dai.methods.approve(IcoAddress,Web3.utils.toBN(price * 10 ** 18)).send({from:accounts[0]}).once("confirmation",async(confirmation)=>{
await crowdsale.methods.buyTokensWithDAI(price).send({from:accounts[0]}).once("confirmation",(confirmation)=>{
console.log(confirmation)
}).catch("error",(error)=>{
console.log(error)
})
})
}

不幸的是,我不明白为什么我得到错误"提供商没有请求或发送方法来使用。"我也试过像这样导出合同:

export const dai = new web3.eth.Contract(..)

,但我得到相同的结果。相反,如果我在purchaseTokensWithDAI函数中声明合约,它就可以正常工作。我使用web3Modal作为提供者,我设置如下:

const loadWeb3Modal=async()=>{
provider = await web3Modal.connect()
setProvider(provider)
console.log(provider)
web3 = new Web3(provider)
provider.on("accountsChanged", (accounts) => {
setAccount(accounts)
console.log(accounts);
});

// Subscribe to chainId change
provider.on("chainChanged", (chainId) => {
console.log(chainId);
});

// Subscribe to provider connection
provider.on("connect", (chainId) => {
console.log(chainId);
});

// Subscribe to provider disconnection
provider.on("disconnect", () => {
provider.close();
web3Modal.clearCachedProvider();
provider=null;
console.log(error);
});

然后我有一个函数叫做水龙头()
const faucet=async()=> {
await loadWeb3Modal()
accounts = await web3.eth.getAccounts()
setAccount(accounts)
console.log(accounts)

}

每次在用户发起事务之前,它检查是否设置了提供者。我想这就是问题所在,因为某种原因,当我使用导出的常量时,它不会检测到它。有人能告诉我我做错了什么吗?

你知道我正在做这个代码从介绍到区块链编程在youtube上由Dapp大学和…我注意到我得到了这个错误。解决这个问题的方法是我添加了

var Web3 = require('web3')
var web3 = new Web3('<the IP of your blockchain, for me it was the RPC server address in ganache (that I'm using, you could be doing something different)>')

对于像我这样的新手来说:在<>是你必须自己识别和输入的东西。

我面临的问题是提供者是空的,函数也不在。我注意到包装上一定有问题。所以. .我也做了web3.js的教程。我找到了上面的密码。在教程中,我还执行了

npm install web3

在我的电脑上安装了必要的软件包。如果你还没有试过的话,你也应该试一下,看看会发生什么

我不确定这是否对你有帮助,但是…我想你可以试试。告诉我发生了什么

相关内容

最新更新