Wallet-Native Assets
资产授权模型
把长期 allowance 和 operator 权限替换为钱包级、可读且有边界的授权。
3 个章节asset-authorization
01
一次性资产拉取
executeWithTokenPull 和 executeWithNftPull 在一次外部调用期间,为唯一 target 建立临时资产权限。目标合约只能拉取指定资产,并受 maxAmount 或 tokenId 约束。
成功执行后上下文被清除;失败则整笔交易回滚。资产合约中不会留下 ERC-20 allowance 或 ERC-721 operator approval。
IWalletAssetPullExecutor
interface IWalletAssetPullExecutor {
function executeWithTokenPull(
address target, bytes calldata data, address asset, uint256 maxAmount
) external;
function executeWithNftPull(
address target, bytes calldata data, address asset, uint256 tokenId
) external;
function tokenPullToCaller(address asset, uint256 amount) external;
function nftPullToCaller(address asset, uint256 tokenId) external;
}02
签名转账
ERC-8112 支持 ERC-20 和原生币的 EIP-712 签名转账;nonce 按 (asset, to) 隔离。ERC-8114 支持 ERC-721 签名转账;nonce 按 (asset, tokenId) 隔离。
签名由钱包 Runtime 按 ERC-1271 语义验证,任何中继者都可以在 deadline 前提交。
Wallet-native signed transfers
interface IERC8112 {
function tokenTransferNonce(address asset, address to) external view returns (uint256);
function tokenTransferWithSig(
address asset, address to, uint256 value, uint256 deadline, bytes calldata signature
) external returns (bool);
}
interface IERC8114 {
function nftTransferNonce(address asset, uint256 tokenId) external view returns (uint256);
function nftTransferWithSig(
address asset, address to, uint256 tokenId, uint256 deadline, bytes calldata signature
) external returns (bool);
}03
如何选择
- 交易与市场即时结算:优先使用 executeWithTokenPull / executeWithNftPull。
- 支付、Gift、Red Packet 或中继转账:使用 ERC-8112 / ERC-8114。
- 多个普通账户调用:由钱包自身使用 executeBatch。
- 不要把 Pull 与签名转账混为 allowance;两者都不会在 Token/NFT 合约留下长期 spender 权限。