pub struct BoundarySystemContract {Show 13 fields
pub name: String,
pub phase: BoundaryPhase,
pub cadence: SystemCadence,
pub reads: Vec<StateKey>,
pub writes: Vec<StateKey>,
pub emits: Vec<String>,
pub reservation_offers: Vec<StateKey>,
pub reservation_requests: Vec<StateKey>,
pub reservation_reads: Vec<ReservationRef>,
pub random_streams: Vec<RandomStreamKey>,
pub knowledge_writes: Vec<KnowledgeWriteGrant>,
pub plugin_ingress_targets: Vec<PluginIngressTarget>,
pub visibility: StateVisibility,
}Fields§
§name: String§phase: BoundaryPhase§cadence: SystemCadence§reads: Vec<StateKey>§writes: Vec<StateKey>§emits: Vec<String>§reservation_offers: Vec<StateKey>§reservation_requests: Vec<StateKey>§reservation_reads: Vec<ReservationRef>§random_streams: Vec<RandomStreamKey>§knowledge_writes: Vec<KnowledgeWriteGrant>§plugin_ingress_targets: Vec<PluginIngressTarget>§visibility: StateVisibilityImplementations§
Source§impl BoundarySystemContract
impl BoundarySystemContract
Sourcepub fn new(
name: impl Into<String>,
phase: BoundaryPhase,
cadence: SystemCadence,
) -> BoundarySystemContract
pub fn new( name: impl Into<String>, phase: BoundaryPhase, cadence: SystemCadence, ) -> BoundarySystemContract
Examples found in repository?
examples/phased_boundary.rs (lines 98-102)
97 fn register(&self, registrar: &mut canwu_api::PluginRegistrar<'_>) -> Result<(), CanwuError> {
98 let mut contract = BoundarySystemContract::new(
99 "offer",
100 BoundaryPhase::ReservationAndAllocation,
101 SystemCadence::Daily,
102 );
103 contract.reservation_offers = vec![StateKey::new("logistics", "grain")];
104 registrar.register_boundary_system(contract, offer_grain)
105 }
106}
107
108struct DemandPlugin;
109
110impl SimulationPlugin for DemandPlugin {
111 fn name(&self) -> &'static str {
112 "example-demand"
113 }
114
115 fn version(&self) -> &'static str {
116 "1.0.0"
117 }
118
119 fn semantic_hash(&self) -> &'static str {
120 "331b865359d4ac4a14c9bf90da665b82b4aa65ee63c195e331d8f1fa181e7029"
121 }
122
123 fn register(&self, registrar: &mut canwu_api::PluginRegistrar<'_>) -> Result<(), CanwuError> {
124 let mut request = BoundarySystemContract::new(
125 "request",
126 BoundaryPhase::ReservationAndAllocation,
127 SystemCadence::Daily,
128 );
129 request.reservation_requests = vec![StateKey::new("logistics", "grain")];
130 registrar.register_boundary_system(request, request_grain)?;
131
132 let mut apply = BoundarySystemContract::new(
133 "apply",
134 BoundaryPhase::DomainDeltaProposal,
135 SystemCadence::Daily,
136 );
137 apply.writes = vec![StateKey::new("garrison", "grain")];
138 apply.emits = vec!["grain_allocated".to_owned()];
139 apply.reservation_reads = vec![ReservationRef::new(
140 "example-demand",
141 "request",
142 "daily-grain",
143 )];
144 apply.visibility = StateVisibility::SameBoundary;
145 registrar.register_boundary_system(apply, apply_grain)
146 }More examples
examples/governance_transition.rs (lines 444-448)
427 fn register(&self, registrar: &mut PluginRegistrar<'_>) -> Result<(), CanwuError> {
428 let mut schema = DomainRecordSchema::for_record::<ReliefOrderRecord>();
429 schema.payload_schema = object_schema(&[
430 ("order_id", PayloadValueType::String),
431 ("issued_by", PayloadValueType::String),
432 ("treasury_system", PayloadValueType::String),
433 ("treasury_version", PayloadValueType::Integer),
434 ("treasury_disposition", PayloadValueType::String),
435 ("treasury_hash", PayloadValueType::String),
436 ("county_system", PayloadValueType::String),
437 ("county_version", PayloadValueType::Integer),
438 ("county_disposition", PayloadValueType::String),
439 ("county_hash", PayloadValueType::String),
440 ]);
441 registrar.register_record_schema(schema)?;
442 registrar.register_ingress(issue_descriptor())?;
443
444 let mut publish = BoundarySystemContract::new(
445 "publish-order",
446 BoundaryPhase::DomainDeltaProposal,
447 SystemCadence::EventDriven,
448 );
449 publish.reads = vec![order_state(), StateKey::core_ingress()];
450 publish.writes = vec![order_state()];
451 publish.plugin_ingress_targets = vec![
452 canwu_api::PluginIngressTarget {
453 target_plugin: TREASURY_PLUGIN.to_owned(),
454 packet_type: EXECUTE_INGRESS.to_owned(),
455 },
456 canwu_api::PluginIngressTarget {
457 target_plugin: COUNTY_PLUGIN.to_owned(),
458 packet_type: EXECUTE_INGRESS.to_owned(),
459 },
460 ];
461 publish.visibility = StateVisibility::SameBoundary;
462 registrar.register_boundary_system(publish, publish_order)?;
463
464 let mut audit = BoundarySystemContract::new(
465 "audit-order",
466 BoundaryPhase::StrategicAggregation,
467 SystemCadence::EventDriven,
468 );
469 audit.reads = vec![
470 order_state(),
471 treasury_state(),
472 county_state(),
473 StateKey::core_ingress(),
474 ];
475 registrar.register_boundary_system(audit, audit_order)
476 }
477}
478
479struct TreasuryPlugin;
480
481impl SimulationPlugin for TreasuryPlugin {
482 fn name(&self) -> &'static str {
483 TREASURY_PLUGIN
484 }
485
486 fn version(&self) -> &'static str {
487 "1"
488 }
489
490 fn semantic_hash(&self) -> &'static str {
491 "0000000000000000000000000000000000000000000000000000000000000302"
492 }
493
494 fn register(&self, registrar: &mut PluginRegistrar<'_>) -> Result<(), CanwuError> {
495 let mut schema = DomainRecordSchema::for_entity::<TreasuryActionRecord>();
496 schema.payload_schema = object_schema(&[
497 ("status", PayloadValueType::String),
498 ("grain_units", PayloadValueType::Integer),
499 ]);
500 registrar.register_record_schema(schema)?;
501 registrar.register_ingress(execute_descriptor())?;
502 let mut prepare = BoundarySystemContract::new(
503 "prepare-treasury",
504 BoundaryPhase::HistoricalCandidateEvaluation,
505 SystemCadence::EventDriven,
506 );
507 prepare.reads = vec![order_state(), StateKey::core_ingress()];
508 prepare.writes = vec![treasury_state()];
509 prepare.visibility = StateVisibility::SameBoundary;
510 registrar.register_boundary_system(prepare, prepare_treasury)
511 }
512}
513
514struct CountyPlugin;
515
516impl SimulationPlugin for CountyPlugin {
517 fn name(&self) -> &'static str {
518 COUNTY_PLUGIN
519 }
520
521 fn version(&self) -> &'static str {
522 "1"
523 }
524
525 fn semantic_hash(&self) -> &'static str {
526 "0000000000000000000000000000000000000000000000000000000000000303"
527 }
528
529 fn register(&self, registrar: &mut PluginRegistrar<'_>) -> Result<(), CanwuError> {
530 let mut schema = DomainRecordSchema::for_entity::<CountyActionRecord>();
531 schema.payload_schema = object_schema(&[
532 ("status", PayloadValueType::String),
533 ("grain_units", PayloadValueType::Integer),
534 ]);
535 registrar.register_record_schema(schema)?;
536 registrar.register_ingress(execute_descriptor())?;
537 let mut prepare = BoundarySystemContract::new(
538 "prepare-county",
539 BoundaryPhase::HistoricalCandidateEvaluation,
540 SystemCadence::EventDriven,
541 );
542 prepare.reads = vec![order_state(), StateKey::core_ingress()];
543 prepare.writes = vec![county_state()];
544 prepare.visibility = StateVisibility::SameBoundary;
545 registrar.register_boundary_system(prepare, prepare_county)
546 }Trait Implementations§
Source§impl Clone for BoundarySystemContract
impl Clone for BoundarySystemContract
Source§fn clone(&self) -> BoundarySystemContract
fn clone(&self) -> BoundarySystemContract
Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
Performs copy-assignment from
source. Read moreSource§impl Debug for BoundarySystemContract
impl Debug for BoundarySystemContract
Source§impl<'de> Deserialize<'de> for BoundarySystemContract
impl<'de> Deserialize<'de> for BoundarySystemContract
Source§fn deserialize<__D>(
__deserializer: __D,
) -> Result<BoundarySystemContract, <__D as Deserializer<'de>>::Error>where
__D: Deserializer<'de>,
fn deserialize<__D>(
__deserializer: __D,
) -> Result<BoundarySystemContract, <__D as Deserializer<'de>>::Error>where
__D: Deserializer<'de>,
Deserialize this value from the given Serde deserializer. Read more
impl Eq for BoundarySystemContract
Source§impl PartialEq for BoundarySystemContract
impl PartialEq for BoundarySystemContract
Source§impl Serialize for BoundarySystemContract
impl Serialize for BoundarySystemContract
Source§fn serialize<__S>(
&self,
__serializer: __S,
) -> Result<<__S as Serializer>::Ok, <__S as Serializer>::Error>where
__S: Serializer,
fn serialize<__S>(
&self,
__serializer: __S,
) -> Result<<__S as Serializer>::Ok, <__S as Serializer>::Error>where
__S: Serializer,
Serialize this value into the given Serde serializer. Read more
impl StructuralPartialEq for BoundarySystemContract
Auto Trait Implementations§
impl Freeze for BoundarySystemContract
impl RefUnwindSafe for BoundarySystemContract
impl Send for BoundarySystemContract
impl Sync for BoundarySystemContract
impl Unpin for BoundarySystemContract
impl UnsafeUnpin for BoundarySystemContract
impl UnwindSafe for BoundarySystemContract
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more