分类
Uncategorized

将c++函数转换为python:sha256哈希不匹配

这与比特币无关,但它使用了大部分比特币代码库。我想把一些c++代码翻译成python,但是很难把散列正确。
这是我尝试得到的函数。哈什正在做一个双sha256
uint256-CalcKernelHash(const uint256&stakeModifier,int64\t height,int64\t coinstakeTime,const uint256&masternodeID,const consensis::Params&Params){
//计算哈希
CDataStream ss(SER\u GETHASH,0);
ss<<stakeModifier<<coinstakeTime<<GetMnCollateralAmount(int(height))<<masternodeID;
标准::cout<<“\n————————————-\n”;
std::cout<<“调试[”<<coinstakeTime<<“]collateralamount:”<<GetMnCollateralAmount(int(height))<<“\n”;
std::cout<<“调试[”<<coinstakeTime<<“]ss:”<<stakeModifier.ToString()<<coinstakeTime<<GetMnCollateralAmount(int(height))<<masternodeID.ToString()<<“\n”;
std::cout<<“调试[”<<coinstakeTime<<“]哈希:”<<哈希(ss.begin(),ss.end()).ToString()<<“\n”;
返回哈希(ss.begin(),ss.end());
}
这里叫做
const auto hashprooftofstake=uintotoarith256(CalcKernelHash(stakeModifier,height,coinstakeTime,masternodeID,params));
std::cout<<“调试[”<<coinstakeTime<<“]coinstakeTime:”<<coinstakeTime<<“\n”;
std::cout<<“调试[”<<coinstakeTime<<“]nbits:”<<nbits<<“\n”;
std::cout<<“调试[”<<coinstakeTime<<“]hashprooftostake:”<<hashprooftostake.ToString()<<“\n”;
std::cout<<“调试[”<<coinstakeTime<<“]stakeModifier:”<<stakeModifier.ToString()<<“\n”;
std::cout<<“调试[”<<coinstakeTime<<“]主节点ID:”<<主节点ID.ToString()<<“\n”;
我添加了一些调试语句来检查输出,并提供了一个参考
——————————–
调试[1622528110]押品:2000000000
调试[1622528110]ss:F541F372005BEEB8952F964EA638527341C3B3A6EEBB0C009E4F092BD6C1B0E16225281102000000E2CFE3F576DA4999EA2268224F34EFDD3B0D567841D561B41B3AB67976C977D1
调试[1622528110]哈希:e4b0d1b01a99d00e44d41eeb37c81d19940bf71270994fff53ea5caa1c79f663
调试[1622528110]coinstakeTime:1622528110
调试[1622528110]编号:419654358
调试[1622528110]哈希证明:e4b0d1b01a99d00e44d41eeb37c81d19940bf71270994fff53ea5caa1c79f663
调试[1622528110]桩修改器:F541F372005BEEB8952F964EA638527341C3B3A6EEBB0C009E4F092BD6C1B0E
调试[1622528110]主节点ID:e2cfe3f576da4999ea2268224f34efdd3b0d567841d561b41b3ab67976c977d1
这是我在python中的试用
导入binascii
导入hashlib
定义旋转(x):
s2=bytearray.fromhex(x)
s2.反向()
返回binascii.hexlify(s2).decode()
def PADHEAX(s):
返回s[2:].zfill(16)
def CalcKernelHash(stakeModifier、coinstakeTime、masternodeId):
stakeModifier=binascii.unhexilify(stakeModifier)
coinstakeTime=binascii.unhexilify(“%x”%coinstakeTime)
抵押品=binascii.unhexlify(“0%x”%2000000000)
masternodeId=binascii.unhexlify(masternodeId)
bin_s=存储修改器[::-1]+coinstakeTime[::-1]+抵押品[::-1]+主节点ID[::1]
打印(纸盒)
返回rotate(hashlib.sha256(hashlib.sha256(bin\s).digest()).hexdigest())
CalcKernelHash(’F541F372005BEEB8952F964EA638527341C3B3A6EEBB0C009E4F092BD6C1B0E’,1622528110’,e2cfe3f576da4999ea2268224f34efdd3b0d567841d561b41b3ab67976c977d1’)
当我使用调试输出中的参数执行时
CalcKernelHash(’F541F372005BEEB8952F964EA638527341C3B3A6EEBB0C009E4F092BD6C1B0E’,1622528110’,e2cfe3f576da4999ea2268224f34efdd3b0d567841d561b41b3ab67976c977d1’)
‘f01ba34ac7a897a1e37d61bac3a8ea6f0126c2ae883a2d75dab1f407d40aad0b’
我应该在哪里获得e4b0d1b01a99d00e44d41eeb37c81d19940bf71270994fff53ea5caa1c79f663的哈希证明

