路漫漫其修远兮, 吾将上下而求索

0%

本节视频 https://www.bilibili.com/video/BV1Vt411X7JF/?p=7

比特币挖矿的比较公式:

1
H(block header) <= target

如上边的伪代码, 挖矿的本质就是不断调整 block header 中的 nonce 值, 使得极端出来的 block header 的 hash 值小于某个给定的目标值(其中 target 就是给定的目标值, target 越小说明挖矿的难度越大). 对挖矿难度的调整等同于调整了目标空间在整个输出空间中所占比例的大小.

比特币系统使用的哈希算法为 SHA 256, 整个输出空间的大小为 2 ** 256, 调整目标空间在输出空间中的比例大小是通过调整输出的哈希值前有多少个 0 实现的.

阅读全文 »

本节视频 https://www.bilibili.com/video/BV1Vt411X7JF/?p=5

区块链是一个去中心化的账本, 比特币采用了基于交易的账本模式(transaction-based ledger). 然而, 系统中并无显示记录账户包含比特币数, 实际上其需要通过交易记录进行推算. 在比特币系统中, 全节点需要维护一个名为 UTXO(Unspent Transaction Output尚未被花掉的交易输出)的数据结构. 用于记录比特币系统中尚未倍花出去的比特币的情况.

UTXO 的运行过程如下示例

  • A 有 8 个 BTC, 他给 B 转了 5 个, 给 C 转了 3 个. 此时 B 的 5 个和 C 的 3 个 BTC 都在 UTXO 中
  • B 将自己的 5 个 BTC 转给了别人, 此时他的 BTC 会从 UTXO 中移除
  • 由于 C 始终没有花出自己的 BTC 所以他的 3 个 BTC一直存在于 UTXO 中
阅读全文 »

ele.append 在 Android 6.0 有兼容问题

document.body.append is not a function

具体的兼容性信息参考文档

“专业”的前端开发注意事项

  • 凡是遇到固定大小的内容区域时, 都要考虑内容长度可能超出容器(内容溢出)
    • 数字
    • 金额
  • 凡是有表单提交的地方, 都要考虑表单内容修改的回显能力

不要用 js 进行小数计算

在以前的认识中, 小数的计算确实不好用. 但是可以通过乘以 10 的整数倍, 转成整数之后再进行整数计算 16.666 * 1e3 => 16666. 直到有一天 16.368 * 1e3 => 16367.999999999998, 卧槽, 卧槽, 卧槽…

鉴于此, 对于用户输入的小数点后三位有值的 input 可以先用字符串处理 '16.368'.split('.') 然后转化成 16 * 1e3 + 368 来避免因精度误差可能带来的坑 ~

当然, 时至今日. 我们可以使用 bignumber.js 来处理数字计算, 可以避免小数精度丢失和大数超出范围的问题

数据统计相关小 Tips

  • 凡是计算平均值, 百分比的运算, 都要考虑所有项都是 0 的情况, 因为 0 / 0 = NaN
  • 遇到需要全局唯一的变量时, 用一个自增变量比费劲搞随机字符串时间戳之类的东西靠谱方便
  • 始终返回值都是布尔值的函数, 函数名称推荐用 is 开头, ex: isSameColor