首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >通过javascript (web3.js)从部署的智能契约中调用特定的稳固功能

通过javascript (web3.js)从部署的智能契约中调用特定的稳固功能
EN

Stack Overflow用户
提问于 2022-07-22 13:56:35
回答 1查看 219关注 0票数 1

我尝试通过react/javascript(web3.js)和Metamask调用Synthetix合同中的transferMargin()函数。我想在Button上使用,单击部署的智能契约中的transferMargin函数,但是它不能工作,我不知道我的代码有什么问题,我从契约和地址复制了完整的ABI。

这是我的密码:

代码语言:javascript
复制
import react, { useState } from "react";
import  { Component } from 'react';
import Web3 from 'web3'


export default function KwentaOptimism()
{

let provider = window.ethereum;
let selectedAccount;


if (typeof provider !== 'undefined') {  
    provider
    .request({method: 'eth_requestAccounts' })
    .then((accounts) => {
    selectedAccount = accounts[0];
    console.log(`Selected account is ${selectedAccount}`);
    })
                                                            }
                                                            
                                                            
const web3 = new Web3(provider);


async function loadContract(){

    let address = "0x1e28378F64bC04E872a9D01Eb261926717346F98";
    let chainlinkFutureContractABI = [{"constant":false,"inputs":[{"internalType":"int256","name":"marginDelta","type":"int256"}],"name":"transferMargin","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"}];
    

    var Contract = require('web3-eth-contract');
    var chainlinkFutureContract =  new Contract(chainlinkFutureContractABI, address);

    return await chainlinkFutureContract;

}


async function openLong(){
    let linkContract = await loadContract();
    linkContract.methods.transferMargin("100000000000000000000").send({from: '0xce05626e35c053995d4988b75af85e2eb7251b3c'});        



}




return(


<div>
    <br/>
    <button onclick = {openLong()}>Chainlink Long</button>
    
    
    
</div>

)


}

控制台错误消失了,但是onclick函数openLong()在我启动服务器或刷新页面时会自动地被调用。但是,只有当我单击"Chainlink Long“按钮时,才应该调用该函数。为什么会有这种奇怪的行为?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-07-22 16:01:03

这是因为当您使用.call()时,您正在尝试使用.send()调用智能契约函数。

所以你应该试着用

代码语言:javascript
复制
linkContract.methods.transferMargin("100000000000000000000").send();

在这里,您可以阅读每个用例的文档:

https://web3js.readthedocs.io/en/v1.2.11/web3-eth-contract.html#methods-mymethod-call

https://web3js.readthedocs.io/en/v1.2.11/web3-eth-contract.html#methods-mymethod-send

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73081533

复制
相关文章

相似问题

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