@aeternity/aepp-calldata

中文文档
1.10.0发布于 2026/10/27ISCTypeScriptESM + CJS构建来源已验证近 30 天下载 5532

Atenity 数据序列化库

中文使用文档
文档目录16 节
  1. 安装
  2. 快速启动
  3. 编码调用数据
  4. 解码调用结果
  5. 合同呼叫错误
  6. 活动
  7. 字节阵列
  8. FATE API 编码器
  9. 合同编码器
  10. 数据类型
  11. 版本
  12. 公共 API
  13. 错误
  14. 发展
  15. 安装
  16. 测试

绝对数据序列化

永久合同调用数据编码和结果解码 独立 图书馆.

这是 Javascript 中指定的数据序列化 永久性协议。 。 。 .

虽然本作编写时图书馆的唯一目的只是分别提供合同调用数据的编码和解码,并返回数据,但图书馆可能会演变为完整的协议规格序列化图书馆.

安装

npm install -P @aeternity/aepp-calldata

快速启动

根据ACI提供的类型信息与合同电话合作 AciContractCallEncoder 应使用类。 建筑师只用一个参数 索菲娅 ACI 作为字符串.

节点JS实例 :

const {AciContractCallEncoder} = require('@aeternity/aepp-calldata')
const ACI = require('./Test.json')
const CONTRACT = 'Test'

const encoder = new AciContractCallEncoder(ACI)

编码调用数据

这个 encodeCall 方法用于编码以合同名称为第一参数的 calldata,然后以函数名称和合同呼叫参数列表为最后参数.

示例

const encoded = encoder.encodeCall(CONTRACT, 'test_string', ["whoolymoly"])
console.log(`Encoded data: ${encoded}`)

预期产出:

Encoded data: cb_KxHwzCuVGyl3aG9vbHltb2x5zwMSnw==

解码调用结果

这个 decodeResult 方法用于根据它的类型解码合同调用结果. 虽然前两个参数与编码方法相同,但第三个是被解码的实际结果,最后一个是默认为"ok"的结果类型.

示例

const decoded = encoder.decodeResult(CONTRACT, 'test_string', 'cb_KXdob29seW1vbHlGazSE')
console.log(`Decoded data: ${decoded}`)

预期产出:

Encoded data: cb_KxHwzCuVGyl3aG9vbHltb2x5zwMSnw==
Decoded data: whoolymoly

合同呼叫错误

FATE合同调用错误信息作为编码合同字典(cb_ 前缀字符串). 然而,返回消息是FATE字符串编码的,所以 decodeResult 方法接受与结果类型的参数.

示例

// error message
const error = encoder.decodeResult(
    CONTRACT,
    'test_string',
    'cb_VHlwZSBlcnJvciBvbiBjYWxsOiBbe2J5dGVzLDw8MjQwLDIsLi4uPj59XSBpcyBub3Qgb2YgdHlwZSBbe2J5dGVzLDMyfV3EtJjU',
    'error'
)
console.log('Error: ' + error)

// revert message
const revert = encoder.decodeResult(CONTRACT, 'test_string', 'cb_OXJlcXVpcmUgZmFpbGVkarP9mg==', 'revert')
console.log('Revert: ' + revert)

预期产出:

Error: Type error on call: [{bytes,<<240,2,...>>}] is not of type [{bytes,32}]
Revert: require failed

活动

示例

const data = encoder.decodeEvent('Test', 'cb_dHJpZ2dlcmVk1FYuYA==', [
    34853523142692495808479485503424878684430196596020091237715106250497712463899n,
    17n
])
console.log(data)

预期产出:

{EventTwo: [17n, 'triggered']}

字节阵列

任何合同字节都可以使用 ContractByteArrayEncoder 课.

FATE没有随数据携带某种信息格式的节点:

  • 记录密钥丢失
  • 变量名称丢失
  • 任何用户类型的信息都丢失
  • STL 类型信息丢失:即链条, AENS, Set, BLS12 381

示例

const {ContractByteArrayEncoder} = require('@aeternity/aepp-calldata')

const decodedString = encoder.decode('cb_KXdob29seW1vbHlGazSE')
console.log(`Decoded string: ${decodedString}`)

const decodedMap = encoder.decode('cb_LwEOfzGit9U')
console.log('Decoded map:', decodedMap)

预期产出:

Decoded string: whoolymoly
Decoded map: Map(1) { 7n => false }

编码器还可以使用明确类型的信息:

