比特人-比特币第一中文社区

 找回密码
 立即注册(register)
12
返回列表 发新帖
楼主: ams

block size,至关比特币生死的一个问题,高手进

  [复制链接]
发表于 2013-5-12 01:32:12 | 显示全部楼层
2.采用现成的高速度处理并行方法,或者采用gpu来代替cpu的处理方法,大大提高处理速度。向挖矿学习。
发表于 2013-5-12 01:36:13 | 显示全部楼层
3.采用现成的云技术,直接把什么硬盘内存条都甩到云彩上面去,好像是比尔盖茨说的吧;以后的电脑,就是有640k存储器就够了?
发表于 2013-5-12 15:13:14 | 显示全部楼层
ams 发表于 2013-5-12 00:59
能提供更多详情或相关链接吗?我都急了官方还不紧不慢的。从增长的图表来看,数据块太大的问题,起码存在 ...

我也是听别人说的,好像是在biccointalk.org上面讨论的关于block size的问题,具体我没有看。事情好像是因为现在btc每10个种处理的交易量太有限,近一段时间,新人大量进入,btc可能不能及时处理越来越多的交易,然后开发小组一派认为,应该增加btc处理的能力,但是这样会增大blck size,另一派认为不应该增加,保持现状不变,交易时使用手续费竞争,谁付的手续费多,先处理谁的交易,后来还没听说有什么结果。

这上面都只是听说的,我对btc理解还不全面,会有不正确的地方,可以找高手问问
发表于 2013-5-12 17:37:44 | 显示全部楼层
ams 发表于 2013-5-12 00:59
能提供更多详情或相关链接吗?我都急了官方还不紧不慢的。从增长的图表来看,数据块太大的问题,起码存在 ...

你花几天搞定的东西估计就不是比特币了。任何改动后的bitcoin-qt产生的交易请求要有大多数矿工确认才能进入区块主链,你那代码生成的结果如果不被确认,只能是自己和自己交易,或一小群都承认新协议的人之间交易,不是比特币交易。你要是满足于群人交易,那就等于是发明了个自己的山寨币。山寨币这些日子一天能发行两个新的,确实不难,前些日子又人还用天朝的国号给自己的山寨币命名来着。要是你的办法好,追随的人多了,完全可以盖过bitcoin。不过活下来的山寨币没多少个。LTC和PPC都提出了自己的改进办法,但到目前为止还是初级阶段。

