依赖PoW的区块链如何验证哈希是使用算法计算的,而不是由人类组成的?

浏览798次
4
1
区块链如何验证所提供的散列(一个具有前导零的散列,应该是唯一的,使用大量处理能力计算)确实是唯一的,并且它不仅仅是一个随机数,有人提出,然后只是将预期的前导零添加到它?
采矿理论
搞砸
工作证明
块有效性
分享
改进这个问题
跟随
15小时前编辑的
墨奇♦
52.3k3232金徽章144144银徽章455455铜徽章
昨天问
萌芽编码器
14333枚青铜徽章
新贡献者
添加评论
8个答案
7
因为
每个人都可以快速使用事务数据来重新计算哈希值,并检查它是否匹配并且小于目标值。
计算散列并不需要时间,它会改变事务的详细信息(例如“nonce”值),直到您找到一个散列值小于目标值的排列。平均而言,这需要大量的尝试,在每次尝试之间稍微改变事务数据。因此,需要对散列进行大量计算。但只有最后的计算需要验证,而不是大量失败的尝试。
分享
改进这个答案
跟随
昨天回答的
红砂砖
10.8k22金徽章1717银徽章3535铜徽章
下面是一篇很好的文章,解释了如何计算块哈希的细节,并提供了一个python中的验证器:medium.com/hackergirl/……昨天是李文克莱夫
添加评论
5
散列函数将“任意大小的数据映射到固定大小的值”。作为一个非常简单的散列,假设函数只对数字起作用,并且只返回最后3位(十进制)数字(即1、10和100位)。
使用这个简单的散列,5将散列到005,123456将散列到456。
比特币块包含少数字段(来源):
版本
上一个块哈希
梅克尔根
时间戳
难度位
暂时的
所有这些都可以用数字表示(时间戳是Unix时间(source),这意味着它基本上是自1970年1月1日的00:00:00 UTC以来的秒数)。
在这些值中,只有nonce可以自由更改而不会使块无效。时间戳可以取值范围很广(大约“1小时前”到“2小时后”(source)),版本号有很大的灵活性(同上)。我将把重点放在当下,因为那是我最容易谈论的。
在这个简化的场景中,工作证明是通过将所有这些数字相加并找到一个导致哈希为000的nonce来完成的。在这个简化的场景中,这样做很简单:您可以将其他数字相加,对部分和进行散列,然后将nonce设置为1000,即部分散列。所以,这不是一个很好的散列算法。

相反,比特币使用的是SHA256。SHA256有几个优点,这些优点源于它是一个加密散列函数;三大优点是,计算给定值的SHA256散列值“便宜”,但生成一个将生成给定SHA256散列值的值是困难的,输入中的微小变化将导致输出中的巨大变化(雪崩效应)。
事实上,据我们所知,生成产生给定SHA256哈希的输入的唯一方法是不断尝试输入,直到找到一个有效的输入。
所以:与开始时的简单散列不同,我们不能仅仅通过查看其余的数据就知道nonce应该是什么。而且,我们不能仅仅调整nonce来得到我们想要的散列:雪崩效应意味着对输入的每一个小的改变都会对输出产生大的改变。因此,找到产生有效SHA256哈希的nonce的唯一方法是从0开始,直到找到合适的nonce为止。
一旦找到合适的nonce,任何人都可以通过用该nonce对块进行散列并查看散列是否匹配来验证nonce/散列对是否有效。这项检查可以很快完成,并证明谁发现了nonce做的工作。
nonce是一个32位整数(source),这意味着有4294967295个(略低于43亿个)可能的nonce。与Powerball彩票相比,一张彩票中大奖的几率约为1/300000000,随机选择的nonce有效的可能性很小;即使有数千个nonce可以产生一个包含足够前导零的SHA256散列,随机选取临时符号的可能性仍然是惊人的。
然后,时间可以在大约3小时的窗口中取任意值,并且具有第二分辨率,因此它可以取约10800个值。这个版本有一些限制,但它似乎是另一个像nonce一样的4位整数;为了粗略计算,假设它可以使用nonce可以使用的可能值的一半。这意味着大约有9e+22(9后面跟22个零)可能的组合。银河系中大约有2000亿颗恒星(来源);也就是说,2000000000或2e+11。在两个人从整个银河系中随机选择同一粒沙子的情况下,随机找到一个正确的头球很有可能。
分享
改进这个答案
跟随
14小时前编辑的
昨天回答的
明尼马斯
15122青铜徽章
新贡献者
大家好,很好的第一个贡献!短语“在这些值中,只有nonce可以在不使块失效的情况下更改。”可能有点误导:矿工创建块模板并计算头之后,他们将尝试完整的nonce空间(43亿次尝试只是杯水车薪,网络的速度约为1.63亿次/s),但是如果他们没有找到一个能构成一个有效块的nonce,他们会改变头中的其他内容来扩展搜索空间。但是,在找到有效块之后,nonce是头的一部分。–默奇♦ 19小时前
抱歉,我应该在前面链接到这个相关的主题:为了避免重新计算Merkle根,矿工可以更改哪些块头字段?如果你感兴趣的话。–默奇♦ 15小时前
添加评论

