文章目录
那个疯狂的比特币,从不足1美分到19000美元,涨了2600万倍,涨得令世人怀疑人生。为什么涨得这么疯狂?最根本的原因是它提出了区块链的技术。巨大的财富效应导致如今各种区块链项目像雨后春笋一样层出不穷,为首的,当属比特币、以太坊、EOS最热门。
我在想,如果自己也在淘宝请人写一个区块链白皮书,在百度上搜索几个欧美成熟男士
然后给他贴上哈佛大学,麻省理工大学高级教授的标签,然后在EOS上发行一个EGC(EggCoint)币,发行个一万亿, 然后上街就给人送几万个EGG,那该是什么样的情景。。。如果你也觉得好玩,那就和我一起来了快速解一下EOS,了解一下自己发行EOS代币需要知道的一些知识吧。
回顾区块链的发展历史
区块链1.0
以比特币为代表,仅支持代币的交易功能,区块链技术由此诞生。
区块链2.0
以以太坊(ETH)为代表, 在代币交易基础上提出虚拟机的概念, 出现了智能合约,DAPP(分布式应用)。以太坊区块链相当于一个操作系统,可以各种智能合约(可以理解为代码或程序)可以在这个操作系统里运行。
关于智能合约:说的简单一些,智能合约就是将代码存放在区块链里,代码被区块链保护,没有人可以篡改,所有的人都可以看到代码,合约由区块链来执行,没有人可以干预,操控。
区块链3.0?
以太坊(ETH)仍像比特币那样,需要挖矿来创造区块;智能合约在以太坊虚拟机执内行效率低下。EOS考虑了这些痛点,提出DPOS共识机制。在EOS中,区块的生产由21个超级节点完成,解决了区块链项目让世人诟病的浪费电力的问题,并提高了区块链网络处理事务的效率,DAPP开始快速增长。
这里标题加了一个问号,是在于EOS这样的做法本身有违背去中心化的初衷,仍值得考量。
简单了解EOS
EOS全称为Enterprise Operation System,即企业操作系统
。一听这个名字就觉得很高大上,操作系统
是什么,那可是核高基啊,例如windows,android,ios操作系统,可是跑各种应用软件。不同的领域,只要有人开发app部署到EOS上就行,想象空间非常大。
相比以太坊,EOS有哪些优势
- 效率优势:
以太坊每秒处理10到20个交易请求。EOS在白皮书中号称达到每秒处理百万交易,实际上EOS主网上线后也就6000的TPS,与最初吹的牛相差甚远,但也比以太坊高效很多了。- 交易费用低廉的优势:
以太坊为了避免被DOS攻击,在转账,执行智能合约设计到计算,存储每一步都要收GAS费用。这导致以太坊的DAPP生态完全发展不起来。
EOS中采取抵押EOS的模式来避免被DOS攻击,要发动对EOS的攻击,你需要持有大量的EOS代币,而持有大量EOS代币的你发动攻击对自己有什么好处呢?
在EOS的生态中,DAPP的使用者,基本不用花钱,只是dapp的开发者在部署dapp合约的时候需要花钱。
EOS钱包
- 钱包本质上是一个加密文件,需要密码才能打开。
- 钱包里边管理多个私钥,用于对交易进行签名。
EOS账户
账号存在于区块链中,一个账号的操作(转账、调用合约等)需要私钥来签名才会被区块链网络接受。
EOS的共识机制
EOS采用DPOS共识机制,将挖矿权委托给21个超级节点, 这21个节点当然是财力最雄厚的才会有机会。这21个超级节点不用像比特币和以太坊那样需要抢者挖矿,而是轮流进行区块的打包,而普通节点只有权选举这21个超级节点。这种共识机制与比特币的POW共识机制相比,不用浪费大量的电力进行挖矿。由于强者恒强
,这21个超级节点基本上很难变动,变成了财阀统治
的东西,所以以太坊的创始人炮轰EOS是集中式的垃圾堆
。
EOS的资源分配机制
- RAM资源,购买型资源;
这个是损耗型的资源,需要用EOS来购买,购买后对于一些需要RAM才能进行的操作(如创建合约,创建账号)。执行某些需要RAM的操作后,RAM被扣除损耗掉了,但剩余的RAM资源你可以拿去卖给别人。
这种机制导致有人囤货,EOS RAM的价格暴涨,但相比以太坊也还是便宜一些。 - CPU和网络带宽,抵押型资源。
CPU和网络带宽资源可以通过抵押你的EOS币来获得,当你不再使用时,可以全部赎回来,相当于没花钱。
下边是我的EOS钱包中显示的资源情况:
EOS的安装使用
测试环境
推荐采用ubuntu 18.04版本操作系统。
软件的安装
EOS是开源的,可以从github上下载源码并编译,但是为了快速了解,下载安装即可。
#下载
wget https://github.com/EOSIO/eos/releases/download/v1.7.2/eosio_1.7.2-1-ubuntu-18.04_amd64.deb
#安装
sudo dpkg -i eosio_1.7.2-1-ubuntu-18.04_amd64.deb
验证安装
输入cleos -h
看到下边的输出就说明安装好了。
$ cleos -h
Command Line Interface to EOSIO Client
Usage: cleos [OPTIONS] SUBCOMMAND
Options:
-h,--help Print this help message and exit
-u,--url TEXT=http://127.0.0.1:8888/
理解nodeos,keosd,cleos
- nodeos
nodeos用于连接区块链网络,生产区块。
和以太坊默认连接主网的做法不同,如果你想用nodeos来同步EOS主网数据,你需要先做特定的配置,否则就按本地私有测试网络的模式运行。
注意:默认情况下,运行nodeos会创建本地范围使用的EOS网络,也就是说只要只有一个节点就可以产生区块,创建账户,部署合约,但这种网络和真实的EOS网络相差很大。
- keosd
keosd是一个精简版的nodeos,除掉了很多功能,只保留管理本地钱包的功能。我们用keosd管理我们的钱包,并提供使用钱包里的私钥进行数据签名。 - cleos
cleos是(cli eos), 也就是一个命令行客户端。它通过网络连接nodeos或者keosd来执行对应的功能。
cleos与keosd和nodeos的关系
连接区块链节点
默认情况下cloes连接的nodeos地址为:http://127.0.0.1:8888/
,即本地运行的nodeos的8888端口。
cleos get info
相当于
cleos -u http://127.0.0.1:8888/ get info
所以,要链接主网,应该这样:
#mainnet.meet.one是主网上的一个真实节点
cleos -u https://mainnet.meet.one:443 get info
连接钱包服务
默认连接本地钱包管理模块
cleos --wallet-url unix:///~/eosio-wallet/keosd.sock
如果要通过网络连接一个钱包模块,可以知道其地址,例如:
cleos --wallet-url http://192.168.15.191:9999
cleos的本质
例如我通过cleos查询我主网上的账号的金额,把详细过程打印出来就可以清楚的看到,其实他就是个http客户端而已:
cleos -u https://mainnet.meet.one:443 --print-request --print-response get currency balance eosio.token yinmingxuan5
REQUEST:
---------------------
POST /v1/chain/get_currency_balance HTTP/1.0
Host: mainnet.meet.one
content-length: 74
Accept: */*
Connection: close
{
"account": "yinmingxuan5",
"code": "eosio.token",
"symbol": null
}
---------------------
RESPONSE:
---------------------
[
"0.0432 EOS"
]
---------------------
0.0432 EOS
可以看出,cleos本质上其实就是一个rpc的客户端。
理解EOS主网、测试网、本地测试网
-
EOS主网
因特网上真实的EOS网络,chain_id为:aca376f206b8fc25a6ed44dbdc66547c36c6c33e3a119ffbeaef943642f0e906
-
EOS测试网
由于EOS主网创建账户和部署合约都需要花钱,所以不适合测试用。EOS提供了公网环境的EOS测试网络,它的EOS币是可免费领取的,网络与主网没有任何差异,只是chain_id不同。 -
本地EOS测试网
安装EOS软件后,我们执行nodeos后即可创建一个本地测试网络。这种网络默认没有部署过系统合约,与主网有很大差异。
由于我们的目的是快速了解自己发行一个EOS代币是怎么的,所以我们应该在和主网一样的网络环境中进行,所以我们首选因特网上的EOS测试网。
有哪些可用的测试网
官方测试网
官网:
http://jungle.cryptolions.io/
代码:
https://github.com/CryptoLions/EOS-Jungle-Testnet
RPC 入口:
https://jungle.eosio.cr
https://api.jungle.alohaeos.com
chainID:
038f4b0fc8ff18a4f0842a8f0564611f6e96e8535901dd45e43ac8691a1c4dca
区块浏览器:
https://jungle.bloks.io/
在线钱包:
https://jungle.bloks.io/wallet
https://eostoolkit.io/
Kylin测试网
官网:
https://www.cryptokylin.io/
代码:
https://github.com/cryptokylin/CryptoKylin-Testnet
RPC 入口:
https://api.kylin.alohaeos.com
https://api-kylin.eoslaomao.com
chainID:
5fff1dae8dc8e2fc4d5b23b2c7665c97f9e9d8edf2b6485a86ba311c25639191
浏览器:
http://tools.cryptokylin.io
https://kylin.bloks.io/
https://kylin.eosq.app/
在线钱包:
https://kylin.bloks.io/wallet
https://eostoolkit.io/
理解手机钱包app是如何完成转账的
当我们发现自己的代币后,我们可能需要一个我们自己的钱包来展示账户的金额,转账,调用合约接口等操作,所以必须理解钱包app是如何完成转账等操作的。
可以参考这个:
https://github.com/EOSBlock/EOS-Tutorials/blob/master/EN/transfer-tokens-using-RPC.md
其原理,就是***创建一个交易的请求,然后用账户的私钥对交易进行签名,然后发送给区块链进行打包和确认***。理解了这个,我们就很容易开发出自己的钱包app。而钱包对交易进行签名有两种类型:
- 第一种类型:交易签名由钱包app完成。
这种情况你手机上的钱包就管理了你的私钥,而你的手机是接入因特网的,我觉得有点危险。
- 第二种类型:交易签名由本地内部服务器的keosd来完成。
这种方式内部的keosd不接入网络,感觉安全点。
如何基于EOS发行自己的代币
我们在EOS里发行代币可以理解成:创建一个账户,然后在账户里部署一个代币智能合约。
以测试网为例子,演示如何发行自己的代币:
第一步:创建两个EOS账户
http://faucet.cryptokylin.io/create_account?yinmingxuan1
http://faucet.cryptokylin.io/create_account?yinmingxuan2
返回结果如下:
{"msg": "succeeded", "keys": {"active_key": {"public": "EOS5pRyMQe2zF9MVhe3VozMija954roVeHQmvqdJ6aV8jGTLzsfn5", "private": "5JahshimirqoqQw4Kz7YAdKmfWhq31QVnk6gVz8cNfPUBSNMmUW"}, "owner_key": {"public": "EOS5WyJEc6C7EiKSyXWzfHuY8ZegEXciodypMXSX1nhYGJ3rcwL21", "private": "5K4n2B1GnWvWLYw93ATB9gaXMnQ536hSsZSE2ccD8gmEzsrgG4i"}}, "account": "yinmingxuan1"}
{"msg": "succeeded", "keys": {"active_key": {"public": "EOS5esafkz4MYjxmULedXkcGhXYESLrmfzzfPTVYFSVqsiUVjzeZa", "private": "5JfEJzvazLeRZUzpaZyi45FBdCKuYEa3Avq65rQZAQBKKkxoy5P"}, "owner_key": {"public": "EOS89Re5XQvzawyVHtSbbHhbk4pBkFdEyMewqQbZViyfjAV8x8EYD", "private": "5JEo197icSDLcFUW69wxX1Rh27UU3SPBe1L43jx1EBcTFGvpBNo"}}, "account": "yinmingxuan2"}
第二步:申请一点EOS币:
测试网的EOS是免费申请的,执行下面的HTTP GET请求:
http://faucet.cryptokylin.io/get_token?yinmingxuan1
返回结果:
{"msg": "succeeded"}
第三步:部署代币合约到EOS账户
我们直接基于EOS源码里的eosio.token合约部署成我们的代币合约。如果有特殊要求,可以参照eosio.token合约修改成自己的代币合约。
cleos -u https://api.kylin.alohaeos.com set contract yinmingxuan1 /home/wakuang/eos/unittests/contracts/eosio.token/ --abi eosio.token.abi -p yinmingxuan1@active
返回消息:
Reading WASM from /home/wakuang/eos/unittests/contracts/eosio.token/eosio.token.wasm...
Publishing contract...
Error 3080001: Account using more than allotted RAM usage
Error Details:
account yinmingxuan1 has insufficient ram; needs 230064 bytes has 9550 bytes
提示RAM不足,通过cleos买一点RAM:
wakuang@wakuang01:~/eosio-wallet$ cleos -u https://api.kylin.alohaeos.com system buyram yinmingxuan1 yinmingxuan1 "20 EOS"
输出:
executed transaction: 6d5840d7b4f4c1a61a860951c121e6f787d84223d1dd16c73ecc8a4ddc817821 128 bytes 590 us
# eosio <= eosio::buyram {"payer":"yinmingxuan1","receiver":"yinmingxuan1","quant":"20.0000 EOS"}
# eosio.token <= eosio.token::transfer {"from":"yinmingxuan1","to":"eosio.ram","quantity":"19.9000 EOS","memo":"buy ram"}
# yinmingxuan1 <= eosio.token::transfer {"from":"yinmingxuan1","to":"eosio.ram","quantity":"19.9000 EOS","memo":"buy ram"}
# eosio.ram <= eosio.token::transfer {"from":"yinmingxuan1","to":"eosio.ram","quantity":"19.9000 EOS","memo":"buy ram"}
# eosio.token <= eosio.token::transfer {"from":"yinmingxuan1","to":"eosio.ramfee","quantity":"0.1000 EOS","memo":"ram fee"}
# yinmingxuan1 <= eosio.token::transfer {"from":"yinmingxuan1","to":"eosio.ramfee","quantity":"0.1000 EOS","memo":"ram fee"}
# eosio.ramfee <= eosio.token::transfer {"from":"yinmingxuan1","to":"eosio.ramfee","quantity":"0.1000 EOS","memo":"ram fee"}
# eosio.token <= eosio.token::transfer {"from":"eosio.ramfee","to":"eosio.rex","quantity":"0.1000 EOS","memo":"transfer from eosio.ramfee t...
# eosio.ramfee <= eosio.token::transfer {"from":"eosio.ramfee","to":"eosio.rex","quantity":"0.1000 EOS","memo":"transfer from eosio.ramfee t...
# eosio.rex <= eosio.token::transfer {"from":"eosio.ramfee","to":"eosio.rex","quantity":"0.1000 EOS","memo":"transfer from eosio.ramfee t...
warning: transaction executed locally, but may not be confirmed by the network yet ]
购买成功,再查看账户的资源信息:
wakuang@wakuang01:~/eosio-wallet$ cleos -u https://api.kylin.alohaeos.com get account yinmingxuan1
输出:
created: 2019-04-24T08:03:06.500
permissions:
owner 1: 1 EOS5WyJEc6C7EiKSyXWzfHuY8ZegEXciodypMXSX1nhYGJ3rcwL21
active 1: 1 EOS5pRyMQe2zF9MVhe3VozMija954roVeHQmvqdJ6aV8jGTLzsfn5
memory:
quota: 373.2 KiB used: 224.9 KiB
net bandwidth:
delegated: 1.0000 EOS (total staked delegated to account from others)
used: 9.446 KiB
available: 696.3 KiB
limit: 705.7 KiB
cpu bandwidth:
delegated: 1.0000 EOS (total staked delegated to account from others)
used: 3.691 ms
available: 129.1 ms
limit: 132.8 ms
EOS balances:
liquid: 279.0000 EOS
staked: 0.0000 EOS
unstaking: 0.0000 EOS
total: 279.0000 EOS
现在资源充足了,再次尝试部署合约:
wakuang@wakuang01:~/eosio-wallet$ cleos -u https://api.kylin.alohaeos.com set contract yinmingxuan1 /home/wakuang/eos/unittests/contracts/eosio.token/ --abi eosio.token.abi -p yinmingxuan1@active
输出:
Reading WASM from /home/wakuang/eos/unittests/contracts/eosio.token/eosio.token.wasm...
Publishing contract...
executed transaction: e00d8238fa60ee89cb3b31a0ad3b033fc2c52b9f37486755da973a56f5511062 9312 bytes 677 us
# eosio <= eosio::setcode {"account":"yinmingxuan1","vmtype":0,"vmversion":0,"code":"0061736d0100000001aa011c60037f7e7f0060047...
# eosio <= eosio::setabi {"account":"yinmingxuan1","abi":"0e656f73696f3a3a6162692f312e310008076163636f756e7400010762616c616e6...
warning: transaction executed locally, but may not be confirmed by the network yet ]
第四步: 创建代币
cleos -u https://api.kylin.alohaeos.com push action yinmingxuan1 create '[ "yinmingxuan1", "1000000000.0000 EGG"]' -p yinmingxuan1@active
输出:
executed transaction: a9329b6f1405aa68d163f5c8390c4a038a5078abeb75ba6b8ee3920974c9964a 120 bytes 535 us
# yinmingxuan1 <= yinmingxuan1::create {"issuer":"yinmingxuan1","maximum_supply":"1000000000.0000 EGG"}
warning: transaction executed locally, but may not be confirmed by the network yet ]
第五步:将代币发行给自己
wakuang@wakuang01:~/eosio-wallet$ cleos -u https://api.kylin.alohaeos.com push action yinmingxuan1 issue '["yinmingxuan1", "1000.0000 EGG", "you eat some egg!"]' -p yinmingxuan1
输出:
executed transaction: ae7d4099b2efa41aa427fafa0ed517d23046ea0bb5f8e951e4cceb126487f6fc 136 bytes 215 us
# yinmingxuan1 <= yinmingxuan1::issue {"to":"yinmingxuan1","quantity":"1000.0000 EGG","memo":"you eat some egg!"}
warning: transaction executed locally, but may not be confirmed by the network yet ]
第六步:测试代币转账
wakuang@wakuang01:~/eosio-wallet$ cleos -u https://api.kylin.alohaeos.com push action yinmingxuan1 transfer '["yinmingxuan1", "yinmingxuan2", "200.0000 EGG", "here you are, 200 egg" ]' -p yinmingxuan1@active
输出:
executed transaction: 6595f0a1de8e5a0ca3f1b18f524b97fd5568a8a7825ca32afaf30390af988b04 152 bytes 207 us
# yinmingxuan1 <= yinmingxuan1::transfer {"from":"yinmingxuan1","to":"yinmingxuan2","quantity":"200.0000 EGG","memo":"here you are, 200 egg"}
# yinmingxuan2 <= yinmingxuan1::transfer {"from":"yinmingxuan1","to":"yinmingxuan2","quantity":"200.0000 EGG","memo":"here you are, 200 egg"}
warning: transaction executed locally, but may not be confirmed by the network yet ]
第七步:查看转账结果
cleos -u https://api.kylin.alohaeos.com get currency balance yinmingxuan1 yinmingxuan2 EGG
输出:
200.0000 EGG
可以看到,我转的200个蛋币,已经转账成功!
如何创建真实的EOS主网账户
创建EOS账户的本质是:通过一个已有账户,执行EOS的系统智能合约中的一个创建账户
方法。因此我们要创建账户,必须先有一个EOS账户。执行创建账户合约是需要花费RAM资源的,所以创建账户要给帮你创建账户的人一些钱。
网上说需要2个EOS才能创建账户,太贵了!我通过tokenpocket这个钱包,通过购买激活码的方式,4.9元开通了一个账户。
填写要的账户名后,选择激活码注册
,在给对方支付4.9元后,你会收到一个激活码,填进去,然后点击创建钱包
就能创建成功了。
创建成功后,记得把你的私钥给收藏起来,这是你拥有这个账户的唯一凭证。
查看账户信息
在区块链里,账户的余额都不是秘密,所以我们知道账户名就可以查看任意一个账户的账号余额。
我的:
cleos -u https://mainnet.meet.one:443 get currency balance eosio.token yinmingxuan5
0.0432 EOS
土豪的,好多钱啊:
cleos -u https://mainnet.meet.one:443 get currency balance eosio.token binancecold1
50208884.8429 EOS
如何让自己的EOS代币在主流钱包app里看到
通过上面提到的cloes本身就可以看到代币的数量,但是一般人为了使用方便,都用手机app钱包。所以只要钱包app收录我们的代币就能查看代币信息了,下边举两个例子来说明。
imtoken钱包
如果需要EOS代币可以显示,需要按照imtoken的要求,在github上向他提供一个git pull请求,把资料提交上去等待审核。如果需要显示价格,还需要代币被block.cc收录。
具体请参考:
https://github.com/consenlabs/token-profile/blob/master/tutorial/eos-tutorial.zh-CN.md
tokenpocket钱包
这个钱包几乎所有代币都能显示出来,只是没有审核过的代币被加上了骷髅头的图标。
自己的代币怎么才能在主流交易所上币
创建代币谁都可以,但是想让你的代币上市流通必须让你的代币上交易所流通。
主流交易所上币条件
上币条件除了填写项目资料外,还要交上币费用。下面是网上泄露的上币费用表:
币安20BTC+100BTC保证金;OKEx 0-50万OKB;火币50万HT
可以看到,上币费有几百万的人民币,如火币;也有免费的,如imtoken
;还有畅思交易所
据说对优秀项目免费上币。
下面是收500万上币费的火币网
的上币申请条件,搞的像证监会一样:
去中心的交易所
中心化的交易所,上币费用,交易费用非常昂贵,所以有人希望有去中心的交易所。这种交易所依附与区块链的智能合约来管理,目前这样的交易所有:NEWDEX。官方网站为:https://newdex.io
自建交易所需要考虑的几点
上币麻烦而且贵,如果自己建一个交易网站交易自己的代币就好啦。如果自己建交易所,起码考虑下边的内容:
-
撮合交易引擎
这是交易所最核心的东西。
-
用户充币
交易所本身得有区块链的钱包,用户交易前先将币转入交易所钱包托管,便于交易所撮合交易。
-
提币
用户可将转入交易所内属于自己的币提出到自己的钱包。
-
安全
要保证电子货币的安全,即使被攻击也不能丢币!
-
高并发
结束语
关于自己发行EOS代币必须了解的,最基础的东西我们就先讲这么多了。如果你真希望开发自己的高逼格的智能合约,肯定还需要深入理解EOS原理和才行。欢迎关注我的公众号,然后在公众号内回复“EOS开发”获取《深入理解EOS原理与开发实践》一书。
我的公众号: