# Solidity语言介绍以及开发环境准备

By [XiaoShin](https://paragraph.com/@xiaoshin) · 2022-03-23

---

Solidity 是一门面向合约的、为实现智能合约而创建的高级编程语言。这门语言受到了 C++，Python 和 Javascript 语言的影响，设计的目的是能在以太坊虚拟机（EVM）上运行。

Solidity 是静态类型语言，支持继承、库和复杂的用户定义类型等特性。

它的语法接近于Javascript，是一种面向对象的语言。但作为一种真正意义上运行在网络上的去中心合约，它又有很多的不同，下面列举一些：

*   以太坊底层是基于帐户，而非UTXO的，所以有一个特殊的`Address`的类型。用于定位用户，定位合约，定位合约的代码（合约本身也是一个帐户）。
    
*   由于语言内嵌框架是支持支付的，所以提供了一些关键字，如`payable`，可以在语言层面直接支持支付，而且超级简单。
    
*   存储是使用网络上的区块链，数据的每一个状态都可以永久存储，所以需要确定变量使用内存，还是区块链。
    
*   运行环境是在去中心化的网络上，会比较强调合约或函数执行的调用的方式。因为原来一个简单的函数调用变为了一个网络上的节点中的代码执行，分布式的感觉。
    
*   最后一个非常大的不同则是它的异常机制，一旦出现异常，所有的执行都将会被回撤，这主要是为了保证合约执行的原子性，以避免中间状态出现的数据不一致。
    

代码示例：

    pragma solidity ^0.4.20;
    
    contract HelloWorld{
        uint balance;
        function HelloWorld() {
            balance = **;
        }
    
        function update(uint amount) returns (address, uint){
            balance += amount;
            return (msg.sender, balance);
        }
    }
    

工欲善其事必先利其器，下面介绍开发的IDE以及环境搭建：

**可用的 Solidity 集成**
-------------------

*   [Remix](https://remix.ethereum.org/)
    
    基于浏览器的 IDE，集成了编译器和 Solidity 运行时环境，不需要服务端组件。
    
*   [IntelliJ IDEA plugin](https://plugins.jetbrains.com/plugin/9475-intellij-solidity)
    
    IntelliJ IDEA 的 Solidity 插件（可用于其他所有的 JetBrains IDE）
    
*   [Visual Studio Extension](https://visualstudiogallery.msdn.microsoft.com/96221853-33c4-4531-bdd5-d2ea5acc4799/)
    
    Microsoft Visual Studio 的 Solidity 插件，包含 Solidity 编译器。
    
*   [Package for SublimeText — Solidity language syntax](https://packagecontrol.io/packages/Ethereum/)
    
    SublimeText 编辑器的语法高亮包。
    
*   [Etheratom](https://github.com/0mkara/etheratom)
    
    Atom 编辑器的插件，支持高亮、编译和运行时环境（兼容后端节点和虚拟机）。
    
*   [Atom Solidity Linter](https://atom.io/packages/linter-solidity)
    
    Atom 编辑器的插件，提供 Solidity 语言的 Lint 检查（静态检查）。
    
*   [Atom Solium Linter](https://atom.io/packages/linter-solium)
    
    Atom 的可配置的 Solidty 静态检查器，基于 Solium。
    
*   [Solium](https://github.com/duaraghav8/Solium/)
    
    一种静态检查器，识别和修复 Solidity 中的风格以及安全问题。
    
*   [Solhint](https://github.com/protofire/solhint)
    
    一种静态检查器，提供安全和风格指南以及智能合约验证的最佳实践规则。
    
*   [Visual Studio Code extension](http://juan.blanco.ws/solidity-contracts-in-visual-studio-code/)
    
    Microsoft Visual Studio Code 插件，包含语法高亮和 Solidity 编译器。
    
*   [Emacs Solidity](https://github.com/ethereum/emacs-solidity/)
    
    Emacs 编辑器的插件，提供语法高亮和编译错误报告。
    
*   [Vim Solidity](https://github.com/tomlion/vim-solidity/)
    
    Vim 编辑器的插件，提供语法高亮。
    
*   [Vim Syntastic](https://github.com/scrooloose/syntastic)
    
    Vim 编辑器的插件，提供编译检查。
    

不再维护:

*   [Mix IDE](https://github.com/ethereum/mix/)
    
    基于 Qt 的 IDE，可以设计、调试和测试 Solidity 智能合约。
    
*   [Ethereum Studio](https://live.ether.camp/)
    
    专门的网页 IDE，也提供一个完整以太坊环境的脚本访问。
    

**Solidity 工具列表**
-----------------

*   [Dapp](https://dapp.readthedocs.io/)
    
    Solidity 语言的构建工具、包管理器以及部署助手。
    
*   [Solidity REPL](https://github.com/raineorshine/solidity-repl)
    
    一个命令行控制台，可以让你立刻尝试 Solidity 语言。
    
*   [solgraph](https://github.com/raineorshine/solgraph)
    
    可视化的 Solidity 控制流，并能标明潜在的安全漏洞。
    
*   [evmdis](https://github.com/Arachnid/evmdis)
    
    EVM 反汇编程序，可以执行字节码的静态分析，能提供比 EVM 操作更高级的抽象。
    
*   [Doxity](https://github.com/DigixGlobal/doxity)
    
    Solidity 语言的文档生成器。
    

**第三方 Solidity 解析器和语法**
-----------------------

*   [solidity-parser](https://github.com/ConsenSys/solidity-parser)
    
    JavaScript 的 Solidity 解析器
    
*   [Solidity Grammar for ANTLR 4](https://github.com/federicobond/solidity-antlr4)
    
    ANTLR 4 解析器生成器的 Solidity 语法
    

我个人主要atom配合 [Remix](https://remix.ethereum.org/)开发的，下面介绍一下[Remix](https://remix.ethereum.org/)的使用

**功能**
------

这里我们使用在线编译器，打开网址

[https://remix.ethereum.org/](https://remix.ethereum.org/)

![](https://storage.googleapis.com/papyrus_images/e78f1086402d9469f099e00fa689e134c8b8d89fe0073f3d02fda630972a0754.png)

**文件夹管理**

最左边是文件夹管理，里面列出了当前的工作区里的文件，remix可以支持从本地文件夹读取文件。

### **工作区**

正中间是工作区，工作区上半部是代码编辑区，在这里可以写solidity合约。下半部是日志区，在执行智能合约时，会显示transaction相关的信息。在输出日志的时候还可以查看Details和Debug信息。

### **功能区**

最右边的是功能区，里面有编译，运行，设置和分析以及调试器和支持。

在编译器点击Details可以查看编译细节，里面有NAME,METADATA,BYTECODE,ABI 等一些相关信息。

在设置里面可以选择我们的编译器版本，和一些IDE的使用设置。其他就不介绍了，使用是很简单的。

---

*Originally published on [XiaoShin](https://paragraph.com/@xiaoshin/solidity)*
