うどんの帝国

うどんとブロックチェーンって似てる

ブロックチェーンのマスアダプションはLINK Chainが成し遂げる。

どうもこんにちはミヤザキです。

 

LINEがブロックチェーン技術に積極的に取り組んでいることは知ってはいたのですが、

 

どのレベルで取り組んでいるのかなど細かい話は知りませんでした。

 

今日トークンエコノミー関連の記事を漁っているときに、LINEは自社でブロックチェーンを作っていて、すでにDAppをいくつか公開していることを知りました。

 

現在はプライベートチェーンで完全に社内事業のようですが、将来的にはパブリックに移行し、誰でもブロックチェーンを触ることが出来るようになるそうです。

 

そこでもし、LINEの開発するブロックチェーンがもっと広く使われるようになればブロックチェーン、そしてDAppsが抱える最大の課題の一つである、マスアダプションを実現できるのではないかと思いました。

 

以下詳細です。

続きを読む

ブロックチェーン界隈の諸君「Ethereumって何?」って突然聞かれたらどう答える?

こんにちはミヤザキです。

 

5月から毎月、一か月を前後半に分けて、それぞれテーマを決めて調べ学習をしようと思い立ち、第一回のテーマはEthereumに決めました。

 

始めたのがGW後、そのあといろいろあり数日空いたりしてしまったので実質5日くらいしか勉強できませんでしたが、ゆるくやっていこうと思うのでまあよしとしましょう。

だらだら続けるのはけっこう得意です。

 

それでインプットしたらアウトプットしようと思ったので記事を書くことにしたんですが

いきなり僕が

 

「これがEthereumだ!!」

 

とか言っても全く説得力もないしなーと思ってたところ

 

心の中のリトルミヤザキにこう聞かれました。

 

「Ethereumってなに?」

 

続きを読む

【20代からの資産運用】新卒一年目だけどちゃんと資産運用をしようと思う。

どうもこんにちはミヤザキです。

 

僕はぴちぴちの新卒一年目です。

名古屋でエンジニアをやっています。

 

初任給を手にし、節約をしつつ余ったお金をどうしようか考えていると、今のうちから資産運用をしておくのがいいのかなと思いました。

 

この記事は僕の資産運用法を紹介するなどの記事ではなく(ノウハウなど皆無)、なぜ資産運用しようと思ったかをつらつら書き連ねるだけの面の皮の厚い記事なのでご容赦ください。

 

続きを読む

(第二弾)IOSTでスマートコントラクトを書くよ

どうも、みやざきです。 IOSTスマートコントラクト第2弾です。

まずスマートコントラクトを書く前に準備がいるので、ローカルテストノードを立ち上げるためには下の記事の1.までやってみてください。 すぐ終わると思います。

www.tama-fun95.tokyo

 1.スマートコントラクトを書く

では早速スマートコントラクトを書いてみましょう。

スマートコントラクトの中身はこんな感じです。

init関数:スマートコントラクトがパブリッシュされたときに動く関数。

can_update:公式が用意しているコントラクトアップデートのための関数。これをコントラクト内に書かなければアップデート不可にできます。

putText:ユーザーからのインプットを受け取ってストレージに保存する関数。

getText:ストレージから特定のTextを読み取ってユーザーに返します。

まず, その前に、IOSTのストレージにはJSON形式でデータが保存されます。 なので

ストレージに数値をしまいたければJSON.stringify

ストレージ取り出したい値を数値として使いたい場合はJSON.parse()して使う必要があります。

毎回書くとめんどくさいので最初にまとめて書いてしまいます。

_get(k){
    const val = JSON.parse(storage.get(k));
    return val;
}

_put(k,v){
    const val = JSON.stringify(v);
    storage.put(k,val);
} 

storage.put:ストレージにKey-Valueペアを保存 storage.get:ストレージからKeyをもとにValueを取ってくる。

などはIOSTのAPIです。

詳しくは公式ドキュメントのAPIページを見てください。

