跳转至

第五章。另类硬币

自从比特币取得初步成功后,许多替代货币项目相继推出。比特币于 2009 年发布,第一个替代硬币项目(名为 Namecoin)于 2011 年推出。2013 年和 2014 年,替代硬币市场呈指数级增长,许多不同类型的替代硬币项目开始启动。其中一些获得了成功,而许多不受欢迎,没有成功。有几起诈骗案浮出水面,但很快就销声匿迹了。基于开发比特币的主要目的,比特币的替代方法可以大致分为两类。如果主要目的是建立一个去中心化的区块链平台,它们被称为替代链;如果替代项目的唯一目的是引入一种新的虚拟货币,它就被称为替代货币。替代区块链将在本书后面的章节中详细讨论。

本章主要致力于替代货币(altcoins ),其主要目的是引入一种新的虚拟货币(coin ),尽管也将介绍一些基于比特币构建的替代协议,以提供各种服务。这些概念包括 Namecoin,其主要目的是提供分散的命名和身份服务,而不是货币。

目前,截至 2016 年底,市场上有数百种替代硬币,它们具有一定的货币价值。这些替代项目中有许多是比特币源代码的直接分支,尽管其中一些是从头开始编写的。一些替代硬币着手解决比特币的局限性,如隐私。其他一些提供不同类型的开采、轮挡时间的变化和分配方案。

根据定义,在硬分叉的情况下会产生替代硬币。如果比特币有一个硬分叉,那么另一个更老的链实际上被认为是另一种硬币。然而,对于哪条链成为替代硬币,并没有既定的规则。最近以太坊就发生了这种情况,除了以太坊 ( ETH )货币之外,一种新的货币 ETC ( 以太坊经典)应运而生。以太坊经典是老链条,以太是分叉后的新链条。这样一个有争议的硬分叉是不可取的,原因有很多。首先,它违背了权力下放的真正精神,因为以太坊基金会,一个核心实体,决定继续进行 hardfork,即使不是每个人都同意这个提议;其次,由于在硬分叉上的分歧,它也分裂了用户群体。虽然理论上硬分叉会产生替代硬币,但它所能提供的是有限的,因为即使变化导致硬分叉,硬币的基本参数通常也不会发生剧烈变化。它们通常保持不变。出于这个原因,最好是要么从头开始写一个新的硬币,要么派生出比特币(或另一个硬币的源代码)来创建一个具有所需参数和特征的新货币。

替代硬币必须能够吸引新的用户,交易和矿工,否则货币将没有价值。由于网络效应和社区的可接受性,货币获得了它的价值,尤其是在虚拟货币空间。如果一个硬币不能吸引足够多的用户,那么它很快就会被遗忘。可以通过提供初始数量的硬币来吸引用户,并且可以通过使用各种方法来实现。提供替代硬币初始数量的方法讨论如下:

  • 创建一个新的区块链:替代硬币可以创建一个新的区块链,并将硬币分配给最初的矿工,但这种方法现在不受欢迎,因为有许多骗局或抽水和倾倒计划,最初的矿工通过发行新货币获利,然后消失。
  • 燃烧证明:另一种向新替代硬币分配初始资金的方法是燃烧证明,也称为单向挂钩或价格上限。在这种方法中,用户永久销毁一定数量的比特币,销毁数量与要认领的替代比特币数量成比例。例如,如果 10 个比特币被销毁,那么替代比特币的价值不会大于被销毁的比特币的数量。这基本上意味着比特币正在通过燃烧被转换为替代币。
  • 所有权证明:不是永久销毁比特币,一种替代方法是证明用户拥有一定数量的比特币。这种所有权证明可用于通过将替代硬币块绑定到比特币块来认领替代硬币。例如,这可以通过合并挖掘来实现,在合并挖掘中,比特币矿工可以有效地挖掘替代比特币块,同时挖掘比特币,而无需任何额外的工作。
  • 挂钩侧链:侧链,顾名思义,是独立于比特币网络的区块链,但比特币可以转移到其中。Altcoins 也可以转回比特币网络。这个概念被称为双向挂钩。

投资和交易这些替代硬币也是一项大业务,尽管没有比特币那么大,但足以吸引新的投资者和交易者,并为市场提供流动性。在从http://coinmarketcap.com生成的图表中,组合的 altcoin 市值如下所示:

Alternative Coins

这表明,在撰写本文时,Altcoin 的总市值超过 20 亿美元

前 10 名硬币的当前市值(截至 2016 年 10 月)如下所示:

Alternative Coins

数据取自 https://coinmarketcap.com/

替代硬币带来了各种因素和新概念。许多概念甚至在比特币之前就被发明了,但随着比特币的出现,不仅首次引入了新的概念,如拜占庭将军问题的解决方案,而且 hashcash 和工作证明等先前的概念也被以一种别出心裁的方式使用,并成为人们关注的焦点。此后,随着替代硬币项目的引入,各种新技术和概念被开发和引入。为了了解替代加密货币的当前状况,首先必须了解一些理论概念。在接下来的部分中,将向读者介绍 altcoin 项目中引入的一些新概念。

理论基础

在本节中,将向读者介绍在过去几年中随着不同替代硬币的推出而发展起来的各种理论概念。

工作证明的替代方案

加密货币背景下的工作证明 ( PoW )方案首先用于比特币,并作为一种机制来提供保证,即矿工已经完成了找到区块所需的工作数量。这反过来为区块链提供了权力下放、安全和稳定。此外,这也是比特币提供去中心化分布式共识的主要载体。PoW 方案被要求具有一个被称为进程自由性的非常理想的属性,这基本上意味着消耗计算资源的回报应该是随机的,并且与矿工所做的贡献成比例。在这种情况下,即使那些计算能力相对较弱的矿工也有机会赢得区块奖励。术语 progress freeness 是由 Arvind Narayanan .等人在《比特币和加密货币技术一书中引入的。挖掘计算难题的其他要求包括可调整的难度和快速验证。可调整的难度确保在区块链上挖掘的难度目标被调整以响应增加的散列能力和用户数量。快速验证是一种属性,这意味着挖掘计算难题应该容易且快速地被验证。PoW 计划的另一个方面,尤其是比特币(双 SHA-256)中使用的那个方面,是自 ASIC 的引入以来,权力正在转向能够运营大规模 ASIC 农场的矿工或矿池,这挑战了比特币去中心化的核心理念。

