c5c7476518
[EIP-3030]: https://eips.ethereum.org/EIPS/eip-3030 [Web3Signer]: https://consensys.github.io/web3signer/web3signer-eth2.html ## Issue Addressed Resolves #2498 ## Proposed Changes Allows the VC to call out to a [Web3Signer] remote signer to obtain signatures. ## Additional Info ### Making Signing Functions `async` To allow remote signing, I needed to make all the signing functions `async`. This caused a bit of noise where I had to convert iterators into `for` loops. In `duties_service.rs` there was a particularly tricky case where we couldn't hold a write-lock across an `await`, so I had to first take a read-lock, then grab a write-lock. ### Move Signing from Core Executor Whilst implementing this feature, I noticed that we signing was happening on the core tokio executor. I suspect this was causing the executor to temporarily lock and occasionally trigger some HTTP timeouts (and potentially SQL pool timeouts, but I can't verify this). Since moving all signing into blocking tokio tasks, I noticed a distinct drop in the "atttestations_http_get" metric on a Prater node: ![http_get_times](https://user-images.githubusercontent.com/6660660/132143737-82fd3836-2e7e-445b-a143-cb347783baad.png) I think this graph indicates that freeing the core executor allows the VC to operate more smoothly. ### Refactor TaskExecutor I noticed that the `TaskExecutor::spawn_blocking_handle` function would fail to spawn tasks if it were unable to obtain handles to some metrics (this can happen if the same metric is defined twice). It seemed that a more sensible approach would be to keep spawning tasks, but without metrics. To that end, I refactored the function so that it would still function without metrics. There are no other changes made. ## TODO - [x] Restructure to support multiple signing methods. - [x] Add calls to remote signer from VC. - [x] Documentation - [x] Test all endpoints - [x] Test HTTPS certificate - [x] Allow adding remote signer validators via the API - [x] Add Altair support via [21.8.1-rc1](https://github.com/ConsenSys/web3signer/releases/tag/21.8.1-rc1) - [x] Create issue to start using latest version of web3signer. (See #2570) ## Notes - ~~Web3Signer doesn't yet support the Altair fork for Prater. See https://github.com/ConsenSys/web3signer/issues/423.~~ - ~~There is not yet a release of Web3Signer which supports Altair blocks. See https://github.com/ConsenSys/web3signer/issues/391.~~ |
||
---|---|---|
.. | ||
beacon_state | ||
test_utils | ||
aggregate_and_proof.rs | ||
attestation_data.rs | ||
attestation_duty.rs | ||
attestation.rs | ||
attester_slashing.rs | ||
beacon_block_body.rs | ||
beacon_block_header.rs | ||
beacon_block.rs | ||
beacon_committee.rs | ||
beacon_state.rs | ||
chain_spec.rs | ||
checkpoint.rs | ||
config_and_preset.rs | ||
consts.rs | ||
contribution_and_proof.rs | ||
deposit_data.rs | ||
deposit_message.rs | ||
deposit.rs | ||
enr_fork_id.rs | ||
eth1_data.rs | ||
eth_spec.rs | ||
fork_context.rs | ||
fork_data.rs | ||
fork_name.rs | ||
fork.rs | ||
free_attestation.rs | ||
graffiti.rs | ||
historical_batch.rs | ||
indexed_attestation.rs | ||
lib.rs | ||
participation_flags.rs | ||
participation_list.rs | ||
pending_attestation.rs | ||
preset.rs | ||
proposer_slashing.rs | ||
relative_epoch.rs | ||
selection_proof.rs | ||
shuffling_id.rs | ||
signed_aggregate_and_proof.rs | ||
signed_beacon_block_header.rs | ||
signed_beacon_block.rs | ||
signed_contribution_and_proof.rs | ||
signed_voluntary_exit.rs | ||
signing_data.rs | ||
slot_data.rs | ||
slot_epoch_macros.rs | ||
slot_epoch.rs | ||
sqlite.rs | ||
subnet_id.rs | ||
sync_aggregate.rs | ||
sync_aggregator_selection_data.rs | ||
sync_committee_contribution.rs | ||
sync_committee_message.rs | ||
sync_committee_subscription.rs | ||
sync_committee.rs | ||
sync_duty.rs | ||
sync_selection_proof.rs | ||
sync_subnet_id.rs | ||
tree_hash_impls.rs | ||
validator_subscription.rs | ||
validator.rs | ||
voluntary_exit.rs |