0

我正在开发一种分页方法,但是当token数量超过150时,返回这个错误:FunctionCallError(HostError(GasLimitExceeded))

我使用的命令:near view nativodeploy.testnet get_ids_onsale '{"tokens":30}' --accountId nativodeploy.testnet

代码:这里我只恢复一个带有 Id 标记的向量,用于在另一种方法中启动“from_index”

pub fn get_ids_onsale(&self,tokens:u64) ->  Vec<u64> {
        let mut vectIDs = vec![];
        let mut _tokfound =0;
        let total =  self.get_on_total_toks();
        vectIDs.push(0); 
        for x in 0..total { 
            if  x>= total.clone() {  
                break;
            }
                let mut token =self.get_token(x.to_string().clone());
                if token.on_sale{
                   _tokfound+=1;
                   if _tokfound== tokens {  
                    vectIDs.push( token.token_id.parse::<u64>().unwrap() );
                    _tokfound=0;  
                    }
               }
            if( _tokfound == tokens ){break; }           
        }
        vectIDs
    }

如果我使用电话,我会得到: {"ExecutionError":"Exceeded the prepaid gas."}

即使我使用 --gas=300000000000000,我也会得到:{"ExecutionError":"Exceeded the maximum amount of gas allowed to burn per contract."}

4

1 回答 1

1

每个函数调用限制为 200 Tgas,并且根据 iirc 中的限制,总共只能附加 300 Tgas(为跨合约调用添加的额外气体)near-api-js

所以你必须返回少于 150 个结果。

如果您返回的每条记录当然更大,这个数字会更低

它是关于您从存储中读取的数据量以及您如何使用它。

您可以在此处阅读有关气体的更多信息: https ://docs.near.org/docs/concepts/gas

于 2021-12-15T03:31:22.497 回答