首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

以太坊的智能合约应用(一):发币

可以说,以太坊是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。

当然,以太坊的智能合约肯定不止发币这一应用,明天我们再找两个其他的应用看看。放心,不会再撸代码了,只做简单介绍。

不投资毋宁死

自由,就是拥有选择的权利,而每一次选择都是一次投资。

谢谢阅读

✬如果你喜欢这篇文章,欢迎分享到朋友圈✬

评论功能现已开启,灰常接受一切形式的吐槽和赞美☺

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20181011G19MAS00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券