Truffle Suite框架

Truffle Suite框架

Truffle Suite是一个用于构建、测试和部署以太坊智能合约的开发框架。它提供了一系列工具,使得以太坊开发更加容易和高效。本文将介绍如何使用Truffle Suite框架来开发一个简单的智能合约,并且展示一些基本的代码示例。

安装Truffle Suite

在开始之前,你需要先安装Truffle Suite。你可以通过npm来安装它,只需要在终端中输入以下命令:

npm install -g truffle

这个命令将会全局安装Truffle Suite。

创建智能合约

在Truffle Suite中,你可以使用Solidity语言来编写智能合约。我们将创建一个简单的智能合约,它可以存储和检索一个字符串。首先,我们需要在终端中创建一个新的Truffle项目。在终端中输入以下命令:

mkdir myproject
cd myproject
truffle init

这个命令将会创建一个新的Truffle项目,并且初始化一些默认文件和文件夹。

接下来,我们需要创建一个新的合约文件。在contracts文件夹中创建一个名为MyContract.sol的文件,并且在其中编写以下代码:

pragma solidity ^0.8.0;

contract MyContract {
    string myString;

    function setString(string memory _string) public {
        myString = _string;
    }

    function getString() public view returns (string memory) {
        return myString;
    }
}

这个合约定义了一个名为MyContract的合约,并且在其中定义了两个函数:setStringgetStringsetString函数用于设置一个字符串变量myString的值;getString函数用于获取myString的值。现在我们已经有了一个简单的智能合约。

编写测试脚本

接下来,我们需要编写一个测试脚本来测试我们的合约。在test文件夹中创建一个名为mycontract.js的文件,并且编写以下代码:

const MyContract = artifacts.require("MyContract");

contract("MyContract", () => {
  it("should set the string correctly", async () => {
    const myContract = await MyContract.deployed();
    await myContract.setString("Hello, world!");
    const result = await myContract.getString();
    assert(result === "Hello, world!");
  });
});

这个测试脚本使用了assert库来测试我们的合约。它首先部署了我们的合约,然后调用setString函数来设置myString的值。最后,它调用getString函数来获取myString的值,并且使用assert来检查它是否等于我们设置的值。

运行测试脚本

现在我们已经编写了一个简单的智能合约和测试脚本,接下来我们需要运行测试脚本来测试我们的合约。在终端中输入以下命令:

truffle test

这个命令将会运行我们的测试脚本,并且输出测试结果。如果一切正常,你应该会看到以下输出:

Contract: MyContract
  √ should set the string correctly (104ms)

1 passing (139ms)

这个输出告诉我们,我们的测试通过了。

部署智能合约

现在我们已经完成了合约的开发和测试,接下来我们需要部署我们的合约。在Truffle Suite中,你可以使用truffle migrate命令来部署智能合约。在终端中输入以下命令:

truffle migrate

这个命令将会编译和部署我们的合约,并且输出部署结果。如果一切正常,你应该会看到以下输出:

Starting migration...
======================
> Network name:    'development'
> Network id:      5777
> Block gas limit: 6721975


1_initial_migration.js
======================

   Deploying 'Migrations'
   ----------------------
   > transaction hash:    0x9de7a3f6e0a2c84b6f8f7c7a0d1e2b2d9e9d7a7b659ef1b3f3b3be8d295c3a49
   > Blocks: 0            Seconds: 0
   > contract address:    0x5FbDB2315678afecb367f032d93F642f64180aa3
   > block number:        2
   > block timestamp:     1627652324
   > account:             0x90F8bf6A479f320ead074411a4B0e7944Ea8c9C1
   > balance:             99.99999958
   > gas used:            261494
   > gas price:           20 gwei
   > value sent:          0 ETH
   > total cost:          0.00522988 ETH


   > Saving migration to chain.
   > Saving artifacts
   -------------------------------------
   > Total cost:          0.00522988 ETH


