cairo-vesting
Generate smart contracts for managing gradual ERC-20 token release to beneficiaries using predefined vesting schedules.
Instructions
Make a vesting smart contract that manages the gradual release of ERC-20 tokens to a designated beneficiary based on a predefined vesting schedule.
Returns the source code of the generated contract, formatted in a Markdown code block. Does not write to disk.
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | The name of the contract | |
| startDate | Yes | The timestamp marking the beginning of the vesting period. In HTML input datetime-local format | |
| duration | Yes | The total duration of the vesting period. In readable date time format matching /^(\d+(?:\.\d+)?) +(second|minute|hour|day|week|month|year)s?$/ | |
| cliffDuration | Yes | The duration of the cliff period. Must be less than or equal to the total duration. In readable date time format matching /^(\d+(?:\.\d+)?) +(second|minute|hour|day|week|month|year)s?$/ | |
| schedule | Yes | A vesting schedule implementation, tokens can either be vested gradually following a linear curve or with custom vesting schedule that requires the implementation of the VestingSchedule trait. | |
| info | No | Metadata about the contract and author |
Implementation Reference
- The handler function that implements the core logic of the 'cairo-vesting' tool. It receives vesting parameters, constructs VestingOptions, and generates the Cairo contract code using the external vesting.print function wrapped in safePrintCairoCodeBlock.async ({ name, startDate, duration, cliffDuration, schedule, info }) => { const opts: VestingOptions = { name, startDate, duration, cliffDuration, schedule, info, }; return { content: [ { type: 'text', text: safePrintCairoCodeBlock(() => vesting.print(opts)), }, ], }; },
- Zod schema defining the input shape and descriptions for the 'cairo-vesting' tool parameters.export const vestingSchema = { name: z.string().describe(commonDescriptions.name), startDate: z.string().describe(cairoVestingDescriptions.startDate), duration: z.string().describe(cairoVestingDescriptions.duration), cliffDuration: z.string().describe(cairoVestingDescriptions.cliffDuration), schedule: z.enum(['linear', 'custom']).describe(cairoVestingDescriptions.schedule), info: commonSchema.info, } as const satisfies z.ZodRawShape;
- packages/mcp/src/cairo/tools/vesting.ts:8-32 (registration)Registration function for the 'cairo-vesting' tool on the MCP server, specifying the tool name, prompt, schema, and handler.export function registerCairoVesting(server: McpServer): RegisteredTool { return server.tool( 'cairo-vesting', makeDetailedPrompt(cairoPrompts.Vesting), vestingSchema, async ({ name, startDate, duration, cliffDuration, schedule, info }) => { const opts: VestingOptions = { name, startDate, duration, cliffDuration, schedule, info, }; return { content: [ { type: 'text', text: safePrintCairoCodeBlock(() => vesting.print(opts)), }, ], }; }, ); }