1
@Sprout Coder获胜的矿工不向要验证的网络提供哈希。他供给街区。比特币块的前80个字节是块头。如果标头的哈希值大于目标哈希值,则该块无效。矿工们反复地散列80字节的头,每次都做一个小的改变。当一个矿工发现一个头部有一个足够小的散列,他发送整个块到一个或多个比特币节点。如果该块无效,节点将丢弃它,并且不将其传播到其邻居
分享
改进这个答案
跟随
21小时前回答的
路易斯·汤姆普森
2111青铜徽章
添加评论
0
谁/什么造成了散列并不重要,只要它对给定的散列函数正确工作。
假设你在记事本中手动将一个块打包在一起,在脑海中随机想到一个数字,然后用你刚刚梦到的哈希值标记这个块,假设你是宇宙中最幸运的人,你碰巧用这种方式打包了一个积木,所以它确实与你在脑海中想象的数字相符(这种可能性是难以置信的,难以置信的,难以置信的不太可能,但不是绝对不可能的)-恭喜,你赢了这一轮的比赛;网络上的其他人会把你组装的块,按照网络上广泛接受的算法进行散列,得到与你想象的完全相同的数字,宾果-它被证明了。你的解决方案有效!你得到区块奖励,你的区块就被并入区块链
最关键的是,“难以置信,难以置信,难以置信的不可能”的部分,当你向世界惊呼“我有像ABCDEF这样的块,我把它散列到00123,这是有效的,有效的,比难度小,所以给我奖励”。网络的其他部分会去“呃,不,实际上阻止ABCDEF散列到00255这是不正确的”-发生这种情况的可能性(你编造的散列是错误的)是数十亿倍
你必须意识到,一台挖掘机器会有一堆事务和其他的乱七八糟的东西,它可以打包在一个块中,它可以对它进行散列-得到结果200(假设它寻找的是小于100),这比难度要高,所以它做了一些调整,再次散列,得到250,调整,散列得到199,调整/散列/调整/散列。。它以每秒数十亿次的速度这样做,最终,也许它会得到一个小于100次的结果——它现在可以宣布阻塞,其他人会验证它
如果它(或你)只是编造了一个散列,并宣布它是赢家,它是如此难以置信的不可能是正确的,它可能不是一个赢家,不会被网络接受。就像你买彩票时输了号码,然后跑来跑去喊“我中了彩票!我选了1,2,3,4,5,6,昨晚的数字是1,2,3,4,5,6,给我几百万!”每个人都会说“不,昨晚的数字是1,4,7,22,38,49。。“走开”
分享

你能找到“每秒数十亿次”的信息吗?如果只有42亿个可能的临时事件,矿工们每秒可以检查数十亿个临时事件,那么大约每秒钟就应该生成一个新的区块;它似乎更接近每10分钟生成一个区块。–23小时前
但是,块的时间戳可以更改,或者事务可以重新排序-nonce不是唯一可以更改块以导致不同哈希结果的东西。挖掘设备以每秒万亿次的速度散列,因此单个设备已经能够每秒对块进行数十亿次的散列,并且在发现一个小于难度的块的散列之前,它们已经多次用完nonce。故意改变难度,使求解速度平均保持在10分钟;如果哈希速度加倍,则时间减半,因此。。——21小时前的凯乌斯·贾德
网络改变了难度目标,有效地使难度提高了一倍,平均每10分钟解决一个障碍的几率提高到1。另外,不要忘记,对于时间戳为Y的特定X块事务,42亿个nonce中可能没有一个能得到比难度小的哈希值;块解算速率与该块检查了多少个nonce无关——Caius Jard 21小时前
添加评论
0
块在以下情况下有效:
它的散列比难度低
它只包括有效的事务
哈希是从80字节的blockheader生成的。然后将得到的哈希值解释为一个数字,以将其与难度目标进行比较。
很难找到一个标头遇到困难的块:比特币网络目前约为163 EH/s,即全球平均每10分钟有163次每秒5百万次的尝试来查找有效的。
另一方面,识别一个虚构的解决方案是微不足道的。成功的矿工必须在公告中提供完整的区块头。它的对等方只是从blockheader重复哈希计算,以验证块是否满足困难。只有这样,对等方才能检查块的剩余内容是否也是有效的。如果块是有效的,它们将块依次转发给它们的对等方。否则,它们会丢弃它(在某些情况下会丢弃提供无效数据的对等方)。
分享
改进这个答案
跟随
15小时前回答的
墨奇♦
52.3k3232金徽章144144银徽章455455铜徽章
添加评论
0
块的散列不是简单的唯一字符串,而是使用散列函数生成的唯一字符串。
散列函数是一种不能反转的单向算法。因此,为了生成所需的输出,您别无选择,只能反复修改所需的输入,直到找到一个有效的输入。
这是一个挖掘过程,计算机(1)获取事务数据,(2)修改事务数据的一小部分,(3)每秒生成数十亿个哈希,试图找到一个给定的小修改,与事务数据的其余部分一起,将生成一个数量为X的零的哈希。
现在hash已经生成,完整的事务数据以及nonce可以提交给BTC网络。尽管要找到正确的nonce来“反转”单向散列函数花费了无数次的尝试,但通过简单地通过散列函数传递它和事务数据来验证它是微不足道的。

