以太坊是什么
以太坊(Ethereum)是一个开源、具备智能合约功能的公共区块链平台,依靠原生代币 以太币(ETH) 运行。它以 以太坊虚拟机(EVM) 为核心,支持全球节点共同执行点对点合约。自 2014 年启动以来,以太坊已成长为市值第二的区块链网络,被广泛视为 “下一代去中心化应用平台”。
以太坊区块链核心组成
- 数据存储:所有交易(部署合约、调用函数)都以区块形式永久记录,公开可验证、不可篡改。
- 代码运行:开发者主要使用 Solidity 语言编写智能合约逻辑,编译为字节码后部署到区块链,由 EVM 分布式执行。
一句话总结:以太坊区块链 = 分布式数据库 + 全局计算引擎。
事前准备:你需要掌握哪些基础知识
- 面向对象语言:Python / Java / Go 至少一种
- 前端三件套:HTML + CSS + JavaScript(React 或 Vue 更佳)
- 命令行操作:Linux shell 常用命令
- 数据库概念:理解键值对等基本术语
- web3.js:与合约交互的主流 JS 库,前端集成即可快速构建 DApp
开发工具的选择与生态
多数开发者首选的本地链 Ganache 与 web3 组合,提供 10 条自带 100 ETH 的测试账户,方便快速迭代;编译环节则依赖 solc。本教程所有示例均在 Ganache 上完成,保证零成本试错。
分步搭建开发环境
Linux(Ubuntu 16.04+)
sudo apt-get update
curl -sL https://deb.nodesource.com/setup_7.x | sudo -E bash -
sudo apt-get install -y nodejs
mkdir -p ethereum_voting_dapp/chapter1
cd ethereum_voting_dapp/chapter1
npm install ganache-cli [email protected] solc
npx ganache-cli终端出现 10 个测试账户即成功。
macOS
# 若尚未安装 Homebrew
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
brew update && brew install node
mkdir -p ethereum_voting_dapp/chapter1
cd ethereum_voting_dapp/chapter1
npm install ganache-cli [email protected] solc
npx ganache-cliWindows
- 安装 Visual Studio 2017(含 C++ 工作负载)
- 安装适用于 Windows 的 Python 2.7,并配置 PATH
- 安装 git 与 OpenSSL(选择完整安装)
- 下载并安装 Node.js ≥v8.1.2
在 PowerShell 执行
npm install -g ganache-cli [email protected] solc
Solidity 投票合约源码
在项目目录新建 Voting.sol 并写入以下代码:
pragma solidity ^0.4.18;
contract Voting {
mapping (bytes32 => uint8) public votesReceived;
bytes32[] public candidateList;
function Voting(bytes32[] candidateNames) public {
candidateList = candidateNames;
}
function totalVotesFor(bytes32 candidate) view public returns (uint8) {
require(validCandidate(candidate));
return votesReceived[candidate];
}
function voteForCandidate(bytes32 candidate) public {
require(validCandidate(candidate));
votesReceived[candidate] += 1;
}
function validCandidate(bytes32 candidate) view public returns (bool) {
for(uint i = 0; i < candidateList.length; i++) {
if (candidateList[i] == candidate) return true;
}
return false;
}
}代码速读
- 第 1 行:声明编译器版本
mapping= 键值字典,保存候选人得票constructor仅部署时触发一次,可视为初始化view表明该函数不会修改链上状态,节省 Gas
编译与部署实战
保持 Ganache 在前台运行,另开终端:
node
> Web3 = require('web3')
> web3 = new Web3(new Web3.providers.HttpProvider("http://localhost:8545"))
> web3.eth.accounts // 检查 10 个测试账户是否已加载
['0x...', '0x...', ...]
> const fs = require('fs')
> const solc = require('solc')
> const source = fs.readFileSync('Voting.sol', 'utf8')
> const compiled = solc.compile(source)
// 提取关键字段
> const bytecode = compiled.contracts[':Voting'].bytecode
> const abi = JSON.parse(compiled.contracts[':Voting'].interface)完成后,你就拿到了
- 字节码:需上链的合约二进制
- ABI:前端交互的接口说明书
👉 立刻前往以太坊深度实战站点,一步完成合约部署到链上测试。
快速上手常见问题 FAQ
Q1:初次接触区块链,真的不会 Solidity 能学会吗?
A:Solidity 语法与 JavaScript 极为相似,有面向对象基础的开发者几乎可在 2 小时内写出入门级合约。
Q2:Ganache 的 100 个测试 ETH 能转账到主网吗?
A:不能。测试网与主网资产互相隔离;想获得主网 ETH 需在交易所购买,或通过质押/挖矿获取。
Q3:为什么我在 Windows 执行 npm install 会报错?
A:多数是 Visual Studio 或 Python 版本不匹配导致。按本文 Windows 环境安装要点 重新检查即可。
Q4:合约部署后能修改吗?
A:已部署代码不可修改,但可通过 代理合约 或 升级插件(如 OpenZeppelin Upgrades) 实现逻辑迭代。
Q5:Gas 费过高怎么办?
A:平日可在测试网调试,上线前使用 优化编译器参数 --optimize runs=200,或在网络不拥堵时段部署。
Q6:如何查询区块链上已部署的合约?
A:在区块浏览器(如 Etherscan)输入合约地址即可查看源码、事件日志与调用记录。
下一步行动:把投票界面跑起来
完成上述步骤后,你已掌握:
- 如何在本地快速启动 以太坊开发环境
- 如何用 Solidity 编写并编译智能合约
接下来仅需 30 分钟即可把前端页面接好,让真实用户在浏览器里投票。👉 零成本获取完整前端模板,一键部署本地 DApp 演示整合