kharukaのブログ~お金と技術とキャリア~

Edu Fin~金融×教育~若いうちからお金について学ぶってだいじ!学んだテクノロジーはみんなの財産。過去、現在、将来の人生についてのブログ

【海外ドラマ・映画】年末年始は海外ドラマ・映画を観よう

最近はまっている海外ドラマ・映画

スター・ウォーズ

【海外映画】スター・ウォーズ - 海外ドラマ・映画を観る

スター・ウォーズ エピソード9 スカイウォーカーの夜明け

絶賛、上映中!

ディズニーシアターなどで復習してから、映画館に足を運びましょう。

Disney THEATER(ディズニーシアター)

Disney THEATER(ディズニーシアター)

  • 発売日: 2019/12/20
  • メディア: アプリ

ターミネーター

ターミネーター:ニューフェイトはまだ上映中?

U-NEXTなどで復習してから、映画館に足を運びましょう。

参考

【数学】二次式の簡単な証明 by Po-Shen Loh

グラレコ

二次方程式の解

数学が好きな人も嫌いな人も2次方程式を習ったことでしょう。2次方程式を解くための方法は歴史を通しても共通であり、世界中の数十億人という人がわたしたちと同じ方法を学んできました。

しかし、最近になって天才数学者ポーシェン・ロー氏によって二次方程式の簡単で新しい解き方が考案されました。数学界の歴史に刻まれるような大発見によって、私たちはややこしい二次方程式の解き方から解放されたのです。

研究論文の詳細は「arXiv」で公開されました

二次方程式の解き方にイノベーションが起きました。

これからの学生は、二次方程式の解の公式を使わなくなるかも知れません。

天才数学者Po-Shen Loh氏の様に学者だけではなく、教育者としても社会に貢献していきたいですね。

教育現場への影響

今は、学生がオンラインで世界中から情報をキャッチアップ出来る時代です。

教員もポーシェン・ロー氏の様な学者の方々から情報をキャッチアップしていかなければ、教育現場は混乱してしまうでしょう。

数学の教科書が刷新されるのも時間の問題。

参考

使える日常英会話フレーズ(乗り物編)

シチュエーション

新幹線や飛行機に乗っている時に座席を倒したい時。

座席を倒しても良いですか?

  • Could I recline my seat please?

  • Excuse me, do you mind if I recline my seat?

canよりはcouldやwouldを使った方が丁寧ですよね。

参考

PoL(ポル)1周年記念イベント~The Future of Blockchain~

エンジニアスクールFLOC

Pythonで動かして学ぶ!あたらしいブロックチェーンの教科書 (AI & TECHNOLOGY)

Pythonで動かして学ぶ!あたらしいブロックチェーンの教科書 (AI & TECHNOLOGY)

イベント概要

PoL1周年を記念してイベントを開催します。

この1年、本当に多くの出来事がありました。ブロックチェーン業界はまだまだ黎明期です。

共に協力しながら激流を乗り越えるため、ぜひこの機会にブロックチェーン業界における横の繋がりを作ってみてください。

第一部では、PoLを運営する株式会社techtecの田上より、これまでとこれからのPoLの取り組みについて発表します。

第二部では、PoLの誇る全グローバルパートナーに集結していただき、ブロックチェーンの未来について以下のトピックを中心に議論を展開します。

  • 分散型金融(DeFi)の現状と課題

  • 日本人にとってのDeFiのメリット

  • ユーティリティトークンの存在意義

  • なぜEthereumなのか

  • 中国、シンガポールデンマークの動向:規制や資金調達、実用化の観点から

第三部は、PoLユーザー同士によるミートアップの時間となります。飲み物や軽食を用意してお待ちしています。(素敵なプレゼントがあるかも!?)

※本イベントは、全て日本語で行われます。

当日のスケジュール

時間 セッション 内容
18:45-19:15 受付 受付票を表示してお待ちください
19:20-19:40 第一部 「PoLのこれまでとこれから」 PoLの取り組みによって得た知見や、海外の潮流について発表します techtec 田上智
19:45-20:30 第二部 「The Future of Blockchain」 PoLのパートナー陣と共に日本と世界におけるブロックチェーンの現在と未来を語ります PoL × ALIS × MakerDAO × Kyber Network × 原本
20:30-21:30 第三部 「PoLコミュニティMeetup」 PoLコミュニティで横の繋がりを作りましょう! コンテンツとして、PoLの各種数値や学習傾向などをシェアします

第一部

株式会社techtec / 田上 智裕 氏

これまでのPoLの取り組み

