900字范文,内容丰富有趣,生活中的好帮手!
900字范文 > Solidity编程语言

Solidity编程语言

时间:2019-09-24 09:25:59

相关推荐

Solidity编程语言

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

Solidity 是静态类型语言,支持继承、库和复杂的用户定义类型等特性。 Solidity 编程的推荐方式是使用 Remix。Remix是一个基于 Web 浏览器的 IDE,它可以

让你编写 Solidity 智能合约,然后部署并运行该智能合约。Solidity 源

码文件通常以 .sol 作为扩展名。

以太坊底层基于帐户,而不是 UTXO,所以增加了一个特殊的address 的数据类型用于定位用户和合约账户。

语言内嵌框架支持支付。提供了 payable 等关键字,可以在语言层面直接支持支付。

使用区块链进行数据存储。数据的每一个状态都可以永久存储,所以在使用时需要确定变量使用内存,还是区块链存储。

运行环境是在去中心化的网络上,所以需要强调合约或函数执行的调用的方式。

不同的异常机制。一旦出现异常,所有的执行都将会被回撤,这主要是为了保证合约执行的原子性,以避免中间状态出现的数据不一致。

Solidity源码和智能合约

Solidity 源代码要成为可以运行在以太坊上的智能合约需要经历如下的

步骤:

用 Solidity 编写的智能合约源代码需要先使用编译器编译为字节码(Bytecode),编译过程中会

同时产生智能合约的二进制接口规范(Application Binary Interface,简称为ABI);通过交易(Transaction)的方式将字节码部署到以太坊网络,每次成功部署都会产生一个新的智

能合约账户;使用 Javascript 编写的 DApp 通常通过 web3.js + ABI去调用智能合约中的函数来实现数据的读取

和修改。

1.4 合约结构

状态变量(State Variables)作为合约状态的一部分,值会永久保存在存储空间内。

函数(Functions)合约中可执行的代码块。

函数修饰器(Function Modifiers)在函数声明中,用来补充修饰函数的语义。

事件(Events)非常方便的 EVM 日志工具接口。

remix安装以及使用

浏览器端配置

在浏览器端有俩个选择,分别为英文版与中文版(有些许差别)

Remix中文版地址:

Remix英文版地址(推荐):/

-----此处,不同的地方讲解区块链代码用的语言不同,之前听的是用的rust语言,也不太懂,没有及时去看开源的内容。

创建新文件

创建新文件夹

Github代码片段分享

表示打开一个本地文件

pragma solidity ^0.4.0; contract SimpleStorage { uint storedData; function set(uint x) public { storedData = x; }function get() public view returns (uint) { return storedData; } }

该合约能完成的事情并不多(由于以太坊构建的基础架构的原因):它能允许任何人在合约中存储一个单独的数字,并且这个数字可以被世界上任何人访问,且没有可行的办法阻止你发布这个数字。当然,任何人都可以再次调用 set ,传入不同的值,覆盖你的数字,但是这个数字仍会被存储在区块链的历史记录中。

NAME :合约名

METADATA :一些编译相关的信息,比如版本、所用的语言、设置等

BYTECODE :写入区块的字节码

ABI :此智能合约对应的 ABI ,也就是我们合约里面定义的一些接口

WEB3DEPLOY :智能合约编译之后的发布命令,这个就是比较重要的,之后的web3就是调用这段命令来部署合约的

METADATAHASH :数据的一个哈希值

SWARMLOCATION :Swarm网络的一个地址

FUNCTIONHASHES :合约定义的方法的hash,其实我们执行合约的时候就是通过这个hash去找到对应的方法进行执行的

GASESTIMATES :关于矿工费的一个预算,在ETH上进行合约的部署,执行等都是需要矿工费的。一般合约代码越多矿工费越高。

点击下面的run图标,可以看到部署,以及账户信息,环境等等

点击deploy之后天可以看到自己的合约已经部署完成,打开之后可以看见我们写的函数 set , get 了,给 set 函数输入一个值,点击 get 会得到相应的值

Environment 表示合约部署的环境。 Javascript VM 是虚拟了一个节点,而 Injected Web3 和 Web3 Provider 则真正连接一个节点。

Account 代表不同的虚拟账户,每个虚拟账户每个有 100 ETH

Deploy 表示合约部署按钮

Deployed Contracts 表示已经部署的合约

Solidity基础操作

Solidity源文件布局

源文件可以被版本杂注pragma所注解,表明要求的编译器版本

例如:

pragma solidity ^0.4.0;

import “filename”;

import * as symbolName from “filename”;

import {symbol1 as alias, symbol2} from “filename”;

import “filename” as symbolName;

Solidity值类型介绍

函数

内部函数调用

外部函数调用

数据位置

数组

涉及 LValues 的运算符

单位和全局变量

特殊变量和函数

控制结构

创建合约

getter 函数

View 函数

Pure 函数

这个后面类似于学Python,从数值类型到数据结构,建仓,调用函数包等。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。