「会員管理」機能付きの仮想通貨コントラクトをデプロイしてみる(後編)
「「会員管理」機能付きの仮想通貨コントラクトをデプロイしてみる(前編)」の続きです。
話題としては、「はじめてのブロックチェーン・アプリケーション Ethereumによるスマートコントラクト開発入門 (DEV Engineer's Books)」にある「会員管理」機能付きの仮想通貨コントラクトでした。
やりたいのは、暗号資産(仮想通貨)が1つあって、これに「紐づくユーザーが各々会員情報を持つ」状況をコントラクトで表現することです。
前回はコントラクトをデプロイし、「暗号資産(仮想通貨)のコントラクト」と「会員管理のコントラクト」を紐づけるところまで動かしてみました。
今回は、送金の動作確認と、送金によって「会員管理」部分がちゃんと機能するかという動きをみていきます。
アドレスのまとめ
まずは前回に引き続き、使うアドレスをまとめておきます。
以下4つのアドレスが登場します。
・ユーザーA:0xca35b7d915458ef540ade6068dfe2f44e8fa733c
・ユーザーB:0x14723a09acff6d2a60dcdf7aa4aff308fddc160c
・Membersのデプロイアドレス:0x692a70d2e424a56d2c6c27aa97d1a86395877b3a
・OreOreCoinのデプロイアドレス:0xdc04977a2078c8ffdf086d618d1f961b6c546222
「会員管理」機能付きの仮想通貨コントラクトの動作確認(その2)
送金
引き続き教科書に沿って、ユーザーAからユーザーBへ2000[oc]送金します。
ちなみになぜユーザーAから送金するのかというと、「OreOreCoin」をデプロイすると「デプロイ実行ユーザー」の残高に全OreOreCoinが付与される仕様になっていて、送金によってOreOreCoinを流通させるまではユーザーAしかOreOreCoinを持っていないためです。


では送金してみましょう。
送金するための「transfer」も「msg.sender」を含むので、実行ユーザーを気にする必要があります。
今回はユーザーAから送金するために、実行ユーザーをAにして「transfer」します。


各ユーザーの残高も無事に増減しています。


ユーザーAの「tradingHistory」を見るとカウントが増えているはずなんですが……なぜか更新されない……w(解決するのは後述)

会員ステイタスのランクアップ
会員情報が更新されないですが、めげずに教科書通り、取引を続けてみましょうw
ユーザーAからユーザーBへ、4回100[oc]を送金してみました。

まだ「tradingHistory」更新されないので、「coin」を確認したら値が入ってない……!w

先ほどアドレスを入れようとしたとき、「setCoin」に「onlyOwner」修飾子がかかっているのを忘れて「Members」のオーナーではないユーザーAで実行していた気がします。
「Members」のオーナーであるユーザーBを実行ユーザーにして、再度「setCoin」で「OreOreCoin」のアドレスを「coin」に代入してみます。
ちゃんと「coin」にアドレスが入りました。

再度ユーザーAからユーザーBへ、1回100[oc]を送金。

今度はちゃんと「tradingHistory」が更新されていました。

さらにユーザーAからユーザーBへ、100[oc]を送金を繰り返すと、「statusIndex」が「2」になりました。

ちなみに、「transfer」は送金の実行ユーザーを「msg.sender」で取得して「updateHistory」という「tradingHistory」更新のための関数を呼び出すので、送金を実行していないユーザーBの「tradingHistory」は更新されていません。

キャッシュバック機能の確認
ユーザーAへのキャッシュバック率を「getCashbackRate」で確認すると、ちゃんと「Silver」の「5」(%)になっています。

先ほど送金を数回した途中で(ボタンを押しすぎてw)「Silver」になってしまい、最後の送金にはキャッシュバックが反映されていました。
ユーザーAの残高に100×5%の5[oc]という端数が現れています。

「updateHistory」の実行ユーザーについて
「updateHistory」は「onlyCoin」という、「OreOreCoin」しか実行できないようにする修飾子がついています。
ユーザーではない「OreOreCoin」が実行するというのがどういうことなのか、個人的にはこれがちょっと気持ち悪くて考えてみました。
結論としては、「OreOreCoin」に定義された「transfer」が「updateHistory」を呼ぶとき、“msg.sender=OreOreCoinのアドレス”になっていると思われます。
このあたりの関数の呼び出しが、次の図のような構造になっていると考えるのが良いのかな、と思います。

「transfer」を呼ぶのはユーザーAなんですが、「updateHistory」は「OreOreCoin」が呼んでいると考える必要がありそうです。
まとめ
今回は、前編と後編に分けて「はじめてのブロックチェーン・アプリケーション Ethereumによるスマートコントラクト開発入門 (DEV Engineer's Books)」の「会員管理」機能付きの仮想通貨コントラクトで遊んでみました。
“暗号資産(仮想通貨)が1つあって、これに「紐づくユーザーが各々会員情報を持つ」状況をコントラクトで表現する”ことをやってみました。
このコントラクトのコードと動きを理解するにあたって、個人的には以下の点がポイントだと感じました。
(1)コントラクト名と関数名が入れ子になっていて、コードをしっかり追う必要があった。(「setMembers」は「OreOreCoin」、「setCoin」は「Members」内に定義されている)
(2)関数の定義に関わることから、実行ユーザーを気にする必要があった。(「msg.sender」や「onlyOwner」修飾子による)
(C)mapping型は「連想“配列”」なので、配列になっている。(これをポイントに挙げるのは、特に個人的な勉強不足ゆえですw)
……と、こんな感じの内容でした。
同じようなところで詰まった方のお役に立てれば幸いです。
それではこのへんで。
ブロックチェーン関連の記事紹介まとめ(2019年3月:#60-90)
ブロックチェーンや暗号資産(仮想通貨)関連の記事や論文などのデイリー紹介ツイート、3月分のまとめです!
ご興味ある記事があれば、ぜひ元記事も読んでみてください!
<< 2019年2月:#32-59
2019年4月:#91-120 >>
記事紹介まとめ(2019年3月:#60-90)
エネルギー業界への利用例、海外だとすでに結構あるんですね(´・ω・`)
— ぺろりん@ぶろっくちぇーん (@peroincahin) 2019年3月1日
自由化による電力の流れの双方向化って、いわれてみればたしかにそうなりますね……
あと、インフラにはダウンしにくい分散ネットワークって合いそうですね。#ブロックチェーン #blockchain
ここで挙げられてる
— ぺろりん@ぶろっくちぇーん (@peroincahin) 2019年3月2日
・取引手数料がかかる
・送金速度が遅い
・限られた通貨間でしか取引できない
という3つのデメリットは、将来技術的に解決出来そうな雰囲気がするのがアツいですね(´・ω・`)#ブロックチェーン #blockchain #暗号資産 #仮想通貨 #暗号通貨
#リップル は #ブロックチェーン をどこにも使ってないんだっけ?
— ぺろりん@ぶろっくちぇーん (@peroincahin) 2019年3月3日
自分の理解が曖昧だなぁ。公式のドキュメントを読みにいかないといけないな。。#blockchain #暗号資産 #仮想通貨 #暗号通貨 #Ripple
今後としては、分散型と集中型を組み合わせて使う世界観が筆者の主張のようです。
— ぺろりん@ぶろっくちぇーん (@peroincahin) 2019年3月4日
アルゴリズムによる合意を「『信頼された中央の帳簿管理者』を置かない中で、帳簿等への『信頼』を新たに創り出すためのコスト」と表現してるの面白かったです。#ブロックチェーン #blockchain
#Enigma 調べてみたら面白いな……w
— ぺろりん@ぶろっくちぇーん (@peroincahin) 2019年3月5日
sMPCの仕組みもーちょい知りたいところ(´・ω・`)
この表は #ゼロ知識証明 より優秀って言ってるように見えるがどうなんだろう。#ブロックチェーン #blockchain #暗号資産 #仮想通貨 #暗号通貨
#ICO はだいぶ危ない感じになってしまったもんなぁ。
— ぺろりん@ぶろっくちぇーん (@peroincahin) 2019年3月6日
「セキュリティ=証券」という教養が無い私としては名前だけだとピンとこなかったですが、これさえ覚えておけば理解できそうです(´・ω・`)#ブロックチェーン #blockchain #暗号資産 #仮想通貨 #暗号通貨
実装はもーちょい複雑なのかもですが、秘密分散って1次関数で説明できる、こんな簡単な原理なんですね。
— ぺろりん@ぶろっくちぇーん (@peroincahin) 2019年3月7日
これももーちょい調べたいな……w
どうも私は #ブロックチェーン 周りだと、特にプライバシー問題に興味がありそうですw#blockchain
#マルチシグ でエスクローができるのは覚えておきたいところですかね(´・ω・`)
— ぺろりん@ぶろっくちぇーん (@peroincahin) 2019年3月8日
導入は確かに手間なんだよなぁ……
マルチシグ対応のウォレット紹介、何というか数年前と比べて大分UIが発達した感……w#ブロックチェーン #blockchain #暗号資産 #仮想通貨 #暗号通貨
分散DBについてはこのへんも参考に。#ブロックチェーン と #分散DB だとそもそもが違う概念って印象だなぁ。。#blockchainhttps://t.co/rGClldbz6n
— ぺろりん@ぶろっくちぇーん (@peroincahin) 2019年3月9日
文字通りだと #DAO は #ブロックチェーン を前提にしなくても良いように思いますが、少なくともここではブロックチェーンに乗せる前提という感じですかね(´・ω・`)
— ぺろりん@ぶろっくちぇーん (@peroincahin) 2019年3月10日
ここに出てくる「AIによる完全自動企業」って、もはや「組織」と呼ぶ意味もないような気が。#blockchain
バイト毎に下位順で並べるのをリトルエンディアンって言うんですね。
— ぺろりん@ぶろっくちぇーん (@peroincahin) 2019年3月11日
ちょっとずつ勉強していくのです……w#ブロックチェーン #blockchainhttps://t.co/avAzmTs6Ha
#ブロックチェーン のデータ量は、やっぱり問題になりますよねぇ。これ個人的に以前から気になってるんですよね。将来的に、最終的には検証用ノードが、ストレージも十分にある数台のスパコンにしか務まらなくなるようにならないかなぁと。#blockchain
— ぺろりん@ぶろっくちぇーん (@peroincahin) 2019年3月12日
この実装から偽陽性と偽陰性のくだりを読み取れない……(;´Д`)
— ぺろりん@ぶろっくちぇーん (@peroincahin) 2019年3月13日
理解が浅いので、ブルームフィルタは他の記事も読もう。。#ブロックチェーン #blockchain
昨日のやつが私には難しかったみたいなので、もうちょっと簡単なやつで、再度 #ブルームフィルタ の話ですw
— ぺろりん@ぶろっくちぇーん (@peroincahin) 2019年3月14日
こっちを先に読むべきだった気がする……
ブルームフィルタ自体に関しては、 #ブロックチェーン とは別に調べる方が良いかもなぁ。#blockchain
>「楽しそうな作業だと思われるかもしれません。実際に楽しいです。」
— ぺろりん@ぶろっくちぇーん (@peroincahin) 2019年3月15日
ワロタ
この文章だけだと分かりにくいですが、 #Zcash のコアな部分に根本的な問題あるように見える。もうちょっといい感じに詳しい説明が欲しい……w#ブロックチェーン #blockchain #暗号資産 #仮想通貨 #暗号通貨
たしかにマルウェア感もありますが、でも確かに #暗号資産(#仮想通貨)の新しい可能性を示すアイデアで、個人的には画期的だと思うなぁ。
— ぺろりん@ぶろっくちぇーん (@peroincahin) 2019年3月16日
Captchaの代わりってアイデアも魅力的に思える……#ブロックチェーン #blockchain #暗号通貨
この元記事、面白かったので勉強がてら日本語訳してみましたw
— ぺろりん@ぶろっくちぇーん (@peroincahin) 2019年3月17日
#ZKSNARKs 学習のご参考にどうぞ。
元記事のブログ、他の記事も面白そうな感じです。
ちゃんと数式を入れて書いてくれてるのがうれしい。。
#ブロックチェーン #blockchain #ブログ書けhttps://t.co/hnzXX6Nibu
このトリレンマは技術的なトリレンマであって、論理的に、原理的に競合するようなものではないのかな?(´・ω・`)
— ぺろりん@ぶろっくちぇーん (@peroincahin) 2019年3月18日
仕組みによって原理的に競合するかもだけど、一般に、論理的に競合するのかしら。#ブロックチェーン #blockchain #暗号資産 #仮想通貨 #暗号通貨
保有者のメリットとして「 #Liquid プラットフォームにて支払われた手数料の一部をリファラル報酬として受け取ることができる」のは #PoS ってこと?この文章的には #コンセンサスアルゴリズム とは関係なさそうな雰囲気を感じるけど。#ブロックチェーン #blockchain #暗号資産 #仮想通貨 #暗号通貨
— ぺろりん@ぶろっくちぇーん (@peroincahin) 2019年3月19日
この #SWELL の登壇者がほんと凄いw #リップル 凄さはこの政治力だと思う。淡々と支配圏を拡大してるw
— ぺろりん@ぶろっくちぇーん (@peroincahin) 2019年3月20日
インフラ作りだと「当たり前」に広がるのが重要で、プロダクトがしっかりしてるならこういうとこで勝負がつくんだろうな。#ブロックチェーン #blockchain #暗号資産 #仮想通貨 #暗号通貨 #Ripple
「全ての責任をユーザーに帰属」ってかなり難しそうだなぁ。特に現状の日本の国民性だと、まだここに到達できる気がしない。
— ぺろりん@ぶろっくちぇーん (@peroincahin) 2019年3月21日
データ容量ってのもやっぱ問題あるように素人目には思えるなぁ(´・ω・`)#ブロックチェーン #blockchain
#スマートコントラクト において、一旦内部状態のような誰も手出しできない場所に、アセットを格納するステップを踏むのが肝要なんですかね(´・ω・`)#ブロックチェーン #blockchain #暗号資産 #仮想通貨 #暗号通貨
— ぺろりん@ぶろっくちぇーん (@peroincahin) 2019年3月22日
たしかに、結局 #ブロックチェーン 基盤は数社のジャイアントが握るような未来になりそうかなぁ。
— ぺろりん@ぶろっくちぇーん (@peroincahin) 2019年3月23日
完全な非中央集権って、「誰かに面倒を見てもらいたい人」がたくさん居る実状からすれば、原理的に無理なのかしら(´・ω・`)#blockchain
正直これだけで内容理解は私にはキツいw
— ぺろりん@ぶろっくちぇーん (@peroincahin) 2019年3月24日
「ブロック報酬がなくなったときの問題」って特殊な設定での話かと思いましたが、考えてみれば、発行上限のある #暗号資産(#仮想通貨)は須く関係ありますね。興味深い。#ブロックチェーン #blockchain
文献いっぱい載ってて嬉しいw
— ぺろりん@ぶろっくちぇーん (@peroincahin) 2019年3月25日
ユーザー側に技術知識を要求する状況では、インフラとして広まるにはまだまだ不十分だよなぁ。
読んでて特に需要を感じたのは
①分散型の認証
②既存技術に #ブロックチェーン を「足す」技術
あたり。#blockchain
ゼロ知識系も色々プロトコルあるっぽいですね(´・ω・`)
— ぺろりん@ぶろっくちぇーん (@peroincahin) 2019年3月26日
とりあえず基本的な知識として学習するなら、ZK-SNARKで良いのかしら?まぁ使われてるプロダクトがメジャーって意味では、今後前提知識になるのかな……?#ブロックチェーン #blockchain #暗号資産 #仮想通貨 #暗号通貨
ここの記述だと、機械同士で信頼を確立するために使う感じですね?
— ぺろりん@ぶろっくちぇーん (@peroincahin) 2019年3月27日
「ブロックチェーンを使う」というのが、いまいちイメージがつきにくい……個人でデバイス買って遊べないかしら……?(´・ω・`)#ブロックチェーン #blockchain #暗号資産 #仮想通貨 #暗号通貨
今回は、 #ブロックチェーン の文脈でよく出てくる楕円曲線暗号の話。思ってたよりだいぶ簡単な仕組みだな。。
— ぺろりん@ぶろっくちぇーん (@peroincahin) 2019年3月28日
剰余演算の逆算が難しいのって、どう証明するんだろう?(´・ω・`)#blockchain #暗号資産 #仮想通貨 #暗号通貨 #ビットコイン #bitcoin
記号の説明が無いところがあるので、これだけで全部理解は難しいですが、一方向性関数とは?という観点だと「入力 x をランダムに選んだとき,f(x) の逆計算が出来る 確率がとても小さいものを一方向性関数と呼ぶ」ってとこがここから読み取れる核心ですかね?#ブロックチェーン #blockchain
— ぺろりん@ぶろっくちぇーん (@peroincahin) 2019年3月29日
他のゲームに比べると、 #ブロックチェーン ゲームだと課金がたぶん必須なんですよね(´・ω・`)
— ぺろりん@ぶろっくちぇーん (@peroincahin) 2019年3月30日
これをやるメンタリティとして、発信してゲーム外で稼ぐってのは良いですね。ある程度やり込む必要はありそうですが。#blockchain #暗号資産 #仮想通貨 #暗号通貨
公開鍵暗号つながりで。
— ぺろりん@ぶろっくちぇーん (@peroincahin) 2019年3月31日
途中計算の記載に優しさを感じるw
modの割り算がどうも慣れないな……群はまだしも体はあまり馴染みがなくてとっつき辛いwまぁQ、R、Cは別だけどww
記事としては、すごくわかりやすくスッキリ説明されてて、最後のf_pの補足も有り難い。#ブロックチェーン #blockchain
Keyword : ブロックチェーンblockcahin暗号資産仮想通貨イーサリアムEthereumZcashRippleビットコイン