以太坊智能合约开发入门:零基础搭建环境与实战投票合约

·

以太坊是什么

以太坊(Ethereum)是一个开源、具备智能合约功能的公共区块链平台,依靠原生代币 以太币(ETH) 运行。它以 以太坊虚拟机(EVM) 为核心,支持全球节点共同执行点对点合约。自 2014 年启动以来,以太坊已成长为市值第二的区块链网络,被广泛视为 “下一代去中心化应用平台”

以太坊区块链核心组成

一句话总结:以太坊区块链 = 分布式数据库 + 全局计算引擎。

事前准备:你需要掌握哪些基础知识

开发工具的选择与生态

多数开发者首选的本地链 Ganacheweb3 组合,提供 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-cli

Windows

  1. 安装 Visual Studio 2017(含 C++ 工作负载)
  2. 安装适用于 Windows 的 Python 2.7,并配置 PATH
  3. 安装 git 与 OpenSSL(选择完整安装)
  4. 下载并安装 Node.js ≥v8.1.2
  5. 在 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;
    }
}

代码速读

编译与部署实战

保持 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)

完成后,你就拿到了

👉 立刻前往以太坊深度实战站点,一步完成合约部署到链上测试。

快速上手常见问题 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)输入合约地址即可查看源码、事件日志与调用记录。

下一步行动:把投票界面跑起来

完成上述步骤后,你已掌握:

  1. 如何在本地快速启动 以太坊开发环境
  2. 如何用 Solidity 编写并编译智能合约

接下来仅需 30 分钟即可把前端页面接好,让真实用户在浏览器里投票。👉 零成本获取完整前端模板,一键部署本地 DApp 演示整合