このレポジトリは、経産省主催のブロックチェーンハッカソン2019でのワークショップで使われるレポジトリです。 Twitterとブロックチェーンを使ったアイデンティフィケーションを実現します。 当日の資料はこちら
- Node(v9.6.1)
- npm(v5.6.0)
- https://getho.io にアクセス
- ユーザー登録をする
- (ノードの画面が確認できたらOKです!)
- 今回のアプリケーションのレポジトリを取得します
$ git clone git@github.com:popshootjapan/blockchain_hackathon_2019.git
$ cd blockchain_hackathon_2019
- webアプリケーションを動かすための依存パッケージをインストールします
$ npm install
簡単にいうと,
自分のアドレスの身分証明をTwitterを使って実現する
- 友達に送金したい時に、教えられたアドレスが本当にその人のものかどうかを証明するには?
- そのアドレスと秘密鍵による署名の検証ができたソーシャルアカウントと紐づいていれば、そのアドレスの身分を証明することができる
- 紐づくソーシャルアカウントの数が増えるほど、そのアドレスの信頼度は上がっていく
- 自分のTwitterアカウントID(例: @st_dsk)に対してウォレットアドレスの秘密鍵で署名
- 署名した文字列をTwitterに投稿
- ツイートURLから署名を取得し、その署名とTwitterアカウントIDをコントラクトの登録用関数に投げる
- コントラクトで検証し、成功すればウォレットアドレスとTwitterアカウントIDを紐づけてブロックチェーンに書き込む
getho.ioにアクセスし、アカウントの登録
専用のプライベートノードとドメインが作られます
URL: github.com/popshootjapan/blockchain_hackathon_2019
レポジトリのダウンロード
$ git clone git@github.com:popshootjapan/blockchain_hackathon_2019.git
依存ライブラリのインストール
$ npm install
(※ python2系必須)
./contracts/TwitterIdentify.sol
contract TwitterIdentify {
// アドレスとTwitterアカウントIDのmapping
mapping(address => string) public twitterIdentifications;
function identify(string twitterId, bytes32 hash, bytes signature)
public { ... }
function ecverify(bytes32 hash, bytes signature)
internal pure returns(address sig_address) { ... }
}
./migrations/2_deploy_TwitterIdetify.js
var TwitterIdentify = artifacts.require("./TwitterIdentify.sol");
module.exports = function(deployer) {
deployer.deploy(TwitterIdentify);
};
※の部分を書き換えてください ./truffle-config.js
module.exports = {
networks: {
getho: {
host: "<YOUR SUBDOMAIN>.getho.io/jsonrpc",
port: 80,
network_id: 1010,
gas: 4712388
}
}
}
$ ./node_modules/.bin/truffle migrate --network getho
とを書き換えてください
./app.js
var web3 = new Web3('http://<YOUR SUBDOMAIN>.getho.io:80/jsonrpc');
const contractAddr = '<CONTRACT ADDRESS>';
$ node app.js
サーバが立ち上がると、 http://localhost:3000にアクセスできます
ログイン
$ ./getho_osx login
ノード一覧取得
$ ./getho_osx nodes
コントラクトのアップロード
$ ./getho_osx upload ./builds/contracts/TwitterIdentify.json -s <YOUR SUBDOMAIN>
ダッシュボードに追加されます(※画面右下)
関数の実行ができます
- コントラクトに署名したURLを保持する
- 署名したURLのリンクをWeb上に表示させる
(※ 答えの実装はadditional_practice
ブランチにあります)