鏈上NFT鑄造發行交易平臺開發功能分析原始碼部署

Lyr96246466發表於2023-04-16

  NFT根據以太坊ERC721或其他標準開發可以找+18I鏈上合約-259l開發系統3365將作品加密後變成了一種非同質化的代幣,而這叫做鑄幣(mint)。


  2、鑄幣是需要和區塊鏈簽約,要支付手續費(Gas費),而這筆手續費是支付給各節點的礦工,需要礦工將簽約記錄到區塊鏈內。記錄的過程需要計算雜湊函式,隨機值,雜湊值,並生成新的區塊;


  3、NFT鑄幣完成後,產品就上架到交易平臺OpenSea上可供交易。當交易NFT作品時,系統會向區塊鏈傳送交易合約,然後各節點開始計算雜湊函式,隨機值,雜湊值,然後生成確權程式碼,以及校驗生成的區塊是否有效;


  4、以太坊區塊鏈是基於比特幣區塊鏈上發展和進步的,其在比特幣區塊鏈的基礎上增加了智慧合約的設定,而NFT基於以太坊。所以NFT有了區塊鏈去中心化和智慧合約的特點,使NFT具有不可替代、不可分割、不可篡改等區塊鏈的特點;


  跨鏈互操作性有利於Web3不同生態的整合,同時對於連線現有Web2基礎設施和Web3服務有至關重要的作用。透過啟用跨鏈智慧合約,跨鏈互操作性解決方案減少了生態系統的碎片化,並釋放了更高的資本效率和更好的流動性條件


pragma solidity ^0.6.0;

import "./IERC165.sol";


///

/// @dev Interface for the NFT Royalty Standard

///

interface IERC2981 is IERC165 {

    /// ERC165 bytes to add to interface array - set in parent contract

    /// implementing this standard

    ///

    /// bytes4(keccak256("royaltyInfo(uint256,uint256)")) == 0x2a55205a

    /// bytes4 private constant _INTERFACE_ID_ERC2981 = 0x2a55205a;

    /// _registerInterface(_INTERFACE_ID_ERC2981);


    /// @notice Called with the sale price to determine how much royalty

    //          is owed and to whom.

    /// @param _tokenId - the NFT asset queried for royalty information

    /// @param _salePrice - the sale price of the NFT asset specified by _tokenId

    /// @return receiver - address of who should be sent the royalty payment

    /// @return royaltyAmount - the royalty payment amount for _salePrice

    function royaltyInfo(

        uint256 _tokenId,

        uint256 _salePrice

    ) external view returns (

        address receiver,

        uint256 royaltyAmount

    );

}


interface IERC165 {

    /// @notice Query if a contract implements an interface

    /// @param interfaceID The interface identifier, as specified in ERC-165

    /// @dev Interface identification is specified in ERC-165. This function

    ///  uses less than 30,000 gas.

    /// @return `true` if the contract implements `interfaceID` and

    ///  `interfaceID` is not 0xffffffff, `false` otherwise

    function supportsInterface(bytes4 interfaceID) external view returns (bool);

}

NFT 跨鏈橋是如何做到的?  


NFT 橋適用在所有的鼓勵的鏈之間來回傳送 NFT,與此同時儲存其資料庫。當一個 NFT 被遷移出它發源鏈時,會出現這樣的情況:  


1)NFT 被鎖定在 NFT 橋區塊鏈智慧合約中;  


2)一個等效電路產品的包裝 NFT 被鍛造到總體目標鏈裡的相對應 collection 中;  


3)那個被包裝 NFT 同名的,看上去和原先的一樣,個人行為也與鏈裡的別的 NFT 完全一樣,在 EVM 鏈上,包裝 NFT 是 ERC721 貨幣,在 Solana 上,他們帶有 Metaplex 資料庫的 SPL 貨幣,在 Aptos 上,它們都是 Aptos 貨幣標準化的案例。  


除開名稱及外型以外,被包裝 NFT 的獨特之處取決於可以把它們推送回初始鏈並開啟初始 NFT。這就意味著,比如,源於 Aptos 的 NFT 能夠橋收到以太幣,之後在 Opensea 上售賣,然後再由新使用者轉到 Aptos。  


在 NFT 資料儲存中,我們可以看到 solmate 等常規實現都使用了 mapping(uint256=>address)internal _ownerOf 將單個 tokenId 與持有者對應。但 ERC721A 是對批次鑄造進行特殊最佳化的,開發者認為在批次鑄造過程中,使用者持有的 NFT 的 tokenId 往往是連續的。  


_ownerOf 記錄 tokenId 與持有者的關係  


_balanceOf 記錄持有人所持有的 NFT 數量  


其鑄造方法定義如下:  


function _mint(address to,uint256 id)internal virtual{  


require(to!=address(0),"INVALID_RECIPIENT");  


require(_ownerOf[id]==address(0),"ALREADY_MINTED");  


//Counter overflow is incredibly unrealistic.  


unchecked{  


_balanceOf[to]++;  


}  


_ownerOf[id]=to;  


emit Transfer(address(0),to,id);  


}  


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

相關文章