Skip to content
Merged
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
4 changes: 2 additions & 2 deletions .github/workflows/l2.yml
Original file line number Diff line number Diff line change
Expand Up @@ -11,8 +11,8 @@ on:
- "contracts/L2/**"

env:
SCARB_VERSION: 2.9.2
STARKNET_FOUNDRY_VERSION: 0.36.0
SCARB_VERSION: 2.12.0
STARKNET_FOUNDRY_VERSION: 0.48.0

jobs:
l2-fmt:
Expand Down
3 changes: 2 additions & 1 deletion contracts/L2/.gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -2,4 +2,5 @@ target
.snfoundry_cache/
.tool-versions
node_modules
.env
.env
Scarb.lock
4 changes: 2 additions & 2 deletions contracts/L2/.tool-versions
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
scarb 2.9.2
starknet-foundry 0.36.0
scarb 2.12.0
starknet-foundry 0.48.0
10 changes: 5 additions & 5 deletions contracts/L2/Scarb.lock
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ version = 1
[[package]]
name = "cairo_lib"
version = "0.2.0"
source = "git+https://github.com/HerodotusDev/cairo-lib.git#a0c0ee4feeb4edb61e7a35d29595ad8647c3d469"
source = "git+https://github.com/Explore-Beyond-Innovations/cairo-lib.git?rev=afc30b93404f6f5c595f97d1f4f795983872600a#afc30b93404f6f5c595f97d1f4f795983872600a"

[[package]]
name = "integrity"
Expand Down Expand Up @@ -77,15 +77,15 @@ checksum = "sha256:44f32d242af1e43982decc49c563e613a9b67ade552f5c3d5cde504e92f74

[[package]]
name = "snforge_scarb_plugin"
version = "0.36.0"
version = "0.48.1"
source = "registry+https://scarbs.xyz/"
checksum = "sha256:b9550f5c921502be3e240e83aa9e2dc6ee63ae76bfecee082b7a15bead0460c0"
checksum = "sha256:2dd27e8215eea8785b3930e9f452e11b429ca262b1c1fbb071bfc173b9ebc125"

[[package]]
name = "snforge_std"
version = "0.36.0"
version = "0.48.1"
source = "registry+https://scarbs.xyz/"
checksum = "sha256:9f38c6c376447cfe225c5869905122f6a64bc301f5872c7855d2abe6e9c0a1da"
checksum = "sha256:89f759fa685d48ed0ba7152d2ac2eb168da08dfa8b84b2bee96e203dc5b2413e"
dependencies = [
"snforge_scarb_plugin",
]
6 changes: 3 additions & 3 deletions contracts/L2/Scarb.toml
Original file line number Diff line number Diff line change
Expand Up @@ -7,17 +7,17 @@ edition = "2024_07"

[dependencies]
integrity = "2.0.0"
starknet = "2.9.2"
starknet = "2.12.0"
openzeppelin_access = "0.20.0"
openzeppelin_introspection = "0.20.0"
openzeppelin_token = "0.20.0"
openzeppelin_upgrades = "0.20.0"
cairo_lib = { git = "https://github.com/Explore-Beyond-Innovations/cairo-lib.git", rev = "afc30b93404f6f5c595f97d1f4f795983872600a" }

[dev-dependencies]
assert_macros = "2.9.2"
assert_macros = "2.12.0"
openzeppelin_utils = "0.20.0"
snforge_std = "0.36.0"
snforge_std = "0.48.0"

[[target.starknet-contract]]
sierra = true
Expand Down
6 changes: 3 additions & 3 deletions contracts/L2/src/core/L2Oracle.cairo
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
#[starknet::contract]
pub mod L2Oracle {
use starknet::{ContractAddress, get_caller_address};
use core::num::traits::Zero;
use l2::interfaces::IL2Oracle::IL2Oracle;
use openzeppelin_access::ownable::OwnableComponent;
use starknet::storage::{
StoragePointerReadAccess, StoragePointerWriteAccess, StoragePathEntry, Map,
Map, StoragePathEntry, StoragePointerReadAccess, StoragePointerWriteAccess,
};
use l2::interfaces::IL2Oracle::IL2Oracle;
use starknet::{ContractAddress, get_caller_address};

component!(path: OwnableComponent, storage: ownable, event: OwnableEvent);

Expand Down
14 changes: 7 additions & 7 deletions contracts/L2/src/core/ProofRegistry.cairo
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
use integrity::{
calculate_bootloaded_fact_hash, SHARP_BOOTLOADER_PROGRAM_HASH, VerifierConfiguration,
SHARP_BOOTLOADER_PROGRAM_HASH, VerifierConfiguration, calculate_bootloaded_fact_hash,
};

// Calculate fact hash for cairo1 programs bootloaded in cairo0 by Atlantic.
Expand All @@ -16,11 +16,11 @@ fn calculate_cairo1_fact_hash(
bootloader_output.append(output.len().into());
for x in output {
bootloader_output.append(*x);
};
}
bootloader_output.append(input.len().into());
for x in input {
bootloader_output.append(*x);
};
}