日本は大学でのブロックチェーン教育が世界の大学と比べても遅れている。

サービスPoL(Proof of Learning)のリリースへ。

PoLトークンを付与し始めてから学習継続率が4倍に!

これからのPoLの取り組み

  • Makerカリキュラム公開!

12/10(火)10:00

  • Braveカリキュラム制作決定!

いろいろ未定

〜事前募集受付中、2020年2月正式公開〜

  • アウトプットを評価する新サービス

12月中のリリース予定

第二部

ゲストスピーカー

Kyber Network Japan community manager / 堀次 泰介 氏

MakarDAO Japan Community Lead / Kathleen Chu 氏

CEO at ALIS Co., Ltd. / 安 昌浩

Brave Software Asia CMO / Ryotaro Chikaki

原本 代表取締役 / Yangtian Wang 氏

・分散型金融(DeFi)の現状と課題

・日本人にとってのDeFiのメリット

・ユーティリティトークンの存在意義

・なぜEthereumなのか

・中国、シンガポールデンマークの動向:規制や資金調達、実用化の観点から

DeFi

https://japancryptocoin.org/2019/05/16/defi/

Why DeFi

銀行口座を持っていない人にもサービスを提供できる

1.2008~2009年の金融危機があった

2.すべての人が安定して利用できる

3.透明性が高い

4.Makerは金融業界で安定性を高めるサービスを提供

土日は使えない、インターネットバンキングはとは?

日本におけるDeFiの意義やメリット

日銀の緩和、銀行に貯金

日本だけの政策ではない

マイナス金利もおかしなくない

資産を効率的に増やす方法が必要、それがDeFi

日本の国力をあげる

ゲーム感覚でassetを回せる

コンパウンド

https://www.ifinance.ne.jp/glossary/derivatives/der110.html

ユーティリティトークンの存在意義

なぜ?ALISなの?Bitcoinじゃダメなの?

イーサリアム依存したくない。

経済圏を大きくしていきたい。

ALIS大量ユーザーは優遇したい

資産、ガバナンス

BraveでBitcoinを配ってたことも。しかし、流動性が生まれない。

緩い使い方の方が流動性がある。

中国習近平国家主席の発言について解説とその後の動き

https://hi-blockchain.world/china/post-1326/

仮想通貨の取引はまだ厳しい

サンドボックス海南省

日本における今後のブロックチェーン業界に必要なことは何か?

法律的に変わって欲しい。

規制は大事がイノベーションが阻害されている。

シンガポールはそこのバランスが良い。

取引所がR&Dを進めるべき

取引所、クリプトファンドが資本を入れている

プライバシーを守りたい。ブロックチェーンを使っているとは言わない。

ブロックチェーンは仕組み、ブロックチェーン×何か?

会場からのQ&A

1.Braveがなぜ?日本に注力、遅れている市場に参入するのか?

Twitter同様やらないてはない。

2.どこを勉強した方がいいのか?

ソフトエンジニア

クリプトゾンビ、solidity

コミュニティーなどで聞く

カイバーはコミットはまだできない?はい。

defijapanコインテレグラフ

3.Bitcoinの思想とは掛け離れて、結局はセキュリティトークンの経済圏争いになるのでは?

コンソーシアムやパブリック、ビットコインイーサリアムなどの各プロジェクトの歩み寄りは見られる。

4.???

DeFiで保険が足りない。コードを監査する企業が何か

パーミッションレスが当たり前。

ブラックスワン、どうすれば良いか?

5.日銀黒田総裁、ステーブルコインの話があった。日本国内でステーブルコインはどのように使われるのか?

第三部

PoLコミュニティMeetup!

グラレコ

仮想通貨取引所

Liquid by Quoine

ウォレット

参考

ビットコインとブロックチェーン

ビットコインとブロックチェーン

【Libra】Libraをさわってみた

エンジニアスクールFLOC

Pythonで動かして学ぶ!あたらしいブロックチェーンの教科書 (AI & TECHNOLOGY)

Pythonで動かして学ぶ!あたらしいブロックチェーンの教科書 (AI & TECHNOLOGY)

Libra

Facebookの独自ブロックチェーンLibra

Libraのミッション

Libraのミッションは「多くの人びとに力を与える、シンプルで国境のないグローバルな通貨と金融インフラになる」ことです。

FBは世界通貨をつくろうとしているようです。

Libraとは

Libra通貨

通貨の単位は「Libra」です。

Libraリザーブ

