1. 程式人生 > 其它 >Solidity 智慧合約入門(二)----------基礎語法

Solidity 智慧合約入門(二)----------基礎語法

address 以太坊地址的長度,20個位元組

int/uint 變長的有符號或無符號整型。支援以8遞增,uint8到uint256。uint 預設為uint256。

bool 布林型

mapping 鍵值對對映關係,如mapping(address => uint)   類似 key value

fixed/ufied 定點數?

string  字串

byte/byte32 位元組 陣列

struct 結構體 類似字典?

struct test{
   address addr
   unit amount
}

 

public、private、internal external 四種訪問許可權

  • 1.函式預設宣告為public,即可以以internal方式呼叫,也可以通過external方式呼叫。可以理解為能夠被內部合約訪問和外部合約訪問。
  • 2.Internal宣告的只允許通過internal方式呼叫,不能被外部合約。而external能夠被外部合約訪問。
  • 3.private和internal類似,都不能被外部合約訪問,唯一的不同是private函式不能被子類呼叫,而internal可以。
pure、view、constant
pure 返回非變數 
view constant 返回全域性變數
pragma solidity ^0.8.7;       //指定版本

contract Testcoin                
//合約名 { uint storedData; function get() public view returns (uint) { return storedData; } }

constructor  建構函式修飾符  

看起來還有個裝飾器的語法的語法  用於modifier 關鍵字

下面寫個無限增發的 測試

pragma solidity ^0.4.21;       //指定版本
contract Ceshicoin                //合約名 {     uint storedData;     address public sender;     mapping (address => uint) public balances;
    event Sent(address from, address to, uint amount);
    constructor init(){         sender = 0x6526b6b3B454b04E5F340d8501F70ebB82201817;  // 初始化 設定合約建立者地址     }
    modifier checkowner(){        // modifier 裝飾器關鍵字         if(msg.sender!=sender) return;   // 直接return         _;     }

    function adminsend(address receiver, uint amount) public checkowner {   // set之前先呼叫checkowner方法         balances[receiver] += amount;     }
    function send(address receiver, uint amount) public {         if (balances[msg.sender] < amount) return;         balances[msg.sender] -= amount;         balances[receiver] += amount;         emit Sent(msg.sender, receiver, amount);     }
}

 

 初始化沒搞懂。。。   

建立完先呼叫下 init方法 

之後address就被設定成內建地址 只有內建地址才可以呼叫 adminsend方法

 

 

 

 無限增發

 

 require 

類似於 try  if

 

 

    constructor  建構函式關鍵字 在合約建立時執行   event  事件是以太坊虛擬機器(EVM)日誌功能中提供的一組方便的介面。當事件被觸發時,它們會將引數儲存到交易日誌中——區塊鏈中一種特殊的資料結構。這些日誌與合約地址相關聯,並且會被打包進區塊中,因此可以被永久訪問(不過 Serenity 版本或許會有所改變)。注意,日誌和事件的資料是不能被合約訪問的,即便是建立它們的合約也不行(不然常規的資料儲存就沒意義了)     msg.sender   msg.sender 是 solidity 中的一個全域性變數,他表示的是當前呼叫者(或智慧合約)的地址  msg.value 交易轉入本幣的數量 now  交易打包進塊鏈的時間戳 blackhash 返回區塊的hash block.number 打包該區塊的高度 address.balance 給定地址本幣數量  transfer  代表把eth轉到合約賬戶 address.call 呼叫指定地址合約的方法 selfdestruct 自毀

繼承(Inheritance)

當代碼很長的時候我們可以把它們拆分成不同的合約,通過繼承來獲得其他合約的功能

contract welcome {
  function hi() public returns (string) {
    return "hi!";
  }
}
contract welcome2 is welcome {
  function hello() public returns (string) {
    return "hello";
  }
}

引入(Import)

solidity 也支援 import(solidity 檔案字尾是 sol) import "./sayhello.sol";