如何基于EOS区块链发一个自己的币,挣它一个亿?

世界        2019-08-18   来源:宝贝开饭喽
那个疯狂的比特币,从不足1美分到19000美元,涨了2600万倍,涨得令世人怀疑人生。为什么涨得这么疯狂?最根本的原因是它提出了区块链的技术。巨大的财富效应导致如今各种区块链项目像蚂蚁一样层出不穷。其中为首的当属比特币、以太坊、EOS最热门。我在想,如果自己也在淘宝请人写一个区块链白皮书,在百度上搜索几个欧美成熟男士然后给他贴上哈佛大学,麻省理工大学高级教授的标签,然后在EOS上发行一个EGC(EggCoint)币,发行个一万亿, 然后上街就给人送几万个EGG,那该是什么样的情景。。。如果你也觉得好玩,那就和我一起来了解一下自己发行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资源,购买型资源;
  • RAM是损耗型的资源,需要用EOS来购买。一些操作(如创建合约,创建账号)需要足够的RAM才能被执行。执行需要RAM的操作后,RAM被扣除损耗掉了,但剩余没用完的RAM资源你可以拿去卖给别人。
  • 这种机制导致有人囤货炒作,导致EOS RAM的价格暴涨,但相比以太坊也还是便宜一些。
  • CPU和网络带宽,抵押型资源。
  • CPU和网络带宽资源可以通过抵押你的EOS币来获得,当你不再使用时,可以全部赎回来,相当于没花钱。

下边是我的EOS钱包中显示的资源情况:

如何基于EOS区块链发一个自己的币,挣它一个亿?

EOS的安装使用

测试环境

推荐采用ubuntu 18.04版本linux操作系统。

软件的安装

EOS是开源的,可以从github上下载源码并编译,但是为了快速了解,下载安装即可。

1#下载
2wget https://github.com/EOSIO/eos/releases/download/v1.7.2/eosio_1.7.2-1-ubuntu-18.04_amd64.deb
3
4#安装
5sudo 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

EOS安装好后,我们主要了解nodeos keosd cleos这三个可执行程序即可。

如何基于EOS区块链发一个自己的币,挣它一个亿?

  • 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查询我主网上的账号的金额,把详细过程打印出来:

 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本质上其实就是一个HTTP的客户端而已。

理解EOS主网、测试网、本地测试网

  • EOS主网
  • 因特网上真实的EOS网络,chain_id为:

aca376f206b8fc25a6ed44dbdc66547c36c6c33e3a119ffbeaef943642f0e906

  • EOS测试网
  • 由于EOS主网创建账户和部署合约都需要花钱,所以不适合测试用。EOS提供了公网环境的EOS测试网络,它的EOS币是可免费领取的,网络与主网没有任何差异,只是chain_id不同。

目前英特网上有多个EOS测试网可用。

  • 本地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


输出:

1200.0000 EGG


可以看到,我转的200个蛋币,已经转账成功!

如何创建真实的EOS主网账户

创建EOS账户的本质是:通过一个已有账户,执行EOS的系统智能合约中的一个创建账户方法。因此我们要创建账户,必须先有一个EOS账户。执行创建账户合约是需要花费RAM资源的,所以创建账户要给帮你创建账户的人一些钱。

网上说需要2个EOS才能创建账户,太贵了!我通过tokenpocket这个钱包,通过购买激活码的方式,4.9元开通了一个账户。

如何基于EOS区块链发一个自己的币,挣它一个亿?

填写要的账户名后,选择激活码注册,在给对方支付4.9元后,你会收到一个激活码,填进去,然后点击创建钱包就能创建成功了。

如何基于EOS区块链发一个自己的币,挣它一个亿?

创建成功后,记得把你的私钥给收藏起来并不能告诉别人,这是你拥有并控制这个账户的唯一凭证。

查看账户信息

在区块链里,账户的余额都不是秘密,所以我们知道账户名就可以查看任意一个账户的账号余额。

我的:

cleos -u https://mainnet.meet.one:443 get currency balance eosio.token yinmingxuan5

30.0432 EOS

土豪的,好多钱啊:

cleos -u https://mainnet.meet.one:443 get currency balance eosio.token binancecold1

350208884.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钱包

这个钱包几乎所有代币都能显示出来,只是没有审核过的代币被加上了骷髅头的图标。


如何基于EOS区块链发一个自己的币,挣它一个亿?

自己的代币怎么才能在主流交易所上币

创建代币谁都可以,但是想让你的代币上市流通必须让你的代币在交易所流通,也就是上币

主流交易所上币条件

上币条件除了填写项目资料外,还要交上币费用。下面是网上泄露的上币费用表:

币安20BTC+100BTC保证金;OKEx 0-50万OKB;火币50万HT

如何基于EOS区块链发一个自己的币,挣它一个亿?

可以看到,上币费有几百万人民币的,如火币,这都是土豪才能玩呀;也有免费的,如imtoken;还有畅思交易所据说对优秀项目免费上币。

下面是收500万上币费的火币网的上币申请条件,搞的像证监会一样:

如何基于EOS区块链发一个自己的币,挣它一个亿?

去中心的交易所

中心化的交易所,上币费用,交易费用非常昂贵,所以有人希望有去中心的交易所。这种交易所依附与区块链的智能合约来管理,目前这样的交易所有:NEWDEX。官方网站为:https://newdex.io

自建交易所需要考虑的几点

上币麻烦而且贵,如果自己建一个交易网站交易自己的代币就好啦。如果自己建交易所,起码考虑下边几点:

  • 撮合交易引擎
  • 这是交易所最核心的东西。
  • 用户充币
  • 交易所本身得拥有区块链的钱包,用户交易前先将币转入交易所钱包托管,便于交易所撮合交易。
  • 用户提币
  • 用户可将转入交易所内属于自己的币提出到自己的钱包。
  • 安全
  • 要保证数字货币的安全,即使被攻击也不能丢币!
  • 高并发

结束语

关于自己发行EOS代币必须了解的,最基础的东西我们就先讲这么多了。如果你真想开发自己的高逼格的智能合约,肯定还需要深入理解EOS原理才行。欢迎关注我们的同名微信公众号“麻辣软硬件”,然后在公众号内回复“EOS开发”获取《深入理解EOS原理与开发实践》一书,这书还不错哦。

如何基于EOS区块链发一个自己的币,挣它一个亿?