Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Make the consensus enclave aware of the master minters #1684

Merged
merged 29 commits into from
Mar 22, 2022

Conversation

eranrund
Copy link
Contributor

Motivation

The Consensus enclave needs to be aware of the master minters configuration for two purposes:

  1. It allows it to hash it into the ResponderId. This ensures all nodes are using the same exact configuration
  2. It allows the enclave to validate MintConfigTx transactions, which adds another safety layer to configuration changes.

In this PR

  • Adding the token-to-signer set (aka master minters) to the enclave configuration, which then gets it digested into the ResponderId
  • Use it to validate MintConfigTxs when a block is formed.

eranrund and others added 22 commits March 11, 2022 13:09
* minting configuration wip

* fmt

* fix indent

* fix test

* add test, be more aggressive about validation

* use serde(with=...)

* one line
* initial mint data structures

* basic mint config in ledger

* basic get/set test

* another test

* update total minted api+tests

* add migration code

* enforce limit

* lock and lint

* fmt

* update comment and remove pub

* update lock files

* misc pr review fixes

* add a test for setting an active configuration with no configs

* small fixes

* use PEM encoding for signers

* fix tag

* ensure total minted amount cannot decrease

* use inconsistent_digit_grouping to make version numbers more readable

* fmt
* add external.proto minting messages and api conversion traits

* tests

* mint tx conversions

* lint

* fix module name
* wip

* remove BlockContents::new to make adding new fields less tedious

* fix typos/lints

* add todo

* fix typos

* more defaults

* tests

* iterate

* more tests

* remove unneeded public api

* more tests

* more tests

* stricter validation

* reorganize code

* lint

* add mint migration code

* mint_tx_store test no. 1

* dont allow overwriting existing blocks, iterate on test

* pr fixes

* lint

* more tests

* add test

* remove unneeded type declaration

* Update ledger/db/src/mint_config_store.rs

Co-authored-by: sugargoat <sugargoat@mobilecoin.com>

* rename test to better explain what its testing

* be more strict about having outputs when MintTxs are present

Co-authored-by: sugargoat <sugargoat@mobilecoin.com>
* wip

* remove BlockContents::new to make adding new fields less tedious

* fix typos/lints

* add todo

* fix typos

* more defaults

* tests

* iterate

* more tests

* remove unneeded public api

* more tests

* more tests

* stricter validation

* reorganize code

* lint

* add mint migration code

* mint_tx_store test no. 1

* dont allow overwriting existing blocks, iterate on test

* pr fixes

* lint

* more tests

* add test

* remove unneeded type declaration

* add public ledger api for looking up mint txs by nonce, change to return block index since that is more useful

* missing mock changes

* fix fmt

* Update ledger/db/src/mint_config_store.rs

Co-authored-by: Remoun Metyas <remoun@mobilecoin.com>

* fix typo

* Update ledger/db/src/mint_config_store.rs

Co-authored-by: sugargoat <sugargoat@mobilecoin.com>

* rename test to better explain what its testing

* be more strict about having outputs when MintTxs are present

* add public ledger api for looking up mint txs by nonce, change to return block index since that is more useful

Co-authored-by: Remoun Metyas <remoun@mobilecoin.com>
Co-authored-by: sugargoat <sugargoat@mobilecoin.com>
* wip

* remove BlockContents::new to make adding new fields less tedious

* fix typos/lints

* add todo

* fix typos

* more defaults

* tests

* iterate

* more tests

* remove unneeded public api

* more tests

* more tests

* stricter validation

* reorganize code

* lint

* add mint migration code

* mint_tx_store test no. 1

* dont allow overwriting existing blocks, iterate on test

* pr fixes

* lint

* more tests

* add test

* remove unneeded type declaration

* add public ledger api for looking up mint txs by nonce, change to return block index since that is more useful

* missing mock changes

* fix fmt

* Update ledger/db/src/mint_config_store.rs

Co-authored-by: Remoun Metyas <remoun@mobilecoin.com>

* fix typo

* Update ledger/db/src/mint_config_store.rs

Co-authored-by: sugargoat <sugargoat@mobilecoin.com>

* rename test to better explain what its testing

* be more strict about having outputs when MintTxs are present

* add public ledger api for looking up mint txs by nonce, change to return block index since that is more useful