回答不错,但加密哈希函数与加密无关。矿工可能会在试图查找块时修改块模板的其他部分,您可以在此处阅读更多内容:bitcoin.stackexchange.com/q/90393/5406–默奇♦ 14小时前
@默奇谢谢,更正。–是的,22 14小时前
添加评论
0
计算给定已知值的散列非常简单。挖掘的工作原理是,您必须获取事务的详细信息,并得出一个值(nonce),该值将使哈希适合预定义的范围。目前使用比特币时,你需要有一些值,并计算一个以18开头的0的散列来“挖掘”一枚硬币。
为了计算散列值,需要获取事务细节并添加一些特殊的调料,然后计算散列值。如果散列有18个前导零,那么您正在挖掘比特币。你把你的特殊价值和散列给网络,如果有足够多的其他矿工同意,它就会成为区块链的一部分。其他矿工接受你的散列,并开始计算新的散列与新的事务和他们自己的nonce得到下一个散列。
如果你用18个前导0和其他46个十六进制数字组成你自己的散列,那么首先会发生的事情是其他矿工会用你的nonce来处理事务细节并自己计算散列。这是一个简单而快速的操作,它使用一个随机的nonce来尝试产生一个新的有效散列。
问题是,对于18个前导0,您需要尝试大量的nonce来找到一个包含18个前导0的散列。您需要尝试大约10000000000000000000个nonce来找到一个将给您一个包含18个前导零的散列。这意味着检查散列需要1/10000000000000的计算能力。当您将哈希提交到网络时,其他节点要做的第一件事就是验证哈希。如果你试图“编造”一个哈希,但无法验证,网络的其他部分将忽略你,甚至停止尝试验证你创建的未来哈希。
分享
改进这个答案
跟随
40分钟前回答的
杰森·戈马特
101
新贡献者
添加评论
0
区块链如何验证
区块链不会验证任何东西;网络会验证。但是区块链可以用来验证事物(事实上,这就是它们的全部意义)。
所提供的散列(带前导零的散列应该是唯一的…)确实是唯一的
根据定义,散列是唯一的,因为每个块头正好有一个散列。
如果“独特”是指“与其他区块不同”,那么:
这并不是比特币规则的一部分。
即使是这样,验证也很简单,至少与验证区块链所需的所有其他计算相比。
无论如何,事实上肯定会是这样,因为像比特币(SHA256)那样的好散列函数几乎不可能找到具有相同散列的两个值。
“独特”这个词可能不适合这个问题。
散列所提供的(使用大量处理能力计算的)
比特币使用的哈希值易于计算(因此易于验证)。困难在于找到哈希值小于目标值的块头。
它不仅仅是一个随机数,有人想出,然后只是添加了预期的前导零?
没有人能够验证所提供的散列来自何处,这并不重要。重要的是:
它实际上是提供的头的散列。
它小于目标值。

T500定制 (36)blockchainBTC比特币区块链

如何从共享中恢复原来的记忆?

浏览56次
0
我刚刚读到一个原始的助记符可以被分成几个部分,我有点困惑于系统如何从这些助记符片段中恢复原始的助记符。
我有助记忆的例子
雷达温暖披萨悲伤值得攻击面包车丝带牛奶面吉他单身汉
然后我分拆得到5股记忆法
1死亡重开排序违抗大猩猩现场大炮扫描大东西行动
2拱形农民行为箱试装表示器官旅游者饥饿的生物学思想
三。gun win grace排气电影帆索新闻捆绑滑翔明亮最小
4装载阳光自行车龙鬼排序乌龟嗡嗡轨道细长便宜照片
5食谱蛇提交温柔松鼠纹身男孩惩罚帆夏季舌头鸽
我加起来的三个3股,原来是最原始的记忆法。但我有个问题。如果我只记得这5个助记符中的2个,我能恢复我原来的助记符吗?如果可能,请告诉我怎么做?
谢谢您
记忆种子
分享
改进这个问题
跟随
11月30日17:33编辑
阿布杜萨马德
241299银徽章1818铜徽章
11月30日16:27问
Zmx阿塔
111青铜徽章
添加评论
1个答案
-1
您可以选择哪些共享子集足以重建原始机密。这就是为什么它被称为n的m,所以把m设为2,n设为5,你就得到了你所需要的。
如果你还没有这样做之前,分裂的秘密,那么2股将是不够的。
分享
改进这个答案
跟随
回复时间:11月30日17:34
阿布杜萨马德
241299银徽章1818铜徽章
你能给我看看吗?–Zmx Atah 11月30日17:52
@我不知道你用了什么工具或脚本,所以我怎么给你看?–Abdussamad 20年12月1日12:11
我只是在用伊恩科勒曼的沙米尔秘密。但我对沙米尔的秘密知之甚少——12月1日下午16:41
只需选择5个部分中的2部分,当分裂的秘密-阿卜杜萨马德12月2日12时44分20秒
我不认为这回答了问题。OP正试图用两个共享来重建他们的秘密,这两个共享是作为3/5设置的一部分创建的。这是不可能的。——13小时前的皮特·维尔
添加评论

T500定制 (35)blockchainBTC比特币区块链

从bip-39种子短语生成私钥?

2
我可以使用比特币核心生成一个新的私钥和相关的公共地址,但我真正想做的是从一个24字的种子短语生成一个新的私钥。我不知道该怎么做,也找不到任何例子。
BIP-39单词表:
https://github.com/bitcoin/bips/blob/master/bip-0039/english.txt
当前代码:
var bitcore=require(“bitcore lib”);
var缓冲区=bitcore.crypto.Random码.getRandomBuffer(256);
var散列=bitcore.crypto.Hash文件.sha256(缓冲区);
变量bn=比特核心.crypto.BN.fromBuffer(哈希);
var pk=新bitcore.PrivateKey(bn).toWIF();
var address=新bitcore.PrivateKey(bn).toAddress()+“”;
如果我理解正确,我将从24个随机选择的单词(从BIP-39单词列表)生成一个哈希,然后使用它生成一个私钥。散列种子短语的步骤和格式是什么?
私钥
搞砸
记忆种子
分享
改进这个问题
跟随
2018年3月2日0:28问
科尔宾
12511银徽章77铜徽章
这24个种子词不能任意选择。有关合成种子词的示例,请参见github.com/libbitcoin/libbitcoin-资源管理器/wiki/…。-斯卡特2018年3月2日1:56
非常感谢。我正在使用比特币核心在Windows NodeJS环境中开发。这些示例看起来像是使用“bx”的某种命令行操作,在我的环境中,它没有被识别为任何可执行文件。–科尔宾2018年3月2日2:40
在进行NodeJS工作时,至少您现在有了一些测试向量信息。-斯卡特2018年3月2日3:38
添加评论
2个答案
0
https://github.com/iancoleman/bip39
“将BIP39助记短语转换为地址和私钥的工具。”
分享
改进这个答案
跟随
回复时间:8月12日20:22
用户49041
添加评论
-1
请看示例7。其他的阿尔特币也有类似的例子。
分享
改进这个答案
跟随
2018年3月2日1点55分答复
斯卡特
275911金徽章99银徽章020铜徽章
非常感谢。我正在使用比特币核心在Windows NodeJS环境中开发。这些示例看起来像是使用“bx”的某种命令行操作,在我的环境中,它没有被识别为任何可执行文件。–科尔宾2018年3月2日2:40
添加评论

T500定制 (33)blockchainBTC比特币区块链

当我需要快速买房时,我该如何避免花费我的比特币?

查看47次
0
最不可能的事情发生了:我长大的那栋房子,在危急的年纪被迫搬走了,从那以后我一直渴望的那栋房子,就被卖掉了。虽然他们在内部甚至在很大程度上破坏了它,我只是碰巧真的需要一个地方住,关键是,为我自己和其他两个家庭成员。
比特币的价格这么低,我不可能把它们卖给菲亚特买房子。另外,在我的情况下,这将需要很长时间来完成(使用Bisq)。房子很快就要卖了。我们没有法定的手段可言。
布洛克菲、霍德尔、霍德尔和索维林都是无稽之谈。两个都不管用,至少对我来说不管用。因此,借我的硬币来获得利息,以便用这些钱来支付房子的贷款似乎也是不可能的。加上我的银行已经不喜欢我了,因为他们知道我有比特币。我甚至试着问他们是否可以用我的比特币作为担保从他们那里贷款。他们笑着,以一种非常屈尊的态度对待我。
我梦想中的房子,虽然处于一个几乎被摧毁(完全改变)的状态,却又从我身边溜走了。考虑到我最近一直在想这个问题,它几乎像是上帝给我的一个信号,我打算现在就买下它,然后慢慢地把它恢复到过去的样子,同时生活在里面。
但尽管理论上有足够的比特币可以提前购买大部分比特币,但我从未感到自己比现在更穷。我不能从我的硬币中“提取”价值,因为一切都太早了。我也害怕死放弃任何控制我的私钥,或失去BTC的方式之一,你可以失去他们,无论是意外或通过某种骗局。
在这种令人沮丧的情况下我该怎么办?我要问经纪人他们是否接受比特币,尽管我不能浪费我的硬币,但我非常怀疑他们是否会回答。尽管有这么多“利好消息”,坦率地说,现实世界中的大多数人似乎仍然对比特币一无所知。
付款
出售比特币
价值
菲亚特
贷款
分享
改进这个问题
跟随
6小时前问的
J.M。
1
新贡献者
你的问题是什么?如果我们能帮你,你还有多少时间?这房子你要付多少钱?你的比特币有多大?–6小时前的Parinaz Mirshekar
我的问题是如何得到房子,而不必浪费我的比特币在我的情况。如果有解决办法。我怀疑有,但我很绝望。–6小时前的J.M
1
如果你觉得这房子现在如果值得花你的BTC,那么你应该这样做。否则,不要,或者再买一个。没人能替你做那个决定。–Pieter Wuille 5小时前
如果你想买东西而不花你的BTC,你需要花其他的钱。–Pieter Wuille 5小时前
这能回答你的问题吗?有没有一种方法可以贷款给你的比特币,比如以太坊如何在MakerDAO中用作CDP来获得DAI?–RedGrittyBrick 5小时前
添加评论

T500定制 (32)blockchainBTC比特币区块链

更改-BitcoinCore 0.20.1中的mempoolexpiry

