文章
全部技术笔记,按发布时间排序。
solidity: bytes 强制类型转化为地址注意点
当 bytes32 转换为 address 时候,需要进行强制转换,通常有两种方式 第一种,转换为 bytes20 然后再转换为 address 第二种,转化为 uint160 再转换为 address 这两种方式看起来差不多,其实输出是不一样的。第一种会取前 20 字节,也就是后面数据截断;第二种是取后 20 字节,
selfdestruct 的两点重要的容易被忽视的逻辑
selfdestruct(address payable recipient) 的作用是销毁当前合同状态,将其资金发送到给定地址,在之前的 solidity 编译器中也叫做 suicide,因其带有负面意义改为 selfdestruct 其中有两点很重要的,而且很容易被忽视的 强制发送余额,不会执行 receive 函
grep 命令中一些需要转义的特殊字符
比如有这样一段文本,需要匹配出中间 ETH 地址 在 nodejs 中可以这样做 但是使用 grep 就不行,没有任何返回 谷歌了一遍才发现, { 和 } 需要进行转义操作 继续尝试了几个操作符, 这个不需要转义,而 + 和 ? 需要转义才可以使用。 为什么在编程语言中最常用的重复类符号在 grep 中需要转义使用?
Solidity 自定义错误类型
从 Solidity 0.8.4 开始,开始支持自定义错误。 231 中说明了在 Solidty 中 revert(string) 调用会被 ABI 编码成 Error(string) ,因为 string 动态数据的存在,会消耗大量的 gas 费用。 新的自定义错误使用类似与 event 的定义方式,使用 error
在跳板机环境下使用 iTerm2 自由上传下载文件
如果远程服务器可以自由与本地通信,那么最简单的方式就是 scp 命令 但是存在跳板机这一个中间层,而且远程服务器不能直接连接,就不能直接使用这种方式。 因为可以通过 SSH 登录远程服务器,那么我们可以直接 SSH 环境下直接上传下载文件,这种方式类似于在 shell 中复制粘贴一样。 首先确认远程服务器和本机机器都安
RegExp.prototype.test() 不要使用全局正则
test() 方法接受一个字符串,如果匹配返回 true。 今天遇到一个坑,如下面所示: 这是因为 regexp 对象内部有个 lastIndex 属性,每次运行都会改变这个 lastIndex 属性,使得正则对象从这个新的索引开始匹配。 所以上面的第二次正则匹配返回了 false。 如果要修改这种错误,可以手动设置
cURL 自定义 Host 请求头
有这样一个场景,服务端配置了下面的 nginx 如果我们要本机或者其它机器直连ip进行测试,直接访问 127.0.0.1 或者 localhost 都是不行的,因为 nginx 会根据 http 请求 host 头来路由。 第一种解决方法,改 /etc/hosts 文件,将 example.com 固定到具体 ip 上
Node.js 定时任务
有这样的一个需求,每 1 秒进行一项任务,那么就可以写成下面的方式: 根据打印日志,可以看到就算任务没有完成,那么也会自动调用 job 为此需要加一个"锁",如果已经加锁,那么不再需要运行 job 如下面日志所示,那么现在任务就顺序执行了 不过这也有个问题,假设需要任务之前间隔是固定的,比如上面的1秒,那么这个解决方式
Solidity 0.8.0 破坏性更新
数值计算默认不会出现溢出 如果溢出会返回 Panic(uint256) 错误,具体值为 Panic(11),ERC20 再也不需要 SafeMath 库了。 如果要开启溢出,那么要加上 uncheck {...} 代码块。 查询 chainid 在 0.8 中,chainid 的获取加上了语法糖,可以在 block.c
Nodejs 中全局 this 的指向
Nodejs 现在支持两种模块机制,一种是 CommonJS,一种是官方规范 ECMAScript 模块。 全局 this 在 CommonJS 不是指向 global(或者说 globalThis),而是指向 module.export。 这是因为 CommonJS 本质上是用函数包裹当前文件生成的一个作用域,所以能