diff --git a/Cargo.lock b/Cargo.lock index 052f4af1..885f34fe 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1,6 +1,6 @@ # This file is automatically @generated by Cargo. # It is not intended for manual editing. -version = 3 +version = 4 [[package]] name = "anstream" @@ -463,6 +463,25 @@ version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" +[[package]] +name = "helper-contract" +version = "0.0.0" +dependencies = [ + "multiversx-sc", + "multiversx-sc-scenario", + "num-bigint", + "sc-proxies", + "transaction", +] + +[[package]] +name = "helper-contract-meta" +version = "0.0.0" +dependencies = [ + "helper-contract", + "multiversx-sc-meta-lib", +] + [[package]] name = "hex" version = "0.4.3" diff --git a/Cargo.toml b/Cargo.toml index 6b964fcc..039c4320 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -12,6 +12,8 @@ members = [ "bridged-tokens-wrapper/meta", "test-caller", "test-caller/meta", + "helper-contract", + "helper-contract/meta", "common/storage-module", "common/mock-contracts/mock-price-aggregator/meta", "common/mock-contracts/mock-multi-transfer-esdt/meta", diff --git a/helper-contract/.gitignore b/helper-contract/.gitignore new file mode 100644 index 00000000..587b4c51 --- /dev/null +++ b/helper-contract/.gitignore @@ -0,0 +1,6 @@ +/target/ +*/target/ + +/output*/ + +.DS_Store \ No newline at end of file diff --git a/helper-contract/Cargo.toml b/helper-contract/Cargo.toml new file mode 100644 index 00000000..f08d9021 --- /dev/null +++ b/helper-contract/Cargo.toml @@ -0,0 +1,24 @@ +[package] +name = "helper-contract" +version = "0.0.0" +publish = false +edition = "2021" +authors = ["you"] + +[lib] +path = "src/helper_contract.rs" + +[dependencies.multiversx-sc] +version = "0.55.0" + +[dependencies.transaction] +path = "../common/transaction" + +[dependencies.sc-proxies] +path = "../common/sc-proxies" + +[dev-dependencies] +num-bigint = "0.4" + +[dev-dependencies.multiversx-sc-scenario] +version = "0.55.0" diff --git a/helper-contract/meta/Cargo.toml b/helper-contract/meta/Cargo.toml new file mode 100644 index 00000000..5c0a27c2 --- /dev/null +++ b/helper-contract/meta/Cargo.toml @@ -0,0 +1,12 @@ +[package] +name = "helper-contract-meta" +version = "0.0.0" +edition = "2021" +publish = false + +[dependencies.helper-contract] +path = ".." + +[dependencies.multiversx-sc-meta-lib] +version = "0.55.0" +default-features = false diff --git a/helper-contract/meta/src/main.rs b/helper-contract/meta/src/main.rs new file mode 100644 index 00000000..f0d90d64 --- /dev/null +++ b/helper-contract/meta/src/main.rs @@ -0,0 +1,3 @@ +fn main() { + multiversx_sc_meta_lib::cli_main::(); +} diff --git a/helper-contract/multiversx.json b/helper-contract/multiversx.json new file mode 100644 index 00000000..73655396 --- /dev/null +++ b/helper-contract/multiversx.json @@ -0,0 +1,3 @@ +{ + "language": "rust" +} \ No newline at end of file diff --git a/helper-contract/src/helper_contract.rs b/helper-contract/src/helper_contract.rs new file mode 100644 index 00000000..0369f785 --- /dev/null +++ b/helper-contract/src/helper_contract.rs @@ -0,0 +1,51 @@ +#![no_std] + +#[allow(unused_imports)] +use multiversx_sc::imports::*; + +use transaction::{EthTransaction, EthTxAsMultiValue}; +use sc_proxies::bridge_proxy_contract_proxy; + +#[multiversx_sc::contract] +pub trait HelperContract { + #[init] + fn init(&self) {} + + #[upgrade] + fn upgrade(&self) {} + + #[endpoint(setBridgeProxyAddress)] + fn set_bridge_proxy_address(&self, address: ManagedAddress) { + self.bridge_proxy_address().set(&address); + } + + #[endpoint(callDeposit)] + #[payable("*")] + fn call_deposit(&self, batch_id: u64, eth_tx_multivalue: EthTxAsMultiValue) { + let callee = self.bridge_proxy_address().get(); + + let (payment_token, payment_amount) = self.call_value().single_fungible_esdt(); + + let (from, to, token_id, amount, tx_nonce, call_data) = eth_tx_multivalue.into_tuple(); + + let eth_tx = EthTransaction { + from, + to, + token_id, + amount, + tx_nonce, + call_data, + }; + + self.tx() + .to(callee) + .typed(bridge_proxy_contract_proxy::BridgeProxyContractProxy) + .deposit(eth_tx, batch_id) + .single_esdt(&payment_token, 0, &payment_amount) + .sync_call(); + } + + #[view(getBridgeProxyAddress)] + #[storage_mapper("bridgeProxyAddress")] + fn bridge_proxy_address(&self) -> SingleValueMapper; +} diff --git a/helper-contract/wasm/Cargo.lock b/helper-contract/wasm/Cargo.lock new file mode 100644 index 00000000..54b3cd42 --- /dev/null +++ b/helper-contract/wasm/Cargo.lock @@ -0,0 +1,259 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 4 + +[[package]] +name = "arrayvec" +version = "0.7.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7c02d123df017efcdfbd739ef81735b36c5ba83ec3c59c80a9d7ecc718f92e50" + +[[package]] +name = "autocfg" +version = "1.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ace50bade8e6234aa140d9a2f552bbee1db4d353f69b8217bc503490fc1a9f26" + +[[package]] +name = "bitflags" +version = "2.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b048fb63fd8b5923fc5aa7b340d8e156aec7ec02f0c78fa8a6ddc2613f6f71de" + +[[package]] +name = "endian-type" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c34f04666d835ff5d62e058c3995147c06f42fe86ff053337632bca83e42702d" + +[[package]] +name = "eth-address" +version = "0.0.0" +dependencies = [ + "multiversx-sc", +] + +[[package]] +name = "fee-estimator-module" +version = "0.0.0" +dependencies = [ + "multiversx-sc", + "storage-module", +] + +[[package]] +name = "helper-contract" +version = "0.0.0" +dependencies = [ + "multiversx-sc", + "sc-proxies", + "transaction", +] + +[[package]] +name = "helper-contract-wasm" +version = "0.0.0" +dependencies = [ + "helper-contract", + "multiversx-sc-wasm-adapter", +] + +[[package]] +name = "hex" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" + +[[package]] +name = "hex-literal" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6fe2267d4ed49bc07b63801559be28c718ea06c4738b7a03c94df7386d2cde46" + +[[package]] +name = "multiversx-chain-core" +version = "0.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "deeae1474599e5f1145942db88df8397116fba3e0a4480111e77b2d0907d7329" +dependencies = [ + "bitflags", + "multiversx-sc-codec", +] + +[[package]] +name = "multiversx-sc" +version = "0.55.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "960795ffd67b78b976735f679112d17dfda278504fae4f2d468ff62046658463" +dependencies = [ + "bitflags", + "hex-literal", + "multiversx-chain-core", + "multiversx-sc-codec", + "multiversx-sc-derive", + "num-traits", + "unwrap-infallible", +] + +[[package]] +name = "multiversx-sc-codec" +version = "0.21.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f0df6c337692e14e5b9ea2448216cc5a75d3e891ebfe327eccaaee31dfd119e3" +dependencies = [ + "arrayvec", + "multiversx-sc-codec-derive", + "unwrap-infallible", +] + +[[package]] +name = "multiversx-sc-codec-derive" +version = "0.21.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2571c0afb65e504fe80a431f3b6a288c50dd3e7cd38d6cef18f8b47e5c8e8796" +dependencies = [ + "hex", + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "multiversx-sc-derive" +version = "0.55.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bb090fe537f483ac26e4a7f125f2ed4c18ab8a9315dfc80d0d74655604bd4132" +dependencies = [ + "hex", + "proc-macro2", + "quote", + "radix_trie", + "syn", +] + +[[package]] +name = "multiversx-sc-wasm-adapter" +version = "0.55.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b449886977bc57b4f410a14642ca1d09b4909b53ad66185b0d6131d84e3608ab" +dependencies = [ + "multiversx-sc", +] + +[[package]] +name = "nibble_vec" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77a5d83df9f36fe23f0c3648c6bbb8b0298bb5f1939c8f2704431371f4b84d43" +dependencies = [ + "smallvec", +] + +[[package]] +name = "num-traits" +version = "0.2.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" +dependencies = [ + "autocfg", +] + +[[package]] +name = "proc-macro2" +version = "1.0.92" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "37d3544b3f2748c54e147655edb5025752e2303145b5aefb3c3ea2c78b973bb0" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "quote" +version = "1.0.38" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0e4dccaaaf89514f546c693ddc140f729f958c247918a13380cccc6078391acc" +dependencies = [ + "proc-macro2", +] + +[[package]] +name = "radix_trie" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c069c179fcdc6a2fe24d8d18305cf085fdbd4f922c041943e203685d6a1c58fd" +dependencies = [ + "endian-type", + "nibble_vec", +] + +[[package]] +name = "sc-proxies" +version = "0.0.0" +dependencies = [ + "eth-address", + "multiversx-sc", + "token-module", + "transaction", + "tx-batch-module", +] + +[[package]] +name = "smallvec" +version = "1.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c5e1a9a646d36c3599cd173a41282daf47c44583ad367b8e6837255952e5c67" + +[[package]] +name = "storage-module" +version = "0.1.0" +dependencies = [ + "multiversx-sc", +] + +[[package]] +name = "syn" +version = "2.0.95" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "46f71c0377baf4ef1cc3e3402ded576dccc315800fbc62dfc7fe04b009773b4a" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "token-module" +version = "0.0.0" +dependencies = [ + "fee-estimator-module", + "multiversx-sc", + "storage-module", +] + +[[package]] +name = "transaction" +version = "0.0.0" +dependencies = [ + "eth-address", + "multiversx-sc", +] + +[[package]] +name = "tx-batch-module" +version = "0.0.0" +dependencies = [ + "multiversx-sc", + "transaction", +] + +[[package]] +name = "unicode-ident" +version = "1.0.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "adb9e6ca4f869e1180728b7950e35922a7fc6397f7b641499e8f3ef06e50dc83" + +[[package]] +name = "unwrap-infallible" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "151ac09978d3c2862c4e39b557f4eceee2cc72150bc4cb4f16abf061b6e381fb" diff --git a/helper-contract/wasm/Cargo.toml b/helper-contract/wasm/Cargo.toml new file mode 100644 index 00000000..e88008d9 --- /dev/null +++ b/helper-contract/wasm/Cargo.toml @@ -0,0 +1,34 @@ +# Code generated by the multiversx-sc build system. DO NOT EDIT. + +# ########################################## +# ############## AUTO-GENERATED ############# +# ########################################## + +[package] +name = "helper-contract-wasm" +version = "0.0.0" +edition = "2021" +publish = false + +[lib] +crate-type = ["cdylib"] + +[profile.release] +codegen-units = 1 +opt-level = "z" +lto = true +debug = false +panic = "abort" +overflow-checks = false + +[profile.dev] +panic = "abort" + +[dependencies.helper-contract] +path = ".." + +[dependencies.multiversx-sc-wasm-adapter] +version = "0.55.0" + +[workspace] +members = ["."] diff --git a/helper-contract/wasm/src/lib.rs b/helper-contract/wasm/src/lib.rs new file mode 100644 index 00000000..50b2c8de --- /dev/null +++ b/helper-contract/wasm/src/lib.rs @@ -0,0 +1,29 @@ +// Code generated by the multiversx-sc build system. DO NOT EDIT. + +//////////////////////////////////////////////////// +////////////////// AUTO-GENERATED ////////////////// +//////////////////////////////////////////////////// + +// Init: 1 +// Upgrade: 1 +// Endpoints: 3 +// Async Callback (empty): 1 +// Total number of exported functions: 6 + +#![no_std] + +multiversx_sc_wasm_adapter::allocator!(); +multiversx_sc_wasm_adapter::panic_handler!(); + +multiversx_sc_wasm_adapter::endpoints! { + helper_contract + ( + init => init + upgrade => upgrade + setBridgeProxyAddress => set_bridge_proxy_address + callDeposit => call_deposit + getBridgeProxyAddress => bridge_proxy_address + ) +} + +multiversx_sc_wasm_adapter::async_callback_empty! {}