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
400
0
Share
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
決定論 vs 確率論:Gemini 3 FlashとTF-IDFを組み合わせた「法規判定エンジン」の構築
shukob
0
140
AIエージェント・エコノミーの幕開け 〜 オープンプロトコルが変えるビジネスの未来 〜
shukob
0
190
AIエージェント・エコノミーの幕開け 〜オープンプロトコルが変えるビジネスの未来〜
shukob
0
130
Google Cloudでの動画解析と検索のサービス紹介と比較
shukob
0
100
MCP・A2A概要 〜Google Cloudで構築するなら〜
shukob
0
430
AIエージェント入門 自律性の基礎からオープンプロトコルMCP・A2Aによる連携まで
shukob
0
130
AIエージェントの自律性と協調性を解放する Google CloudによるMCP・A2A実装のエンタープライズ戦略
shukob
0
94
学術的根拠から読み解くNotebookLMの音声活用法
shukob
1
1.1k
AIエージェント入門 〜基礎からMCP・A2Aまで〜
shukob
1
410
Other Decks in Programming
See All in Programming
Back to the roots of date
jinroq
0
610
PHPでバイナリをパースして理解するASN.1
muno92
PRO
0
350
Running Swift without an OS
kishikawakatsumi
0
870
Oxlintとeslint-plugin-react-hooks 明日から始められそう?
t6adev
0
310
属人化しないコード品質の作り方_2026.04.07.pdf
muraaano
0
290
運転動画を検索可能にする〜Cosmos-Embed1とDatabricks Vector Searchで〜/cosmos-embed1-databricks-vector-search
studio_graph
1
540
Claude Codeをカスタムして自分だけのClaude Codeを作ろう
terisuke
0
160
【26新卒研修資料】TDD実装演習
dip_tech
PRO
0
150
Claude CodeでETLジョブ実行テストを自動化してみた
yoshikikasama
0
1.1k
AIエージェントで業務改善してみた
taku271
0
550
AI時代のPhpStorm最新事情 #phpcon_odawara
yusuke
0
240
JOAI2026 1st solution - heron0519 -
heron0519
0
160
Featured
See All Featured
Practical Orchestrator
shlominoach
191
11k
Primal Persuasion: How to Engage the Brain for Learning That Lasts
tmiket
0
330
Building an army of robots
kneath
306
46k
My Coaching Mixtape
mlcsv
0
110
Crafting Experiences
bethany
1
130
The #1 spot is gone: here's how to win anyway
tamaranovitovic
2
1k
What’s in a name? Adding method to the madness
productmarketing
PRO
24
4k
Lightning talk: Run Django tests with GitHub Actions
sabderemane
0
180
Unlocking the hidden potential of vector embeddings in international SEO
frankvandijk
0
780
Making the Leap to Tech Lead
cromwellryan
135
9.8k
Lightning Talk: Beautiful Slides for Beginners
inesmontani
PRO
1
530
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
360
30k
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