OpenZeppelin集成:编写健壮安全的智能合约

OpenZeppelin集成:编写健壮安全的智能合约

因为智能合约往往涉及金钱,保证Soldity代码没有错误,以及足够的安全是非常根本的。Zeppelin Solutions,一个智能合约审查服务商,已经意识到相关的需求。建立在他们的合约审查经验之上,他们把一些最佳实践整理到了OpenZeppelin

开箱即用的前端

开发的主要精力应该放在智能合约上。为达到这个目的,Truffletruffle box 的方式提供了拆箱即用的前端。

  • 下载tutorialtoken

    truffle unbox tutorialtoken
  • 工程结构

  • 集成 OpenZeppelin

    npm install openzeppelin-solidity

    安装完成之后可以在npm包中看到最新版本的OpenZeppelin:

创建TutorialToken智能合约

使用已经搭建好的前端,我们可以关注于智能合约本身。

  • contracts 目录下,创建名为 TutorialToken.sol 的智能合约,内容如下:

    pragma solidity ^0.4.17;
    
    import 'openzeppelin-solidity/contracts/token/ERC20/StandardToken.sol';
    
    contract TutorialToken is StandardToken {
    
    }

    需要注意:

    • 除了标准的智能合约以外,我们还导入了StandardToken.sol合约并声明我们的TutorialToken

    • is StandardToken 代表继承了StandardToken合约中所有变量和函数。继承的合约可以被覆盖,只要在子类重定义对应的变量与函数就行了。

  • 设置代币的参数,需要定义自己的 namesymboldecimalsINITIAL_SUPPLY

    string public name = 'TutorialToken';
    string public symbol = 'TT';
    uint8 public decimals = 2;
    uint public INITIAL_SUPPLY = 12000;
    • name和symbol给我们的token一个特有的身份

    • decimals定义了token可以细分的程度

    • INITIAL_SUPPLY定义了在合约部署时,代币将创建的数量

  • 在构造函数中我们简单设置 totalSupply 来等于 INITIAL_SUPPLY ,同时把所有的币赋值给部署者的帐户

    function TutorialToken() {
        totalSupply = INITIAL_SUPPLY;
        balances[msg.sender] = INITIAL_SUPPLY;
    }

编译与部署智能合约

  • /migrations 目录下,用下述内容创建文件 2_deploy_contracts.js

    var TutorialToken = artifacts.require("TutorialToken");
    
    module.exports = function(deployer) {
    deployer.deploy(TutorialToken);
    };

    TutorialToken合约内的import语句会由编译器进行自动处理,它会自动导入StandardToken内的相关引用包。

  • 安装本地私链 Ganache

    Truffle框架和Ganache本地私链

  • 编译合约

    truffle compile
  • 部署合约到私链上

    truffle migrate

    在Ganache上查看交易详情:

与新token交互

  • 前置

    以太坊轻钱包MetaMask安装

  • 本地的简单页面

    npm run dev

  • 切换 MetaMask 到本地网络

  • 用私钥导入本地账户

    导入本地环境的第一个账户(Ganache默认使用的第一个账户)

  • 刷新页面,查看代币

  • 给第二个账户转2000代币

  • 切换到第二个账户,刷新页面,查看token

阅读更多
个人分类: 区块链
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭
关闭