查看128次
0
我无意中做了一笔费用很低(5 sat/字节)的交易,我怀疑它是否会很快得到确认。“替换为费用”不可用,因为我的交易没有更改。放弃交易选项也不可用。如何更改在Windows 10上运行的BitcoinCore(0.20.1)中的-mempoolexpiry设置,使事务不需要等待2周就可以自动从mempool中退出?
比特币核心
交易费用
未确认交易
内存池
分享
改进这个问题
跟随
11月4日18:57被问到
杜达13
1
添加评论
1个答案
0
我无意中做了一笔费用很低(5 sat/字节)的交易,我怀疑它是否会在任何时候得到确认
在此处输入图像描述
根据mempool的费用分配情况,我可以在几小时/几天内确认https://btc.bitaps.com
如何更改在Windows 10上运行的BitcoinCore(0.20.1)中的-mempoolexpiry设置,使事务不需要等待2周就可以自动从mempool中退出?
它可以在比特币.conf但是,如果事务已经转发到其他节点,我认为它不会影响任何东西。
分享
改进这个答案
跟随
11月4日22:47编辑
回复时间:11月4日22:41
普拉扬克
300611金徽章55银徽章1717铜徽章
RBF技术上不需要更改,但如果不更改,就无法在不减少发送量的情况下增加费用。–Pieter Wuille 11月4日20:22:43
谢谢。我没有意识到这一点。将编辑我的答案。–Prayank 11月4日20:22:45
添加评论

T500定制 (31)blockchainBTC比特币区块链

将比特币从本地比特币发送到另一个钱包以确保我的资金安全,这样做有效吗?

查看了2k次
2
2
我在LocalBitcoin有一个账户,我只为我的backpage账户提供资金。然而,这个帐户是在clearnet上的,链接到我的电子邮件地址和银行帐户,并且在没有任何隐私/保护层的情况下被使用。我住的地方似乎没有任何现金支付的选择来获得比特币,这就是为什么我用我的银行账户为它提供资金,而在我第一次使用它时没有考虑保护它。
好吧,现在我想用比特币购买一些东西,但我不希望这项交易以任何方式链接到我的本地比特币帐户(和所有个人信息)。
我的问题是:
如果我不能通过现金支付为一个账户提供资金,我可以从其他网站创建另一个账户吗?我可以从我的本地比特币账户安全地向该账户发送比特币吗?
考虑到这个新帐户将使用不同的身份创建,并且只用于使用TOR browser,这是否允许我有一个特定的安全/隐私层?
比特币是否以任何方式将比特币从普通网络安全地传输到TOR网络?
谢谢
(如果我没有使用正确的术语,我真的很抱歉,我不是这些语言的专业人士)
隐私
账户对账户
分享
改进这个问题
跟随
编辑时间:2016年11月22日0:52
墨奇♦
52.3k3232金徽章144144银徽章455455铜徽章
11月5日16:06被问到
钱尼
2122青铜徽章
我稍微编辑了一下你的文章的语法和格式。第二个问题似乎少了一个词,因为它以“和”结尾,因此您可能需要编辑您的问题,将您的剩余想法添加到那里。–默奇♦ 2016年11月22日0:52
欢迎来到比特币.SE! 如果答案是正确的,您可以通过将答案标记为“已接受”来帮助网站解决问题,这样问题就不会保持“未回答”状态。–Willtech 2018年3月18日13:24
添加评论
1个答案
0
比特币从普通网络传输到TOR网络是否以任何方式保护比特币?
比特币交易是可链接的。换句话说,如果你匿名给我发送比特币到地址123,我可以看到那些比特币曾经属于地址456。如果我也有一个本地比特币数据库的副本,我可以看到地址456属于你。我很有信心比特币来自你。
Tor没有解决这个问题,但这仍然是个好主意。Tor可以隐藏你的IP地址,但在上面的例子中,我从来没有用过。
分享
改进这个答案
跟随
回复时间:11月5日16:45
尼克·奥德尔
27.7k88金徽章5959银徽章17117铜徽章
好的,这意味着(例如)本地比特币地址123发送到匿名地址456,而匿名地址456再次发送到购买地址789。–2016年11月5日上午20:30
这意味着(例如)原产地地址123发送到另一个地址456,后者从地址789发送购买。追踪可以在整个链条上完成……但是如果说地址456和地址123是同一个人的,这难道不是一个简单的猜测吗??添加其他匿名地址后,应增加机会,以减少这种猜测的“确定性”…如果在最后一人购买前完成。。。。。如果我把比特币送给一个不知名的人,然后这个人会把比特币送给另一个不知名的人……然后再把比特币送给另一个不知名的人……这不是一回事吗?–2016年11月5日上午20:38
@那可能有用。这叫做“比特币混合”,但我不知道它的效果如何。您正在进行一场艰难的战斗,因为您需要现在就完成混合,但是潜在链接这些事务的数据将永远存在。–Nick ODell 11月5日23:46
添加评论

T500定制 (30)blockchainBTC比特币区块链

比特币核心如何防止初始DNS种子更改?

