DeFi質押流動性挖礦模式丨LP流動性質押挖礦系統開發技術講解方案分析邏輯

Tg_StPv888發表於2023-02-07

首先,所有的solidity原始碼前面必須標明編譯器版本

  pragma solidity^0.4.18;

  這個就宣告瞭版本是0.4.18到0.5.0的編譯器中是可以工作的

  合約

  寫一個合約的基本框架是:

  contract name{}

  變數

  下面來看一下怎麼宣告變數,狀態變數會永久的儲存在合約裡

  uint表示無符號整數,int表示有符號的

  在solidity裡面uint預設表示uint256,其他的還有uint8、uint16、uint32...

  宣告一個變數:

  uint id=115;

  結構體

  solidity也可以用結構體:下面宣告瞭一個叫Student的結構體,有兩個屬性一個是string型別的name,另一個是uint型別的id

  struct Student{string name;uint id;}

  陣列

  solidity支援兩種型別的陣列,靜態陣列、動態陣列

  uint型別的固定長度為10的靜態陣列id

  uint[10]id;

  uint型別的長度不定的動態陣列id

  uint[]id;

  也可以建立一個結構體型別的陣列students

  Student[]students;

  函式

  習慣上,函式裡面的變數都是以_開頭的

  function sayhello(string _name,uint _id){}

  使用結構體和陣列

  下面我們來瞭解一下怎麼使用結構體和陣列

  Student yichen=Student('yichen',115);//建立一個新的studentstudents.push(yichen);//把建立的yichen新增到students結構體陣列裡面

  當然也可以一步完成

  students.push(Student('yichen',115));

  函式的屬性

  solidity預設的屬性是公共的(public),也就是說誰都可以呼叫,這樣明顯是不安全的,所以我們將它設定為私有的(private),只需要在函式後面加上一個private就可以,另外私有函式習慣名稱前帶個下劃線

  function _sayhello(string _name,uint _id)private{}

  函式的更多屬性

  想讓函式返回一個值的話可以這樣:

  string greeting="hello yichen!";function _sayhello()returns(string){return greeting;}

  在以太坊中,你去執行一些操作比如:轉賬、部署合約等是需要花費一些錢的(gas),因為以太坊需要消耗資源去計算

  我們可以發現上面那個函式並沒有修改任何東西,所以可以給他設定一個view修飾符,表示它只是讀取資料,沒有改變或者寫任何東西,那麼執行這個函式的時候只需要去查詢儲存的資料就可以,不需要全世界都知道並且把它寫進區塊中,所以不會消耗gas

  還有個pure修飾符,表示這個函式甚至不會訪問合約裡的任何東西,他的返回值完全取決於我們的輸入,例如:

  function _multiply(uint a,uint b)private pure returns(uint){return a*b;}//這個函式接收我們的輸入,然後把兩個數的乘積返回給我們

  Keccak256

  Ethereum內部有一個雜湊函式keccak256,他會把一個字串轉換成16進位制的數字

  //6e91ec6b618bb462a4a6ee5aa2cb0e9cf30f7a052bb467b0ba58b8748c00d2e5keccak256("aaaab");//b1f078126895a1424524de5321b339ab00408010b7cf0e6ed451514981e58aa9keccak256("aaaac");

  型別轉換

  uint8->uint16小單位變到大單位,值不變uint16->uint8大單位變到小單位,變為原值mod 256bytes8->bytes16後面補0bytes16->bytes8只取前面的8數address->uint按照uint的單位從地址後面開始擷取對應長度address->bytes按照bytes的單位從地址前面開始擷取對應長度uint/bytes->address前面填充0,直到符合address長度

  事件

  事件是以太坊虛擬機器(EVM)日誌功能中提供的一組方便的介面。當事件被觸發時,它們會將引數儲存到交易日誌中——區塊鏈中一種特殊的資料結構。這些日誌與合約地址相關聯,並且會被打包進區塊中,因此可以被永久訪問(不過Serenity版本或許會有所改變)。注意,日誌和事件的資料是不能被合約訪問的,即便是建立它們的合約也不行(不然常規的資料儲存就沒意義了)

  event IntegersAdded(uint x,uint y,uint result);

  function add(uint _x,uint _y)public{uint result=_x+_y;//觸發事件,通知appIntegersAdded(_x,_y,result);return result;}


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70016646/viewspace-2934174/,如需轉載,請註明出處,否則將追究法律責任。

相關文章