首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >获取由智能契约索引的所有存储密钥- getStorageKeys或parity_listStorageKeys

获取由智能契约索引的所有存储密钥- getStorageKeys或parity_listStorageKeys
EN

Ethereum用户
提问于 2023-01-12 22:19:05
回答 1查看 49关注 0票数 0

我已经看到,getStorageKeysparity_listStorageKeys函数已经从最流行的客户端停止使用。因此,开发人员只能访问getStorageAt (我正在使用etheres.js )。是否有一种方法可以自动从特定的智能契约中获取索引值的所有键?一种可能是先验地知道哪些值是定义和使用getStorageAt的.然而,对于动态大小的类型,这将包括在循环中使用getStorageAt,直到只检索到零,而且这看起来不太有效。

有什么想法吗?

EN

回答 1

Ethereum用户

发布于 2023-01-13 00:12:15

因此,在https://github.com/0xweb-org/0xweb库中,我为合同的存储阅读器添加了TypeScript代码生成。只有当源代码可用时,它才能工作,例如,合同是有效的。

代码语言:javascript
运行
复制
npm i 0xweb -g
0xweb init
0xweb install 0x1234... --name FooContract --chain eth

它生成契约的客户端类来调用读/写方法,但它也有storage字段,其中包含所有存储变量的getter。它也适用于结构和动态内容,如数组和映射。

代码语言:javascript
运行
复制
contract FooContract {
  uint256 a;
  string b;
  struct Foo {
     uint256 c;
     uint256 d;
  }
  Foo foo;
  address[] list;
  mapping(uint256 => address) people;
}
代码语言:javascript
运行
复制
import { FooContract } from '@0xweb/eth/FooContract/FooContract'
import { Config } from '@dequanto/Config'

let contract = new FooContract();
let aValue = await contract.storage.a();
let bValue = await contract.storage.b();
// from struct
let cValue = await contract.storage.foo('c');
// or the first item of the array
let arrItem = await contract.storage.list(0);
// mapping
let mappingValue = await contract.storage.people(100n);
票数 0
EN
页面原文内容由Ethereum提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://ethereum.stackexchange.com/questions/142841

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档