意味のある暗号化されたデータをブロックチェーンにいれてみた。

1bytes 0.5satoshiになったんですが、ビットコインの値段が上がってしまって恩恵がない...
でも各ツール系は0.5がデフォのfeeになるようにアップデートされてきました。
さらにトランザクションあたり1GBになったそうなのです。そこまでの容量のものを上げるには価格もしくはfeeがまだ高すぎる。

そもそも制限意識したことなかったが、制限に到達した場合はOP_PUSHDATA4とか?分散とかで乗り切っていたらしい。
それもジェネシスでもどりんこしたので、基本的にはもう制限は意識しなくてよくなった。

ということでdatapayも0.0.18を使っていたが0.0.22にアップデート。
ついでにdatabuttonなるものがあるらしいのでいれた。しかしこれが転機となる。

nodeモジュールのアップデートとかではエラーでてうまく行かなくて、検索したらnode_modules自体作り直せみたいにあって、
ちょっとnpm?のモジュール周りいまだに弱いよね。簡単に壊れる。書き込めないよというエラーだった。自分が壊しただけかもしれんけど...。
検索すると特定のディレクトリにインスコするパターンとグローバルにパスを通す場合があるらしく、
そっちでやっとくといいらしい?

mkdir ~/.npm-global
npm config set prefix '~/.npm-global'
touch ~/.profile
export PATH=~/.npm-global/bin:$PATH
source ~/.profile

これ系の記事はいろいろある。これを実行してからインスコしなおすとここがデフォのディレクトリになる。

ls -al /*****/.npm-global/lib/node_modules/

この配下にインスコされた最新がね。package.jsonはどうなったんや...よくわからん。

  • datapayについては今回は、暗号化したもので大きいデータをアップするテスト
  • databuttonはとりあえずサンプルとして設置テストをしてみる

多分、datapay+databuttonで必要なsatoshiをブラウザ上でpay出来ると予想。
そうすると前回みたいに目算と実際に支払うsatoshiが違うなんてことも起きない?とりあえずやってみる。

https://api.bitindex.network/api/v2/addrs/balance?address=アドレス

これいままで使ってきたけど無料ではなくなったみたい。
システムに組み込むなら支払うべきだが、こちらはまだテストの前のテストレベルほかのサービスを使う。

https://whatsonchain.com/address/アドレス

こんな感じ。whatsonchainはアドレスもtxもなんでもフリーワードで検索できる。

https://blockchair.com/bitcoin-sv/address/アドレス

これもあり。こちらはさらにいろいろなブロックチェーンの検索が出来る。こりゃすごい。

MatterCloudさんいままでありがとう。

話を戻してdatabuttonの設置テストは、githubにdemoがあるので、そのhtmlをブラウザで開けばもう完成。
github.com

ただ、アドレスが誰かのが入っているので、別に誰宛でもいいけど迷惑かけてはあれなんでdatapayの時同様にmemo.cashの0x6d02にしておく。
支払いは、サーバで作成したシークレットキーやアドレス、そのアドレスにビットコインは不要。なぜならdatabuttonはmoneybuttonとの連携だから、払うのはmoneybuttonのアカウントだ。

とりえあず小さい画像でやってみよう。価格高騰でこれでも貧乏性との闘いだ。以前のdatapayで上げた画像をdemohtmlであげてみようとしたところ。

おや?(画像参照)
f:id:online106:20200213202117p:plain

7086satoshi !??
0.00007086 BSV だよね...やっぱ7000satoshi...

しかし約2.9円。そうか前回たしか14211satoshiだったからだいたい半分か。すごい!けど価格が上がったから、前回より日本円は掛かってる、ウゼェ(笑)
無事上がりました。楽すぎる。これはサンプルなので暗号化せずにあがった。しかしこれだけなら楽だな。

