Solidity语法基础学习

九、实战项目(一):

学以致用

UP主捐款合约

·合约要求:

  ·建立时,需将合约的建立者设定成owner(constructor,msg.sender)

  ·需记录每个观众的捐款总额(mapping)

  ·每次收到捐款时,需触发捐款事件:(event)

    ·列出捐款者、捐助金额(indexed)

  ·提供函数可以查询观众的捐款金额(returns)

  ·提供函数可以查询观众的VIP等级(string,if)

  ·没捐过款→”None”

  ·> 0ETH→”N”

  ·> 1ETH→”R”

  ·> 5ETH→”SR”

  ·>10ETH→”UR”

·提供函数让UP主可以提领金额,且触发提领事件(payable,address.balance,transfer)

  ·列出提款者、提领金额

Example:UP主捐款合约

//SPDX-License-Identifier:MIT
pragma solidity ^0.8.17; contract Donation {
address public owner;
//将捐款的每一个人对应到捐款数额
mapping(address => uint256) donationList; //宣告一个事件,谁捐了,捐了多少钱
event Donate(address indexed sender, uint256 value);
//提领事件,提领者,提领了多少钱
event Withdraw(address indexed owner, uint256 value); //只有拥有者可以提领
modifier onlyOwner() {
require(msg.sender == owner,"Only owner can access this function");
_;
} constructor() {
//将合约的拥有者设定为建立合约的人
owner = msg.sender;
} //收受捐款的函数
function donate() public payable {
donationList[msg.sender] += msg.value;
emit Donate(msg.sender, msg.value);
} //查询捐款总金额
function getHistory() public view returns (uint256) {
return donationList[msg.sender];
} //查询VIP等级
function getRank() public view returns(string memory) {
//这里if判断要从范围大的条件到范围小的条件,否则满足小条件的会导致全部回传N
if (donationList[msg.sender] > 10 ether) {
return "UR";
} else if (donationList[msg.sender] > 5 ether) {
return "SR";
} else if (donationList[msg.sender] > 1 ether) {
return "R";
} else if (donationList[msg.sender] > 0) {
return "N";
} else {
return "None";
}
} //提领余额
function withdraw() onlyOwner public {
address payable receiver = payable(owner);
uint256 value = address(this).balance;
receiver.transfer(address(this).balance);
emit Withdraw(receiver, value);
}
}

区块链特辑——solidity语言基础(五)的更多相关文章

  1. 区块链特辑——solidity语言基础(三)

    Solidity语法基础学习 五.映射类型: 映射型态 Mapping Type 映射钥匙Key → 真实资料 Value mapping(KeyType → ValueType) VariableN ...

  2. 区块链特辑——solidity语言基础(六)

    Solidity语法基础学习 十.实战项目(二): 1.实战准备: ERC20代币接口 ERC20 Token Interface接口 Interface IName {--} ·关键字:interf ...

  3. 区块链特辑——solidity语言基础(七)

    Solidity语法基础学习 十.实战项目(二): 3.项目实操: ERC20 代币实战 ①转账篇 总发行量函数 totalSupply() return(uint256) ·回传代币的发行总量 ·使 ...

  4. 比原链CTO James | Go语言成为区块链主流开发语言的四点理由

    11月24日,比原链CTO James参加了Go中国举办的Gopher Meetup杭州站活动,与来自阿里.网易的技术专家带来Kubernetes.区块链.日志采集.云原生等话题的分享.James向大 ...

  5. Solidity语言基础 和 Etherum ERC20合约基础

    1. 类型只能从第一次赋值中推断出来,因此以下代码中的循环是无限的,  小. for (var i = 0; i < 2000; i++) { ... } --- Solidity Types ...

  6. C语言基础五 数组

    数组跟变量的区别? 数组是可以在内存中连续存储多个元素的结构,所有元素必须属于相同类型. 格式:元素类型 数组名[元素个数]: 数组的特点: 只能存放单一元素的数据,里面存放的数据成为元素. 数组的声 ...

  7. Go语言基础五:引用类型-切片和映射

    切片 Go的数组长度不可以改变,在某些特定的场景中就不太适用了.对于这种情况Go语言提供了一种由数组建立的.更加灵活方便且功能强大的包装(Wapper),也就是切片.与数组相比切片的长度不是固定的,可 ...

  8. python自动化--语言基础五面向对象、迭代器、range和切片的区分

    面向对象 一.面向对象简单介绍: class Test(): #类的定义 car = "buick" #类变量,定义在类里方法外,可被对象直接调用,具有全局效果 def __ini ...

  9. C语言基础五 数组的应用

    .根据用户输入的10人成绩并将其保存到数组中,求最高成绩,最低成绩和平均成绩 int scoure[10];//存储10个数据的数组 int i; int sum;//总成绩 int max,min, ...

  10. 001/Go语言构建区块链(mooc)

    1.区块链发展与现状 视频地址:https://www.imooc.com/video/17452 注意: 比特币与以太坊最大的区别在于: 以太坊引入了对图灵完美智能合约的支持,人们可以将任何业务逻辑 ...

