交易
交易(transaction)是区块链世界中的一个基本概念。交易是向区块链传递信息的方式,通过发送交易可以与区块链进行交互。交易用于改变区块链的状态,这是唯一的方法。在 Move 中,交易用于调用包中的函数、部署新包以及升级现有包。
用户如何与程序交互
用户通过调用程序中的公开函数与区块链上的智能合约进行交互。这些公开函数定义了可以在交易中执行的操作。交易是由账户发起的,账户发送交易时指定它要操作的对象。
交易的结构
每个交易都会明确地指定它要操作的对象!
交易由以下部分组成:
- 发送者 - 签署交易的帐户;
- 命令列表 - 要执行的操作;
- 命令输入 - 命令的参数:
pure
- 简单值,如数字或字符串object
- 交易将访问的对象;
- Gas 对象 - 用于支付交易的 Coin 对象;
- Gas 价格和预算 - 交易成本;
命令
Rooch 交易可能由多个命令组成。每个命令都是一个内置命令(例如发布包)或对已发布包中函数的调用。命令按照它们在交易中列出的顺序执行,并且它们可以使用先前命令的结果,形成一条链。交易具有原子性,要么整体成功,要么整体失败。
从原理上讲,交易如下所示(伪代码):
Inputs:
- sender = 0xa11ce
Commands:
- payment = SplitCoins(Gas, [ 1000 ])
- item = MoveCall(0xAAA::market::purchase, [ payment ])
- TransferObjects(item, sender)
在此示例中,交易由三个命令组成:
SplitCoins
- 一个内置命令,用于从传递的对象(在本例中为 Gas 对象)中分割出新硬币;MoveCall
- 一个调用0xAAA
地址上的market
模块中的purchases
函数的命令,并传入payment
对象作为参数;TransferObjects
- 一个将对象转移给接收者的内置命令。
交易的效果
交易效果是交易对区块链状态所做的改变。更具体地说,交易可以通过以下方式更改状态:
- 使用 gas 对象来支付交易费用;
- 创建、更新或删除对象;
- 发出事件;
执行交易的结果由不同部分组成:
- 交易摘要 - 交易的哈希值,用于识别交易;
- 交易数据 - 交易中使用的输入、命令和 gas 对象;
- 交易效果 - 交易的状态和“效果”,更 具体地说:交易的状态、对象及其新版本的更新、使用的 gas 对象、交易的 gas 成本以及交易发出的事件;
- 事件 - 交易发出的自定义事件;
- 对象更改 - 对对象所做的更改,包括所有权的更改;
- 余额更改 - 交易涉及的账户总余额的变化;