> Decentraland 如何使用以太坊区块链。

# 关于区块链

所有区块链本质上都是分布在网络各台机器之间的去中心化数据库。交易会被分组为“区块”，并按顺序处理，形成一个 *链* 的事件。

以太坊是最受欢迎的区块链之一。它与比特币等其他区块链的不同之处在于，它使用区块链作为存储，不仅仅用于记录货币交易。以太坊可以存储更复杂的信息，用于区分不同类型的代币，甚至处理具有特定特征的独特代币。以太坊区块链还运行智能合约，这些合约允许执行更复杂的交易，而这些交易也可以依赖于双方约定的事件。

Decentraland 使用以太坊区块链来记录数字资产以及其他可交易物品的所有权，这些内容可以被 3D 场景读取并作出响应。

区块链并不用于存储场景状态、玩家位置，或任何需要在玩家与场景交互时实时变化的内容；这些内容要么存储在每个玩家机器本地，要么存储在场景所有者拥有的私有服务器上。每个场景的开发者都必须选择哪些信息值得存储在区块链上，以及哪些信息应存储在私有服务器中。

## 钱包

以太坊代币由钱包持有。一个以太坊钱包可以持有多种代币，包括 Ether、MANA、LAND，以及其他可能用于 Decentraland 游戏或体验的代币。

有许多钱包提供商可以让你持有 Decentraland 代币。要使用市场，或进入 Decentraland，你必须使用与你的网页浏览器集成的钱包，因此我们建议你使用：

