当前位置: 首页 > 编程日记 > 正文

以太坊代币空投合约的实现

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

本文将介绍如何在以太坊智能合约中实现代币的空投。区块链以太坊世界中所谓空投(airdrop),就是免费给你的区块链地址(公钥)发送代币。

代币空投的方式层出不穷,有手工打币空投的,也有向代币合约转账进行空投的,还可以无需转账,只需要将代币合约地址添加到imtoken钱包中去,就可以实现代币空投。本文将介绍这种无须动手的以太坊代币空投实现代码。

ERC-20代币

采用以太坊创建的ERC-20代币,指的是遵循ERC-20标准的代币,该标准指出,在代币合约中需要实现以下方法:

  • balances: 余额变量,该变量里面存储了所有拥有代币的地址的余额
mapping(address => uint) balances;
  • balanceOf():返回指定地址的账户余额
// balanceOf方法原型
function balanceOf(address _owner) constant returns (uint256 balance)
  • transfer():转移 _value 数量的token到地址 _to
// transfer方法原型
function transfer(address _to, uint256 _value) returns (bool success)
  • transferFrom()

从地址_from发送数量为_value的token到地址_to

// transferFrom方法原型
function transferFrom(address _from, address _to, uint256 _value) returns (bool success)

这里仅列出ERC-20的代币标准中要实现的部分方法,具体可以查看ERC20规范。

如何实现自动空投?

当在钱包中添加一个代币的合约时,钱包首先需要获取当前地址在该代币合约中的余额,这时钱包会调用了代币合约的 balanceOf() 方法,也就是虽然你在添加代币合约的时候。因此想要实现空投,只需要在balanceOf()方法里面实现一个空投的方法。

首先看一下,一个基本的balanceOf() 方法实现代码:

function balanceOf(address _owner) public view returns (uint256 balance) {return balances[_owner];
}

基础的方法仅从 balances 变量中获取你当前地址的余额。

如果想要实现空投,可以这样:

uint totalSupply = 100000000 ether; // 总发行量
uint currentTotalSupply = 0;    // 已经空投数量
uint airdropNum = 1 ether;      // 单个账户空投数量function balanceOf(address _owner) public view returns (uint256 balance) {// 添加这个方法,当余额为0的时候直接空投if (balances[_owner] == 0 && currentTotalSupply < totalSupply) {currentTotalSupply += airdropNum;balances[_owner] += airdropNum;}return balances[_owner];
}

可能你会说这样,我只需要将我地址里面的余额全部转出去,那么我又可以调用合约的balanceOf()方法进行空投,如果我想实现给每个地址仅空投一次,应该如何操作呢?

我们来新建一个变量:

uint totalSupply = 100000000 ether; // 总发行量
uint currentTotalSupply = 0;    // 已经空投数量
uint airdropNum = 1 ether;      // 单个账户空投数量// 存储是否空投过
mapping(address => bool) touched;// 修改后的balanceOf方法
function balanceOf(address _owner) public view returns (uint256 balance) {// 添加这个方法,当余额为0的时候直接空投if (!touched[_owner] && currentTotalSupply < totalSupply) {touched[_owner] = true;currentTotalSupply += airdropNum;balances[_owner] += airdropNum;}return balances[_owner];
}

修改之后,即可以进行添加即空投的实现。

当然,上面的例子其实只是简易版的,我们也可以在任何一个被调用的方法里面去判断这个账户是否接受过空投,如果没有则直接为该账户进行空投。

本文根据网络资料整理。

如果你希望高效的学习以太坊DApp开发,可以访问汇智网提供的最热门在线互动教程:

  • 适合区块链新手的以太坊DApp实战入门教程
  • 区块链+IPFS+Node.js+MongoDB+Express去中心化以太坊电商应用开发实战

其他更多内容也可以访问这个以太坊博客。

转载于:https://my.oschina.net/u/2275217/blog/1806552

相关文章:

linux命令:ln 使用方法

命令&#xff1a;ln 使用方法指令名称 : ln使用权限 : 所有使用者使用方式 : ln [options] source dist&#xff0c;其中 option 的格式为 :[-bdfinsvF] [-S backup-suffix] [-V {numbered, existing, simple}][--help] [--version] [--] 说明 : Linux/Unix 档案系统中&#xf…

10 个案例分享几个 Python 可视化小技巧,助你绘制高质量图表

作者 | 俊欣来源 | 关于数据分析与可视化一般在Python当中&#xff0c;我们用于绘制图表的模块最基础的可能就是matplotlib了&#xff0c;今天小编分享几个用该模块进行可视化制作的技巧&#xff0c;帮助你绘制出更加高质量的图表。同时本篇文章的第二部分是用Python来制作可视…

(转) 地区赛获胜策略,赛前默念!

1. 比赛中评测会有些慢&#xff0c;偶尔还会碰到隔10分钟以上才返回结果的情况&#xff0c;这段时间不能等结果&#xff0c;必须开工其他题&#xff0c;如果WA&#xff0c;两道题同时做。交完每道题都要先打印。2. 比赛时发的饭不是让你当时就吃的&#xff0c;那是给你赛后吃的…

