前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >solidity开发3-类型1

solidity开发3-类型1

作者头像
SecondWorld
发布2022-05-06 15:52:39
3640
发布2022-05-06 15:52:39
举报
文章被收录于专栏:Java开发者杂谈Java开发者杂谈

总述

代码语言:javascript
复制
solidtiy是一种静态类型语言,所以任何变量在使用之前都应该声明其特定类型。
solidity任何类型都没有值为undefined或者null的情况。但是任何类型的数据在没有赋值之前,都会有一个该数据类型的对应的default value。

数据类型

Booleans
代码语言:javascript
复制
bool修饰,值为true或者false
Integer
代码语言:javascript
复制
int${n}/uint${n}: 有符号或者无符号的整数。其中n为8、16... 256(8的倍数,从8到256),表示整数的位数
int/uint: 则是int256/uint256的别名

另外对于整数x,可以通过type(x).min或者type(x).max来获取对应类型的最小或者最大值。
可以通过x**n来实现求x的n次方,此时直接用 x*x*x...(n次相乘)能实现更少的gas费
0**0在evm中固定为1.
Fixed Point Numbers
代码语言:javascript
复制
固定小数位数的数据在solidity中并不完全支持,这种类型的数字可以被申明,但是不能被赋值或者计算得到。
fixed${M}x${N}/ufixed${M}x${N}:有符号或者无符号的浮点数据,其中M表示整个数字所占的最大bit数,N表示小数的位数。(注意这里M表示的字节数是整个数字去掉小数点之后能表示的最大):

MN的测试

代码语言:javascript
复制
fixed8x1 num = 12.7;	// 必须一个小数,且最大为12.7
        fixed8x0 num2 = 127;	// 不能有小数且最大为127

M的取值范围为8的倍数且为:[8, 256], N的取值范围为:[0, 80]。 fixed/ufixed:则是fixed128x18/ufixed128x18

Address

一共有两种类型的地址:

  1. address: 保存20个字节的值,代表一个以太坊的地址。
  2. address payable:同address,不过包含transfer和send属性。 address payable可以直接隐式转换成address,而address要转换成payable address需要显示使用payable()来进行。 可以使用address来显示转换uint160,byte20为地址类型。但是只有address或者合约类型才能通过payable显示转换为payable address类型(合约必须是可以接收以太币(有receive方法或者payable修饰的方法))。
Address的属性
代码语言:javascript
复制
可以使用balance属性来得到地址拥有的货币数量,可以通过transfer方法来转移货币。

Address members

代码语言:javascript
复制
address payable x = payable(0xd9145CCE52D386f254917e481eB44e9943F39138);
address myAddress = address(this);
if (x.balance < 10 && myAddress.balance >= 10) x.transfer(10);	// 注意这里是转入到x账户

注意transfer当接收方拒绝接收或者发送方gas费不足的情况会抛出异常并终止合约。另一个send函数,则只会返回false,不会终止合约继续运行。

Contract Types
代码语言:javascript
复制
类似于java中的类。合约类型的成员只的是external修饰的函数,可以使用type(c),来获取合约c的类型信息
Fixed-size byte arrays
代码语言:javascript
复制
bytes${n}:表示最大n字节的字符变量,其中n范围为[1, 32]
byte:表示bytes1

可以通过下标来访问该变量对应字节的数值,且.length属性返回定义的大小而不是实际使用的大小。

Bytes test

代码语言:javascript
复制
function getByteLen() external pure returns (uint) {
        bytes2 b = '1';
        return b.length; // 2
    } 

    function getByteValue() external pure returns (bytes1) {
        bytes2 b = '1';
        return b[1];        // 0x00
    } 
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2022-01-19,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 总述
  • 数据类型
    • Booleans
      • Integer
        • Fixed Point Numbers
          • Address
            • Address的属性
          • Contract Types
            • Fixed-size byte arrays
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档