GitHubじゃ!Pythonじゃ!

GitHubからPython関係の優良リポジトリを探したかったのじゃー、でも英語は出来ないから日本語で読むのじゃー、英語社会世知辛いのじゃー

blockstack

blockstack-core – Blockstack のリファレンス実装

投稿日:

Blockstack http://blockstack.org のリファレンス実装

ブロックスタックコア

このパッケージは、 Blockstackノードのリファレンス実装と、それをデプロイするためのツールとスクリプトを提供します。

Blockstackアプリケーションを使い始めるには、最初にBlockstack Browserを使用することをお勧めします。

目次

Blockstackとは何ですか?

Blockstackは、ユーザーがデータを所有している分散アプリの新しいインターネットです。

ブロックスタックアプリケーションは、 悪い設計思想には従いません ユーザーのIDを変更、転送、または取り消すことはできず 、ユーザーのデータを許可なく読み書きすることはできません Blockstackは、既存のWebツールを使用して、悪意のあるアプリケーションを構築するためのプラットフォーム、ネットワーク、およびSDKを提供します。 あなたがWeb開発者であれば、あなたのスキルはすぐにBlockstackに転送できます。

Blockstackアプリケーションは、従来のWebアプリケーションと同じように見えます。 フードの下では、ユーザーの認証と格納にBlockstack APIを使用します。 BlockstackはBitcoinブロックチェーンの上に構築された分散型ネーミングおよび公開鍵インフラストラクチャであるBlockstack Naming Service (BNS)を使用してユーザー認証を処理します。 これは、 localStorageように見え、感じる分散型のキー/バリューストレージシステムGaiaを使用してストレージを処理しlocalStorage 、DropboxやS3などの既存のストレージシステムを使用してアプリケーションデータを安全に保存および共有できます。

Blockstackアプリケーションは、従来のWebアプリケーションと大きく2つの点で異なります。 まず、 ユーザーは自分のアイデンティティを所有しています。
Blockstackブラウザは、ユーザーが秘密鍵とプロファイルデータを直接制御できるようにし、ブロックスタックアプリケーションのSSOプロバイダの役割を果たします。 Blockstack Coreは、ユーザーがお互いの公開鍵を発見する手段としてBNSを提供します。

2つ目の大きな違いは、 ユーザーがデータを所有していることです。 ユーザーは自分のアプリケーションデータがどこにホストされ、 がそれを読むことができるかを選択します。 ガイアはユーザーが選択したストレージプロバイダにデータをロードして保存し、アプリ固有のキーで自動的に署名して暗号化します。 目的の受信者だけがデータを認証して読み取ることができます。 ストレージプロバイダは信頼できない仲介者として扱われます。

Blockstackを使う理由

Blockstackは、ユーザーと開発者の勝利/勝利です。 ユーザーはアプリやサービスにロックされていません。 代わりに、ユーザーは自分のアイデンティティとデータをアプリからアプリに持って行く。 ユーザーが許可することを選択した場合にのみ、アプリケーションはユーザーデータを読み取ることができます。 アプリがオフラインになっても、ユーザーは引き続きデータを保持します。 ユーザーがより優れたアプリを見つけたら、そのアプリにシームレスに切り替えることができます。 データはエンドツーエンドで暗号化され、アプリとは別にホストされるため、ハッカーが盗むものは何もないため、データ侵害はユーザにとって重要ではありません。

開発者はブロックスタックの恩恵を受けます。 AppsはBlockstackで簡単に構築でき、ユーザーデータを保存する必要がなくなるため、操作のオーバーヘッドが少なくてすみます。 多くの重要ではないアプリケーションは、 blockstack.jsを使ってシングルページのJavascriptアプリケーションとして実装し、静的なWebページとしてデプロイできます。 Blockstack APIは、既存のWebアプリケーションに統合するために、小さく、シンプルで簡単です。

Blockstack Coreとは何ですか?

