- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用@polkadot-js 设置 Nuxt.js 应用程序。当我使用我的@polkadot/types 请求自定义衬底运行时模块时 - 我收到此错误 Class constructor Struct cannot be invoked without 'new'
.
这是一个带有官方设置的 typescript 的 Nuxt.js 应用程序。过去,我曾尝试使用干净的 Nuxt.js 和 Vue 来设置它,但总是出现相同的错误。只有当我设置干净的 NodeJS(有或没有 typescript )或 @polkadot React 应用程序时 - 它运行良好。
我创建了一个 repository尝试其他一些方法。
API 调用:
class VecU32 extends Vector.with(u32) {}
class Kind extends Struct {
constructor(value) {
super({
stuff: VecU32
}, value);
}
}
const Alice = "5GrwvaEF5zXb26Fz9rcQpDWS57CtERHpNehXCPcNoHGKutQY";
const provider = new WsProvider("ws://127.0.0.1:9944");
const typeRegistry = getTypeRegistry();
typeRegistry.register({ Kind });
const api = await ApiPromise.create(provider);
// With types providede in create function - works well
// types: {
// Kind: {
// stuff: "Vec<u32>"
// }
// }
const res = await api.query.template.kinds(Alice);
console.log(res);
我期望空(或一些值,取决于区 block 链中的内容)结果输出,但实际输出是错误,Class constructor Struct cannot be invoked without 'new'
.
最佳答案
简答:
代替这个 const typeRegistry = getTypeRegistry();
,做:
const typeRegistry.register({
Kind: {
'stuff': 'Vec<u32>'
}
});
更长的答案
当您调用 typeRegistry.register({ Kind });
时,您正在尝试将 Typescript 类注册为注册表中的自定义类型,但是您需要传递给API 的类型注册表与您的 Typescript 类型无关,这两者之间没有直接关联。
如果您要编写纯 Javascript,则需要在 Polkadot-JS API 中注册您的自定义 Substrate 类型。
传递给 API 的类型用于解码和编码您发送至底层节点或从底层节点接收的数据。它们符合 SCALE 编解码器,该编解码器也在 Substrate 核心 Rust 代码中实现。使用这些类型可确保数据可以在不同环境和不同语言中正确解码和编码。
您可以在这里阅读更多相关信息:https://substrate.dev/docs/en/overview/low-level-data-format
这些类型的 Javascript 表示在 Polkadot-JS 文档中被列为“编解码器类型”: https://polkadot.js.org/api/types/#codec-types
您在 Polkadot-JS 文档中找到的所有其他类型都是这些低级编解码器类型的扩展。
您需要传递给 JS-API 的是所有自定义底层模块的所有自定义类型,以便 API 知道如何对您的数据进行解码和编码,所以在您的情况下,您声明的是 here in Rust。 :
pub struct Kind {
stuff: Vec<u32>,
}
需要在 Javascript 中像这样注册:
const typeRegistry.register({
Kind: {
'stuff': 'Vec<u32>'
}
});
另一方面,您的 Typescript 类型用于确保您在前端处理的客户端用 typescript 编写的数据具有正确的类型。
只有 Typescript 需要它们,并且它们增加了额外的安全层,但类型本身不需要与 API 通信。不过,您的数据肯定需要具有正确的格式以防止错误。
可以想到https://www.npmjs.com/package/@polkadot/types作为 https://github.com/DefinitelyTyped/DefinitelyTyped 的 Substrate/Polkadot 特定版本
但即使您不使用 Typescript https://polkadot.js.org/api/types/仍然是您 100% 的首选引用。
关于javascript - 添加自定义 @polkadot/types 时 Polkadot-js Babel 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56898273/
我尝试了 @polkadot/util-crypto lib 和 @polkadot/keyring 将公钥转换为 polkadot 地址,但没有帮助。 polkadot.js有没有提供什么方法?
我尝试了 @polkadot/util-crypto lib 和 @polkadot/keyring 将公钥转换为 polkadot 地址,但没有帮助。 polkadot.js有没有提供什么方法?
我正在使用@polkadot-js 设置 Nuxt.js 应用程序。当我使用我的@polkadot/types 请求自定义衬底运行时模块时 - 我收到此错误 Class constructor Str
Polkadot 有收割(杀死)账户余额低于存在阈值的概念。这个阈值是多少?在网络上执行收割过程以清除低余额账户的频率是多少? 最佳答案 一旦账户余额低于该阈值,收割就会发生。没有延迟,收获是减少余额
我想找到所有具有索引或已注册身份的 polkadot 帐户;类似于 https://polkascan.io/polkadot/account/identities和 https://polkasca
我正在从 PolkadotJS 生成一个公钥,如下所示 const keyring = new Keyring({ type: "sr25519" }); const account
我想使用 Substrate 链的基本单元格式化用户的余额。 当我使用 toHuman() 时,我会得到一个自以为是的格式,其中包含如下前缀: let account = await api.quer
我安装了以下 polkadot 包。 "@polkadot/api": "6.10.1", "@polkadot/extension-dapp": "0.41.1", "@polkadot/hw-le
在 Substrate 生态系统中,通常通过 fork Substrate Node Template 来开始编写新的区 block 链节点。 .用户界面有几个选项(例如 Apps 和 front-e
场景:您想要向您的自定义提交一个外部 Substrate节点 基于 substrate-node-template通过使用 Polkadot/Substrate frontend .您通过仔细搜索和替
我是一名优秀的程序员,十分优秀!