[区块链&DAPP介绍 Day19] contract 案例1 - 抢红包

接下来几天会来模拟一下,实际合约的案例,来更深入了解一下 solidity 语法

首先我们先设定一个 case

情境

我们来实作发红包的功能,那发红包需要时做哪些功能呢?

  1. 发红包
  2. 抢红包
  3. 退还

那我们就看看下面的范例

// SPDX-License-Identifier: GPL-3.0
pragma solidity ^0.8.7;

contract redpacket {

    //定义此合约发红包的人
    address payable public rich;
    //定义要发几个红包
    uint public number;



    constructor(uint _number) payable  {
        rich = payable(msg.sender);
        number = _number;
    }

    //取得发红包的人身上余额
    function getBalance() public view returns (uint){
        return address(this).balance;
    }

    //抢红包
    function stakeMoney() public payable returns(bool){

        //红包数须大於0
        require(number>0);

        //取得余额需要大於0
        require(getBalance()>0);
        number --;

        //此方法是 random 100内的数字
        uint random = uint(keccak256(abi.encode(block.timestamp,msg.sender,"rich")))%100;
        uint balance = getBalance();
        address payable someone = payable(msg.sender);

        //把钱给抢到红包的人
        someone.transfer(balance * random/100);
        return true;

    }


    //合约销毁
    function kill() public{
        require(msg.sender == rich);
        透过此function 可以拿来销毁合约
        selfdestruct(rich);
    }
}

<<:  前端工程师也能开发全端网页:挑战 30 天用 React 加上 Firebase 打造社群网站|Day27 无限卷动读取文章列表

>>:  DAY12 如何使用样板

30. CSS 的 z-index & Stacking Context 的形成

Stacking Context 定义 Stacking Context是指对於HTML元素而言,有...

系统建模语言 SysML

SysML 是一个图形的系统建模语言,他跟上一篇一样是来自喔卖尬集团 (Object Managem...

Day.2 「欢迎来到网页这个世界!」 —— 认识网页架构

网页世界是由什麽组成? 上一篇有讲到网页三兄弟,其中有一个老大哥负责撑起这个世界,那就是 HTML...

[Day 30] Bug修好了 & 30天感想

经过了一天的奋斗,总算是把昨天做爆的LSTM修好了, 失败的可能原因可能为 资料未经过Normali...

Day 29 BERT

BERT 全名为 Bidirectional Encoder Representations Fro...