当前位置: 首页 > 知识库问答 >
问题:

如何将Dapp连接到Metamask,并通过Remix与部署在Ropsten上的智能合约交互

汪文光
2023-03-14

我通过remix将智能合约部署到ropsten测试网,现在我想通过网站(dapp)与它交互。我正在创建一个拍卖dapp。用户必须输入他想要的ETH金额来出价购买该文章。通过按钮提交值后,单击我希望元掩码弹出并处理事务

我从https://docs.metamask.io/guide/getting-started.html#basic-considerations拿到了连接Metamask的js代码

if (typeof window.ethereum !== 'undefined') {
    console.log('MetaMask is installed!');
 }
else{
      console.log('MetaMask not installed!');
}

const ethereumButton = document.querySelector('.enableEthereumButton');
const showAccount = document.querySelector('.showAccount');

ethereumButton.addEventListener('click', () => {
  getAccount();
});

async function getAccount() {
  const accounts = await ethereum.request({ method: 'eth_requestAccounts' });
  const account = accounts[0];
  showAccount.innerHTML = account;
}

它工作得很好,Metamask出现了,但我遇到的问题是如何将dapp连接到已部署的ropsten合同(通过remix部署,在ropsten etherscan上可见)。

我试着把它和这个js脚本联系起来

<script>
      // Initialize Web3
      if (typeof web3 !== 'undefined') {
        web3 = new Web3(web3.currentProvider);
      } else {
        web3 = new Web3(new Web3.providers.HttpProvider('http://localhost:7545'));
      }

      // Set Account
      web3.eth.defaultAccount = web3.eth.accounts[0];

      // Set Contract Abi
      var contractAbi = []; // Add Your Contract ABI here!!!

      // Set Contract Address
      var contractAddress = ''; // ?????

      // Set the Contract
      var contract = web3.eth.contract(contractAbi).at(contractAddress);
      ...

    </script>

但是我不知道如何将它与部署在ropsten上的合同联系起来。

在我在互联网上读了一些东西之后,我创建了一个infura节点来连接合同,但我又被卡住了。当我只使用metamask和dapp交互时,我是否必须连接到infura节点。

共有1个答案

宰父才
2023-03-14

查看有关如何使用Metamask连接Web3的问题。

成功连接Metamask后。你需要把contractABI放进去

// Set Contract Abi
   var contractAbi = []; // Add Your Contract ABI here!!!

和合同地址

// Set Contract Address
   var contractAddress = ''; // ?????

然后,您可以通过在

// Set the Contract
   var contract = web3.eth.contract(contractAbi).at(contractAddress);

然后,此合同对象将允许您与部署的合同进行交互。。

 类似资料:
  • 部署智能合约及与智能合约交互 如果你想避免使用智能合约的底层实现细节,web3j提供solidity的智能合约的封装包,使你能够通过web3j生成的包装对象直接与智能合约的所有方法进行交互。 另外,如果你希望发送常规交易或希望在与智能合约的交互中有更多的控制权,请参阅web3j教程:java使用web3j开发以太坊智能合约交易,这里讲到了创建智能合约,与智能合约进行交易,查询智能合约的状态等内容。

  • 构建与部署智能合约 智能合约的构建和部署发生在deploy方法中: YourSmartContract contract = YourSmartContract.deploy( <web3j>, <credentials>, GAS_PRICE, GAS_LIMIT, [<initialValue>,] <param1>, ..., <paramN>

  • 与智能合约交易 要与现有的智能合约进行交易,需要提供以下属性: to:智能合同地址 value:在智能合约中你希望存放的以太币Ether量(如果智能合约接受以太币Ether的话) data: 已编码的函数选择器和自变量参数 web3j负责函数编码,有关实现的进一步细节,请参阅应用程序二进制接口部分Application Binary Interface。 Function function = n

  • 我用块菌测试合同有困难。我安装了最新版本的truffle以及TestRPC。 据我所知,最新版本的truffle附带了一个用于测试SmartContracts的客户端,因此不再需要TestRPC。 我有一个简单的合同,我的迁移是这样的: 当我运行松露开发时,我看到创建了10个测试帐户。 账户: (0)0x627306090abab3a6e1400e9345bc60c78a8bef57 (1) 0x

  • 8.1 RPC 之前的章节中我们看到了怎么写、部署合约以及与合约互动。现在该讲讲与以太坊网络和智能合约沟通的细节了。 一个以太坊节点提供一个 RPC界面。这个界面给 Ðapp访问以太坊区块链的权限和节点提供的功能,比如编译智能合约代码,它用 JSON-RPC 2.0规范(不支持提醒和命名的参数)的子集作为序列化协议,在 HTTP和 IPC (linux/OSX上的 unix域接口,在 Window

  • 我有三个智能合约,比如a.sol、b.sol和c.sol……在这三个智能合同中,前两个是独立的智能合约,而c.sol使用a.sol和b.sol的功能,因此c.Sols需要“导入”前两个智能合约。“导入”在本地工作,但如何在testnet上通过remix/truffle部署它们,以便c.sol仍然可以访问a.sol和b.sol的功能?