NFT質押分紅DAPP系統開發功能案例

caiayu1234發表於2023-04-07

基於區塊鏈的智慧合約包括事務處理和儲存的機制,以及一個完備的狀態機,用於接受和處理各種智慧合約;並且事務的儲存和狀態處理都在區塊鏈上完成。事務主要包含需要傳送的資料;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 transfer(address to,uint256 value)public returns(bool){

  

  //這裡的msg.sender是呼叫transfer方法的人

  

  _transfer(msg.sender,to,value);

  

  return true;

  

  }

  

  function _transfer(address from,address to,uint256 value)internal{

  

  require(to!=address(0));

  

  //注意:using SafeMath for uint256可以被繼承!

  

  _balances[from]=_balances[from].sub(value);

  

  _balances[to]=_balances[to].add(value);

  

  emit Transfer(from,to,value);

  

  }

  

  }


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

相關文章