Libraは、「Libraリザーブ」と呼ばれる実在の資産のリザーブによる十分な裏付けと、Libraを売買する取引所の競争力のあるネットワークによるサポートを有する、安定性のあるデジタル暗号通貨としてデザインされています。

Tether(USDT)などは価格の安定を目的にUSDにペッグ(連動)させています。

LibraはUSD、EUR、JPY、GBPの4法定通貨を裏付けとしたLibraリザーブで価格安定を図ります。

Libraブロックチェーン

Libra通貨の基盤は「Libraブロックチェーン」です。

「Move」は、Libraブロックチェーンに独自の取引ロジックや「スマートコントラクト」を実装するための新しいプログラミング言語です。

EthereumのSolidityに相当する、MoveがLibraブロックチェーンで採用されています。

Libra(testnet)インストール

前提条件

All commands in this document assume that:

  • You are running on a Linux (Red Hat or Debian-based) or macOS system.

  • You have a stable connection to the internet.

  • git is installed on your system.

  • Homebrew is installed on a macOS system.

  • yumor apt-get is installed on a Linux system.

1.Clone Libra:

$ git clone https://github.com/libra/libra.git && cd libra

or Download Libra:

$ unzip libra-master.zip

2.Install Dependencies:

$ cd libra-master
$ ./scripts/dev_setup.sh
Welcome to Libra!

This script will download and install the necessary dependencies needed to
build Libra Core. This includes:
        * Rust (and the necessary components, e.g. rust-fmt, clippy)
        * CMake, protobuf, go (for building protobuf)

If you'd prefer to install these dependencies yourself, please exit this script
now with Ctrl-C.

Proceed with installing necessary dependencies? (y/N) > y
...

Ubuntuだとうまくいかず、macOSで検証。

前提条件をみたしてないから?やっぱり?

Ubuntuも対応して欲しいなー。

...
Proceed with installing necessary dependencies? (y/N) > y
Installing Rust......
Rust is already installed
info: syncing channel updates for 'stable-x86_64-unknown-linux-gnu'
info: checking for self-updates

  stable-x86_64-unknown-linux-gnu unchanged - rustc 1.35.0 (3c235d560 2019-05-20)

info: component 'rustfmt' for target 'x86_64-unknown-linux-gnu' is up to date
info: component 'clippy' for target 'x86_64-unknown-linux-gnu' is up to date
Installing CMake......
有効なリポジトリーがありません。
 「yum repolist all」を実行し、所持するリポジトリーを参照してください。
 「yum-config-manager --enable <repo>」でリポジトリーを有効にできます。

3.Run the CLI:

$ ./scripts/cli/start_cli_testnet.sh
...
Connected to validator at: ac.testnet.libra.org:8000
usage: <command> <args>

Use the following commands:

account | a 
    Account operations
query | q 
    Query operations
transfer | transferb | t | tb 
    <sender_account_address>|<sender_account_ref_id> <receiver_account_address>|<receiver_account_ref_id> <number_of_coins> [gas_unit_price_in_micro_libras (default=0)] [max_gas_amount_in_micro_libras (default 10000)] Suffix 'b' is for blocking. 
    Transfer coins (in libra) from account to another.
help | h 
    Prints this help
quit | q! 
    Exit this client


Please, input commands: 

libra%

4.Run Your First Transaction:

Libra(testnet)送金

the CLI ClientのRunningチェック

libra% account
usage: account <arg>

Use the following args for this command:

create | c
    Create an account. Returns reference ID to use in other operations
list | la
    Print all accounts that were created or loaded
recover | r <file_path>
    Recover Libra wallet from the file path
write | w <file_path>
    Save Libra wallet mnemonic recovery seed to disk
mint | mintb | m | mb <receiver_account_ref_id>|<receiver_account_address> <number_of_coins>
    Mint coins to the account. Suffix 'b' is for blocking

AliceとBobのアカウント作成

Aliceのアカウント作成

libra% account create
>> Creating/retrieving next account from wallet
Created/retrieved account #0 address 9c1f5e284fefd637769c87fd75f9facc5f0ab3f535fb3a7db899dcdd3f5a00dc

Bobのアカウント作成

libra% account create
>> Creating/retrieving next account from wallet
Created/retrieved account #1 address 69642b7691a5c8f675b9e126ad055f959994a9edc80324e29059885e9523a43f
libra% account list

List Accounts

libra% account list
User account index: 0, address: 9c1f5e284fefd637769c87fd75f9facc5f0ab3f535fb3a7db899dcdd3f5a00dc, sequence number: 0, status: Local
User account index: 1, address: 69642b7691a5c8f675b9e126ad055f959994a9edc80324e29059885e9523a43f, sequence number: 0, status: Local

