申龙斌 avatar

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

speeding

Published: 12 Jan 2018 › Updated: 12 Jan 2018《智能合约开发课》学习6:收币代投

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

img最近报名参加了硅谷区块链举办的《智能合约开发课》第二期培训班,根据培训要求,不能透露课程的内容,但我会在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个测试地址:

  • (1) 0xca35b7d915458ef540ade6068dfe2f44e8fa733c
  • (2) 0x14723a09acff6d2a60dcdf7aa4aff308fddc160c
  • (3) 0x4b0897b0513fdc7c541b6d9d7e929c4e5364d2db
  • (4) 0x583031d1113ad414f02576bd6afabfb302140225
  • (5) 0xdd870fa1b7c4700f2bd7f44238821c26f7392148

我要用第一个地址创建合约,第二、三个地址分别参投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)内容支持计划奖励

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

Written by

微信:slofslb

Read more #cn posts


Best Posts From 申龙斌

We have not curated any of speeding's posts yet. But you can encourage our curation team to review posts by visiting them regularly and by referring other readers. Because we give priority to frequently read content.

More Posts From 申龙斌