1. 程式人生 > 實用技巧 >61、solidity程式語言型別-2——2020年07月12日12:26:21

61、solidity程式語言型別-2——2020年07月12日12:26:21

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();
        }
        
    
}

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