-
-
Notifications
You must be signed in to change notification settings - Fork 54
Expand file tree
/
Copy pathmine.tsx
More file actions
115 lines (102 loc) · 2.7 KB
/
Copy pathmine.tsx
File metadata and controls
115 lines (102 loc) · 2.7 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
112
113
114
115
import type { MineParams, MineResult } from '@tevm/actions'
import { option } from 'pastel'
import { z } from 'zod'
import CliAction from '../components/CliAction.js'
import { envVar, useAction } from '../hooks/useAction.js'
// Add command description for help output
export const description = 'Mine new blocks on the blockchain (for development and testing)'
// Options definitions and descriptions
const optionDescriptions = {
rpc: 'RPC endpoint (env: TEVM_RPC)',
blockCount: 'Number of blocks to mine (env: TEVM_BLOCK_COUNT)',
interval: 'Interval between block timestamps in seconds (env: TEVM_INTERVAL)',
}
// Empty args tuple
export const args = z.tuple([])
export const options = z.object({
// Interactive mode flag (run directly without interactive editor)
run: z
.boolean()
.default(false)
.describe(
option({
description: 'Run directly without interactive parameter editing (env: TEVM_RUN)',
alias: 'r',
}),
),
// Transport options
rpc: z
.string()
.default(envVar('rpc') || 'http://localhost:8545')
.describe(
option({
description: optionDescriptions.rpc,
defaultValueDescription: 'http://localhost:8545',
}),
),
// Mining options
blockCount: z
.number()
.optional()
.describe(
option({
description: optionDescriptions.blockCount,
}),
),
interval: z
.number()
.optional()
.describe(
option({
description: optionDescriptions.interval,
}),
),
// Output formatting
formatJson: z
.boolean()
.default(envVar('format_json') !== 'false')
.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>
}
// Default values for all parameters
const defaultValues: Record<string, any> = {
rpc: 'http://localhost:8545',
blockCount: 1,
interval: 1,
}
export default function Mine({ options }: Props) {
// Use the action hook with inlined createParams and executeAction
const actionResult = useAction<MineParams, MineResult>({
actionName: 'mine',
options,
defaultValues,
optionDescriptions,
// Inlined createParams function
createParams: (enhancedOptions: Record<string, any>): MineParams => {
return {
blockCount: enhancedOptions['blockCount'] ?? 1,
interval: enhancedOptions['interval'] ?? 1,
}
},
// Inlined executeAction function
executeAction: async (client: any, params: MineParams): Promise<MineResult> => {
return await client.tevmMine(params)
},
})
// Render the action UI
return (
<CliAction
{...actionResult}
targetName={`mine ${actionResult.options['blockCount'] || 1} block(s)`}
successMessage="Mining completed successfully!"
/>
)
}