ETH-智能合约
约 630 字大约 2 分钟
2021-11-21
智能合约是以太坊的精髓,也是和比特币最大的区别。
外部账户调用智能合约
一个合约调用另外一个合约
不直接调用。使用address的call函数
代理调用
fallback函数,缺省函数
智能合约的创建和运行
汽油费
错误处理
嵌套调用,一个智能合约调用另一个
Block Header
收据树
智能合约可以获得的区块信息
调用信息
地址类型
如果遇到错误,transfer会导致连锁回滚;send会返回false;call的本意是函数调用,也会返回false。
例子:简单拍卖
拍卖函数
结束拍卖
Code is law。如果智能合约有问题,是改不了的,以太币是永远取不出来的。不可撤销信托:irrevocable trues。所以一定要测试、测试、再测试。那么能不能在智能合约里面留后门呢?这是跟去中心化的理念违背的,大多人不会同意的。解决方案是使用withdraw方式:
还是会存在问题:
这是智能合约种经典的模式,先要判断条件,然后改变条件,最后再跟别的合约发生交互,在区块链上任何未知的合约都可能是有恶意的,所以每次向对方转账或者调用对方某个函数时候,都要提醒自己,这个合约有可能反过来调用你当前的合约并且修改状态!
还有就是不要用call.value来转账,而是使用send这种专门转账的函数(transfer也是专门转账的函数,但是无返回值,如果报错会引发回滚),而且send和transfer的gas费是固定的,很少的,不足以再次让hack调用自己的合约。