已经提出了一些替代方案,例如抗 ASIC 难题,并且以这样的方式设计,即构建 ASIC 来解决这个难题是不可行的,并且不会导致比商用硬件有大的性能增益。用于此目的的一种常见技术是应用一类称为内存硬计算难题的计算难题。这种方法背后的核心思想是,由于解谜需要大量的存储器,所以在基于 ASIC 的系统上实现是不可行的。这项技术最初用于 litecoin 和 Tenebrix,其中 Scrypt 哈希函数被用作抗 ASIC 的 PoW 方案。尽管这种方案最初被宣传为抗 ASIC,但最近加密的 ASIC 现在已经可以证明 litecoin 最初的说法是错误的。

ASIC 电阻的另一种方法是需要计算多个散列函数来提供功率。这也称为链式散列方案。这种想法背后的基本原理是在一个 ASIC 上设计多个散列函数是不太可行的。最常见的例子是 Dash 中实现的 X11 内存硬函数。X11 包括 11 个 SHA3 竞争者,其中一个算法将计算出的散列输出到下一个算法,直到所有 11 个算法在序列中被使用。这些算法包括 blake、bmw、groestl、jh、keccak、skein、luffa、cubehash、shavite、simd 和 echo。

这种方法最初确实对 ASIC 开发提供了一些阻力,但是现在 ASIC 挖掘器在商业上是可用的,并且支持 X11 和类似方案的挖掘。最近的一个例子是 ASIC Baikal Miner,它支持 X11、X13、X14 和 X15 挖掘。其他例子包括采矿机,如 iBeLink DM384M X11 采矿机和 Pinidea X11 ASIC 采矿机。

也许另一种方法可以是设计自变异拼图,智能地或随机地改变电源方案或其作为时间函数的要求。这将使得它几乎不可能在 ASIC 中实现,因为它将需要为每个功能设计多个 ASIC,并且随机改变方案几乎不可能在 ASIC 中处理。目前,还不清楚如何在实践中实现这一点。

PoW 有各种缺点,其中最大的缺点是能耗。预计到 2020 年,比特币矿工消耗的总电量将相当于丹麦。这是巨大的,所有的能量在某种程度上都被浪费了;事实上,除了采矿之外,没有任何有用的用途。环保主义者对这种情况表示了真正的担忧。

有人提出,可以用这样一种方式来设计 PoW 拼图,它们有两个用途。首先,它们的主要目的是在共识机制中,其次是执行一些有用的科学计算。这样,这些方案不仅可以用于采矿,还可以帮助潜在地解决其他科学问题。这种有用工作的证明最近已经由 Primecoin 付诸实践,其要求是找到被称为 Cunningham 链和双孪生链的特殊素数链。由于素数分布的研究在物理学等科学学科中具有特殊的意义,通过挖掘素数币,挖掘者不仅可以获得块奖励,而且有助于发现特殊的素数。

储存证明

也被称为不可恢复性证明,这是另一种需要存储大量数据的有用工作的证明。由微软研究院引入的这一方案提供了档案数据的分布式存储的有益效果。为了进行挖掘,挖掘者需要存储一个伪的、随机选择的大数据子集。

股权证明

这种证明也被称为虚拟挖掘。这是另一种类型的采矿难题,已被提议作为传统电力方案的替代方案。它于 2012 年 8 月在 PeerCoin 首次提出。在这个方案中,要求用户证明拥有一定数量的货币(硬币),从而证明他们与硬币有利害关系。最简单的股权形式是,对那些显然拥有大量数字货币的用户来说,挖掘相对容易。这个方案的好处是双重的:首先,与购买高端 ASIC 设备相比,获取大量数字货币相对困难,其次,这导致节省计算资源。已经提出了各种形式的桩,下面简要讨论。

造币的证明

硬币的年龄是指自硬币最后一次被使用或持有以来的时间。这是一种不同于通常形式的股权证明的方法,在通常形式的股权证明中,对于在 altcoin 中拥有最高股权的用户来说,采矿更容易。在基于硬币年龄的方法中,每次开采一个区块,硬币(硬币)的年龄被重置。矿工因持有硬币并在一段时间内不消费硬币而获得奖励。这种机制已经以一种创造性的方式在 Peercoin 和 PoW 中实现。挖掘谜题的难度(PoW)与硬币年龄成反比,这意味着如果矿工使用硬币赌注交易来消费一些硬币年龄,那么 PoW 需求就会减轻。

存款证明

这一方案背后的核心思想是让矿工新开采的区块在一段时间内无法使用。更准确地说,在采矿过程中,硬币会被锁定一定数量的区块。该计划允许矿工以冻结一定数量的硬币一段时间为代价进行采矿。这是一种利害关系的证明。

烧伤证明

作为计算能力的替代支出,burn 的证明事实上是为了得到等价的 altcoins 而破坏一定量的比特币。这通常在启动新硬币项目时使用,作为提供公平初始分配的一种方式。这可以被认为是一种替代的开采方案,其中新硬币的价值来自于先前一定数量的硬币已经被销毁的事实。

活动证明

这个方案是权力和利害关系证明混合。在这个方案中,最初使用 PoW 生成块,但是每个块随机分配三个利益相关者,要求他们对其进行数字签名。后续块的有效性取决于先前随机选择的块的成功签名。

然而,有一个可能的问题被称为无利害关系问题,其中创建区块链的分叉是微不足道的。这是可能,因为在电力中需要适当的计算资源来挖掘,而在利益证明中没有这样的要求;因此,攻击者可以尝试使用同一枚硬币在多个链上挖矿。

不可外包的谜题

这一难题背后的主要动机是再次抵制开发矿池。如前所述,挖掘池根据所有参与者消耗的计算能力按比例向他们提供奖励。然而,在这个模型中,矿池经营者是一个中央权力机构,所有的报酬都归他所有,他可以执行某些规则。此外,在这个模型中,所有矿工只信任彼此,因为他们一起朝着一个共同的目标努力,希望游泳池经理得到奖励。不可外包的谜题是一个让矿工为自己索取奖励的方案;因此,由于匿名矿工之间固有的不信任,形成池变得不太可能。