经常有人提出自己的解决方案,比如分成储备币和流通币  https://bitcointalk.org/index.php?topic=150301.0  , 把链分级 https://bitcointalk.org/index.php?topic=194471.0
几年前据说已经有我看解决的方法,但好几年了我们至今没看见问题的解决 ( 见这里的总结 http://bbs.btcman.com/forum.php? ... 69&fromuid=3655 )。要是修改比特币blockchain的方案不那么有效,现在看最有可能的如#14 icoin说的把比特币作为储备和储蓄货币。
 楼主| 发表于 2013-5-13 01:16:33 | 显示全部楼层
挖煤矿工 发表于 2013-5-12 15:13
我也是听别人说的,好像是在biccointalk.org上面讨论的关于block size的问题,具体我没有看。事情好像是 ...

我搜了些资料,又搞了篇帖子出来,http://bbs.btcman.com/forum.php?mod=viewthread&tid=2883

这个1mb上限不管增大还是缩小,都无法解决问题。还是得找替代的方法啊。
 楼主| 发表于 2013-5-13 03:20:39 | 显示全部楼层
bling 发表于 2013-5-12 17:37
你花几天搞定的东西估计就不是比特币了。任何改动后的bitcoin-qt产生的交易请求要有大多数矿工确认才能进 ...

如果基金会那帮人已经决定了用什么方法做,剩下的代码修改工作确实是几天能搞定的,就看那帮人现在究竟有没有个思路。

你的两个链接我没怎么看明白,尤其是bitcoin 1和bitcoin 2两个网络是怎么通信的。里面有提到bitcoin 2用colocation centers处理大量交易,这会有中心化问题。这里还有篇讨论很长的帖子,https://bitcointalk.org/index.php?topic=88208.0,帖子太长我懒得看,去年6月的贴了,到最后好像也没做出成果。想法很多,实现没看到,看来主要还是新协议如何融入旧协议的问题啊。
发表于 2013-5-13 16:16:36 | 显示全部楼层
大家记不记得,早期的迅雷等BT下载软件是可以看到一个值叫“健康度”的,只不过现在为了初级用户好用把这些专业术语都屏蔽掉了。
其实原理很简单,既然这个文件大家都要保存,只要每人随机的保存一部分,拼在一起可以拼成完整的,那健康度就是1,如果连最少的那一部分都至少有3个人保存,那健康度就是3。
那比方说未来块链总大小是10000T,这个数比楼主估的要大多了吧?如果分成100万份,则每份只有10G,每人随机保存十个块,这个100G的大小以届时的硬盘一定不为难。假设那时候在线使用人数有1000万人(这比QQ现在的在线人数都少了好多),则健康度高达100了(当然这是用抽屉原则简单的算的,正确的算法应该是用生日原理去计算概率)。就是说除非拥有某一特定块的一百多人恰好都下线了,才会使整个块链不完整。而以过去BT下载的经验告诉我们,对于频繁使用的文件,只要健康度大于3,就可以认为是永不会出问题的了。
 楼主| 发表于 2013-5-13 18:11:32 | 显示全部楼层
ru0chen 发表于 2013-5-13 16:16
大家记不记得,早期的迅雷等BT下载软件是可以看到一个值叫“健康度”的,只不过现在为了初级用户好用把这些 ...

你的意思和19楼的意思一样,我在23楼有回复
发表于 2013-5-13 18:45:57 | 显示全部楼层
当然,讨论到这个问题,可以讨论一下地球的极限可以容纳最多多少人? 人类还可以在地球上生存多长时间,从中可以推断出Bitcoin Block Chain Size不会超过某一极限。

地球上的一个全球性灾难也许可以比特币。

你可以预测一下2TB硬盘可以让Block chain增长多长时间,10年还是20年? 当然这与比特币的接受程度有关。

你可以预测一下未来10年网速会有多快?

BTC还有一个威胁是没有网络,当然这个威胁在全球范围内出现的可能性非常小。
发表于 2013-8-24 21:39:56 | 显示全部楼层
hy1hy2 发表于 2013-5-12 01:29
其实楼主的担心根本没有必要,不要说用我们一般人不懂的高深的结构升级技术了,即使采用我们现在人所共知现 ...

层主,如果这么做的话,压缩、解压缩消耗的时间会让你崩溃的。
发表于 2013-8-25 11:42:26 | 显示全部楼层
本帖最后由 cross1943 于 2013-8-25 11:48 编辑
ams 发表于 2013-5-11 03:37
前面有人提道的MultiBit,也是解决方案之一。hy1hy2提到的零钱放MultiBit的想法不错。MultiBit和electrum的 ...

经过代码级别的确认,MultiBit的数据不是由服务器提供的,是由P2P节点提供的。
我已经根据MultiBit编写了一个轻量级别的客户端(非成品),支持BTC/LTC/XX TC等任意同协议的客户端。
不管MultiBit也好,Bitcoin for android也好,都是从P2P节点上获取数据的,(注,他们用的是同一个核心引擎,叫BitcoinJ),只不过都是只从指定时间开始,获取数据,并只在硬盘或SD卡上保存只跟自己有关系的tx,与block header。

关于获取数据的时候,现在只有一种优化方案,
从指定时间为标准,开始获取blockchain,中途中哪怕是不关于自己的block,也需要遍历一遍,所以网络负荷这块没办法,该下载还是得全部下载。只是不保存不关于自己的交易+header。
至于时间是有技巧的,一,从本地钱包创建时为标准, 二,是上一个月或前几个月为标准,三,在线查询导入的地址的交易时间为标准,
可以尝试下把MultiBit的blockchain指定日期的清除数据,这样你会发现,同步时也要很久的。。
发表于 2013-8-25 12:18:25 | 显示全部楼层
层主,如果这么做的话,压缩、解压缩消耗的时间会让你崩溃的。
==============
层主,
1.比特币并不是一个需要高速度即时处理的系统,你着急着抢江山去吗?何况你现在司空见惯去网下网上银行汇款收款等行为,比压缩、解压缩消耗的时间短?会让你崩溃吗?何况越来越贵的比特币大宗交易,消耗一些时间是可以接受的,有时候对于安全性甚至是必要的。

2.小额交易或者你不害怕大宗冒险安全性,你也同时可以选择即时的网上钱包项目。

3.目前高新的压缩、解压技术,以及以后更加发展压缩、解压明天技术,你想崩溃都困难。
 楼主| 发表于 2013-8-25 19:50:54 | 显示全部楼层
cross1943 发表于 2013-8-25 11:42
经过代码级别的确认,MultiBit的数据不是由服务器提供的,是由P2P节点提供的。
我已经根据MultiBit编写了 ...

官方0.8版加入了Bloom filter功能,后来MultiBit也加入了这个功能,所以是从p2p获取数据了。官方0.8版bitcoin客户端之前发布的MultiBit,很可能是从服务器获取数据。Bloom filter我曾在http://bbs.btcman.com/forum.php? ... tid=3014&page=2的29、30楼提到。
发表于 2013-8-25 23:37:11 | 显示全部楼层
本帖最后由 cross1943 于 2013-8-26 10:10 编辑
ams 发表于 2013-8-25 19:50
官方0.8版加入了Bloom filter功能,后来MultiBit也加入了这个功能,所以是从p2p获取数据了。官方0.8版bit ...

MultiBit在0.8之前就一直存在的。核心没大变动过(开源的)。 与bloom filter无关

还有,就算Bloom Filter的支持,还是需要遍历所有block chain(header chain)的,只是由原来的下载过来后再做filter流程,变成了远程直接做完单个block的filter操作,然后再发送filter后的block tx list.....

可以看下我的小工具的代码,https://github.com/laybor/coin_looker  就是P2P节点上获取数据的。
(注,0.8已经取消IRC入口获取节点的方式,现在是通过解析N个域名的所有IP,获取部分入口节点的方法)
工具里的代码是采用遍历所有block header chain,然后拆出来,只保存相关的tx和header..
对于bloom filter暂时还未加入支持,因为有很多coin客户端不支持bloom...(写这个的原因就是为了给LTC做一个轻量级的钱包)




 楼主| 发表于 2013-8-26 16:02:49 | 显示全部楼层
本帖最后由 ams 于 2013-8-26 16:24 编辑

只遍历数据块头信息,你如何知道某个地址的余额,即某个地址曾出现在哪些block中?我认为显示钱包余额,本地必须有完整的blockchain,或者是轻量级节点发送本地钱包中的100+个地址到支持Bloom filter的重量级节点,由重量级节点遍历完整的blockchin。那个下载block头信息,用Merkle tree校验的方式,我以前查过,好像是用于检查数据有效性的,无法用于查找钱包余额。

bitcoinj的wiki的最后一段(Proving inclusion in a block without the full block body)提到两种方式,前者不是真正的轻量级,后者的Bloom filter方式是真正的轻量级。
To find transactions relevant to your wallet, we have two options. We can download the full block contents and scan all transactions. This is inefficient - much data is downloaded only to be thrown away. Or, we can request transactions that match a pattern from remote nodes. We do this using Bloom filters when the remote node supports them (v0.8 and up).

multibit的更新记录https://multibit.org/releases-early.html显示multibit从2月12号发布的0.5.8beta加入Bloom filter功能,来自于其内核Bitcoinj 0.7版加入的Bloom filter功能,Bitcoinj 0.7之所以能加入Bloom filter,来自官方0.8版对比特币网络协议的升级,使得0.8以上的客户端支持Bloom filter功能,从此重量级客户端支持帮助轻量级客户端遍历blockchain,查找钱包余额。0.8版的更新日志有提到:
"Bloom filter" support in the network protocol for sending only relevant transactions to lightweight clients.

Bitcoinj 0.7版之前的轻量级软件,是否需要下完所有数据块,我很怀疑。如果没有下载数据块的过程,则无法在本地完成遍历,那么旧版MultiBit的遍历,可能是客户端向MultiBit服务器请求,服务器完成对钱包的遍历,这就有中心化的弊端。如果去掉服务器,则必须下载所有数据块,这就不是完全的轻量级。Bloom filter同时减去了硬盘和网络的负担,是完全的轻量级。
发表于 2013-8-26 20:49:03 | 显示全部楼层
本帖最后由 cross1943 于 2013-8-26 21:00 编辑
ams 发表于 2013-8-26 16:02
只遍历数据块头信息,你如何知道某个地址的余额,即某个地址曾出现在哪些block中?我认为显示钱包余额,本 ...

我没说只通过header就查询余额。而是header里的time来进行优化。
简单说吧。老版本的是轻量级是指,通过block时间来进行下载选择优化,通过本地的filter来进行硬盘优化。
但是一样需要遍历N多block(甚至是全部的block),当然,遍历不代表就全部是完整下载。。。
而0.8的bloom filter是filter操作直接托管给远程节点,让目标节点直接完成filter,不用下载完整的block,减轻单块block的传输量。
但依旧还不是更加轻量级别的,达到直接从节点上,获取收款地址的所有交易记录关联的block..
multibit一直是轻量级别的,但是这个轻量级是一定程度上的,他所采用的方法一直没变过,一直是P2P节点模式的,老版本在对于网络传输这块,并无力多优化,仅仅是在起始block上进行智能选择 。至于新版加入的bloom filter来说,个人感觉速度提升并不够高(我现在用的就是最新版的)。
最后,不要太推崇bloom filter,有一定的误判几率,至于误判是多出无关交易记录,还是漏掉相关交易,这就无从考证了。而且,对于一些复杂的script也是比较蛋疼的。

 楼主| 发表于 2013-8-26 21:10:10 | 显示全部楼层
cross1943 发表于 2013-8-26 20:49
我没说只通过header就查询余额。而是header里的time来进行优化。
简单说吧。老版本的是轻量级是指,通过bl ...

你说“一,从本地钱包创建时为标准, 二,是上一个月或前几个月为标准,三,在线查询导入的地址的交易时间为标准”

我查了下https://en.bitcoin.it/wiki/Wallet,里边说
The original Bitcoin client wallet file is named wallet.dat and contains[1]:
  • keypairs for each of your addresses
  • transactions done from/to your addresses
  • user preferences
  • default key
  • reserve keys
  • accounts
  • a version number
  • Key pool
  • Since 0.3.21: information about the current best chain, to be able to rescan automatically when restoring from a backup.


从这段文字看,wallet.dat里似乎没有存储钱包的创建时间,操作系统记录的文件创建时间可以修改,所以如果使用硬盘存储的wallet.dat创建时间,有时不可靠。若以你说的第二种,上一个月或前几个月为标准,则没有完全遍历,所以无法显示正确余额。第三种方式涉及中心化。上面的wiki提到“transactions done from/to your addresses”,我怀疑这里存有每条交易的时间,或许存有发生过的交易所在的block编号,如果这样,你说的第一种方法,从本地钱包创建时为标准,就可以实现。另外我怀疑上面说的“Since 0.3.21: information about the current best chain......”,可能也与优化遍历有关。
发表于 2013-8-26 22:42:18 | 显示全部楼层
就目前看比特币仍然最有可能成为一种投资品,而非直接用来购物,都是大笔资金进出,用户大多数情况下是和交易所打交道,而交易所里的真实交易都是在后台互相冲销的,真实的转账非常少。此外小额交易大家也还是会用现金,更加简便

据我观察,目前绝大多数的交易是矿池给矿工的利润分发,真正用于商业使用的数量还不多,很多人都是买入后长期持有。 这有点象房产等固定资产投资,10年里也不过交易一两次,大多数时候都是抵押了去融资现金来花,相信不久以比特币为抵押的融资服务就会发展起来。理论上来说比特币就和网络一样,永远不会消亡,比国家和政府寿命都长,任何单一国家或政府都无法影响其流通,应该是全球信用评级的最高级,以比特币来融资应该风险基本为0
发表于 2013-8-27 02:00:12 | 显示全部楼层
Vatten 发表于 2013-8-26 22:42
就目前看比特币仍然最有可能成为一种投资品,而非直接用来购物,都是大笔资金进出,用户大多数情况下是和交 ...

一半左右是 satoshidice
发表于 2013-8-27 11:52:51 | 显示全部楼层
ams 发表于 2013-8-26 21:10
你说“一,从本地钱包创建时为标准, 二,是上一个月或前几个月为标准,三,在线查询导入的地址的交易时 ...

block header里有时间。
有通讯协议可以直接获取block hash list(only hash)....再根据时间换算就可以估算出来最近的个block应该是哪个了。

struct CBlockHeader
{
        int nVersion;
        uint256 hashPrevBlock;
        uint256 hashMerkleRoot;
        unsigned int nTime;
        unsigned int nBits;
        unsigned int nNonce;
};
 楼主| 发表于 2013-8-27 15:08:31 | 显示全部楼层
cross1943 发表于 2013-8-27 11:52
block header里有时间。
有通讯协议可以直接获取block hash list(only hash)....再根据时间换算就可以估 ...

按你前面说的优化下载block方案,需要有本地钱包的创建时间,不是block header里记载的block创建时间。若没有钱包中各个地址的首次交易时间,就无法优化block的下载数量,从而无法显示钱包余额。刚才我把官方客户端的工作目录修改,使其没有本地blockchain,然后把一个wallet.dat文件复制过去,发现启动软件后,交易记录里依然显示有钱包发生过的所有交易,所以wallet.dat记录了钱包过去发生的每条交易的时间,不过这个记录应该可以修改,比如人为删掉一些发生过的交易。如果本地没有blockchain,轻量级客户端直接相信wallet.dat里记录的交易,显示的余额可能不正确。
发表于 2013-8-27 17:05:50 | 显示全部楼层
本帖最后由 cross1943 于 2013-8-27 17:39 编辑
ams 发表于 2013-8-27 15:08
按你前面说的优化下载block方案,需要有本地钱包的创建时间,不是block header里记载的block创建时间。若 ...

计算机时间还是是可信的,哪怕出错了,也可以通过节点获取对方GMT时间来效验(在"version"指令中有时间字段)
tx上是没有交易时间字段的(nLockTime并不是),实际时间是可取的时间是block header上的,而且,只有时间段(10分钟的时间段)。
在blockchain.info上看到的是接收时间,而不是交易时间,接收时间是由blockchain所使用的节点,收到交易广播的时间。
轻量级客户端直接相信wallet.dat里记录的交易,显示的余额可能不正确
这句话意思是对的,我的multibit通过一些手法操作后,就是如此,我的余额显示不准确了。
不过需要说明的是,multibit用的是自己格式的xxx.wallet(可随意位置),不需要%appdata%\bitcoin\wallet.dat
但是,最主要的是,优化本身就是对于一些普通用户而言,对于普通操作根本不会出现这种情况。
获取收款地址的首次交易时间,现在暂时没有很准确和好的方案,只有估算。给的block下载方案就是其模式。
那三种,就是常见用户的时间选择方式。
比特币的常用操作中,并不推荐直接进行密钥操作,比如密钥导入。
对于普通用户来说,要把btc从官方客户端,导入到multibit或者安卓btc钱包里,更加推荐的方式是,发送BTC到其软件或设备生成的地址上。
在如此操作模式下,根本无需下载使用软件或设备之前的,二十多万个BLOCK。。
发表于 2013-8-27 17:53:59 | 显示全部楼层
本帖最后由 cross1943 于 2013-8-27 18:10 编辑

其实根据我的设想。
以后的比特币网络是这样的。
大量的平民,不会技术的人,使用的是轻量级的钱包。他们不需要保存完整的block,也不需要下载完整的block。只需要拿着手机,即可对BTC进行收款与发钱。
而他们软件或设备内部实现的技术细节,高达85%的可能,是由第三方支付公司、储蓄公司来做中介,实现即时支付(政策安全)
对于其他直接使用比特币网络的轻量软件或设备,他们获取数据或发送数据时,与其相连的是挖矿节点,或者其他超级节点来进行数据交互。
现在的节点只负责交易数据打包,但还未提供公共设备服务而已。
比如,任何人,可通过这些节点,获取一些有利操作的信息。
那么,他们的盈利所得,就更加让人信服了。
手续费给得不冤枉(发现聪哥厉害,这么早就想到这点了,深深的隐瞒起来了)
跟使用第三方支付是有异曲同工之妙。

以P2POOL为例。他的工作中,需要先下载完完整的blockchain,才能开始工作。
对于矿池,本身也是一个客户端节点。只是外部不公开而已。
这些节点通过CPU竞争算力,维持了BTC的51%风险;
在网络业务上,既提供交易请求打包,又能提供交易信息查询,地址信息查询,真正意义上的维持了BTC的交易网络。

虽然后者,现在的BTC模型构架上还未实现(客户端实现不难,难的是构架上进行强制性的绑定,通过改客户端代码也无法禁止此公共服务功能,我所能想到的是挖矿加权模型,不过弄起来似乎很麻烦)


 楼主| 发表于 2013-8-27 20:26:40 | 显示全部楼层
cross1943 发表于 2013-8-27 17:53
其实根据我的设想。
以后的比特币网络是这样的。
大量的平民,不会技术的人,使用的是轻量级的钱包。他们不 ...

bloom filter已经实现交易查询,把这类消耗cpu网络硬盘的功能丢给矿工,有利也有弊。如果矿工使用bloom filter,你说的误判问题会继续存在,若使用别的协议,这样的升级可能造成网络分叉。另外就是中心化问题,把bloom filter及其他数据操作全丢给矿工,对矿工的网络cpu硬盘都会有要求,提高了挖矿入门门槛,可能只有大矿工才能挖矿了,这会造成中心化问题。bloom filter把资源消耗平摊到所有重量级客户端节点,去中心化做的更好,但对重量级客户端不公(消耗cpu网络硬盘而没有回报)。

本版积分规则

小黑屋|Archiver|手机版|比特人-比特币第一中文社区

GMT+8, 2019-9-23 09:01 , Processed in 0.020398 second(s), 13 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表