面向开发者的比特币(Bitcoin)入门介绍

对开发者而言,Bitcoin的开发工作是非常简单的。Bitcoin不需要第三方依赖,没有专有的API,你只需要一个你最喜欢的编程语言。幸运的是,现在已经有简单的Bitcoin库,你可以使用库方便的发送和接收比特币。下面我们会介绍几个Bitcoin库,并介绍一下比特币的地址(address)和交易(transaction)。

Bitcoin的协议通常可以分成三个部分,地址和密钥(key)管理、交易、块(block)和采矿(mining)。块和采矿对刚开始学习Bitcoin的开发者来说并不是很重要;在大多数情况下,可以使用第三方库处理块,如果你对采矿感兴趣,最快的方法是买一个标准的比特币采矿机。地址、密钥和交易是必须需要处理的。

在比特币的密钥管理中,有三种不同的对象需要你处理:私有密钥、公共密钥和地址。你也许在公钥加密算法中听说过私有密钥和公共密钥,这和我们上面说的两个密钥是一样的。但是比特币使用了新型的加密算法,叫椭圆曲线(elliptic curve)加密,它并不是基于因数分解的加密算法,如RSA,所以Bitcoin的密钥看起来和PGP密钥有点不同。Bitcoin的一个私有密钥是下面这个样子:

和上面私有密钥对应的公钥为:

一个私有密钥可以转换为公有密钥,但是公有密钥不能转换为私有密钥。一个比特币的地址其实就是公有密钥的哈希值,上面公有密钥对应的Bitcoin地址是:

你可能注意到了,比特币的地址并不是使用16进制表示(私钥和公钥使用16进制表示)。这是因为Bitcoin使用了自己的表示格式:base58check。base58代表使用58个不同的字母和数字,O, 0, l 和 I 没有使用,因为它们容易混淆。Base58和Base2、Base3和Base10很像,例如数字31337,用Base2表示为111101001101001,用Base3表示为1120222122,用Base10表示为31337,用Base16表示为7a69,用Base58表示为AKJ,最后,如果用Base256,表示为zi。base58check中check也很重要,它代表一个信息再被编码为Base58之前,将hash前四个字节放在信息的末尾。例如,要把base256的”zi”转换为base58,步骤如下:

虽然处理起来很复杂,但是你不用亲自处理,第三方库已经处理好一切了。在讨论库之前,我们先了解一下交易处理。

需要记住的一点是,比特币并没有内在的“账户”或“余额”的概念。所有的存款都保存在“交易输出(transaction output)”对象中,一个交易有一个或多个输入,每个输入花费一个已存在的未用尽的交易输出(”UTXO”)。交易在反序列化格式看起来如下:

下面是序列化格式:

script参数是另一种表示地址的方法;把上面交易中两个script转换为地址,我们得到”1FxkfJQLJTXpW6QmxGT6oF43ZH959ns8Cq”和”1JwSSubhmg6iPtRjtyqhUYYH7bZg3Lfy1T”。交易中的单独一个输入是前一个交易输出的引用。从上面数据区块链(blockchain)中可以看到它有1354164 satoshi(1 satoshi是比特币中最小的单位,1 BTC = 100000000 satoshi)可以花费,两个输出花费1344164,剩下的10000 satoshi做为小费。

注意,一个交易只能以输出做为整体使用,但是为了灵活,它有一个“零钱”机制-发送一个输出到目标,然后另一个输出把剩余的零钱发送给自己。上面交易就是一个例子-第一次输出付费0.01 BTC,第二个为找零。一旦你创建了一个交易,你需要为每个输入对应地址的私有密钥签名,处理过程是非常繁琐的,幸运的是有库为你处理。上面的交易签完名看起来如下:

最后,你需要把签过名的交易推送到数据区块链,手动处理的最好方法:http://blockchain.info/pushtx。这里并没有涉及Bitcoin的高级特性,多重数字签名。

Bitcoind

Bitcoind是比特币客户端,它是由Bitcoin的核心开发团队制作。它是完整bitcoin节点:下载整个数据区块链并处理交易。

下载bitcoind

编译安装,看doc目录的安装说明。

其他工具:

  • SX
  • Pybitcointools

库:

相关文章

发表评论

电子邮件地址不会被公开。 必填项已用*标注