如何基於EOS區塊鏈發一個自己的幣,掙它一個億?

那個瘋狂的比特幣,從不足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區塊鏈發一個自己的幣,掙它一個億?


分享到:


相關文章: