脉波开发者文档
  • 脉波开发者文档
  • 基础主題
    • 脉波简介
    • MAPO币
    • 全链去中心化应用
    • 全链应用与单链或多链应用的区别
    • 第三方信任跨链与点对点跨链方案区别
    • 比特币二层
      • brc-201
    • 预言机 Oracle
      • Supra: MAP Protocol 上的去中心化预言机
    • 帐户
    • 交易
    • 区块
    • MPT树
    • RLP编码
    • Gas费用
    • 消息跨链
    • 轻客户端
      • MAPO轻客户端
    • 全链开发组件层MOS
      • MOS接口和功能
      • MOS的部署
      • Messenger
    • 中继链(atlas)
      • 节点架构
        • 中继链(atlas)架构 - 区块和交易结构
        • 创世
          • 创世配置 - 介绍创世配置文件
          • 创世合约
            • ABI
              • Accounts
              • Election
              • EpochRewards
              • LockedGold
              • Validators
            • 地址
            • 部署
        • 预编译合约 - 支持的预编译合约
        • 协议
          • Proof of Stake
          • 共识
          • 选举
          • 奖励
          • 治理
      • 部署节点 - 包括公共RPC节点
        • 运行节点(中继链)
        • 归档节点(中继链)
        • 引导节点(中继链)
        • 验证节点 (中继链)
        • RPC节点(中继链)
      • Marker工具 - atlas的简易客户端工具
        • Genesis
        • Validator
        • Vote
        • Common
      • 搭建私有网络
      • 公共网络服务信息
        • 公共网络
      • 示例
        • 如何成为一个 Validator 并加入到 Atlas 网络中
        • 如何成为一个 Validator 并加入到 Atlas 网络中[高级]
    • Compass(maintainer,messenger)
      • Compass - 架构及模块说明
      • Compass配置参数
      • Compass环境与部署
      • Compass二次开发 - 基于compass定义自己的路由服务
  • MAPO技术堆栈
    • 堆栈
      • 接入的链
    • EVM兼容
      • 智能合约语言
      • 智能合约结构
      • 智能合约库
      • 编译智能合约
      • 测试智能合约
      • 部署智能合约
      • 可组合性
      • 智能合约安全性
      • 智能合约形式化验证
      • 开发框架
      • 开发网络
    • 实现跨链互通
      • EVM兼容链的跨链互通
        • 轻客户端验证
        • 轻客户端状态更新
        • MOS层
      • 非EVM兼容链的跨链互通
        • 轻客户端验证
        • 轻客户端状态更新
        • MOS层
    • 如何开发全链应用
    • 轻客户端信息
    • SDK/API - mapo支持的API
      • MOS接口
      • 轻客户端接口
      • 中继链RPC
        • json-rpc
          • atlas json rpc
          • atlas consensus rpc
        • javaScript sdk
        • go-sdk
      • 后端API
        • 浏览器API
        • 数据统计与分析API
  • 零知识证明(zk)
    • 零知识证明
Powered by GitBook
On this page
  • 前置要求
  • 资料库中的内容
  • 如何添加库
  • 何时使用
  • 相关工具
  1. MAPO技术堆栈
  2. EVM兼容

智能合约库

Previous智能合约结构Next编译智能合约

Last updated 1 year ago

您无需从头开始编写项目中的每一个智能合约 我们有许多开源代码的智能合约库可为您的项目提供可重复利用的构建块,从而使您不必重新开始。以下MAPO-Relay-Chain统称为MAPO.

前置要求

在我们跳转到智能合约库之前,清楚地了解一个智能合约的构成是一个不错的主意。 如果尚未进行智能合约的了解,请直接点击。

资料库中的内容

您通常可以在智能合约库中找到两种构建模块:可以添加到合约中的可复用代码,与各种标准的实现。

行为

当编写智能合约时,您很可能会发现自己在写重复的代码。 比如说在智能合约中指派一个管理员地址执行受保护的操作,或添加一个紧急暂停按钮以应对预料不到的问题。

智能合约库通常提供这些行为的可复用实现方式为或在 solidity 中通过的方式实现。

例如,以下是来自 ,它设计了一个作为合约所有者的地址,并且提供了一个修饰者来限制该所有者获得一种方法。

contract Ownable {
    address public owner;

    constructor() internal {
        owner = msg.sender;
    }

    modifier onlyOwner() {
        require(owner == msg.sender, "Ownable: caller is not the owner");
        _;
    }
}

在您的合约中使用这个构建模块,您需要先导入它,然后在您自己的合约中扩展它。 这个将会允许您使用 Ownable 合约提供的修饰符来保护您的函数。

import ".../Ownable.sol"; // Path to the imported library

contract MyContract is Ownable {
    // The following function can only be called by the owner
    function secured() onlyOwner public {
        msg.sender.transfer(1 ether);
    }
}

如何添加库

// This will load the @openzeppelin/contracts library from your node_modules
import "@openzeppelin/contracts/token/ERC721/ERC721.sol";

contract MyNFT is ERC721 {
    constructor() ERC721("MyNFT", "MNFT") public { }
}

何时使用

为您的项目使用智能合约库有几个好处。 首先,它为您提供了现成的构建模块,您可以将其纳入您的系统,而不必自己编码,从而节省了您的时间。

然而,使用智能合约库有可能将您不熟悉的代码纳入您的项目。 导入一个合约并将其直接包含在您的项目中是很诱人的,但如果没有很好地理解该合约的作用,您可能会由于一个意外的行为而无意中在您的系统中引入一个问题。 一定要确保阅读您要导入的代码的文档,然后在使其成为您的项目的一部分之前审查代码本身。

最后,在决定是否包括一个库时,要考虑其总体使用情况。 一个被广泛采用的方案的好处是有一个更大的社区和更多的眼睛来关注它的问题。 在使用智能合约进行建设时,安全应该是您的首要关注点!

相关工具

OpenZeppelin 合约- 安全的智能合约开发库。

DappSys - 安全、简单、灵活的智能合约构建模块。

HQ20 - 一个带有合约、库和案例的 Solidity 项目,帮助您为现实世界建立功能齐全的分布式应用。

另一个比较受欢迎的例子是 或。 这些库(与基础合约不同)提供了语言本身不具有的带有溢出检查的算术函数。 使用这些库而不是本地的算术操作可以来防止您的合约出现溢出错误,这些错误可能会导致灾难性的后果!

始终参考您所包含的库的文档,以获得关于如何将其包含在您的项目中的具体说明 一些 Solidity 合约库使用 npm 来打包,所以您可以直接 npm 安装它们。 大多数合约的工具会在您的 node_modules 中查找智能合约库,所以您可以做以下工作。

无论您使用哪种方法,当包括一个库时,总是要注意的版本。 例如,如果您用 Solidity 0.5 编写您的合约,您就不能使用 Solidity 0.6 的库。

安全性也是一个重要的优点。 开源智能合约库也经常受到严格审查。 鉴于许多项目都依赖于它们,社区有强烈的动机来对它们持续审计。 在应用程序代码中发现错误比在可重用的合约库中发现错误要常见得多。 一些库还接受了,以提高安全性。

SafeMath
DsMath
编译
语言
外部审计
相关文档
GitHub
社区论坛
相关文档
GitHub
GitHub
标准库
继承
Ownable合约的简化版本
OpenZeppelin 合约库
智能合约