作者:尘一不染
来源:个人开发
标签:区块链 / FISCO BCOS / 智能合约 / Solidity
前言
最近考取了FISCO BCOS区块链工程师认证,结合之前参加金砖国家职业技能大赛区块链赛项的经验,整理一篇智能合约开发的实战教程,帮助想入门区块链开发的同学少走弯路。
一、FISCO BCOS是什么?
FISCO BCOS是国产金融级区块链底层平台,由微众银行主导研发,目前是国内应用最广泛的联盟链底层之一。相比以太坊,FISCO BCOS:
- 更轻量:部署简单,兼容Solidity
- 更合规:支持国密,符合国内监管要求
- 更生态:丰富的中间件和工具链
二、开发环境准备
2.1 基础工具
bash
# 1. 安装Node.js (建议v16+)
node -v
# 2. 安装Truffle (智能合约开发框架)
npm install -g truffle
# 3. 安装FISCO BCOS Java SDK (用于Java项目)
# Maven
<dependency>
<groupId>org.fisco-bcos</groupId>
<artifactId>web3sdk</artifactId>
<version>3.0.0</version>
</dependency>
2.2 搭建区块链网络
文章顶部有build_chain.sh的资源包
bash
# 使用build_chain工具快速搭链(单机构部署)
./build_chain.sh -l 127.0.0.1:4 -p 30300,20200,8545
三、第一个智能合约:简单存储
3.1 合约代码
solidity
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
contract SimpleStorage {
// 存储的数值
uint256 private value;
// 事件:记录数值变化
event ValueChanged(uint256 newValue);
// 写入数据
function setValue(uint256 _value) public {
value = _value;
emit ValueChanged(_value);
}
// 读取数据
function getValue() public view returns (uint256) {
return value;
}
}
3.2 部署脚本
javascript
// migrations/2_deploy_contracts.js
const SimpleStorage = artifacts.require("SimpleStorage");
module.exports = function(deployer) {
deployer.deploy(SimpleStorage);
};
3.3 合约调用
javascript
const SimpleStorage = artifacts.require("SimpleStorage");
module.exports = async function(callback) {
const instance = await SimpleStorage.deployed();
// 写入数据
await instance.setValue(100);
console.log("Value set to 100");
// 读取数据
const value = await instance.getValue();
console.log("Current value:", value.toString());
callback();
}
四、进阶案例:投票合约
solidity
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
contract Voting {
// 候选人结构
struct Candidate {
uint256 id;
string name;
uint256 voteCount;
}
// 存储候选人
mapping(uint256 => Candidate) public candidates;
// 存储投票记录(防止重复投票)
mapping(address => bool) public voters;
// 候选人数量
uint256 public candidatesCount;
// 添加候选人事件
event AddedCandidate(uint256 id, string name);
// 投票事件
event Voted(address voter, uint256 candidateId);
constructor() {
addCandidate("中本聪");
addCandidate("V神");
}
// 添加候选人
function addCandidate(string memory _name) private {
candidatesCount++;
candidates[candidatesCount] = Candidate(candidatesCount, _name, 0);
emit AddedCandidate(candidatesCount, _name);
}
// 投票
function vote(uint256 _candidateId) public {
// 检查是否已投票
require(!voters[msg.sender], "Already voted!");
// 检查候选人是否存在
require(_candidateId > 0 && _candidateId <= candidatesCount, "Invalid candidate!");
// 记录投票
voters[msg.sender] = true;
candidates[_candidateId].voteCount++;
emit Voted(msg.sender, _candidateId);
}
// 获取候选人票数
function getVoteCount(uint256 _candidateId) public view returns (uint256) {
return candidates[_candidateId].voteCount;
}
}
五、开发技巧与注意事项
5.1 Gas优化
solidity
// ❌ 每次调用都访问storage(贵)
function getArraySum(uint256[] storage arr) public view returns (uint256) {
uint256 sum = 0;
for(uint i = 0; i < arr.length; i++) {
sum += arr[i];
}
return sum;
}
// ✅ 数据量小用memory,大数据用storage
function processData(uint256[] calldata data) external {
// calldata比memory更省gas
}
5.2 安全注意事项
- 重入攻击防护:使用require检查状态变量
- 整数溢出:使用SafeMath或Solidity 0.8+自动检查
- 权限控制:使用onlyOwner修饰器
solidity
modifier onlyOwner() {
require(msg.sender == owner, "Not owner!");
_;
}
六、总结
通过FISCO BCOS开发智能合约,核心流程就是:
- 编写合约 → Solidity语言
- 编译部署 → Truffle + FISCO BCOS节点
- 调用交互 → Web3 SDK
相比以太坊,FISCO BCOS在国内企业级应用中更有优势,文档和社区也比较完善。如果你想入门区块链开发,FISCO BCOS是个不错的起点。
参考资料
- FISCO BCOS官方文档
https://fisco-bcos-doc.readthedocs.io/ - Solidity官方文档
https://docs.soliditylang.org/ - Truffle框架文档
https://trufflesuite.com/docs
相关证书:
- FISCO BCOS区块链工程师认证
- 2025一带一路暨金砖国家职业技能大赛区块链赛项一等奖
2150

被折叠的 条评论
为什么被折叠?



