Bird
Raised Fist0
Blockchain / Solidityprogramming~10 mins

Deploying to L2 networks in Blockchain / Solidity - Interactive Code Practice

Choose your learning style10 modes available

Start learning this pattern below

Jump into concepts and practice - no test required

or
Recommended
Test this pattern10 questions across easy, medium, and hard to know if this pattern is strong
Practice - 5 Tasks
Answer the questions below
1fill in blank
easy

Complete the code to specify the Layer 2 network RPC URL.

Blockchain / Solidity
const provider = new ethers.providers.JsonRpcProvider('[1]');
Drag options to blanks, or click blank then click option'
Ahttps://polygon-mumbai.infura.io/v3/YOUR-PROJECT-ID
Bhttps://rinkeby.infura.io/v3/YOUR-PROJECT-ID
Chttps://localhost:8545
Dhttps://mainnet.infura.io/v3/YOUR-PROJECT-ID
Attempts:
3 left
💡 Hint
Common Mistakes
Using a mainnet RPC URL instead of an L2 testnet URL.
Using a local blockchain URL which is not an L2 network.
2fill in blank
medium

Complete the code to deploy a contract using the signer connected to the L2 network.

Blockchain / Solidity
const signer = new ethers.Wallet('0xYOUR_PRIVATE_KEY', provider);
const factory = new ethers.ContractFactory(abi, bytecode, [1]);
const contract = await factory.deploy();
Drag options to blanks, or click blank then click option'
Asigner
Bprovider
Cwallet
Dcontract
Attempts:
3 left
💡 Hint
Common Mistakes
Passing the provider instead of the signer.
Passing an undefined wallet object.
3fill in blank
hard

Fix the error in the code to wait for the contract deployment transaction to be mined on the L2 network.

Blockchain / Solidity
const tx = contract.deployTransaction;
await tx.[1]();
Drag options to blanks, or click blank then click option'
Aconfirm
Bwait
Cmine
Dsend
Attempts:
3 left
💡 Hint
Common Mistakes
Using 'send' which sends a transaction but does not wait.
Using 'mine' or 'confirm' which are not valid methods.
4fill in blank
hard

Fill the blanks to create an object that maps contract names to their deployed addresses on the L2 network, filtering only those with addresses starting with '0x'.

Blockchain / Solidity
const deployedContracts = Object.keys(contracts).reduce((acc, [1]) => {
  if (contracts[[1]].address && contracts[[1]].address.[2]('0x')) {
    acc[[1]] = contracts[[1]].address;
  }
  return acc;
}, {});
Drag options to blanks, or click blank then click option'
Aname
BstartsWith
Cincludes
Daddress
Attempts:
3 left
💡 Hint
Common Mistakes
Using 'includes' instead of 'startsWith' which checks anywhere in the string.
Using 'address' as the loop variable which is incorrect.
5fill in blank
hard

Fill all three blanks to filter and map contract deployment info: create a new object with keys as uppercased contract names, values as addresses, only for contracts deployed on the L2 network with gas used greater than 100000.

Blockchain / Solidity
const filteredContracts = Object.entries(deployments).reduce((acc, [constName, info]) => {
  if (info.network === 'L2' && info.gasUsed [3] 100000) {
    acc[[1]] = [2];
  }
  return acc;
}, {});
Drag options to blanks, or click blank then click option'
AconstName.toUpperCase()
Binfo.address
C>
DconstName
Attempts:
3 left
💡 Hint
Common Mistakes
Using the original contract name instead of uppercased.
Using '<' instead of '>' for gasUsed comparison.

Practice

(1/5)
1. What is the main benefit of deploying smart contracts to Layer 2 (L2) networks?
easy
A. Increased decentralization over Layer 1
B. More complex contract code execution
C. Faster transactions and lower fees compared to Layer 1
D. Unlimited storage capacity for contracts

