以太坊的交易的运行原理

论坛 期权论坛 期权     
期权匿名问答   2022-5-31 04:33   6629   0
上一篇:
智能合约令人着迷的地方之一是执行交易(transaction)时的变化。那么一笔交易(transaction)是如何建构和发送的呢?
向网络发送一笔交易

要想改变以太链,就需要发送交易。交易是一组加密签名后发送到以太节点的消息,描述了要对以太链做什么。以太网络基于共识同意此笔交易有效,并且添加到链上。
消息包含了RLP编码后的交易的具体细节,包含:

  • 接收方(recipient):交易的接收人,格式为address。
  • 值(value):发送以太的额度,可为0
  • 数据(data):随机二进制数据。部署合约的时候,用于存储字节码;调用函数的时候指定具体的函数和传入的参数。如果只是转移以太,data一般忽略。
  • gas limit:允许消耗的最大gas
  • gas price:gas价格
  • nonce:顺序编号,每个发送方(sender)一个。
  • 签名(signature):用于识别并认证发送方。
内部转账

以上描述的是EOA账户(也就是最常见的个人地址)的转账方式,合约也可以发起转账、调用其他合约的函数,成为message,常被叫做内部转账(internal transaction)。
合约发出的消息和EOA发出的有两个不同之处:1)合约的消息不包含加密的签名;2)不直接包含在链上,而是EOA地址和合约交互引起的副反应。
调用合约内的函数

每一个公开函数(public function)都可以通过交易(transaction)来调用。从开发者的角度来说,调用函数需要三个条件:合约地址、要调用的函数和传给函数的参数。
需要注意,之前对交易的定义里没有(直接)提到函数或者参数,这是因为以太坊虚拟机EVM没有提到函数或参数,而是编码进入EVM的下一层。在交易请求中,函数签名和参数被编码放在data部分。
Nonce

Nonce是以太坊系统中的一系列序列数,用于防止重放攻击(replay attack)。每个发送方(sender)都有一个nonce,而每一笔交易都必须有一个和之前所有成功交易的序列数不同的序列数,这样就不会发生重放攻击了。
下一篇:
捕梦之乡:如何编写带有公开变量的智能合约
分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:400157
帖子:80032
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP