conflux链上重复打包的交易是否很多?

我理解conflux是不丢弃任何区块,如果一个区块的父区块在N个epoch之前,而且这个区块里的交易都已经被其他上链的区块包括,那么这个区块依然会上链到最新的epoch。矿工依然会被奖励

这样虽然对账户安全没啥影响,但是对打包效率可能有副作用。

比如矿工A, 开了10个线程打空包,直到成功,然后成功一个广播一个,然后被其他矿工承认,得到奖励。但是这种行为本身对区块链安全没有任何好处。 或者矿工B在已经收到N个区块的情况下,明知道自己打包中的区块内交易全部重复了,也不愿意停下来,因为这样会损失他之前的hash碰撞,硬是继续碰撞出结果完成打包,广播从而得到奖励。

不知道我的这个理解是否正确?

如果正确,conflux的共识算法对这种情况一点措施都没有吗? 我能想到的是如果一个区块里60%的交易是已经被打包的,那么这个区块得不到奖励。这样可以鼓励矿工尽量打包新交易,提高确认速度,而不是为了奖励,只要开始打包就绝不停下。

谢谢!

我觉得这里需要解释几点。

首先,交易被重复打包时,交易费是只在同 epoch 进行分配的。不管我的父区块离当前 epoch 有多远,只要我所在的 epoch 是首次打包这笔交易的,就可以分钱。如果这个交易已经被其他上链区块包括,那么高概率我的 epoch 比他们靠后,我是拿不到交易费的。

第二,“损失之前的hash碰撞”是不正确的理解。hash 碰撞可以简单 model 成一个 stateless 的模型。无论你在同一个区块上失败了多少次,下一次尝试的成功率是一样的。那么当我收到新的区块后,切换到新的区块去挖矿,是不会损失装出结果概率的。

那么我们来看看两类矿工。

对矿工 A 来说,它打空包拿不到任何交易费。对区块链安全是有帮助的(因为它增加了诚实分支的区块数量)。但是如果大家都打空包,区块链安全是安全,但是在空转。所以用交易费激励它打包交易。

对矿工 B 来说,承认新收到的 N 个区块,唯一的损失是这 N 个区块打过包的交易拿不到交易费了,但他可以通过打包新交易获得交易费。而在挖出下一个区块的概率上没有损失。如果不承认新收到的 N 个区块,挖出的区块在 epoch 上是落后的(除非使用更多算力、更复杂的攻击策略),同样拿不到交易费,还会受到更多的 “anti-cone penalty.” 整体而言,接受新区块并且打包时有利的。

感谢回复。我这里的奖励指的是区块奖励(目前是2CFX/块),不是用户的手续费。因为用户的手续费非常低,是drip(10^-18)级别的,跟区块奖励完全没法比。所以,矿工A和B是不在意手续费的。他们只在意是否可以快速大量的取得区块奖励。

我不太同意。比如随机数范围20亿,我现在已经碰撞了10亿没结果,那我就知道剩下10亿肯定有结果出来。但是我如果挖新快,我面对的又是20亿,肯定是继续挖原来的对我最有利。

手续费激励矿工把交易加到区块里,这个我同意。但是,矿工A看不上那总和只是drip(10^-18)级别的手续费。他要的是2 CFX/块,区块奖励。所以,多开线程,多打空包,对他是有利的。你觉得呢?

关于区块奖励和手续费如上, 关于hash碰撞概率损失如上。我认为对于矿工B,还是继续打老包对他更有利。

期待回复,谢谢!

既然区块内的每笔交易都要判断是否是第一次打包,那么判断包中新交易应该是顺带的事情。上面这个漏洞可以用新交易必须占比61.8%以上,才给区块奖励规避。这样既保证了效率,又解决了上面的CASE。

打空包这个可以规定父节点必须是49个epoch之内的(确认时间30S*1.618),才能给2 CFX/块区块奖励。规避矿工A的CASE, 不能让他逮住几个远古父节点往死的薅。另外,就像你说的,交易手续费会促使矿工更有动力接交易进来,也会降低打空包的动力。

另外,比特币是10分钟出块,14天调整一次难度。按照比例算,conflux是0.5s出块,16.8分钟应该调整一次难度。 如果在这16.8分钟内,矿工A和B出了很多块(矿工A/B都开多线程并发整),应该会提高下个16.8分钟的难度系数吧。这会降低conflux网络中诚实节点的出块率,从而降低有效TPS.

这个理解是否正确?谢谢!

这样,我们抛开交易费,先聊一聊挖区块的事情。

首先,你需要更准确地理解挖矿过程的概率模型。假设现在区块难度是 1T hash,也就是 1 万亿次哈希计算能挖出一个块,现在你对着同一个区块算了 999,999,999,999 次,都没有成功,那么剩下一次就一定成功吗?不一定。因为你每一次算哈希,结果都是随机的。1T 的区块难度的含义是平均 1T 次尝试有一次成功,不保证 1T 次尝试一定成功一次。就像你扔一个骰子,你连续四次没有扔出 6,剩下两次一定能扔出 6 吗?所以,切换到新区块去挖并不会影响挖出区块的概率。

第二,多开线程挖矿和打空包没有必然联系。如果你写一个最简单的 PoW 区块链系统,你的实现应当是一个线程负责区块打包,其他很多个线程负责算哈希。每次需要挖的区块更新,负责区块打包的线程会将哈希值提交给所有挖矿的线程。这样,我即使不打空包,也可以实现线程多开的挖矿。而 GPU 挖矿,就是多开 GPU 的线程挖矿。

明白你说的了。 但是如果矿工不在乎新交易的手续费,只想挣区块奖励费2CFX/块。那他也有足够的动机去继续挖啊,因为挖出来肯定会被conflux主网承认。换新块并不会让他挖的更快,也就多点手续费,不过很少他不在乎啊。更极端一点,恶意矿工就是不打包新交易,因为交易费没几个钱,只要给2CFX/块就行了,那么conflux目前是对这种情况没有任何限制是吗?

但是开一个线程就有一份系统资源被占用,我把打包线程去掉,只打空包,系统所有算力CPU+GPU都用来hash碰撞不是更有利于矿工吗? conflux是承认所有包的。所以矿工马力全开把所有算力100%都用于hash碰撞是最符合矿工利益的。

如果我理解没问题的话,现在conflux应该没有对高重复率交易包和空包有任何限制,这似乎是个隐患啊。随着conflux越来越流行,肯定有矿工改写挖矿程序,奔着2CFX/块去。

打空包似乎可以通过降低区块奖励来抑制这种动机。 比如2 * 0.382 = 0.764个/块 给空包块。这样,如果行情低迷,没多少人交易,还可以降低造币速度,调节价格。

继续挖老块会有 anti-cone 的惩罚,实际收入会低于 2CFX, 直到降到 0,所以为什么还要挖老块呢。

在 CPU 线程的问题上,事实上是当 GPU 设备成为挖矿社区主流以后,CPU 挖矿失去竞争优势。CPU 挖矿的收益极低,甚至无法承担 CPU 运行期间的电费。所以负责区块打包的 CPU 资源和负责挖矿的 GPU 资源是不构成冲突的。

OK, 这个anti-cone的惩罚机制确实能解决了。是个很优雅的方案。

https://www.qianba.com/news/p-416746.html