Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
Show all changes
27 commits
Select commit Hold shift + click to select a range
ab37149
enable target_a and _b syncing for sidechain mode and prepare new dem…
brenzi Nov 23, 2023
2ae982d
add shard vault proxy account on target A/B as well. derivation is de…
brenzi Nov 23, 2023
d62b26d
prepare event listener on target A and fix demoscript
brenzi Nov 23, 2023
d9bff04
remove old enclave_bridge unshield call from trusted_call
brenzi Nov 23, 2023
e9c408c
abstracting parentchain effect opaque_calls. stf can send to any pare…
brenzi Nov 23, 2023
ff686b6
sending stf extrinsics to all parentchains now
brenzi Nov 24, 2023
ec5918e
WIP: triggering block import of target_a and b upon sidechain on_slot
brenzi Nov 24, 2023
42b10e7
refactored aura to trigger target_a and target_b import
brenzi Nov 25, 2023
2f12d4b
shielding from target_a worked
brenzi Nov 25, 2023
a62dc20
demo passes first and second rungit add -u!
brenzi Nov 25, 2023
3c5cafc
log cosmetics
brenzi Nov 26, 2023
72f2849
generic event display (fails). log cosmetics
brenzi Nov 27, 2023
30c1ef5
hack the fees. and more pimps
brenzi Nov 27, 2023
c46c67b
recorded demo with this
brenzi Nov 27, 2023
90cb372
fixed cargo test
brenzi Nov 28, 2023
6d97c2a
clippy
brenzi Nov 28, 2023
c47a9c5
fixed enclave tests
brenzi Nov 28, 2023
6eacfd7
cleanup
brenzi Nov 28, 2023
886af3b
Merge branch 'master' into ab/target-a-shielding-unshielding-sidechai…
brenzi Nov 28, 2023
b16439c
fix CI
brenzi Nov 28, 2023
2ea0472
CI: introduce fee tolerance when assering balances
brenzi Nov 28, 2023
13c20f3
fix evm tests
brenzi Nov 28, 2023
20b7468
fix
brenzi Nov 28, 2023
83ee1aa
clippy with test flag
brenzi Nov 28, 2023
39a3147
fix demo_sidechain with fee tolerance
brenzi Nov 28, 2023
a70685d
CI fixes
brenzi Nov 28, 2023
b75036e
review remarks fixed
brenzi Nov 29, 2023
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
sending stf extrinsics to all parentchains now
  • Loading branch information