* [MetaMask](https://metamask.io/)
* [Trezor](https://trezor.io/)/[Ledger](https://www.ledger.com/) 硬件钱包

每个钱包都有一个公钥和一个私钥。你的公钥哈希值就是钱包的唯一地址，用于路由交易并识别玩家。你的私钥由钱包用于对你发送到网络的每笔交易进行签名，并证明该交易确实由你发出。你的私钥还用于在你忘记密码时恢复钱包，所以请将它保存在安全的地方，不要与任何人分享。

在 Decentraland 中，玩家身份围绕钱包构建。由于钱包公钥是唯一的，你的场景可以使用它们以持久的方式识别 Decentraland 用户。钱包还可以持有不同的代币，这些代币可以赋予玩家独特的头像、可穿戴物品、进入选择限制访问的场景的权限、在游戏中使用的特殊武器等。

## 交易

交易会对存储在区块链中的信息进行更改。典型的交易涉及代币所有者的变更，例如用户 A 将他的 LAND 代币给用户 B，以换取一定数量的 MANA 代币。然而，在以太坊网络中，交易也可能意味着在不改变代币所有者的情况下，修改存储在代币中的信息。例如，修改地块描述，或将多个地块合并为一个 Estate。

在以太坊主链上发生的所有交易都需要支付以 Ether 代币计价的成本。这笔费用称为 'gas' 费用，由“挖掘”该交易的网络用户获得。

当你请求执行一笔交易时，你会设置愿意为该交易被挖掘所支付的 gas 价格。出价更高的交易会更快被挖掘，因为矿工会优先处理它们。这些交易的市场价格会定期波动，通常在网络使用量更高时更昂贵。务必确保你给出的价格不低于市场价，否则你的交易可能会无限期地停留在未处理池中。

所有交易都必须由一个以太坊地址使用该地址的私钥进行签名。这证明该交易是由该地址执行的。

#### 交易验证

区块链交易不是即时的，它们需要时间由网络中的某个节点“挖掘”出来，然后再传播到其余机器。网络请求的交易越多，验证所需的时间就越长。

简而言之，交易验证的过程如下：

1. 一笔新的交易发生后，它会进入一个未确认交易池。
2. 网络中的某台机器成功解决了一个算法，挖掘出一个包含这个交易在内、以及该池中若干交易的新“区块”。它会把这个新区块附加到链的末尾。
3. 该区块会与网络中的其他机器共享。每台机器都会验证区块中的每笔交易是否有效，并检查区块哈希以确保其合法，然后将其添加到自己版本的链中。
4. 新区块会在整个网络中传播。所有人都形成了一个共同认知：这笔交易已经发生。

#### 侧链

Decentraland 正在与 [Matic](https://matic.network/) 合作创建一个 *侧链* （一种特殊类型的区块链），它能够比以太坊主网络更快、更便宜地处理交易。这条侧链非常适合游戏内交易，因为变化可以更接近实时地发生，而且成本极低。对于涉及有价值物品的交易，我们仍然建议使用以太坊主链，因为它会更安全。

每个正在开发场景的开发者都可以选择在不同交易中使用主链、侧链，或两者的组合。

这条侧链将保持与以太坊主链的互操作性。你可以将代币从主链转入侧链，反之亦然。发生在侧链中的交易，最终会在代币“退出”并回到主链时反映到主链上。

#### 从场景中触发交易

你场景中的代码可以触发交易，无论是在以太坊主链上，还是在 Decentraland 的侧链上。你可以在场景里开设一家商店出售代币（例如 NFT），也可以设计一个游戏，在玩家达成某些目标时奖励游戏物品。

用户必须始终在其以太坊客户端上明确批准这些交易。例如，使用 Metamask 时，Metamask 会在每笔交易处理前提示用户接受。

## 代币类型

以太坊网络中可以处理不同类型的代币。已经出现了一些标准，用于归类具有相同特征的代币。

在 Decentraland 中，你可以使用代币来表示与你的游戏或体验相关的物品，例如武器或奖杯。由于代币保存在玩家的钱包中，它们会陪伴玩家在各个场景之间移动，因此每个场景都可以选择是否以及如何对每一种现有代币作出响应。

阅读 [什么是 NFT](https://decentraland.org/blog/technology/what-are-nfts/) 我们博客中关于非同质化代币的出现与演进的更深入介绍。

#### 同质化代币

如果某个物品是同质化的，那么它就可以被任意相似物品替代或交换。法定货币，例如美元，就是同质化的。一张一美元纸币可以兑换成任何其他一美元纸币。

像 Bitcoin、Ethereum 和 MANA 这样的加密货币代币都是同质化的，因为一个代币单位可以兑换成任何其他代币单位。

你也可以创建自定义同质化代币，在 Decentraland 场景中使用它们来描绘那些彼此完全相同、没有任何独特或可定制属性的物品。例如，你可以创建一个围绕收集大量相同物品的游戏，并用同质化代币来表示这些物品。你还可以使用同质化代币来表示一张金券，让持有它的玩家进入某个特定区域或使用某项服务。

*ERC20* 是以太坊网络中最被广泛接受的同质化代币标准。MANA 就是基于这一标准构建的。

#### 非同质化代币

非同质化代币（NFT）具有一些特征，使得每个单位都在客观上与其他单位不同。Decentraland 中的 LAND 地块就是 NFT，因为每个地块的位置都是独一无二的。与其他地块、道路或区域的邻接关系，使这些位置对代币所有者具有意义。

在 Decentraland 中，你可以使用 NFT 来表示游戏内物品，例如头像、可穿戴物、武器和其他库存物品。例如，你可以用一种 NFT 来表示游戏中的所有武器，并通过在这些 NFT 中设置不同属性来区分它们。

NFT 可用于提供可证明稀缺的数字商品。由于区块链所带来的真实稀缺性，买家可以放心，他们购买的艺术品确实是稀有的。这赋予了数字艺术前所未有的真实价值。

游戏物品会拥有记录在区块链中的历史。这段历史可能会让某件物品更有价值，例如它曾被用于取得重大成就，或曾被受人敬仰的人使用过。

根据描述该代币的合约，每个 NFT 可能是不可变的，或者你也可以允许玩家在选择时自定义并更改其某些特征。

*ERC721* 是以太坊网络中最被广泛接受的非同质化代币标准。LAND 代币遵循 ERC721 标准。

## 智能合约

合约由代码（其方法）和数据（其状态）组成，并驻留在以太坊区块链上的某个特定地址。

合约中的方法总是通过一笔具有 *to* 字段设置为合约地址的交易来调用。合约方法执行的代码可以包含对其他合约的调用，这些调用会触发更多交易，而这些交易具有 *from* 字段设置为合约地址。

合约不能自行触发任何动作，也不能基于时间事件触发。智能合约执行的所有动作都始终源自一笔调用合约某个函数的交易。

你可以使用智能合约根据自定义条件来约束交易。例如，玩家可以对一场游戏的结果下注，而一旦游戏结果被告知合约，相应的支付就会发生。

智能合约的全部代码对任何想要阅读的人都是公开的。这使开发者能够创建可公开验证的规则。

所有代币都由一个智能合约定义，该合约指定其特征以及可以对它执行的操作。Decentraland 编写并维护了若干智能合约。LAND 和 MANA 代币本身由 *LANDregistry* 和 *MANAtoken* 合约分别定义。

你可以在以下位置找到 Decentraland 创建的每个合约的地址： [Decentraland 智能合约](https://contracts.decentraland.org/addresses.json).

你可以阅读这些合约的完整代码，因为它们是区块链上的公开信息。你可以在以下位置按名称查找这些合约： [Etherscan](https://etherscan.io/contractsVerified) 并在那里阅读其内容。

## dApp（去中心化应用）

*dApp（去中心化应用）* （去中心化应用）是建立在智能合约和区块链之上的应用。

dApp 可以很简单，例如验证你的钱包是否持有某个特定代币，并允许你使用某项服务；也可以是一个拥有自己 UI 的完整应用，例如 Decentraland Marketplace。

## Sepolia 测试网络

在部署智能合约、创建新类型代币，或创建依赖以太坊网络交易的 Decentraland 场景之前，你需要确保其中没有漏洞或空隙可被恶意用户利用。

Sepolia 测试网络是以太坊的一个替代版本，专门用于运行测试。

Sepolia 网络中的代币没有真实价值，因此你可以放心犯错，而不会承担任何真正的风险。你可以通过水龙头免费补充任何丢失的代币：

* Sepolia Ether 水龙头（<https://www.alchemy.com/faucets/ethereum-sepolia/>)

如果你正在开发一个会触发交易的场景，那么在 Sepolia 网络中测试这些交易是免费的，因为你发送的代币没有价值。在主网中，你每执行一次测试交易都至少需要支付真实的 Ether gas 费用。

一旦你确信代码按预期工作且不会被利用，就可以部署到以太坊主网。

## 区块链重组

有时，多台机器会在大致相同的时间创建新的替代区块。这会造成问题，因为这会把链分叉成两个不断分化、甚至可能彼此矛盾的版本。当发生分叉时，以太坊通过始终优先选择最长的链并丢弃所有较短的链来解决这个问题。即使两个竞争链可以同时存在，很快其中一条链就会再增加一个区块，从而超过另一条。由于解决挖矿算法需要时间，竞争中的链要想彼此完美同步地继续增长会变得越来越困难。迟早其中一条会胜过另一条。

当一条链超过另一条，争议得到解决后，原先采用较短链的机器需要进行调整。这就是所谓的“重组”。它们需要回滚所在分支中的所有区块里包含的交易，直到到达分叉发生的点。然后，它们需要添加被视为合法的较长分支中的新区块。

被回滚的交易可能会重新返回到待处理交易池中，直到再次被矿工拾取（或被丢弃）。为这些交易支付的任何 gas 费用也会被回滚。

刚刚添加到链末尾的区块由于上面解释的机制，有相当大的概率会被回滚。随着后续区块不断添加到链末尾，区块链中更靠前的区块被回滚的可能性会越来越小，因为那需要更大规模的重组。正因如此，在一笔交易之后，每一个新增到链末尾的区块都被称为这笔交易的一个确认。

在创建使用区块链外信息的应用（或场景）时，你应该注意重组的发生。你可能希望只有在达到一定数量的确认后，才将交易视为已验证，并且该交易不再处于链的最末端。

使用多个确认会使信息非常稳定，但交易反映出来会花费较长时间。

使用较少的确认，变化会更快反映出来，但在发生重组时，有时会出现看似撤销交易的情况。如果这些交易在你的场景中会产生链下后果，那么你可能还需要以某种方式逆转这些后果。
