Saturday, June 1, 2013

bitcoin.org 翻譯說明:Transifex 簡介

歡迎各位朋友加入 bitcoin.org 中文化的活動,請先選擇以下其中之一
簡體
繁體

假設選擇的是繁體中文,會看到以下畫面:



選擇中間的聯結後,會進入另外一個畫面:



此時你可以點"Translate Now"按鈕進入編輯頁面:


以上是編輯頁面,建議先遵循建議1,選擇 "Unreviewed" 只列出還未 review 的句子。然後到左側的清單點選你想要 review 的句子,選擇之後中間上方會出現英文原文,下方則是中文翻譯。如果有覺得不通順或是錯誤的地方,可以按右邊 panel 的 Suggest 提出你的建議。如果覺得翻譯已經完成的話,可以點中間上方的翹起大拇指的按鈕。

以上是一點簡單的介紹,感謝大家的付出與努力。

Tuesday, May 7, 2013

Bitcoin 採礦機開發 1 - 簡介 getwork

本文目標
從 2009 年以來,Bitcoin 採礦技術已經從 CPU 到 GPU 再到 FPGA,目前 (2013) 最先進的是 ASIC。本文從基礎開始分析 Bitcoin 採礦技術,歡迎有志開發自己的採礦機的讀者指教。

啟動測試網路
由於目前 Bitcoin 的難度相當高,要自己挖掘一個 block 的機率極低。為了減低計算難度,我們將使用測試網路(testnet),而非一般的 Bitcoin 網路。testnet 是你測試 Bitcoin 的好夥伴。
首先準備好官方的 bitcoind。假設讀者使用 Linux,可以下列參數啟動:

$ bitcoind -testnet -daemon

text 參數告訴 bitcoind 要連接到 testnet。
daemon 參數告訴 bitcoind 要在背景作為服務執行。

取得work
確認 bitcoind 在背景執行之後,就可以透過 JSON-RPC 從它取得一個 work

$ bitcoind -testnet getwork

執行結果如下:(數字會有不同)

{
    "midstate" : "f412665e9eaf2aef805289d0e8779ea5ce42beee7d76aec5cb036870e250db01",
    "data" : "0000000246a19088cb6e4d779bc8b6f223e748ec6da48aafb4d53ffe00cdcf99000000001b081cdb63293b7b117cb2d53a98a1ecb3e1e2dfbb322045159743673dae9de7517c91841c06305100000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000080020000",
    "hash1" : "00000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000010000",
    "target" : "0000000000000000000000000000000000000000000000000051300600000000"
}

取得 work 後,miner 的工作就是去找出一個稱之為 nonce 的32-bit 正整數,放入 data 之中,以滿足特定條件。此條件在下面會說明。而這整個過程就稱之為採礦。

Proof-of-work
那這個條件是甚麼呢?簡單來說就是對 data 取兩次 hash 值,使得 hash(hash(data)) < target
如果條件不成立的話,就把 nonce 加一,然後更新 data 重新計算,直到條件成立為止。Bitcoin 使用的 hash 函數是 SHA-256。

work 資料結構
從上面我們得知 bitcoind 會傳回四個數值,都是以 hexadecimal 編碼,little-endian 順序存放。其中 data 和 target 是必要欄位,midstate 和 hash1 是選擇性的。data 的長度是128 bytes,不過目前只用到 80 bytes。data 實際上是一個 structure,由 6 個欄位組成。我們現在不必深究所有的欄位,只要知道這 80 bytes 的最後面 4 個 bytes 是存放 nonce。而 nonce 欄位會是零,因為這是要 miner 去計算的。

0000000246a19088cb6e4d779bc8b6f223e748ec6da48aafb4d53ffe00cdcf99
000000001b081cdb63293b7b117cb2d53a98a1ecb3e1e2dfbb32204515974367
3dae9de7517c91841c0630510000000000000080000000000000000000000000
0000000000000000000000000000000000000000000000000000000080020000

由於 SHA-256 採用 big-endian,而 getwork 傳回的資料是以 4-byte 為一個 word,所以我們需要以四個 bytes 為單位先轉回 big-endian。以下的 python 程式可以容易的作到:

b = data.decode('hex')
h = ''.join([b[x:x+4][::-1] for x in range(0, len(b), 4)]).encode('hex')


結果為:

020000008890a146774d6ecbf2b6c89bec48e723af8aa46dfe3fd5b499cfcd00
00000000db1c081b7b3b2963d5b27c11eca1983adfe2e1b3452032bb67439715
e79dae3d84917c515130061c0000000080000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000280

注意到紅色的部份 4 bytes 全為零,這就是 miner 需要計算的 nonce,nonce 從零開始不斷加一後重新計算 hash,直到滿足條件為止。而最後面的橘色 4 bytes 的數值為 0x00000280,換成 10 進位就是 640,640 bits 即 80 bytes,這就是先前提到的實際資料長度 80 bytes,除非資料結構有更動,不然 miner 可以直接忽略這些資料。

下期預告
最簡單的 miner : pyminer

參考資料
Bitcoin wiki - getwork
Bitcoin wiki - block hashing algorithm

Saturday, March 9, 2013

Bitcoin 資源整理

這裡有關於比特幣的重要資源,給入門者參考 (2013/04/04更新)

2009年的論文,一切的起點:
Bitcoin:A Peer-to-Peer Electronic Cash System
簡體中文翻譯 - 比特币:一种点对点的电子现金系统

