-
-
Notifications
You must be signed in to change notification settings - Fork 54
Expand file tree
/
Copy pathestimateFeesPerGas.tsx
More file actions
111 lines (95 loc) · 2.31 KB
/
estimateFeesPerGas.tsx
File metadata and controls
111 lines (95 loc) · 2.31 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
import { option } from 'pastel'
import { z } from 'zod'
import CliAction from '../components/CliAction.js'
import { useAction } from '../hooks/useAction.js'
// Add command description for help output
export const description = 'Estimate the fee per gas for a transaction (EIP-1559 compatible)'
// Options definitions and descriptions
const optionDescriptions = {
rpc: 'RPC endpoint (env: TEVM_RPC)',
type: 'Transaction type (env: TEVM_TYPE)',
}
// Empty args tuple
export const args = z.tuple([])
export const options = z.object({
// ALL PARAMETERS OPTIONAL
type: z
.string()
.optional()
.describe(
option({
description: optionDescriptions.type,
}),
),
// Interactive mode flag
run: z
.boolean()
.default(false)
.describe(
option({
description: 'Run directly without interactive parameter editing (env: TEVM_RUN)',
alias: 'r',
}),
),
// Transport options
rpc: z
.string()
.optional()
.describe(
option({
description: optionDescriptions.rpc,
defaultValueDescription: 'http://localhost:8545',
}),
),
// Output formatting
formatJson: z
.boolean()
.optional()
.describe(
option({
description: 'Format output as JSON (env: TEVM_FORMAT_JSON)',
defaultValueDescription: 'true',
}),
),
})
type Props = {
args: z.infer<typeof args>
options: z.infer<typeof options>
}
// COMPREHENSIVE DEFAULTS
const defaultValues: Record<string, any> = {
type: 'eip1559',
rpc: 'http://localhost:8545',
}
export default function EstimateFeesPerGas({ options }: Props) {
// Use the action hook
const actionResult = useAction({
actionName: 'estimateFeesPerGas',
options,
defaultValues,
optionDescriptions,
// Create params
createParams: (enhancedOptions: Record<string, any>) => {
const params: Record<string, any> = {}
if (enhancedOptions['type']) {
params['type'] = enhancedOptions['type']
}
return params
},
// Execute the action
executeAction: async (client: any, params: any): Promise<any> => {
return await client.estimateFeesPerGas(params)
},
})
// If editor is active, render nothing
if (actionResult.editorActive) {
return null
}
return (
<CliAction
{...actionResult}
targetName={`fees for ${actionResult.options['type'] || 'eip1559'} transactions`}
successMessage="Fee estimation completed successfully!"
/>
)
}