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

在以太坊智能合约开发中,有时需要向智能合约地址直接转账,比如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

发表评论
留言与评论(共有 0 条评论)
   
验证码:

相关文章

推荐文章

'); })();