随机推荐

  1. VSTO踩坑记录(1)- 从零开始开发outlook插件

    概述 vsto是微软提供的一种开发office插件的一种技术,现在看来有点落后了,不过项目需要的情况下,总不能跟领导说这活干不了吧?附上官方文档 安装好必备的开发环境,我用的是vs2022,在安装程序 ...

  2. mac sublime text3-快捷键

    cmd+n 新建页面 cmd+数字键 切换到对应页面 cmd+p 搜索跳转到对应页 cmd+w 关闭页面 cmd+j 合并一行 cmd+d 选中当前单词,继续敲可以选中多个 cmd+l 选中当前行 c ...

  3. biancheng-Spring MVC-HandlerMapping

    一.HandlerMapping 作用是根据当前请求的找到对应的 Handler,并将 Handler(执行程序)与一堆 HandlerInterceptor(拦截器)封装到 HandlerExecu ...

  4. ASP.NET Core 快速轻量级的浏览器检测和设备检测库

    在 .NET Framework 4.7 中那样,通过 HttpContext.Request 的 Browser 属性轻松获取发起 HTTP 请求的浏览器信息,ASP.NET Core 并未直接提供 ...

  5. 初识VPC网络的能力

    本文分享自天翼云开发者社区<初识VPC网络的能力>,作者:布小匠 VPC网络的来源 在云计算早期是没有VPC的概念的,有的是虚拟网络和虚拟路由器的功能.虚拟网络的作用是为用户提供一个虚拟的 ...

  6. [Ynoi2015] 我回来了 题解

    \(NOIP\) 考前祈福. 实际上,每种伤害 \(d\) 打出的亵渎次数可以转化为: \[1+\max\limits_{i=0}^{\lceil\frac{n}{d}\rceil}(i[\sum\l ...

  7. IGM机器人K5齿轮箱维修故障详情介绍

    在长期.高强度的工作中,IGM机器人K5齿轮箱难免会出现故障,需要联系子锐机器人维修进行及时的维修和保养. 一.齿轮磨损 齿轮磨损是IGM机器人K5齿轮箱最常见的故障之一.长时间.高速运转以及负载的频 ...

  8. KUKA库卡机器人常见故障都有哪些解决办法

    如何解决机器人线路板维修查不出故障 在进行机器人电路板维修工作时,有时会遇到查不出故障原因的情况,对于这种故障维修业界称之为疑难杂症,这时维修人员该如何应对呢?在这里向朋友们介绍机器人维修一些解决的方 ...

  9. Linux - Linux终端里的二维码

    qrencode:Linux 操作系统中生成二维码,点此进入下载页面 1.将tar包上传到 Linux 服务器上并解压:tar -zxvf qrencode-x.x.x.tar.gz 2.在 .bas ...

  10. Jsmoke-一款强大的js检测工具,浏览器部署即用,使用方便且高效

    Jsmoke by Yn8rt ​ 该插件由 Yn8rt师傅 开发,插件可以理解为主动版的hae和apifinder,因为其中的大多数规则我都引用了,当你认为当前页面,以及其调用的js文件存在敏感信息 ...