Skip to content

Instantly share code, notes, and snippets.

@hiroism007
Created October 29, 2021 22:57
Show Gist options
  • Select an option

  • Save hiroism007/86a44b7216d90a0302dae4be818a5b09 to your computer and use it in GitHub Desktop.

Select an option

Save hiroism007/86a44b7216d90a0302dae4be818a5b09 to your computer and use it in GitHub Desktop.

Revisions

  1. hiroism007 created this gist Oct 29, 2021.
    68 changes: 68 additions & 0 deletions Test.sol
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,68 @@
    pragma solidity ^0.5.1;
    contract a42LockDev {
    // 利用権
    struct Entitlement {
    uint256 startTime;
    uint256 endTime;
    }
    // アドレスごとの利用権のマッピング
    mapping (address => Entitlement) internal entitlements;
    // コントラクトの操作を行うアドレス
    address constant internal owner = 0x1d5f4EcC1eD0983781Bd8b242bE33ea6C25a9a2C;
    // 手数料/seconds
    uint256 public fee = 0.00001 ether;
    // 最低利用時間
    uint public minTime = 10 minutes;
    modifier onlyOwner() {
    require(msg.sender == owner);
    _;
    }
    // 利用権を購入するメソッド
    function buyEntitlement(address beneficiary, uint256 startTime, uint256 endTime)
    payable
    public
    {
    require(beneficiary != address(0));
    require(endTime > startTime);
    // 利用時間を計算 seconds
    uint256 time = endTime - startTime;
    require(time >= minTime);
    // 手数料を計算
    uint256 price = time * fee;
    // オーバーフロー対策
    // 本来は SafeMath を使うべき
    require(price / time == fee);
    require(msg.value >= price);
    Entitlement storage entitlement = entitlements[beneficiary];
    entitlement.startTime = startTime;
    entitlement.endTime = endTime;
    }
    // 利用権を確認するメソッド
    function checkEntitlement(address wallet)
    view
    public
    returns(bool)
    {
    if (entitlements[wallet].startTime > now) {
    return false;
    }
    if (entitlements[wallet].endTime < now) {
    return false;
    }
    return true;
    }
    // 手数料を更新するメソッド
    function updateFee(uint256 newFee)
    onlyOwner
    public
    {
    fee = newFee;
    }
    // 手数料を引き出すメソッド
    function withdraw(uint256 amount)
    onlyOwner
    public
    {
    msg.sender.transfer(amount);
    }
    }