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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Stepn跑鞋GMT系統開發|NFT鏈遊Stepn跑鞋GMT開發技術
- 解析Promise解決非同步回撥
- 設計一款可擴充套件和基於windows系統的一鍵處理表格小工具思路
- 如何設計一個最簡化的推薦系統
- 泰山眾籌阿凡達系統開發模式邏輯
- DAPP字母幣質押挖礦系統開發部署
- FDF迴圈互助智慧合約系統DAPP開發技術方案
- 自己動手從零寫桌面作業系統GrapeOS系列教程——16.封裝列印字串函式
- 物聯網平臺為智慧工廠和數字車間按下“加速鍵”
- 易雲維提供上市公司三諾生物產業園區iFMCS智慧廠務監控系統專案案例
- 開發體育賽事比分直播系統公司方案商哪家好?我來告訴大家!
- windows 系統下 workerman 在同一個執行視窗中開啟多個 websocket 服務
- Luminar Neo for Mac,AI智慧影像編輯軟體
- Linux系統中o和a代表什麼?有何作用?
- 直播軟體搭建,uniapp 之使用 u-upload 元件來實現圖片上傳
- WineGometa紅酒鏈遊系統開發丨紅酒鏈遊智慧合約開發dapp詳情
- 紅酒鏈遊WineGometa系統模式開發原始碼詳情
- uni-app打包web專案(uni-app開發vue網頁應用)