# 网关

## 概述

在天玄中，网关的主要任务是负责接收外部交易并缓存到交易池、使用P2P协议对加以进行广播、推送交易池中的交易到节点中进行共识、执行。

通常，完整的以太坊节点交易池、P2P、共识节点网络一体，尤其是在大量交易等待验签、广播的场景下，交易不能得到充分传播，联盟链性能很容易受到约束。而抽象出网关单独处理验签、广播、交易池的工作能够提高交易的吞吐量，释放共识性能。

## 详细设计

天玄网关可分为三个模块：

1. JSON RPC 服务。
2. 交易池服务。
3. 交易广播服务

<div align="left"><figure><img src="https://2421358706-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FToGlQ0m0lJK93wdwspDn%2Fuploads%2Fgit-blob-b5f9920dad5dc7b4f8117bc3203aa63a9d5a5cce%2F%E7%BD%91%E5%85%B3.png?alt=media" alt=""><figcaption><p>图1. 网关架构</p></figcaption></figure></div>

### JSON RPC

天玄JSON RPC是一套基于Jsonrpc4j提供的RPC服务，其遵循JSONRPC 2.0标准，主要提供区块链数据查询和交互的功能，详细的接口定义参考 [JSON-RPC API接口文档](https://tianxuan-chain.gitbook.io/tianxuan-tech-docs/app-development-manual/interface-list)

### 交易池

天玄网关交易池是一个生成者和消费者模型，由 JSON RPC 服务接收消费者交易，由广播和推送服务消费交易。基本模型如下：

<div align="left"><figure><img src="https://2421358706-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FToGlQ0m0lJK93wdwspDn%2Fuploads%2Fgit-blob-6f472f145d07563afbeaf85eecf77b65617d7821%2F%E4%BA%A4%E6%98%93%E6%B1%A0.png?alt=media" alt=""><figcaption><p>图2. 交易池</p></figcaption></figure></div>

交易池的主要工作包含：

* 对输入的交易进行签名验证
* 缓存有效交易并推送广播
* 推送交易到共识节点。其中，推送服务是一个由GRPC实现的一个高速透传发送，可以将推送队列中的消息快速推送到天玄共识节点；GRPC拥有压缩效率高，传输速率高等有点；

### 交易广播服务

广播服务本质上是一个 P2P 网络，它由树状构造节点连接，收到消息后广播到根节点，由根节点快速广播到子节点。模型如下：

<div align="left"><figure><img src="https://2421358706-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FToGlQ0m0lJK93wdwspDn%2Fuploads%2Fgit-blob-a7443b1e6cfa926d57f6b377152e8118d0cff7de%2F%E7%BD%91%E5%85%B3%E4%BA%A4%E6%98%93%E5%B9%BF%E6%92%AD%E6%9C%8D%E5%8A%A1.png?alt=media" alt=""><figcaption><p>图3. P2P n叉树交易池</p></figcaption></figure></div>

模型中，所有节点以 ID 表示，从小到大排序后，组成树状网络。非根节点收到消息后推送根节点，然后由父推送给子节点依次完成推送。