难度调整和重定目标算法

随着比特币和替代币的出现,另一个概念是重新定位算法的困难。在比特币中,难度目标通过以下等式简单计算:然而,其他硬币要么开发了自己的算法,要么实现了比特币难度算法的修改版本:

T =上一次实际时间/ 2016 * 10 分钟*

比特币的难度监管背后的想法是,2016 年区块的一代应该需要大约 2 周时间(区块间时间应该在 10 分钟左右)。如果开采 2016 个区块的时间超过 2 周,则难度降低,如果开采 2016 个区块的时间不到 2 周,则难度增加。当由于高块生成率而引入 ASIC 时,难度指数级增加,这是不抗 ASIC 的 PoW 算法的一个缺点。这就导致了采矿权集中。这也带来了另一个问题;如果新硬币现在开始使用与比特币相同的基于 SHA256 的工作证明,那么恶意用户就很容易简单地使用 ASIC 挖矿机并控制整个网络。如果对新的 altcoin 的兴趣降低,有人决定通过消耗足够高的计算资源来接管网络,这种攻击将更加实际。如果具有类似计算能力的其他矿工也加入 altcoin 网络,这可能不是一个可行的攻击,因为那样矿工将相互竞争。此外,多种货币构成了更大的威胁,因为一群矿商可以自动转向有利可图的货币。这种现象被称为跳池,会对区块链产生不利影响,从而影响替代硬币的增长。跳池对网络有负面影响,因为跳池者只有在难度较低时才加入网络,他们可以快速获得奖励;一旦难度增加(或被重新调整),它们就会跳离,然后当难度被调整回来时,它们又会回来。例如,如果一个多池在快速挖掘一个新硬币时消耗了它的资源,难度将会很快增加;当多池离开货币网络时;它变得几乎无法使用,因为事实上,现在的难度已经增加到这样一个水平,它不再对个体矿工有利可图,也不能再维持下去。解决这个问题的唯一方法是发起一个硬分叉,这通常是社区所不希望的。

有一些算法可以解决这个问题,我们将在后面讨论。所有这些算法都基于响应散列率变化重新调整各种参数的思想;这些参数包括前几个方块的数量,前几个方块的难度,调整的比率,以及难度可以调整的数量。在接下来的章节中,读者将会了解到一些难度算法,这些算法将会在不同的替代硬币中被使用和推荐。

木本重力井

这种算法被用在各种替代币中来调节难度。这是在 Megacoin 中首次引入的,用于自适应地调整每个块的网络难度。算法的逻辑如下所示:

KGW = 1+(0.7084 * pow((double(PastBlocksMass)/double(144)),-1.228))

基本上,该算法在一个循环中运行,该循环遍历一组预定的块(PastBlockMass),并计算新的再调整值。该算法背后的核心思想是开发一种自适应难度调节机制,该机制可以根据哈希速率的快速峰值重新调整难度。木本重力井 ( KGW )保证两个街区之间的时间保持大致相同。在比特币中,每 2016 个区块的难度都会调整,但在 KGW,每个区块的难度都会调整。

这种算法容易受到时间扭曲攻击,这使得攻击者在创建新块时暂时享受到较少的难度。这种攻击允许一个时间窗口,在这个时间窗口中,难度变低,攻击者可以很容易地快速生成许多硬币。

黑暗重力波

黑暗重力波 ( DGW )是一种新算法,旨在解决 KGW 算法中的某些缺陷,如时间扭曲攻击。这是在 Dash 中首次推出的,以前被称为 Darkcoin。它利用多重指数移动平均线和简单移动平均线来实现更平滑的调整机制。该公式如下所示:

2222222/(((difficulty+2600)/9)^2)

这个公式在破折号硬币和其他各种替代硬币中被实现,作为重新调整难度的机制。

DGW 版本 3.0 是该算法的最新实现,与 KGW 相比,它提高了重定目标的难度。

数码盾牌

这是最近在 Zcash 中使用的另一个困难的重定目标算法,稍加变化并经过充分的实验。该算法通过遍历固定数量的先前块来计算它们生成所用的时间,然后通过平均目标时间来划分实际时间跨度,将难度重新调整为先前块的难度。在这种方案中,重定目标的计算要快得多,并且从散列率的突然增加或减少中恢复也很快。该算法可以防止多池,多池会导致 hashrate 快速增加。根据实施情况,每块或每分钟重新调整网络难度。关键的创新是比 KGW 更快的重新调整时间。

迈达斯

多音程难度调整系统 ( MIDAS )是一种比之前讨论的算法相对更复杂的算法。这种方法对哈希速率的突然变化的响应要快得多。该算法还提供了针对时间扭曲攻击的保护。

许多货币的出现是为了解决比特币的各种限制。以下是对比特币局限性的简要讨论。

比特币的局限性

比特币的各种限制也引发了一些对替代币的兴趣,替代币是专门为解决比特币的限制而开发的。最突出且被广泛讨论的限制是比特币缺乏匿名性。下面将详细讨论这一限制。

隐私和匿名

由于区块链是所有交易的公共分类账,并可公开获取,因此对其进行分析变得微不足道。结合流量分析,交易可以链接回它们的源 IP 地址,从而可能揭示交易的发起者。从隐私的角度来看,这是一个大问题。尽管在比特币中,为每笔交易生成一个新地址是一种推荐和常见的做法,从而允许某种程度的不可链接性,但这还不够,已经开发了各种技术并成功用于跟踪整个网络中的交易流,并将它们链接回其发起者。研究人员使用了各种方法来分析区块链,如交易图、地址图和实体图,以将用户与交易联系起来,从而引发了隐私问题。通过使用关于交易的公开可用信息并将它们链接到实际用户,可以进一步丰富上述分析技术。有一些开源的块解析器可以用来从区块链数据库中提取交易信息、余额和脚本。https://github.com/mikispag/rusty-blockparser 的解析器是用 Rust 编写的,提供高级区块链分析能力。这项工作的早期版本被称为比特碘,但不再被积极开发。

已经提出了各种提案来解决比特币的隐私问题。这些建议分为三类:混合协议、第三方混合网络和固有匿名性。每个类别的简要讨论如下。

