This commit is contained in:
Greg Fitzgerald 2019-02-06 17:13:11 -07:00
parent 31b0d14856
commit 5bb4ac9873
2 changed files with 24 additions and 22 deletions

View File

@ -24,7 +24,7 @@
- [Proposed Architectural Changes](proposals.md)
- [Ledger Replication](ledger-replication.md)
- [Secure Enclave](enclave.md)
- [Secure Vote Signing](vote-signer.md)
- [Staking Rewards](staking-rewards.md)
- [Fork Selection](fork-selection.md)
- [Blocktree](blocktree.md)

View File

@ -1,9 +1,9 @@
# Secure Vote Signing
The gaol of this design is to address the following challenges with voting:
The goal of this design is to address the following challenges with voting:
* Validators execute untrusted code in a potentially insecure VM.
* Validators sign the result of their work and submit consensus votes.
* A validator execute untrusted code in a potentially insecure VM.
* A validator signs the result of its work and votes on a fork.
* Votes that violate consensus rules could be used to slash the stake used in the vote.
Every node contains an asymmetric key that's used for signing and verifying the
@ -19,40 +19,42 @@ protection. An enclave can be used to generate an asymmetric key and keep the
private key in its protected memory. It can expose an API that user (untrusted)
code can use for signing the transactions.
## Vote Signers, Validators and Stake Owners
## Vote Signers, Validators and Stakeholders
A validator is a fullnode that is connected to the cluster and
executes transactions. A validator computes all the possible forks
that are concurrently active in the cluster. A validator picks the
best possible fork to vote and requests the vote signer to sign the
vote.
A validator is a role of a fullnode and validates transactions.
When it receives multiple blocks for the same slot, the validator
tracks all possible forks until it can determine a "best" one.
A validator selects the best fork by submitting a vote to it. When
voting it utilizes a *vote signer* to minimize the possibility of
its vote inadvertently violating a consensus rule and getting the
stakeholder's stake slashed.
A vote signer evaluates the vote proposed by the validator and signs
the vote only if it does not violate a slashing condition. A vote
signer only needs to maintain minimum state regarding the votes it
signer only needs to maintain minimal state regarding the votes it
signed, and the votes signed by the rest of the cluster. It doesn't
need to process a full set of transactions.
A stake owner is an identity that has control of the staked capital.
The stake owner can delegate their stake to the vote signer. Once
A stakeholder is an identity that has control of the staked capital.
The stakeholder can delegate its stake to the vote signer. Once
a stake is delegated, the vote signer votes represent the voting
weight of all the delegated stakes, and produce rewards for all the
delegated stakes.
A single validator could do work for multiple vote signers. For a
single vote signer to observe votes from multiple validators and
only vote if M/N agree. For a single vote signer to be delegated
multiple stakes. For a single stake owner to delegate a portion of
the stake to multiple vote signers.
A single validator could operate on behalf of multiple vote signers.
If a single vote signer observes votes from multiple validators, it
may choose to vote only if some percentage agree. A single vote
signer may be delegated multiple stakes. A single stakeholder may
delegate portions of its stake to multiple vote signers.
For simplicity, the intial rollout should focus on the following
For simplicity, the initial rollout should focus on the following
configuration:
* 1:1 relationship between validator and vote signer. The validator
can use the vote signer's public key as its identity. This key
should have some sols to pay for execution of votes.
* Stake Owner can delegate the entire stake to a single vote signer.
* Stakeholder can delegate the entire stake to a single vote signer.
And a vote signer may have more than 1 stake delegated to them.
The vote signer may need to submit multiple votes to register a
vote with a stake public key that does not fit into a single
@ -70,8 +72,8 @@ transaction.
2. The node performs attestation of the enclave (e.g using Intel's IAS APIs)
* The node ensures that the Secure Enclave is running on a TPM and is
signed by a trusted party
3. The owner of the node grants ephemeral key permission to use its stake. This
process is TBD.
3. The stakeholder of the node grants ephemeral key permission to use its stake.
This process is TBD.
4. The node's untrusted, non-enclave software calls trusted enclave software
using its interface to sign transactions and other data.
* In case of vote signing, the node needs to verify the PoH. The PoH