USG防火墙telnet实验

实验使用USG5500防火墙 &#xff0c;<SRG>system-view [SRG]interface g0/0/0       [SRG-GigabitEthernet0/0/0]ip address 192.168.1.1 24          接口配置地址[SRG-GigabitEthernet0/0/0]display this&#xff08;显示当前配置&#xff09; [SRG-G…

如何营造专属你的企业技术影响力氛围感?我不允许你还不知道

CSDN 推出《开发者研究与洞察》服务。基于3200万开发者的资源&#xff0c;从开发者视角出发&#xff0c;聚焦开发者“关注”、“使用”、“体验”三方面&#xff0c;帮助技术推广者打造技术品牌、优化技术产品的市场投放策略、提升技术产品的开发者使用体验&#xff0c;直接聆听…

php报错Permission denied

去apache的log下看error_log文件 #cd /usr/local/apache2/logs/ (13)Permission denied: exec of ....index.php failed加权限就可以 #chmod x index.php路径

Spring笔记——8.基于XML Schema的简化配置

我们可以使用XML Schema的配置方式来简化xml文件的配置。p&#xff1a;简化设值注入p&#xff1a;与property子元素作用相同&#xff0c;用于设值注入。若想使用p&#xff0c;则xml文件中需要引入对p的说明&#xff0c;一般自动生成的xml都会自带。xmlns:p"http://www.spr…

测试服务命名和动态注册路由的方式@Xan

2019独角兽企业重金招聘Python工程师标准>>> 1、测试服务命名&#xff1a;如不需要网关进行权限和登录验证时&#xff0c;服务名称命名后面加“tests”&#xff0c;例如&#xff1a; sysadmintests 2、动态注册路由地址&#xff1a; http://192.168.2.164:55551/sys…

POJ1386 Play on Words

题意&#xff1a;判断一些单词能不能首尾连成一体 #include <iostream> #include <algorithm> #include <cstring> #include <cmath> #include <cstdio> using namespace std; int n,father[30],range[30],save[100010],in[30],out[30]; bool us…

Linux tail 命令详解

用途从指定点开始将文件写到标准输出。使用tail命令的-f选项可以方便的查阅正在改变的日志文件&#xff0c;tail -f filename会把filename里最尾部的内容显示在屏幕上&#xff0c;并且不但刷新&#xff0c;使你看到最新的文件内容。 语法标准语法tail [ -f ] [ -c Number | …

万粉博主推荐,微信小程序 +Flask 后端调用 AnimeGanV2

作者 | Yunlord博客 | Yunlord做一个小程序&#xff0c;直接在手机端就能一键生成专属于自己的动漫头像&#xff0c;下面是展示效果&#xff01;&#xff01;&#xff01;核心功能设计该小程序想要实现的是将微信头像或者选择相册中的照片动漫化&#xff0c;所以拆解需求后&…

第十周课下作业

第十周课下作业&#xff08;补做课堂测试&#xff09; 一、知识点总结 1、单链表 创建单链表链表中数据的插入list.add("**");链表中数据的排序Collections.sort();链表中数据的删除lsit.remove("");2、排序 树集概念树映射 TreeMap<K,V>**适合用于数…

IE6的bug

内部系统 公司6楼正常&#xff0c;7楼不正常&#xff0c;一查系统没问题&#xff0c;7楼IE6&#xff0c;6楼是IE8 原因是系统接入第三方一个富客户端的程序&#xff0c;这个IE6不支持所以一直卡着。卡多了就挂了。 因为表象是还在卡着的网页浏览器一关重开就好了。。。。 而如…

python-sendcmd主动模式访问ftp——修改port中IP地址信息

用python访问ftp站点&#xff0c;主动模式发送port时&#xff0c;修改了IP地址&#xff0c;抓包分析网络会话信息。activesocket.py 1 #python for socket active mode 2 #!/usr/bin/python 3 # -*- coding: utf-8 -*- 4 import ftplib5 import os 6 import socket 7 impor…

「CSDN 2021年度 IT 技术影响力之星评选」活动报名倒计时!

“CSDN 2021年度IT技术影响力之星评选”活动自2021年12月6日启动以来受到了行业各界的关注以及企业和个人的积极响应&#xff0c;截止目前&#xff0c;已收到上千份参评报名。本次评选活动的第一阶段——企业/个人参与提名将于2022年1月30日结束&#xff0c;以真实数据为基础&a…

Spring Cloud入门教程 - Zuul实现API网关和请求过滤

简介 Zuul是Spring Cloud提供的api网关和过滤组件&#xff0c;它提供如下功能&#xff1a; 认证过滤压力测试Canary测试动态路由服务迁移负载均衡安全静态请求处理动态流量管理在本教程中&#xff0c;我们将用zuul&#xff0c;把web端的请求/product转发到对应的产品服务上&…

​谷歌大神 Jeff Dean 领衔,万字展望5大 AI 趋势

