下面从技术层面谈一谈发币的几种机制。
ERC20
ERC20可以发布,现在所有已发的币几乎都是ERC20。发币在我们程序员看来其实极为简单,就是一类地址,每个地址里有多少钱。而ERC20从程序的角度而言,也不过就是一个简单的数组,每进行一次交易,数组里面的数据会变。
ERC20所谓的智能合约,其实也就是几个函数:
-
total supply:表示币的总数,比如是发了10亿还是1亿;
-
balanceOf:表示给定对应地址中还有多少币
-
transfer:表示从起始地址(From)转到To地址
-
approve和transferFrom:当其他智能合约要用到该币时,就需要这两个函数 。
此外,ERC20 token也不属于正常以太坊转账,正常的以太坊转账直接A到B即可。但这里要先找出token的智能合约,然后在这个智能合约中发布命令,而不是一个单独的以太坊转账。
ICO与融资
image在很多人看来发币相当于空气币——仅凭几行code便实现巨额融资。上图是我们 CyberMiles 发币的合约公式,共计11行=融资3000万美元,一行币=300万美元。这不是一个简单的智能合约,它用到了开源项目OpenZeppelin。该项目有很多智能合约模板,我们选用了其中一个叫做“PausableToken”的模板,因为自己写智能合约意味着极高的安全性风险(前面讲到以太坊的智能合约代码漏洞百出)。
image谈及融资、“卖币”,这就涉及到所谓的众筹合约。参见上图,先放上一个token(有地址),这里众筹的合约就取名叫Crowdsale(名称随意),其中最重要的一个函数是payable,当有人往合约里打以太币的时候,就用这个函数来进行处理。在这整个合约中,只有这一个payable函数是没有名字的,所以我们用它来处理,它就会计算打入的以太币应该对应多少我们的token,然后将token打还给发给我们以太币的人,所以在这种情况下,发币就变成一个全自动的过程。
不懂技术的人可能会问,为什么ICO会造成ETH价格大涨?不是也可以融比特币和各种各样的数字货币吗?不一定非要融ETH,为什么这些人ICO的时候都一定要融ETH呢?这是因为写出这个合约只能接受ETH,所以说大部分人的大部分融资都是仰赖ETH——这是程序员做的选择,而不是站在商人的角度来加以裁决。所以如果用智能合约的办法进行ICO融资,因为函数原因势必要用到ETH,继而导致的ETH价格大涨也是必然。
发币的问题
image与发币伴生的还有诸多问题,第一个最大的问题就是ICO时千万不要用在交易所的账号来买币,因为如果你用交易所的账号来买币,上述这种智能合约就会将ICO的币发回你的交易所账号,但是交易所并不知道发币方发过来的是什么,从而造成丢币掉钱的损失。所以,在token sale时,往往会有明确提示——“不要用交易所的地址发ETH”;其二,很多用户会直接往智能合约里打 ERC20代币,这也会造成丢币;第三,有人打币之后,智能合约变成了inactive状态,这就会导致币被锁在里面。
当然,ERC20发币的问题远不止这三点,我们再来讲一个法律问题:做KYC非常难。KYC即know your customer。各国的反洗钱法与证券法都要求KYC一定要做。但KYC在智能合约里是没有机制的,必须进行线下KYC,再将其放到链上来。所以就需要要把KYC的地址全部写出来,然后全部放到智能合约里,只有这一部分人可以给我打Ether,其他人打来Ether则尽数退回,非常复杂易错。
经验策略
image基于我们在发币这一领域的实践经验总结一二,其实类似于今天的交易所,就是采用一个中心化的方法来发币——我们自己搭建一个网站,大家都在这个网站上做KYC,能投的人把自己的账号地址发进去,表明要用这个地址来获取所发的币。然后,每一个用户会被指定一个随机产生的地址(每个人看见一个不同的地址),向那个地址里打任何其他的币。因为这个地址是我们产生的,所以我们知道它在哪里,这样对于用户而言也相对安全。随后通过数据库计算,每个对应的用户应该得到多少币,再发起一个ERC20 Contract,注明最初包含哪些人、谁投了、应该有什么币,最后运行该Contract。如果有用户没投上,就会得到一个refund,可以把币给收回来。中心化和去中心化一定要结合。今天的 Tokeneed.com 就是学习参考了我们实践的产品。
ERC223
image如上所言,很多人会把币直接打到合约地址导致丢币,这个问题就可以在ERC223找到一个对应的解决方法,但现在还不是一个标准。
ERC721
imageERC721强调的是钱的可追踪性,即由于每个token的价值不一样,所以在实践中不能以一个数组的形式呈现,应该标明这个地址有多少,那个地址有多少。因此要在其中加入函数ownerOf,也就是说如果现在有一个币,你可以通过合约查到是谁拥有它,然后你通过一个人、一个地址,也可以看到他拥有一些什么币,所以这里的每个币都是不一样的。这个应用场景有很多,比如说你想要房子、古玩等,就可以用ERC721进行token list。而ERC721怎么在交易所上实现、怎么进行交易,现在还是一个争论比较多的问题。
ERC884
imageERC884是最近通过的。由于特拉华州的公司法尤为完善,所以美国绝大部分公司都在这里注册,而特拉华州又于今年通过一条法律,表明公司可以通过发币来进行股票发行,这也就相当于币的证券化,并可借此实现区块链上的ICO。 因为美国证券法的规定很多,所以很难定义一种与之相符的代币,交易双方、交易时长、收费规则等要纳入考量的因素更是不胜枚举,但它们其实非常适合转变成区块链上的智能合约。因为这些规则以前都是交由律师来跟进执行,但在区块链上就可以直接利用计算机来进行共识操作。立法之后,相关规则就可以直接转为自动执行。简言之,就是通过ERC884产生一种新的代币,它在ERC20的合约中加入了新的方式,使之满足美国证券法。
以太坊存在的问题
image虽然现在以太坊是大家公认的发币平台,但它仍然存在各种各样的问题,首先,其速度很慢;其次是Negative network effect(负网络效应),翻译过来就是不是人越多越好用,而是人越多越难用,这显然是个大问题;再者,以太坊并不安全****,且非常难于编程。综上观之,这就要求我们在以太坊上进行大量的改革和工程创新。
最关键的一点是,区块链本身大于应用场景,发币的意义远比玩玩金融、玩玩空气要广博得多。人类社会现存两种证券,一是债券,二是股权。如果我们能够实现使用权证券化,这将成为资本主义四百年历史上出现的第三个可以证券化的东西,这无疑将对社会产生决定性的影响,在改变百万人事业的同时,却又少有人会富起来,这一问题要如何解决?区块链会带来什么样的社会影响?这些问题都是值得我们去思考的,所以说,实现发币是件远超互联网复杂程度的事。
网友评论