ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

OpenHuman 本地多链加密钱包模块解析:密钥托管、prepare-confirm-execute 转账流与 Agent 工具面

OpenHuman 本地多链加密钱包模块解析:密钥托管、prepare-confirm-execute 转账流与 Agent 工具面 OpenHuman 本地多链加密钱包模块解析密钥托管、prepare-confirm-execute 转账流与 Agent 工具面【免费下载链接】openhumanOpenHuman is an open source personal AI for Mac, Windows and Linux — local-first memory, agent orchestration, and deep research.项目地址: https://gitcode.com/GitHub_Trending/op/openhuman本文深入解析 OpenHuman本地优先的开源个人 AI 助手中由核心层自有的多链加密钱包模块 ——src/openhuman/web3/wallet。该模块承担密钥/账户管理与最基础的链上原语操作原生转账与 ERC20/SPL/TRC20/BEP20 代币转账是 swap、bridge、dapp 等高层 DeFi 能力的地基。读完本文你将掌握该钱包的持久化与密钥托管机制、跨 EVM/BTC/Solana/Tron 四类链的 prepare→confirm→execute 转账流程、121 个 RPC 控制器与 6 个 Agent 工具的完整调用面以及 quote 防劫持的线程归属设计原理。模块定位刻意保持基础的核心自有钱包wallet是 OpenHuman 核心层直接拥有的本地多链加密钱包其设计哲学是刻意基础deliberately basic只管密钥/账户管理加最原始的在链操作不包含 swap、bridge 或通用合约调用等高层 DeFi 能力。这些高层能力由独立的web3模块提供它构建在钱包的crate 内部签名原语sign_and_broadcast_evm/sign_and_broadcast_solana之上并不属于钱包的 Agent / RPC 暴露面。钱包覆盖的能力边界包括密钥/账户管理加密恢复短语recovery phrase在 OS keychain 或 workspace JSON 中静态加密存储面向 Agent 的只读面地址与余额查询、网络/资产目录、链就绪状态面向 Agent 的写操作prepare→confirm→execute 三步式原生转账与代币转账交易广播与只读交易检查状态status、回执receipt、原始交易查询lookup链覆盖EVMEthereum Base/Arbitrum/Optimism/Polygon/BNB Chain、BitcoinP2WPKH、Solana原生 SPL、Tron原生 TRC20。签名的安全边界非常明确签名与广播都发生在核心进程内由解密后的恢复短语派生密钥完成任何私钥都不经过网络传输。编译期特性门控web3feature从 mod.rs 的模块结构可以看到pub mod wallet;是始终编译的 facade真正的实现子模块全部由默认开启的web3Cargo feature 门控与openhuman::web3、openhuman::web3::x402共享同一特性开关。当特性关闭时stub接管并暴露相同签名的 no-op / 禁用错误实现保证cargo check --no-default-features时调用方代码不漂移。职责全景README 明确列出该模块的 11 项核心职责对应源码实现均可验证持久化 onboarding 状态consent 标记、助记词词数、设置来源生成/导入、每条链恰好一个派生账户以及加密恢复短语密钥托管优先级加密助记词优先存 OS keychain加载/保存时自动把秘密从wallet-state.json迁入 keychain无 keychain 的无头环境回退到 JSON只读钱包信息状态、各账户原生余额EVM 实时读取其余链由 provider 门控、支持资产目录、各网络默认值RPC/浏览器/能力标记、逐链就绪状态预构建转账报价经过校验、费用预估、带 TTL 的 prepared-quote必须显式确认才能执行签名与广播按链签名并广播已确认的 quote失败时恢复 quote 并刷新 TTL 以保持可重试quote 线程绑定把每个 quote 绑定到发起它的聊天线程防止共享频道中泄露的quote_id被其他 Agent 会话劫持双接口暴露6 个 Agent 工具wallet_status、wallet_chain_status、wallet_prepare_transfer、wallet_tx_status、wallet_tx_receipt、wallet_lookup_tx与 12 个wallet.*RPC 控制器crate 内部签名原语sign_and_broadcast_evm/sign_and_broadcast_solana供web3层签名广播外部构造的未签名交易不暴露给 Agent / RPC 面。关键文件地图文件职责mod.rs面向导出的模块根模块文档、mod/pub use重导出、特性门控 facadeops.rs实现拆分于 ops_part_01.rs / ops_part_02.rsOnboarding 元数据 密钥持久化WalletChain/WalletAccount/WalletStatus类型、setup/status、wallet-state.json原子写临时文件 fsync、损坏状态隔离、keychain 加载/保存/迁移、validate_setup、crate 内部secret_materialexecution.rs实现拆分于 execution_part_01.rs / execution_part_02.rs执行面余额/网络默认值/支持资产/链状态读取、prepare_transfer/execute_prepared、tx_status/tx_receipt/lookup_tx、crate 内部sign_and_broadcast_evm/sign_and_broadcast_solana、内存 quote 存储TTL、上限 64、QuoteOwner聊天线程绑定、金额/地址/calldata 校验、费用预估、hex/u256 工具defaults.rsEvmNetwork枚举chain id、默认 RPC、浏览器基址、环境变量、BTC/Solana/Tron 默认 RPC/REST URL、环境变量覆盖解析、逐链/逐网络资产目录abi.rsencode_erc20_transfer—— 通过tinywallet_bus::abi编码transfer(address,uint256)calldataschemas.rsRPC 控制器 schema handle_*分发器委托给ops/executionall_wallet_controller_schemas/all_wallet_registered_controllersrpc.rs网络传输层非 RPC 控制器共享reqwest::Client、JSON-RPC POSTrpc_call、evm_rpc_call、rpc_call_to、REST GET/POST 助手、日志 URL 脱敏transport.rs钱包原语Transport接缝的主机侧端点解析、故障转移与 URL 脱敏tools.rs重导出tools/下的三个 Agent 工具结构体tools/status.rsWalletStatusToolwallet_statustools/chain_status.rsWalletChainStatusToolwallet_chain_statustools/prepare_transfer.rsWalletPrepareTransferToolwallet_prepare_transfertools/tx_query.rsWalletTxStatusTool/WalletTxReceiptTool/WalletLookupTxToolchains/mod.rs逐链执行器命名空间定义每链小型面execute_*_quote、native_balance、validate_*_addresschains/evm.rsEVM 密钥派生BIP-39、EIP-1559/typed-tx 签名、eth_*余额/gas/广播chains/btc.rsBitcoin P2WPKH 派生/签名bitcoincrate、secp256k1、BIP-32 Esplora REST 余额/广播chains/solana.rsSolana ed25519 派生、原生 SPL 转账、JSON-RPC 余额/广播手写 wire format不引入solana-sdkchains/tron.rsTron 派生/签名 TronGrid REST 原生 TRC20 转账test_support.rs#[cfg(test)]共享设施TEST_LOCK、setup_wallet_in确定性 abandon … about 助记词、逐链样本地址密钥与状态持久化keychain 优先、JSON 兜底钱包的持久化状态分三处各有明确职责wallet-state.json非秘密元数据路径为{workspace_dir}/state/wallet-state.json对应源码中的wallet_state_path()ops_part_01.rs。内容为StoredWalletStateconsent_granted、source、mnemonic_word_count、accounts、updated_at_ms以及仅作为兜底的encrypted_mnemonic字段。写入采用严格的原子策略save_stored_wallet_state_unlocked在目标目录创建NamedTempFilewrite_all写入序列化 JSON随后sync_all刷盘sync_parent_dir对父目录执行sync_all确保目录项落盘temp_file.persist(path)原子替换再次sync_parent_dir。整个过程由进程级全局锁WALLET_STATE_FILE_LOCK保护防止多任务并发读写竞态。当文件不可读、JSON 解析失败或校验不通过时文件会被**隔离quarantine**重命名为wallet-state.json.corrupted.timestamp见quarantine_corrupted_wallet_state而不是静默丢弃数据。OS keychain加密助记词的首选归宿keychain 条目键为wallet.mnemonic并通过wallet_user_id()取 workspace 目录的父目录名兜底用 FNV-1a 哈希按 workspace 作用域隔离ops_part_01.rs。加载与保存都会先检查 keyring 可用性与 keyring 同意策略keyring_consent::policy::check_secret_access不可用时优雅降级。keychain 与 JSON 之间存在自动双向迁移逻辑load_stored_wallet_state_unlocked步骤 3keychain 有助记词且 JSON 仍带encrypted_mnemonic→ 清除 JSON 字段并重写keychain 不可用但 JSON 带助记词 → 尝试提升promote到 keychain成功则从 JSON 剥离内存中保留值以便校验通过加载时还会重新探测re-probe一次 keychain兼容并发任务写入尚未可见的场景。保存路径同理keychain 可用时助记词只写 keychainJSON 中剥离秘密字段save_stored_wallet_state_unlocked开头部分。内存 quote 存储不跨重启PreparedTransaction存放在 execution_part_01.rs 的进程内QUOTE_STORELazyMutexVecPreparedTransactionTTL 为 5 分钟QUOTE_TTL_MS 5 * 60 * 1000容量上限 64QUOTE_STORE_CAP 64访问时惰性清理过期项。不持久化进程重启后清空。校验规则validate_setupsetup成功前必须通过严格校验validate_setupconsent_granted必须为true显式同意无默认值助记词词数必须是12/15/18/21/24之一encrypted_mnemonic非空本地可签名钱包的硬性要求每个账户的address与derivation_path非空每条链恰好一个账户EVM、BTC、Solana、Tron 各一。setup还有幂等保护已配置钱包再次 setup 必须显式传forcetrue否则报 wallet is already configured; pass forcetrue to overwrite。WalletSetupParams.force默认false前端需二次确认后才可置真防止静默覆盖。四链一 EVM网络、资产与派生路径EVM 六网络的参数化EVM 是单个WalletChain::Evm变体覆盖 6 条网络由EvmNetwork枚举选择默认ethereum_mainnet其他链忽略evmNetwork字段。从 defaults.rs 可得到完整参数表EvmNetwork变体chain id默认 RPC浏览器 tx 基址环境变量覆盖EthereumMainnet1https://ethereum-rpc.publicnode.cometherscan.io/txOPENHUMAN_WALLET_RPC_EVMBaseMainnet8453https://mainnet.base.orgbasescan.org/txOPENHUMAN_WALLET_RPC_BASEArbitrumOne42161https://arb1.arbitrum.io/rpcarbiscan.io/txOPENHUMAN_WALLET_RPC_ARBITRUMOptimismMainnet10https://mainnet.optimism.iooptimistic.etherscan.io/txOPENHUMAN_WALLET_RPC_OPTIMISMPolygonMainnet137https://polygon-rpc.compolygonscan.com/txOPENHUMAN_WALLET_RPC_POLYGONBscMainnet56https://bsc-dataseed.binance.orgbscscan.com/txOPENHUMAN_WALLET_RPC_BSCRPC 解析逻辑EvmNetwork::rpc_url()优先读对应环境变量非空则用之否则回落默认 URL并以RpcSource::EnvOverride/RpcSource::Default标注来源。这正是测试用 axum mock 指向自定义端点的机制。BTC / Solana / Tron 默认端点BTCEsplora RESThttps://blockstream.info/api可被OPENHUMAN_WALLET_RPC_BTC覆盖SolanaJSON-RPChttps://api.mainnet-beta.solana.comdevnet 为https://api.devnet.solana.comTronTronGrid RESThttps://api.trongrid.io可被OPENHUMAN_WALLET_RPC_TRON覆盖。Solana 还支持集群选择环境变量OPENHUMAN_SOLANA_CLUSTERdevnet切到 DevnetSolanaCluster::Devnet同时驱动 RPC 端点与 USDC SPL mint 地址 —— mainnet mint 为EPjFWdd5...TDt1vdevnet mint 为4zMMC9s...ncDU确保 devnet 上的 x402 支付挑战落链到正确的 mint。派生路径每条链一个确定性地址从 test_support.rs 的样本账户可确认各链的标准 BIP 派生路径链路径说明EVMm/44/60/0/0/0BIP-44Ethereum 币种号 60六条 EVM 网络共享同一地址Bitcoinm/84/0/0/0/0BIP-84原生隔离见证 P2WPKHbc1q…Solanam/44/501/0/0SLIP-0010 ed25519Tronm/44/195/0/0/0BIP-44币种号 195注意余额读取时的特例EVM_BALANCE_NETWORKS常量execution_part_02.rs只把 Ethereum、Base、BNB Chain 三条网络作为独立余额行展示单一派生 EVM 地址在这三条网络上分别读取原生资产ETH/ETH/BNB。资产目录内置资产目录按链/网络组织每条 EVM 网络有默认 ERC-20 目录含 BEP20BTC/Solana/Tron 各有原生资产目录。supported_assets汇总输出find_asset_for_network按链网络符号解析资产asset_symbol缺省时取该链/网络的原生资产。执行面prepare → confirm → execute 三步转账流所有写操作遵循先 prepare 报价、再显式确认执行的安全模式。这是 execution.rs 的核心设计任何写操作必须先 prepare再显式 confirm秘密材料始终保持加密静态存储。第一步prepare_transfer报价PrepareTransferParamscamelCase JSON 反序列化{ chain: evm | btc | solana | tron, toAddress: 目标地址, amountRaw: 链最小单位整数EVM 为 wei, assetSymbol: 可选资产符号缺省为原生资产, evmNetwork: 可选仅 chainevm 时有效缺省 ethereum_mainnet }Agent 工具 prepare_transfer.rs 的参数 schema 与之一一对应evmNetwork的枚举值为ethereum_mainnet/base_mainnet/arbitrum_one/optimism_mainnet/polygon_mainnet/bsc_mainnet。预处理校验execution_part_01.rsvalidate_address按链校验目标地址委托给 vendoredtinywallet_buscrate 的四种地址格式validate_amount解析为非负 u128 整数拒绝 0 金额BTC 拒绝代币转账token transfers are not supported on Bitcoin解析资产native 或 token生成PreparedKind::NativeTransfer/TokenTransfer。报价的estimated_fee_raw按链/类型估算estimated_fee_rawexecution_part_01.rs链 × 类型预估费用EVM 原生转账21,000 gas × 30 Gwei 630,000,000,000,000 weiEVM 代币转账65,000 gas × 30 GweiBTC5,000 satsSolana5,000 lamportsTron 原生1,000,000 SUNTron TRC2015,000,000 SUNBTC 的实际费率常量在 btc.rsDEFAULT_FEE_RATE_SAT_VB 20sat/vB ×TYPICAL_TX_VBYTES 141vbytes单输入双输出 P2WPKH。报价对象PreparedTransaction带quote_id格式q_毫秒时间戳_自增序号、created_at_ms、expires_at_msprepare 时刻 5 分钟、owner内部门控数据不序列化上线。第二步execute_prepared确认 广播ExecutePreparedParams只有两个字段quote_id与confirmed。执行前强制要求confirmed: true否则直接报 execute_prepared requiresconfirmed: true。执行路径的关键设计execution_part_02.rs通过current_owner()读取调用方的APPROVAL_CHAT_CONTEXT原子取走 quotetake_quote_for在广播前先从存储中移除使两个并发确认不可能同时通过get_quote造成重复提交double-submit按链分发到execute_evm_quote/execute_btc_quote/execute_solana_quote/execute_tron_quote失败时恢复 quote 并刷新 TTLexpires_at_ms now QUOTE_TTL_MS避免慢链调用网络超时耗尽原 5 分钟预算后交回一个立即过期的 quote用户可修复原因后重试成功则回填实际费用、置状态为Broadcasted若链执行器未返回 explorer URL 则用explorer_tx_url兜底生成。第三步链上执行器四链签名广播EVMchains/evm.rs的签名广播流程完整可循eth_chainId读取链 ID与目标EvmNetwork.chain_id()比对不一致直接拒绝防止 RPC 端点配置错误导致跨链误发eth_getTransactionCount状态pending取 nonce避免连续两次确认时 nonce 碰撞eth_estimateGas预估 gaseth_gasPrice取 gas price把交易规格与解密后的助记词交给modules::wallet::sign_transaction_in_module在独立钱包模块中派生、编码、签名、组装eth_sendRawTransaction广播返回 tx hash 与模拟费用gas × gasPrice。原生转账直接valueamount, data空ERC20 代币转账则value0dataencode_erc20_transfer(recipient, amount)由 abi.rs 委托tinywallet_bus::abi编码 4 字节选择器 两个 32 字节字。链 ID 校验失败时给出的错误形如EVM RPC chain_id mismatch: rpc reported X but network Y expects Z具备明确的可诊断性。Bitcoinchains/btc.rsEsplora REST 做 UTXO 发现/address/{addr}/utxo与余额/address/{addr}confirmed mempool 余额/txPOST 广播原始交易。收款地址允许任意合法主网地址P2WPKH/P2TR/P2SH 均可编码但发送方地址强制 P2WPKHvalidate_btc_sender_address因为只支持 native segwit 派生签名。Solanachains/solana.rs手写 wire format 组装交易System Program 转账或 SPL token 转账含 ATA 程序与 Token 程序 ID不引入solana-sdk其传递依赖约 150 个 crate。余额走getBalanceJSON-RPC。Tronchains/tron.rsTronGrid REST 的wallet/createtransaction原生与wallet/triggersmartcontractTRC20wallet/broadcasttransaction广播。TRC20 固定fee_limit15,000,000 SUNTRC20_FEE_LIMIT_SUN。节点返回的交易会经tinywallet_bus::tx::tron::verify_contract结构化校验并重算 txid 后才交给签名模块。crate 内部签名原语web3 层的地基sign_and_broadcast_evm/sign_and_broadcast_solana是钱包提供给web3模块的 crate 内部原语对外部构造的未签名交易如 deBridge swap/bridge 的 unsigned tx、dapp 的 calldata做签名广播。EVM 版本签名(to, data, value)Solana 版本签名 hex 编码的VersionedTransaction。它们不出现在 Agent 工具或 RPC 控制器中从而保证私钥永不离开钱包域。交易只读查询tx_status / tx_receipt / lookup_tx三个只读查询覆盖交易的全生命周期tx_status(chain, evmNetwork?, hash)→TxStatusInfo归一化出四种TxStateexecution_part_01.rsPending节点已见但未打包Confirmed已打包且成功Failed已打包但回滚/失败NotFound节点无此 hash 记录。EVM 实现区分逻辑chains/evm.rs先查eth_getTransactionReceiptreceipt 为 null 时再用eth_getTransactionByHash区分 Pending 与 NotFound有回执时读status字段判断成功与否并用eth_blockNumber计算确认数。tx_receipt(chain, evmNetwork?, hash)→TxReceiptInfo成功标志、区块号、gas used、费用fee_raw、以及 provider 原始回执raw透传。lookup_tx(chain, evmNetwork?, hash)→TxLookupInfo按 hash 查原始交易负载raw透传。RPC 控制器与 Agent 工具双面接口RPC 命名空间wallet方法形式openhuman.wallet_functionREADME 列出 12 个控制器当前 schemas.rs 实际注册了13 个含reveal_recovery_phrase函数用途statusOnboarding 状态 安全账户元数据地址setup持久化 consent 派生账户 加密助记词全部输入必填balances各账户原生资产余额EVM 实时其他链 provider 门控network_defaults逐链 RPC/浏览器/能力标记 资产目录supported_assets内置资产目录含默认 EVM ERC-20 / BEP20encode_erc20_transfer编码transfer(address,uint256)calldata仅 EVMchain_status逐链就绪状态 生效中 RPC URLprepare_transfer报价原生/代币转账四条链execute_prepared传confirmed: true确认并执行quoteId发交易tx_status查询交易生命周期状态pending/confirmed/failed/not_foundtx_receipt查询交易回执成功、费用、区块lookup_tx按 hash 查询原始交易负载reveal_recovery_phrase向用户披露恢复短语RevealRecoveryPhraseResult控制器通过all_wallet_registered_controllers注册并在 src/core/all.rs 中接入注册表含 schema 与 capability 描述。Agent 工具6 个工具实现位于 tools/由 tools.rs 重导出全部实现crate::openhuman::tools::traits::Tool并委托给同名wallet::*函数WalletStatusTool→wallet_statusWalletChainStatusTool→wallet_chain_statusWalletPrepareTransferTool→wallet_prepare_transferWalletTxStatusTool→wallet_tx_statusWalletTxReceiptTool→wallet_tx_receiptWalletLookupTxTool→wallet_lookup_tx注意这里没有execute_prepared的 Agent 工具 —— 执行面仅通过 RPC 到达Agent 只能准备/查询不能绕过确认直接发交易。工具的注册链路src/openhuman/tools/ops.rs注册三个钱包工具src/openhuman/agent/agents/loader.rs组装 Agent 工具集时引用src/openhuman/test_support/introspect.rs在测试中做内省。此外 toolpacks/registry.rs 将 6 个钱包工具归入Web3域组可被工具包toolpack按需 withhold 或授予。Quote 归属绑定防劫持设计这是本模块最值得关注的安全设计。quote_id会随 prepared-tx 摘要回到共享聊天频道中同频道的其他调用方可能读到别人的quote_id并尝试驱动其执行。为此prepare 时通过current_owner()execution_part_01.rs从 task-local 的APPROVAL_CHAT_CONTEXT读取thread_idclient_id盖在 quote 的owner字段上execute_prepared时再次读取调用方 owner交给take_quote_for强制与 prepare 时 owner 相等take_quote_forowner 不匹配时返回字节级相同的quote … not found错误与真正的未命中不可区分 —— 不存在枚举 oracle泄露的quote_id无法被探测owner 检查先于状态/过期检查且移除 quote 只发生在检查通过之后误匹配的调用方无法毒化存储消费他人 quote非聊天调用方CLI / 直接 JSON-RPC / 后台 cronowner 为None只能执行同样无聊天上下文时准备的 quote —— 防止后台流程捡走交互用户的 quote 造成权限跌落。对应测试在 execution_tests.rsexecute_prepared_rejects_cross_owner_execution验证跨 owner 拒绝且错误形如 not foundexecute_prepared_owner_mismatch_error_matches_not_found_shape显式断言两种错误字节一致。实现警示README 明确标注current_owner()依赖web_chat::run_chat_task内联.await链。tokio::task_local!能跨.await传播但不跨tokio::spawn—— 若聊天路径把工具循环拆到新 spawn 任务且未重新 scopeAPPROVAL_CHAT_CONTEXT该门控会静默失效。密钥安全边界与签名委托恢复短语在 rest 态加密存储keychain 或 JSON派生前经security::encryption::rpc::decrypt_secret解密解密后的助记词交给钱包模块modules::wallet::attested_proxy构建设置固定的工件代理签名核心进程本身不持有待发交易的私钥EVM 广播前做eth_chainId一致性校验杜绝 RPC 端点错配造成的跨链误发日志中的 RPC URL 统一脱敏为 schemehostrpc.rs的 URL redaction未配置钱包时的错误信息统一为常量WALLET_NOT_CONFIGURED_MESSAGE wallet is not configured; run wallet setup first下游边界把它归类为expected_user_state不进 Sentry。依赖关系与协作模块crate::openhuman::configConfig、config::rpc::load_config_with_timeout解析 workspace 目录与配置用于状态路径、keychain user id 与解密crate::openhuman::security::keyringis_available/get/setOS keychain 存储加密助记词crate::openhuman::security::encryption::rpcencrypt_secret/decrypt_secret链签名器派生前解密恢复短语crate::openhuman::security::approval::APPROVAL_CHAT_CONTEXTtask-local 聊天 ownerthread_id/client_id用于 quote 线程绑定crate::openhuman::tools::traitsTool/ToolResult/ToolCallOptionscrate::core::all与crate::coreRPC 控制器注册表接线crate::rpc::RpcOutcome标准 RPC 返回形态外部 crateethers_core/ethers_signers/coins_bip39EVM ABI BIP-39、bitcoinsecp256k1BTC、ed25519_dalekSolana、sha2、hex、reqwest、serde/serde_json、tempfile、parking_lot、once_cell。被引用方src/openhuman/tools/ops.rs注册 Agent 工具、src/openhuman/agent/agents/loader.rs组装工具集、src/core/all.rs接线控制器、src/openhuman/test_support/introspect.rs测试内省。测试与验证test_support.rs 提供确定性助记词abandon × 11 aboutBIP-39 标准测试词四条链各自派生出固定地址配合setup_wallet_in在临时目录写入已配置钱包状态所有链签名器测试可复现逐链测试文件evm_tests.rs、btc_tests.rs、solana_tests.rs、tron_tests.rs、abi_tests.rs、defaults_tests.rs、rpc_tests.rs、transport_tests.rs、ops_tests.rs、execution_tests.rs、schemas_tests.rs、stub_tests.rs测试通过OPENHUMAN_WALLET_RPC_*环境变量把链端点指向 axum mock验证余额、广播与错误路径。已知约束与注意事项gotchasrpc.rs是网络传输而非 RPC 控制器—— RPC 控制器在schemas.rs。这是对仓库rpc.rs 域 API惯例的唯一例外阅读代码时务必区分quote 原子消费take_quote_for在广播前移除 quote 防并发重复提交失败恢复并刷新 TTLsetup 强约束恰好每链一个账户、词数 12/15/18/21/24、consent 必真、助记词非空EVM 是 6 网络单变体EvmNetwork默认ethereum_mainnet其他链忽略evmNetworkBTC 拒绝代币转账swap/bridge/合约调用不在钱包内位于web3模块RPC 端点可覆盖逐链/逐网络OPENHUMAN_WALLET_RPC_*环境变量测试借此指向 mock日志 URL 脱敏为 schemehostbalances的 provider 门控仅 EVMEthereum mainnet实时读取BTC/Solana/Tron 调用 provider 失败时回退零值并标ProviderStatus::Missing事件面为空模块不发布/订阅任何DomainEvent无bus.rs聊天上下文耦合通过 task-localAPPROVAL_CHAT_CONTEXT完成而非事件总线reveal_recovery_phrase的敏感性披露恢复短语是高风险操作README 未展开其授权细节从代码看它返回RevealRecoveryPhraseResult { phrase, word_count }应在理解其风险边界后再接入上层 UI。小结src/openhuman/web3/wallet是一个刻意克制、安全边界清晰的核心层多链钱包keychain 优先的密钥托管、原子化的状态持久化、prepare→confirm→execute 的强制两步确认流、quote 线程归属绑定防劫持、以及Agent 只能准备/查询、执行仅走 RPC的接口分工。它不追求 DeFi 功能的广度而是把密钥安全 转账原语 可审计的只读查询做到扎实并向上层web3模块提供 crate 内部签名原语构成 OpenHuman 链上能力的信任地基。【免费下载链接】openhumanOpenHuman is an open source personal AI for Mac, Windows and Linux — local-first memory, agent orchestration, and deep research.项目地址: https://gitcode.com/GitHub_Trending/op/openhuman创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表