使用OpenZeppelin搭配Truffle來打造智能合約

Posted by Kubeguts on 2017-09-13

本篇是參考truffle官網所做的筆記:ROBUST SMART CONTRACTS WITH OPENZEPPELIN

OpenZeppelin介紹

可以把OpenZeppelin當成強化Solidity資訊安全的Framework,為智能合約附上Ethereum所認可的ERC-20標準,畢竟合約要處理的可是真正的錢!

ERC-20標準介紹:What is ERC-20 and What Does it Mean for Ethereum?

簡單來說ERC-20標準
允許錢包、交易所和其他智能合約以一種常見的方式對接各種代幣。

使用OpenZeppelin預備知識

建議先瞭解ethereum以及Smart Contract語言Solidity
以及開發Smart Contract的框架 Truffle

可以參考官網或是我之前所做的筆記

環境設定

創立一個資料夾 open_z
使用truffle unbox把練習專案給下載到本機上

1
2
cd open_z
truffle ubbox tutorialtoken

安裝 zeppelin-solidity

1
npm install zeppelin-solidity

為tutorialtoken專案撰寫 TutorialToken合約

在 /contracts 目錄底下創建 TutorialToken.sol

TutorialToken.sol

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
pragma solidity ^0.4.4;
// 引入zepplin-solidity的StandardToken.sol 合約
import 'zeppelin-solidity/contracts/token/StandardToken.sol';

// 使用is 來繼承StandardToken合約
contract TutorialToken is StandardToken {

string public name = 'TutorialToken';
// token name
string public symbol = 'TT';
uint public decimals = 2;
// 合約被創建時所產生的金額總數
uint public INITIAL_SUPPLY = 12000;

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

透過以上簡短的程式碼就已經創造出符合Ethereum的 ERC-20標準的Token囉!

編譯(Compile)以及部署(Deploy)

/migrations內,創建2_deploy_contracts.js檔案

2_deploy_contracts.js

1
2
3
4
5
var TutorialToken = artifacts.require("./TutorialToken.sol");

module.exports = function(deployer) {
deployer.deploy(TutorialToken);
};

在terminal,先用testrpc啟好自己的測試鍊

1
testrpc

then 執行

1
2
truffle comile
truffle migrate

和TutorialToken Dapp互動

我們使用metamask和我們的Dapp互動

並且該專案已經內建 lite-server可運行Dapp

執行

1
npm run dev

看到以下畫面則表示成功運行!
(別忘了要先登入metamask,以便前端能夠擷取到testrpc所開啟的錢包資訊)

螢幕快照 2017-09-13 上午10.20.59

以及可以看到在metamask上錢包的資訊

螢幕快照 2017-09-13 上午10.27.00

總結: Truffle+OpenZeppelin = A Superb Development Experience

透過:

  • Truffle:開發智能合約的框架
  • OpenZeppelin:可為智能合約提供ERC-20標準的工具

就可以打造出可上市的智能合約的開發環境!


對OpenZeppelin內的合約架構有興趣的朋友可以觀看我這篇筆記:

OpenZeppelin合約架構透析