NFT鏈遊智慧合約流動性挖礦系統APP開發原始碼解析
NFT鏈遊智慧合約如何實現在程式碼當中展示,NFT鏈遊的玩法與邏輯個方面的細節落實到位。
以下是一個NFT鏈遊智慧合約流動性挖礦的程式設計程式碼示例,用Solidity語言編寫。
scssCopy codepragma solidity ^0.8.0; interface IERC20 { function transferFrom(address sender, address recipient, uint256 amount) external returns (bool); function balanceOf(address account) external view returns (uint256); function approve(address spender, uint256 amount) external returns (bool); function transfer(address recipient, uint256 amount) external returns (bool); } interface INFT { function transferFrom(address from, address to, uint256 tokenId) external; function balanceOf(address owner) external view returns (uint256); function approve(address to, uint256 tokenId) external; } contract NFTLPStaking { struct UserInfo { uint256 amount; uint256 rewardDebt; } struct PoolInfo { IERC20 lpToken; INFT nftToken; uint256 nftId; uint256 nftRate; uint256 lastRewardBlock; uint256 accRewardPerShare; } PoolInfo[] public poolInfo; mapping (uint256 => mapping (address => UserInfo)) public userInfo; IERC20 public rewardToken; uint256 public rewardPerBlock; constructor( IERC20 _rewardToken, uint256 _rewardPerBlock ) public { rewardToken = _rewardToken; rewardPerBlock = _rewardPerBlock; } function addPool( IERC20 _lpToken, INFT _nftToken, uint256 _nftId, uint256 _nftRate, bool _withUpdate ) public { if (_withUpdate) { massUpdatePools(); } poolInfo.push(PoolInfo({ lpToken: _lpToken, nftToken: _nftToken, nftId: _nftId, nftRate: _nftRate, lastRewardBlock: block.number, accRewardPerShare: 0 })); } function updatePool(uint256 _pid) public { PoolInfo storage pool = poolInfo[_pid]; if (block.number <= pool.lastRewardBlock) { return; } uint256 lpSupply = pool.lpToken.balanceOf(address(this)); if (lpSupply == 0) { pool.lastRewardBlock = block.number; return; } uint256 blocks = block.number - pool.lastRewardBlock; uint256 reward = blocks * rewardPerBlock; pool.accRewardPerShare += reward * 1e12 / lpSupply; pool.lastRewardBlock = block.number; } function massUpdatePools() public { uint256 length = poolInfo.length; for (uint256 pid = 0; pid < length; ++pid) { updatePool(pid); } } function deposit(uint256 _pid, uint256 _amount) public { PoolInfo storage pool = poolInfo[_pid]; UserInfo storage user = userInfo[_pid][msg.sender]; updatePool(_pid); if (user.amount > 0) { uint256 pending = user.amount * pool.accRewardPerShare / 1e12 - user.rewardDebt; rewardToken.transfer(msg.sender, pending); } if (_amount > 0) { pool.lpToken.transferFrom(msg.sender, address(this), _amount); user.amount += _amount; pool.nftToken.transferFrom(msg.sender, address(this), pool.nftId);
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69982110/viewspace-2940209/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- DAPP智慧合約LP質押流動性挖礦系統原始碼開發解析APP原始碼
- Dapp/Defi智慧合約質押流動性挖礦系統技術開發(原始碼解析)APP原始碼
- WBID/DeFi智慧合約流動性挖礦系統開發(需求及原始碼分析)原始碼
- IPP流動性質押挖礦系統開發智慧合約
- DAPP智慧合約流動性質押挖礦系統模式開發/DEFI/DAPP/NFT/LPAPP模式
- 代幣合約流動性質押挖礦開發原始碼版丨代幣合約流動性質押挖礦系統開發(成熟方案)原始碼
- CeresDAO智慧合約流動性挖礦系統制度開發及程式碼示例
- BNB鏈合約代幣流動性挖礦系統開發|BNB鏈部署
- PAXG節點質押挖礦系統開發/dapp智慧合約開發/流動性挖礦/詳細方案/原始碼功能APP原始碼
- 智慧合約及DAPP鏈上合約流動性挖礦分紅系統開發技術方案APP
- dapp/defi智慧合約流動性LP質押挖礦分紅系統開發方案原始碼APP原始碼
- 代幣智慧合約流動性質押挖礦開發穩定版丨代幣智慧合約流動性質押挖礦系統開發方案
- 代幣智慧合約質押流動性挖礦分紅開發丨代幣智慧合約質押流動性挖礦分紅系統開發
- WBID(智慧合約)流動性質押挖礦系統開發DAPP丨DeFi丨LP丨NFTAPP
- DAPP智慧合約鏈上質押挖礦模式系統開發丨公鏈挖礦系統開發原始碼搭建APP模式原始碼
- Ptahdao智慧合約的流動性質押挖礦系統功能開發
- DAO質押分紅智慧合約流動性挖礦系統開發
- 智慧合約代幣流動性挖礦系統開發功能分析
- DeFi流動性挖礦系統開發(原理詳解)| DeFi流動性挖礦系統開發原始碼示例原始碼
- Matic馬蹄鏈DAPP智慧合約流動性質押挖礦系統開發詳細技術及原始碼APP原始碼
- 區塊鏈合約代幣流動性挖礦系統開發模式方案區塊鏈模式
- BNB鏈合約代幣流動性挖礦系統開發(成熟技術)
- LP流動性挖礦智慧合約技術開發
- 智慧合約Tron波場鏈流動性質押挖礦系統模式開發詳情模式
- (NFT+DEFI)LP流動性挖礦邏輯系統開發(原始碼部署)原始碼
- DAPP 智慧合約NFT鏈上質押挖礦系統開發詳情APP
- DAPP智慧合約NFT鏈上質押挖礦系統開發搭建方案APP
- DEFI/DAPP/NFT/LP智慧合約流動性質押挖礦系統程式設計開發設計APP程式設計
- IDO雙幣流動性挖礦智慧合約開發流程丨智慧合約系統開發案例詳情
- 智慧合約Ptahdao流動性質押挖礦系統開發詳情分析
- IDO/Defi智慧合約流動性挖礦系統設計開發模型方案模型
- Defi+NFT質押流動性挖礦系統開發/LP質押挖礦功能開發解析
- 馬蹄鏈defi流動性挖礦系統合約開發技術及程式碼示例
- DAO生態鏈(NFT+DEFI)LP流動性挖礦邏輯系統開發(原始碼部署)原始碼
- LP流動性質押挖礦系統開發流程解析丨LP流動性質押挖礦開發成品原始碼功能原始碼
- DApp智慧合約錢包質押流動性挖礦系統技術開發詳情解析APP
- Defi智慧合約/LP質押流動性挖礦系統功能開發技術解析/DAPP/DefiAPP
- 深入分析智慧合約DAPP代幣合約流動性質押挖礦分紅系統開發(案例開發及原始碼)APP原始碼