以太坊合约地址错误是怎么回事
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了以太坊合约地址错误是怎么回事相关的知识,希望对你有一定的参考价值。
参考技术A 使用web3.jsweb3.eth.getCode()方法返回指定地址上代码的16进制字符串,由于普通账户地址处没有代码,因此将仅返回16进制前缀0x。利用这个我们可以进行判断,例如:
var code = web3.eth.getCode("0xbfb2e296d9cf3e593e79981235aed29ab9984c0f")
if(code === '0x') console.log('普通账户')
else console.log('合约账户')
在solidity中实现
在合约内,可以使用EVM汇编代码来获取指定地址处的代码大小,显然,普通账户地址将返回0:
contract EzDemo
function isContract(address addr) returns (bool)
uint size;
assembly size := extcodesize(addr)
return size > 0;
参考技术B 可能是你的一台放屁的服务器出现了问题,或者是嗯这个服务器暂时有问题,IP地址有问题,都可能出现这样的情况。 参考技术C 1、核心共识协议;3、智能合约协议。智能合约使新的加密资产成为可能,而新资产很快又能成为抵押品,使更多新资产成为可能,所有这些都基于底层核心共识协议才有可能。因此 2)「资产」和 3)「智能合约协议」其实都依赖于 1)「核心共识协议」,这意味着「资产」和「智能合约协议」的去中心化程度不可能超出「核心共识协议」的去中心化程度。由于「核心共识协议」是「资产」和「智能合约协议」建于其上的基础层,所以「核心共识协议」决定了「资产」和「智能合约协议」可以实现 / 维持的、理论上的最大去中心化水平。在这方面中币做到了智能共识等。
如何判断一个以太坊地址是合约还是普通账户?
如果你希望马上开始学习以太坊DApp开发,可以访问汇智网提供的出色的在线互动教程:
在以太坊中,不管是普通账户,还是合约账户,地址看起来都是类似的一串16进制码流。那么,应该如何区分一个给定的以太坊地址是普通账户还是合约账户?
使用web3.js
web3.eth.getCode()方法返回指定地址上代码的16进制字符串,由于普通账户地址处没有代码,因此将仅返回16进制前缀0x
。利用这个我们可以进行判断,例如:
var code = web3.eth.getCode("0xbfb2e296d9cf3e593e79981235aed29ab9984c0f")
if(code === ‘0x‘) console.log(‘普通账户‘)
else console.log(‘合约账户‘)
在solidity中实现
在合约内,可以使用EVM汇编代码来获取指定地址处的代码大小,显然,普通账户地址将返回0
:
contract EzDemo {
function isContract(address addr) returns (bool) {
uint size;
assembly { size := extcodesize(addr) }
return size > 0;
}
}
以上是关于以太坊合约地址错误是怎么回事的主要内容,如果未能解决你的问题,请参考以下文章