以太坊--众筹ICO实现
github首页:区块链学习有用链接和25本区块链书籍可免费阅读
- 地址:https://github.com/cancerts/study-blockchain-referrence 点击这
第三节 我是实现了token的一些高级功能,如增发,冻结,撤销等,这一小节我就来实现一个众筹的项目ICO,我在学习solidity的时候好像也看见几个合约的例子,其中一个就是众筹的例子,好久了,我不记得了,大家可以去官网下载solidity去看一下,其中就有一个,今天呢,用自己的规则来实现,要完成一个众筹需要完成以下的内容:
众筹就是在约定的时间,完成约定的目标金额
第一步:设定众筹目标
众筹的目标金额,时间,兑换的价格,以及受益人
contract ico is owner{uint public fundingGoal;uint public deadline ;uint public price;token public tokenReward;address public beneficiary;constructor(uint fundingGoalInEthers,uint durationInMinutes,uint costOfEachToken,address addressOfToken)public{fundingGoal=fundingGoalInEthers*1 ether;deadline=now + durationInMinutes* 1 minutes;price=costOfEachToken* 1 ether;tokenReward=token(addressOfToken);beneficiary=msg.sender;}
}
第二步: 实现以太和代币的兑换
我们知道,我们众筹是通过代币来完成的,但是,代币是没有价值的,只是作为一个交换的媒介
function() public payable{require(now<deadline);uint amount=msg.value;balanceOf[msg.sender]+=amount;fundAmount+=amount;uint tokenAmount=0;if(amount==0){tokenAmount=10;}else{tokenAmount=amount/price;}tokenReward.transfer(msg.sender,tokenAmount);emit FundingTransfer(msg.sender,amount);}
第三步:受益人提款或是投资人退款
当目标完成,大家都开心,齐了融融,万一达不到,也不至于去跳海把,好吧,开玩笑,这就是合约的魅力之处在于,没有达到预定的值,自动原路返回你投的钱
function checkGoalReached()public afterDeadline{if(fundAmount>=fundingGoal){emit CheckGoal(true);} }function withdramal()public afterDeadline{if(fundAmount>=fundingGoal){if(beneficiary==msg.sender){beneficiary.transfer(fundAmount);}}else{uint amount=balanceOf[msg.sender];if(amount>0){msg.sender.transfer(amount);balanceOf[msg.sender]=0;}}}
最主要的就是要实现以上的这三步,当然还有一些为了安全和健壮做的一些添加和代码的修改
下面将完整代码给出来,大家作为一参考
pragma solidity ^0.4.20;import './owner.sol';
//===========
//转账接口
//==========
interface token{function transfer(address _to,uint amount) external ;
}
//=====================================================
//ico合约,继承token的owner,另外定义一个账本保存信息和两个事件输出显示众筹实现输出信息
//=====================================================
contract ico is owner{uint public fundingGoal;uint public deadline ;uint public price;uint public fundAmount;token public tokenReward;address public beneficiary;mapping(address=>uint )public balanceOf;event FundingTransfer(address backer ,uint amount);event CheckGoal(bool success);//===========================================================================//构造函数,定义了众筹的目标,截止时间,每个代币的价格,还有就是投资人的收益哦//===========================================================================constructor(uint fundingGoalInEthers,uint durationInMinutes,uint costOfEachToken,address addressOfToken){fundingGoal=fundingGoalInEthers*1 ether;deadline=now + durationInMinutes* 1 minutes;price=costOfEachToken* 1 ether;tokenReward=token(addressOfToken);beneficiary=msg.sender;}//============================//代币所有者拥有设定价格的权限//============================function setPrice(uint costOfEachToken )public onlyOwner{price=costOfEachToken* 1 ether;}//===========================//实现代币和以太币的自动兑换//===========================function() public payable{require(now<deadline);uint amount=msg.value;balanceOf[msg.sender]+=amount;fundAmount+=amount;uint tokenAmount=0;if(amount==0){tokenAmount=10;}else{tokenAmount=amount/price;}tokenReward.transfer(msg.sender,tokenAmount);emit FundingTransfer(msg.sender,amount);}//======//构造器//======modifier afterDeadline(){require(now >=deadline);_;}//============================//达到目标值输出事件,成功true//============================function checkGoalReached()public afterDeadline{if(fundAmount>=fundingGoal){emit CheckGoal(true);} }//====================================================//到达预定时间没有达到目标筹集值,将筹集到的金额返回//====================================================function withdramal()public afterDeadline{if(fundAmount>=fundingGoal){if(beneficiary==msg.sender){beneficiary.transfer(fundAmount);}}else{uint amount=balanceOf[msg.sender];if(amount>0){msg.sender.transfer(amount);balanceOf[msg.sender]=0;}}}
}
哈哈,皮皮,记录一下今天中国和韩国的争夺中夺冠了,第一枚金牌就是那么的洋气,真的佩服,鲜花,掌声送给社会人
以太坊--众筹ICO实现相关推荐
- 众筹系统源码 java_以太坊 众筹系统
以太坊众筹系统 众筹系统是基于以太坊solidity书写智能合约,并用基于web3j 开发web应用. 项目地址:https://github.com/niyuelin1990/CrowdFundin ...
- NO.15 不得不说的以太坊跟ICO
随着以太坊的出现,区块链进入了2.0时代,以太坊是个太神奇的东西,没有天才的想法.高超的技术以及黑客的精神是无法如此成功的.它实现了区块链项目的快速开发,快速实施. 以太坊这个开发平台本身发行了一种币 ...
- Pantera Capital创始合伙人:最大遗憾是没有投资以太坊ICO
Pantera Capital创始合伙人Steven Waterhouse近日表示,作为一名风险投资人,他最大的遗憾是没有投资以太坊的ICO.目前,他是去中心化V/PN服务公司Orchid(兰花协议) ...
- 以太坊简史:因暴雪削弱术士而诞生的千亿美元巨兽
撰文:Eric,Foresight News 2013 年 11 月,在比特币创世区块诞生近 5 年之后,以太坊白皮书问世. 2013 年的 Vitalik Buterin 「这份初稿是我对我们称之为 ...
- 避不过裁员大潮,有钱任性也独木难支!以太坊联合创始人Joe Lubin的分布式梦,要破了吗?
Joe Lubin 不仅是以太坊联合创始人.区块链风险投资公司 Consensys 创始人,他也是一个「有钱且任性」的亿万富翁.但你绝对不会想到,5年前的他,还在为帮助牙买加模特成功「混入音乐界」忙得 ...
- 基于以太坊发布属于自己的数字货币(代币)完整版
https://blog.csdn.net/JAVA_HHHH/article/details/79771752 本文单纯从技术角度详细介绍如何基于以太坊ERC20创建代币的流程(此案例是部署的eth ...
- 独家!天才少年 Vitalik:“中国开发者应多关注以太坊!”
"我构思以太坊这个项目时,最初的想法是'这要是能做成那太牛掰了'.当以太坊真的落地后,证明我的想法是对的,以太坊从里到外都是个很棒的项目!" --Vitalik Buterin,以 ...
- 新一代区块链系统——以太坊将带领我们去往何方?
从2020年末至2021年五月上旬,币圈一直风头正盛,大部分虚拟货币的价格一路高歌猛进.进入五月,比特币甚至一度涨到6万美元一枚,以太币也突破了4000美元的大关. 但是好景不长,五月下旬币圈马上迎来 ...
- 一个基础的以太坊介绍
https://bitsonblocks.net/2016/10/02/a-gentle-introduction-to-ethereum/ Posted on October 2, 2016 by ...
最新文章
- 科大讯飞副总裁刘鹏:人机交互的未来是人人交互?
- cisco 路由器访问权限的设置
- c++中判断某个值在字典的value中_Python核心知识系列:字典
- SAP Spartacus的产品主数据模型
- 下面哪个字段是http请求中必须具备的_HTTP 协议报文结构及示例
- navicat工具查看MySQL数据库_表占用容量_占用空间是多少MB---Linux工作笔记048
- Django运算表达式与Q对象/F对象
- 软件开发计划_软件开发的流程是怎么样的?福州IT告诉你:这五点是你需要掌握的...
- BM3D算法学习总结
- 4k hidpi 黑苹果_【图片】为了让Mac pro也实现hidpi 把4k的分辨率显示成到1920,我今天也是拼了,下午研究了半天【macpro吧】_百度贴吧...
- iOS AVCaptureDevice介绍
- 循环相乘取整法C语言,华为OJ机试题目:两个大整数相乘(纯C语言实现两个大整数相乘,两种方法实现大数相乘)...
- 【lifelines中文wiki】生存分析简介
- IOT漏洞挖掘学习笔记(一)——堆基础及相关数据结构
- 网桥、交换机、路由器等的区别
- keras入门教程 1.线性回归建模(快速入门)
- 数据解惑 · 带你认识数字高程模型(DEM)
- Yolanda,Withings,PICOOC以及RyFit四款智能人体成分秤对比评测
- 论文笔记—LeGO-LOAM: Lightweight and Ground-Optimized Lidar Odometry and Mapping on Variable Terrain
- 21-7-14 绝对差值和