在 solana 智能合约中借款时临时价值下降

Posted

技术标签:

【中文标题】在 solana 智能合约中借款时临时价值下降【英文标题】:getttting temporary value dropped while borrow in solana smart contract 【发布时间】:2022-01-05 15:32:17 【问题描述】:
pub fn burn_liquidity(ctx: Context<BurnLiquidity>, _to: Pubkey) -> ProgramResult 
        let pool_account = &ctx.accounts.pool_account;
        let token1_account = &ctx.accounts.pool_token1_account;
        let token2_account = &ctx.accounts.pool_token2_account;
        let source = &ctx.accounts.source;
        let (reserve1, reserve2) = (pool_account.token1_balance, pool_account.token2_balance);
        let balance1: u64 = token1_account.amount;
        let balance2: u64 = token2_account.amount;
        let liquidity = source.amount;
        let total_supply = ctx.accounts.mint.supply;
        let amount1 = liquidity as f64 * balance1 as f64 / total_supply as f64;
        let amount2 = liquidity as f64 * balance2 as f64 / total_supply as f64;
        
            let cpi_program = ctx.accounts.system_program.to_account_info();
            let mut cpi_accounts = UpdatePool 
                pool_account: pool_account.clone(),
            ;

            let update_ctx = Context::new(
                cpi_program.key,
                &mut cpi_accounts,
                &[pool_account.to_account_info()],
            );
            let update_data = UpdateData 
                token1: pool_account.token1.to_string(),
                token2: pool_account.token2.to_string(),
                token1_amount: amount1 as u64,
                token2_amount: amount2 as u64,
            ;
            update_pool(update_ctx, update_data);
        

        
        Ok(())
    

1.我已经尝试了几乎所有可能的方法来消除这个错误有人知道如何解决这个问题吗 2.这是 solana 区块链上的智能合约,我在其中使用了锚点 我得到的错误是:

【问题讨论】:

请通过编辑您的问题分享任何相关代码instead of a screenshot。如果您的代码没有以可复制的形式出现,那么很少有人会重现您的问题。 Please do not upload images of code/errors when asking a question. 提出问题时,如果您提供他们易于理解并用于重现问题的代码,人们将能够更好地提供帮助。这被社区成员称为创建minimal, reproducible example。 【参考方案1】:
            let update_ctx = Context::new(
                cpi_program.key,
                &mut cpi_accounts,
                &[pool_account.to_account_info()],
            );

update_ctx 引用临时数组,因此Context 不能超过临时数组。事先将数组绑定到变量将解决错误。

            let acc_info = [pool_account.to_account_info()];
            let update_ctx = Context::new(
                cpi_program.key,
                &mut cpi_accounts,
                &acc_info,
            );

【讨论】:

以上是关于在 solana 智能合约中借款时临时价值下降的主要内容,如果未能解决你的问题,请参考以下文章

Solana区块链智能合约开发简要流程

Solana区块链智能合约开发简要流程

区块链项目实战 - 使用以太坊/智能合约solidity,全栈开发区块链借贷记账小应用,含完整源码

区块链项目实战 - 使用以太坊/智能合约solidity,全栈开发区块链借贷记账小应用,含完整源码

智能合约开发——Sui/Move vs. Solana/Rust

智能合约开发——Sui/Move vs. Solana/Rust