Как внести депозит со счета предшественника на адрес контракта, используя платежную систему?

#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 недостаточно, должен быть какой-то другой код, например передача