对于一个给定的地址,如何使用代码来判断它是普通账户还是合约账户?
1.使用web3.js
chain3.mc.getCode() 方法返回指定地址上代码的16进制字符串,由于普通账户地址处没有代码,因此将仅返回16进制前缀 0x。利用这个我们可以进行判断,例如:
var Web3= require('web3');
var web3= new Web3(new Web3.providers.HttpProvider("http://localhost:8545"));
account = "0xe7ff4ca4fbf213d1718bf4be136e689cccfbc3dd";
// 如果是较底版本的web3
var code = web3.eth.getCode(account);
console.log(code);
if(code === '0x')
console.log('普通账户');
else
console.log('合约账户');
// 如果是较高版本的web3,以上代码的 code 会返回"Promise { <pending> }"
// 此时 Promise 要用 then 或以下方式接收
web3.eth.getCode(account,function(error, result){
console.log(result);
if(result === '0x')
console.log('普通账户');
else
console.
本文介绍了如何通过web3.js和Solidity判断一个区块链地址是普通账户还是合约账户。在web3.js中,利用getCode()方法根据返回的16进制字符串前缀进行判断;在Solidity中,通过EVM汇编获取地址的代码大小来区分两者。
订阅专栏 解锁全文
2005

被折叠的 条评论
为什么被折叠?



