LoginSignup
0
0

More than 3 years have passed since last update.

Ethereumのlockdropを自力で実装する、substrateのink!で試す前に

Last updated at Posted at 2020-05-23

Substrateでlockdropを実装してみようと思ったが・・・

  • 自信がないので、まずはEthereumで試してからにしようと思った
  • solidityで実装出来てから、substrateのink!でやろうと思った

実現すること

  • lockしてくれたEtherと同量のTokenをunlock時に発行する。
  • こんなデザインです。 design.jpg

実装してみた

  • 自力で実装しました。
  • 他のlockdropのソースは一切見ていないです。だからこそ、ダメな部分がありそうです。
pragma solidity ^0.4.23;

import "https://raw.githubusercontent.com/OpenZeppelin/openzeppelin-solidity/v1.6.0/contracts/token/ERC20/StandardToken.sol";
import "https://raw.githubusercontent.com/OpenZeppelin/openzeppelin-solidity/v1.6.0/contracts/ownership/Ownable.sol";

contract SEI is StandardToken,Ownable{
    string public name = "My Token v0.2";
    string public symbol = "My0.2";
    uint public decimals = 18;

    struct Pesonal_data{
        uint256 amount;
        uint term;
        uint256 locktime;
        uint256 tokenAmount;
    }

    uint256 public remaining_token = 0;

    mapping(address=>Pesonal_data) public memolized_data;

    constructor(uint _initial_supply) public {
        totalSupply_ = _initial_supply;
        remaining_token = _initial_supply;
    }

    function lockDrop(uint _term) public payable checkAmount {
        //Pesonal_data data = Pesonal_data(msg.value,_term,blocktime.add(_term days));
        Pesonal_data memory data = Pesonal_data(msg.value,_term,block.timestamp.add(5 minutes),msg.value);
        memolized_data[msg.sender] = data;

    }

    function unlockDrop() public checkTime {
        msg.sender.transfer(memolized_data[msg.sender].amount);
        balances[msg.sender] = memolized_data[msg.sender].tokenAmount;
        remaining_token = remaining_token - memolized_data[msg.sender].tokenAmount;
    }

    modifier checkTime(){
        require(memolized_data[msg.sender].locktime < block.timestamp);
        _;
    }

    modifier checkAmount(){
        require(msg.value > 0);
        _;
    }
}

動作確認

  • Rimixでこのソースをコンパイルして、Metamaskを使って、Ethereumのテストネットにデプロイします。
  • Tokenの初期発行量を決めて、コンストラクトを実行します。
  • 次に、lockdrop関数を動かします。※送信するEhterを忘れずに設定して下さい。
  • Contractが実行されてから、MetamaskのEtherの残高を見ると確かに減っています。
  • ※このソースはテスト用として5分のlockとしています。
  • 5分以内にunlockDropを実行しても動きません。
  • 5分後に実行すると、トークンを獲得出来て、lockしたEhterが戻ってきたことを確認出来ました。

次はSubstrateで

  • やってみます!
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0