0%

solidity | 地址和合约

这一章讲一下地址和合约。

地址相关

  • <address>.balance (uint256):
    • Address的余额,以wei为单位。
  • <address>.transfer(uint256 amount):
    • 发送给定数量的ether到某个地址,以wei为单位。失败时抛出异常。
  • <address>.send(uint256 amount) returns (bool):
    • 发送给定数量的ether到某个地址,以wei为单位, 失败时返回false
  • <address>.call(...) returns (bool):
    • 发起底层的call调用。失败时返回false
  • <address>.callcode(...) returns (bool):
    • 发起底层的callcode调用,失败时返回false。 不鼓励使用,未来可能会移除。
  • <address>.delegatecall(...) returns (bool):
    • 发起底层的delegatecall调用,失败时返回false

警告:send() 执行有一些风险:如果调用栈的深度超过1024gas耗光,交易都会失败。因此,为了保证安全,必须检查send的返回值,如果交易失败,会回退以太币。如果用transfer会更好。

具体用法参考

合约相关

  • this(当前合约的类型):
    • 表示当前合约,可以显式的转换为Address
  • selfdestruct(address recipient):
    • 销毁当前合约,并把它所有资金发送到给定的地址。
  • suicide(address recipient):
    • selfdestruct的别名
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
pragma solidity ^0.4.18;

contract Test{

address owner;

constructor(){
owner = msg.sender;
}

function kill() public{
require(owner == msg.sender);
selfdestruct(owner);
}

function hello() public view returns(string){
return "hello";
}

function test() public{
this.hello();
}

}

另外,当前合约里的所有函数均可支持调用,包括当前函数本身。

请我喝杯咖啡吧~