Solidity之地址(address)
概览
- 什么是ETH地址?
- 可支付地址
- 地址对应的方法(solidity)
- 检查地址是否存在
- 零地址
- 地址相关的web3.js
介绍
ETH中的地址都是唯一的,因为他们都是来自一个公钥或者合约。
在ETH交易中的支付环节,预期的收款人都是一个地址。类似于银行中的转账账号。
ETH中的地址(address)分为两种:
- Externally Owned Accounts (EOA)(外部拥有账户):这些账户通过私钥来控制。通过私钥可以控制账户中的TOKEN,在和智能合约进行交互的时候,私钥还可以用来提供身份认证。
- Contracts Accounts (Smart Contracts)(合约地址):这些账号是通过代码(solidity)控制的。和EOAs账号不同的是,智能合约账号是没有关联一个秘钥的。因为智能合约不受私钥控制,所以我们可以说智能合约是独立的。每个合约的地址都来自于合约创建的交易。ETH的合约地址可以作为交易中的接收者,发送token到合约或者调用别的合约中的方法。
什么是ETH地址(技术上)?
hash函数是把ETH公钥(或者合约)转化为地址的关键。ETH使用hash函数(keccak-256)来生成地址。在ETH或者solidity中,一个地址由20byte长度的值组成,这个地址对应于公钥的hash函数(keccak-256)的最后20bytes的值。一个地址总固定是以ox开头,因为它是以16进制的格式表示的。
下面就来详细的介绍下如何创建地址:
-
首先我们拿到一个公钥
pubKey = 6e145ccef1033dea239875dd00dfb4fee6e3348b84985c92f103444683b...... 复制代码
-
对这个公钥进行hash(keccak-256)运算,最后输出一个64个字符/32bytes长度的字符串。
Keccak256(pubKey) = 2a5bc342ed616b5ba5732269001d3f1ef827552ae1114027bd3ecf1f086ba0f9 复制代码
-
截取hash结果字符串末尾的40个字符/20bytes.这个40个字符/20bytes就是我们的地址