Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Zaun #125

Open
wants to merge 2 commits into
base: dependency-bump
Choose a base branch
from
Open

Zaun #125

Show file tree
Hide file tree
Changes from all commits
Commits
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
43 changes: 43 additions & 0 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 2 additions & 0 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -77,6 +77,7 @@ hex = "0.4"
itertools = "0.13.0"
mockall = "0.13.0"
testcontainers = "0.18.0"
appchain-core-contract-client = { git = "https://github.com/byteZorvin/zaun", branch = "type-update" }

# Cairo VM
cairo-vm = { git = "https://github.com/lambdaclass/cairo-vm", features = [
Expand All @@ -89,6 +90,7 @@ cairo-vm = { git = "https://github.com/lambdaclass/cairo-vm", features = [
# TODO: update back to the main repo once it's merged
# Sharp (Starkware)
snos = { git = "https://github.com/keep-starknet-strange/snos" }
starknet-os = { git = "https://github.com/keep-starknet-strange/snos" }

# Madara prover API
madara-prover-common = { git = "https://github.com/Moonsong-Labs/madara-prover-api", branch = "od/use-latest-cairo-vm" }
Expand Down
1 change: 1 addition & 0 deletions crates/settlement-clients/starknet/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ starknet = { workspace = true }
tokio = { workspace = true }
url = { workspace = true }
utils = { workspace = true }
appchain-core-contract-client = { workspace = true }

[dev-dependencies]
tokio-test = "*"
46 changes: 23 additions & 23 deletions crates/settlement-clients/starknet/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ pub mod conversion;

use std::sync::Arc;

use appchain_core_contract_client::interfaces::core_contract::CoreContract;
use async_trait::async_trait;
use color_eyre::eyre::{eyre, Ok};
use color_eyre::Result;
Expand All @@ -12,7 +13,7 @@ use starknet::accounts::ConnectedAccount;
use starknet::core::types::TransactionExecutionStatus;
use starknet::providers::Provider;
use starknet::{
accounts::{Account, Call, ExecutionEncoding, SingleOwnerAccount},
accounts::{ExecutionEncoding, SingleOwnerAccount},
core::{
types::{BlockId, BlockTag, Felt, FunctionCall},
utils::get_selector_from_name,
Expand All @@ -22,14 +23,16 @@ use starknet::{
};
use tokio::time::{sleep, Duration};

use appchain_core_contract_client::clients::StarknetCoreContractClient;
use settlement_client_interface::{SettlementClient, SettlementConfig, SettlementVerificationStatus};
use utils::settings::Settings;

use crate::config::StarknetSettlementConfig;
use crate::conversion::{slice_slice_u8_to_vec_field, slice_u8_to_field};

pub struct StarknetSettlementClient {
pub account: SingleOwnerAccount<Arc<JsonRpcClient<HttpTransport>>, LocalWallet>,
pub account: Arc<SingleOwnerAccount<Arc<JsonRpcClient<HttpTransport>>, LocalWallet>>,
pub starknet_core_contract_client: StarknetCoreContractClient,
pub core_contract_address: Felt,
pub tx_finality_retry_delay_in_seconds: u64,
}
Expand All @@ -45,7 +48,8 @@ const MAX_RETRIES_VERIFY_TX_FINALITY: usize = 10;
impl StarknetSettlementClient {
pub async fn new_with_settings(settings: &impl Settings) -> Self {
let settlement_cfg = StarknetSettlementConfig::new_with_settings(settings);
let provider = Arc::new(JsonRpcClient::new(HttpTransport::new(settlement_cfg.rpc_url)));
let provider: Arc<JsonRpcClient<HttpTransport>> =
Arc::new(JsonRpcClient::new(HttpTransport::new(settlement_cfg.rpc_url.clone())));

let public_key = settings.get_settings_or_panic(ENV_PUBLIC_KEY);
let signer_address = Felt::from_hex(&public_key).expect("invalid signer address");
Expand All @@ -58,17 +62,22 @@ impl StarknetSettlementClient {
let core_contract_address =
Felt::from_hex(&settlement_cfg.core_contract_address).expect("Invalid core contract address");

let account = SingleOwnerAccount::new(
provider.clone(),
signer,
signer_address,
provider.chain_id().await.unwrap(),
ExecutionEncoding::Legacy,
);
let account: Arc<SingleOwnerAccount<Arc<JsonRpcClient<HttpTransport>>, LocalWallet>> =
Arc::new(SingleOwnerAccount::new(
provider.clone(),
signer.clone(),
signer_address,
provider.chain_id().await.unwrap(),
ExecutionEncoding::Legacy,
));

let starknet_core_contract_client: StarknetCoreContractClient =
StarknetCoreContractClient::new(core_contract_address, account.clone());

StarknetSettlementClient {
account,
core_contract_address,
starknet_core_contract_client,
tx_finality_retry_delay_in_seconds: settlement_cfg.tx_finality_retry_delay_in_seconds,
}
}
Expand Down Expand Up @@ -110,19 +119,10 @@ impl SettlementClient for StarknetSettlementClient {
) -> Result<String> {
let program_output = slice_slice_u8_to_vec_field(program_output.as_slice());
let onchain_data_hash = slice_u8_to_field(&onchain_data_hash);
let mut calldata: Vec<Felt> = Vec::with_capacity(program_output.len() + 2);
calldata.extend(program_output);
calldata.push(onchain_data_hash);
calldata.push(Felt::from(onchain_data_size));
let invoke_result = self
.account
.execute_v1(vec![Call {
to: self.core_contract_address,
selector: *CONTRACT_WRITE_UPDATE_STATE_SELECTOR,
calldata,
}])
.send()
.await?;
let onchain_data_size = Felt::from(onchain_data_size);
let core_contract: &CoreContract = self.starknet_core_contract_client.as_ref();
let invoke_result = core_contract.update_state(program_output, onchain_data_hash, onchain_data_size).await?;

Ok(format!("0x{:x}", invoke_result.transaction_hash))
}

Expand Down
1 change: 0 additions & 1 deletion e2e-tests/tests.rs
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,6 @@ use starknet::core::types::{Felt, MaybePendingStateUpdate};
use std::collections::HashMap;
use std::fs::{read, File};
use std::io::Read;
// use std::str::FromStr;
use std::time::{Duration, Instant};
use utils::env_utils::get_env_var_or_panic;
use uuid::Uuid;
Expand Down