Libra CoinsをAliceとBobのアカウントに追加

Libra CoinsをAliceのアカウントに追加

libra% account mint 0 110
>> Minting coins
Mint request submitted

Libra CoinsをBobのアカウントに追加

libra% account mint 1 52
>> Minting coins
Mint request submitted

残高チェック

Aliceの残高チェック

libra% query balance 0
Balance is: 110.000000

Bobの残高チェック

libra% query balance 1
Balance is: 52.000000

Submit a Transaction

アカウントのシーケンスをクエリ

libra% query sequence 0
>> Getting current sequence number
Sequence number is: 0
libra% query sequence 1
>> Getting current sequence number
Sequence number is: 0

AliceからBobへ10Libra送金

libra% transfer 0 1 10
>> Transferring
Transaction submitted to validator
To query for transaction status, run: query txn_acc_seq 0 0 <fetch_events=true|false>

transaction statusをクエリ

libra% query txn_acc_seq 0 0 true
>> Getting committed transaction by account and sequence number
Committed transaction: SignedTransaction { 
 raw_txn: RawTransaction { 
    sender: 9c1f5e284fefd637769c87fd75f9facc5f0ab3f535fb3a7db899dcdd3f5a00dc, 
    sequence_number: 0, 
    payload: {, 
        transaction: peer_to_peer_transaction, 
        args: [ 
            {ADDRESS: 69642b7691a5c8f675b9e126ad055f959994a9edc80324e29059885e9523a43f},
            {U64: 10000000}, 
        ]
    }, 
    max_gas_amount: 10000, 
    gas_unit_price: 0, 
    expiration_time: 1561453406s, 
}, 
 public_key: 5329bd75b441232fd25b8a1c69da9252ffa4c4eb123ece3fe9255aa40f1f3481, 
 signature: Signature( R: CompressedEdwardsY: [234, 122, 132, 248, 8, 38, 17, 244, 250, 159, 53, 8, 138, 251, 180, 34, 162, 112, 211, 95, 63, 12, 10, 41, 166, 172, 252, 106, 12, 197, 202, 213], s: Scalar{
    bytes: [229, 182, 23, 26, 48, 128, 241, 38, 230, 4, 122, 175, 60, 89, 118, 110, 98, 98, 39, 58, 141, 236, 32, 72, 60, 254, 114, 154, 43, 238, 134, 10],
} ), 
 }
Events: 
ContractEvent { access_path: AccessPath { address: 9c1f5e284fefd637769c87fd75f9facc5f0ab3f535fb3a7db899dcdd3f5a00dc, type: Resource, hash: "217da6c6b3e19f1825cfb2676daecce3bf3de03cf26647c78df00b371b25cc97", suffix: "/sent_events_count/" } , index: 0, event_data: AccountEvent { account: 69642b7691a5c8f675b9e126ad055f959994a9edc80324e29059885e9523a43f, amount: 10000000 } }
ContractEvent { access_path: AccessPath { address: 69642b7691a5c8f675b9e126ad055f959994a9edc80324e29059885e9523a43f, type: Resource, hash: "217da6c6b3e19f1825cfb2676daecce3bf3de03cf26647c78df00b371b25cc97", suffix: "/received_events_count/" } , index: 0, event_data: AccountEvent { account: 9c1f5e284fefd637769c87fd75f9facc5f0ab3f535fb3a7db899dcdd3f5a00dc, amount: 10000000 } }

AliceからBobへ10Libra送金

これはチュートリアルから少し脱線した作業でした。。。

libra% transferb 0 1 10
>> Transferring
[waiting Transaction completed, found sequence number 2]
Finished transaction!
To query for transaction status, run: query txn_acc_seq 0 1 <fetch_events=true|false>

送金後のSequence Numberをクエリ

libra% query sequence 0
>> Getting current sequence number
Sequence number is: 2
libra% query sequence 1
>> Getting current sequence number
Sequence number is: 0

送金後のアカウントの残高チェック

libra% query balance 0
Balance is: 90.000000
libra% query balance 1
Balance is: 72.000000

AliceからBobへ20Libra送金完了!

仮想通貨取引所

Liquid by Quoine

ウォレット

▼記事の続きは以下へ。

執筆中です。

参考

ビットコインとブロックチェーン

ビットコインとブロックチェーン

【Liquid Network】Liquid by Blockstream

エンジニアスクールFLOC

Pythonで動かして学ぶ!あたらしいブロックチェーンの教科書 (AI & TECHNOLOGY)

