Skip to content

Commit

Permalink
Comments resolution
Browse files Browse the repository at this point in the history
- identity
- deactivated status added
- Appchain bridge setting event emission
  • Loading branch information
byteZorvin committed Jul 29, 2024
1 parent 35e8c91 commit 085eb7a
Show file tree
Hide file tree
Showing 5 changed files with 32 additions and 16 deletions.
5 changes: 3 additions & 2 deletions src/bridge/interface.cairo
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ use starknet_bridge::bridge::types::{TokenStatus, TokenSettings};
pub trait ITokenBridgeAdmin<TContractState> {
fn set_appchain_token_bridge(ref self: TContractState, appchain_bridge: ContractAddress);
fn block_token(ref self: TContractState, token: ContractAddress);
fn deactivate_and_block_token(ref self: TContractState, token: ContractAddress);
fn deactivate_token(ref self: TContractState, token: ContractAddress);
fn enable_withdrawal_limit(ref self: TContractState, token: ContractAddress);
fn disable_withdrawal_limit(ref self: TContractState, token: ContractAddress);
fn set_max_total_balance(
Expand All @@ -16,7 +16,8 @@ pub trait ITokenBridgeAdmin<TContractState> {
#[starknet::interface]
pub trait ITokenBridge<TContractState> {
fn appchain_bridge(self: @TContractState) -> ContractAddress;
fn identity(self: @TContractState) -> ByteArray;
fn get_identity(self: @TContractState) -> felt252;
fn get_version(self: @TContractState) -> felt252;
fn get_status(self: @TContractState, token: ContractAddress) -> TokenStatus;
fn is_servicing_token(self: @TContractState, token: ContractAddress) -> bool;
fn is_withdrawal_limit_applied(self: @TContractState, token: ContractAddress) -> bool;
Expand Down
35 changes: 23 additions & 12 deletions src/bridge/token_bridge.cairo
Original file line number Diff line number Diff line change
Expand Up @@ -103,6 +103,7 @@ pub mod TokenBridge {
WithdrawalLimitEnabled: WithdrawalLimitEnabled,
WithdrawalLimitDisabled: WithdrawalLimitDisabled,
SetMaxTotalBalance: SetMaxTotalBalance,
SetAppchainBridge: SetAppchainBridge,
#[flat]
OwnableEvent: OwnableComponent::Event,
#[flat]
Expand Down Expand Up @@ -237,6 +238,12 @@ pub mod TokenBridge {
value: u256
}

#[derive(Drop, starknet::Event)]
pub struct SetAppchainBridge {
pub appchain_bridge: ContractAddress
}


#[constructor]
fn constructor(
ref self: ContractState,
Expand Down Expand Up @@ -308,13 +315,6 @@ pub mod TokenBridge {
.read()
.consume_message_from_appchain(appchain_bridge, payload.span());
}

fn block_token_internal(ref self: ContractState, token: ContractAddress) {
let new_settings = TokenSettings {
token_status: TokenStatus::Blocked, ..self.token_settings.read(token)
};
self.token_settings.write(token, new_settings);
}
}


Expand Down Expand Up @@ -365,6 +365,8 @@ pub mod TokenBridge {
fn set_appchain_token_bridge(ref self: ContractState, appchain_bridge: ContractAddress) {
self.ownable.assert_only_owner();
self.appchain_bridge.write(appchain_bridge);

self.emit(SetAppchainBridge { appchain_bridge: appchain_bridge });
}

// @param token The address of the token contract to be deactivated.
Expand All @@ -375,20 +377,26 @@ pub mod TokenBridge {
self.ownable.assert_only_owner();
assert(self.get_status(token) == TokenStatus::Unknown, Errors::CANNOT_BLOCK);

self.block_token_internal(token);
let new_settings = TokenSettings {
token_status: TokenStatus::Blocked, ..self.token_settings.read(token)
};
self.token_settings.write(token, new_settings);
self.emit(TokenBlocked { token });
}


fn deactivate_and_block_token(ref self: ContractState, token: ContractAddress) {
fn deactivate_token(ref self: ContractState, token: ContractAddress) {
self.ownable.assert_only_owner();
let status = self.get_status(token);
assert(
status == TokenStatus::Active || status == TokenStatus::Pending,
Errors::CANNOT_DEACTIVATE
);

self.block_token_internal(:token);
let new_settings = TokenSettings {
token_status: TokenStatus::Deactivated, ..self.token_settings.read(token)
};
self.token_settings.write(token, new_settings);

self.emit(TokenDeactivated { token });
self.emit(TokenBlocked { token });
Expand Down Expand Up @@ -430,10 +438,13 @@ pub mod TokenBridge {
return self.appchain_bridge.read();
}

fn identity(self: @ContractState) -> ByteArray {
"STARKNET_BRIDGE_0.1.0"
fn get_identity(self: @ContractState) -> felt252 {
constants::CONTRACT_IDENTITY
}

fn get_version(self: @ContractState) -> felt252 {
constants::CONTRACT_VERSION
}

fn enroll_token(ref self: ContractState, token: ContractAddress) {
assert(self.get_status(token) == TokenStatus::Unknown, Errors::ALREADY_ENROLLED);
Expand Down
3 changes: 2 additions & 1 deletion src/bridge/types.cairo
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,8 @@ pub enum TokenStatus {
Unknown,
Pending,
Active,
Blocked
Blocked,
Deactivated
}

#[derive(Serde, Drop, starknet::Store)]
Expand Down
4 changes: 4 additions & 0 deletions src/constants.cairo
Original file line number Diff line number Diff line change
Expand Up @@ -20,3 +20,7 @@ pub const REMAINING_QUOTA_OFFSET: u256 = 1;
// starknet_keccak('on_receive').
pub const ON_RECEIVE_SELECTOR: felt252 =
480768629706071032051132431608482761444818804172389941599997570483678682398;

pub const CONTRACT_IDENTITY: felt252 = 'STARKNET_BRIDGE';
pub const CONTRACT_VERSION: felt252 = '0.1.0';

1 change: 0 additions & 1 deletion tests/lib.cairo
Original file line number Diff line number Diff line change
@@ -1,3 +1,2 @@
mod test_contract;
mod token_bridge_test;

0 comments on commit 085eb7a

Please sign in to comment.