分类
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