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
基于浏览器的 IDE,集成了编译器和 Solidity 运行时环境,不需要服务端组件。
- IntelliJ IDEA plugin
IntelliJ IDEA 的 Solidity 插件(可用于其他所有的 JetBrains IDE)
- Visual Studio Extension
Microsoft Visual Studio 的 Solidity 插件,包含 Solidity 编译器。
- Package for SublimeText — Solidity language syntax
SublimeText 编辑器的语法高亮包。
- Etheratom
Atom 编辑器的插件,支持高亮、编译和运行时环境(兼容后端节点和虚拟机)。
- Atom Solidity Linter
Atom 编辑器的插件,提供 Solidity 语言的 Lint 检查(静态检查)。
- Atom Solium Linter
Atom 的可配置的 Solidty 静态检查器,基于 Solium。
- Solium
一种静态检查器,识别和修复 Solidity 中的风格以及安全问题。
- Solhint
一种静态检查器,提供安全和风格指南以及智能合约验证的最佳实践规则。
- Visual Studio Code extension
Microsoft Visual Studio Code 插件,包含语法高亮和 Solidity 编译器。
- Emacs Solidity
Emacs 编辑器的插件,提供语法高亮和编译错误报告。
- Vim Solidity
Vim 编辑器的插件,提供语法高亮。
- Vim Syntastic
Vim 编辑器的插件,提供编译检查。
不再维护:
- Mix IDE
基于 Qt 的 IDE,可以设计、调试和测试 Solidity 智能合约。
- Ethereum Studio
专门的网页 IDE,也提供一个完整以太坊环境的脚本访问。
Solidity 工具列表
- Dapp
Solidity 语言的构建工具、包管理器以及部署助手。
- Solidity REPL
一个命令行控制台,可以让你立刻尝试 Solidity 语言。
- solgraph
可视化的 Solidity 控制流,并能标明潜在的安全漏洞。
- evmdis
EVM 反汇编程序,可以执行字节码的静态分析,能提供比 EVM 操作更高级的抽象。
- Doxity
Solidity 语言的文档生成器。
第三方 Solidity 解析器和语法
- solidity-parser
JavaScript 的 Solidity 解析器
- Solidity Grammar for ANTLR 4
ANTLR 4 解析器生成器的 Solidity 语法
功能
这里我们使用在线编译器,打开网址

文件夹管理
最左边是文件夹管理,里面列出了当前的工作区里的文件,remix可以支持从本地文件夹读取文件。
工作区
正中间是工作区,工作区上半部是代码编辑区,在这里可以写solidity合约。下半部是日志区,在执行智能合约时,会显示transaction相关的信息。在输出日志的时候还可以查看Details和Debug信息。
功能区
最右边的是功能区,里面有编译,运行,设置和分析以及调试器和支持。
在编译器点击Details可以查看编译细节,里面有NAME,METADATA,BYTECODE,ABI 等一些相关信息。

在设置里面可以选择我们的编译器版本,和一些IDE的使用设置。其他就不介绍了,使用是很简单的。
Remix是Solidity热门IDE,使用Remix docker + Remixd构建本地IDE,使用环境是ubuntu 20.04。
一、Pull Remix docker
# 安装docker
sudo apt install docker.io
# pull Remix
sudo docker pull remixproject/remix-ide:latest
二、安装Remixd
# 安装npm
sudo apt install npm
# 安装remixd
sudo npm install -g @remix-project/remixd
三、启动Remix
# 启动 docker
sudo docker run -p 10330:80 remixproject/remix-ide:latest
# 创建local文件夹,并启动 remixd (10330后的/一定要加)
mkdir remix-data
cd remix-data
sudo remixd -s ./ --remix-ide http://127.0.0.1:10330/
四、使用Remix
启动浏览器访问 http://127.0.0.1:10330

启用Remixd插件


选用localhost,即之前建的remix-data文件夹
在文件夹中创建helloworld.sol

四、Helloworld编译
在helloworld.sol添加代码 (不修改链上变量的函数不消耗Gas,比如pure)
// SPDX-License-Identifier: GPL-3.0
pragma solidity >=0.7.0 <0.9.0;
contract helloworld {
string Name = "tigher";
function get_name() public view returns(string memory)
{
return Name;
}
function set(string memory _value) public
{
Name = _value;
}
function puretest(string memory _name) public pure returns(string memory)
{
return _name;
}
}
使用左侧插件编译和运行。
在本文中着重介绍的Solidity IDE是?(POAP 链接:https://qr.poap.xyz/#/event/XEOXaaTtr7gr8jp9 + 正确答案序号)