Pythonで動かして学ぶ!あたらしいブロックチェーンの教科書 (AI & TECHNOLOGY)

はじめに

Liquidはトレーダーや取引所向けのサイドチェーンベースの決済ネットワークです。

Bitcoinトランザクションより、決済のスピードが速く機密性も高く、デジタルアセットの発行が可能です。

ここでのLiquidは暗号資産交換所のLiquid by Quoinではなく、Liquid by Blockstreamです。

サイドチェーンとは?

サイドチェーンとは、ビットコインに端を発したパブリックブロックチェーンの「側鎖」となる概念です。サイドチェーンの導入により、今まで複数の仮想通貨が持っていた独自のブロックチェーンが相互に結ばれ、仮想通貨全体を一つのブロックチェーンとして転送することが可能になるとされており、親チェーンからサイドチェーンへの資産移動が簡単・自由に行えるようになる革命的な技術として注目を浴びています。

サイドチェーンは、2014年にBlockstreamにより初めて実装に関するホワイトペーパーが発表されました。2016年11月には、米国特許商標庁よりサイドチェーン技術の特許出願書が公開されています。特許自体は2016年5月に申請されたもので、特許防衛ライセンス(DPL)取得に伴い、一般アクセスが可能になっています。

サイドチェーンの実装に関する論文『Enabling Blockchain Innovations with Pegged Sidechains』は有名ですよね。

Blockstream社とは?

Blockstream社はBitcoinおよびブロックチェーンテクノロジーズのパイオニア企業です。Bitcoin contributorsであり、有名な応用暗号学者であるDr. Adam Backにより、同社は2014年に設立されました。

本社はカナダ・モントリオールにあります。

Dr. Adam Backとは?

Proof of Workを発明した暗号学者。

2008年に発明されたBitcoinの基となるSatoshi Nakamotoの論文『Bitcoin: A Peer-to-Peer Electronic Cash System』のReferencesにも名前が記載されています。

[6] A. Back, "Hashcash - a denial of service counter-measure,"

http://www.hashcash.org/papers/hashcash.pdf, 2002.

仮想通貨取引所

Liquid by Quoine

ウォレット

▼記事の続きは以下へ。

執筆中です。

参考

ビットコインとブロックチェーン

ビットコインとブロックチェーン

【サイドチェーン】Elements code tutorialを読む Part4

エンジニアスクールFLOC

Pythonで動かして学ぶ!あたらしいブロックチェーンの教科書 (AI & TECHNOLOGY)

Pythonで動かして学ぶ!あたらしいブロックチェーンの教科書 (AI & TECHNOLOGY)

▼前回の記事はこちらです。

【サイドチェーン】Elements code tutorialを読む Part3 - kharukaのブログ~お金と技術とキャリア~

Block creation in a Strong Federation - Block Signing

今まで、ブロック生成するためにいずれかのノードから the “generate” command を呼び出していました。デフォルトでは block signing が OP_TRUE であるため、これまではうまくいきました。

$ ADDRGEN1="AzptV6SVTqas3s5pZ5ATc1yvrQ4ojCNXCsJAS95UbwmcZERoN9ob33BCKD3NQQfMdP475EwHm7Gd6Vte"
$ echo $ADDRGEN1
AzptV6SVTqas3s5pZ5ATc1yvrQ4ojCNXCsJAS95UbwmcZERoN9ob33BCKD3NQQfMdP475EwHm7Gd6Vte
$ e1-cli generatetoaddress 1 $ADDRGEN1
[
  "3b8ace02f60f87addf7c3a9397ab4b762c691b2572d7b1d2e7313873e2baa330"
]

Elementsは、 valid block を生成するために必要な signatures の数を指定する a federated signing モデルをサポートしています。ノードに、有効な 2-of-2 multi-signature block 生成条件を要求するように命令してましょう。これは the signblockscript parameter を使用して行われます。このパラメーターは the config file に追加するかノード起動時にオプションとして渡すことが出来ます。 ​ まず、 block sign script を作成出来るように両方のクライアント(ウォレット)のキーを取得する必要があります。 ​

address 生成

$ ADDR1=$(e1-cli getnewaddress)
$ echo $ADDR1
AzpjDKjkz7qpyq3CX8CXYTTnw8H5mhyWYZTG9zCBkhWrDtNTiajesceprrHFdiSxHJHCJGtYE8s8ysxQ
$ ADDR2=$(e2-cli getnewaddress)
$ echo $ADDR2
AzpmayLZiaqLzmtBu3TXpHkaAgcgZrrhrqjdYU3YRTE8cf632LeJVhCGW3uVkRxMyLNyQyoDL8uFQvCp

