空谷に吼える

ブロックチェーン/DLTまわりのなにかしらを書いていく所存

Blockchain Tableとビュー、INSTEAD OFトリガーを組み合わせて更新が入る情報をいい感じに扱えるようにしてみた

なんの話

  • Oracle DatabaseのBlockchain Tableは追記オンリーなので、Blockchain Table上である情報の更新を表すにはバージョン番号を振りつつ新しい行を追加していく
  • Blockchain Tableとビュー(VIEW)を組み合わせると「ある情報の最新のバージョン」だけを抽出できて便利
  • さらにビューに対してINSTEAD OFデータベーストリガーを仕掛けておくと、ビュー上の最新断面に対して更新操作を行うことができるようになり、裏でBlockchain Tableに履歴が追記されていく

★2023/5/8 追記:Oracle Database 23cで追加された機能強化でもう少し簡単、便利に実装できるようになりました。23c以降でこうしたことをやりたい場合はこちらのポストを参照ください。

続きを読む

Hyperledger Fabric入門

Blockchain GIGというイベントでHyperLedger Fabric入門というテーマでセッションを持ったので、その資料を以下に公開しています。

speakerdeck.com

今までパラパラと作ってきた資料にスライドを追加したり書き直したりして、「Hyperledger Fabric(再)入門」としてまとめています。

最近は有志によって公式ドキュメントが日本語に翻訳されたり、クラウドのテンプレートやBaaSによって環境構築がかんたんにできるようになったりと、Hyperledger Fabricを学び始めることのハードルは下がってきています

一方で、Hyperledger Fabricにはまあやはりなかなかに複雑なところがあったり、独特なことをやっていたりしてEthereum/Quorumなど他の基盤から入ってきたひとには混乱しやすいところがあったりするので、今回の資料では読んでいくうちにそのへんを解きほぐせるように重点的に説明しています。

今からHyperLedger Fabricに入門するぜという方は、ひとまずこの資料を読んでいただいてから、必要に応じて公式ドキュメントで詳しいことを調べたり、自前で構築したいという方はネットワーク構築チュートリアルにトライしてみたりすると良いと思います。

Blockchain TableにドキュメントのPDFファイルを保存してOracle Textで全文検索してみた

なんの話

  • Oracle DatabaseのBlockchain Table上にドキュメントファイル(PDF)をBLOB形式のカラムで保存する
  • そのドキュメントファイルの内容に対してOracle Textで全文検索する
続きを読む

Oracle Blockchain Platformのリッチヒストリーデータベースの機能強化

Hyperledger Fabricベースのブロックチェーン基盤であるOracle Blockchain Platformには、独自の機能としてそのブロックチェーン台帳のデータをブロックチェーン外部のOracleデータベースに複製する機能(→リッチヒストリーデータベース機能)が備わっています。

で、このリッチヒストリーデータベース機能について、最近のアップデートで機能強化が入り、ブロックチェーン側から複製できるデータの種類が増え、業務的な観点だけでなく、Chaincodeの開発やらHyperledger Fabricのお勉強の観点からもさらに使い勝手がよくなりました。

さらに、複製先のOracleデータベースのテーブルとして、Blockchain Tableを利用可能になりました。これにより、ブロックチェーン台帳上のデータだけでなく、リッチヒストリーデータベースによって複製されたデータベース上のデータについても、耐改ざん性および証跡性を備えたかたちで保持できることになります。ついでにChannelごとに複製先のデータベース(のインスタンス)を選べるようにもなっています。

このエントリではリッチヒストリーデータベース機能について、また、これら機能強化について紹介していきます。

続きを読む

WindowsでHyperledger Fabric Client SDK for Node.jsを使ってクライアントアプリケーションを開発するときの注意点

最近Node.jsの勉強をしており、「おっそういえばHyperledger FabricにはNode.js用のSDKがあったな、よしいっちょなんかアプリでも作ったろ!」と思ったところまではよかったのじゃが、Windows上で開発を始めてしまったために初手からめちゃくちゃ苦労してしまったとさ……ということでハマりポイントをメモっておきます。

結論

絶対にWindowsを使わないとならない理由(そのようなものがどこかにあるとして)を抱えていない限りはWindows上でHyperledger Fabric SDK for Node.jsを使って開発を行うのはやめておいたほうがいいと思います。MacLinuxを使って開発するか、クラウド上などに別途Linux環境を構築し、そこにWindows上からVisual Studio CodeのRemote Development機能を使ってアクセスしてリモート開発をするのをおすすめします。

それでも俺はWindowsで開発するんだ!というアツい想いを持ったひとは以下をよく読んでから着手すると良いでしょう。

続きを読む

Oracle DatabaseのBlockchain Table機能のご紹介

そういえばこのブログでここまで触れて来なかったんですが、Oracle Databaseに新しい機能、その名もBlockchain Tableというものが導入されています。

先だってOracle Database Technology NightというイベントでBlockchain Tableについて話したスライドがこちら↓にあり、これを読むと概要がだいたいわかっていただけるかと思いますのでぜひ一読ください。前半ではエンタープライズ領域でのブロックチェーン技術活用の文脈の中で耐改ざん性、証跡性を備えたデータベースが求められ登場してきた背景を、後半ではBlockchain Tableの特性、具体的な仕様や想定ユースケース、利用メリットなどを紹介しています。

speakerdeck.com

<<2021/6/4追記 こちらに少し増補した版のBlockchain Table紹介資料を公開したのでこちらもどうぞ。

www.slideshare.net

追記終わり>>

Blockchain Tableを使うには

実はこのBlockchain Tableが新機能として追加されたのはOracle Databaseの20cバージョンでした。20cのリリースは2020年の2月だったのでおおよそ1年前から使えるようになっていたわけですが、この20cは正式リリース版ではない、プレビューリリースという位置づけでした(のであまり紹介してこなかった)。その後2020年12月になり21cバージョンがリリースされたのがBlockchain Tableが正式リリースされたバージョンの一部として使えるようになったタイミング、という顛末です。

で、2021年2月現在、プレビューリリース版の20cバージョンを除くと、Blockchain Tableは21cバージョンと19cバージョン(※後述の前提パッチあり)のいずれかのOracle Database で利用可能です。また、特に追加ライセンスなどは必要なく、Standard Edition2でも利用可能です。

21cバージョンでは最初から利用可能です。既にOracle Cloud上での提供が開始されていますが、そのうちにオンプレミスでも利用可能になる?(知らない)。

19cバージョンにもバックポートされており、前提となるパッチを適用することにより利用可能になります。2021年2月現在では、RU19.10.0.0のアップデートを適用したうえで、個別パッチ32431413の適用が必要です。19cバージョンはサポート期間が長いLong Termリリースなのと、前述のパッチ含め既にオンプレミスでも利用可能になっているのでこちらのほうが手を出しやすいかも?

Blockchain Tableの具体的なテーブル作成方法やドキュメントへのリンクなど参考情報は上述のスライドに載せているのでそちらをご覧ください。

Hyperledger Fabricでアセットの履歴を台帳上にどのように持っておくかを考える際のポイント

台帳上でなにかしらのアセットについての状態が管理されており、その最新の状態だけではなく過去の状態(過去バージョンの値、履歴)もちょくちょく参照したいんだよな~ということがあります。

例:NFTトークンのユースケースで、あるNFTトークンについて過去の所有者変遷の履歴を参照したい

また、単に参照するだけならば台帳のデータを外部のDBにIndexingしておいて、その外部DB上で好きなように検索、参照してやってもいいんですが、更新トランザクションにおいて過去バージョンの値をなんらかの条件などに用いたいという場合にはそうもいきません(外部DBと台帳の一致は保証できないため、必ず台帳上の過去バージョンの値を用いる必要があるため)。

例:あるNFTトークンの所有権を移転するトランザクションで、過去に特定の人物が一度でもそのトークンを所有していた場合にはそれ以上の所有権の移転を不可としたい(AMLでブラックリストを管理しているケースなどを想定)

そういった場合にHLF(Hyperledger Fabric)ではどういうかたちでアセットの履歴のデータを台帳(State DB/World Stateとブロックチェーン)上で表現しておくべきかと検討することになります。また、特に更新トランザクションで過去バージョンの値をなんらか用いる場合には、履歴の持ち方を工夫しておかないと後述するPhantom Read検出不能問題にあたり整合性の担保が実装不能になったりするので、これは非常に重要なポイントになります。

そうした検討において結局毎度同じようなことを考えているので自分用の備忘として&同様の検討をされる方用のヒントとしてまとめておきます。

続きを読む