2_deploy_contracts.js
=====================

   Deploying 'MyContract'
   ----------------------
   > transaction hash:    0x0b8c1d0d5c6f4e4e4d4e4d4e4d4e4d4e4d4e4d4e4d4e4d4e4d4e4d4e4d4e4d4e
   > Blocks: 0            Seconds: 0
   > contract address:    0x692a70D2e424a56D2C6C27aA97D1a86395877b3C
   > block number:        4
   > block timestamp:     1627652324
   > account:             0x90F8bf6A479f320ead074411a4B0e7944Ea8c9C1
   > balance:             99.99891672
   > gas used:            146281
   > gas price:           20 gwei
   > value sent:          0 ETH
   > total cost:          0.00292562 ETH


   > Saving migration to chain.
   > Saving artifacts
   -------------------------------------
   > Total cost:          0.00292562 ETH


Summary
=======
> Total deployments:   2
> Final cost:          0.0081555 ETH

这个输出告诉我们,我们的合约已经成功部署到了以太坊网络上。

总结

在本文中,我们介绍了如何使用Truffle Suite框架来开发、测试和部署一个简单的智能合约。Truffle Suite提供了一系列工具,使得以太坊开发更加容易和高效。我们希望这篇文章能够帮助你入门Truffle Suite,并且能够在你的以太坊开发中发挥作用

去中心化应用(DApp)

简单的去中心化应用(DApp),并且展示一些基本的代码示例。

安装Truffle Suite

在开始之前,你需要先安装Truffle Suite。你可以通过npm来安装它,只需要在终端中输入以下命令:

npm install -g truffle

这个命令将会全局安装Truffle Suite。

创建DApp

在Truffle Suite中,你可以使用Solidity语言来编写智能合约,并且使用web3.js来与智能合约交互。我们将创建一个简单的DApp,它可以存储和检索一个数字。首先,我们需要在终端中创建一个新的Truffle项目。在终端中输入以下命令:

mkdir mydapp
cd mydapp
truffle init

这个命令将会创建一个新的Truffle项目,并且初始化一些默认文件和文件夹。

接下来,我们需要创建一个新的合约文件。在contracts文件夹中创建一个名为MyContract.sol的文件,并且在其中编写以下代码:

pragma solidity ^0.8.0;

contract MyContract {
    uint256 myNumber;

    function setNumber(uint256 _number) public {
        myNumber = _number;
    }

    function getNumber() public view returns (uint256) {
        return myNumber;
    }
}

这个合约定义了一个名为MyContract的合约,并且在其中定义了两个函数:setNumbergetNumbersetNumber函数用于设置一个数字变量myNumber的值;getNumber函数用于获取myNumber的值。现在我们已经有了一个简单的智能合约。

接下来,我们需要编写一个简单的前端界面来与智能合约交互。在根目录中创建一个名为index.html的文件,并且编写以下代码:

<!DOCTYPE html>
<html>
  <head>
    <meta charset="UTF-8" />
    <title>My DApp</title>
  </head>
  <body>
    <h1>My DApp</h1>
    <form>
      <label for="number">Number:</label>
      <input type="number" id="number" /><br />
      <button type="submit">Set Number</button>
    </form>
    <p>Current Number: <span id="current-number"></span></p>

    <script src="./js/web3.min.js"></script>
    <script src="./js/app.js"></script>
  </body>
</html>

这个前端界面包含了一个表单,它可以让用户输入一个数字并且调用setNumber函数来设置智能合约中的数字。它还包含了一个<p>标签,它可以显示当前智能合约中的数字。

接下来,我们需要编写一个JavaScript文件来与智能合约交互。在js文件夹中创建一个名为app.js的文件,并且编写以下代码:

