Skip to content

Commit 2350d1a

Browse files
authored
refactor: rename encodeAbi & decodeAbi + add inferred return types to decodeAbiParameters (wevm#85)
* feat: rename encodeAbi/decodeAbi to encodeAbiParameters/decodeAbiParameters; refactor abi decode return type * chore: changeset * lint * chore: update abitype * fix * fix * fix * docs: add getAbiItem * docs: update
1 parent d664ff7 commit 2350d1a

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

54 files changed

+2668
-2278
lines changed

.changeset/lazy-news-do.md

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
---
2+
"viem": patch
3+
---
4+
5+
**Breaking:** Renamed `encodeAbi` & `decodeAbi` to `encodeAbiParameters` & `decodeAbiParameters`, and modified API from named arguments to inplace arguments:
6+
7+
```diff
8+
import {
9+
- encodeAbi,
10+
- decodeAbi,
11+
+ encodeAbiParameters,
12+
+ decodeAbiParameters,
13+
} from 'viem'
14+
15+
-const result = encodeAbi({ params, values })
16+
+const result = encodeAbiParameters(params, values)
17+
18+
-const result = decodeAbi({ params, data })
19+
+const result = decodeAbiParameters(params, data)
20+
```

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ bench
2121
# @wagmi/cli
2222
generated.ts
2323

24+
abi/**
2425
chains/**
2526
contract/**
2627
ens/**

.vscode/settings.json

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,5 +2,8 @@
22
"editor.defaultFormatter": "rome.rome",
33
"editor.formatOnSave": true,
44
"typescript.tsdk": "node_modules/typescript/lib",
5-
"typescript.enablePromptUseWorkspaceTsdk": true
6-
}
5+
"typescript.enablePromptUseWorkspaceTsdk": true,
6+
"[typescript]": {
7+
"editor.defaultFormatter": "rome.rome"
8+
}
9+
}

package.json

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@
3232
"tsup": {
3333
"entry": [
3434
"src/index.ts",
35+
"src/abi.ts",
3536
"src/chains.ts",
3637
"src/contract.ts",
3738
"src/ens.ts",
@@ -43,6 +44,7 @@
4344
]
4445
},
4546
"files": [
47+
"/abi",
4648
"/dist",
4749
"/chains",
4850
"/contract",
@@ -59,6 +61,11 @@
5961
"module": "./dist/index.mts",
6062
"default": "./dist/index.js"
6163
},
64+
"./abi": {
65+
"types": "./dist/abi.d.ts",
66+
"module": "./dist/abi.mts",
67+
"default": "./dist/abi.js"
68+
},
6269
"./chains": {
6370
"types": "./dist/chains.d.ts",
6471
"module": "./dist/chains.mts",
@@ -108,7 +115,7 @@
108115
"dependencies": {
109116
"@noble/hashes": "^1.1.2",
110117
"@wagmi/chains": "~0.2.8",
111-
"abitype": "~0.3.0",
118+
"abitype": "~0.5.0",
112119
"idna-uts46-hx": "^4.1.2",
113120
"isomorphic-ws": "^5.0.0",
114121
"ws": "^8.12.0"

pnpm-lock.yaml

Lines changed: 4 additions & 4 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

site/.vitepress/sidebar.ts

Lines changed: 34 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,6 @@ export const sidebar: DefaultTheme.Sidebar = {
4242
},
4343
{
4444
text: 'Public Actions',
45-
collapsible: true,
4645
collapsed: true,
4746
items: [
4847
{ text: 'Introduction 🚧', link: '/docs/actions/public/introduction' },
@@ -179,7 +178,6 @@ export const sidebar: DefaultTheme.Sidebar = {
179178
},
180179
{
181180
text: 'Wallet Actions',
182-
collapsible: true,
183181
collapsed: true,
184182
items: [
185183
{ text: 'Introduction', link: '/docs/actions/wallet/introduction' },
@@ -261,7 +259,6 @@ export const sidebar: DefaultTheme.Sidebar = {
261259
},
262260
{
263261
text: 'Test Actions',
264-
collapsible: true,
265262
collapsed: true,
266263
items: [
267264
{ text: 'Introduction', link: '/docs/actions/test/introduction' },
@@ -378,7 +375,6 @@ export const sidebar: DefaultTheme.Sidebar = {
378375
},
379376
{
380377
text: 'Contract',
381-
collapsible: true,
382378
collapsed: true,
383379
items: [
384380
{ text: 'Introduction', link: '/docs/contract/introduction' },
@@ -431,8 +427,8 @@ export const sidebar: DefaultTheme.Sidebar = {
431427
text: 'Encoding',
432428
items: [
433429
{
434-
text: 'decodeAbi',
435-
link: '/docs/contract/decodeAbi',
430+
text: 'decodeAbiParameters',
431+
link: '/docs/contract/decodeAbiParameters',
436432
},
437433
{
438434
text: 'decodeDeployData',
@@ -455,8 +451,8 @@ export const sidebar: DefaultTheme.Sidebar = {
455451
link: '/docs/contract/decodeFunctionResult',
456452
},
457453
{
458-
text: 'encodeAbi',
459-
link: '/docs/contract/encodeAbi',
454+
text: 'encodeAbiParameters',
455+
link: '/docs/contract/encodeAbiParameters',
460456
},
461457
{
462458
text: 'encodeDeployData',
@@ -484,7 +480,6 @@ export const sidebar: DefaultTheme.Sidebar = {
484480
},
485481
{
486482
text: 'ENS',
487-
collapsible: true,
488483
collapsed: true,
489484
items: [
490485
{
@@ -508,9 +503,38 @@ export const sidebar: DefaultTheme.Sidebar = {
508503
},
509504
],
510505
},
506+
{
507+
text: 'ABI',
508+
collapsed: true,
509+
items: [
510+
{
511+
text: 'decodeAbiParameters',
512+
link: '/docs/abi/decodeAbiParameters',
513+
},
514+
{
515+
text: 'encodeAbiParameters',
516+
link: '/docs/abi/encodeAbiParameters',
517+
},
518+
{
519+
text: 'getAbiItem',
520+
link: '/docs/abi/getAbiItem'
521+
},
522+
{
523+
text: 'parseAbiItem 🚧',
524+
link: '/docs/abi/parseAbiItem'
525+
},
526+
{
527+
text: 'parseAbiParameter 🚧',
528+
link: '/docs/abi/parseAbiParameter'
529+
},
530+
{
531+
text: 'parseAbiParameters 🚧',
532+
link: '/docs/abi/parseAbiParameters'
533+
}
534+
],
535+
},
511536
{
512537
text: 'Utilities',
513-
collapsible: true,
514538
collapsed: true,
515539
items: [
516540
{
@@ -666,7 +690,6 @@ export const sidebar: DefaultTheme.Sidebar = {
666690
},
667691
{
668692
text: 'Glossary',
669-
collapsible: true,
670693
collapsed: true,
671694
items: [
672695
{ text: 'Terms', link: '/docs/glossary/terms' },

site/docs/contract/decodeAbi.md renamed to site/docs/abi/decodeAbiParameters.md

Lines changed: 31 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
head:
33
- - meta
44
- property: og:title
5-
content: decodeAbi
5+
content: decodeAbiParameters
66
- - meta
77
- name: description
88
content: Decodes ABI encoded data.
@@ -12,32 +12,32 @@ head:
1212

1313
---
1414

15-
# decodeAbi
15+
# decodeAbiParameters
1616

1717
Decodes ABI encoded data using the [ABI specification](https://solidity.readthedocs.io/en/latest/abi-spec.html), given a set of ABI parameters (`inputs`/`outputs`) and the encoded ABI data.
1818

19-
The `decodeAbi` function is used by the other contract decoding utilities (ie. `decodeFunctionData`, `decodeEventLog`, etc).
19+
The `decodeAbiParameters` function is used by the other contract decoding utilities (ie. `decodeFunctionData`, `decodeEventLog`, etc).
2020

2121
## Install
2222

2323
```ts
24-
import { decodeAbi } from 'viem/contract'
24+
import { decodeAbiParameters } from 'viem'
2525
```
2626

2727
## Usage
2828

29-
The `decodeAbi` function accepts:
29+
The `decodeAbiParameters` function takes in two parameters:
3030

31-
- a set of parameters (`params`), in the shape of the `inputs` or `outputs` attribute of an ABI event/function.
31+
- a set of ABI Parameters (`params`), that can be in the shape of the `inputs` or `outputs` attribute of an ABI Item.
3232
- the ABI encoded data (`data`) that correspond to the given `params`.
3333

3434
```ts
35-
import { decodeAbi } from 'viem/contract'
35+
import { decodeAbiParameters } from 'viem'
3636

37-
const values = decodeAbi({
38-
data: '0x0000000000000000000000000000000000000000000000000000000000010f2c',
39-
params: [{ name: 'x', type: 'uint32' }],
40-
})
37+
const values = decodeAbiParameters(
38+
[{ name: 'x', type: 'uint32' }],
39+
'0x0000000000000000000000000000000000000000000000000000000000010f2c',
40+
)
4141
// [69420]
4242
```
4343

@@ -47,32 +47,32 @@ The decoded data. Type is inferred from the ABI.
4747

4848
## Parameters
4949

50-
### data
50+
### params
5151

52-
- **Type**: `Hex`
52+
- **Type**: [`AbiParameter[]`](/TODO)
5353

54-
The ABI encoded data.
54+
The set of ABI parameters to decode against `data`, in the shape of the `inputs` or `outputs` attribute of an ABI event/function.
55+
56+
These parameters must include valid [ABI types](https://docs.soliditylang.org/en/develop/abi-spec.html#types).
5557

5658
```ts
57-
const values = decodeAbi({
58-
data: '0x0000000000000000000000000000000000000000000000000000000000010f2c', // [!code focus]
59-
params: [{ name: 'x', type: 'uint32' }],
60-
})
59+
const values = decodeAbiParameters(
60+
[{ name: 'x', type: 'uint32' }], // [!code focus]
61+
'0x0000000000000000000000000000000000000000000000000000000000010f2c',
62+
)
6163
```
6264

63-
### params
64-
65-
- **Type**: [`AbiParameter[]`](/TODO)
65+
### data
6666

67-
The set of ABI parameters to decode against `data`, in the shape of the `inputs` or `outputs` attribute of an ABI event/function.
67+
- **Type**: `Hex`
6868

69-
These parameters must include valid [ABI types](https://docs.soliditylang.org/en/develop/abi-spec.html#types).
69+
The ABI encoded data.
7070

7171
```ts
72-
const values = decodeAbi({
73-
data: '0x0000000000000000000000000000000000000000000000000000000000010f2c',
74-
params: [{ name: 'x', type: 'uint32' }], // [!code focus]
75-
})
72+
const values = decodeAbiParameters(
73+
[{ name: 'x', type: 'uint32' }],
74+
'0x0000000000000000000000000000000000000000000000000000000000010f2c', // [!code focus]
75+
)
7676
```
7777

7878
## More Examples
@@ -84,10 +84,10 @@ const values = decodeAbi({
8484
```ts [example.ts]
8585
import { abi } from './abi'
8686

87-
const values = decodeAbi({
88-
data: '0x00000000000000000000000000000000000000000000000000000000000001a40000000000000000000000000000000000000000000000000000000000000001000000000000000000000000a5cc3c03994db5b0d9a5eedd10cabab0813678ac',
89-
params: abi[0].outputs
90-
})
87+
const values = decodeAbiParameters(
88+
abi[0].outputs,
89+
'0x00000000000000000000000000000000000000000000000000000000000001a40000000000000000000000000000000000000000000000000000000000000001000000000000000000000000a5cc3c03994db5b0d9a5eedd10cabab0813678ac',
90+
)
9191
// { x: 420n, y: true, z: '0xa5cc3c03994DB5b0d9A5eEdD10CabaB0813678AC' }
9292
```
9393

0 commit comments

Comments
 (0)