SlideShare a Scribd company logo
1 of 39
はじめに
Ethereumって知ってる人🙋
Ethereumとは
分散型アプリケーションやスマートコントラクトを構築する
ためのプラットフォーム。
いわゆるブロックチェーンのプロトコルのひとつ。
ブロックチェーンを利用した
アプリが作れる!
既存のアプリや実装例が幾つか存在する。
● NameCoin: bitcoinのP2PシステムをDNS利用。
● Z.com cloud: 「本人のみが受け取れる宅配ボックス」の実証実験
● OSSでの実装例: https://guide.blockchain.z.com/ja/docs/oss/
でも、いまのところNode.jsが主流...
truffle.jsというフレームワークやweb3.jsというライブラリが
があり、JavaScriptが一番開発すすんでて便利!
でも
Goで書きたい
わかる
調べたらGo bindingが
あるらしい
なので
Goで動かしてみたいとEthereumをうごかしてみます!
Goで動かすDApp
University of Aizu.
Koki Natsume.
目次
1. 自己紹介
2. はじめに
3. web3とスマートコントラクトでの構成
4. Goで動かしてみる
5. おわりに
自己紹介
1. 自己紹介
名前:棗 光幹
大学:会津大学学部2年
開発:webアプリケーション
言語:Golang, JavaScript
SNS:natsumen
最近:OS, pwnなどレイヤー低め, 留年しそうでつらい...
web3とコントラクトでの構成
DAppは大体こんな感じ
サーバーサイド(ex. API)
アプリケーション層
web3ライブラリ
インターフェース層
インフラ層
RPC
Ethereumノード
(ブロックチェーン)
P2Pネットワーク
Ethereumノード(ブロックチェーン)
スマート
コントラクト
P2PEthereum
ノードネットワーク
web3とは
EthereumのAPIライブラリ群。
スマートコントラクトとの通信などをweb3のAPIを介してで
きる。
web3ライブラリ群
JavaScript:web3.js
Python:web3.py
Haskell:hs-web3
Java:web3j
Scala:web3j-scala
DAppは大体こんな感じ
サーバーサイド(ex. API)
アプリケーション層
web3ライブラリ
インターフェース層
インフラ層
RPC
Ethereumノード
(ブロックチェーン)
P2Pネットワーク
Ethereumノード(ブロックチェーン)
スマート
コントラクト
P2PEthereum
ノードネットワーク
スマートコントラクトとは
ブロックチェーンを操作するプログラムのこと。
現在はスマートコントラクトの高級言語としてSolidityという言語などがある。
DAppは大体こんな感じ
サーバーサイド(ex. API)
アプリケーション層
web3ライブラリ
インターフェース層
インフラ層
RPC
Ethereumノード
(ブロックチェーン)
P2Pネットワーク
Ethereumノード(ブロックチェーン)
スマート
コントラクト
P2PEthereum
ノードネットワーク
Go bindingで動かしてみる
Goでやる
● Goだとgo-ethereumが公式で出しているbindingが利用できてweb3なしで実
装できる。
● また、abigenという.abi(json)ファイルからgoのコードが生成できるツールが
ある(JSON-RPC)。
● 一応、コードはhttps://github.com/phustly/go-eth-testにあります。
1. コントラクトと通信する
やること
● solidityで書かれたtoken.solからJSONのABIを生成する。
● 生成されたtoken.abiからabigen(go-ethereum/cmd/abigen)でtoken.goを生成
する。(JSON-RPC)
● token.goを利用しRPC通信して新しいトークンのインスタンスを作り、トー
クンの名前を取得する 。(main.go)
以上
ABIとは
Application Binary Interfaceの略。
サーバーサイドのプログラムからethereumの ecosystem内のcontract(solidityな
ど)と通信する一般的な方法。
token.sol -> token.abi
.solファイルをコンパイルする。
$ solcjs token.sol --abi
or
$ solc --standard-json token.sol <- solcがinstallとbuildできなかった...
=> token.abiができる
token.abi -> token.go
abiからgoのコードを生成する。
go get github.com/ethereum/go-ethereum/cmd/abigen
$ abigen --abi token.abi --pkg main --type Token --out token.go
コントラクトと通信
出力:
Token name: unicorn
2. トランザクションを呼び出す
やること
● 先ほどと同様、token.solからtoken.goを生成する。
● 入力するトランザクションを指定して署名し、認証データを取得する。
(bind.NewTransferメソッド)(main.go)
● 認証データを元に許可されたトランザクションを呼び出す。(main.go)
● トランザクションのハッシュ値を取得する。
以上
2. トランザクションを呼び出す
Go bindingではトランザクションをローカルに署名する必要があり、これを
Ethereumノードにわたさない。
つまり、署名に利用するパスワードやキーの情報はノードに格納しないで、ロー
カルのマシン内で処理する。
token.sol -> token.go
実はダイレクトにsolidityからgoのコードができちゃう。
$ abigen --sol token.sol --pkg main --out token.go
でもこれは --type, --bin, --abi指定などができないため、すべてのコントラクトが
生成され、バインドされるという副作用がある。
トランザ
クション
を呼び出す
出力:0x4f4aaeb29ed48e….
おわりに
まとめ
● DAppも一応Goでかける。
● solidity -> abi -> goの流れで使える。
● ethclientパッケージからPRC接続できる。
● account/abi/bind パッケージからトラザクションの処理とかできる。
● Go読みやすい、最高。
おわりに
● まだ自分もgo-ethereumを読みきれなくてgo bindingどれだけ柔軟にアプリを
実装できるか把握しきれてないのですが、web3と同じレベルことは普通にで
きると思う(コード量は増える)。
● これからとして、サーバーをGoのみでひとつアプリを作って、ブログか何か
しらでより濃い内容のアウトプットできたらといいなと思う。
● solidityやweb3、アプリの実装例については多分この後ktrが話すかも...?
参考
● go-ethereum wiki(white paper): https://github.com/ethereum/go-ethereum/wiki
● solidity document: https://solidity.readthedocs.io/en/develop/index.html
● NTT fintech コラム: http://www.intellilink.co.jp/article/column/fintech/index.html
● ethereum document unicorn: https://ethereum.org/token
● ethereum入門(日本語翻訳): https://www.gitbook.com/book/a-mitani/mastering-
ethereum
● Qiitaなど
ご清聴ありがとうございました!

