Skip to content
Closed
Show file tree
Hide file tree
Changes from 59 commits
Commits
Show all changes
81 commits
Select commit Hold shift + click to select a range
a91e366
initial commit for clean history
Zacholme7 Mar 18, 2025
0e0bd34
ci nits
Zacholme7 Mar 18, 2025
58601e3
move anchor config
Zacholme7 Mar 18, 2025
a855236
mainnet spec
Zacholme7 Mar 18, 2025
f34ad41
mock websocket
Zacholme7 Mar 18, 2025
ced58b6
check for op id right away
Zacholme7 Mar 18, 2025
77d0dab
bump
Zacholme7 Mar 18, 2025
f40aec0
Merge branch 'unstable' into simulator
Zacholme7 Mar 18, 2025
d32c93d
Merge branch 'unstable' into simulator
Zacholme7 Mar 24, 2025
455e783
add in enr
Zacholme7 Mar 24, 2025
2e9219c
setup validator enable and enrs
Zacholme7 Mar 24, 2025
8b2e578
make networking logs appear
ThreeHrSleep Mar 25, 2025
59ab224
Merge branch 'unstable' into simulator
Zacholme7 Mar 25, 2025
5dc1fe1
Merge pull request #2 from ThreeHrSleep/networking-logs
Zacholme7 Mar 25, 2025
ce6273a
setup enrs
Zacholme7 Mar 25, 2025
20d198d
dep bump
Zacholme7 Mar 25, 2025
7fa0932
cleanup lock
Zacholme7 Mar 25, 2025
ff2d17d
fix enrs
Zacholme7 Mar 25, 2025
23e561a
merge
Zacholme7 Mar 25, 2025
c5da0b8
hardcode validators into database
Zacholme7 Mar 25, 2025
ed23e52
Merge branch 'unstable' into simulator
Zacholme7 Mar 25, 2025
2db08b4
suppress dependency generated logs
ThreeHrSleep Mar 26, 2025
74bc147
Merge branch 'simulator' into dep-log-filter
ThreeHrSleep Mar 26, 2025
b41f292
nit
ThreeHrSleep Mar 26, 2025
30ed4ae
udeps
ThreeHrSleep Mar 26, 2025
fdbabd3
Merge pull request #3 from ThreeHrSleep/dep-log-filter
Zacholme7 Mar 26, 2025
c4eb22f
untrack enr files
Zacholme7 Mar 26, 2025
a79d1e9
revert
Zacholme7 Mar 26, 2025
781fa26
correct all keyshares and encrypted keyshares
Zacholme7 Mar 26, 2025
bf38e50
Merge branch 'unstable' into simulator
Zacholme7 Mar 27, 2025
40fbc10
nits and remove chainging db info
Zacholme7 Mar 27, 2025
20fbb0a
initially track enr
Zacholme7 Mar 27, 2025
1caae13
nits
Zacholme7 Mar 27, 2025
e16d2f3
add in checks
Zacholme7 Mar 27, 2025
60d4a9c
update databases to hold 1000 validators
Zacholme7 Mar 27, 2025
260481d
push back waiting for genesis, dont track enr, move to 256 validators…
Zacholme7 Mar 27, 2025
0fd36c4
del enr
Zacholme7 Mar 27, 2025
67ddcfd
remove slashing databases on restart
Zacholme7 Mar 28, 2025
b21ba0d
add back in checks
Zacholme7 Mar 28, 2025
b674043
fmt
Zacholme7 Mar 28, 2025
be49b40
fix audit issues
Zacholme7 Mar 28, 2025
a85f2e0
dep sort
Zacholme7 Mar 28, 2025
7bf9028
sort, again.
Zacholme7 Mar 28, 2025
1533167
remove validator checks
Zacholme7 Mar 28, 2025
a6a305c
unused code
Zacholme7 Mar 28, 2025
5919adc
reset end epoch and run from root
Zacholme7 Mar 28, 2025
d69026a
Merge branch 'unstable' into simulator
Zacholme7 Mar 31, 2025
54f764d
Merge branch 'unstable' into simulator
Zacholme7 Apr 1, 2025
2a11eb5
Merge branch 'unstable' into simulator
Zacholme7 Apr 1, 2025
2e2aceb
electra fork
Zacholme7 Apr 1, 2025
c87a1f5
Merge branch 'unstable' into simulator
Zacholme7 Apr 1, 2025
155c632
fmt
Zacholme7 Apr 1, 2025
29b4128
move websocket to axum
Zacholme7 Apr 1, 2025
d40bd51
update config
Zacholme7 Apr 1, 2025
4890fc8
just pass custom spec to main
Zacholme7 Apr 1, 2025
5e8fb78
fmt
Zacholme7 Apr 1, 2025
92c8806
rm printlng
Zacholme7 Apr 1, 2025
41fa97b
Merge branch 'unstable' into simulator
Zacholme7 Apr 1, 2025
8541c4f
fix stack overflow?
Zacholme7 Apr 1, 2025
20fc6a6
revert http names
Zacholme7 Apr 2, 2025
4b5a5af
nit
Zacholme7 Apr 2, 2025
86cd26e
move lighthouse deps to root
Zacholme7 Apr 2, 2025
3697403
merge
Zacholme7 Apr 3, 2025
3028de6
Merge branch 'unstable' into simulator
Zacholme7 Apr 3, 2025
8eb2976
fmt
Zacholme7 Apr 3, 2025
2f5f07a
merge
Zacholme7 Apr 3, 2025
32d56d7
Merge branch 'unstable' into simulator
Zacholme7 Apr 4, 2025
55a0dc3
Merge branch 'unstable' into simulator
Zacholme7 Apr 7, 2025
d7944b5
bump openssl
Zacholme7 Apr 7, 2025
ee94f13
Merge branch 'unstable' into simulator
Zacholme7 Apr 8, 2025
e0a1bf2
merge
Zacholme7 Apr 8, 2025
3f1318c
fix lock
Zacholme7 Apr 8, 2025
985edef
merge
Zacholme7 Apr 8, 2025
f5ef334
pin gossipsub
Zacholme7 Apr 8, 2025
db103b7
Merge branch 'unstable' into simulator
Zacholme7 Apr 9, 2025
f290e1b
fix endpoint
Zacholme7 Apr 9, 2025
4839499
merge
Zacholme7 Apr 10, 2025
c89ecdb
Merge branch 'unstable' into simulator
Zacholme7 Apr 11, 2025
a5b64da
Merge branch 'unstable' into simulator
Zacholme7 Apr 15, 2025
8dcf2e1
Merge branch 'unstable' into simulator
Zacholme7 Apr 17, 2025
884d191
merge
Zacholme7 Apr 22, 2025
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
2,181 changes: 2,063 additions & 118 deletions Cargo.lock