jq インストール(必要に応じて)

jq is a lightweight and flexible command-line JSON processor. ​

$ sudo apt -y update
$ sudo apt -y install jq

public keys 取得

$ VALID1=$(e1-cli getaddressinfo $ADDR1)
$ PUBKEY1=$(echo $VALID1 | jq '.pubkey' | tr -d '"')
$ echo $PUBKEY1
031fbb81ba5152df01f99c81f0f40e9a7dbe602b6c0789464a571671963b787f21
$ VALID2=$(e2-cli getaddressinfo $ADDR2)
$ PUBKEY2=$(echo $VALID2 | jq '.pubkey' | tr -d '"')
$ echo $PUBKEY2
02146b6e1bf588e8e4a67b161917bce137176976d21bfe3803be519820b0e89d55

private keys 取得

$ KEY1=$(e1-cli dumpprivkey $ADDR1)
$ echo $KEY1
cP7SZAXASdw4TJKw74Mst3CbBWZBEeCbSPm5jUbDD3x8qvqS1JX6
$ KEY2=$(e2-cli dumpprivkey $ADDR2)
$ echo $KEY2
cQ1L59g8MR112JZPBy5JpaqKrn6NiDSiKAnUQBbS8zXxySk1dvzF

マルチシグアドレス生成と redeemscript 取得

$ MULTISIG=$(e1-cli createmultisig 2 '''["'''$PUBKEY1'''", "'''$PUBKEY2'''"]''')
$ echo $MULTISIG
{ "address": "XK3XdVPBzYz1hp3fdALNEMLymwU6jUZnFk", "redeemScript": "5221031fbb81ba5152df01f99c81f0f40e9a7dbe602b6c0789464a571671963b787f212102146b6e1bf588e8e4a67b161917bce137176976d21bfe3803be519820b0e89d5552ae" }
$ REDEEMSCRIPT=$(echo $MULTISIG | jq '.redeemScript' | tr -d '"')
$ echo $REDEEMSCRIPT
5221031fbb81ba5152df01f99c81f0f40e9a7dbe602b6c0789464a571671963b787f212102146b6e1bf588e8e4a67b161917bce137176976d21bfe3803be519820b0e89d5552ae

ノードを停止して、新しい block signing 方式を設定出来るようにする

$ e1-cli stop
$ e2-cli stop

ブロック生成の要件定義

$ SIGNBLOCKARG="-signblockscript=$(echo $REDEEMSCRIPT) -con_max_block_sig_size=150"

ウォレットのクリーンアップ

$ mv ~/elementsdir1/elementsregtest/blocks ~/tmp/elementsdir1/elementsregtest/
$ mv ~/elementsdir1/elementsregtest/chainstate ~/tmp/elementsdir1/elementsregtest/
$ mv ~/elementsdir1/elementsregtest/wallets/wallet.dat ~/tmp/elementsdir1/elementsregtest/wallets/
$ mv ~/elementsdir2/elementsregtest/blocks ~/tmp/elementsdir2/elementsregtest/
$ mv ~/elementsdir2/elementsregtest/chainstate ~/tmp/elementsdir2/elementsregtest/
$ mv ~/elementsdir2/elementsregtest/wallets/wallet.dat ~/tmp/elementsdir2/elementsregtest/wallets/

the 2 of 2 block signing 指定した “signblockscript” オプション付きでデーモンを起動します。

$ e1-dae $SIGNBLOCKARG
$ e2-dae $SIGNBLOCKARG

削除したウォレットの the signing keys をインポートします。

$ e1-cli importprivkey $KEY1
$ e2-cli importprivkey $KEY2

signing に必要な the keys がウォレットにインポートされたにもかかわらず、 The “generate” command は機能しなくなりました。the signblockscript argument 付きでデーモン起動したためです。エラーの原因が signblockscript の導入であり、生成した受信アドレスを含むウォレットを削除したためではないことを確認し、新しいものを作成します。 the signblockscript を導入したため、 the signblockscript commands はエラーになります。

