首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >类型记录和web3批处理请求

类型记录和web3批处理请求
EN

Stack Overflow用户
提问于 2020-08-26 03:59:38
回答 1查看 634关注 0票数 2

我正试图从web3向我的合同发送一批事务请求。使用Typechain,我的合同的方法是NonPayableTransactionObject<void>类型,它似乎不支持输入batch.add()所需的讨厌的.request方法。例如..。

代码语言:javascript
运行
复制
let batch = new web3.eth.BatchRequest();
for (let id of tokenIDs) {
    batch.add(myContract.methods.myMethod(id).send.request({ from: defaultAccount })   
}
batch.execute();

这会产生Property 'request' does not exist on type '(tx?: NonPayableTx | undefined) => PromiEvent<TransactionReceipt>'.ts(2339)

是否有另一种方式通过批处理请求使用类型记录/Typechain将事务发送到合同?

EN

回答 1

Stack Overflow用户

发布于 2022-10-25 12:09:55

TypeChain在.send.call方法中都没有.request方法的类型声明。但是,由于TypeChain只是类型定义,所以.request方法在运行时仍然可用。为了防止TS编译器抛出错误,可以简单地将.send方法转换为any

代码语言:javascript
运行
复制
batch.add((myContract.methods.myMethod(id).send as any).request({ from: defaultAccount });

在TypeScript中使用静态类型的契约类的另一个选项是0xweb库。

使用0xweb install 0x.... --chain eth --name MyContract生成类,然后在批处理中调用read方法:

代码语言:javascript
运行
复制
import { MyContract } from '@dequanto/eth/MyContract'

const myContract = new MyContract();
const requests = tokenIds.map(id => {
    return myContract
        .$config({ send: 'manual', from:'0x...'})
        .myMethod(id);
});
const results = await myContract.$executeBatch(requests);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63590294

复制
相关文章

相似问题

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