Large diffs are not rendered by default.

10 changes: 6 additions & 4 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@
# Extra tooling projects will be added.
members = [
"anchor",
"anchor/anchor_http_api",
"anchor/anchor_http_metrics",
"anchor/client",
"anchor/common/api_types",
"anchor/common/bls_lagrange",
Expand All @@ -11,8 +13,7 @@ members = [
"anchor/common/version",
"anchor/database",
"anchor/eth",
"anchor/http_api",
"anchor/http_metrics",
"anchor/integration",
"anchor/keygen",
"anchor/keysplit",
"anchor/message_receiver",
Expand All @@ -32,14 +33,14 @@ edition = "2021"

# This table has three subsections: first the internal dependencies, then the lighthouse dependencies, then all other.
[workspace.dependencies]
anchor_http_api = { path = "anchor/anchor_http_api" }
anchor_http_metrics = { path = "anchor/anchor_http_metrics" }
anchor_validator_store = { path = "anchor/validator_store" }
api_types = { path = "anchor/common/api_types" }
bls_lagrange = { path = "anchor/common/bls_lagrange" }
client = { path = "anchor/client" }
database = { path = "anchor/database" }
eth = { path = "anchor/eth" }
http_api = { path = "anchor/http_api" }
http_metrics = { path = "anchor/http_metrics" }
keygen = { path = "anchor/keygen" }
keysplit = { path = "anchor/keysplit" }
message_receiver = { path = "anchor/message_receiver" }
Expand Down Expand Up @@ -97,6 +98,7 @@ dirs = "6.0.0"
discv5 = "0.9.0"
either = "1.13.0"
enr = "0.13.0"
ethereum_serde_utils = "0.7.0"
ethereum_ssz = "0.8"
ethereum_ssz_derive = "0.8"
futures = "0.3.30"
Expand Down
Original file line number Diff line number Diff line change
@@ -1,13 +1,9 @@
[package]
name = "http_api"
name = "anchor_http_api"
version = "0.1.0"
edition = { workspace = true }
authors = ["Sigma Prime <contact@sigmaprime.io>"]

[lib]
name = "http_api"
path = "src/lib.rs"

[dependencies]
api_types = { workspace = true }
axum = { workspace = true }
Expand Down
File renamed without changes.
File renamed without changes.
File renamed without changes.
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
[package]
name = "http_metrics"
name = "anchor_http_metrics"
version = "0.1.0"
edition = "2021"

Expand Down
File renamed without changes.
4 changes: 2 additions & 2 deletions anchor/client/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,8 @@ name = "client"
path = "src/lib.rs"

[dependencies]
anchor_http_api = { workspace = true }
anchor_http_metrics = { workspace = true }
anchor_validator_store = { workspace = true }
beacon_node_fallback = { workspace = true }
clap = { workspace = true }
Expand All @@ -19,8 +21,6 @@ eth2 = { workspace = true }
eth2_config = { workspace = true }
ethereum_hashing = "0.7.0"
fdlimit = "0.3"
http_api = { workspace = true }
http_metrics = { workspace = true }
hyper = { workspace = true }
keygen = { workspace = true }
message_receiver = { workspace = true }
Expand Down
7 changes: 5 additions & 2 deletions anchor/client/src/config.rs
Original file line number Diff line number Diff line change
Expand Up @@ -41,11 +41,11 @@ pub struct Config {
/// If true, use longer timeouts for requests made to the beacon node.
pub use_long_timeouts: bool,
/// Configuration for the HTTP REST API.
pub http_api: http_api::Config,
pub http_api: anchor_http_api::Config,
/// Configuration for the network stack.
pub network: network::Config,
/// Configuration for the HTTP REST API.
pub http_metrics: http_metrics::Config,
pub http_metrics: anchor_http_metrics::Config,
/// A list of custom certificates that the validator client will additionally use when
/// connecting to a beacon node over SSL/TLS.
pub beacon_nodes_tls_certs: Option<Vec<PathBuf>>,
Expand All @@ -54,6 +54,8 @@ pub struct Config {
pub execution_nodes_tls_certs: Option<Vec<PathBuf>>,
/// Configuration for the processor
pub processor: processor::Config,
/// If database sync should be skipped
pub skip_sync: bool,
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why is this necessary?

/// Password used to encrypt rsa keyfile
pub password: Option<String>,
/// If slashing protection is disabled
Expand Down Expand Up @@ -100,6 +102,7 @@ impl Config {
beacon_nodes_tls_certs: None,
execution_nodes_tls_certs: None,
processor: <_>::default(),
skip_sync: false,
password: None,
disable_slashing_protection: false,
}
Expand Down
54 changes: 38 additions & 16 deletions anchor/client/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -80,7 +80,11 @@ pub struct Client {}

impl Client {
/// Runs the Anchor Client
pub async fn run<E: EthSpec>(executor: TaskExecutor, config: Config) -> Result<(), String> {
pub async fn run<E: EthSpec>(
executor: TaskExecutor,
config: Config,
spec: Option<ChainSpec>,
) -> Result<(), String> {
// Attempt to raise soft fd limit. The behavior is OS specific:
// `linux` - raise soft fd limit to hard
// `macos` - raise soft fd limit to `min(kernel limit, hard fd limit)`
Expand Down Expand Up @@ -109,7 +113,11 @@ impl Client {
"Starting the Anchor client"
);

let spec = Arc::new(config.ssv_network.eth2_network.chain_spec::<E>()?);
let spec = if let Some(spec) = spec {
Arc::new(spec)
} else {
Arc::new(config.ssv_network.eth2_network.chain_spec::<E>()?)
};
Comment on lines +118 to +122
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

why do we need this?

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is the hacky workaround that I mentioned in the internal chat related to not being able to set the slot timers. Its a band-aide over a bigger problem but I put it in in favor of being able to make some progress.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Is there any major blocker for creating the simulator spec?

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Havent looked into that integration too much, but working block productions is the biggest blocker.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'm particularly not a fan of adding hacky workarounds unless there's no other sane option.


let key = read_or_generate_private_key(&config.data_dir.join("key.pem"), config.password)?;
let err = |e| format!("Unable to derive public key: {e:?}");
Expand All @@ -124,7 +132,7 @@ impl Client {

// Optionally start the metrics server.
let http_metrics_shared_state = if config.http_metrics.enabled {
let shared_state = Arc::new(RwLock::new(http_metrics::Shared {
let shared_state = Arc::new(RwLock::new(anchor_http_metrics::Shared {
genesis_time: None,
duties_service: None,
}));
Expand All @@ -140,7 +148,7 @@ impl Client {
.await
.map_err(|e| format!("Unable to bind to metrics server port: {}", e))?;

let metrics_future = http_metrics::serve(listener, shared_state.clone(), exit);
let metrics_future = anchor_http_metrics::serve(listener, shared_state.clone(), exit);

executor.spawn_without_exit(metrics_future, "metrics-http");
Some(shared_state)
Expand All @@ -150,7 +158,7 @@ impl Client {
};

// Optionally run the http_api server
if let Err(error) = http_api::run(config.http_api).await {
if let Err(error) = anchor_http_api::run(config.http_api).await {
error!(error, "Failed to run HTTP API");
return Err("HTTP API Failed".to_string());
}
Expand Down Expand Up @@ -319,9 +327,6 @@ impl Client {
let proposer_nodes = Arc::new(proposer_nodes);
start_fallback_updater_service::<_, E>(executor.clone(), proposer_nodes.clone())?;

// Wait until genesis has occurred.
wait_for_genesis(&beacon_nodes, genesis_time).await?;

// Start syncer
let (historic_finished_tx, historic_finished_rx) = oneshot::channel();
let mut syncer = eth::SsvEventSyncer::new(
Expand Down Expand Up @@ -354,7 +359,7 @@ impl Client {

executor.spawn(
async move {
if let Err(e) = syncer.sync().await {
if let Err(e) = syncer.sync(config.skip_sync).await {
error!("Syncer failed: {e}");
}
},
Expand Down Expand Up @@ -517,6 +522,9 @@ impl Client {
let channel_capacity = E::slots_per_epoch() as usize;
let (block_service_tx, block_service_rx) = mpsc::channel(channel_capacity);

// Wait until genesis has occurred.
wait_for_genesis(&beacon_nodes, genesis_time).await?;

duties_service::start_update_service(duties_service.clone(), block_service_tx);

block_service
Expand Down Expand Up @@ -733,18 +741,32 @@ async fn wait_for_operator_id_and_sync(
) -> Option<OperatorId> {
let sleep_duration = Duration::from_secs(spec.seconds_per_slot);
let mut state = database.watch();
let id = loop {
select! {
result = state.changed() => {
result.ok()?;
if let Some(id) = state.borrow().get_own_id() {
break id;

// First check if ID exists, ensuring the borrow is dropped immediately
let id = if let Some(id) = {
let current_state = state.borrow();
current_state.get_own_id()
} {
// ID already exists
id
} else {
// Wait for an ID to appear
loop {
select! {
result = state.changed() => {
result.ok()?;
if let Some(id) = state.borrow().get_own_id() {
break id;
}
}
_ = sleep(sleep_duration) => info!("Waiting for operator id"),
}
_ = sleep(sleep_duration) => info!("Waiting for operator id"),
}
};

info!(id = *id, "Operator found on chain");

// Wait for sync to finish
loop {
select! {
result = &mut sync_notification => return result.ok().map(|_| id),
Expand Down
2 changes: 1 addition & 1 deletion anchor/eth/execution.rs
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,7 @@ async fn main() {
tokio::spawn(async move {
// this should never return, if it does we should gracefully handle it and shutdown the
// client.
event_syncer.sync().await
event_syncer.sync(false).await
});
loop {
let _ = tokio::time::sleep(std::time::Duration::from_secs(100)).await;
Expand Down
14 changes: 10 additions & 4 deletions anchor/eth/src/sync.rs
Original file line number Diff line number Diff line change
Expand Up @@ -214,7 +214,7 @@ impl SsvEventSyncer {

#[instrument(skip(self))]
/// Try to perform both a historical and live sync from the chain
pub async fn sync(&mut self) -> Result<(), ExecutionError> {
pub async fn sync(&mut self, skip: bool) -> Result<(), ExecutionError> {
Copy link
Member

@diegomrsantos diegomrsantos Apr 2, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can we split the sync function into historical_sync and live_sync, and decide to have historical_sync or not at the caller instead of passing a param?

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Maybe it's better to keep everything unified in the sync function, but I'd rename the param to skip_historical_sync.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thinking more about it, do we want to skip it, or should we do the historical_sync from a mock implementation or something like that?

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Will rename the param and I think we should keep it as a unified function as it was setup like this to handle errors and retry smoothly.

Syncing from an mock contract was something I mentioned earlier but we decided against it as this is more of the purpose for ssv-mini in comparison to the simulator. It would be nice to have a fully simulated environment with all of the contracts to sync from but it would probably be another 1.5k lines of infra to setup.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I don't know how valuable this would be, but having the simulator on CI testing this for each PR is different from having it on ssv-mini, isn't it?

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yes this is just an end to end integration test to make sure we dont have any unexpected behavior regressions while the simulator is a full devnet that tests interop with ssv nodes

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I mean, how valuable would it be to have historical_sync in the regression tests?

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I personally dont think it is important to include here. I think the core idea here is to test core behavior like attestations & block production. The syncing section of the codebase is pretty finalized imo and if there are modifications this should be caught by ssv-mini or testnet deployment

info!("Starting SSV event sync");
// Get network specific contract information
let contract_address = self.network.ssv_contract;
Expand All @@ -225,7 +225,10 @@ impl SsvEventSyncer {
deployment_block, "Using contract configuration"
);
loop {
match self.try_sync(contract_address, deployment_block).await {
match self
.try_sync(contract_address, deployment_block, skip)
.await
{
Ok(_) => unreachable!("Sync should never finish successfully"),
Err(e) => {
error!(?e, "Sync failed, attempting recovery");
Expand Down Expand Up @@ -304,10 +307,13 @@ impl SsvEventSyncer {
&mut self,
contract_address: Address,
deployment_block: u64,
skip: bool,
) -> Result<(), ExecutionError> {
info!("Starting historical sync");
self.historical_sync(contract_address, deployment_block, SSV_EVENTS.clone())
.await?;
if !skip {
self.historical_sync(contract_address, deployment_block, SSV_EVENTS.clone())
.await?;
}

self.historic_finished_notify.take().map(|x| x.send(()));

Expand Down
3 changes: 3 additions & 0 deletions anchor/integration/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
mock-data/operator-*/network/enr.dat
mock-data/operator-*/slashing_protection.sqlite
mock-data/operator-*/slashing_protection.sqlite-journal
30 changes: 30 additions & 0 deletions anchor/integration/Cargo.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
[package]
name = "integration"
version = "0.1.0"
edition = "2021"

[dependencies]
axum = { version = "0.8.3", features = ["ws"] }
clap = { workspace = true }
client = { workspace = true }
discv5 = { workspace = true }
environment = { git = "https://github.com/sigp/lighthouse", rev = "22faccb" }
ethereum_serde_utils = { workspace = true }
execution_layer = { git = "https://github.com/sigp/lighthouse", rev = "22faccb" }
futures = { workspace = true }
futures-util = "0.3.31"
kzg = { git = "https://github.com/sigp/lighthouse", rev = "22faccb" }
lighthouse_network = { workspace = true }
logging = { git = "https://github.com/sigp/lighthouse", rev = "22faccb" }
network = { workspace = true }
node_test_rig = { git = "https://github.com/sigp/lighthouse", rev = "22faccb" }
parking_lot = { workspace = true }
sensitive_url = { workspace = true }
serde_json = { workspace = true }
ssv_network_config = { workspace = true }
task_executor = { workspace = true }
tokio = { workspace = true }
tokio-tungstenite = "0.26.2"
tracing = { workspace = true }
tracing-subscriber = { workspace = true }
types = { workspace = true }
Binary file not shown.
27 changes: 27 additions & 0 deletions anchor/integration/mock-data/operator-0/key.pem
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
-----BEGIN RSA PRIVATE KEY-----
MIIEpAIBAAKCAQEAhUFm5HcFcxYvJHiFS6QNFQFf4xWhvv3v+p14rgN9rIAwb4nE
nFsqcH8hzCAEFqOV8pzYRPQuE4CBAzyUI3QHuu3VT9B5U3NKZagXiNQKjlucLbq1
I5vQFz3wt5gnsxqOj5+6vkywTKk5IbroMTHNSxsOt+96G7u0gYmmAYfp4F9BGN6Q
0QLGkRiwgsoBLlcSoI4wJCbpE2k2iMu9nDD4DiJ3wyaLIUnOh0sl2hGGXgtUWL+m
q0vZO2bNM4/4dlClix8Fr1EBi03FxzqCR75tbR1o+LLRW9lIPLOQkZ/1ba2dbU2b
+5kZbW50W0GMSlo2ShEpHkWv1gskLq4x7jUNiQIDAQABAoIBAAJeML0iFVAf0TYk
HcrujxyeseIX6LrQtI0+852fVRd15AZzYQbzQsbi0h+tuPeLBXeHzHsLM29oHZgd
toyGZmXEDgHqqeFEVPUx/mW8I4o3PAhUVJ2ISl4Ysm3yGlB/NLsozY7N+jsJLclO
PYve6e+Upey5qMaUjbxYjRaNYFKlmsgsIRzv0Qf6voTyvRrLfgOSgc0ayCuE3RP8
B/uWbAad3gCHLyLGFueP3SQLWtGZH1WZKU9dfk51kl2ZFO+shL/ll5ws/U/kzbON
YouE5r9JxJ2zXqnPDxw0czNSgF/GSGNB5yVXsIUPhdakRmjqxt1n0+vcxa+GOir8
UUbRAQECgYEAuQnT3HXDwoUO8ge9Ry++1YxEgBnxSHkW0WM5dGpS8rgt6kkmONfk
fTSPAR0ZCS9Am9UHkjRLWXB9fRqoNgjDDHDtO+VJsgYsEz4y7Jjs/dhJz1QGD1zj
CSHzJIlgCzdteV5mg1/Qq71szciknrH0QHTZcBqAMw7Pvlyo9n09CoECgYEAuFvH
ZRP8EapzQiqJ2Rwxu+uPtc3QTX/OxjHNbMxLUf1owcfG6X8JnPHrAy5AtkX6RZwH
TximezkyXl3eD7+vP1xSd3+1BuUTkkDWB8El+MgF8SOR117030Jqh4X2Fckl7Ztl
Z5SL8/YoGtvJ2hShI90WwD7OSbuedUoQdW0iLwkCgYEAr56VNuOKtb9FzQ7tZXf6
XoHvrclxiMBsmLTdHhGfwoBuC7P7k+3MDc1pgLwWO/JeFsjck7YQYcXzRF6dkhNE
1DUF5FgdVtqm0GizOn12SQMUIrPzwHb/gHZ5Z47+2gZ0X8Hp9/xjd+ykLLenDnuF
f/unN8/fJxaCs4EMWE3LNoECgYADbpHzq7+RhJ7IqIoQZJn4aZYvSDmMd8idn+e3
EsaELDd7BAEL77V6GnbJhF7oBb129kSckFTpDlOFtjGgEW1tvIY8e0AfdLw8iMBz
PIE8dFzH9GWOoNHmJhJdm3zNQwVVuwLUPsusKvTsKxNC4Adv53m48nJcpQV6IXrU
9MciIQKBgQCFs5AT7Ebcyz55yAEskhFP6QN9TQTlJWxosadeaBXCupeAsTYfR5ch
shp0XqnV0hmVmAYmzqZCuw5idfxhB8YVxdES2lwAH4uMIObBSJe6lKNwF35sNUrl
wKBYDngF5SQlJAxUBV6inKsMRY+ry5qofUC9IuaxzgsW0+3GbkSuwQ==
-----END RSA PRIVATE KEY-----
1 change: 1 addition & 0 deletions anchor/integration/mock-data/operator-0/network/key
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
‘K& ]>ê‚ç¤S&‡.Æ‹ -Í47ÆÕ05Ռk
Binary file not shown.
27 changes: 27 additions & 0 deletions anchor/integration/mock-data/operator-1/key.pem
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
-----BEGIN RSA PRIVATE KEY-----
MIIEowIBAAKCAQEAyZrTHN8hJ2Zc6xHXnqVkxes1VEVUL7oCJe4WzRoGp6Hbymo+
nG4DQxLZZHxWUUppXmaMNTBpv0XpKz01EHO20oCfM0pzUMDPq0gfARsMJ4BnE/6K
2lUTdRbzZ1iT7A2jH8MXPYtTI2Wc5JOAI082rKU9jeZ+C42D57Xkw45EHR3WF/W1
0Xt2pccMjfAiU2TKySnjiJKh/Vac2QrnScHI9k7w5cZjgmbdCKrob3J5zedZjApN
xZhzdMWEFI+GZIsPfc6HVSl2xn1f5CXtB/PcEIAPW0WuR//l65M0fG/geXskbBvM
f2nbV6h+sNE3XHW/8ePzk0QBg8bVOuzMsYm2/QIDAQABAoIBAC9ysyONJzgm6REB
HMJvkjFbm2xHOdpWuJk1OSQR70WGPFyeFzjJUpa3abcy5TzSGsz3LSH6kDTObyN4
TxQda8aMs4tGhy/XBTk+at+ffkOQvpHP212p3r+0xFoLGJtalU0NJRvcvdcrm9qX
FXYZ91f4Nu299OXiq0v+PQZCZikEuOv2lnJ+XMx12meJbQ+aslnRUOzzlaiWK4ms
rcgtst7L8fPaa/Js0HXL5NNSnbiwJEVrVg5yPYPgWGMcdXj14aICW0aONUlm7DV6
urg+1jquuE8oGE5xZJkzzjPTE/8D1CmmqMfdcYVxS1CwF3miwhN+A61LZ7glvp08
NrLFe/kCgYEA6XxOAsZb2nOndh4Ln0lkn0rYb16uPzhH/XaJoDfPHg/O310LUQ8K
Ot5wGoyp1/L+KHdiI5wWzOj0wLKiK68L5nQKNChzFUXgZkmYLajvTPfh++PpWj/a
jigTVqS76cwIvYnDWrwXqGwUil5SI8e+BPlUb1tzkxp+huc7UYXyzGUCgYEA3QuH
U/TdlvqZVKW+xKOf5fnEBC6H6Ic6GNViI0Sgvzcqef4AKmHbEJnl+2VkfOeUvdH0
d34G8ZOBqAj/X5cDoCALcplN5lL60GC3rVrzVvn2lcoy9uIhd3ibJD3lVcYmj98T
GzysGHlzOGiY38sz24wTTMcyRqS1n53MdgeO2rkCgYAfgvxQWY8aC5PlWCa/Z7th
2EsftMqVk7X7mlz2t7GHYCDOepNFbF84FL9ShfuCPrRYp8wh/DYDj8lAnJtQg/56
Kt0Zrv/hNh4UEAiu2Ob7H1VrlpXu7UFFAFmjzvXhlvzy/73S6CHVREj9Z790PsgB
idkAcnpFt0SuVlTmKsrbFQKBgQC9LpLB/j5wa0Yzti9RaKD/WQa0dYaIMsQ8YNQ/
Twss3HAUPJmzrFCrIqw8vwiEBke9NiY+5rPWqeI8CIdYLo1BzGs/x4luaPKUyVIq
oj7F3+V1SbrYpazy7VwKZpcTFCYI2Gkn1ION5tQAITVFxEo7yuTxv0J+R5XSaGGH
WuyesQKBgEqw+pAg8HchUqUEfRyTpwR3XY/3mxujnZCPcNiXaf61DgBPLsnqICRQ
5xoQV5BnO9wV/hTfM32UT1g7mC/TEuLoKDPSlHfFW4JMpwfS1vTfHITQJxnVwT71
qn1+dK5Zg0b0D6Vu2lPTu5rIcbkki44Pyd6k5y7HJpLiaWf8EAO2
-----END RSA PRIVATE KEY-----
1 change: 1 addition & 0 deletions anchor/integration/mock-data/operator-1/network/key
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
ø¤¥òG7p¸h¥§žÀà®û¢ö–«53æüg“
Binary file not shown.
Loading
Loading