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实现相关推荐

  1. 众筹系统源码 java_以太坊 众筹系统

    以太坊众筹系统 众筹系统是基于以太坊solidity书写智能合约,并用基于web3j 开发web应用. 项目地址:https://github.com/niyuelin1990/CrowdFundin ...

  2. NO.15 不得不说的以太坊跟ICO

    随着以太坊的出现,区块链进入了2.0时代,以太坊是个太神奇的东西,没有天才的想法.高超的技术以及黑客的精神是无法如此成功的.它实现了区块链项目的快速开发,快速实施. 以太坊这个开发平台本身发行了一种币 ...

  3. Pantera Capital创始合伙人:最大遗憾是没有投资以太坊ICO

    Pantera Capital创始合伙人Steven Waterhouse近日表示,作为一名风险投资人,他最大的遗憾是没有投资以太坊的ICO.目前,他是去中心化V/PN服务公司Orchid(兰花协议) ...

  4. 以太坊简史:因暴雪削弱术士而诞生的千亿美元巨兽

    撰文:Eric,Foresight News 2013 年 11 月,在比特币创世区块诞生近 5 年之后,以太坊白皮书问世. 2013 年的 Vitalik Buterin 「这份初稿是我对我们称之为 ...

  5. 避不过裁员大潮,有钱任性也独木难支!以太坊联合创始人Joe Lubin的分布式梦,要破了吗?

    Joe Lubin 不仅是以太坊联合创始人.区块链风险投资公司 Consensys 创始人,他也是一个「有钱且任性」的亿万富翁.但你绝对不会想到,5年前的他,还在为帮助牙买加模特成功「混入音乐界」忙得 ...

  6. 基于以太坊发布属于自己的数字货币(代币)完整版

    https://blog.csdn.net/JAVA_HHHH/article/details/79771752 本文单纯从技术角度详细介绍如何基于以太坊ERC20创建代币的流程(此案例是部署的eth ...

  7. 独家!天才少年 Vitalik:“中国开发者应多关注以太坊!”

    "我构思以太坊这个项目时,最初的想法是'这要是能做成那太牛掰了'.当以太坊真的落地后,证明我的想法是对的,以太坊从里到外都是个很棒的项目!" --Vitalik Buterin,以 ...

  8. 新一代区块链系统——以太坊将带领我们去往何方?

    从2020年末至2021年五月上旬,币圈一直风头正盛,大部分虚拟货币的价格一路高歌猛进.进入五月,比特币甚至一度涨到6万美元一枚,以太币也突破了4000美元的大关. 但是好景不长,五月下旬币圈马上迎来 ...

  9. 一个基础的以太坊介绍

    https://bitsonblocks.net/2016/10/02/a-gentle-introduction-to-ethereum/ Posted on October 2, 2016 by ...

最新文章

  1. 关于mongodb ,redis,memcache之间见不乱理还乱的关系和作用
  2. c++ 多线程 类成员函数_多线程(C++/Python)
  3. SpringMVC-HelloWorld
  4. mysql 跳表 b 树_简单谈谈Mysql索引与redis跳表
  5. 【AI视野·今日Robot 机器人论文速览 第二十五期】Fri, 1 Oct 2021
  6. UnityShader18.1:立方体贴图(下)
  7. 360胡宁:通往CTO的道路上就是四个字
  8. 微波雷达存在感应模组,智能微波感应开关,多普勒雷达原理应用
  9. rxbus 源码_RxBus学习
  10. 5、流程变量Variables
  11. IDEA怎么查看现在的项目使用的JDK版本?
  12. 糖基化(glycosylation)
  13. Win10安装silverlight5开发环境,以及坑
  14. 灌南县计算机中专学校,江苏省灌南中等专业学校2021年有哪些专业
  15. pro6 surface 黑苹果_Surface Pro6典雅黑入手体验
  16. 一种Flutter加载更多的实现方法
  17. 西南(唐山)交通大学上海校友会2012年度大会活动通知
  18. mysql schema 保存数据_在MySQL中,所有触发器的定义都保存在information_schema数据库下的()表中。_学小易找答案...
  19. 填坑——自动驾驶相关坐标系
  20. 2021年第五届集创赛Arm杯报名/提问/培训视频/历年获奖资料汇总

热门文章

  1. 好的爆款文案可以让用户喜欢上我们的产品
  2. semver The semantic versioner for npm
  3. sqlsever2019:SQL视图的创建与修改
  4. TwinCAT 3 PLC 读写SDO
  5. 嵌入式系统的基础知识讲解
  6. 2017电源题笔记(三相电源)
  7. Java JDBC (MySQL5.7)
  8. 分享111个助理类简历模板,总有一款适合您
  9. 举头望明月打计算机术语,中秋节灯谜及答案二十篇
  10. 为什么导出的CSV文件打开后是乱码?