本記事は、『Polymath社のST-20実装を動かす』を前編・後編の2回に分けて掲載します。
ST-20はセキュリティトークンの規格としてPolymath社が独自に提案した規格です。ST-20のバージョン2はPolymath社によりERC-20を継承する形で実装されています。そこで今回は、そのST-20のv2を動かしていこうと思います。使用しているソースコードは2019年9月11日時点のものです。
※現時点ですでにST-20のv3が公開されています。興味がある方はGitHubでソースコードを参照いただければと思います。
前編・後編の2回に分けて以下を実施していきます。
(1)ST-20 を動かす為の環境構築を行います。
(2)コントラクトをブロックチェーンにデプロイします。
(3)デプロイしたコントラクトを操作して、セキュリティトークンの発行・移転・償還を実行し、またセキュリティトークンならではの機能を動かして体験できます。
サマリー
本記事では、『Polymath社のST-20実装を動かす』の前編として、以下を実行していきます。
(1)ST-20を動かす為の環境構築を行います。
(2)コントラクトをブロックチェーンにデプロイします。
参考
本記事は以下、PolymathのGitHubを参考にしています。
https://github.com/PolymathNetwork/polymath-core
ST-20とは
セキュリティトークン(ST)の発行を通じて資金調達したい企業がセキュリティ・トークン・オファリング(STO)を行う際には、国ごとの法律や規制に準拠した形でトークンの発行・売買を行う必要があります。Polymath社はそれらの法律面をきちんとクリアした形でSTOを行うためのプラットフォームを提供を目指しています。ST-20はこのPolymath社がERC1400の規格に準拠し、さらに必要な機能の実装が進められたSTOを行うための実装です。
この実装では、複数のスマートコントラクトをコンパイルし、Ethereum上にデプロイします。そして、デプロイした複数のスマートコントラクトにより機能する複数のモジュールをEthereum上で操作・実行することでSTの作成、STOの実施、STの発行など、STに関連する機能の操作を行うことができます。またクライアントのケースに合わせて、機能(モジュール)をカスタマイズできるようになっています。Polymath社はこのような実装のアーキテクチャをモジュラー型と呼んでいます。
環境構築
前提条件
macOS : Mojave 10.14.6
homebrew : v1.6.7以上がインストール済み
git : インストール済み
Node.jsとnpm
Ethereum関連のツールのダウンロードに使います。 Nodeのバージョンはv8 or v9をご利用ください。 npmはv6以上をご利用ください。また、今回の環境ではNodeはv8.15.0、 npmは6.4.1を利用しました。
yarn
npm同様にパッケージ管理ツールです。バージョンはv1.3以上をご利用ください。また、今回の環境では1.12.3を利用しました。
Truffle
TruffleはSolidityの総合開発管理フレームワークです。 バージョンはTruffleのv4.1.11をご利用ください。
<インストール手順>
$ npm install -g truffle@4.11.1
Truffleのインストールに成功すると、以下のコマンドにてバージョンを確認できます。
$ truffle version
Truffle v4.1.11 (core: 4.1.11)
Solidity v0.4.24 (solc-js)
Solidity(solc-js)
solc-jsはsolファイルをコンパイルするために使用します。 バージョンはv0.4.24をご利用ください。
<インストール手順>
$ npm install -g solc@0.4.24
solc-jsのインストールに成功すると、以下のコマンドにてバージョンを確認できます。
$ solcjs --version
0.4.24+commit.e67f0147.Emscripten.clang
Ganache CLI
Truffleに関係するツールで、Ethereum開発のためのローカル環境用のブロックチェーンを提供してくれるツールです。GUI版とCLI版があり、今回は後者を利用します。バージョンはv6.1.3をご利用ください。
<インストール手順>
$ npm install -g ganache-cli@6.1.3
ganache-cliのインストールに成功すると、以下のコマンドにてバージョンを確認できます。
$ ganache-cli
$ node_modules/.bin/ganache-cli -i 15 --gasLimit 8000000
Ganache CLI v6.1.3 (ganache-core: 2.3.3)
Available Accounts
==================
------<以降省略>------
web3.js
Ethereumブロックチェーン上のノードとローカルとの通信を可能にしているJavaScriptのライブラリです。バージョンはv1.0.0-beta.37を利用します。
<インストール手順>
$ npm install -g web3@1.0.0-beta.37
動作
githubからパッケージをダウンロード、コンパイルます。そして、Ethereumのローカル開発環境であるGanache-cliを利用してデプロイまでを実行します。
では、ターミナルを開き、適当な作業ディレクトリまで移動してください。
パッケージインストール
githubのpolymath-coreのページからダウンロードします。
$ git clone https://github.com/PolymathNetwork/polymath-core.git
$ cd polymath-core
今回は「dev-2.1.0」バージョンを利用します。
$ git checkout dev-2.1.0
$ git branch
package.jsonからdependenciesをインストールします。これで関連するツールのインストールが行えます。
$ yarn install
Ganache-CLI起動
まず、Ganache-CLIを起動します。
$ yarn ganache-cli
成功すると以下のようになります。
yarn run v1.12.3
$ node_modules/.bin/ganache-cli -i 15 --gasLimit 8000000
Ganache CLI v6.1.3 (ganache-core: 2.3.3)
Available Accounts
==================
(0) 0x66865a6ac6d77f743f778071b8176d7c798ae7e4 (~100 ETH)
(1) 0xb8a149eaa7775b025b434896c4ba58f55cd5a450 (~100 ETH)
(2) 0xb373840d248700aacf9f46ad9706e7b8e91361a8 (~100 ETH)
(3) 0x30cf3d02bf3ba81c04d1db3b94e14259de2e6047 (~100 ETH)
(4) 0x68f4b4fa37542d514fd3b5089c7caada236c10ab (~100 ETH)
(5) 0x1717888743c1bdc721be5b574378444c84790a96 (~100 ETH)
(6) 0x9207ccb5fe8067d878e64b0a954338160650a646 (~100 ETH)
(7) 0xb2d68ffcd08299e720b94534dc10b6be71df2321 (~100 ETH)
(8) 0x0bf16c73e0b6117938e43cdfda765a2816c94c21 (~100 ETH)
(9) 0xc1b0b5755adb42487fa33092b7e7af649d117960 (~100 ETH)
Private Keys
==================
(0) 0xbeda513167e78fe7415a0a51c254d11004e3ac790c11f5f56b1a897bc0121471
(1) 0x7de2d8ec705af8dfcd5a1a42fef162a5a7b08cfd9f86277afa97cdc5e2f85f9a
(2) 0x4a2e19a2ef21682d869cb2b55f4bded35a14bbd0ac5a15af568828ce6754d191
(3) 0x9fc5567bab55b11a61b920729ef5d830603fbab9948e7e3f0c38cf465c65e41f
(4) 0xffcd67ed3cc5d75c4eeb79aad9c21d8924bb3594c7f81cc0544d1aeb325bd5e7
(5) 0xaf3cfa98bab5fe880329d5f55ed8416682ac4f75244950d6abc4045802d1a3cf
(6) 0x1194c93ed13619b88f31c1433551b9f8ff990554686c9383ac604ac5d154743f
(7) 0xc0676d80e8598ea2420162ed08d4d7457e0cae71dc6a6c290c2908ea514ff21e
(8) 0xe6b19b9cd248edb180ae6b5f20cca2223cb2ab86ef4c300aa8109f30cbb7e7c6
(9) 0xd33b8e213904e92b1c203fc891800f0778494e21d619acc0090bcf01d1ce50ec
HD Wallet
==================
Mnemonic: shine curtain drill health half find quarter saddle luxury blast fatal receive
Base HD Path: m/44'/60'/0'/0/{account_index}
Gas Price
==================
20000000000
Gas Limit
==================
8000000
Listening on 127.0.0.1:8545
「Private Keys」以下に表示されているPrivateKeyのいずれかをコピーします。「./polymath-core/privKeyLocal」のファイルを新規作成し、コピーしたPrivateKeyを保存します。保存する際は「yarn ganache-cli」を実行しているターミナルを中断せず、新しくターミナルウィンドウを開き作業を行います。また、16進数表示のプレフィックスである「0x」以下のみを保存します。以下が例になります。
例)
0xaaf5054ead2f9ed203d2d01cf62b69620d7d772178651d9e1e8652d188c8078d
→ aaf5054ead2f9ed203d2d01cf62b69620d7d772178651d9e1e8652d188c8078d
コンパイル
起動しているGanache-CLIとは別タブでST-20のスマートコントラクトをコンパイルしていきます。
$ truffle compile
デプロイ
コンパイルに成功したら、次はプライベートネットにコンパイル済みのコントラクトをデプロイしていきます。
$ truffle migrate
$ cd ./CLI
$ yarn install
$ cd ..
$ node CLI/polymath-cli -h
以下のようになれば、デプロイが成功です。
(git)-[dev-2.1.0]
Usage: polymath-cli [options] [command]
CLI for Polymath-core
Options:
-V, --version output the version number
-r, --remote-node Connect to a remote node
-h, --help output usage information
Commands:
st20generator|st [options] Wizard-like script that will guide technical users in the creation and deployment of an ST-20 token
sto_manager|sto [options] Wizard-like script that will guide technical users in the creation of an STO
faucet|f [beneficiary] [amount] Poly faucet for local private netwtorks
investor_portal|i [investor] [privateKey] [symbol] [currency] [amount] Participate in any STO you have been whitelisted for
token_manager|stm [options] Manage your Security Tokens, mint tokens, add modules and change config
transfer|t Transfer ST tokens to another account
transfer_ownership|to Transfer Ownership of an own contract to another account
dividends_manager|dm [dividendsType] Runs dividends_manager
transfer_manager|tm [options] Runs transfer_manager
contract_manager|cm Runs contract_manager
strMigrator|str [options] [toStrAddress] [fromTrAddress] [fromStrAddress] Runs STR Migrator
permission_manager|pm Runs permission_manager
time_travel|tt [options] Increases time on EVM according to given value.
これでST-20(v2)を無事ブロックチェーンにデプロイできました。
まとめ
本記事は、『Polymath社のST-20実装を動かす』前編として、ST-20を動かしていくための環境構築とコントラクトのデプロイまでを行いました。次回は、デプロイしたコントラクトの関数を利用して、セキュリティトークンの発行・移転・償還を実行します。またセキュリティトークンならではの機能を動かして、ST-20の理解を深めていきます。
後編はこちら。