https://developers.iost.io/docs/en/3-smart-contract/IOST-Blockchain-API.html

では本題。

class TextRecorder {
    init (){
    //パブリッシュされたときに
      // {"count":"0", "text_count_0":"GENESIS_TEXT"}って感じで保存。
        this._put('count', 0);
        storage.put("text_count_0" ,"GENESIS_TEXT");
    }

    
//これはテンプレだと思います。
    can_update(data) {
        return blockchain.requireAuth(blockchain.contractOwner(), "active");
    }


    putText(txt){
     //"count"のValueを持ってきて数値化。
        let textId = this._get("count");
     // それに1を足してそれが今回のテキストの番号になる
        textId = textId + 1;
     //テキストは"count_#":"xxxx"という感じのペアで保存される。
        storage.put("count_" + JSON.stringify(textId), txt);
     //最後にcountを再度JSON化してストレージに保存して今のテキストの数を記録する。
        this._put("count", textId);
    }

//これはテスト用に書いたのでなくてもいいです。現在のcountを見られる。
    getStoryCount(){
        return storage.get("count");
    }

//テキストの番号をもとにストレージから対応するValueを返す。
    getStory(id){
        let textId = "count_" + id;
        let txt = storage.get(textId);
        return txt; 
     }

    _get(k){
       const val = JSON.parse(storage.get(k));
       return val;
     }

    _put(k,v){
       const val = JSON.stringify(v);
       storage.put(k,val);
     } 
}

このスマートコントラクトをざっくりまとめると、

テキストは"count_#":"xxxx"というのペアで保存される。

それとは別に"count":"xx"というペアがありputTextの度に”xx”の値が1ずつ増える。

こんな感じでストレージを使ってテキストに対してユニークな番号を割り当ててます。 今度はmapも使ったりしてやりたいと思います。

Qiitaにも同じ記事をあげるつもりです。

第3弾は実際に上記のスマートコントラクトをブロックチェーン上にパブリッシュ(ディプロイ)して動かしてみようと思います。

Twitterやってます。もしよかったらどうぞ。

twitter.com

IOSTでスマートコントラクトいじってみた

どうも、みやざきです。

今回は軽くIOSTのスマートコントラクトをいじってみました。

 

今回やることは公式ドキュメント見れば大体載ってます、というか今のところこれ以外見るものがあまりない。

https://developers.iost.io/docs/en/3-smart-contract/ContractStart.html

 

この記事を読み進めえる前に注意なんですが、かなり初心者向けに書いてます。

というか僕が初心者なので自分に授業する感じで書いてます。

ので経験豊富なエンジニアの方にはすこし冗長かもしれませんがそこはご了承ください。あと読んでて、こいつここのところよくわかってないな、とか思ったらお手数ですがご指摘いただけるとありがたいです。

 

まず今回やるのは、

  • 0.その前に、必要なもの
  • 1.Dockerでテストノードを立ち上げる。
  • 2.適当にコントラクトを書いてみよう。
  • 3.実際にコントラクトを呼び出してみる
  • 4.お疲れさまでした。

って感じです。

 

続きを読む

次世代型プラットフォームIOSTの詳細

 

IOSTとは

 

イーサリアムやEOSと似たようなスマートコントラクトによりアプリケーションを動かすことのできるブロックチェーンプラットフォーム



ブロックチェーンプラットフォームにも様々なものがありますが、多くのプラットフォームがスケーラビリティ問題を抱えています。

 

スケーラビリティとは日本語では拡張性といい、システムやネットワークの拡張に対し機能や性能をどれだけ落とさずに運用していけるかの度合いのことです。

 

どんどん大きくなっていっても機能や性能が変わらずに運用できているシステムやネットワークは、スケーラブルである、と言えます。

 

スケーラビリティの1つの指標としてよく例に出されるのはTPS(Transaction Per Second)です。その名の通り「一秒間に何個のトランザクションを処理できるか」を示す単位です。

