Shude Li

Results 29 issues of Shude Li

当 bytes32 转换为 address 时候,需要进行强制转换,通常有两种方式 第一种,转换为 bytes20 然后再转换为 address ```solidity // SPDX-License-Identifier: MIT pragma solidity ^0.8.0; contract Parser { function parse(bytes32 code) public pure returns (address) { return address(bytes20(code)); }...

Solidity

**important: selfdestruct 已被不推荐使用,上海升级中 [eip-6049](https://eips.ethereum.org/EIPS/eip-6049) 已说明会修改或者直接移除这个操作码** --- `selfdestruct(address payable recipient)` 的作用是销毁当前合同状态,将其资金发送到给定地址,在之前的 solidity 编译器中也叫做 `suicide`,因其带有负面意义改为 `selfdestruct` 其中有两点很重要的,而且很容易被忽视的 ## 强制发送余额,不会执行 receive 函数 下面代码 Factory 没有 `receive()` 方法,也会可以执行成功的,当然就算有 `receive()` 方法也不会执行。 ```solidity // SPDX-License-Identifier: MIT...

Solidity

test() 方法接受一个字符串,如果匹配返回 true。 今天遇到一个坑,如下面所示: ```js const regexp = /foo/g; regexp.test('foo'); // true regexp.test('foo'); // false ``` 这是因为 regexp 对象内部有个 lastIndex 属性,每次运行都会改变这个 lastIndex 属性,使得正则对象从这个新的索引开始匹配。 所以上面的第二次正则匹配返回了 false。 如果要修改这种错误,可以手动设置 lastIndex 为 0。 ```js...

Web

有这样的一个需求,每 1 秒进行一项任务,那么就可以写成下面的方式: ```js const job = async () => { console.log(`${new Date().toISOString()}: job running`); await new Promise((res) => setTimeout(res, 5000)); console.log(`${new Date().toISOString()}: job done`); }; const t = setInterval(job,...

Web

如果远程服务器可以自由与本地通信,那么最简单的方式就是 `scp` 命令 ```sh # upload scp local_file remote_username@remote_ip:remote_folder # download scp -r remote_username@remote_ip:remote_folder local_folder ``` 但是存在跳板机这一个中间层,而且远程服务器不能直接连接,就不能直接使用这种方式。 因为可以通过 SSH 登录远程服务器,那么我们可以直接 SSH 环境下直接上传下载文件,这种方式类似于在 shell 中复制粘贴一样。 首先确认远程服务器和本机机器都安装了 `lszrz` ``` # Remote server...

Linux
CheatSheet

1. 怎么获取返回 HTTP 状态码 `curl -I` 可以返回响应头,当然也就包含了响应状态码。 如果想只要状态码,那么可以这样做: ```sh $ curl -sS -w "%{http_code}" -o /dev/null https://www.baidu.com 200 ``` 如果请求失败,那么返回 `000` 2. HTTP 响应状态码 500/400 那么 curl 运行是否也是失败? 否 ```sh...

Linux

比如有这样一段文本,需要匹配出中间 ETH 地址 ``` to match ethereum address 0xbfcc591d028ac556ADD68b21A971fF7930D16384 test text ``` 在 nodejs 中可以这样做 ```js /0x[0-9a-zA-z]{40}/.exec(txt) [ '0xbfcc591d028ac556ADD68b21A971fF7930D16384', index: 23, input: 'match ethereum address 0xbfcc591d028ac556ADD68b21A971fF7930D16384 test text', groups: undefined...

Linux

有这样一个场景,服务端配置了下面的 nginx ``` server { listen 80 443; server_name example.com www.example.com; } ``` 如果我们要本机或者其它机器直连ip进行测试,直接访问 127.0.0.1 或者 localhost 都是不行的,因为 nginx 会根据 http 请求 host 头来路由。 第一种解决方法,改 /etc/hosts 文件,将 example.com 固定到具体 ip...

Linux
Backend

从 Solidity 0.8.4 开始,开始支持自定义错误。 #231 中说明了在 Solidty 中 `revert(string)` 调用会被 ABI 编码成 `Error(string)` ,因为 string 动态数据的存在,会消耗大量的 gas 费用。 新的自定义错误使用类似与 event 的定义方式,使用 error 声明符,可以使用 revert 进行调用,如下所示: ```solidity // SPDX-License-Identifier: GPL-3.0 pragma...

Solidity

## 数值计算默认不会出现溢出 如果溢出会返回 `Panic(uint256)` 错误,具体值为 `Panic(11)`,ERC20 再也不需要 SafeMath 库了。 ```Solidity function transfer(address to, uint256 tokens) public returns (bool) { balanceOf[msg.sender] -= tokens; balanceOf[to] += tokens; emit Transfer(msg.sender, to, tokens); return...

Blockchain