Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Ruby on RailsでBitcoin App開発超入門
Search
Shu Kobuchi
May 29, 2020
Programming
410
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Ruby on RailsでBitcoin App開発超入門
Gotanda.rb#42でBitcoin×RubyのLTをさせていただきました。
https://gotanda-rb.connpass.com/event/174652/
Shu Kobuchi
May 29, 2020
More Decks by Shu Kobuchi
See All by Shu Kobuchi
生成AIに振り回されない 〜確率論と決定論の使い分け〜
shukob
0
190
LT準備のToilを削減 〜決定論×確率論のスライド生成CLI〜
shukob
0
150
決定論 vs 確率論:Gemini 3 FlashとTF-IDFを組み合わせた「法規判定エンジン」の構築
shukob
0
190
AIエージェント・エコノミーの幕開け 〜 オープンプロトコルが変えるビジネスの未来 〜
shukob
0
250
AIエージェント・エコノミーの幕開け 〜オープンプロトコルが変えるビジネスの未来〜
shukob
0
150
Google Cloudでの動画解析と検索のサービス紹介と比較
shukob
0
120
MCP・A2A概要 〜Google Cloudで構築するなら〜
shukob
0
490
AIエージェント入門 自律性の基礎からオープンプロトコルMCP・A2Aによる連携まで
shukob
0
150
AIエージェントの自律性と協調性を解放する Google CloudによるMCP・A2A実装のエンタープライズ戦略
shukob
0
110
Other Decks in Programming
See All in Programming
PHPで使える日時の表現と、その知り方 #frontend_phpcon_do
o0h
PRO
0
280
TypeScript+Orvalで実現する型安全かつ堅牢でスケーラブルなマルチチャネル通知基盤 / TSKaigi Night talks ~after conference~
d0riven
0
380
エンジニア向け会社紹介/Findy Company Profile
findyinc
6
360k
例外の正しい扱い方 そのエラー try-catchして大丈夫?
jinwatanabe
0
320
スマートグラスで並列バイブコーディング
hyshu
0
270
AIで効率化できた業務・日常
ochtum
0
160
Performance Engineering for Everyone
elenatanasoiu
0
250
セキュリティの専門家じゃなくてもできる。「セキュリティ意識」をアップデートして サプライチェーン攻撃への耐性を高めよう。
tk3fftk
5
1k
Datadog × OpenTelemetry 入門と実践のあいだ
kn_to_maxpno
1
180
Honoでのサプライチェーン侵害対策 〜 3つのライブラリに学ぶ
yusukebe
7
1.7k
AIを活用したE2Eテスト実装効率化のあゆみ / ebisu-mobile-14-kotetu
kotetuco
0
160
Semantic Version 単位で戦略を柔軟に変えて、パッケージアップデートを自動化する
daitasu
1
330
Featured
See All Featured
Rebuilding a faster, lazier Slack
samanthasiow
85
9.5k
Claude Code のすすめ
schroneko
67
230k
How Fast Is Fast Enough? [PerfNow 2025]
tammyeverts
3
640
Docker and Python
trallard
47
3.9k
The Power of CSS Pseudo Elements
geoffreycrofte
82
6.3k
Heart Work Chapter 1 - Part 1
lfama
PRO
8
36k
Connecting the Dots Between Site Speed, User Experience & Your Business [WebExpo 2025]
tammyeverts
11
960
Dominate Local Search Results - an insider guide to GBP, reviews, and Local SEO
greggifford
PRO
0
200
Stop Working from a Prison Cell
hatefulcrawdad
274
21k
What the history of the web can teach us about the future of AI
inesmontani
PRO
1
630
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
31
3.2k
From Legacy to Launchpad: Building Startup-Ready Communities
dugsong
0
240
Transcript
3VCZPO3BJMTͰ #JUDPJO"QQ։ൃೖ ݄ ۚ !(PUBOEBSC খᔹप 4IV,PCVDIJ
ࣗݾհ খᔹपɹ4IV,PCVDIJɹ!TIV@LPCTIVLPCVDIJ ·Ͱͣͬͱؔ ʙલ৬ͷ4*FSͰେࡕ͔Β౦ژసۈ େ࡚ ʙϑϨηοπ จژ۠ຊڷ w
҉߸ࢿ࢈औҾۀऀ͚ΥϨοτϕϯμʔ ۠ͪΐͬͱࡏॅɺίϩφͰϑϧϦϞʔτʹɹ 2
ίϛϡχςΟհ ຊ҉߸௨՟ϢʔβձɹIUUQTDSZQUPDVSSFODZDPOOQBTTDPN ʮϏοτίΠϯͱ͔ษڧձʯʢ݄̍ճɿฏʣ w ۚ ʙɹDMJHIUOJOH -JHIUOJOH/FUXPSL ϋϯζΦϯ ʮ҉߸௨՟ಡॻձʯʢ݄̍ճɿฏʣ
w ࣍ճௐத ΞʔΧΠϒಈըଟ͋Γ·͢ 3
ϏοτίΠϯͱ͔ ϒϩοΫνΣʔϯ ษڧͯ͠Έ͍ͨΜ͚ͩͲͶ
ϏοτίΠϯͱ͔ ϒϩοΫνΣʔϯ ษڧͯ͠Έ͍ͨΜ͚ͩͲͶ Α͘ฉ͘ηϦϑͰ͢
ϏοτίΠϯΛֶͿʹ 5FTUOFUରԠΥϨοτΛೖΕͯɺ5FTUOFUίΠϯΛૹۚͯ͠༡ΜͰΈΔ -JOVYଟগͳΓͱ৮ΕΔͳΒ #JUDPJO$PSF CJUDPJOE ΛΠϯετʔϧͯ͠ίϚϯυΛୟ͍ͯΈΔ ϓϩάϥϛϯάଟগͳΓͱͰ͖ΔͳΒ #JUDPJO$PSFͷίϚϯυΛϥοϐϯά͢ΔΞϓϦΛ։ൃ 6 .BJOOFU
5FTUOFU 3FHUFTU ελϯυΞϩϯ
#JUDPJOͱ3VCZϥΠϒϥϦͱॻ੶ #JUDPJO$PSFʢ$ ʣ IUUQTHJUIVCDPNCJUDPJOCJUDPJO CJUDPJOSCʢ3VCZϥΠϒϥϦʣ IUUQTHJUIVCDPNDIBJOUPQFCJUDPJOSC PQFOBTTFUTSCʢ3VCZϥΠϒϥϦʣ IUUQTHJUIVCDPNDIBJOUPQFPQFOBTTFUTSC ଞʹϒϩοΫνΣʔϯ3VCZϥΠϒϥϦଟ IUUQTHJUIVCDPNDIBJOUPQF
ॻ੶ʮϒϩοΫνΣʔϯɾϓϩάϥϛϯάԾ௨՟ೖʯ CJUDPJOSVCZCJUDPJOSC͕ޙܧ PQFOBTTFUTSVCZPQFOBTTFUTSC͕ޙܧ վగ༧ఆ 7
؆୯ͳγεςϜਤ CJUDPJOͷ3VCZϥΠϒϥϦʮCJUDPJOSCʯΛ༻͍ͯ#JUDPJO$PSFͱ+TPO31$ "1*Λ༻͍Δ 8 #FSLFMZ %# /P42- #JUDPJO$PSF 3VCZPO3BJMT CJUDPJOSC
ϥΠϒϥϦ DPOUSPMMFS 31$3FRVFTU +40/3FTQPOTF WJFX
CJUDPJODMJίϚϯυ IUUQTHJUIVCDPNTIVLPCSBJMTCJUDPJOSBJMTCJUDPJO ΛࢀߟʹCJUDPJOEΛΠϯετʔϧ CJUDPJODMJHFUOFXBEESFTT UCRDB[E[GSYZHVSWFEQSHE[XXGQ[YFKSB CJUDPJODMJTFOEUPBEESFTT UCRDB[E[GSYZHVSWFEQSHE[XXGQ[YFKSB GDCBFECDCCFCDBCEGFFFG DF⒎EE CJUDPJODMJHFUSBXUSBOTBDUJPO
GDCBFECDCCFCDBCEGFFFG DF⒎EE 9
CJUDPJODMJͱCJUDPJO31$ϝιουͷରԠ CJUDPJODMJHFUOFXBEESFTT UCRDB[E[GSYZHVSWFEQSHE[XXGQ[YFKSB CJUDPJODMJTFOEUPBEESFTT UCRDB[E[GSYZHVSWFEQSHE[XXGQ[YFKSB GDCBFECDCCFCDBCEGFFFG DF⒎EE CJUDPJODMJHFUSBXUSBOTBDUJPO GDCBFECDCCFCDBCEGFFFG DF⒎EE
10 bitcoinRPC('getnewaddress',[]) bitcoinRPC('sendtoaddress',[address, amount]) bitcoinRPC('getrawtransaction',[txid])
DPOUSPMMFS SBJMTOFXCJUDPJO@BQQ BQQDPOUSPMMFSTCJUDPJO@BQQ@DPOUSPMMFSSC 11 require 'bitcoin' require 'net/http' require 'json'
Bitcoin.chain_params = :regtest RPCUSER="hoge" RPCPASSWORD="hoge" HOST="localhost" PORT=18443 class BitcoinAppController < ApplicationController def index @blockchaininfo = bitcoinRPC('getblockchaininfo',[]) render template: ‘bitcoin_app/index' end private def bitcoinRPC(method,param) http = Net::HTTP.new(HOST, PORT) request = Net::HTTP::Post.new('/') request.basic_auth(RPCUSER,RPCPASSWORD) request.content_type = 'application/json' request.body = {method: method, params: param, id: 'jsonrpc'}.to_json JSON.parse(http.request(request).body)["result"] end end end bitcoinRPC('getblockchaininfo',[])
WJFXͱSPVUFT BQQWJFXTCJUDPJO@BQQJOEFYIUNMFSC 12 DPOpHSPVUFTSC <td><%= @blockchaininfo %></td> Rails.application.routes.draw do get
'/', to: 'bitcoin_app#index' get '/index', to: 'bitcoin_app#index' end SBJMTT
։ൃྫ ϒϩοΫϋογϡɺϒϩοΫߴɺτϥϯβΫγϣϯ*%ɺΞυϨεͱ͍͏छྨ Λݕࡧ૭ͭͰ͍͍ͯ͞Δ ܧଓ։ൃதɿIUUQTHJUIVCDPNTIVLPCSBJMTCJUDPJO 13
ࢀߟࢿྉ
ϒϩοΫνΣʔϯΤΫεϓϩʔϥ ༷ʑͳ։ൃݩ͔ΒϒϩοΫνΣʔϯΤΫεϓϩʔϥ͕ఏڙ͞Ε͍ͯΔ IUUQTCMPDLTUSFBNJOGP IUUQTHJUIVCDPNCMPDLTUSFBNFTQMPSB w #MPDLTUSFBNFTQMPSB044ʢ3VCZͰͳ͍ʣ 15
ϒϩοΫҰཡ ϒϩοΫνΣʔϯΤΫεϓϩʔϥͷτοϓϒϩοΫҰཡͰ͋Δ͜ͱ͕ଟ͍ τοϓͷϒϩοΫҰཡ͕JOEFYʹ͢Δ ϧʔςΟϯάઃఆ CJUDPJODMJHFUCMPDLDIBJOJOGPͰ࠷৽ϒϩοΫߴΛऔಘ ࠷৽ϒϩοΫߴ͔Β߱ॱʹ CJUDPJODMJHFUCMPDLIBTICMPDLIFJHIUͰϒϩοΫϋογϡΛಘͯɺ CJUDPJODMJHFUCMPDLCMPDLIBTIͰϒϩοΫͷதΛಘΔ ϒϩοΫͷ͕ଟ͘ͳͬͨΒɺϖʔδωʔγϣϯΛೖΕΔ 16
ϒϩοΫͷใ ؆୯ HFUCMPDLCMPDLIBTIͷΑ͏ͳײ͡ͰΫΤϦʹϒϩοΫϋογϡ CJUDPJODMJHFUCMPDLCMPDLIBTI Ϩεϙϯεͷ+TPOΛ7JFXʹૹΓ͜ΜͰඞཁͳσʔλΛදࣔ HFUCMPDLͷ͍͍ͱ͜Ζঝೝ࣍ͷϒϩοΫϋογϡؚΊͯڭ͑ͯ͘ΕΔ ͪΖΜલͷϒϩοΫϋογϡ 17
ΞϦε͕Ϙϒʹ#5$ΛૹΔ Ҏલड͚औֹ͍ͬͯͨΛ߹ࢉͯ͠ɺ૬खʹૹΓɺ͓Γࣗ 59தʹهࡌͷͳֹ͍ ͜͜Ͱ#5$ ޙʹϚΠφʔ τϥϯβΫγϣϯ5SBOTBDUJPO59 18 ΞϦε Ϙϒ 5SBOTBDUJPO
59 */165 065165 ΞϦε Ωϟϩϧ ΞϦεˠϘϒ #5$ ΩϟϩϧˠΞϦε #5$ ΞϦεˠΞϦε ͓Γ #5$ #5$ σϏοτˠΞϦε #5$ #5$ σϏοτ ܭ#5$ ܭ#5$ ϚΠφʔ ωοτϫʔΫखྉ #5$ ˞59ʹهࡌͳ͍ ൿີ伴Λࠩ͠ࠐΜͰ ϩοΫղআɿిࢠॺ໊ ΞϦεͷ ൿີ伴 ΞϦεͷ ൿີ伴 ΞϦεͷ ެ։伴 Ϙϒͷ ެ։伴 ΞϦεͷ ެ։伴 ΞϦεͷ ެ։伴
τϥϯβΫγϣϯใ ໘ HFUUYUYJEͷΑ͏ͳײ͡ͰUYJEΛΫΤϦʹ CJUDPJODMJHFUSBXUSBOTBDUJPOUYJE SFTQPOTFSBXUSBOTBDUJPO CJUDPJODMJEFDPEFSBXUSBOTBDUJPOSBXUSBOTBDUJPO SFTQPOTFͷதʹPVUQVUͷΞυϨεɾૹֹؚۚ·ΕΔ͕ɺJOQVUͷΞυ Ϩεɾֹखྉؚ·Εͳ͍ w CJUDPJODMJHFUUSBOTBDUJPOUYJEͩͱڭ͑ͯ͘ΕΔ͕ɺ#JUDPJO$PSF
ࣗͷXBMMFUͷUYͷΈ JOQVU෦ WJO ͷUYJE WPVU͔ΒHFUSBXUSBOTBDUJPO EFDPEFSBXUSBOTBDUJPOͰJOQVUͷΞυϨεͱֹΛٻΊΔ खྉʹJOQVU෦ͷ߹ܭֹʔPVUQVU෦ͷ߹ܭֹ 19
τϥϯβΫγϣϯͷঝೝɺ༻ࡁ EFDPEFSBXUSBOTBDUJPOSBXUSBOTBDUJPOͷ3FTQPODFʹϒϩοΫঝೝ ؚ·Ε͍ͯͳ͍ CJUDPJODMJHFUCMPDLDIBJOJOGPͰ࠷৽ͷϒϩοΫߴΛऔಘ ࠷৽ͷϒϩοΫߴ͔Β߱ॱʹHFUCMPDLIBTI HFUCMPDLͰϒϩοΫͷUYJEΛ ݟ͍͖ͯɺରͷUYΛؚΉϒϩοΫ͔ΒঝೝΛಘΔ CJUDPJODMJHFUUYPVUUYJEWPVU͕ଘࡏ͢Εະ༻ɺͳ͚Ε༻ࡁ 20
औΓѻ͍ҙͷ59 $PJOCBTF59ͷ*OQVU WJOʹUYJE͕ͳ͍ͳͲͯ͠ผ (FOFTJT#MPDLͷ59 CJUDPJODMJHFUSBXUSBOTBDUJPOUYJEͰऔಘͰ͖ͳ͍ ϋʔυίʔσΟϯά͞Εͨ59 59*% BFFCBBCGBBDCDGGFDDBCCBGE
FEBC ͜ͷ59*%.BJOOFU 5FTUOFU 3FHUFTU 4JHOFUڞ௨ 21
ΞυϨεใ HFUBEESFTTBEESFTTͷΑ͏ͳײ͡ͰBEESFTTΛΫΤϦʹ ͓ΈͰCJUDPJODMJWBMJEBUFBEESFTTBEESFTTͰ༗ޮͳΞυϨε͔Ͳ͏͔ CJUDPJODMJHFUSBXNFNQPPMͰNFNQPPMͷUYJEΛऔಘ CJUDPJODMJHFUCMPDLDIBJOJOGPͰ࠷৽ͷϒϩοΫߴΛऔಘ ࠷৽ͷϒϩοΫߴ͔Β߱ॱʹHFUCMPDLIBTI HFUCMPDLͰϒϩοΫͷUYJEΛ औಘ HFUSBXUSBOTBDUJPOUYJE EFDPEFSBXUSBOTBDUJPOSBXUSBOTBDUJPOͰ
WPVUʹΞυϨε͕͋Δ͔ΛݟΔ WJOͷUYJEHFUSBXUSBOTBDUJPOUYJE EFDPEFSBXUSBOTBDUJPO SBXUSBOTBDUJPOͰWPVUʹΞυϨε͕͋Δ͔ΛݟΔ ΞυϨεʹؔ͋Δ59ͷใΛ࣌ܥྻͷ߱ॱʹฒΔ NFNQPPMͷ59͕Ұ൪্ ঝೝͳͲτϥϯβΫγϣϯҰཡΛࢀߟʹ 22
ΞυϨεใ CJUDPJODMJHFUUYPVUUYJEWPVU͕ଘࡏ͢Εະ༻ɺͳ͚Ε༻ࡁ ະ༻ͷ6590Λ͔͖ूΊͯߴܭࢉ͕Մೳ $PJOCBTF59ঝೝ͠ͳ͍ͱ͑ͳ͍ ΞυϨεҰཡը໘ͰΞυϨεʹؔ͢Δશ59ͷঝೝ·ͰٻΊ͍ͯͨΒॲཧ ͕ऴΘΒͳ͍ʢۤসʣ3FHUFTUͰ ͦΖͦΖ%#ͷग़൪ 23
ݕࡧ ϒϩοΫϋογϡɺϒϩοΫߴɺ59*%ɺΞυϨεͰͷݕࡧϑΟʔϧυ QPTU ύϥϝʔλͷαΠζ͕ͷ߹ ϒϩοΫϋογϡ͔59*% BFFCBBCGBBDCDGGFDDBCC BGEFEBCͷ߹ɺ(FOFTJTϒϩοΫͷ59*% HFUSBXUSBOTBDUJPOUYJEͰϨεϙϯε͕͋Ε59 HFUCMPDLIBTICMPDLIBTIͰϨεϙϯε͕͋ΕϒϩοΫ
ύϥϝʔλͷαΠζ͕ɺ .BJOOFUɾ4JHOFUCFDI ɾ 5FTUOFUɾ 3FHUFTU CFDI ͷ͍ͣΕ͔ͷ߹ΞυϨε ύϥϝʔλ͕ͷ߹ɺϒϩοΫߴ HFUCMPDLIBTIQBSBNTͰϨεϙϯε͕͋ΕɺϒϩοΫ ͦΕͧΕɺϒϩοΫใɺτϥϯβΫγϣϯใɺΞυϨεใͷؔʹ SFEJSFDU ͍ͣΕͰͳ͍߹OPUGPVOEը໘ 24