• solidity开发3类型1


    总述

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

    数据类型

    Booleans

    bool修饰,值为true或者false
    

    Integer

    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

    固定小数位数的数据在solidity中并不完全支持,这种类型的数字可以被申明,但是不能被赋值或者计算得到。
    fixed${M}x${N}/ufixed${M}x${N}:有符号或者无符号的浮点数据,其中M表示整个数字所占的最大bit数,N表示小数的位数。(注意这里M表示的字节数是整个数字去掉小数点之后能表示的最大):
    
    MN的测试
    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的属性
    可以使用balance属性来得到地址拥有的货币数量,可以通过transfer方法来转移货币。
    
    Address members
    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

    类似于java中的类。合约类型的成员只的是external修饰的函数,可以使用type(c),来获取合约c的类型信息
    

    Fixed-size byte arrays

    bytes${n}:表示最大n字节的字符变量,其中n范围为[1, 32]
    byte:表示bytes1
    

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

    Bytes test
    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
        } 
    
  • 相关阅读:
    2019年2月14日训练日记
    定制你的WordPress
    打造你的专属埃菲尔塔
    【DIY】打造一个六足蜘蛛机器人
    【数据结构专题-03】树
    【数据结构专题-02】算法介绍
    【数据结构专题-01】数据结构基本介绍
    【DIY】制作一个刷卡进门装置
    【Java实战】Java实现简易音乐播放器
    【Java实战】Java实现简易坦克对战小游戏
  • 原文地址:https://www.cnblogs.com/Kidezyq/p/15815939.html
Copyright © 2020-2023  润新知