官方網站
Bitcoin.org - 可以下載錢包和獲得基本知識
BitcoinWiki - 可以找到很詳細的資料,包含軟體實作細節

新聞來源
Bitcoin Forum - 最大的比特幣論壇
比特人 - 中文論壇
Bitcoin Magazine
Reddit

實用服務
Bitpay - 接受bitcoin付款(賣家用)
Bitspend - 用bitcoin購物
Bitcoinstore - 用bitcoin購物,特別是3C產品

金融
BitcoinWATCH - Bitcoin 匯率、市值(目前約14億美金)和其他統計數據
MtGox - 最大的Bitcoin貨幣交易所,以美金為主
BTCChina - Bitcoin對人民幣交易所
BTCjam - 個人對個人的 Bitcoin 借貸與投資
Bitfinex - 次級市場,可以借貸、做多、做空

程式
BFGMiner - 挖礦程式
Abe - python程式,用來分析bitcoin交易紀錄

Saturday, March 2, 2013

Bitfinex 與 Bets of Bitcoin

之前跟朋友聊到bitcoin,他問我有沒有bitcoin的銀行,我當時不知道,昨天正巧就看到Bitfinex,一個bitcoin的銀行,可以辦理借貸款,融資操作。以借貸為例,Bitfinex公開出來的平均放款利率高的嚇人:190%(美元)和12%(比特幣)。



這種高利率同時也反應了高風險,如果跟你借錢的人還不出錢怎麼辦?這下可沒有國家幫你討錢,所以這時Bitfinex說:沒關係,我來幫你承擔風險。
You don't have the exchange risk when you lend with bitfinex. The exchange risk is taken on by the trader, and, in case his position loses money, he will cover the loss with funds in his trading wallet. If by any chances losses are greater than what the trader can afford, the loss is on Bitfinex, we will cover for the missing amount. 
當然如果太多人還不起錢,Bitfinex也撐不下去,打賭網站Bets of Bitcoin就開了一個賭盤,賭Bitfinex能不能活過2013上半年。有興趣的朋友可以到這邊看看關於Bitfinex的討論

Friday, March 1, 2013

Bitcoin 交易經驗

比特幣2013年來快速升值,兌美元從14升到33,匯率資料可見 bitcoinity

目前要獲得比特幣,最主要的方法還是透過交易所,如果是要買賣比特幣,還是在交易量大的單位買賣比較迅速。關於交易量的資訊,可見 bitconchars。以下是比特幣兌換各種貨幣的主要的交易所。

美金 MtGox  交易手續費: 0.6% (大量有優惠)
歐元 Bitcoin-24  交易手續費: 0%
人民幣 Bitcoin China  交易手續費: 0.3%

以 Bitcoin-24 為例,先註冊賬號後,再從台灣的銀行匯入歐元,約兩個工作天。匯款手續費看各家銀行而定,一般是數百元到一千多元。

Thursday, February 21, 2013

Bitcoin / 比特幣 / 位元幣交易所


Bitcoin從2013年1月中以來最近不斷升值,判斷該是入手的時間。但是從台灣要買bitcoin不容易,比較可靠的管道多為交易所。那麼有哪些交易所呢? Bitcoin wiki 上面有給出一個清單,就我逛逛之後列出幾個交易量比較大的交易所。

2013/02/21
MtGox 交易量 35389 BTC
BTC-E 交易量 1738 BTC
Bitcoin-Central 交易量 741 BTC


這些交易所其實是在交換bitcoin和各種貨幣(美金,歐元,或其它電子貨幣)。在交易前需要先存款(Deposit),好比說要用美金交易的話,要先從台灣進行國際匯款美元到交易所的銀行帳戶,然後才能買bitcoin。目前用來交易的貨幣幾乎都是美金和歐元。

就自己的經驗,國際匯款不是個最好的選擇,第一是要被收取300~900圓的手續費,第二是要兩三天對方才能確認收到款項。當然有人已經著手解決這個問題,如果是在美國的話,可以使用BitInstant服務,在7-11直接存款,非常方便。應該讓台灣的7-11也能進行這種服務。

Saturday, November 17, 2012

初嘗Node.js開發管理package.json

發佈自己的程式時,如何解決相依套件的問題是很麻煩的。套件的相依性,簡單來說就是我的程式需要哪些套件,要用什麼版本。最近看到node的npm管理方法,令人驚艷。

開發npm的套件時,需要package.json,這個檔案包含package的各種資訊,如作者和依賴的套件。顧名思義,package.json就是個json,結構也很簡潔。

這裡有官方的文件,我節錄和套件有關的重要的package.json片段,

{ "dependencies" :
  { "foo" : "1.0.0 - 2.9999.9999"
  , "bar" : ">=1.0.2 <2.1.2"
  , "baz" : ">1.0.2 <=2.3.4"
  , "boo" : "2.0.1"
  , "qux" : "<1.0.0 || >=2.3.1 <2.4.5 || >=2.5.2 <3.0.0"
  , "asd" : "http://asdf.com/asdf.tar.gz"
  , "til" : "~1.2"
  , "elf" : "~1.2.3"
  , "two" : "2.x"
  , "thr" : "3.3.x"
  }
}

從上表我們可以發現,指定相依套件的方式很有彈性。可以指定特定版本,也可以指定某個區間。

設定完成後,只需要用以下指令,npm就會幫忙把套件裝到package所在的目錄下,對於開發者來說實在是很方便:)

npm i