Loading...

部署你的第一个DApp:运行智能合约并部署到本地区块链

技术博客1前 (2023)发布 Dexnav
0

部署你的第一个DApp:运行智能合约并部署到本地区块链

交流分享:DexDao

在前两篇文章中,我们介绍了如何创建一个新的Truffle项目并编写Solidity智能合约。现在,我们将讨论如何运行智能合约并将其部署到本地区块链。

环境准备

在开始之前,我们需要确保以下几个软件已经安装好:

  1. Ganache:一个本地的以太坊区块链客户端,可以模拟以太坊主网或测试网。
  2. Truffle:一个以太坊智能合约开发框架。
  3. Metamask:一个以太坊钱包,可以用于与以太坊网络进行交互。

智能合约编写

我们将编写一个简单的智能合约,其中包含一个名为SimpleStorage的合约和一个value变量。SimpleStorage合约的目的是让用户可以在其中存储一个整数值,并可以从中检索该值。

pragma solidity >=0.4.22 <0.9.0;

contract SimpleStorage {
    uint256 value;

    function set(uint256 newValue) public {
        value = newValue;
    }

    function get() public view returns (uint256) {
        return value;
    }
}

部署智能合约

接下来,我们将使用Truffle框架部署智能合约。在您的终端中,进入您的项目目录并运行以下命令:

truffle init

此命令将初始化一个新的Truffle项目,其中包括一个contracts文件夹,您可以在其中编写智能合约。接下来,我们将编写一个新的合约并将其部署到我们的本地以太坊区块链上。

contracts文件夹中,创建一个名为SimpleStorage.sol的新文件,并将上面的智能合约代码复制到其中。接下来,我们需要在Truffle配置文件中指定我们要使用的网络。

在项目目录中,创建一个名为truffle-config.js的新文件,并将以下内容复制到其中:

module.exports = {
  networks: {
    development: {
      host: "127.0.0.1",
      port: 7545,
      network_id: "*"
    }
  }
};

上面的配置文件将使用development网络连接到我们的本地以太坊区块链,该网络的端口为7545

接下来,在终端中运行以下命令,使用Ganache启动本地区块链:

ganache

现在,我们可以使用Truffle来编译和部署智能合约。在终端中,进入您的项目目录,并运行以下命令:

truffle compile

该命令将编译您的智能合约。接下来,运行以下命令来部署您的智能合约:

truffle migrate

此命令将部署您的智能合约到本地以太坊区块链中。在部署过程中,Truffle将使用您在配置文件中指定的网络连接到本地以太坊区块链。一旦智能合约成功部署,Truffle将在终端中显示一条消息,指示合约的地址。

与智能合约交互

我们现在已经成功部署了一个智能合约,接下来,我们将使用Web3.js与该智能合约进行交互。Web3.js是一个用于与以太坊网络进行交互的JavaScript库。我们将使用它来连接到我们的本地以太坊区块链并与我们的智能合约进行交互。

首先,我们需要在终端中安装Web3.js:

npm install web3

接下来,在您的项目目录中,创建一个名为app.js的新文件,并将以下代码复制到其中:

const Web3 = require('web3');

const web3 = new Web3(new Web3.providers.HttpProvider('http://localhost:7545'));

const abi = [
  {
    "inputs": [],
    "name": "get",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "newValue",
        "type": "uint256"
      }
    ],
    "name": "set",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  }
];

const contractAddress = '0xYOUR_CONTRACT_ADDRESS';

const simpleStorage = new web3.eth.Contract(abi, contractAddress);

const setValue = async () => {
  const accounts = await web3.eth.getAccounts();
  const result = await simpleStorage.methods.set(100).send({ from: accounts[0] });
  console.log(result);
};

const getValue = async () => {
  const result = await simpleStorage.methods.get().call();
  console.log(result);
};

setValue();
getValue();

在上面的代码中,我们首先创建了一个Web3对象,该对象将连接到我们的本地以太坊区块链。接下来,我们定义了一个ABI数组,该数组描述了我们的智能合约的接口。我们还定义了智能合约的地址,并使用ABI和地址创建了一个新的智能合约实例。

最后,我们定义了两个函数,一个用于设置智能合约中的值,另一个用于检索该值。在设置函数中,我们首先使用Web3.js的getAccounts()方法获取本地以太坊区块链上的账户,然后使用send()方法向智能合约发送一笔交易,并在该交易中包含我们要设置的新值。在检索函数中,我们使用call()方法向智能合约发送一个只读请求,以检索当前存储在合约中的值。

在终端中运行以下命令,启动您的应用程序:

node app.js

此命令将运行app.js文件,并输出从智能合约中检索的当前值。然后,它将向智能合约中设置一个新值(在此示例中为100),并再次检索该值。

现在您已成功部署了一个DApp,并与智能合约进行了交互!您可以使用类似的过程,编写和部署其他类型的智能合约,并将它们部署到本地以太坊区块链或其他网络上。

定制开发:DexDao

 

© 版权声明

相关文章

暂无评论

暂无评论...