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

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 解析器和语法

我个人主要atom配合 Remix开发的,下面介绍一下Remix的使用

功能

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

https://remix.ethereum.org/

image

文件夹管理

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

工作区

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

功能区

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

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

image

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

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏数据和云

诊断案例:Oracle的Mutex机制和Cursor Pin S竞争分析

SQL的软解析也会带来性能问题么?我们都知道使用绑定变量,让SQL实现软解析是Oracle的最佳实践。那么大量的软解析会否带来负面的性能影响呢? 在以下数据库的...

3305
来自专栏happyJared

Intellij IDEA 神器那些让人爱不释手的小技巧

在2018年5月6日写了一篇介绍IntellIJ IDEA的文章,Intellij IDEA神器居然还有这些小技巧,主要是列出一些平时大家可能没用过或者没怎么用...

762
来自专栏比原链

剥开比原看代码05:如何从比原节点拿到区块数据?

Gitee地址:https://gitee.com/BytomBlockchain/bytom

521
来自专栏智能大石头

多线程带智能采集策略的采集系统

    去年年底的时候曾经发过一个数据采集器《网页数据采集器》,那是专门针对某一个网站来进行采集的,如果需要采集新的网站内容,就需要修改代码并重新编译。    ...

1898
来自专栏小筱月

Lily_music 网页音乐播放器 -可搜索(附歌词联动播放效果解说)

这是我今年(2018)年初的小项目,当时也是手贱,不想用别的播放器,想着做一个自己的网页播放器,有个歌曲列表、可关键词搜索、歌词滚动播放的效果,于是乎,就做了这...

1105
来自专栏开源FPGA

IIC协议学习笔记

  IIC总线(Inter-Integrated Circuit)即集成电路总线,是PHILIPS公司设计出来的一种简单、双向、二线制、同步串行总线。IIC总线...

3266
来自专栏程序猿DD

Intellij IDEA神器那些让人爱不释手的14种小技巧,统统告诉你!

来源:https://blog.csdn.net/linsongbin1/article/details/80560332

564
来自专栏AndroidTv

看不懂的 build.gradle 代码

Android Studio 这么强大的工具,就算我们不懂 gradle, groovy, 也照样能借助AS对 Android 项目进行编译、调试、运行、打包等...

3295
来自专栏比原链

剥开比原看代码16:比原是如何通过/list-transactions显示交易信息的

Gitee地址:https://gitee.com/BytomBlockchain/bytom

351
来自专栏大内老A

从数据到代码——通过代码生成机制实现强类型编程[下篇]

在《上篇》中,我们实现了将保存有消息条目的XML向CodeDOM的转换,即是将XML文件生成一个CodeCompileUnit对象,而该CodeCompileU...

1846

扫码关注云+社区