我正在尝试将我的dapp从vanilla + html (本地草帽节点)转换为-moralis+ nextJS (本地草帽节点)。
下面是一个来自前端的契约函数调用的示例。这段代码应该使用提供的params创建一个新的事件实体,并在元ask中请求一些气体。我现在硬编码了params,但是当我通过按钮上的onClick调用函数时,元问题不会弹出:
import { useWeb3Contract } from "react-moralis"
import contractAddresses from "../constants/contractAddresses.json"
import abiEvent from "../constants/abiEvent.json"
import { useMoralis } from "react-moralis"
export default function CreateMatch() {
const teamName1 = "t1"
const teamName2 = "t2"
const teamName3 = "t3"
const eventDate = "090909"
const matchPlace = "msk"
const matchFinished = false
const matchBets = []
const { Moralis, isWeb3Enabled, chainId: chainIdHex } = useMoralis()
const chainId = parseInt(chainIdHex)
const universalContractAddress = chainId in contractAddresses ? contractAddresses[chainId][0] : null
const eventOptions = {
abi: abiEvent,
contractAddress: universalContractAddress,
functionName: "createMatch",
params: {
teamName1, teamName2, teamName3, eventDate, matchPlace, matchFinished, matchBets
},
};
const { runContractFunction, isFetching, isLoading } =
useWeb3Contract();
const { runContractFunction: createMatch } = useWeb3Contract();
return (
<div>Hi from CreateMatch
<div>
<button
onClick={() => runContractFunction({ params: eventOptions })}
disabled={isFetching}
>
CreateMatch
</button>
</div>
</div>
)
}以下是守则正在进行调解的合同:
pragma solidity 0.8.7;
contract Event {
uint256 public matchCount = 0;
mapping(uint => Match) public matches;
struct Match {
uint256 matchId;
string homeTeam;
string awayTeam;
string drawTeam;
string matchDate;
string place;
bool finished;
address[] userList;
}
function createMatch(
string memory homeTeam,
string memory awayTeam,
string memory drawTeam,
string memory matchDate,
string memory place,
bool finished,
address[] memory userList
) public {
matches[matchCount] = Match(
matchCount,
homeTeam,
awayTeam,
drawTeam,
matchDate,
place,
finished,
userList
);
matchCount++;
}
}我做错了什么?提前谢谢你的时间!
发布于 2022-07-07 09:54:33
如果有人遇到同样的问题--我为我的合同函数发送的参数是错误的。以下是我应该做的:
const eventOptions = {
abi: abiEvent,
contractAddress: universalContractAddress,
functionName: "createMatch",
//msgValue: 1,
params: {
homeTeam: "t1",
awayTeam: "t2",
drawTeam: "t3",
matchDate: "0909",
place: "msk",
finished: false,
userList: []
}
};https://ethereum.stackexchange.com/questions/131131
复制相似问题