首页 > 技术文章 > 61、solidity编程语言类型-2——2020年07月12日12:26:21

oneapple 2020-07-12 12:27 原文

2019年09月26日11:17:55

solidity编程语言类型-2——2020年07月12日12:32:20

编译网址

编译网址:

http://remix.ethereum.org/#optimize=false&evmVersion=null&version=soljson-v0.4.24+commit.e67f0147.js

1.整形

uint 无符号整型 只能表示正数

int和js中的number类似

2.地址

以太坊的地址

以太坊地址表示的字符串“0x3211B6a9fc5ea8bEf649bb617E3123a5755A0aC1”大概42位,以太坊一直是20个字节,一个字节8位,所以有160位

3.msg.sender

是合约里的全局变量,它是部署合约的地址。

  1. balance 查看余额

  2. transfer 转账

      address owner;
      //谁部署合约,这个地址就是谁
      owener=msg.sender;
    

4.数组

  uint [5] arr=[1,1,1,1,1];
  for(uint i=0;i<arr.length;i++){
 
  }
  arr.push(6);
  

5.map

  mapping(string=>uint) users;
  //{woniu:18}
  users["woniu"]=18;

6.结构体struct

  Struct Student{
  	uint age;
  	uint id;
  	string name;
  	uint phone;
  }
	 woniu=Student(18,141001,"xiaoye",151611895417);

7.枚举

enum sex{male,female};

8.public private

public共有的,合约内外都能调用;

private为私有的,只有合约内部可以调用。

也可以修饰状态变量;

状态变量默认是私有的;

pragma solidity ^0.4.24;

contract Test{
    
        uint public a=256;
        int public b=254;
        
        function add() private view returns(uint){
            return a + uint(b);
        }
        
        function ADD() public view returns(uint){
            return add();
        }
        
    
}
image-20191011153356103

9.pure view constant

如果⼀个函数⾥⾯,访问了状态变量,但是没有修改,我们使⽤view或者constant修饰。

  1. 如果访问了状态变量,⽽且修改了,那么就不能constant和view,否则会报错,不修饰即可。

  2. 如果没有使⽤过状态变量,我们要修饰为pure。

  3. 如果你修饰为constant,但是你在函数中修改了,效果是:不会报错,正常执⾏,但是值不会改

变。

pragma solidity ^0.4.24;

contract Test{
    
        uint public a=256;
        int public b=254;
        uint private c=1000;
        
        function add() private view returns(uint){
            return a + uint(b);
        }
        
        function ADD() public view returns(uint){
            return add()+c;
        }
        
         function returnString() public pure returns(string){
            return "hello";
        }
        
    
}

10.address 匿名函数

pragma solidity ^0.4.24;

contract Test{
    
    //以太坊地址的⻓长度,⼤⼩ 20个字节 ,20 * 8 = 160位 ,所以可以⽤⼀个 uint160 编码。
    //地址是所 有合约的基础,所有的合约都会继承地址对象,通过合约的地址串,调⽤合约内的函数。
    
    //可以进⾏加减,需要强制转换 
    
    //1. 匿名函数:没有函数名,没有参数,没有返回值的函数,就是匿名函数 
    //2. 当调⽤⼀个不存在的⽅法时,合约会默认的去调⽤匿名函数 
    //3. 匿名函数⼀般⽤来给合约转账,因为费⽤低


        string public str;
        address public addr1=0x00CA35b7d915458EF540aDe6068dFe2F44E8fa733c;
        
        function () public payable{
            
            
        }
        
        function add() public view returns(uint160) {
        return uint160(addr1) + 10;
        }
        
        function getBalance1() public view returns(uint256){
            return this.balance;
        }
        
         function getBalance() public view returns(uint256){
            return addr1.balance;
        }
    
}

11.transfer

//1. 转账的时候单位是wei 
//2. 1 ether = 10 ^18 wei (10的18次⽅) 
//3. 向谁转钱,就⽤谁调⽤tranfer函数 
//4. 花费的是合约的钱 
//5. 如果⾦额不⾜,transfer函数会抛出异常
            
//send转账与tranfer使⽤⽅式⼀致,但是如果转账⾦额不⾜,不会抛出异常,⽽是会返 回false   
                
        //由合约向addr1 转账10以太币 
        function transfer() public {
            addr1.transfer(10 * 10 **18);
            }  

END

推荐阅读