过滤掉 web3.js 中的空地址

Posted

技术标签:

【中文标题】过滤掉 web3.js 中的空地址【英文标题】:Filter out empty address in web3.js 【发布时间】:2018-09-30 22:19:54 【问题描述】:

如何检测web3.js中初始值为0x0000000000000000000000000000000000000000的空地址?

我现在做的是:

if (address !== '0x0000000000000000000000000000000000000000') 
   ...

有没有更简单的方法来过滤掉空地址或 web3 中可以创建此值的辅助方法(如 Solidity 中的address(0))?计算(或输入)0s 的确切数字非常麻烦。

【问题讨论】:

也许web3.toBigNumber(address).isZero()? @smarx 很高兴知道 web3 依赖于 BigNumber 库。为什么我不能这样想……太棒了。 您可以将其发布为答案,我可以将其标记为已接受。看来你的建议是迄今为止我能想到的最好的。 【参考方案1】:

除了@smarx 的方式:web3.toBigNumber(address).isZero()

您可以使用更短的简单正则表达式:

const emptyAddress = /^0x0+$/.test(address);

【讨论】:

不错的一个!我认为/^0x040$/ 可能更清楚,因为以太坊中的地址是 20 个字节? 是的,我知道,但如果你使用:web3.toHex(0),它只会给你0x0,谁知道,如果以太坊增加地址长度,这段代码仍然有效;) 好收获。这将是您在 web3 端生成一个空地址的情况。谢谢。【参考方案2】:

您也可以使用 OpenZeppelin 的测试助手。

他们有一个名为ZERO_ADDRESS 的常量,等于你提到的零地址。

More Info Here

用法

首先,你需要安装:

npm install @openzeppelin/test-helpers

在JS文件中:

const constants = require('@openzeppelin/test-helpers');

console.log(constants.ZERO_ADDRESS);

【讨论】:

不应该是const constants = require('@openzeppelin/test-helpers');吗?

以上是关于过滤掉 web3.js 中的空地址的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 web3 js 通过地址获取令牌交易列表

Web3js - 部署后立即返回智能合约地址

发送以太坊交易,Web3.js 没有源地址,但有源私钥?

使用 web3.js 获取钱包地址拥有的所有 NFT

为啥 web3.js 拒绝有效的 RSK 智能合约地址?

使用 Web3.js 获取从特定地址收到的令牌总量