Web3時代のつよつよビジネスパーソンを目指すブログ

Web3という大きな波に会社員エンジニアはどう対峙すべきか。クリプト、NFT、DeFi、メタバース…多様な情報に触れ思考したことを発信します。どこにでもいる会社員だからこその、日々の気づき、ビジネスTipsも発信します。

宝くじ抽選スマートコントラクトを書いてみた!

こんにちは。

ちょっとした「宝くじ」で遊べる
スマートコントラクトを書いてみました。

Githubでページ公開しています。
https://yasuyasuonfire.github.io/lottery-react/


伝えたいことは、
・遊んでみてね!
・初心者でも講座の見よう見まねでできた
ということです。

↓画面はこうなっています。
f:id:EternalBlueBullet:20220307170044p:plain


さて、仕様はこんな感じです。

  • metamaskで、「Rinkeby Testnet Network」を選ぶと接続できます。
  • 賭けるETHの額を指定して送信します。
  • 抽選を待ちます。

以上です!

抽選は1日1回、私のブログ執筆時にぽちっと抽選して
いこうと思います。

さて、抽選ってどういう仕組みかというと、

  • 参加者の掛け金をスマートコントラクトがプールします
  • 管理者が抽選を実行すると、参加者のうち一人がランダムで選ばれます
  • 当選者にスマートコンタクトから送金されます


実にシンプルですね。
コードは以下のようになっています。

pragma solidity ^0.4.17;

contract Lottery {
    address public manager;
    address[] public players;
    
    function Lottery() public { //コンストラクタ
        manager = msg.sender; //deployした人がmanagerとなる
    }
    
    function enter() public payable { //宝くじへの参加に対応
        require(msg.value > .01 ether); //0.01ETH以下は受け付けない
        players.push(msg.sender);
    }
    
    function random() private view returns (uint) {
        return uint(keccak256(block.difficulty, now, players)); //ランダムな数を生成
    }
    
    function pickWinner() public restricted {
        uint index = random() % players.length;//ランダム数を参加者数で割った余り
        players[index].transfer(this.balance);//当選者に送金
        players = new address[](0);
    }
    
    modifier restricted() {
        require(msg.sender == manager); //managerだけ実行できるメソッド用
        _;
    }
    
    function getPlayers() public view returns (address[]) {
        return players;
    }
}   

Rinkeby Testnet NetworkにETHがない場合は、
↓などの配布サイトでGETできます。
https://faucets.chain.link/rinkeby


参考にしているのはUdemyの講義です。
英語講座なのですが、
字幕を出しながらこなしています。
www.udemy.com



solidity勉強中の人は、
触ってみて、コードも照らし合わせると、
理解が進むと思います。

Githubでのページ公開は、
以下のサイトを参考にしました。
githubでReact作成したWebアプリ・Webサービス公開 - Elsaの技術日記(徒然なるままに)
flutter で作成した Web アプリを GitHub Page 上にデプロイできない


※テストネットですので、
扱うETHには金銭的価値は
何もありません。

ブログに何か新しさをくっつけられないかな?
と日々思考しているのですが、
スマートコントラクトを使って、
ブログ閲覧と同時になにか
お遊び的にDappsを動かすみたいな
ことができればよいですね。

今回の宝くじは、本物のETHでやったら
賭博法にひっかかる・・。

占いのようなコンテンツは面白いけれど、
少なからずガス代はかかるのが悩ましいですね。
Polygonなら気にしない程度のガス代で済みそうですが。

試行錯誤していきます。

  • 再掲)テストネットETHの宝くじ

https://yasuyasuonfire.github.io/lottery-react/


メタマスクって何よ??
なんか面白そう!と思った方は、
Web3のスターターガイドを書いていますので、
ぜひご覧ください↓

(お知らせ)Web3を学ぶためのスターターガイド1万字を執筆しました。

Web3って言葉よく聞くし、気になるけど
何からやって良いか分からない・・
そんな人のため、ガイドとなる記事を
魂込めて作成しました。
一緒に勉強していきましょう。

eternalbluebullet.hatenablog.com

 

Web3を学ぶ上で避けて通れないのが
暗号資産(仮想通貨)。
口座を開設し、ビットコインが
上がった下がったと一喜一憂する
ところから、私も始めました。

 

上記の記事でも国内取引所の口座について
解説しています。
日本円と暗号資産を交換する入口として、
利用することになります。

ビットコインにイーサリアム、
DeFi, NFT・・概論を掴んだ後は、
実際にクリプトを少額から購入して
みることで、ぐっと知識が血肉になります。

 

1口座目にお薦めなのが
コインチェック
国内最大手であり、
圧倒的に情報量が多いという
安心感があります。

コインチェック で口座開設する★

コインチェック

 

際立った特徴はないものの、
バランスに優れるのがフォビジャパン

フォビジャパンで口座開設する★

フォビジャパン

 

NFTを買ってみたいなら、
JPYCを使った方法が最も簡単。
リンク先で紹介しています。

eternalbluebullet.hatenablog.com

 

Twitterで更新情報も発信しています。
Web3系の話を中心に、日々発信中です。

twitter.com