11M 以太坊 ethereum OpenZeppelin : 开发智能合约

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

• 设置项目
• 第一份合同
• 编译 Solidity
• 添加更多合约
• 使用 OpenZeppelin 合约
• OpenZeppelin Tutorials 教程
• Contact 联系方式

• 设置项目

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

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

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

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

$ npm install --save-dev hardhat

安装好后,我们就可以运行了npx hardhat。hardhat.config.js这将在我们的项目目录中创建一个 Hardhat 配置文件 ( )。

• 第一份合同

我们将 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,因此我们需要首先配置 Hardhat 以使用适当的 solc 版本。

我们在hardhat.config.js.

// hardhat.config.js

/**
 * @type import('hardhat/config').HardhatUserConfig
 */
 module.exports = {
  solidity: "0.8.4",
};

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

npx hardhat compile
Solidity 0.8.4 is not fully supported yet. You can still use Hardhat, but some features, like stack traces, might not work correctly.

Learn more at https://hardhat.org/reference/solidity-support"

Compiling 1 file with 0.8.4
Compilation finished successfully

compile内置任务将自动查找目录中的所有合约,contracts并使用 Solidity 编译器使用hardhat.config.js.

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

• 添加更多合约

随着项目的发展,您将开始创建更多相互交互的合约:每个合约都应该存储在自己的.sol文件中。

为了看看这看起来如何,让我们在我们的合约中添加一个简单的访问控制系统Box:我们将在名为 的合约中存储一个管理员地址Auth,并且只让Box那些Auth允许的帐户使用。

因为编译器会拾取contracts目录和子目录中的所有文件,所以您可以自由地组织您认为合适的代码。在这里,我们将Auth合约存储在一个access-control子目录中:

// contracts/access-control/Auth.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

contract Auth {
    address private _administrator;

    constructor(address deployer) {
        // Make the deployer of the contract the administrator
        _administrator = deployer;
    }

    function isAdministrator(address user) public view returns (bool) {
        return user == _administrator;
    }
}

跨多个合约分离关注点是保持每个合约简单的好方法,并且通常是一种很好的做法。

但是,这不是将代码拆分为模块的唯一方法。您还可以在 Solidity 中使用继承进行封装和代码重用,我们将在接下来看到。

• 使用 OpenZeppelin 合约

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

导入 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上述代码示例中使用的合约的更多信息。

• OpenZeppelin Tutorials 教程

CN 中文 Github OpenZeppelin 教程 : github.com/565ee/OpenZeppelin_CN
CN 中文 CSDN OpenZeppelin 教程 : blog.csdn.net/wx468116118
EN 英文 Github OpenZeppelin Tutorials : github.com/565ee/OpenZeppelin_EN

• Contact 联系方式

Homepage : 565.ee
微信公众号 : wx468116118
微信 QQ : 468116118
GitHub : github.com/565ee
CSDN : blog.csdn.net/wx468116118
Email : 468116118@qq.com文章来源地址https://www.toymoban.com/news/detail-666979.html

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

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

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

