代码之家  ›  专栏  ›  技术社区  ›  David Jay

如何在每月付款中自动添加滞纳金(solidity)

  •  0
  • David Jay  · 技术社区  · 2 年前

    我正在制定一个智能合约,允许用户支付Netflix、亚马逊等每月的订阅费。。。

    允许用户支付订阅费的功能运行良好,但我想添加一个附加功能,这样当用户错过每月付款时,他们应该支付的金额应该增加。

    我如何在下面的函数中实现它?

    你觉得付款怎么样?足够安全吗?

     struct Plan {
            address merchant;
            address token;
            uint amount;
            uint frequency;
          }
          struct Subscription {
            address subscriber;
            uint start;
            uint nextPayment;
          }
          mapping(uint => Plan) public plans;
          mapping(address => mapping(uint => Subscription)) public subscriptions;
        
        function pay(address subscriber, uint planId) external {
            Subscription storage subscription = subscriptions[subscriber][planId];
            Plan storage plan = plans[planId];
            require(
              subscription.subscriber != address(0), 
              'this subscription does not exist'
            );
            require(
              block.timestamp > subscription.nextPayment,
              'not due yet'
            );
       require(msg.value >= plan.monthlyPayment, "monthly payment not correct");
         
            emit PaymentSent(
              subscriber,
              plan.merchant, 
              plan.amount, 
              planId, 
              block.timestamp
            );
            subscription.nextPayment = subscription.nextPayment + 4 weeks;
          }
    
    0 回复  |  直到 2 年前
        1
  •  1
  •   Niccolò Fant    2 年前

    当用户调用 pay 功能,如果他超过了截止日期那么

    if(block.timestamp > subscription.nextPayment)

    你可以根据两者之间的差额来计算额外费用 block.timestamp subscription.nextPayment 因此,支付截止日期后的时间越长,差异越大,用户在基本金额之外必须支付的费用也越大。