と、いうことでdatapay+databuttonの検証は終わり今回は"binary"なのでこの仕組みで暗号復号で上げられる方法を試さないといけない。
最近のウォレット系はアドレスを都度生成するので残高がどうとかが簡単にバレない。素晴らしい。しかし今の内からコツコツ勉強しないと、5年後とか何が何だか分からなくなりそう。
キーレスやパス紛失時の復旧など、今後はより安全なものに変わっていく。中身は知らなくてもいい、そういうもんだと思えば。テレビ、冷蔵庫、エアコン、電子レンジと同じ仕組みは知らなくても便利に動くという事実だけでいい。

最後に大きな花火、大きいファイルを暗号化してアップしてみる。暗号化はいろいろあるのでそこは簡略化して暗号化済みの文字列をあげるとする。ただし大きなデータだ。
3M程度のファイル暗号化したら5Mくらいになる。...なんとかならんかこれ...ってことでいくつかのファイルで試算。

5,202,840 bytes
2,601,420 satoshi
0.02601420 bsv
約1000円

1,637,120 bytes
818,560‬satoshi
0.00818560 bsv
約320円

366,592 bytes
183,296‬satoshi
0.00183296 bsv
約70円

1000円...現実的じゃねーぞ。てか3MBはデカすぎる。これはファイルが悪い。そして暗号化で倍近くなるのがキツイ。しかし復号化ひつようだしな。
nakasendoSDKとhandcashSDK試してみるか...それも次回への伸びしろということで、今回は約70円の暗号化したファイルをアップしてみるテスツ。

今回は面倒なので、datapay+databuttonのサンプルで上げてしまう。ファイルではないバージョンのサンプルも概要に記載されている。それがこれ

databutton.build({
  data: ["0x6d02", "hello world"],
  button: { $el: "#button" }
})

"hello world"を暗号化文字列にする。
これだとtx見れないので、サンプルhtmlのbutton.onPaymentは付ける。

よし...やって見よう...。ちなみに"hello world"だと0.00000111BSV / 0.04円ですね。
一番安い暗号化ファイル。70円を実装した結果...moneybuttonは想定したsatoshiでした。

刻んでみたところ1秒もたたないくらいでコミットした模様でtxが表示された。
しかしトランザクションブラウジングしようとしたところそんなもんはないと出た。
これもしかして容量が上がるとすぐに出ない奴かな?とりあえず10分待つか...

10分待ってようやく出た。ちょっと焦った。もしやjs壊れてたんじゃとか。まぁそれならエラーでとまるけどね。

で、今回は取得をAPIに頼る。前回は仮で文字列コピペで終わらせたが今回はちゃんとチェーンから引っ張ってそれを描画してみるテスツです。
前回のクエリ例を参考にさきほどのトランザクションを取得
https://genesis.bitdb.network/q/************

{
  "v": 3,
  "q": {
    "find": {
      "tx.h": "トランザクション"
    }
  },
  "r": {
    "f": "[.[] | .out[0] | {res: .ls3} ]"
  }
}

無事取れた。URLはヘッダーにkeyを入れる必要がある。暗号復号の方法は暗号なので一応伏せておく。
これでjsonで暗号化された文字列がまま取得できたので、無事復号化。これにより元のデータを取得できた!

今回の件で、
■パブリックブロックチェーンに暗号化したデータをアップし、クラックでもされん限り安全にデータをアップで来た。
この暗号復号も他にも困難にする方法はある。例えば分割する。そして関係なさそうに偽装する。関係ないものと混ぜるなど。
まぁそこまでしなくてもクラックされたら困るデータでもないんだけど、一応プライバシーの観点ね。
■登録さえしてしまえば、今後永遠に無料でデータを取得できるストレージができた。ひ孫にもワシのtxじゃと伝承できる。
■データが大きいと10分待つ必要があった。本来は待つんだけど、早めに閲覧できることができるので、その恩恵がないと不便。
■ウォレット(デバイス)からマイナーへデータを送れるが、仲介する自分は素通りするので法律に触れない代わりに自分に全くメリットがない。

など分かったことや悩む点が出てきた。あとは優秀なSDKがないか旅をしなくてはならない。