@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.6 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","txOptions","isAddress","SdkError","err","maxFeePerGas","maxPriorityFeePerGas","gasCost","params","contractAddress","getContract","erc20Abi","InsufficientFundsError","EstimateGasExecutionError","tokenId","standard","#transferERC1155","#transferERC721","erc721Contract","erc721Abi","from","erc1155Contract","#estimateERC1155Transfer","#estimateERC721Transfer","KeybanEvmClient","KeybanClientBase","#viem","config","metadataConfig","transport","http","chain","createPublicClient","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-SFTA44SI.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 TransactionOptions,\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 txOptions?: TransactionOptions,\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 maxFeePerGas: txOptions?.maxFeePerGas,\n maxPriorityFeePerGas: txOptions?.maxPriorityFeePerGas,\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 gasCost,\n },\n };\n }\n\n async transferERC20(params: TransferERC20Params): Promise<Hash> {\n const { contractAddress, to, value, txOptions } = 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], txOptions)\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 gasCost,\n },\n };\n }\n\n async transferNft(params: TransferNftParams): Promise<Hash> {\n const { contractAddress, tokenId, to, value, standard, txOptions } = 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 txOptions,\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, txOptions });\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 txOptions,\n }: Omit<TransferNftParams, \"value\" | \"standard\">): 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(\n [from as `0x${string}`, to as `0x${string}`, tokenId],\n txOptions,\n )\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 txOptions,\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, \"\"], txOptions)\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 gasCost,\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 gasCost,\n },\n };\n }\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 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 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"]}