On-chain access gates for Pombo channels.
A PomboGate is a minimal per-channel membership contract. Each gated channel deploys one EIP-1167 clone through the factory; the clone address becomes the channel's publisher identity on the Streamr network, and the contract answers two questions:
isValidSignature(hash, signature)(ERC-1271) — is this message from someone who was ever a member? Membership is sticky: leaving, selling the gate asset or letting a subscription expire never invalidates messages already published. Only an explicit ownereraseremoves an author's history.checkAccess(user)— does this user have access right now? This drives encryption-key distribution and UI state in the clients, never the validity of past messages.
| Mode | Access rule |
|---|---|
NONE |
Owner-managed allowlist (closed channel) |
TOKEN_BALANCE |
Hold at least minBalance of an ERC-20 |
NFT_OWNERSHIP |
Hold at least one token of an ERC-721 |
PAID |
Active subscription: price of an ERC-20 per duration, EIP-2612 permit supported |
In holder modes, join() is an optional one-transaction opt-in to permanent
membership — without it, selling the asset also drops the holder's message
history. Owners may appoint moderators (setModerator), who manage
membership but cannot erase history, touch the owner or other moderators, or
appoint moderators.
Polygon PoS (chain 137):
| Contract | Address |
|---|---|
PomboGateFactory |
0x14595B5F192fA56714D1F8821BD1651dC5bFd1aB |
PomboGate implementation |
0xE14fE177F0AC116513b9EB9dB753b9e7b9022817 |
These contracts have not yet been audited.
Built with Foundry.
forge build
forge testDeploy:
forge script script/Deploy.s.sol --rpc-url polygon --private-key $DEPLOYER_KEY --broadcast