2013年12月25日 星期三

比特幣手工簽署交易教學

教學原始資料在https://people.xiph.org/~greg/signdemo.txt,我稍微中譯整理一下,讓整個流程容易理解

需先安裝好兩個錢包,一個在沒有任何網路連線的電腦上,另一個則連上網路, 離線錢包先產生地址(公鑰),然後連線錢包送50BTC到離線地址,接著將50BTC 再送回連線錢包,可利用連線錢包套用上次的交易資料建構新交易,新交易由離線錢包簽署後, 用連線錢包公佈到網路上

1.首先,取得離線錢包一個新地址

[離線錢包]$ bitcoind getnewaddress
回傳值為
<離線錢包地址>


2.然後送50BTC給這個離線地址

[連線錢包]$ bitcoind sendtoaddress <離線錢包地址> 50
回傳值為
<txid_連線錢包付給離線錢包>

3.取得交易原生資料,離線錢包付錢時,將會用到裡面的txid及scriptpubkey

[連線錢包]$ bitcoind getrawtransaction <txid_連線錢包付給離線錢包> 1
回傳值為
{
"hex" : "<tx_hex_連線錢包付給離線錢包>",
"txid" : "<txid_連線錢包付給離線錢包>",
"version" : 1,
"locktime" : 0,
"vin" : [
{
"txid" : "69d02fc05c4e0ddc87e796eee42693c244a3112fffe1f762c3fb61ffcb304634",
"vout" : 0,
"scriptSig" : {
"asm" :
"3046022100ef89701f460e8660c80808a162bbf2d676f40a331a243592c36d6bd1f81d6bdf022100d29c072f1b18e59caba6e1f0b8cadeb373fd33a25feded746832ec179880c23901",
"hex" :
"493046022100ef89701f460e8660c80808a162bbf2d676f40a331a243592c36d6bd1f81d6bdf022100d29c072f1b18e59caba6e1f0b8cadeb373fd33a25feded746832ec179880c23901"
},
"sequence" : 4294967295
}
],
"vout" : [
{
"value" : 50.00000000,
"n" : 0,
"scriptPubKey" : {
"asm" : "OP_DUP OP_HASH160 dd40dedd8f7e37466624c4dacc6362d8e7be23dd OP_EQUALVERIFY OP_CHECKSIG",
"hex" : "<hex_scriptPubKey_連線錢包付給離線錢包>",
"reqSigs" : 1,
"type" : "pubkeyhash",
"addresses" : [
"<離線錢包地址>"
]
}
}
]
}

4.取得連線錢包新地址

[連線錢包]$ bitcoind getnewaddress
回傳值為
<連線錢包地址>

5.以前個交易當草稿建立新交易,新交易會將50BTC送給連線錢包,執行後得到十六進制字串的回傳值

[連線錢包]$ bitcoind createrawtransaction '[{"txid":"<txid_連線錢包付給離線錢包>","vout":0}]' '{"<連線錢包地址>":50}'
回傳值為
<tx_hex_離線錢包付給連線錢包>

6.解碼十六進制字串,檢查內容是否符合預期

[離線錢包]$ bitcoind decoderawtransaction <tx_hex_離線錢包付給連線錢包>
回傳值為
{
"txid" : "d9f33ed2740eef77e40e72b692c4cf1feb6ab10d8adaaf27eb394fa5064b1160",
"version" : 1,
"locktime" : 0,
"vin" : [
{
"txid" : "<txid_連線錢包付給離線錢包>",
"vout" : 0,
"scriptSig" : {
"asm" : "還沒填",
"hex" : "還沒填"
},
"sequence" : 4294967295
}
],
"vout" : [
{
"value" : 50.00000000,
"n" : 0,
"scriptPubKey" : {
"asm" : "OP_DUP OP_HASH160 3744841e13b90b4aca16fe793a7f88da3a23cc71 OP_EQUALVERIFY OP_CHECKSIG",
"hex" : "76a9143744841e13b90b4aca16fe793a7f88da3a23cc7188ac",
"reqSigs" : 1,
"type" : "pubkeyhash",
"addresses" : [
"<連線錢包地址>"
]
}
}
]
}

7.準備簽署交易,需提供scriptpubkey,讓離線錢包知道用哪隻鑰匙簽章

[離線錢包]$ bitcoind signrawtransaction <tx_hex_離線錢包付給連線錢包> '[{"txid":"<txid_連線錢包付給離線錢包>","vout":0,"scriptPubKey":"<hex_scriptPubKey_連線錢包付給離線錢包>"}]'