window.addEventListener("load", async () => {
  if (typeof web3 !== "undefined") {
    web3 = new Web3(web3.currentProvider);
  } else {
    web3 = new Web3(new Web3.providers.HttpProvider("http://localhost:8545"));
  }

  const contractAddress = "0x692a70D2e424a56D2C6C27aA97D1a86395877b3C";
  const myContract = new web3.eth.Contract(
    [
      {
        constant: false,
        inputs: [
          {
            name: "_number",
            type: "uint256",
          },
        ],
        name: "setNumber",
        outputs: [],
        payable: false,
        stateMutability: "nonpayable",
        type: "function",
      },
      {
        constant: true,
        inputs: [],
        name: "getNumber",
        outputs: [
          {
            name: "",
            type: "uint256",
          },
        ],
        payable: false,
        stateMutability: "view",
        type: "function",
      },
    ],
    contractAddress
  );

  const currentNumber = await myContract.methods.getNumber().call();
  document.getElementById("current-number").textContent = currentNumber;

  const form = document.querySelector("form");
  form.addEventListener("submit", async (event) => {
    event.preventDefault();
    const number = document.getElementById("number").value;
    await myContract.methods.setNumber(number).send({ from: web3.eth.defaultAccount });
    const newNumber = await myContract.methods.getNumber().call();
    document.getElementById("current-number").textContent = newNumber;
  });
});

这个JavaScript文件使用了web3.js库来与智能合约交互。它首先检查web3对象是否已经存在,如果不存在则创建一个新的web3对象,并且连接到本地的以太坊节点。然后它创建了一个新的智能合约对象,并且调用getNumber函数来获取当前的数字。最后,它监听表单的提交事件,并且调用setNumber函数来设置智能合约中的数字。

运行DApp

现在我们已经编写了一个简单的DApp,接下来我们需要运行它。在终端中输入以下命令:

truffle develop

这个命令将会启动一个本地的以太坊节点,并且输出一些信息。接下来,在Truffle项目根目录中输入以下命令:

truffle migrate

这个命令将会编译和部署我们的合约,并且输出部署结果。如果一切正常,你应该会看到以下输出:

Starting migration...
======================
> Network name:    'development'
> Network id:      5777
> Block gas limit: 6721975


1_initial_migration.js
======================

   Deploying 'Migrations'
   ----------------------
   > transaction hash:    0x9de7a3f6e0a2c84b6f8f7c7a0d1e2b2d9e9d7a7b659ef1b3f3b3be8d295c3a49
   > Blocks: 0            Seconds: 0
   > contract address:    0x5FbDB2315678afecb367f032d93F642f64180aa3
   > block number:        2
   > block timestamp:     1627652324
   > account:             0x90F8bf6A479f320ead074411a4B0e7944Ea8c9C1
   > balance:             99.99999958
   > gas used:            261494
   > gas price:           20 gwei
   > value sent:          0 ETH
   > total cost:          0.00522988 ETH


   > Saving migration to chain.
   > Saving artifacts
   -------------------------------------
   > Total cost:          0.00522988 ETH


2_deploy_contracts.js
=====================

   Deploying 'MyContract'
   ----------------------
   > transaction hash:    0x0b8c1d0d5c6f4e4e4d4e4d4e4d4e4d4e4d4e4d4e4d4e4d4e4d4e4d4e4d4e4d4e
   > Blocks: 0            Seconds: 0
   > contract address:    0x692a70D2e424a56D2C6C27aA97D1a86395877b3C
   > block number:        4
   > block timestamp:     1627652324
   > account:             0x90F8bf6A479f320ead074411a4B0e7944Ea8c9C1
   > balance:             99.99891672
   > gas used:            146281
   > gas price:           20 gwei
   > value sent:          0 ETH
   > total cost:          0.00292562 ETH


   > Saving migration to chain.
   > Saving artifacts
   -------------------------------------
   > Total cost:          0.00292562 ETH


Summary
=======
> Total deployments:   2
> Final cost:          0.0081555 ETH

这个输出告诉我们,我们的合约已经成功部署到了本地的以太坊节点上。

接下来,在Truffle项目根目录中输入以下命令:

npm run dev

这个命令将会启动一个本地的web服务器,并且打开我们的DApp。如果一切正常,你应该会看到一个包含表单和数字的网页。你可以在表单中输入一个数字并且点击“Set Number”按钮来设置智能合约中的数字,同时网页中的数字也会更新

猜你喜欢

转载自blog.csdn.net/m0_69117588/article/details/130588680