forever-moments
Forever Moments social platform on LUKSO - post moments (LSP8 NFTs), mint LIKES tokens, create/join collections, and interact with decentralized social features. USE WHEN: - User wants to post a moment to Forever Moments - User wants to mint/buy LIKES tokens - User wants to create or join a collection - User wants to list a moment for sale - User wants to "like" a moment (send LIKES tokens) - Automated posting with AI-generated images (cron jobs) DON'T USE WHEN: - User hasn't provided or confirmed Universal Profile credentials - DALLE_API_KEY or FM_PRIVATE_KEY not available (check .credentials first) - The operation requires manual user approval for spending LYX - Alternative social platforms are more appropriate SUCCESS CRITERIA: - Moment posted with transaction hash and IPFS CID returned - LIKES minted with confirmation of LYX spent - Collection joined/created with membership confirmed - Image successfully pinned to IPFS before moment creation
Install via CLI (Recommended)
clawhub install openclaw/skills/skills/luksoagent/forever-momentsForever Moments - LUKSO Social Platform
Post authentic moments as LSP8 NFTs, mint LIKES tokens, and engage with the decentralized social graph.
Use When / Don't Use When
USE WHEN
- Posting a moment (with or without image)
- Minting LIKES tokens to tip creators
- Creating/joining collections (curated feeds)
- Listing moments for sale
- Automated AI-image generation and posting (cron)
DON'T USE WHEN
- Credentials missing (FM_PRIVATE_KEY, FM_UP_ADDRESS not set)
- User hasn't approved spending LYX for LIKES minting
- Quick test posts without image (use text-only mode)
- Operations on unsupported chains (LUKSO mainnet only)
Quick Commands
# Post text moment
node scripts/post-moment.js "Title" "Description" "tag1,tag2"
# Post with AI image (Pollinations - FREE)
node scripts/post-moment-ai.js "Title" "Desc" "tags" "image prompt"
# Post with AI image (DALL-E 3 - Premium)
node scripts/post-moment-ai.js --dalle "Title" "Desc" "tags" "prompt"
# Mint LIKES tokens (costs LYX)
node scripts/mint-likes.js 0.5
The 4-Step Relay Flow (Gasless)
All operations follow this pattern:
┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐
│ 1. Pin Image │────▶│ 2. Build Tx │────▶│ 3. Prepare Relay│────▶│ 4. Sign & Submit│
│ (if needed) │ │ │ │ │ │ │
└─────────────────┘ └─────────────────┘ └─────────────────┘ └─────────────────┘
Code Template
// 1. Pin image (optional)
const pinResult = await apiCall('/api/pinata', 'POST', formData);
const imageCid = pinResult.IpfsHash;
// 2. Build transaction
const buildResult = await apiCall('/moments/build-mint', 'POST', {
userUPAddress: UP_ADDRESS,
collectionUP: COLLECTION_ADDRESS,
metadataJson: { LSP4Metadata: { name, description, images: [...] }}
});
// 3. Prepare relay
const prepResult = await apiCall('/relay/prepare', 'POST', {
upAddress: UP_ADDRESS,
controllerAddress: CONTROLLER_ADDRESS,
payload: buildResult.data.derived.upExecutePayload
});
// 4. Sign raw digest (CRITICAL!)
const signature = wallet.signingKey.sign(ethers.getBytes(prepResult.data.hashToSign));
// Submit
const submitResult = await apiCall('/relay/submit', 'POST', {
upAddress: UP_ADDRESS,
payload: buildResult.data.derived.upExecutePayload,
signature: signature.serialized,
nonce: prepResult.data.lsp15Request.transaction.nonce,
validityTimestamps: prepResult.data.lsp15Request.transaction.validityTimestamps,
relayerUrl: prepResult.data.relayerUrl
});
Negative Examples
❌ WRONG: Using wrong signing method
// WRONG - adds EIP-191 prefix
await wallet.signMessage(hashToSign)
// CORRECT - sign raw bytes
wallet.signingKey.sign(ethers.getBytes(hashToSign))
❌ WRONG: Wrong IPFS endpoint
// WRONG
POST /api/agent/v1/pinata
// CORRECT
POST /api/pinata (no /agent/v1 prefix!)
Metadata
Not sure this is the right skill?
Describe what you want to build — we'll match you to the best skill from 16,000+ options.
Find the right skillPaste this into your clawhub.json to enable this plugin.
{
"plugins": {
"official-luksoagent-forever-moments": {
"enabled": true,
"auto_update": true
}
}
}Related Skills
stakingverse-ethereum
Stake ETH on StakeWise (Ethereum liquid staking). Use when the user wants to stake ETH, unstake ETH, or check staked positions on StakeWise V3 vaults. Supports state updates via keeper and harvest proofs from subgraph.
lukso-expert
Comprehensive LUKSO blockchain knowledge base for AI agents. Makes any agent a LUKSO expert — covering all LSP standards (LSP0-LSP28), Universal Profiles, smart contract development, ecosystem projects, and developer tooling. USE WHEN: - Building on LUKSO (smart contracts, dApps, integrations) - Working with Universal Profiles (creation, permissions, metadata) - Deploying or interacting with LSP7/LSP8 tokens - Setting up gasless relay transactions (LSP25) - Managing KeyManager permissions (LSP6) - Working with The Grid (LSP28), Followers (LSP26), or any LSP standard - Answering questions about LUKSO ecosystem, projects, or architecture - Looking up contract addresses, ABIs, or API endpoints - Debugging LUKSO-specific issues (permissions, encoding, gas) DON'T USE WHEN: - Working with non-LUKSO EVM chains (use standard Ethereum patterns) - General Solidity questions unrelated to LSP standards
lsp28-grid
Manage LSP28 The Grid on LUKSO Universal Profiles. Create, update, and manage grid layouts with mini-apps, iframes, and external links. Use when working with Universal Profile grids, LSP28 data encoding, VerifiableURI format, or The Grid feature on LUKSO.
stakingverse-lukso
Stake LYX tokens on Stakingverse (LUKSO liquid staking). Use when the user wants to stake LYX, unstake LYX, claim rewards, or check sLYX balance on Stakingverse. Supports deposit, withdrawal requests, and oracle-claim pattern.