混合协议

这些方案用于为比特币交易提供匿名性。在这个模型中,使用了混合服务提供者(中介或共享钱包)。用户将硬币发送到该共享钱包作为存款,然后共享钱包可以将一些其他硬币(由一些其他用户存入的相同价值的硬币)发送到目的地。用户也可以通过这个中介接收其他人发送的硬币。这样,输出和输入之间的联系就不复存在,交易图分析也无法揭示发送方和接收方之间的真实关系。

CoinJoin 是混合协议的一个例子,其中两个事务连接在一起形成一个事务,同时保持输入和输出不变。CoinJoin 背后的核心思想是构建一个由所有参与者签名的共享事务。这种技术提高了交易中所有参与者的隐私:

Mixing protocols

三个用户将他们的事务加入到一个更大的 CoinJoin 事务中的 CoinJoin 事务

第三方混合协议

各种第三方混合服务是可用的,但是如果该服务是集中式的,那么它会带来追踪发送者和接收者之间的映射的威胁,因为混合服务知道所有的输入和输出。除此之外,完全集中的矿工甚至会带来服务管理员窃取硬币的风险。

基于 CoinJoin(混合)事务的思想,有各种不同复杂程度的服务,如 CoinShuffle、Coinmux 和 dark send in Dash (coin)。CoinShuffle 是传统混合服务的分散替代方案,因为它不需要可信的第三方。

然而,基于 CoinJoin 的方案有一些弱点,最突出的是由最初承诺签署交易但现在不提供他们的签名的用户发起拒绝服务攻击的可能性,从而延迟或完全停止联合交易 a。

固有的匿名性

这一类别包括本质上支持隐私的硬币,并内置于货币的设计中。最流行的是 Zcash,本章后面会详细讨论。其他例子包括 Monero,它利用环签名来提供匿名服务。

下一节将介绍为扩展比特币协议已经做出或提议的各种改进。

比特币之上的扩展协议

为了增强和扩展比特币协议,并将其用于各种其他目的,而不仅仅是作为虚拟货币,已经在比特币的基础上提出并实现了几个协议。

彩色硬币

彩色硬币是一套用于在比特币区块链上表现数字资产的方法。给比特币着色通俗地说就是用一些代表数字资产(智能财产)的元数据来更新它。硬币仍然像比特币一样工作和操作,但额外携带了一些代表一些资产的元数据。这种机制允许发行和跟踪特定的比特币。元数据可以使用 bitcoins OP_RETURN操作码记录,或者可选地记录在多签名地址中。如果需要解决任何隐私问题,也可以对这些元数据进行加密。彩色硬币可以用来代表多种资产,包括但不限于商品、证书、股票、债券和投票。还应该注意的是,为了使用彩色硬币,解释彩色硬币的钱包是必要的,正常的比特币钱包将不起作用。可以使用 https://www.coinprism.com/的一项服务在线设置彩色硬币钱包。使用这项服务,任何类型的数字资产都可以通过彩色硬币来创建和发行。

彩色硬币的想法非常有吸引力,因为它不需要对现有的比特币协议进行任何修改,并且可以利用现有的安全比特币网络。除了数字资产的传统表现形式,还可以创建根据为其定义的参数和条件表现的智能资产。这些参数包括时间验证、可转让性限制和费用。这开启了创建智能合约的可能性。

一个主要的使用案例是在区块链发行金融工具。这将确保低交易费用、有效和数学上安全的所有权证明、无需中介的快速可转让性,以及对投资者的即时股息支付。

丰富的 API 可用于 http://coloredcoins.org/的彩色硬币。

交易对手

这是另一项服务,可用于创建自定义令牌,充当加密货币,并可用于各种目的,如在比特币区块链的基础上发行数字资产。这是一个非常强大的平台,其核心运行在比特币区块链上,但开发了自己的客户端和其他组件来支持发行数字资产。该架构由交易对手服务器、交易对手模块、交易对手钱包和 armory_utxsvr 组成。Counterparty 的工作原理与彩色硬币相同,将数据嵌入常规比特币交易中,但它提供了一个丰富得多的库和一套强大的工具来支持数字资产的处理。这种嵌入也被称为嵌入式共识,因为对手方交易嵌入在比特币交易中。嵌入数据的方法是在比特币中使用OP_RETURN操作码。

交易对手生产和使用的货币被称为 XCP,并被智能合约用作运行合约的费用。在撰写本文时,其价格为 2.78 美元。xcp 是使用前面讨论的燃烧证明方法创建的。

交易对手允许使用 solidity 语言在以太坊上开发智能合约,并允许与比特币区块链进行交互。为了实现这一点,BTC 中继被用作在以太坊和比特币之间提供互操作性的手段。这是一个聪明的概念,以太坊合约可以通过 BTC 中继与比特币区块链和交易对话。中继器(运行 BTC 中继的节点)获取比特币块头,并将它们中继到以太坊网络上验证 PoW 的智能合约。该过程验证在比特币网络上发生了交易。这在http://btcrelay.org/有售。

从技术上讲,这基本上是一个以太坊合同,能够存储和验证比特币块标头,就像比特币简单支付验证轻量级客户端通过使用布隆过滤器所做的那样。SPV 客户在前一章已经详细讨论过了。这个想法可以用下面的图表来形象化:

Counterparty

BTC 接力概念

注意

交易对手可在http://counterparty.io/找到。

山寨币的发展

从编码的角度来看,Altcoin 项目可以通过简单地分叉比特币或另一种硬币的源代码来非常容易地启动,但这可能还不够。当一个新的硬币项目开始时,有几件事需要考虑,以确保成功推出和硬币的寿命。通常,代码库是用 C++编写的,就像比特币一样,但几乎任何语言都可以用来开发比特币项目,例如 Golang 或 Rust。

为现有硬币编写代码或派生代码是微不足道的一部分,具有挑战性的问题是如何发行一种新货币,以便吸引新的投资者和用户。一般来说,以下步骤是为了开始一个新的硬币项目。

从技术角度来看,在分叉另一个硬币(例如比特币)的代码的情况下,可以改变各种参数来有效地创建新的硬币。这些参数需要被调整或引入,以创造一个新的硬币。这些参数可以包括但不限于以下内容。

共识算法

