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

本文将介绍如何在以太坊智能合约中实现代币的空投。区块链以太坊世界中所谓空投(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

以太坊代币空投合约的实现相关推荐

  1. solidity开发以太坊代币智能合约

    智能合约开发是以太坊编程的核心之一,而代币是区块链应用的关键环节,下面我们来用solidity语言开发一个代币合约的实例,希望对大家有帮助. 以太坊的应用被称为去中心化应用(DApp),DApp的开发 ...

  2. 以太坊代币标准: ERC20、ERC223的介绍与比较

    代币(Token)是区块链中定义价值的方式,用于标定金融或数字资产.在以太坊上,代币使用相同的标准,这样代币之间的兑换和DAPP支持就会变得容易. 什么是ERC20标准 ERC-20 标准是在2015 ...

  3. 以太坊代币事件监控_以太坊:什么是ERC20标准?

    不以规矩,不能成方圆 许多人应该都听过 代码即法律(Code Is Law),因为程序写完了,无论执行多少次都会得到同样的结果,除非有外界因素的干扰.在多人协作的过程中一定是要按照一个标准来进行分工, ...

  4. android web3j 代币查询_wallet-eth 以太坊代币钱包 助记词 私钥 keystore 转账

    wallet-eth-android wallet-eth 以太坊代币钱包 助记词 私钥 keystore 转账(bip39.bip32.bip44.web3j) 生成钱包地址 // 生成钱包地址 W ...

  5. coldwallet java eth_wallet-eth 以太坊代币钱包 助记词 私钥 keystore 转账

    wallet-eth-android wallet-eth 以太坊代币钱包 助记词 私钥 keystore 转账(bip39.bip32.bip44.web3j) 生成钱包地址 // 生成钱包地址 W ...

  6. c# 以太坊代币_C代币

    c# 以太坊代币 Smallest units of programming language are called Tokens. These are building blocks of prog ...

  7. 2019011工作日志-关于代币空投合约的编写和js基于koa框架的整合

    1. 空投代币智能合约的编写 1.1测试代币的合约的编写 注:代币合约是基于openzeppelin-solidity库实现的,基于truffle框架,koa框架等 代币合约的版本是0.4.16 pr ...

  8. java 创建以太坊代币_以太坊 (五)编写智能合约-建立简易加密代币

    本篇文章,我们将写一个简易的加密代币的智能合约来给大家诠释加密代币的原理 启动 ganache-cli 打开终端,启动ganache-cli,相关环境在区块链学习日记(四)这篇文章里面已经有具体说明. ...

  9. 以太坊代币事件监控_以太坊程序员的常见误解

    最近,我偶然读到了一篇题为<程序员关于时区的误解>的文章,让我爆笑不已.这篇文章让我想到了程序员在其它方面的误解,如人名和时间,于是我开始寻找有没有关于以太坊的.奈何寻觅无果,我只得尽自己 ...

最新文章

  1. 皮一皮:论北方有多冷...
  2. myeclipse如何修改tomcat的timeout
  3. C++子类父类构造函数的关系
  4. Curl http_code 状态码
  5. 百度万亿流量的转发引擎BFE开源了!华为折叠屏曝光,采用传统翻盖式手机折叠方案;微软将关闭安卓iOS平台Cortana……...
  6. visual studio 判断dropdownlist选的是什么_测试:选一顶你觉得最漂亮的皇冠。测你长了张什么脸?我是发财脸...
  7. 内存陷阱 驯服C++中的野指针
  8. CMD常用命令大全(值得收藏)
  9. 华为综合实验——ISIS-BGP
  10. 微服务网关 gateway
  11. 9个前端常用的数据可视化库
  12. python复数类型的虚部通过什么表示_在python中复数怎么表示
  13. python-random模块详解
  14. 操作系统中的几种I/O控制方式
  15. matlab ifft函数实例,【 MATLAB 】信号处理工具箱之 ifft 简介及案例分析
  16. Java Web 网络商城案例演示十五 订单详情功能(提交订单支付界面)
  17. GEE用户贡献的数据列表
  18. 微信 IOS系统 安卓时间格式
  19. plc输出类型有哪些?
  20. IT运维服务外包管理的两种模式

热门文章

  1. Nginx负载均衡集群介绍
  2. “互联网+”的时代,易佳互联也随着时代步伐前进着
  3. Silverlight 预定义颜色速查表
  4. hdu 1724 Ellipse——辛普森积分
  5. 用Gogs在Windows上搭建Git服务
  6. Linux下修改MAC地址总结
  7. 06.SQLServer性能优化之---数据库级日记监控
  8. fragment切换事件
  9. 侠客X官方网站成立,第一个内测版本即将放出,敬请期待.
  10. 在页面中控制媒体流的起播点和播放长度