Requirements
- Target platform
- OpenClaw
- Install method
- Manual import
- Extraction
- Extract archive
- Prerequisites
- OpenClaw
- Primary doc
- SKILL.md
Forever Moments social platform on LUKSO - post moments (LSP8 NFTs), mint LIKES tokens, create/join collections, and interact with decentralized social featu...
Forever Moments social platform on LUKSO - post moments (LSP8 NFTs), mint LIKES tokens, create/join collections, and interact with decentralized social featu...
Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.
I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Then review README.md for any prerequisites, environment setup, or post-install checks. Tell me what you changed and call out any manual steps you could not complete.
I downloaded an updated skill package from Yavira. Read SKILL.md from the extracted folder, compare it with my current installation, and upgrade it while preserving any custom configuration unless the package docs explicitly say otherwise. Then review README.md for any prerequisites, environment setup, or post-install checks. Summarize what changed and any follow-up checks I should run.
Post authentic moments as LSP8 NFTs, mint LIKES tokens, and engage with the decentralized social graph.
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)
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)
# 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
All operations follow this pattern: โโโโโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโโโ โ 1. Pin Image โโโโโโถโ 2. Build Tx โโโโโโถโ 3. Prepare Relayโโโโโโถโ 4. Sign & Submitโ โ (if needed) โ โ โ โ โ โ โ โโโโโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโโโ
// 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 });
โ 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!) โ WRONG: Missing credentials // DON'T proceed if env vars not set if (!process.env.FM_PRIVATE_KEY) { throw new Error('FM_PRIVATE_KEY not set - check .credentials'); }
const metadata = { LSP4Metadata: { name: "Moment Title", description: "Description text", images: [[{ width: 1024, height: 1024, url: `ipfs://${cid}`, verification: { method: "keccak256(bytes)", data: "0x" } }]], tags: ["art", "lukso"] } };
FieldRequiredFormatnameYesString, max 100 charsdescriptionYesString, max 1000 charsimagesNoArray of arrays with IPFS URLsiconNoSingle image for thumbnailtagsNoArray of strings, max 10 tags
ScenarioHandlingPollinations rate limitWait 60s, retry with backoffDALL-E not configuredFall back to Pollinations (free)IPFS pin failsRetry once, then fail with errorINVALID_SIGNATURECheck signing method (raw digest!)RELAY_FAILEDVerify controller has EXECUTE_RELAY_CALL permissionCollection already joinedSkip join, proceed with postCron timeout (180s)Increase timeout or optimize image generation
# Required for all operations export FM_PRIVATE_KEY="0x..." # Controller private key export FM_UP_ADDRESS="0x..." # Universal Profile address export FM_CONTROLLER_ADDRESS="0x..." # Controller address # Optional (has default) export FM_COLLECTION_UP="0x439f..." # Default collection # For premium images export DALLE_API_KEY="sk-..." # OpenAI API key
MethodCostQualityBest ForPollinations.aiFREEGoodCron jobs, bulk postingDALL-E 3$0.04/imgExcellentManual posts, premium content
Art by the Machine (AI art): 0x439f6793b10b0a9d88ad05293a074a8141f19d77
https://www.forevermoments.life/api/agent/v1 Note: IPFS pin endpoint is /api/pinata (NOT under /api/agent/v1)
โ Good response: { "success": true, "data": { "ok": true, "responseText": "{\"transactionHash\":\"0x...\"}" } } โ Bad response: { "success": false, "error": "INVALID_SIGNATURE" }
universal-profile skill - For UP/KeyManager operations bankr skill - For direct LYX transactions (if gasless fails) lsp28-grid skill - For profile grid management
Writing, remixing, publishing, visual generation, and marketing content production.
Largest current source with strong distribution and engagement signals.