@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 • 26.9 kB
Source Map (JSON)
{"version":3,"sources":["../src/evm/account.ts","../src/evm/client.ts"],"names":["ERC1155_ABI_TRANSFER_FROM","KeybanEvmAccount","KeybanAccount","#publicClient","#walletClient","rpcClient","publicClient","walletClient","message","to","value","feeDetails","isAddress","SdkError","err","maxFeePerGas","maxPriorityFeePerGas","gasCost","params","contractAddress","fees","getContract","erc20Abi","InsufficientFundsError","EstimateGasExecutionError","tokenId","standard","#transferERC1155","#transferERC721","erc721Contract","erc721Abi","from","erc1155Contract","#estimateERC1155Transfer","#estimateERC721Transfer","_txHash","KeybanEvmClient","KeybanClientBase","#viem","config","metadataConfig","transport","http","chain","createPublicClient","key","clientShare","publicKey","account","toAccount","publicKeyToAddress","hash","hashMessage","transaction","options","serializer","serializeTransaction","signableTransaction","signature","keccak256","parseSignature","typedDataDefinition","hashTypedData","createWalletClient"],"mappings":"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","file":"evm-HH7W4XO7.mjs","sourcesContent":["import {\n type Chain,\n type ContractFunctionExecutionErrorType,\n erc20Abi,\n erc721Abi,\n EstimateGasExecutionError,\n getContract,\n InsufficientFundsError,\n isAddress,\n type LocalAccount,\n type PublicClient,\n type Transport,\n type WalletClient,\n} from \"viem\";\n\nimport { SdkError } from \"~/errors\";\nimport {\n type Address,\n EstimateERC20TransferParams,\n EstimateNftTransferParams,\n FeesEstimation,\n type Hash,\n type Hex,\n KeybanAccount,\n TransferERC20Params,\n TransferNftParams,\n} from \"~/index\";\nimport { RpcClient } from \"~/rpc\";\n\nconst ERC1155_ABI_TRANSFER_FROM = [\n {\n type: \"function\",\n name: \"safeTransferFrom\",\n inputs: [\n { name: \"from\", type: \"address\", internalType: \"address\" },\n { name: \"to\", type: \"address\", internalType: \"address\" },\n { name: \"id\", type: \"uint256\", internalType: \"uint256\" },\n { name: \"value\", type: \"uint256\", internalType: \"uint256\" },\n { name: \"data\", type: \"bytes\", internalType: \"bytes\" },\n ],\n outputs: [],\n stateMutability: \"nonpayable\",\n },\n];\n\nexport class KeybanEvmAccount extends KeybanAccount {\n #publicClient: PublicClient<Transport, Chain>;\n #walletClient: WalletClient<Transport, Chain, LocalAccount>;\n\n constructor(\n rpcClient: RpcClient,\n publicClient: PublicClient<Transport, Chain>,\n walletClient: WalletClient<Transport, Chain, LocalAccount>,\n ) {\n super(rpcClient);\n\n this.#publicClient = publicClient;\n this.#walletClient = walletClient;\n }\n\n get address(): Address {\n return this.#walletClient.account.address.toLowerCase() as Address;\n }\n\n get publicKey(): Hex {\n return this.#walletClient.account.publicKey.toLowerCase() as Hex;\n }\n\n async signMessage(message: string): Promise<Hex> {\n // For now, even EDDSA messages are prefixed with the Ethereum message prefix.\n // This may need to be updated when the eddsa signer is associated with a specific chain (e.g., Solana).\n return this.#walletClient.signMessage({ message });\n }\n\n async transfer(\n to: Address,\n value: bigint,\n feeDetails?: EvmFeeDetails,\n ): Promise<Hash> {\n if (!isAddress(to)) {\n throw new SdkError(\n SdkError.types.AddressInvalid,\n \"KeybanAccount.transfer\",\n );\n }\n\n if (value <= 0n) {\n throw new SdkError(\n SdkError.types.AmountInvalid,\n \"KeybanAccount.transfer\",\n );\n }\n\n return this.#walletClient\n .sendTransaction({\n to,\n value,\n type: \"eip1559\",\n ...feeDetails,\n })\n .catch((err) => {\n throw err.cause;\n });\n }\n\n async estimateTransfer(to: Address): Promise<FeesEstimation> {\n const [{ maxFeePerGas, maxPriorityFeePerGas }, gasCost] = await Promise.all(\n [\n this.#publicClient.estimateFeesPerGas({ type: \"eip1559\" }),\n this.#publicClient.estimateGas({\n to: to as `0x${string}`,\n account: this.address as `0x${string}`,\n }),\n ],\n );\n\n return {\n maxFees: maxFeePerGas * gasCost,\n details: {\n maxFeePerGas,\n maxPriorityFeePerGas,\n },\n };\n }\n\n async transferERC20(\n params: TransferERC20Params<EvmFeeDetails>,\n ): Promise<Hash> {\n const { contractAddress, to, value, fees } = params;\n\n if (!isAddress(to)) {\n throw new SdkError(\n SdkError.types.AddressInvalid,\n \"KeybanAccount.transferERC20\",\n );\n }\n if (!isAddress(contractAddress)) {\n throw new SdkError(\n SdkError.types.AddressInvalid,\n \"KeybanAccount.transferERC20\",\n );\n }\n if (to === this.address) {\n throw new SdkError(\n SdkError.types.RecipientAddressEqualsSender,\n \"KeybanAccount.transferERC20\",\n );\n }\n\n if (value <= 0n) {\n throw new SdkError(\n SdkError.types.AmountInvalid,\n \"KeybanAccount.transferERC20\",\n );\n }\n\n const erc20Contract = getContract({\n address: contractAddress,\n abi: erc20Abi,\n client: {\n public: this.#publicClient,\n wallet: this.#walletClient,\n },\n });\n\n return erc20Contract.write\n .transfer([to, value], fees)\n .catch((err: ContractFunctionExecutionErrorType) => {\n switch (true) {\n case err.cause.cause instanceof InsufficientFundsError:\n case err.cause.cause instanceof EstimateGasExecutionError:\n throw new SdkError(\n SdkError.types.InsufficientFunds,\n \"KeybanAccount.transferERC20\",\n );\n\n default:\n throw err.cause;\n }\n });\n }\n\n async estimateERC20Transfer(\n params: EstimateERC20TransferParams,\n ): Promise<FeesEstimation> {\n const { contractAddress, to, value } = params;\n const [{ maxFeePerGas, maxPriorityFeePerGas }, gasCost] = await Promise.all(\n [\n this.#publicClient.estimateFeesPerGas({ type: \"eip1559\" }),\n this.#publicClient.estimateContractGas({\n address: contractAddress as `0x${string}`,\n abi: erc20Abi,\n functionName: \"transfer\",\n args: [to as `0x${string}`, value],\n account: this.address as `0x${string}`,\n }),\n ],\n );\n\n return {\n maxFees: maxFeePerGas * gasCost,\n details: {\n maxFeePerGas,\n maxPriorityFeePerGas,\n },\n };\n }\n\n async transferNft(params: TransferNftParams<EvmFeeDetails>): Promise<Hash> {\n const { contractAddress, tokenId, to, value, standard, fees } = params;\n\n if (!isAddress(to)) {\n throw new SdkError(\n SdkError.types.AddressInvalid,\n \"KeybanAccount.transferNft\",\n );\n }\n if (!isAddress(contractAddress)) {\n throw new SdkError(\n SdkError.types.AddressInvalid,\n \"KeybanAccount.transferNft\",\n );\n }\n if (to === this.address) {\n throw new SdkError(\n SdkError.types.RecipientAddressEqualsSender,\n \"KeybanAccount.transferNft\",\n );\n }\n\n if (standard === \"ERC1155\") {\n if (value === undefined) {\n throw new SdkError(\n SdkError.types.AmountRequired,\n \"KeybanAccount.transferNft\",\n );\n }\n if (value <= 0n) {\n throw new SdkError(\n SdkError.types.AmountInvalid,\n \"KeybanAccount.transferNft\",\n );\n }\n return this.#transferERC1155({\n contractAddress,\n tokenId,\n value,\n to,\n fees,\n });\n }\n\n if (standard === \"ERC721\") {\n if (value !== undefined && value !== 1n) {\n throw new SdkError(\n SdkError.types.AmountIrrelevant,\n \"KeybanAccount.transferNft\",\n );\n }\n return this.#transferERC721({ contractAddress, tokenId, to, fees });\n }\n\n throw new SdkError(\n SdkError.types.InvalidNftStandard,\n \"KeybanAccount.transferNft\",\n );\n }\n\n async #transferERC721({\n contractAddress,\n tokenId,\n to,\n fees,\n }: Omit<\n TransferNftParams<EvmFeeDetails>,\n \"value\" | \"standard\"\n >): Promise<Hash> {\n const erc721Contract = getContract({\n address: contractAddress as `0x${string}`,\n abi: erc721Abi,\n client: {\n public: this.#publicClient,\n wallet: this.#walletClient,\n },\n });\n\n const from = this.address;\n return erc721Contract.write\n .transferFrom([from as `0x${string}`, to as `0x${string}`, tokenId], fees)\n .catch((err: ContractFunctionExecutionErrorType) => {\n switch (true) {\n case err.cause.cause instanceof InsufficientFundsError:\n case err.cause.cause instanceof EstimateGasExecutionError:\n throw new SdkError(\n SdkError.types.InsufficientFunds,\n \"KeybanAccount.transferNft\",\n );\n\n default:\n throw err.cause;\n }\n });\n }\n\n async #transferERC1155({\n contractAddress,\n tokenId,\n value,\n to,\n fees,\n }: Omit<TransferNftParams, \"standard\">): Promise<Hash> {\n const erc1155Contract = getContract({\n address: contractAddress as `0x${string}`,\n abi: ERC1155_ABI_TRANSFER_FROM,\n client: {\n public: this.#publicClient,\n wallet: this.#walletClient,\n },\n });\n\n const from = this.address;\n return erc1155Contract.write\n .safeTransferFrom([from, to, tokenId, value, \"\"], fees)\n .catch((err: ContractFunctionExecutionErrorType) => {\n switch (true) {\n case err.cause.cause instanceof InsufficientFundsError:\n case err.cause.cause instanceof EstimateGasExecutionError:\n throw new SdkError(\n SdkError.types.InsufficientFunds,\n \"KeybanAccount.transferNft\",\n );\n\n default:\n throw err.cause;\n }\n });\n }\n\n async estimateNftTransfer(\n params: EstimateNftTransferParams,\n ): Promise<FeesEstimation> {\n const { standard, contractAddress, tokenId, to, value } = params;\n\n if (standard === \"ERC1155\") {\n return this.#estimateERC1155Transfer({\n contractAddress,\n tokenId,\n to,\n value,\n });\n }\n if (standard === \"ERC721\") {\n if (value !== undefined && value !== 1n) {\n throw new SdkError(\n SdkError.types.AmountIrrelevant,\n \"KeybanAccount.transferNft\",\n );\n }\n return this.#estimateERC721Transfer({ contractAddress, tokenId, to });\n }\n throw new SdkError(\n SdkError.types.InvalidNftStandard,\n \"KeybanAccount.estimateNftTransfer\",\n );\n }\n\n async #estimateERC721Transfer({\n contractAddress,\n tokenId,\n to,\n }: Omit<\n EstimateNftTransferParams,\n \"standard\" | \"value\"\n >): Promise<FeesEstimation> {\n const from = this.address;\n const [{ maxFeePerGas, maxPriorityFeePerGas }, gasCost] = await Promise.all(\n [\n this.#publicClient.estimateFeesPerGas({ type: \"eip1559\" }),\n this.#publicClient.estimateContractGas({\n address: contractAddress as `0x${string}`,\n abi: erc721Abi,\n functionName: \"transferFrom\",\n args: [from as `0x${string}`, to as `0x${string}`, tokenId],\n account: this.address as `0x${string}`,\n }),\n ],\n );\n\n return {\n maxFees: maxFeePerGas * gasCost,\n details: {\n maxFeePerGas,\n maxPriorityFeePerGas,\n },\n };\n }\n\n async #estimateERC1155Transfer({\n contractAddress,\n tokenId,\n to,\n value,\n }: Omit<EstimateNftTransferParams, \"standard\">): Promise<FeesEstimation> {\n const from = this.address;\n const [{ maxFeePerGas, maxPriorityFeePerGas }, gasCost] = await Promise.all(\n [\n this.#publicClient.estimateFeesPerGas({ type: \"eip1559\" }),\n this.#publicClient.estimateContractGas({\n address: contractAddress as `0x${string}`,\n abi: ERC1155_ABI_TRANSFER_FROM,\n functionName: \"safeTransferFrom\",\n args: [from, to, tokenId, value, \"\"],\n account: this.address as `0x${string}`,\n }),\n ],\n );\n\n return {\n maxFees: maxFeePerGas * gasCost,\n details: {\n maxFeePerGas,\n maxPriorityFeePerGas,\n },\n };\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n async signTransaction(_txHash: string): Promise<Hex> {\n throw new Error(\"Unimplemented\");\n }\n}\n\nexport type EvmFeeDetails = {\n /**\n * The maximum fee per unit of gas.\n */\n maxFeePerGas: bigint;\n\n /**\n * The maximum priority fee per unit of gas.\n */\n maxPriorityFeePerGas: bigint;\n};\n","import type { Chain, PublicClient, Transport } from \"viem\";\nimport {\n createPublicClient,\n createWalletClient,\n hashMessage,\n hashTypedData,\n http,\n keccak256,\n parseSignature,\n serializeTransaction,\n} from \"viem\";\nimport { publicKeyToAddress, toAccount } from \"viem/accounts\";\nimport * as chains from \"viem/chains\";\n\nimport { KeybanClientBase, KeybanClientConfig, MetadataConfig } from \"~/client\";\nimport { KeybanEvmAccount } from \"~/evm/account\";\nimport { KeybanNetwork } from \"~/network\";\n\nexport class KeybanEvmClient extends KeybanClientBase {\n #viem: {\n chain: Chain;\n transport: Promise<Transport>;\n publicClient: Promise<PublicClient<Transport, Chain>>;\n };\n\n constructor(\n config: KeybanClientConfig,\n metadataConfig?: Promise<MetadataConfig>,\n ) {\n super(config, metadataConfig);\n\n const transport = this.metadataConfig.then((config) =>\n http(config.network.rpcUrl),\n );\n\n const chain = {\n [KeybanNetwork.EthereumAnvil]: chains.anvil,\n [KeybanNetwork.PolygonAmoy]: chains.polygonAmoy,\n [KeybanNetwork.StarknetDevnet]: null,\n [KeybanNetwork.StarknetSepolia]: null,\n [KeybanNetwork.StarknetMainnet]: null,\n [KeybanNetwork.StellarQuickstart]: null,\n [KeybanNetwork.StellarTestnet]: null,\n [KeybanNetwork.StellarMainnet]: null,\n }[this.network]!;\n\n const publicClient = transport.then((transport) =>\n createPublicClient({ chain, transport }),\n );\n\n this.#viem = { chain, transport, publicClient };\n }\n\n async initialize(): Promise<KeybanEvmAccount> {\n const key = `ecdsa:${this.network}`;\n\n let clientShare = await this.clientShareProvider.get(key);\n\n if (!clientShare) {\n clientShare = await this.rpcClient.call(\"ecdsa\", \"dkg\");\n await this.clientShareProvider.set(key, clientShare);\n }\n\n const publicKey = await this.rpcClient.call(\n \"ecdsa\",\n \"publicKey\",\n clientShare,\n );\n\n const account = toAccount({\n address: publicKeyToAddress(publicKey),\n signMessage: async ({ message }) => {\n const hash = hashMessage(message, \"hex\");\n return this.rpcClient.call(\"ecdsa\", \"sign\", clientShare, hash);\n },\n signTransaction: async (transaction, options) => {\n const serializer = options?.serializer ?? serializeTransaction;\n\n // For EIP-4844 Transactions, we want to sign the transaction payload body (tx_payload_body) without the sidecars (i.e., without the network wrapper).\n // See: https://github.com/ethereum/EIPs/blob/e00f4daa66bd56e2dbd5f1d36d09fd613811a48b/EIPS/eip-4844.md#networking\n const signableTransaction =\n transaction.type === \"eip4844\"\n ? { ...transaction, sidecars: false }\n : transaction;\n\n const signature = await this.rpcClient\n .call(\n \"ecdsa\",\n \"sign\",\n clientShare,\n keccak256(serializer(signableTransaction)),\n )\n .then(parseSignature);\n\n return serializer(transaction, signature);\n },\n signTypedData: async (typedDataDefinition) => {\n const hash = hashTypedData(typedDataDefinition);\n return this.rpcClient.call(\"ecdsa\", \"sign\", clientShare, hash);\n },\n });\n\n // Assign the public key to the account\n account.publicKey = publicKey;\n\n const publicClient = await this.#viem.publicClient;\n const walletClient = createWalletClient({\n chain: publicClient.chain,\n transport: await this.#viem.transport,\n account,\n });\n\n return new KeybanEvmAccount(this.rpcClient, publicClient, walletClient);\n }\n}\n"]}