Web3.js在以太坊上部署和调用智能合约

这篇具有很好参考价值的文章主要介绍了Web3.js在以太坊上部署和调用智能合约。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Web3.js在以太坊上部署和调用智能合约

介绍如何使用Web3.js在以太坊上部署和调用智能合约;Web3.js是以太坊JavaScript API的实现,它可以与以太坊区块链进行交互

智能合约编写

使用Solidity编写一个简单的智能合约,然后使用Web3.js将其部署到以太坊区块链,通过JavaScript调用该智能合约

solidityCopy codepragma solidity ^0.8.0;

contract SimpleStorage {
    uint256 private _value;

    function getValue() public view returns (uint256) {
        return _value;
    }

    function setValue(uint256 value) public {
        _value = value;
    }
}

这个智能合约非常简单。它有两个函数:getValuesetValuegetValue函数返回私有变量_value的值,setValue函数将_value设置为传入的值

接下来,我们将使用Truffle框架来编译、测试和部署智能合约。如果您没有安装Truffle,请在命令行中输入以下命令安装:

Copy code
npm install -g truffle

命令行中创建一个新目录,并在该目录中运行以下命令,创建一个Truffle项目:

csharpCopy code
truffle init

将上面的Solidity代码复制到contracts/SimpleStorage.sol文件中。接下来,我们需要在migrations目录中创建一个JavaScript文件,用于将合约部署到以太坊网络中:

javascriptCopy codeconst SimpleStorage = artifacts.require("SimpleStorage");

module.exports = function(deployer) {
  deployer.deploy(SimpleStorage);
};

可以在命令行中使用以下命令来编译和部署合约:

pythonCopy codetruffle compile
truffle migrate

已经将智能合约部署到以太坊网络中。接下来,我们将使用Web3.js来与该合约进行交互。我们将在HTML文件中使用Web3.js,因此需要在HTML文件中引入Web3.js库:

htmlCopy code<!DOCTYPE html>
<html>
<head>
  <title>Web3.js Demo</title>
  <script src="https://cdn.jsdelivr.net/gh/ethereum/web3.js/dist/web3.min.js"></script>
</head>
<body>
  <h1>Web3.js Demo</h1>
  <div>
    <label for="value-input">Enter a value:</label>
    <input type="number" id="value-input">
    <button onclick="setValue()">Set Value</button>
  </div>
  <div>
    <label for="value-output">Current value:</label>
    <span id="value-output"></span>
    <button onclick="getValue()">Get Value</button>
  </div>
  <script src="app.js"></script>
</body>
</html>

JavaScript代码来与智能合约交互。在项目的根目录中创建一个名为app.js的文件,并将以下代码复制到文件中:

javascriptCopy codeconst contractAddress = "0x1234567890123456789012345678901234567890"; // 智能合约地址
const abi = [
  {
    "inputs": [],
    "name": "getValue",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "value",
        "type": "uint256"
      }
    ],
    "name": "setValue",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  }
]; // 合约ABI

const web3 = new Web3(Web3.givenProvider || "http://localhost:8545"); // 初始化Web3实例

const simpleStorageContract = new web3.eth.Contract(abi, contractAddress); // 创建智能合约实例

async function setValue() {
  const value = document.getElementById("value-input").value;
  const accounts = await web3.eth.getAccounts();
  await simpleStorageContract.methods.setValue(value).send({ from: accounts[0] });
}

async function getValue() {
  const value = await simpleStorageContract.methods.getValue().call();
  document.getElementById("value-output").textContent = value;
}

首先定义了智能合约的地址和ABI,然后使用Web3.js创建一个新的Web3实例,并使用该实例创建了一个新的智能合约实例。接下来,我们定义了两个函数:setValuegetValuesetValue函数将输入框中的值设置为智能合约中的值,getValue函数获取智能合约中的值并将其显示在页面上;可以在命令行中启动本地Web服务器,并在浏览器中打开HTML文件。当我们设置或获取智能合约中的值时,页面将使用Web3.js与智能合约进行交互,并将结果显示在页面上;这就是如何使用Web3.js在以太坊上部署和调用智能合约的简单示例。您可以使用类似的步骤来开发更复杂的智能合约,并使用Web3.js与其进行交互

钱包集成

Web3技术可以让您的应用程序与以太坊钱包集成,这使得您可以让用户在应用程序中使用他们的以太坊钱包进行交易。使用Web3.js库,您可以轻松地将钱包功能集成到您的应用程序中

演示如何在应用程序中与以太坊钱包进行交互:

javascriptCopy codeif (typeof window.ethereum !== 'undefined') {
  console.log('MetaMask is installed!');
}

上面的代码将检查浏览器中是否安装了MetaMask钱包。如果已经安装,则应用程序可以通过window.ethereum对象与钱包进行交互;一旦您与以太坊钱包建立了连接,您可以使用Web3.js库中的web3.eth对象来发送以太币和交互智能合约

去中心化应用程序(DApp)开发

Web3技术也可以用于开发去中心化应用程序(DApp),这是一种基于区块链技术的应用程序,它不依赖于中央服务器,而是通过区块链网络来存储和处理数据;开发DApp需要了解Solidity编程语言、以太坊虚拟机(EVM)和智能合约的开发。除此之外,您还需要了解Web3.js库和以太坊生态系统中的其他工具和库。

