Solidity语言介绍:面向合约编程

发布于:2025-08-09 ⋅ 阅读:(19) ⋅ 点赞:(0)

Solidity是一种面向智能合约的高级编程语言,专门为EVM设计。(面向合约编程)

用于编写Dapps的智能合约逻辑。

(智能合约:一种代码程序,像是根据合同或者协议条款一样自动执行,类似自动售货机,物理财产层面的强制执行,基于合同法。)

一、基本特性

  1. 静态类型语言:编译时检查类型,增加安全性

  2. 面向合约:基本编程单元是"合约"(类似面向对象中的类)

  3. 图灵完备:理论上可以计算任何可计算的问题

  4. 继承支持:支持多重继承和抽象合约

  5. 丰富的库生态:OpenZeppelin等标准库提供安全合约实现

二、核心概念

1.合约(Contract)

Solidity的基本构建块,类似于面向对象语言中的类:

contract MyContract {
    // 状态变量、函数等
}

2.数据类型

值类型:布尔(bool)、整数(int/uint)、地址(address)、固定大小字节数组(bytes1-bytes32)等

引用类型:数组(动态/静态)、结构体(struct)、映射(mapping)

特殊类型:枚举(enum)、函数(function)

3.状态变量与存储

1)状态变量:永久存储在区块链上的数据

2)存储位置:

storage:永久存储在链上(状态变量默认)

memory:临时内存,函数调用结束消失

calldata:不可修改的临时数据(用于函数参数)

4.函数
function functionName(parameters) visibility modifiers returns (returnTypes) {
    // 函数体
}
  • 可见性:

public:任何合约和账户可调用

private:仅当前合约内可调用

internal:当前合约及继承合约可调用

external:仅其他合约和账户可调用

  • 修饰符:

view(不修改状态)、pure(不读取也不修改状态)、payable(可接收ETH)等

5.事件(Events)

用于记录区块链日志,可供外部监听:

event Transfer(address indexed from, address indexed to, uint value);

6.错误处理

require(condition, "message"):条件不满足时回滚

revert("message"):立即回滚

assert(condition):用于检查内部错误(消耗所有gas)

三、开发工具链

1.编译器:solc(Solidity编译器)

2.开发框架:

Hardhat

Truffle

Foundry

3.测试网:

Ropsten、Rinkeby、Goerli等

4.IDE:

Remix(在线IDE)

VS Code + Solidity插件

四、典型应用场景

代币合约:ERC-20、ERC-721等标准代币

去中心化金融(DeFi):借贷协议、去中心化交易所

DAO治理:去中心化自治组织

NFT市场:数字资产交易

供应链追踪:商品溯源

五、安全性考虑

Solidity开发需要特别注意:

1)重入攻击:恶意合约回调导致的重复执行

2)整数溢出/下溢:使用SafeMath库或Solidity 0.8+的自动检查

3)gas限制:复杂操作可能超出区块gas limit

4)权限控制:敏感操作应有适当的访问限制

5)随机数生成:链上难以获得真正的随机数

六、版本演进

0.4.x:早期版本

0.5.x:重大语法变更

0.6.x:引入try/catch

0.8.x:默认检查算术溢出,更安全的特性

七、简单示例

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

contract SimpleStorage {
    uint storedData;
    
    event ValueChanged(uint newValue);
    
    function set(uint x) public {
        storedData = x;
        emit ValueChanged(x);
    }
    
    function get() public view returns (uint) {
        return storedData;
    }
}


网站公告

今日签到

点亮在社区的每一天
去签到