Skip to main content

Compute + Storage Integration

Integrates AI inference with decentralized storage for seamless content generation and data processing in AI pipelines.

Install this skill

or
0/100

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

medium line 85

Template literal with variable interpolation in command context

SourceSKILL.md
85const response = await fetch(`${endpoint}/images/generations`, {
medium line 100

Template literal with variable interpolation in command context

SourceSKILL.md
100const tempPath = path.join(os.tmpdir(), `0g-image-${Date.now()}.png`);
medium line 115

Template literal with variable interpolation in command context

SourceSKILL.md
115if (err) throw new Error(`Merkle tree error: ${err}`);
medium line 118

Template literal with variable interpolation in command context

SourceSKILL.md
118if (uploadErr) throw new Error(`Upload failed: ${uploadErr.message}`);
medium line 124

Template literal with variable interpolation in command context

SourceSKILL.md
124console.log(`Image generated and stored. Root hash: ${rootHash}`);
medium line 142

Template literal with variable interpolation in command context

SourceSKILL.md
142const tempAudioPath = path.join(os.tmpdir(), `0g-audio-${Date.now()}.mp3`);
medium line 147

Template literal with variable interpolation in command context

SourceSKILL.md
147throw new Error(`Download failed: ${error.message}`);
medium line 163

Template literal with variable interpolation in command context

SourceSKILL.md
163const response = await fetch(`${endpoint}/audio/transcriptions`, {
medium line 196

Template literal with variable interpolation in command context

SourceSKILL.md
196const tempPath = path.join(os.tmpdir(), `0g-data-${Date.now()}.txt`);
medium line 201

Template literal with variable interpolation in command context

SourceSKILL.md
201throw new Error(`Download failed: ${error.message}`);
medium line 213

Template literal with variable interpolation in command context

SourceSKILL.md
213{ role: 'system', content: `You are analyzing this data:\n\n${fileContent}` },
medium line 217

Template literal with variable interpolation in command context

SourceSKILL.md
217const response = await fetch(`${endpoint}/chat/completions`, {
medium line 257

Template literal with variable interpolation in command context

SourceSKILL.md
257const response = await fetch(`${endpoint}/images/generations`, {
medium line 268

Template literal with variable interpolation in command context

SourceSKILL.md
268const tempPath = path.join(os.tmpdir(), `pipeline-${Date.now()}.png`);
medium line 282

Template literal with variable interpolation in command context

SourceSKILL.md
282if (uploadErr) throw new Error(`Upload failed: ${uploadErr.message}`);
medium line 290

Template literal with variable interpolation in command context

SourceSKILL.md
290const tx = await registry.registerFile(rootHash, `AI generated: ${prompt}`);
medium line 21

Access to .env file

SourceSKILL.md
21- `.env` with `PRIVATE_KEY`, `RPC_URL`, `STORAGE_INDEXER`, `PROVIDER_ADDRESS`
low line 71

Access to .env file

SourceSKILL.md
71const ethersProvider = new ethers.JsonRpcProvider(process.env.RPC_URL);
low line 72

Access to .env file

SourceSKILL.md
72const wallet = new ethers.Wallet(process.env.PRIVATE_KEY!, ethersProvider);
low line 76

Access to .env file

SourceSKILL.md
76const providerAddress = process.env.PROVIDER_ADDRESS!;
low line 109

Access to .env file

SourceSKILL.md
109const indexer = new Indexer(process.env.STORAGE_INDEXER!);
low line 117

Access to .env file

SourceSKILL.md
117const [, uploadErr] = await indexer.upload(file, process.env.RPC_URL!, wallet);
low line 136

Access to .env file

SourceSKILL.md
136const ethersProvider = new ethers.JsonRpcProvider(process.env.RPC_URL);
low line 137

Access to .env file

SourceSKILL.md
137const wallet = new ethers.Wallet(process.env.PRIVATE_KEY!, ethersProvider);
low line 141

Access to .env file

SourceSKILL.md
141const indexer = new Indexer(process.env.STORAGE_INDEXER!);
low line 153

Access to .env file

SourceSKILL.md
153const providerAddress = process.env.PROVIDER_ADDRESS!;
low line 190

Access to .env file

SourceSKILL.md
190const ethersProvider = new ethers.JsonRpcProvider(process.env.RPC_URL);
low line 191

Access to .env file

SourceSKILL.md
191const wallet = new ethers.Wallet(process.env.PRIVATE_KEY!, ethersProvider);
low line 195

Access to .env file

SourceSKILL.md
195const indexer = new Indexer(process.env.STORAGE_INDEXER!);
low line 208

Access to .env file

SourceSKILL.md
208const providerAddress = process.env.PROVIDER_ADDRESS!;
low line 243

Access to .env file

SourceSKILL.md
243const ethersProvider = new ethers.JsonRpcProvider(process.env.RPC_URL);
low line 244

Access to .env file

SourceSKILL.md
244const wallet = new ethers.Wallet(process.env.PRIVATE_KEY!, ethersProvider);
low line 248

Access to .env file

SourceSKILL.md
248const providerAddress = process.env.PROVIDER_ADDRESS!;
low line 274

Access to .env file

SourceSKILL.md
274const indexer = new Indexer(process.env.STORAGE_INDEXER!);
low line 281

Access to .env file

SourceSKILL.md
281const [, uploadErr] = await indexer.upload(file, process.env.RPC_URL!, wallet);
low line 328

Access to .env file

SourceSKILL.md
328await indexer.upload(file, process.env.RPC_URL!, wallet);
low line 334

Access to .env file

SourceSKILL.md
334await indexer.upload(file, process.env.RPC_URL!, wallet);
low line 102

Buffer.from base64 decode

SourceSKILL.md
102fs.writeFileSync(tempPath, Buffer.from(data.data[0].b64_json, 'base64'));
Scanned on Feb 25, 2026
View Security Dashboard