首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

以太坊的合约调用和交易执行

合约部署到以太坊的区块链上后,是为了让用户调用和执行的。与合约创建一样,合约的执行也是由交易驱动的,如图:

对于驱动合约执行的交易,有几个关键点:

1、合约在创建时,会生成一个合约地址,所以,通过交易调用合约的时候,就以合约地址为目的地址;

2、在交易的data域,会标明要调用合约的哪个函数,并且提供了该函数所需要的参数;

3、调用合约的交易,同样可以发送一笔以太币给合约,金额在value字段显示;

然后,我们再看看一笔交易(不光是合约执行的交易,指所有交易)发出去后,到底是怎么执行的。

1、交易向以太坊全网广播;

2、其他节点收到这笔交易后,会检查几个方面,以确认这笔交易是否有效:

1)交易数据都需要RLP编码,所以首先检查它是不是正确格式化的RLP;

2)验证签名是否有效;

3)检查交易序号nonce是否等于发送账户的nonce;

4)检查交易的gaLimit设置是否符合要求,它一定要大于等于以下几项之和(gas最小值):a、最小值21,000gas;b、与发送代码和数据长度相关的gas费用:值为0的字节,每字节费用为4gas,每个非零字节为68gas;c、如果交易用于合约创建,还需要额外的32,000gas;

5)检查发送者账户的余额是否足够支付所设置的gas;

3、验证通过后,矿工从发送者的余额中扣除gas最小值,将发送者账户中的nonce加1,表示这个账户又多发起了一笔交易;

4、如有代码调用(其实合约创建和合约调用都需要执行代码,合约创建会启动一个合约创建函数),代码会送到EVM虚拟机执行,并在整个执行过程中,以太坊会一直保持跟踪以下几项:

1)自毁集:需要删除的账户;

2)日志系列:虚拟机代码执行的归档和检查点;

3)退款余额:交易完成后要退给发送账户的以太币。为什么还有钱退?因为以太坊中的永续存储需要费用,所以同样地,如果该交易释放了一些存储也会有退款;

5、代码执行完毕后,如果一切正常,会打包到区块(跟比特币一样,以太坊也是POW挖矿模式,所以以上几步虽然所有节点都在进行,但最后只有在POW竞争中获胜的节点所打包的区块才会广播到全网,并被其他节点验证后认可,其他节点做的操作也和打包的矿工一样,验证交易是否有效,然后也在自己的EVM上跑代码,看看得出的结果是不是一致);

6、 根据交易结果,整个以太坊网络刷新账户状态,当然,具体完成得靠每个节点在自己机器上同步刷新;

好了,以太坊的账户和交易就讲到这里了,明天我们来看看以太坊的区块长什么样,因为账户和交易最终都是“存储”到区块里的。

不投资毋宁死

自由,就是拥有选择的权利,而每一次选择都是一次投资。

谢谢阅读

✬如果你喜欢这篇文章,欢迎分享到朋友圈✬

评论功能现已开启,灰常接受一切形式的吐槽和赞美☺

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20181009G1SPE500?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券