You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
#![no_std]
multiversx_sc::imports!();
pub mod callee_proxy {
multiversx_sc::imports!();
#[multiversx_sc::proxy]
pub trait CalleeContract {
#[view(getAmountOut)]
fn get_amount_out_view(&self, token_in: TokenIdentifier, amount_in: BigUint) -> BigUint;
}
}
#[multiversx_sc::contract]
pub trait MinterContract {
#[init]
fn init(&self, address: ManagedAddress, price: BigUint, token_id: TokenIdentifier, usdt_token_id: TokenIdentifier) {
self.set_address().set(&address);
self.set_esdt_price().set(&price);
self.set_token_id().set(&token_id);
self.set_usdt_token_id().set(&usdt_token_id);
}
#[payable("*")]
#[endpoint]
fn buy_token(&self, amount: BigUint) {
require!(amount >= 1000, "Withdrawal of token amount of less than 1000 is not allowed");
require!(amount <= 10000, "Withdrawal of token amount of more than 10000 is not allowed");
let _price : BigUint = amount.clone() * self.set_esdt_price().get();
let _output_amount_as_egld: BigUint = self.contract_proxy(self.set_address().get()).get_amount_out_view(self.set_token_id().get(), _price).execute_on_dest_context();
require!(self.call_value().egld_value().clone_value() >= _output_amount_as_egld, "Not enough ELGD paid!");
self.send().direct_esdt(&self.blockchain().get_caller(), &self.set_token_id().get(), 0, &amount);
}
#[endpoint]
fn get_usdt_to_egld(&self, amount: BigUint) -> BigUint{
let output_amount: BigUint = self.contract_proxy(self.set_address().get()).get_amount_out_view(self.set_usdt_token_id().get(), amount).execute_on_dest_context() ;
output_amount
}
#[proxy]
fn contract_proxy(&self, sc_address: ManagedAddress) -> callee_proxy::Proxy<Self::Api>;
#[storage_mapper("Key_tokenId")]
fn set_token_id(&self) -> SingleValueMapper<TokenIdentifier>;
#[storage_mapper("Key_tokenId")]
fn set_usdt_token_id(&self) -> SingleValueMapper<TokenIdentifier>;
#[storage_mapper("key_address")]
fn set_address(&self) -> SingleValueMapper<ManagedAddress>;
#[storage_mapper("key_price")]
fn set_esdt_price(&self) -> SingleValueMapper<BigUint>;
}
As you can see i created proxy like this, and declared that target endpoint. I am using this address: erd1qqqqqqqqqqqqqpgqeel2kumf0r8ffyhth7pqdujjat9nx0862jpsg2pqaq as exchange address from here: https://explorer.multiversx.com/accounts/erd1qqqqqqqqqqqqqpgqeel2kumf0r8ffyhth7pqdujjat9nx0862jpsg2pqaq/tokens. But when i called the get_usdt_to_egld() like this: mxpy --verbose contract call erd1qqqqqqqqqqqqqpgq027dusnhgjug07pwzhdaqv0sxt7j0hsn2nfsww256n --chain D --pem="../walletKey.pem" --gas-limit=2000000 --function="get_usdt_to_egld" --arguments 1000 --proxy="https://devnet-gateway.multiversx.com" --recall-nonce --send my transaction get failed, see the transaction here: https://devnet-explorer.multiversx.com/transactions/bae86eec15ce3a3a6aac39447bd3d7a6f4197b98b448b5188ea0bc8756b4369a#decimal.
And when i queried like this: mxpy contract query erd1qqqqqqqqqqqqqpgq027dusnhgjug07pwzhdaqv0sxt7j0hsn2nfsww256n --proxy="https://devnet-gateway.multiversx.com" --function="get_usdt_to_egld" --arguments 10000 i got this error:
What i want to do? => I want to implement the logic:
I minted my token and funded the contract with that token. Price of my token is 0.005 USDT
I want user will enter the amount of token they want to buy in buy_token().
Now in buy_token() the amount(given by user) will be multiplied by 500 as USDT has 6 decimal. So we will get the price of total amount of token in USDT.
Then I wanna use the exchange to get the price of those tokens ( which are now in USDT form )
in EGLD.
After getting the EGLD value i will put a require statement where the condition will be egld_value() should be equal to the EGLD value we got.
Then we will transfer the amount of token to user wallet.
This is what i want to implement. Help me to implement it.
The text was updated successfully, but these errors were encountered:
I am trying to fetch price of USDT in EGLD. I am using this: https://github.com/multiversx/mx-exchange-sc/blob/main/dex/pair/src/lib.rs#L604 endpoint to fetch the price. But not sure that it is right process to do it. One community member suggested me to do this.
My code is:
As you can see i created proxy like this, and declared that target endpoint. I am using this address:
erd1qqqqqqqqqqqqqpgqeel2kumf0r8ffyhth7pqdujjat9nx0862jpsg2pqaq
as exchange address from here:https://explorer.multiversx.com/accounts/erd1qqqqqqqqqqqqqpgqeel2kumf0r8ffyhth7pqdujjat9nx0862jpsg2pqaq/tokens
. But when i called theget_usdt_to_egld()
like this:mxpy --verbose contract call erd1qqqqqqqqqqqqqpgq027dusnhgjug07pwzhdaqv0sxt7j0hsn2nfsww256n --chain D --pem="../walletKey.pem" --gas-limit=2000000 --function="get_usdt_to_egld" --arguments 1000 --proxy="https://devnet-gateway.multiversx.com" --recall-nonce --send
my transaction get failed, see the transaction here:https://devnet-explorer.multiversx.com/transactions/bae86eec15ce3a3a6aac39447bd3d7a6f4197b98b448b5188ea0bc8756b4369a#decimal
.And when i queried like this:
mxpy contract query erd1qqqqqqqqqqqqqpgq027dusnhgjug07pwzhdaqv0sxt7j0hsn2nfsww256n --proxy="https://devnet-gateway.multiversx.com" --function="get_usdt_to_egld" --arguments 10000
i got this error:What i want to do? => I want to implement the logic:
in EGLD.
This is what i want to implement. Help me to implement it.
The text was updated successfully, but these errors were encountered: