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 上看到两笔转账,且没有人能修改比例:它是不可变代码中的常量。
合约#
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)。
结账页面做了什么#

- 报价包含一个新的随机
ref、你的地址和分账合约地址。 - 在签署任何内容之前,买家的浏览器会从 Base 读取分账合约的代码,并将其哈希与已审查的构建进行比较。不一致则停止。
- ETH: 一笔交易,
payNative(merchant, ref)。USDC: 钱包会请求两次:先为分账合约授权恰好的金额,再调用payToken(USDC, merchant, amount, ref)。 - 只有当
Paid事件来自已登记的分账合约(链上重新校验代码哈希,缓存 10 分钟)、携带本报价的ref、你的地址和正确的代币,且手续费恰好等于feeOf(amount)时,RugWard 才会入账。入账金额是实际到达你的金额。 - 经过 30 个区块确认后,账单变为 paid。
重要影响:
- 针对 Base 报价向你的地址进行的 ETH 或 USDC 普通转账 不会被自动识别。如果买家误操作,资金已在你的钱包中;请手动处理(参见未匹配付款)。
- 当报价金额的 99.5% 到达你时,账单即视为已付(买家支付全部 100%)。
- 如果你的收款地址是智能合约钱包,它必须能接收普通 ETH 转账(普通的 Safe 或智能账户可以)。
- 如果买家授权了 USDC 后放弃付款,分账合约上会留下恰好等于该金额的授权额度。它是无害的(只有买家本人能通过
payToken使用它,且只能用于向商户付款),买家可以在 Approvals 中撤销。
自行核验#
任何人都可以用公开工具核验部署,例如 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日