$ ADDRGEN1=$(e1-cli getnewaddress)
$ echo $ADDRGEN1
AzppTCbKDPMQo39VpajzGFXX9kfjpUVWMp97vuSJN4A79kooUYf7wbeYcAs3wAMUt52WbW1rscJZa24j
$ ADDRGEN2=$(e2-cli getnewaddress)
$ echo $ADDRGEN2
Azpxn7FbVYU9H1PdJVZ83eFXyAY2w7W8dAWdibN3L9jshSDQCxACpvvKHyS4Qwd8ncpqf3dw4bpEmdoo
$ e1-cli generatetoaddress 1 $ADDRGEN1
error code: -32603
error message:
ProcessNewBlock, block not accepted
$ e2-cli generatetoaddress 1 $ADDRGEN2
error code: -32603
error message:
ProcessNewBlock, block not accepted

the “signblockscript” argument 付きでデーモン起動したので、ブロックの生成、署名、リリースは新しいプロセスに従わなければなりません。

The process will be:

  • Someone (it doesn”t matter who) calls “getnewblockhex” command to propose a new block.

  • The required number of block signers sign the proposed block in turn.

  • The signed block is combined by someone using the “combineblocksigs” command.

  • The result from “combineblocksigs” is submitted using the “submitblock” command. Again, it doesn’t matter who does this as long as the block is signed and valid.

それではさっそく新しいプロセスでブロック生成をしてみましょう。

getnewblockhex

HEX=$(e1-cli getnewblockhex)
$ echo $HEX
0000002071a6f9f1ad320a250ce1630e3d92f1e8cac49347c0150838a2ff5d81227619c9c109d405eb2d2d42a48f52e1072756b02d09935420878df51aa940bbf5c864bb82e5955d01000000475221031fbb81ba5152df01f99c81f0f40e9a7dbe602b6c0789464a571671963b787f212102146b6e1bf588e8e4a67b161917bce137176976d21bfe3803be519820b0e89d5552ae00010200000001010000000000000000000000000000000000000000000000000000000000000000ffffffff03510101ffffffff02016d0bdd59a69dfd5ccbe4ddc07c6a5275baa235022d3bafad31d5d0479915adf101000000000000000000016a016d0bdd59a69dfd5ccbe4ddc07c6a5275baa235022d3bafad31d5d0479915adf101000000000000000000266a24aa21a9ed94f15ed3a62165e4a0b99699cc28b48e19cb5bc1b1f47155db62d63f1e047d45000000000000012000000000000000000000000000000000000000000000000000000000000000000000000000

getblockcount

$e1-cli getblockcount
0

0が返ってきます。 submitblock コマンドでブロックを submit してみましょう。

$ e1-cli submitblock $HEX
block-proof-invalid

エラーが返ってきます。 ​ block-proof-invalid ​ the block count はまだ0です。

$ e1-cli getblockcount
0

the 2 of 2 requirement を満たすように、各デーモンを使ってブロックに署名しましょう。​

signblock

$ SIGN1=$(e1-cli signblock $HEX)
$ echo $SIGN1
[ { "pubkey": "031fbb81ba5152df01f99c81f0f40e9a7dbe602b6c0789464a571671963b787f21", "sig": "3044022011e2a231c49fa14208ec868b0605c58669baffc734ea14cd3aa406f21a435f0702205c2334bd4400855be5f8681c22c7070b37a51e904a4718856eb3eee0073c20ad" } ]
$ SIGN2=$(e2-cli signblock $HEX)
$ echo $SIGN2
[ { "pubkey": "02146b6e1bf588e8e4a67b161917bce137176976d21bfe3803be519820b0e89d55", "sig": "304402201f0617f9f38f4a7c562a7c589e3df3f52ba5c1104b94c4d01a662d457af2bca502201dc59cd2ad1bd56f88e2d3ed453e54eff6d00d736e0e208d306b1a83a734e920" } ]

combineblocksigs