有一种共识算法可供选择:比特币中使用的工作证明 ( PoW )或 Peercoin 中使用的股份证明 ( PoS )。

哈希算法

这是 SHA256、Scrypt、X11、X13、X15 或任何其他足以用作一致算法的散列算法。

难度调整算法

该类别中有各种选项可用于提供困难的重定目标机制。最突出的例子是 KGW、DGW、Nite 的重力波和 DigiShield。同样,所有这些算法都可以根据需要进行调整,以产生不同的结果;因此,许多变体是可能的。

块间时间

这是每个块生成之间经过的时间。对于比特币,每 10 分钟生成一次区块,对于莱特币,每 2.5 分钟生成一次。可以使用任何值,但是合适的值通常在几分钟之间;如果生成时间太快,可能会破坏区块链的稳定,如果太慢,可能不会吸引很多用户。

批量奖励

集体奖励是给解决了采矿难题的矿工的,并且允许有包含奖励的比特币基地交易。这曾经是比特币最初的 50 个硬币,现在许多替代硬币将这个参数设置为非常高的数字;例如,在 Dogecoin,目前为 10,000。

奖励减半率

这是另一个重要因素;在比特币中,它每 4 年减半,现在设定为 12.5 个比特币。这是一个可变的数字,可以根据需要设置为任何时间段或根本不设置。

块大小和交易大小

这是另一个重要的因素,它决定了网络上的事务速率可以有多高或多低。比特币的块大小被限制在 1 MB,但在替代币中,它可以根据要求而变化。

利率

此属性仅适用于 PoS 系统,在这种系统中,硬币的所有者可以按照网络定义的利率赚取利息,以换取作为 PoS 保存在网络上的硬币数量,从而保护网络。

角年龄

此参数定义了硬币必须保持未花多长时间才能被认为是值得下注的。

硬币总供应量

这个数字设定了硬币的总限额。例如,比特币的上限是 2100 万,而 Dogecoin 是无限的。这个限制是由上面讨论的块奖励和减半时间表确定的。

创建自己的虚拟货币有两种选择:派生现有的已建立的加密货币源代码或从头编写一个新的。后一种选择不太受欢迎,但第一种选择更容易,并允许在过去几年中创建许多虚拟货币。从根本上来说,该想法是首先对加密货币源代码进行分叉,然后在源代码的不同战略位置进行适当的更改,以有效地创建新货币。

在下一节中,将向读者介绍一些 altcoin 项目。本章不可能涵盖所有的替代货币,但下面会讨论一些精选的硬币。选择基于寿命、市值和创新。每枚硬币都从理论基础、交易、挖掘等不同角度进行讨论。

名称角

Namecoin 是比特币源代码的第一个分支。Namecoin 背后的关键思想不是制造替代币,而是提供改进的去中心化、审查阻力、隐私、安全和更快的去中心化命名。分散式命名服务旨在应对互联网上使用的传统域名系统 ( DNS )协议中的固有限制,例如速度慢和集中控制。Namecoin 也是 Zooko 三角形的第一个解决方案,这在前面的章节中有简要的讨论。

Namecoin 主要用于提供注册键/值对的服务。Namecoin 的一个主要用例是,它可以提供一个分散的传输层安全 ( TLS )证书验证机制,由基于区块链的分布式和分散共识驱动。

它基于与比特币相同的技术,但有自己的区块链和钱包软件。Namecoin 内核的源代码可以在 https://github.com/namecoin/namecoin-core 获得。

总之,Namecoin 提供以下三种服务:

  • 名称(密钥)的安全存储和传输
  • 通过附加多达 520 字节的数据,将一些值附加到名称上
  • 数字货币(名币)的生产

Namecoin 还首次引入了合并开采,允许一家矿商同时在多条链上开采。这个想法很简单,但非常有效:矿工创建一个命名硬币块,并产生该块的散列。然后,散列被添加到一个比特币区块,矿工以等于或大于名称币区块难度的难度来解决该区块,以证明已经为解决名称币区块贡献了足够的工作。

更准确地说,比特币基地交易用于包括来自 Namecoin(或任何其他 altcoin)的交易散列。挖掘任务是解决其比特币基地 scripSig 包含指向 Namecoin(或任何其他 altcoin)块的散列指针的比特币块。如下图所示。如果一名矿工设法解决了比特币区块链难度级别的哈希问题,比特币区块就会建立起来,并成为比特币网络的一部分。在这种情况下,比特币区块链会忽略 Namecoin 哈希。另一方面,如果一个矿工解决了一个名币区块链难度等级的方块,一个新的方块会在名币区块链中创建。这一方案的核心优势在于,矿工所消耗的所有计算能力都有助于保护名称币和比特币的安全:

Namecoin

合并挖掘图

交易名称角

根据https://coinmarketcap.com/的数据,Namecoin 目前的市值为 2736537,可以在https://cryptonit.net/等多个交易所进行买卖。通过简单的在线搜索,可以找到各种其他交易所。

获得命名币

尽管名称币可以独立挖掘,但它们通常是作为比特币挖掘的一部分,通过利用如上所述的合并挖掘技术来挖掘的。这样 Namecoin 就可以作为比特币开采的副产品被开采出来。从下面的难度图可以明显看出,单独采矿不再有利可图;相反,建议合并采矿,使用采矿池,甚至使用加密货币交易所购买名称硬币。

Obtaining Namecoins

命名硬币难度如图所示:https://bitinfocharts.com/comparison/difficulty-nmc.html

各种采矿池,如https://slushpool.com也提供合并采矿的选择。这使得矿工主要开采比特币,但也因此获得了名币。

另一种可以用来快速获得一些 Namecoin 的方法是用 name coin 交换你现有的硬币,例如,如果你已经有一些比特币或其他可以用来与 name coin 交换的加密货币。一项名为https://shapeshift.io/的在线服务可以提供这项服务。这项服务允许使用简单的用户友好界面从一种加密货币转换到另一种加密货币。

例如,向 BTC 付款以获得 NMC,如下所示:

Obtaining Namecoins

一旦开始交易被点击,交易开始,并指示用户将比特币发送到特定的比特币地址。当用户发送所需金额时,转换过程开始,如下所示:

Obtaining Namecoins

