本篇内容主要讲解“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是什么”有了更深的了解,不妨来实际操作一番吧!这里是亿速云网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。