{"chainId":8453,"version":"1.4","address":"0xF3584E339FC3C18B05604555e735Bf9551d33797","registry":"0xA057180d3901A59D135f59Ff51a205D6DCb08801","handle":"0x159edc4e85e7504d9242cec5324db0fb1d8775a6","love":"0x16A7F8CfAD687A87183fCbd1dF7aF09dce05D357","usdc":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913","treasury":"0xedb90e87355732bbcea6bd6f328ed1b2e52a510d","splitBps":1000,"minConsumeBps":1000,"maxPayeeBps":7000,"abi":["event PaidTo(address indexed payer, address indexed payee, bytes32 indexed channel, uint256 amount, bytes32 memo)","event ReferrerBound(address indexed user, address indexed referrer, string code, address indexed by)","function consume(uint256 total, bytes32 memo) returns (address receiver, uint256 toVault, uint256 split)","function pay(address payee, uint256 total, uint16 payeeBps, bytes32 channel, bytes32 memo) returns (address receiver, uint256 toPayee, uint256 split, uint256 toVault)","function payWithCode(address payee, uint256 total, uint16 payeeBps, bytes32 channel, bytes32 memo, string code) returns (address receiver, uint256 toPayee, uint256 split, uint256 toVault)","function payMany(address[] payees, uint16[] bps, uint256 total, bytes32 channel, bytes32 memo) returns (address receiver, uint256 toPayees, uint256 split, uint256 toVault)","function payUsdc(address payee, uint256 usdcAmount, uint16 payeeBps, bytes32 channel, bytes32 memo, bool payeeInUsdc) returns (uint256 total, address receiver, uint256 toPayee, uint256 split, uint256 toVault)","function payUsdcWithAuthorization(address from, address payee, uint256 usdcAmount, uint16 payeeBps, bytes32 channel, bytes32 memo, bool payeeInUsdc, uint256 validAfter, uint256 validBefore, uint8 v, bytes32 r, bytes32 s) returns (uint256 total, address receiver, uint256 toPayee, uint256 split, uint256 toVault)","function payFor(address payer, address payee, uint256 total, uint16 payeeBps, bytes32 channel, bytes32 memo) returns (address receiver, uint256 toPayee, uint256 split, uint256 toVault)","function payUsdcFor(address payer, address payee, uint256 usdcAmount, uint16 payeeBps, bytes32 channel, bytes32 memo, bool payeeInUsdc) returns (uint256 total, address receiver, uint256 toPayee, uint256 split, uint256 toVault)","function authNonce(address payee, uint16 payeeBps, bytes32 channel, bytes32 memo, bool payeeInUsdc) pure returns (bytes32)","function bindByName(string code)","function bindFor(address user, address referrer)","function referrerOf(address user) view returns (address)","function receiverFor(address payer) view returns (address)","function boundReferrer(address) view returns (address)","function receiverOverride(address) view returns (address)","function verifiedHuman(address) view returns (bool)","function requireVerifiedReceiver() view returns (bool)","function setReceiverOverrides(address[] payers, address[] receivers)","function setVerifiedHumans(address[] who, bool verified)","function operator() view returns (address)","function splitBps() view returns (uint16)","function minConsumeBps() view returns (uint16)","function maxPayeeBps() view returns (uint16)","function paused() view returns (bool)","event Paid(address indexed payer, address indexed payee, bytes32 indexed channel, address receiver, uint256 total, uint256 toPayee, uint256 split, uint256 toPlatform, uint256 toVault, bytes32 memo)","function consumeUsdc(uint256 usdcAmount, bytes32 memo) returns (uint256 total, address receiver, uint256 split, uint256 toVault)","function consumeUsdcFor(address payer, uint256 usdcAmount, bytes32 memo) returns (uint256 total, address receiver, uint256 split, uint256 toVault)","function preview(address payer, address payee, uint256 total, uint16 payeeBps) view returns (address receiver, uint256 toPayee, uint256 split, uint256 toPlatform, uint256 toVault)","function platformBps() view returns (uint16)","function trustedCaller(address) view returns (bool)","function setPlatformBps(uint16 bps)","function setTrustedCaller(address who, bool trusted)","event PaidFor(address indexed funder, address indexed payer, bytes32 memo)","function setHandle(address h)","event HandleSet(address indexed handle)"],"memo":"bytes32 = keccak256(utf8 string),用 ethers.id(str)","note":"所有消费走这里:consume 付给协议;pay 付给任何人。核验只看 Paid 事件。","constitution":{"version":"1.3","ratified":"2026-09-26","rules":{"topup":{"split":{"vault":10000},"note":"充值=存钱,100% 进金库,0 抽成;推荐激励只能平台储备额外发"},"consume":{"split":{"vault":8000,"referrer":1000,"platform":1000},"note":"付给协议(买名/主题/锚点/封存)"},"pay":{"split":{"payee":"max 7000","referrer":1000,"platform":1000,"vault":"min 1000"},"note":"付给任何人;收款人盘子内部(合著/血缘/托管/成本)产品自定,用 payMany 列出"},"lineage":{"bps":[1000,300,100,50],"note":"内容血缘 L1–L4 版税,在收款人盘子内;缺位并入 consume"}},"pools":{"rule":"payer-take-out ≤ payer-put-in","returnsFrom":["attention","curator-share-on-claim","referral-on-real-consumption","nav-from-consume"],"note":"投放是下注发现权(正主来认领,策展人拿 10%),不是买一份收益权"},"invariants":["任何池:投放者从池里拿回的 ≤ 投入;回报只能来自池外。做不到就是庞氏","推荐 10% 固定;平台 10% 固定;consume ≥10% 地板;收款人 ≤70% 上限","人的推荐链只有一层。内容血缘可以多层(作品引用作品是客观事实),人拉人不行 —— 多层就是传销结构","平台当收款人时(自营产品)不另抽 platformBps:同一笔钱里平台只出现一次,空出的 10% 归 vault","无推荐人时推荐份额归平台","当场原子结算,合约不留钱;swap/转账不经 Router 不分;禁 payee==payer","参数只在 Router 一处调,站点链上跟随,不硬编码"],"enforced":{"contract":"v1.3","splitBps":1000,"minConsumeBps":1000,"maxPayeeBps":7000,"platformBps":1000},"pending":null}}