质押挖矿就是指将代币质押在某个平台获取收益的过程。..一般都是质押 LP 代币,当然也有质押单币种的,LP 代币可以通过去中心化交易所获取,比如:在 mdexswap 中,你可以将 MDX 和 USDT 两种代币根据一定比例去提供流动性,这样你就能得到 MDX-USDT 这样的流动性代币,也就是 LP 代币。
质押合约功能说明:
明显的,该函数具有接收底层币功能(payable);
质押地址必须是账号地址,不能是合约地址;
需要合约质押功能已经开始,且在活动限定时间内;
剩余挖矿额度大于 0;
进行质押的底层币额度不能少于最小值, 质押后也不能超过限定的最大质押额度;
如果该用户之前没有质押过,则建立档案(createOrder),否则仅修改档案=;
主要数据结构代码分析
此次只分析一些主要的数据结构:
一个数组,用来存放添加进去的每个小池子。
//Info of each pool.
PoolInfo[]public poolInfo;
2
一个 mapping,用来存放每个池子对应的用户信息(池子 id=>用户地址=>用户信息)
//Info of each user that stakes LP tokens.
mapping(uint256=>mapping(address=>UserInfo))public userInfo;
1
2
UserInfo 结构体:
第一个字段 amount 存放的是某个用户拥有的某个池子的代币的总数量。
第二个字段 rewardDebt 我理解为不应该获取的奖励或者已获取的奖励(用户应该获取的奖励=用户分得的总奖励-用户不应该获取的奖励),不一定准确,大伙有更好的理解可以留言讨论下。
第三个字段 multLpRewardDebt 跟第二个字段是一个意思,只不过第二个字段是代表的本次质押挖矿,而这个字段是用来表示联合挖矿的,目前主网上的代码还没有联合挖矿,所以这一段不分析。