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.8 kB
{"version":3,"sources":["../../../node_modules/.pnpm/@starknet-io+types-js@0.8.4/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","_fees","_params","_txHash","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","key","provider","address","ethPublicKey","signer","Account"],"mappings":"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","file":"starknet-L7RGFFGF.mjs","sourcesContent":[null,"/* eslint-disable @typescript-eslint/no-unused-vars */\nimport { Account } from \"starknet\";\n\nimport {\n type Address,\n EstimateERC20TransferParams,\n EstimateNftTransferParams,\n type FeeDetails,\n FeesEstimation,\n type Hash,\n type Hex,\n KeybanAccount,\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 _fees?: FeeDetails,\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 async signTransaction(_txHash: string): Promise<string[]> {\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 const key = `ecdsa:${this.network}`;\n\n let clientShare = await this.clientShareProvider.get(key);\n if (!clientShare) {\n clientShare = await this.rpcClient.call(\"ecdsa\", \"dkg\");\n await this.clientShareProvider.set(key, 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"]}