文章
全部技术笔记,按发布时间排序。
使用中转合约减少以太坊多笔转账Gas使用
以太坊中普通交易至少需要 21000 Gas 而合约 transfer 方法仅需要 2300 Gas ,这样可以利用这点节省费用。 部署一个代理合约,使用这个代理合约进行转账,另外也不需要先转入再转出,直接使用合约进行中转 在 Goerli 网络上进行测试,发送了 20 笔转账仅使用了 211,093 Gas 而要是传
k8s 国内源安装备忘清单
注意以下命令,需要切换到 root 后运行 --- 系统:ubuntu 16.04 安装 docker 首先确定已经安装完成 docker,如果没有安装可以使用以下脚本快速安装并配置: 安装 k8s 套件 关闭 swap 为了性能考虑,k8s 需要关闭 swap 功能,然后重启主机。 在 /etc/fstab 中找到带
使用以太坊 CREATE2 操作码实现在线支付系统
假设我们有个一个支持 ETH 支付的线上商城,支付系统怎么设计? 因为 ETH 支持合约,我们可以设计一个单地址合约,让顾客扫描预定义的二维码,二维码含有订单id,当支付成功后发送一个 Pay 事件,订单系统只要监听这个事件即可。不过我们需要设计一整套的系统,包括二维码标准、合约系统等等,而且不能兼容交易所/钱包的转账
获取以太坊交易被Revert的原因
Solidity 0.4.22 支持 require 和 revert 函数加上错误原因的字符串,如果交易被Revert将会返回这个字符串,并编码成 Error(string)。 在测试环境中进行部署后,使用 ethcall 调用: 即可获取到返回结果: 可以看到返回的结果,是使用 Error 进行了 ABI 编码了,
Go: 正确处理 net 包中的错误
Go 网络开发中的常用的应用层协议库都是基于 net 标准库开发的,比如 gorilla/websocket 和 go-grpc,还有最常用的 http 库。 当请求一个不存在的 host 时会返回一个错误,如下所示 这个错误本质其实是 net.DNSError,在 Go 早期开发中,会经常使用接口断言匹配错误。 比如
solidity 处理智能合约转账的安全辅助函数
在智能合约中处理转账,最常见是 Ether 和 ERC20Token 的转账。 在转账 Ether 时,一般我们直接使用 .transfer(uint256)(或者 send) 函数,但是这个函数有个限制,只能使用 2300 gas,而且不能调整,这样就会出现一个问题,如果在合约内转给另一个合约地址,合约内对 fall
solidity: 判断目标地址是否为合约地址的两种方法
目前常用两种方式判断目标地址是否为合约,如下所示 第一种根据目标地址的代码是否为空判断,extcodesize 操作码 gas 消耗为 700。 另一种是根据目标代码 keccack256 的哈希来判断,参考 EIP1052,空值哈希正好是 0xc5d2460186f7233c927e7db2dcc703c0e500b
Go: 按位清除运算符(bit clear)
在 Go 语言中有个特殊的位运算符,使用 &^ 符号表示,包含与操作和取反操作。 《Go语言圣经》里面有对此的描述,z = x &^ y,如果 y 中比特位为 1 那么 z 对应比特位值就是 0,否则 z 就使用 x 对应位置的比特位值。 这种解释方法太绕了,实际执行方式是 x 和 y取反后的值进行与操作。实际应用中,
证书中CommonName和SubjectAlternativeName
这是 github.com 的 https 证书解码后的数据,通过 Subject 字段可以看到证书所有者的基本信息,其中 CN 是 CommonName 的简写,中文常称作通用名称。 当浏览器进行 TLS 握手时是不是通过 CommonName 来判断证书是属于当前域名 github.com 的呢? 答案是否定的,而
ECMA2020: Optional Chaining & Nullish Coalescing
下面这个错误在 JavaScript 中最为常见 unable to get property of undefined or null reference 通常为了解决这个问题,我们可以使用 && 操作符来取对象属性值。 不过当数据很长的时候就特别麻烦,ECMA2020 通过了一项提案Optional Chainin