Chainlinkについて調べてみた

  • ブロックチェーンのオラクル問題とは何か?
    • ラクル問題とは
    • ラクルの要件
    • ラクルの問題点
    • Chainlink での安全で信頼性の高いオラクルのスタンダード
  • Chainlink で実現するスマートコントラクトの 77 のユースケース
    • 分散型金融
      • ステーブルコイン
      • 先物
      • 自動化された資産管理
    • 外部への支払い
      • 銀行支払い
      • 暗号通貨決済
    • ゲームとランダム性
      • 宝くじ
    • 保険
      • 作物保険
      • 航空保険
      • 住宅保険
      • 生命保険
      • 健康保険

Chainlinkを調べるにあたりChainlink Japanがmediumにあげている公式の和訳記事を読んでみました。

chainlink-japan.medium.com

ブロックチェーンのオラクル問題とは何か?

読んだ記事は以下で
ブロックチェーンのオラクル問題とは何か? - Chainlink Community - Medium
公式の記事は以下になります。
What Is the Blockchain Oracle Problem?

続きを読む

圏論学習中メモ

米田の補題まで理解できるように圏論の学習を進めていまして、メモを残すことで大分整理できてきた気がします。

圏論学習中メモ

    • 対象 a,b があったとき f: a -> b のように対象間の矢印を射といい、このとき a を始対象、b を終対象という。また f: a -> b のとき cod(f)=b で dom(f)=a で射に対する始対象、終対象を表す。
    • 対象 a があったとき Id_a: a -> a のように自分自身に向かう射を恒等射という
    • 対象 a,b があり f: a-> b の射と g: b -> a の射があるとき、g を f の逆射といい、逆射をもつ射のことを同型射と呼び、その時の対象は同型と呼ぶので a と b は同型となる
    • 対象と射の集まり

    • 圏と呼ばれるには結合律、単位律を満たす必要がある。

      • 結合律: f: a->b, g: b->c, h:c->d ならば h◦(g◦f)=(h◦g)◦f が成り立つ。(合成の順序によらない)
      • 単位率: 全ての対象は恒等射を持つ
    • 一般的な圏はラテン語の太文字を使って圏 C、D などと表記される。
    • 例えば、しりとりの圏の対象を文字、射を始対象が頭で終対象がお尻にくる単語とした場合、"り"と"ご"が対象なら"りんご"という射があり、"と"が対象なら"とまと"という写恒射がある。
  • Hom 集合

    • 圏に含まれる対象に対しての射の集合
    • 圏 C の対象 X から対象 Y への射の集まりを Homc(X,Y)と書く
    • 特定の対象に対しての Hom 集合を局所的に小さい圏(locally small)と呼ばれる、例えば Homc(X,Y)のように圏 C 内の対象 X から Y に限定した射の集まりは局所的に小さい圏となる。
  • 順序集合

    • 対象間の大小関係を比較できる集合
    • 前順序、半順序、全順序の集合がある
    • 前順序は反射律(集合 P の任意の対象 x に対して x≦x が成り立つ)と推移律(集合 P の任意の x,y,z に対し x≦y かつ y≦z ならば x≦z が成り立つ)の性質がある
    • 半順序は前順序に加え反対象律(集合 P の任意の x,y に対し x≦y かつ y≦x ならば x=y が成り立つ)を満たす
    • 全順序は半順序に加え全順序律(集合 P の任意の x,y に対し x≦y または y≦x が成り立つ)を満たす
  • 可換

    • 始点と終点が同一のものに対して別ルートがあること
    • f: a -> b, g: b -> c, h: a -> c であれば g◦f = h となり可換である
    • 対象 A,X,Y があり f:A->X で g:A->Y のとき f,g に対して可換となる X×Y を積とよぶ
    • 積の普遍性: 任意の対象 A と射の族(添字付けされた元)fi:A->Xi が与えられたとき、任意の f:A->X に対して fi=f◦πi となるような πi:X->Xi が存在する
    • 積は極限である
  • 余積

    • 積の矢印を逆にしたもの
    • 対象 A,X,Y があり f:X->A で g:Y->A のとき f,g に対して可換となる X×Y を余積とよぶ
    • 余積の不変性: 任意の対象 A と射の族(添字付けされた元)fi:xi->A が与えられたとき、任意の f:X->A に対して fi=f◦πi となるような πi:X->Xi が存在する
    • 余積は余極限である
    • 任意の対象 X と A×X から B への任意の射(x:A × X -> B)に対して X から P への射 x'が存在し、p:(A×P)->B のとき x = p ◦ (id_a × x')を満たすとき対象 P が冪で射 p:(A×P)->B を評価射という。
  • 等化子

    • 任意の圏 C に対象 A,B と A から B への射として f:A->B,g:A->B があり f,g の等化子は対象 E と射 e:E->A から構成され f◦e=g◦e となる不変性をもつ
    • f と g の等化子を構成する対象 E と射 e:E->A について、任意の対象 Z と射 z:Z->A について e◦u = z となる射 u:Z->E が一意に存在する
  • 余等化子

    • 任意の圏 C に対象 A,B と A から B への射として f:A->B,g:A->B があり f,g の等化子は対象 E と射 e:B->E から構成され e◦f=e◦g となる不変性をもつ
    • f と g の余等化子を構成する対象 E と射 e:b->E について、任意の対象 Z と射 z:b->Z について u◦e = z となる射 u:E->Z が一意に存在する
  • モノイド

    • モノイドは結合的で単位元を持つと定義されている
    • 結合的について、例えば実数の和であれば 1 と 2 を結合して 3 になるように実数と実数を結合して実数を返すようなものである。
    • 単位元とは結合した結果が変わらないものであり、例えば実数の和であれば 0 が単位元になる。
    • 右から結合した際に単位元となるものを右単位元(a*e=a)と呼び、左から結合した際に単位元となるものを左単位元と呼ぶ(e*a=a)
  • モノイド準同型

    • 2つのモノイド(M, •), (M′, •′)の写像 f: M->M′であるとき以下を満たす。
      • M の任意の元 x,y に対して f(x•y)=f(x)•′f(y)
      • 単位元が f で移る(f(e) = e′)
    • モノイドの結合と単位元に加え逆元を持っている。
    • 逆元とは結合したものが単位元になるもので、例えば実数の和であれば 1 に対して-1 が逆元になり、実数の積であれば 2 に対して 1/2 が逆元となる。
  • 群の準同型

    • 2 つの群 G,H が与えられたとして、G から H へが群の準同型写像である場合、h: G->H で h(u*v)=h(u)・h(v)を満たすもののことを言う。
    • 例えば対数 log の積から実数の加算への場合、log(X*y)=log(x) + log(y)となるので群準同型写像である
    • 指数の加算の群から実数の積へについても,exp(X+Y)=exp(X) × exp(Y)となるため順同型写像である
  • アーベル群

    • 群の結合、単位元、逆元に加えて交換法則を持っている。
    • 交換法則について a*b=b*a のように結合の順番を入れ替えても結果が一致するもののことを言う
  • 集合の圏 Set

    • 対象および射、射の合成をまとめて集合の圏 Set と定義されている。
  • 関手

    • 圏 C の対象、射の関係性をそのまま圏 D に移す射を関手という
    • 例えば圏 C に f:X->Y の射が存在したとし、圏 C から圏 D への関手 F があったとしたら圏 D には F(f): F(X)->F(Y)の射が存在する。
    • 関手は以下の性質がある(恒等射および射の合成を保存)
      • 圏 C の対象 X と 恒等射 id について、F(id X) = id F(X)が成り立つ
      • 圏 C の射 f,g の合成 f◦g と圏 C から圏 D への関手 F について、F(f◦g)=F(f)◦F(g)が成り立つ
    • 半順序集合に対しての関手は移った後の圏でも順序を保っており可換図式といわれる
    • 矢印を逆にした圏を双対圏と言い、双対圏の関手を反変関手という
    • 反変関手との対比から、双対圏ではなく矢印を逆にしていない圏に対しての関手を共変関手と呼ばれる
    • "圏 C 内の射"と"関手で移った先の圏 D 内での射"の対応関係により忠実、充満、充満忠実のものがある
      • 関手が忠実であるとは圏 C 内の射に対して圏 D 内の射が単射であること
      • 関手が充満であるとは圏 C 内の射に対して圏 D 内の射が全射であること
      • 関手が充満忠実であるとは圏 C 内の射に対して圏 D 内の射が全単射であること
  • hom 関手

    • hom 関手には始対象を固定した hom 集合の関手である共変 hom 関手と終対象を固定した hom 集合の関手である反変 hom 関手がある
    • 共変 hom 関手は圏 C から 集合の圏 Set への関手
      • 始域を対象 A とし、終域を射 f:X->Y とすると ha(f): hom(A,X)->hom(A,Y)で f◦_:A->Y となる射の集合
      • 始域を対象 A とし、終域を対象 X とすると ha(X)は A->X の射の集合
    • 反変 hom 関手は圏 C から 集合の圏 Set への関手
      • 終域を対象 A とし、始域を射 f:X->Y とすると ha(f): hom(X,A)->hom(Y,A)で _◦f:X->A となる射の集合
      • 終域を対象 A とし、始域を対象 X とすると ha(X)は X->A の射の集合
  • 自然変換

    • 圏 C から圏 D への関手 F,G があったとし t が F から G への自然変換であれば以下の条件を満たす
      • 圏 C の任意の対象 X に対し tx: F(X) -> G(X)となる
      • 圏 C の任意の対象 X,Y におよび任意の射 f:X->Y に対し、t:F->G とし G(f)◦tX = tY◦F(f): F(X)->G(Y)が成り立つ(tX:F(X)->G(X), tY:F(Y)->G(Y),F(f):F(X)->F(Y),G(f):G(X)->G(Y)なので G(f)◦tx=tY◦F(f)=F(X)->G(Y))
  • 関手圏

    • 関手を圏とし自然変換を射とする圏のことを関手圏と呼び、圏 C から圏 D への関手の圏は Fun(C,D)と表記する
  • J 型図式

    • 圏 C 上の J 型図式とは、共変関手 D: J → C のことをいう
  • 自然同値(もしくは自然同型)

    • 関手圏の射と同型射(可逆)である自然変換を"自然同値"と呼び、関手圏の対象として同型であるような関手は"自然同値である"という
  • 圏同値

    • 2 つの圏 C,D とそれぞれの関手 F:C->D と G:D->C があったとき、F と G が圏同値ならば G◦F は圏 C での恒等射になり、F◦G は圏 D での恒等射になる
      • 自然同値を ≅ で表すと G◦F ≅ id_c で  F◦G ≅ id_d
    • 関手 F: C -> D が圏同値の場合以下を満たしている
      • 充満関手: 圏 C 内の射に対して圏 D 内の射が全射であること
      • 忠実関手: 圏 C 内の射に対して圏 D 内の射が単射であること
      • 本質的全射: 圏 D 内の任意の対象 d に対し、圏 C 内のある対象 c を関手 F で移したものが同型のなる(d と F(c)に対し射、逆射が存在する)
  • 随伴

    • 2 つの圏 C,D とそれぞれの関手 F:C->D と G:D->C があり、圏 C の対象 c と圏 D の対象 d について射 f: c-> G(d)と射 h:F(c)->d があり、このとき任意の対象 c に対して対象 d が一意に決まり f ≅ h となり、G は F の右随伴で F は G の左随伴という
    • F が G の左随伴で G が F の右随伴のとき F を左随伴関手、G を右随伴関手と呼び F⊣G と表記する
  • 米田の補題

    • 米田の補題の前にそもそも補題とは、"それ自体が興味深いステートメントと言うよりも、むしろ、より大きな結果を得る一歩として使われる、証明された命題","さまざまな定理を証明するのに便利な定理のこと"
    • 米田の補題では以下が成り立つとされている

      • 圏 C から Set への関手を F とし、C の任意の対象 X を始対象とする共変 hom 関手を hx とすると米田の補題は自然変換 θ:hx->F の集合 Nat(hx,F)と F(X)が自然同値(Nat(hx, F) ≅ F(X))つまり圏 C の対象 X を始対象とした 共変 hom 関手の自然変換の集合と X からの Set への関手が全単射
      • 例えば X から X への射の集合 hx(X)と X から A への射の集合 hx(A)の間に自然変換 があるとしたら、それに対応する X から集合の圏 Set への関手が存在する
    • 関手 F : C → Set と射 f:X->A があるとき対象 X,A について、自然変換 θx:hx(X)->F(X), θa:hx(A)->F(A)で可換図式から

      • F(f)◦θx と θa◦(f◦_)が等価で hom(X,X)の恒等射 idx を代入し
      • (F(f)◦θx)(idx) = (θ◦(f◦_))(idx)
      • F(f)(θx(idx)) = θa(f)
      • θx(idx)∈ F(X)なので θx(idx)の部分は F(X)と全単射で、θx(idx)が決まれば θa:hx(A)->F(A)も決まるので θa も F(X)と全単射でよいのか

Hyperledger Tutorial のコマーシャルペーパー をやってみた

前回やった Hyperledger のチェインコードデプロイのチュートリアルに引き続ぎコマーシャルペーパーチュートリアルもやってみました。 以下のfabric-samplesリポジトリcommercial-paper 配下を動かしていきます。

github.com

ネットワーク起動

まずは docker コンテナを立ち上げます。

[root@localhost fabric-samples]# cd commercial-paper/
[root@localhost commercial-paper]# ./network-starter.sh
set -o pipefail

# Where am I?
DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"

export FABRIC_CFG_PATH="${DIR}/../config"
続きを読む

Hyperledgerのチュートリアルでチェインコードをデプロイしてみた

Hyperledger Tutorial をやってみた

Hyperledger のチュートリアルをやってみたので、その時の内容をまとめてみたいと思います。

環境構築

まずは環境構築ですが、以下に手順がまとめられています。

hyperledger-fabric.readthedocs.io

手順の中である以下のコマンドで Hyperledger Fabric のプラットフォーム固有のバイナリと設定ファイルおよび、チュートリアルで動かすコードのダウンロードができます。自分は Windows の環境だったので Hyper-V に CentOS7 の仮想マシンを立ち上げてそこにインストールしました。

curl -sSL https://bit.ly/2ysbOFE | bash -s

実行後、コマンド実行時のディレクトリの bin 直下にバイナリがダウンロードされるのでパスを通しておきます。

[root@localhost hyperledger]# ls bin/
configtxgen  configtxlator  cryptogen  discover  fabric-ca-client  fabric-ca-server  idemixgen  orderer  osnadmin  peer
続きを読む

Hyperledger fabric のユースケースを調べてみた

エンタープライズでのブロックチェーン

公式サイトの方に説明があります。

hyperledger-fabric.readthedocs.io

ブロックチェーンを使った技術として Bitcoin や Etherenum などの暗号資産が有名ですが、エンタープライズ向けのユースケースで活用する動きが出てきていまして Hyperledger Fabric は最初からエンタープライズ向けとして設計されています。

エンタープライズ向けということで以下を念頭に設計されているようです。

続きを読む

Blockchain 学習メモ

Blockchain および、代表的な実装である Bitcoin について学習したのでメモをまとめてみます。

Bitcoin 論文

まず Bitcoin の論文を読んでみます。

・原文
https://bitcoin.org/bitcoin.pdf

・日本語訳
https://coincheck.blog/292

概要を読んだところ信頼のおける第三者を通さないでも暗号化された証明に基づく電子システムのため直接取引ができるようです。 それからトランザクション(取引)について、コインの所有者は送金をする際にトランザクションに送信者のデジタル署名を追加することで受取人しかそのコインを使えないようにするようです。 次に Proof-Of-Work について、ブロック内には直前のブロックのハッシュが含まれているため、前のブロックを変更する場合は後続のブロックのハッシュの再計算が必要になるがこれは計算量が大きく現実的でないため改ざんに強いようです。

元の論文だけだと具体的なイメージが掴みづらいので次に Mastering Bitcoin を読んでみました。

Mastering Bitcoin

www.amazon.co.jp

続きを読む

ファイル監視ツール開発日誌20210131

ファイル監視ツールの方をちょくちょく進めてまして、正規表現での検索は動くようになりました。 f:id:steavevaivai:20210131233635g:plain 正規表現の条件を複数設定できるので、いくつかの条件でまとめて絞ってみたい場合などはこれで結構楽に管理できるかもしれないです。最初は検索だけできればよい気がしていたのですがせっかくブラウザで動かすのでfilterかけたりmapしたり出来ても良いのかもしれないと作っている最中に思いました。

続きを読む