Skip to content

Commit

Permalink
Merge pull request #187 from multiversx/complete-phases
Browse files Browse the repository at this point in the history
`complete_setup` endpoint
  • Loading branch information
andreiblt1304 authored Nov 21, 2024
2 parents 798f72a + ec726c5 commit 321826d
Show file tree
Hide file tree
Showing 21 changed files with 93 additions and 113 deletions.
1 change: 1 addition & 0 deletions Cargo.lock

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

9 changes: 0 additions & 9 deletions common/proxies/src/enshrine_esdt_safe_proxy.rs
Original file line number Diff line number Diff line change
Expand Up @@ -218,15 +218,6 @@ where
.original_result()
}

pub fn end_setup_phase(
self,
) -> TxTypedCall<Env, From, To, NotPayable, Gas, ()> {
self.wrapped_tx
.payment(NotPayable)
.raw_call("endSetupPhase")
.original_result()
}

/// Tokens in the whitelist can be transferred without fees
pub fn add_tokens_to_whitelist<
Arg0: ProxyArg<MultiValueEncoded<Env::Api, TokenIdentifier<Env::Api>>>,
Expand Down
9 changes: 0 additions & 9 deletions common/proxies/src/esdt_safe_proxy.rs
Original file line number Diff line number Diff line change
Expand Up @@ -221,15 +221,6 @@ where
.original_result()
}

pub fn end_setup_phase(
self,
) -> TxTypedCall<Env, From, To, NotPayable, Gas, ()> {
self.wrapped_tx
.payment(NotPayable)
.raw_call("endSetupPhase")
.original_result()
}

/// Tokens in the whitelist can be transferred without fees
pub fn add_tokens_to_whitelist<
Arg0: ProxyArg<MultiValueEncoded<Env::Api, TokenIdentifier<Env::Api>>>,
Expand Down
9 changes: 9 additions & 0 deletions common/proxies/src/sovereign_forge_proxy.rs
Original file line number Diff line number Diff line change
Expand Up @@ -117,6 +117,15 @@ where
.original_result()
}

pub fn complete_setup_phase(
self,
) -> TxTypedCall<Env, From, To, NotPayable, Gas, ()> {
self.wrapped_tx
.payment(NotPayable)
.raw_call("completeSetupPhase")
.original_result()
}

pub fn deploy_phase_one<
Arg0: ProxyArg<u64>,
Arg1: ProxyArg<u64>,
Expand Down
30 changes: 7 additions & 23 deletions common/setup-phase/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -4,42 +4,26 @@ multiversx_sc::imports!();

