我爱编程

第十六章 事业: 如何发行自己的货币

2018-04-07  本文已影响0人  007胡明

除了某种信念——即一个国家不信守自己的负债义务是这个国家的耻辱之外,没有任何东西能充分地加强货币当局的力量,使之抵御种种要求创造廉价货币的压力。——哈耶克

人们早已习惯了国家对货币的垄断权力,甚至将其视作天经地义、不可置疑的信条。其实从历史的维度来看,国家拥有铸币权也就300多年时间。

哈耶克在晚年写下《货币的非国家化》后,似乎走得太远、太偏激,而“主流经济学家”和“银行家”们不会把它当真。

不过,哈耶克恐怕没有想到的是,人们会在互联网上展开他所说的多元货币竞争的实验。现在,我们创造了比特币以及各种各样的虚拟货币,比特币出来之后,哈耶克的理论就不再是空中楼阁。以区块链技术为底层的加密货币发行已经衍生出了一种奇特的“挖矿经济学”。这是哈耶克口中典型的自由经济,在挖矿这种纯工作量认证机制下,规则确定而且公平,你有多少算力,在一定时间内就能挖出多少货币。货币私有化已经不再是梦想。

目前的区块链技术对于大部分人来说是有一定门槛的,那么,普通开发者是否有机会搭建自己的区块链网络,发行自己的数字货币呢? 答案是有的。

知名加密数字货币的技术体系

我们先来了解一下目前几种知名的加密数字货币的技术体系:

1.比特币: 比特币技术,  符号为BTC,  共识算法为PoW,工作量证明算法中使用SHA-256加密算法,发行方式为挖矿。比特币总量恒定2100万,  区块时间10分钟,开发语言C++。

2.以太币: 以太坊技术,  符号为ETC/ETH (不同分叉),共识算法为PoW,使用的工作量证明算法叫Ethash (Dagger-Hashimoto算法的改良版本),发行方式为挖矿,支持在树莓派上运行节点。  以太币(ETH) 作为推动以太坊平台上分布式应用的加密燃料,将会通过挖矿的形式,每年以不变的数量发行。每年发行的数量是预售以太币总量的0.3倍,通胀率每年递减,  最新ETH区块时间16秒,开发语言GO。

3.比特股:比特股技术,核心账本采用石墨稀技术,符号为BTS,共识算法为DPoS,  货币总量为37亿。以预挖矿方式发布  (初始的比特股BTS由两部分组成,一部分由PTS持有者转股而来,另一部分由挖掘产生,并且整套系统还在不断地为持有BTS的投资者分红),比特股通过定期出售分发初始货币,Counterparty利用烧毁证明(POB) 发行货币,  BTS除了作为交易费用和激励机制外,也是资产交易的重要抵押物。区块时间3秒,开发语言C++。

加密数字货币其实还有很多种,如火币、莱特币、门罗币等。

加密数字货币的基础架构

1.信任基础

货币的核心基础是信任,这里有基于实物的信任,如黄金,不过更多的是基于国家背书的信任。只有保证了货币的价值稳定和价值存储能力,才能使货币获得人们的信任。

2.安全性

在虚拟和数字时代,  除了解决信任问题以外,  网络安全是数字货币的另外一个关键因素。比特币之前的任何货币,无论是物理实体黄金,还是电子化的法币,都不存在网络安全的问题,但黑客攻击和破解、技术垄断这些不稳定安全因素却极大制约着数字货币的发展。因此,数字货币对金融安全提出了更高的要求,一方面,数字货币去中心化的特性淡化了中心化管理和机构监管,出了问题不容易刹车和纠正(如The DAO事件的处理); 另一方面,区块链和数字货币这类创新金融体系尚未经历过多少风雨,在应对大数据冲击、黑客破坏、网络攻击等方面力不从心。

3.整体构想

加密数字货币的目标就是要建立一个去中心化的自运行经济系统,其应具备可流通性、可存储性、可离线交易性、可控匿名性、不可伪造性、不可重复交易性、不可篡改性七个特性。

(1) 数字货币账本

加密数字货币的技术基础区块链,具有不可篡改性,所有的账本都是公开透明的且具有可追溯性,这能基本解决数字货币流通中的技术问题。

(2) 共识机制的选择

在数字货币的真正落地和运行上,数字货币对信任和网络安全两个最关键的核心因素有着更高的要求。将这两个因素具体到加密数字货币的技术基础体系中,就是支撑这个系统的发行和维护网络安全的共识机制。其中共识机制有很多种,如PoW,PoS,DPoS等,它们各有利弊。POW有高耗能和51%攻击的风险,而POS和预挖矿的方式会导致大量的币保留在创始人和少数人之中,信用基础不够牢固,流动性不确定,因此往往会采取综合的机制。目前就有很多研究认为,采用“工作量证明机制PoW+权益证明机制PoS/DPoS"的币,才是最为完美的。

而采用哪种共识机制策略,将在很大程度上决定一个数字货币发展的前景空间。

搭建加密数字货币的技术平台

了解几种知名的加密数字货币的技术体系后,我们来谈谈如何发行自己的数字货币。

目前大致有两条技术路线可以选择,一个是自己通过搭建区块链平台去构建自己原生的数字货币,另一种方式是基于现有的区块链公网去创建数字资产和数字货币。

1.构建自己原生的数字货币

从比特币和各个竞争币(山寨币) 中大家可以看到,这些数字货币采用的技术体系不外乎就是比特币、Ripple、比特股和未来币等,或者采用这些技术体系的改进或分支版本。这些原生数字货币的用途主要包括: 交易和支付、汇兑手段、抵押手段、激励机制、权益证明和资源控制等,另外还有不同区块链体系自身带有一些特性的扩展。

就主流区块链开源技术体系来看,比较推荐的是比特币或其分支、Ripple、未来币、比特股、以太坊五种技术架构。如果你单纯只想做货币业务,不考虑以后其他衍生产品和业务扩展,  更推荐比特币、未来币和Ripple。每套技术体系的代码可以根据GitHub上公开的源码进行修改,从而制作出属于自己的加密数字货币。

比如,  我们可以基于比特币开源码来制作自己的数字货币,制作流程如下:

(1) 安装编译环境QT和MinGW,msys。

msys是一个在windows平台模拟shell的程序。开发者可以在windows上安装以下内容:

From MinGW installation manager->All packages-> MSYS

选中以下安装包msys-base-bin,msys-autoconf-bin ,msys-automake-bin,msys-libtool-bin.

点apply changes开始安装。

需要注意的是,确保不要安装msys-gcc和msys-w32api,因为这两个包会和我们的编译系统发生冲突。

安装MinGW-builds。

下载并解压缩i686-4.8.2-release-posix-dwarf-rt_v3-rev3.7到C盘根目录C:注意目录结构。

设置PATH环境变量,将C:mingw32in;添加到第一个。

在命令行模式下输入gcc-v会得到以下内容:

至此,你的开发环境已经搭建好了。

(2) 下载bitcoin引用的外部库,把它们全部放在C:deps目录下。

安装OpenSSL,进入启动MinGwshell,比如目录:(C:MinGWmsys.0msys.bat) 运行这个msys.bat,就会启动一个shell环境,提符是$。

输入命令:

等待几分钟后,就把openssl编译好了。

下载Berkeley DB,  访问:http://download.oracle.com/berkeley-db/db-4.8.30.NC.tar.gz 我们推荐使用4.8版本。

同样在msys shell环境下输入以下命令:

等待编译。

安装Boost,下载地址:http://sourceforge.net/projects/boost/files/boost/1.55.0/。msys命令:

安装miniupnpc到cd    C:depsminupnpc:

下载protoc和libprotobuf:

qrencode:

安装好Qt 5库。

在window命令行输入:

(3)下载Bitcoin0.9.1,在msys shell下输入以下命令行:

这样,你就可以得到了编译好的bitcoin-cli.exe、bitcoind.exe和bitcoin-qt.exe,拥有属于自己的数字货币。

前期很多山寨币,就是这个套路: 基于比特币的技术体系,这里修改些文字,那里调整一些参数。但其实很多人并不理解整个体系和原理,甚至没有阅读主要的代码,在大家都成为老司机后,开发者会在开发新的币种时考虑一些微创新,在共识算法和加密算法中作一些调整和优化,创新为自己的新算法。

其实,数字货币也是一种互联网产品,且属于一个比较复杂的技术体系,即使你是基于别人的成熟代码进行修改,也需要不断地进行迭代更新和维护。纵然只是简单的版本跟随,也要投入技术力量去跟进,  因此之前提到的只是入门的尝试,真正要维护你的数字货币,还得好好去阅读代码,了解整个架构和原理,根据你的业务和新币特性去不断优化和调整。

