m-d*_*ngo 1 solidity decentralized-applications ethers.js hardhat
我正在使用React、Hardhat、Ethers.js和Solidity制作一个简单的 dapp 。
我一直在关注 YouTube 上的教程,但我陷入了从创建的合约对象调用 Solidity 函数的部分。
每当我尝试从合约中调用函数时,它都会不断产生以下错误:
"contract runner does not support calling"
Run Code Online (Sandbox Code Playgroud)
查询合约是有效的,因为我可以获得合约的余额,但我找不到任何有关如何修复合约运行程序错误的资源。将不胜感激的帮助。下面是 React 中的代码。
"contract runner does not support calling"
Run Code Online (Sandbox Code Playgroud)
坚固性代码:
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.9;
contract Rental {
struct Bike{
string name;
uint rangePower;
uint maxSpeed;
uint batteryCapacity;
uint costPerHour;
bool isAvailable;
}
//admin variables
address owner;
uint totalHours=0;
uint totalRents=0;
uint totalEbikes;
//array of bikes
Bike[] bikes;
constructor(){
//contract deployer address
owner = msg.sender;
//initialization of bike values
bikes.push(Bike("48v/12ah Electric Bicycle Electric Bike", 60, 50, 576, 70, true));
bikes.push(Bike("51v/17ah Electric Bicycle Electric Bike", 60, 50, 867, 70, true));
bikes.push(Bike("43v/11ah Electric Bicycle Electric Bike", 60, 50, 473, 70, true));
bikes.push(Bike("60v/18ah Electric Bicycle Electric Bike", 60, 50, 1080, 70, true));
totalEbikes=bikes.length;
}
function getBikes() public view returns (Bike[] memory){
return bikes;
}
function getNumOfBikes() public view returns (uint){
return bikes.length;
}
function changeAvailability() public {
bikes[1].isAvailable=false;
}
function rent(uint _totalHours) payable public {
totalHours+=_totalHours;
totalRents++;
}
}
Run Code Online (Sandbox Code Playgroud)
我正在观看的教程似乎使用的是Ethers v5,而我正在使用Ethers v6,但根据文档,我遇到的问题在两者上似乎是相同的。
小智 6
问题是您正在尝试使用由“提供者”创建的合同实例。提供者仅支持查询,不支持调用。您需要与签名者创建合同实例。
const contract = new ethers.Contract(contractAddress, ABI, signer);
归档时间: |
|
查看次数: |
4855 次 |
最近记录: |