【问题标题】:Transferring user token balance to contract in cross contract call在跨合约调用中将用户代币余额转移到合约
【发布时间】:2021-06-22 03:22:02
【问题描述】:

合约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

【问题讨论】:

  • 我觉得不可能,我得给合约A地址留余地,改用transfer_from

标签: nearprotocol


【解决方案1】:

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

这是 NEAR 合约开发的一项重要安全功能。因为如果您可以欺骗前任帐户 ID,那么您就可以冒充此帐户并代表此帐户执行操作。

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

【讨论】:

    猜你喜欢
    • 2021-07-18
    • 2020-09-14
    • 2022-06-14
    • 2021-04-26
    • 2021-09-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多