浏览95次
2
虽然比特币网络本质上是P2P,但仍然需要确定一个初始节点来连接。我知道这种初始连接的方法是连接到已知的DNS种子,例如种子.bitcoin.sipa是的。如果一个恶意的参与者,假设,将这个“链接”重定向到一个指向另一个网络的种子,例如,他拥有51%的多数权,那么这会造成任何损害吗?
攻击
种子
多数攻击
域名系统
分享
改进这个问题
跟随
3月27日18:52问
奈姆
2111青铜徽章
新贡献者
添加评论
2个答案
1
一般来说,人们对比特币核心自举攻击有一些讨论,但就防御能力而言,并没有太多讨论。幸运的是,DNS种子只在软件第一次启动时才真正使用,网络中的对等节点的谣言用于所有后续连接。
除了破坏DNS种子之外,要想获得这种访问权限而不付出太多代价是不可能的。客户对区块链有效所需的总工作量有一个概念,因此不会被一个与真实区块链没有联系的全新区块链所愚弄。在真正区块链的顶端使用低哈希率进行挖掘是不可能的,因为每个阶段的难度都有一个最大值;你不能简单地挖掘价值2周的区块,而让难度降到几乎为零。
理想情况下,我们现在有了DNS种子,但它们带来的风险是可控的,引导问题不是比特币独有的,这是所有P2P网络都需要在某种程度上应对的问题。
分享
改进这个答案
跟随
3月27日20:16回答
匿名的
13.1k22金徽章1919银徽章4141铜徽章
添加评论
-1
比特币核心使用9个DNS种子:
种子.bitcoin.sipa是的
dnsseed.bluematt.me公司
dnsseed.bitcoin.dashjr组织
种子.bitcoinstats.com
种子.bitcoin.jonasschnellich先生
种子.btc.petertodd组织
种子.bitcoin.sprovoost.荷兰
dnsseed.emzy.de公司
种子.bitcoin.wiz比兹先生
dnsseed.bluematt.me公司这是由所有核心开发人员保护的特殊功能
您可以将自己的种子与中的seednode一起使用比特币.conf
假设一个恶意的参与者将这个“链接”重定向到一个指向不同网络的种子
我不确定,但如果9个种子之一被破坏,它可以影响新的节点,节点一旦同步依赖于默认种子较少。
分享
改进这个答案
跟随
6小时前编辑的

T500定制 (3)blockchainBTC比特币区块链

如何下载完整的块?

浏览537次
0
我想用Java和bitcoinj下载一个完整的块,然后把它解析成一个数组来使用它。下面是一些(非常基本的)伪代码:
接入网络;
下载最新块;
写/转换块到可读数组;
读取块数组;
sout:blockArray[23][55]//这应该可以得到一个txid,地址。。。
//或者类似的。我只想能够从块中读取值
有办法吗?我在这里找到了以下解决方案(使用bitcoinj发现对等点并下载块链):
公共类DumpLastBlock{
public static void main(字符串args[])引发异常{
WalletAppKit=新的WalletAppKit(MainNetParams.get获取(),新java.io.File文件(“,”测试“);
开始和等待();
区块链=链条套件();
区块商店bs=chain.getBlockStore链接();
对等=套件.对等组().getDownloadPeer();
b区=对等.getBlock(bs.GET链头().getHeader().getHash()).get();
系统输出打印(b) ;
}
}
不幸的是,开始和等待()不再可用。
有人能帮我得到最新的块,并能够读取其值吗?
非常感谢:)
比特币
分享
改进这个问题
跟随
编辑时间:12月2日14:10
12月2日17:46被问到
交流
12511银质徽章1313青铜徽章
添加评论
1个答案
0
bitcoinj源代码中的示例正是您要查找的:
BriefLogFormatter.init();
//分析命令行参数
OptionParser=新建OptionParser();
optiostopts=null;
List<String>nonOpts=null;
试试看{
解析器.接受(“localhost”,“连接到localhost节点”);
解析器.接受(“帮助”,“显示程序选项”);
选项=解析器.parse(args);
如果(选择has(“帮助”)){
系统输出打印(“用法:org.bitcoinj.示例.FetchBlock[–localhost]<blockHash>“);
解析器.printHelpOn(系统输出);
返回;
}
非选项=选项非可选参数();
如果(非选项大小() != 1) {
抛出新的IllegalArgumentException(“块散列数不正确,请只提供一个块散列。”);
}
}捕获(OptionException | IllegalArgumentException e){
系统错误打印(如getMessage());
系统错误打印(“用法:org.bitcoinj.示例.FetchBlock[–localhost]<blockHash>“);
解析器.printHelpOn(系统错误);
返回;
}
//连接到testnet并查找对等方
系统输出打印(“连接到节点”);
最终网络参数params=TestNet3参数获取();
BlockStore BlockStore=新内存BlockStore(params);
区块链=新区块链(params,blockStore);
PeerGroup PeerGroup=新PeerGroup(params,chain);
如果(!选择has(“本地主机”)){
peerGroup.addPeerDiscovery文件(新DnsDiscovery(params));
}其他{
PeerAddress addr=新PeerAddress(参数,InetAddress.getLocalHost());
peerGroup.addAddress地址(地址);
}
peerGroup.start开始();
peerGroup.waitForPeers对等(1) .get();
对等=peerGroup.getConnectedPeers节点().get(0);
//通过对等机检索块
Sha256Hash blockHash=Sha256哈希.wrap(不选择。获取(0));
未来<Block>未来=对等.getBlock(区块散列);
系统输出打印(“正在等待节点向我们发送请求的块:”+blockHash);
块=未来。获取();
系统输出打印(块);
对等组.stopAsync();
分享
改进这个答案
跟随
编辑:2018年6月2日13:06
回复时间:2018年5月25日18:11
尼基塔
3544青铜徽章
请在您的答案中添加与问题相关的链接的详细信息。在目前的答案中,如果链接停止工作,未来的用户将无法从中获得任何信息。–Raghav Sood 2018年5月26日7:46
添加评论

