- address
- 代表20个字节的值
- uint160,整形字面值,bytes20,合同类型(catract types)能够转换成address
- 成员members
- balance:查看余额
- address payable
- 与address相同
- 通过payable(…)可将address和合同类型(contract-type)转换成address payable,对于合同类型,需要该合同有接收函数(receive function)或者支付回退函数(payable fallback function)
- 特例payable(0)是合法的
- 成员members
- transfer:发送Ether(以wei为单位)给address payable,在合同中,便是将合同的Ether发送个address payable
如果transfer执行失败,比如,当前合同余额不足,接收拒绝,该函数将返回Ether并报错。如果x是一个contract address(该合同地址必须实现Receive Ether Function或者Fallback Function),它以上两种函数将会随着transfer一起调用,无法阻止。address payable x = payable(0x123); address myAddress = address(this); if (x.balance < 10 && myAddress.balance >= 10) x.transfer(10);
- send:是一个transfer底层的对应函数,如果出现错误,只会返回false,并不会中断当前合同,推荐使用transfer
- transfer:发送Ether(以wei为单位)给address payable,在合同中,便是将合同的Ether发送个address payable
address 与 address payable区别:①address payable能够接收ether。②address payable隐式等于address ,而方法payable(<adress>)才等于address payable ③address payable多两个属性成员transfer和send
备注:超大整形转换成address,例如bytes32,最好使用方法address(uint160(bytes20(b))),或者address(uint1660(uint256(b)))去转换