Pick a depth. Each prompt opens in your AI pre-loaded with the lesson. Click a row to preview the prompt.
Before you write a line of Solidity, you should know what 'deploying' literally means. You sign a transaction that has no recipient (the to field is empty). Inside the transaction's data is the compiled bytecode of your contract. When miners include that transaction, the EVM creates a new address derived from your address and nonce, and stores the bytecode there. That's it. Every other deploy concept — proxies, factories, create2 — is a variation on this one transaction.
When you deploy a contract, the EVM assigns it an address derived from your address and nonce, then stores the compiled bytecode there permanently. The source code never lives on-chain — only the bytecode does, which is why contract verification on Etherscan matters so much for trust.
// A contract you could write in one line:
pragma solidity ^0.8.0;
contract Hello { string public greeting = "hi"; }
// What goes on-chain is the hex bytecode, not this source:
// 0x608060405234801561001057600080fd5b50...
// Deployment transaction fields:
// to: (empty / null)
// data: <bytecode + constructor args>
// value: 0
// gas: ~200k for a small contract
// After inclusion, the contract lives at:
// address = keccak256(rlp([sender, nonce]))[12:]keccak256(rlp([address, nonce])) truncated to 20 bytes. Compare to what your tool reports.