交易

交易是由帐户发出,带密码学签名的指令。 帐户将发起交易以更新KAD(Kademlia)网络的状态。 最简单的交易是将 KAD 从一个账户转到另一个帐户。

什么是交易?


KAD(KademliaChain)交易是指由外部持有账户发起的行动,换句话说,是指由人管理而不是智能合约管理的账户。 例如,如果 Bob 发送 Alice 1 KAD,则 Bob 的帐户必须减少 1 KAD,而 Alice 的帐户必须增加 1 KAD。 交易会造成状态的改变。
改变 EVM 状态的交易需要广播到整个网络。 任何节点都可以广播在KAD虚拟机上执行交易的请求;此后,验证者将执行交易并将由此产生的状态变化传播到网络的其他部分。
交易需要付费并且必须包含在一个有效区块中。 为了使本概述更加简洁,我们将另行介绍燃料费和验证。

所提交的交易包括下列信息:

  • from - 发送者的地址,该地址将签署交易。 这将是一个外部帐户,因为合约帐户不能发送交易。
  • recipient – 接收地址(如果是外部帐户,交易将传输值。 如果是合约帐户,交易将执行合约代码)
  • signature – 发送者的标识符。 当发送者的私钥签署交易并确保发送者已授权此交易时,生成此签名。
  • nonce - 一个有序递增的计数器,表示来自帐户的交易数量
  • value – 发送者向接收者转移的以太币数量(面值为 WEI,1 个KAD = 1e+18wei)
  • input data – 可包括任意数据的可选字段
  • gasLimit – 交易可以消耗的最大数量的燃料单位。 以太坊虚拟机指定每个计算步骤所需的燃料单位
  • gasPrice - 交易手续费
燃料是指验证者处理交易所需的计算。 用户必须为此计算支付费用。 gasLimitmaxPriorityFeePerGas 决定支付给验证者的最高交易费。 关于燃料的更多信息。
交易对象看起来像这样:
1
{
2
from: "0xEA674fdDe714fd979de3EdF0F56AA9716B898ec8",
3
to: "0xac03bb73b6a9e108530aff4df5077c2b3d481e5a",
4
gasLimit: "21000",
5
gasPrice : "30000000000",
6
nonce: "0",
7
value: "10000000000",
8
}
但交易对象需要使用发送者的私钥签名。 这证明交易只可能来自发送者,而不是欺诈。
Geth 这样的以太坊客户端将处理此签名过程。
示例 JSON-RPC 调用:
1
{
2
"id": 2,
3
"jsonrpc": "2.0",
4
"method": "account_signTransaction",
5
"params": [
6
{
7
"from": "0x1923f626bb8dc025849e00f99c25fe2b2f7fb0db",
8
"gas": "0x55555",
9
"gasPrice": "30000000000",
10
"input": "0xabcd",
11
"nonce": "0x0",
12
"to": "0x07a565b7ed7d7a678680a4c162885bedbb695fe0",
13
"value": "0x1234"
14
}
15
]
16
}
示例响应:
1
{
2
"jsonrpc": "2.0",
3
"id": 2,
4
"result": {
5
"raw": "0xf88380018203339407a565b7ed7d7a678680a4c162885bedbb695fe080a44401a6e4000000000000000000000000000000000000000000000000000000000000001226a0223a7c9bcf5531c99be5ea7082183816eb20cfe0bbc322e97cc5c7f71ab8b20ea02aadee6b34b45bb15bc42d9c09de4a6754e7000908da72d48cc7704971491663",
6
"tx": {
7
"nonce": "0x0",
8
"gasPrice": "0x1234",
9
"gas": "0x55555",
10
"to": "0x07a565b7ed7d7a678680a4c162885bedbb695fe0",
11
"value": "0x1234",
12
"input": "0xabcd",
13
"v": "0x26",
14
"r": "0x223a7c9bcf5531c99be5ea7082183816eb20cfe0bbc322e97cc5c7f71ab8b20e",
15
"s": "0x2aadee6b34b45bb15bc42d9c09de4a6754e7000908da72d48cc7704971491663",
16
"hash": "0xeba2df809e7a612a0a0d444ccfa5c839624bdc00dd29e3340d46df3870f8a30e"
17
}
18
}
19
}
  • raw 是采用递归长度前缀 (RLP) 编码形式的签名交易
  • tx 是已签名交易的 JSON 形式。
如有签名哈希,可通过加密技术证明交易来自发送者并提交网络。

交易类型


以太坊有几种不同类型的交易:
  • 常规交易:从一个帐户到另一个帐户的交易。
  • 合约部署交易:没有“to”地址的交易,数据字段用于合约代码。
  • 执行合约:与已部署的智能合约进行交互的交易。 在这种情况下,“to”地址是智能合约地址。

交易生命周期


交易提交后,就会发生以下情况:
  1. 1.
    以加密方式生成的交易哈希: 0x97d99bc7729211111a21b12c933c949d4f31684f1d6954ff477d0477538ff017
  2. 2.
    然后,该交易被广播到网络,并添加到由所有其他待处理的网络交易组成的交易池中。
  3. 3.
    验证者必须选择你的交易并将它包含在一个区块中,以便验证交易并认为它“成功”。
  4. 4.
    随着时间的流逝,包含你的交易的区块将升级成“合理”状态,然后变成“最后确定”状态。 通过这些升级,可以进一步确定 你的交易已经成功并将无法更改。 区块一旦“最终确定”,只能通过耗费数十亿美元 的网络级攻击来更改。