Skip to content

Commit f14862f

Browse files
authored
fix(zkquiz): update sdk usage (#1794)
1 parent a398289 commit f14862f

File tree

3 files changed

+107
-13
lines changed

3 files changed

+107
-13
lines changed

examples/zkquiz/Makefile

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ deploy_verifier_devnet:
77
. ./contracts/.devnet.env && . ./contracts/deploy.sh
88

99
CONTRACT_ADDRESS=0x1adFb00CC74Ff26bB05419953006c66B1abFCD45
10+
STAGE_CONTRACT_ADDRESS=0xc4da6fcfa317eaf166b09ef276c0bdf43648a65f
1011
RPC_URL=https://ethereum-holesky-rpc.publicnode.com
1112

1213
answer_quiz:
@@ -15,6 +16,13 @@ answer_quiz:
1516
--rpc-url $(RPC_URL) \
1617
--verifier-contract-address $(CONTRACT_ADDRESS)
1718

19+
answer_quiz_stage:
20+
@cd quiz/script && cargo run -r -- \
21+
--keystore-path $(KEYSTORE_PATH) \
22+
--rpc-url $(RPC_URL) \
23+
--network holesky-stage \
24+
--verifier-contract-address $(STAGE_CONTRACT_ADDRESS)
25+
1826
answer_quiz_local:
1927
@cd quiz/script && cargo run -r -- \
2028
--keystore-path ../../../../config-files/devnet/keys/operator-3.ecdsa.key.json \

examples/zkquiz/contracts/deploy.sh

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,4 +33,6 @@ forge script script/Deployer.s.sol \
3333
--rpc-url "$RPC_URL" \
3434
--private-key "$PRIVATE_KEY" \
3535
--broadcast \
36+
--verify \
37+
--etherscan-api-key $ETHERSCAN_API_KEY \
3638
--sig "run(address _alignedServiceManager, address _paymentService)"

examples/zkquiz/quiz/script/src/main.rs

Lines changed: 97 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,8 @@
11
#![feature(slice_flatten)]
22
use std::io;
3+
use std::str::FromStr;
34

4-
use aligned_sdk::core::types::{
5-
AlignedVerificationData, Network, PriceEstimate, ProvingSystemId, VerificationData,
6-
};
5+
use aligned_sdk::core::types::{AlignedVerificationData, FeeEstimationType, Network, ProvingSystemId, VerificationData};
76
use aligned_sdk::sdk::{deposit_to_aligned, estimate_fee};
87
use aligned_sdk::sdk::{get_nonce_from_ethereum, submit_and_wait_verification};
98
use clap::Parser;
@@ -29,14 +28,99 @@ struct Args {
2928
default_value = "https://ethereum-holesky-rpc.publicnode.com"
3029
)]
3130
rpc_url: String,
32-
#[arg(short, long, default_value = "wss://batcher.alignedlayer.com")]
33-
batcher_url: String,
34-
#[arg(short, long, default_value = "holesky")]
35-
network: Network,
31+
#[clap(flatten)]
32+
network: NetworkArg,
3633
#[arg(short, long)]
3734
verifier_contract_address: H160,
3835
}
3936