Solution

  1. Step 1: Understand Layer 2 purpose

    Layer 2 networks are designed to improve blockchain scalability by handling transactions off the main chain.
  2. Step 2: Identify benefits of L2

    This results in faster transaction speeds and lower fees compared to Layer 1.
  3. Final Answer:

    Faster transactions and lower fees compared to Layer 1 -> Option C
  4. Quick Check:

    L2 improves speed and cost [OK]
Hint: L2 means faster and cheaper transactions than L1 [OK]
Common Mistakes:
  • Confusing L2 with increased decentralization
  • Thinking L2 allows unlimited storage
  • Assuming L2 makes contracts more complex
2. Which of the following is the correct syntax to specify an L2 network in a deployment script using Hardhat?
easy
A. "network: 'layer2'" inside the config file
B. "network: 'l1'" inside the deployment script
C. "network: 'mainnet'" inside the config file
D. network: 'layer2'" without quotes in the script

Solution

  1. Step 1: Recognize correct network naming

    In Hardhat config, network names are strings and must be quoted.
  2. Step 2: Identify L2 network syntax

    Using "network: 'layer2'" inside the config file is the correct way to specify the L2 network.
  3. Final Answer:

    "network: 'layer2'" inside the config file -> Option A
  4. Quick Check:

    Network names are strings in config [OK]
Hint: Network names must be strings in config files [OK]
Common Mistakes:
  • Using unquoted network names causing syntax errors
  • Confusing L1 and L2 network names
  • Placing network setting inside deployment script instead of config
3. Given this deployment snippet for an L2 network:
const network = 'layer2';
console.log(`Deploying to ${network}`);
What will be the output?
medium
A. Deploying to ${network}
B. Deploying to layer2
C. Deploying to network
D. Error: network not defined

Solution

  1. Step 1: Understand template literals

    The backticks and ${} syntax insert variable values into strings.
  2. Step 2: Substitute variable value

    Here, ${network} becomes 'layer2', so the output is 'Deploying to layer2'.
  3. Final Answer:

    Deploying to layer2 -> Option B
  4. Quick Check:

    Template literal inserts variable [OK]
Hint: Backticks with ${} insert variables in strings [OK]
Common Mistakes:
  • Confusing template literals with normal quotes
  • Expecting literal ${network} output
  • Assuming variable is undefined
4. You try to deploy a contract to an L2 testnet but get an error: "Invalid RPC URL". What is the most likely cause?
medium
A. Your private key is invalid
B. The contract code has syntax errors
C. You forgot to compile the contract
D. The RPC URL for the L2 network is missing or incorrect in the config

Solution

  1. Step 1: Understand RPC URL role

    The RPC URL connects your deployment tool to the blockchain network.
  2. Step 2: Link error to cause

    An "Invalid RPC URL" error means the URL is missing or wrong in the config file.
  3. Final Answer:

    The RPC URL for the L2 network is missing or incorrect in the config -> Option D
  4. Quick Check:

    Invalid RPC URL means wrong/missing URL [OK]
Hint: Check RPC URL correctness in config first [OK]
Common Mistakes:
  • Assuming contract code errors cause RPC URL errors
  • Ignoring network config settings
  • Not verifying private key separately
5. You want to deploy a contract to an L2 network but keep your private key secure. Which approach is best?
hard
A. Store the private key in environment variables and load it securely
B. Use a public key instead of a private key for deployment
C. Share the private key in the project README for easy access
D. Hardcode the private key in the deployment script

Solution

  1. Step 1: Understand private key security

    Private keys must be kept secret to prevent unauthorized access.
  2. Step 2: Identify secure storage method

    Using environment variables keeps keys out of code and version control, enhancing security.
  3. Final Answer:

    Store the private key in environment variables and load it securely -> Option A
  4. Quick Check:

    Env vars keep keys secret [OK]
Hint: Never hardcode keys; use environment variables [OK]
Common Mistakes:
  • Hardcoding keys in scripts
  • Sharing keys publicly
  • Confusing public and private keys