【区块链】以太坊Soliddity编程:智能合约实现之基础

Solidity编程:智能合约实现之基础

Solidity之Hello world

Hello.sol

pragma solidity ^0.4.18

contract Hello{
	function helloWorld() return(string){
		return "hello World";
	}
}

然后将程序复制到Remix中编译运行。

代码演示运行方式:

  • VS Code IDE: 代码编写,基本的语法检测
    VS code配置:
    VS code配置
  • Remix IDE: 简单代码编写运行环境
  • Truffle环境: 生产环境,较为复杂的代码编译部署

Remix IDE简介:

  1. 基于浏览器的solidity编辑环境
  2. 可以在内存中模拟合约,直接运行,而不需要部署等复杂流程
  3. http://remix.ethereum.org直接使用
  4. https://github.com/ethereum/remix-ide也可以安装到本地
  5. Remix文档:http://remix.readthedocs.io/

Remix三种运行模式

  1. 默认模式:javascript vm
  2. 通过本地私有网络的rpc端口,链接到本地私有网络进行调试
  3. 使用Metamask插件提供的网络

Remix编译程序:

Remix编译程序

Remix运行程序:

Remix运行程序

Solidity源文件布局

Solidity源文件结构:

  • 版本声明
  1. 一般形式:pragma solidity ^0.4.0
  2. 上述编译器需求:0.40≤version<0.50
  3. Pragma是pragmatic information的简称
  4. 遵循npm版本定义
    npm版本语义:
    npm版本语义
  • 导入其他源文件
  1. import “filename”: 此语句将从“filename”中导入所有的全局符号到当前全局作用域中
  2. import * as symbolName from “filename” : 创建一个新的全局符号symbolName,其成员均来自“filename”中全局符号
  3. import {symbol1 as alias, symbol2} from “filename”: 创建新的全局符号alias和symbol2,分别从“filename”引用symbol1和symbol2
  4. import " filename" as symbolName;
  5. 路径表示:1. 同Linux shell基本一致 2. 以/作为目录分割符,以.表示当前目录,以…表示父目录 3.可以映射到能通过诸如ipfs、http或者git发现的资源
  • 注释
    注释

典型solidity文件实例:

solidity文件实例

metacoin合约例子

  • 命令行:truffle unbox metacoin
  • truffle的unbox包含多个例子
  • metacoin是一个基础的货币系统例子,包含了智能合约的核心特性

metacoin安装示意图:

metacoin安装示意

文件目录结构

文件目录结构

智能合约结构

合约类似于类的概念,可包含:状态变量、函数、函数修饰器、事件、结构类型和枚举类型
状态变量: 是永久性存储在合约存储中的值。
状态变量
函数:合约中代码的可执行单元
函数
函数修饰器:可以用来以声明的方式改良函数语义。
函数修饰器
事件:以太坊虚拟机日志接口
事件
结构类型:与C语言等的struct基本一致
结构类型
枚举:创建有一定数量的值的自定义类型,与C++等语言中的定义相同。
枚举
示例代码

  • 迷恋猫的合约代码:https://github.com/axiomzen/cryptokitties-bounty

Solidity编程规范

  • Solidity编程规范主要参照了python的pep8
  • 主要提供编码风格的一致性
  • 并非强制的一致性要求

代码缩进:

  • 使用4个空格缩进
  • 使用tab或者空格键完成缩进
  • 避免混合使用tab和空格键

空行:

  • 一个合约的前面,留两个空行
  • 合约之间,保留两个空行
    编程规范
  • 函数之间,保留一个空行
  • 如果只声明函数,没有实现,可以不保留。
    空行

源文件编码方式:

  • UTF-8或者ASCII编码
  • Vs code默认为utf-8

引入声明:

  • 一般在代码开始引入声明
    引入声明

空格的使用规范:

  • 括号、中括号、花括号之后避免使用空格
  • 逗号和分号之前避免使用空格
  • 赋值符前后避免多个空格
    空格规范

控制结构:

  • 花括号和声明同一行
  • 右括号和左括号声明保持相同缩进位置
  • 左括号后应回车
  • 以上建议也同样适用于if、else、while、for等
  • if、while、for条件语句之间必须空行
    控制结构
  • 如果只有单条语句可以不需要使用括号
  • 对于if语句如果包含else或者else if语句,则else语句要与if的右花括号放在一行
    控制结构

函数声明:

  • 对于简短函数声明,将函数体的左括号和函数名放在同一行
  • 右括号和函数声明保持相同的缩进
  • 左括号和函数名之间要增加一个空格
    函数声明格式
  • 对于参数较多的函数声明可将所有参数逐行显示,并保持相同的缩进
  • 函数声明的右括号单独一行
  • 左花括号单独一行
    函数声明格式

变量声明:

  • 对于数组变量声明,类型和数组中括号之间不能有空格
  • 赋值运算符两边要有一个空格。
    变量声明

命名规范:

  • 合约和库:CapWords规范命名(首字母大写)。如:SimpleToken、Player
  • 事件:CapWords规范命名(首字母大写)。如AfterTransfer、Deposit
  • 结构体:CapWords规范命名(首字母大写)
  • 函数名使用大小写混合(构造函数除外)。如getBalance, transfer。
  • 局部变量命名,大小写混合。如initialSupply,account。
  • 常量全部使用大写字母并用下划线分隔,如MAX_BLOCKS
  • 功能修饰符,大小写混合。如onlyAfter
  • 当和内置或者保留名称冲突时建议使用本规范

代码注释:

  • 单行(//)
  • 多行使用(//)
  • 文档注释写文档用。三个斜杠///或者/**…*/,可以使用Doxygen语法,以支持生成对文档的说明,参数验证的注解,或者是在用户调用这个函数时,弹出确认内容。
    代码注释
    Doxygen的注释风格:
    Doxygen的注释风格
发布了279 篇原创文章 · 获赞 169 · 访问量 32万+

猜你喜欢

转载自blog.csdn.net/ARPOSPF/article/details/104439514