> For the complete documentation index, see [llms.txt](https://kademliachain.gitbook.io/kad/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://kademliachain.gitbook.io/kad/kadkademliachain-xu-ni-ji.md).

# KAD（KademliaChain）虚拟机

## 从账本到状态机 <a href="#from-ledger-to-state-machine" id="from-ledger-to-state-machine"></a>

***

通常使用“分布式账本”的类比来描述像比特币这样的区块链，它使用密码学的基本工具来实现去中心化的货币。 账本保存着活动记录，而活动必须遵守一套规则，这些规则限制用户在修改账本时可以做什么和不可以做什么。 例如，比特币地址不能花费比之前收到的更多的比特币。 这些规则是比特币和许多其他区块链上所有交易的基础。

虽然Kademlia有自己的本机加密货币 (KAD)，遵循几乎完全相同的直观规则，但它也支持更强大的功能：智能合约。 对于此更复杂的功能，需要一个更复杂的类比。 KAD不是分布式账本，而是分布式状态机器。 KAD的状态是一个大型数据结构，它不仅保存所有帐户和余额，而且还保存一个*机器状态*，它可以根据预定义的一组规则在不同的区块之间进行更改，并且可以执行任意的机器代码。 在区块中更改状态的具体规则由 EVM 定义。

## KAD状态转换函数 <a href="#the-ethereum-state-transition-function" id="the-ethereum-state-transition-function"></a>

***

EVM 的行为就像一个数学函数：在给定输入的情况下，它会产生确定性的输出。 因此，将KAD更正式地描述为具有**状态转换函数**非常有帮助：

{% code lineNumbers="true" %}

```asm6502
Y(S, T)= S'
```

{% endcode %}

给定一个旧的有效状态 `（S）`> 和一组新的有效交易 `（T）`，KAD状态转换函数 `Y（S，T）` 产生新的有效输出状态 `S'`

## 状态 <a href="#state" id="state"></a>

***

在KAD环境中，状态是一种称为改进版默克尔帕特里夏树的巨大数据结构，它保存所有通过哈希关联在一起的帐户并可回溯到存储在区块链上的单个根哈希。

## 交易 <a href="#transactions" id="transactions"></a>

***

交易是来自帐户的密码学签名指令。 交易分为两种：一种是消息调用交易，另一种是合约创建交易。

合约创建交易会创建一个新的合约帐户，其中包含已编译的 智能合约 字节码。 每当另一个帐户对该合约进行消息调用时，它都会执行其字节码。

## EVM 说明 <a href="#evm-instructions" id="evm-instructions"></a>

***

EVM 作为一个堆栈机(opens in a new tab)运行，其栈的深度为 1024 个项。 每个项目都是 256 位字，为了便于使用，选择了 256 位加密技术（如 Keccak-256 哈希或 secp256k1 签名）。

在执行期间，EVM 会维护一个瞬态*内存*（作为字可寻址的字节数组），该内存不会在交易之间持久存在。

然而，合约确实包含一个 Merkle Patricia *存储* trie（作为可字寻址的字数组），该 trie 与帐户和部分全局状态关联。

已编译的智能合约字节码作为许多 EVM opcodes执行，它们执行标准的堆栈操作，例如 `XOR`、`AND`、`ADD`、`SUB`等。 EVM 还实现了一些区块链特定的堆栈操作，如 `ADDRESS`、`BALANCE`、`BLOCKHASH` 等。

## EVM 实现 <a href="#evm-implementations" id="evm-implementations"></a>

***

EVM 的所有实现都必须遵守以太坊黄皮书中描述的规范。

KAD执行客户端都包含一个KAD虚拟机实现。 此外，还有多个独立的实现，包括：

* Py-EVM(opens in a new tab) - *Python*
* evmone(opens in a new tab) - *C++*
* ethereumjs-vm(opens in a new tab) - *JavaScript*
* eEVM(opens in a new tab) - *C++*
