重要なRust開発者であるブライアンは、CKBの構築と実行を初めて経験しました。

重要なRust開発者であるブライアンは、CKBの構築と実行を初めて経験しました。

この記事では、CKB のテスト ネットワークと開発チェーンの作成と実行に関する詳細な操作プロセスと精神的な旅を記録し、もちろん多くの実用的で役立つ提案も含まれています。同時に、この記事は CKB を初めて使用する開発者にとっても素晴らしい体験レポートとなります。 CKB ドキュメント、テストネット、ckb-cli などの使用パスが使いやすいかどうか、どの設計を改善する価値があるか、より多くの開発者が CKB エコシステムに参加しやすくするにはどうすればよいかなどを記録します。

原文では「confuse」や「stuck」といった単語が頻繁に登場し、ブライアンの真剣さと思慮深さが感じられます。記事の最後には、彼が遭遇した落とし穴や提案もいくつかまとめましたので、ぜひ参考にしてください。これまで CKB を使用したことがなく、Nervos CKB で開発やプレイをしたい場合は、Brian の実践的なアイデアをぜひご覧ください。この記事では、彼が遭遇した落とし穴を紹介するので、時間を節約できるかもしれません。

オリジナルリンク:

https://talk.nervos.org/t/experience-report-first-time-building-and-running-ckb/4518

翻訳・校正:ブラザー・マス&シスター・ケリー

こんにちは。最近、CKB の構築と実行の方法を学ぶことに時間を費やしました。このプロジェクトを作成する過程で、ckb と ckb-cli とマイニング可能な devnet をセットアップし、それをテストネットに接続し、ckb-cli を使用してアカウントを作成し、テストネット上で資金を送金しました。

新しいプロジェクトを開始するとき、目にするものすべてを文書化するこの方法により、プロジェクトをより深く理解できるようになります。そして、そのプロセスの中では、ほとんどの場合、多くの単純な問題が浮上しますが、それを修正すれば、他のすべてのユーザーのエクスペリエンスも向上します。

これらの経験を文書化することで、開発チームが改善できる点を理解し、他の人が CKB で開発を始めるのに役立つことを願っています。リソースとテストの支援をしてくれた Aimee に感謝します。

2020年3月12日から4月5日までの間に執筆

CKBを初めて実行してみる

CKB 上で実行できるソフトウェアを書きたいのですが、まずは CKB の構築方法、実行方法、ツールの使用方法を学ぶ必要があります。ブロックチェーン開発の経験はありませんが、過去の研究に基づいて CKB についてある程度理解しています。以前にも CKB VM でプロジェクトを作成しました:

フェリスフェンシング

まず、Nervos の GitHub にあるメイン リポジトリをダウンロードし、Nervos の公式 Web サイトにアクセスしました。 CKB でプライベート テストネットを構築して実行するためのドキュメントを見つける必要があります。テスト ノードを実行したら、スクリプトの作成、展開、テスト方法に関するドキュメントが必要になるためです。

CKBの構築