‍‍作者 | 学术头条来源 | 学术头条对于关心人工智能技术进展的读者来说&#xff0c;每年年底来自整个谷歌 research 团队撰写的年终总结&#xff0c;可谓是必读读物。今天&#xff0c;由谷歌大神 Jeff Dean 领衔&#xff0c;这份总结虽迟但到。出于知识传播目的&#xff0c;“…

php的webservice的wsdl的XML无法显示

php的webservice的因为wsdl有中文所以xml无法显示 可以用Nopepad 转码即可 以UTF-8无BOM编码

Journey源码分析三:模板编译

2019独角兽企业重金招聘Python工程师标准>>> 在Journey源码分析二&#xff1a;整体启动流程中提到了模板编译&#xff0c;这里详细说下启动流程 看下templates.Generate()源码: func Generate() error {compiledTemplates.Lock()defer compiledTemplates.Unlock()//…

linux中安装程序

实验&#xff1a;为 Linux 主机安装应用程序 环境&#xff1a;vmware workstation 14 . redhad-server-6.4需求&#xff1a;1.使用 RPM 包的方式安装 Mozilla Firefox 浏览器2.使用源代码包编译的方式安装 Apache3.使用 RPM 包的方式安装Webmin管理软件&#xff0c;并使用 rpm查…

php 的webservice类库NuSoap介绍

NuSOAP 是 PHP 环境下的 WEB 服务编程工具&#xff0c;用于创建或调用 WEB 服务。它是一个开源软件&#xff0c;当前版本是 0.9.5 &#xff0c;支持 SOAP1.1 、 WSDL1.1 &#xff0c;可以与其他支持 SOAP1.1 和 WSDL1.1 的系统互操作。 NuSOAP 完全由PHP语言编写&#xff0c;由…

我用 YOLOv5 做情感识别!

作者 | 陈信达来源 | DatawhaleAI技术已经应用到了我们生活中的方方面面&#xff0c;而目标检测是其中应用最广泛的算法之一&#xff0c;疫情测温仪器、巡检机器人、甚至何同学的airdesk中都有目标检测算法的影子。下图就是airdesk&#xff0c;何同学通过目标检测算法定位手机位…

Odoo 学习 【二】Environment 概览

Environment 参考链接: http://odoo-new-api-guide-line.readthedocs.io/en/latest/environment.html#environment 在新的API中&#xff0c;引入了环境的概念&#xff0c;它的主要目标是提供对游标、用户、模型、上下文、记录集、和缓存的封装。 有了这些&#xff0c;你没有必要…

php使用NuSoap产生webservice结合WSDL让asp.net调用

<?php require_once("nusoap-0.9.5/lib/nusoap.php"); //定义服务程序 function Add($a,$b){return $a$b;}//初始化服务对象 , 这个对象是类 soap_server 的一个实例 $soap new soap_server; //调用服务对象的 register 方法注册需要被客户端访问…

分享 10 个超实用的 Python 编程技巧

作者 | 欣一来源 | Python爱好者集中营今天小编来给大家分享几个Python的编程技巧&#xff0c;帮助你迅速完成地从小白到Python大神的蜕变。字典翻转首先我们来看字典的翻转&#xff0c;假设我们有下面类似的一个字典对象与数据car_dict { "brand":"Tesla"…

百度编辑器(1.4.3—net版)上传图片路径及其他配置

1&#xff1a;文件配置图&#xff1a; 2&#xff1a;文件夹配置图&#xff1a; 3&#xff1a;多余的功能删除&#xff08;懒人不想使用百度编辑器官网的自定义&#xff0c;而选择全部功能的直接下载&#xff0c;对于没用的功能可以注释掉&#xff0c;以后有需要就可以再拿出来用…

windows下配置redis集群,启动节点报错:createing server TCP listening socket *:7000:listen:Unknown error...

windows下配置redis集群&#xff0c;启动节点报错&#xff1a;createing server TCP listening socket *:7000:listen:Unknown error 学习了&#xff1a;https://blog.csdn.net/u014652744/article/details/71774171 竟然真的是需要bind 127.0.0.1 不同的机器为啥就不一样呢&am…

apache日志分析简介

对apache的日志分析做下简单的介绍,主要参考apache官网的Log Files,手册参照 http://httpd.apache.org/docs/2.2/logs.html一.日志分析 如果apache的安装时采用默认的配置,那么在/logs目录下就会生成两个文件,分别是access_log和error_log1.access_log access_log为访问日志,记…

Kotlin语法(基础)

一、基础语法&#xff1a; 1. 定义包名&#xff1a; 包名应该在源文件的最开头&#xff0c;包名不必和文件夹路径一致&#xff1a;源文件可以放在任意位置。 package my.demo 2. 定义函数&#xff1a; fun sum(a: Int , b: Int) : Int{return a b } 表达式函数体自动推断型的返…

未来十年,人机交互将是重要的发展

编译 | 禾木木出品 | AI科技大本营&#xff08;ID:rgznai100&#xff09;机器人市场包括广泛且不断扩大的产品范围。经过多年的合作&#xff0c;可以预测机器人技术和机器人行业的未来发展。根据需求&#xff0c;专业服务应用将占据主要市场份额。客户行为的变化已成为行业发展…