// All programs sent to Sharp are bootloaded (second time in this case).
calculate_bootloaded_fact_hash(
Expand Down Expand Up @@ -58,12 +58,12 @@ fn get_cairo1_fact_hash(commitment_hash: felt252, merkle_root: felt252) -> felt2

#[starknet::contract]
mod ProofRegistry {
use super::*;
use starknet::storage::{
Map, StoragePointerReadAccess, StoragePointerWriteAccess, StoragePathEntry,
};
use integrity::{Integrity, IntegrityWithConfig};
use l2::interfaces::IProofRegistry::IProofRegistry;
use starknet::storage::{
Map, StoragePathEntry, StoragePointerReadAccess, StoragePointerWriteAccess,
};
use super::*;

#[storage]
struct Storage {
Expand Down
66 changes: 31 additions & 35 deletions contracts/L2/src/core/ZeroXBridgeL2.cairo
Original file line number Diff line number Diff line change
@@ -1,34 +1,30 @@
#[starknet::contract]
pub mod ZeroXBridgeL2 {
use openzeppelin_access::ownable::OwnableComponent;
use openzeppelin_introspection::src5::SRC5Component;
use openzeppelin_upgrades::UpgradeableComponent;
use openzeppelin_upgrades::interface::IUpgradeable;
use starknet::{
ContractAddress, get_caller_address, ClassHash, get_block_timestamp, get_contract_address,
};
use l2::interfaces::IxZBErc20::{IXZBERC20Dispatcher, IXZBERC20DispatcherTrait};
use openzeppelin_token::erc20::interface::{IERC20DispatcherTrait, IERC20Dispatcher};
use l2::interfaces::IL2Oracle::{IL2OracleDispatcher, IL2OracleDispatcherTrait};

use cairo_lib::data_structures::mmr::mmr::{MMR, MMRTrait};
use core::array::ArrayTrait;
use core::hash::{HashStateExTrait, HashStateTrait};
use core::option::Option;
use core::poseidon::PoseidonTrait;
use core::array::ArrayTrait;
use starknet::storage::{
StoragePointerReadAccess, StoragePointerWriteAccess, Map, StorageMapReadAccess,
StorageMapWriteAccess, Vec, VecTrait, MutableVecTrait,
};
use core::hash::{HashStateTrait, HashStateExTrait};

use l2::interfaces::IL2Oracle::{IL2OracleDispatcher, IL2OracleDispatcherTrait};
use l2::interfaces::IMerkleManager::IMerkleManager;
use l2::interfaces::IProofRegistry::{IProofRegistryDispatcher, IProofRegistryDispatcherTrait};
use l2::interfaces::IZeroXBridgeL2::{IDynamicRate, IZeroXBridgeL2};
use l2::interfaces::IMerkleManager::IMerkleManager;

use l2::interfaces::IxZBErc20::{IXZBERC20Dispatcher, IXZBERC20DispatcherTrait};
use openzeppelin_access::ownable::OwnableComponent;
use openzeppelin_introspection::src5::SRC5Component;
use openzeppelin_token::erc20::interface::{IERC20Dispatcher, IERC20DispatcherTrait};
use openzeppelin_upgrades::UpgradeableComponent;
use openzeppelin_upgrades::interface::IUpgradeable;
use starknet::eth_address::EthAddress;
use starknet::eth_signature::verify_eth_signature;
use starknet::secp256_trait::Signature;
use cairo_lib::data_structures::mmr::mmr::MMR;
use cairo_lib::data_structures::mmr::mmr::MMRTrait;
use starknet::storage::{
Map, MutableVecTrait, StorageMapReadAccess, StorageMapWriteAccess, StoragePointerReadAccess,
StoragePointerWriteAccess, Vec, VecTrait,
};
use starknet::{
ClassHash, ContractAddress, get_block_timestamp, get_caller_address, get_contract_address,
};


const PRECISION: u256 = 1_000_000_000_000_000_000; // 18 decimals for precision
Expand Down Expand Up @@ -313,7 +309,7 @@ pub mod ZeroXBridgeL2 {
let max_rate = rates.max_rate;

let final_rate = if raw_rate == 0 {
1 * PRECISION
PRECISION
} else if raw_rate < min_rate {
min_rate
} else if raw_rate > max_rate {
Expand All @@ -339,16 +335,16 @@ pub mod ZeroXBridgeL2 {
self.ownable.assert_only_owner();
let mut current_rates = self.rates.read();

match min_rate {
Option::Some(new_min) => { current_rates.min_rate = new_min; },
Option::None => {},
if let Option::Some(new_min) = min_rate {
{
current_rates.min_rate = new_min;
}
}

match max_rate {
Option::Some(new_max) => { current_rates.max_rate = new_max; },
Option::None => {},
if let Option::Some(new_max) = max_rate {
{
current_rates.max_rate = new_max;
}
}

assert(current_rates.min_rate < current_rates.max_rate, 'Min rate must be < max rate');

self.rates.write(current_rates);
Expand Down Expand Up @@ -405,7 +401,7 @@ pub mod ZeroXBridgeL2 {
let mut peaks = array![];
for i in 0..self.last_peaks.len() {
peaks.append(self.last_peaks.at(i).read());
};
}
peaks
}

Expand Down Expand Up @@ -450,7 +446,7 @@ pub mod ZeroXBridgeL2 {
for i in 0..peaks_len {
let mut storage_ptr = self.last_peaks.at(i.into());
storage_ptr.write(*peaks.at(i));
};
}
for i in peaks_len..last_peaks_len {
let mut storage_ptr = self.last_peaks.at(i.into());
storage_ptr.write(0);
Expand All @@ -460,9 +456,9 @@ pub mod ZeroXBridgeL2 {
for i in 0..last_peaks_len {
let mut storage_ptr = self.last_peaks.at(i.into());
storage_ptr.write(*peaks.at(i));
};
}
for i in last_peaks_len..peaks_len {
self.last_peaks.append().write(*peaks.at(i));
self.last_peaks.push(*peaks.at(i));
};
}

Expand Down
6 changes: 2 additions & 4 deletions contracts/L2/src/core/xZBERC20.cairo
Original file line number Diff line number Diff line change
Expand Up @@ -6,16 +6,14 @@ pub const UPGRADER_ROLE: felt252 = selector!("UPGRADER_ROLE");

#[starknet::contract]
pub mod xZBERC20 {
use l2::interfaces::IxZBErc20::IXZBERC20;
use openzeppelin_access::accesscontrol::{AccessControlComponent, DEFAULT_ADMIN_ROLE};
use openzeppelin_introspection::src5::SRC5Component;
use openzeppelin_token::erc20::{ERC20Component, ERC20HooksEmptyImpl};
use openzeppelin_upgrades::UpgradeableComponent;
use openzeppelin_upgrades::interface::IUpgradeable;
use starknet::{ClassHash, ContractAddress, get_caller_address};

use starknet::storage::{StoragePointerReadAccess, StoragePointerWriteAccess};

use l2::interfaces::IxZBErc20::IXZBERC20;
use starknet::{ClassHash, ContractAddress, get_caller_address};
use super::{BRIDGE_ROLE, UPGRADER_ROLE};

component!(path: ERC20Component, storage: erc20, event: ERC20Event);
Expand Down
25 changes: 12 additions & 13 deletions contracts/L2/src/dao/DAO.cairo
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
use core::starknet::ContractAddress;
use starknet::ContractAddress;
use starknet::storage::Map;

// Define the ExecutiveAction interface
Expand Down Expand Up @@ -108,20 +108,19 @@ pub trait IDAO<TContractState> {

#[starknet::contract]
pub mod DAO {
use starknet::event::EventEmitter;
use starknet::storage::StorageMapWriteAccess;
use starknet::storage::StorageMapReadAccess;
use starknet::{ContractAddress, contract_address_const};
use starknet::get_caller_address;
use starknet::get_block_timestamp;
use core::traits::Into;
use core::array::ArrayTrait;
use core::starknet::storage::{
StoragePointerReadAccess, StoragePointerWriteAccess, Map, StoragePathEntry,
};
use super::{Proposal, ProposalStatus, ProposalBindingData, BindingVote, BindingVoteTrait};
use openzeppelin_token::erc20::interface::{IERC20Dispatcher, IERC20DispatcherTrait};
use core::panic_with_felt252;
use core::traits::Into;
use openzeppelin_token::erc20::interface::{IERC20Dispatcher, IERC20DispatcherTrait};
use starknet::event::EventEmitter;
use starknet::storage::{
Map, StorageMapReadAccess, StorageMapWriteAccess, StoragePathEntry,
StoragePointerReadAccess, StoragePointerWriteAccess,
};
#[feature("deprecated-starknet-consts")]
use starknet::{ContractAddress, contract_address_const};
use starknet::{get_block_timestamp, get_caller_address};
use super::{BindingVote, BindingVoteTrait, Proposal, ProposalBindingData, ProposalStatus};


#[storage]
Expand Down
35 changes: 16 additions & 19 deletions contracts/L2/src/dao/Timelock.cairo
Original file line number Diff line number Diff line change
@@ -1,14 +1,11 @@
use starknet::ContractAddress;
use starknet::get_block_timestamp;
use starknet::get_caller_address;
use core::array::ArrayTrait;
use core::hash::HashStateTrait;
use core::integer::u256;
use core::poseidon::{PoseidonTrait, poseidon_hash_span};
use starknet::storage::{
StoragePointerReadAccess, StoragePointerWriteAccess, StoragePathEntry, Vec, Map,
Map, StoragePathEntry, StoragePointerReadAccess, StoragePointerWriteAccess, Vec,
};
use core::array::{ArrayTrait};
use core::poseidon::PoseidonTrait;
use core::poseidon::poseidon_hash_span;
use core::hash::{HashStateTrait};
use core::integer::u256;
use starknet::{ContractAddress, get_block_timestamp, get_caller_address};

#[starknet::interface]
trait IExecutor<TContractState> {
Expand All @@ -29,9 +26,9 @@ trait ITimelock<TContractState> {

#[starknet::contract]
mod Timelock {
use super::*;
use core::traits::Into;
use starknet::storage::{MutableVecTrait};
use starknet::storage::MutableVecTrait;
use super::*;

#[storage]
struct Storage {
Expand Down Expand Up @@ -90,9 +87,9 @@ mod Timelock {
#[derive(Drop, Serde, Copy, PartialEq, starknet::Store)]
#[allow(starknet::store_no_default_variant)]
enum ActionStatus {
Pending: (),
Executed: (),
Canceled: (),
Pending,
Executed,
Canceled,
}

#[constructor]
Expand Down Expand Up @@ -132,9 +129,9 @@ mod Timelock {
while i < calldata_length {
// If indexing returns a pointer (@u256), use .read() to obtain the value.
let element: u256 = *calldata.at(i);
action_entry.calldata.append().write(element);
action_entry.calldata.push(element);
i = i + 1;
};
}

self.action_count.write(self.action_count.read() + 1);

Expand Down Expand Up @@ -175,7 +172,7 @@ mod Timelock {
let element = action_entry.calldata.at(j).read();
calldata_array.append(element);
j = j + 1;
};
}

let executor_contract = IExecutorDispatcher { contract_address: executor };
executor_contract.execute(calldata_array);
Expand Down Expand Up @@ -221,7 +218,7 @@ mod Timelock {
if action_entry.status.read() == ActionStatus::Pending {
pending.append(action_id);
}
};
}
pending
}
}
Expand All @@ -243,7 +240,7 @@ mod Timelock {
.u256_to_felt252(element); // Convert u256 to felt252.
calldata_felt.append(element_felt);
i = i + 1;
};
}

// Generate the action ID using Poseidon hash.
PoseidonTrait::new()
Expand Down
2 changes: 1 addition & 1 deletion contracts/L2/src/interfaces/IZeroXBridgeL2.cairo
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
use starknet::ContractAddress;
use core::option::Option;
use starknet::ContractAddress;

#[starknet::interface]
pub trait IZeroXBridgeL2<TContractState> {
Expand Down
Loading