以太坊源代码 - 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描述字自动区分两种调用。

https://mp.weixin.qq.com/s/4ntwZlajGA-Z4j6LzB_LHA

以上是关于以太坊源代码 - eth_call以及eth_sendTransaction区别的主要内容,如果未能解决你的问题,请参考以下文章

以太坊合约 ABI 的最大字符串大小

第一行代码:以太坊-使用Solidity语言开发和测试智能合约

区块链 | 智能合约Ethereum源代码- 以太坊RPC通信实例和原理代码分析(上)

web3.js链接以太坊并查询钱包u余额

以太坊扩容方案分片(Sharding)将在2020年完成部署

区块链 solidity 零知识证明DApp开发实践身份证明/以太坊