NFT鑄造合成鏈上理財系統開發模式

caiayu1234發表於2023-04-12

 OpenZeppelin是一個以太坊智慧合約的開發框架,它提供了許多可重用的智慧合約程式碼和安全庫,可以幫助開發人員快速構建安全可靠的智慧合約應用。OpenZeppelin還提供了許多常用的功能模組,例如代幣合約、多簽名錢包、訪問控制、庫合約等,這些模組可以透過繼承和擴充套件來快速建立新的合約。OpenZeppelin程式碼經過了廣泛測試和審查,可以提供可靠的安全保障,並幫助開發人員遵循實踐,提高合約的安全性和可靠性。I88智慧合約I928系統開發8024

  

  //genAddress使用salt生成地址,演演算法與合約保持一致

  

  func(svc*Service)genAddress(_salt int64)(common.Address,error){

  

  cfg:=svc.cfg.Chain

  

  creationCode,err:=hexutil.Decode(cfg.CreationCode)

  

  if err!=nil{

  

  return common.Address{},errors.Wrap(err,"Bad CreationCode")

  

  }

  

  contract:=common.HexToAddress(cfg.WalletFactory).Bytes()

  

  byteCodeHash:=crypto.Keccak256Hash(

  

  creationCode,

  

  common.LeftPadBytes(contract,32),

  

  )

  

  salt:=big.NewInt(_salt)

  

  hash:=crypto.Keccak256Hash(

  

  []byte{0xff},

  

  contract,

  

  common.LeftPadBytes(salt.Bytes(),32),

  

  byteCodeHash.Bytes(),

  

  )

  

  var address common.Address

  

  copy(address[:],hash.Bytes()[12:])

  

  return address,err

  

  }

  

  function getFormat(uint256 tokenId)public view returns(string memory){

  

  return pluck(tokenId,"FORMAT",format);

  

  }

  

  function getNext(uint256 tokenId)public view returns(string memory){

  

  return pluck(tokenId,"NEXT",next);

  

  }

  

  function pluck(uint256 tokenId,string memory keyPrefix,string[]memory sourceArray)internal view returns(string memory){

  

  uint256 rand=random(string(abi.encodePacked(keyPrefix,toString(tokenId))));

  

  string memory output=sourceArray[rand%sourceArray.length];

  

  uint256 greatness=rand%21;

  

  if(greatness>14){

  

  output=string(abi.encodePacked(output,"",suffixes[rand%suffixes.length]));

  

  }

  

  if(greatness>=19){

  

  string[2]memory name;

  

  name[0]=namePrefixes[rand%namePrefixes.length];

  

  name[1]=nameSuffixes[rand%nameSuffixes.length];

  

  if(greatness==19){

  

  output=string(abi.encodePacked('"',name[0],'',name[1],'"',output));

  

  }else{

  

  output=string(abi.encodePacked('"',name[0],'',name[1],'"',output,"+1"));

  

  }

  

  }

  

  return output;

  

  }


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

相關文章