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

in #cn7 years ago (edited)

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)内容支持计划奖励