# @exodus/solidity-contract 中文文档

规范地址：https://npmcn.com/package/%40exodus/solidity-contract/

版本：1\.3\.3
npm 元数据更新时间：2026-11-03T13:02:04.878Z
中文译文更新时间：2026-11-14T03:58:44.343Z
软件包许可：MPL-2\.0

本文由上游 README 翻译，可能存在偏差，请结合原文核对 API、命令与配置。版权与许可归原作者所有。

原始 npm 页面：https://www.npmjs.com/package/%40exodus/solidity-contract
原文对照：https://npmcn.com/package/%40exodus/solidity-contract/?lang=original
项目主页：https://github.com/ExodusMovement/assets/tree/master/ethereum/solidity-contract
源码仓库：https://github.com/ExodusMovement/assets

## 关键信息（来自 npm 元数据）

- 包体积（解压后）：50.3 kB，25 个文件
- 模块格式：ES Module
- TypeScript 类型：包内自带
- 运行依赖：3 个
- 首次发布：2019-10-15T20:18:43.617Z
- 最新版本发布：2026-11-03T13:02:04.684Z
- 近 30 天下载量：42250（2026-10-14 至 2026-11-12，npm 官方下载统计）
- 已发布版本数：17（近 12 个月 3 个）

## 中文简介

对象方向智能合同ABI数据构建/分解.

## 安装

```sh
npm install @exodus/solidity-contract
```

也可以使用：`pnpm add @exodus/solidity-contract`、`yarn add @exodus/solidity-contract`、`bun add @exodus/solidity-contract`

## README

# 固态性合同

面向对象的ABI数据构建和剖析Ethereum智能合同.

## API 密码

### `new SolidityContract(abi, address)`

-   `abi`数字 : `Array | String` 合同的ABI,作为一个解析出JSON阵列,或JSON弦.
-   `address`数字 : `String` (可选)

创建新 `SolidityContract` 并且将合同的方法和事件与ABI中的方法和事件结合起来.

### `SolidityContract` 实例属性

-   `contract.abi`数字 : `Array<Object>`

解析的 ABI 阵列传递给构造者 .

* * *

-   `contract.address`数字 : `String`

合同地址串已传递给建筑师 。 这个地址目前没有用.

* * *

-   `contract.methodIds`数字 : `Object<String:Object>`

一个对象映射方法 ID 字符串到ABI 方法对象指定该方法的细节. 所有方法 ID 字符串密钥都是小写十六进制字符串的前缀 `'0x'`。 。 。 .

```js
const { methodId, name, stateMutability, payable, constant, type, inputs, outputs } =
  contract.methodIds['0x01234567']
```

* * *

-   `contract[eventName]`

对于合同的ABI中的每一起事件,合同实例都将事件作为财产增加。 例如,ERC20令牌合同将 `contract.Transfer` 财务报告和审定财务报表 `contract.Approval`。 。 。 .

每个属性都是具有下列属性和方法的物体:

-   `build`数字 : `(...any) => Buffer` 统一
-   `parse`数字 : `(callData: String | Buffer) => Array<any>` 解析 ABI 事件日志数据调用并返回解析值 。 数值的类型取决于ABI规格中的输入参数的类型. 例如,a `string` 类型将返回字符串, a `uint` 将返回基准 10 中的字符串编号, a `bytes` 值将返回 a `Buffer`等 (中文(简体) ). 必须是事件原始的未索引日志数据 .
-   `testInput`数字 : `(String | Buffer) => boolean` 统一
-   `eventId`数字 : `String` 事件 ID 十六进制字符串 .
-   `abi`数字 : `Object` 此事件的ABI 规格传递给构建者 .

* * *

-   `contract.eventIds`数字 : `Object<String:Object>`

与 `contract.methodIds`,但合同活动除外。 固态事件ID以长式表示,为全32字节克查克散列,而不是方法ID所用的短4字节形式.

```js
const { eventId, name, type, inputs, anonymous } =
  contract.eventIds['0xb5bb9d8014a0f9b1d61e21e796d78dccdf1352f23cd32812f4850b878ae4944c']
```

* * *

-   `contract[methodName]`数字 : `Object`

对于合同的ABI上的每一功能,合同实例都添加了作为财产的方法. 例如,一份带有ERC20令牌ABI的即时合同会 `contract.transfer`, (中文(简体) ), `contract.approve`等 (中文(简体) ).

每个属性都是具有下列属性和方法的物体:

