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. WPF使用Microsoft.Toolkit.Mvvm作为Mvvm框架DryIoc作依赖注入

    背景 MVVMLight已多年未更新,Microsoft.Toolkit.Mvvm作为MVVMLight继任者,需要学习一下. Microsoft.Toolkit.Mvvm跟MVVMLight使用非常 ...

  2. 【量化读书笔记】【打开量化投资的黑箱】CH.05. 交易成本模型

    交易是有成本的,除非有足够的理由,否则便不应该进行交易. 交易的原因 增加盈利的期望值 降低亏损的期望值 对交易成本的估计 过低,会导致交易过于频繁,损失扩大. 过高,导致交易次数少,持仓时间过长. ...

  3. [LC735]行星碰撞

    题目描述 给定一个整数数组 asteroids,表示在同一行的行星.对于数组中的每一个元素,其绝对值表示行星的大小,正负表示行星的移动方向(正表示向右移动,负表示向左移动).每一颗行星以相同的速度移动 ...

  4. blast只保留一个最优结果

    使用blast比对时,只保留一个最优结果 代码: blastn -db nt.blast.db -query seq.fa -out blast.nt.result -evalue 1e-5 -out ...

  5. 【译】在分析器中使用 Meter Histogram(直方图)解锁见解

    您是否正在与应用程序中的性能瓶颈作斗争?不要再观望了!Visual Studio 2022 在其性能分析套件中引入了 Meter Histogram(直方图)功能,为您提供了前所未有的分析和可视化直方 ...

  6. IDEA神器插件-40款

    IDEA 插件安装 步骤 IDEA里面,选择打开 File --> Settings --> Plugins 在Plugins里面, 可以搜索需要的插件 (下面的标题),然后安装 如下图: ...

  7. 天翼云重磅升级边缘WAF能力,助力企业高效应对Web安全威胁!

    "2022年,网络高危漏洞数量同比增长了13%:Q2遭受攻击的API数量月均超过了25万:物联网的普及大大降低了DDoS的攻击成本,大流量攻击指数显著提升:恶意Bot流量仍在持续增长,202 ...

  8. 全网最简单DeepSeek-R1本地部署教程

    1.安装ollama 打开ollama网址:https://ollama.com/ 选择你电脑的系统进行下载 我的电脑是windows的就点击windows然后点击下载即可 下载完毕后双击打开下载的. ...

  9. HT-014 Div3 跳棋 题解 [ 黄 ] [ 并查集 ] [ 链表 ]

    分析 依旧是一个连通块题. 观察题面不难发现两个重要性质: 一个跳棋只能以它旁边的两个跳棋为中点跳跃,且满足跳跃路线中 除中点以外没有其它跳棋阻挡. 只有我们的跳棋可以移动. 跳棋的操作具有可逆性/对 ...

  10. 开源EFCore 对比实体与实际数据库结构的工具-GZY.EFCoreCompare

    前言 GZY.EFCoreCompare 是一个用于 对比数据库结构和 EF Core 代码中的 DbContext 的库. 它基于 EF Core 的 Scaffolding 机制,生成 Datab ...