More Related Content

What's hot

たのしいNode.js
たのしいNode.jsたのしいNode.js
たのしいNode.js
ishiki-takai
 
Vagrant packana16-otahi
Vagrant packana16-otahiVagrant packana16-otahi
Vagrant packana16-otahi
Hiroshi Ota
 
Pythonでクラウド上のスクリプトを実行する
Pythonでクラウド上のスクリプトを実行するPythonでクラウド上のスクリプトを実行する
Pythonでクラウド上のスクリプトを実行する
aoshiman
 
俺のGentooがこんなに可愛いわけがない
俺のGentooがこんなに可愛いわけがない俺のGentooがこんなに可愛いわけがない
俺のGentooがこんなに可愛いわけがない
Takuto Matsuu
 
エンジニアのための痔の話
エンジニアのための痔の話エンジニアのための痔の話
エンジニアのための痔の話
Kouhei Maeda
 

What's hot (18)

たのしいNode.js
たのしいNode.jsたのしいNode.js
たのしいNode.js
 
Rumpを使ってみる
Rumpを使ってみるRumpを使ってみる
Rumpを使ってみる
 
Vagrant packana16-otahi
Vagrant packana16-otahiVagrant packana16-otahi
Vagrant packana16-otahi
 
Oscの沼にはまった
Oscの沼にはまったOscの沼にはまった
Oscの沼にはまった
 
Pythonでクラウド上のスクリプトを実行する
Pythonでクラウド上のスクリプトを実行するPythonでクラウド上のスクリプトを実行する
Pythonでクラウド上のスクリプトを実行する
 
HTML5-pronama-study
HTML5-pronama-studyHTML5-pronama-study
HTML5-pronama-study
 
ザックリとDocker
ザックリとDockerザックリとDocker
ザックリとDocker
 
Mixer vessel by cfmesh
Mixer vessel by cfmeshMixer vessel by cfmesh
Mixer vessel by cfmesh
 
Three20のTTURLRequest
Three20のTTURLRequestThree20のTTURLRequest
Three20のTTURLRequest
 
俺のGentooがこんなに可愛いわけがない
俺のGentooがこんなに可愛いわけがない俺のGentooがこんなに可愛いわけがない
俺のGentooがこんなに可愛いわけがない
 
エンジニアのための痔の話
エンジニアのための痔の話エンジニアのための痔の話
エンジニアのための痔の話
 
全人類Linuxを使え
全人類Linuxを使え全人類Linuxを使え
全人類Linuxを使え
 
