Skip to main content
Glama

OpenZeppelin Contracts MCP Server

Official
by OpenZeppelin
signer.ts3.04 kB
import type { ContractBuilder } from './contract'; import { OptionsError } from './error'; import type { Upgradeable } from './set-upgradeable'; import { defineFunctions } from './utils/define-functions'; export const SignerOptions = [false, 'ERC7702', 'ECDSA', 'P256', 'RSA', 'Multisig', 'MultisigWeighted'] as const; export type SignerOptions = (typeof SignerOptions)[number]; export function addSigner(c: ContractBuilder, signer: SignerOptions, upgradeable: Upgradeable): void { if (!signer) return; const signerName = signer === 'MultisigWeighted' ? signers.Multisig.name : signers[signer].name; c.addOverride({ name: signerName }, signerFunctions._rawSignatureValidation); switch (signer) { case 'ERC7702': c.addParent(signers[signer]); if (upgradeable) { throw new OptionsError({ erc7702: 'EOAs can upgrade by redelegating to a new account', upgradeable: 'EOAs can upgrade by redelegating to a new account', }); } break; case 'ECDSA': case 'P256': case 'RSA': case 'Multisig': case 'MultisigWeighted': { signerArgs[signer].forEach(arg => c.addConstructorArgument(arg)); c.addParent( signers[signer], signerArgs[signer].map(arg => ({ lit: arg.name })), ); break; } } } export const signers = { ERC7702: { name: 'SignerERC7702', path: '@openzeppelin/contracts/utils/cryptography/signers/SignerERC7702.sol', }, ECDSA: { name: 'SignerECDSA', path: '@openzeppelin/contracts/utils/cryptography/signers/SignerECDSA.sol', }, P256: { name: 'SignerP256', path: '@openzeppelin/contracts/utils/cryptography/signers/SignerP256.sol', }, RSA: { name: 'SignerRSA', path: '@openzeppelin/contracts/utils/cryptography/signers/SignerRSA.sol', }, Multisig: { name: 'MultiSignerERC7913', path: '@openzeppelin/contracts/utils/cryptography/signers/MultiSignerERC7913.sol', }, MultisigWeighted: { name: 'MultiSignerERC7913Weighted', path: '@openzeppelin/contracts/utils/cryptography/signers/MultiSignerERC7913Weighted.sol', }, }; export const signerArgs: Record<Exclude<SignerOptions, false | 'ERC7702'>, { name: string; type: string }[]> = { ECDSA: [{ name: 'signer', type: 'address' }], P256: [ { name: 'qx', type: 'bytes32' }, { name: 'qy', type: 'bytes32' }, ], RSA: [ { name: 'e', type: 'bytes memory' }, { name: 'n', type: 'bytes memory' }, ], Multisig: [ { name: 'signers', type: 'bytes[] memory' }, { name: 'threshold', type: 'uint64' }, ], MultisigWeighted: [ { name: 'signers', type: 'bytes[] memory' }, { name: 'weights', type: 'uint64[] memory' }, { name: 'threshold', type: 'uint64' }, ], }; export const signerFunctions = defineFunctions({ _rawSignatureValidation: { kind: 'internal' as const, args: [ { name: 'hash', type: 'bytes32' }, { name: 'signature', type: 'bytes calldata' }, ], returns: ['bool'], mutability: 'view' as const, }, });

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/OpenZeppelin/contracts-wizard'

If you have feedback or need assistance with the MCP directory API, please join our Discord server