阿米尔·塔基(Amir Taaki)的 利比币 已成为现有比特币协议最先进的替代实现之一。尽管现在市场上有数十种替代实现,但libbitcoin是为数不多的重新实现完整比特币标准的少数应用之一,从而允许用户运行 确定性钱包, 一个 椭圆曲线消息签名界面 当然, 功能齐全的比特币节点. 即使是多签名交易(许多流行的钱包,包括blockchain.info和Android的Bitcoin Wallet仍不支持),libbitcoin也能很好地处理。比特币在模块化方面也很独特。程序包本身是一个软件库,其中包含一组组件,每个组件都可以通过编程方式单独调用,从而避免了启动完全成熟的整体式软件守护程序,而仅需进行一些简单的事务或查询。如果要在本地运行完整的客户端,则可以使用libbitcoin进行操作,但是也可以轻松地仅使用libbitcoin进行事务管理和联网,并依靠其他节点获取事务数据。无论您需要什么,都可以使用,无论您不需要什么,都可以轻松使用.
作为libbitcoin的第一个主要实际应用,Amir Taaki最近发布了 sx, 一组用于处理比特币密钥和交易的命令行实用程序。基本意图很简单:授权具有一定技术水平但没有经验的程序员的比特币用户与比特币进行交互,不仅是他们输入一定数量的接口,目的地址和比特币可以为他们做所有事情,而且还可以直接工作与基础构建块。每个sx工具都遵循Unix的哲学:它做一件事,并且做得很好。 genaddr
获取一个Electrum钱包种子或主公钥以及一个索引并返回一个地址.
mktx
创建未签名的交易,并
符号输入
签署交易输入.
历史
返回与可以用作输入的比特币地址相关的未使用交易的列表,依此类推.
可以在命令行上访问这些工具以一次构建一个比特币交易,或者可以以编程方式调用它们(例如,使用os.popen(command).read()
在Python中)来创建比特币软件,例如商家软件包和钱包。到目前为止,创建一个新的比特币钱包还很困难,要么要么从头开始重新实现所有东西,要么拿一个现有的钱包,然后努力解开代码以将交易逻辑从钱包逻辑中分离出来,要么依靠一个bitcoind节点在后台运行。但是,有了libbitcoin和sx,就可以使用最低级别的比特币交易工具-使开发人员有能力去处理真正需要最多工作的问题-例如优化安全性和用户体验。.
不仅仅是图书馆
那么,为什么libbitcoin和SX如此重要?事实证明,答案远不止这些方便的事实。比特币生态系统的主要问题之一是,尽管比特币名义上是分散的,但实际上,保持网络运行的矿工都在运行相同的核心比特币软件: 比特币. 自从中本聪(Satoshi)在2009年发布第一个版本以来,Bitcoind是原始比特币客户端的“无头”(即仅命令行)版本,并且是所有矿工和几乎所有企业用来与该平台通信的软件。比特币网络.
这是不健康的,原因有两个。首先,垄断可能导致高度破坏性的区块链分叉。例如,今年3月,数据库中的一个错误被删除,该错误阻止了比特币节点处理一个区块,同时影响了5,000多个交易的状态,导致比特币网络在有错误和无错误的节点之间分裂了大约六个小时。不同意区块的有效性,并开始在两个独立的区块链上工作。解决方法:比特币社区聚集在一起,同意关闭0.8版节点,并将数据库错误添加到官方协议中已有两个月,直到两个月后可以以受控方式将其删除为止。相反,如果有五种不同的比特币实现方式被广泛使用,那么任何一个失败都会只影响比特币网络的一小部分,而普通用户的客户(通常仅验证交易而不是阻止交易)可能不会受到影响。根本没有,因为如果发生分叉,“合法的”区块链几乎总是占据多数网络的那个.
第二个原因是政治上的。许多核心比特币开发人员,特别是首席开发人员加文·安德森(Gavin Andresen),也是比特币基金会的一部分,该组织已经采取了明确的步骤,将政治游说作为保护比特币的策略。担心的是,在将来,政府可能会尝试更多地监管比特币,并给该基金会下个通im:您包括某些侵犯隐私的功能(一个适度的例子可能是“地址验证费”,以阻止人们覆盖他们的比特币。通过在协议中创建许多比特币地址来跟踪),或者我们禁止比特币交换。基金会很可能会遵守,美国政府也知道。但是,如果基金会在未经国际广泛同意的情况下没有权力对协议进行此类更改,那么美国政府将没有这种选择-他们将被迫要么试图彻底禁止比特币,要么付出巨大代价。至少要在技术和开源社区之间保持良好的信誉,或者顺其自然,并专注于较软的监管策略。这就是为什么像Amir Taaki,Joerg Platzer这样的比特币拥护者长期以来一直支持使比特币生态系统多样化和国际化的原因。 libbitcoin可能是最终推动这一进程前进的催化剂.
您如何使用SX?
如果您使用的是Linux,则安装sx非常简单;在命令行上,wget http://sx.dyne.org/install-sx.sh
其次是
须藤bash./install-sx.sh
就是全部。如果您使用的是Windows或Mac,则事情会有些复杂,尽管没有任何其他类似的软件包那么复杂;可以从https://github.com/genjix/sx下载源代码,然后可以从那里手动安装源代码。.
安装sx后,您可以执行以下操作。一,基本地址和按键操作.
生成私钥/公钥/地址三元组:
sx newkey > pk1cat pk1 | sx pubkey > pub1cat pk1 | sx地址 > addr1cat pk1 pub1 addr1
从Electrum钱包生成私钥/地址对:
sx新种子 > seedfor x在`seq 0 9`中;做猫种子| sx genpriv $ x;猫种子| sx genaddr $ x;完毕
仅从主公用密钥生成地址:
猫种子| sx mpk > mpkfor x in`seq 0 9`;做猫mpk | sx genaddr $ x;完毕
交易次数
现在,该进行交易了。首先,需要对事务如何工作有一点了解。比特币没有“账户”的概念;取而代之的是,从某个地址花钱的交易必须直接引用一些向该地址发送至少等值金额的交易;这些通常称为“先前的交易输出”。例如,如果您有一个地址,向其发送了2个BTC,3个BTC,然后又发送了4个BTC,并且想要花费5个BTC,则您不在该地址之外花费5个BTC。相反,您要花费2个BTC和3个BTC交易输出。此外,输出不能“部分花费”;即使您只想发送0.1 BTC,也必须消耗整个输出。您可以通过在交易中添加一个特殊的输出(称为“ change”)来避免浪费1.9 BTC,在此您将剩余的资金返还给自己.
用来获取这些未花费的事务输出的基本命令是sx历史记录
:
sx历史记录`cat addr1`
但是,此操作本身会返回连接到该地址的所有事务,而不仅仅是返回我们想要的事务,因此我们需要对输出进行一点过滤。这是一个复杂的脚本;基本上,它首先在历史记录中查找“未花费”一词,并在其上方的两行中获得这些行以及交易数据。然后,它使用grep和awk仅提取我们需要的数据。请注意,该命令以satoshis返回值; 1亿聪等于1 BTC。将0.001 BTC发送到addr1文件中包含的地址(cat addr1
看到它,并且
sx qrcode`cat addr1`qrcode.png
生成可扫描的QR码),然后运行以下命令:
sx历史记录`cat addr1` | grep未使用-B 2 | grep输出| awk'{print $ 2}’ > 输入猫输入
有了历史记录之后,让我们使用sx创建并发送交易.
sx mktx txfile.tx`cat input` -o 18qk7SqRHuS4Kf3f6dmsvqqv7iw1xy77Z6:90000sx rawscript dup hash160 [`cat addr1 | sx encode-addr`] equalverifychecksig > raw.scriptcat pk1 | sx符号输入txfile.tx 0`cat raw.script` > sigsx rawscript [`cat sig`] [`cat pub1`] | sx设置输入txfile.tx 0 > txfile2.tx; mv txfile2.tx txfile.txsx广播-tx txfile.tx
如果您要花费多个交易输入,请执行以下操作。将0.0002 BTC发送到您的地址五次,然后再次运行上述sx history命令,并确保它返回五个输出。为避免必须手动复制和粘贴五个交易输入,我们将做一些命令行魔术:
sx历史记录`cat addr1` | grep未使用-B 2 | grep输出| awk'{print $ 2}’ > temp1cat temp1 | sed’s / ^ /-i /’| tr’n”’ > temp2cat temp2
注意temp2如何以与sx mktx完全正确的格式包含所有输入
. 现在,我们将它们拼接到:
sx mktx txfile.tx`cat temp2` -o 18qk7SqRHuS4Kf3f6dmsvqqv7iw1xy77Z6:90000sx rawscript dup hash160 [`cat addr1 | sx encode-addr`] equalverifychecksig > raw.script for`seq 0 4`中的x;做猫pk1 | sx符号输入txfile.tx $ x`cat raw.script` > sig $ x;在`seq 0 4`中完成;做sx rawscript [`cat sig $ x`] [`cat pub1`] | sx设置输入txfile.tx $ x > txfile2.tx; mv txfile2.tx txfile.tx; donesx broadcast-tx txfile.tx,
圣杯:多重签名交易
首先,我们将生成3组私钥,公钥和地址.
对于`seq 1 3`中的x;做sx newkey > pk $ x;在`seq 1 3`中完成;做猫pk $ x | sx pubkey > pub $ x;在`seq 1 3`中完成;做猫pk $ x | sx地址 > addr $ x;完毕
然后,我们将创建多重签名地址.
sx rawscript 2 [`cat pub1`] [`cat pub2`] [`cat pub3`] 3 checkmultisig > msig.scriptcat msig.script | sx showscriptcat msig.script | sx脚本哈希 > 3addrcat 3addr
将0.001 BTC发送到该地址(不适用于所有钱包!),然后运行以下命令获取交易哈希值:
sx历史记录`cat 3addr` | grep未使用-B 2 | grep输出| awk'{print $ 2}’ > 输入猫输入
现在,我们需要构造事务并对其进行签名,在这种情况下,请使用第一个和第三个私钥(第一个和第二个或第二个和第三个工作同样好)。我们只会发送50000聪,剩下0.0005 BTC作为费用.
sx mktx txfile.tx -i`cat input` -o 18qk7SqRHuS4Kf3f6dmsvqqv7iw1xy77Z6:50000cat pk1 | sx符号输入txfile.tx 0`cat msig.script` > sig1cat pk3 | sx符号输入txfile.tx 0`cat msig.script` > sig3sx原始脚本零[`cat sig1`] [`cat sig3`] [`cat msig.script`] > input.scriptcat input.script | sx设置输入txfile.tx 0
最后,广播交易.
sx broadcast-tx txfile.tx
相当复杂,但是多重签名交易在任何情况下都不是完全简单的。但是,使用sx,可以将复杂性降低为一系列步骤,您可以轻松遵循这些步骤,甚至可以将其合并到自己的程序中以在需要时运行。无论您是命令行狂热者,比特币开发人员,还是只是有兴趣更深入地研究比特币交易方式的人,sx都是您的理想选择。快乐黑客!