T500定制 (29)blockchainBTC比特币区块链

谁会从直根部署中受益?

查看29次
-2
schnorr、tapscript和其他东西是否只为5%的用户更新?
当人们说比特币核心开发者说taproot只适用于大型Multisig、blockstream等时,我得到了截图。
现在其他开发人员也支持这种活动。我不知道发生了什么事。为什么我又活跃起来了?从随机的人那里得到信息。所谓的“比特币核心开发者”能阻止误导人们吗?
主根
分享
改进这个问题
跟随
7小时前编辑的
8小时前问的
普拉扬克
299211金徽章55银徽章1717铜徽章
如果你认为结束这个问题就结束这个问题,不。我会做其他的事情,它也会显示你想要达到什么,事情是如何运作的,以及如何利用核心。–7小时前的Prayank
1
你能提供一些参考资料来理解你指的是什么吗?–7小时前leevancleef
哪个参考号?开发者或巨魔或替补-7小时前的普拉扬克
“现在其他开发人员也支持这种活动。我不知道发生了什么事“看来你指的是一些特别的事情。。。我真的对学习更多感兴趣——7小时前的leevancleef
对于开发者:IRC和GitHub中的bluematt,不确定他或其他人是否在用于激活的电报组中使用了相同的东西。然后XYZ说bticoin核心开发人员说taproot只用于blockstream,Samourai小组也讨论了同样的问题。当核心开发人员很少有项目传播错误信息时,我应该和新手讨论什么关于Taproot。我很想知道他们为什么这么做?–7小时前的Prayank
再显示1条评论
1个答案
1
Taproot使每个使用它的人都受益,但对那些使用复杂脚本和multisigs的人来说,它的好处最大。由于这一群体只是比特币用户的一小部分,这可能就是为什么有些人说比特币只对这一小部分人有用。然而,我不会将这些陈述定性为意义主根对其他任何人都没有用处,也不会将这些陈述解释为意义主根对其他任何人都有害。
绝大多数用户使用单键地址。这些是典型的P2PKH和P2WPKH地址。在这一点上,我们几乎是简单的,因为它得到了单关键的东西-提供一个签名和一个公钥,这就是它。虽然Taproot以Schnorr签名和pay-to-pubkey方案的形式改进了单个密钥,但绝大多数用户不会体验到P2WPKH和P2TR之间的巨大差异。用户体验几乎是一样的——你点击一个按钮就可以获得一个新地址,人们把钱寄到那个地址,然后你可以点击另一个按钮把比特币寄到别处。唯一明显的区别是,将P2TR输出花费在成本上会稍微便宜一些,而将P2TR输出发送到成本上会稍微贵一些。即使这样,区别也不是很大,所以很多用户甚至可能没有注意到。
不过,对于制作多段脚本或复杂脚本的用户来说,Taproot是一个巨大的福音。所有这些多西格和复杂的脚本可以真正压缩开支时。在典型的“人人都同意”的情况下,不必将大型脚本放入区块链,而花费一个主根输出将使交易方式变得更小,从而真正节省费用。这是对这些工作流程的一个重大改进,因为在交易费用上花费的钱要少得多。还有一个额外的好处是,这样的事务看起来就像单密钥事务,这有利于隐私。对于那些谁有非常大的多西格或非常大的脚本,费用的差异将被注意到。

当涉及到使用主根脚本路径时,事务中只显示使用的部分。这既减少了事务大小,又通过不暴露未使用的脚本路径增加了隐私。这也是一个巨大的进步。
因此,Taproot为制作多段脚本或复杂脚本的用户提供了大部分好处。这只是比特币用户的一小部分。Taproot致力于改善脚本和multisig的使用体验,这是正确的。由于使用脚本和multisig的人并不多,所以说Taproot只影响一小部分人是正确的。
然而,这并不意味着我们不应该要主根。这并不意味着主根是坏的。而那些说这些话的人不一定是误导、撒谎,或者不想要主根。他们在陈述主根的用途以及它能给哪些人带来最大的好处。
在讨论的背景下,我相信你指的是,论点不是我们不应该得到主根,而是它不是那么重要,我们需要尽快得到它。Taproot为所有使用它的人提供了一个好处,但是对于大多数用户来说,这个好处并不显著。我们现在不需要它,所以没有必要有这么多的紧迫性,试图获得主根。我们想要主根,现在就拥有它会很好,但我们不应该让“我现在就想要”的感觉妨碍开发一种安全的方式来激活它,这种方式也可以在未来的软叉中使用。
分享
改进这个答案
跟随
3小时前回答的
麻吉弟弟周立铭♦
51.1k44金徽章4848银徽章102102青铜徽章
添加评论

T500定制 (28)blockchainBTC比特币区块链

套利利润计算

