ETH geth使用&發行ERC20代幣 草稿
###本文目前是草稿
本文寫作的機緣是參加區塊鏈Hackthon的一個會前賽(應該算會前賽吧XD)
紀錄我建立ERC20代幣的流程
這兩天讀了大量資料,但資料都滿散的
萬一之後忘記,要再重找資料可就很浪費時間了
開發環境:
以太節點:Ubuntu(我的桌電,放在學校)
客戶端:MacOS(筆電)& Windows (家裡的桌電)
以下正文開始
PART 1 : 建立節點
- 安裝geth
sudo add-apt-repository -y ppa:ethereum/ethereum
sudo apt-get update
sudo apt-get install ethereum - 在terminal輸入geth看有沒有安裝成功(之後補圖)
有則打exit退出
- 在Rinkeby測試網上啟動一個節點
geth --rinkeby console --rpc --rpcaddr 0.0.0.0 --ws --wsaddr 0.0.0.0
--rpcaddr 0.0.0.0
是可以用該台電腦ip從外部直接連入,預設port是8545
限定本地端你也可以用
--rpcaddr 127.0.0.1
掛著他會自己同步區塊資料,就給他掛著吧
- 用curl測試Json-RPC API有沒有正確運作
可以在這裡找到API說明
https://github.com/ethereum/wiki/wiki/JSON-RPC#eth_gettransactionbyhash
我先設一個alias,和一個環境變數lc 方便測試
alias gg="curl -X POST -H \"Content-Type: application/json\" --data"
export lc=140.114.78.42:8545
Terminal input:
return:
gg '{"jsonrpc":"2.0","method":"web3_clientVersion","params":[],"id":67}' $lc
{"jsonrpc":"2.0","id":67,"result":"Geth/v1.8.4-stable-2423ae01/linux-amd64/go1.10"}
這個指令會回傳節點的軟體版本,如上述return藍字處
- 接下來創一個錢包,用來領Rinkeby的測試幣
(之後補圖和詳細流程)
PART 2 : 領測試幣,測試Json API
- 到這裡領測試幣
(之後補圖)
- 你需要在fb上po文,內容是你剛剛創的錢包地址,對象設公開
然後把po文網址貼到該網頁中
然後選擇你要領多少,應該領三顆就很夠了(cd 8小時)
- 等待幾分鐘後去etherscan確定我們剛剛從水龍頭領的錢有沒有進來
這是我帳戶的交易頁面https://rinkeby.etherscan.io/address/0x631483d982e724adfdead48e3a1b9475a58ea5b2
你的網址大概像
https://rinkeby.etherscan.io/address/{錢包地址}
- 現在我們要測試我們剛剛用geth的本地節點有沒有同步到那筆水龍頭發出的交易
點進去那筆交易,把etherscan裡面該筆交易的tx_hash複製下來
比如說我要查該筆交易,就用這個指令(params中改成你的交易的tx_hash)
gg '{"jsonrpc":"2.0","method":"eth_getTransactionByHash","params":["0x2d1fedb301caeae3e009d2f76023613459ab10650f09059fde929d87ce7b1f80"],"id":1}' $lc
return:
{"jsonrpc":"2.0","id":1,"result":{"blockHash":"0x40318f5f1f7f20f0aba6f60609d744747b525d4a81b04bc82b33d373c5c376f5","blockNumber":"0x20c6fd","from":"0x31b98d14007bdee637298086988a0bbd31184523","gas":"0x5208","gasPrice":"0x3b9aca00","hash":"0x2d1fedb301caeae3e009d2f76023613459ab10650f09059fde929d87ce7b1f80","input":"0x","nonce":"0x170d8","to":"0x631483d982e724adfdead48e3a1b9475a58ea5b2","transactionIndex":"0x2","value":"0x29a2241af62c0000","v":"0x2b","r":"0x8289dc35ea2b612e397a33af1a303e6bc0acd2aaff007d0ca31ce993accef375","s":"0x26121c36497a89ad944cfef949531be952dcec2bfcbe20787adaeefb8de0bc39"}}
# 裡面value的部分是交易金額,是十六進位表示法,單位是wei
# 0x29a2241af62c0000 = 3.0000000000 ether (剛剛領的測試幣) - 查帳戶餘額
return:
gg '{"jsonrpc":"2.0","method":"eth_getBalance","params":["0x631483d982E724ADfDead48E3a1b9475A58EA5B2", "latest"],"id":4}' $lc
#由於還沒有做任何交易,餘額就還是3.000 ether
{"jsonrpc":"2.0","id":4,"result":"0x29a2241af62c0000"}
接下來我們改用python-web3的api來做剩下的部分
(我個人是比較會寫python,你也可以用web3.js來做,操作方法類似)
PART 3 : 安裝python web3 API,以及solidity編譯器
- 安裝solidity編譯器solc
sudo add-apt-repository -y ppa:ethereum/ethereum
sudo apt-get update
sudo apt-get install solc
- 安裝py-solc
pip install py-solc
- 安裝web3
pip install web3
- 測試web3
(細流待補,內容跟Curl+Json有87%像)
PART 4 : 用python web3 API,發布智能合約
發布合約可以參考web3.py的首頁的examplehttps://github.com/ethereum/web3.py
大概流程是
- 寫合約
- 用solc編譯得byte-code和abi
- 將byte-code和abi用web3.py上傳到測試網路中
(目前製作中)
Comments
Post a Comment