この指標が大きければ大きいほどスケーラブルだと言えるわけです。

 

ではメジャーなブロックチェーンネットワークでのTPSはどのようになっているのでしょうか。

 

ビットコイン:約5〜7TPS

イーサリアム:約15TPS

EOS:約4000〜6000TPS

 

これを見てみるとビットコインイーサリアムはEOSほどスケーラブルではないと言えますね。

注意していただきたいのはこれはあくまでもトランザクションの処理スピードであり、TPSだけをみて、ビットコインイーサリアムがEOSより劣っているということは言うべきではありません。

 

ブロックチェーンプラットフォームにおいてよく言われているのがスケーラビリティのトリレンマという問題です。

スケーラビリティのトリレンマとは、分散性(非中央集権制)、セキュリティ、スケーラビリティという3つの要素を同時にすべて満たすことは出来ない、という問題のことです。

 

例えば、分散性、セキュリティに重きを置く場合スケーラビリティを犠牲にしなくてはいけない、といった具合です。

 

まさにビットコインイーサリアムはスケーラビリティを犠牲にして分散性、セキュリティを実現しているのです。

 

一方EOSは分散性を犠牲にしています。

というのも、例えばイーサリアムではブロック生成の承認を行うノード(ネットワークに参加しているコンピューター)は数千にのぼると言われていますが、EOSでは投票によって選ばれた21のノードのみです。

ブロック生成を行うノードの数を少なくすることによってブロック生成にかかる時間を短くしスケーラビリティを獲得しています。

 

この違いはコンセンサスアルゴリズムの違いに拠るものです。



このように今までのブロックチェーンではスケーラビリティと分散性、セキュリティを同時に獲得することは極めて難しい問題であり、それこそがブロックチェーン技術にとって解決すべき難問だったわけです。

 

この問題を解決できると期待されている新たなブロックチェーンプラットフォームがIOSTです。

その謳い文句はこちら

「ーーーイーサリアムの400倍速く、EOSの10倍分散しているーーー」

どれどれ、本当なのか見ていきましょう。



まずIOSTの特徴は2つ

 

Effcient Distributed Sharding(効率分散型シャーディング)によるスケーラビリティの実現

②PoBによる分散性の実現



シャーディング(Sharding )はもともとイーサリアムのでも導入が検討されている技術で、1つのブロックチェーンの中に小さなブロックチェーンを作ることによってブロック生成を同時多発的に行うことを可能にし、トランザクションのスピードを向上させるというものです。

分業化、並列化することでボトルネックを取り除こうという、いわゆるスケールアウトという考え方に基づいています。



IOSTではそのシャーディング技術を導入しており、EDSと呼んでいます。

このシャーディングには少し問題がありました。

それはシャードを多くするということはそれぞれのシャードに参加するノード数が少なくなるということであり、つまりブロック生成の際に不正を可能にするハードルが低くなってしまいます。



そのシャーディングの欠点をフォローするのが次に紹介するPoBです。



PoBはProof of Believabilityの頭文字でコンセンサスアルゴリズムの一種。

 

IOSTネットワーク内のノードはノードは主に2つのグループに分けられます。トランザクション承認のみを行うノーマルリーグとブロック生成を行うビリーバブルリーグです。

ビリーバブルリーグにいるノードはServiノードと呼ばれることもあります。

 

IOSTでのブロック生成は順番制になっています。

1回のラウンドではServiノードの中から17のノードが選ばれ、それぞれ1ブロックずつ生成を行います。

これだけ聞くとEOSのDPoSのようにブロック生成者が寡占状態になってしまうと思うかもしれませんが、17のノードの選出方法により分散性を実現し、また不正をするリスクを高める事によりブロック生成ノードが不正をする可能性を極限まで小さくしています。

 

まず選出方法についてです。

Serviノードは他のノードからの投票や、またトランザクションの承認、スマートコントラクトの実行、ストレージ提供などを行うことによりSERVIというポイントを獲得することが出来ます。

