# 交易的流动——从钱包到区块链网络

By [StupidBug.eth](https://paragraph.com/@stupidbug) · 2022-02-21

---

是否经常会好奇我在钱包上生成的交易是如何一步步流入区块链网络，并最终成为区块的一部分呢？

要想弄清这个问题，首先要搞清楚钱包的工作原理，以主流钱包MetaMask为例，在我们添加一个新的网络时，会需要填写以下信息。MetaMask在会为预置的网络填好这些信息，使用Chainlist添加网络的本质也是填入这些信息。

![MetaMask预置的以太坊网络](https://storage.googleapis.com/papyrus_images/59cd4403f8cb8245416b83383a533bacd7b0ed872540fefbc1de2e5872aa235b.png)

MetaMask预置的以太坊网络

![添加新网络需要的参数](https://storage.googleapis.com/papyrus_images/e3f30f4fe3d0fedeee8905244156eee55466790f39ff7e1399c20b9e6bf44089.png)

添加新网络需要的参数

其中**Chain ID**是EIP-155 引入的一个用来区分不同 EVM 链的一个标识。主要作用就是避免一个交易在签名之后被重复在不同的链上提交。最开始主要是为了防止以太坊交易在以太经典网络上重放或者以太经典交易在以太坊网络上重放

而**RPC URL**就是我们钱包接入区块链网络的关键，首先我们知道整个以太坊网络是一个大的去中心化的p2p网络，每个节点的地位相同。这里没有一个中心节点供我们将交易发送到其中，然后再将交易广播到网络中。想要发送交易，我们必须连接到网络中的一个节点，并向其发送交易。

那么问题来了，网络中这么多节点，**我们应该向哪个节点发送交易呢**？我们应该选择安全可靠的节点进行发送，否则很可能人家不打包你的交易，或者恶意滞留你的交易等等，此时对于我们来说有两个选择，搭建一个自己的以太坊节点或者选择可靠的Node Provider (节点提供商)，比如Infura, Quick Node。官方通常也会推荐一些节点在项目文档里。

**RPC URL** 中的url是资源定位符，通过DNS解析定位到具体的IP地址，找到目标计算机，这里涉及到一些计算机网络的知识。而RPC (Remote Procedure Call) 代表了一种请求目标计算机的技术思想或者风格，简单来说，现在你通过url定位到目标计算机，需要向其发送HTTP请求才能把交易发送过去，而RPC是请求的一种风格。

![](https://storage.googleapis.com/papyrus_images/12e2bf0a75830f2d6a2332aff50c20e17f90fc05515dc37356e7ea797ce7c729.png)

现在，交易已经来到以太坊网络中的一个节点，可是我们知道每个节点需要挖矿成功才能成为最新的区块，\*\*那假如这个节点一直没有挖到区块，那岂不是我们的交易永远无法上链了？\*\*实际情况是，节点在接受到一个交易后，会先对区块进行验证，恶意交易或者余额不够等等，验证成功以后会将其放入本节点的交易池，然后将该笔交易发送给临近的节点。临近的节点接受到该笔交易后，同样验证后进行交易池，以此类推，最终一笔交易约在6s内传输到整个以太坊网络。最终交易会打包进某一节点挖出的区块中。

_本文为作者学习过程总结的笔记，欢迎批评指正！_

---

*Originally published on [StupidBug.eth](https://paragraph.com/@stupidbug/XLU9wfycfYLQhVOOFCu2)*
