温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

Solidity是什么

发布时间:2021-12-07 15:22:38 来源:亿速云 阅读:199 作者:iii 栏目:互联网科技

本篇内容主要讲解“Solidity是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Solidity是什么”吧!


什么是Solidity

Solidity是一种类似Javascript的高级语言。它被设计成以编译的方式生成以太坊虚拟机的代码

一个简单的例子

contract SimpleStorage {
    uint storedData;

    function set(uint x) {
        storedData = x;
    }

    function get() constant returns (uint retVal) {
        return storedData;
    }
}

这是一段最简单的Solidity合约,声明了一个变量storedData,以及一个set一个get两个方法去进行读写。Solidity中访问变量不需要this关键字

合约的结构

Solidity的合约的定义与面向对象语言的类的定义有些相似。每个合约包括了状态变量,函数,函数修饰符,事件,结构类型和枚举类型,且合约也能从其他合约那里继承。

  • 状态变量是在合约存储器中永久存储的值

  • 函数是合约中可执行单位的代码

  • 函数修饰符可以在声明中补充函数的语义

  • 事件是和evm日志设施的方便接口

  • 结构类型是一组用户定义的变量

  • 枚举是用来创建一个特定值的集合类型

类型

Solidity是一种静态语言,也就是说每个变量在编译的时候必须要定义类型。Solidity还支持通过组合提供的几种简单类型构建复杂类型。

布尔类型

与其他语言一样布尔类型的值就是真或假,支持的操作符有!,&&,||,==,!=

整型

整型分int以及uint,其中支持长度为8-256,步长为8,即存在uint8,uint16....uint256 另外int = int256 uint=uint8 支持的操作符有<=,>=,==,<,>,!=,&,|,^,~,+,-,*,/,%,**,+=,-=

地址

地址即Ethereum地址,也可以拥有成员,长度为20字节,是所有合约的base 支持的操作符 <=,>=,>,<,==,!= 十六进制字符串凡是通过地址合法性验证就会被认为是地址。需要注意的是39到41位长的没有通过地址合法性验证 的会得到一个警告,但会被视为普通的有理数字面量 地址的成员有balance以及send,即账户余额以及发送 如果想要获得当前合约的balance可以直接通过this.balance来获取,因为对于合约来说,地址代表的就是合约本身,合约对象默认继承自地址对象 地址有一个send方法用来向某个地址发送货币(货币单位为wei),需要注意的是:

  • 调用递归的深度不能超过1024

  • 如果gas不够,执行会失败

  • 执行该操作需要判断是否成功

字节数组

bytes1...bytes32,允许值以1为步长递增,byte默认表示byte1 支持的操作符<=,<,>=,>,==,!=,&,|,^,~以及序号访问 字节数组存在一个成员变量length,表示这个字节数组的长度,且只读

小数

小数还未被完全支持,可以被定义但不能被引用或传递 小数分为fixed以及ufixed,有符号小数与无符号小数 支持操作符<=,<,>=,>,==,!=,+,-,*,/,%,+=,-+等操作符

十六进制字面量

由hex关键字打头,后面紧跟单引号或双引号字符串,内部会被表示成二进制流 由于一个字节为8位,因此一个hex是由两个[0-9a-f]字符组成的 hex可以隐式转为bytes

函数类型

可以将一个函数赋值给一个变量,一个函数类型的变量,还可以将函数作为参数进行传递,也可以在函数调用中返回一个函数。该类型分为两类:internal以及extrnal internal只能在当前合约的上下文环境意外的地方执行 external包括地址与函数方法签名两部分,可作为外部函数调用的参数或有外部函数返回 完整的函数定义:

默认函数为internal
如果没有返回值则必须省略returns
function (<parameters types>){internal|external}[constant][payable][returns (<return types>)]
数组

数组声明时可以是变长的也可以指定长度,对于storage数组来说元素类型可以是任意的,而对于memory数组来说,如果函数对外可见,那么函数参数不能是映射类型,只能支持ABI类型 声明多维数组时,solidity的长度声明与其他语言是相反的,例如我声明一个长度为5的二维数组,每个元素是变长数组,那么我的声明应是uint[][5] x 类型为数组的状态变量可以标记public类型,从而让Solidity来构造一个访问器 变长数组可以通过修改length来调整数组长度

注意

在eth中调用方法进行写操作时使用sendTransaction来请求,且需要在参数中写入操作账户以及gas,读操作使用call,并且执行完写操作之后需要进行一次挖矿将数据保存。

contract.funcName.sendTransaction(args...,{from:eth.accounts[0],gas:200000})

到此,相信大家对“Solidity是什么”有了更深的了解,不妨来实际操作一番吧!这里是亿速云网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI