【问题标题】:What is the max length of data that can be returned from a NEAR smart contract call / view method?NEAR 智能合约调用/查看方法可以返回的最大数据长度是多少?
【发布时间】:2021-06-04 20:43:54
【问题描述】:

在主网上,我可以返回一个 10kb 长度的字符串,而在测试网上,如果我尝试返回 2kb,我会得到HostError(GasLimitExceeded)。什么是“官方”限制?

export function get_data(): Uint8Array {
  return new Uint8Array(2000);
}

【问题讨论】:

  • 你在测试网和主网上调用了相同的函数吗?如果函数没有触摸状态,应该没有任何区别
  • 仍在调查,我开始认为这是返回 Uint8Arrays(来自 AssemblyScript)时的问题。因为在主网上它是一个 10k 的字符串,在测试网上也可以正常工作。看起来像是 near-sdk-as 中的问题。
  • 其实问题似乎就在这里:github.com/near/near-sdk-as/blob/master/sdk-core/assembly/…(连接只处理非常小的数组)

标签: nearprotocol


【解决方案1】:

返回一个 uint8 数组是低效的,因为它将被序列化为 JSON,例如[1, 5, 131, 5] 用于 4 个值。

如果您需要传递二进制数据,最好先使用base64 对其进行序列化。然后你可以在前端反序列化。通过base64 和高效的数据读取,您应该能够返回相当大量的数据。

主网和测试网的限制都应该是200Tgas。不知道为什么测试网的行为与主网不同。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-12-25
    • 2020-01-16
    • 2010-10-23
    • 2020-10-02
    • 2011-06-01
    • 2021-12-31
    • 1970-01-01
    相关资源
    最近更新 更多