diff --git a/contracts/core/wegld-swap/interaction/snippets.sh b/contracts/core/wegld-swap/interaction/snippets.sh index 84de70889c..0924be5139 100644 --- a/contracts/core/wegld-swap/interaction/snippets.sh +++ b/contracts/core/wegld-swap/interaction/snippets.sh @@ -2,7 +2,7 @@ ALICE="~/multiversx-sdk/testwallets/latest/users/alice.pem" BOB="~/multiversx-sdk/testwallets/latest/users/bob.pem" ADDRESS=$(mxpy data load --key=address-testnet-egld-esdt-swap) DEPLOY_TRANSACTION=$(mxpy data load --key=deployTransaction-testnet) -PROXY=https://testnet-gateway.elrond.com +PROXY=https://testnet-gateway.multiversx.com CHAIN_ID=T ESDT_SYSTEM_SC_ADDRESS=erd1qqqqqqqqqqqqqqqpqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqzllls8a5w6u diff --git a/contracts/core/wegld-swap/testnet.toml b/contracts/core/wegld-swap/testnet.toml deleted file mode 100644 index 3020c585d6..0000000000 --- a/contracts/core/wegld-swap/testnet.toml +++ /dev/null @@ -1,2 +0,0 @@ -[folders] -elrond_go = "/home/elrond/elrond-go" \ No newline at end of file diff --git a/contracts/examples/adder/README.md b/contracts/examples/adder/README.md index 821c76536a..4538caeca9 100644 --- a/contracts/examples/adder/README.md +++ b/contracts/examples/adder/README.md @@ -1,29 +1,3 @@ -# Interaction +# Adder -## On devnet - -Deploy & interact with contract: - -``` -python3 ./interaction/playground.py --pem=./testnet/wallets/users/alice.pem --proxy=http://localhost:7950 -``` - -Interact with existing contract: - -``` -python3 ./interaction/playground.py --pem=./testnet/wallets/users/alice.pem --proxy=http://localhost:7950 --contract=erd1... -``` - -## On testnet - -Deploy & interact with contract: - -``` -python3 ./interaction/playground.py --pem=my.pem --proxy=https://testnet-gateway.elrond.com -``` - -Interact with existing contract: - -``` -python3 ./interaction/playground.py --pem=my.pem --proxy=https://testnet-gateway.elrond.com --contract=erd1... -``` +`Adder` is a simple Smart Contract. diff --git a/contracts/examples/adder/interaction/Adder.erdjs.md b/contracts/examples/adder/interaction/Adder.erdjs.md deleted file mode 100644 index 8df942b3b0..0000000000 --- a/contracts/examples/adder/interaction/Adder.erdjs.md +++ /dev/null @@ -1,22 +0,0 @@ -# Adder - -First [set up a node terminal](../../../../tutorial/src/interaction/interaction-basic.md). - -```javascript -let erdjs = await require('@elrondnetwork/erdjs'); -let { erdSys, wallets: { alice } } = await erdjs.setupInteractive("local-testnet"); - -let adder = await erdSys.loadWrapper("contracts/examples/adder"); - -// Deploy the adder contract with an initial value of 42 -await adder.sender(alice).gas(20_000_000).call.deploy(42); - -// Check that the sum is 42 -await adder.query.getSum().then((sum) => sum.toString()); - -await adder.gas(3_000_000).call.add(30); - -// Check that the sum is 72 -await adder.query.getSum().then((sum) => sum.toString()); - -``` diff --git a/contracts/examples/adder/interaction/testnet.snippets.sh b/contracts/examples/adder/interaction/testnet.snippets.sh index 6bb5d71a08..06bb13e3ba 100644 --- a/contracts/examples/adder/interaction/testnet.snippets.sh +++ b/contracts/examples/adder/interaction/testnet.snippets.sh @@ -1,7 +1,7 @@ ALICE="${USERS}/alice.pem" ADDRESS=$(mxpy data load --key=address-testnet) DEPLOY_TRANSACTION=$(mxpy data load --key=deployTransaction-testnet) -PROXY=https://testnet-api.elrond.com +PROXY=https://testnet-api.multiversx.com deploy() { mxpy --verbose contract deploy --project=${PROJECT} --recall-nonce --pem=${ALICE} --gas-limit=50000000 --arguments 0 --send --outfile="deploy-testnet.interaction.json" --proxy=${PROXY} --chain=T || return diff --git a/contracts/examples/adder/testnet.toml b/contracts/examples/adder/testnet.toml deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/contracts/examples/crowdfunding-esdt/interaction/Crowdfunding-egld.erdjs.md b/contracts/examples/crowdfunding-esdt/interaction/Crowdfunding-egld.erdjs.md deleted file mode 100644 index 2047217a89..0000000000 --- a/contracts/examples/crowdfunding-esdt/interaction/Crowdfunding-egld.erdjs.md +++ /dev/null @@ -1,50 +0,0 @@ -# Crowdfunding ESDT - Using EGLD - -First [set up a node terminal](../../../../tutorial/src/interaction/interaction-basic.md). - -```javascript -let erdjs = await require('@elrondnetwork/erdjs'); -let { erdSys, Egld, wallets: { alice, bob, carol }} = await erdjs.setupInteractive("local-testnet"); - -let crowdfunding = await erdSys.loadWrapper("contracts/examples/crowdfunding-esdt"); - -// Set the deadline to 1 minute from now (adjust this if you want more time before claiming the rewards) -let someTimeFromNow = await erdSys.currentNonce() + erdjs.minutesToNonce(1); - -// Deploy the crowdfunding contract with a target of 2 EGLD -await crowdfunding.sender(alice).gas(50_000_000).call.deploy(Egld(2), someTimeFromNow, Egld); - -// Bob and carol contribute 1.5 EGLD each -await crowdfunding.sender(bob).gas(10_000_000).value(Egld(1.5)).call.fund(); -await crowdfunding.sender(carol).value(Egld(1.5)).call.fund(); - -// Get the current funds. Note the usage of Egld.raw (since the balance comes as an integer from the smart contract) -let currentFunds = Egld.raw(await crowdfunding.query.currentFunds()); - -// Should print 3 EGLD (since bob and carol added 1.5 EGLD each) -erdjs.print(currentFunds); - -// Confirming the target is 2 EGLD -erdjs.print(Egld.raw(await crowdfunding.query.get_target())); - -// Check that alice is the owner -alice.address.equals(await crowdfunding.query.get_owner()); - -// Store alice's current balance (we'll use this to check the balance difference later on) -let aliceBalanceBefore = await erdSys.getBalance(alice, Egld); -erdjs.print(aliceBalanceBefore); - -// Wait a minute first, otherwise you'll get the "cannot claim before deadline" error -// If the claim doesn't return an error - there are two possibilities: -// - the funding failed, and 1.5 EGLD are sent back to both bob and carol -// - it was succesful and alice receives 3 EGLD -// Because the target sum specified on deployment was 2 EGLD, and we have 3 EGLD, the funding should be succesful -await crowdfunding.sender(alice).call.claim(); - -// Let's check if alice received the funds -let aliceBalanceAfter = await erdSys.getBalance(alice, Egld); -erdjs.print(aliceBalanceAfter); - -// If the previous claim was successful, this prints 2.99 EGLD (because of the gas costs) -erdjs.print(aliceBalanceAfter.minus(aliceBalanceBefore)); -``` diff --git a/contracts/examples/crowdfunding-esdt/interaction/Crowdfunding-esdt.erdjs.md b/contracts/examples/crowdfunding-esdt/interaction/Crowdfunding-esdt.erdjs.md deleted file mode 100644 index e590edd953..0000000000 --- a/contracts/examples/crowdfunding-esdt/interaction/Crowdfunding-esdt.erdjs.md +++ /dev/null @@ -1,58 +0,0 @@ -# Crowdfunding ESDT - Using ESDT (Fungible token) - -First [set up a node terminal](../../../../tutorial/src/interaction/interaction-basic.md). - -```javascript -let erdjs = await require('@elrondnetwork/erdjs'); -let { erdSys, wallets: { alice, bob, carol } } = await erdjs.setupInteractive("local-testnet"); - -let crowdfunding = await erdSys.loadWrapper("contracts/examples/crowdfunding-esdt"); - -// Issue a new fungible token -let MyToken = await erdSys.sender(alice).issueFungible("MyFungibleToken", "MYTOKEN", 1_000_00, 2); - -// Note: wait a few seconds, otherwise the first send fails -// Send some tokens to bob and carol (so that they can call fund later on) -await erdSys.sender(alice).value(MyToken(200.0)).send(bob); -await erdSys.sender(alice).value(MyToken(200.0)).send(carol); - -// Set the deadline to 1 minute from now (adjust this if you want more time before claiming the rewards) -let someTimeFromNow = await erdSys.currentNonce() + erdjs.minutesToNonce(1); - -// Deploy the crowdfunding contract -await crowdfunding.sender(alice).gas(50_000_000).call.deploy(MyToken(2), someTimeFromNow, MyToken); - -// Bob and carol contribute 1.5 MYTOKEN each -await crowdfunding.sender(bob).gas(10_000_000).value(MyToken(1.5)).call.fund(); -await crowdfunding.sender(carol).value(MyToken(1.5)).call.fund(); - -// Get the current funds. Note the usage of MyToken.raw (since the balance comes as an integer from the smart contract) -let currentFunds = MyToken.raw(await crowdfunding.query.currentFunds()); - -// Should print 3 MYTOKEN (since bob and carol added 1.5 MYTOKEN each) -erdjs.print(currentFunds); - -// Confirming the target is 2 MYTOKEN -erdjs.print(MyToken.raw(await crowdfunding.query.get_target())); - -// Check that alice is the owner -alice.address.equals(await crowdfunding.query.get_owner()); - -// Store alice's current balance (we'll use this to check the balance difference later on) -let aliceBalanceBefore = await erdSys.getBalance(alice, MyToken); -erdjs.print(aliceBalanceBefore); - -// Wait a minute first, otherwise you'll get the "cannot claim before deadline" error -// If the claim doesn't return an error - there are two possibilities: -// - the funding failed, and 1.5 MYTOKEN are sent back to both bob and carol -// - it was succesful and alice receives 3 MYTOKEN -// Because the target sum specified on deployment was 2 MYTOKEN, and we have 3 MYTOKEN, the funding should be succesful -await crowdfunding.sender(alice).call.claim(); - -// Let's check if alice received the funds -let aliceBalanceAfter = await erdSys.getBalance(alice, MyToken); -erdjs.print(aliceBalanceAfter); - -// If the previous claim was successful, this prints 3 MYTOKEN -erdjs.print(aliceBalanceAfter.minus(aliceBalanceBefore)); -``` diff --git a/contracts/examples/crowdfunding-esdt/interaction/testnet.snippets.sh b/contracts/examples/crowdfunding-esdt/interaction/testnet.snippets.sh index ae904001b1..2598e024cd 100644 --- a/contracts/examples/crowdfunding-esdt/interaction/testnet.snippets.sh +++ b/contracts/examples/crowdfunding-esdt/interaction/testnet.snippets.sh @@ -3,7 +3,7 @@ BOB="${USERS}/bob.pem" ADDRESS=$(mxpy data load --key=address-testnet) DEPLOY_TRANSACTION=$(mxpy data load --key=deployTransaction-testnet) -PROXY=https://testnet-api.elrond.com +PROXY=https://testnet-api.multiversx.com DEPLOY_GAS="80000000" TARGET=10 diff --git a/contracts/examples/crowdfunding-esdt/testnet.toml b/contracts/examples/crowdfunding-esdt/testnet.toml deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/contracts/examples/crypto-bubbles/testnet.toml b/contracts/examples/crypto-bubbles/testnet.toml deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/contracts/examples/crypto-kitties/kitty-auction/testnet.toml b/contracts/examples/crypto-kitties/kitty-auction/testnet.toml deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/contracts/examples/crypto-kitties/kitty-genetic-alg/testnet.toml b/contracts/examples/crypto-kitties/kitty-genetic-alg/testnet.toml deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/contracts/examples/crypto-kitties/kitty-ownership/testnet.toml b/contracts/examples/crypto-kitties/kitty-ownership/testnet.toml deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/contracts/examples/crypto-zombies/testnet.toml b/contracts/examples/crypto-zombies/testnet.toml deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/contracts/examples/digital-cash/scenarios/claim-egld.scen.json b/contracts/examples/digital-cash/scenarios/claim-egld.scen.json index 8945970816..085287a127 100644 --- a/contracts/examples/digital-cash/scenarios/claim-egld.scen.json +++ b/contracts/examples/digital-cash/scenarios/claim-egld.scen.json @@ -153,7 +153,7 @@ } }, "str:fee": "10", - "str:collected_fees": "10" + "str:collectedFees": "10" }, "code": "file:../output/digital-cash.wasm" }, @@ -163,7 +163,7 @@ "storage": {} }, "address:acc2": { - "nonce": "6", + "nonce": "7", "balance": "1,000,000", "esdt": { "str:CASHTOKEN-123456": "50" diff --git a/contracts/examples/digital-cash/scenarios/claim-esdt.scen.json b/contracts/examples/digital-cash/scenarios/claim-esdt.scen.json index 7ced2430e0..d3010b1ed1 100644 --- a/contracts/examples/digital-cash/scenarios/claim-esdt.scen.json +++ b/contracts/examples/digital-cash/scenarios/claim-esdt.scen.json @@ -152,7 +152,7 @@ } }, "str:fee": "10", - "str:collected_fees": "10" + "str:collectedFees": "10" }, "code": "file:../output/digital-cash.wasm" }, @@ -165,7 +165,7 @@ "storage": {} }, "address:acc2": { - "nonce": "2", + "nonce": "3", "balance": "999,990", "esdt": { "str:CASHTOKEN-123456": "50" diff --git a/contracts/examples/digital-cash/scenarios/claim-fees.scen.json b/contracts/examples/digital-cash/scenarios/claim-fees.scen.json index 6256577609..0b9c11b9d5 100644 --- a/contracts/examples/digital-cash/scenarios/claim-fees.scen.json +++ b/contracts/examples/digital-cash/scenarios/claim-fees.scen.json @@ -11,7 +11,7 @@ "tx": { "from": "address:acc2", "to": "sc:the_digital_cash_contract", - "function": "claim_fees", + "function": "claimFees", "gasLimit": "500,000,000", "gasPrice": "0" }, @@ -40,7 +40,7 @@ "tx": { "from": "address:digital_cash_owner_address", "to": "sc:the_digital_cash_contract", - "function": "claim_fees", + "function": "claimFees", "gasLimit": "500,000,000", "gasPrice": "0" }, @@ -97,7 +97,7 @@ "storage": {} }, "address:acc2": { - "nonce": "7", + "nonce": "8", "balance": "1,000,000", "esdt": { "str:CASHTOKEN-123456": "50" diff --git a/contracts/examples/digital-cash/scenarios/claim-multi-esdt.scen.json b/contracts/examples/digital-cash/scenarios/claim-multi-esdt.scen.json index d2701252eb..85df0810de 100644 --- a/contracts/examples/digital-cash/scenarios/claim-multi-esdt.scen.json +++ b/contracts/examples/digital-cash/scenarios/claim-multi-esdt.scen.json @@ -150,7 +150,7 @@ } }, "str:fee": "10", - "str:collected_fees": "30" + "str:collectedFees": "30" }, "code": "file:../output/digital-cash.wasm" }, @@ -160,7 +160,7 @@ "storage": {} }, "address:acc2": { - "nonce": "6", + "nonce": "7", "balance": "999,000", "esdt": { "str:CASHTOKEN-123456": "50", diff --git a/contracts/examples/digital-cash/scenarios/forward.scen.json b/contracts/examples/digital-cash/scenarios/forward.scen.json index faed1b6a0d..ad9f41413d 100644 --- a/contracts/examples/digital-cash/scenarios/forward.scen.json +++ b/contracts/examples/digital-cash/scenarios/forward.scen.json @@ -36,7 +36,7 @@ "from": "address:acc2", "to": "sc:the_digital_cash_contract", "egldValue": "1,000", - "function": "deposit_fees", + "function": "depositFees", "arguments": [ "0xa40e72cdac3580e7203a4c2565c932f7691c35e624bcfd82718d7f559c88f440" ], @@ -82,7 +82,7 @@ "from": "address:acc2", "to": "sc:the_digital_cash_contract", "egldValue": "1,000", - "function": "deposit_fees", + "function": "depositFees", "arguments": [ "0x8dc17613990e9b7476401a36d112d1a4d31190dec21e7e9a3c933872a27613ee" ], @@ -168,7 +168,7 @@ } }, "str:fee": "10", - "str:collected_fees": "40" + "str:collectedFees": "40" }, "code": "file:../output/digital-cash.wasm" }, @@ -178,7 +178,7 @@ "storage": {} }, "address:acc2": { - "nonce": "7", + "nonce": "8", "balance": "997,000", "esdt": { "str:CASHTOKEN-123456": "50" diff --git a/contracts/examples/digital-cash/scenarios/fund-egld-and-esdt.scen.json b/contracts/examples/digital-cash/scenarios/fund-egld-and-esdt.scen.json index 77f90d130d..7263a472e0 100644 --- a/contracts/examples/digital-cash/scenarios/fund-egld-and-esdt.scen.json +++ b/contracts/examples/digital-cash/scenarios/fund-egld-and-esdt.scen.json @@ -36,7 +36,7 @@ "from": "address:acc1", "to": "sc:the_digital_cash_contract", "egldValue": "1,000", - "function": "deposit_fees", + "function": "depositFees", "arguments": [ "0xdb474a3a065d3f0c0a62ae680ef6435e48eb482899d2ae30ff7a3a4b0ef19c60" ], @@ -135,7 +135,7 @@ "from": "address:acc2", "to": "sc:the_digital_cash_contract", "egldValue": "1,000", - "function": "deposit_fees", + "function": "depositFees", "arguments": [ "0x487bd4010b50c24a02018345fe5171edf4182e6294325382c75ef4c4409f01bd" ], @@ -248,6 +248,34 @@ { "step": "scCall", "id": "fund-fail-2", + "tx": { + "from": "address:acc2", + "to": "sc:the_digital_cash_contract", + "esdtValue": [ + { + "tokenIdentifier": "str:CASHTOKEN-123456", + "value": "10" + } + ], + "function": "fund", + "arguments": [ + "0x487bd4010b50c24a02018345fe5171edf4182e6294325382c75ef4c4409f01bd", + "u64:100" + ], + "gasLimit": "100,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [], + "status": "4", + "message": "str:key already used", + "gas": "*", + "refund": "*" + } + }, + { + "step": "scCall", + "id": "fund-fail-3", "tx": { "from": "address:acc3", "to": "sc:the_digital_cash_contract", @@ -276,7 +304,7 @@ "expect": { "out": [], "status": "4", - "message": "str:key already used", + "message": "str:invalid depositor", "gas": "*", "refund": "*" } @@ -288,7 +316,7 @@ "from": "address:acc3", "to": "sc:the_digital_cash_contract", "egldValue": "1,000", - "function": "deposit_fees", + "function": "depositFees", "arguments": [ "0x885532043a061e0c779e4064b85193f72cffd22c5bcc208c209128e60f21bf0d" ], @@ -396,7 +424,7 @@ "storage": {} }, "address:acc2": { - "nonce": "2", + "nonce": "3", "balance": "999,000", "esdt": { "str:CASHTOKEN-123456": "50" diff --git a/contracts/examples/digital-cash/scenarios/withdraw-egld.scen.json b/contracts/examples/digital-cash/scenarios/withdraw-egld.scen.json index 09cc07d0ac..e89119fb44 100644 --- a/contracts/examples/digital-cash/scenarios/withdraw-egld.scen.json +++ b/contracts/examples/digital-cash/scenarios/withdraw-egld.scen.json @@ -83,7 +83,7 @@ "storage": {} }, "address:acc2": { - "nonce": "2", + "nonce": "3", "balance": "999,000", "esdt": { "str:CASHTOKEN-123456": "50" @@ -206,7 +206,7 @@ "storage": {} }, "address:acc2": { - "nonce": "2", + "nonce": "3", "balance": "999,000", "esdt": { "str:CASHTOKEN-123456": "50" diff --git a/contracts/examples/digital-cash/scenarios/withdraw-esdt.scen.json b/contracts/examples/digital-cash/scenarios/withdraw-esdt.scen.json index f6cd263b38..77a8fbe9c0 100644 --- a/contracts/examples/digital-cash/scenarios/withdraw-esdt.scen.json +++ b/contracts/examples/digital-cash/scenarios/withdraw-esdt.scen.json @@ -83,7 +83,7 @@ "storage": {} }, "address:acc2": { - "nonce": "3", + "nonce": "4", "balance": "999,000", "esdt": { "str:CASHTOKEN-123456": "50" @@ -205,7 +205,7 @@ "storage": {} }, "address:acc2": { - "nonce": "5", + "nonce": "6", "balance": "1,000,000", "esdt": { "str:CASHTOKEN-123456": "100" diff --git a/contracts/examples/digital-cash/scenarios/withdraw-multi-esdt.scen.json b/contracts/examples/digital-cash/scenarios/withdraw-multi-esdt.scen.json index f9194207bd..7f1a96e2ea 100644 --- a/contracts/examples/digital-cash/scenarios/withdraw-multi-esdt.scen.json +++ b/contracts/examples/digital-cash/scenarios/withdraw-multi-esdt.scen.json @@ -83,7 +83,7 @@ "storage": {} }, "address:acc2": { - "nonce": "3", + "nonce": "4", "balance": "999,000", "esdt": { "str:CASHTOKEN-123456": "50" @@ -203,7 +203,7 @@ "storage": {} }, "address:acc2": { - "nonce": "5", + "nonce": "6", "balance": "999,000", "esdt": { "str:CASHTOKEN-123456": "50" diff --git a/contracts/examples/digital-cash/src/deposit_info.rs b/contracts/examples/digital-cash/src/deposit_info.rs index db35242441..b156275aa7 100644 --- a/contracts/examples/digital-cash/src/deposit_info.rs +++ b/contracts/examples/digital-cash/src/deposit_info.rs @@ -1,8 +1,4 @@ -use multiversx_sc::{ - api::ManagedTypeApi, - types::{BigUint, EsdtTokenPayment, ManagedAddress, ManagedVec}, -}; - +multiversx_sc::imports!(); multiversx_sc::derive_imports!(); #[derive(NestedEncode, NestedDecode, TopEncode, TopDecode, TypeAbi)] @@ -20,7 +16,12 @@ where M: ManagedTypeApi, { pub fn get_num_tokens(&self) -> usize { - (self.egld_funds != BigUint::zero()) as usize + self.esdt_funds.len() + let mut amount = self.esdt_funds.len(); + if self.egld_funds > 0 { + amount += 1; + } + + amount } } diff --git a/contracts/examples/digital-cash/src/digital_cash.rs b/contracts/examples/digital-cash/src/digital_cash.rs index bfcd65a524..aee3e173d3 100644 --- a/contracts/examples/digital-cash/src/digital_cash.rs +++ b/contracts/examples/digital-cash/src/digital_cash.rs @@ -11,6 +11,11 @@ use deposit_info::{DepositInfo, Fee}; pub const SECONDS_PER_ROUND: u64 = 6; pub use multiversx_sc::api::{ED25519_KEY_BYTE_LEN, ED25519_SIGNATURE_BYTE_LEN}; +static NON_EXISTENT_KEY_ERR_MSG: &[u8] = b"non-existent key"; +static FEES_NOT_COVERED_ERR_MSG: &[u8] = b"fees not covered"; +static CANNOT_DEPOSIT_FUNDS_ERR_MSG: &[u8] = + b"cannot deposit funds without covering the fee cost first"; + #[multiversx_sc::contract] pub trait DigitalCash { #[init] @@ -18,30 +23,33 @@ pub trait DigitalCash { self.fee().set(fee); } - //endpoints + // endpoints #[endpoint] #[payable("*")] fn fund(&self, address: ManagedAddress, valability: u64) { - require!(!self.deposit(&address).is_empty(), "fees not covered"); + let deposit_mapper = self.deposit(&address); + require!(!deposit_mapper.is_empty(), FEES_NOT_COVERED_ERR_MSG); + let depositor = deposit_mapper.get().depositor_address; + require!( + self.blockchain().get_caller() == depositor, + "invalid depositor" + ); - let esdt_payment = self.call_value().all_esdt_transfers().clone_value(); let egld_payment = self.call_value().egld_value().clone_value(); - - let num_tokens = (egld_payment != BigUint::zero()) as usize + esdt_payment.len(); - + let esdt_payment = self.call_value().all_esdt_transfers().clone_value(); + let num_tokens = self.get_num_token_transfers(&egld_payment, &esdt_payment); require!(num_tokens > 0, "amount must be greater than 0"); let fee = self.fee().get(); - - self.deposit(&address).update(|deposit| { + deposit_mapper.update(|deposit| { require!( - deposit.egld_funds == BigUint::zero() && deposit.esdt_funds.is_empty(), + deposit.egld_funds == 0 && deposit.esdt_funds.is_empty(), "key already used" ); require!( fee * num_tokens as u64 <= deposit.fees.value, - "cannot deposit funds without covering the fee cost first" + CANNOT_DEPOSIT_FUNDS_ERR_MSG ); deposit.fees.num_token_to_transfer += num_tokens; @@ -54,19 +62,18 @@ pub trait DigitalCash { #[endpoint] fn withdraw(&self, address: ManagedAddress) { - require!(!self.deposit(&address).is_empty(), "non-existent key"); + let deposit_mapper = self.deposit(&address); + require!(!deposit_mapper.is_empty(), NON_EXISTENT_KEY_ERR_MSG); let block_round = self.blockchain().get_block_round(); - - let deposit = self.deposit(&address).get(); - + let deposit = deposit_mapper.take(); require!( deposit.expiration_round < block_round, "withdrawal has not been available yet" ); let egld_funds = deposit.egld_funds + deposit.fees.value; - if egld_funds != BigUint::zero() { + if egld_funds > 0 { self.send() .direct_egld(&deposit.depositor_address, &egld_funds); } @@ -75,8 +82,6 @@ pub trait DigitalCash { self.send() .direct_multi(&deposit.depositor_address, &deposit.esdt_funds); } - - self.deposit(&address).clear(); } #[endpoint] @@ -85,90 +90,74 @@ pub trait DigitalCash { address: ManagedAddress, signature: ManagedByteArray, ) { - require!(!self.deposit(&address).is_empty(), "non-existent key"); + let deposit_mapper = self.deposit(&address); + require!(!deposit_mapper.is_empty(), NON_EXISTENT_KEY_ERR_MSG); let caller_address = self.blockchain().get_caller(); self.require_signature(&address, &caller_address, signature); let block_round = self.blockchain().get_block_round(); - let fee = self.fee().get(); + let mut deposit = deposit_mapper.take(); + require!(deposit.expiration_round >= block_round, "deposit expired"); - self.deposit(&address).update(|deposit| { - require!(deposit.expiration_round >= block_round, "deposit expired"); - let num_tokens_transfered = &deposit.get_num_tokens(); - let fee_cost = fee * *num_tokens_transfered as u64; - - deposit.fees.num_token_to_transfer -= num_tokens_transfered; - deposit.fees.value -= &fee_cost; - - self.collected_fees() - .update(|collected_fees| *collected_fees += fee_cost); - - if deposit.egld_funds != BigUint::zero() { - self.send() - .direct_egld(&caller_address, &deposit.egld_funds); - } - - if !deposit.esdt_funds.is_empty() { - self.send() - .direct_multi(&caller_address, &deposit.esdt_funds); - } + let num_tokens_transfered = deposit.get_num_tokens(); + let fee_cost = fee * num_tokens_transfered as u64; + deposit.fees.value -= &fee_cost; - if deposit.fees.value > 0 { - self.send() - .direct_egld(&deposit.depositor_address, &deposit.fees.value); - } - }); + self.collected_fees() + .update(|collected_fees| *collected_fees += fee_cost); - self.deposit(&address).clear(); + if deposit.egld_funds > 0 { + self.send() + .direct_egld(&caller_address, &deposit.egld_funds); + } + if !deposit.esdt_funds.is_empty() { + self.send() + .direct_multi(&caller_address, &deposit.esdt_funds); + } + if deposit.fees.value > 0 { + self.send() + .direct_egld(&deposit.depositor_address, &deposit.fees.value); + } } - #[endpoint] + #[endpoint(claimFees)] #[only_owner] fn claim_fees(&self) { - let caller_address = self.blockchain().get_caller(); - let fees = self.collected_fees().get(); + let fees = self.collected_fees().take(); + if fees == 0 { + return; + } + let caller_address = self.blockchain().get_caller(); self.send().direct_egld(&caller_address, &fees); - self.collected_fees().clear(); - } - - fn require_signature( - &self, - address: &ManagedAddress, - caller_address: &ManagedAddress, - signature: ManagedByteArray, - ) { - let addr = address.as_managed_buffer(); - let message = caller_address.as_managed_buffer(); - self.crypto() - .verify_ed25519(addr, message, signature.as_managed_buffer()); } - #[endpoint] + #[endpoint(depositFees)] #[payable("EGLD")] fn deposit_fees(&self, address: ManagedAddress) { let payment = self.call_value().egld_value().clone_value(); let caller_address = self.blockchain().get_caller(); + let deposit_mapper = self.deposit(&address); + if !deposit_mapper.is_empty() { + deposit_mapper.update(|deposit| deposit.fees.value += payment); - if self.deposit(&address).is_empty() { - let new_deposit = DepositInfo { - depositor_address: caller_address, - esdt_funds: ManagedVec::new(), - egld_funds: BigUint::zero(), - valability: 0, - expiration_round: 0, - fees: Fee { - num_token_to_transfer: 0, - value: payment, - }, - }; - self.deposit(&address).set(new_deposit) - } else { - self.deposit(&address) - .update(|deposit| deposit.fees.value += payment); + return; } + + let new_deposit = DepositInfo { + depositor_address: caller_address, + esdt_funds: ManagedVec::new(), + egld_funds: BigUint::zero(), + valability: 0, + expiration_round: 0, + fees: Fee { + num_token_to_transfer: 0, + value: payment, + }, + }; + deposit_mapper.set(new_deposit); } #[endpoint] @@ -178,18 +167,16 @@ pub trait DigitalCash { forward_address: ManagedAddress, signature: ManagedByteArray, ) { - require!( - !self.deposit(&forward_address).is_empty(), - "cannot deposit funds without covering the fee cost first" - ); + let deposit_mapper = self.deposit(&forward_address); + require!(!deposit_mapper.is_empty(), CANNOT_DEPOSIT_FUNDS_ERR_MSG); let caller_address = self.blockchain().get_caller(); let fee = self.fee().get(); self.require_signature(&address, &caller_address, signature); - let mut forwarded_deposit = self.deposit(&address).get(); + let mut forwarded_deposit = self.deposit(&address).take(); let num_tokens = forwarded_deposit.get_num_tokens(); - self.deposit(&forward_address).update(|deposit| { + deposit_mapper.update(|deposit| { require!( deposit.egld_funds == BigUint::zero() && deposit.esdt_funds.is_empty(), "key already used" @@ -207,7 +194,6 @@ pub trait DigitalCash { }); let forward_fee = &fee * num_tokens as u64; - forwarded_deposit.fees.value -= &forward_fee; self.collected_fees() @@ -219,47 +205,67 @@ pub trait DigitalCash { &forwarded_deposit.fees.value, ); } - - self.deposit(&address).clear(); } - //views + // views - #[view(amount)] + #[view(getAmount)] fn get_amount( &self, address: ManagedAddress, token: EgldOrEsdtTokenIdentifier, nonce: u64, ) -> BigUint { - require!(!self.deposit(&address).is_empty(), "non-existent key"); - - let mut amount = BigUint::zero(); + let deposit_mapper = self.deposit(&address); + require!(!deposit_mapper.is_empty(), NON_EXISTENT_KEY_ERR_MSG); - require!(!self.deposit(&address).is_empty(), "non-existent key"); - - let deposit = self.deposit(&address).get(); + let deposit = deposit_mapper.get(); if token.is_egld() { - amount = deposit.egld_funds; - } else { - for esdt in deposit.esdt_funds.into_iter() { - if esdt.token_identifier == token && esdt.token_nonce == nonce { - amount = esdt.amount; - } + return deposit.egld_funds; + } + + for esdt in deposit.esdt_funds.into_iter() { + if esdt.token_identifier == token && esdt.token_nonce == nonce { + return esdt.amount; } } - amount + BigUint::zero() } - //private functions + // private functions fn get_expiration_round(&self, valability: u64) -> u64 { let valability_rounds = valability / SECONDS_PER_ROUND; self.blockchain().get_block_round() + valability_rounds } - //storage + fn get_num_token_transfers( + &self, + egld_value: &BigUint, + esdt_transfers: &ManagedVec, + ) -> usize { + let mut amount = esdt_transfers.len(); + if egld_value > &0 { + amount += 1; + } + + amount + } + + fn require_signature( + &self, + address: &ManagedAddress, + caller_address: &ManagedAddress, + signature: ManagedByteArray, + ) { + let addr = address.as_managed_buffer(); + let message = caller_address.as_managed_buffer(); + self.crypto() + .verify_ed25519(addr, message, signature.as_managed_buffer()); + } + + // storage #[view] #[storage_mapper("deposit")] @@ -268,6 +274,6 @@ pub trait DigitalCash { #[storage_mapper("fee")] fn fee(&self) -> SingleValueMapper; - #[storage_mapper("collected_fees")] + #[storage_mapper("collectedFees")] fn collected_fees(&self) -> SingleValueMapper; } diff --git a/contracts/examples/digital-cash/testnet.toml b/contracts/examples/digital-cash/testnet.toml deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/contracts/examples/digital-cash/wasm/src/lib.rs b/contracts/examples/digital-cash/wasm/src/lib.rs index 6d87882a6a..854d3310f9 100644 --- a/contracts/examples/digital-cash/wasm/src/lib.rs +++ b/contracts/examples/digital-cash/wasm/src/lib.rs @@ -10,7 +10,9 @@ // Total number of exported functions: 10 #![no_std] -#![allow(internal_features)] + +// Configuration that works with rustc < 1.73.0. +// TODO: Recommended rustc version: 1.73.0 or newer. #![feature(lang_items)] multiversx_sc_wasm_adapter::allocator!(); @@ -23,10 +25,10 @@ multiversx_sc_wasm_adapter::endpoints! { fund => fund withdraw => withdraw claim => claim - claim_fees => claim_fees - deposit_fees => deposit_fees + claimFees => claim_fees + depositFees => deposit_fees forward => forward - amount => get_amount + getAmount => get_amount deposit => deposit ) } diff --git a/contracts/examples/esdt-transfer-with-fee/testnet.toml b/contracts/examples/esdt-transfer-with-fee/testnet.toml deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/contracts/examples/factorial/testnet.toml b/contracts/examples/factorial/testnet.toml deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/contracts/examples/lottery-esdt/testnet.toml b/contracts/examples/lottery-esdt/testnet.toml deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/contracts/examples/nft-minter/interaction/snippets.sh b/contracts/examples/nft-minter/interaction/snippets.sh index 1064d4ff90..b593cff045 100644 --- a/contracts/examples/nft-minter/interaction/snippets.sh +++ b/contracts/examples/nft-minter/interaction/snippets.sh @@ -1,7 +1,7 @@ ALICE="" # PEM path ADDRESS=$(mxpy data load --key=address-devnet) DEPLOY_TRANSACTION=$(mxpy data load --key=deployTransaction-devnet) -PROXY=https://devnet-gateway.elrond.com +PROXY=https://devnet-gateway.multiversx.com CHAIN_ID=D deploy() { diff --git a/contracts/examples/nft-minter/testnet.toml b/contracts/examples/nft-minter/testnet.toml deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/contracts/examples/nft-storage-prepay/testnet.toml b/contracts/examples/nft-storage-prepay/testnet.toml deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/contracts/examples/order-book/factory/testnet.toml b/contracts/examples/order-book/factory/testnet.toml deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/contracts/examples/order-book/pair/testnet.toml b/contracts/examples/order-book/pair/testnet.toml deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/contracts/examples/ping-pong-egld/interaction/Ping-pong-egld.erdjs.md b/contracts/examples/ping-pong-egld/interaction/Ping-pong-egld.erdjs.md deleted file mode 100644 index 2fdf7d12c0..0000000000 --- a/contracts/examples/ping-pong-egld/interaction/Ping-pong-egld.erdjs.md +++ /dev/null @@ -1,23 +0,0 @@ -# Ping-pong - -First [set up a node terminal](../../../../tutorial/src/interaction/interaction-basic.md). - -```javascript -let erdjs = await require('@elrondnetwork/erdjs'); -let { erdSys, Egld, wallets: { alice, bob, carol, dan } } = await erdjs.setupInteractive("local-testnet"); - -let pingPong = await erdSys.loadWrapper("contracts/examples/ping-pong-egld"); - -await pingPong.sender(alice).gas(150_000_000).call.deploy(Egld(0.5), 2 * 60, null, Egld(1.5)); - -await pingPong.gas(20_000_000).sender(alice).value(Egld(0.5)).ping("note 1"); - -await pingPong.sender(bob).value(Egld(0.5)).ping(null); -await pingPong.sender(carol).value(Egld(0.5)).ping(null); - -// this fails because of the balance limit of 1.5 egld -await pingPong.sender(dan).value(Egld(0.5).ping(null); - -await pingPong.pongAll(); - -``` diff --git a/contracts/examples/ping-pong-egld/interaction/snippets.sh b/contracts/examples/ping-pong-egld/interaction/snippets.sh index 2e875dc407..64be1f5701 100755 --- a/contracts/examples/ping-pong-egld/interaction/snippets.sh +++ b/contracts/examples/ping-pong-egld/interaction/snippets.sh @@ -1,7 +1,7 @@ PEM_FILE="./ping-pong.pem" -PING_PONG_CONTRACT="./elrond-wasm-rs/contracts/examples/ping-pong-egld" +PING_PONG_CONTRACT="./mx-sdk-rs/contracts/examples/ping-pong-egld" -PROXY_ARGUMENT="--proxy=https://devnet-api.elrond.com" +PROXY_ARGUMENT="--proxy=https://devnet-api.multiversx.com" CHAIN_ARGUMENT="--chain=D" build_ping_pong() { diff --git a/contracts/examples/ping-pong-egld/testnet.toml b/contracts/examples/ping-pong-egld/testnet.toml deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/contracts/examples/token-release/testnet.toml b/contracts/examples/token-release/testnet.toml deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/contracts/feature-tests/composability/esdt-contract-pair/first-contract/testnet.toml b/contracts/feature-tests/composability/esdt-contract-pair/first-contract/testnet.toml deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/contracts/feature-tests/composability/esdt-contract-pair/second-contract/testnet.toml b/contracts/feature-tests/composability/esdt-contract-pair/second-contract/testnet.toml deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/contracts/feature-tests/composability/execute-on-dest-esdt-issue-callback/child/testnet.toml b/contracts/feature-tests/composability/execute-on-dest-esdt-issue-callback/child/testnet.toml deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/contracts/feature-tests/composability/execute-on-dest-esdt-issue-callback/parent/testnet.toml b/contracts/feature-tests/composability/execute-on-dest-esdt-issue-callback/parent/testnet.toml deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/contracts/feature-tests/composability/forwarder/interaction/snippets.sh b/contracts/feature-tests/composability/forwarder/interaction/snippets.sh index 65d57ebeab..21d7ecec9e 100644 --- a/contracts/feature-tests/composability/forwarder/interaction/snippets.sh +++ b/contracts/feature-tests/composability/forwarder/interaction/snippets.sh @@ -9,7 +9,7 @@ VAULT_ADDRESS_HEX="0x$(mxpy wallet bech32 --decode ${VAULT_ADDRESS_BECH32})" ECHO_ARGS_FUNC_NAME=echo_args_async -PROXY=https://testnet-api.elrond.com +PROXY=https://testnet-api.multiversx.com CHAIN_ID=T deployForwarder() { diff --git a/contracts/feature-tests/composability/local-esdt-and-nft/testnet.toml b/contracts/feature-tests/composability/local-esdt-and-nft/testnet.toml deleted file mode 100644 index 41ef1aaa6c..0000000000 --- a/contracts/feature-tests/composability/local-esdt-and-nft/testnet.toml +++ /dev/null @@ -1,2 +0,0 @@ -[folders] -elrond_go = "/home/elrond/elrond-go" diff --git a/contracts/feature-tests/composability/transfer-role-features/interactions/snippets.sh b/contracts/feature-tests/composability/transfer-role-features/interactions/snippets.sh index c22c3a2ed8..8660693fdb 100644 --- a/contracts/feature-tests/composability/transfer-role-features/interactions/snippets.sh +++ b/contracts/feature-tests/composability/transfer-role-features/interactions/snippets.sh @@ -9,7 +9,7 @@ TOKEN_ID="" TOKEN_ID_HEX="0x$(echo -n ${TOKEN_ID} | xxd -p -u | tr -d '\n')" TOKEN_AMOUNT_PER_TX=100 -PROXY="https://testnet-gateway.elrond.com" +PROXY="https://testnet-gateway.multiversx.com" CHAIN_ID="T" SC_WITH_ROLE_ADDRESS_BECH32= diff --git a/contracts/feature-tests/erc-style-contracts/crowdfunding-erc20/testnet.toml b/contracts/feature-tests/erc-style-contracts/crowdfunding-erc20/testnet.toml deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/contracts/feature-tests/erc-style-contracts/erc1155-marketplace/testnet.toml b/contracts/feature-tests/erc-style-contracts/erc1155-marketplace/testnet.toml deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/contracts/feature-tests/erc-style-contracts/erc1155-user-mock/testnet.toml b/contracts/feature-tests/erc-style-contracts/erc1155-user-mock/testnet.toml deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/contracts/feature-tests/erc-style-contracts/erc1155/testnet.toml b/contracts/feature-tests/erc-style-contracts/erc1155/testnet.toml deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/contracts/feature-tests/erc-style-contracts/erc20/testnet.toml b/contracts/feature-tests/erc-style-contracts/erc20/testnet.toml deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/contracts/feature-tests/erc-style-contracts/erc721/testnet.toml b/contracts/feature-tests/erc-style-contracts/erc721/testnet.toml deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/contracts/feature-tests/erc-style-contracts/lottery-erc20/testnet.toml b/contracts/feature-tests/erc-style-contracts/lottery-erc20/testnet.toml deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/contracts/feature-tests/formatted-message-features/testnet.toml b/contracts/feature-tests/formatted-message-features/testnet.toml deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/contracts/feature-tests/rust-testing-framework-tester/testnet.toml b/contracts/feature-tests/rust-testing-framework-tester/testnet.toml deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/tools/mxpy-snippet-generator/src/constants.rs b/tools/mxpy-snippet-generator/src/constants.rs index da35d399d6..1f82bcf090 100644 --- a/tools/mxpy-snippet-generator/src/constants.rs +++ b/tools/mxpy-snippet-generator/src/constants.rs @@ -34,9 +34,9 @@ pub const NFT_TRANSFER_FUNC_NAME: &str = "ESDTNFTTransfer"; pub const MULTI_TRANSFER_FUNC_NAME: &str = "MultiESDTNFTTransfer"; // default proxies -pub const TESTNET_PROXY: &str = "https://testnet-gateway.elrond.com"; -pub const DEVNET_PROXY: &str = "https://devnet-gateway.elrond.com"; -pub const MAINNET_PROXY: &str = "https://gateway.elrond.com"; +pub const TESTNET_PROXY: &str = "https://testnet-gateway.multiversx.com"; +pub const DEVNET_PROXY: &str = "https://devnet-gateway.multiversx.com"; +pub const MAINNET_PROXY: &str = "https://gateway.multiversx.com"; // default chain IDs pub const TESTNET_CHAIN_ID: &str = "T";