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

Substrate自定义carpooling pallet方法通过Polkadot JS调用报错如何解决

报错原因
  • 调度函数命名不匹配:Polkadot JS API会自动将Substrate Runtime中定义的snake_case格式调度函数转换为驼峰式命名,如果你调用时的函数名和实际定义的名称不匹配,就会触发该报错。
  • Pallet未正确注册到Runtime:你虽然编写了carpooling Pallet,但没有在Runtime的construct_runtime!宏中完成注册,或者注册时未正确暴露调度函数,导致链上元数据没有包含对应方法。
  • 自定义类型定义错误:你代码中定义的元组类型('u32', 'u32')不符合Polkadot JS的类型写法规则,会导致元数据解析失败,进而无法识别Pallet下的方法。
  • 元数据未完全加载:部分场景下本地节点同步异常或元数据拉取延迟,会导致API初始化完成后还没有加载到完整的链上方法列表。
解决方案

步骤1:校验Runtime配置

首先检查Runtime的construct_runtime!宏中是否已经注册carpooling Pallet:

construct_runtime!(
    pub enum Runtime where
        Block = Block,
        NodeBlock = opaque::Block,
        UncheckedExtrinsic = UncheckedExtrinsic
    {
        // 其他系统Pallet
        Carpooling: pallet_carpooling,
    }
);

再确认Pallet的#[pallet::call]块中定义的调度函数名称确实为book_ride,参数数量和类型和你传入的两个u32参数匹配。

步骤2:修正自定义类型定义

将代码中location字段的圆括号改为方括号,符合元组类型的定义规则:

types: {
    DriverOf: {
        id: 'u32',
        car_no: 'Hash',
        location: ['u32', 'u32'],
        price: 'u32',
    },
    CustomerOf: {
        id: 'u32',
        name: 'Hash',
        location: ['u32', 'u32'],
    },
}

步骤3:确认可调用方法列表

在调用方法前打印carpooling Pallet下的所有可用方法,确认函数存在且命名正确:

console.log("可用调度方法:", Object.keys(api.tx.carpooling));

如果打印结果中存在驼峰格式的bookRide,就将调用代码改为api.tx.carpooling.bookRide(12,45)即可。

步骤4:补全交易签名逻辑

你当前的代码没有对交易进行签名就直接发送,是无法正常执行的,参考如下代码补全签名逻辑:

// 顶部导入依赖
const { Keyring } = require('@polkadot/keyring');

// main函数内部替换原有调用逻辑
const keyring = new Keyring({ type: 'sr25519' });
// 用开发节点默认的Alice账户签名,可替换为你自己的账户
const signer = keyring.addFromUri('//Alice');

await api.tx.carpooling.bookRide(12,45)
    .signAndSend(signer, (res) => {
        if (res.status.isInBlock) {
            console.log(`交易已打包,区块哈希:${res.status.asInBlock}`);
        } else if (res.status.isFinalized) {
            console.log(`交易已最终确认,区块哈希:${res.status.asFinalized}`);
            process.exit(0);
        }
    });

内容的提问来源于stack exchange,提问作者Aman Verma

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.08 15:45:03