暗号通貨に関する事など

暗号通貨に関する覚書など。メモや日記。

※技術的なことに関して、間違っていたらコメントから指摘していただけると泣いて喜びます

【仮想通貨NEM】 NEM2-CliでCatapultネットワークに触れる1

はじめに

 仮想通貨NEMのシステムをアップデートさせるために必要な中核機能Catatpultがオープンソース化してしばらく経ちました。Catapultは中核機能であり、エンジンのようなものなので、NEMとして使えるように部品を付けたり設定を変える作業が残っているので、NEMのネットワークがアップグレードされるのはまだ暫くかかるかなと思っています。



catapult-server 各ライブラリ・ツール群の公開されているGithubページ


 ちなみに、NEMのノードは"NIS ( NEM Infrastructure Server )"と呼ばれ、アップグレードに伴い、現在のノードとCatapultを積んだノードとを区別するために、現在のノードをNIS1、Catapultを積んだノードをNIS2と呼んでいます。


 また、Catapult共に、それを利用するためのツール・ライブラリ群もまとめて公開されました。NEM2-SDK( NEM2 Software Development Kit )やNEM2-Cli( NEM2 Command Line Interface )などです。


 そしてそれらのツール群に加えて、TechBureau社のGithubから勉強用に、Docker-composeを利用してローカルPC上に小さなmijinテストネットワークを作れるCatapult Service Bootstrapが公開されています。


 今回は、それらを利用して...

  1. ローカルPC内のDocker仮想環境上でmijinネットワークを作り
  2. NEM2-Cliを利用してCatapultの機能を利用してみる

 までのことを記事にしようと思っています。


 なお、長くなると思うので記事は別れると思います。



NEMとmijinとCatapult

 実際の手順を書く前に、これを説明せねばと思っています。


 今回、仮想環境上に小さな " mijin " ネットワークを作り、 "  NEM2-Cli  " を使い、 " Catapult " サーバーと通信をしてみるわけですが、そもそもそれらの関係が分かっていない人も少なくないと思うので、図にしました。


 図のとおり、NEMもmijinも同じCatapultという中核機能を利用しているため、その中核機能を利用するだけのクライアントプログラムは、NEMでもmijinでも動くことを意味します。


 また、逆に、NEM独自に追加・制限された機能はmijinクライアントでは利用できず、mijinで構成された各ネットワークに独自で追加・制限された機能がもしあればその機能は、NEMクライアントでは利用できないことも意味します。


 今回は、Catapultの中核機能だけを利用するので、mijinネットワークでNEM2-Cliが利用できるということです。



長くなったので今回はここまで(続く)

【NEM-Catapult】 Transaction

※最終更新:2018.3.28

はじめに 


 今回はTransactionについてです。


Transactionの種類

 transaction は今これを書いている時点では10種類あります。ドキュメント記載順に...

  1. transfer transaction
  2. register namespace transaction
  3. mosaic definition transaction
  4. mosaic supply change transaction
  5. modify multisig account transaction
  6. aggregate transaction
  7. cosignature transaction
  8. lock funds transaction
  9. secret lock transaction
  10. secret proof transaction
 です。簡単に説明を続けます。


Transaction

 全てのトランザクションは前提となる" Transaction "の構造の上に乗っかっています。なので、全てのトランザクションは共通して下記枠内の情報を保持しています。

type      トランザクションの種類

version number バージョン

deadline    このトランザクション承認の締め切り

fee      手数料

signature    署名

signer     署名者の公開鍵

 以降、各トランザクションが持つフィールドはドキュメントに書いてあるのでそこを参照してください。



Transfer transaction

 Transfer (送信) 用。

 これだけだとわからないのですが、amountフィールドが無くなったかのな?(xemがmosaicと完全に同列の扱いになったから?)



Register namespace transaction

 register namespace (ネームスペース登録)用。 

 Durationフィールドを持ち、取得期間が指定できるようになったようです。