演示如何使用Web3.js库与智能合约进行交互:文章来源地址https://www.toymoban.com/news/detail-578298.html

javascriptCopy codeconst contractAddress = "0x1234567890123456789012345678901234567890"; // 智能合约地址
const abi = [ ... ]; // 合约ABI

const web3 = new Web3(Web3.givenProvider || "http://localhost:8545"); // 初始化Web3实例

const simpleStorageContract = new web3.eth.Contract(abi, contractAddress); // 创建智能合约实例

async function setValue() {
  const value = document.getElementById("value-input").value;
  const accounts = await web3.eth.getAccounts();
  await simpleStorageContract.methods.setValue(value).send({ from: accounts[0] });
}

async function getValue() {
  const value = await simpleStorageContract.methods.getValue().call();
  document.getElementById("value-output").textContent = value;
}

document.getElementById("set-value-button").addEventListener("click", setValue);
document.getElementById("get-value-button").addEventListener("click", getValue);

到了这里,关于Web3.js在以太坊上部署和调用智能合约的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • web3系列———2.以太坊与智能合约

    主流币: 中本聪设计的比特币大获成功后,各种区块链和其对应的加密货币层出不穷,其中不乏新技术的使用,不过大部分的模仿货币最后都销声匿迹了,最终存活并存有大量用户的被称作主流币。 BTC比特币 ETH以太坊 LTC莱特币 XRP瑞波币 USDT (代币) USDC (代币) BUSD (代币) …

    2024年04月24日
    浏览(39)
  • java使用web3j,部署智能合约在测试链上,并调用(万字详细教程)

    最近在学区块链相关,想做点自己感兴趣的。网上关于这块部分的坑也比较多,最近也是问了很多行业从事者才慢慢填坑,因此记录下来分享一下。 钱包 :metemask、 solidity编译器 :remix 、 java ide :idea。 智能合约编写的我选择在remix上方便,而且部署的时候不需要自定义gasP

    2024年01月16日
    浏览(58)
  • 使用Ganache,web3js和remix在个人区块链上部署并调用合约

    Ganache是一个运行在本地的个人区块链,适用于以太坊的开发者。 首先我们需要下载Ganache web3js的中文文档 remix英文版的网址 有以上的准备之后我们就可以开始了 首先启动Ganache 这就是Ganache的主页面,下面有10个供我们使用的账号,上面有他们的地址以及余额,我们暂时需要

    2024年01月19日
    浏览(77)
  • MetaMask与Web3中智能合约调用(2)

    智能合约交易区别于点对点交易,智能合约交易只需付费给矿工费用,也就是gas fee,是支付给矿工的手续费,当我们在以太坊区块链上进行转账时,矿工要把我们的交易打包并放上区块链,才能使交易完成,在这过程中会消耗区块链的运算资源,所以要支付费用 这个过程为

    2024年01月16日
    浏览(47)
  • Java Web3J :使用web3j调用自己的智能合约的方法(教程)

    代码世界有很多令人大呼小叫的技巧!有的代码像魔术师一样巧妙地隐藏了自己,有的像魔法师一样让你眼花缭乱,还有的像瑜伽大师一样灵活自如。它们让我们惊叹不已,让我们觉得自己仿佛置身于编码的魔幻世界。快来分享你见过哪些令你膛目结舌的代码技巧吧! web3j是

    2024年02月04日
    浏览(69)
  • 部署智能合约到 polygon 上(Web3项目三实战之三)

    在上一篇 为 Web3 项目撰写智能合约(Web3项目三实战之二) 中,我们已经为 Web3 项目编写好了 智能合约 ,而本文将要部署 智能合约 到 polygon 上。 您或许会问, polygon 到底是什么?其实它是 测试链 (也可以说是 测试网 ),由于 主链 (或 主网 )部署 智能合约 是需要 ga

    2024年01月23日
    浏览(50)
  • Java Web3J :使用web3j调用自己的智能合约,返回一个内部有数组的对象结构时出现NPE问题

    之前有写过一篇文章Java Web3J :使用web3j调用自己的智能合约的方法(教程),当时只是简单的方法调用,也不涉及到什么复杂的数据类型,入参是long类型,出参是String类型。 遇到这个问题是因为有一个方法,需要通过提案的治理id,查询链上提案数据,这个就需要接收提案

    2024年01月19日
    浏览(67)
  • Web3 处理智能合约部署到本地区块链,并在本地进行测试

    上文 Web3 在Truffle项目中编写出自己的第一个solidity智能合约我们演示了 在Truffle环境下写一个智能合约并编译的功能 编译出的文件夹中的这个JSON就非常重要了 我们就可以通过 它这个ABI链接到需要的智能合约程序上去 但这也仅仅是编译完了 我们的智能合约还没有部署到我们

    2024年02月13日
    浏览(44)
  • web3: 智能合约

    2024年01月09日
    浏览(49)
  • 为 Web3 项目撰写智能合约(Web3项目三实战之二)

    时间像是在我们身边悄然而过,而我们的 Web3项目实战 系列也来到了第三个 Web3 项目。若正在屏幕前浏览本篇文章的您,或是从 Web3项目一 开篇之作,一直跟随着我的步伐来到了本文,想必您对于 Web3 与 Web2 的区别,有了最为深刻的感触了! 当然咯,前提是您先前或者说是当

    2024年01月18日
    浏览(51)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包