【问题标题】:Calculate Interest For Mint Token计算薄荷代币的利息
【发布时间】:2021-08-05 17:56:51
【问题描述】:

我看到了这段代码,但我不明白他是如何计算利率的。此合约铸造代币作为利息并将其转移给存入合约的用户(根据持有时间计算)如果有人可以提供帮助,我将不胜感激? https://github.com/dappuniversity/dbank/blob/master/src/contracts/dBank.sol

//check user's hodl time
uint depositTime = block.timestamp - depositStart[msg.sender];


**//31668017 - interest(10% APY) per second for min. deposit amount (0.01 ETH), cuz:
//1e15(10% of 0.01 ETH) / 31577600 (seconds in 365.25 days)
//(etherBalanceOf[msg.sender] / 1e16) - calc. how much higher interest will be (based on deposit), e.g.:
//for min. deposit (0.01 ETH), (etherBalanceOf[msg.sender] / 1e16) = 1 (the same, 31668017/s)
//for deposit 0.02 ETH, (etherBalanceOf[msg.sender] / 1e16) = 2 (doubled, (2*31668017)/s)
uint interestPerSecond = 31668017 * (etherBalanceOf[msg.sender] / 1e16);
uint interest = interestPerSecond * depositTime;**


//send funds to user
msg.sender.transfer(etherBalanceOf[msg.sender]); //eth back to user
token.mint(msg.sender, interest); //interest to user

【问题讨论】:

    标签: token solidity


    【解决方案1】:
    1. depositTime 是距离上次存款的秒数。

    2. interestPerSecond是根据用户存入合约的当前ETH余额计算的

    3. interest 的数量是上述两者之间的简单乘法。


    例子:

    用户恰好在 30 天前(2,592,000 秒)存入 1 ETH。这使得

    1. depositTime == 2592000
    2. interestPerSecond == 31668017 * (etherBalanceOf[msg.sender] / 1e16) == 31668017 * (1000000000000000000 / 1e16) == 31668017 * 100 == 3166801700
    3. interest == interestPerSecond * depositTime == 2592000 * 3166801700 == 8208350006400000

    现在,链接合约导入另一个合约 - Token.sol,它导入 OpenZeppelin ERC20.sol

    导入的ERC20.sol 定义了 18 位小数。所以你需要考虑到小数点后 18 位,才能得到作为利息的代币总量。

    8208350006400000 / 1e18 == 0.00820835
    

    因此,如果您在 30 天前存入 1 ETH,您将获得 0.00820835 的代币作为利息。

    【讨论】:

      猜你喜欢
      • 2011-07-25
      • 2020-07-01
      • 1970-01-01
      • 2013-10-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-28
      • 1970-01-01
      相关资源
      最近更新 更多