はじめに
TruffleとOpenZepelinを用いたトークンの発行方法をご紹介します。
なお、本記事はMacで開発する場合の手続きとなります。
Truffleをインストール
ターミナルで
npm install -g truffle
Truffleをインポート
ターミナルで
mkdir ~/MakeToken
cd ~/MakeToken
以上を行うと新しくプロジェクトフォルダを作成して、そのフォルダにディレクトリを移動する。
ターミナルで
truffle init
以上を行うと作成したフォルダ内にTruffleをインポートできる。
ターミナル上に以下のように表示されます。
Downloading...
Unpacking...
Setting up...
Unbox successful. Sweet!
Commands:
Compile: truffle compile
Migrate: truffle migrate
Test contracts: truffle test
OpenZeppelinライブラリの導入
Truffleプロジェクトフォルダの中のターミナルで
npm init -f
npm install zeppelin-solidity --save
solidityコードの作成
以下のコードを作成し、contractsフォルダの中にMyToken.solで保存
pragma solidity ^0.4.18; //コンパイル時に使用するsolidityのバージョンを指定
import "zeppelin-solidity/contracts/token/ERC20/StandardToken.sol";
//zeppelinライブラリ内のStandardToken.solを呼び出し。
//ただし、バージョンアップするごとにディレクトリが変わる可能性あり。
contract Token is StandardToken { //TokenがStandardTokenを継承
string public name = "Token"; //名前を指定
string public symbol = "TK"; //シンボルを指定
uint public decimals = 18; //小数点の桁数を指定
function Token(uint initialSupply) public {
//contract名と同じ名称のfunctionがコントラクタとなる
totalSupply = initialSupply; //トークンの総発行量
balances[msg.sender] = initialSupply;
//発行したトークンをmsg.senderのアドレスに入れる
}
}
Solidityコードのコンパイル
そのままターミナルで
truffle compile
ビルド結果がフォルダ内に作成され、build/contractsにJSON形式で保存される
マイグレーションファイルの作成
migrationフォルダの中に、
2_deploy_my_token.jsファイルを作成し、以下のコードを記述
const Token = artifacts.require('./Token.sol')
module.exports = (deployer) => {
let initialSupply = 50000e18 //トークン発行量が50000TKになるように値を渡す
deployer.deploy(Token, initialSupply)
}
コントラクトのデプロイ
ターミナルで
truffle develop
Ethereumブロックチェーンのエミュレータが起動し、
利用可能なEthereumのアドレスのリストが表示される
同時に、インタラクティブにやり取りできるコンソールも立ち上がる。
migrateとコマンドを打つと、作成したマイグレーションファイルにしたがってコントラクトのデプロイが実行される。
デプロイされたコントラクトの確認
エミュレータで
Token = Token.at(Token.address)
Tokenコントラクトオブジェクトが代入される
Token.name() //名前を確認
Token.totalSupply() //総発行量を確認
web3.eth.accounts //トークンの口座残高を確認
トークンの移動
エミュレータで
Token.transfer(web3.eth.accounts[1], 1000e18)
//1番目のアドレスに1000TKだけ移す
おわりに
試された方、同じようにできましたでしょうか。
とはいえ出力結果などを画像でご紹介した方がわかりやすいはずなんですが、
画像の添付方法がわからず…
また投稿技術も上げて臨みたいと思います。
では。
Congratulations @seijmura! You received a personal award!
Click here to view your Board
Do not miss the last post from @steemitboard:
Vote for @Steemitboard as a witness and get one more award and increased upvotes!
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit
Congratulations @seijmura! You received a personal award!
You can view your badges on your Steem Board and compare to others on the Steem Ranking
Vote for @Steemitboard as a witness to get one more award and increased upvotes!
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit