pleasure!福岡でCloudとかBlockchainとか。GrinGrinのトランザクションのトランザクションフローを見てたら、オリジナルのMimblewimbleと署名プロセスが少し変わってたのでまとめてみた。Transactionで導入されたコインの量を秘匿する機能。コインの量をBitcoinのような整数値ではなく、以下のような準同型性のコミットメントとして管理することで取引の当事者以外はコインの量を知り得なくする仕組み。HGとHは同じ楕円曲線上の異なる生成点。rはブランディングファクターで、vがコインの量。トランザクションのアウトプットは全てこのコミットメント持つ。Transactionを単純に量の秘匿に使うだけでなく、scriptPubkeyも無くしこのコミットメントに集約している(ブランディングファクターが秘密鍵の役割を果たす。Transactionの仕組みの詳細については先日GBECで解説したスライド参照↓www.youtube.comMimblewimbleのトランザクションMimblewimbleでは、Bitcoinのように各インプット毎にそれぞれ署名があるわけではなく、トランザクション毎に1つの署名が作られる。Commitmentのブラインディングファクターの総計から作られる。Commitmentのみが存在する。それ以外に、コインをロックするような公開鍵の情報などがセットされているわけではない。その状態でどうやってコインを取引するための署名を作るのか疑問に思うが、以下の手順で署名は作られる。アリスが以下の2つのコミットメントを持っているとする。6Hそれぞれブラインディングファクターが35と93、コインの量が4と6で2つ合わせて10コイン持ってることになる。この状態で、上記2つのコミットメントを使ってアリスからボブに7コイン送る場合、以下のような手順でトランザクションを構成することになる。手数料は1コインとする。アリスはお釣り用のコミットメントで使用するブラインディングファクターをランラムに選択する。これを47とする(※実際のブラインディングファクターはもっと巨大な値)。アリスは自身が管理するブラインディングファクターの差分(インプットの全ブラインディングファクターからアウトプットの全ブラインディングファクターを差し引いたもの)を計算する。−81アリスはトランザクションの雛形とブランディングファクターの総計(-81)をボブに送る。ボブはブラインディングファクターをランダムに選択する。