* initial work on validation

* SetMintConfigTx validation + tests

* reorganize

* MintTx validation and tests

* lint

* add comments

* update comments

* Update transaction/core/src/mint/validation/common.rs

Co-authored-by: Remoun Metyas <remoun@mobilecoin.com>

* Update transaction/core/src/mint/validation/config.rs

Co-authored-by: Remoun Metyas <remoun@mobilecoin.com>

* address pr review comment

* make nonce constant length

Co-authored-by: Remoun Metyas <remoun@mobilecoin.com>
Co-authored-by: sugargoat <sugargoat@mobilecoin.com>
* SetMintConfigTx -> MintConfigTx

* more renames
* Update grpcio to 0.10 (#1592)

* Bump pretty_assertions from 1.1.0 to 1.2.0 (#1610)

Bumps [pretty_assertions](https://github.com/colin-kiegel/rust-pretty-assertions) from 1.1.0 to 1.2.0.
- [Release notes](https://github.com/colin-kiegel/rust-pretty-assertions/releases)
- [Changelog](https://github.com/colin-kiegel/rust-pretty-assertions/blob/main/CHANGELOG.md)
- [Commits](https://github.com/colin-kiegel/rust-pretty-assertions/commits)

---
updated-dependencies:
- dependency-name: pretty_assertions
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* delete slam, fixes #1574 (#1611)

slam is no longer needed because fog-distro, which began life
as a fork of it, has superceded it and slam is no longer used in
CD

* introduce FormBlockInputs and break out some code from form_block into its own method (#1625)

* introduce FormBlockInputs and break out some code from form_block into its own method

* add some missing code

* add missing import

* remove the Copy trait from ConsensusValue  (#1628)

* remove the Copy and Display traits from ConsensusValue since they make it hard to add transaction types that cant implement them

* add back display

* fmt

Co-authored-by: Remoun Metyas <remoun@mobilecoin.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Chris Beck <beck.ct@gmail.com>
* initial work on stubbing out SetMintConfigTx

* MintTxManager replaces stubs

* grpc api

* fmt

* mint client and misc improvements

* interate towards tx working

* actual validation taking place

* iterate

* append block from client works

* wip

* rename and lint

* fix nonce length

* comine, cleanups, validate that nonce is not already in ledger

* cleanups

* lint

* make test code reusable

* add tests

* structopt -> clap

* rebase fixes

* fix test

* Update consensus/mint-client/src/config.rs

Co-authored-by: Remoun Metyas <remoun@mobilecoin.com>

* address review comments

* Update transaction/core/test-utils/src/mint.rs

Co-authored-by: Remoun Metyas <remoun@mobilecoin.com>

* use dedup_by+truncate

* renames

* undo incorrect change

* typo

Co-authored-by: Remoun Metyas <remoun@mobilecoin.com>
…1641)

* stub out ProposeMintTx

* expose get_active_mint_config_for_mint_tx, more plumbing

* undo wrong change

* MintTxManager impls for MintTx

* mint client support subcommands

* basic MintTx flow works, getting NoOutputs

* mobilecoind api filtering for token_id

* minting is working :)

* client improvements, local network script defaults to having two mintable tokens

* tests

* more tests yay

* testsssssssss

* test fixes and linting

* try without block version

* back to block v3

* Update consensus/service/src/api/client_api_service.rs

Co-authored-by: Remoun Metyas <remoun@mobilecoin.com>

* new line

Co-authored-by: Remoun Metyas <remoun@mobilecoin.com>
Co-authored-by: Remoun Metyas <remoun@mobilecoin.com>
Co-authored-by: Remoun Metyas <remoun@mobilecoin.com>
@eranrund eranrund changed the title Make the consensus enclave be aware of the master minters Make the consensus enclave aware of the master minters Mar 22, 2022
consensus/enclave/impl/src/lib.rs Outdated Show resolved Hide resolved
Base automatically changed from feature/minting to master March 22, 2022 16:53
cbeck88
cbeck88 previously approved these changes Mar 22, 2022
@eranrund eranrund requested a review from remoun March 22, 2022 23:00
@eranrund eranrund merged commit acbf108 into master Mar 22, 2022
@eranrund eranrund deleted the eran/enclave-master-minters branch March 22, 2022 23:16
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants