Metaforce佛薩奇2.0開發詳細版丨Metaforce佛薩奇2.0系統開發(開發功能及原始碼)

xiaofufu發表於2023-03-09

  智慧合約(或稱加密合約)是一種計算機程式,在一定條件下直接自動控制雙方的數字資產轉移。智慧合約的工作方式與傳統合約相同,同時也自動執行合約。


  智慧合約是完全按照其建立者的設定(編碼,程式設計)執行的程式。就像傳統合同可由法律強制執行一樣,智慧合同可由程式碼強制執行。


  程式碼逐行解讀


  確定的使用的Solidity版本


  pragma solidity=0.5.16;


  這兩行匯入了該合約必須實現的介面IUniswapV2ERC20.sol和一個防溢位的數學工具庫SafeMath。一個合約實現的介面代表了它的基本功能;防溢位數學工具庫應用很常見,主要是因為數值是可以無限大的,但是儲存位數是有限的。例如最大256位,因此最大的無符號整數就是是2**256-1。再大就會溢位,這時就會得到預期外的結果。


  另外,因為在Solidity中,應用最多的是無符號整數,如果減法得到了負數,根據二進位制的表示法,結果會被認為成另一個無符號整數。在早期的智慧合約中,存在溢位漏洞或者得到負值而遭受損失的情況。當前編寫的智慧合約一般都會防範這種問題的發生,使用SafeMath工具庫是最常見的預防手段。注意,該庫裡只有加、減和乘三種計算,沒有除法。因為除法不會有溢位;如果被零除,Solidity語言本身會報錯重置整個交易,不需要額外處理。


  import"./interfaces/IUniswapV2ERC20.sol";


  import"./libraries/SafeMath.sol";


  定義了該合約必須實現匯入的IUniswapV2ERC20介面。該介面是由標準ERC20介面加上自定義的線下簽名訊息支援介面組成,所以UniswapV2ERC20也是一個ERC20代幣合約。最後一個花括號是作用域開始。


  contract UniswapV2ERC20 is IUniswapV2ERC20{


  代表在uint256(uint是它的同名)型別上使用SafeMath庫。Solidity中庫函式在指定呼叫例項時(例如本例中的.sub等)和Rust語言中的結構體的方法類似,例項自動作為庫函式中的第一個引數。


  using SafeMath for uint256;


  這三行程式碼定義了ERC20代幣的三個對外狀態變數(代幣後設資料):名稱,符號和精度。這裡的精度就是小數點位數。注意,由於該合約為交易對合約的父合約,而交易對合約是可以建立無數個的,所以這無數個交易對合約中的ERC20代幣的名稱、符號和精度都一樣。我們平常在交易所中看到的只是ERC20代幣的符號,從這裡可以看出,符號是可以重複的,並不是一確定的。代幣之間根本區別是合約地址,不同的地址就是不同的代幣,哪怕合約程式碼完全一樣。


  //token名稱,案例及模式:MrsFu123


  string public constant name="Uniswap V2";


  //token縮寫


  string public constant symbol="UNI-V2";


  //token精度


  uint8 public constant decimals=18;


  記錄代幣發行總量的狀態變數。為什麼是訪問許可權是public的呢?主要是利用編譯器的自動構造同名函式功能來實現相應介面。


  uint256 public totalSupply;


  用一個map記錄每個地址的代幣餘額


  mapping(address=>uint256)public balanceOf;


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

相關文章