理解智能合约ABI
ABI = Application Binary Interface如果我们使用过类似protobuf或thrift作为RPC远程调用,那么就不难理解ABI的定义,类似.proto的接口定义,然后通过protobuf客户端工具生成不同语言的接口类文件,导入到项目中那么调用者就知道有哪些方法可以使用。
但是不同的是,以往web2的远程调用往往会有一个server端实现这个接口并暴露服务URL;而在Web3智能合约中所有的合约都是写在区块链中,一个合约调用另一个合约也是通过区块链的地址获取并解密区块,然后执行合约,所以ABI就必须引入到发起调用方的代码上下文中。
modifier
函数修饰器可以理解为其他语言中的interceptor,当某个方法执行前或后,使用modifier定义的代码块拦截执行。
例子中取款操作只能由owner发起,所以可以使用modifier代码块验证,并在方法头修饰
// modifier just like a java interceptor, use "_;" to decide where it can be executed firstly or afterwardmodifier onlyOwner { require(msg.sender == owner); _;}// only admin/owner can withdrawfunction withdraw() payable onlyOwner public { // who call withdraw function, that means put back all the balance to deployer payable(msg.sender).transfer(address(this).balance);}
页:
[1]