发红包的合约
案例分析:
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);
}
}