Casual Web-browsing with gPXE and SYSLINUX
Casual Web-browsing with gPXE and SYSLINUXCasual Web-browsing with gPXE and SYSLINUX
Casual Web-browsing with gPXE and SYSLINUX
 
Open vzでdr hbstudy
Open vzでdr hbstudyOpen vzでdr hbstudy
Open vzでdr hbstudy
 
S2s websrv201011-presen
S2s websrv201011-presenS2s websrv201011-presen
S2s websrv201011-presen
 
SIerアーキテクト視点でみたKotlinの紹介
SIerアーキテクト視点でみたKotlinの紹介SIerアーキテクト視点でみたKotlinの紹介
SIerアーキテクト視点でみたKotlinの紹介
 
opencoconの作り方 (オープンソースカンファレンス2015 Tokyo/Spring 小江戸らぐセミナー)
opencoconの作り方 (オープンソースカンファレンス2015 Tokyo/Spring 小江戸らぐセミナー)opencoconの作り方 (オープンソースカンファレンス2015 Tokyo/Spring 小江戸らぐセミナー)
opencoconの作り方 (オープンソースカンファレンス2015 Tokyo/Spring 小江戸らぐセミナー)
 
Mesh dexcs
Mesh dexcsMesh dexcs
Mesh dexcs
 

