關於STEPN跑步跑鞋NFT鏈遊開發系統搭建技術

搭建猿punk2558發表於2023-03-23

STEPN是一款部署在Solana鏈上Move to Earn(邊運動邊賺)遊戲,玩家可以透過在戶外散步、慢跑或跑步方式賺取代幣GST或者GMT從而獲得收入。不過玩家需要先擁有STEPN推出的NFT運動鞋才可參與遊戲。

STEPN遊戲跑鞋具有雙重Token,分別是遊戲Token(GST)和治理Token(GMT)。

GST用於各種遊戲內活動, STEPN跑步鏈遊系統13z開4z77發z558,例如鑄造新運動鞋、升級運動鞋和升級寶石等。

一、AI技術在NFT行業中的應用

隨著生成式AI的出現,正在激勵人們隨意執行指令,直到得到理想的輸出,例如我們可以在ChatGPT上每天執行數百個指令,直到得到滿意的輸出。而當前生成式AI面臨的挑戰是,需要使用幾百人的作品來建立成千上萬個輸出,但這些作品沒有被識別、歸屬或追蹤。

但如果AI和區塊鏈這兩種工具融合在一起呢,一旦與NFT等區塊鏈技術結合,產生獨一無二、不可分割、不可篡改的特徵,那會是怎樣的場景?

1)大資料分析和預測:

AI技術可以透過對NFT交易市場交易額資料和鏈上NFT新增資料的分析,預測NFT領域的發展趨勢,提前捕獲市場熱點,幫助NFT交易者和投資者做出更加明智的決策。例如,AI可以分析NFT交易市場的鏈上成交資料,預測未來一段時間的市場變化,幫助交易者找到佳購買或出售的時機。

2)自動分析和資產定價:

在NFT市場上,每個NFT的價格都是根據市場需求和供應情況而決定的,因此準確地給NFT資產進行定價則變得尤為重要。AI技術可以透過對單個NFT資產歷史成交資料的分析,並且基於機器學習演演算法,來對NFT資產進行精準定價,這可以顯著提高NFT資產價格的準確性和評估效率。

3)智慧化的安全檢測:

智慧合約是區塊鏈技術的核心之一,但由於智慧合約的複雜性,常常存在安全漏洞和被駭客攻擊的風險。

而透過AI技術可以對智慧合約程式碼和機制進行安全分析,並給出檢測結果。

使用機器學習演演算法和資料集對AI模型進行訓練,來識別智慧合約中的漏洞、受到的攻擊行為及可疑操作等異常行為。分別在部署前對程式碼快速檢測潛在漏洞與安全風險,再對部署完的合約進行檢測,將檢測結果視覺化輸出,以圖表等方式呈現,並給出對應修復方案。

4)基於AI演演算法創造加密藝術品:

AI技術可以生成獨特的NFT藝術品,為NFT市場帶來新的藝術風格和創意。例如,AI可以使用深度學習演演算法生成具有獨特紋理和形態的數字藝術品,並透過自適應學習來最佳化生成的藝術品的質量和獨特性。

solmate實現都較為短小精悍且經過gas最佳化,我個人較為推崇。solmate的ERC721實現僅有231行,讀者可自行閱讀。

在solmate合約中,我們可以看到核心資料結構為:

mapping(uint256=>address)internal _ownerOf;

mapping(address=>uint256)internal _balanceOf;

其中,各對映功能如下:

_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);

}

透過此函式,我們更新了_ownerOf和_balanceOf實現使用者鑄造NFT的功能。我們可以發現使用者每次鑄造NFT都需要更新_ownerOf和_balanceOf對映。眾所周知,在操作碼gas消耗中,更新儲存需要消耗大量gas。如果使用者批次鑄造,會在此過程中消耗大量gas。

根據資料(PDF警告),在ETH價格為1500美元時,更新儲存的價格為7.5美元,而寫入儲存的價格為30美元。這意味著僅在mint過程中,更新對映會浪費大量資產。

轉賬函式定義如下:

function transferFrom(

address from,

address to,

uint256 id

)public virtual{

require(from==_ownerOf[id],"WRONG_FROM");

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

require(

msg.sender==from||isApprovedForAll[from][msg.sender]||msg.sender==getApproved[id],

"NOT_AUTHORIZED"

);

//Underflow of the sender's balance is impossible because we check for

//ownership above and the recipient's balance can't realistically overflow.

unchecked{

_balanceOf[from]--;

_balanceOf[to]++;

}

_ownerOf[id]=to;

delete getApproved[id];

emit Transfer(from,to,id);

}

由於對於每個tokenId都維護有一個mapping對映,所以轉賬邏輯實現也較為簡單。

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

相關文章