From 6ec7cd174470af526f8fa47328e48247b54b0d25 Mon Sep 17 00:00:00 2001 From: dragosrebegea Date: Thu, 18 Jul 2024 14:56:12 +0300 Subject: [PATCH] add unwrap and create transaction --- Cargo.lock | 3 +++ bridge-proxy/src/bridge-proxy.rs | 10 ++++--- bridged-tokens-wrapper/Cargo.toml | 9 +++++++ .../src/esdt_safe_proxy.rs | 0 bridged-tokens-wrapper/src/events.rs | 2 +- bridged-tokens-wrapper/src/lib.rs | 26 ++++++++++++++++--- bridged-tokens-wrapper/wasm/Cargo.lock | 26 +++++++++++++++++++ bridged-tokens-wrapper/wasm/src/lib.rs | 5 ++-- .../src/bridged_tokens_wrapper_proxy.rs | 15 +++++++++++ multi-transfer-esdt/wasm/Cargo.lock | 3 +++ multisig/wasm/Cargo.lock | 3 +++ 11 files changed, 91 insertions(+), 11 deletions(-) rename {bridge-proxy => bridged-tokens-wrapper}/src/esdt_safe_proxy.rs (100%) diff --git a/Cargo.lock b/Cargo.lock index d0fe21b5..6de51bd6 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -153,10 +153,13 @@ dependencies = [ name = "bridged-tokens-wrapper" version = "0.0.0" dependencies = [ + "eth-address", "multiversx-sc", "multiversx-sc-modules", "multiversx-sc-scenario", + "token-module", "transaction", + "tx-batch-module", ] [[package]] diff --git a/bridge-proxy/src/bridge-proxy.rs b/bridge-proxy/src/bridge-proxy.rs index 22ddc0cb..71fe7c55 100644 --- a/bridge-proxy/src/bridge-proxy.rs +++ b/bridge-proxy/src/bridge-proxy.rs @@ -3,7 +3,7 @@ use multiversx_sc::imports::*; pub mod bridge_proxy_contract_proxy; pub mod config; -pub mod esdt_safe_proxy; +pub mod bridged_tokens_wrapper; use transaction::EthTransaction; @@ -72,11 +72,13 @@ pub trait BridgeProxyContract: let tx = self.get_pending_transaction_by_id(tx_id); let esdt_safe_addr = self.esdt_safe_address().get(); + let (payment_token, payment_amount) = self.call_value().single_fungible_esdt(); + self.tx() .to(esdt_safe_addr) - .typed(esdt_safe_proxy::EsdtSafeProxy) - .create_transaction(tx.from) - .single_esdt(&tx.token_id, 0, &tx.amount) + .typed(bridged_tokens_wrapper::BridgedTokensWrapperProxy) + .unwrap_token_create_transaction(&tx.token_id, tx.from) + .single_esdt(&payment_token, 0, &payment_amount) .sync_call(); } diff --git a/bridged-tokens-wrapper/Cargo.toml b/bridged-tokens-wrapper/Cargo.toml index 71af86c6..2b2a3c8c 100644 --- a/bridged-tokens-wrapper/Cargo.toml +++ b/bridged-tokens-wrapper/Cargo.toml @@ -11,6 +11,15 @@ path = "src/lib.rs" [dependencies.transaction] path = "../common/transaction" +[dependencies.eth-address] +path = "../common/eth-address" + +[dependencies.token-module] +path = "../common/token-module" + +[dependencies.tx-batch-module] +path = "../common/tx-batch-module" + [dependencies.multiversx-sc] version = "=0.51.1" diff --git a/bridge-proxy/src/esdt_safe_proxy.rs b/bridged-tokens-wrapper/src/esdt_safe_proxy.rs similarity index 100% rename from bridge-proxy/src/esdt_safe_proxy.rs rename to bridged-tokens-wrapper/src/esdt_safe_proxy.rs diff --git a/bridged-tokens-wrapper/src/events.rs b/bridged-tokens-wrapper/src/events.rs index c80b91ab..34893fba 100644 --- a/bridged-tokens-wrapper/src/events.rs +++ b/bridged-tokens-wrapper/src/events.rs @@ -4,5 +4,5 @@ pub trait EventsModule { fn wrap_tokens_event(&self, #[indexed] token_id: TokenIdentifier, #[indexed] amount: BigUint); #[event("unwrap_tokens")] - fn unwrap_tokens_event(&self, #[indexed] token_id: TokenIdentifier, #[indexed] amount: BigUint); + fn unwrap_tokens_event(&self, #[indexed] token_id: &TokenIdentifier, #[indexed] amount: BigUint); } diff --git a/bridged-tokens-wrapper/src/lib.rs b/bridged-tokens-wrapper/src/lib.rs index 4776bcf1..e384bff4 100644 --- a/bridged-tokens-wrapper/src/lib.rs +++ b/bridged-tokens-wrapper/src/lib.rs @@ -2,12 +2,14 @@ mod dfp_big_uint; mod events; +mod esdt_safe_proxy; use core::ops::Deref; pub use dfp_big_uint::DFPBigUint; use transaction::PaymentsVec; use multiversx_sc::imports::*; +use eth_address::*; impl DFPBigUint {} @@ -194,6 +196,14 @@ pub trait BridgedTokensWrapper: #[payable("*")] #[endpoint(unwrapToken)] fn unwrap_token(&self, requested_token: TokenIdentifier) { + let converted_amount = self.unwrap_token_common(&requested_token); + self.tx() + .to(ToCaller) + .single_esdt(&requested_token, 0, &converted_amount) + .transfer(); + } + + fn unwrap_token_common(&self, requested_token: &TokenIdentifier) -> BigUint { require!(self.not_paused(), "Contract is paused"); let (payment_token, payment_amount) = self.call_value().single_fungible_esdt(); require!(payment_amount > 0u32, "Must pay more than 0 tokens!"); @@ -226,12 +236,20 @@ pub trait BridgedTokensWrapper: self.send() .esdt_local_burn(&universal_bridged_token_ids, 0, &payment_amount); + self.unwrap_tokens_event(chain_specific_token_id, converted_amount.clone()); + converted_amount + } + + #[payable("*")] + #[endpoint(unwrapTokenCreateTransaction)] + fn unwrap_token_create_transaction(&self, requested_token: TokenIdentifier, to: EthAddress) { + let converted_amount = self.unwrap_token_common(&requested_token); self.tx() .to(ToCaller) - .single_esdt(chain_specific_token_id, 0, &converted_amount) - .transfer(); - - self.unwrap_tokens_event(chain_specific_token_id.clone(), converted_amount); + .typed(esdt_safe_proxy::EsdtSafeProxy) + .create_transaction(to) + .single_esdt(&requested_token, 0, &converted_amount) + .sync_call(); } fn get_converted_amount( diff --git a/bridged-tokens-wrapper/wasm/Cargo.lock b/bridged-tokens-wrapper/wasm/Cargo.lock index b2be7478..d0dc546c 100644 --- a/bridged-tokens-wrapper/wasm/Cargo.lock +++ b/bridged-tokens-wrapper/wasm/Cargo.lock @@ -24,9 +24,12 @@ checksum = "b048fb63fd8b5923fc5aa7b340d8e156aec7ec02f0c78fa8a6ddc2613f6f71de" name = "bridged-tokens-wrapper" version = "0.0.0" dependencies = [ + "eth-address", "multiversx-sc", "multiversx-sc-modules", + "token-module", "transaction", + "tx-batch-module", ] [[package]] @@ -50,6 +53,13 @@ dependencies = [ "multiversx-sc", ] +[[package]] +name = "fee-estimator-module" +version = "0.0.0" +dependencies = [ + "multiversx-sc", +] + [[package]] name = "hex" version = "0.4.3" @@ -193,6 +203,14 @@ dependencies = [ "unicode-ident", ] +[[package]] +name = "token-module" +version = "0.0.0" +dependencies = [ + "fee-estimator-module", + "multiversx-sc", +] + [[package]] name = "transaction" version = "0.0.0" @@ -201,6 +219,14 @@ dependencies = [ "multiversx-sc", ] +[[package]] +name = "tx-batch-module" +version = "0.0.0" +dependencies = [ + "multiversx-sc", + "transaction", +] + [[package]] name = "unicode-ident" version = "1.0.12" diff --git a/bridged-tokens-wrapper/wasm/src/lib.rs b/bridged-tokens-wrapper/wasm/src/lib.rs index ce3674c9..cdad1731 100644 --- a/bridged-tokens-wrapper/wasm/src/lib.rs +++ b/bridged-tokens-wrapper/wasm/src/lib.rs @@ -6,9 +6,9 @@ // Init: 1 // Upgrade: 1 -// Endpoints: 16 +// Endpoints: 17 // Async Callback (empty): 1 -// Total number of exported functions: 19 +// Total number of exported functions: 20 #![no_std] @@ -29,6 +29,7 @@ multiversx_sc_wasm_adapter::endpoints! { depositLiquidity => deposit_liquidity wrapTokens => wrap_tokens unwrapToken => unwrap_token + unwrapTokenCreateTransaction => unwrap_token_create_transaction getUniversalBridgedTokenIds => universal_bridged_token_ids getTokenLiquidity => token_liquidity getChainSpecificToUniversalMapping => chain_specific_to_universal_mapping diff --git a/multi-transfer-esdt/src/bridged_tokens_wrapper_proxy.rs b/multi-transfer-esdt/src/bridged_tokens_wrapper_proxy.rs index 4a0d3601..fbfdbaaa 100644 --- a/multi-transfer-esdt/src/bridged_tokens_wrapper_proxy.rs +++ b/multi-transfer-esdt/src/bridged_tokens_wrapper_proxy.rs @@ -203,6 +203,21 @@ where .original_result() } + pub fn unwrap_token_create_transaction< + Arg0: ProxyArg>, + Arg1: ProxyArg>, + >( + self, + requested_token: Arg0, + to: Arg1, + ) -> TxTypedCall { + self.wrapped_tx + .raw_call("unwrapTokenCreateTransaction") + .argument(&requested_token) + .argument(&to) + .original_result() + } + pub fn universal_bridged_token_ids( self, ) -> TxTypedCall>> { diff --git a/multi-transfer-esdt/wasm/Cargo.lock b/multi-transfer-esdt/wasm/Cargo.lock index b5f727a4..022fdfb5 100644 --- a/multi-transfer-esdt/wasm/Cargo.lock +++ b/multi-transfer-esdt/wasm/Cargo.lock @@ -46,9 +46,12 @@ dependencies = [ name = "bridged-tokens-wrapper" version = "0.0.0" dependencies = [ + "eth-address", "multiversx-sc", "multiversx-sc-modules", + "token-module", "transaction", + "tx-batch-module", ] [[package]] diff --git a/multisig/wasm/Cargo.lock b/multisig/wasm/Cargo.lock index 37122e69..2dd43961 100644 --- a/multisig/wasm/Cargo.lock +++ b/multisig/wasm/Cargo.lock @@ -46,9 +46,12 @@ dependencies = [ name = "bridged-tokens-wrapper" version = "0.0.0" dependencies = [ + "eth-address", "multiversx-sc", "multiversx-sc-modules", + "token-module", "transaction", + "tx-batch-module", ] [[package]]