ST-20はセキュリティトークンの規格としてPolymath社が独自に提案した規格です。ST-20はすでにPolymath社によりERC-20を継承する形で実装されています。そこで今回は、そのST-20のversion2を動かしていこうと思います。使用しているソースコードは2019年9月11日時点のものです。
※現時点ですでにST-20のv3が公開されています。興味がある方はGitHubでソースコードを参照いただければと思います。
本記事は、『Polymath社のST-20実装を動かす』を前編・後編の2回に分けて掲載します。
(1)ST-20を動かす為の環境構築を行います。
(2)コントラクトをブロックチェーンにデプロイします。
(3)デプロイしたコントラクトを操作して、セキュリティトークンの発行・移転・償還を実行し、またセキュリティトークンならではの機能を動かして体験できます。
サマリー
本記事では、『Polymath社のST-20実装を動かす』の後編として、以下を実行していきます。
(3)デプロイしたコントラクトを操作して、セキュリティトークンの発行・移転・償還を実行し、またセキュリティトークンならではの機能を動かして体験できます。
参考
本記事は以下、PolymathのGitHubを参考にしています。
https://github.com/PolymathNetwork/polymath-core
基本動作の確認
ST作成
以下のコマンドからST作成のためのモジュールを起動します。モジュールについては「Polymath社のST-20実装を動かす」前編記事の「ST-20とは」にて説明しています。
$ node CLI/polymath-cli st20generator
********************************************
Welcome to the Command-Line ST-20 Generator.
********************************************
The following script will create a new ST-20 according to the parameters you enter.
Issuer Account: 0x66865A6aC6d77F743F778071B8176d7C798ae7e4
Token Symbol Registration
Registering the new token symbol requires 250 POLY & deducted from ‘0xFf082298dC0535312Fee1916e4802cD2baBE4630’, Current balance is 1000000 POLY
[1] Register a new ticker
[0] CANCEL
Select a ticker [1/0]:
STを発行するため「1」を選択します。
Select a ticker [1/0]: 1
ティッカーシンボルを入力します。ティッカーシンボルとは株式市場で上場企業や商品を識別するために利用される符丁のことです。例としてAppleはAAPL、MicrosoftはMSFT、トヨタはTYOといったものが設定されています。
Enter a symbol for your new ticker: CB
作成したSTの所有権を譲渡するかと問われます。今回は所有権を維持したいため「n」を選択します。
---- Transaction executed: approve - Gas limit provided: 54732 ----
Your transaction is being processed. Please wait...
TxHash: 0x297cfe2930c43f471d75a4ee4dfcc4cdc6bbcf307620dbcc468bbeeebbca2084
Congratulations! The transaction was successfully completed.
Gas used: 45610 - Gas spent: 0.0022805 Ether
Review it on Etherscan.
TxHash: 0x297cfe2930c43f471d75a4ee4dfcc4cdc6bbcf307620dbcc468bbeeebbca2084
---- Transaction executed: registerTicker - Gas limit provided: 378423 ----
Your transaction is being processed. Please wait...
TxHash: 0xc32c020760f7785dc9fc368f619af464b7abd44fb224be799a93bfe2c81143e7
Congratulations! The transaction was successfully completed.
Gas used: 237282 - Gas spent: 0.0118641 Ether
Review it on Etherscan.
TxHash: 0xc32c020760f7785dc9fc368f619af464b7abd44fb224be799a93bfe2c81143e7
Do you want to transfer the ownership of CB ticker? [y/n]:n
STの名前を入力します。
Enter the name for your new token:CONSENSUSBASE
Tokenの詳細を配置するフォルダのURLを入力します。ない場合はEnterを押します。
Enter off-chain details of the token (i.e. Dropbox folder url):
作成するSTが分割できないようにする場合はN、分割ができる設定の場合はEnterを押します。今回はEnterを押します。
Press "N" for Non-divisible type token or hit Enter for divisible type token (Default):
以下の文章が表示された場合、ST作成は完了です。
*****************************************
Welcome to the Command-Line Token Manager
*****************************************
The following script will allow you to manage your ST-20 tokens
Issuer Account: 0xFf082298dC0535312Fee1916e4802cD2baBE4630
******************** User Information *********************
- Address: 0xFf082298dC0535312Fee1916e4802cD2baBE4630
- POLY balance: 999500
- ETH balance: 87.80889025
*************** Security Token Information ****************
- Address: 0x1FC42bb6a594b0C0D4AB68883922c1F7d167C882
- Token symbol: CB
- Token details:
- Token version: 2.0.0
- Total supply: 0 CB
- Investors count: 0
- Current checkpoint: 0
- Transfer frozen: NO
- Minting frozen: NO
- User balance: 0 CB
******************* Module Information ********************
- Permission Manager: None
- Transfer Manager: 1
- STO: None
- Checkpoint: None
- Burn: None
STO実施
以下のコマンドからSTO実施のためのモジュールを起動します。
$ node CLI/polymath-cli sto_manager
****************************************
Welcome to the Command-Line STO Manager.
****************************************
The following script will allow you to manage STOs modules.
Issuer Account: 0x66865A6aC6d77F743F778071B8176d7C798ae7e4
[1] CB - Deployed at 0x57b26ad65fB12327e5DB4f9e0Bb68Fa145065897
[2] Enter token symbol manually
[0] EXIT
管理するTokenを選択します。今回は「STの作成」の章で作成した「1. CB」を選択します。
[1] CB - Deployed at 0x57b26ad65fB12327e5DB4f9e0Bb68Fa145065897
[2] Enter token symbol manually
[0] EXIT
「1.Add new STO module」を選択します。
STO Manager - Main Menu
There are no STO modules attached
[1] Add new STO module
[0] EXIT
作成するSTOの種類を選択します。STOは「CappedSTO」、「USDTieredSTO」のいずれかのタイプで発行することが可能です。「CappedSTO」は上限付きSTOのことで、Tokenごとに投資家が購入できる価格と数の制限を設定することができる一般的なSTOです。「USDTieredSTO」とは価格をドル建てで行うSTOのことで、EtherやPOLY、USDなどの投資と引き換えにSTを発行できます。
今回は「1. CappedSTO」を選択します。
Selected: Add new STO module
Launch STO - Configuration
[1] CappedSTO - 2.1.0 (0x93a2279B23a3cdDB886c7c80e4D14528E2E23Bbe)
[2] USDTieredSTO - 2.1.0 (0x7B8B2AffA9B85F308EEA9327C349411Be6af7964)
[0] RETURN
作成したTokenの販売する予定数を入力します。適当な数を入力します。
How many tokens do you plan to sell on the STO? (500.000):
作成したTokenをPOLYにより資金調達する場合はP, Etherにより資金調達する場合はEを入力します。今回はPを選択します。
Enter P for POLY raise or leave empty for Ether raise (E):
作成したTokenとPOLYの交換レートを設定します。デフォルトの場合はEnterを押します。
Enter the rate (1 POLY = X CB) for the STO (1000):
作成したTokenをSTOから受け取るアカウントを設定します。デフォルトの場合はEnterを押します。
Enter the address that will receive the funds from the STO (0x66865A6aC6d77F743F778071B8176d7C798ae7e4):
STOを開始する時間を入力します。デフォルトの場合はEnterを押します。
Enter the start time for the STO (Unix Epoch time)
(1 minutes from now = 1568174325 ):
STOを終了する時間を入力します。デフォルトの場合はEnterを押します。
Enter the end time for the STO (Unix Epoch time)
(1 month from now = 1570766265 ):
作成したSTOの確認をするために「1.Show existing STO information」を選択します。
※「polymath-core dev-2.1.0」では「Modify existing STO」はまだ利用することができません。
[1] Show existing STO information
[2] Modify existing STO
[3] Add new STO module
[0] EXIT
情報を表示するSTOとして「1.CappedSTO」を選択します。
Selected: Show existing STO information
[1] CappedSTO (2.1.0) at 0x93a2279B23a3cdDB886c7c80e4D14528E2E23Bbe
以下の文章が表示された場合、STO実施は完了です。
Selected: Show existing STO information
[1] CappedSTO (2.1.0) at 0x93a2279B23a3cdDB886c7c80e4D14528E2E23Bbe
Select a module [1]: 1
Selected: CappedSTO (2.1.0) at 0x93a2279B23a3cdDB886c7c80e4D14528E2E23Bbe
*************** STO Information ***************
- Address: 0x93a2279B23a3cdDB886c7c80e4D14528E2E23Bbe
- Raise Cap: 10000 CB
- Start Time: Thu Sep 12 2019 13:11:20 GMT+0900 (JST)
- End Time: Sat Oct 12 2019 13:10:20 GMT+0900 (JST)
- Raise Type: POLY
- Rate: 1 POLY = 100 CB
- Wallet: 0xFf082298dC0535312Fee1916e4802cD2baBE4630
- Wallet Balance: 999500 POLY
-----------------------------------------------
- STO starts in: 0 days, 0 Hrs, 0 Minutes, 23 Seconds
- Funds raised: 0 POLY
- Tokens sold: 0 CB
- Tokens remaining: 10000 CB
- Investor count: 0
ST購入
アカウントの本人確認の実施
STを購入するためにはアカウントの本人確認を実施しなくてはなりません。
本人確認が実施されたアカウントはwhitelistに入れることによりSTの購入が可能になります。whitelistにアカウントを追加するためには以下のコマンドを実行します。
$ node CLI/polymath-cli st20generator
********************************************
Welcome to the Command-Line ST-20 Generator.
********************************************
The following script will create a new ST-20 according to the parameters you enter.
Issuer Account: 0xFf082298dC0535312Fee1916e4802cD2baBE4630
Token Symbol Registration
Registering the new token symbol requires 250 POLY & deducted from '0xFf082298dC0535312Fee1916e4802cD2baBE4630', Current balance is 999500 POLY
[1] CB
Token launched at 0x1FC42bb6a594b0C0D4AB68883922c1F7d167C882
[2] Register a new ticker
[0] CANCEL
設定をする対象のSTを選択するか新規でSTの作成を行うか問われます。今回は「ST作成」の手順にて作成したST「CB」を利用するため「1」を入力します。
[1] CB
Token launched at 0x1FC42bb6a594b0C0D4AB68883922c1F7d167C882
[2] Register a new ticker
[0] CANCEL
STに対する設定の選択肢が表示されます。今回は「5」を選択します。
[1] Update token details
[2] Freeze transfers
[3] Create a checkpoint
[4] List investors
[5] Mint tokens
[6] Manage modules
[7] Withdraw tokens from contract
[0] Exit
「Mint tokens」を選択すると以下の選択肢が出力されます。Tokenを取得することができるアカウントをwhitelistに登録するため「1 Modify whitelist」を選択します。
Selected: Manage modules
[1] Modify whitelist
[2] Mint tokens to a single address
[3] Mint tokens to multiple addresses from CSV
[0] Return
登録するアカウントが要求されるので入力します。
Enter the address to whitelist:
対象のアカウントがlockup後に自由に売買し始められる時間をunix timeで入力します。今回、unix timeを計算する際、筆者はこちらのサイトを利用しました。
(URL : https://tool.konisimple.net/date/unixtime)
Enter the time (Unix Epoch time) when the sale lockup period ends and the investor can freely sell his tokens:
Enter the time (Unix Epoch time) when the purchase lockup period ends and the investor can freely purchase tokens from others:
対象アカウントで売買が行える期限日をunix timeで入力します。今回、期限日までの区間を設定する際、筆者は1年程度を目安に設定しました。
Enter the time till investors KYC will be validated (after that investor need to do re-KYC):
対象のアカウントがTokenを購入することができる設定にするかの設定です。ここでは「y」を入力します。
Can the investor buy from security token offerings? [y/n]: y
whitelistに追加したアカウントにTokenを発行します。先ほどと同じ「Mint tokens」の画面にて「2. Mint tokens to a single address」を選択します。
Selected: Manage modules
[1] Modify whitelist
[2] Mint tokens to a single address
[3] Mint tokens to multiple addresses from CSV
[0] Return
Tokenを取得するアカウントとTokenの発行量の入力を求められるため、先ほどwhite listに追加したアカウントとTokenの発行量を入力します。筆者は今回、発行量に100を入力しました。
Enter the address to receive the tokens: <アカウント>
Enter the amount of tokens to mint: 100
その結果、以下のような出力により入力したアカウントがTokenを取得できたことが確認できます。筆者は今回、発行量に100を設定したため、「Total supply」が100となっているところで取得できたことが確認できます。
*************** Security Token Information ****************
- Address: 0x57b26ad65fB12327e5DB4f9e0Bb68Fa145065897
- Token symbol: CB
- Token details: dDF0fF327d5FdD694B03337e0FC60C4Df664
- Token version: 2.0.0
- Total supply: 100 CB
- Investors count: 1
- Current checkpoint: 2
- Transfer frozen: NO
- Minting frozen: NO
- User balance: 0 CB
POLYの取得
STを購入するためには購入するための資金が必要になります。今回はPOLYによりSTを購入するため「1,アカウントの本人確認」にて設定したアカウント(以降、当章ではアカウントと表記)がPOLYを取得する必要があります。そのために以下のコマンドを実行します。
$ node CLI/polymath-cli faucet [アカウント] [POLYの取得量]
例) $ node CLI/polymath-cli faucet 0xbff9b83ceeaee828f57e3df1bf65ab16b35e3ff9 10000
***************************
Welcome to the POLY Faucet.
***************************
Issuer Account: 0xFf082298dC0535312Fee1916e4802cD2baBE4630
Hello User, your current balance is '999501 POLY'
---- Transaction executed: getTokens - Gas limit provided: 44162 ----
Your transaction is being processed. Please wait...
TxHash: 0x08bd394cca7bd80d647101282495694974dbecbd3d83f71100bc8b400cc8ffae
Congratulations! The transaction was successfully completed.
Gas used: 36802 - Gas spent: 0.0018401 Ether
Review it on Etherscan.
TxHash: 0x08bd394cca7bd80d647101282495694974dbecbd3d83f71100bc8b400cc8ffae
Congratulations! balance of 0xbff9b83ceeaee828f57e3df1bf65ab16b35e3ff9 address is 10000 POLY
これによりPOLYの取得が完了いたしました。
STの購入
STOに参加し、取得したPOLYを利用してSTを購入します。
では、STを購入するために以下のコマンドを実行します。
$ node CLI/polymath-cli investor_portal
STを購入するためのアカウントを入力します。
Enter your public address to log in as an investor. Otherwise, press 'Enter' to log in as the token issuer:
アカウントの秘密鍵を入力します。
Enter your private key to unlock your account:
購入する対象のSTのシンボルを入力します。今回はCBと入力します。
Enter the symbol of a registered security token or press 'Enter' to exit:
「STO実施」で設定したSTの発行量以下になるようにSTの購入数を入力します。仮にSTの発行量以上の購入数を入力しても、エラーは発生せず、オーバーした分は自動で返金される仕組みになっています。
Enter the amount of CB you would like to purchase or press 'Enter' to exit.
以下の文章が表示された場合、ST購入は完了です。
Congratulations! The token purchase was successfully completed.
Account 0xBFF9b83CEEAEe828F57E3Df1BF65AB16B35E3Ff9
invested 1 POLY
purchasing 100 CB
for beneficiary account 0xBFF9b83CEEAEe828F57E3Df1BF65AB16B35E3Ff9
****************** Security Token Information *******************
- Address: 0x1FC42bb6a594b0C0D4AB68883922c1F7d167C882
- Token symbol: CB
- Total supply: 100 CB
- User balance: 100 CB
ST転送
転送先のアカウントを登録
STを転送するためには複数のアカウントの本人確認を実施しなくてはなりません。そのため「ST購入」「1,アカウントの本人確認を実施」の章を参照して、複数のアカウントをwhitelistに追加してください。
STの転送
複数のアカウントをwhitelistに追加した後、以下のコマンドにてtransfer managerモジュールを実行します。
$ node CLI/polymath-cli transfer_manager
転送を実行するSTを選択します。今回は「1」を選択します。
*********************************************
Welcome to the Command-Line Transfer Manager.
*********************************************
Issuer Account: 0xFf082298dC0535312Fee1916e4802cD2baBE4630
[1] CB - Deployed at 0x1FC42bb6a594b0C0D4AB68883922c1F7d167C882
[2] Enter token symbol manually
[0] EXIT
転送を管理するための選択肢が5つ表示されます。今回は「2」を選択します。
Transfer Manager - Main Menu
Transfer Manager modules attached:
- GeneralTransferManager at 0x1e5772c9F1cfa6eF2d45283cF139082D25F51BC5
[1] Verify transfer
[2] Transfer
[3] Forced transfers
[4] Config existing modules
[5] Add new Transfer Manager module
[0] EXIT
転送先のアドレスを入力します。
Enter beneficiary of tranfer:
転送するSTの量を入力します。
Enter amount of tokens to transfer:
以下の文章が表示された場合、ST転送は完了です。
0xFf082298dC0535312Fee1916e4802cD2baBE4630 transferred 100 CB to 0xBFF9b83CEEAEe828F57E3Df1BF65AB16B35E3Ff9 successfully!
Total investors at the moment: 2
Balance of 0xFf082298dC0535312Fee1916e4802cD2baBE4630: 300 CB - 42.857142857142854% of total supply
Balance of 0xbff9b83ceeaee828f57e3df1bf65ab16b35e3ff9: 400 CB - 57.14285714285714% of total supply
機能別説明
POLY Faucet
説明
発行者アカウントに資金を提供するための機能です。ST-20の中では資金としてpolymathが発行しているUtility TokenのPOLYを使用します。今回はlocal private networkの中でSTOのやり取りを行うためにlocal private network内で使用できるPOLYが発行されます。これによりSTOのセットアップ、編集、起動などのプロセスを実行できます。
コマンド
$ node CLI/polymath-cli faucet
ST-20の作成
説明
所持しているPOLY, もしくはEtherを使用して、STを発行することができます。
コマンド
$ node CLI/polymath-cli st20generator
Tokenの管理
説明
Tokenに関する情報の変更やwhitelistの追加などを行えます。
コマンド
$ node CLI/polymath-cli token_manager
STOの管理
説明
STOモジュール追加、設定の変更などを行えます。
コマンド
$ node CLI/polymath-cli token_manager
Investor Portalの使い方
説明
アカウントが所持しているTokenの情報の確認と, Tokenの購入が行えます。
コマンド
$ node CLI/polymath-cli investor_portal
所有権の転送
説明
所持しているContractアカウントを他のアカウントに付け替えることができます。
コマンド
$ node CLI/polymath-cli transfer_owership
配当の管理
説明
ST所持者に対して配当を発行する場合にSTOをカスタマイズすることができる。
コマンド
$ node CLI/polymath-cli dividends_manager
転送の管理
説明
アカウント同士のSTの転送が行えます。
コマンド
$ node CLI/polymath-cli transfer_manager
まとめ
本記事は、『Polymath社のST-20(v2)を動かす』第2回目最終回でした。デプロイしたコントラクトを利用して、STOの実施からSTの作成、購入、転送を実行しました。また、今回実装されていた機能それぞれに関しても簡単に触れることでST-20(v2)の理解を深めていきました。
STOを実施するための規格はまだ様々あり、実装の仕方も様々で理解が困難な面も多いです。その中でも、実行して試すことはより早い理解への第一歩となるはずです。ぜひ他の実装も試してみることを推奨いたします。
次回第5回ではConsenSys社が実装したERC1400の動作を解説していきます。