37+
#[derive(Debug, Clone, Copy)]
38+
enum NetworkNameArg {
39+
Devnet,
40+
Holesky,
41+
HoleskyStage,
42+
Mainnet,
43+
}
44+
45+
impl FromStr for NetworkNameArg {
46+
type Err = String;
47+
48+
fn from_str(s: &str) -> Result<Self, Self::Err> {
49+
match s {
50+
"devnet" => Ok(NetworkNameArg::Devnet),
51+
"holesky" => Ok(NetworkNameArg::Holesky),
52+
"holesky-stage" => Ok(NetworkNameArg::HoleskyStage),
53+
"mainnet" => Ok(NetworkNameArg::Mainnet),
54+
_ => Err(
55+
"Unknown network. Possible values: devnet, holesky, holesky-stage, mainnet"
56+
.to_string(),
57+
),
58+
}
59+
}
60+
}
61+
62+
#[derive(Debug, clap::Args, Clone)]
63+
struct NetworkArg {
64+
#[arg(
65+
name = "The working network's name",
66+
long = "network",
67+
default_value = "devnet",
68+
help = "[possible values: devnet, holesky, holesky-stage, mainnet]"
69+
)]
70+
network: Option<NetworkNameArg>,
71+
#[arg(
72+
name = "Aligned Service Manager Contract Address",
73+
long = "aligned_service_manager",
74+
conflicts_with("The working network's name"),
75+
requires("Batcher Payment Service Contract Address"),
76+
requires("Batcher URL")
77+
)]
78+
aligned_service_manager_address: Option<String>,
79+
80+
#[arg(
81+
name = "Batcher Payment Service Contract Address",
82+
long = "batcher_payment_service",
83+
conflicts_with("The working network's name"),
84+
requires("Aligned Service Manager Contract Address"),
85+
requires("Batcher URL")
86+
)]
87+
batcher_payment_service_address: Option<String>,
88+
89+
#[arg(
90+
name = "Batcher URL",
91+
long = "batcher_url",
92+
conflicts_with("The working network's name"),
93+
requires("Aligned Service Manager Contract Address"),
94+
requires("Batcher Payment Service Contract Address")
95+
)]
96+
batcher_url: Option<String>,
97+
}
98+
99+
impl From<NetworkArg> for Network {
100+
fn from(network_arg: NetworkArg) -> Self {
101+
let mut processed_network_argument = network_arg.clone();
102+
103+
if network_arg.batcher_url.is_some()
104+
|| network_arg.aligned_service_manager_address.is_some()
105+
|| network_arg.batcher_payment_service_address.is_some()
106+
{
107+
processed_network_argument.network = None; // We need this because network is Devnet as default, which is not true for a Custom network
108+
}
109+
110+
match processed_network_argument.network {
111+
None => Network::Custom(
112+
network_arg.aligned_service_manager_address.unwrap(),
113+
network_arg.batcher_payment_service_address.unwrap(),
114+
network_arg.batcher_url.unwrap(),
115+
),
116+
Some(NetworkNameArg::Devnet) => Network::Devnet,
117+
Some(NetworkNameArg::Holesky) => Network::Holesky,
118+
Some(NetworkNameArg::HoleskyStage) => Network::HoleskyStage,
119+
Some(NetworkNameArg::Mainnet) => Network::Mainnet,
120+
}
121+
}
122+
}
123+
40124
#[tokio::main]
41125
async fn main() {
42126
println!("Welcome to the zkQuiz! Answer questions, generate a zkProof, and claim your NFT!");
@@ -66,7 +150,7 @@ async fn main() {
66150
.interact()
67151
.expect("Failed to read user input") {
68152

69-
deposit_to_aligned(U256::from(4000000000000000u128), signer.clone(), args.network).await
153+
deposit_to_aligned(U256::from(4000000000000000u128), signer.clone(), args.network.clone().into()).await
70154
.expect("Failed to pay for proof submission");
71155
}
72156

@@ -120,7 +204,7 @@ async fn main() {
120204
pub_input: None,
121205
};
122206

123-
let max_fee = estimate_fee(&rpc_url, PriceEstimate::Instant)
207+
let max_fee = estimate_fee(&rpc_url, FeeEstimationType::Instant)
124208
.await
125209
.expect("failed to fetch gas price from the blockchain");
126210

@@ -132,16 +216,15 @@ async fn main() {
132216
.expect("Failed to read user input")
133217
{ return; }
134218

135-
let nonce = get_nonce_from_ethereum(&rpc_url, wallet.address(), args.network)
219+
let nonce = get_nonce_from_ethereum(&rpc_url, wallet.address(), args.network.clone().into())
136220
.await
137221
.expect("Failed to get next nonce");
138222

139-
println!("Submitting your proof...");
223+
println!("Submitting your proof...");
140224

141225
let aligned_verification_data = submit_and_wait_verification(
142-
&args.batcher_url,
143226
&rpc_url,
144-
args.network,
227+
args.network.clone().into(),
145228
&verification_data,
146229
max_fee,
147230
wallet.clone(),
@@ -207,6 +290,7 @@ async fn claim_nft_with_verified_proof(
207290
signer: SignerMiddleware<Provider<Http>, LocalWallet>,
208291
verifier_contract_addr: &Address,
209292
) -> anyhow::Result<()> {
293+
println!("Verifier contract address: {}", verifier_contract_addr);
210294
let verifier_contract = VerifierContract::new(*verifier_contract_addr, signer.into());
211295

212296
let index_in_batch = U256::from(aligned_verification_data.index_in_batch);

0 commit comments

Comments
 (0)