Bird
Raised Fist0
Blockchain / Solidityprogramming~20 mins

Sending transactions in Blockchain / Solidity - Practice Problems & Coding Challenges

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
Challenge - 5 Problems
🎖️
Blockchain Transaction Master
Get all challenges correct to earn this badge!
Test your skills under time pressure!
Predict Output
intermediate
2:00remaining
What is the output of this Ethereum transaction code snippet?

Consider this simplified Ethereum transaction sending code using web3.js. What will be printed to the console?

Blockchain / Solidity
const Web3 = require('web3');
const web3 = new Web3('https://mainnet.infura.io/v3/YOUR_PROJECT_ID');

async function sendTx() {
  const accounts = await web3.eth.getAccounts();
  console.log(accounts.length);
}
sendTx();
A0
BAn error because getAccounts is not available on mainnet without unlocked accounts
Cundefined
DA positive number representing accounts length
Attempts:
2 left
💡 Hint

Think about what getAccounts() returns when connected to a public node without unlocked accounts.

Predict Output
intermediate
2:00remaining
What is the output of this Bitcoin transaction fee calculation?

Given this code snippet calculating Bitcoin transaction fee, what is the output?

Blockchain / Solidity
const txSizeBytes = 250;
const feeRateSatsPerByte = 20;
const fee = txSizeBytes * feeRateSatsPerByte;
console.log(fee);
A250
B270
C20
D5000
Attempts:
2 left
💡 Hint

Multiply transaction size by fee rate per byte.

🔧 Debug
advanced
3:00remaining
Why does this Ethereum transaction sending code throw an error?

Look at this code snippet that tries to send an Ethereum transaction. Why does it throw an error?

Blockchain / Solidity
const Web3 = require('web3');
const web3 = new Web3('https://mainnet.infura.io/v3/YOUR_PROJECT_ID');

async function sendTx() {
  const tx = {
    from: '0xYourAddress',
    to: '0xRecipientAddress',
    value: web3.utils.toWei('1', 'ether'),
    gas: 21000
  };
  const receipt = await web3.eth.sendTransaction(tx);
  console.log(receipt);
}
sendTx();
AError because gas limit is too low
BError because the private key is not provided or account is not unlocked
CError because value is not converted to wei correctly
DNo error, transaction will succeed
Attempts:
2 left
💡 Hint

Think about what is needed to sign and send a transaction using a public node.

📝 Syntax
advanced
3:00remaining
Which option correctly creates and signs a transaction in Ethereum using ethers.js?

Choose the code snippet that correctly creates and signs a transaction using ethers.js.

A
const wallet = new ethers.Wallet(privateKey);
const tx = { to: recipient, value: ethers.utils.parseEther('1') };
const signedTx = wallet.signTransaction(tx);
console.log(signedTx);
B
const wallet = new ethers.Wallet(privateKey);
const tx = { to: recipient, value: '1' };
const signedTx = wallet.sign(tx);
console.log(signedTx);
C
const wallet = new ethers.Wallet(privateKey);
const tx = { to: recipient, value: ethers.utils.parseEther('1') };
const signedTx = await wallet.signTransaction(tx);
console.log(signedTx);
D
const wallet = new ethers.Wallet(privateKey);
const tx = { to: recipient, value: ethers.utils.parseEther('1') };
const signedTx = wallet.sign(tx);
console.log(signedTx);
Attempts:
2 left
💡 Hint

Check the correct method name for signing a transaction in ethers.js.

🚀 Application
expert
3:00remaining
How many outputs does this Bitcoin transaction have after execution?

Given this simplified Bitcoin transaction creation code, how many outputs will the transaction have?

Blockchain / Solidity
const bitcoin = require('bitcoinjs-lib');
const keyPair = bitcoin.ECPair.makeRandom();
const { address } = bitcoin.payments.p2pkh({ pubkey: keyPair.publicKey });

const txb = new bitcoin.TransactionBuilder();
txb.addInput('some-txid', 0);
txb.addOutput('recipient-address', 50000);
txb.addOutput(address, 45000);

const tx = txb.build();
console.log(tx.outs.length);
A2
B1
C3
D0
Attempts:
2 left
💡 Hint

Count how many times addOutput is called.

Practice

(1/5)
1.

What is the main purpose of sending a transaction on a blockchain?

easy
A. To create a new blockchain network
B. To mine new blocks
C. To move value or data from one account to another
D. To delete data from the blockchain

