![](https://img-blog.csdnimg.cn/20201014180756922.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
区块链
文章平均质量分 64
maxdaic
这个作者很懒,什么都没留下…
展开
-
BIP32有bug?
今天看到微信公众号的一片文章,介绍HD钱包的,其中有一段让我大跌眼镜BIP32中一个已知的漏洞是前文提到的同时分发父公钥和子私钥情况下,父私钥将处于危险之中。在2013年,Vitalik在Bitcoinmagazine的博客中已经指出这一风险,并使用代码进行论证。他分别对Electrum钱包和BIP32钱包进行测试,结果显示,通过已知父公钥和子私钥,不仅可以获得同级对其他子私钥,还可以破解得出父私钥。因为我之前自己写代码实现过BIP32,所以我对其中的算法细节还算是很清楚的。猛地看到说这里面居然原创 2021-02-08 14:07:11 · 218 阅读 · 1 评论 -
读区块链也要消耗gas?
最近写智能合约代码发现一个问题,我写了一个读区块链的函数,结果发现这个读区块链的函数执行后居然上链了!这有点颠覆我的认知,我一直以为只有写区块链才需要上链,因为写区块链会导致区块链状态发生改变。而读区块链应该不会才对!经过我不断的怀疑,测试,验证终于发现一个秘密。下面就是我读区块链功能类似的代码,我用更直接的方式写出来:pragma solidity >=0.4.0 <0.7.0;contract Hello { string hello = "hello, world";原创 2020-09-27 10:11:30 · 675 阅读 · 0 评论 -
FISCO BCOS 国密版的哈希函数
FISCO BCOS既可以部署国密版的区块链,又可以部署非国密版的区块链,同时两者都支持solidity语言编写的智能合约。但让我好奇的是,在国密版的链上有没有实现对应的国密版哈希函数,验签函数?例如,在非国密版的区块链上,可以用solidity写keccak256函数来对一段内容做哈希运算。那在国密版中是不是有对应的sm3函数来做这样的哈希运算?还是国密版的keccak256函数底层使用了sm3函数?为了弄清楚这一点,我写了一些测试代码进行测试智能合约代码如下:pragma solidity原创 2020-09-01 19:41:18 · 517 阅读 · 0 评论 -
最简单的P2P加密聊天软件开发准备
今天准备写个最简单的加密聊天软件练练手。核心的就三样东西:P2P通信密钥交换加密解密消息暂时不支持图片等复杂的聊天功能,只支持字符聊天。下面是我做的两个功能测试代码:1. AES-128位加密解密package researchimport ( "crypto/aes" "crypto/cipher" "crypto/rand" "encoding/hex" "io" "testing")func TestAes(t *testing.T) { ke原创 2020-07-20 17:52:10 · 665 阅读 · 0 评论 -
ChainLink的VRF并没有想象中那么好
很早的时候,ChainLink就声称自己做出了VRF功能。我当时也是很兴奋,去实操了一把,还专门写了一篇文章记录这件事。但那次我总感觉怪怪的,我一直觉得ChainLink并没有解决VRF的问题,前几天我在ChainLink微信群里和几个网友讨论了一下,结果我更坚信自己的判断:ChainLink根本就没有解决VRF问题,他的解决方案有很大的问题,甚至可以毫不客气的说,他在瞎搞,把水搅浑,让大家以为他解决了,其实并没有。先看这篇ChainLink官方发的文章:https://learnblock原创 2020-07-11 19:10:02 · 882 阅读 · 1 评论 -
coinbase交易里的第三个output是什么?
最近在研究比特币挖矿软件,当接触到coinbase交易的时候,我看了一下最新的coinbase交易的内容,然后就被一个大大的问号砸到了。看下图:我知道第一个output存放是旷工的锁定脚本,用来存放旷工的挖矿和交易手续费所得的UTXO。第二个output是一个commitment,用来存放隔离见证数据的commitment,它的格式和计算方法如下: 1-byte - OP_RETURN (0x6a) 1-byte - Push the following 36 bytes (0原创 2020-07-11 12:30:14 · 231 阅读 · 0 评论 -
base58编码与解码实现
Base58编码是比特币地址生成算法中的最后一个步骤。算法简单,和上大学时候学过的十进制转十六进制一样,只不过现在变成了十进制转58进制,核心过程就是不断的除58求余。下面是Go语言的实现过程:func Base58Encode(data []byte) string { var ( alphabet = "123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz" bigNum = new(big.Int).SetBytes(da原创 2020-06-19 11:19:45 · 2201 阅读 · 0 评论 -
分层确定性钱包为什么用父私钥和父公钥能推导出相同的子公钥?
用父私钥推导子私钥,可以推导出两种子私钥,一种是普通的子私钥,一种是增强型子私钥。而题目里说的相同的子公钥其实只是普通的子公钥。也就是说,用父公钥是无法推导出相同的子公钥的。用普通父私钥推导子私钥的过程是这样的:childExtendKey = HMAC-SHA256(父公钥 | 子索引号,父链码)而childExtendKey由64字节组成,前32字节是子扩展私钥,后32字节是子链码子私钥 = 父私钥 + 子扩展私钥子公钥 = (子私钥 mod secp256k1.N)*secp25原创 2020-06-17 10:34:10 · 793 阅读 · 3 评论 -
我对区块链行业的一点不成熟的想法
我是2017年的年中才开始关注到区块链行业并入职一家区块链小公司的。我做区块链的初衷,只是为了实现弯道超车。因为我毕业后一直在一家公司从事嵌入式方面的工作,后来觉得这一行的薪水不高,并且经常受限于硬件方面。加上我自己曾经努力想补好硬件方面的短板而屡屡受挫,不得不承认自己很不适合做硬件方面的工作,所以不得不给自己在嵌入式方面判了"死刑"而转投互联网。入门互联网行业后,磕磕碰碰做了一些软件开发和系统维护方面的工作,深感自己要学的东西非常多,要短期超越同行非常难,何况我还是个半路出家的。机缘巧合之下,我关注到了原创 2020-06-13 08:28:17 · 393 阅读 · 1 评论