Functional Capabilities
OmniSocial integrates creator-first social features directly into smart contracts to enable on-chain monetization, supporter interactions, and token-gated content.
These features are modular and composable, allowing developers and creators to build flexible monetization experiences across the platform.
💸 Tipping System
The tipping system allows users to send any ERC-20 or native tokens directly to a creator’s smart wallet.
✅ Smart Contract: TippingModule
Key Function:
function tip(address recipient, address token, uint256 amount, string memory message) external payable;
recipient
: OmniWallet address of the content creatortoken
: Address of ERC-20 (oraddress(0)
for native MATIC)amount
: Amount of tokens or ETH sentmessage
: Optional supporter note
🔔 Event:
event TipSent(address indexed sender, address indexed recipient, address token, uint256 amount, string message);
Example Use:
tipping.tip(creatorAddress, address(0), 0.1 ether, "Love your work!");
Tipping can be triggered via UI buttons on posts or profiles.
🔓 Token-Gated Content
Creators can require users to own a specific token or NFT to unlock content.
Smart Logic:
Off-chain content URL is encrypted.
Viewer sends a zero-cost tx to
verifyAccess(address contentId)
to prove NFT/token ownership.Backend or frontend decrypts content if the call succeeds.
✅ Access Check Hook:
function hasAccess(address user, bytes32 contentId) public view returns (bool);
contentId
links to metadata with required token addresses and minimum holdings.
🖼️ EditionDropFactory (ERC-1155)
Creators can launch limited-edition token drops with built-in access control, pricing, and whitelist support.
✅ Smart Contract: EditionDropFactory
Function: createEditionDrop(...)
function createEditionDrop(
string memory name,
string memory symbol,
string memory baseURI,
uint256 pricePerToken,
uint256 maxSupply,
address paymentToken,
address[] calldata whitelist
) external returns (address dropAddress);
name
/symbol
: NFT collection metadatabaseURI
: Metadata template (e.g.ipfs://.../metadata/{id}.json
)pricePerToken
: Cost per NFTmaxSupply
: Total supplypaymentToken
: Token accepted (ERC-20 or address(0))whitelist
: Optional allowlist (can be empty)
🔧 Configure a Drop: Example
dropFactory.createEditionDrop(
"Creator Drop",
"DROP",
"ipfs://Qm123abc/",
10e18, // 10 OMNI
100,
OMNI_TOKEN_ADDRESS,
[0xUser1, 0xUser2]
);
After deployment, the creator can share the drop link. Users who mint are automatically granted access to gated content tagged to that edition.
🧠 Best Practices
Use
.omni
aliasing in UI to simplify addresses for both tips and drops.Combine tipping + edition drops for "support to unlock" campaigns.
Subgraph indexing allows querying all
TipSent
orEditionDrop
events to build analytics dashboards.
📊 Subgraph Query (Recent Tips)
query GetRecentTips {
tipSents(first: 10, orderBy: timestamp, orderDirection: desc) {
sender
recipient
token
amount
message
}
}
Last updated
Was this helpful?