当然,现在这些简单套路都走不通了,现在要发行新的数字货币,要么就是你的算法真有独有优势和特点,要么就是基于数字货币下的垂直业务和游戏规则,有很好的模式(比如电竞币或文化币),否则大家很难去关注和拥护你的新币。

2.基于现有的区块链公网去创建数字资产和数字货币

就主流区块链开源技术体系来看,除了Factom外,基本上其他的技术体系都可以用来创建数字资产,也就是支持加密数字货币的创建。

比如,我们可以基于以太坊智能合约来创建属于自己的数字货币或代币。也许你经常看到ERC20和代币一同出现,ERC20是以太坊定义的一个代币标准,给出我们在创建代币的时候必须要遵守的协议,如指定代币名称、总量、实现代币交易函数等,开发者只有遵循了这些协议才能被以太坊钱包支持。其接口如下:

简单说明一下:

name :  代币名称。

symbol: 代币符号。

decimals: 代币小数点位数,代币的最小单位,18表示我们可以拥有0.000000000000000001单位个代币。

totalSupply( ): 发行代币总量。

balanceOf( ): 查看对应账号的代币余额。

transfer( ): 实现代币交易,用于给用户发送代币(从我们的账户里)

transferFrom( ): 实现代币用户之间的交易。

allowance( ): 控制代币的交易,如可交易账号及资产。

approve( ): 允许用户可花费的代币数。

编写代币合约代码:

本文选择了以太坊的测试网络Ropsten,如果你没有余额购买,以太坊的Mist测试网络后可以送一些测试以太币给你,配置好之后,浏览器打开RemixSolidity IDE,复制以上源码粘贴上,在右侧选项参考选择进行相关设置,  注意Environment和Account和MetaMask保持一致,然后选择合约Token ERC20,  填入你想要的发行量、名称及代号,就可以创建合约了。

这时MetaMask会弹出一个交易确认框,点SUBMIT。待合约部署交易确认之后,复制合约地址。打开Metamask界面,切换到TOKENS,点添加合约,出现对话框后填入刚刚复制的地址,点ADD,这时你就成功创建属于自己的数字货币了。

3、两种加密货币发行方案的比较

两种方案都可以成功创建属于自己的区块链货币,方案二基于以太坊智能合约的优点是比较灵活和强大。开发者基本可以任意编写自己的数字货币及其衍生的业务体系,缺点是其中的币种运行和流通交易,需要消耗原生数字货币(Gas费用),这是值得考虑的。比特股部分,数字资产的发行和管理功能很齐全,但也会一定程度局限在比特股平台中,且也需要交易费用(Gas费用)。

基于平台的优点是简单易用和免费使用(无Gas费用),缺点是提供接口的功能不够丰富。同时方案二基于已有区块链公网的数字资产搭建,在方便的同时,好处是不需要类似方案一那样,一定要考虑组建自己的节点群,但缺点是一定程度限制在各个区块链体系框架中  (其实大部分情况下已经能满足你的需求了),且区块性能会受到公网的性能制约,需要考虑一些区块链公网的停止维护或硬分叉的风险。

结语:个人即货币,你相信吗?

从货币发行和控制的角度看,比特币有它的美好之处:  作为记账单位,  最终流通的比特币将总是略少于2100万个,并可划分为更小的单位; 作为记账系统,比特币实现了不由中央发行机构发行新钱、维护交易的目标,在每笔交易前,钱币的有效性都必须经过检验确认,由数字加密算法保证交易安全,交易记录由全体网络计算机收录维护。

可以说,  比特币与任何一个国家发行的纸质货币并无区别,只不过使用比特币的这个国家的领土是互联网,它的国民是相信比特币的信用价值并愿意使用它的人们。至于它是否能像哈耶克设想的那样成为优良货币,  这只有上帝知道,它至少提供了一种可能,而我们也多了一种选择。

但比特币真的就能成为未来货币? 它昂贵的手续费,它转账时间的局限,它社区不可调和的矛盾,它算力的中心化,因为升值而流动性受限,都是比特币成为互联网未来货币的强大阻力。

而且,如果私人真能发行货币,谁来控制贪婪的人性。而人性,正是比特币世界里最危险的一环。  就算技术上可行,伦理学、社会学、哲学这些能过得了关吗?

上一篇下一篇

猜你喜欢

热点阅读