本文围绕 Solidity开发、长安链、智能合约、区块链环境、ERC20示例 等核心关键词展开,手把手教你如何在长安链上完成Solidity智能合约的编写、编译、测试与部署。读完后,你将拥有一套可落地的实操流程与避坑清单。
1. 环境准备:一切从“零”开始
1.1 操作系统与软件依赖
- 操作系统:Linux、macOS、Windows 均可,无额外要求。
- 软件依赖:空手套白狼——只装 Docker + Git 即可,其余工具链全在 Docker 镜像里。
1.2 一键启动长安链
- 参考官方文档,安装并启动长安链节点与CMC命令行工具。
一条命令测试链是否正常:
./cmc client status --chain-id=mychain- 状态返回
running,表长安链已就绪,下一步就能部署合约。
2. 选择 IDE:为什么优先推荐 Remix
- 在线免费:浏览器打开 Remix IDE 即可开工。
- 零迁移成本:Remix 里写好的 Solidity 合约,不需要任改动即可直接在长安链部署。
- 插件生态:一键静态分析、一键单元测试,覆盖 95% 调试场景。
3. Solidity 语言速通
3.1 核心特点
- 静态强类型:声明变量时必须指定类型,编译期发现潜在漏洞。
- 面向合约:contract 类似于传统语言里的 class,天然支持继承、库、modifier。
- 以太坊兼容:语法层面同以太坊 Solidity 一致,降低迁移心智成本。
3.2 长安链 vs 以太坊差异点
- 内置接口差异
长安链为无币链,与原生代币相关的接口默认返回 0,例如msg.value、tx.gasprice。 - 预编译合约
SHA256、RIPEMD160 已支持;ecrecover、bn256等尚在排期,使用前先核对官方 Roadmap。 跨合约调用
除 EVM 合约之间互调,还支持对长安链 WASM 合约的调用,示例:bytes memory payload = abi.encodeWithSignature("wasm_method(uint256)", amount); (bool success, bytes memory result) = wasmAddr.call(payload);
4. ERC20 完整示例:Token 合约
下列Token.sol示范了 ERC20 的核心功能:发行、转账、授权、托管销毁等。复制到 Remix 即可编译运行。
// SPDX-License-Identifier: Apache-2.0
pragma solidity ^0.8.4;
contract Token {
string public name = "Token";
string public symbol = "TK";
uint8 public decimals = 6;
uint256 public totalSupply;
mapping(address => uint256) public balanceOf;
mapping(address => mapping(address => uint256)) public allowance;
address public owner;
bool public stopped = false;
constructor(address _founder) {
owner = msg.sender;
totalSupply = 100_000_000 * 10 ** decimals;
balanceOf[_founder] = totalSupply;
emit Transfer(address(0), _founder, totalSupply);
}
modifier onlyOwner() { require(msg.sender == owner, "Not owner"); _; }
modifier whenNotStopped() { require(!stopped, "Paused"); _; }
function transfer(address to, uint256 amount) external whenNotStopped returns(bool) {
require(balanceOf[msg.sender] >= amount, "Insufficient");
balanceOf[msg.sender] -= amount;
balanceOf[to] += amount;
emit Transfer(msg.sender, to, amount);
return true;
}
// 其余 transferFrom、approve、burn 方法略,逻辑见原文
event Transfer(address indexed from, address indexed to, uint256 value);
event Approval(address indexed owner, address indexed spender, uint256 value);
}5. 编译合约:Docker 一条命令搞定
5.1 拉取镜像
docker pull chainmakerofficial/chainmaker-solidity-contract:2.0.05.2 挂载目录并编译
export WORK_DIR=/data/workspace/contract
docker run --rm -v $WORK_DIR:/home chainmakerofficial/chainmaker-solidity-contract:2.0.0 \
solc --abi --bin --hashes -o /home/ /home/Token.sol完成后得到:
- Token.bin:字节码
- Token.abi:接口描述
- Token.signatures:函数 selector 一览表👉 可直接用来模拟调用。
6. 本地模拟运行:无需上链先体验
6.1 部署模拟
evm Token.bin init_contract data 00000000000000000000000013f0c1639a9931b0ce17e14c83f96d4732865b58- Token.bin 后的
init_contract代表构造函数。 data紧接着是构造函数参数的 ABI 编码。
6.2 查询余额
evm DeployedToken.bin 0x70a08231 \
data 0x70a0823100000000000000000000000013f0c1639a9931b0ce17e14c83f96d4732865b580x70a08231 对应函数 balanceOf。返回值即目标地址余额。
7. FAQ:你可能想问的 5 个问题
Q1:我想用旧版 0.5.x 的语法写合约,非要升级 0.8.x 吗?
A:长安链镜像自带 solc 0.8.4,若坚持旧版本可在 Remix 自行选用对应编译器,再导出字节码上链。
Q2:预编译合约缺失 ecrecover 怎么办?
A:考虑用长安链官方 SDK 做链下签名验签,或在合约逻辑里预留口子等待后续移植。
Q3:Token 可以直接跨链流转吗?
A:需通过长安链跨链网关或官方桥接工具,把合约地址映射到目标链,再进行资产锁定 & 解锁。
Q4:Docker 运行报错 “permission denied”?
A:已挂载目录无写权限,可把 $WORK_DIR 放在用户主目录内或使用 sudo chown 调整权限。
Q5:有无法不写代码就能发 Token?
A:使用长安链提供的低代码发行平台,填写参数即可一键生成合约,👉 马上体验零代码发币。
8. 结尾:下一步行动清单
- 在 Remix 改改总量、符号,生成新版 Token 字节码。
- 进入 Docker 编译镜像,两次
./evm命令完成部署与测试。 - 试驾无误后,用 CMC 正式把合约推到测试链,准备空投向社区。
- 别忘了给项目加 README 记录源码验证链接,提升用户信任度。
长安链 + Solidity,才是你 2025 高效落地的区块链开发正确姿势。