polkadot_node_core_pvf_common/
lib.rs1#![deny(unused_crate_dependencies)]
19
20pub mod error;
21pub mod execute;
22pub mod executor_interface;
23pub mod prepare;
24pub mod pvf;
25pub mod worker;
26pub mod worker_dir;
27
28pub use cpu_time::ProcessTime;
29
30pub use sp_tracing;
32
33const LOG_TARGET: &str = "parachain::pvf-common";
34
35use codec::{Decode, Encode};
36use sp_core::H256;
37use std::{
38 io::{self, Read, Write},
39 mem,
40};
41
42#[cfg(feature = "test-utils")]
43pub mod tests {
44 use std::time::Duration;
45
46 pub const TEST_EXECUTION_TIMEOUT: Duration = Duration::from_secs(3);
47 pub const TEST_PREPARATION_TIMEOUT: Duration = Duration::from_secs(30);
48}
49
50#[derive(Debug, Clone, Default, PartialEq, Eq, Encode, Decode)]
52pub struct SecurityStatus {
53 pub secure_validator_mode: bool,
56 pub can_enable_landlock: bool,
58 pub can_enable_seccomp: bool,
60 pub can_unshare_user_namespace_and_change_root: bool,
62 pub can_do_secure_clone: bool,
64}
65
66#[derive(Debug, Encode, Decode)]
68pub struct WorkerHandshake {
69 pub security_status: SecurityStatus,
70}
71
72pub fn framed_send_blocking(w: &mut (impl Write + Unpin), buf: &[u8]) -> io::Result<()> {
75 let len_buf = buf.len().to_le_bytes();
76 w.write_all(&len_buf)?;
77 w.write_all(buf)?;
78 Ok(())
79}
80
81pub fn framed_recv_blocking(r: &mut (impl Read + Unpin)) -> io::Result<Vec<u8>> {
84 let mut len_buf = [0u8; mem::size_of::<usize>()];
85 r.read_exact(&mut len_buf)?;
86 let len = usize::from_le_bytes(len_buf);
87 let mut buf = vec![0; len];
88 r.read_exact(&mut buf)?;
89 Ok(buf)
90}
91
92#[derive(Debug, Default, Clone, Copy, Encode, Decode, PartialEq, Eq)]
93#[repr(transparent)]
94pub struct ArtifactChecksum(H256);
95
96pub fn compute_checksum(data: &[u8]) -> ArtifactChecksum {
98 ArtifactChecksum(H256::from_slice(&sp_crypto_hashing::twox_256(data)))
99}
100
101#[cfg(all(test, not(feature = "test-utils")))]
102mod tests {
103 use super::*;
104
105 #[test]
106 fn default_secure_status() {
107 let status = SecurityStatus::default();
108 assert!(
109 !status.secure_validator_mode,
110 "secure_validator_mode is false for default security status"
111 );
112 assert!(
113 !status.can_enable_landlock,
114 "can_enable_landlock is false for default security status"
115 );
116 assert!(
117 !status.can_enable_seccomp,
118 "can_enable_seccomp is false for default security status"
119 );
120 assert!(
121 !status.can_unshare_user_namespace_and_change_root,
122 "can_unshare_user_namespace_and_change_root is false for default security status"
123 );
124 assert!(
125 !status.can_do_secure_clone,
126 "can_do_secure_clone is false for default security status"
127 );
128 }
129}