代幣合約系統開發搭建丨DAPP代幣模式專案開發技術方案

Tg_StPv888發表於2023-04-10

  SocialFi可以透過去中心化機制,讓平臺的所有權與治理權迴歸到使用者身上,由整個社群來擬定審查機制,同時也能避開惱人的演演算法,使用者能夠只看到自己追蹤的人,


  pragma solidity=0.5.16;照例指定確定的使用的Solidity版本。


  import'./interfaces/IUniswapV2ERC20.sol';import'./libraries/SafeMath.sol';這兩行匯入了該合約必須實現的介面IUniswapV2ERC20.sol和一個防溢位的數學工具庫SafeMath。一個合約實現的介面代表了它的基本功能;防溢位數學工具庫應用很常見,主要是因為數值是可以無限大的,但是儲存位數是有限的。例如最大256位,因此最大的無符號整數就是是2**256-1。再大就會溢位,這時就會得到預期外的結果。另外,因為在Solidity中,應用最多的是無符號整數,如果減法得到了負數,根據二進位制的表示法,結果會被認為成另一個無符號整數。在早期的智慧合約中,存在溢位漏洞或者得到負值而遭受損失的情況。當前編寫的智慧合約一般都會防範這種問題的發生,使用SafeMath工具庫是最常見的預防手段。注意,該庫裡只有加、減和乘三種計算,沒有除法。因為除法不會有溢位;如果被零除,Solidity語言本身會報錯重置整個交易,不需要額外處理。


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


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


  string public constant name='Uniswap V2';


  string public constant symbol='UNI-V2';


  uint8 public constant decimals=18;


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


  uint public totalSupply記錄代幣發行總量的狀態變數。為什麼是訪問許可權是public的呢?這個在學習系列(一)中已經講過了。主要是利用編譯器的自動構造同名函式功能來實現相應介面。


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

相關文章