このSERVIを多く保持する上から17番目までのノードがビリーバブルノードとしてブロック生成を行います。

 

一度ブロック生成をするとそのラウンドでブロック生成をしたノードのSERVIは一律で減少します。

減る量はそのラウンドの17番目のノードが持っていたSERVI量です。

つまり17番目として選ばれたノードはSERVIをすべて失います。

そのため何回も連続して17番目以内に入ることは困難で、ブロック生成者の顔ぶれはラウンド毎に入れ替わります。

このゆにIOSTでは、EOSで問題となっている寡占状態をある程度回避して分散性を保っています。

 

SERVIは売買することは出来ず、ネットワーク内で定められた行為で貢献することでしか手に入らないため不正をしてブロック生成者になることは困難です。

またServiノードであればどのノードでもブロック生成をして貢献報酬をもらう事が可能であり、ノーマルノードもServiノードに投票することでトークンを得ることが出来る、という全体としてシステムが機能するためのインセンティブ設計がうまく出来ているプラットフォームだと感じます。

ここまではアメでしたがムチもあります。

 

ブロックがチェーンに組み込まれるプロセスは、まず生成者がブロックを生成、それを同じグループ内のノーマルノードがチェックしてブロックにファイナリティを与えます。

イーサリアムビットコインとは違い、確定的ファイナリティを持ちます。

もしここで不正なトランザクションがブロックに含まれている事が発覚した場合、そのブロックを生成したノードには説明責任が課され、それが故意である場合などにはブロックを生成したノードは所持するすべてのIOSTトークンを没収されます。いわゆるSlashingという罰則方法です。



まとめ

 

まだまだIOSTに関する資料はすくなく、今回の記事は主にホワイトペーパーを参考にしたのですが、当時とは違う形で実装されている機能や改善もあると思います。今後追記や修正をしていきます。

iRAM, iGASなどについても別記事で書こうと思います。

もし記述に不備や不明な点があればTwitterで遠慮なくリプライください。

 

先達から学んだIOSTはかなりいい線をいっているのではないかと思います。スマートコントラクトもJavaScriptで書けるため適応可能なエンジニアは多くいるでしょう。

しかしまだまだイーサリアムやEOSほど開発環境が整っておらず、開発に参入するハードルは

依然高いです。やはりコミュニティの命運を左右するのは、どれほど多くの質の良い開発者がいるか、のような気がするのでこれからのIOSTの課題はそこだと思います。まあまだメインネットローンチから2か月なのでまだまだこれからです。

 

 

IOSTホワイトペーパー(英語)

 

https://github.com/iost-official/Documents/blob/master/Technical_White_Paper/EN/Tech_white_paper_EN.md#proof-of-believability

秋田にある国際教養大学に通ってるんだけど、興味ある?

 どうもみなさんこんにちは、みやざきです

 

秋田はもうどちゃくそ寒いです。

 

そのうち雪も降り始めるんでしょうな。

 

いやあ、そりゃあ、関東で育った僕にとって

 

白銀の世界ってのは美しいものだと思ってました。

 

 

 しかし、住めば地獄。

 

歩きづらい、寒い、滑る

 

冬はつらいです。

 

なぜ僕が秋田に来ることになったか。

 

それは5年ほど前の冬のことでした。

続きを読む

イギリスのくそダサいブランドSuperDry極度乾燥(しなさい)って知ってる??

f:id:tama-fun95:20181112093033p:plain

どうもみなさんこんにちは、ざきです

 

最近、ベッドの横にコーヒーを入れた水筒とPCを置いて苦手な朝を変えようキャンペーン実施中です。

 

今日はしっかり6時半に起きました。

またもやゲートボールの音が聞こえてきます。

秋田のご老人はこんなくそ寒い朝からゲートボールをしています。

おそるべし。

 

さて今日はとあるアパレルブランドの話。

海外に行くとかなりの確率で目にする、世界的にも人気のあるブランドなのですが、

とある理由から日本ではほとんど見かけません。

 

続きを読む