可以说,以太坊是16、17年这波区块链牛市的导火线。为什么呢?我们想想,其实区块链从诞生至今,只有两个杀手级应用,一个就是比特币的数字货币功能,另一个就是以太坊的发币功能。
以太坊简单到令人发指的发币功能,直接引爆了ICO的火热和规模化发展。其实,ICO伴随区块链而生,并非多新鲜的事物,当时以太坊本身都是靠ICO融了一些比特币才发展起来的。
但在以太坊出现之前的ICO,有两个不足:
1、风险比较大,很可能投资的币打过去,没有新币打回来;
2、项目周期长,通常项目要很长一段时间才能发币给投资者。
以太坊用智能合约的方式完美地解决了这两个问题,投资的以太币打过去,肯定有新币回到你的账户,而且几乎是立即、马上。且不管这项目是不是空气项目,但至少能马上拿到新币,这对投资者来说,风险就小了很多。所以,以太坊的发币功能重新赋能了ICO。
接下来,我们就来看一个最简单的用于发币的智能合约,它是用solidity语言编写的,实现的是最简单的功能,就是投资者将以太币打到智能合约,然后智能合约自动转新发的代币到投资者账户。
如图:
没错,就这么几句代码,够简单方便吧!
我们来解读一下:
contract ABC{}
contract表示这是一个智能合约,合约的名字叫ABC,然后{}里就是合约的内容。这个合约有bal和owner两个数据,以及ABC()和invest()两个函数。我们暂且把它发行的代币叫ABC币。
map(address=>uint) public bal;
map是一种数据类型,以前有提到过,表示一种数据对另一种数据的映射,在这里就是以太坊地址(address)对一个uint(无符号整数)数据的映射,public是指这个变量可以从合约外部访问。所以这句话其实就是定义了一个叫bal的可以从合约外部访问的map映射.它的作用就是表示以太坊账户的ABC代币余额。
address public owner;
这里定义了一个带public属性的叫owner的addree变量,顾名思义,我们用owner来表示合约所有者的以太坊地址。
function ABC(){}
这里定义了一个叫ABC()的函数,function表示这是一个函数, {}里是函数的内容。大家发现没,这个函数的名称和这个合约的名称一样,因为它是合约的创始函数,它的作用就是做一些初始工作,把这个合约“创造”出来,所以它只在合约创建时执行,以后都不能被调用。
owner = msg.sender;
这个创始函数我们能看得见的代码就这一句(其实真正编译之后它还做很多工作),这句的意思是将合约的部署者(msg.sender,以太坊都用这个变量名称指代每个合约的部署者,也就是发起交易的那个地址)定义为合约的所有者。
function invest() payable {}
这个函数才是能真正被外部调用的函数,正是它实现了发币功能,payable也是一个关键词,所有涉及到代币的操作都要带上它,才能成功执行。 接下来看看它的具体实现。
if(msg.value > 0)
这句的意思如果合约调用者发送给合约的以太币数量(msg.value)大于0。 那么:
1、bal[msg.sender] = msg.value; 那么,在调用者的账户存储同msg.value数量一样多的ABC代币 ;
2、owner.send(msg.value); 同时,将合约调用者发送给合约的以太币转给合约的所有者。
所以,如果你转一个以太币到这个合约地址,你就会得到一个ABC币,然后你的那个以太币会转给合约的主人,这个过程就是一个ICO。
当然,以太坊的智能合约肯定不止发币这一应用,明天我们再找两个其他的应用看看。放心,不会再撸代码了,只做简单介绍。
不投资毋宁死
自由,就是拥有选择的权利,而每一次选择都是一次投资。
谢谢阅读
✬如果你喜欢这篇文章,欢迎分享到朋友圈✬
评论功能现已开启,灰常接受一切形式的吐槽和赞美☺
领取专属 10元无门槛券
私享最新 技术干货