流程完成后,可以在 Namecoin 钱包中查看交易:

Obtaining Namecoins

确认交易可能需要一些时间;在那之前,不可能使用姓名币来管理姓名。一旦钱包中有了姓名币,就可以使用管理姓名选项来生成姓名币记录。

生成姓名币记录

Namecoin 记录采用键和值对的形式。名称是形式为d/examplename的小写字符串,而值是区分大小写的、UTF 8 编码的 JSON 对象,最大 520 字节。该名称应符合 RFC 1035(【https://tools.ietf.org/html/rfc1035】)标准。通用名称硬币名称可以是最长 255 字节的任意二进制字符串,带有 1024 位的相关识别信息。Namecoin 链上的记录仅在大约 200 天或 36,000 个街区内有效,之后需要更新。Namecoin 还介绍了。位顶级域名,可以使用 Namecoin 注册,也可以使用支持 Namecoin 的专用解析器浏览。下面截图所示的 Namecoin 钱包软件可以用来注册.bit域名。

输入名称,在按下提交按钮后,它将询问配置信息,如 DNS、IP 或身份:

Generating Namecoin records

如以下截图所示, masteringblockchain 将在币名区块链上注册为masteringblockchain.bit:

Generating Namecoin records

床角

莱特币是 2011 年发布的比特币源代码的一个分支。它使用 Scrypt 作为 PoW,最初是在 Tenebrix 硬币中引入的。与比特币相比,莱特币允许更快的交易,因为它的块生成时间更快,为 2.5 分钟。此外,由于更快的块生成时间,难度调整大约每 3.5 天实现一次。硬币总供应量为 8400 万。

Scrypt 是一个顺序存储硬函数,是基于 SHA-256 的 PoW 算法的第一个替代方案。它最初是作为基于密码的密钥派生函数PBKDF提出的。关键的想法是,如果功能需要大量的内存来运行,那么定制的硬件,如 ASICs,将需要更多的 VLSI 面积,这将是不可行的建设。Scrypt 算法需要在内存中保存大量的伪随机位,并以伪随机方式从中导出一个密钥。该算法基于一种叫做时间-内存权衡 ( TMTO )的现象。如果放松对内存的要求,就会导致计算成本增加。换句话说,如果给程序更多的内存,TMTO 会缩短程序的运行时间。这种权衡使得攻击者无法获得更多的内存,因为在定制的硬件上实现起来非常昂贵和困难,或者如果攻击者选择不增加内存,那么它会导致算法由于高处理要求而运行缓慢。

Scrypt 使用以下参数来生成派生密钥(Kd):

  • Passphrase:这是要散列的字符串
  • Salt:这是一个随机字符串,它被提供给 Scrypt 函数(通常是所有的散列函数),以便使用 rainbow 表提供对强力字典攻击的防御
  • N:这是一个内存/CPU 成本参数,必须是 2 的幂> 1
  • P:并行化参数
  • R:块大小参数
  • dkLen:派生密钥的预期长度,以字节为单位

从形式上讲,这个函数可以写成如下形式:

Kd =埃及(p,s,n,p,r,dkLen)

在应用核心 Scrypt 函数之前,算法将PS作为输入,并应用 PBKDF2 和基于 SHA-256 的 HMAC。然后,将输出馈送到称为 ROMix、的算法,该算法在内部使用利用 Salsa20/8 核心流密码的块混合算法来填充需要大存储器来操作的存储器,从而加强顺序存储器硬特性。

算法这一步的输出最终再次被馈送到PBKDF2函数,以便产生一个派生密钥。这个过程如下图所示:

Litecoin

Scrypt 算法

Scrypt 用于 litecoin 挖掘,具有特定参数,其中 N= 1024,R = 1,P=1,S=随机 80 字节,产生 256 位输出。

看来,由于这些参数的选择,开发用于 litecoin 采矿的 Scrypt 专用集成电路并不十分困难。在用于莱特币挖掘的 ASIC 中,可以开发时序逻辑,其将数据和随机数作为输入,并应用具有 HMAC-SHA256PBKDF2 算法;然后,产生的比特流被馈送到SALSA20/8函数,该函数产生一个散列,该散列又被向下馈送到PBKDF2HMAC-256函数,以产生一个 256 比特的散列输出。与比特币 PoW 的情况一样,在 Scrypt 中,如果输出哈希小于目标哈希(已经在开始时作为输入传递,存储在内存中,并在每次迭代中检查),则函数终止;否则,递增随机数,并且再次重复该过程,直到找到低于难度目标的散列:

Litecoin

加密 ASIC 设计简化流程图

  • 交易莱特币:和其他币一样,交易莱特币很容易在各种网上交易所进行。莱特币目前市值为 161,239,005。莱特币目前价格为 3.25/LTC。
  • 开采:莱特币开采可以单人进行,也可以分池进行。目前,用于 Scrypt 的 ASICs 是可用的,通常用于开采 litecoin。

像许多其他数字货币一样,在 CPU 上挖掘莱特币不再有利可图。有在线云开采提供商和 ASIC 矿工可用,可用于开采莱特币。Litecoin 采矿从 CPU 开始,通过 GPU 采矿装备发展,最终现在达到了这样一个点,即现在需要使用专门的 ASIC 采矿器,如 EhsMiner 提供的 Asic Scrypt 采矿器 Wolf,希望能够制造一些硬币。一般来说,即使有 ASICs,联营开采也比单独开采更好,因为单独开采不如联营开采有利可图,这是因为联营开采采用的是比例奖励计划。这些挖掘器能够为 Scrypt 算法产生 2 Gh/s 的哈希速率。

序曲

Primecoin 是市场上第一种引入有用 PoW 的数字货币,而不是比特币基于 SHA256 的 PoW。Primecoin 使用搜索质数作为一种能力。并非所有类型的素数都满足被选为 PoW 的要求。三种类型的素数(称为第一类坎宁安链、第二类坎宁安链和双孪生链)满足在加密货币中使用的 PoW 算法的要求。难度通过 Primecoin 区块链的连续难度评估方案进行动态调整。基于素数功率的有效验证也非常重要,因为如果验证很慢,则功率是不合适的。因此,选择素数链作为 PoW,因为随着链长度的增加,寻找素数链变得困难,而验证仍然足够快以保证被用作有效的 PoW 算法。同样重要是,一旦在一个块上验证了一种能力,它就不能在另一个块上重复使用。在 Primecoin 中,这是通过结合使用工作证明并将其与子块中的父块头进行哈希运算来实现的。PoW 证书是通过将主链链接到块头散列来生成的。它还要求块头的原点可被块头散列整除。如果是,则将其除,并且在除之后,商被用作 PoW 证书。PoW 算法的可调整难度的另一个特性是通过每块而不是每 2016 块引入难度调整来满足的,如比特币的情况。与比特币相比,这是一种更平滑的方法,并允许在哈希能力突然增加的情况下进行重新调整。此外,生成的硬币总数是由社区驱动的,Primecoin 可以生成的硬币数量没有具体限制。

初代贸易

Primecoins 可以在主要的虚拟货币交易交易所进行交易。在撰写本文时,Primecoin 的当前市值为 828,002 股。它不是很大,但由于 Primecoin 是基于一个新颖的想法,并且背后有一个专门的社区,所以它继续占有一些市场份额。

Trading Primecoin

采矿指南

第一步,下载钱包。Primecoin 支持钱包内的原生挖掘,就像最初的比特币客户端一样,但也可以通过各种在线挖掘服务提供商在云上进行挖掘。

快速窗口指南如下所示:

  1. 第一步是从:http://primecoin.io/index.php下载 Primecoin 钱包。
  2. Once the wallet is installed and synched with the network, mining can be started by following the next step. A debug window can be opened in the Primecoin wallet by clicking on the Help menu and selecting the Debug window menu item. Additional help can be invoked through typing help in the console window:

    Mining guide

    用于启用 Primecoin 挖掘功能的调试窗口

  3. Once the preceding commands are successfully executed mining will start in solo mode. This may not be very profitable but the miner can use mining pools available online:

    Mining guide

    Primecoin 钱包软件,与网络同步

Primecoin 源代码可在 https://github.com/primecoin/primecoin 获得。虽然这是一个新颖的概念,Primecoin 引入的 PoW 确实具有科学意义,但似乎没有积极的开发来进一步开发 Primecoin。读者可以在:【http://primecoin.io/bin/primecoin-paper.pdf】阅读阳光大王(化名)的 Primecoin 白皮书,进一步探索 Primecoin。

Zcash

Zcash 于 2016 年 10 月 28 日推出。这是第一种使用特定类型的零知识证明的货币,称为零知识简洁的非交互式知识论证 ( zk-SNARKs )来为用户提供完全的隐私。这些证明都很简短,很容易验证;然而,设置初始公共参数是一个复杂的过程。后者包括两个密钥:证明密钥和验证密钥。该过程需要对一些随机数进行采样,以便构造公共参数。问题是,这些随机数,也称为有毒废物,必须在参数生成后销毁,以防止伪造 Zcash。为此,Zcash 团队提出了一个多方计算协议,以协作方式从独立位置生成所需的公共参数,以确保不会产生有毒废物。由于这些公共参数需要由 Zcash 团队创建,这意味着仪式中的参与者是可信的。这就是为什么仪式是非常公开的,并且是利用多方计算机制进行的。这种机制有一个特性,即为了折衷最终参数,仪式中的所有参与者都必须折衷。当仪式完成时,所有参与者物理销毁用于私钥生成的设备。这一动作消除了设备上参与者的私钥部分的任何痕迹。

zk-SNARKs 必须满足完备性、可靠性、简洁性和非交互性。完整性意味着证明者有明确的策略来满足验证者断言为真。另一方面,稳健性意味着没有证明者可以说服验证者虚假陈述是真实的。简洁意味着在证明者和验证者之间传递的消息非常小。最后,非交互属性意味着断言正确性的验证可以在没有任何交互或很少交互的情况下进行。同样,作为零知识证明,也需要满足零知识(在第 3 章密码学和技术基础中讨论)的性质。

Zcash 开发者引入了分散匿名支付方案 ( DAP 方案)的概念,用于 Zcash 网络中实现直接和私人支付。这些交易没有透露任何关于支付来源、目的地和金额的信息。Zcash 中有两种类型的地址,z-addr 和 t-addr。z 地址基于零知识证明并提供隐私保护,而 T 地址类似于比特币。

Zcash 使用了一种高效的 PoW 方案,命名为非对称 PoW ( Equihash ),基于广义生日问题。它允许非常有效的验证。这是一个硬存储和抗 ASIC 的功能。Zcash 引入了一个新颖的想法(初始缓慢挖掘),这意味着区块奖励在一段时间内逐渐增加,直到达到第 20,000 个区块。这允许网络的初始缩放和早期矿工的实验,以及 Zcash 开发者在需要时的调整。由于稀缺,缓慢的启动确实对价格产生了影响,因为 ZEC 在推出的第一天价格就达到了大约 25,000 美元。Digishield 难度调整算法的稍微修改版本已经在 Zcash 中实现。该公式如下所示:

(下一难度)=(上一难度)x SQRT [ (150 秒)/(上一次求解时间)】

Zcash 的各种属性的快照(在初始慢速启动后)如下所示:

Zcash

交易 Zcash

Zcash 可以在主要的数字货币交易所买到。在撰写本文时,Zcash 的价格非常高。如下图所示,价格飙升至每 Zcash 约 10 个比特币。一些交易所的订单高达每 ZEC 2500 BTC:

Trading Zcash

采矿指南

挖掘 Zcash 有多种方法。目前,CPU 和 GPU 挖掘是可能的。各种商业云开采池也提供开采 Zcash 的合同。为了使用 CPU 执行单独挖掘,可以遵循以下步骤:

  1. The first step is to install prerequisites using the following command:

    ``` sudo apt-get install \ build-essential pkg-config libc6-dev m4 g++-multilib \ autoconf libtool ncurses-dev unzip git python \ zlib1g-dev wget bsdmainutils automake

    ```

    如果已经安装了必备组件,将显示一条消息,指示组件已经是最新版本。如果尚未安装或比最新的软件包旧,则安装将继续,所需的软件包将被下载,安装将完成。

  2. Next, run the commands to clone Zcash from git as shown in the following screenshot:

    ``` $ git clone https://github.com/zcash/zcash.git

    ```

    这个命令将在本地克隆 Zcash git 存储库。输出如下面的屏幕截图所示:

    Mining guide

  3. The next step is to download proving and verifying keys, by using the following command from the screenshot:

    Mining guide

  4. 一旦这个命令运行,它将下载大约 911 MBs 的密钥到~/.zcash-params/目录。该目录包含用于证明和验证密钥的文件:

    ``` drequinox@drequinox-OP7010:~/.zcash-params$ pwd /home/drequinox/.zcash-params drequinox@drequinox-OP7010:~/.zcash-params$ ls -ltr -rw-rw-r-- 1 drequinox drequinox 1449 Oct 24 16:46 sprout-
    verifying.key -rw-rw-r-- 1 drequinox drequinox 910173851 Oct 24 16:46 sprout-
    proving.key

    ```

  5. 一旦前面的命令成功完成,就可以使用下面的命令构建源代码:

    ``` ./zcutil/build.sh -j$(nproc)

    ```

这将产生非常长的输出;如果一切顺利,它将生成一个zcashd二进制文件。注意,这个命令以nproc作为参数,它基本上是一个查找系统中核心或处理器数量并显示该数量的命令。如果您没有这个命令,那么用您系统中的处理器数量替换nproc

构建完成后,下一步是配置 Zcash。这是通过在~/.zcash/目录中创建一个名为zcash.conf的配置文件来实现的。

示例配置文件如下所示:

addnode=mainnet.z.cash 
rpcuser=drequinox 
rpcpassword=xxxxxxoJNo4o5c+F6E+J4P2C1D5izlzIKPZJhTzdW5A= 
gen=1 
genproclimit=8 
equihashsolver=tromp 

前述配置支持各种功能。第一行添加 mainnet 节点并启用 mainnet 连接。rpcuserrpcpassword是 RPC 接口的用户名和密码。gen = 1用于启用采矿。genproclimit是可用于挖掘的处理器数量。最后一行实现了更快的挖掘求解器;如果您想使用标准 CPU 挖掘,这不是必需的。

现在可以使用以下命令启动 Zcash:

./zcashd --daemon

一旦启动,这将允许通过 Zcash-cli 命令行界面与 RPC 界面进行交互。这和比特币命令行界面差不多。一旦 Zcash 守护进程启动并运行,就可以运行各种命令来查询 Zcash 的不同属性。可以使用 CLI 或通过区块链浏览器在本地查看事务。Zcash 的区块链探索者可以在:https://explorer.zcha.in/买到。

地址生成

可以使用以下命令生成新的 Z 地址:

$:~/zcash/src$ ./zcash-cli z_getnewaddress
zcPDBKuuwHJ4gqT5Q59zAMXDHhFoihyTC1aLE5Kz4GwgUXfCBWG6SDr45SFLUsZhpcdvHt7nFmC3iQcn37rKBcVRa93DYrA

运行带有getinfo参数的 Zcash-cli 命令会产生如下屏幕截图所示的输出。它显示有价值的信息,如块,难度和平衡:

Address generation

显示 getinfo 输出的屏幕截图

可以使用以下命令生成新的 T 地址:

drequinox@drequinox-OP7010:~/zcash/src$ ./zcash-cli getnewaddress
t1XRCGMAw36yPVCcxDUrxv2csAAuGdS8Nny

GPU 挖掘

除了 CPU 挖掘,还有一个 GPU 挖掘选项。目前还没有官方的 GPU miner 然而,开源开发者已经产生了各种概念和工作矿工的证明。Zcash 公司举办了一场公开比赛,鼓励开发人员构建和提交 CPU 和 GPU 矿工。截至发稿时,还没有获奖作品公布。读者可以通过访问网站https://zcashminers.org/获得更多信息。

还有另一种挖掘:使用各种在线云挖掘提供商提供的云挖掘合同。云挖掘服务提供商代表客户执行挖掘。除了云采矿合同,矿工还可以使用自己的设备,通过使用 stratum 或其他协议的采矿池进行采矿。一个重要的例子是 Zcash 池。利用这个池子,矿工们可以出售他们的哈希值。在 Zcash 挖掘池上构建和使用 CPU 挖掘器的示例如下所示。

下载并编译 nheqminer

以下步骤可用于在 Ubuntu Linux 发行版上下载和编译nheqminer:

sudo apt-get install cmake build-essential libboost-all-dev
git clone https://github.com/nicehash/nheqminer.git
cd nheqminer/nheqminer
mkdir build
cd build
cmake ..
make

成功完成所有步骤后,可以使用以下命令运行 nhequminer:

./nhequminer -l eu -u <btc address> -t <number of threads>

适用于 Windows 的 Nhequminer 版本发布于:https://github.com/nicehash/nheqminer/releases

Nheqminer 有几个参数,比如位置(-l)、用户名(-u)和用于挖掘的线程数量(-t)。

Windows miner for Zcash 的运行示例如下所示:

Downloading and compiling nheqminer

利用 BTC 的地址收取销售 hash power 的费用

Downloading and compiling nheqminer

使用 Zcash T 地址接收出售散列功率的付款

这就完成了对 Zcash 的介绍;读者可以在网上探索更多关于 Zcash 的信息,因为它目前非常不稳定,事情可能会变化得非常快。有一点是肯定的;Zcash 的零知识证明是一项重大创新,为未来需要固有隐私的应用铺平了道路,如银行、医药或法律。

总结

在本章中,读者已经了解了加密货币的整体情况。已经详细讨论了几个 altcoins,特别是 Zcash 和 Namecoin。加密货币是一个非常活跃的研究领域,尤其是在可扩展性、隐私和安全方面。还进行了一些研究,以便发明新的难度重定向算法,从而挫败加密货币集中化的威胁。可以在隐私和特别是可伸缩性方面进行进一步的研究。读者现在应该能够理解代用币的概念及其背后的各种动机。一些实际的方面,如采矿和启动一个新的货币项目,也进行了讨论,希望这将给予读者一个强大的基础,使他们能够进一步探索这些领域。替代硬币是一个迷人的研究领域,为去中心化的未来开启了许多可能性。


我们一直在努力

apachecn/AiLearning

【布客】中文翻译组