本页面使用机器翻译自英语,可能包含错误或不清楚的语言。如需最准确的信息,请参阅英文原文。由于更新频繁,部分内容可能与英文原文有出入。请加入我们在 Crowdin 上的努力,帮助我们改进本页面的翻译。 (Crowdin translation page, Contributing guide)
caver.abi
通过 caver.abi
软件包,您可以使用 ABI(应用程序二进制接口)对参数进行解码和编码。 这将用于调用已部署智能合约的功能。
编码函数签名
caver.abi.encodeFunctionSignature(functionSignature)
将函数签名编码为 ABI 签名,即函数名称(包括参数类型)的 sha3 哈希值的前 4 个字节。
参数
名称 | 类型 | 描述 |
---|---|---|
functionSignature | string \ | object |
返回价值
类型 | 描述 |
---|---|
string | 函数的 ABI 签名。 |
示例
// From a JSON interface object> caver.abi.encodeFunctionSignature({ name: 'myMethod', type: 'function', inputs: [{ type: 'uint256', name: 'myNumber' },{ type: 'string', name: 'mystring' }]})'0x24ee0097'// From a function signature> caver.abi.encodeFunctionSignature('myMethod(uint256,string)')'0x24ee0097'
encodeEventSignature
caver.abi.encodeEventSignature(eventSignature)
将事件签名编码为 ABI 签名,即事件名称(包括输入参数类型)的 sha3 哈希值。
参数
名称 | 类型 | 描述 |
---|---|---|
eventSignature | string \ | object |
返回价值
类型 | 描述 |
---|---|
string | 事件的 ABI 签名。 |
示例
// From a JSON interface object> caver.abi.encodeEventSignature({ name: 'myEvent', type: 'event', inputs: [{ type: 'uint256', name: 'myNumber' },{ type: 'bytes32', name: 'myBytes' }]})'0xf2eeb729e636a8cb783be044acf6b7b1e2c5863735b60d6daae84c366ee87d97'// From an event signature> caver.abi.encodeEventSignature('myEvent(uint256,bytes32)')'0xf2eeb729e636a8cb783be044acf6b7b1e2c5863735b60d6daae84c366ee87d97'
encodeParameter
caver.abi.encodeParameter(type, parameter)
根据参数类型将参数编码为 ABI 表示法。
参数
名称 | 类型 | 描述 |
---|---|---|
type | string \ | object |
parameter | Mixed | 要编码的实际参数。 |
注意 caver.kct.kip7.create
从 caver-js v1.6.1 开始支持。 有关 tuple
类型的更多详情,请参阅 Solidity Docs。
返回价值
类型 | 描述 |
---|---|
string | ABI 编码参数。 |
示例
> caver.abi.encodeParameter('uint256', '2345675643')'0x000000000000000000000000000000000000000000000000000000008bd02b7b'> caver.abi.encodeParameter('bytes32', caver.utils.rightPad('0xdf3234', 64))'0xdf32340000000000000000000000000000000000000000000000000000000000'> caver.abi.encodeParameter('bytes', '0xdf3234')'0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000003df32340000000000000000000000000000000000000000000000000000000000'> caver.abi.encodeParameter('bytes32[]', [caver.utils.rightPad('0xdf3234', 64), caver.utils.rightPad('0xfdfd', 64)])'0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002df32340000000000000000000000000000000000000000000000000000000000fdfd000000000000000000000000000000000000000000000000000000000000'> caver.abi.encodeParameter('tuple(bytes32,bool)', ['0xabdef18710a18a18abdef18710a18a18abdef18710a18a18abdef18710a18a18', true])'0xabdef18710a18a18abdef18710a18a18abdef18710a18a18abdef18710a18a180000000000000000000000000000000000000000000000000000000000000001'> caver.abi.encodeParameter( { components: [{ name: 'a', type: 'bytes32' }, { name: 'b', type: 'bool' }], name: 'tupleExample', type: 'tuple', }, ['0xabdef18710a18a18abdef18710a18a18abdef18710a18a18abdef18710a18a18', true])'0xabdef18710a18a18abdef18710a18a18abdef18710a18a18abdef18710a18a180000000000000000000000000000000000000000000000000000000000000001'
encodeParameters
caver.abi.encodeParameters(typesArray, parameters)
根据 JSON 接口对象对函数参数进行编码。
参数
名称 | 类型 | 描述 |
---|---|---|
typesArray | Array \ | object |
parameters | Array | 要编码的参数。 |
注意 caver.kct.kip7.create
从 caver-js v1.6.1 开始支持。 有关 tuple
类型的更多详情,请参阅 Solidity Docs。
返回价值
类型 | 描述 |
---|---|
string | ABI 编码参数。 |
示例
> caver.abi.encodeParameters(['uint256','string'], ['2345675643', 'Hello!%'])'0x000000000000000000000000000000000000000000000000000000008bd02b7b0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000748656c6c6f212500000000000000000000000000000000000000000000000000'> caver.abi.encodeParameters(['uint8[]','bytes32'], [['34','255'], caver.utils.rightPad('0x324567fff', 64)])'0x0000000000000000000000000000000000000000000000000000000000000040324567fff00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000002200000000000000000000000000000000000000000000000000000000000000ff'> caver.abi.encodeParameters( ['tuple(bytes32,bool)', 'tuple(bool,address)'], [ ['0xabdef18710a18a18abdef18710a18a18abdef18710a18a18abdef18710a18a18', true], [true, '0x77656c636f6d6520746f20657468657265756d2e'] ])'0xabdef18710a18a18abdef18710a18a18abdef18710a18a18abdef18710a18a180000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000077656c636f6d6520746f20657468657265756d2e'> caver.abi.encodeParameters( [ { components: [{ name: 'a', type: 'bytes32' }, { name: 'b', type: 'bool' }], name: 'tupleExample', type: 'tuple', }, { components: [{ name: 'c', type: 'bool' }, { name: 'd', type: 'address' }], name: 'tupleExample2', type: 'tuple', }, ], [ ['0xabdef18710a18a18abdef18710a18a18abdef18710a18a18abdef18710a18a18', true], [true, '0x77656c636f6d6520746f20657468657265756d2e'] ])'0xabdef18710a18a18abdef18710a18a18abdef18710a18a18abdef18710a18a180000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000077656c636f6d6520746f20657468657265756d2e'
encodeFunctionCall
caver.abi.encodeFunctionCall(jsonInterface, parameters)
使用 JSON 接口对象和给定参数对函数调用进行编码。
参数
名称 | 类型 | 描述 |
---|---|---|
jsonInterface | object | 函数的 JSON 接口对象。 |
parameters | Array | 要编码的参数。 |
返回价值
类型 | 描述 |
---|---|
string | ABI 编码的函数调用,即函数签名 + 参数。 |
示例
> caver.abi.encodeFunctionCall({ name: 'myMethod', type: 'function', inputs: [{ type: 'uint256', name: 'myNumber' },{ type: 'string', name: 'mystring' }]}, ['2345675643', 'Hello!%'])'0x24ee0097000000000000000000000000000000000000000000000000000000008bd02b7b0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000748656c6c6f212500000000000000000000000000000000000000000000000000'
decodeFunctionCall
caver.abi.decodeFunctionCall(abi, functionCall)
从函数或函数 abi 字符串的 abi 对象中解码函数调用,并返回参数。
注意 caver.abi.decodeFunctionCall
自 caver-js v1.6.3 开始支持。
参数
名称 | 类型 | 描述 |
---|---|---|
abi | object | 函数的 abi 对象。 |
functionCall | string | 编码后的函数调用字符串。 |
返回价值
类型 | 描述 |
---|---|
object | 包含纯参数的对象。 您可以使用 result[0] ,因为它可以像数组一样按参数顺序访问。 |
示例
> caver.abi.decodeFunctionCall({ name: 'myMethod', type: 'function', inputs: [{ type: 'uint256', name: 'myNumber' },{ type: 'string', name: 'mystring' }]}, '0x24ee0097000000000000000000000000000000000000000000000000000000008bd02b7b0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000748656c6c6f212500000000000000000000000000000000000000000000000000')Result { '0': '2345675643', '1': 'Hello!%', __length__: 2, myNumber: '2345675643', mystring: 'Hello!%'}
decodeParameter
caver.abi.decodeParameter(type, hexstring)
将 ABI 编码的参数解码为 JavaScript 类型。
参数
名称 | 类型 | 描述 |
---|---|---|
type | string \ | object |
hexstring | Array | 要解码的 ABI 字节代码。 |
注意 caver.kct.kip7.create
从 caver-js v1.6.1 开始支持。 有关 tuple
类型的更多详情,请参阅 Solidity Docs。
返回价值
类型 | 描述 |
---|---|
Mixed | 解码参数。 |
示例
> caver.abi.decodeParameter('uint256', '0x0000000000000000000000000000000000000000000000000000000000000010')'16'> caver.abi.decodeParameter('string', '0x0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000848656c6c6f212521000000000000000000000000000000000000000000000000')'Hello!%!'> caver.abi.decodeParameter('tuple(bytes32,bool)', '0xabdef18710a18a18abdef18710a18a18abdef18710a18a18abdef18710a18a180000000000000000000000000000000000000000000000000000000000000001')[ '0xabdef18710a18a18abdef18710a18a18abdef18710a18a18abdef18710a18a18', true ]> caver.abi.decodeParameter( { components: [{ name: 'a', type: 'bytes32' }, { name: 'b', type: 'bool' }], name: 'tupleExample', type: 'tuple', }, '0xabdef18710a18a18abdef18710a18a18abdef18710a18a18abdef18710a18a180000000000000000000000000000000000000000000000000000000000000001')[ '0xabdef18710a18a18abdef18710a18a18abdef18710a18a18abdef18710a18a18', true, a: '0xabdef18710a18a18abdef18710a18a18abdef18710a18a18abdef18710a18a18', b: true]