在跨合约调用中将用户令牌余额转移到合约

Transferring user token balance to contract in cross contract call

合同 A

#[payable]
pub fn add_liquidity(&mut self, tokens: u128, avrit_id: AccountId) -> u128 {
        let amount = env::attached_deposit();            

        Promise::new(avrit_id).function_call(
            b"transfer".to_vec(),
            json!({"new_owner_id":"avrit.testnet", "amount": U128(tokens)}).to_string().as_bytes().to_vec(),
            38600000000000000000000,
            env::prepaid_gas() - GAS_FOR_SWAP,
        );

        amount
}

Promise 函数调用是由合约 A 而不是调用 add_liquidity 的人完成的。
如何调用 Promise,其中前任是调用 add_liquidity 而不是合约 A 地址的用户? Explorer

你说得对。如果前任是当前帐户以外的其他帐户,则无法进行 Promise 函数调用。

这是 NEAR 合约开发的一个重要安全特性。因为如果您可以伪造前任帐户 ID,那么您就可以伪装成该帐户并代表该帐户执行操作。

相反,当合约进行跨合约调用时,前任成为该合约而不是交易签署者。接收合约将能够看到是哪个账户直接调用了它。