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

那个疯狂的比特币,从不足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钱包中显示的资源情况:

1556415243555

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

EOSIO Architecture

  • 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钱包

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

1556272214573

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

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

主流交易所上币条件

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

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

在这里插入图片描述

可以看到,上币费有几百万的人民币,如火币;也有免费的,如imtoken;还有畅思交易所据说对优秀项目免费上币。

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

1556270670479

去中心的交易所

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

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

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

  • 撮合交易引擎

    这是交易所最核心的东西。

  • 用户充币

    交易所本身得有区块链的钱包,用户交易前先将币转入交易所钱包托管,便于交易所撮合交易。

  • 提币

    用户可将转入交易所内属于自己的币提出到自己的钱包。

  • 安全

    要保证电子货币的安全,即使被攻击也不能丢币!

  • 高并发

结束语

关于自己发行EOS代币必须了解的,最基础的东西我们就先讲这么多了。如果你真希望开发自己的高逼格的智能合约,肯定还需要深入理解EOS原理和才行。欢迎关注我的公众号,然后在公众号内回复“EOS开发”获取《深入理解EOS原理与开发实践》一书。
在这里插入图片描述我的公众号:
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/yinmingxuan/article/details/89531435