You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Polkadot.js部署合约编译报错:ISubmittableResult无contract属性

解决Next.js中Polkadot.js合约部署build时的类型错误

问题根源

yarn dev正常但yarn build报错,是因为开发模式下TypeScript严格类型检查未触发,而生产构建会启用严格校验。ISubmittableResult类型本身并不包含contract属性,直接解构会触发类型错误。

正确解决方案

不要直接从ISubmittableResult中取contract,而是从交易事件中提取合约地址,这是Polkadot.js官方推荐的标准方式:

示例代码

import { ApiPromise } from '@polkadot/api';

// 假设已初始化ApiPromise实例api,以及部署交易tx
tx.signAndSend(account, (result) => {
  // 仅在交易进入区块或最终确认时处理
  if (result.status.isInBlock || result.status.isFinalized) {
    // 查找合约实例化事件
    const instantiatedEvent = result.events.find(
      ({ event }) => api.events.contracts.Instantiated.is(event)
    );

    if (instantiatedEvent) {
      // 从事件数据中解析合约地址
      const [, contractAddress] = instantiatedEvent.event.data;
      console.log('部署的合约地址:', contractAddress.toString());
      // 这里写入你的后续业务逻辑
    }
  }
});

额外注意事项

  1. 版本适配:不同Polkadot.js版本的事件名称可能略有差异,若Instantiated事件不存在,可检查对应版本的api.events.contracts下的事件列表。
  2. 提前发现类型问题:修改tsconfig.json,将strict设为true,这样开发模式下也能触发类型检查,避免等到build才暴露问题:
    {
      "compilerOptions": {
        "strict": true
      }
    }
    

内容的提问来源于stack exchange,提问作者s.Takahashi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 22:01:17