$ SIGN1DATA=$(echo $SIGN1 | jq '.[0]')
$ echo $SIGN1DATA
{ "pubkey": "031fbb81ba5152df01f99c81f0f40e9a7dbe602b6c0789464a571671963b787f21", "sig": "3044022011e2a231c49fa14208ec868b0605c58669baffc734ea14cd3aa406f21a435f0702205c2334bd4400855be5f8681c22c7070b37a51e904a4718856eb3eee0073c20ad" }
$ SIGN2DATA=$(echo $SIGN2 | jq '.[0]')
$ echo $SIGN2DATA
{ "pubkey": "02146b6e1bf588e8e4a67b161917bce137176976d21bfe3803be519820b0e89d55", "sig": "304402201f0617f9f38f4a7c562a7c589e3df3f52ba5c1104b94c4d01a662d457af2bca502201dc59cd2ad1bd56f88e2d3ed453e54eff6d00d736e0e208d306b1a83a734e920" }
$ COMBINED=$(e1-cli combineblocksigs $HEX "[$SIGN1DATA,$SIGN2DATA]")
$ echo $COMBINED
{ "hex": "0000002071a6f9f1ad320a250ce1630e3d92f1e8cac49347c0150838a2ff5d81227619c9c109d405eb2d2d42a48f52e1072756b02d09935420878df51aa940bbf5c864bb82e5955d01000000475221031fbb81ba5152df01f99c81f0f40e9a7dbe602b6c0789464a571671963b787f212102146b6e1bf588e8e4a67b161917bce137176976d21bfe3803be519820b0e89d5552ae8f00463044022011e2a231c49fa14208ec868b0605c58669baffc734ea14cd3aa406f21a435f0702205c2334bd4400855be5f8681c22c7070b37a51e904a4718856eb3eee0073c20ad46304402201f0617f9f38f4a7c562a7c589e3df3f52ba5c1104b94c4d01a662d457af2bca502201dc59cd2ad1bd56f88e2d3ed453e54eff6d00d736e0e208d306b1a83a734e920010200000001010000000000000000000000000000000000000000000000000000000000000000ffffffff03510101ffffffff02016d0bdd59a69dfd5ccbe4ddc07c6a5275baa235022d3bafad31d5d0479915adf101000000000000000000016a016d0bdd59a69dfd5ccbe4ddc07c6a5275baa235022d3bafad31d5d0479915adf101000000000000000000266a24aa21a9ed94f15ed3a62165e4a0b99699cc28b48e19cb5bc1b1f47155db62d63f1e047d45000000000000012000000000000000000000000000000000000000000000000000000000000000000000000000", "complete": true }

the 2 of 2 の要件を満たすのに十分な keys の signatures をもつので the “complete” property の結果が “True” であることがわかる。従って、この文脈で “complete” は有効な ‘n of m’ multi-sig の signatures を十分に持っていることを意味します。 ​ 次に、 the combineblocksig command の結果から the signed block hex を抽出し、 submit します。 a signed and valid block hex を持つ限り、誰がこれを実行するかは問題ではありません。 ​ submitblock

$ SIGNEDBLOCK=$(echo $COMBINED | jq '.hex' | tr -d '"')
$ echo $SIGNEDBLOCK
0000002071a6f9f1ad320a250ce1630e3d92f1e8cac49347c0150838a2ff5d81227619c9c109d405eb2d2d42a48f52e1072756b02d09935420878df51aa940bbf5c864bb82e5955d01000000475221031fbb81ba5152df01f99c81f0f40e9a7dbe602b6c0789464a571671963b787f212102146b6e1bf588e8e4a67b161917bce137176976d21bfe3803be519820b0e89d5552ae8f00463044022011e2a231c49fa14208ec868b0605c58669baffc734ea14cd3aa406f21a435f0702205c2334bd4400855be5f8681c22c7070b37a51e904a4718856eb3eee0073c20ad46304402201f0617f9f38f4a7c562a7c589e3df3f52ba5c1104b94c4d01a662d457af2bca502201dc59cd2ad1bd56f88e2d3ed453e54eff6d00d736e0e208d306b1a83a734e920010200000001010000000000000000000000000000000000000000000000000000000000000000ffffffff03510101ffffffff02016d0bdd59a69dfd5ccbe4ddc07c6a5275baa235022d3bafad31d5d0479915adf101000000000000000000016a016d0bdd59a69dfd5ccbe4ddc07c6a5275baa235022d3bafad31d5d0479915adf101000000000000000000266a24aa21a9ed94f15ed3a62165e4a0b99699cc28b48e19cb5bc1b1f47155db62d63f1e047d45000000000000012000000000000000000000000000000000000000000000000000000000000000000000000000
$ e2-cli submitblock $SIGNEDBLOCK

getblockcount

$ e1-cli getblockcount
1
$ e2-cli getblockcount
1

​ one block 生成に成功しました。 ​ 次に、次のセクション(ブロックチェーンをサイドチェーンとして実行している別のブロックチェーンに “peg” する方法を説明します)に備えて、 daemons をシャットダウンします。 ​

e1-cli stop
e2-cli stop

ブロックチェーンをサイドチェーンとして動作させる必要がない場合は、次のセクションをスキップできます。そして、 the bitcoin daemon も同様にシャットダウンするため the “b-cli stop” コマンドを実行すべきです。

仮想通貨取引所

Liquid by Quoine

ウォレット

▼記事の続きは以下へ。

執筆中です。

参考

ビットコインとブロックチェーン

ビットコインとブロックチェーン