首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >利用react moralis执行链上函数

利用react moralis执行链上函数
EN

Ethereum用户
提问于 2022-07-03 16:23:53
回答 1查看 285关注 0票数 1

我正在尝试将我的dapp从vanilla + html (本地草帽节点)转换为-moralis+ nextJS (本地草帽节点)。

下面是一个来自前端的契约函数调用的示例。这段代码应该使用提供的params创建一个新的事件实体,并在元ask中请求一些气体。我现在硬编码了params,但是当我通过按钮上的onClick调用函数时,元问题不会弹出:

代码语言:javascript
复制
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>
    )
}

以下是守则正在进行调解的合同:

代码语言:javascript
复制
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++;
    }
}

我做错了什么?提前谢谢你的时间!

EN

回答 1

Ethereum用户

回答已采纳

发布于 2022-07-07 09:54:33

如果有人遇到同样的问题--我为我的合同函数发送的参数是错误的。以下是我应该做的:

代码语言:javascript
复制
  const eventOptions = {
    abi: abiEvent,
    contractAddress: universalContractAddress,
    functionName: "createMatch",
    //msgValue: 1,
    params: {
      homeTeam: "t1",
      awayTeam: "t2",
      drawTeam: "t3",
      matchDate: "0909",
      place: "msk",
      finished: false,
      userList: []
    }
  };
票数 0
EN
页面原文内容由Ethereum提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://ethereum.stackexchange.com/questions/131131

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档