以太坊合约地址错误是怎么回事

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了以太坊合约地址错误是怎么回事相关的知识,希望对你有一定的参考价值。

参考技术A 使用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;

参考技术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;
  }
}

以上是关于以太坊合约地址错误是怎么回事的主要内容,如果未能解决你的问题,请参考以下文章

以太坊没有价值吗?ETH的价值在哪?

以太坊的ABI编码

如何判断一个以太坊地址是合约还是普通账户?

以太坊

如何确定以太坊地址是不是为合约?

在以太坊编辑器remix中调试合约使用的是remix的那项功能?