Blockstack Coreは、GaiaのストレージルーティングシステムであるBNSとAtlasを実装しています。 ブロックスタックコアノードは、ブロックスタックネットワークのバックボーンを形成します。 各ノードはBitcoinブロックチェーンのインデックスを作成し、すべての名前、公開鍵、およびストレージルーティング情報の完全な複製を保持します。 これにより、Blockstackネットワークは特にノードの障害に対して回復力があります。アプリケーションは単一のBlockstack Coreノードと通信するだけで済みます。新しいノードまたは回復するノードは、そのピアから欠落している状態をすばやく再構築できます。

パワーユーザーは、Blockstackネットワークへの信頼性の高いアクセスを得るために、ラップトップまたは家庭/オフィスネットワーク上でローカルBlockstack Coreノードを実行することをお勧めします。 ローカルノードは、Blockstack Coreノードの残りのノードと同じ状態を維持するため、アップストリームノードに到達できない場合やオフラインになった場合でも、名前、公開鍵、ストレージルートの提供を継続します。

ブロックスタックコアのインストール

Blockstack Coreには、ネットワークの他の部分と通信し、ローカルのBNSとストレージルーティング状態( blockstack-core )を構築するバックグラウンドネットワークデーモンと、名前を容易にする安定したRESTful APIを提供するAPIシムがありますストレージルーティングルックアップと登録( blockstack api )が含まれます。 どちらもデフォルトでインストールされます。

Blockstack Coreをインストールするには、次の3つの方法があります。

ソースからインストールする

Blockstack Coreをソースからインストールする前に、 libffi-devlibssl-devをインストールする必要があります。 MacとLinuxのユーザーは通常、それぞれのパッケージマネージャーからこれらのパッケージを取得できます。

これらの依存関係がインストールされたら、次のように、付属のsetup.pyスクリプトを使用して、ソースからBlockstack Coreをインストールできます。

$ git clone https://github.com/blockstack/blockstack-core
$ cd blockstack-core
$ python2 ./setup.py build
$ sudo python2 ./setup.py install

また、 virtualenvを使用して、非システムディレクトリにBlockstack Coreをインストールすることもできます。

pipインストールする

BlockstackはPython 2.7に対してビルドされています。 pip代わりにpip2を使用する必要があります。 pip2がない場合は、 pipがPython 2用に設定されていることを確認する必要があります。

Macの場合:

# Install blockstack
$ pip install blockstack --upgrade

CentOS 7およびRHEL:

# Disable SELinux
$ setenforce 0
$ sed -i --follow-symlinks 's/^SELINUX=.*/SELINUX=disabled/g' /etc/sysconfig/selinux && cat /etc/sysconfig/selinux

# Install dependencies
$ yum install epel-release
$ yum install python-pip python-devel openssl-devel libffi-devel rng-tools gmp-devel zlib-devel 

# Install blockstack
$ sudo pip install blockstack --upgrade

$ systemctl stop firewalld && systemctl disable firewalld

DebianとUbuntuについて:

# Install dependancies
$ sudo apt-get update && sudo apt-get install -y python-pip python-dev libssl-dev libffi-dev rng-tools libgmp3-dev
$ sudo pip install pyparsing

# Install blockstack
$ sudo pip install blockstack --upgrade

dockerと一緒にインストール

blockstack-coreを実行する別の方法は、ドッカーを経由する方法です。 quay.ioで利用可能な 、このリポジトリのコミットごとの画像ビルドを提供します。

ドッカーで実行する一般的なワークフローは、 --fast_syncコアノードのデータをホスト上の場所に--fast_syncた後、そのデータの上にコンテナを起動することです。 各インスタンスを実行するには、少なくとも5GBのディスクが必要です。 tools/docker blockstack api tools/dockerフォルダにblockstack-coreblockstack apiコンポーネントを実行するサンプル実装があります。 以下の手順では、その実装を使用する方法を示します。

# Clone the repo and navigate to the tools/docker dir:
git clone git@github.com:blockstack/blockstack-core.git
cd blockstack-core/tools/docker

# Initialize the core node and api wallet
./docker-tools.sh init-core
./docker-tools.sh init-api