示例

const {ContractByteArrayEncoder, TypeResolver} = require('@aeternity/aepp-calldata')

const encoder = new ContractByteArrayEncoder()
const resolver = new TypeResolver()

const decodedString = encoder.decodeWithType('cb_KXdob29seW1vbHlGazSE', resolver.resolveType('string'))
console.log(`Decoded string: ${decodedString}`)

const type = resolver.resolveType({map: ['int', 'bool']})
const encodedMap = encoder.encodeWithType(new Map([[7n, false]]), type)
console.log('Encoded map:', encodedMap)

预期产出:

Decoded string: whoolymoly
Decoded map: Map(1) { 7n => false }

FATE API 编码器

下列任何一种FATE API数据类型都可以被编码并解码:

  • 键 block hash
  • 微块 hash
  • 块( p)
  • 块( tx hash)
  • 块( state hash)
  • 合同字节
  • 合同( p)
  • 账户 pubkey
  • 账户 seckey
  • 频道
  • 甲骨文 pubkey
  • 甲骨文 query id
  • 端点( p)
  • 名称
  • tx 小时
  • 签名
  • 承诺
  • 字节

示例

const {FateApiEncoder} = require('@aeternity/aepp-calldata')
const encoder = new FateApiEncoder()

const encoded = encoder.encode('contract_bytearray', new Uint8Array())
console.log(`Encoded: ${encoded}`)

const decoded = encoder.decode('cb_Xfbg4g==')
console.log('Decoded:', decoded)

预期产出:

Encoded: cb_Xfbg4g==
Decoded: Uint8Array(0) []

注意编码器使用二进制数据,所以字符串必须编码为 Uint8Array。 。 。 .

字符串示例 :

const textEncoder = new TextEncoder()
const textDecoder = new TextDecoder()

const encoded = encoder.encode('contract_bytearray', textEncoder.encode('whoolymoly'))
console.log(`Encoded: ${encoded}`)

const decoded = textDecoder.decode(encoder.decode('cb_d2hvb2x5bW9seeO2SW0='))
console.log('Decoded:', decoded)

例外输出 :

Encoded: cb_d2hvb2x5bW9seeO2SW0=
Decoded: whoolymoly

合同编码器

解码合同元数据,包括字节码.

示例

const {ContractEncoder} = require('@aeternity/aepp-calldata')
const encoder = new ContractEncoder()

const testContract = fs.readFileSync(path.resolve(__dirname, '../build/contracts/Test.aeb'))
const contract = encoder.decode(testContract.toString())

console.log('Contract:', contract)

预期产出( 已调整) :

{
  tag: 70n,
  vsn: 3n,
  source_hash: 'e50758c624dcacd485db1f9e76208c5858dd968f6218637d055fd4a3b2850baa',
  aevmTypeInfo: [],
  compilerVersion: '6.1.0',
  payable: false,
  bytecode: {
    functions: [
      {
        id: '077a0e02',
        name: 'test_nested_list',
        attributes: [],
        args: {
          name: 'tuple',
          valueTypes: [
            {
              name: 'list',
              valuesType: { name: 'list', valuesType: { name: 'int' } }
            }
          ]
        },
        returnType: {
          name: 'list',
          valuesType: { name: 'list', valuesType: { name: 'int' } }
        },
        instructions: [
          [
            { mnemonic: 'RETURNR', args: [ { mod: 'arg', arg: 0n } ] }
          ]
        ]
      },
      .....
    ],
    symbols: {
      '67419061': 'test_unit',
      ....
    },
    annotations: Map(0) {}
  }
}

请注意,字节代码是用于调试/打印目的的,其结构WON't保持后相容性

数据类型

使用库涉及数据类型及其从索菲亚到JavaScript的绘图,反之亦然.

