以太坊智能合约之转账原理

还有没有比特币?你也太OUT了
注册OKEx交易所 快速购买比特币  

作者:ITleaks

来源:CSDN

原文链接:http://t.cn/RrTtCi4

著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

本文约4800字+,阅读(观看)需要25分钟

在以太坊智能合约开发中,有时需要向智能合约地址直接转账,比如ico众筹, 目前有三种方式:

创建合约时转账

调用合约方法时转账

直接向合约地址进行转账

创建合约时转账

  

在进行合约开发时,如果想要在创建合约时直接向该合约进行转账,只需要给构造函数中添加payable修饰符

contract C {

    function C() payable{

    }

}

​执行合约方法转账

    

需要给你需要支持转账功能的方法添加payable修饰符

function d() payable {

    a = 3;

}

​直接转账    支持直接转账,需要借助默认函数(fallback function),默认函数是没有名字的函数,如下

function () payable {

    a = 3;

}

​用户如何向智能合约转账

    

用户向智能合约转账的核心是填充transaction.value的值,该值就是转账的金额,evm会执行先扣款后验证的逻辑,即不管对应的函数是否支持转账都会先扣除value实现转账,如果对应的函数不支持转账,对应的函数的代码会通过revert指令撤销前面的转账操作。具体原理看下面的Payable关键词原理

Payable关键词原理

payable关键词是编译器支持的,函数是否带有payable关键词,编译器会生成不一样的代码。如果不带有payable关键词,会在函数的入口添加callvalue的检验。

构造函数不带payable标识

普通函数的payable

普通函数是一样的,如果没有加payable, 每个函数入口都会检测CALLVALUE

文章发布只为分享区块链技术内容,版权归原作者所有,观点仅代表作者本人,绝不代表区块链兄弟赞同其观点或证实其描述。

本文由 区块链技术网 作者:作者:ITleaks 发表,其版权均为 区块链技术网 所有,文章内容系作者个人观点,不代表 区块链技术网 对观点赞同或支持。如需转载,请注明文章来源。

还有没有比特币?你也太OUT了
注册OKEx交易所 快速购买比特币  

发表评论