以太在分散的金融生态系统中用作抵押品
继续扩大。然而,stablecoins(数字)的使用量上升
主要与美元挂钩的货币)和比特币作为以太坊的抵押品,
可能会挑战以太作为生态系统首选抵押品的地位。
WBTC是以太坊上比特币的一个合成版本,它使比特币能够
通过以太坊网络传输。USDT和USDC是美国最大的
以太坊上的美元停车场。下表显示了WBTC的增长,
USDC和USDT。而以太坊替代资产的增长
挑战以太作为抵押品的使用,以太坊作为
定居点网络是一个积极的趋势
以太如金钱
以太是支撑新兴分散化金融体系的本土资产。
它被用作借贷的信托担保品,是主要的
构建在以太坊之上的应用程序的资金来源。在撰写本文时
大约有700万以太被锁定为
以太坊网络,以目前的价格计算价值超过90亿美元。
在许多方面,以太像是以太坊上的新时代数字货币
网络。每当用户在以太坊网络上部署智能合约时,
为应用程序提供流动性,或在分散的
交换,以太是必要的支付网络费用。
尽管比特币社区主张货币应该固定供应,
以太坊的目标是发行必要的最低金额,以充分保障
网络随着时间的推移。虽然供应是比特币的主要焦点,
以太坊应用程序的实用性推动了以太作为货币的使用
网络。对于以太,这个实用程序驱动它作为以太坊的货币商品使用
网络。
如果投资者真的认为ETH是货币,那么就值得探讨它的相对价值
对其他金钱竞争者。以目前的价格,是它抢占市场份额的能力
来自竞争对手的合理定价
自2015年推出以来,以太坊作为
自2015年推出以来,以太坊作为
第二大区块链网络。但即使网络已经成熟到
为数十亿美元的点对点价值转移提供强大的结算层,
投资者往往发现很难确定投资案例。
退一步来考虑比特币的价值主张是很有帮助的
全球可核查会计系统的承诺。这个会计制度,
由世界上最强大的计算网络支持和保护,
允许用户高度自信地跟踪价值。
以太坊同样有助于验证,但有更广泛的逻辑和功能
信息。换句话说,以太坊强大的网络确保
应用程序根据编码的逻辑运行,而不需要
对于第三方或无干扰的可能性。以太坊创造了一个
信任环境,这在历史上是繁荣贸易的先决条件。
这是否意味着以太坊比比特币更好?不一定-他们
沿着不同的边界进行专业化并做出相应的权衡。比特币
是强硬和相对不灵活的,灌输信心,其会计
系统不会随意改变。以太坊适应能力强,灵活性强
创新和迭代的环境。以太坊和比特币
一种共生关系,从市场中获取流动性、思想份额和价值
比特币核心代码库中的验证在概念上涵盖了什么?
验证(.h和.cpp)在比特币核心代码库的概念上涵盖了什么?
这个问题是拉里·鲁恩在2021年5月12日的比特币核心公关评审俱乐部上提出的,当时他正在讨论卡尔·董的公关去全球化
比特币核心开发
验证
c级++
分享
改进这个问题
跟随
5月13日9:31问
迈克尔·福克森
582077银牌2222铜牌
添加评论
1个答案
1
约翰·纽伯里在比特币核心公关评论俱乐部会议上回答了这个问题。
概念验证存储并维护区块链和相关UTXO集的最佳视图。它还包括一个向mempool提交未确认事务的接口。
此外,James O’Beirne在Bitcoin Edge Dev++上发表的关于比特币核心架构的演讲中的幻灯片指出:
验证处理根据某些接受规则修改chainstate和transactions(mempool)的内存中数据结构。
它定义了其中一些数据结构(CChainState、mapBlockIndex)以及验证它们的过程,例如CheckBlock()。
奇怪的是,它还包含一些用于将数据编组到磁盘和从磁盘编组数据的实用程序函数,例如ReadBlockFromDisk()、FlushStateToDisk()、{Dump,Load}Mempool()。这可能是因为验证{h,cpp}是将main{h,cpp}重构成更小的片段的结果。
下面是James演示中的一个图表,显示了验证如何与代码库的其他区域相关联。
缓存比特币数据目录以提高性能?增加比特币数据库缓存大小?
比特币是非常密集的磁盘,这减慢了它。它似乎经常将数据刷新到磁盘,从而阻止了正确的缓存。使用RAMdisk上的datadir,速度要快得多。
是否可以增加数据库缓存大小或执行其他操作来提高缓存性能。
当然,保存钱包和重要数据会很好,但我不介意区块链被大量缓存。
我问的主要是Windows操作系统。
数据库
隐藏物
分享
改进这个问题
跟随
两小时前编辑的
迈克尔·福克森
582077银牌2222铜牌
2012年2月22日17:57问
克米特
194911金徽章1515银徽章2626铜徽章
你问的不太清楚。非常密集的磁盘什么时候?启动期间?下载区块链时?处理GUI请求时?操作系统应该已经在缓存所有磁盘数据,它可以容纳在内存中David Schwartz 2012年2月23日10:32
一个getnewaddress花了20秒左右。。。我减少了虚拟内存,并将缓存设置更改为“服务器”-不确定它是否做了什么,但它现在快多了。将结束问题克米特2012年2月24日19:32
1
这很可能是因为您将它设置为在用完时创建几百个地址。之后没多久,因为它给了你它预先生成的地址大卫·施瓦茨2012年2月24日22:42
嗯,我至少测试了五次,而且总是花很长时间克米特3月8日12点16分29秒
添加评论
3个答案
7
最近发布的bitcoin v0.6.0修改了bdb缓存设置(默认为25兆字节),并提供了一种通过命令行选项-dbcache=N来更改此设置的方法,其中N是以兆字节为单位的数字。
这一变化确实大大加快了区块链的同步速度。
分享
改进这个答案
跟随
将分配给缓存的MB数设置为大于机器RAM的MB数是否可以进一步提高同步速度?例如,在我只有2GB内存的笔记本电脑上,将缓存设置为2500MB(而不是2000MB)会提高同步速度吗杰兹布尔兹óska 1月14日15:45
2
@杰兹布尔兹ó斯卡,这是个很坏的主意。您可以将其设置得更高,但此时您的系统可能会耗尽内存并杀死某些东西,或者它将开始使用交换空间,这将导致比仅使用较小的缓存慢得多的速度皮尔维尔1月14日17:49
添加评论
2
比特币(通过BerkleyDB)经常将写入光盘的内容刷新到wallet.dat和区块链数据库中的主交易完整性。操作系统可以正常缓存整个区块链,
我已经多次重启比特币,并让它立即启动,因为整个区块链已经被操作系统缓存。
分享
改进这个答案
跟随
2012年3月30日11:07答复
暗黑破坏神-D3
40322银牌88铜牌
添加评论
0
记录在案:
文件数据库配置:
设置目录数据库
设置\u lk \u max \u锁120000
设置缓存大小2 524288000 1
–>2.5GB缓存
http://docs.oracle.com/cd/E17076_02/html/api_reference/C/set_cachesize_parameter.html
对于版本更高的v0.6版,Pieter的方法肯定更好。这对于旧版本仍然有用。
不幸的是,我不能让它与Namecoin 3.50一起工作
分享
改进这个答案
跟随
于2013年5月19日16:42编辑
区块链世界是最公平的世界
当缓存中的UTXO已满时,使用什么策略将缓存中的一个UTXO替换为另一个UTXO?
UTXO集存储在磁盘上,但一些UTXO也存储在缓存中。验证事务时,需要查询事务输入所指向的UTXO。首先,你去缓存找到它,如果找不到,你需要去磁盘找到UTXO。由于levelDB的特性,需要将磁盘上搜索到的UTXO写入缓存。如果此时缓存已满,那么节点如何在缓存中为刚刚找到的UTXO腾出空间?
交易验证
utxo公司
级别DB
utxo集合
隐藏物
分享
改进这个问题
跟随
两小时前编辑的
迈克尔·福克森
582077银牌2222铜牌
12月29日13:15问
戈涅夫
10377青铜徽章
添加评论
1个答案
4
UTXO集缓存不是固定大小,限制也不是硬限制。可以将新条目添加到缓存中,而不考虑最大缓存大小。事实上,缓存对象本身甚至不知道限制是什么。
相反,所发生的是缓存定期刷新。由于UTXO集仅在块验证期间更改(mempool UTXO集在其他地方单独处理),因此此定期刷新主要与传入块相关联,而不是与计时器相关联。验证每个块之后,节点确定是否应该将缓存刷新到磁盘。有几种情况会导致刷新,包括接近缓存限制和超过缓存限制。
因此,如果在验证一个块的过程中,缓存变满了,它实际上会一直增长,直到该块被完全验证。最后,整个缓存将被刷新到磁盘,缓存将被清空。
请注意,LevelDB本身有一个独立于UTXO集缓存的缓存。
分享
改进这个答案
跟随
回复时间:12月29日19:20
麻吉弟弟周立铭♦
52.9k44金徽章5555银徽章108108铜徽章
谢谢,我明白了。但我还有一个问题,节点是否每次都将整个缓存刷新到磁盘上?或者节点可以将缓存的一部分刷新到磁盘上?节点能否决定冲水间隔GoneV 20年12月30日6:41
也许我上面说的不太清楚。我的意思是,节点每次都会将整个缓存刷新到磁盘,或者只刷新刚刚验证的块中的UTXOsGoneV 20年12月30日6:56
1
整个缓存都会被刷新,但是会进行一些优化,以避免将不必要的项写入磁盘。例如,如果创建了一个UTXO并在两次刷新之间使用,则该UTXO永远不会写入磁盘麻吉弟弟周立铭♦ 20年12月30日18:37
mempool UTXO集是什么?在验证新事务时,节点查询哪个缓存?–GoneV 3月12日0:45
节点可以缓存的孤立事务数是否有限制?
我´我问这个问题是因为一个可能的攻击将发送大量的孤立事务,这些事务永远不会被赎回。然后客户端将不得不缓存它们,从而增加存储需求并减少查找时间。这可能导致资源耗尽攻击。
如果对缓存的大小有限制,则可以安装DoS以耗尽该限制。在这两种情况下,都可以发起拒绝服务攻击。
如果没有保护,则为每个事务添加工作证明将有助于防止此类攻击。
交易
隐藏物
分享
改进这个问题
跟随
两小时前编辑的
迈克尔·福克森
582077银牌2222铜牌
2月10日12:06问
SDL公司
53911金徽章33银徽章88铜徽章
你指的是什么缓存开膛手234 2012年2月10日13:02
1
我去了比特币源代码以供参考。请参见main.cpp:mapornTransactions。事务由AddOrphanTx()添加。可以插入mapOrphanTransactions的孤立事务数没有限制。因此,问题是:DoS攻击可能吗SDL 2012年2月10日13:25
mapornTransactionsByPrev也可能受到攻击,但c++映射查找是O(N logN)这一事实可能会阻止攻击的有效性SDL 2012年2月10日13:49
虽然它是O(N log N),但是您可以用发送大量trx的DDoS攻击来填充计算机内存。我错过什么了吗?–usr本地-ΕΨΗΕΛΩΝ 2012年2月10日15:29
@SDL“c++映射查找是O(N logN)”。我觉得很难相信。通过元素的线性搜索将是O(N),这比您建议的O(N logn)便宜。也许你想写“is O(logn)”(另请参见en.cppreference.com/w/cpp/container/map,其中指出“搜索、删除和插入操作具有对数复杂性”)。-克里斯·摩尔,2012年2月10日19:06
再显示3条评论
1个答案
三
0.6版本包括对几个拒绝服务漏洞的修复,包括这一个(请参阅commit 142e6041)。
在将来的版本中,可能会实现断开发送“太多”孤立项的对等点的连接。
将来,如果您在比特币实现中发现DoS或安全漏洞,最好向一个或多个开发人员发送电子邮件,以便他们尽快了解问题。
分享
改进这个答案
跟随
3月5日15:06答复
加文安德烈森
32921717银牌2222铜牌
抱歉,我在编写问题后注意到代码中存在(可能)缺陷SDL 2012年3月7日13:44
如果您在比特币发行日志中发布一条简单的感谢信,我将非常高兴SDL公司
比特币核心LevelDB dbcache中有什么?是完整记录还是元数据?
比特币核心LevelDB dbcache中有什么?是完整记录还是元数据?
这个问题是匿名者在IRC上提出的。
比特币核心
比特币核心开发
数据库
级别DB
隐藏物
分享
改进这个问题
跟随
两小时前编辑的
9月18日15:49问
迈克尔·福克森
582077银牌2222铜牌
添加评论
1个答案
2
比特币核心文档将dbcache描述为UTXO数据库的缓存。
Wikipedia将缓存描述为:
存储数据的软件组件,以便将来对该数据的请求可以更快地得到服务;存储在缓存中的数据可能是早期计算的结果,也可能是存储在其他地方的数据的副本。
格雷格·麦克斯韦在IRC上补充道:
基本上有两种不同的用途:基本上是元数据的块索引和UTXO数据库。
dbcache并不是真正的缓存,它是一个写缓冲区,它可以防止需要同步磁盘或进行随机写入。作为一个缓存,它没有做什么,也不需要。它也可以作为一个缓存,但是如果您取消了这个好处,那么即使有一个巨大的dbcache,也只会降低大约10%的速度。
对于快速SSD(例如NVMe),我认为400MB缓存和5GB缓存之间的区别“只是”IBD时间的一半(从LAN对等点同步时)。
为了防止损坏,数据库更新必须包括同步写入。
我们改变了dbcache刷新的工作方式,明确的意图是使后台刷新成为可能,这样它就可以同时不断地刷新和处理块,而不是在磁盘上等待的地方插入这些气泡。即使一致性要求现在使这成为可能(UTXO数据库不必是一致的,除非有一个记录表明,在它被绝对地应用到数据库之前的所有块),实际上进行更改仍然是极其复杂的。
每次处理一个块时,一旦缓存填满,就可以将剩余最旧块的剩余脏项刷新到磁盘上,直到它再次低于限制。。所以基本上是冲洗背景中的每一块。然后每隔一段时间,你做一次磁盘同步,并更新记录,说完全一致的点在哪里,而不必刷新任何额外的。所以在运行时几乎没有延迟峰值。
这对挖掘是有好处的,但要做到这一点,需要一堆机器来有效地跟踪事物,同时用某种类型的开放哈希表替换dbcache的映射,以将malloc通信量减少10倍,可能是有意义的。我预计有一个因素2 IBD加速等待这些变化。我不确定它是否会发生,但这是一个大而复杂的任务,任何错误都是一个共识错误。
您甚至可以通过替换最旧的UTXO和“足够远”的flush来解决开放哈希表中的冲突。这张桌子随时都可能非常接近完全装满。
我个人喜欢布谷鸟桌。如果每个项目都有少量可能的位置,比如两个随机的桶,每个桶装4个项目,如果这些位置已满,则选择一个,将项目插入其中,将该插槽中的内容撞到另一个位置。
如果桌子有一点松弛(例如,对于2桶4件物品,不超过95%的空间),那么在踢几下之后,它总是能成功地找到一个空的位置。查找速度非常快,因为您只需要进行两次随机内存访问。有一堆不同的设计,虽然大多数是最好的时候,你可以保持表<50%满,但布谷鸟的设计很容易采取了任意高满。
比特币使用的STL集是一个哈希表,但冲突是通过哈希表中的每个条目都是一个链表来解决的,因此每次访问都涉及几个指针跟踪,每次插入都需要一个malloc。
比特币核心debug.log中的这些内存配置代表什么?
在比特币核心的debug.log文件中,缓存配置描述如下。
缓存配置:
使用2.0 MiB建立块索引数据库
用8.0 MiB实现链式状态数据库
将441.0 MiB用于内存中的UTXO集(加上多达286.1 MiB的未使用内存池空间)
这里为chainstate数据库分配的8MB缓存空间是用来做什么的?它和内存中的UTXO集有什么区别和联系?
比特币核心
utxo集合
调试
隐藏物
分享
改进这个问题
跟随
两小时前编辑的
迈克尔·福克森
582077银牌2222铜牌
3月27日4:05问
戈涅夫
10377青铜徽章
添加评论
1个答案
1
块索引和链状态数据库是LevelDB数据库。LevelDB有自己的缓存和缓存管理。因此,为块索引的LevelDB数据库缓存分配了2个MiB,为链状态的LevelDB数据库缓存分配了8个MiB。
然而,比特币核心本身会进行额外的缓存,尤其是存储在链状态数据库中的UTXO集。因此比特币核心也为自己分配了441个MiB来管理UTXO集合条目的缓存。
不同之处在于,LevelDB的缓存组织方式不同于比特币核心的内存UTXO集,因为LevelDB是一个数据库系统。因此,它针对数据处理进行了优化,并且具有一种可推广到各种数据库用途的策略。然而,比特币核心知道它将哪些数据放入数据库,因此它可以更有效地缓存这些数据。它在需要序列化和写入数据库之前缓存数据。因为比特币核心知道如何使用数据,所以它通过内存中的UTXO集进行缓存可以针对实际用例进行优化。
分享
改进这个答案
跟随
3月27日4:49回答
麻吉弟弟周立铭♦
52.9k44金徽章5555银徽章108108铜徽章
非常感谢。你的回答很有帮助。因此,我对这些缓存的用途的理解如下(如果我错了,请纠正我):当一个节点验证一个事务时,对于块中使用的UTXO,该节点首先在441MiB内存UTXO集中执行一个查询。如果找不到,则需要访问磁盘中的levelDB数据库。但是,由于levelDB还有一个8MiB缓存,因此节点需要首先查询这个8MiB缓存。如果仍然找不到,请转到磁盘进行搜索,并将搜索结果写入8MiB缓存,而不是441MiB内存UTXO集。是吗?——戈涅夫3月27日5点47分
@好的,没错麻吉弟弟周立铭♦ 3月27日17:53
添加评论
