第一次開發EOS區塊鏈的經驗
阿新 • • 發佈:2019-05-12
多版本 localhost cpp 部署 vat 12c 實戰 date cdt 在處理項目時,用Java Connector for EOS區塊鏈編寫:
- 創建錢包
- 創建帳戶
- 創建交易
- 創建簽名交易
- 在帳戶之間轉移代幣
我遇到了各種和運行本地EOS節點需要遵循的基本步驟。這個小指南純粹是為了幫助你啟動和運行自己的EOS節點。幾天的內容和圖片匯編了我的閱讀和理解。
本指南不解釋什麽是區塊鏈,這是特定的,以盡快開始使用EOS並減少麻煩。純粹基於經驗。
EOS區塊鏈概述
EOSIO附帶了許多程序。你將使用的主要部分以及此處涉及的部分是:
- nodeos(node + eos = nodeos) ,可以使用插件配置以運行節點的核心EOSIO節點守護程序。示例用法是塊生產,專用API端點和本地開發。
- cleos(cli + eos = cleos) ,命令行界面,用於與區塊鏈交互並管理錢包。
- keosd(key + eos = keosd) ,將EOSIO密鑰安全存儲在錢包中的組件。
- eosio-cpp(eosio.cdt的一部分) ,它將C ++代碼編譯為WASM並可以生成ABI(CDT是合約開發工具鏈)。
這些組件之間的基本關系如下圖所示。
最新堆棧版本(截至本文編寫日)
- nodeos:1.5.0
- cleos:1.5.0
- keosd:1.5.0
- eosio.cdt:1.4.1
- eosio.contracts:1.4.0
安裝本地節點
有幾種方法可以做到:
- 1.使用Docker,快速簡便。
- 2.使用二進制文件,它也行。
使用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‘
使用二進制文件安裝 - 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
上述步驟之一將幫助你設置和運行本地節點。
使用錢包,帳戶和密鑰
現在你準備好在區塊鏈上做一些事情。在EOS中,你必須擁有一個帳戶才能執行任何操作,例如創建token,發送token,接收token,編寫交易等。此節點將有一個名為eosio
的系統用戶,因此你可以使用此用戶來玩eos區塊鏈。
因此,在本節中,我們將在本地節點上執行以下操作:
- 創建一個新錢包。
- 創建新密鑰(私人+公共)。
- 將這些鑰匙導入錢包。
- 建立新帳戶。
讓我們運行一些命令並觀察你所看到的。只需閱讀所有命令的註釋,即可了解它們的作用。
#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
在這個階段,你已準備好帶有eosio
(創世紀帳戶)的錢包和導入的新密鑰。所以我們現在準備好做更多的操作了。
我們將在下一節中執行以下操作:
- 部署token合約,以便區塊鏈準備好創建新的token。
- 創建新token。
- 將新token分配給創世帳戶(eosio)。
- 在用戶之間轉移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
你去了,現在你已經創建了token,eosio
帳戶有很多EOS token,他現在可以輕松地將資金發送到其他帳戶。
#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、以太坊、比特幣等區塊鏈相關的交互式在線編程實戰教程:
- EOS教程,本課程幫助你快速入門EOS區塊鏈去中心化應用的開發,內容涵蓋EOS工具鏈、賬戶與錢包、發行代幣、智能合約開發與部署、使用代碼與智能合約交互等核心知識點,最後綜合運用各知識點完成一個便簽DApp的開發。
- 深入淺出玩轉EOS錢包開發,本課程以手機EOS錢包的完整開發過程為主線,深入學習EOS區塊鏈應用開發,課程內容即涵蓋賬戶、計算資源、智能合約、動作與交易等EOS區塊鏈的核心概念,同時也講解如何使用eosjs和eosjs-ecc開發包訪問EOS區塊鏈,以及如何在React前端應用中集成對EOS區塊鏈的支持。課程內容深入淺出,非常適合前端工程師深入學習EOS區塊鏈應用開發。
- java以太坊開發教程,主要是針對java和android程序員進行區塊鏈以太坊開發的web3j詳解。
- php以太坊,主要是介紹使用php進行智能合約開發交互,進行賬號創建、交易、轉賬、代幣開發以及過濾器和交易等內容。
- python以太坊,主要是針對python工程師使用web3.py進行區塊鏈以太坊開發的詳解。
- 以太坊入門教程,主要介紹智能合約與dapp應用開發,適合入門。
- 以太坊開發進階教程,主要是介紹使用node.js、mongodb、區塊鏈、ipfs實現去中心化電商DApp實戰,適合進階。
- ERC721以太坊通證實戰,課程以一個數字藝術品創作與分享DApp的實戰開發為主線,深入講解以太坊非同質化通證的概念、標準與開發方案。內容包含ERC-721標準的自主實現,講解OpenZeppelin合約代碼庫二次開發,實戰項目采用Truffle,IPFS,實現了通證以及去中心化的通證交易所。
- C#以太坊,主要講解如何使用C#開發基於.Net的以太坊應用,包括賬戶管理、狀態與交易、智能合約開發與交互、過濾器和交易等。
- java比特幣開發教程,本課程面向初學者,內容即涵蓋比特幣的核心概念,例如區塊鏈存儲、去中心化共識機制、密鑰與腳本、交易與UTXO等,同時也詳細講解如何在Java代碼中集成比特幣支持功能,例如創建地址、管理錢包、構造裸交易等,是Java工程師不可多得的比特幣開發學習課程。
- php比特幣開發教程,本課程面向初學者,內容即涵蓋比特幣的核心概念,例如區塊鏈存儲、去中心化共識機制、密鑰與腳本、交易與UTXO等,同時也詳細講解如何在Php代碼中集成比特幣支持功能,例如創建地址、管理錢包、構造裸交易等,是Php工程師不可多得的比特幣開發學習課程。
- c#比特幣開發教程,本課程面向初學者,內容即涵蓋比特幣的核心概念,例如區塊鏈存儲、去中心化共識機制、密鑰與腳本、交易與UTXO等,同時也詳細講解如何在C#代碼中集成比特幣支持功能,例如創建地址、管理錢包、構造裸交易等,是C#工程師不可多得的比特幣開發學習課程。
- tendermint區塊鏈開發詳解,本課程適合希望使用tendermint進行區塊鏈開發的工程師,課程內容即包括tendermint應用開發模型中的核心概念,例如ABCI接口、默克爾樹、多版本狀態庫等,也包括代幣發行等豐富的實操代碼,是go語言工程師快速入門區塊鏈開發的最佳選擇。
- Hyperledger Fabric 區塊鏈開發詳解,本課程面向初學者,內容即包含Hyperledger Fabric的×××書與MSP服務、權限策略、通道配置與啟動、鏈碼通信接口等核心概念,也包含Fabric網絡設計、nodejs鏈碼與應用開發的操作實踐,是Nodejs工程師學習Fabric區塊鏈開發的最佳選擇。
- Hyperledger Fabric java 區塊鏈開發詳解,課程面向初學者,內容即包含Hyperledger Fabric的×××書與MSP服務、權限策略、頻道配置與啟動、鏈碼通信接口等核心概念,也包含Fabric網絡設計、java鏈碼與應用開發的操作實踐,是java工程師學習Fabric區塊鏈開發的最佳選擇。
匯智網原創翻譯,轉載請標明出處。這裏是第一次開發EOS區塊鏈的經驗
第一次開發EOS區塊鏈的經驗