09 2020 档案
摘要:调和级数求和 调和级数:$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
阅读全文