ERC1400連載 第3回 – Polymath社のST-20実装を動かす(前編)

ERC1400連載 第3回 – Polymath社のST-20実装を動かす(前編)
第2回の記事ではERC1400が提案された経緯を解説しました。
本記事は、『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の理解を深めていきます。

後編はこちら

ブロックチェーンの専門企業で働いてみませんか?

当サイトを運営するコンセンサス・ベイス株式会社では、エンジニア、プロジェクトマネージャー、ライターなど、様々なポジションで一緒に働いてくださる仲間を募集しています。

ブロックチェーン業界にチャレンジしてみたいあなたのご応募をお待ちしております!

STOカテゴリの最新記事