第一次開(kāi)發(fā)EOS區(qū)塊鏈的經(jīng)驗(yàn)

在處理項(xiàng)目時(shí),用Java Connector for EOS區(qū)塊鏈編寫(xiě):

  • 創(chuàng)建錢(qián)包
  • 創(chuàng)建帳戶(hù)
  • 創(chuàng)建交易
  • 創(chuàng)建簽名交易
  • 在帳戶(hù)之間轉(zhuǎn)移代幣

我遇到了各種和運(yùn)行本地EOS節(jié)點(diǎn)需要遵循的基本步驟。這個(gè)小指南純粹是為了幫助你啟動(dòng)和運(yùn)行自己的EOS節(jié)點(diǎn)。幾天的內(nèi)容和圖片匯編了我的閱讀和理解。

本指南不解釋什么是區(qū)塊鏈,這是特定的,以盡快開(kāi)始使用EOS并減少麻煩。純粹基于經(jīng)驗(yàn)。

EOS區(qū)塊鏈概述

EOSIO附帶了許多程序。你將使用的主要部分以及此處涉及的部分是:

  • nodeos(node + eos = nodeos) ,可以使用插件配置以運(yùn)行節(jié)點(diǎn)的核心EOSIO節(jié)點(diǎn)守護(hù)程序。示例用法是塊生產(chǎn),專(zhuān)用API端點(diǎn)和本地開(kāi)發(fā)。
  • cleos(cli + eos = cleos) ,命令行界面,用于與區(qū)塊鏈交互并管理錢(qián)包。
  • keosd(key + eos = keosd) ,將EOSIO密鑰安全存儲(chǔ)在錢(qián)包中的組件。
  • eosio-cpp(eosio.cdt的一部分) ,它將C ++代碼編譯為WASM并可以生成ABI(CDT是合約開(kāi)發(fā)工具鏈)。

這些組件之間的基本關(guān)系如下圖所示。

image

最新堆棧版本(截至本文編寫(xiě)日)

  • nodeos:1.5.0
  • cleos:1.5.0
  • keosd:1.5.0
  • eosio.cdt:1.4.1
  • eosio.contracts:1.4.0

安裝本地節(jié)點(diǎn)

有幾種方法可以做到:

  • 1.使用Docker,快速簡(jiǎn)便。
  • 2.使用二進(jìn)制文件,它也行。

使用Docker安裝

You create 2 containers. One for 'nodeos' and another for 'keosd'
#Pull latest docker image of EOS
docker pull eosio/eos-dev
#Create local network
docker network create eosdev
#Start nodeos(Core Daemon)
docker run --name nodeos -d -p 8888:8888 --network eosdev -v /tmp/eosio/work:/work \
-v /tmp/eosio/data:/mnt/dev/data -v /tmp/eosio/config:/mnt/dev/config eosio/eos-dev \
/bin/bash -c "nodeos -e -p eosio --plugin eosio::producer_plugin \
--plugin eosio::history_plugin --plugin eosio::chain_api_plugin \
--plugin eosio::history_api_plugin --plugin eosio::http_plugin \
-d /mnt/dev/data --config-dir /mnt/dev/config --http-server-address=0.0.0.0:8888 \
--access-control-allow-origin=* --contracts-console --http-validate-host=false"
###### NOTES about above Command
- Creating a docker container running 'nodeos' daemon
- Exposing port 8888 so that you can access the 'nodeos' using RPC and HTTP
- Mounting few directories on your local machine so that you don't have to login into container
- Few plugins which will allow this node to become a producer, expose rpc api over http, exposing command line interface to run 'nodeos' commands
#Run keosd(Wallet and Keystore)
docker run -d --name keosd --network=eosdev -i eosio/eos-dev /bin/bash \
-c "keosd --http-server-address=0.0.0.0:9876"
#Check installation
docker logs --tail 10 nodeos
and you will see something like:
info 2018-12-04T15:01:22.003 thread-0 producer_plugin.cpp:1494 produce_block ] Produced block 00005ce7fabcbcf8... #23783 @ 2018-12-04T15:01:22.000 signed by eosio [trxs: 0, lib: 23782, confirmed: 0]
info 2018-12-04T15:01:22.507 thread-0 producer_plugin.cpp:1494 produce_block ] Produced block 00005ce84867bcbf... #23784 @ 2018-12-04T15:01:22.500 signed by eosio [trxs: 0, lib: 23783, confirmed: 0]
info 2018-12-04T15:01:23.005 thread-0 producer_plugin.cpp:1494 produce_block ] Produced block 00005ce936ca4869... #23785 @ 2018-12-04T15:01:23.000 signed by eosio [trxs: 0, lib: 23784, confirmed: 0]
i
#Check Wallets (Open bash for keosd)
docker exec -it keosd bash
and once in the container, on bash, execute this:
cleos --wallet-url http://127.0.0.1:9876 wallet list keys