相关文章

  • 【区块链 | 智能合约】Ethereum源代码(8)- Ethereum服务和以太坊P2P协议发送广播源码分析

    在“【区块链 | 智能合约】Ethereum源代码(2)- go-ethereum 客户端入口代码和Node分析”一文中,我们提到Ethereum作为一个service,被Node 注册进去。Node start的时候会启动其注册的所有服务,Ethereum service也是一样。 初始化方法

    2024年01月21日
    浏览(53)
  • 【区块链 | 智能合约】Ethereum源代码(3)- 以太坊RPC通信实例和原理代码分析(上)

    上一节提到,以太坊在node start的时候启动了RPC服务,以太坊通过Rpc服务来实现以太坊相关接口的远程调用。这节我们用个实例来看看以太坊 RPC是如何工作的,以及以太坊RPC的源码的实现 1,RPC启动命令 : go-ethereum的RPC服务默认地址:http://localhost:8545/ 通过以下命令修改默认地

    2024年02月02日
    浏览(69)
  • 【区块链技术开发】OpenZeppelin智能合约库:提高智能合约的安全性和可靠性,加速去中心化应用DApp的开发与部署。

    专栏:【区块链技术开发】 前期文章: 【区块链技术开发】使用Infura连接以太坊节点和OpenZeppelin库来构建安全、可靠的智能合约 【区块链技术开发】 Solidity使用Truffle Box工具实现预构建模板、自动化部署、创建智能合约示例代码 【区块链技术开发】 Solidity使用truffle工具创建

    2023年04月24日
    浏览(63)
  • 以太坊智能合约开发(五):Solidity成绩录入智能合约实验

    每个学生分别部署合约Student.sol ,保证只有自己可以修改姓名。老师部署合约StudentScore.sol,用于录入学生成绩,查询学生信息。查询学生信息时,需要调用学生部署的合约Student.sol。 student.sol合约,用于学生对自己信息进行管理。 学生的基本信息作为状态变量: 声明构造函

    2024年02月07日
    浏览(48)
  • 以太坊–智能合约开发介绍及环境搭建

    目录 1. 智能合约的概念 2. 智能合约的优点  3. 智能合约开发 3.1 支持智能合约的区块链 3.2 以太坊智能合约开发工具 3.3 以太坊智能合约开发语言 4. 智能合约开发环境搭建 4.1 准备工作 4.2 Node 与 NPM 4.3 Truffle 框架 4.4 Ganache 4.5 Metamask 4.6 VS code 与 Solidity插件 智能合约 (

    2024年02月05日
    浏览(45)
  • 以太坊智能合约开发:Solidity 语言快速入门

    在本文中,我们从一个简单的智能合约样例出发,通过对智能合约源文件结构的剖析与介绍,使大家对Solidity语言有一个初步的认识。最后,我们将该智能合约样例在 Remix 合约编译器中编译、部署,观察其执行结果。 在开始之前,我们先对Solidity有个初步的了解,即Solidity是

    2023年04月09日
    浏览(51)
  • 基于openzeppelin编写solidity可升级的智能合约

            现代软件的设计原则是“敏捷开发,迅速迭代”,功能升级或bug修复是所有软件系统都要面对的问题。甚至可以说软件质量在很大程度上依赖于升级和修补源代码的能力。当然Dapp(去中心化应用)也不例外,尤其Dapp一切都是透明的,这使得任何级别的bug都会被成

    2024年01月18日
    浏览(51)
  • 以太坊智能合约开发:Solidity语言中的映射

    本文我们介绍Solidity语言中的映射,包括映射的基本定义、语法、映射的变量声明和基本读写操作。并且通过两个智能合约例子演示了映射的定义与基本操作。 Solidity中关于映射的一些定义: 映射以键-值对(key = value)的形式存储数据; 键可以是任何内置数据类型,包括字节

    2024年02月05日
    浏览(55)
  • 基于以太坊的智能合约开发Solidity(基础篇)

    参考教程:基于以太坊的智能合约开发教程【Solidity】_哔哩哔哩_bilibili (1)程序编译完成后,需要在虚拟机上运行,将合约部署好后便可执行刚刚编写的函数。(注意, 合约一旦部署,就会永久存在于区块链上,且不可篡改 ,不过可以销毁) (2)执行完成后,可以得到以

    2024年02月04日
    浏览(57)
  • 区块链DAPP开发 以太坊智能合约框架有哪些

    Truffle 是一个在以太坊进行 DApp 开发的世界级开发环境、测试框架。 使用 Truffle 开发有一以下优点: 内置智能合约编译,链接,部署和二进制(文件)管理。 可快速开发自动化智能合约测试框架。 可脚本化、可扩展的部署和迁移框架。 可管理多个不同的以太坊网络,可部署

    2024年02月02日
    浏览(48)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包