#nearprotocol
Вопрос:
Когда я пробую этот метод, он отлично работает. Ближайший остаток списывается со счета предшественника и добавляется на счет контракта:
#[payable]
pub fn buy_tokens(amp;mut self, number_of_tokens: U128) {
let number_of_tokens: u128 = number_of_tokens.into();
assert!(self.on_crowdsale == true, "Crowdsale has stalled");
let amount = env::attached_deposit();
let mut required_deposit = number_of_tokens * self.token_price;
assert!(
amount >= required_deposit self.ft.storage_balance_bounds().min.0,
"Requires attached deposit {}",
required_deposit self.ft.storage_balance_bounds().min.0
);
let account_id = env::predecessor_account_id();
if !self.ft.accounts.contains_key(amp;account_id) {
// Not registered, register if enough $NEAR has been attached.
// Subtract registration amount from the account balance.
self.ft.internal_register_account(amp;account_id);
required_deposit = required_deposit self.ft.storage_balance_bounds().min.0;
}
self.token_sold = (self.token_sold)
.checked_add(number_of_tokens)
.expect("Overflow");
assert!(
self.token_sold <= self.total_available_tokens,
"No more tokens to sale"
);
assert!(
self.token_sold <= self.phase_available_tokens,
"No more tokens to sale"
);
self.mint_myft(amp;account_id, number_of_tokens);
if amount - required_deposit > 0 {
Promise::new(account_id).transfer(amount - required_deposit);
}
}
Но когда я пробую этот метод, он успешно выполняется, но близкий баланс адреса предшественника и контракта остается неизменным:
#[payable]
pub fn buy_nft(amp;mut self, token_id: U128) {
let product_id: u128 = token_id.into();
let token_owner_id = env::predecessor_account_id();
let product = self.get_product(product_id);
let price = self.get_nft_price(product_id);
let amount = env::attached_deposit();
assert!(amount == price, "Price should be equal to deposit");
let product_owner_id: u128 = product.user_id;
self.increment_owner_incentives(product_owner_id, amount);
self.check_and_increment_nft_token_mint_count(product_id);
let countname = self.get_nft_count_name(product_id);
let names = [product_id.to_owned().to_string(), countname];
let joined_name = names.join("_");
log!("NFT token id {}", joined_name);
log!("Amount {}: Price {}", amount, price);
let token_metadata = TokenMetadata {
title: Some(product.product_details_hash.into()),
description: None,
media: None,
media_hash: None,
copies: Some(1u64),
issued_at: None,
expires_at: None,
starts_at: None,
updated_at: None,
extra: None,
reference: None,
reference_hash: None,
};
self.tokens.mint(
joined_name,
token_owner_id.try_into().unwrap(),
Some(token_metadata),
);
}
Что я делаю не так во втором методе?
рядом звоните dev-1625891373202-46622873112534 buy_nft ‘{«token_id»:»5″}’ —Учетная запись amiyatulu.testnet —сумма 10 —газ 300000000000000
Комментарии:
1. вы получаете какие-либо ошибки? можете ли вы попробовать вывести некоторые значения, такие как цена и сумма?
2. Нет, я не получаю никаких ошибок
3. Я также зарегистрировал его, код работает без ошибок. Кажется, просто attach_deposit недостаточно, должен быть какой-то другой код, например передача