代幣智慧合約流動性質押挖礦開發穩定版丨代幣智慧合約流動性質押挖礦系統開發方案

xiaofufu發表於2023-04-05

  簡而言之,如果一個區塊的交易資訊被改變,那麼該區塊體、區塊的雜湊值也將被改變,該區塊之後區塊的雜湊值也將被改變。如果想讓後面的區塊還能連線到它後面所有的區塊必須全部同時修改,否則被改之後的區塊就全部脫離了區塊鏈。


  區塊鏈最重要的功能,就是建立一種價值共識,而這個“共識”,主要基於“價值量化的能力”和“價值安全的過程”兩個方面。先是“價值量化能力”:把一件事透過數字化的方式描述清楚,就是一個價值量化的過程。


  其次是“價值安全的過程”:透過數字化的方式描述清楚後,還要保護資料不被篡改,並可以隨時隨地地查詢。,這兩個方面疊加起來,就形成了價值共識。所以,區塊鏈在資料互通機制、信用體系的搭建上,必將發揮非常重要的作用。


  關於區塊鏈專案技術開發唯:MrsFu123,代幣發行、dapp智慧合約開發、鏈遊開發、單雙幣質押、多鏈錢包開發、NFT盲盒遊戲、公鏈、鏈上游戲開發


  Uniswap博餅、交易所開發、量化合約開發、合約對沖、互助遊戲開發、Nft數字藏品開發、眾籌互助開發、元宇宙開發、swap開發、DAO智慧合約、


  夾子合約、鏈上合約開發、ido開發、商城開發等,開發過各種各樣的系統模式,更有多種模式、制度、案例、後臺等,成熟技術團隊,歡迎實體參考。


  常規實現中,Transfer定義如下:


  event Transfer(address indexed _from,address indexed _to,uint256 indexed _tokenId);


  1


  來自EIP-721標準原文


  我們可以看到此事件丟擲了3個topic,但事實上Transfer作為事件名稱也需要佔用一個topic,所以此處使用了log4操作碼。


  此操作碼需要的變數如下:


  offset丟擲內容位於記憶體的起始位置


  size丟擲內容的長度(與offset引數共同使用)


  topic1丟擲的的變數


  topic2


  topic3


  topic4


  補充函式


  在ERC721A的實現中,開發者提供了一些其他的mint函式實現,這些實現的主體邏輯與_mint類似,但提供了一些特別的功能或者符合一些特定的ERC標準。


  我們首先分析_mintERC2309函式,此函式根據ERC 2309標準編寫。在介紹函式具體實現前,我們簡單介紹一下ERC 2309的具體內容。


  ERC 2309主要解決在大規模鑄造和代幣轉賬過程中釋放過多event的問題。如在標準_mint函式實現中,我們在最後使用了while迴圈以逐一釋放事件。這顯然是低效的,且無法用於大規模代幣鑄造。


  為解決這一問題,ERC 2309的開發者設計了一個新的事件:


  event ConsecutiveTransfer(uint256 indexed fromTokenId,uint256 toTokenId,address indexed fromAddress,address indexed toAddress);


  基於此事件,我們可以一次性釋放所有代幣轉移的事件,大大降低了gas消耗。


  對於_mintERC2309具體實現,與_mint基本一致,除了增加了以下程式碼:


  ERC2309最大轉移量檢查


  if(quantity>_MAX_MINT_ERC2309_QUANTITY_LIMIT)_revert(MintERC2309QuantityExceedsLimit.selector);


  用於判斷單次轉移量是否超過5000


  ConsecutiveTransfer事件丟擲


  emit ConsecutiveTransfer(startTokenId,startTokenId+quantity-1,address(0),to);


  由於使用了solidity語法編寫,所以此處也減少了大量安全性程式碼編寫(如上文的address到uint256轉化等)。


  另一個實現mint功能的函式是_safeMint函式,此函式會判斷NFT接收地址to的屬性,以避免NFT接受方不具有接受NFT的能力。


  unchecked{


  if(to.code.length!=0){


  uint256 end=_currentIndex;


  uint256 index=end-quantity;


  do{


  if(!_checkContractOnERC721Received(address(0),to,index++,_data)){


  _revert(TransferToNonERC721ReceiverImplementer.selector);


  }


  }while(index<end);


  //Reentrancy protection.


  if(_currentIndex!=end)_revert(bytes4(0));


  }


  }


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

相關文章