@unifra/scroll-sdk-cli
v0.1.4
Published
A tool for managing and testing Scroll SDK(Dogeos) deployments
Readme
Scroll SDK CLI
Introduction
A tool for configuring, managing, and testing Scroll SDK deployments.
Other Scroll SDK Repos
Installation
scrollsdk setup domainsscrollsdk setup db-init --cleanscrollsdk setup gen-keystorescrollsdk doge configscrollsdk doge dummy-signersscrollsdk doge bridge-initNote: If you encounter an "Insufficient base funds" error like this:
2025-05-31T00:32:08.308083Z INFO generate_test_keys: Checking funding for distribution helper address: nmCrhAu4STRor8Tmv4rNHt6JXeqUXFxeo1 ...... Error: Insufficient base funds for setup tx after selecting all UTXOs. Needed: 6049001000 sats, Have: 3950999000 sats
or
? Enter the seed string 123456
Pulling Docker Image: docker.io/dogeos69/generate-test-keys:v0.1.1-test
Image pulled successfully
Creating Docker Container...
Starting Container
M--- Running Test Setup & Key Generation (with OP_RETURN bridge funding) ---
PLoading configuration from: "./.data/setup_defaults.toml"...
'Starting setup for network: Testnet...
)Using RPC URL: https://testnet.doge.xyz/
:Using Blockbook URL: https://dogebook-testnet.nownodes.io
�2025-05-31T03:19:48.077868Z INFO generate_test_keys: Using OP_RETURN payload (hex): 00151a64570e4997739458455ba4ab5a535fd2e306 for script (hex): 6a1500151a64570e4997739458455ba4ab5a535fd2e306
TDistribution Helper Address (derived from seed): nqBXoHUiH92gxgrsmFYjqcBNWZ7VMPFNJY
{2025-05-31T03:19:48.077948Z INFO generate_test_keys: Initializing Dogecoin RPC client...
�2025-05-31T03:19:48.144522Z INFO generate_test_keys: Checking funding for distribution helper address: nqBXoHUiH92gxgrsmFYjqcBNWZ7VMPFNJY
�2025-05-31T03:19:49.671868Z ERROR generate_test_keys: Distribution Helper address nqBXoHUiH92gxgrsmFYjqcBNWZ7VMPFNJY has no funds on testnet!
EPlease send some testnet DOGE to: nqBXoHUiH92gxgrsmFYjqcBNWZ7VMPFNJY
Then re-run this script.Send Dogecoin to the displayed helper address and retry the command. Please keep the same seed string, or the helper address will change.
scrollsdk setup configsscrollsdk setup prep-chartsscrollsdk setup cubesigner-refreshscrollsdk setup push-secretsscrollsdk setup tlsscrollsdk helper fund-accounts -i -f 2 -dscrollsdk helper fund-accounts -l 1 -f 2 -dscrollsdk helper fund-accounts -l 2 -d
Non-Interactive / CI Mode
Steps 1-11 support --non-interactive (-N) and --json flags for automated pipelines. Steps 12-14 (helper fund-accounts) are already fully flag-driven with no prompts. See docs/automation.md for the full automation guide including required flags per step, JSON output format, error codes, environment variable substitution, and example scripts.
Usage
$ npm install -g @unifra/scroll-sdk-cli
$ scrollsdk COMMAND
running command...
$ scrollsdk (--version)
@unifra/scroll-sdk-cli/0.1.4 darwin-arm64 node-v22.19.0
$ scrollsdk --help [COMMAND]
USAGE
$ scrollsdk COMMAND
...Commands
scrollsdk check prerequisitesscrollsdk doge bridge-initscrollsdk doge configscrollsdk doge dummy-signersscrollsdk doge wallet newscrollsdk doge wallet sendscrollsdk doge wallet syncscrollsdk help [COMMAND]scrollsdk helper activityscrollsdk helper clear-accountsscrollsdk helper derive-enode NODEKEYscrollsdk helper fund-accountsscrollsdk helper set-scalarsscrollsdk pluginsscrollsdk plugins add PLUGINscrollsdk plugins:inspect PLUGIN...scrollsdk plugins install PLUGINscrollsdk plugins link PATHscrollsdk plugins remove [PLUGIN]scrollsdk plugins resetscrollsdk plugins uninstall [PLUGIN]scrollsdk plugins unlink [PLUGIN]scrollsdk plugins updatescrollsdk setup bootnode-public-p2pscrollsdk setup configsscrollsdk setup cubesigner-initscrollsdk setup cubesigner-refreshscrollsdk setup db-initscrollsdk setup disable-internalscrollsdk setup dogecoin-wallet-importscrollsdk setup domainsscrollsdk setup gas-tokenscrollsdk setup gen-keystorescrollsdk setup gen-rpc-packagescrollsdk setup generate-from-specscrollsdk setup prep-chartsscrollsdk setup push-secretsscrollsdk setup tlsscrollsdk setup verify-contractsscrollsdk test contractsscrollsdk test dependenciesscrollsdk test dogeos [CASENAME]scrollsdk test e2escrollsdk test ingress
scrollsdk check prerequisites
Check that all required prerequisites are installed and configured
USAGE
$ scrollsdk check prerequisites [--json] [-v]
FLAGS
-v, --verbose Show detailed output for each check
--json Output in JSON format (stdout for data, stderr for logs)
DESCRIPTION
Check that all required prerequisites are installed and configured
EXAMPLES
$ scrollsdk check prerequisites
$ scrollsdk check prerequisites --json
$ scrollsdk check prerequisites --verboseSee code: src/commands/check/prerequisites.ts
scrollsdk doge bridge-init
Initialize bridge for mainnet or testnet
USAGE
$ scrollsdk doge bridge-init [--image-tag <value>] [--json] [-N] [-s <value>]
FLAGS
-N, --non-interactive Run without prompts. Requires --seed flag.
-s, --seed=<value> seed which will regenerate the sequencer and fee wallet
--image-tag=<value> Specify the Docker image tag to use (defaults to 0.2.0-rc.3)
--json Output in JSON format (stdout for data, stderr for logs)
DESCRIPTION
Initialize bridge for mainnet or testnet
EXAMPLES
$ scrollsdk doge:bridge-init
$ scrollsdk doge:bridge-init -s 123456
$ scrollsdk doge:bridge-init --seed 123456
$ scrollsdk doge:bridge-init --image-tag 0.2.0-debug
$ scrollsdk doge:bridge-init --non-interactive --seed 123456 --image-tag 0.2.0-rc.3
$ scrollsdk doge:bridge-init --non-interactive --json --seed 123456See code: src/commands/doge/bridge-init.ts
scrollsdk doge config
Configure Dogecoin settings for mainnet or testnet
USAGE
$ scrollsdk doge config [-c <value>] [--json] [-n mainnet|testnet] [-N]
FLAGS
-N, --non-interactive Run without prompts, using existing config values
-c, --config=<value> Path to config file (e.g., .data/doge-config-mainnet.toml or .data/doge-config-testnet.toml)
-n, --network=<option> Network to configure (mainnet or testnet) - required for non-interactive mode with new config
<options: mainnet|testnet>
--json Output in JSON format (stdout for data, stderr for logs)
DESCRIPTION
Configure Dogecoin settings for mainnet or testnet
EXAMPLES
$ scrollsdk doge:config
$ scrollsdk doge:config --config .data/doge-config-mainnet.toml
$ scrollsdk doge:config --config .data/doge-config-testnet.toml
$ scrollsdk doge:config --non-interactive --network testnet
$ scrollsdk doge:config --non-interactive --json --network mainnetSee code: src/commands/doge/config.ts
scrollsdk doge dummy-signers
Set up dummy signers (local Docker or AWS with KMS keys)
USAGE
$ scrollsdk doge dummy-signers [--aws-account-id <value>] [--aws-network-alias <value>] [-a] [--aws-region <value>]
[--aws-suffixes <value>] [-c <value>] [--generate-wif-keys] [--image-tag <value>] [--json] [-l] [-N] [--num-signers
<value>] [--threshold <value>] [--wif-network regtest|testnet|mainnet]
FLAGS
-N, --non-interactive Run without prompts. Uses config values or sensible defaults.
-a, --aws-only Set up AWS KMS signers only
-c, --config=<value> Path to config file (e.g., .data/doge-config-mainnet.toml or
.data/doge-config-testnet.toml)
-l, --local-only Set up local Docker signers only
--aws-account-id=<value> AWS account ID
--aws-network-alias=<value> Network alias for AWS resources
--aws-region=<value> AWS region for KMS signers
--aws-suffixes=<value> Space-separated suffixes for AWS signers (e.g., "00 01 02")
--[no-]generate-wif-keys Generate new WIF keys (non-interactive mode)
--image-tag=<value> Specify the Docker image tag to use
--json Output in JSON format (stdout for data, stderr for logs)
--num-signers=<value> [default: 3] Number of signers (non-interactive mode)
--threshold=<value> Correctness threshold (non-interactive mode). Defaults to 2/3 majority.
--wif-network=<option> [default: regtest] Network for WIF generation: regtest, testnet, or mainnet
<options: regtest|testnet|mainnet>
DESCRIPTION
Set up dummy signers (local Docker or AWS with KMS keys)
EXAMPLES
$ scrollsdk doge:dummy-signers
$ scrollsdk doge:dummy-signers --config .data/doge-config-testnet.toml
$ scrollsdk doge:dummy-signers --local-only
$ scrollsdk doge:dummy-signers --aws-only
$ scrollsdk doge:dummy-signers --image-tag shu-test-0605See code: src/commands/doge/dummy-signers.ts
scrollsdk doge wallet new
Create a new Dogecoin wallet (mainnet or testnet)
USAGE
$ scrollsdk doge wallet new [-c <value>] [-d] [-f] [--json] [-N] [-p <value>]
FLAGS
-N, --non-interactive Run without prompts (implies --force)
-c, --config=<value> [default: .data/doge-config.toml] Path to Dogecoin config file (determines network and default
wallet path)
-d, --dry-run Show what would be created without actually creating the wallet
-f, --force Skip confirmation prompt
-p, --path=<value> Path to save the wallet file (overrides path from config file)
--json Output in JSON format (stdout for data, stderr for logs)
DESCRIPTION
Create a new Dogecoin wallet (mainnet or testnet)
EXAMPLES
$ scrollsdk doge:wallet new --config .data/doge-config-mainnet.toml
$ scrollsdk doge:wallet new --config .data/doge-config-testnet.toml
$ scrollsdk doge:wallet new --path ./my-custom-wallet.json --config .data/doge-config-testnet.toml
$ scrollsdk doge:wallet new --dry-run
$ scrollsdk doge:wallet new --forceSee code: src/commands/doge/wallet/new.ts
scrollsdk doge wallet send
Send DOGE to an address or the bridge with cross-chain data (mainnet/testnet aware)
USAGE
$ scrollsdk doge wallet send -a <value> [-c <value>] [-d] [-f] [--no-bridge | [--evm-address <value> | --hex-data
<value> | --text-data <value>]] [-p <value>] [-t <value>]
FLAGS
-a, --amount=<value> (required) Amount to send in DOGE
-c, --config=<value> Path to Dogecoin config file
-d, --dry-run Simulate transaction without broadcasting
-f, --force Skip wallet sync prompt
-p, --path=<value> Path to wallet file (overrides config)
-t, --to=<value> Recipient Dogecoin address (required if --no-bridge and not using default recipient from
config)
--evm-address=<value> EVM address (20 bytes hex, 0x-prefixed) for bridge transactions
--hex-data=<value> Custom hex data for OP_RETURN (requires --no-bridge)
--no-bridge Send without bridge data (allows custom OP_RETURN data, or send to non-bridge address)
--text-data=<value> Text data for OP_RETURN (requires --no-bridge)
DESCRIPTION
Send DOGE to an address or the bridge with cross-chain data (mainnet/testnet aware)
EXAMPLES
$ scrollsdk doge:wallet send --amount 1.0
$ scrollsdk doge:wallet send --amount 1.0 --evm-address 0xabc... --config .data/doge-config-testnet.toml
$ scrollsdk doge:wallet send --amount 1.0 --no-bridge --to અનન્ય_ADDRESS
$ scrollsdk doge:wallet send --amount 1.0 --hex-data 6a0468656c6c6f --no-bridge
$ scrollsdk doge:wallet send --amount 1.0 --forceSee code: src/commands/doge/wallet/send.ts
scrollsdk doge wallet sync
Sync wallet UTXOs and balance (mainnet/testnet aware)
USAGE
$ scrollsdk doge wallet sync [-k <value>] [-c <value>] [-p <value>]
FLAGS
-c, --config=<value> Path to Dogecoin config file
-k, --api-key=<value> NowNodes API key (overrides API key from config)
-p, --path=<value> Custom path for the wallet file (overrides path from config)
DESCRIPTION
Sync wallet UTXOs and balance (mainnet/testnet aware)
EXAMPLES
$ scrollsdk doge:wallet sync --config .data/doge-config-mainnet.toml
$ scrollsdk doge:wallet sync --config .data/doge-config-testnet.tomlSee code: src/commands/doge/wallet/sync.ts
scrollsdk help [COMMAND]
Display help for scrollsdk.
USAGE
$ scrollsdk help [COMMAND...] [-n]
ARGUMENTS
COMMAND... Command to show help for.
FLAGS
-n, --nested-commands Include all nested commands in the output.
DESCRIPTION
Display help for scrollsdk.See code: @oclif/plugin-help
scrollsdk helper activity
Generate transactions on the specified network(s) to produce more blocks
USAGE
$ scrollsdk helper activity [-c <value>] [-d] [-i <value>] [-o] [-t] [-p] [-k <value>] [-x <value>] [-r <value>]
[-s]
FLAGS
-c, --config=<value> [default: ./config.toml] Path to config.toml file
-d, --debug Enable debug mode for more detailed logging
-i, --interval=<value> [default: 3] Interval between transactions in seconds
-k, --privateKey=<value> Private key (overrides config)
-o, --layer1 Generate activity on Layer 1
-p, --pod Run inside Kubernetes pod
-r, --rpc=<value> RPC URL (overrides config for both layers)
-s, --spam with 110KB input while sending transaction
-t, --[no-]layer2 Generate activity on Layer 2
-x, --recipient=<value> Recipient address (overrides config)
DESCRIPTION
Generate transactions on the specified network(s) to produce more blocksSee code: src/commands/helper/activity.ts
scrollsdk helper clear-accounts
Clear pending transactions and optionally transfer remaining funds on Layer 2
USAGE
$ scrollsdk helper clear-accounts [-a <value>] [-c <value>] [-d] [-m <value>] [-p] [-k <value>] [-x <value>] [-r
<value>]
FLAGS
-a, --accounts=<value> [default: 10] Number of accounts to generate from mnemonic
-c, --config=<value> [default: ./config.toml] Path to config.toml file
-d, --debug Run in debug mode
-k, --privateKey=<value> Private key to clear pending transactions
-m, --mnemonic=<value> Mnemonic to generate wallets
-p, --pod Run in pod mode
-r, --rpc=<value> Layer 2 RPC URL
-x, --recipient=<value> Recipient address for remaining funds
DESCRIPTION
Clear pending transactions and optionally transfer remaining funds on Layer 2See code: src/commands/helper/clear-accounts.ts
scrollsdk helper derive-enode NODEKEY
Derive enode and L2_GETH_STATIC_PEERS from a nodekey
USAGE
$ scrollsdk helper derive-enode NODEKEY
ARGUMENTS
NODEKEY Nodekey of the geth ethereum node
DESCRIPTION
Derive enode and L2_GETH_STATIC_PEERS from a nodekey
EXAMPLES
$ scrollsdk helper derive-enode 0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdefSee code: src/commands/helper/derive-enode.ts
scrollsdk helper fund-accounts
Fund L1 and L2 accounts for contracts
USAGE
$ scrollsdk helper fund-accounts [-a <value>] [-f <value>] [-c <value>] [-n <value>] [-d] [-i] [-o <value>] [-t <value>]
[-l 1|2] [-m] [-p] [-k <value>]
FLAGS
-a, --account=<value> Additional account to fund
-c, --config=<value> [default: ./config.toml] Path to config.toml file
-d, --dev Use Anvil devnet funding logic
-f, --amount=<value> [default: 0.1] Amount to fund in ETH
-i, --fund-deployer Fund the deployer address only
-k, --private-key=<value> Private key for funder wallet
-l, --layer=<option> Specify layer to fund (1 for L1, 2 for L2)
<options: 1|2>
-m, --manual Manually fund the accounts
-n, --contracts=<value> [default: ./config-contracts.toml] Path to configs-contracts.toml file
-o, --l1rpc=<value> L1 RPC URL
-p, --pod Run inside Kubernetes pod
-t, --l2rpc=<value> L2 RPC URL
DESCRIPTION
Fund L1 and L2 accounts for contractsSee code: src/commands/helper/fund-accounts.ts
scrollsdk helper set-scalars
Set commit and blob scalars for Scroll SDK
USAGE
$ scrollsdk helper set-scalars [--blobScalar <value>] [--commitScalar <value>] [-c <value>] [-n <value>] [-k <value>]
[-p] [-r <value>]
FLAGS
-c, --config=<value> [default: ./config.toml] Path to config.toml file
-k, --k=<value> Private key of the Owner
-n, --contracts=<value> [default: ./config-contracts.toml] Path to configs-contracts.toml file
-p, --pod Run inside Kubernetes pod
-r, --rpc=<value> RPC URL (overrides config)
--blobScalar=<value> Value for setBlobScalar
--commitScalar=<value> Value for setCommitScalar
DESCRIPTION
Set commit and blob scalars for Scroll SDKSee code: src/commands/helper/set-scalars.ts
scrollsdk plugins
List installed plugins.
USAGE
$ scrollsdk plugins [--json] [--core]
FLAGS
--core Show core plugins.
GLOBAL FLAGS
--json Format output as json.
DESCRIPTION
List installed plugins.
EXAMPLES
$ scrollsdk pluginsSee code: @oclif/plugin-plugins
scrollsdk plugins add PLUGIN
Installs a plugin into scrollsdk.
USAGE
$ scrollsdk plugins add PLUGIN... [--json] [-f] [-h] [-s | -v]
ARGUMENTS
PLUGIN... Plugin to install.
FLAGS
-f, --force Force npm to fetch remote resources even if a local copy exists on disk.
-h, --help Show CLI help.
-s, --silent Silences npm output.
-v, --verbose Show verbose npm output.
GLOBAL FLAGS
--json Format output as json.
DESCRIPTION
Installs a plugin into scrollsdk.
Uses npm to install plugins.
Installation of a user-installed plugin will override a core plugin.
Use the SCROLLSDK_NPM_LOG_LEVEL environment variable to set the npm loglevel.
Use the SCROLLSDK_NPM_REGISTRY environment variable to set the npm registry.
ALIASES
$ scrollsdk plugins add
EXAMPLES
Install a plugin from npm registry.
$ scrollsdk plugins add myplugin
Install a plugin from a github url.
$ scrollsdk plugins add https://github.com/someuser/someplugin
Install a plugin from a github slug.
$ scrollsdk plugins add someuser/somepluginscrollsdk plugins:inspect PLUGIN...
Displays installation properties of a plugin.
USAGE
$ scrollsdk plugins inspect PLUGIN...
ARGUMENTS
PLUGIN... [default: .] Plugin to inspect.
FLAGS
-h, --help Show CLI help.
-v, --verbose
GLOBAL FLAGS
--json Format output as json.
DESCRIPTION
Displays installation properties of a plugin.
EXAMPLES
$ scrollsdk plugins inspect mypluginSee code: @oclif/plugin-plugins
scrollsdk plugins install PLUGIN
Installs a plugin into scrollsdk.
USAGE
$ scrollsdk plugins install PLUGIN... [--json] [-f] [-h] [-s | -v]
ARGUMENTS
PLUGIN... Plugin to install.
FLAGS
-f, --force Force npm to fetch remote resources even if a local copy exists on disk.
-h, --help Show CLI help.
-s, --silent Silences npm output.
-v, --verbose Show verbose npm output.
GLOBAL FLAGS
--json Format output as json.
DESCRIPTION
Installs a plugin into scrollsdk.
Uses npm to install plugins.
Installation of a user-installed plugin will override a core plugin.
Use the SCROLLSDK_NPM_LOG_LEVEL environment variable to set the npm loglevel.
Use the SCROLLSDK_NPM_REGISTRY environment variable to set the npm registry.
ALIASES
$ scrollsdk plugins add
EXAMPLES
Install a plugin from npm registry.
$ scrollsdk plugins install myplugin
Install a plugin from a github url.
$ scrollsdk plugins install https://github.com/someuser/someplugin
Install a plugin from a github slug.
$ scrollsdk plugins install someuser/somepluginSee code: @oclif/plugin-plugins
scrollsdk plugins link PATH
Links a plugin into the CLI for development.
USAGE
$ scrollsdk plugins link PATH [-h] [--install] [-v]
ARGUMENTS
PATH [default: .] path to plugin
FLAGS
-h, --help Show CLI help.
-v, --verbose
--[no-]install Install dependencies after linking the plugin.
DESCRIPTION
Links a plugin into the CLI for development.
Installation of a linked plugin will override a user-installed or core plugin.
e.g. If you have a user-installed or core plugin that has a 'hello' command, installing a linked plugin with a 'hello'
command will override the user-installed or core plugin implementation. This is useful for development work.
EXAMPLES
$ scrollsdk plugins link mypluginSee code: @oclif/plugin-plugins
scrollsdk plugins remove [PLUGIN]
Removes a plugin from the CLI.
USAGE
$ scrollsdk plugins remove [PLUGIN...] [-h] [-v]
ARGUMENTS
PLUGIN... plugin to uninstall
FLAGS
-h, --help Show CLI help.
-v, --verbose
DESCRIPTION
Removes a plugin from the CLI.
ALIASES
$ scrollsdk plugins unlink
$ scrollsdk plugins remove
EXAMPLES
$ scrollsdk plugins remove mypluginscrollsdk plugins reset
Remove all user-installed and linked plugins.
USAGE
$ scrollsdk plugins reset [--hard] [--reinstall]
FLAGS
--hard Delete node_modules and package manager related files in addition to uninstalling plugins.
--reinstall Reinstall all plugins after uninstalling.See code: @oclif/plugin-plugins
scrollsdk plugins uninstall [PLUGIN]
Removes a plugin from the CLI.
USAGE
$ scrollsdk plugins uninstall [PLUGIN...] [-h] [-v]
ARGUMENTS
PLUGIN... plugin to uninstall
FLAGS
-h, --help Show CLI help.
-v, --verbose
DESCRIPTION
Removes a plugin from the CLI.
ALIASES
$ scrollsdk plugins unlink
$ scrollsdk plugins remove
EXAMPLES
$ scrollsdk plugins uninstall mypluginSee code: @oclif/plugin-plugins
scrollsdk plugins unlink [PLUGIN]
Removes a plugin from the CLI.
USAGE
$ scrollsdk plugins unlink [PLUGIN...] [-h] [-v]
ARGUMENTS
PLUGIN... plugin to uninstall
FLAGS
-h, --help Show CLI help.
-v, --verbose
DESCRIPTION
Removes a plugin from the CLI.
ALIASES
$ scrollsdk plugins unlink
$ scrollsdk plugins remove
EXAMPLES
$ scrollsdk plugins unlink mypluginscrollsdk plugins update
Update installed plugins.
USAGE
$ scrollsdk plugins update [-h] [-v]
FLAGS
-h, --help Show CLI help.
-v, --verbose
DESCRIPTION
Update installed plugins.See code: @oclif/plugin-plugins
scrollsdk setup bootnode-public-p2p
Enable external nodes to form P2P network with cluster bootnodes by setting up static IPs and LoadBalancer services
USAGE
$ scrollsdk setup bootnode-public-p2p [--cluster-name <value>] [--json] [-N] [--provider aws|gcp] [--region <value>]
[--values-dir <value>]
FLAGS
-N, --non-interactive Run without prompts. Requires --provider flag.
--cluster-name=<value> Kubernetes cluster name for resource tagging and identification
--json Output in JSON format (stdout for data, stderr for logs)
--provider=<option> Cloud provider for static IP allocation (aws, gcp)
<options: aws|gcp>
--region=<value> Cloud provider region where resources will be created
--values-dir=<value> [default: ./values] Directory containing Helm values files for configuration
DESCRIPTION
Enable external nodes to form P2P network with cluster bootnodes by setting up static IPs and LoadBalancer services
EXAMPLES
# Setup static IPs with interactive provider selection
$ scrollsdk setup bootnode-public-p2p
# Setup static IPs for AWS with specific cluster and region
$ scrollsdk setup bootnode-public-p2p --provider=aws --cluster-name=my-cluster --region=us-west-2
# Setup with custom values directory
$ scrollsdk setup bootnode-public-p2p --values-dir=./custom-values
# Non-interactive mode (requires --provider)
$ scrollsdk setup bootnode-public-p2p --non-interactive --provider=aws --cluster-name=my-cluster --region=us-west-2
# JSON output mode
$ scrollsdk setup bootnode-public-p2p --non-interactive --json --provider=aws --cluster-name=my-cluster --region=us-west-2See code: src/commands/setup/bootnode-public-p2p.ts
scrollsdk setup configs
Generate configuration files and create environment files for services
USAGE
$ scrollsdk setup configs [--base-fee-per-gas <value>] [--configs-dir <value>] [--deployment-salt <value>]
[--doge-config <value>] [--image-tag <value>] [--json] [--l1-fee-vault-addr <value>] [--l1-plonk-verifier-addr
<value>] [--l2-bridge-fee-recipient-addr <value>] [-N] [--skip-deployment-salt-update] [--skip-genesis]
[--skip-l1-fee-vault-update] [--skip-l1-plonk-verifier-update]
FLAGS
-N, --non-interactive Run without prompts. Uses config values or sensible defaults.
--base-fee-per-gas=<value> Base fee per gas (non-interactive mode). Uses existing config value if not
provided.
--configs-dir=<value> [default: values] Directory name to copy configs to
--deployment-salt=<value> Deployment salt value (non-interactive mode). If not provided, keeps
existing or auto-increments.
--doge-config=<value> Path to config file (e.g., .data/doge-config-mainnet.toml or
.data/doge-config-testnet.toml)
--image-tag=<value> Specify the Docker image tag to use
--json Output in JSON format (stdout for data, stderr for logs)
--l1-fee-vault-addr=<value> L1 fee vault address (non-interactive mode). Defaults to OWNER_ADDR.
--l1-plonk-verifier-addr=<value> L1 plonk verifier address (non-interactive mode). If not provided, one
will be deployed.
--l2-bridge-fee-recipient-addr=<value> L2 bridge fee recipient address (non-interactive mode). Defaults to zero
address.
--skip-deployment-salt-update Skip deployment salt update (non-interactive mode)
--skip-genesis Skip genesis file generation (Docker step)
--skip-l1-fee-vault-update Skip L1 fee vault address update (non-interactive mode)
--skip-l1-plonk-verifier-update Skip L1 plonk verifier address update (non-interactive mode)
DESCRIPTION
Generate configuration files and create environment files for services
EXAMPLES
$ scrollsdk setup configs
$ scrollsdk setup configs --image-tag gen-configs-v0.2.0-debug
$ scrollsdk setup configs --configs-dir ./configs-overrideSee code: src/commands/setup/configs.ts
scrollsdk setup cubesigner-init
Setup cubesigner keys and roles
USAGE
$ scrollsdk setup cubesigner-init [--count <value>] [--doge-config <value>] [--json] [--new] [-N] [--role-prefix <value>]
[--roles <value>...] [--threshold <value>]
FLAGS
-N, --non-interactive Run without prompts. Requires --doge-config and either --new (with --count, --role-prefix)
or --roles.
--count=<value> Number of keys/roles to create (when using --new)
--doge-config=<value> Path to config file (e.g., .data/doge-config-mainnet.toml or
.data/doge-config-testnet.toml)
--json Output in JSON format (stdout for data, stderr for logs)
--new Create new roles and keys
--role-prefix=<value> Prefix for role names (when using --new)
--roles=<value>... Comma-separated list of existing role names to use
--threshold=<value> Attestation threshold (how many signatures required). Defaults to 2/3 majority.
DESCRIPTION
Setup cubesigner keys and roles
EXAMPLES
$ scrollsdk setup cubesigner-init --roles foo_role bar_role baz_role
$ scrollsdk setup cubesigner-init --new --count 4 --role-prefix attestor
$ scrollsdk setup cubesigner-init --new --count 3 --role-prefix validator
$ scrollsdk setup cubesigner-init --roles role_a role_b --doge-config .data/doge-config-testnet.toml
$ scrollsdk setup cubesigner-init
$ scrollsdk setup cubesigner-init --non-interactive --new --count 3 --role-prefix validator --threshold 2 --doge-config .data/doge-config-testnet.toml
$ scrollsdk setup cubesigner-init --non-interactive --json --roles role_a role_b --threshold 2 --doge-config .data/doge-config-testnet.tomlSee code: src/commands/setup/cubesigner-init.ts
scrollsdk setup cubesigner-refresh
Refresh cubesigner session secrets
USAGE
$ scrollsdk setup cubesigner-refresh [--doge-config <value>] [--email <value>] [--environment <value>] [--json] [-N]
[--org-id <value>]
FLAGS
-N, --non-interactive Run without prompts. Requires --doge-config. If not logged in, also requires --org-id and
--email.
--doge-config=<value> Path to config file (e.g., .data/doge-config-mainnet.toml or
.data/doge-config-testnet.toml)
--email=<value> CubeSigner account email (for non-interactive login if not already logged in)
--environment=<value> [default: gamma] CubeSigner environment (default: gamma)
--json Output in JSON format (stdout for data, stderr for logs)
--org-id=<value> CubeSigner organization ID (for non-interactive login if not already logged in)
DESCRIPTION
Refresh cubesigner session secrets
EXAMPLES
$ scrollsdk setup cubesigner-refresh
$ scrollsdk setup cubesigner-refresh --doge-config .data/doge-config-testnet.toml
$ scrollsdk setup cubesigner-refresh --non-interactive --doge-config .data/doge-config-testnet.toml
$ scrollsdk setup cubesigner-refresh --non-interactive --json --doge-config .data/doge-config-testnet.toml --org-id Org#xxx --email [email protected]See code: src/commands/setup/cubesigner-refresh.ts
scrollsdk setup db-init
Initialize databases with new users and passwords interactively or update permissions
USAGE
$ scrollsdk setup db-init [-c] [-d] [--json] [-N] [-u] [--update-port <value>]
FLAGS
-N, --non-interactive Run without prompts, using config.toml values. Requires [db.admin] section with
PUBLIC_HOST, PUBLIC_PORT, USERNAME, PASSWORD (or $ENV: refs)
-c, --clean Delete existing database and user before creating new ones
-d, --debug Show debug output including SQL queries
-u, --update-permissions Update permissions for existing users
--json Output in JSON format (stdout for data, stderr for logs)
--update-port=<value> Update the port of current database values
DESCRIPTION
Initialize databases with new users and passwords interactively or update permissions
EXAMPLES
$ scrollsdk setup db-init
$ scrollsdk setup db-init --update-permissions
$ scrollsdk setup db-init --update-permissions --debug
$ scrollsdk setup db-init --clean
$ scrollsdk setup db-init --update-db-port=25061
$ scrollsdk setup db-init --non-interactive
$ scrollsdk setup db-init --non-interactive --json --cleanSee code: src/commands/setup/db-init.ts
scrollsdk setup disable-internal
Disable ingress for internal services (Celestia, Dogecoin, Anvil L1)
USAGE
$ scrollsdk setup disable-internal [--dry-run] [-f] [--list-k8s | | [--disable <value> | --list | --enable <value> |
--disable-internal] | | ] [-n <value>] [--skip-helm] [--values-dir <value>]
FLAGS
-f, --force Skip confirmation prompts
-n, --namespace=<value> [default: default] Kubernetes namespace
--disable=<value> Disable ingress for a service
--disable-internal Disable all internal services (Celestia, Dogecoin, Anvil L1) using kubectl
--dry-run Show what would be deleted without actually deleting
--enable=<value> Enable ingress for a service
--list List current ingress status from local values files
--list-k8s List current ingress status from Kubernetes cluster
--skip-helm Skip helm upgrade
--values-dir=<value> [default: ./values] Directory containing values files
DESCRIPTION
Disable ingress for internal services (Celestia, Dogecoin, Anvil L1)
EXAMPLES
$ scrollsdk setup disable-internal
$ scrollsdk setup disable-internal --namespace scroll
$ scrollsdk setup disable-internal --dry-run
$ scrollsdk setup disable-internal --list
$ scrollsdk setup disable-internal --list-k8s
$ scrollsdk setup disable-internal --enable l2-rpc
$ scrollsdk setup disable-internal --disable frontendsSee code: src/commands/setup/disable-internal.ts
scrollsdk setup dogecoin-wallet-import
Dogecoin wallet import
USAGE
$ scrollsdk setup dogecoin-wallet-import [--doge-config <value>] [--image-tag <value>]
FLAGS
--doge-config=<value> Path to doge-config toml (e.g., .data/doge-config-testnet.toml)
--image-tag=<value> Docker image tag
DESCRIPTION
Dogecoin wallet importSee code: src/commands/setup/dogecoin-wallet-import.ts
scrollsdk setup domains
Set up domain configurations for external services
USAGE
$ scrollsdk setup domains [--json] [-N]
FLAGS
-N, --non-interactive Run without prompts, using config.toml values
--json Output in JSON format (stdout for data, stderr for logs)
DESCRIPTION
Set up domain configurations for external services
EXAMPLES
$ scrollsdk setup domains
$ scrollsdk setup domains --non-interactive
$ scrollsdk setup domains --non-interactive --jsonSee code: src/commands/setup/domains.ts
scrollsdk setup gas-token
Set up gas token configurations
USAGE
$ scrollsdk setup gas-token
DESCRIPTION
Set up gas token configurations
EXAMPLES
$ scrollsdk setup gas-tokenSee code: src/commands/setup/gas-token.ts
scrollsdk setup gen-keystore
Generate keystore and account keys for L2 Geth
USAGE
$ scrollsdk setup gen-keystore [--accounts] [--bootnode-count <value>] [--json] [-N] [--regenerate-bootnodes]
[--regenerate-sequencers] [--sequencer-count <value>] [--sequencer-password <value>]
FLAGS
-N, --non-interactive Run without prompts. Uses existing keys or generates new ones based on flags.
--[no-]accounts Generate account key pairs
--bootnode-count=<value> [default: 2] Number of bootnodes. In non-interactive mode, generates if not enough
exist.
--json Output in JSON format (stdout for data, stderr for logs)
--regenerate-bootnodes Force regeneration of all bootnode keys (non-interactive mode)
--regenerate-sequencers Force regeneration of all sequencer keys (non-interactive mode)
--sequencer-count=<value> [default: 2] Number of sequencers (including primary). In non-interactive mode,
generates if not enough exist.
--sequencer-password=<value> Password for sequencer keystores (or use $ENV:VAR_NAME pattern in config). Required
for new sequencers in non-interactive mode.
DESCRIPTION
Generate keystore and account keys for L2 Geth
EXAMPLES
$ scrollsdk setup gen-keystore
$ scrollsdk setup gen-keystore --no-accounts
$ scrollsdk setup gen-keystore --non-interactive
$ scrollsdk setup gen-keystore --non-interactive --json --sequencer-count 2 --bootnode-count 2See code: src/commands/setup/gen-keystore.ts
scrollsdk setup gen-rpc-package
Generate configuration files for dogeos-rpc-package to enable external RPC nodes
USAGE
$ scrollsdk setup gen-rpc-package -d <value> [--config-path <value>] [--doge-config <value>] [-n <value>] [--values-dir
<value>]
FLAGS
-d, --dogeos-rpc-package-dir=<value> (required) Path to dogeos-rpc-package project directory (clone from
https://github.com/dogeos69/dogeos-rpc-package)
-n, --namespace=<value> Kubernetes namespace
--config-path=<value> [default: ./config.toml] Path to config.toml file containing cluster
configuration
--doge-config=<value> Path to doge config file to determine network type (mainnet/testnet)
--values-dir=<value> [default: ./values] Directory containing Helm values files (must include
genesis.yaml)
DESCRIPTION
Generate configuration files for dogeos-rpc-package to enable external RPC nodes
EXAMPLES
# Generate RPC package (dogeos-rpc-package directory is required)
$ scrollsdk setup gen-rpc-package -d ~/github/dogeos-rpc-package/
# Generate mainnet RPC package with specific config and namespace
$ scrollsdk setup gen-rpc-package --doge-config .data/doge-config-mainnet.toml -d ~/github/dogeos-rpc-package/ -n scroll-mainnet
# First clone the project: git clone https://github.com/dogeos69/dogeos-rpc-package
$ scrollsdk setup gen-rpc-package -d ./dogeos-rpc-package/ --namespace defaultSee code: src/commands/setup/gen-rpc-package.ts
scrollsdk setup generate-from-spec
Generate all configuration files from a DeploymentSpec YAML file
USAGE
$ scrollsdk setup generate-from-spec -s <value> [--config-only] [--dry-run] [-f] [--json] [-o <value>] [--values-only]
FLAGS
-f, --force Overwrite existing files without warning
-o, --output=<value> [default: .] Output directory for generated files
-s, --spec=<value> (required) Path to DeploymentSpec YAML file
--config-only Only generate config.toml, doge-config.toml, setup_defaults.toml
--dry-run Validate spec and show what would be generated without writing files
--json Output in JSON format (stdout for data, stderr for logs)
--values-only Only generate values/*.yaml Helm files
DESCRIPTION
Generate all configuration files from a DeploymentSpec YAML file
EXAMPLES
# Generate configs in current directory
$ scrollsdk setup generate-from-spec --spec deployment-spec.yaml
# Generate configs to specific output directory
$ scrollsdk setup generate-from-spec --spec deployment-spec.yaml --output ./my-deployment
# Generate with JSON output for automation
$ scrollsdk setup generate-from-spec --spec deployment-spec.yaml --json
# Dry run - validate and show what would be generated
$ scrollsdk setup generate-from-spec --spec deployment-spec.yaml --dry-run
# Generate only specific config types
$ scrollsdk setup generate-from-spec --spec deployment-spec.yaml --config-only
$ scrollsdk setup generate-from-spec --spec deployment-spec.yaml --values-onlySee code: src/commands/setup/generate-from-spec.ts
scrollsdk setup prep-charts
Validate Makefile and prepare Helm charts for Scroll SDK
USAGE
$ scrollsdk setup prep-charts [--doge-config <value>] [--github-token <value>] [--github-username <value>] [--json]
[-N] [--skip-auth-check] [--values-dir <value>]
FLAGS
-N, --non-interactive Run without prompts. Auto-applies all detected changes.
--doge-config=<value> Path to config file (e.g., .data/doge-config-mainnet.toml or
.data/doge-config-testnet.toml)
--github-token=<value> GitHub Personal Access Token
--github-username=<value> GitHub username
--json Output in JSON format (stdout for data, stderr for logs)
--skip-auth-check Skip authentication check for individual charts
--values-dir=<value> [default: ./values] Directory containing values files
DESCRIPTION
Validate Makefile and prepare Helm charts for Scroll SDK
EXAMPLES
$ scrollsdk setup prep-charts
$ scrollsdk setup prep-charts --github-username=your-username --github-token=your-token
$ scrollsdk setup prep-charts --values-dir=./custom-values
$ scrollsdk setup prep-charts --skip-auth-checkSee code: src/commands/setup/prep-charts.ts
scrollsdk setup push-secrets
Push secrets to the selected secret service
USAGE
$ scrollsdk setup push-secrets [--aws-prefix <value>] [--aws-region <value>] [--aws-service-account <value>] [-c] [-d]
[-f <value>] [--json] [-N] [--provider aws|vault] [--skip-yaml-update] [--values-dir <value>] [--vault-path <value>]
[--vault-server <value>] [--vault-token-secret-key <value>] [--vault-token-secret-name <value>] [--vault-version
<value>]
FLAGS
-N, --non-interactive Run without prompts. Auto-overrides existing secrets.
-c, --cubesigner-only Only push CubeSigner related secrets (cubesigner-signer-* files)
-d, --debug Show debug output
-f, --file=<value> Specific secret file to push (e.g., my-secret.json)
--aws-prefix=<value> [default: dogeos] AWS Secrets Manager path prefix (e.g., dogeos/testnet)
--aws-region=<value> AWS region for secrets (e.g., us-east-1)
--aws-service-account=<value> [default: external-secrets] AWS IAM service account
--json Output in JSON format (stdout for data, stderr for logs)
--provider=<option> Secret service provider (aws or vault). Required for non-interactive mode.
<options: aws|vault>
--skip-yaml-update Skip updating production YAML files with new secret provider
--values-dir=<value> [default: values] Directory containing the values files
--vault-path=<value> [default: scroll] Vault path prefix
--vault-server=<value> [default: http://vault.default.svc.cluster.local:8200] Vault server URL
--vault-token-secret-key=<value> [default: token] Vault token secret key
--vault-token-secret-name=<value> [default: vault-token] Vault token secret name
--vault-version=<value> [default: v2] Vault version
DESCRIPTION
Push secrets to the selected secret service
EXAMPLES
$ scrollsdk setup push-secrets
$ scrollsdk setup push-secrets --debug
$ scrollsdk setup push-secrets --values-dir custom-values
$ scrollsdk setup push-secrets --cubesigner-only
$ scrollsdk setup push-secrets -c --debugSee code: src/commands/setup/push-secrets.ts
scrollsdk setup tls
Update TLS configuration in Helm charts
USAGE
$ scrollsdk setup tls [--cluster-issuer <value>] [--create-issuer] [-d] [--issuer-email <value>] [--json]
[-N] [--values-dir <value>]
FLAGS
-N, --non-interactive Run without prompts. Requires --cluster-issuer or (--create-issuer with --issuer-email)
-d, --debug Show debug output and confirm before making changes
--cluster-issuer=<value> Specify the ClusterIssuer to use (for non-interactive mode)
--create-issuer Create a letsencrypt-prod ClusterIssuer if none exists (for non-interactive mode)
--issuer-email=<value> Email address for the ClusterIssuer (required with --create-issuer)
--json Output in JSON format (stdout for data, stderr for logs)
--values-dir=<value> [default: values] Directory containing the values files
DESCRIPTION
Update TLS configuration in Helm charts
EXAMPLES
$ scrollsdk setup tls
$ scrollsdk setup tls --debug
$ scrollsdk setup tls --values-dir custom-values
$ scrollsdk setup tls --non-interactive --cluster-issuer letsencrypt-prod
$ scrollsdk setup tls --non-interactive --json --cluster-issuer letsencrypt-prod
$ scrollsdk setup tls --non-interactive --create-issuer --issuer-email [email protected]See code: src/commands/setup/tls.ts
scrollsdk setup verify-contracts
Set up contracts verification
USAGE
$ scrollsdk setup verify-contracts [--image-tag <value>]
FLAGS
--image-tag=<value> Specify the Docker image tag to use
DESCRIPTION
Set up contracts verification
EXAMPLES
$ scrollsdk setup verify-contracts
$ scrollsdk setup verify-contracts --image-tag verify-v0.2.0-debugSee code: src/commands/setup/verify-contracts.ts
scrollsdk test contracts
Test contracts by checking deployment and initialization
USAGE
$ scrollsdk test contracts [-c <value>] [-n <value>] [-p]
FLAGS
-c, --config=<value> [default: ./config.toml] Path to config.toml file
-n, --contracts=<value> [default: ./config-contracts.toml] Path to configs-contracts.toml file
-p, --pod Run inside Kubernetes pod
DESCRIPTION
Test contracts by checking deployment and initializationSee code: src/commands/test/contracts.ts
scrollsdk test dependencies
Check for required dependencies
USAGE
$ scrollsdk test dependencies [-d]
FLAGS
-d, --dev Include development dependencies
DESCRIPTION
Check for required dependenciesSee code: src/commands/test/dependencies.ts
scrollsdk test dogeos [CASENAME]
Run DogeOS integration tests.
USAGE
$ scrollsdk test dogeos [CASENAME] [--attackValue <value>] [-b <value>] [--l2PrivateKey <value>] [-m <value>]
[-c <value>] [-v <value>] [--verbose]
ARGUMENTS
CASENAME The name of the case to run
FLAGS
-b, --blockbookurl=<value> [default: https://doge-electrs-testnet-demo.qed.me] blockbook url
-c, --outputcount=<value> [default: 24] Number of P2PKH outputs when running the multiple-output scenario
-m, --masterwif=<value> [default: cftTTdqFUYi3Njx4VLZGATAFCuX8wetJddD71FGmC91wKJ2XidVY] master wif key, provide
test dogecoin
-v, --outputvalue=<value> [default: 1000000] Value per P2PKH output (in dogetoshis) when running the multiple-output
scenario
--attackValue=<value> [default: 100000000000] Output value in dogetoshis for bridge UTXO attack scenario
--l2PrivateKey=<value> [default: 0x713137ab6bfaf197200b4f1e033bb3abadaf76564f6b2ca4f00aaa90c3c8efe5]
--verbose Enable detailed verbose logging
DESCRIPTION
Run DogeOS integration tests.
Available Test Cases:
- 1: Multiple OP_RETURN - Send a transaction with multiple OP_RETURN outputs
- 2: Multiple Output - Send a transaction with many P2PKH outputs
- 3: Bridge UTXO Attack - Simulate a UTXO fan-out attack on the bridge
- 4: Multiple Withdrawal Per Tx - Test multiple withdrawals in a single L2 transaction
- 5: Large PSBT - Construct and broadcast a large transaction with many inputs
- 6: Fee Wallet 2000 Inputs - Send M+1 to the fee wallet using 2000 inputs via an agent
- 7: Replace Mempool TXs (Master) - Bump-fee replace masterAddress mempool transactions with self-spends
- 8: CPFP Master Mempool - Use CPFP to bump-fee unconfirmed masterAddress transactions
- 0: Run All Cases - Execute all test cases sequentially
EXAMPLES
$ scrollsdk test dogeos
$ scrollsdk test dogeos multiple-opreturn
$ scrollsdk test dogeos multiple-output --bridge=n...See code: src/commands/test/dogeos.ts
scrollsdk test e2e
Test contracts by checking deployment and initialization
USAGE
$ scrollsdk test e2e [-c <value>] [-n <value>] [-m] [-p] [-k <value>] [-r] [-s]
FLAGS
-c, --config=<value> [default: ./config.toml] Path to config.toml file
-k, --private-key=<value> Private key for funder wallet initialization
-m, --manual Manually fund the test wallet.
-n, --contracts=<value> [default: ./config-contracts.toml] Path to configs-contracts.toml file
-p, --pod Run inside Kubernetes pod
-r, --resume Uses e2e_resume.json to continue last run.
-s, --skip-wallet-generation Manually fund the test wallet.
DESCRIPTION
Test contracts by checking deployment and initializationSee code: src/commands/test/e2e.ts
scrollsdk test ingress
Check for required ingress hosts and validate frontend URLs
USAGE
$ scrollsdk test ingress [-c <value>] [-d] [-n <value>]
FLAGS
-c, --config=<value> Path to config.toml file
-d, --dev Include development ingresses
-n, --namespace=<value> [default: default] Kubernetes namespace
DESCRIPTION
Check for required ingress hosts and validate frontend URLsSee code: src/commands/test/ingress.ts
