64 浅谈矿池技术
本章讨论比特币矿池开采的工作原理,以及如何避免欺诈者成为矿池中的一部分但拒绝分享成果的问题。今天,矿池已经是比特币开采的最大贡献者。矿池不是由中本聪首先提出的概念。而是来自于后来发在论坛上的一个建议,当时随着比特币利益增长开采难度不断加大。比特币矿池最好的类比是同事共同出钱买彩票,中奖后分享奖金。
合作开采
slush发表,2010年11月27日,下午01:45:41
大家好,
由于bitcointalk几个月前被黑客攻击,所以我暂时失去了论坛的访问权。现在恢复了访问,但是由于更多其他的原因,我不打算继续在这篇帖子中提供对矿池的支持活动。主要是因为新手不能在这里发帖子,所以我无法提供全面的客户支持;在这一点上,我已经收到了很多抱怨。其次,在这个意大利面风格的论坛上 ,跟踪讨论非常困难。
前几天我们在http://support.bitcoin.cz启动了官方矿池支持活动标签系统。该支持系统也已与support@bitcoin.cz集成,所以如果需要尽快得到矿池管理员的授权,请回复邮件到support@bitcoin.cz。现在我们正在处理很多积压的电子邮件, 目标是24小时内回复。http://support.bitcoin.cz网站同时也是知识库,每天都有越 来越多的问题和回答添加上来。
我想邀请您也加入IRC聊天室#mining.bitcoin.cz,那里在线的人相当多,随时可以通过聊天提供给您各方面的基本帮助。
我将把这篇帖子留作非正式讨论,但我不太可能有时间参与这里的讨论了。 欢迎到http://mining.bitcoin.cz网站加入我们!
【编辑于2010.12.27:关于矿池开采的维基(Wiki)页面】
【编辑于2011.03.17:比特币铸币厂(DaCoinMinster)发布了油猴子(GreaseMonkey)脚本,修改了矿池网站。这是第三方工具,使用后果自己承担。】
什么是矿池开采?
矿池开采是一种多用户合作铸造比特币并且公平分享收益的方法。
为什么需要这么做?
比特币通常只是以一次50枚的方式生成,全部50枚都支付给一个人。此外, 争夺区块中50枚比特币奖励的竞赛非常激烈。
自己动手采矿可能需要很长时间才能获得回报。相反,矿池开采可以获得更小额、更频繁、更稳定的收益。如果您的电脑比较慢或者是一台CPU矿工,那么矿池开采可能是您能够铸造比特币的唯一方法。
如何开始?
去http://mining.bitcoin.cz并按照说明操作,只需要不到十分钟便可以开始在矿 池中开采。
原帖:
一旦人们开始使用配有GPU的计算机,对于其他人来说,挖矿就变得非常困难。我挖了好几个星期,一个区块也没找到(我用三个CPU挖矿)。当很多人使用缓慢的CPU并且单独挖矿时,他们互相之间就在竞争,并且还要对付GPU这样的坏蛋,因为每个人都在相同的范围内计算SHA-256哈希值。两个具有每秒100万 次哈希计算的独立CPU与一个具有每秒200万次哈希计算的机器完全不一样!但是 ,官方比特币客户端的一个叫“getwork”的新特性现在可以使许多计算机一起工作 ,所以它们之间并不竞争。因为现在有独立的CPU矿工(感谢jgarzik!),并且“ getwork”补丁现在已经在官方客户端里,所以我有个想法:
让可怜的CPU矿工们加入到一个群,增加找到区块的机会!
如何做呢?首先会有一个网页让您注册,输入钱包地址,取得URL和矿工个人CPU/GPU的用户名与密码(rpcuser/rpcpass-word)。当以用户名和密码启动自己的矿机时,服务器将把尚未分配给集群其他成员计算的工作发送给你。
但是当您的客户端找到获胜的哈希值时,您拿不到区块的完整奖励(现在是 50个比特币),只可以拿到与您的计算量比例等同的部分。如果您一天提供了100万次哈希/秒的算力,而整个集群的算力是2000万哈希/秒,并且花了两天才找到一个区块,那么属于您的奖励将是(50/20/2=) 1.25枚比特币。
优势在哪里?当使用独立的计算机时,您可能需要等待好几个星期,甚至几个月才能找到完整的50枚比特币奖励。当加入这样的集群,您会在每天或每周不断地收到少量的比特币(取决于整个集群的性能)。
它有什么缺点?您需要相信中心机构(我)不会为自己的利益而盗取区块。 但是我在这里瞎混了几个星期,被比特币的想法震惊了,所以我现在还不打算偷任何人。
另一个可能的问题是,有人会经常请求分配新的工作,但实际上并没有真正去计算哈希值。在这种情况下,他看似拥有强大的CPU,如果集群找到一个区块,他应该得到很大一部分的奖励。对付骗子有个很简单的防范办法:中心服务器有时会发送导向”获胜”哈希的工作。未将此哈希返回的工作端将被永久禁止(登录/密码和IP地址)。这是通过让矿工计算工作量证明来成功解决的。绝无可能不计算哈希而成为集群的一部分。
您感兴趣吗?
回复:合作开采
ribuck发表,2010年11月27日,下午10:21:02
引自:grondilu,2010年11月27日,下午10:21:27
我觉得合作开采是一项艰巨的任务,因为必须审查参与者的人品。知道如何阻止有人运行客户端的修改版,将产生的比特币只留给自己,同时从其他人那里接收比特币
唉!
要么就是我没说清楚为什么不可能作弊,要么就是我搞错了。但如果是我搞错了又没人提出具体的反对意见。所以我尝试再解释一遍,提出一个具体的设计 ,说明不诚实的客户端也无法作弊。
假如我在运营一组矿池服务器,并且我招募了一些希望参与的客户。
我的服务器会要求每个客户为此计算一些哈希值。每个客户要提交他们发现的高于某个特定难度阈值的哈希值。服务器选择的难度为当前“官方”难度的1/40 。
我的服务器得到了远程采矿客户端发回的候选哈希值消息流。时不时会有一个哈希值可以满足官方的难度要求,这样我的服务器就可以产生一个区块,并赚到50枚比特币。
然后,我将比特币分给远程采矿客户端,即为当前区块提交大于或等于1/40官方难度哈希值1枚比特币的比例分配。
长远来看,我希望我的服务器每产生50枚比特币就分出40枚比特币,虽然区块之间会有一些波动。但是这个方案并不要求客户端诚实,因为不诚实的客户端无法作弊!
客户端要计算的哈希值将为我的服务器产出50枚比特币。而同样这些哈希值对不诚实的客户端毫无用处。无法用在不诚实客户端以生成50枚比特币,因为需要一个不同的哈希值才能将生成的比特币支付给其他人。如果不诚实的客户端作弊,把产生的哈希值所生成的比特币支付给他们自己,那么他们提交的哈希值在我的服务器上无法通过验证,并且我也不会向他们分配任何利益。
因此,本方案完全不要求信任客户端。
本方案也不要求采矿的客户端相信服务器诚实。如果服务器宣称自己会为每个难度至少为官方难度的1/40的哈希支付1枚比特币,那么每个为生成的区块提交了“简单”哈希值的客户端都可以查看它们是否收到了比特币。任何欺诈行为都会 立刻现形。
回复:合作开采
中本聪发表,2010年11月28日,下午04:03:30
ribuck的描述完全正确。
矿池运营商可以修改他们的getwork以接入一个额外参数,即分红的接收地址 。
对于矿池运营商来说,最简单的方法就是等到发现下一个区块时,将其按比例分配为:用户达标次数/所有人总达标次数。
这对启动阶段来说更为容易而且安全。同时这还具有将同一用户的多次达标合并为一个交易的优点。很多达标次数通常来自于同一个人。
快速回报的方法是为每次达标按固定数额立刻支付,在找到区块之前,由运营商承担达标次数差异的风险。
不管用哪种方式,提交哈希值发现了区块的人都应该从总收入中多分一些, 比如10枚比特币。
新用户甚至不需要比特币软件。他们可以下载一个矿机,在Mt.Gox或者MyBitcoin上创建一个账户,把他们的存款地址输入到矿机并指向任何一台矿池服务器 。当矿机说它找到了,不久就会有一些比特币出现在他们的账号里。
矿机的作者最好确保矿机不出现误报达标的情况。用户会据此检查矿池运营商是否在作弊。如果矿机误报,用户查看账户后发现一毛钱都没有,矿池运营商就有麻烦了。