Tangem Wallet 推出 Smart Gas:用稳定币支付网络手续费
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,就能直接用它们支付交易 Gas 费。
举例:Alice 从 Coinbase 提取 100 USDT 到她在 Ethereum 网络上的 Tangem Wallet。她想转 50 USDT 给 Bob,但钱包里没有 ETH 无法支付 Gas 费。通过 Smart gas 交易,App 会检测到她的 USDT 余额,并提供用 USDT 支付手续费的选项。Alice 确认并签名后,50 USDT 会转给 Bob,同时约 0.80 美元的 USDT 作为网络手续费被扣除。她全程无需准备 ETH。
支持的网络与代币
Smart gas 交易目前支持已升级 EIP-7702(Pectra 升级)的主流 EVM 网络。我们优先选择流动性高、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 有两类账户:由私钥控制的外部账户(EOA),和包含可执行代码的合约账户。EOA 简单,只能持有资产和签名交易,无法执行自定义逻辑;合约账户能执行任意代码,但需要部署,安全属性也不同。
EIP-7702 弥合了两者的差距。它允许 EOA 通过签署授权消息,临时委托智能合约代码。关键是,这种授权不需要链上交易。用户只需签名,别人也能用这个签名发起交易。
这就是 Smart gas 交易成为可能的原因:用户可以授权把 Tangem 的合约逻辑临时附加到账户,无需为授权本身支付 Gas 费。
Tangem 智能合约实现
我们选择自研智能合约,而非直接采用现有方案。市面上的通用实现不是用户成本更高(有额外开销),就是功能过多导致攻击面扩大,不适合我们的场景。
我们的实现采用了两个合约:
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
) external其中 forced 参数用于控制当手续费转账消耗的 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 交易消除了自托管过程中最让人头疼的“Gas 门槛”。借助 EIP-7702,我们让用户仅凭已有代币即可完成链上操作。
对于从交易所转入的钱包用户来说,提币后资产即可直接使用。对整个生态而言,这是让加密基础设施更贴近用户、无需先懂 Gas 机制就能自由转账的重要一步。