clawcontract 0.1.1 → 0.1.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +6 -20
- package/dist/cli/index.js +0 -16
- package/dist/cli/index.js.map +1 -1
- package/dist/deployer/wallet.js +2 -2
- package/dist/deployer/wallet.js.map +1 -1
- package/dist/generator/index.js +1 -1
- package/dist/generator/index.js.map +1 -1
- package/dist/generator/llm.js +5 -5
- package/dist/generator/llm.js.map +1 -1
- package/dist/verifier/explorer-api.js +4 -4
- package/dist/verifier/explorer-api.js.map +1 -1
- package/package.json +1 -1
- package/dist/cli/commands/setup.js +0 -33
package/README.md
CHANGED
|
@@ -30,16 +30,6 @@ pnpm install
|
|
|
30
30
|
pnpm run build
|
|
31
31
|
```
|
|
32
32
|
|
|
33
|
-
Then set up your environment:
|
|
34
|
-
|
|
35
|
-
```bash
|
|
36
|
-
clawcontract setup
|
|
37
|
-
clawcontract setup --openrouter-key sk-or-... --bscscan-key ABC123
|
|
38
|
-
clawcontract setup --private-key 0xabc... --openrouter-key sk-or-... --openrouter-model anthropic/claude-sonnet-4-20250514
|
|
39
|
-
```
|
|
40
|
-
|
|
41
|
-
This writes a `.env` file non-interactively. If `--private-key` is not provided, `PRIVATE_KEY` is left empty — no key is auto-generated.
|
|
42
|
-
|
|
43
33
|
## Usage
|
|
44
34
|
|
|
45
35
|
### Generate a contract
|
|
@@ -195,20 +185,16 @@ ClawContract ships with an [OpenClaw skill](src/openclaw/SKILL.md) that teaches
|
|
|
195
185
|
|
|
196
186
|
## Configuration
|
|
197
187
|
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
```bash
|
|
201
|
-
cp .env.example .env
|
|
202
|
-
```
|
|
188
|
+
Environment variables are configured via `docker-compose.yml` or set directly in your environment.
|
|
203
189
|
|
|
204
190
|
| Variable | Description | Required |
|
|
205
191
|
|---|---|---|
|
|
206
|
-
| `
|
|
207
|
-
| `
|
|
208
|
-
| `
|
|
209
|
-
| `
|
|
192
|
+
| `CLAWCONTRACT_PRIVATE_KEY` | Wallet private key for deployment (required for deploy/full) | Yes (for deploy) |
|
|
193
|
+
| `CLAWCONTRACT_OPENROUTER_API_KEY` | OpenRouter API key for AI contract generation | Yes |
|
|
194
|
+
| `CLAWCONTRACT_OPENROUTER_MODEL` | OpenRouter model (default: `anthropic/claude-sonnet-4-20250514`) | No |
|
|
195
|
+
| `CLAWCONTRACT_BSCSCAN_API_KEY` | BscScan / opBNBScan API key for contract verification | No |
|
|
210
196
|
|
|
211
|
-
> **Security:** Never commit
|
|
197
|
+
> **Security:** Never commit secrets to version control. When using Docker, set values in `docker-compose.yml` or pass them via environment variables.
|
|
212
198
|
|
|
213
199
|
> **Data:** Deployment metadata is saved to `contracts/.deployments/` using a directory-based store with deduplicated ABIs and an index for fast lookups. Legacy `.deployments.json` files are auto-migrated on first access. This directory is local and should not be committed.
|
|
214
200
|
|
package/dist/cli/index.js
CHANGED
|
@@ -9,7 +9,6 @@ import { deployCommand } from './commands/deploy.js';
|
|
|
9
9
|
import { verifyCommand } from './commands/verify.js';
|
|
10
10
|
import { fullCommand } from './commands/full.js';
|
|
11
11
|
import { interactCommand } from './commands/interact.js';
|
|
12
|
-
import { setupCommand } from './commands/setup.js';
|
|
13
12
|
import { listCommand } from './commands/list.js';
|
|
14
13
|
import { deleteCommand } from './commands/delete.js';
|
|
15
14
|
const require = createRequire(import.meta.url);
|
|
@@ -70,21 +69,6 @@ program
|
|
|
70
69
|
const opts = program.opts();
|
|
71
70
|
await interactCommand(address, fn, args, { chain: opts.chain, file: cmdOpts.file, value: cmdOpts.value });
|
|
72
71
|
});
|
|
73
|
-
program
|
|
74
|
-
.command('setup')
|
|
75
|
-
.description('Generate .env file non-interactively (flags or env vars, auto-generates wallet if needed)')
|
|
76
|
-
.option('--private-key <key>', 'wallet private key')
|
|
77
|
-
.option('--openrouter-key <key>', 'OpenRouter API key')
|
|
78
|
-
.option('--openrouter-model <model>', 'OpenRouter model')
|
|
79
|
-
.option('--bscscan-key <key>', 'BscScan API key')
|
|
80
|
-
.action((opts) => {
|
|
81
|
-
setupCommand({
|
|
82
|
-
privateKey: opts.privateKey,
|
|
83
|
-
openrouterKey: opts.openrouterKey,
|
|
84
|
-
openrouterModel: opts.openrouterModel,
|
|
85
|
-
bscscanKey: opts.bscscanKey,
|
|
86
|
-
});
|
|
87
|
-
});
|
|
88
72
|
program
|
|
89
73
|
.command('list')
|
|
90
74
|
.description('List all stored deployment records')
|
package/dist/cli/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":";AACA,OAAO,eAAe,CAAC;AACvB,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAC3C,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"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"}
|
package/dist/deployer/wallet.js
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { ethers } from 'ethers';
|
|
2
2
|
export function resolvePrivateKey() {
|
|
3
|
-
const envKey = process.env.
|
|
3
|
+
const envKey = process.env.CLAWCONTRACT_PRIVATE_KEY;
|
|
4
4
|
if (envKey && envKey.trim()) {
|
|
5
5
|
return envKey.startsWith('0x') ? envKey : `0x${envKey}`;
|
|
6
6
|
}
|
|
7
|
-
throw new Error('No
|
|
7
|
+
throw new Error('No CLAWCONTRACT_PRIVATE_KEY found. Set CLAWCONTRACT_PRIVATE_KEY in your environment.');
|
|
8
8
|
}
|
|
9
9
|
export function getWalletInfo(privateKey) {
|
|
10
10
|
const normalized = privateKey.startsWith('0x') ? privateKey : `0x${privateKey}`;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wallet.js","sourceRoot":"","sources":["../../src/deployer/wallet.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAEhC,MAAM,UAAU,iBAAiB;IAC/B,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,
|
|
1
|
+
{"version":3,"file":"wallet.js","sourceRoot":"","sources":["../../src/deployer/wallet.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAEhC,MAAM,UAAU,iBAAiB;IAC/B,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,wBAAwB,CAAC;IACpD,IAAI,MAAM,IAAI,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC;QAC5B,OAAO,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,MAAM,EAAE,CAAC;IAC1D,CAAC;IAED,MAAM,IAAI,KAAK,CACb,sFAAsF,CACvF,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,UAAkB;IAC9C,MAAM,UAAU,GAAG,UAAU,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,KAAK,UAAU,EAAE,CAAC;IAChF,MAAM,MAAM,GAAG,IAAI,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;IAC7C,OAAO,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,CAAC;AAC7D,CAAC"}
|
package/dist/generator/index.js
CHANGED
|
@@ -16,7 +16,7 @@ export async function generateContract(options) {
|
|
|
16
16
|
}
|
|
17
17
|
else {
|
|
18
18
|
throw new Error("AI generation is unavailable. " +
|
|
19
|
-
"Set the
|
|
19
|
+
"Set the CLAWCONTRACT_OPENROUTER_API_KEY environment variable to enable contract generation.");
|
|
20
20
|
}
|
|
21
21
|
await ensureOutputDir(outputDir);
|
|
22
22
|
const contractName = extractContractName(source);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/generator/index.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAC3C,OAAO,EACL,mBAAmB,EACnB,gBAAgB,EAChB,eAAe,EACf,eAAe,GAChB,MAAM,YAAY,CAAC;AAGpB,OAAO,EACL,SAAS,EACT,qBAAqB,EACrB,YAAY,GACb,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAE3C,OAAO,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAgBrG,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,OAAwB;IAExB,MAAM,EAAE,WAAW,EAAE,SAAS,EAAE,KAAK,EAAE,GAAG,OAAO,CAAC;IAElD,MAAM,GAAG,GAAG,eAAe,EAAE,CAAC;IAC9B,MAAM,WAAW,GAAG,KAAK,IAAI,GAAG,CAAC,WAAW,EAAE,CAAC;IAE/C,IAAI,MAAc,CAAC;IACnB,IAAI,YAAY,GAAkB,IAAI,CAAC;IACvC,IAAI,WAAW,GAAG,KAAK,CAAC;IAExB,IAAI,WAAW,EAAE,CAAC;QAChB,MAAM,GAAG,MAAM,GAAG,CAAC,gBAAgB,CAAC,WAAW,CAAC,CAAC;QACjD,WAAW,GAAG,IAAI,CAAC;IACrB,CAAC;SAAM,CAAC;QACN,MAAM,IAAI,KAAK,CACb,gCAAgC;YAC9B,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/generator/index.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAC3C,OAAO,EACL,mBAAmB,EACnB,gBAAgB,EAChB,eAAe,EACf,eAAe,GAChB,MAAM,YAAY,CAAC;AAGpB,OAAO,EACL,SAAS,EACT,qBAAqB,EACrB,YAAY,GACb,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAE3C,OAAO,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAgBrG,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,OAAwB;IAExB,MAAM,EAAE,WAAW,EAAE,SAAS,EAAE,KAAK,EAAE,GAAG,OAAO,CAAC;IAElD,MAAM,GAAG,GAAG,eAAe,EAAE,CAAC;IAC9B,MAAM,WAAW,GAAG,KAAK,IAAI,GAAG,CAAC,WAAW,EAAE,CAAC;IAE/C,IAAI,MAAc,CAAC;IACnB,IAAI,YAAY,GAAkB,IAAI,CAAC;IACvC,IAAI,WAAW,GAAG,KAAK,CAAC;IAExB,IAAI,WAAW,EAAE,CAAC;QAChB,MAAM,GAAG,MAAM,GAAG,CAAC,gBAAgB,CAAC,WAAW,CAAC,CAAC;QACjD,WAAW,GAAG,IAAI,CAAC;IACrB,CAAC;SAAM,CAAC;QACN,MAAM,IAAI,KAAK,CACb,gCAAgC;YAC9B,6FAA6F,CAChG,CAAC;IACJ,CAAC;IAED,MAAM,eAAe,CAAC,SAAS,CAAC,CAAC;IAEjC,MAAM,YAAY,GAAG,mBAAmB,CAAC,MAAM,CAAC,CAAC;IACjD,MAAM,QAAQ,GAAG,gBAAgB,CAAC,YAAY,CAAC,CAAC;IAChD,MAAM,QAAQ,GAAG,MAAM,eAAe,CAAC,SAAS,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;IAEpE,OAAO;QACL,QAAQ;QACR,YAAY;QACZ,MAAM;QACN,YAAY;QACZ,WAAW;KACZ,CAAC;AACJ,CAAC"}
|
package/dist/generator/llm.js
CHANGED
|
@@ -5,7 +5,7 @@ Follow these rules strictly:
|
|
|
5
5
|
- Ensure compatibility with BSC and opBNB (EVM-compatible)
|
|
6
6
|
- Always include an SPDX license identifier comment at the top (e.g., // SPDX-License-Identifier: MIT)
|
|
7
7
|
- Return ONLY the Solidity source code, no markdown fences, no explanations`;
|
|
8
|
-
const OPENROUTER_MODEL = process.env.
|
|
8
|
+
const OPENROUTER_MODEL = process.env.CLAWCONTRACT_OPENROUTER_MODEL || "anthropic/claude-sonnet-4-20250514";
|
|
9
9
|
const MAX_TOKENS = 4096;
|
|
10
10
|
function stripMarkdownFences(text) {
|
|
11
11
|
return text.replace(/^```(?:solidity)?\n?/m, "").replace(/\n?```\s*$/m, "").trim();
|
|
@@ -57,12 +57,12 @@ function createOpenRouterClient(apiKey) {
|
|
|
57
57
|
const NULL_CLIENT = {
|
|
58
58
|
isAvailable: () => false,
|
|
59
59
|
provider: () => null,
|
|
60
|
-
customizeContract: () => { throw new Error("No LLM API key configured. Set
|
|
61
|
-
generateContract: () => { throw new Error("No LLM API key configured. Set
|
|
62
|
-
suggestFixes: () => { throw new Error("No LLM API key configured. Set
|
|
60
|
+
customizeContract: () => { throw new Error("No LLM API key configured. Set CLAWCONTRACT_OPENROUTER_API_KEY."); },
|
|
61
|
+
generateContract: () => { throw new Error("No LLM API key configured. Set CLAWCONTRACT_OPENROUTER_API_KEY."); },
|
|
62
|
+
suggestFixes: () => { throw new Error("No LLM API key configured. Set CLAWCONTRACT_OPENROUTER_API_KEY."); },
|
|
63
63
|
};
|
|
64
64
|
export function createLLMClient() {
|
|
65
|
-
const openrouterKey = process.env.
|
|
65
|
+
const openrouterKey = process.env.CLAWCONTRACT_OPENROUTER_API_KEY;
|
|
66
66
|
if (openrouterKey) {
|
|
67
67
|
return createOpenRouterClient(openrouterKey);
|
|
68
68
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"llm.js","sourceRoot":"","sources":["../../src/generator/llm.ts"],"names":[],"mappings":"AAUA,MAAM,sBAAsB,GAAG;;;;;;4EAM6C,CAAC;AAE7E,MAAM,gBAAgB,GAAG,OAAO,CAAC,GAAG,CAAC,
|
|
1
|
+
{"version":3,"file":"llm.js","sourceRoot":"","sources":["../../src/generator/llm.ts"],"names":[],"mappings":"AAUA,MAAM,sBAAsB,GAAG;;;;;;4EAM6C,CAAC;AAE7E,MAAM,gBAAgB,GAAG,OAAO,CAAC,GAAG,CAAC,6BAA6B,IAAI,oCAAoC,CAAC;AAC3G,MAAM,UAAU,GAAG,IAAI,CAAC;AAExB,SAAS,mBAAmB,CAAC,IAAY;IACvC,OAAO,IAAI,CAAC,OAAO,CAAC,uBAAuB,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,aAAa,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;AACrF,CAAC;AASD,KAAK,UAAU,cAAc,CAAC,MAAc,EAAE,WAAmB;IAC/D,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,+CAA+C,EAAE;QAC5E,MAAM,EAAE,MAAM;QACd,OAAO,EAAE;YACP,eAAe,EAAE,UAAU,MAAM,EAAE;YACnC,cAAc,EAAE,kBAAkB;YAClC,cAAc,EAAE,iCAAiC;YACjD,SAAS,EAAE,cAAc;SAC1B;QACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;YACnB,KAAK,EAAE,gBAAgB;YACvB,UAAU,EAAE,UAAU;YACtB,QAAQ,EAAE;gBACR,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,sBAAsB,EAAE;gBACnD,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE;aACvC;SACF,CAAC;KACH,CAAC,CAAC;IAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;QACjB,MAAM,SAAS,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;QACxC,MAAM,IAAI,KAAK,CAAC,yBAAyB,QAAQ,CAAC,MAAM,MAAM,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC;IAC3F,CAAC;IAED,MAAM,IAAI,GAAG,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAuB,CAAC;IAE3D,IAAI,IAAI,CAAC,KAAK,EAAE,OAAO,EAAE,CAAC;QACxB,MAAM,IAAI,KAAK,CAAC,qBAAqB,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;IAC7D,CAAC;IAED,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC;IACpD,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,IAAI,KAAK,CAAC,kCAAkC,CAAC,CAAC;IACtD,CAAC;IAED,OAAO,mBAAmB,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;AAC7C,CAAC;AAED,SAAS,sBAAsB,CAAC,MAAc;IAC5C,OAAO;QACL,WAAW,EAAE,GAAG,EAAE,CAAC,IAAI;QACvB,QAAQ,EAAE,GAAG,EAAE,CAAC,YAAY;QAC5B,iBAAiB,EAAE,CAAC,QAAQ,EAAE,WAAW,EAAE,EAAE,CAC3C,cAAc,CAAC,MAAM,EAAE,uDAAuD,QAAQ,sBAAsB,WAAW,mUAAmU,CAAC;QAC7b,gBAAgB,EAAE,CAAC,WAAW,EAAE,EAAE,CAChC,cAAc,CAAC,MAAM,EAAE,8EAA8E,WAAW,oQAAoQ,CAAC;QACvX,YAAY,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE;YAC7B,MAAM,SAAS,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,EAAE,CAAC,GAAG,GAAG,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACxE,OAAO,cAAc,CAAC,MAAM,EAAE,uFAAuF,IAAI,gBAAgB,SAAS,qLAAqL,CAAC,CAAC;QAC3U,CAAC;KACF,CAAC;AACJ,CAAC;AAED,MAAM,WAAW,GAAc;IAC7B,WAAW,EAAE,GAAG,EAAE,CAAC,KAAK;IACxB,QAAQ,EAAE,GAAG,EAAE,CAAC,IAAI;IACpB,iBAAiB,EAAE,GAAG,EAAE,GAAG,MAAM,IAAI,KAAK,CAAC,iEAAiE,CAAC,CAAC,CAAC,CAAC;IAChH,gBAAgB,EAAE,GAAG,EAAE,GAAG,MAAM,IAAI,KAAK,CAAC,iEAAiE,CAAC,CAAC,CAAC,CAAC;IAC/G,YAAY,EAAE,GAAG,EAAE,GAAG,MAAM,IAAI,KAAK,CAAC,iEAAiE,CAAC,CAAC,CAAC,CAAC;CAC5G,CAAC;AAEF,MAAM,UAAU,eAAe;IAC7B,MAAM,aAAa,GAAG,OAAO,CAAC,GAAG,CAAC,+BAA+B,CAAC;IAElE,IAAI,aAAa,EAAE,CAAC;QAClB,OAAO,sBAAsB,CAAC,aAAa,CAAC,CAAC;IAC/C,CAAC;IAED,OAAO,WAAW,CAAC;AACrB,CAAC"}
|
|
@@ -8,9 +8,9 @@ const SUBMIT_MAX_RETRIES = 5;
|
|
|
8
8
|
const SUBMIT_INITIAL_DELAY_MS = 5_000;
|
|
9
9
|
export async function submitVerification(options) {
|
|
10
10
|
const chain = getChain(options.chainKey);
|
|
11
|
-
const apiKey = process.env['
|
|
11
|
+
const apiKey = process.env['CLAWCONTRACT_BSCSCAN_API_KEY'];
|
|
12
12
|
if (!apiKey) {
|
|
13
|
-
throw new Error('
|
|
13
|
+
throw new Error('CLAWCONTRACT_BSCSCAN_API_KEY environment variable is not set');
|
|
14
14
|
}
|
|
15
15
|
const params = new URLSearchParams({
|
|
16
16
|
module: 'contract',
|
|
@@ -53,9 +53,9 @@ export async function submitVerification(options) {
|
|
|
53
53
|
}
|
|
54
54
|
export async function checkVerificationStatus(guid, chainKey) {
|
|
55
55
|
const chain = getChain(chainKey);
|
|
56
|
-
const apiKey = process.env['
|
|
56
|
+
const apiKey = process.env['CLAWCONTRACT_BSCSCAN_API_KEY'];
|
|
57
57
|
if (!apiKey) {
|
|
58
|
-
throw new Error('
|
|
58
|
+
throw new Error('CLAWCONTRACT_BSCSCAN_API_KEY environment variable is not set');
|
|
59
59
|
}
|
|
60
60
|
const params = new URLSearchParams({
|
|
61
61
|
module: 'contract',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"explorer-api.js","sourceRoot":"","sources":["../../src/verifier/explorer-api.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAoB/C,MAAM,iBAAiB,GAAG,iCAAiC,CAAC;AAC5D,MAAM,wBAAwB,GAAG,yBAAyB,CAAC;AAC3D,MAAM,YAAY,GAAG,GAAG,CAAC;AACzB,MAAM,WAAW,GAAG,CAAC,CAAC;AACtB,MAAM,wBAAwB,GAAG,KAAK,CAAC;AAEvC,MAAM,kBAAkB,GAAG,CAAC,CAAC;AAC7B,MAAM,uBAAuB,GAAG,KAAK,CAAC;AAEtC,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,OAAkC;IAElC,MAAM,KAAK,GAAG,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IACzC,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,
|
|
1
|
+
{"version":3,"file":"explorer-api.js","sourceRoot":"","sources":["../../src/verifier/explorer-api.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,33 +0,0 @@
|
|
|
1
|
-
import fs from 'node:fs';
|
|
2
|
-
import path from 'node:path';
|
|
3
|
-
import chalk from 'chalk';
|
|
4
|
-
export function setupCommand(options) {
|
|
5
|
-
const privateKey = resolveKey(options.privateKey ?? process.env.PRIVATE_KEY);
|
|
6
|
-
const openrouterKey = options.openrouterKey ?? process.env.OPENROUTER_API_KEY ?? '';
|
|
7
|
-
const openrouterModel = options.openrouterModel ?? process.env.OPENROUTER_MODEL ?? '';
|
|
8
|
-
const bscscanKey = options.bscscanKey ?? process.env.BSCSCAN_API_KEY ?? '';
|
|
9
|
-
const envLines = [
|
|
10
|
-
`PRIVATE_KEY=${privateKey}`,
|
|
11
|
-
'',
|
|
12
|
-
`OPENROUTER_API_KEY=${openrouterKey}`,
|
|
13
|
-
'',
|
|
14
|
-
'# OpenRouter model (optional)',
|
|
15
|
-
`OPENROUTER_MODEL=${openrouterModel}`,
|
|
16
|
-
'',
|
|
17
|
-
`BSCSCAN_API_KEY=${bscscanKey}`,
|
|
18
|
-
'',
|
|
19
|
-
];
|
|
20
|
-
const envPath = path.resolve(process.cwd(), '.env');
|
|
21
|
-
fs.writeFileSync(envPath, envLines.join('\n'), 'utf-8');
|
|
22
|
-
console.log(chalk.green(`\n✔ .env written to ${envPath}`));
|
|
23
|
-
console.log(chalk.gray(' Make sure .env is in your .gitignore!'));
|
|
24
|
-
}
|
|
25
|
-
function resolveKey(raw) {
|
|
26
|
-
if (raw && raw.trim()) {
|
|
27
|
-
return raw.startsWith('0x') ? raw : `0x${raw}`;
|
|
28
|
-
}
|
|
29
|
-
console.log(chalk.yellow('\n⚠ No private key supplied — PRIVATE_KEY will be empty in .env.'));
|
|
30
|
-
console.log(chalk.yellow(' Supply one later via: clawcontract setup --private-key <key>'));
|
|
31
|
-
return '';
|
|
32
|
-
}
|
|
33
|
-
//# sourceMappingURL=setup.js.map
|