確認項目一覧
1.秘密鍵は誰がどのように管理するか
2.オリジナルトークンの仕様(あれば)
3.手数料を誰が払うか
4.ネットワーク
5.利用するアーキテクチャ / フレームワークの選定
6.週・月あたりの必要ETHの見積もり
7.ETHを誰がどのように集めるか
1. 秘密鍵は誰がどのように管理するか
「誰が」の選択肢例:
管理者のみ
ユーザー自身
秘密鍵をなくした場合の対応は要検討する必要あり(全額補填など)
管理者+ユーザー
この場合はコントラクトウォレットとして実装が必要。これはEthereumのアドレスしようとしてマルチシグアカウントをサポートしていないため
「どのように」の選択肢:
ハードウォレット
専用デバイス
この場合は、そのデバイス費用も検討事項になる
紙などに記載し、金庫で管理
ソフトウォレット
サーバーで一括管理
ユーザー端末で管理
補足説明:
秘密鍵管理には十二分に考え、上記のような選択肢を、適切に組み合わせて決める必要がある。
例)秘密鍵は、管理者がサーバーで一括管理する
2. オリジナルトークンの仕様(あれば)
オリジナルトークンが必要ない場合もあると思うが、ここでは必要な場合、どのようなことを考えなければいけないかを列挙する。
考案項目例:
発行者
管理者のみ
ユーザーが自由にできる
発行量
無限
一定量
トークン単位
小数点単位
ERC20などでは0.0001など、小数点第何位まで有効化などを決められる
トークン名
ETH, BTC などの略称
発行タイミング
最初に全て発行
一定時間毎に発行
管理者・ユーザーが必要になったときに発行
バーンの有無
3. 手数料を誰が払うか
トークンを送信する際には手数料が必要になる。この時の手数料を誰が支払うのかは事前に決めておく必要がある。
考えられる方法は以下の通り
各ユーザーが支払う
運営者が肩代わりする
事前に各ユーザーに手数料分のETHを支払っておき、それを使ってもらう
第三者が支払う
Gas Station Network
Relayerという存在が代わりに支払ってくれるネットワーク
メインのみ、ベータ版(2020/5/14時点)
トークン移転申請が行われた場合、移転に必要なETHを運営者からユーザーアカウントに送信
ユーザーは受け取ったETHを使用してトークンを移転
秘密鍵を運営者が管理している場合は、余ったETHを運営者に返却することも可能 なお、1,2 はそれぞれ送信分のETH+手数料が必要になる。
4. ネットワーク
Ethereumにはいくつかのネットワークが存在する。必ずどれかを選択することになるが、それぞれの利点・欠点が存在する。
メインネット
<概要>
名前通りメインのネットワーク
使用する場合はお金がかかる。つまり使用するETHには価値がある
ブロック生成時間は15秒
コンセンサスアルゴリズムはPoW
<利点>
将来的なMainnetへの移行作業を考えなくて良い
<欠点>
ETH取得にお金がかかるため、運用コストがかかる
法律関係に引っかかる可能性がある
ネットワークが安定しない
テストネット
Ropsten
<概要>
テストネット。いくつかあるテストネットの中では一番主流
ネット上の知見は多め
ここで取り扱われるETHは無価値。つまり無料で利用できる
コンセンサスアルゴリズムはPoW
<利点>
無料で利用できる
現状コンセンサスアルゴリズムがメインネットと同じ(PoW)のため、Mainnetと同じような動きを確認することができる
<欠点>
ネットワークが不安定。これは、よくDoSS攻撃などにあっていることも、要員の一つ
一番ひどい時は1日中ブロックが掘られなかった気がする
Kovan
<概要>
テストネット
ここで取り扱われるETHは無価値。つまり無料で利用できる
コンセンサスアルゴリズムはPoA
Parityのみサポート
Parityはよく問題をおこしているイメージ
<利点>
無料で利用できる
手数料が安い
ブロック生成時間が4秒のため、トランザクションがブロックに取り込まれるのが早い
ネットワークが安定している(らしい)
<欠点>
Mainnetとはコンセンサスアルゴリズムが違うため、Mainnetへ移行する際は注意が必要
Parityしか対応していないため、開発をGethではなくParityで行う必要がある
Rinkeby
<概要>
無料で利用できる
テストネット
ここで取り扱われるETHは無価値。つまり無料で利用できる
コンセンサスアルゴリズムはPoA
<利点>
Faucetを最大で18.5ETH(3日間スパン)取得可能
Geth, Parityどちらでも使用可能
<欠点>
知見が少ない
プライベート
<概要>
テストネット
ここで取り扱われるETHは無価値。つまり無料で利用できる
ローカル環境で立てることが可能
<利点>
無料で利用できる
自分でマイニングするため、トランザクションがブロックへ取り込まれるまでのタイムラグを気にする必要がない
自分でマイニングするため、テストネットコインをほぼ無尽蔵に生成できる
ネットワーク遅延を考える必要がない
<欠点>
Mainnetへ移行する際は、負担が大きくなる
ただのDBのようになるため、ブロックチェーンを使っている感じがしない
参考URL
5. 利用するアーキテクチャ / フレームワークの選定
ちょっと古いけど、スーパーまとめられている↓
6. 週・月あたりの必要ETHの見積もり
コントラクト生成、トークン発行、送信、バーン、手数料などなど、ETHを使う場面事に必要なETHを見積もっておく。特にメインネットでの稼働を想定している場合、コストに直結する。またテストネットでも、大量にETHが必要になる可能性もあるため、運用コストとして見積もっておいた方がいい。この見積もりは実際にコントラクを作成し、試してみないと難しい。
よって、ある程度の仕様が決まった段階でモックを作成して見積もるのが良いと思う。ネットワーク毎に手数料やガス代が違い、かつ変動もするが、一度作ってしまえばある程度の見積もりは出せるはずである。
7. ETHを誰がどのように集めるか
「5. 週・月あたりの必要ETHの見積もり」で見積もりが出来たら、そのETHを誰がどうやって集めるのかを決めておく。
手段
取引所(メインネットのみ)
faucetから収集(テストネットのみ)
マイニング
誰かからもらう(ファウセット以外)
faucetサイト(Ropsten)
以下がfaucetのサイト。矢印先の数字は1日あたりの取得可能ETH量
基本的に1日で一人、最低3ETHは回収出来る。
mining(テストネット)
2018年時点でのブロックサイズが約20GB
一年前ぐらいで、core i5で一日あたり3ブロック(約6ETH)掘れるらしい。ただしEthereumの場合、CPUよりGPUの方が重要なはずなので、そちらを高性能なものにした方がよかったはず。
まとめ
特に必要だと思うところを簡単にまとめた。ただ、実際には1, 2 が決まれば、後は自ずと決まっていく気がする。
懸念事項
ガス代を誰が払うか
トークン購入時→ユーザー
レポート購入時→ユーザー(運営でも可能)
リワード送金時→運営
ETHとトークンの交換比率
トークンとレポートの交換比率
送信系関数の違い
mint&burn
Mintは、TokenやCoinを鋳造する、つまり増やす行為。
Burnは、TokenやCoinを燃やす、つまり減らす行為。
transfer
Tokenを送信する
withdraw
アカウントからETHを引き出す行為
send
別のアカウントへETHを送金する行為
ICOや何かで独自のTokenを作った場合に、それを増やしたり減らしたりするときにつかわれる。zeppelin-solidityのクラウドセールではEtherを送ってきた場合に、都度MintしてEtherの送金主に送られるなどの使い方がされている。
またICOが終了した場合に不要なTokenを減らしてTokenの価値を高めたりするのにBurnは使われる