contract_deployment/
main.rs1use ethers::abi::Abi;
2use std::str::FromStr;
3use zksync_web3_rs::providers::{Middleware, Provider};
4use zksync_web3_rs::signers::{LocalWallet, Signer};
5use zksync_web3_rs::zks_provider::ZKSProvider;
6use zksync_web3_rs::zks_wallet::{CallRequest, DeployRequest};
7use zksync_web3_rs::ZKSWallet;
8
9static ERA_PROVIDER_URL: &str = "http://127.0.0.1:8011";
11
12static PRIVATE_KEY: &str = "7726827caac94a7f9e1b160f7ea819f172f7b6f9d2a97f992c38edeab82d4110";
14
15static CONTRACT_BIN: &str = include_str!("./Greeter.bin");
16static CONTRACT_ABI: &str = include_str!("./Greeter.abi");
17
18#[tokio::main(flavor = "current_thread")]
19async fn main() {
20 let zk_wallet = {
23 let era_provider = Provider::try_from(ERA_PROVIDER_URL).unwrap();
24
25 let chain_id = era_provider.get_chainid().await.unwrap();
26 let l2_wallet = LocalWallet::from_str(PRIVATE_KEY)
27 .unwrap()
28 .with_chain_id(chain_id.as_u64());
29 ZKSWallet::new(l2_wallet, None, Some(era_provider.clone()), None).unwrap()
30 };
31
32 let contract_address = {
34 let abi = Abi::load(CONTRACT_ABI.as_bytes()).unwrap();
35 let contract_bin = hex::decode(CONTRACT_BIN).unwrap().to_vec();
36 let request = DeployRequest::with(abi, contract_bin, vec!["Hey".to_owned()])
37 .from(zk_wallet.l2_address());
38 let address = zk_wallet.deploy(&request).await.unwrap();
39
40 println!("Contract address: {:#?}", address);
41
42 address
43 };
44
45 {
47 let era_provider = zk_wallet.get_era_provider().unwrap();
48 let call_request = CallRequest::new(contract_address, "greet()(string)".to_owned());
49
50 let greet = ZKSProvider::call(era_provider.as_ref(), &call_request)
51 .await
52 .unwrap();
53
54 println!("greet: {}", greet[0]);
55 }
56
57 {
59 let receipt = zk_wallet
60 .get_era_provider()
61 .unwrap()
62 .clone()
63 .send_eip712(
64 &zk_wallet.l2_wallet,
65 contract_address,
66 "setGreeting(string)",
67 Some(["Hello".into()].into()),
68 None,
69 )
70 .await
71 .unwrap()
72 .await
73 .unwrap()
74 .unwrap();
75
76 println!(
77 "setGreeting transaction hash {:#?}",
78 receipt.transaction_hash
79 );
80 };
81
82 {
85 let era_provider = zk_wallet.get_era_provider().unwrap();
86 let call_request = CallRequest::new(contract_address, "greet()(string)".to_owned());
87
88 let greet = ZKSProvider::call(era_provider.as_ref(), &call_request)
89 .await
90 .unwrap();
91
92 println!("greet: {}", greet[0]);
93 }
94}