Similar to Goで学ぶDApp(aizu.go#2)

クラウド開発に役立つ OSS あれこれ
クラウド開発に役立つ OSS あれこれクラウド開発に役立つ OSS あれこれ
クラウド開発に役立つ OSS あれこれ
Masataka MIZUNO
 
Mojolicious::Liteを使ってみよう
Mojolicious::Liteを使ってみようMojolicious::Liteを使ってみよう
Mojolicious::Liteを使ってみよう
charsbar
 
ドキュメンテーションを加速するストレスフリーの作図ツール『blockdiag』 jus2011年6月勉強会
ドキュメンテーションを加速するストレスフリーの作図ツール『blockdiag』 jus2011年6月勉強会ドキュメンテーションを加速するストレスフリーの作図ツール『blockdiag』 jus2011年6月勉強会
ドキュメンテーションを加速するストレスフリーの作図ツール『blockdiag』 jus2011年6月勉強会
Takayuki Shimizukawa
 
Tizen web app について調べたよ
Tizen web app について調べたよTizen web app について調べたよ
Tizen web app について調べたよ
Naruto TAKAHASHI
 
Firefox OS - Blaze Your Own Path
Firefox OS - Blaze Your Own PathFirefox OS - Blaze Your Own Path
Firefox OS - Blaze Your Own Path
dynamis
 
13016 n分で作るtype scriptでnodejs
13016 n分で作るtype scriptでnodejs13016 n分で作るtype scriptでnodejs
13016 n分で作るtype scriptでnodejs
Takayoshi Tanaka
 
ぼくのかんがえたさいきょうのうぇぶあぷりけーしょんふれーむわーく - YAPC Asia 2011
ぼくのかんがえたさいきょうのうぇぶあぷりけーしょんふれーむわーく - YAPC Asia 2011ぼくのかんがえたさいきょうのうぇぶあぷりけーしょんふれーむわーく - YAPC Asia 2011
ぼくのかんがえたさいきょうのうぇぶあぷりけーしょんふれーむわーく - YAPC Asia 2011
Hiroh Satoh
 

Similar to Goで学ぶDApp(aizu.go#2) (20)

クラウド開発に役立つ OSS あれこれ
クラウド開発に役立つ OSS あれこれクラウド開発に役立つ OSS あれこれ
クラウド開発に役立つ OSS あれこれ
 
フロントエンドの技術で始めるデスクトップアプリ
フロントエンドの技術で始めるデスクトップアプリフロントエンドの技術で始めるデスクトップアプリ
フロントエンドの技術で始めるデスクトップアプリ
 
Node.js Tutorial at Hiroshima
Node.js Tutorial at HiroshimaNode.js Tutorial at Hiroshima
Node.js Tutorial at Hiroshima
 
コミュニティのある風景
コミュニティのある風景コミュニティのある風景
コミュニティのある風景
 
ML system design_pattern
ML system design_patternML system design_pattern
ML system design_pattern
 
10回目nodejs
10回目nodejs10回目nodejs
10回目nodejs
 
webstart-maven-pugin + 無償で正統?なコード署名証明書を入手する方法
webstart-maven-pugin + 無償で正統?なコード署名証明書を入手する方法webstart-maven-pugin + 無償で正統?なコード署名証明書を入手する方法
webstart-maven-pugin + 無償で正統?なコード署名証明書を入手する方法
 
Electron early 2019
Electron early 2019Electron early 2019
Electron early 2019
 
VisualSFMとMeshLabとCloudCompareによるドローン撮影画像を用いたデジタル地図作成
VisualSFMとMeshLabとCloudCompareによるドローン撮影画像を用いたデジタル地図作成VisualSFMとMeshLabとCloudCompareによるドローン撮影画像を用いたデジタル地図作成
VisualSFMとMeshLabとCloudCompareによるドローン撮影画像を用いたデジタル地図作成
 
Demo120724
Demo120724Demo120724
Demo120724
 
MUGT01 - mesos.DCOS demo
MUGT01 - mesos.DCOS demoMUGT01 - mesos.DCOS demo
MUGT01 - mesos.DCOS demo
 
Mojolicious::Liteを使ってみよう
Mojolicious::Liteを使ってみようMojolicious::Liteを使ってみよう
Mojolicious::Liteを使ってみよう
 
コントラクトを作らない ブロックチェーンアプリケーション開発 #SolDevHub
コントラクトを作らない ブロックチェーンアプリケーション開発 #SolDevHubコントラクトを作らない ブロックチェーンアプリケーション開発 #SolDevHub
コントラクトを作らない ブロックチェーンアプリケーション開発 #SolDevHub
 
ドキュメンテーションを加速するストレスフリーの作図ツール『blockdiag』 jus2011年6月勉強会
ドキュメンテーションを加速するストレスフリーの作図ツール『blockdiag』 jus2011年6月勉強会ドキュメンテーションを加速するストレスフリーの作図ツール『blockdiag』 jus2011年6月勉強会
ドキュメンテーションを加速するストレスフリーの作図ツール『blockdiag』 jus2011年6月勉強会
 
MUGT02 - vamp demo
MUGT02 - vamp demoMUGT02 - vamp demo
MUGT02 - vamp demo
 
Tizen web app について調べたよ
Tizen web app について調べたよTizen web app について調べたよ
Tizen web app について調べたよ
 
Firefox OS - Blaze Your Own Path
Firefox OS - Blaze Your Own PathFirefox OS - Blaze Your Own Path
Firefox OS - Blaze Your Own Path
 
Lombok ハンズオン
Lombok ハンズオンLombok ハンズオン
Lombok ハンズオン
 
13016 n分で作るtype scriptでnodejs
13016 n分で作るtype scriptでnodejs13016 n分で作るtype scriptでnodejs
13016 n分で作るtype scriptでnodejs
 
ぼくのかんがえたさいきょうのうぇぶあぷりけーしょんふれーむわーく - YAPC Asia 2011
ぼくのかんがえたさいきょうのうぇぶあぷりけーしょんふれーむわーく - YAPC Asia 2011ぼくのかんがえたさいきょうのうぇぶあぷりけーしょんふれーむわーく - YAPC Asia 2011
ぼくのかんがえたさいきょうのうぇぶあぷりけーしょんふれーむわーく - YAPC Asia 2011
 

More from Koki Natsume (9)

Studentgo1
Studentgo1Studentgo1
Studentgo1
 
Spring aizu-lt-2018
Spring aizu-lt-2018Spring aizu-lt-2018
Spring aizu-lt-2018
 
Pwaを作ってみる(ejリクールトlt 2017/10/18)
Pwaを作ってみる(ejリクールトlt 2017/10/18)Pwaを作ってみる(ejリクールトlt 2017/10/18)
Pwaを作ってみる(ejリクールトlt 2017/10/18)
 
Vue template-parserを作っている話
Vue template-parserを作っている話Vue template-parserを作っている話
Vue template-parserを作っている話
 
Alt#0x008 2017/5/20
Alt#0x008 2017/5/20Alt#0x008 2017/5/20
Alt#0x008 2017/5/20
 
Gcflt会2017/4/2
Gcflt会2017/4/2Gcflt会2017/4/2
Gcflt会2017/4/2
 
機械学習勉強会2017/5/14
機械学習勉強会2017/5/14機械学習勉強会2017/5/14
機械学習勉強会2017/5/14
 
Alt2016
Alt2016Alt2016
Alt2016
 
機械学習勉強会2017/2/19(nn基礎)
機械学習勉強会2017/2/19(nn基礎)機械学習勉強会2017/2/19(nn基礎)
機械学習勉強会2017/2/19(nn基礎)
 

Goで学ぶDApp(aizu.go#2)