Nervos 開発ドキュメント (https://docs.nervos.org/introduction/welcome.html) をクリックした後、CKB の構築に関連するコンテンツがないことに驚きました。これは、このドキュメントが CKB 上で構築する開発者を対象としており、開発者が自分で CKB を構築する必要がないことを前提としているためであると考えられます。ただし個人的には、特に CKB のようなまだ開発中のプラットフォームについては、開発スタック全体を構築して理解したいと考えています。

GitHub の README を確認しましたが、CKB のビルド方法に関するドキュメントは見つかりませんでした。

「Get CKB」と「Quick Start」という 2 つのリンクがありますが、「Get CKB」ドキュメントには「Build from source」セクションも含まれており、CKB をビルドするには make prod を使用するように指示されています。しかし、CKB は Rust プロジェクトなので、私はそれをやりたくありませんでした。代わりに、 cargo build を使用してみたかったので、それを実行したところ、うまくいきました。

私は常に、cargo を強化するために Makefile にどのような項目が追加されるか興味がありますが、この場合は、 --cfg enable_faketime が追加されるだけです。これが何なのか全く分かりませんが、faketime は開発中に使用できるフィールドだと思います。これは「マイナス」の貨物機能であり、一般的には推奨されないことに注意してください。

開発者向けドキュメントを見る

ドキュメントの Web サイトを無視して GitHub リポジトリのマークダウンを調べていたため、ドキュメントを調べるという「楽しい道」から急速に外れてしまったようでした。そこで、戻ってドキュメントの Web サイトからやり直しました。

メイン ドキュメントで探しているものが見つからないことがないように、「Getting Started/Introduction」ページを開きました。これは、ノードの実行、ウォレットの使用、トランザクションに関するものであり、開発者向けドキュメントではありません。

「開発者向けドキュメント」リンクをクリックしてここに来たと断言します。もう一度確認しました。nervos.org の「Developer」→「Documentation」をクリックすると、docs.nervos.org にたどり着きました。このサイトでは、次のように説明されています。

これは Nervos CKB のドキュメント サイトです。ここでは、Nervos CKB の設計、ノードの実行方法、CKByte トークンのマイニング方法について学ぶことができます。

この文書の対象読者が誰なのかわかりません。

この Web サイトには「開発者ガイド」という別のドキュメントがありますが、これにも CKB の構築方法に関するヒントは記載されていません。また、「Aggron」と呼ばれるテストネットの使用に重点が置かれていることにも気づきました。これにより、独自のテストネットを実行するというアプローチは人気がないのではないかと感じました。

テストネットのドキュメントを読む

ドキュメントに基づいて、私の新しい計画はテストネットの使い方を学ぶことです。ドキュメントでバージョンのダウンロードが求められるかどうかに関係なく、自分で作成した CKB を使用する予定です。

Testnet Aggron ページの最初の段落は私を本当に混乱させました。

テストネットでブロックを生成するために POA アルゴリズムを導入しようとしています。ただし、これが実現するにはある程度の時間がかかります。これに先立ち、1 時間以上ブロックが生成されない場合は、定期的にテストネットをリセットします。 Aggron を起動するためのオンチェーン仕様はここに公開されています。Aggron チェーンのドキュメントを参照してください。

ここでの「私たち」は、チュートリアル ドキュメントで「あなた」を指すためによく使用される「王室の私たち」ではなく、Nervos プロジェクトを指すべきだと思います。これは、テストネットが展開されたばかりのかなり昔に書かれたもののようです。 (翻訳者注:このページは2019年12月9日に書かれました)。

このページでは、CKB の新しいバージョンをダウンロードするように求められました。その後、CKBのリリースページを確認したところ、最新バージョンはv0.29.0であることがわかりました。

v0.29.0 タグを確認し、デバッグ モードで CKB を再構築しました。

この時点で、ckb-cli が ckb リポジトリの一部ではないことがわかりました。 ckb-cli リポジトリは簡単に見つけられましたが、障害に遭遇しました。

ckb-cliを作成する

ckb-cli には v0.29.0 タグがありません。 ckb-cli のどのバージョンが ckb と一致するかわかりません。この矛盾から、ckb リポジトリからリリースされた tarball に ckb-cli が含まれているかどうか疑問に思います。

0.29 tarball をダウンロードしたところ、 ckb-cli が含まれていることがわかりました。 ckb-cli のバージョンを確認したかったのですが、最新バージョンを実行するしかないようでした。それで私はそうしました、そして次のような結果が返ってきました:

  • ckb-cli 0.27.1 (9d0bf90 2020-01-31)

したがって、ckb 0.29.0 は ckb-cli 0.27.1 から適応されており、これら 2 つのバージョンは疎結合されているため、常にどちらかの最新バージョンを使用する必要があります。

ckb-cliの最新バージョンを確認し、ビルドを開始しました。これには、ckb の別のコピーを設定することも含まれるようです。少し面倒ですが、仕方ありません。

新しいウィンドウで、ckb および ckb-cli にアクセスできるように PATH を設定しました。

  • ~/ckb-testing$ エクスポート PATH="$PATH:$HOME/ckb/target/debug/:$HOME/ckb-cli/target/debug"~/ckb-testing$ ckb --versionckb 0.29.0 (a6733e6 2020-02-26)~/ckb-testing$ ckb-cli --versionckb-cli 0.27.1 (9d0bf90 2020-01-31)

テストネット ページで、ckb と ckb-cli のサンプル バージョンが 2019 年 11 月のものであり、バージョン番号が同じであることに気付きました。

  • ckb 0.25.2 (dda4ed9 2019-11-17) ckb-cli 0.25.2 (6ca7bbb 2019-11-17)

テストネットの使用

ここで、テストネットに接続して、ツールが動作していることを確認したいと思います。

元の手順は次のとおりです。

  • CKBバイナリを含むディレクトリにaggron.tomlを作成します。

  • CKB ノードを初期化するには、コマンド ckb init --import-spec ./aggron.toml --chain testnet を使用します。

aggron.toml へのリンクは、昨年 12 月の gist を指します。まだ機能することを望みます。

テストネット データを保持するための新しいディレクトリ ckb-testing を作成し、そこに aggron.toml の例を含めました。

ckb initを実行します:

 ~/ckb-testing$ ckb init --import-spec ./aggron.tml --chain testnet

出力は次のようになります。

  • テスト$ ckb init --import-spec ./aggron.toml --chain testnet警告: ブロックアセンブラ構成オプションがないため、マイニング機能が無効になっています/home/brian/ckb-testing/devnetcp ./aggron.toml specs/testnet.tomlcreate ckb.tomlcreate ckb-miner.toml の CKB ディレクトリを初期化しました

これは成功したようです。aggron.toml が specs/testnet.toml にコピーされ、ckb.toml と ckb-miner.toml が作成されました。 2 つの新しい toml ファイルをいじってみました。

ckb.toml には次の行が含まれています。


 [chain]# 実行するチェーンの種類を選択します。可能な値:# - { file = "specs/dev.toml" }# - { bundled = "specs/testnet.toml" }# - { bundled = "specs/mainnet.toml" }spec = { file = "specs/testnet.toml" }

これは、組み込みのテストネット定義があることを示しており、それが私たち自身のテストネット定義と一致しているかどうか疑問に思います。組み込み定義が見つかるかどうか見てみましょう。

fd を使用して ckb リポジトリ内の構成を検索しました。


 ~/ckb$ fd "testnet.toml"リソース/specs/testnet.toml

それは本当です!

この組み込み定義は、開発者ドキュメントで推奨されている aggron.toml と同じですか?

 ~/ckb$ diff ../ckb-testing/aggron.toml resource/specs/testnet.toml10c10< # `cargo run cli hashes -b` を実行してジェネシスハッシュを取得します---> # `cargo run list-hashes -b` を実行してジェネシスハッシュを取得します

はい、ただし古いコメントが 1 つあります。

皆さん、テストネットのドキュメントを引き続きフォローしてください...

aggron.toml を含む gist には別の説明があります:

ログ出力のジェネシスハッシュが0x184ac4658ed0c04a126551257990db132366cac22ab6270bbbc1f8c3220f302dであることを確認してください。

しかし、それをどのように検証するかについては書かれていません。ジェネシス ハッシュは ckb init によって出力されません。テストネットのドキュメントの次のステップは、 ckb run を実行することでした。 Windows ファイアウォールが許可を求めてきたので、同意しました (その時点では WSL 上で実行していました)。たくさんのログ出力が表示され、ckb が実行を開始しました。

 2020-03-20 15:10:22.445 -06:00 main INFO sentry **注意**: ckb プロセスは、Rust パニック時にスタック トレースを sentry に送信します。これはメインネットの前にデフォルトで有効になっていますが、設定ファイルでオプション `dsn` を空に設定することでオプトアウトできます。 DSN は現在 https://[email protected]/1422795 です2020-03-20 15:10:23.354 -06:00 main INFO main マイナーが無効になっています。有効にするには ckb.toml を編集してください2020-03-20 15:10:23.374 -06:00 main INFO ckb-db 新しいデータベースを初期化します2020-03-20 15:10:23.624 -06:00 main INFO ckb-db データベース バージョン 20191127135521 を初期化します2020-03-20 15:10:23.636 -06:00 main INFO ckb-chain 開始: ライブ セルの読み込み...2020-03-20 15:10:23.636 -06:00 main INFO ckb-chain 完了: 合計 2 件のトランザクション。2020-03-20 15:10:23.653 -06:00 main INFO main ckb バージョン: 0.29.0 (a6733e6 2020-02-26)2020-03-20 15:10:23.654 -06:00 main INFO メイン チェーン ジェネシス ハッシュ: 0x184ac4658ed0c04a126551257990db132366cac22ab6270bbbc1f8c3220f302d2020-03-20 15:10:23.654 -06:00 main INFO ckb-network ランダムキーを生成2020-03-20 15:10:23.655 -06:00 main INFO ckb-network ランダムな秘密キーを「/home/brian/ckb-testing/data/network/secret_key」に書き込みます2020-03-20 15:10:23.668 -06:00 main INFO ckb-network アドレスをリッスン: /ip4/0.0.0.0/tcp/8115/p2p/Qme9oaLbtaqF6JyZnZhrNPoW3dSPkzJSW1PGag3fKdEuaj2020-03-20 15:10:23.718 -06:00 NetworkRuntime-1 INFO ckb-network p2p サービスイベント: ListenStarted { アドレス: "/ip4/0.0.0.0/tcp/8115" }2020-03-20 15:10:24.415 -06:00 NetworkRuntime-1 INFO ckb-relay RelayProtocol(1).connected peer=SessionId(1)2020-03-20 15:10:24.415 -06:00 NetworkRuntime-0 INFO ckb-sync SyncProtocol.connected peer=SessionId(1)2020-03-20 15:10:24.474 -06:00 NetworkRuntime-2 INFO ckb-sync ノードが初期ブロックダウンロード内にあるため、peer=SessionId(1) からの getheaders を無視します2020-03-20 15:10:25.319 -06:00 NetworkRuntime-5 INFO ckb-relay RelayProtocol(1).connected peer=SessionId(2)2020-03-20 15:10:25.433 -06:00 NetworkRuntime-4 INFO ckb-relay RelayProtocol(1).connected peer=SessionId(3)2020-03-20 15:10:25.712 -06:00 NetworkRuntime-3 INFO ckb-sync SyncProtocol.connected peer=SessionId(3)2020-03-20 15:10:26.347 -06:00 NetworkRuntime-1 INFO ckb-sync SyncProtocol.connected peer=SessionId(4)2020-03-20 15:10:26.346 -06:00 NetworkRuntime-1 INFO ckb-sync getheadersを無視していますピア=SessionId(2) ノードが初期ブロックダウンロード内にあるため ダウンロード2020-03-20 15:10:26.347 -06:00 NetworkRuntime-1 INFO ckb-sync ピア=SessionId(3) からの getheaders を無視 ノードが初期ブロックダウンロード内にあるため ダウンロード2020-03-20 15:10:26.347 -06:00 NetworkRuntime-1 INFO ckb-sync SyncProtocol.connected ピア=SessionId(4)2020-03-20 15:10:26.348 -06:00 NetworkRuntime-1 INFO ckb-sync ピア=SessionId(4) からの getheaders を無視 ノードが初期ブロックダウンロード内にあるため ダウンロード2020-03-20 15:10:28.039 -06:00 ChainService INFO ckb-chain ブロック: 1、ハッシュ: 0xcfbc1525e97bdb6e3202ff19270bddc1fcd6d8f1aee14c719064a8b989909f5d、エポック: 0(1/1000)、total_diff: 0x1800060、txs: 1

このログは、テストネットに正しいジェネシス ハッシュがあり、ブロックが同期されていることを示しています。

現在、ブロックの高さは 2704 です。テストネットにブロックがいくつあるか知りたいので、どれくらい待たなければならないかがわかります。

これはテストネット専用のブロックエクスプローラーですか? 「nervos block explorer」をグーグルで検索したら、次のものを見つけました:

詳しくはこちら

テストネットワークブラウザもあります:

https://explorer.nervos.org/aggron/

テストネットには 567493 個のブロックがありますが、ダウンロードが完了するまで待つのは特に楽しみではありません。

私のデータ ディレクトリのサイズは約 7 MB なので、テストネットの開発には (600_000/3000 * 7) = 約 1.4 GB のスペースが必要になると見積もっていますが、これはまだ許容範囲内です。ただし、同期を待つのは嫌なので、次のセクションに進みましょう。

次のドキュメントは「Dev Chain」です。このドキュメントでは、独自のチェーンの使用方法が説明される予定です。

開発チェーンの構築

テストネットを同期していた ckb を一時的に停止し、そのすべてのデータを ckb-testing/testnet に移動してから、 ckb の実行を継続してテストネットを同期しました。

次に、ckb-testing/devnet を作成しました。開発チェーンのドキュメントによると、私は以下を実行しました:


 ckb 初期化 --chain dev

出力は次のようになります:


 ~/ckb-testing/devnet$ ckb init --chain dev警告: ブロックアセンブラ構成オプションがないため、マイニング機能が無効になっています/home/brian/ckb-testing/devnetのCKBディレクトリを初期化しましたcreate specs/dev.tomlcreate ckb.tomlcreate ckb-miner.toml

開発チェーンのドキュメントでは、specs/dev.toml をカスタマイズして genesis_epoch_length を 1000 に設定するように指示されています。dev.toml を確認すると、genesis_epoch_length が 1000 に達していました。

ckb-miner.toml をカスタマイズして、アイドル時間間隔 (多くの場合、値と呼ばれます) を 500 に設定する必要があります。 ckb​​-miner.toml を確認したところ、値が 500 に達していました。 このドキュメントは古くなっているようです。

翻訳者注: ドキュメントには設定値が5000と記載されています(スクリーンショットは2020/03/10のものです)

開発チェーンでのマイニング

ckb init に記載されているように、初期化されたチェーンはまだマイニング用に構成されていません。開発チェーン ドキュメントのステップ 4 は「ckb.toml でマイニング用のブロック アセンブラーを構成する」というタイトルで、次のように書かれています。

lock_arg を生成するには ckb-cli を使用します。マイニングの設定には lock_arg が必要なので、バックアップしておいてください。

lock_arg が何であるかを説明したり、より詳しい情報へのリンクがあったらよかったのにと思います。

次に、ckb-cli account new を実行しました。

パスワードを設定するように求められたので、それを「foo」に設定しましたが、CLI は長い間応答しませんでした。本当に壊れているのかな。

エイミーはなぜアカウントが必要なのか疑問に思います。これはマイナーの公開キーに接続されており、このアカウントはマイナーがマイニングした CKB を保存するための権限を付与すると思われます。

ドキュメントのこの部分には欠陥があります。

最後に、アカウント作成コマンドが完了し、次の出力が表示されます。

 ~/ckb-testing/devnet$ time ckb-cli account new新しいアカウントはパスワードでロックされています。パスワードを入力してください。このパスワードを忘れないでください。パスワード: パスワードを繰り返し入力してください: アドレス: メインネット: ckb1qyq9u782efpvk8m3q88gplxlzadpct5d7ypqythss9 テストネット: ckt1qyq9u782efpvk8m3q88gplxlzadpct5d7ypqewf0uelock_arg: 0x5e78eaca42cb1f7101ce80fcdf175a1c2e8df102lock_hash: 0xe68befeae28e69dc658565be71bc7146fd33a9a4bea3f7edba8de8c8c46865ff


ええと、出力を見ると、いくつかの作業を行う必要があります。ラベルのみが表示されます (アドレス、メインネットも濃い青色で、私の端末では表示されません)。

デバッグバイナリを実行し、バックグラウンドでテストネットを同期するのに 168 秒かかりました。

実験のために、テストネットへの同期を停止し、デバッグ バージョンで ckb-cli account new を再度実行しました。次に、ckb と ckb-cli をリリース モードで再構築しました。

  • デバッグ: 99秒
  • リリース: 15秒

したがって、デバッグ ビルドは 6.6 倍遅くなります。テストネットとリリースビルドの同期を継続します。
lock_arg と lock_hash が何であるかを知りたいです。オンラインで検索しましたが、「マイニング ソフトウェアを構成して秘密鍵をエクスポートする必要がある」以外、役立つ情報は見つかりませんでした。
後で続けます。

テストネットをリセットしました!

テストネットがリセットされる間、数日間休みました。
私がこれを発見したのは、ckb テストネットが次のようになったからです。

 2020-03-24 21:50:22.644 -06:00 NetworkRuntime-3 INFO ckb-network ピア PeerId(QmT6DFfm18wtbJz3y4aPNn3ac86N4d4p4xtfQRRPf73frC) を 300 秒間禁止します。理由: ノードが同じネットワーク上にありません
単にテストネットデータを削除し、再初期化して再同期するだけでは意味がありません。 Aggron テストネット情報を含む gist を見ると、テストネットに異なるジェネシス ブロックがあることが示されています。
新しいテストネット構成が必要であると想定し、Nervos が更新されたテストネット定義を含む新しいバージョンをリリースしたと想定します。 ckb と ckb-cli を入手したところ、最新のタグがそれぞれ v0.30.1 と v0.30.0 であることがわかりました。リリースモードで確認してビルドしました。

開発チェーンのセットアップを続行する

Dev Chain ドキュメントの次の指示は次のとおりです。
ckb.tomlを開き、[block_assembler]セクションを設定します。

  • lock_arg には 0x をプレフィックスとして付け、その後に args のテキストを続ける必要があります。
  • メッセージに0xを入力してください

かなり不思議ですね。 ckb.toml には、[block_assembler] コメント セクションに添付された詳細が多数あります。
 # マイニングされた CKB を保護するためにロック スクリプトを設定します。## CKB はマイナーに CS アーキテクチャを使用します。マイナー プロセス (ckb miner) は、RPC を介してノード プロセス (ckb run) からブロック番号テンプレートを取得します。したがって、ロック スクリプトは ckb-miner.toml ではなく ckb.toml で構成され、構成は Node プロセスを再起動した後に有効になります。## `code_hash` は異なる暗号化アルゴリズムを識別します。この構成を生成する方法については、ロック スクリプト プロバイダーのマニュアルをお読みください。CKB は secp256k1 実装を提供しており、圧縮された公開キーのハッシュが必要です。ハッシュ アルゴリズムは blake2b で、個人番号は "ckb-default-hash" です。最初の 160 ビット (20 バイト) が唯一の引数として使用されます。信頼できる任意のツールを使用して、CKB でも使用できる Bitcoin 秘密鍵と公開鍵のペアを生成できます。 CKB CLI には、公開キーをブロック アセンブラ構成パラメータに変換する機能が用意されています。以下は、ckb-cli を使用してアカウントを生成する例です。このコマンドは、ブロック アセンブラ引数 (lock_arg) を画面に出力します: ckb-cli account new すでに生の secp256k1 秘密キーがある場合は、次のコマンドで lock_arg を取得できます: ckb-cli util key-info --privkey-path コマンド `ckb init` は、ブロック アセンブラを直接生成するオプションも受け入れます。詳細については、`ckb init --help` を参照してください。## ckb init## secp256k1_blake160_sighash_all 例:# [block_assembler]# code_hash = "0x9bd7e06f3ecf4be0f2fcd2188b23f1b9fcc88e5d4b65a8637b17723bbda3cce8"# args = "ckb cli blake160"# hash_type = "type" # message = "0x で始まる 16 進文字列"

さて、ここでは明確に説明されていないことがまだたくさんあります。

  • 「マイナーの CS アーキテクチャ」とは何ですか?分からない。
  • 「ロック スクリプト プロバイダーのマニュアルを参照してください。」ロック スクリプト プロバイダーが何であるか、またマニュアルがどこにあるかはわかりません。
  • 「ハッシュ アルゴリズムは、個人的な「ckb-default-hash」を使用した blake2b です」個人的な「ckb-default-hash」とは何ですか?

最後の部分にたどり着きました:
 # [block_assembler] # code_hash = "0x9bd7e06f3ecf4be0f2fcd2188b23f1b9fcc88e5d4b65a8637b17723bbda3cce8" # args = "ckb cli blake160" # hash_type = "type" # message = "0x で始まる 16 進文字列"


ここでも説明はありません。
ckb-cli account new のドキュメント例の出力とその例 [block_assembler] を拡張した後、ようやく何をする必要があるのか​​がわかり、いくつかの推論を行いました。
ドキュメント内の例はデフォルトで折りたたまれているため、理解の妨げになる可能性があります。何も考えずに無視しましたが、ここでは必要でした。
私がすべきだと思うことは次のとおりです。

  • code_hashを忘れる
  • すべての引数をlock_argの値に置き換えます
  • hash_type には二度と触れないでください
  • メッセージを「0x」に設定する

ドキュメントには lock_arg の先頭に「0x」を付ける必要があると記載されていましたが、ckb-cli は独自の出力に「0x」プレフィックス付きの lock_arg を追加しました。
「マッサージ」が何なのかは分かりませんが、どうやらその前に「0x」を追加するとckbを鎮めることができるようです。
(翻訳者注:ブライアンが説明しなかった例を以下に示します)

ない

基本的にドキュメントはこれで終わりです。ckb-cli を使用して作業を実行できること、また ckb バックエンドと自動的に通信できる SDK もいくつかあることが示されています (Rust SDK はまだありません)。
私が最もやりたいのは、CKB 上で実行できるコントラクトを作成することですが、SDK を経由する必要があるかどうかはわかりません。
ちょっと行き詰まっていますが、自分なりの計画を立てました。

  • ckb-cli の機能を調べます。
  • ckb-cli を使用して devnet でトランザクションを実行してみてください。

テストネットでCKBを送信する

(何日も後)
今日、エイミーと私はテストネット上で CKB トランザクションを送信しようとしました。同時にテストネットを同期し、ckb run を実行しました。
まず、テスト ネットワーク フォーセットを使用して CKB を取得します。これにはウォレット アドレスが必要なので、まずウォレットが必要です。この文書には Neuron Wallet について言及されています。しかし、開発者としては、コマンドライン ツールを使用して、基盤となるツールセットを理解することを好みます。そこで、ckb-cli を詳しく調べてみました。
ckb-cli にはウォレットサブコマンドがあります。 ckb-cli コマンドについて説明している wiki ページがありますが、ckb-cli がより多くの出力を提供できることを納得させるには十分です。
現時点では他に不足しているドキュメントはないと思うので、CLI に加えて、直感と試行錯誤を駆使する必要があると思います。
Aimee が Mac で ckb-cli を実行しようとしたとき、システムレベルの保護により、App Store 以外のアプリケーションを実行できませんでした。
引数なしで ckb-cli を実行すると、コマンドがコマンドライン サブコマンドに直接対応しているように見える対話型環境が生成されます。これはコマンドラインパーサーによって自動的に実行されるのだろうか。
このウォレットを使用するにはアカウントが必要でした。アカ​​ウント サブコマンドを調べましたが、以前に devnet アカウントを作成していましたが、まだ testnet アカウントはありませんでした。
アカウントリストを実行すると、4 つのアカウントが取得されます。エイミーがそうしたら、2つもらえました。
私は accunt new と入力し、パスワードとして「foo」を使用し、Aimee はパスワードとして「hotsauce」を使用しました。

 CKB> アカウント新規新しいアカウントはパスワードでロックされています。パスワードを入力してください。このパスワードを忘れないでください。パスワード: パスワードを繰り返し入力してください: アドレス: メインネット: ckb1qyq2p6jgd8pnqlngy4cf4h7c76p383rug9sqw9e2hp テストネット: ckt1qyq2p6jgd8pnqlngy4cf4h7c76p383rug9sqnq84malock_arg: 0xa0ea4869c3307e6825709adfd8f68313c47c4160lock_hash: 0xb686ca47423942cd64f4d091829450ad3b968b485d922b773a4672616a084c0c
アカウントリストを実行すると、アカウント #4 が新しいアカウントになります。このリストには、以前に生成された devnet アカウントも表示されます。ウォレットアカウントはグローバルリソースだと思います。 ~/.ckb-cli ディレクトリがあることに気付きました。
ウォレットのドキュメントによると、ロック スクリプト ハッシュ、アドレス、ロック引数、または公開キーを使用してアカウントへのアクセスを承認できます。 account new コマンドの出力から、現在すべての公開キーを持っていることがわかります。
しかし、まだpubkeyがどこにあるか分かりません。ウォレットの容量を取得するために、ロック引数を使用しました。

 CKB> ウォレットの容量を取得 --lock-arg 0xa0ea4869c3307e6825709adfd8f68313c47c4160 合計: 0.0 (CKB)
私の容量は0 CKBです。
この容量は私のアカウントのウォレットの合計金額を表していますか?私が話しているのはこれだと思います。なぜなら、私は CKB を持っておらず、ブロックチェーン上にストレージ容量を持っていないからです。私のCKB残高は0です。
エイミーと私は同時に蛇口からCKBを少し頼みました。約1分後、私たちは両方とも5000 CKBを獲得しました。
CKB を生成するブロックがどのようなものか知りたかったので、次のコマンドを実行しました。

 CKB> ウォレット get-live-cells --address=ckt1qyq2p6jgd8pnqlngy4cf4h7c76p383rug9sqnq84ma現在の容量: 5000.0 (CKB)現在のカウント: 1ライブセル: - 容量: 5000.0 (CKB) データバイト: 0 インデックス: 出力インデックス: 0 トランザクションインデックス: 1 ロックハッシュ: 0xb686ca47423942cd64f4d091829450ad3b968b485d922b773a4672616a084c0c 成熟度: true 番号: 55611 トランザクションハッシュ: 0x1a8a1650dcf8bc21a210a970073b6d1a47eff13afdd649e5cb3ecc3d56c06083 tx_index: 0 type_hashes: ~total_capacity: 5000.0 (CKB)total_count: 1


テストネット ブラウザでトランザクション ページを開くと、Aimee が CKB を送信しようとしました。
 CKB> ウォレット転送 --capacity 1000 --from-account 0x2af2ea2efbffce44f51cd4d7731507fdbbd63629 --to-address ckt1qyq2p6jgd8pnqlngy4cf4h7c76p383rug9sqnq84ma --tx-fee 1PassworD:0xc0a6973ac921cea95d27fa9e8a30ae6fca18de2404f768e3a077dd1e5f345ec0
出力される数字は何ですか?これはトランザクション ハッシュであり、30 秒後にトランザクションがブラウザに表示されます。自分のアカウントを確認しました:
 CKB> ウォレット get-capacity --address=ckt1qyq2p6jgd8pnqlngy4cf4h7c76p383rug9sqnq84ma合計: 6000.0 (CKB)CKB> ウォレット get-live-cells --address=ckt1qyq2p6jgd8pnqlngy4cf4h7c76p383rug9sqnq84ma現在の容量: 6000.0 (CKB)現在のカウント: 2ライブセル: -容量: 5000.0 (CKB)データバイト: 0インデックス:出力インデックス: 0トランザクションインデックス: 1ロックハッシュ: 0xb686ca47423942cd64f4d091829450ad3b968b485d922b773a4672616a084c0c 成熟度: true 番号: 55611 tx_hash: 0x1a8a1650dcf8bc21a210a970073b6d1a47eff13afdd649e5cb3ecc3d56c06083 tx_index: 0 タイプハッシュ: ~ - 容量: 1000.0 (CKB) データバイト: 0 インデックス: 出力インデックス: 0 tx_index: 1 ロックハッシュ: 0xb686ca47423942cd64f4d091829450ad3b968b485d922b773a4672616a084c0c 成熟: 真
さて、これでようやくテストネットと開発ネットの設定方法がわかり、テストネットのコマンド ラインから CKB を転送できるようになりました。

付録: CKB ドキュメント

以下は私が収集したリンクのリストです:

  • 詳しくはこちら

  • https://github.com/nervosnetwork/ckb/blob/develop/docs/get-ckb.md

  • https://github.com/nervosnetwork/ckb/tree/develop/docs

  • RFC: シンプルな UDT ドラフト仕様

  • RFC: 誰でも支払えるロック

  • https://gist.github.com/WilfredTA/bb1d2a80c420f0910d40ca881c2bd5d4

  • https://github.com/nervosnetwork/ckb-cli/blob/develop/README.md

  • https://github.com/nervosnetwork/ckb/wiki/チェーン

  • https://github.com/nervosnetwork/ckb/wiki

  • Godwokenの紹介 - 細胞モデルの欠けている部分

  • SECBIT Labs - zkp-toolkit-ckb - CKB 用のゼロ知識証明ツールキット

  • https://github.com/nervosnetwork/wasm-secp256k1-test

  • Summa - ビットコイン SPV ユーティリティ

  • https://github.com/nervosnetwork/ckb-cli/wiki/サブコマンド

テキスト終了

上記は、Rust のヘビー級開発者である Brian が CKB を構築して実行した最初の経験です。ブライアンの開発アイデアをまとめてみましょう。

1. 独自のCKBチェーンを構築する
→ CKB GitHubリポジトリをダウンロード
→ スクリプトの作成、展開、テストの方法を学ぶための開発ドキュメントをご覧ください
→ ドキュメントの最初から始め、独自のプライベートチェーンを作成する方法を確認してください。
→ 見つからない場合は、まずはテストネットワーク(Aggron)を構築してみてください。
→ 同期テストネットワーク
→ 開発チェーンの構築
→ 開発チェーンでのマイニング
→ アカウントを作成
→ 開発チェーンが完了しました。
2. トランザクションを送信してみる
→ 基礎となるckb-cliコマンドラインの使い方から始めましょう
→ コマンドライン操作用のwilkiを探す
→ アカウントを作成
→ 蛇口からお金を要求する
→ トランザクションを他のアドレスに送信する
→ 完了したかどうかブラウザで確認してください。

ブライアンの論点を要約してみましょう。

  1. ドキュメントには、独自の CKB チェーンを構築する方法に関する説明が見つかりません。
  2. 「Getting Started」ドキュメントには、CKB の構築方法に関する説明はありません。
  3. ckb-cliとckbのバージョン番号が一致していません。一方がv0.29.0でもう一方がv0.27.1である可能性がありますが、特別な説明はありません。
  4. アグロンテストの文書はまだ12月のものです
  5. テストネットの同期にどれくらい時間がかかるか、ブロック エクスプローラーのどこに移動すればよいかなどを示すガイドはありません。
  6. フィールドの特別な意味についての説明が不十分です。たとえば、lock_arg \ lock_hash \ hash_type は何をしますか?それらはドキュメントでは説明されていません (追記: rfc19 のようなコンテンツが役立つかもしれません)
  7. Devチェーンは、独自のCKBチェーンを構築するためのガイダンスを提供します。
  8. ckb-cliはパスワード入力後すぐにフィードバックやプロンプトを表示しません。
  9. なぜパスワードを設定する必要があるのか​​説明されていないようです。
  10. テストネットはリセットされ、開発者が何をすべきかについての十分なガイダンスがありませんでした。
  11. ckb.tomlの[block_assembler]に突然1000語のコメントが出現したが、コメント自体が分かりにくい部分がある
  12. ドキュメント内の例はデフォルトで折りたたまれているため、誤って見落とされる可能性があります。
  13. ドキュメントでは、なぜ lock_arg の前に 0x を付けなければならないのか、なぜ massage に 0x を入れなければならないのかなど、多くの命令がこのように実行される理由が明確に説明されていないようです。
  14. ウォレットの容量とは何ですか?技術用語の多くは開発者には知られているようです。


Brian による CKB の構築と実行の最初の経験は、非常に詳細な開​​発者体験レポートであり、参照して学ぶ価値があります。これを読んで、あなたも CKB を探索してみませんか?この記事からわかるように、Nervos CKB にはまだ発見され、改善されるのを待っている改善領域が数多くあります。実は、CKB「リナ」はまだ生後5か月未満の子供であり、成長するために皆の知恵を必要としています。
Nervos は常にオープンソースの精神を主張し、コミュニティと協力してプロジェクトとエコシステムを改善したいと考えています。また、全員からのフィードバックを積極的に受け入れています。ここでは、すべての開発者に招待状を送り、CKB を体験していただくことを歓迎します。バグの発見でも、アプリケーションの構築でも、単に取引を行うことでも、賞賛でも苦情でも、私たちはそれを大歓迎します。そして、これらはリナにとって最高の贈り物となるでしょう。
CKB でどんな落とし穴に遭遇しましたか?コメント欄でぜひご意見をお聞かせください。皆様の「体験レポート」をお待ちしております。

<<:  ビットコインの秘密の歴史: 謎のストリートビットコイントレーダー

>>:  カナンテクノロジー:昨年10億ドルを失ったが、口座にはまだあと1年は生活できるだけのお金が残っている

推薦する

スポットビットコインETF申請の10年間の軌跡

今後数日のうちに、SEC はビットコインを直接保有する ETF を最終的に承認する可能性があります。...

ビットコインが財産の範疇に含まれる場合、課税はどのように定義されるのでしょうか?

7月4日の金投外為ネットワークによると、ビットコインは、オーストラリアの現行の規制の下で「通貨」ま...

「政策配当」が産業用ブロックチェーンのブレークスルーをリリース

文書によると、6月18日、四川省発展改革委員会とエネルギー局は仮想通貨「マイニング」プロジェクトの一...

Hangjiu Star: 同社の製品はFilecoinの大規模マイナーテスト基準に達しました

最近の報道によると、杭州星は自社製品が大型鉱山機械のテストの標準要求を満たし、すべての問題を解決し、...

Twitter CEO: ビットコインはTwitterの将来にとって「大きな部分」を占める

TwitterのCEO、ジャック・ドーシー氏は投資家に対し、ビットコインがTwitterの将来におい...

電気料金が安いため、四川省の山中にビットコインの「鉱山」が多数隠されている

2月21日の中国ビジネスニュースの報道によると、ビットコインの神秘的な世界には「マイニング」という特...

貴州省経済調査局:仮想通貨の「マイニング」活動から生じる犯罪リスクに注意

近年、通貨界における「富を築く神話」により、仮想通貨はより多くの人々の視野に入り、多くのプレイヤーが...

フォースリサーチ | Filecoin の再生不可能な計算能力の影響は何ですか?

この記事は元々IPFS Force Zoneによって書かれました2020年8月25日のFileco...

IPFSプロトコルがイーサリアム(フォーク)ネットワークに切り替わり、開発者コミュニティが重要な要素となる

ブロックチェーンベースの P2P ハイパーメディア プロトコル IPFS は、Ethereum (f...

ビットコインの異常な高騰の後、「マイニング事故」は起こるのか?

ビットコイン熱は世界を席巻し、年初には1コインあたり1,000ドルだった価格が1万ドルを突破し、12...

暗号通貨のマイナーがアメリカの小さな町に目を向ける

Bitcoinist の報道によると、暗号通貨市場にとって厳しい一年であったにもかかわらず、米国中の...

サークルCEO:ビットコインはまだ開発の初期段階にあり、今後5年または10年で誰もが使用できるようになるのは不可能です。

エコノミスト誌によると、先月ニューヨークで開催された「Finance Disrupted」イベントで...

ブロックチェーン不動産スタートアップBitmarkが170万ドルを調達

クレイジー解説:国際ビットコイン不動産協会、Ubitquityなどは、不動産物件登録分野のスタートア...

雨の日に備えて、ビットコインのハードフォークに備えましょう。必要なのは正当な理由だけです

ビットコインのハードフォークは差し迫ってはいないものの、ビットコインの開発者はすでにハードフォークに...