回傳值為
{
"hex" : "<tx_hex_離線錢包付給連線錢包_已簽名>",
"complete" : true
}

8.公佈交易到網路上

[連線錢包]$ bitcoind sendrawtransaction <tx_hex_離線錢包付給連線錢包_已簽名>
回傳值為
<txid_離線錢包付給連線錢包>

9.看看連線錢包有沒收到錢
[連線錢包]$ bitcoind listtransactions "" 1
回傳值為
[
{
"account" : "",
"address" : "<連線錢包地址>",
"category" : "receive",
"amount" : 50.00000000,
"confirmations" : 0,
"txid" : "<txid_離線錢包付給連線錢包>",
"time" : 1344221517
}
]

最近台灣的財經節目也開始介紹比特幣

▶ 【2013.12.22】2013/12/22 財經新視界(1) 什麼是比特幣? -udn tv - YouTube
▶ 【2013.12.22】2013/12/22 財經新視界(2) 比特幣襲台現況 -udn tv - YouTube
▶ 【2013.12.22】2013/12/22 財經新視界(3) 虛擬貨幣大未來 -udn tv - YouTube


2013年12月20日 星期五

比特幣Android錢包測試藍牙離線交易



這次要測試兩台android設備,在沒連上WIFI的情況下,比特幣錢包APP如何以藍牙訊號支付款項
首先,打開平板的比特幣錢包APP,按右上角的設定功能



將平板錢包的"bluetooth offline transaction"選項打勾



打開手機的比特幣錢包APP,按右上角的設定功能



將手機錢包的"bluetooth offline transaction"選項打勾



接著輸入要向平板錢包索取的金額



拿平板掃描手機錢包的QR code



有時會因為種種原因,很難判讀,可將QR code放大



不管如何,平板終於將對方索取的金額掃描成功,按發送



成功通過藍牙設備傳送一筆離線交易



照收手續費0.0001BTC



此時手機錢包也收到款項了

2013年12月16日 星期一

傳送比特幣到離線錢包



底下的練習,是如何傳送比特幣到一個由軟體隨機產生的離線錢包
首先打開bitcoin-qt除錯視窗並輸入指令sendtoaddress 地址 數量



執行指令後,回傳值為交易識別碼(transaction ID ,txid)
注意,紅色框框是傳送時間



回到總覽畫面,發現bitcoin-qt問都沒問就多扣了手續費0.0001BTC



上blockexploer.com查詢testnet,看離線錢包地址有無入帳,還沒?!於是離座泡杯咖啡



喝完咖啡就座,更新網頁顯示29:05支付43:54入帳,差了快15分



看看testnet區塊資料,哇!我的支付交易所處的區塊,與上個區塊竟隔了20分鐘



可用getrawtransaction解開txid,則傳回json格式的原生交易資料

2013年12月13日 星期五

Bitcoin-qt與Wallet for Android互傳測試幣

承上個練習,補充測試幣到testnet錢包
執行Bitcoin-qt連上testnet,傳送2個比特測試幣給我的行動錢包

送出後可看到餘額是 18 BTC

打開Android行動錢包,可看到錢已收到,不過尚待進一步確認,不知是否testnet的關係,等三十分才收到

當收到的2個測試幣,已確認可用來支付後,準備傳回1BTC給Bitcoin-qt錢包

傳送成功!但是需扣0.0001的手續費

回到行動錢包的主畫面,出現二筆交易

這次試著傳送0.0001BTC,看看如此的微支付(Micro-Payment),結果會如何?

可傳送,照舊扣0.0001的手續費

傳送成功!

回到行動錢包的主畫面,每筆交易都有個小餅圖,綠色代表確認的程度

回到Bitcoin-qt錢包,的確有收到二筆款項,收送間隔一分鐘,但尚未確認

過幾分鐘後,二筆款項終於確認了

至此,Bitcoin-qt錢包總共有五筆交易

接著測測看支付0.0001BTC,Bitcoin-qt會不會扣手續費

出現對話窗,確認支付

真的要付手續費!!

Bitcoin-qt錢包顯示04:24支付

幾分鐘後,行動錢包也收到款項

2013年12月9日 星期一

補充測試幣到testnet錢包

為了學習如何建構交易,於是向測試幣充值網站要了20個比特幣(測試幣),雖然這些幣沒有價值(無價^ ^),但也是人家站主花電費辛辛苦苦挖礦出來的,用完要回收才能造福別人啊!!!