什么是区块链
区块链可以被简单理解为点对点网络中分布式共享的账本,每一个已确认的交易都会永久地嵌入到一个不可篡改的数据链里。
最早由中本聪在 2008 年提出,最初主要用于比特币支付,但随着以以太坊为代表的公链出现,区块链不再局限于转账,而是进化成可以运行程序的“世界计算机”。
交易与区块:账本最小单元
- 交易(Transaction):一次原子操作,会修改账本状态。
- 区块(Block):多笔交易的打包集合,并通过哈希指针与前一区块串联。
- 节点(Node):网络里复制账本的参与者;有新交易广播、验证、存储等职责。
无论比特币还是以太坊,都会使用非对称加密(PKI):私钥签名、公钥接收。公钥经算法编码后形成更易传播的地址(Address)。
而调动链上资源需要支付“燃料”——在以太坊里叫 Gas,以原生代币 Ether(ETH) 计价。
问:Gas 与手续费是一回事吗?
答:Gas 表⽰计算复杂度,手续费=Gas×Gas Price。价格由发送者自定,越高越快。
共识机制:如何让全网“同意”一个账本
- PoW(Proof of Work):通过算力竞争解决哈希难题,安全但耗能。
- PoS(Proof of Stake):以资产抵押替代算力大赛,以太坊 2.0 正全面迁移,门槛最低需 32 ETH,也可通过质押池参与。
钱包:链上资产的钥匙管家
钱包并不真正存储币,而是管理 私钥。当前主流类型:
按确定性:
- 确定性(HD Wallet):用助记词即可恢复私钥。
- 非确定性:丢私钥 = 永远丢资产。
按存储形式:
- 软件钱包:网页扩展、手机 App。
- 硬件钱包:离线芯片隔离。
- 托管 vs 自托管:如果交易所替管私钥,牢记“不是你的钥匙,就不是你的币”。
问:助记词丢失还能找回吗?
答:只要私钥仍在即可,若两者同时丢失,资产将永久沉睡。
以太坊:可编程区块链的典范
2015 年上线的 Ethereum 允许在区块里附带 任意代码,开创“智能合约”先河。相比比特币的脚本受限,EVM 更像一台去中心化的计算机,可承载更复杂的业务逻辑。
智能合约:区块链上的自动执行协议
定义
- 一段可在链上存储状态并运行逻辑的代码。
- 被触发后完全按既定规则执行,无需第三方。
三大核心概念
- 执行环境(Execution Context):
仅在链内可见,无法直接访问外部 API。如需外部数据,须由预言机(Oracle)写入。 - Gas 机制:
代码执行越复杂,Gas 越高;设置 Gas Limit 可避免无限循环导致资金耗尽。
👉 查看当前以太坊 Gas 价格和实时估算工具 - 不可变性(Immutability):
部署后字节码不可改,升级需重新发布到新地址。测试与审计必须先行。
实例:用 Solidity 编写简易代币
pragma solidity >=0.8.4;
contract MyCoin {
mapping(address => uint) balances;
event Transfer(address indexed _from, address indexed _to, uint256 _value);
constructor() {
balances[tx.origin] = 10000;
}
function sendCoin(address receiver, uint amount) public returns(bool) {
if (balances[msg.sender] < amount) return false;
balances[msg.sender] -= amount;
balances[receiver] += amount;
emit Transfer(msg.sender, receiver, amount);
return true;
}
function getBalance(address addr) public view returns(uint) {
return balances[addr];
}
}
pragma
:指定编译器版本。balances
:用 mapping 保存地址余额,无法遍历。event
:链上日志,方便前端监听异步通知。view
:只读查询,不消耗 Gas。
编译、部署、调用一条龙
1. 安装工具
npm install --global solc ganache-cli
npm install web3
2. 本地开发链 Ganache
启动后会生成 10 个账户,每个预装 100 枚测试 ETH。
3. Node 脚本部署
const Web3 = require('web3');
const web3 = new Web3('http://127.0.0.1:8545');
const from = '0x6A64AEcFD…'; // 复制自 ganache
const abi = [ … ]; // 编译后的接口
const data = '0x…'; // 二进制
const MyCoin = new web3.eth.Contract(abi, { data });
MyCoin.deploy()
.send({ from, gas: 1000000 })
.then(inst => console.log(`合约地址:${inst.options.address}`));
4. 调用方法
const addr = '0xfd2215f9e…'; // 上步返回地址
const MyCoin = new web3.eth.Contract(abi, addr, { from });
await MyCoin.methods.sendCoin(to, 1).send({ gasPrice: 25e9 });
const balance = await MyCoin.methods.getBalance(to).call();
问:测试网水龙头要 8 小时后才有额度,有什么好办法?
答:本地 Ganache 模拟开发;等 DApp 稳定再用 Goerli、Sepolia 公开测试网。
去中心化应用 DApp:前端与链交互
- Web3.js / Ethers.js:JavaScript 客户端库,连接节点 RPC 接口。
- 节点服务:若不想自建节点,可用 Infura、Alchemy 提供的 HTTPS/WSS 端点。
- 整体架构:前端(React/Vue)+ 钱包插件(MetaMask)+ 智能合约 API。
问:是否一定要用户安装 MetaMask?
答:托管私钥的服务端钱包或 WalletConnect 方案都可以,但体验和安全需权衡。
常见问题答疑(FAQ)
- Q:普通 Token 和 NFT 在智能合约实现上有何区别?
A:NFT 需遵循 ERC-721 标准,增加 tokenURI 与独特 tokenId,核心仍是映射表 + 事件。 - Q:Gas 价格在高峰期飙升怎么办?
A:可选择低峰发布、使用 Layer2 或 EIP-1559 的动态费用机制,或观望等待价格回落。 - Q:智能合约更新只能通过新地址吗?
A:常用代理合约模式把逻辑层与数据层分离,逻辑可升级但存储地址不变,安全性需多重审计。 - Q:DApp 需要备案吗?
A:各地合规要求不同,一般链上合约无需审批,但面向 Web2 用户的前端域名及服务器需遵守当地互联网监管规则。 - Q:初学者如何系统学习?
A:按“区块链基础 → Solidity → 测试框架 → DApp 前端 → 安全审计”循序渐进,社区已有大量开源课程与 CTF 题库。
虽然以太坊仍需扩容与效率优化,但智能合约和 DApp 已经为开发范式带来了结构性升级:代码即规则、全球透明结算、资产可无缝组合。现在就动手,从 0 到 1,开启你的区块链之旅吧!