# Wait for the core node to initialize (~15-20 min)
# Check if job is still running:
docker ps -f name=blockstack-core-init

# Once job finishes start the containers with docker-compose
docker-compose up -d

# OR

# Once the job finishes start the containers
# blockstack-core
docker run -d \
  -v './data/core/server/:/root/.blockstack-server' \ 
  -v './data/core/api/:/root/.blockstack' \ 
  -p '6264:6264' \ 
  --restart 'always' \
  --name 'blockstack-core' \
  quay.io/blockstack/blockstack-core:master \ 
  blockstack-core start --foreground --debug

# blockstack api
docker run -d \ 
  -v './data/api:/root/.blockstack' \ 
  -v './data/api/tmp:/tmp' \ 
  -e 'BLOCKSTACK_CLIENT_INTERACTIVE_YES=0' \ 
  -p '6270:6270' \ 
  --name 'blockstack-api' \
  --restart 'always' \ 
  quay.io/blockstack/blockstack-core:master \ 
  blockstack api start-foreground -y --debug --password dummywalletpassword

# Test connectivity for the blockstack-core container
# NOTE: It can take some time (~1-5 min) before the RPC 
# interface becomes available
./docker-tools.sh test-core localhost 6264

# Test connectivity for the blockstack api container
./docker-tools.sh test-api localhost 6270

ノート:

  • この方法は現在、Linux上でのみ完全にサポートされています。
  • blockstack-coreインスタンスはMacOSのドッカーで問題なく実行されます。 これを有効にするには、 blockstack api docker-compose.yamlファイルのblockstack apiセクションをコメントアウトし、. ./docker-tools.sh init-apiコマンドを実行しないでください。
  • 上記のスクリプトを実行するにはsudoアクセスが必要です
  • ホストごとにこの設定の複数のインスタンスを実行できます。 各コンテナに少なくとも1つのCPUコアを許可する
  • 別のbitcoindノードまたは両方のコンテナのutxo_providerを設定するには、 blockstack-server.ini ./docker-tools.sh init-*コマンドを実行する前にblockstack-server.iniclient.ini両方の設定を変更する必要があります。 init-*実行後、 data/core/server/blockstack-server.inidata/api/client.inidata/api/client.iniしてこれらの設定を変更する必要があります。

ブロックスタックコアノードの実行

これには2つの部分があります。

  • blockstack-coreデーモンを実行してBlockstackネットワーク状態のローカルコピーを構築します。
  • blockstack apiデーモンを実行して、 blockstack apiして登録するためのRESTful APIエンドポイントを提供します。

ブロックスタックコアの設定

何かをする前に、Blockstack Coreノードを設定する必要があります。

$ blockstack-core configure

すべてのデフォルト値を受け入れることは安全です。 ~/.blockstack-server/いくつかの設定状態が生成され~/.blockstack-server/

各Blockstack Coreノードはネットワーク状態の完全なコピーをローカルに維持するため、最初にBitcoinブロックチェーンを起動するときにその状態をBitcoinブロックチェーンと同期させる必要があります。 これには数日かかることがあります。 これを克服するために、新しいBlockstack Coreノードに最新のネットワーク状態のスナップショットを提供するいくつかの「高速同期」サーバーを実行します。 高速同期には数分かかります。

スナップショットからBlockstack Coreノードを起動するには、

$ blockstack-core --debug fast_sync

デフォルトでは、 http://fast-sync.blockstack.org/snapshot.bskからスナップショットをhttp://fast-sync.blockstack.org/snapshot.bskし、ビルトインの公開鍵を使用してその信頼性を検証します。 ~/.blockstack-server/ディレクトリにネットワーク状態(24時間以内)の最新のスナップショットが表示されます。

Blockstack Coreノードを起動するには、

$ blockstack-core --debug start

これはバックグラウンドでBlockstack Coreノードを開始します。 --debugフラグを渡すことをお勧めします。冗長出力を受け取ると、問題の診断に役立ちます。

~/.blockstack-server/blockstack-server.logノードのログがあり~/.blockstack-server/blockstack-server.log

APIエンドポイントの設定

