__________     __ __     __  _______    ________
  / ____/ __ \   / // /    / / / /  _/ |  / / ____/
 / / __/ / / /  / // /_   / /_/ // / | | / / __/
/ /_/ / /_/ /  /__  __/  / __  // /  | |/ / /___
\____/\____/     /_/    /_/ /_/___/  |___/_____/

 --- A GOPHER-LIKE INTERFACE FOR HIVE BLOCKCHAIN ---

《智能合约开发课》学习6:收币代投

BY: @speeding | CREATED: Jan. 12, 2018, 8:45 a.m. | VOTES: 18 | PAYOUT: $0.91 | [ VOTE ]

[IMAGE: https://steemitimages.com/DQmU1RikMVurwoZhHaG3JRgiQyfrchhNwxeb76ATvgFitFf/image.png]最近报名参加了硅谷区块链举办的《智能合约开发课》第二期培训班,根据培训要求,不能透露课程的内容,但我会在steemit上记录我的成长过程。

学习的内容是单员工发工资和多员工发工资的代码,不能透露。我就自己编了一个应用场景,最近代投很火,几个人合伙凑出几个ETH,发给代投方,这个功能很简单,用以太坊钱包就能解决,但如果几十人参投,记账的工作量还是挺大的,用智能合约就可以完美地解决这个需求。

根据课程的内容,我照葫芦画瓢,写出了最简单的合约:

pragma solidity ^0.4.0;

contract SendEther {
    address payee = 0xdd870fa1b7c4700f2bd7f44238821c26f7392148; //第5个地址

    function addFund() payable returns(uint) {
        return this.balance;
    }

    function send() {  
        payee.transfer(this.balance);
    }
}

remix的测试框架中默认生成了5个测试地址:

我要用第一个地址创建合约,第二、三个地址分别参投2ETH和3ETH,然后汇总在一起发到第5个地址中,第5个地址就是我们的代投方地址,这里用payee表示,直接硬编码在里面了。

1)创建合约
点create后自己编译并创建完成。

2)收币

分别把Account选到第二、第三个地址,value分别用2和3,调用两次addFund()函数,这样合约账户应该收到了5ETH。

参加这个代投项目的人要调用addFund()向合约地址中打币,函数中要有payable修饰词,函数调用时传递的value值就是发送的币数量,默认单位为wei,可以在界面里设置为ether。

addFund()中返回了this.balance,这样每一次打币时能够看到合约账户里的余额。

3)发币

最后调用send()函数,内部调用了transfer()函数,一次性把所有币发给代投方。

功能很简单,刚刚开始学,不知道有没有漏洞,别人能够把里面的币偷走吗?

当前也不敢部署到正式网络中,一方面不会部署,另一方以太坊的gas太贵,出点问题,ETH就没了,真金白银可不能乱折腾。万一代投方再把ERC20代币发回来,分不给参投方,问题就更大了。

后面还要继续学习扩充功能,记录好参投方的地址、参投数量等数据,最后一次性把token分给大家,让人谈虎色变的ICO实际上就是这么一回事。

本文由币乎(bihu.com)内容支持计划奖励

TAGS: [ #cn ] [ #cn-programming ] [ #smart-contract ] [ #ethereum ]

Replies

NO REPLIES FOUND.

[ BACK TO TRENDING ] [ BACK TO MENU ]
CMD>