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
0
380
Ruby on RailsでBitcoin App開発超入門
Gotanda.rb#42でBitcoin×RubyのLTをさせていただきました。
https://gotanda-rb.connpass.com/event/174652/
Shu Kobuchi
May 29, 2020
Tweet
Share
More Decks by Shu Kobuchi
See All by Shu Kobuchi
AIエージェント元年@日本生成AIユーザ会
shukob
0
14
AI時代におけるMLOpsのTips
shukob
2
67
AIエージェント元年
shukob
0
140
論文紹介 ”Long-Context LLMs Meet RAG: Overcoming Challenges for Long Inputs in RAG” @GDG Tokyo
shukob
0
480
論文紹介 ”Long-Context LLMs Meet RAG: Overcoming Challenges for Long Inputs in RAG”
shukob
0
100
生成AIでGitHubソースコード取得して仕様書を作成
shukob
0
700
生成AI入門
shukob
0
310
LangChainでWebサイトの内容取得やGitHubソースコード取得
shukob
0
640
生成AIアプリケーションにおけるRAGとデータベースの役割
shukob
0
1.3k
Other Decks in Programming
See All in Programming
Domain-Driven Transformation
hschwentner
2
1.9k
1年目の私に伝えたい!テストコードを怖がらなくなるためのヒント/Tips for not being afraid of test code
push_gawa
1
490
PHPカンファレンス名古屋2025 タスク分解の試行錯誤〜レビュー負荷を下げるために〜
soichi
1
640
Amazon Q Developer Proで効率化するAPI開発入門
seike460
PRO
0
120
『GO』アプリ データ基盤のログ収集システムコスト削減
mot_techtalk
0
130
PRレビューのお供にDanger
stoticdev
1
220
技術を改善し続ける
gumioji
0
100
Djangoアプリケーション 運用のリアル 〜問題発生から可視化、最適化への道〜 #pyconshizu
kashewnuts
1
260
5分で理解する SOLID 原則 #phpcon_nagoya
shogogg
1
280
バッチを作らなきゃとなったときに考えること
irof
2
470
Ruby on cygwin 2025-02
fd0
0
170
Grafana Loki によるサーバログのコスト削減
mot_techtalk
1
130
Featured
See All Featured
Build your cross-platform service in a week with App Engine
jlugia
229
18k
Rails Girls Zürich Keynote
gr2m
94
13k
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
280
13k
A Philosophy of Restraint
colly
203
16k
Scaling GitHub
holman
459
140k
Unsuck your backbone
ammeep
669
57k
How To Stay Up To Date on Web Technology
chriscoyier
790
250k
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
PRO
12
980
Thoughts on Productivity
jonyablonski
69
4.5k
Six Lessons from altMBA
skipperchong
27
3.6k
Bash Introduction
62gerente
611
210k
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
29
1k
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