UNPKG

@keyban/sdk-base

Version:

Keyban Javascript SDK provides core functionalities for the MPC wallet solution, supporting web and Node.js apps with TypeScript, custom storage, and Ethereum blockchain integration.

1 lines 17.4 kB
{"version":3,"sources":["../../../node_modules/.pnpm/@starknet-io+types-js@0.8.1/node_modules/@starknet-io/types-js/src/api/constants.ts","../src/starknet/account.ts","../src/starknet/signer.ts","../src/starknet/client.ts"],"names":["ETransactionVersion","ETransactionVersion2","ETransactionVersion3","StarknetAccount","KeybanAccount","#account","rpcClient","account","publicKey","message","typedMessage","_to","_value","_txOptions","_params","StarknetSigner","#rpcClient","#clientShare","#publicKey","clientShare","#signHashedMessage","hashedMessage","encode","formatSignature","typedData","accountAddress","msgHash","tData","transactions","details","compiledCalldata","transaction","det","hash","stark","compiledConstructorCalldata","CallData","signatureHex","r","s","secp256k1","yParity","bigIntR","uint256","bigIntS","num","StarknetClient","KeybanClientBase","#rpcProvider","config","metadataConfig","RpcProvider","provider","address","ethPublicKey","signer","Account"],"mappings":"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","file":"starknet-Q5CMNFHK.mjs","sourcesContent":[null,"/* eslint-disable @typescript-eslint/no-unused-vars */\nimport { Account } from \"starknet\";\n\nimport {\n type Address,\n EstimateERC20TransferParams,\n EstimateNftTransferParams,\n FeesEstimation,\n type Hash,\n type Hex,\n KeybanAccount,\n TransactionOptions,\n TransferERC20Params,\n TransferNftParams,\n} from \"~/index\";\nimport { RpcClient } from \"~/rpc\";\n\nexport class StarknetAccount extends KeybanAccount {\n #account: Account;\n\n address: Address;\n publicKey: Hex;\n\n constructor(rpcClient: RpcClient, account: Account, publicKey: Hex) {\n super(rpcClient);\n\n this.#account = account;\n\n this.address = account.address as Address;\n this.publicKey = publicKey;\n }\n\n async signMessage(message: string): Promise<string[]> {\n // From string message to typedData message\n const typedMessage = {\n types: {\n StarknetDomain: [\n { name: \"name\", type: \"shortstring\" },\n { name: \"version\", type: \"shortstring\" },\n { name: \"chainId\", type: \"shortstring\" },\n { name: \"revision\", type: \"shortstring\" },\n ],\n Message: [{ name: \"message\", type: \"string\" }],\n },\n primaryType: \"Message\",\n domain: {\n name: \"StarkNet Message\",\n version: \"1\",\n chainId: \"1\",\n revision: \"1\",\n },\n message: { message },\n };\n // Sign the typedData formatted message\n const signedMessage = (await this.#account.signMessage(\n typedMessage,\n )) as string[];\n return signedMessage;\n }\n\n async transfer(\n _to: Address,\n _value: bigint,\n _txOptions?: TransactionOptions,\n ): Promise<Hash> {\n throw new Error(\"Unimplemented\");\n }\n\n async estimateTransfer(_to: Address): Promise<FeesEstimation> {\n throw new Error(\"Unimplemented\");\n }\n\n async transferERC20(_params: TransferERC20Params): Promise<Hash> {\n throw new Error(\"Unimplemented\");\n }\n\n async estimateERC20Transfer(\n _params: EstimateERC20TransferParams,\n ): Promise<FeesEstimation> {\n throw new Error(\"Unimplemented\");\n }\n\n async transferNft(_params: TransferNftParams): Promise<Hash> {\n throw new Error(\"Unimplemented\");\n }\n async estimateNftTransfer(\n _params: EstimateNftTransferParams,\n ): Promise<FeesEstimation> {\n throw new Error(\"Unimplemented\");\n }\n}\n","import { secp256k1 } from \"@noble/curves/secp256k1\";\nimport {\n ETransactionVersion2,\n ETransactionVersion3,\n} from \"@starknet-io/types-js\";\nimport {\n Call,\n CallData,\n DeclareSignerDetails,\n DeployAccountSignerDetails,\n encode,\n hash,\n InvocationsSignerDetails,\n num,\n Signature,\n SignerInterface,\n stark,\n transaction,\n TypedData,\n typedData as tData,\n Uint256,\n uint256,\n V2DeclareSignerDetails,\n V2DeployAccountSignerDetails,\n V2InvocationsSignerDetails,\n V3DeclareSignerDetails,\n V3DeployAccountSignerDetails,\n V3InvocationsSignerDetails,\n} from \"starknet\";\n\nimport { Hex } from \"~/index\";\nimport { RpcClient } from \"~/rpc\";\n\nexport class StarknetSigner implements SignerInterface {\n #rpcClient: RpcClient;\n #clientShare: string;\n #publicKey: Hex;\n\n constructor(rpcClient: RpcClient, clientShare: string, publicKey: Hex) {\n this.#rpcClient = rpcClient;\n this.#clientShare = clientShare;\n this.#publicKey = publicKey;\n }\n\n async getPubKey(): Promise<string> {\n return this.#publicKey;\n }\n\n async #signHashedMessage(hashedMessage: string): Promise<Signature> {\n return this.#rpcClient\n .call(\n \"ecdsa\",\n \"sign\",\n this.#clientShare,\n encode.removeHexPrefix(encode.sanitizeHex(hashedMessage)),\n )\n .then(formatSignature);\n }\n\n async signMessage(\n typedData: TypedData,\n accountAddress: string,\n ): Promise<Signature> {\n const msgHash = tData.getMessageHash(typedData, accountAddress);\n return this.#signHashedMessage(msgHash);\n }\n\n async signTransaction(\n transactions: Call[],\n details: InvocationsSignerDetails,\n ): Promise<Signature> {\n const compiledCalldata = transaction.getExecuteCalldata(\n transactions,\n details.cairoVersion,\n );\n let msgHash;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (Object.values(ETransactionVersion2).includes(details.version as any)) {\n const det = details as V2InvocationsSignerDetails;\n msgHash = hash.calculateInvokeTransactionHash({\n ...det,\n senderAddress: det.walletAddress,\n compiledCalldata,\n version: det.version,\n });\n } else if (\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n Object.values(ETransactionVersion3).includes(details.version as any)\n ) {\n const det = details as V3InvocationsSignerDetails;\n msgHash = hash.calculateInvokeTransactionHash({\n ...det,\n senderAddress: det.walletAddress,\n compiledCalldata,\n version: det.version,\n nonceDataAvailabilityMode: stark.intDAM(det.nonceDataAvailabilityMode),\n feeDataAvailabilityMode: stark.intDAM(det.feeDataAvailabilityMode),\n });\n } else {\n throw Error(\"unsupported signTransaction version\");\n }\n return this.#signHashedMessage(msgHash);\n }\n\n async signDeployAccountTransaction(\n details: DeployAccountSignerDetails,\n ): Promise<Signature> {\n const compiledConstructorCalldata = CallData.compile(\n details.constructorCalldata,\n );\n let msgHash;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (Object.values(ETransactionVersion2).includes(details.version as any)) {\n const det = details as V2DeployAccountSignerDetails;\n msgHash = hash.calculateDeployAccountTransactionHash({\n ...det,\n salt: det.addressSalt,\n constructorCalldata: compiledConstructorCalldata,\n version: det.version,\n });\n } else if (\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n Object.values(ETransactionVersion3).includes(details.version as any)\n ) {\n const det = details as V3DeployAccountSignerDetails;\n msgHash = hash.calculateDeployAccountTransactionHash({\n ...det,\n salt: det.addressSalt,\n compiledConstructorCalldata,\n version: det.version,\n nonceDataAvailabilityMode: stark.intDAM(det.nonceDataAvailabilityMode),\n feeDataAvailabilityMode: stark.intDAM(det.feeDataAvailabilityMode),\n });\n } else {\n throw Error(\"unsupported signDeployAccountTransaction version\");\n }\n\n return this.#signHashedMessage(msgHash);\n }\n\n async signDeclareTransaction(\n details: DeclareSignerDetails,\n ): Promise<Signature> {\n let msgHash;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (Object.values(ETransactionVersion2).includes(details.version as any)) {\n const det = details as V2DeclareSignerDetails;\n msgHash = hash.calculateDeclareTransactionHash({\n ...det,\n version: det.version,\n });\n } else if (\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n Object.values(ETransactionVersion3).includes(details.version as any)\n ) {\n const det = details as V3DeclareSignerDetails;\n msgHash = hash.calculateDeclareTransactionHash({\n ...det,\n version: det.version,\n nonceDataAvailabilityMode: stark.intDAM(det.nonceDataAvailabilityMode),\n feeDataAvailabilityMode: stark.intDAM(det.feeDataAvailabilityMode),\n });\n } else {\n throw Error(\"unsupported signDeclareTransaction version\");\n }\n\n return this.#signHashedMessage(msgHash);\n }\n}\n\n/**\n * Formats the ECDSA signature to the StarkNet format based on the OZ EthAccount.\n * @param signatureHex - The ECDSA hex signature.\n * @returns - The StarkNet formatted signature.\n */\nfunction formatSignature(signatureHex: Hex): string[] {\n const { r, s } = secp256k1.Signature.fromCompact(signatureHex.slice(2, 130));\n const yParity = Number(`0x${signatureHex.slice(130)}`);\n if (yParity !== 0 && yParity !== 1) {\n throw new Error(\"Invalid yParity value\");\n }\n\n const bigIntR: Uint256 = uint256.bnToUint256(r);\n const bigIntS: Uint256 = uint256.bnToUint256(s);\n if (yParity === undefined) throw Error(\"yParity is required\");\n return [\n num.toHex(bigIntR.low),\n num.toHex(bigIntR.high),\n num.toHex(bigIntS.low),\n num.toHex(bigIntS.high),\n num.toHex(yParity),\n ];\n}\n","import { ETransactionVersion } from \"@starknet-io/types-js\";\nimport { Account, RpcProvider } from \"starknet\";\n\nimport { KeybanClientBase, KeybanClientConfig, MetadataConfig } from \"~/client\";\nimport { Hex } from \"~/index\";\nimport { StarknetAccount } from \"~/starknet/account\";\nimport { StarknetSigner } from \"~/starknet/signer\";\n\nexport class StarknetClient extends KeybanClientBase {\n #rpcProvider: Promise<RpcProvider>;\n\n constructor(\n config: KeybanClientConfig,\n metadataConfig?: Promise<MetadataConfig>,\n ) {\n super(config, metadataConfig);\n\n this.#rpcProvider = this.metadataConfig.then(\n (config) => new RpcProvider({ nodeUrl: config.network.rpcUrl }),\n );\n }\n\n async initialize(): Promise<StarknetAccount> {\n let clientShare = await this.clientShareProvider.get(\"ecdsa\");\n if (!clientShare) {\n clientShare = await this.rpcClient.call(\"ecdsa\", \"dkg\");\n await this.clientShareProvider.set(\"ecdsa\", clientShare);\n }\n\n const [provider, publicKey, address] = await Promise.all([\n this.#rpcProvider,\n this.rpcClient\n .call(\"ecdsa\", \"publicKey\", clientShare)\n // remove the 04 prefix from the public key (it's the ECDSA uncompressed key prefix)\n .then((ethPublicKey): Hex => `0x${ethPublicKey.slice(4)}`),\n this.rpcClient.call(\"account\", \"getAddress\"),\n ]);\n\n const signer = new StarknetSigner(this.rpcClient, clientShare, publicKey);\n\n const account = new Account(\n provider,\n address,\n signer,\n undefined,\n ETransactionVersion.V3,\n );\n\n return new StarknetAccount(this.rpcClient, account, publicKey);\n }\n}\n"]}