以太坊的账户和交易

摘要:
两个账户之间的任何交易都会改变世界状态。鼓励乙醚保持少量储存。综上所述,以上是以太坊中的一些基本元素,没有提及复杂的事务执行、EVM等,这些将在稍后编写。
5、账户

以太坊中有两种账户
1、外部拥有账户(EOA),一般指自然人拥有的账户。
2、合约账户(CA),为智能合约分配的账户。

看一下账户的源码定义:

  • EOA特征
    codeHash为空
    storageRoot为空
    通过私钥控制
    发起交易(转移以太币或触发合约代码)
  • CA特征
    不能发起交易,可以被触发执行合约代码(通过EOA发起的交易或者从其他CA接收的消息调用激活)

怎么判断一个账户是空账户?

EMPTY(σ,a)≡ σ[a]c =KEC(()) ∧ σ[a]n =0 ∧ σ[a]b =0

从公式看,一个账户的Root为空且nonce为0且余额为0,则说明这是一个空账户。

6、交易

再回顾一个公式

σ′ =Υ(σ,T)

以太坊是一个基于交易的状态机。
任意两个账户之间的交易都会引起world state的改变。 
两个相邻区块之间的状态差别很小,patricia trie这种数据结构能高效的处理整个系统账户变化的部分。 

交易基本定义:【从外部拥有账户】发送的加密签名序列化指令。换句话说交易必须是从EOA发起的才能叫交易,CA之间的通信叫消息也有叫内部交易的,现在是有区别,以后这个区别会不会模糊化不知道。

交易类型有两种:
1、消息调用(Td)
2、合约创建(Ti)

图片描述

从EOA到EOA的交易仅是转账。
EOA到CA可以激活各种操作。

看交易的源码定义:

Tn必须等于发起交易的账户的nonce(翻阅前面说法可知,账户nonce是该账户发起的第几笔交易的序号,如果是创建合约则代表第几次创建合约的序号)
Tp是这笔交易消耗的gas单价
Tg是你愿意为这笔交易最多可以支付的上限
Tt是接收账户的地址,如果为空说明接受账户是一个CA,否则是EOA
Tv是到接收者的额度
Td或Ti,如果交易类型是消息调用则Palload写为Td,表示输入数据,例如消息的参数,假设有一个注册域名的合约服务,则Td就是该服务需要的参数如IP等。如果交易类型是创建合约,则Payload写为Ti,表示一段代码,这段代码用于创建合约账户,这段初始化代码只会被执行一次就丢弃掉,第二次执行的是创建完的合约代码体。

交易的公式:
图片描述

可以看到当接收账户不同时,区别仅仅是Td和Ti的区别。

另外,一个区块里交易的顺序由装配这个区块的矿工决定。

7、费用

以太坊网络里任何计算都要支付gas(燃料),
思考为什么不直接用eth做费用?
答案是用两个概念gas和eth区别价值和价格,gas是一种固定衡量的价值,而eth是市场上快速变化的价格,很多EVM(以太坊虚拟机)的操作指令都需要消耗固定的费用就用gas来计价,gas的最小单位是wei,1eth = 1018wei = 109gwei。所以eth和gas之间是有汇率的。

GasPrice:燃料单价
GasLimit:愿意支付的燃料上限

GasLimit × GasPrice = 愿意支付的最大费用
10000 × 100gwei = 1015wei = 0.001eth

图片描述

这图要说明的是:
一笔交易中,你设置的最大费用如果没有消耗完,多出的会返回给你。如果最大费用不够计算的花费,那么交易会终止、已改变的状态会回滚、但是钱被消耗不会退回了。这些已消耗的费用都奖励给矿工了。

计算都是有费用的,初次之外还有一些东西需要缴费:

费用的三种不同构成:
1)计算操作的固定费用
2)交易(合约创建或消息调用)费用
3)存储(内存、存储账户合约数据)费用

着重说一下存储费用:
存储收费是因为假如你的合约使得状态数据库存储增大,所有节点都会增加存储。
以太币是鼓励尽量保持少量存储的。
但是如果有操作是清除一个存储条目,这个操作的费用不但会被免除,而且由于释放空间还会获得退款。

总结

以上就是以太坊里的一些基础元素,没有讲到复杂的交易执行、EVM等,后续再写。

https://segmentfault.com/a/1190000013706670

免责声明:文章转载自《以太坊的账户和交易》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇关于deepin如何把CD制作成iso的测试Ubuntu16.04 启动纯文本界面方法下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

随便看看

RF(一)RF的安装步骤

7.安装Appium 8,安装最新版本的nodeJS:node-v6.9.49,在命令行上执行Appium命令,您应该能够启动Appium服务器~~~~...

Android 上的 10 款 Web 开发工具推荐

作为一个狂热的Android用户,我一直在寻找适合Web开发人员使用的一些应用程序。以下推荐10款非常实用的Android端的Web开发工具。EditorJoooid1.1Editor这款工具非常适合用来发布包含HTML、文本、图片和相册的文章,还包含了GPL定位信息。...

TabWidget修改tab颜色,自定义样式

您可以通过tabWidget-˃setStyleSheet方法设置样式,包括选项卡样式。...

vue+jspdf+html2canvas导出PDF文件

没有废话。首先,查看最终打印结果。我说最后打印的pdf文件看起来像这样。pdf文件的分页是通过设置jspdf实现的,但我暂时无法对文件内容进行分页。因为我们首先将需要打印的元素转换为画布,然后将画布转换为图像,然后将图像转换为pdf文件。...

图论介绍(Graph Theory)

G-v具有比G更多的连通分支,因此v被称为G的截断点G-e具有比G多的连通分支。定理:连通图G,其中e是桥e不属于G的任何环有顶点u,v,使得任何路径u-v都通过e连通图G;而w是存储在顶点u,v处的割点,使得任意路径u-v通过w定义:顶点之间的距离x-y:所有x-y路径的最小长度。...

微信小程序的模板消息与小程序订阅消息

有关获取分发权限的更多信息,请参阅applet侧消息订阅接口wx的步骤3。requestSubscribeMessage。有关发出订阅消息的调用接口的更多信息,请参阅服务器端消息发送接口subscribeMessage。sendwx。requestSubscribeMessage(Objectobject)基本库2.8.2。必须填写参数Objectobjec...