Should show empty wallets:
Wallets: []
#Check 'nodeos' end points - run this out side containers
curl http://localhost:8888/v1/chain/get_info

{
   "server_version":"549c96cd",
   "chain_id":"cf057bbfb72640471fd910bcb67639c22df9f92470936cddc1ade0e2f2e7dc4f",
   "head_block_num":24182,
   "last_irreversible_block_num":24181,
   "last_irreversible_block_id":"00005e751a1e31b15acd25ffc8725cb2c67926647edb89e726e386716afdef5d",
   "head_block_id":"00005e76fd035dbf694d2a575bb1849f436428b466fd95323e43619b73bf7b9d",
   "head_block_time":"2018-12-04T15:04:41.500",
   "head_block_producer":"eosio",
   "virtual_block_cpu_limit":200000000,
   "virtual_block_net_limit":1048576000,
   "block_cpu_limit":199900,
   "block_net_limit":1048576,
   "server_version_string":"v1.5.0-rc2"
}
#Alias cleos so that you can access it by simply 'cleos'
docker network inspect eosdev

check for keosd IP address in the response of above command and execute the following:

alias cleos='docker exec -it nodeos /opt/eosio/bin/cleos --url http://127.0.0.1:8888 --wallet-url http://172.18.0.3:9876'

使用二進(jìn)制文件安裝 - MAC指令

#Step 1: Install binaries
brew tap eosio/eosio
brew install eosio
#Step 2: Setup a development directory, stick to it.
mkdir contracts
cd contracts
#Step 3: Install CDT. The EOSIO Contract Development Toolkit, CDT for short
brew tap eosio/eosio.cdt
brew install eosio.cdt
#Boot Node and Wallet
  #Start keosd: keosd &
  #Start nodeos:
   nodeos -e -p eosio \
--plugin eosio::producer_plugin --plugin eosio::chain_api_plugin --plugin eosio::http_plugin --plugin eosio::history_plugin --plugin eosio::history_api_plugin \
-d /Users/vijay/eos_blockchain/contracts/eosio/data \
--config-dir /Users/vijay/eos_blockchain/contracts/eosio/config \
'--access-control-allow-origin=*' --contracts-console 
--http-validate-host=false '--filter-on=*' >> nodeos.log 2>&1 &
 #Check installation (in current directory)
 tail -f nodeos.log
 #Check the wallet
 cleos wallet list
 #Check nodeos endpoints
 curl http://localhost:8888/v1/chain/get_info

上述步驟之一將幫助你設(shè)置和運(yùn)行本地節(jié)點(diǎn)。

使用錢(qián)包,帳戶(hù)和密鑰

現(xiàn)在你準(zhǔn)備好在區(qū)塊鏈上做一些事情。在EOS中,你必須擁有一個(gè)帳戶(hù)才能執(zhí)行任何操作,例如創(chuàng)建token,發(fā)送token,接收token,編寫(xiě)交易等。此節(jié)點(diǎn)將有一個(gè)名為eosio的系統(tǒng)用戶(hù),因此你可以使用此用戶(hù)來(lái)玩eos區(qū)塊鏈。

因此,在本節(jié)中,我們將在本地節(jié)點(diǎn)上執(zhí)行以下操作:

  • 創(chuàng)建一個(gè)新錢(qián)包。
  • 創(chuàng)建新密鑰(私人+公共)。
  • 將這些鑰匙導(dǎo)入錢(qián)包。
  • 建立新帳戶(hù)。

讓我們運(yùn)行一些命令并觀察你所看到的。只需閱讀所有命令的注釋?zhuān)纯闪私馑鼈兊淖饔谩?/p>

