如何检查地址是否是以太坊区块链上的现有地址?

Ste*_*ath 4 ethereum solidity smartcontracts

如果我想检查 Solidity 中是否存在我的以太坊区块链上的地址,该怎么办?

当查看solidity.readthedocs时,有一个函数balance可以被使用/误用来检查地址是否有效/是否有余额:

address x = 0x4e5d039c5516b69a4b6b1f006cbf4e10accb5cfa; // this is an example address which does not have valid checksum....
if (x.balance > 0) // Return true when valid ??
Run Code Online (Sandbox Code Playgroud)

这可能吗 ?

我还发现了一些关于如何找到 if-an-ethereum-address-is-a-contract 的参考资料,但我不确定这是否会有帮助。

Ada*_*nis 5

没有一个有保证的方法。您可以得到的最接近的方法是验证该地址的格式是否正确(20 字节十六进制)并且不是合约地址(您链接到的地址)。从那里,该地址被视为有效的 EOA 帐户。当然,您仍然可以将以太币发送到某人输入错误的有效地址,因此即使检查该地址的余额也不会产生您正在寻找的结果(而且,地址正确并且没有里面有乙醚)。大多数钱包都支持校验和,这可以为您提供更多保护,但仍不能保证该地址正在使用中。

如果您正在使用私有区块链并完全控制帐户创建,则假设您可以将映射中创建的每个帐户存储在 AccountManager 合约中,并使用合约中的修饰符来检查该列表。