#[multiversx_sc::module]
pub trait SetupPhaseModule {
#[endpoint(endSetupPhase)]
fn end_setup_phase(&self) {
self.require_caller_initiator();
self.require_setup_phase();

self.setup_phase_complete().set(true);
}

fn require_caller_initiator(&self) {
let caller = self.blockchain().get_caller();
let initiator_address = self.initiator_address().get();
require!(caller == initiator_address, "Invalid caller");
}
let initiator = self.initiator_address().get();

fn require_setup_phase(&self) {
require!(
!self.is_setup_phase_complete(),
"Setup phase complete already"
);
require!(caller == initiator, "Invalid caller");
}

#[inline]
fn require_setup_complete(&self) {
require!(
self.is_setup_phase_complete(),
"Setup phase must be completed first"
);
require!(self.is_setup_phase_complete(), "The setup is not completed");
}

#[inline]
fn is_setup_phase_complete(&self) -> bool {
self.setup_phase_complete().get()
}

#[storage_mapper("initiatorAddress")]
fn initiator_address(&self) -> SingleValueMapper<ManagedAddress>;

#[storage_mapper("setupPhaseComplete")]
fn setup_phase_complete(&self) -> SingleValueMapper<bool>;

#[storage_mapper("initiatorAddress")]
fn initiator_address(&self) -> SingleValueMapper<ManagedAddress>;
}
17 changes: 0 additions & 17 deletions enshrine-esdt-safe/interactor/src/interactor_main.rs
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,6 @@ async fn main() {
"registerNewTokenID" => interact.register_new_token_id().await,
"setMaxBridgedAmount" => interact.set_max_bridged_amount().await,
"getMaxBridgedAmount" => interact.max_bridged_amount().await,
"endSetupPhase" => interact.end_setup_phase().await,
"addTokensToWhitelist" => interact.add_tokens_to_whitelist(TOKEN_ID).await,
"removeTokensFromWhitelist" => interact.remove_tokens_from_whitelist().await,
"addTokensToBlacklist" => interact.add_tokens_to_blacklist().await,
Expand Down Expand Up @@ -514,22 +513,6 @@ impl ContractInteract {
println!("Result: {result_value:?}");
}

async fn end_setup_phase(&mut self) {
let response = self
.interactor
.tx()
.from(&self.wallet_address)
.to(self.state.current_address())
.gas(30_000_000u64)
.typed(enshrine_esdt_safe_proxy::EnshrineEsdtSafeProxy)
.end_setup_phase()
.returns(ReturnsResultUnmanaged)
.run()
.await;

println!("Result: {response:?}");
}

async fn add_tokens_to_whitelist(&mut self, token_id: &[u8]) {
let tokens;

Expand Down
9 changes: 0 additions & 9 deletions enshrine-esdt-safe/interactor/src/proxy.rs
Original file line number Diff line number Diff line change
Expand Up @@ -218,15 +218,6 @@ where
.original_result()
}

pub fn end_setup_phase(
self,
) -> TxTypedCall<Env, From, To, NotPayable, Gas, ()> {
self.wrapped_tx
.payment(NotPayable)
.raw_call("endSetupPhase")
.original_result()
}

/// Tokens in the whitelist can be transferred without fees
pub fn add_tokens_to_whitelist<
Arg0: ProxyArg<MultiValueEncoded<Env::Api, TokenIdentifier<Env::Api>>>,
Expand Down
5 changes: 2 additions & 3 deletions enshrine-esdt-safe/wasm-enshrine-esdt-safe-full/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -6,9 +6,9 @@

// Init: 1
// Upgrade: 1
// Endpoints: 19
// Endpoints: 18
// Async Callback: 1
// Total number of exported functions: 22
// Total number of exported functions: 21

#![no_std]

Expand All @@ -29,7 +29,6 @@ multiversx_sc_wasm_adapter::endpoints! {
registerNewTokenID => register_new_token_id
setMaxBridgedAmount => set_max_bridged_amount
getMaxBridgedAmount => max_bridged_amount
endSetupPhase => end_setup_phase
addTokensToWhitelist => add_tokens_to_whitelist
removeTokensFromWhitelist => remove_tokens_from_whitelist
addTokensToBlacklist => add_tokens_to_blacklist
Expand Down
5 changes: 2 additions & 3 deletions enshrine-esdt-safe/wasm/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -6,9 +6,9 @@

// Init: 1
// Upgrade: 1
// Endpoints: 19
// Endpoints: 18
// Async Callback: 1
// Total number of exported functions: 22
// Total number of exported functions: 21

#![no_std]

Expand All @@ -29,7 +29,6 @@ multiversx_sc_wasm_adapter::endpoints! {
registerNewTokenID => register_new_token_id
setMaxBridgedAmount => set_max_bridged_amount
getMaxBridgedAmount => max_bridged_amount
endSetupPhase => end_setup_phase
addTokensToWhitelist => add_tokens_to_whitelist
removeTokensFromWhitelist => remove_tokens_from_whitelist
addTokensToBlacklist => add_tokens_to_blacklist
Expand Down
17 changes: 0 additions & 17 deletions esdt-safe/interactor/src/interactor_main.rs
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,6 @@ async fn main() {
"registerToken" => interact.register_token().await,
"setMaxBridgedAmount" => interact.set_max_bridged_amount().await,
"getMaxBridgedAmount" => interact.max_bridged_amount().await,
"endSetupPhase" => interact.end_setup_phase().await,
"addTokensToWhitelist" => interact.add_tokens_to_whitelist(b"").await,
"removeTokensFromWhitelist" => interact.remove_tokens_from_whitelist().await,
"addTokensToBlacklist" => interact.add_tokens_to_blacklist(b"").await,
Expand Down Expand Up @@ -502,22 +501,6 @@ impl ContractInteract {
println!("Result: {result_value:?}");
}

async fn end_setup_phase(&mut self) {
let response = self
.interactor
.tx()
.from(&self.wallet_address)
.to(self.state.current_address())
.gas(30_000_000u64)
.typed(EsdtSafeProxy)
.end_setup_phase()
.returns(ReturnsResultUnmanaged)
.run()
.await;

println!("Result: {response:?}");
}

async fn add_tokens_to_whitelist(&mut self, token_id: &[u8]) {
let tokens = MultiValueVec::from(vec![TokenIdentifier::from_esdt_bytes(token_id)]);

Expand Down
9 changes: 0 additions & 9 deletions esdt-safe/interactor/src/proxy.rs
Original file line number Diff line number Diff line change
Expand Up @@ -221,15 +221,6 @@ where
.original_result()
}

pub fn end_setup_phase(
self,
) -> TxTypedCall<Env, From, To, NotPayable, Gas, ()> {
self.wrapped_tx
.payment(NotPayable)
.raw_call("endSetupPhase")
.original_result()
}

/// Tokens in the whitelist can be transferred without fees
pub fn add_tokens_to_whitelist<
Arg0: ProxyArg<MultiValueEncoded<Env::Api, TokenIdentifier<Env::Api>>>,
Expand Down
5 changes: 2 additions & 3 deletions esdt-safe/wasm-esdt-safe-full/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -6,10 +6,10 @@

// Init: 1
// Upgrade: 1
// Endpoints: 19
// Endpoints: 18
// Async Callback (empty): 1
// Promise callbacks: 2
// Total number of exported functions: 24
// Total number of exported functions: 23

#![no_std]

Expand All @@ -30,7 +30,6 @@ multiversx_sc_wasm_adapter::endpoints! {
executeBridgeOps => execute_operations
setMaxBridgedAmount => set_max_bridged_amount
getMaxBridgedAmount => max_bridged_amount
endSetupPhase => end_setup_phase
addTokensToWhitelist => add_tokens_to_whitelist
removeTokensFromWhitelist => remove_tokens_from_whitelist
addTokensToBlacklist => add_tokens_to_blacklist
Expand Down
5 changes: 2 additions & 3 deletions esdt-safe/wasm/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -6,10 +6,10 @@

// Init: 1
// Upgrade: 1
// Endpoints: 19
// Endpoints: 18
// Async Callback (empty): 1
// Promise callbacks: 2
// Total number of exported functions: 24
// Total number of exported functions: 23

#![no_std]

Expand All @@ -30,7 +30,6 @@ multiversx_sc_wasm_adapter::endpoints! {
executeBridgeOps => execute_operations
setMaxBridgedAmount => set_max_bridged_amount
getMaxBridgedAmount => max_bridged_amount
endSetupPhase => end_setup_phase
addTokensToWhitelist => add_tokens_to_whitelist
removeTokensFromWhitelist => remove_tokens_from_whitelist
addTokensToBlacklist => add_tokens_to_blacklist
Expand Down
3 changes: 3 additions & 0 deletions sovereign-forge/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -25,3 +25,6 @@ path = "../common/proxies"

[dependencies.transaction]
path = "../common/transaction"

[dependencies.setup-phase]
path = "../common/setup-phase"
5 changes: 4 additions & 1 deletion sovereign-forge/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,10 @@ mod phases;

#[multiversx_sc::contract]
pub trait SovereignForge:
phases::PhasesModule + common::storage::StorageModule + common::utils::UtilsModule
phases::PhasesModule
+ common::storage::StorageModule
+ common::utils::UtilsModule
+ setup_phase::SetupPhaseModule
{
#[init]
fn init(&self, deploy_cost: BigUint) {
Expand Down
34 changes: 31 additions & 3 deletions sovereign-forge/src/phases.rs
Original file line number Diff line number Diff line change
Expand Up @@ -15,8 +15,35 @@ use crate::{
err_msg,
};

const NUMBER_OF_SHARDS: u32 = 3;

#[multiversx_sc::module]
pub trait PhasesModule: common::utils::UtilsModule + common::storage::StorageModule {
pub trait PhasesModule:
common::utils::UtilsModule + common::storage::StorageModule + setup_phase::SetupPhaseModule
{
#[only_owner]
#[endpoint(completeSetupPhase)]
fn complete_setup_phase(&self) {
if !self.is_setup_phase_complete() {
return;
}

for shard_id in 1..=NUMBER_OF_SHARDS {
require!(
!self.chain_factories(shard_id).is_empty(),
"There is no Chain-Factory contract assigned for shard {}",
shard_id
);
require!(
!self.token_handlers(shard_id).is_empty(),
"There is no Token-Handler contract assigned for shard {}",
shard_id
);
}

self.setup_phase_complete().set(true);
}

#[payable("EGLD")]
#[endpoint(deployPhaseOne)]
fn deploy_phase_one(
Expand All @@ -26,15 +53,16 @@ pub trait PhasesModule: common::utils::UtilsModule + common::storage::StorageMod
min_stake: BigUint,
additional_stake_required: MultiValueEncoded<StakeMultiArg<Self::Api>>,
) {
self.require_setup_complete();

let call_value = self.call_value().egld_value();
self.require_correct_deploy_cost(call_value.deref());

let chain_id = self.generate_chain_id();
let blockchain_api = self.blockchain();
let caller = blockchain_api.get_caller();
let caller_shard_id = blockchain_api.get_shard_of_address(&caller);

let chain_id = self.generate_chain_id();

let chain_factories_mapper = self.chain_factories(caller_shard_id);
require!(
!chain_factories_mapper.is_empty(),
Expand Down
8 changes: 8 additions & 0 deletions sovereign-forge/wasm-sovereign-forge-full/Cargo.lock

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

5 changes: 3 additions & 2 deletions sovereign-forge/wasm-sovereign-forge-full/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -6,9 +6,9 @@

// Init: 1
// Upgrade: 1
// Endpoints: 5
// Endpoints: 6
// Async Callback (empty): 1
// Total number of exported functions: 8
// Total number of exported functions: 9

#![no_std]

Expand All @@ -22,6 +22,7 @@ multiversx_sc_wasm_adapter::endpoints! {
upgrade => upgrade
registerTokenHandler => register_token_handler
registerChainFactory => register_chain_factory
completeSetupPhase => complete_setup_phase
deployPhaseOne => deploy_phase_one
getDeployCost => deploy_cost
getAllChainIds => chain_ids
Expand Down
Loading

0 comments on commit 321826d

Please sign in to comment.