#List existing wallets. Wallet stores keys
cleos wallet list
#List wallet keys if any
cleos wallet list key
#you should see all empty response
#create wallet now
cleos wallet create
Creating wallet: default
"PW5JYR5u7WTk6RaJARE41qb3Wy6BJtcKCjpDAyjR2uV3CWF8nDFe7"
this will create wallet with name 'default'. Keep note of password it returns.
#Create new keys
cleos create key --to-console
Private key: 5JseP8pEsJfAEWix5U6ow77TrKu2uuBhjfobyzgYyCYAtnxnCk8
Public key: EOS4tmc8ufENZNkFQaj8ZfV9UfeRLnyaCecybSgPS1U8671BNdSxD
#Import the private keys in wallet 
cleos wallet import -n quant --private-key 5JseP8pEsJfAEWix5U6ow77TrKu2uuBhjfobyzgYyCYAtnxnCk8
#### MOST IMPORTANT STEP ####
Import genesis 'eosio' account keys in the wallet so that eosio account is available for creating new accounts.
Private key of eosio: 5KQwrPbwdL6PhXujxW37FSSQZ1JiwsST4cqQzDeyXtP79zkvFD3

在這個(gè)階段,你已準(zhǔn)備好帶有eosio(創(chuàng)世紀(jì)帳戶(hù))的錢(qián)包和導(dǎo)入的新密鑰。所以我們現(xiàn)在準(zhǔn)備好做更多的操作了。

我們將在下一節(jié)中執(zhí)行以下操作:

  • 部署token合約,以便區(qū)塊鏈準(zhǔn)備好創(chuàng)建新的token。
  • 創(chuàng)建新token。
  • 將新token分配給創(chuàng)世帳戶(hù)(eosio)。
  • 在用戶(hù)之間轉(zhuǎn)移token。
  • 檢查余額等。
#Deploy Token Contacts
 
create an account first with the name 'eosio.token' for the contract
cleos create account <owner> <newaccountname> <pubkey1> <pubkey2>
cleos create account eosio eosio.token EOS5ySgzeHp9G7TqNDGpyzaCtahAeRcTvPRPJbFey5CmySL3vKYgE EOS5ySgzeHp9G7TqNDGpyzaCtahAeRcTvPRPJbFey5CmySL3vKYgE
you would see something like this:
executed transaction: 4a8b53ae6fa5e22ded33b50079e45550e39f3cb72ffa628e771ea21758844039  200 bytes  339 us #         eosio <= eosio::newaccount            {"creator":"eosio","name":"eosio.token","owner":{"threshold":1,"keys":[{"key":"EOS5ySgzeHp9G7TqNDGpy...
Deploy contract now:
cleos set contract eosio.token <path-to-contracts-directory>/contracts/eosio.token -p eosio.token
you would see something like this:
Reading WAST/WASM from /opt/eosio/bin/data-dir/contracts/eosio.token/eosio.token.wasm... Using already assembled WASM... Publishing contract... executed transaction: 41677b5fd5c701ca67a153abb09f79c04085cc51a9d021436e7ee5afda1781bd  8048 bytes  1212 us #         eosio <= eosio::setcode               {"account":"eosio.token","vmtype":0,"vmversion":0,"code":"0061736d01000000017f1560037f7e7f0060057f7e... #         eosio <= eosio::setabi                {"account":"eosio.token","abi":"0e656f73696f3a3a6162692f312e30010c6163636f756e745f6e616d65046e616d65...
#Create new Token
cleos push action eosio.token create '["eosio", "10000000000.0000 EOS",0,0,0]' -p eosio.token
you would see like this:
executed transaction: 566693cba0b0d5d11d85e40cdfb095d525612c5915e17ce75d309054e1912235  120 bytes  552 us #   eosio.token <= eosio.token::create          {"issuer":"eosio","maximum_supply":"10000000000.0000 EOS"}
#Send newly created Tokens (EOS) to genesis account (eosio)
cleos push action eosio.token issue '["eosio","1000000000.0000 EOS", "issue"]' -p eosio
you would see something like this:
executed transaction: 73f72879d220c720fcefb16b6aaf3db0ba492bd62020853b2cd5051557d5fa87  128 bytes  677 us #   eosio.token <= eosio.token::issue           {"to":"eosio","quantity":"1000000000.0000 EOS","memo":"issue"}
#Check above transactions if they are completed
cleos get transaction 73f72879d220c720fcefb16b6aaf3db0ba492bd62020853b2cd5051557d5fa87
and
cleos get transaction 566693cba0b0d5d11d85e40cdfb095d525612c5915e17ce75d309054e1912235
you should have long JSON response. It simply means above steps are successful.
#Check balance now of eosio account
cleos get currency balance eosio.token eosio
you would see:
1000000000.0000 EOS

你去了,現(xiàn)在你已經(jīng)創(chuàng)建了token,eosio帳戶(hù)有很多EOS token,他現(xiàn)在可以輕松地將資金發(fā)送到其他帳戶(hù)。

#Create a new account
cleos create account eosio user1 <public_key_of_user1> <public_key_of_user1>
#Check if account is created. You should have json response
cleos get account user1
#Send money to user1 account
cleos transfer eosio user1 "1000.00 EOS"
#Check the balance of user1
cleos get currency balance eosio.token vijay1

僅此而已!

======================================================================

分享一些EOS、以太坊、比特幣等區(qū)塊鏈相關(guān)的交互式在線(xiàn)編程實(shí)戰(zhàn)教程:

  • EOS教程,本課程幫助你快速入門(mén)EOS區(qū)塊鏈去中心化應(yīng)用的開(kāi)發(fā),內(nèi)容涵蓋EOS工具鏈、賬戶(hù)與錢(qián)包、發(fā)行代幣、智能合約開(kāi)發(fā)與部署、使用代碼與智能合約交互等核心知識(shí)點(diǎn),最后綜合運(yùn)用各知識(shí)點(diǎn)完成一個(gè)便簽DApp的開(kāi)發(fā)。
  • 深入淺出玩轉(zhuǎn)EOS錢(qián)包開(kāi)發(fā),本課程以手機(jī)EOS錢(qián)包的完整開(kāi)發(fā)過(guò)程為主線(xiàn),深入學(xué)習(xí)EOS區(qū)塊鏈應(yīng)用開(kāi)發(fā),課程內(nèi)容即涵蓋賬戶(hù)、計(jì)算資源、智能合約、動(dòng)作與交易等EOS區(qū)塊鏈的核心概念,同時(shí)也講解如何使用eosjs和eosjs-ecc開(kāi)發(fā)包訪(fǎng)問(wèn)EOS區(qū)塊鏈,以及如何在React前端應(yīng)用中集成對(duì)EOS區(qū)塊鏈的支持。課程內(nèi)容深入淺出,非常適合前端工程師深入學(xué)習(xí)EOS區(qū)塊鏈應(yīng)用開(kāi)發(fā)。
  • java以太坊開(kāi)發(fā)教程,主要是針對(duì)java和android程序員進(jìn)行區(qū)塊鏈以太坊開(kāi)發(fā)的web3j詳解。
  • php以太坊,主要是介紹使用php進(jìn)行智能合約開(kāi)發(fā)交互,進(jìn)行賬號(hào)創(chuàng)建、交易、轉(zhuǎn)賬、代幣開(kāi)發(fā)以及過(guò)濾器和交易等內(nèi)容。
  • python以太坊,主要是針對(duì)python工程師使用web3.py進(jìn)行區(qū)塊鏈以太坊開(kāi)發(fā)的詳解。
  • 以太坊入門(mén)教程,主要介紹智能合約與dapp應(yīng)用開(kāi)發(fā),適合入門(mén)。
  • 以太坊開(kāi)發(fā)進(jìn)階教程,主要是介紹使用node.js、mongodb、區(qū)塊鏈、ipfs實(shí)現(xiàn)去中心化電商DApp實(shí)戰(zhàn),適合進(jìn)階。
  • ERC721以太坊通證實(shí)戰(zhàn),課程以一個(gè)數(shù)字藝術(shù)品創(chuàng)作與分享DApp的實(shí)戰(zhàn)開(kāi)發(fā)為主線(xiàn),深入講解以太坊非同質(zhì)化通證的概念、標(biāo)準(zhǔn)與開(kāi)發(fā)方案。內(nèi)容包含ERC-721標(biāo)準(zhǔn)的自主實(shí)現(xiàn),講解OpenZeppelin合約代碼庫(kù)二次開(kāi)發(fā),實(shí)戰(zhàn)項(xiàng)目采用Truffle,IPFS,實(shí)現(xiàn)了通證以及去中心化的通證交易所。
  • C#以太坊,主要講解如何使用C#開(kāi)發(fā)基于.Net的以太坊應(yīng)用,包括賬戶(hù)管理、狀態(tài)與交易、智能合約開(kāi)發(fā)與交互、過(guò)濾器和交易等。
  • java比特幣開(kāi)發(fā)教程,本課程面向初學(xué)者,內(nèi)容即涵蓋比特幣的核心概念,例如區(qū)塊鏈存儲(chǔ)、去中心化共識(shí)機(jī)制、密鑰與腳本、交易與UTXO等,同時(shí)也詳細(xì)講解如何在Java代碼中集成比特幣支持功能,例如創(chuàng)建地址、管理錢(qián)包、構(gòu)造裸交易等,是Java工程師不可多得的比特幣開(kāi)發(fā)學(xué)習(xí)課程。
  • php比特幣開(kāi)發(fā)教程,本課程面向初學(xué)者,內(nèi)容即涵蓋比特幣的核心概念,例如區(qū)塊鏈存儲(chǔ)、去中心化共識(shí)機(jī)制、密鑰與腳本、交易與UTXO等,同時(shí)也詳細(xì)講解如何在Php代碼中集成比特幣支持功能,例如創(chuàng)建地址、管理錢(qián)包、構(gòu)造裸交易等,是Php工程師不可多得的比特幣開(kāi)發(fā)學(xué)習(xí)課程。
  • c#比特幣開(kāi)發(fā)教程,本課程面向初學(xué)者,內(nèi)容即涵蓋比特幣的核心概念,例如區(qū)塊鏈存儲(chǔ)、去中心化共識(shí)機(jī)制、密鑰與腳本、交易與UTXO等,同時(shí)也詳細(xì)講解如何在C#代碼中集成比特幣支持功能,例如創(chuàng)建地址、管理錢(qián)包、構(gòu)造裸交易等,是C#工程師不可多得的比特幣開(kāi)發(fā)學(xué)習(xí)課程。
  • tendermint區(qū)塊鏈開(kāi)發(fā)詳解,本課程適合希望使用tendermint進(jìn)行區(qū)塊鏈開(kāi)發(fā)的工程師,課程內(nèi)容即包括tendermint應(yīng)用開(kāi)發(fā)模型中的核心概念,例如ABCI接口、默克爾樹(shù)、多版本狀態(tài)庫(kù)等,也包括代幣發(fā)行等豐富的實(shí)操代碼,是go語(yǔ)言工程師快速入門(mén)區(qū)塊鏈開(kāi)發(fā)的最佳選擇。
  • Hyperledger Fabric 區(qū)塊鏈開(kāi)發(fā)詳解,本課程面向初學(xué)者,內(nèi)容即包含Hyperledger Fabric的身份證書(shū)與MSP服務(wù)、權(quán)限策略、通道配置與啟動(dòng)、鏈碼通信接口等核心概念,也包含F(xiàn)abric網(wǎng)絡(luò)設(shè)計(jì)、nodejs鏈碼與應(yīng)用開(kāi)發(fā)的操作實(shí)踐,是Nodejs工程師學(xué)習(xí)Fabric區(qū)塊鏈開(kāi)發(fā)的最佳選擇。
  • Hyperledger Fabric java 區(qū)塊鏈開(kāi)發(fā)詳解,課程面向初學(xué)者,內(nèi)容即包含Hyperledger Fabric的身份證書(shū)與MSP服務(wù)、權(quán)限策略、頻道配置與啟動(dòng)、鏈碼通信接口等核心概念,也包含F(xiàn)abric網(wǎng)絡(luò)設(shè)計(jì)、java鏈碼與應(yīng)用開(kāi)發(fā)的操作實(shí)踐,是java工程師學(xué)習(xí)Fabric區(qū)塊鏈開(kāi)發(fā)的最佳選擇。

匯智網(wǎng)原創(chuàng)翻譯,轉(zhuǎn)載請(qǐng)標(biāo)明出處。這里是第一次開(kāi)發(fā)EOS區(qū)塊鏈的經(jīng)驗(yàn)

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容