编辑:
bin\u s返回b’\x0e\x1bl\xbd\x92\xf0\xe4\t\x03\x0c\xbb\xee\xa6\xb3\xc3AsR8\xa6N\x96/\x95\xb8\xee[\x00r\xf3A\xf5n\xd0\xb5`\x00 J\xa9\xd1\x01\xe2\xcf\xe3\xf5v\xdaI\x99\xea“h”O4\xef\xdd;)\rVxA\xd5a\xb4\x1b:\xb6yv\xc9w\xd1′
编辑2:
哈希定义
/**计算对象的256位哈希*/
模板<T1型>
inline uint256散列(const T1 pbegin,const T1 pend)
{
static const unsigned char pblank[1]={};
uint256结果;
CHash256().Write(pbegin==pend?)pblank:(const unsigned char*)&amp;pbegin[0],(pend pbegin)*sizeof(pbegin[0])
.Finalize((unsigned char*)和result);
返回结果;
}
蟒蛇
sha256型
c级++
分享
打印此问题
跟随
%1小时前
6小时前问的
克里斯
12344青铜徽章
新贡献者
你能用python打印垃圾箱吗?调试散列不匹配的最佳方法是在5小时前将完整数据打印为散列(称为preimage)–mccc
修改了答案-克里斯5小时前
你好,我几乎解决了这个问题,但有一个问题:2000000000的附带价值,可能是十六进制字节数组,是奇数长度???3小时前的MCCCS
我认为是原图印刷不好的情况。你能为(auto i:ss)std::cout<<std::hex<<i;作为哈希计算前的单行调试语句,并在此处添加其输出?—作为哈希计算前的单行调试语句,并在此处添加其输出?3小时前的MCCCS
它只输出垃圾!#c#b“~tW还添加了散列定义–Chris 3小时前
再显示4条评论
1个答案
1
def CalcKernelHash(stakeModifier、coinstakeTime、masternodeId):
stakeModifier=binascii.unhexilify(stakeModifier)
coinstakeTime=binascii.unhexlify(十六进制(coinstakeTime)[2:])
抵押品=binascii.unhexilify(“0000000000204A9D1010000”)
masternodeId=binascii.unhexlify(masternodeId)
bin_s=存储修改器[::-1]+coinstakeTime[::-1]+抵押品[::1]+主节点ID[::-1]
打印(binascii.hexlify(bin_s))
返回rotate(hashlib.sha256(hashlib.sha256(bin\s).digest()).hexdigest())
分享
改进这个答案
跟随
%1小时前
%1小时前
监控化学品
913855金徽章2222银徽章5454铜徽章
就是这样。如何正确地序列化字符串,使其得到与c++中uint256类型相同的结果?stakeModifier的调试输出是它的ToString()版本。克里斯4小时前
@Chris你能给我完整的python源代码吗(Full=可以运行的代码,但不是软件的全部源代码。例如,我需要4小时前运行这个python代码的代码
在上面编辑。在上面编辑。所需要的只是导入hashlib和binascii–Chris 4小时前
好极了!谢谢-克里斯一小时前
不客气!MCCCS 1小时前
添加评论

时光素材-香车美女  (19)blockchainBTC比特币区块链www.qkl91.com

分类
Uncategorized

当每枚硬币的成本如此之大的时候,BTC怎么能成为一种有用的货币呢?

几个相关的问题。首先,假设BTC价值5万美元,这意味着购买杂货可能是0.002BTC。三明治可能是0.0000598。有没有一个系统已经被提议有更好的单位?1美分等于0.000002BTC,我们会有精度问题吗?
其次,在2100万BTC的硬限制和80亿世界人口的情况下,我们说的是每个人平均可以拥有大约0.0025BTC。按目前的市值计算,约为100美元。相比之下,美国有大约40万亿美元的普通现金,如果我没有犯一个愚蠢的错误,大约是BTC市值的40-60倍(这取决于你读到这篇文章那天的价值)。
这难道不意味着BTC要成为一种现实世界的货币,它已经很高的价值最终必须达到每枚硬币200万美元。此时,您的2.99美元三明治将花费0.000001495,我们需要9个小数位来准确计算,相当于今天的1美分。
作为一个新来者,BTC计划如何解决这些问题,成为一种实用的日常货币?这是一件小事,还是一个问题?
付款
分享
改进这个问题
跟随
两小时前问的
男孩先生
11122青铜徽章
添加评论
1个答案
0
今天1美元是0.000027 BTC,也就是2700 Satoshi,所以1美分是27 Satoshi
你上一次购买总成交价为一美分的东西是什么时候?
如果比特币的价值如你所说的那样增长,那么就需要一个更小的单位。我认为闪电网络已经可以用millisatoshi来衡量交易了——比它小一千倍。
所以,这不是什么大问题。
相关问题:
什么是millisatoshi?我以为satoshi是最小的单位?
为什么我们可以拥有比特币的一小部分?
你能为连锁交易支付的最低费用是多少?
分享
改进这个答案
跟随

时光素材-香车美女  (189)blockchainBTC比特币区块链www.qkl91.com

分类
Uncategorized

-regtest generate 101不工作

我打字的时候
比特币cli-regtest generate 101
在powershell中,它给了我以下错误:
PS C:\Program Files\Bitcoin\daemon>/Bitcoin cli-regtest生成101
错误代码:-32601
%1个错误消息:
我也在regtest中运行bitcoind,这是我收到的关于bitcoind的最后一条消息:
将固定种子节点添加为DNS似乎不可用。
请帮忙
比特币核心
比特币cli
正确的
分享
打印此问题
跟随
1月2日11:50编辑
迈克尔·福克森
590277银徽章2222铜徽章
12月20日11点54分被问到
纽杜德
4355青铜徽章
您是否正在尝试生成此处描述的地址:bitcoin.stackexchange.com/a/89397?Prayank 12月2日12:16
@是的,现在可以了,谢谢-纽杜德12月2号20点18分33秒
伟大的。你可以在下面回答你自己的问题来提及对你有用的命令。普拉扬克12月3日1:29
添加评论
1个答案
0
答案是:
比特币cli-regtest generatetoaddress<nblocks><address>
分享
改进这个答案
跟随
12月3日8:20答复
纽杜德
4355青铜徽章
添加评论

时光素材-香车美女  (188)blockchainBTC比特币区块链www.qkl91.com

分类
Uncategorized

如何计算BitcoinJS原始交易的费用?

有一个具有3个输入和2个输出的事务。1输出是收件人,另一个输出是更改地址。我应该如何计算费用并将其应用于产出?
交易
交易费用
原始事务
比特币
分享
改进这个问题
跟随
编辑时间:5月5日15:02
监控化学品
911355金徽章2222银徽章5454铜徽章
5月20日13:24问
拉贾比阿米罗生
1111青铜徽章
4
这能回答你的问题吗?使用bitcoinjs指定费用金额–MCCCS 5月5日15:01
你的问题有点误会。如果你在搜索“交易费”后阅读了一些热门内容,我想你会问一个更好的问题。你的意思可能是,“如何在BitcoinJS原始事务中设置费用?”但即使这样,你也不会意识到费用只是输入和输出之和之间的差异。或者你想在选择费用时征求意见(bitcoin.stackexchange.com/questions/64443/…)—Dave Scotese 5月29日1:01
添加评论
1个答案
0
发送费用是所有输入值和所有输出值的总和之差。如果你只看一个TX,你可以看到所有的输出值,但是你怎么得到输入值呢?它们不包括在TX本身中。您必须做的是查找每个TX输入所使用的UTXO,以及它们的总值(用于跟踪和处理所有输入硬币的数据结构称为“视图”)。
请注意,没有“向输出应用费用”。TX没有额外的费用字段或属性,费用本身也不会占用整个输出。
如果您正在构建一个输入值正好等于输出值的TX,您可以通过减少其中一个输出值来“包含”费用。
分享
改进这个答案
跟随

时光素材-香车美女  (187)blockchainBTC比特币区块链www.qkl91.com

分类
Uncategorized

在electrum中生成BTC旧地址的命令是什么?

什么命令在electrum中生成BTC旧地址?
下面是一个示例命令:
createnewaddress()
比特币核心
驻极体
分享
改进这个问题
跟随
21小时前问的
坝驿
5555青铜徽章
添加评论
1个答案
2
创建新地址的命令与问题中提到的相同:
createnewaddress()
您只能在带有“标准”种子的钱包中创建P2PKH(旧)地址:
创建标准种子的命令:
制作种子(种子类型=“标准”)
对于带有bech32地址的钱包,“standard”可以替换为“segwit”
使用上述命令返回的种子创建新钱包:
文件->新->标准钱包->我已经有一个种子了
分享
改进这个答案
跟随
18小时前回答的
普拉扬克
378911金徽章66银徽章1818铜徽章
文件->新->标准钱包->我已经有一个种子不工作默认是bech32地址不能更改为传统或脚本地址14小时前
如果您输入“标准”种子,您将在种子类型中看到标准;如果您输入“segwit”种子,您将在种子类型中看到segwit–Prayank 14小时前
谢谢,这很管用13小时前
添加评论

时光素材-香车美女  (186)blockchainBTC比特币区块链www.qkl91.com

分类
Uncategorized

如何从app.thorswap.finance(一个本地BTC跨链交换系统)获取比特币私钥?

我正在测试app.thorswap.finance以获得本地比特币。据说Thorchain是一种跨链交换服务,没有集中的参与方。在这个应用程序中,我生成了一个密钥库文件,它附带了一个比特币地址。我假设当我把BTC发送到这个地址时,它在我的控制下,直到我想把它换成另一个硬币。如何访问我的密钥库生成的app.thorswap.finance上的比特币私钥?
私钥
恢复私钥
索查恩
交叉链互换
分享
改进这个问题
跟随
5月20日20:04问
帕托希パトシ
98631414金徽章7070银徽章134134铜徽章
添加评论
1个答案
0
钱包选项卡>点击文件夹图标按钮“查看短语”
去https://github.com/xchainjs/xchainjs-lib/blob/master/packages/xchain-bitcoin/src/client.ts. 用你想要的货币代替比特币。
用Ctrl+F在页面上搜索“RootDerivationPaths”。
然后你会发现类似的东西(这个例子是针对比特币的):
根派生路径={
主网:`84’/0’/0’/0/`,
测试网:`84’/1’/0’/0/`,
},
删除最后一个/0/,添加m/(例如m/84’/0’/0’)。
导入您计算的派生路径和Electrum中的短语
分享
改进这个答案
跟随

时光素材-香车美女  (185)blockchainBTC比特币区块链www.qkl91.com

分类
Uncategorized

为什么WIF包含网络?

当从私钥创建WIF时,在开始散列和添加校验和之前,必须在十六进制字符串的开头插入一个特殊字节:对于MainNet为0x80,对于TestNet为0xef。
WIF中有没有特别的原因?如果只做散列运算并在没有网络字节的情况下添加校验和,不是更好(更通用)吗?这背后有什么意义,WIF机制的创始人为什么决定走这条路?
只是为了我的理解。。。
私钥
钱包导入格式
分享
改进这个问题
跟随
22小时前问的
汉海因茨
4111青铜徽章
新贡献者
添加评论
2个答案
4
作为WIF格式的最初作者,老实说:这个问题我从来没有想到过,但我认为它确实有意义。
当时唯一存在的Base58Check格式是mainnet和testnet的P2PKH地址格式,它有一个网络字节。为了创建WIF格式,我只是修改了它以设置版本字节的高位,并将有效负载从公钥散列更改为私钥。
请注意,这是在种子短语、确定性钱包或备用币出现之前。有人想在多个网络上重用同一个密钥的想法并不适用。
回想起来,我认为这是一个合理的选择。您不应该跨网络(或一般应用程序)重用密钥。
分享
改进这个答案
跟随
16小时前回答的
彼得·维尔
68.1k88金徽章146146银徽章223223铜徽章
添加评论
1
WIF代表Wallet Import Format,它是从钱包导入和导出密钥的标准化方案。因此,包含诸如网络字节之类的元数据是有意义的,这样钱包就知道什么网络是私钥,而不是为每个支持的网络尝试私钥。如果您只想编码密钥本身,而不想编码元数据,那么可以使用十六进制进行编码。
分享
改进这个答案
跟随

时光素材-香车美女  (184)blockchainBTC比特币区块链www.qkl91.com

分类
Uncategorized

是否可以捕获网络事件而不占用整个节点?提问

你可能会觉得我的问题相当不切实际或胡说八道。但我必须在这里问。
我想捕获通过主网络传播的所有事务,并检测是否有新的块被挖掘。我不想成为一个完整的节点或spv节点。从技术上讲,我知道这正是所有full/spv节点时不时所做的。然而,我找不到一个很好的参考来教我怎么做。
这是一种方法吗?任何技术资源都将不胜感激。
客户
网络
分享
改进这个问题
跟随
两天前问的
达伍德法拉哈蒂
12344青铜徽章
新贡献者
这是可能的,但你必须相信别人昨天的普拉扬克
@Prayank听起来不错。请你详细说明一下好吗Dawood Falahati昨天
添加评论
2个答案
2
希望捕获通过主网络传播的所有事务,并检测是否有新的块被挖掘。我不想成为一个完整的节点或spv节点。从技术上讲,我知道这正是所有full/spv节点时不时所做的。然而,我找不到一个很好的参考来教我怎么做。
显然,完整节点和SPV节点必须从某处获取它们的信息。而某个地方只是P2P网络上的其他节点。
P2P协议是节点用来相互通信的协议。有一些关于https://developer.bitcoin.org/devguide/p2p_network.html,一些关于https://en.bitcoin.it/wiki/Protocol_documentation). 它的现代变化被提议为BIPs(https://github.com/bitcoin/bips),通常是向后兼容的更改,仅在支持它的客户端之间使用。
具体地说,事务通过首先使用“inv”消息宣布它们的散列来转发。然后,接收方选择从哪个对等方获取完整的事务数据,并发送“getdata”消息。然后,选定的对等方以“tx”消息进行响应。还有其他可用的机制,例如旧的(并且基本上已经废弃的)BIP37事务过滤和新的BIP157客户端过滤。
对于积木来说,要复杂一些。该序列首先使用“getblocks”请求块信息,然后用“inv”对块进行响应,“getdata”请求完整数据,并用“block”对完整块本身进行响应。BIP152压缩块提供了一种更有效的机制,使接收方能够避免在已经拥有的块中接收事务。BIP130 sendheaders支持使用“header”消息而不是“inv”消息来宣布块的替代方法。
那么,完整节点与SPV节点或其他节点的区别是什么呢?他们执行的验证级别。完整节点将完全验证它接收到的所有块和事务。如果你不想这样做,就不要这样做-如果你愿意相信你所联系的人。你可以自己实现P2P协议,或者使用现有的实现(很多语言中都有),连接到任何你喜欢的对等点,如果你做得对,他们会开始给你一个块和事务流。
分享
改进这个答案
跟随
16小时前回答的
彼得·维尔
68.1k88金徽章146146银徽章223223铜徽章
添加评论
2
中微子是轻客户端和改进版的SPV节点:https://bitcoin-s.org/docs/getting-setup#neutrino-节点
有其他方法可以获得有关事务和块的信息,但您必须信任其他人:
对一个或多个块资源管理器使用API。例子:https://mempool.space/api
请少数运行节点的人广播此信息。示例:我们已经在某种程度上信任管理DNS种子的人员,这样他们就可以使用自己的节点广播有关事务和块的信息。
对整个族使用一个节点。示例:设置一个完整的节点,供本地网络中的每个人使用。如果你和可以信任的家庭成员住在一起,而且你已经在家里的所有设备上使用了相同的Wi-Fi。

时光素材-香车美女  (183)blockchainBTC比特币区块链www.qkl91.com

分类
Uncategorized

如何实现位于比特币区块链文件夹之外的多个钱包文件夹?

经过大量的研究,我找不到任何解决方案,这个看似简单的比特币核心应用程序的实现。
以下是我试图实现的目标:在一台计算机上运行一个完整的节点需要多达400GB的驱动器存储空间。看来,经过我的研究,如果一个人想从同一台电脑上访问多个钱包,那么每个钱包都必须从一个不同的文件夹中运行,否则比特币核心会做出奇怪的行为,拒绝启动,或者要求用户创建一个新的钱包。除此之外,还要求每个钱包使用不同的快捷方式启动,这是完全可以接受的。
我正在运行一台Windows7计算机,它可以在辅助数据硬盘上存储1TB的数据。第一个驱动器是SSD,严格用于操作系统和软件安装。持有整个比特币区块链是可以的,但持有2个或3个副本是不可能的,而且会有点可笑,因为X乘以400GB的相同数据是没有意义的。我想做的是能够通过自己的快捷方式推出一个不同的钱包。经过几次实验,我发现这样做的唯一方法是每次我想运行一个钱包时,我必须将一大堆与该钱包相关的文件替换到\bitcoin文件夹中。这是一项乏味的任务,也是一种相对不安全的做事方式。这种做法容易出错,可能会有丢失一些比特币的风险。
我试过捷径选项
–walletdir=D:\所有钱包\MyWalletA\
但这不起作用的原因。参数被完全忽略而不产生任何错误。我发现唯一可行的方法是将整个区块链3X保存到3个不同的文件夹中,并用适当的快捷方式启动其中任何一个文件夹。一个需要1.2TB的选项没有实际意义,因为它占用了太多的硬盘内存。
所以问题是:
我如何存储一个位于FolderA的与D:\比特币完全不同的钱包\
(如果D:\比特币\将是完整的区块链位置)?
如果我能做到这一点,那么我也可以创建任意数量的FolderB,FolderC,FolderD来存放我不同的钱包,当我需要做交易时,我可以启动任何一个钱包(不是同时启动)。所有这些文件夹都可以存储钱包文件,但不能存储整个区块链。谢谢你的帮助
比特币核心
块链
钱包.dat
分享
改进这个问题
跟随
4月26日19:03问
弗雷德·凯洛
12311银徽章66铜徽章
1
请告诉我这是否解决了您的问题:bitcoin.stackexchange.com/a/103317–Prayank 4月26日22:25
@普拉扬克,这个建议解决不了问题。我用“-datadir=D:\SomeFolder”做了实验,效果很好。问题仍然是wallet.dat文件必须位于D:\SomeFolder中,比特币核心才能正常打开。如果钱包里没有比特币核心,就会迫使你创建一个新的。我肯定有解决办法。还在找。谢谢–Fred Cailloux 4月27日15:27
您可以同时装入多个钱包15小时前的皮特·维尔
添加评论
1个答案

围绕钱包位置限制的一项工作是,在\bitcoin文件夹中可以有一个子文件夹,例如,\AllWallets。在这个子文件夹中可以有许多子文件夹,其中包含每个钱包所需的文件。这些文件是Wallet.dat、.walletlock和db.log
当bitcoin-qt.exe在没有钱包的情况下启动时,它将提醒用户创建一个新钱包或使用“文件>打开钱包”菜单,并提供打开位于每个子文件夹中的任何子文件夹钱包文件。例如,可能有3个子文件夹名为\JackWallet、\AlfredWallet和\JoeWallet。
用户可以根据需要打开任意多个钱包。选择框将出现在右上角的比特币qt GUI中。此选择器将提供与任何一个当前打开的钱包。这样,用户能够利用其选择的钱包进行支付或任何其他操作变得非常方便。选择的变化很快,看起来很实用。
为了熟悉这个新发现的特性,还需要更多的实验。虽然这并没有解决钱包位置不在\bitcoin文件夹中的限制,但它确实使GUI更方便地使用多个钱包。
分享
改进这个答案
跟随

时光素材-香车美女  (182)blockchainBTC比特币区块链www.qkl91.com

分类
Uncategorized

如果有人有商业账户想给我寄比特币,我的钱包里需要最低存款额吗?

如果他们有一个金额很高的商业账户,我需要至少£他们能在我的550里转移吗?
欺诈
分享
改进这个问题
跟随
5月25日15:19编辑
墨奇♦
54.3K33232金徽章150150银徽章469469铜徽章
5月25日13:23问
霍莉
311青铜徽章
新贡献者
相关网站:bitcoin.stackexchange.com/q/103891/5406–Murch♦ 5月25日15:19
添加评论
1个答案
2
不,任何声称这样的东西都是骗局。
分享
改进这个答案
跟随

时光素材-香车美女  (181)blockchainBTC比特币区块链www.qkl91.com