Blockstack APIエンドポイントは、Blockstackネットワークと対話するための便利なRESTful APIを提供します。 これは安定版であり、バージョン管理され、 文書化されています 新しいユーザ名を登録し、他のユーザの公開鍵とストレージルーティング情報を検索するためのプログラムインタフェースを提供します。 さらに、 core.blockstack.orgexplorer.blockstack.orgのようなWebサービスを実装するためにも使用されます。 Web上でBlockstackとやり取りするプログラムは、RESTful APIを使用する必要があります

blockstack-coreデーモンを実行したら、RESTfulなAPIエンドポイントに立ち向かうことができます。 これは、Blockstack Coreに付属のblockstack CLIプログラムによってblockstackます。

まず、APIエンドポイントを設定する必要があります。 これを実行するには、以下を実行します。

$ blockstack setup

blockstackプログラムは~/.blockstack/その状態を格納します。

  • 設定ファイルは~/.blockstack/client.ini
  • ログファイルは~/.blockstack/api_endpoint.log
  • 暗号化されたWalletファイルは~/.blockstack/wallet.json

注:これによりウォレットが生成されます。 パスワードを保存してください。 財布は名前の支払いに使用さます。

ヒント

デフォルトの設定オプションのほとんどは健全です。 ただし、注意すべき点がいくつかあります。

  • serverport求められたら、 blockstack-coreデーモンのホストとポート番号をblockstack-coreます。 デフォルトポートは6264です。

  • ウォレットのパスワードを入力するよう求められます。 再度、 壁紙のパスワードを保存してください これは、ディスク上のウォレットを暗号化するキーを派生させるために使用されます。

  • RESTfulなAPIメソッドの中には、APIパスワードが必要なものがあります。 これは設定ファイルの[blockstack_client]下に[blockstack_client]として設定されています。

この手順が完了したら、次の方法でAPIエンドポイントを開始することができます。

$ blockstack api start

ブロックスタックコアの使用

Blockstack Coreをインストールすると、2つのデーモンが実行されます。

  • blockstack-coreデーモン
  • blockstack apiデーモン

Blockstack Coreと対話するための標準的な方法は、 blockstack apiデーモンです。 APIエンドポイントの完全なドキュメントは、 こちらから入手できます 以下は一般的な例です。

APIエンドポイントが稼働していることを確認するには、次のようにpingを実行します。

$ curl http://localhost:6270/v1/ping
{"status": "alive", "version": "0.18.0"}

次のように、APIエンドポイントがblockstack-coreデーモンに接続することを確認することができます。

$ curl http://localhost:6270/v1/names/muneeb.id
{"status": "registered", "zonefile": "$ORIGIN muneeb.id\n$TTL 3600\n_http._tcp URI 10 1 \"https://gaia.blockstack.org/hub/1J3PUxY5uDShUnHRrMyU6yKtoHEUPhKULs/0/profile.json\"\n", "expire_block": 599266, "blockchain": "bitcoin", "last_txid": "7e16e8688ca0413a398bbaf16ad4b10d3c9439555fc140f58e5ab4e50793c476", "address": "1J3PUxY5uDShUnHRrMyU6yKtoHEUPhKULs", "zonefile_hash": "37aecf837c6ae9bdc9dbd98a268f263dacd00361"}

次のコマンドでAPIデーモンを停止できます。

$ blockstack api stop

blockstack-coreデーモンは、次のコマンドで停止できます。

$ blockstack-core stop

Blockstack CLIの使用

Blockstack Coreとの対話にCLIインターフェイスを使用する方法については、 使用方法のドキュメントを参照してください。

トラブルシューティング

ImportError:_scryptという名前のモジュールがありません

Blockstack CoreのAPIエンドポイントは、ウォレットを保護するためにscryptを使用します。 しかし、一部のLinuxディストリビューションでは、インストールに苦労しています。

このコマンドを実行すると、通常この問題が修正されます。

$ pip uninstall scrypt; pip install scrypt

HTTP 403でAPI呼び出しが失敗する

