什么是以太坊合约?——不止是“代码”,更是“规则”
以太坊合约是运行在以太坊区块链上的自动化程序,它像一份“数字合同”,一旦设定好规则(用代码编写),就会在满足条件时自动执行,无需第三方干预,你和朋友约定“如果你完成A任务,我就转给你100元”,传统方式需要中间人担保;而以太坊合约会把“完成A任务”和“转100元”写成代码,当区块链确认A任务完成,合约会自动执行转账,全程透明、不可篡改。
核心特点:去中心化(没有中间机构)、自动执行(代码即法律)、透明公开(所有人可查)。
以太坊合约怎么工作?——用“生活中的例子”秒懂
想象一个“自动售货机”:
- 设定规则:你提前在机器里放入10元(相当于向合约转入ETH),并设定“按下可乐按钮,机器掉出一罐可乐”(代码逻辑)。
- 触发执行:你按下按钮(发起交易),机器检测到你已付费且规则匹配,自动掉出可乐(合约执行转账/操作)。
- 不可篡改:机器不会因为你“不想付钱”而拒绝掉可乐,也不会“偷偷少给可乐”(代码固定,无法单方修改)。
以太坊合约同理:用户通过交易“激活”合约,合约根据预设逻辑(如转账、验证身份、记录数据)自动操作,结果记录在区块链上,永久可查。
合约的关键组成:像搭积木一样“写代码”
以太坊合约的核心是Solidity语言(类似JavaScript),但普通人无需会写代码,只需理解三个“积木模块”:
- 变量:存储数据,比如用户地址(address)、余额(uint,无符号整数)、状态(bool,是否完成)。
- 函数:执行操作,比如
transfer()(转账)、checkBalance()(查询余额)、updateStatus()(更新状态)。 - 事件:记录关键操作,方便外部应用监听,比如
TransferSent()(转账完成事件)。
举个简单例子:一个“众筹合约”可以这样写:
contract Crowdfunding {
address public creator; // 项目发起人地址
uint public goal; // 众筹目标金额
mapping(address => uint) public contributions; // 记录每个用户的贡献
function contribute() public payable { // 用户调用此函数进行众筹
contributions[msg.sender] += msg.value; // 记录用户转账金额
}
function withdrawFunds() public { // 发起人达到目标后可提取资金
require(msg.sender == creator); // 确保只有发起人能调用
require(address(this).balance >= goal); // 确保达到目标
payable(creator).transfer(address(this).balance); // 自动转账给发起人
}
}
解读:用户调用contribute()函数转入ETH,合约记录贡献;发起人调用