Ethereumのlockdropを自力で実装する、substrateのink!で試す前に
Substrateでlockdropを実装してみようと思ったが・・・
- 自信がないので、まずはEthereumで試してからにしようと思った
- solidityで実装出来てから、substrateのink!でやろうと思った
実現すること
実装してみた
- 自力で実装しました。
- 他の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で
- やってみます!
実装してみた
- 自力で実装しました。
- 他の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で
- やってみます!
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で
- やってみます!
Author And Source
この問題について(Ethereumのlockdropを自力で実装する、substrateのink!で試す前に), 我々は、より多くの情報をここで見つけました https://qiita.com/realtakahashi/items/b9e46af9b03582c2d448著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .