使用Tatum SDK调用signAndBroadcast时出现Cannot read properties of undefined错误
解决方案
1. 先确保依赖版本兼容并更新
执行命令更新至最新兼容版本:
npm update @tatumio/tatum @tatumio/evm-wallet-provider
2. 修正代码配置与调用逻辑
问题根源是tatumSdk.walletProvider未初始化成功,主要因新版本配置项变更及不必要的.use()调用导致。调整后的代码如下:
import { TatumSDK, Network, BinanceSmartChain } from "@tatumio/tatum"; import { EvmWalletProvider } from "@tatumio/evm-wallet-provider"; async function bsc() { const tatumSdk = await TatumSDK.init<BinanceSmartChain>({ network: Network.BINANCE_SMART_CHAIN_TESTNET, apiKey: { v4: "!!!API_KEY!!!" }, // 新版本配置项已从configureWalletProviders改为walletProviders walletProviders: [EvmWalletProvider] }); const payload = { privateKey: "!!!PRIVATE_KEY!!!", to: "!!!TO!!!", value: "0.1", maxPriorityFeePerGas: "10", maxFeePerGas: "10", gasLimit: "21000" // 显式指定gasLimit,避免自动估算异常 }; // 直接调用signAndBroadcast,无需额外调用.use() const txHash = await tatumSdk.walletProvider.signAndBroadcast(payload); console.log(`交易哈希:${txHash}`); await tatumSdk.destroy(); } bsc();
3. 简化版(无需手动配置钱包提供者)
如果仅针对BSC这类EVM兼容链,Tatum SDK会自动加载对应钱包提供者,可省略手动配置:
import { TatumSDK, Network, BinanceSmartChain } from "@tatumio/tatum"; async function bsc() { const tatumSdk = await TatumSDK.init<BinanceSmartChain>({ network: Network.BINANCE_SMART_CHAIN_TESTNET, apiKey: { v4: "!!!API_KEY!!!" } }); const payload = { privateKey: "!!!PRIVATE_KEY!!!", to: "!!!TO!!!", value: "0.1", maxPriorityFeePerGas: "10", maxFeePerGas: "10", gasLimit: "21000" }; // 使用tatumSdk.wallet直接调用方法 const txHash = await tatumSdk.wallet.signAndBroadcast(payload); console.log(`交易哈希:${txHash}`); await tatumSdk.destroy(); } bsc();
问题原因分析
- 配置项名称变更:旧版本的
configureWalletProviders在最新版Tatum SDK中已替换为walletProviders,导致钱包提供者未被正确注入 - 不必要的
.use()调用:当仅配置单个钱包提供者时,无需调用.use()切换,直接调用方法即可 - 依赖版本不匹配:未同步更新
@tatumio/tatum与@tatumio/evm-wallet-provider版本,导致API不兼容
内容的提问来源于stack exchange,提问作者WeMakeBest
相关产品推荐
相关产品推荐

