大小公排双轨互助模式dapp系统开发智能合约代码分析

简介: 大小公排双轨互助模式dapp系统开发智能合约代码分析

transfer转帐函数,一个比较重要的功能,调用者可以将自己的余额转给其它帐户。

_transfer为private的具体实现函数。主要是作了一些必要的检查,然后从发起帐户扣减余额,再将余额加到接收帐户。最后发送了一个转帐事件,方便开发者监听转帐功能。这里的_beforeTokenTransfer和_afterTokenTransfer并没有实现具体功能,开发中可根据实现需要做一些功能实现。
allowance、approve主要是实现授权其它帐户可以使用自己的余额,并设定使用上限。相关的授权者存储在_allowances变量中。

function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
    address owner = msg.sender;
    _approve(owner, spender, _allowances[owner][spender] + addedValue);
    return true;
}

function decreaseAllowance(address spender, uint256 substractedValue) public virtual returns (bool) {
    address owner = msg.sender;
    uint256 currentAllowance = _allowances[owner][spender];
    require(currentAllowance >= substractedValue, "ERC20: decreased allowance below zero");
    unchecked {
        _approve(owner, spender, currentAllowance - substractedValue);
    }
    return true;
}

increaseAllowance、decreaseAllowance两个函数是对approve函数功能的加强,对授权额度进行增减,这两个函数关不是ERC20协议中的内容。只是作者在参考源码时觉得有用,就加入了这两个函数。
ransferFrom,_spendAllowance是在授权额度下,进行转帐的功能实现。

transferFrom函数的from参数是授权帐户,to是余额接受帐户,amount是转帐余额,该函数的功能是将from帐户的余额转移amount个数据至to用户帐户中,调用者必须是from帐户通过_approve对其进行过授权,并且还有剩余的授权额度。该函数与transfer的区别是,transfer只能转移出调用者自己的帐户余额。

_spendAllowance是在进行授权转帐时首先扣减授权额度,保证被授权都在授权额度范围内使用转帐功能。

相关文章
|
1月前
|
编解码 Linux Android开发
安卓手机投屏电脑端教程,手机投屏教程,可以手机和电脑互传文件。电脑管理手机文件和APP等操作
QtScrcpy是一款基于Scrcpy开发的跨平台安卓投屏工具,支持Windows、macOS、Linux系统。无需在手机安装应用,通过USB或Wi-Fi连接即可实现高清低延迟投屏,支持文件互传、屏幕录制、截图、多设备管理等功能,操作简便,适合开发者与普通用户使用。
425 47
|
22天前
|
SQL 人工智能 数据挖掘
Quick BI V6.0发布:让人人都能拥有的「超级数据分析师」到底强在哪?
阿里巴巴发布首个数据分析Agent“智能小Q”,集成问数、解读、报告生成与报表搭建能力,基于AI实现一句话获取数据洞察。Quick BI 6.0深度融合AI与BI,升级多源数据接入、自动化分析与协同办公,让企业人人拥有“超级数据分析师”。
|
4月前
|
存储 人工智能 安全
阿里云服务器热门配置2核4G与4核8G配置最新收费标准、活动价格及实例选择参考
阿里云服务器2核4G与4核8G配置是众多个人开发者、中小企业及初创企业选择云服务器配置时的热门配置。现在企业用户购买通用算力型u1实例2核4G5M带宽80G ESSD Entry云盘特惠价199元1年,个人用户则是531.79元1年起,4核8G配置价格目前通用算力型u1实例,4核8G活动价格955.58元1年起。本文将为大家解析这两款热门配置的实例规格、价格策略及适用场景,以供选择参考。
|
8月前
|
Ubuntu 网络协议
在Ubuntu 18.04服务器上配置双网口以接入互联网
总结一下,配置双网口在Ubuntu 18.04服务器就像一场冒险游戏,你小心翼翼地从查看网络布局开始,铺设新线路,最后得到了通往互联网的双重通道。祝你在网络世界的冒险旅程中更上一层楼!
344 11
|
10月前
|
存储 算法 JavaScript
【动态规划篇】股海擒龙诀:精准狙击股票买卖最佳时机
【动态规划篇】股海擒龙诀:精准狙击股票买卖最佳时机
|
存储 安全 Java
Java HashSet详解
`HashSet` 是 Java 中基于哈希表实现的 `Set` 接口集合,主要用于存储不重复元素,提供快速查找、插入和删除操作。它具有以下特点:不允许重复元素,元素无序,允许一个 `null` 元素,常用操作包括创建、添加、删除、检查元素及清空集合。由于其内部使用哈希表,基本操作的时间复杂度接近 O(1),性能高效。然而,`HashSet` 不保证元素顺序,也不是线程安全的,适用于需要快速访问和操作的场景。
537 10
|
小程序 UED 开发者
揭秘支付宝小程序成功之道:UI/UX设计原则与用户体验优化秘籍大公开!
【8月更文挑战第27天】支付宝小程序在移动互联网中扮演着重要角色,优秀的UI/UX设计能显著提升用户满意度。本文首先强调了设计的一致性、简洁性、易用性和响应性原则,确保用户获得顺畅体验。接着,介绍了最佳实践,包括利用支付宝设计组件库保持界面统一、优化加载速度、适应多设备显示、设置清晰导航以及重视用户反馈。最后,提供了一个简单示例展示如何应用支付宝设计组件。遵循这些指导原则,开发者能够构建既美观又实用的小程序。
561 0
|
弹性计算 固态存储 大数据
阿里云企业云服务器实例可选配置及适用场景汇总
本文介绍了阿里云企业级云服务器的主要实例规格及各自的适用场景、可选配置、最大基础带宽能力、最大网络收发包能力等信息,可供新手用户了解和选择适合自己的实例。
775 1
|
编译器 Linux
嵌入式 QT usb camera库驱动摄像头
嵌入式 QT usb camera库驱动摄像头