brenzi committed Nov 24, 2023
commit ff686b6d4e0abca80dabe946390709e61c6fd8ba
4 changes: 2 additions & 2 deletions core/offchain-worker-executor/src/executor.rs
Original file line number Diff line number Diff line change
Expand Up @@ -191,11 +191,11 @@ impl<
.collect();
let target_a_calls: Vec<OpaqueCall> = parentchain_effects
.iter()
.filter_map(|parentchain_call| parentchain_call.as_integritee())
.filter_map(|parentchain_call| parentchain_call.as_target_a())
.collect();
let target_b_calls: Vec<OpaqueCall> = parentchain_effects
.iter()
.filter_map(|parentchain_call| parentchain_call.as_integritee())
.filter_map(|parentchain_call| parentchain_call.as_target_b())
.collect();
debug!(
"stf wants to send calls to parentchains: Integritee: {} TargetA: {} TargetB: {}",
Expand Down
4 changes: 2 additions & 2 deletions enclave-runtime/src/initialization/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@ use crate::{
get_extrinsic_factory_from_integritee_solo_or_parachain,
get_node_metadata_repository_from_integritee_solo_or_parachain,
get_triggered_dispatcher_from_solo_or_parachain,
get_validator_accessor_from_solo_or_parachain,
get_validator_accessor_from_integritee_solo_or_parachain,
},
Hash,
};
Expand Down Expand Up @@ -226,7 +226,7 @@ pub(crate) fn init_enclave_sidechain_components() -> EnclaveResult<()> {
let sidechain_block_import_queue = GLOBAL_SIDECHAIN_IMPORT_QUEUE_COMPONENT.get()?;
let metadata_repository = get_node_metadata_repository_from_integritee_solo_or_parachain()?;
let extrinsics_factory = get_extrinsic_factory_from_integritee_solo_or_parachain()?;
let validator_accessor = get_validator_accessor_from_solo_or_parachain()?;
let validator_accessor = get_validator_accessor_from_integritee_solo_or_parachain()?;

let sidechain_block_import_confirmation_handler =
Arc::new(EnclaveBlockImportConfirmationHandler::new(
Expand Down
6 changes: 3 additions & 3 deletions enclave-runtime/src/rpc/worker_api_direct.rs
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ use crate::{
},
utils::{
get_stf_enclave_signer_from_solo_or_parachain,
get_validator_accessor_from_solo_or_parachain,
get_validator_accessor_from_integritee_solo_or_parachain,
},
};
use codec::Encode;
Expand Down Expand Up @@ -280,7 +280,7 @@ fn forward_dcap_quote_inner(params: Params) -> Result<OpaqueExtrinsic, String> {
let ext = generate_dcap_ra_extrinsic_from_quote_internal(url, &encoded_quote_to_forward)
.map_err(|e| format!("{:?}", e))?;

let validator_access = get_validator_accessor_from_solo_or_parachain().unwrap();
let validator_access = get_validator_accessor_from_integritee_solo_or_parachain().unwrap();
validator_access
.execute_mut_on_validator(|v| v.send_extrinsics(vec![ext.clone()]))
.unwrap();
Expand Down Expand Up @@ -308,7 +308,7 @@ fn attesteer_forward_ias_attestation_report_inner(
let ext = generate_ias_ra_extrinsic_from_der_cert_internal(url, &ias_attestation_report)
.map_err(|e| format!("{:?}", e))?;

let validator_access = get_validator_accessor_from_solo_or_parachain().unwrap();
let validator_access = get_validator_accessor_from_integritee_solo_or_parachain().unwrap();
validator_access
.execute_mut_on_validator(|v| v.send_extrinsics(vec![ext.clone()]))
.unwrap();
Expand Down
4 changes: 1 addition & 3 deletions enclave-runtime/src/test/sidechain_aura_tests.rs
Original file line number Diff line number Diff line change
Expand Up @@ -195,12 +195,10 @@ pub fn produce_sidechain_block_and_import_it() {
let propose_to_block_import_ocall_api =
Arc::new(ProposeToImportOCallApi::new(parentchain_header, block_importer));

send_blocks_and_extrinsics::<ParentchainBlock, _, _, _, _>(
send_blocks_and_extrinsics::<ParentchainBlock, _, _>(
blocks,
opaque_calls,
propose_to_block_import_ocall_api,
&validator_access,
&extrinsics_factory,
)
.unwrap();

Expand Down
4 changes: 1 addition & 3 deletions enclave-runtime/src/test/sidechain_event_tests.rs
Original file line number Diff line number Diff line change
Expand Up @@ -152,12 +152,10 @@ pub fn ensure_events_get_reset_upon_block_proposal() {
let propose_to_block_import_ocall_api =
Arc::new(ProposeToImportOCallApi::new(parentchain_header, block_importer));

send_blocks_and_extrinsics::<ParentchainBlock, _, _, _, _>(
send_blocks_and_extrinsics::<ParentchainBlock, _, _>(
blocks,
opaque_calls,
propose_to_block_import_ocall_api,
&validator_access,
&extrinsics_factory,
)
.unwrap();

Expand Down
78 changes: 34 additions & 44 deletions enclave-runtime/src/top_pool_execution.rs
Original file line number Diff line number Diff line change
Expand Up @@ -25,8 +25,12 @@ use crate::{
sync::{EnclaveLock, EnclaveStateRWLock},
utils::{
get_extrinsic_factory_from_integritee_solo_or_parachain,
get_extrinsic_factory_from_target_a_solo_or_parachain,
get_extrinsic_factory_from_target_b_solo_or_parachain,
get_stf_executor_from_solo_or_parachain, get_triggered_dispatcher_from_solo_or_parachain,
get_validator_accessor_from_solo_or_parachain,
get_validator_accessor_from_integritee_solo_or_parachain,
get_validator_accessor_from_target_a_solo_or_parachain,
get_validator_accessor_from_target_b_solo_or_parachain,
},
};
use codec::Encode;
Expand Down Expand Up @@ -94,7 +98,7 @@ fn execute_top_pool_trusted_calls_internal() -> Result<()> {

let parentchain_import_dispatcher = get_triggered_dispatcher_from_solo_or_parachain()?;

let validator_access = get_validator_accessor_from_solo_or_parachain()?;
let validator_access = get_validator_accessor_from_integritee_solo_or_parachain()?;

// This gets the latest imported block. We accept that all of AURA, up until the block production
// itself, will operate on a parentchain block that is potentially outdated by one block
Expand Down Expand Up @@ -123,8 +127,6 @@ fn execute_top_pool_trusted_calls_internal() -> Result<()> {

let block_composer = GLOBAL_SIDECHAIN_BLOCK_COMPOSER_COMPONENT.get()?;

let extrinsics_factory = get_extrinsic_factory_from_integritee_solo_or_parachain()?;

let state_handler = GLOBAL_STATE_HANDLER_COMPONENT.get()?;

let ocall_api = GLOBAL_OCALL_API_COMPONENT.get()?;
Expand Down Expand Up @@ -169,13 +171,7 @@ fn execute_top_pool_trusted_calls_internal() -> Result<()> {

log_remaining_slot_duration(&slot, "After AURA");

send_blocks_and_extrinsics::<Block, _, _, _, _>(
blocks,
parentchain_calls,
ocall_api,
validator_access.as_ref(),
extrinsics_factory.as_ref(),
)?;
send_blocks_and_extrinsics::<Block, _, _>(blocks, parentchain_calls, ocall_api)?;

log_remaining_slot_duration(&slot, "After broadcasting and sending extrinsic");
},
Expand Down Expand Up @@ -243,59 +239,53 @@ where
}

/// Broadcasts sidechain blocks to fellow peers and sends opaque calls as extrinsic to the parentchain.
pub(crate) fn send_blocks_and_extrinsics<
ParentchainBlock,
SignedSidechainBlock,
OCallApi,
ValidatorAccessor,
ExtrinsicsFactory,
>(
pub(crate) fn send_blocks_and_extrinsics<ParentchainBlock, SignedSidechainBlock, OCallApi>(
blocks: Vec<SignedSidechainBlock>,
parentchain_calls: Vec<ParentchainCall>,
ocall_api: Arc<OCallApi>,
validator_access: &ValidatorAccessor,
extrinsics_factory: &ExtrinsicsFactory,
) -> Result<()>
where
ParentchainBlock: BlockTrait,
SignedSidechainBlock: SignedBlock + 'static,
OCallApi: EnclaveSidechainOCallApi,
ValidatorAccessor: ValidatorAccess<ParentchainBlock> + Send + Sync + 'static,
NumberFor<ParentchainBlock>: BlockNumberOps,
ExtrinsicsFactory: CreateExtrinsics,
{
debug!("Proposing {} sidechain block(s) (broadcasting to peers)", blocks.len());
ocall_api.propose_sidechain_blocks(blocks)?;

let integritee_calls: Vec<OpaqueCall> = parentchain_calls
let calls: Vec<OpaqueCall> = parentchain_calls
.iter()
.filter_map(|parentchain_call| parentchain_call.as_integritee())
.collect();
let target_a_calls: Vec<OpaqueCall> = parentchain_calls
debug!("Enclave wants to send {} extrinsics to Integritee Parentchain", calls.len());
if !calls.is_empty() {
let extrinsics_factory = get_extrinsic_factory_from_integritee_solo_or_parachain()?;
let xts = extrinsics_factory.create_extrinsics(calls.as_slice(), None)?;
let validator_access = get_validator_accessor_from_integritee_solo_or_parachain()?;
validator_access.execute_mut_on_validator(|v| v.send_extrinsics(xts))?;
}
let calls: Vec<OpaqueCall> = parentchain_calls
.iter()
.filter_map(|parentchain_call| parentchain_call.as_integritee())
.filter_map(|parentchain_call| parentchain_call.as_target_a())
.collect();
let target_b_calls: Vec<OpaqueCall> = parentchain_calls
debug!("Enclave wants to send {} extrinsics to TargetA Parentchain", calls.len());
if !calls.is_empty() {
let extrinsics_factory = get_extrinsic_factory_from_target_a_solo_or_parachain()?;
let xts = extrinsics_factory.create_extrinsics(calls.as_slice(), None)?;
let validator_access = get_validator_accessor_from_target_a_solo_or_parachain()?;
validator_access.execute_mut_on_validator(|v| v.send_extrinsics(xts))?;
}
let calls: Vec<OpaqueCall> = parentchain_calls
.iter()
.filter_map(|parentchain_call| parentchain_call.as_integritee())
.filter_map(|parentchain_call| parentchain_call.as_target_b())
.collect();
debug!(
"stf wants to send calls to parentchains: Integritee: {} TargetA: {} TargetB: {}",
integritee_calls.len(),
target_a_calls.len(),
target_b_calls.len()
);
if !target_a_calls.is_empty() {
warn!("sending extrinsics to target A unimplemented")
};
if !target_b_calls.is_empty() {
warn!("sending extrinsics to target B unimplemented")
};

let xts = extrinsics_factory.create_extrinsics(integritee_calls.as_slice(), None)?;

debug!("Sending sidechain block(s) confirmation extrinsic.. ");
validator_access.execute_mut_on_validator(|v| v.send_extrinsics(xts))?;
debug!("Enclave wants to send {} extrinsics to TargetB Parentchain", calls.len());
if !calls.is_empty() {
let extrinsics_factory = get_extrinsic_factory_from_target_b_solo_or_parachain()?;
let xts = extrinsics_factory.create_extrinsics(calls.as_slice(), None)?;
let validator_access = get_validator_accessor_from_target_b_solo_or_parachain()?;
validator_access.execute_mut_on_validator(|v| v.send_extrinsics(xts))?;
}

Ok(())
}
Expand Down
28 changes: 27 additions & 1 deletion enclave-runtime/src/utils.rs
Original file line number Diff line number Diff line change
Expand Up @@ -96,7 +96,7 @@ pub(crate) fn get_triggered_dispatcher(
Ok(triggered_dispatcher)
}

pub(crate) fn get_validator_accessor_from_solo_or_parachain(
pub(crate) fn get_validator_accessor_from_integritee_solo_or_parachain(
) -> Result<Arc<EnclaveValidatorAccessor>> {
let validator_accessor =
if let Ok(solochain_handler) = GLOBAL_INTEGRITEE_SOLOCHAIN_HANDLER_COMPONENT.get() {
Expand All @@ -109,6 +109,32 @@ pub(crate) fn get_validator_accessor_from_solo_or_parachain(
Ok(validator_accessor)
}

pub(crate) fn get_validator_accessor_from_target_a_solo_or_parachain(
) -> Result<Arc<EnclaveValidatorAccessor>> {
let validator_accessor =
if let Ok(solochain_handler) = GLOBAL_TARGET_A_SOLOCHAIN_HANDLER_COMPONENT.get() {
solochain_handler.validator_accessor.clone()
} else if let Ok(parachain_handler) = GLOBAL_TARGET_A_PARACHAIN_HANDLER_COMPONENT.get() {
parachain_handler.validator_accessor.clone()
} else {
return Err(Error::NoTargetAParentchainAssigned)
};
Ok(validator_accessor)
}

pub(crate) fn get_validator_accessor_from_target_b_solo_or_parachain(
) -> Result<Arc<EnclaveValidatorAccessor>> {
let validator_accessor =
if let Ok(solochain_handler) = GLOBAL_TARGET_B_SOLOCHAIN_HANDLER_COMPONENT.get() {
solochain_handler.validator_accessor.clone()
} else if let Ok(parachain_handler) = GLOBAL_TARGET_B_PARACHAIN_HANDLER_COMPONENT.get() {
parachain_handler.validator_accessor.clone()
} else {
return Err(Error::NoTargetBParentchainAssigned)
};
Ok(validator_accessor)
}

pub(crate) fn get_node_metadata_repository_from_integritee_solo_or_parachain(
) -> Result<Arc<EnclaveNodeMetadataRepository>> {
let metadata_repository =
Expand Down