发红包的合约&银行合约

本文介绍两个基于Solidity的智能合约案例:发红包合约与银行合约。发红包合约实现创建、抢夺及退还红包的功能;银行合约则支持存款、取款和转账等功能,并确保所有操作符合资金管理规定。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

发红包的合约
在这里插入图片描述
案例分析:
在这里插入图片描述

pragma solidity ^0.6.1;

contract redpacket_demo{
    address payable public  tuhao;
    uint256 public rcount; // 红包数量,因为抢一个少一个,所以要记录
    uint public ave;
    mapping(address => bool) isStake;
    //1.fa hong bao
    constructor(uint256 count) public payable{
        require(msg.value > 0, "msg.value must >0");
        require(count > 0, "count must > 0");
        ave = msg.value/count;
        rcount = count;
        tuhao = msg.sender;
    }
    //2.qiang hong bao
    function stakeMoney() public payable {
        require(!isStake[msg.sender],"msg.sender must not stake");
        require(rcount > 0, "rcount must >0");
        require(getBalance() > 0, "getBalance() must > 0");
        uint256 randnum = uint256 (keccak256(abi.encode(msg.sender,tuhao,now,rcount)))%100;
        // msg.sender.transfer(randnum * getBalance()/ 100); //先乘后除,因为solidity不支持小数
        msg.sender.transfer(ave); //平均分配红包
        rcount --;
        isStake[msg.sender] = true;
    }
    //3.tuihui
    function kill() public payable{
        selfdestruct(tuhao);// 钱退回给土豪
    }
    function getBalance() public view returns(uint256){
        // 红包余额
        return address(this).balance;
    }
}

二、银行合约
包括存款,取款,转账,银行总账统计等业务。

pragma solidity ^0.6.1;

contract bank_demo{
    mapping(address => uint256) balances;// user's balance
    string public bankName;
    uint256 totalAmount; //总存款数
    constructor(string memory name) public {
        bankName = name;
        totalAmount = 0;
    }
    //存钱
    function deposit(uint256 amount) external payable{
        require(amount > 0, "amount must >0");
        require(msg.value == amount, "amount must equal msg.value");
        balances[msg.sender] += amount;
        totalAmount += amount;
        require(totalAmount == address(this).balance,"bank's balance is wrong"); // 统计的帐必须正确
    }

    //取钱
    function withdraw(uint256 amount) external payable{
        require(amount > 0, "amount must >0");
        require(balances[msg.sender]>=amount, "balance must enough!");
        msg.sender.transfer(amount);
        balances[msg.sender] -= amount;
        totalAmount -= amount;
        require(totalAmount == address(this).balance,"bank's balance is wrong");
    }

    // 转账给某人,transfer A->B(100), 
    // A=A-100; B = B+100;
    function transfer(address to, uint256 amount) external{
        require(amount > 0, "amount must > 0");
        require(balances[msg.sender] >= amount, "balance must enought!");
        balances[msg.sender] -= amount;
        balances[to] += amount;
        require(totalAmount == address(this).balance,"bank's balance is wrong");
    }

    function getBalance()external view returns(uint256){
        return balances[msg.sender];
    }

    function getTotalAmount() external view returns(uint256,uint256){
        return(totalAmount, address(this).balance);
    }
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

前端段

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值