Compute + Storage Integration
Integrates AI inference with decentralized storage for seamless content generation and data processing in AI pipelines.
Install this skill
Security score
The Compute + Storage Integration skill was audited on Feb 25, 2026 and we found 38 security issues across 3 threat categories. Review the findings below before installing.
Categories Tested
Security Issues
Template literal with variable interpolation in command context
| 85 | const response = await fetch(`${endpoint}/images/generations`, { |
Template literal with variable interpolation in command context
| 100 | const tempPath = path.join(os.tmpdir(), `0g-image-${Date.now()}.png`); |
Template literal with variable interpolation in command context
| 115 | if (err) throw new Error(`Merkle tree error: ${err}`); |
Template literal with variable interpolation in command context
| 118 | if (uploadErr) throw new Error(`Upload failed: ${uploadErr.message}`); |
Template literal with variable interpolation in command context
| 124 | console.log(`Image generated and stored. Root hash: ${rootHash}`); |
Template literal with variable interpolation in command context
| 142 | const tempAudioPath = path.join(os.tmpdir(), `0g-audio-${Date.now()}.mp3`); |
Template literal with variable interpolation in command context
| 147 | throw new Error(`Download failed: ${error.message}`); |
Template literal with variable interpolation in command context
| 163 | const response = await fetch(`${endpoint}/audio/transcriptions`, { |
Template literal with variable interpolation in command context
| 196 | const tempPath = path.join(os.tmpdir(), `0g-data-${Date.now()}.txt`); |
Template literal with variable interpolation in command context
| 201 | throw new Error(`Download failed: ${error.message}`); |
Template literal with variable interpolation in command context
| 213 | { role: 'system', content: `You are analyzing this data:\n\n${fileContent}` }, |
Template literal with variable interpolation in command context
| 217 | const response = await fetch(`${endpoint}/chat/completions`, { |
Template literal with variable interpolation in command context
| 257 | const response = await fetch(`${endpoint}/images/generations`, { |
Template literal with variable interpolation in command context
| 268 | const tempPath = path.join(os.tmpdir(), `pipeline-${Date.now()}.png`); |
Template literal with variable interpolation in command context
| 282 | if (uploadErr) throw new Error(`Upload failed: ${uploadErr.message}`); |
Template literal with variable interpolation in command context
| 290 | const tx = await registry.registerFile(rootHash, `AI generated: ${prompt}`); |
Access to .env file
| 21 | - `.env` with `PRIVATE_KEY`, `RPC_URL`, `STORAGE_INDEXER`, `PROVIDER_ADDRESS` |
Access to .env file
| 71 | const ethersProvider = new ethers.JsonRpcProvider(process.env.RPC_URL); |
Access to .env file
| 72 | const wallet = new ethers.Wallet(process.env.PRIVATE_KEY!, ethersProvider); |
Access to .env file
| 76 | const providerAddress = process.env.PROVIDER_ADDRESS!; |
Access to .env file
| 109 | const indexer = new Indexer(process.env.STORAGE_INDEXER!); |
Access to .env file
| 117 | const [, uploadErr] = await indexer.upload(file, process.env.RPC_URL!, wallet); |
Access to .env file
| 136 | const ethersProvider = new ethers.JsonRpcProvider(process.env.RPC_URL); |
Access to .env file
| 137 | const wallet = new ethers.Wallet(process.env.PRIVATE_KEY!, ethersProvider); |
Access to .env file
| 141 | const indexer = new Indexer(process.env.STORAGE_INDEXER!); |
Access to .env file
| 153 | const providerAddress = process.env.PROVIDER_ADDRESS!; |
Access to .env file
| 190 | const ethersProvider = new ethers.JsonRpcProvider(process.env.RPC_URL); |
Access to .env file
| 191 | const wallet = new ethers.Wallet(process.env.PRIVATE_KEY!, ethersProvider); |
Access to .env file
| 195 | const indexer = new Indexer(process.env.STORAGE_INDEXER!); |
Access to .env file
| 208 | const providerAddress = process.env.PROVIDER_ADDRESS!; |
Access to .env file
| 243 | const ethersProvider = new ethers.JsonRpcProvider(process.env.RPC_URL); |
Access to .env file
| 244 | const wallet = new ethers.Wallet(process.env.PRIVATE_KEY!, ethersProvider); |
Access to .env file
| 248 | const providerAddress = process.env.PROVIDER_ADDRESS!; |
Access to .env file
| 274 | const indexer = new Indexer(process.env.STORAGE_INDEXER!); |
Access to .env file
| 281 | const [, uploadErr] = await indexer.upload(file, process.env.RPC_URL!, wallet); |
Access to .env file
| 328 | await indexer.upload(file, process.env.RPC_URL!, wallet); |
Access to .env file
| 334 | await indexer.upload(file, process.env.RPC_URL!, wallet); |
Buffer.from base64 decode
| 102 | fs.writeFileSync(tempPath, Buffer.from(data.data[0].b64_json, 'base64')); |
Install this skill with one command
/learn @0gfoundation/compute-plus-storage