浏览3k次
6
1
我根据3张交易所买卖单做了计算。(Cryptsy、C-cex和Bter)并考虑了DOGE/BTC市场。
cryptsy和C-cex都有相同的计算方法来获得买卖订单的净总额(最终金额包括交易费用)。在这些交易所中,买入和卖出交易所的交易费用都是以DOGE/BTC市场的BTC为单位的。但bter对销售订单的计算和对购买订单的计算与cryptsy和C-cex中的不同。这里以BTC表示买入交易费,以DOGE表示卖出交易费。
我对计算利润很困惑?请查看Cryptsy和Bter网站,看看销售订单之间的区别。
DOGE/BTC市场
案例(1):买卖交易所交易费用都是BTC(cryptsy buy,C-cex-sell)
买换=神秘
卖出交易所=C-Cex
购买金额=1美元
销售金额=1美元
买入价=0.0000038 BTC//取自cryptsy exchange DOGE/BTC买入
卖出价=0.0000042 BTC//取自Ccex交易所DOGE/BTC卖出价
购买费用=0。002 BTC(0.2%)
销售费用=0。0015 BTC(0.15%)
采购订单:
合计=买入金额*买入价格(合计=1*0.0000038=0.0000038 BTC)
购买费用=总*购买费用(购买费用=0.0000038*0。002=0.000000008 BTC)
购买订单净总额=总额+购买费用(购买订单净总额=0.000003808 BTC)
销售订单:
合计=卖出金额*卖出价格(合计=1*0.0000042=0.0000042 BTC)
销售费用=总额*销售费用(销售费用=0.0000038*0。0015 =
0.000000006 BTC)
销售订单净总额=总额-销售费用(销售订单净总额=0.000004194 BTC)
利润:
利润=卖出\订单\净总额–买入\订单\净总额(利润=0.000004194 BTC-0.000003808 BTC=0.000000386 BTC)
案例(2):(对于相同的DOGE/BTC市场,根据BTC(cryptsy)收取买入交易费,根据DOGE(Bter)收取卖出交易费)
买换=神秘
卖出外汇=Bter
购买金额=1美元
销售金额=1美元
买入价=0.0000038 BTC
售价=0.0000042 BTC
购买费用=0。002 BTC(0.2%)
销售费用=0。0018多格(0.18%)
采购订单:
合计=买入金额*买入价格(合计=1*0.0000038=0.0000038 BTC)
购买费用=总*购买费用(购买费用=0.0000038*0。002=0.000000008 BTC)
购买订单净总额=总额+购买费用(购买订单净总额=0.000003808 BTC)
销售订单:
合计=卖出金额*卖出价格(合计=1*0.0000042=0.0000042 BTC)
**//销售费用是以狗为单位的。我应该如何计算利润?**
利润:
利润=???
我的方向正确吗?有没有其他最简单的方法来计算利润?如果可能的话,请解释一下步骤的顺序?
交易所
套利
兑换费
货币
分享
改进这个问题
跟随
2016年1月20日21:10编辑
墨奇♦
52.3k3232金徽章144144银徽章455455铜徽章
2014年7月2日8:08问
Jsd公司
33822银牌1414铜牌
2
你所做的不同于“大多数”套利期权的是,你交换买入和卖出。套利之所以有效,是因为有直接的买卖选择权。你现在所做的,是价差交易。你等着别人接受你的提议,而不是反过来。你依赖别人。–Mathias711 2014年7月2日9:15
1
请加入我的聊天,因为有更多的事情我要说和问,否则我们会垃圾邮件整个评论块在这里。我做了一个新房间,我不知道怎么强迫你进去,所以你必须心甘情愿地来:)-Mathias711 2014年7月2日9:16
@mathias711-是的,当然。给我链接-Jsd 2014年7月2日9:23
1
chat.stackexchange.com/rooms/15491聊天室/…Mathias711 2014年7月2日9:23
添加评论


销售订单净额合计公式为:
销售订单净总额=销售金额*销售价格*(1-销售费用)
最终利润:
利润=销售订单净总额-购买订单净总额
请记住,两家交易所之间也有交易费用。如果你在一个交易所把所有的狗换成了BTC,在另一个交易所把BTC换成了狗,你就要把这两个账户和等量的DOGE/BTC混合起来。如果你想在交易所之间进行交易,交易费用也应该计算在内。
分享
改进这个答案
跟随
7月2日11点58分答复
数学711
141011金徽章1212银徽章2626铜徽章
马蒂亚斯和711-最伟大的工作和最伟大的人。谢谢。–Jsd 2014年7月2日12:04
添加评论
0
我已经创建了一个自定义脚本来计算您在两个交易所之间交易的利润。您可以自定义买卖价格。剧本还考虑了转会费和买卖费。我计划在这个脚本工作更多,但我想看看有多少兴趣,我收到。包括:
实时更新不同交易所的价格。
利用商业秘密和代币进行快速交易。
我迫不及待地想在这里得到反馈。http://theark.io/projects/btcarb/
分享
改进这个答案
跟随
回复时间:2016年4月20日18:39
斯蒂芬·库尔
1
添加评论
0
你考虑过交易所收取的费用吗?费用很高。我想不适合高频交易。
分享
改进这个答案
跟随
2小时前回答的
btc2doge公司
133枚青铜徽章

T500定制 (27)blockchainBTC比特币区块链