摘要:
调和级数求和 调和级数:$1+\frac{1}{2}+\frac{1}{3}+\cdots+\frac{1}$是一个发散的序列,求和公式为: \(\sum^{n}_{i=1}{\frac{1}{i}}=ln(n+1)+\gamma\) 其中$\gamma$为欧拉常数,\(\gamma\approx0 阅读全文
摘要:
std::hash 由于C++11引入了哈希表数据结构std::unordered_map和std::unordered_set,所以对于基本类型也实现了标准的哈希函数std::hash,标准并没有规定具体的实现,只是提了几个要求: 不能拋出异常 对于相等的键必须产生相等的哈希值 对于不相等的键产生 阅读全文
摘要:
虚函数 C++用虚函数实现运行时多态,虚函数的实现是由两个部分组成的,虚函数指针与虚函数表。 虚函数指针(vptr)是指向虚函数表的指针,在一个被实例化的对象中,它总是被存放在该对象的地址首位。而虚函数表(vtbl)用于保存类包含的虚函数指针列表: class Base { public: virt 阅读全文
摘要:
RLP RLP(Recursive Length Prefix)递归长度前缀编码,是由以太坊提出的序列化/反序列化标准,相比json格式体积更小,相比protobuf对多语言的支持更强。 RLP将数据分为两类: 字符串 列表(可以包含字符串和列表) 编码规则 字符串长度是1,并且值属于[0x00, 阅读全文
摘要:
空类的大小 空类型不包含任何信息,按理来说它的sizeof应该是0;但C++中要求对于类的每个实例都必须有独一无二的地址,以便能区分出具体的实例,所以编译器往往会设置空类的大小为1字节: class Foo { }; int main() { std::cout << sizeof(Foo) << 阅读全文
摘要:
multiprecision boost中提供的高精度库,支持高精度整型,浮点型等。并且提供统一的接口模板,只需要指定对应的后端类型即可实现对应类型的高精度计算: boost::multiprecision::number<XX_backend> cpp_int_backend 提供高精度整型后端类 阅读全文
摘要:
ethash ethash(eth+hash)是以太坊设计的挖矿算法,为了实现ASIC-resistance,ethash依赖于对内存资源的访问,是一种memory-hard函数。同时为了支持轻节点对区块进行验证,专门设计了cache和dataset一小一大的数据集,小的cache用于验证,大的da 阅读全文
摘要:
比特币区块头结构 字段 大小(Byte) 说明 nVersion 4 区块版本号,表示本区块遵守的验证规则 hashPrevBlock 32 前一区块的哈希值,使用SHA256(SHA256(父区块头))计算 hashMerkleRoot 32 该区块中交易的Merkle树根的哈希值,同样采用SHA 阅读全文
摘要:
账户类型 外部账户(Externally Owned Account, EOA):链上用户的账户,由用户的私钥控制 合约账户(Contract Account, CA):部署智能合约产生的账户,由合约自身的代码控制 计算规则 外部账户:eoa=right160(keccak256(toPublic( 阅读全文
摘要:
snappy snappy是由google开发的压缩/解压C++库,注重压缩速度,压缩后文件大小比其它算法大一些 snappy在64位x86并且是小端的cpu上性能最佳 在Intel(R) Core(TM)2 2.4GHz中测试数据: 压缩速率:~200-500MB/s 解压速率:~400-800M 阅读全文