#!/usr/bin/env bash # This script is used to generate the getting-started.json configuration file # used in the Getting Started quickstart guide on the docs site. Avoids the # need to have the getting-started.json committed to the repo since it's an # invalid JSON file when not filled in, which is annoying. reqenv() { if [ -z "${!1}" ]; then echo "Error: environment variable '$1' is undefined" exit 1 fi } # Check required environment variables reqenv "GS_ADMIN_ADDRESS" reqenv "GS_BATCHER_ADDRESS" reqenv "GS_PROPOSER_ADDRESS" reqenv "GS_SEQUENCER_ADDRESS" reqenv "L1_RPC_URL" # Get the finalized block timestamp and hash block=$(cast block finalized --rpc-url $L1_RPC_URL) timestamp=$(echo "$block" | awk '/timestamp/ { print $2 }') blockhash=$(echo "$block" | awk '/hash/ { print $2 }') # Generate the config file config=$(cat << EOL { "finalSystemOwner": "$GS_ADMIN_ADDRESS", "portalGuardian": "$GS_ADMIN_ADDRESS", "l1StartingBlockTag": "$blockhash", "l1ChainID": 11155111, "l2ChainID": 42069, "l2BlockTime": 2, "l1BlockTime": 12, "maxSequencerDrift": 600, "sequencerWindowSize": 3600, "channelTimeout": 300, "p2pSequencerAddress": "$GS_SEQUENCER_ADDRESS", "batchInboxAddress": "0xff00000000000000000000000000000000042069", "batchSenderAddress": "$GS_BATCHER_ADDRESS", "l2OutputOracleSubmissionInterval": 120, "l2OutputOracleStartingBlockNumber": 0, "l2OutputOracleStartingTimestamp": $timestamp, "l2OutputOracleProposer": "$GS_PROPOSER_ADDRESS", "l2OutputOracleChallenger": "$GS_ADMIN_ADDRESS", "finalizationPeriodSeconds": 12, "proxyAdminOwner": "$GS_ADMIN_ADDRESS", "baseFeeVaultRecipient": "$GS_ADMIN_ADDRESS", "l1FeeVaultRecipient": "$GS_ADMIN_ADDRESS", "sequencerFeeVaultRecipient": "$GS_ADMIN_ADDRESS", "baseFeeVaultMinimumWithdrawalAmount": "0x8ac7230489e80000", "l1FeeVaultMinimumWithdrawalAmount": "0x8ac7230489e80000", "sequencerFeeVaultMinimumWithdrawalAmount": "0x8ac7230489e80000", "baseFeeVaultWithdrawalNetwork": 0, "l1FeeVaultWithdrawalNetwork": 0, "sequencerFeeVaultWithdrawalNetwork": 0, "gasPriceOracleOverhead": 2100, "gasPriceOracleScalar": 1000000, "enableGovernance": true, "governanceTokenSymbol": "OP", "governanceTokenName": "Optimism", "governanceTokenOwner": "$GS_ADMIN_ADDRESS", "l2GenesisBlockGasLimit": "0x1c9c380", "l2GenesisBlockBaseFeePerGas": "0x3b9aca00", "l2GenesisRegolithTimeOffset": "0x0", "eip1559Denominator": 50, "eip1559DenominatorCanyon": 250, "eip1559Elasticity": 10, "systemConfigStartBlock": 0, "requiredProtocolVersion": "0x0000000000000000000000000000000000000000000000000000000000000000", "recommendedProtocolVersion": "0x0000000000000000000000000000000000000000000000000000000000000000" } EOL ) # Write the config file echo "$config" > deploy-config/getting-started.json