Mosaic definition transaction

 mosaic definition (モザイク定義)用。


 Mosaicpropertiesを見る限りだと、Levy機能なくなるのかな?
 修正
 下記リンクのmosaicDefinitionTransactionの使用例を見ると分かりますが "levyMutable: false" という記載があるとおり、Levy機能はNIS2でも実装されるようです。アーリアクセスとしては提供してませんよということのようです。(良かったね


また、ここにもDurationがあるので、namespaceに加えて、mosaic単体でも使用期間を指定できるようになっているようです。



Mosaic supply change transaction

 mosaic supply change (モザイク供給変化)用。



Modify multisig account transaction

 modify multisig account (マルチシグアカウント修正)用。



Aggregate transaction

 アグリゲートトランザクション機能提供用。
 新機能としては目玉機能の一つではないでしょうか。複数のトランザクションを同一ブロックに入れたいときに、このトランザクションを利用します。ちなみに、AggregateTransactionの中に含めるInnerTransactionとしてAggregateTransactionを指定することは出来ません(一層ということ)


 この機能を利用するときの注意点として書いてあるのが、AggregateTransactionを利用する前に必ず後に紹介するLockFundsTransactionを利用して10xem(最初の仕様)を固定しないといけません。また、署名は次に紹介するCosignatureTransactionで別に行われます。なので、アグリゲートトランザクションを利用するときは...

  1. LockFundsTransactionを送信・承認(10xemをロック)
  2. AggregateTransactionを送信 (中にInnerTxを含んでいる)
  3. 必要な分だけCosignatureTransactionで署名(送信)
  4. 署名が揃えばAggregateTransactionに入れられているInnerTxは認められ、送金が行われる
 もしLockFundsTransactionに定められた期限までにAggregateTransactionの署名が揃わなかった時、LockFundsTransactionで固定された10xemは有効期限切れの指定高さブロックを掘り当てたハーベスターのものになります。(これはスパム対策かなと思っています)

 AggregateTransactionと全てのCosignatureTransactionは一緒のブロックに入れられないといけないのかな?それとも別々で入れられるのかな?この辺がちょっとまだ曖昧です。(教えてください)


Cosignature transaction

 AggregateTransactionへのcosignature (連署名)用



Lock funds transaction

 Lock funds (資金ロック) 用。AggregateTransactionを利用する前、これを利用して10xem(現時点で)資金をロックしないといけません。


 このトランザクションがもつフィールドを見る限りだと、これはAggregateTransactionの前提トランザクションとしてしか利用できない感じかな?



Secret lock transaction

 シークレット(ハッシュ値)を解くまで資金をロックすることが出来るトランザクションです。シークレットが説かれると、このトランザクションで指定した相手にモザイクの送信が行われ、このトランザクションで指定した期限までにシークレットが解かれなければ、元の持ち主のもとにロックしたモザイクが返るという仕様のようです。


 フィールドを見てもらうと分かりますが、ハッシュ値とハッシュタイプ(アルゴリズム)を指定できるので、署名ではなくて単なる秘密のキーワードが答えの鍵になるようです。


 これ、なんか面白くないですか?



Secret proof transaction

 secret lock transaction に解答をする為に利用されるトランザクションです。


 以上各トランザクションの簡単な説明でした。



さいごに

 ここでは私が読んでそれについて日本語で書いてますが、NEMのドキュメントで使われてる英語ってそれほど難しくないです。ここまで読んでもらってこんなこと書くのアレですが、Google翻訳で読めるのでそっちで読んだほうが良いですよ。ドキュメントに書いてある内容以上のことを書いているつもりもないですし…

【NEM-Catapult】 Multi-Level Multisig Accounts(MLMA)

はじめに

 WhitePaperに続き、ついにCatapultのドキュメント来ましたね。



 ちなみに、中にも注意書きが書いていますが、このドキュメントは現時点ではMijin-testnet versionとして書かれています。


 で、読んで新しい概念だったりするものは気が向く限り文章にしようかということで書くことにしました。この記事に限らずですが、間違っていたら修正します。コメントなどで教えて頂けると助かります。


 今回は FNUDAMENTALS -> MultisigAccount の中にあるMulti-Level Multisig Account (MLMA)についてです。


Multi-Level Multisig Accounts (MLMA)の概要


 要するに「マルチシグアドレスの連署者としてマルチシグアドレスを登録できるよ」という話です。これによりマルチシグアドレスを利用して階層構造をアドレスで表現することが出来ます。また、MLMA accountはAND/ORのロジックをmulti-signature transactionsに追加するようです。


 連署者に選ばれたマルチシグアドレスは今まで同様操作権限を連署者に委託していて直接署名が出来ないので、そのマルチシグの連署者アカウントから署名することになります(文字にするとややこしいのでドキュメントページの一番下の図を見れば解ると思います)


 mijinの紹介資料のP29,30にあるような階層構造をマルチシグで表現できるようになったんですね。下記リンクからpdfが見れるのでそこを参照してみてください。


MLMA使ってみる

 追記予定


さいごに

 細かい話は使ってみてからまた・・・