Stepn跑步链游开发系统NFT技术

31 阅读4分钟

  随着NFT技术和人工智能(AI)的发展,未来在NFT领域的应用也会逐渐增多,两者会擦出怎样的火花呢?从智能合约到机器学习,NFT与AI技术的结合将带来怎样的变革?

  STEPN是一款部署在Solana链上Move to Earn(边运动边赚)游戏,玩家可以通过在户外散步、慢跑或跑步方式赚取代币GST或者GMT从而获得收入。不过玩家需要先拥有STEPN推出的NFT运动鞋才可参与游戏,STEPN跑步链游系统13z开4z77发z558。

  STEPN游戏跑鞋具有双重Token,分别是游戏Token(GST)和治理Token(GMT)。

  GST用于各种游戏内活动,例如铸造新运动鞋、升级运动鞋和升级宝石等。

  一、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映射,所以转账逻辑实现也较为简单。