11W 以太坊 ethereum truffle : 开发智能合约

设置项目
第一份合约
编译 Solidity
使用 OpenZeppelin 合约
导入 OpenZeppelin 合约
truffle Tutorials 教程
Contact 联系方式

• 设置项目

创建项目后的第一步是安装开发工具。

以太坊最流行的开发框架是Hardhat,我们用ethers.js介绍了它最常见的用途。下一个最受欢迎的是使用web3.js的Truffle。每个人都有自己的长处,舒适地使用它们是很有用的。

在这些指南中,我们将展示如何使用 Truffle 和 Hardhat 开发、测试和部署智能合约。

说明适用于 Truffle 和 Hardhat。使用此切换选择您的偏好!

要开始使用 Truffle,我们将把它安装在我们的项目目录中。

$ npm install --save-dev truffle

安装后,我们可以初始化 Truffle。这将在我们的项目目录中创建一个空的 Truffle 项目。

npx truffle init

Starting init...
================

> Copying project files to /home/openzeppelin/learn

Init successful, sweet!

• 第一份合约

我们将 Solidity 源文件 ( .sol) 存储在一个contracts目录中。这相当于src您可能从其他语言中熟悉的目录。

我们现在可以编写我们的第一个简单的智能合约,称为Box:它将让人们存储一个可以稍后检索的值。

我们将此文件另存为contracts/Box.sol. 每个.sol文件都应该包含单个合约的代码,并以它命名。

// contracts/Box.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

contract Box {
    uint256 private _value;

    // Emitted when the stored value changes
    event ValueChanged(uint256 value);

    // Stores a new value in the contract
    function store(uint256 value) public {
        _value = value;
        emit ValueChanged(value);
    }

    // Reads the last stored value
    function retrieve() public view returns (uint256) {
        return _value;
    }
}

• 编译 Solidity

以太坊虚拟机(EVM)不能直接执行 Solidity 代码:我们首先需要将其编译成 EVM 字节码。

我们的Box.sol合约使用 Solidity 0.8,因此我们需要首先配置 Truffle 以使用适当的 solc 版本。

我们在truffle-config.js.

// truffle-config.js
  ...

  // Configure your compilers
  compilers: {
    solc: {
      version: "0.8.4",    // Fetch exact version from solc-bin (default: truffle's version)
      // docker: true,        // Use "0.5.1" you've installed locally with docker (default: false)
      // settings: {          // See the solidity docs for advice about optimization and evmVersion
      //  optimizer: {
      //    enabled: false,
      //    runs: 200
      //  },
      //  evmVersion: "byzantium"
      // }
    }
  },

  ...

然后可以通过运行单个编译命令来实现编译:

npx truffle compile

Compiling your contracts...
===========================
✔ Fetching solc version list from solc-bin. Attempt #1
✔ Downloading compiler. Attempt #1.
> Compiling ./contracts/Box.sol
> Compiling ./contracts/Migrations.sol
> Artifacts written to /home/openzeppelin/learn/build/contracts
> Compiled successfully using:
   - solc: 0.8.4+commit.c7e474f2.Emscripten.clang

该compile命令将自动查找contracts目录中的所有合约,并使用 Solidity 编译器使用truffle-config.js.

您会注意到build/contracts创建了一个目录:它包含已编译的工件(字节码和元数据),它们是 .json 文件。将此目录添加到您的.gitignore.

• 使用 OpenZeppelin 合约

可重用的模块和库是伟大软件的基石。OpenZeppelin Contracts包含许多有用的构建块,可用于构建智能合约。在构建它们时您可以高枕无忧:它们已经过多次审计,其安全性和正确性经过实战考验。

库中的许多合约都不是独立的,也就是说,您不需要按原样部署它们。相反,您将使用它们作为起点,通过向它们添加功能来构建您自己的合约。Solidity 提供了多重继承作为实现这一点的机制:查看Solidity 文档了解更多详细信息。

例如,Ownable合约将部署者账户标记为合约的所有者,并提供一个名为onlyOwner. 应用于函数时,onlyOwner将导致所有非来自所有者帐户的函数调用还原。还提供转让和放弃所有权的功能。

当以这种方式使用时,继承成为一种强大的机制,允许模块化,而不会强迫您部署和管理多个合约。

• 导入 OpenZeppelin 合约

可以通过运行以下命令下载最新发布的 OpenZeppelin Contracts 库:

$ npm install @openzeppelin/contracts

您应该始终使用这些已发布版本中的库:将库源代码复制粘贴到您的项目中是一种危险的做法,它很容易在您的合约中引入安全漏洞。

要使用 OpenZeppelin 合约之一,import它通过在其路径前加上@openzeppelin/contracts. 例如,为了替换我们自己的Auth合约,我们将导入@openzeppelin/contracts/access/Ownable.sol以添加访问控制Box:

// contracts/Box.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

// Import Ownable from the OpenZeppelin Contracts library
import "@openzeppelin/contracts/access/Ownable.sol";

// Make Box inherit from the Ownable contract
contract Box is Ownable {
    uint256 private _value;

    event ValueChanged(uint256 value);

    // The onlyOwner modifier restricts who can call the store function
    function store(uint256 value) public onlyOwner {
        _value = value;
        emit ValueChanged(value);
    }

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

OpenZeppelin合约文档是学习开发安全智能合约系统的好地方。它具有指南和详细的 API 参考:例如,请参阅访问控制指南以了解有关Ownable上述代码示例中使用的合约的更多信息。

• truffle Tutorials 教程

Homepage : 565.ee

猜你喜欢

转载自blog.csdn.net/wx468116118/article/details/126812081