Skip to content
RugWard
☰ 菜单

RugWard Pay

Base 手续费分账合约(0.5%)

Base 上的 ETH 和 USDC 付款如何在买家自己的交易中于链上拆分给你(99.5%)和 RugWard(0.5%),以及如何自行核验该合约。

本页内容

它是什么#

在 Base 上,ETH 和 USDC 付款会经过一个小型、不可变的合约:RugWard Pay 分账合约(splitter)。在买家的单笔交易中,它把 99.5% 发送到你的地址,0.5% 发送到 RugWard 手续费钱包。资金直接从买家转给你;合约从不持有余额。

网络Base(chain id 8453)
分账合约0x476EB0fECACA54d1311DB81bD3523cB0Dc66Dfab
手续费钱包0xd3651425E1942f6b81dE2602093BbaEac466c666
手续费FEE_BPS = 50(0.5%),向下取整
运行时代码哈希0xfbeadea59a5f03449a5e59bf11709160e03040568062bb2f0ba8fa779b8fd64d
经由它的资产仅 ETH-8453 和 USDC-8453

只有 Base 使用分账合约。 在所有其他网络(Bitcoin、Monero、Solana、Ethereum、Arbitrum、BNB Chain、Polygon)上,付款直接进入你的地址,没有链上拆分,也不收 RugWard 手续费(上线优惠)。Base 上不提供 USDT。

为什么用分账合约#

手续费在付款时于链上透明收取,RugWard 从不经手你的资金。你和买家都能在 BaseScan 上看到两笔转账,且没有人能修改比例:它是不可变代码中的常量。

合约#

RugWardPaySplitter (public interface)
uint256 public constant FEE_BPS = 50;        // 0.5 %
address public immutable feeWallet;          // 0xd3651425E1942f6b81dE2602093BbaEac466c666

event Paid(bytes32 indexed ref, address indexed merchant, address indexed token,
           address payer, uint256 amount, uint256 fee);   // token = 0x0 for ETH

function feeOf(uint256 amount) public pure returns (uint256);   // amount * 50 / 10000, rounded down
function payNative(address merchant, bytes32 ref) external payable;
function payToken(IERC20 token, address merchant, uint256 amount, bytes32 ref) external;
  • payNative:买家发送 ETH;合约在同一次调用中把 value − fee 转给你,把 fee 转给手续费钱包。
  • payToken:买家为分账合约授权恰好等于金额的额度后,合约通过 transferFrom 把 amount − fee 从买家转给你,把 fee 转给手续费钱包。代币从不停留在合约中。
  • Paid 事件携带报价的随机 32 字节 ref;RugWard 正是通过该事件将付款与账单匹配。
  • 没有所有者、没有管理函数、没有暂停、没有升级,也没有任何提取方式:上面的五个公开函数就是整个合约。付款给零地址或分账合约本身会被回滚(revert)。

结账页面做了什么#

Base 结账
Base 结账页面显示总额、你的 99.5%、0.5% 手续费和分账合约地址
  1. 报价包含一个新的随机 ref、你的地址和分账合约地址。
  2. 在签署任何内容之前,买家的浏览器会从 Base 读取分账合约的代码,并将其哈希与已审查的构建进行比较。不一致则停止。
  3. ETH: 一笔交易,payNative(merchant, ref)。USDC: 钱包会请求两次:先为分账合约授权恰好的金额,再调用 payToken(USDC, merchant, amount, ref)。
  4. 只有当 Paid 事件来自已登记的分账合约(链上重新校验代码哈希,缓存 10 分钟)、携带本报价的 ref、你的地址和正确的代币,且手续费恰好等于 feeOf(amount) 时,RugWard 才会入账。入账金额是实际到达你的金额。
  5. 经过 30 个区块确认后,账单变为 paid。

重要影响:

  • 针对 Base 报价向你的地址进行的 ETH 或 USDC 普通转账 不会被自动识别。如果买家误操作,资金已在你的钱包中;请手动处理(参见未匹配付款)。
  • 当报价金额的 99.5% 到达你时,账单即视为已付(买家支付全部 100%)。
  • 如果你的收款地址是智能合约钱包,它必须能接收普通 ETH 转账(普通的 Safe 或智能账户可以)。
  • 如果买家授权了 USDC 后放弃付款,分账合约上会留下恰好等于该金额的授权额度。它是无害的(只有买家本人能通过 payToken 使用它,且只能用于向商户付款),买家可以在 Approvals 中撤销。

自行核验#

任何人都可以用公开工具核验部署,例如 Foundry 的 cast:

Check the contract yourself (Foundry cast)
RPC=https://mainnet.base.org
SPLITTER=0x476EB0fECACA54d1311DB81bD3523cB0Dc66Dfab

cast keccak $(cast code $SPLITTER --rpc-url $RPC)
# expected: 0xfbeadea59a5f03449a5e59bf11709160e03040568062bb2f0ba8fa779b8fd64d

cast call $SPLITTER "feeWallet()(address)" --rpc-url $RPC
# 0xd3651425E1942f6b81dE2602093BbaEac466c666
cast call $SPLITTER "FEE_BPS()(uint256)" --rpc-url $RPC
# 50
cast call $SPLITTER "feeOf(uint256)(uint256)" 25000000 --rpc-url $RPC
# 125000  (0.125 USDC of a 25 USDC payment)

或在 BaseScan 上打开该地址,查看 Paid 事件和内部转账。

在 Sepolia 上测试#

相同的合约构建已部署在 Ethereum Sepolia 的 0xbcb045fba82ce46ac073ac609cb227d20c450ce5,采用相同的 99.5% / 0.5% 拆分。控制台的测试账单使用它以及免费的测试 ETH 和测试 USDC,让你在收取真实资金之前看到完整流程。

审查状态#

该分账合约已由 RugWard 内部审查,并由我们自己的 Foundry 测试(单元测试和模糊测试)覆盖。它尚未经过独立机构审查。其源码和行为足够小,几分钟即可读完;上面的接口是完整的。

最后更新: 2026年10月30日

Base 手续费分账合约(0.5%) · RugWard 文档 | RugWard