以太坊源代码 - eth_call以及eth_sendTransaction区别
Posted 软件工程小施同学
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了以太坊源代码 - eth_call以及eth_sendTransaction区别相关的知识,希望对你有一定的参考价值。
使用Web3调用以太智能合约的朋友可能都知道,从Web3的接口调用以太的智能合约有两种方式:eth_call和eth_sendTransaction。
eth_call不消耗gas,而eth_sendTransaction需要消耗gas。
本文从以太源代码详细解释两种调用方式的实现:
1)智能合约的接口
以以太坊的ERC20接口为例,接口有一个描述字:constant。
带constant的函数,web3会自动使用eth_call远程调用。
不带constant的函数,web3使用eth_sendTransaction远程调用。
比如查询地址余额的函数balanceOf带有constant描述字,web3会使用eth_call远程调用。
2)eth_sendTransaction调用过程
eth_sendTransaction调用发起一笔交易,并等待打包。
3)eth_call调用过程
eth_call调用只是在本地调用evm虚拟机执行获取状态,并没有打包操作。
总结:eth_call调用只是本地查询调用,不会发送交易,记录在链。eth_sendTransaction调用会发起交易请求,交易会打包记录在链。Web3会根据智能合约中函数有无constant描述字自动区分两种调用。
以上是关于以太坊源代码 - eth_call以及eth_sendTransaction区别的主要内容,如果未能解决你的问题,请参考以下文章
第一行代码:以太坊-使用Solidity语言开发和测试智能合约
区块链 | 智能合约Ethereum源代码- 以太坊RPC通信实例和原理代码分析(上)