一部のAPI呼び出しは、Walletやその他の機密APIデーモンの状態(設定ファイルなど)と対話するため、特権が与えられます。 APIのドキュメントでは 、これらのメソッドはRequires root authorizationです。

これらのメソッドを使用するには、2つのことを行う必要があります:

  • AuthorizationヘッダーにAPIパスワードを渡す
  • Originヘッダーをhttp://localhost:8888ます。

Originヘッダーが必要な理由は、同じホスト上の悪意のあるWebページがAPIエンドポイントにアクセスしないようにするためです。 原点http://localhost:8888はホワイトリストに登録されています。これは、Blockstack Browserが使用するためです。

APIパスワードを入力するには、 Authorizationフィールドに入力します。 ~/.blockstack/client.iniファイルからパスワードを取得することができます:

[blockstack-api]
...
api_password = super_secret_password  # <-- this is the password you need
...

HTTPリクエストは次のようになります(この例では、エンドポイント/v1/node/configが使用されています)。

GET /v1/node/config HTTP/1.1
Host: localhost:6270
User-Agent: curl/7.58.0
Accept: */*
Authorization: bearer super_secret_password
Origin: http://localhost:8888

次のようにcurlを使用してこのリクエストを生成できます。

$ curl -H 'Authorization: bearer super_secret_password' -H 'Origin: http://localhost:8888' http://localhost:6270/v1/node/config

詳細なデバッグ出力の取得

Blockstack Coreはデフォルトで非常に多くのエラー以外の情報を記録しません。 冗長出力を得るには、次のように、– blockstack api blockstack-coreblockstack api両方に渡すことができます:

$ blockstack-core --debug start && tail -f ~/.blockstack-server/blockstack-server.log
$ blockstack --debug api start && tail -f ~/.blockstack/api_endpoint.log

さらに、 blockstack-coreblockstack api両方を、デーモンにならずにフォアグラウンドで実行することができます。 これを行うには、次のように実行します。

$ blockstack-core --debug start --foreground
$ blockstack --debug api start-foreground

開発者向けリソース

v0.18.0はBlockstack Coreの現在の安定版です。 masterブランチで使用できます。

次のリリースは、 開発に基づいて構築されています。 すべてのプルリクエストをdevelopブランチに提出してください。

リリースノートのリストでは、各リリースで何が変更されているかを確認できます。

Blockstack Coreには広範な統合テストフレームワークがあり、サンドボックス環境でBlockstackを試すことができます。 テストフレームワークは、Blockstack Coreノードに、Bitcoinを費やさずに異なる名前と名前空間のトランザクションを安全に試すことができるローカルのプライベートBitcoinブロックチェーンを提供します。 統合テストフレームワークを使用して、新しいAPI呼び出しから新しいBlockstack Browser機能までのすべてをテストします。 開始するには関連文書を参照してください。

私たちはどんな小さな貢献も歓迎します! 関与するすべての人に貢献プロセスを簡単かつ効果的にさせるために、 オープンソース貢献するためのガイドライン見直してください

コミュニティ

このGithubプロジェクトを超えて、Blockstackは公開フォーラムと許可されたSlackチャンネルを維持しています。 さらに、このプロジェクトでは、コミュニティアナウンスメントを送信するメーリングリストを管理しています。

Blockstackコミュニティの規模が大きいほど、定期的に人との出会いが行われます。 プロジェクトのYouTubeチャンネルには、これらのミーティングの一部のビデオや、新しいユーザーのためのビデオチュートリアルが含まれています。

参考文献

BlockstackのWebサイトにアクセスし詳細な記事やドキュメントをチェックすると詳細を知ることができます。

また、査読済みのBlockstack論文を読むこともできます:

Blockstackについての質問が多い場合は、フォーラム検索し 、質問に回答がない場合は新しい質問を開始してください。

著作権とライセンス

コードおよび文書の著作権は、2018年のblockstack.orgに帰属します。

このコードは、GPL v3のライセンスで公開されおり、ドキュメントはCreative Commonsライセンスで公開されています。







-blockstack
-, , , , , , , , ,

執筆者: