最近报名参加了硅谷区块链举办的《智能合约开发课》第二期培训班,根据培训要求,不能透露课程的内容,但我会在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)内容支持计划奖励