Solidity合约开发
简介
Solidity是一种智能合约高级语言,它的语法接近于Javascript,运行在Ethereum虚拟机(EVM)之上。
环境准备
Solidity合约开发和部署有3种方式,可以选择其中一种:
注解
推荐第一种方式,采用Remix部署和调用solidity合约更加方便。
Remix方式
Remix是一个基于 Web 浏览器的 IDE,它可以让你编写 Solidity 智能合约,然后部署并运行该智能合约。在Remix网站上在线编写solidity代码并在线编译和部署到Venachain节点上。
vcl方式
下载solidity的编译器solc,编写完solidity源码后再使用solc编译成二进制文件,再手动部署到Venachain节点上。
Ubutu系统下安装solc:
sudo add-apt-repository ppa:ethereum/ethereum
sudo apt-get update
sudo apt-get install solc
truffle方式
环境要求:
安装方式一:直接安装
npm install -g truffle@5.3.0
安装方式二:源码编译
下载truffle项目源码:源码链接
编译项目:
# 安装yarn npm install -g yarn # 在truffle项目根目录下执行编译 yarn
合约编写
初始化空白模板
注解
如果是使用truffle方式,那么需要先初始化空白模板。非truffle方式编写solidity合约可跳过本部分。
如果使用 安装方式一:直接安装 安装truffle的,那么
# filepath 为可选项,即合约生成文件存放的路径
truffle init [filepath]
如果使用 安装方式二:源码编译 安装truffle的,那么
# 在truffle项目根目录下执行。其中,filepath 为可选项,即合约生成文件存放的路径
yarn run truffle init [filepath]
生成的合约项目文件目录结构如下:
|-contracts/ :存放合约
|—Migrations.sol:通常不会修改,管理和更新已部署合约的状态
|-migrations/:存放编译和部署合约的脚本,脚本前面会有数字编号,执行的时候会按照数字按顺序执行
|--1_initial_migration.js:用于部署Migrations.sol
|-test/:存放测试合约或者DAPP的测试用例
|-truffle-config.js:该文件用于配制truffle项目,例如区块链客户端
可在生成的空白模版上修改合约,contracts目录下新增合约时,需要在migrations目录中对应增加相关合约的编译和部署脚本(migrations写法参考链接)。
编写solidity合约
下面是一个简单solidity智能合约代码的例子:
pragma solidity^0.5.0;
contract createfunc{
uint public a;
constructor(uint _a)public{
a=_a;
}
function get()public view returns(uint){
return a;
}
function set(uint _a) public{
a=_a;
}
}
第一行说明源代码使用Solidity版本0.5.0写的,并且使用0.5.0以上版本运行也没问题。这是为了确保合约不会在新的编译器版本中突然行为异常。
Solidity中合约的含义就是一组代码(函数)和数据(状态),它们位于以太坊区块链的一个特定地址上。代码行
uint storedData;声明一个类型为 uint (256位无符号整数)的状态变量。你可以认为它是数据库里的一个位置,可以通过调用管理数据库代码的函数进行查询和变更。constructor标记合约的构造函数。
由于Solidity是一个静态类型的语言,所以编译时需明确指定变量的类型(包括本地变量或状态变量),Solidity编程语言提供了一些基本类型(elementary types)可以用来组合成复杂类型。
solidity值类型包括:
布尔(Booleans)
整型(Integer)
地址(Address)
定长字节数组(fixed byte arrays)
有理数和整型(Rational and Integer Literals,String literals)
枚举类型(Enums)
函数(Function Types)
复杂类型,占用空间较大的。在拷贝时占用空间较大。所以考虑通过引用传递。常见的引用类型有:
不定长字节数组(bytes)
字符串(string)
数组(Array)
结构体(Struts)
更多solidity语法参见:solidity语法