全新 Smart Gas 功能上线:在 Tangem Wallet 用稳定币支付网络手续费
Tangem Wallet 现已支持 Smart gas 交易,覆盖 Ethereum、BNB Smart Chain、Polygon、Arbitrum One 和 Base。
许多用户从中心化交易所迁移到自托管钱包时,都会遇到同一个难题:他们把代币提到新钱包,尝试发起转账,却发现无法操作。因为区块链转账需要用网络原生币(如 Ethereum 上的 ETH、BNB Smart Chain 上的 BNB、Polygon 上的 MATIC)支付 Gas 费,而他们手里并没有这些币。
这绝不仅仅是个小麻烦。用户不得不专门去获取一小笔原生币才能转出自己的资产。这意味着要找到支持小额购买的交易所,支付可能高于所需金额的提现手续费,或者找水龙头或朋友帮忙转点币。对许多刚接触自托管的钱包新手来说,这一步就直接劝退了。
我们引入了 Smart gas 交易,彻底消除这道门槛。
什么是 Smart gas 支付?
Smart gas 支付允许用户用主流稳定币(如 USDC 或 USDT)直接支付网络手续费,无需原生币。如果你在支持的网络上持有 USDC 或 USDT,就能直接用它们来支付转账手续费。
举例:Alice 从 Coinbase 提取 100 USDT 到她在 Ethereum 网络上的 Tangem Wallet。她想转 50 USDT 给 Bob,但钱包里没有 ETH 来支付 Gas 费。有了 Smart gas 交易,App 会检测到她的 USDT 余额,并提供用 USDT 支付手续费的选项。Alice 确认并签名后,50 USDT 会转给 Bob,同时约 0.80 美元的 USDT 作为网络手续费自动扣除。整个过程无需 Alice 自己去获取 ETH。
支持的网络与代币
Smart gas 交易现已在主流 EVM 网络上线,这些网络已完成 EIP-7702(Pectra 升级)。我们选择的手续费代币以流动性高、转账 Gas 成本可预测、用户普遍持有的美元稳定币为主,方便用户从交易所提币后直接使用。
网络 | 支持的手续费代币 |
|---|---|
Ethereum | USDC, USDT |
BNB Smart Chain | USDC, BSC-USD |
Polygon | USDC, USDT0 |
Arbitrum One | USDC, USDT0 |
Base | USDC |
Smart gas 交易的底层原理
该功能基于 EIP-7702(“为 EOA 设置代码”),随着 2025 年 5 月 Pectra 升级上线。这一标准极大扩展了 Ethereum 账户的能力。
EIP-7702 的工作机制
传统上,Ethereum 有两类账户:Externally Owned Accounts(EOA),由私钥控制;以及 Contract Accounts,包含可执行代码。EOA 结构简单,可以持有资产并签名交易,但无法执行自定义逻辑。合约账户能运行任意代码,但部署复杂,安全属性也不同。
EIP-7702 填补了这两者之间的空白。它允许 EOA 通过签名授权消息,临时委托给智能合约代码。关键在于,这种授权无需链上交易。用户只需签名消息,该签名可由他人包含在链上交易里。
正因如此,Smart gas 交易成为可能:用户可以授权将 Tangem 的合约逻辑附加到自己账户,无需为授权本身支付 Gas 费。
Tangem 智能合约实现
我们选择自研智能合约,而非直接采用现有方案。市面上的通用实现,要么因冗余设计导致用户 Gas 成本更高,要么功能过多,增加了攻击面,并不适合我们的场景。
我们的方案采用两个合约:
Tangem7702Smart gasExecutor
这是由用户 EOA 委托的合约,主要负责:
- Signature verification — 验证 Smart gas 交易参数确实由账户持有者通过 EIP-712 类型数据签名
- Transaction execution — 执行用户期望的操作(如代币转账)
- Fee compensation — 计算实际消耗的 Gas,并将相应数量的手续费代币转给收款方
合约仅维护极少量存储——只存一个 nonce 用于防止重放攻击。存储布局采用 Solidity 的自定义方式,防止用户账户挂载多个合约时发生冲突。
// Core data structures
struct Transaction {
address to;
uint value;
bytes data;
}
struct Fee {
address feeToken; // Token used for fee payment
uint maxTokenFee; // Maximum fee in token units
uint coinPriceInToken; // Native currency price in token
uint feeTransferGasLimit; // Gas limit for fee transfer
uint baseGas; // Fixed overhead (signature verification, nonce update)
address feeReceiver; // Fee collection address
}
struct Smart gasTransaction {
Transaction transaction;
Fee fee;
uint nonce; // From user's contract storage
}核心常量:
- BASE_GAS = 60,000 — 签名验证、nonce 更新及执行框架的固定 Gas 开销
Tangem7702EntryPoint:入口合约
我们还部署了一个入口合约,作为中继与 Smart gas 交易的交互接口。它的作用很简单但关键:在转发交易执行前,先验证用户地址附加的合约代码是否与我们预期完全一致。
function executeTransaction(
Smart gasTransaction calldata gasslessTx,
bytes calldata signature,
bool forced,
address executor
) externalforced 参数用于控制当手续费转账 Gas 超过 feeTransferGasLimit 时的行为:
- false — 回滚交易(用于 Gas 估算阶段)
- true — 记录事件并继续执行(实际执行时,Gas 已消耗)
这机制保护了我们的中继基础设施。由于我们是先行垫付实际 Gas,再从用户手续费代币余额收取补偿,因此需要确保挂载的合约能正确计算并转账手续费。入口合约保证只与运行我们已审计代码的账户交互。
手续费参数
你在批准 Smart gas 交易时,会签名包含以下内容的消息:
- Fee token:用于支付手续费的稳定币(如 USDC)
- Token price:手续费代币与原生币之间的兑换汇率,用于计算等值成本
- Maximum fee:你愿意支付的手续费上限(Tangem App 会显示该值)
- 其他防重放和交易细节参数
手续费上限让用户可以预知成本。实际收取的手续费会根据真实 Gas 消耗结算,通常低于该上限。
安全模型
我们评估过现有方案,最终选择自研合约,主要出于安全考量。我们的合约专为代币转账和手续费支付设计,功能单一,便于审计和安全验证。
对比项 | ERC-4337 | Tangem 实现 |
|---|---|---|
Gas 开销 | 较高(需 Bundler 基础设施) | 较低(直接执行) |
攻击面 | 更大(功能更复杂) | 极小(单一用途) |
存储冲突风险 | 视实现而定 | 通过自定义存储布局规避 |
可升级性 | 通常包含(有管理员密钥风险) | 不可升级 |
安全审计
该合约已由专注于区块链安全的公司 Pessimistic 审计。完整审计报告可在GitHub 查看。
用户体验
尽管底层技术复杂,用户实际体验却非常简单:
- 在支持的网络中发起转账、兑换、或通过兑换发送
- 如果你有支持的稳定币余额,App 会自动提供用该代币支付手续费的选项
- 你会看到以稳定币计价的手续费上限,并确认交易
- 后台流程:你会分别签名 EIP-7702 授权(将 Tangem 智能合约附加到账户)和 Smart gas 交易参数
- 签名后的数据包发送到我们的后台,由后台提交到区块链网络
- 交易执行,手续费从你的稳定币余额中扣除
对你来说,这就是一次普通的转账,只是全程无需原生币即可完成。
限制与注意事项
目前 Smart gas 仅支持文中列出的主流稳定币。我们选择这些币种,主要考虑流动性、普及度和技术兼容性。其他限制包括:
- 手续费溢价:Smart gas 交易因合约执行和代币价格换算,手续费可能略高于原生币支付。我们已对合约做了优化,尽量降低这部分溢价。
- 网络支持:EIP-7702 仅在已完成 Pectra 升级的网络可用。我们只在同时具备 EIP-7702 支持和稳定币流动性的网络上线此功能。
总结
Smart gas 交易解决了自托管过程中最常见的阻碍之一。借助 EIP-7702,用户只需持有主流代币即可完成转账,无需再为 Gas 费发愁。
对于从交易所迁移过来的用户,提币后即可直接使用资产。对整个加密生态而言,这也是让用户无门槛体验自托管的重要一步,无需先懂 Gas 机制才能掌控自己的资金。