---
title: 安全投票签名
---

验证节点接收当前领导者的条目并提交这些条目的确认票数。 这个投票对安全提出了一种挑战，因为违反共识规则的伪造票可以用来罚没验证节点的质押。

验证节点通过一个采用不对称密钥来验证签名结果的交易，来对其选定的分叉进行投票。 其他实体可以使用验证节点的公钥验证此签名。 如果验证节点密钥被用来签名不正确的数据\(例如) 对账本的多个分叉进行投票\，那么节点的质押或资源可能会受到损害。

解决这个风险的办法是将单独的 _投票签名者_ 服务分割出来，评估每次投票以确保它没有违反罚没条件。

## 验证节点，投票签名者和质押者

当一个验证节点收到多个区块的同一个插槽时，它会跟踪所有可能的分叉，直到确定一个“最佳”的。 验证节点通过投票选择最好的分叉，通过投票签名者尽量减少投票造成违反共识和导致质押被罚没的可能性。

投票签名者对验证节点提议的投票进行评估，并且只在不违反罚没条件的情况下进行投票。 一个投票签名者只需要保持它所签署的投票和其余集群成员所签署的选票处于最低状态。 它不需要处理全部的交易。

质押者是一个对其质押资产具有控制权的实体。 质押者可以将其质押委托给投票签署人。 一旦某个质押被委托，投票人将代表所有受委托质押行驶投票权，同时为他们带来奖励。

目前，验证节点和投票签名者之间是 1:1 的关系，质押人将他们的全部质押委托给某一个的签名者。

## 签名服务

投票签名服务由 JSON RPC 服务器和请求处理器组成。 启动时，服务会在配置端口启动 RPC 服务器，等待验证节点请求。 请求类型包括如下几种：

1. 注册一个新的验证节点

    - 请求必须包含验证节点身份\(公钥\)
    - 请求必须通过验证节点的私钥签名
    - 如果无法验证请求签名，服务就会丢弃该请求
    - 服务为验证节点创建了一个新的投票权不对称密钥，并返回公钥作为响应
    - 如果验证节点试图再次注册，服务会从原有的密钥对返回公钥

2. 签名投票

    - 请求必须包含投票交易和所有验证数据
    - 请求必须通过验证节点的私钥签名
    - 如果无法验证请求签名，服务就会丢弃该请求
    - 服务验证投票数据
    - 服务返回交易的签名

## 验证节点投票

某个验证节点在启动时创建一个新的投票帐户，并通过提交一个新的“投票登记表”交易，在集群中进行注册。 集群中的其他节点处理该笔交易，并在活动集合中包含新的验证节点。 随后，验证节点在每次投票事件中提交了由验证节点投票私钥签名的“新投票”交易。

### 配置

验证节点通过签名服务的网络端点\(IP/port\) 配置。

### 注册

在启动时，验证节点使用 JSON RPC 注册其签名服务。 RPC 调用返回验证节点的投票公钥。 验证节点创建一个新的“投票注册”交易并把公钥包含进去，将其提交给集群。

### 投票收集

验证节点在上次投票期间查找集群中所有节点提交的票数。 然后把该信息提交给签名服务，并附有新的投票签名请求。

### 新的投票签名

验证节点创建了一笔“新投票”交易，并通过 JSON RPC 将其发送到签名服务。 RPC 请求还包括了投票检查数据。 如果成功，RPC 调用将返回投票的签名。 如果失败，RPC 调用将返回故障编码。
