智能合约入门
发布: (2025年12月2日 GMT+8 21:09)
3 min read
原文: Dev.to
Source: Dev.to
Introduction
学习区块链概念可能具有挑战性,但理解智能合约并不一定如此。本指南介绍了智能合约的基础,并演示了一个用 Solidity 编写的简易“银行金库”合约。
Key Concepts
- State machine – 区块链的工作方式类似于状态机(类似 Redux 或 Context API),用于跟踪和更新状态。
- View – 只读操作,允许你查看当前状态,例如合约的余额。
- State – 存储在区块链上的数据(例如余额、记录)。
- Contract – 一段代码,规定了状态如何被读取或修改,类似于一套规则。
- Public – 标记为
public的函数或变量可以被网络上的任何人访问。 - Remix – 用于编写、测试和部署 Solidity 合约的在线 IDE。
- Returns – 指定函数的返回类型,通常用于 view 函数。
Example: Vault Contract
下面是一个最小化的 Solidity 合约,它充当一个简单的金库,用户可以存入和提取 Ether。
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.20;
contract Vault {
uint public initialBalance;
uint public balance;
constructor(uint _balance) {
initialBalance = _balance;
balance = _balance;
}
function checkBalance() public view returns (uint) {
return balance;
}
function deposit(uint amount) public {
balance += amount;
}
function withdraw(uint amount) public {
require(balance >= amount, "Not enough balance");
balance -= amount;
}
}
Contract Overview
-
State variables
initialBalance– 存储部署时设定的初始余额。balance– 跟踪当前金库的余额。
-
Constructor
在部署时使用传入的数值初始化initialBalance和balance。 -
Functions
checkBalance()– 一个view函数,返回当前余额。deposit(uint amount)– 将balance增加指定的amount。withdraw(uint amount)– 在通过require验证资金充足后,减少balance。
Important Details
- 参数名前加下划线(例如
_balance)可以避免与状态变量同名产生冲突。 require语句类似于if检查;如果条件不满足,交易将回滚并返回提供的错误信息。- 所有函数均标记为
public,因此任何外部账户都可以调用它们。
Conclusion
Vault 合约展示了 Solidity 的核心概念:状态变量、构造函数、view 函数、改变状态的函数以及基本的错误处理。通过在 Remix 中实验此示例,你可以为构建更复杂的智能合约奠定坚实的基础。