Ⅰ Solidity之地址(address)
在以太坊(Ethereum, ETH)的世界中,地址扮演着至关重要的角色,它们是唯一且与公钥或合约绑定的。在交易过程中,地址就如同银行账户,是预期收款的标识。
ETH地址主要由两部分构成:通过keccak-256哈希函数生成的20字节值,这些值以16进制表示,通常以0x开头。地址的生成原理是将公钥或合约的哈希值截取最后20个字节。在Solidity编程中,只需在变量前加上"address"关键字即可定义地址变量。
在Solidity 0.5版本之前,合约地址与可支付地址(payable address)无明显区分,但0.5.0以后,合约地址类型独立,只有带有payable关键字的地址才能接受和发送代币。尽管地址可以进行交易,但推荐使用非推荐方法1和2时需谨慎,如1.address.transfer()和address.send(),而更常用的方法是获取余额,如address.balance,或者执行智能合约调用,如address.call(bytes memory)等。
创建合约时,零地址(zero-address)是一个特殊的地址,用于合约部署。它是个空的20字节值,仅包含0x0,交易时在接收者字段填入零地址,EVM会识别为合约创建请求。
总的来说,以太坊地址是基于公钥或合约生成的唯一标识,用于交易和智能合约交互,并且地址类型、零地址等概念在 Solidity 中具有特定的用法和规则。