索菲亚类型索菲亚实例Javascript 类型Javascript 示例
单位63, (中文(简体) ), -63大点63n, (中文(简体) ), -63n
嘘true, (中文(简体) ), false布尔true, (中文(简体) ), false
字符串"whoolymoly"字符串"whoolymoly"
字节#beef大点BigInt("0xbeef")
列表[1, 2, 3, 5, 8, 13, 21]阵列[1,2,3,5,8,13,21]
二联(true, false)阵列[true, false]
地图{[7] = false}地图、 对象、 阵列new Map([[7, false]]), (中文(简体) ), {7: false}, (中文(简体) ), [[7, false]]
记录{x = 0, y = 0}对象( POJO){x: 0, y: 0}
变体Some(404), (中文(简体) ), None对象( POJO){'Some': [404]}, (中文(简体) ), {'None': []}, (中文(简体) ), 404, (中文(简体) ), undefined
位数Bits.none, (中文(简体) ), Bits.all Bits.set(Bits.none, 0)大点0b0n, (中文(简体) ), -1n, (中文(简体) ), 0b00000001n
散列轴#001234d大点BigInt("0x001234d")
签名#001234d大点BigInt("0x001234d")
地址ak_2gx9MEFxKvY9vMG5YnqnXWv1hCsX7rgnfvBLJS4aQurustR1rt字符串ak_2gx9MEFxKvY9vMG5YnqnXWv1hCsX7rgnfvBLJS4aQurustR1rt
设置. 设置Set.from_list([1, 2, 3])设定, 阵列new Set([1,2,3]), (中文(简体) ),[1,2,3]
BLS12 381.fr (英语)BLS12_381.int_to_fr(3735928559)大点3735928559n
BLS12 381.fp (英语)BLS12_381.int_to_fp(3735928559)大点3735928559n
  • 注意单键的变异对象的固定结构——变异构造器(即:. Some)和以它为值的多变参数.
  • 当 Javascript 数字和原始 int 类型也可以在 BigInt 类型预计不会被推荐,因为它是 Number.MAX_SAFE_INTEGER 限制.

版本

本项目遵循 语义版本 准则. 参见 变化 关于释放的更多信息.

公共 API

用语义化版本表示的后向兼容承诺 上文 实值 仅限 申请到该图书馆的公共API, 这只是模块导出和 数据类型 以上列出.

公共API包括以下类别:

公共API也定义于 类型脚本解密文件。 。 。 .

错误

出错名称也是公共API的一部分,并且保证在相容版本之间获得相同的出错名称. 由于错误类不导出为公共 API, 库用户应该依赖 仅限 打开 Error.name 属性处理例外. 另请注意: 错误消息不是公共 API 的一部分 并且可以不经通知而更改版本之间的任何时间.

发展

请确保你熟悉 贡献准则 先说.

安装

npm install

测试

单位测试可使用:

make tests

综合测试:

make integration-tests

人们可以利用这些基准对某一变化的业绩进行比较:

make benchmark-tests

校验浏览器的兼容性 :

make browser-tests

检查范围:

make coverage

版本与发布记录

@aeternity/aepp-calldata 共发布 17 个版本,首次发布于 2021/08/04;过去 12 个月发布了 1 个版本。最新版本附带 npm provenance 构建来源证明,可追溯到公开的 CI 构建记录。

版本发布日期距今
1.10.0latest2026/10/2711 天前
1.9.12024/12/091.9 年前
1.9.02024/11/291.9 年前
1.8.02024/08/142 年前
1.7.02024/04/032 年前
1.6.02024/01/232 年前

关于 @aeternity/aepp-calldata 的常见问题

@aeternity/aepp-calldata 是什么?

Atenity 数据序列化库

如何安装 @aeternity/aepp-calldata?

在项目目录运行 npm install @aeternity/aepp-calldata,或使用 pnpm add / yarn add / bun add。

@aeternity/aepp-calldata 支持 TypeScript 吗?

支持。包内自带 TypeScript 类型声明(package.json 声明了 types 入口),安装后即可获得类型提示,无需再安装 @types 包。

@aeternity/aepp-calldata 支持 ESM 还是 CommonJS?

同时提供 ES Module 与 CommonJS 入口,import 和 require() 都可以使用,打包工具会自动选择合适的版本。

@aeternity/aepp-calldata 可以商用吗?

@aeternity/aepp-calldata 使用 ISC 许可。宽松许可:允许商业使用、修改和再分发,通常只需在分发时保留原版权与许可声明。以上为概括,不构成法律意见,请以许可原文为准。

@aeternity/aepp-calldata 的下载量有多少?

根据 npm 官方下载统计,@aeternity/aepp-calldata 在 2026/10/05 – 2026/11/03 这 30 天内被下载 5,532 次,日均约 184 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入,适合横向比较热度,不能直接等同于使用人数。

@aeternity/aepp-calldata 还在维护吗?

最新版本 1.10.0 发布于 2026/10/27(11 天前);至今共发布 17 个版本,其中过去 12 个月发布了 1 个;首次发布于 2021/08/04。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。