Skip to content
This repository was archived by the owner on Feb 28, 2025. It is now read-only.

Commit f77e4f0

Browse files
committed
Merge branch 'main' of github.com:xmtp/xps-gateway into insipx/demo
2 parents 568357b + 66af436 commit f77e4f0

File tree

3 files changed

+123
-12
lines changed

3 files changed

+123
-12
lines changed

Cargo.lock

+12-12
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

bin/registry-localnet/Cargo.toml

+14
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
[package]
2+
name = "registry-localnet"
3+
version = "0.1.0"
4+
edition = "2021"
5+
6+
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
7+
8+
[dependencies]
9+
ethers.workspace = true
10+
anyhow.workspace = true
11+
tokio.workspace = true
12+
ctrlc = "3.4.2"
13+
lib-didethresolver.workspace = true
14+
hex.workspace = true

bin/registry-localnet/src/main.rs

+97
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,97 @@
1+
use anyhow::Error;
2+
use ethers::{
3+
abi::Address,
4+
core::utils::Anvil,
5+
middleware::SignerMiddleware,
6+
providers::{Provider, Ws},
7+
signers::{LocalWallet, Signer as _},
8+
utils::AnvilInstance,
9+
};
10+
use lib_didethresolver::did_registry::DIDRegistry;
11+
use std::sync::atomic::{AtomicBool, Ordering};
12+
use std::sync::Arc;
13+
14+
#[tokio::main]
15+
async fn main() -> Result<(), Error> {
16+
let running = Arc::new(AtomicBool::new(true));
17+
let r = running.clone();
18+
19+
ctrlc::set_handler(move || {
20+
r.store(false, Ordering::SeqCst);
21+
})
22+
.expect("Error setting Ctrl-C handler");
23+
24+
let anvil = deploy().await?;
25+
26+
println!("Waiting for Ctrl-C...");
27+
while running.load(Ordering::SeqCst) {}
28+
drop(anvil);
29+
println!("Shutting down...");
30+
Ok(())
31+
}
32+
33+
async fn deploy() -> Result<AnvilInstance, Error> {
34+
let anvil = Anvil::new()
35+
.port(8545_u16)
36+
.args(vec![
37+
"--base-fee",
38+
"35",
39+
"--gas-price",
40+
"50",
41+
"--disable-block-gas-limit",
42+
])
43+
.spawn();
44+
let registry_address = deploy_to_anvil(&anvil).await?;
45+
println!(
46+
"Registry deployed at {}, at endpoint {}",
47+
hex::encode(registry_address),
48+
anvil.ws_endpoint()
49+
);
50+
51+
println!("Chain ID: {}", anvil.chain_id());
52+
println!("Endpoint: {}", anvil.endpoint());
53+
println!("WS Endpoint: {}", anvil.ws_endpoint());
54+
55+
println!("\n\n");
56+
println!("Private Keys -------------------------------------");
57+
for key in anvil.keys() {
58+
println!("0x{}", hex::encode(key.to_bytes()));
59+
}
60+
println!("\n\n");
61+
println!("Addresses -------------------------------------");
62+
for address in anvil.addresses() {
63+
println!("0x{}", hex::encode(address));
64+
}
65+
66+
Ok(anvil)
67+
}
68+
69+
async fn deploy_to_anvil(anvil: &AnvilInstance) -> Result<Address, Error> {
70+
println!("Deploying Registry to local anvil");
71+
72+
let wallet: LocalWallet = anvil.keys()[0].clone().into();
73+
let client = client(anvil, wallet).await;
74+
75+
let registry = DIDRegistry::deploy(client.clone(), ())
76+
.unwrap()
77+
.gas_price(100)
78+
.send()
79+
.await
80+
.unwrap();
81+
82+
Ok(registry.address())
83+
}
84+
85+
async fn client(
86+
anvil: &AnvilInstance,
87+
wallet: LocalWallet,
88+
) -> Arc<SignerMiddleware<Provider<Ws>, LocalWallet>> {
89+
let provider = Provider::<Ws>::connect(anvil.ws_endpoint())
90+
.await
91+
.unwrap()
92+
.interval(std::time::Duration::from_millis(10u64));
93+
Arc::new(SignerMiddleware::new(
94+
provider,
95+
wallet.with_chain_id(anvil.chain_id()),
96+
))
97+
}

0 commit comments

Comments
 (0)