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

complete_setup endpoint #187

Merged
merged 11 commits into from
Nov 21, 2024
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
35 changes: 11 additions & 24 deletions common/setup-phase/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -4,42 +4,29 @@ 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_setup_complete(&self, caller_shard_id: u32) {

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We don' need caller_shard_id

require!(
self.is_setup_phase_complete(),
"The setup is not completed in shard {}",
caller_shard_id
);
}

fn require_caller_initiator(&self) {

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Is this function needed?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

i made it an inline function, might as well use it to make the endpoint as short as possible

let caller = self.blockchain().get_caller();
let initiator_address = self.initiator_address().get();
require!(caller == initiator_address, "Invalid caller");
}

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

fn require_setup_complete(&self) {
require!(
self.is_setup_phase_complete(),
"Setup phase must be completed first"
);
require!(caller == initiator, "Invalid caller");
}

#[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
36 changes: 32 additions & 4 deletions sovereign-forge/src/phases.rs
Original file line number Diff line number Diff line change
Expand Up @@ -15,8 +15,34 @@ 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
{
#[endpoint(completeSetupPhase)]
axenteoctavian marked this conversation as resolved.
Show resolved Hide resolved
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,13 +52,15 @@ pub trait PhasesModule: common::utils::UtilsModule + common::storage::StorageMod
min_stake: BigUint,
additional_stake_required: MultiValueEncoded<StakeMultiArg<Self::Api>>,
) {
let call_value = self.call_value().egld_value();
self.require_correct_deploy_cost(call_value.deref());

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

self.require_setup_complete(caller_shard_id);

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

let chain_id = self.generate_chain_id();

let chain_factories_mapper = self.chain_factories(caller_shard_id);
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.

Loading
Loading