-   `build`数字 : `(...any) => Buffer` 构建 ABI 交易数据调用 `methodName` 与所提供的参数。 例如,你可以打电话 `token.transfer('0x' + '0'.repeat(40), 100000)` 用于构建任何ERC20令牌的 100000 Wei 传输数据.
-   `parse`数字 : `(callData: String | Buffer) => Array<any>` 解析 ABI 交易数据调用此函数并返回解析值 。 数值的类型取决于ABI规格中的输入参数的类型. 例如,a `string` 类型将返回字符串, a `uint` 将返回基准 10 中的字符串编号, a `bytes` 值将返回 a `Buffer`等 (中文(简体) ). 必须在不使用 4 方法 ID 前缀字节的情况下提供调用数据 .
-   `testInput`数字 : `(String | Buffer) => boolean` 检查输入数据是否对这种方法有效 .
-   `methodId`数字 : `String` 方法 ID 十六进制字符串.
-   `abi`数字 : `Object` 将这种方法的ABI 规格传递给构造者.

```js
const callData = tokenContract.balanceOf.build(address)
console.log(Buffer.isBuffer(callData)) // true
console.log(tokenContract.balanceOf.testInput(callData)) // true
```

* * *

-   `contract[eventName]`数字 : `Object`

对于合同的ABI中的每一起事件,合同实例都将事件作为财产增加。 例如,一个ERC20固态合同实例 `contract.Transfer`, (中文(简体) ), `contract.Approval`等 (中文(简体) ).

每个属性均与本次事件的ABI 规格对象等同,外加一个 `eventId` 十六进制字符串属性 。 见 `contract.eventIds[eventId]`。 。 。 .

### `SolidityContract` 实例方法

* * *

-   `decodeInput(callData: String | Buffer): { method: string, values: Array<any> }`

解码给定的呼叫数据,并试图确定合同中所使用的方法。 如果成功, 请解码输入参数, 在 `values` 阵列。 如果失败, 则出现错误 .

### `SolidityContract` 静态方法

* * *

-   `SolidityContract.erc20(address: String)`数字 : `SolidityContract`

退回一份合同,执行完整的ERC20令牌标准. `address` 参数是可选的.

* * *

-   `SolidityContract.simpleErc20(address: String)`数字 : `SolidityContract`

返回只执行以下 ERC20 方法和事件的合同:

```
transfer(address,uint256)
balanceOf(address)
Transfer(address,address,uint256)
```

`address` 参数是可选的.

* * *

-   `SolidityContract.simpleErc721(address: String)`数字 : `SolidityContract`

返回只采用下列ERC721方法的合同:

```
ownerOf(uint256)
tokenURI(uint256)
uri(uint256)
symbol()
totalSupply()
safeTransferFrom(address,address,uint256)
```

`address` 参数是可选的.

* * *

## 常见问题

### @exodus/solidity-contract 是什么？

对象方向智能合同ABI数据构建/分解\.

### 如何安装 @exodus/solidity-contract？

在项目目录运行 npm install @exodus/solidity-contract，或使用 pnpm add / yarn add / bun add。

### @exodus/solidity-contract 支持 TypeScript 吗？

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

### @exodus/solidity-contract 支持 ESM 还是 CommonJS？

以 ES Module 形式发布，推荐使用 import 引入。在 CommonJS 项目中，Node\.js 20\.19\+ / 22\.12\+ 可以直接 require\(\) 不含顶层 await 的 ES Module，更早的版本需要改用动态 import\(\)。

### @exodus/solidity-contract 可以商用吗？

@exodus/solidity-contract 使用 MPL-2\.0 许可。弱 Copyleft：可以商用，也可以和闭源代码一起使用；但如果分发时修改了 MPL 授权的文件，这些文件的修改需以 MPL 开源。以上为概括，不构成法律意见，请以许可原文为准。

### @exodus/solidity-contract 的下载量有多少？

根据 npm 官方下载统计，@exodus/solidity-contract 在 2026/10/14 – 2026/11/12 这 30 天内被下载 42,250 次，日均约 1,408 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入，适合横向比较热度，不能直接等同于使用人数。

### @exodus/solidity-contract 还在维护吗？

最新版本 1\.3\.3 发布于 2026/11/03（10 天前）；至今共发布 17 个版本，其中过去 12 个月发布了 3 个；首次发布于 2019/10/16。发布频率只是参考信号：功能稳定的工具可能很少需要更新，建议结合源码仓库的 issue 和提交记录判断。