Solution

  1. Step 1: Understand what a transaction does

    A transaction moves value or data between accounts on the blockchain.
  2. Step 2: Compare options to the definition

    Only To move value or data from one account to another correctly describes sending a transaction.
  3. Final Answer:

    To move value or data from one account to another -> Option C
  4. Quick Check:

    Transaction purpose = move value/data [OK]
Hint: Transactions move value or data, not create or delete [OK]
Common Mistakes:
  • Confusing transactions with mining
  • Thinking transactions create blockchains
  • Believing transactions delete blockchain data
2.

Which of the following is the correct way to sign a transaction before sending it?

transaction.sign(____)
easy
A. sender's public key
B. sender's private key
C. receiver's private key
D. network's public key

Solution

  1. Step 1: Identify the key needed for signing

    Transactions must be signed with the sender's private key to prove ownership.
  2. Step 2: Match the correct key to the method

    Only the sender's private key can sign the transaction securely.
  3. Final Answer:

    sender's private key -> Option B
  4. Quick Check:

    Sign with private key = sender's private key [OK]
Hint: Sign with sender's private key, never public key [OK]
Common Mistakes:
  • Using public key to sign
  • Using receiver's key instead of sender's
  • Confusing private and public keys
3.

Consider this code snippet sending a transaction:

tx = {
  'to': '0xabc123',
  'value': 10,
  'nonce': 5,
  'gas': 21000
}
signed_tx = sign_transaction(tx, private_key)
result = send_transaction(signed_tx)
print(result)

What will print(result) most likely output if the nonce is incorrect?

medium
A. 'Nonce too low or too high error'
B. 'Transaction successful'
C. 'Gas limit exceeded error'
D. 'Invalid signature error'

Solution

  1. Step 1: Understand nonce role in transactions

    Nonce must be correct and sequential to avoid replay or duplication errors.
  2. Step 2: Identify error caused by wrong nonce

    An incorrect nonce causes a 'Nonce too low or too high' error during sending.
  3. Final Answer:

    'Nonce too low or too high error' -> Option A
  4. Quick Check:

    Wrong nonce = nonce error [OK]
Hint: Wrong nonce causes nonce error, not gas or signature errors [OK]
Common Mistakes:
  • Confusing nonce error with gas error
  • Assuming signature error for nonce issues
  • Expecting success despite wrong nonce
4.

Given this code snippet, what is the main error preventing the transaction from sending?

tx = {
  'to': '0xdef456',
  'value': 5,
  'nonce': 3
}
signed_tx = sign_transaction(tx, private_key)
result = send_transaction(signed_tx)
print(result)

Options:

medium
A. Receiver address is invalid
B. Incorrect private key used for signing
C. Nonce value is too high
D. Missing gas field in the transaction

Solution

  1. Step 1: Check required transaction fields

    Gas is required to pay for transaction processing; missing gas causes failure.
  2. Step 2: Verify other fields and keys

    Nonce and receiver address look valid; no info about wrong private key.
  3. Final Answer:

    Missing gas field in the transaction -> Option D
  4. Quick Check:

    Missing gas = transaction fails [OK]
Hint: Always include gas field to avoid transaction failure [OK]
Common Mistakes:
  • Ignoring gas field requirement
  • Assuming nonce or address is wrong without evidence
  • Not checking transaction structure
5.

You want to send multiple transactions quickly from the same account. Which approach ensures all transactions are accepted without nonce conflicts?

1. Use the same nonce for all transactions
2. Increment nonce by 1 for each transaction
3. Use random nonce values
4. Skip nonce and rely on network
hard
A. Increment nonce by 1 for each transaction
B. Skip nonce and rely on network
C. Use random nonce values
D. Use the same nonce for all transactions

Solution

  1. Step 1: Understand nonce role in multiple transactions

    Nonce must be unique and sequential per account to avoid conflicts.
  2. Step 2: Identify correct nonce handling method

    Incrementing nonce by 1 for each transaction ensures proper ordering and acceptance.
  3. Final Answer:

    Increment nonce by 1 for each transaction -> Option A
  4. Quick Check:

    Sequential nonce = no conflicts [OK]
Hint: Always increment nonce by 1 for each new transaction [OK]
Common Mistakes:
  • Reusing same nonce causing rejection
  • Using random nonce causing errors
  • Assuming network assigns nonce automatically