CyberMiles x Hackathon Taiwan Workshop 心得分享

Chieh-Wen Yang
CyberMiles Developers Group
12 min readDec 26, 2018

這兩週工作上出了點狀況,拖了兩個禮拜終於有時間可以來寫寫心得,趁著還有記憶的時候。@@”

這次活動是由 CyberMiles Developers GroupHackathon Taiwan卡市達創業加油站 共同為開發者舉辦的工作坊活動,地點在卡市達創業加油站圓山基地,也是過去 Hackathon Taiwan 每月辦活動的地方。

開場時主要是由 CyberMiles 的 Director — Alex Lau 開場,主要是介紹 CyberMiles 及鏈圈的現況,我也好好地更新了一下幣圈和鏈圈的八卦,這部分就不寫上來了。xDDD

上圖為活動時所拍的照片(左圖為 Alex Lau、右圖為 Wesley Tsai)

這次工作坊主要有兩位講師 Wesley Tsai 和 Ca Chen,分別負責上半場及下半場。上半場主要是介紹 TestNet Node 和 Metamask,下半場主要是介紹 DApp 與 Truffle 框架。

Wesley 講師簡報 https://bit.ly/2ULXP4S

Ca Chen 講師簡報 https://bit.ly/2PzYbaF

要接入 Travis 的 P2P 網路有兩種方式,第一種方式比較簡單,是透過 Travis 的 Docker 直接接入:

$ mkdir travis

初始化 Travis client:

$ docker run — rm -v travis:/travis cybermiles/travis node init — home /travisWARN [12–12|23:17:15.205] The travis database already exists!
INFO [12–12|23:17:15.206] Allocated cache and file handles database=/travis/vm/chaindata cache=16 handles=16
INFO [12–12|23:17:15.217] Persisted trie from memory database nodes=3 size=423.00B time=50µs gcnodes=0 gcsize=0.00B gctime=0s livenodes=1 livesize=0.00B
INFO [12–12|23:17:15.217] successfully wrote genesis block and/or chain rule set hash=131599…ff6994

看到 successfully wrote genesis block and/or chain rule 代表已經成功初始化了。

接著我們把剛才初始化好的 travis client 接入 TestNode:

$ docker run — name travis -v travis:/travis -t -p 26657:26657 -p 8545:8545 cybermiles/travis node start — home /travisINFO [12–12|23:19:20.805] Maximum peer count ETH=25 LES=0 total=25
INFO [12–12|23:19:20.807] Starting peer-to-peer node instance=vm/v1.8.12-stable/linux-amd64/go1.10.3
INFO [12–12|23:19:20.807] Allocated cache and file handles database=/travis/vm/chaindata cache=768 handles=1024
INFO [12–12|23:19:20.827] Initialised chain configuration config=”{ChainID: 1234 Homestead: 0 DAO: <nil> DAOSupport: false EIP150: <nil> EIP155: 0 EIP158: 0 Byzantium: 0 Constantinople: <nil> Engine: unknown}”
WARN [12–12|23:19:20.827] Ethash used in fake mode
INFO [12–12|23:19:20.827] Initialising Ethereum protocol versions=”[63 62]” network=1234
INFO [12–12|23:19:20.829] Loaded most recent local header number=0 hash=131599…ff6994 td=64
INFO [12–12|23:19:20.829] Loaded most recent local full block number=0 hash=131599…ff6994 td=64
INFO [12–12|23:19:20.829] Loaded most recent local fast block number=0 hash=131599…ff6994 td=64
INFO [12–12|23:19:20.829] Regenerated local transaction journal transactions=0 accounts=0
INFO [12–12|23:19:20.830] Starting P2P networking
INFO [12–12|23:19:20.831] RLPx listener up self=”enode://74afb09d12d79eba756a55ec59b24f784923d78e2c6276def148da208fcc7fcdeb0ec3205dfe374722aa39c76ceb3d0819009162d7cb8e1f28bfedd6b36ebf08@[::]:30333?discport=0"
INFO [12–12|23:19:20.835] IPC endpoint opened url=/travis/cybermiles.ipc
INFO [12–12|23:19:20.835] HTTP endpoint opened url=http://0.0.0.0:8545 cors=* vhosts=localhost
INFO [12–12|23:19:33.078] Imported new chain segment blocks=1 txs=0 mgas=0.000 elapsed=1.596ms mgasps=0.000 number=1 hash=ce505b…0099db cache=642.00B

看到 Imported new chain segment 的訊息,代表已經接入成功了,再來我們會不斷看到許多區塊訊息不斷被傳入。Ummm…..,沒想到這樣就接入完成了,比我想像的還快 xD…

因為 travis 是透過 Docker 接入的,所以我們可以直接關閉 Terminal 或 Ctrl-C 離開不斷跑跑跑的 Docker。如果我們想再連入 Travis 機器中,我們可以透過下面的方式:

# 取得 Travis 的 IP 位址
docker inspect -f ‘{{ .NetworkSettings.IPAddress }}’ travis
# 接入 Travis
docker run — rm -it cybermiles/travis attach http://172.17.0.2:8545

接入後會直接進入 Travis 的 JavaScript console

Welcome to the Travis JavaScript console!instance: vm/v1.8.12-stable/linux-amd64/go1.10.3
coinbase: 0x7eff122b94897ea5b0e2a9abf47b86337fafebdc
at block: 133 (Wed, 12 Dec 2018 23:41:34 UTC)
modules: cmt:1.0 eth:1.0 net:1.0 personal:1.0 rpc:1.0 web3:1.0
> personal.unlockAccount(‘0x7eff122b94897ea5b0e2a9abf47b86337fafebdc’, ‘1234’)
true

多少玩過加密貨幣的人都一定有碰過,但要特別注意的是我們需要的 MetaMask 是 Cybermiles 的版本,大家可以到(https://www.cybermiles.io/metamask/)去下載。

下載好後我們打開 Chrome 瀏覽器,然後進到 Extensions 後把右上角的 Developer mode 打開,然後把剛下載的 `metamask4cmt.crx` 拖拉進來安裝。

按下 BUY 之後,我們會跳到 CyberMiles Travis TestNet Faucet(http://travis-faucet.cybermiles.io/index.html),我們可以自己發給自己 1000 CMT,在確認出現 Success with transaction hash 資訊後,我們再回到我們的 MetaMask for CMT 錢包查看錢錢是否已經進來了~~雖然知道是在測試網路上,但看到錢包裡頭多了 1000 CMT 就是爽。

值得多提一下的是 CMT Wallet(https://www.cybermiles.io/cmt-wallet/)和 MetaMask for CMT 一樣是錢包,但為提高交易的便利性,CyberMiles 在 iOS、Android 平台上開發了 APP。稍微用了一下還蠻不錯用的,上頭還有即時匯兌 USDT 的金額,還可以透過 QR Code 立刻與朋友們交易,轉帳的速度真的很快大約 10 多秒就可以收到款,而且還不用支付手續費 Gas,雖然說目前還沒有太多 CMT 的應用可以使用,但拿交易的 Memo 來留永遠無法抹滅的訊息也是挺好玩的。

上圖為 CMT Wallet APP 截圖

下半場主要是由 Ca Chen 來為我們說明 DApp 的開發方式

Remix for CMT(http://remix.cybermiles.io)是 CyberMiles 基於 Remix 開發的 IDE,支援使用 Lity 來開發智能合約。透過 Remix for CMT,開發者可以在瀏覽器內快速部署智能合約來測試。

在使用 Remix for CMT 開始前,如果原本你就有安裝原生的 MetaMask,要記得先將其停用,避免 Remix for CMT 抓錯。

要將 MetaMask 停用

Environment: 要使用的環境,有 JavaScript VM、Injected Web3、Web3 Provider,這邊我們選擇 Injected Web3(需要先安裝好 MetaMask For CMT 並創建好錢包)

編譯沒問題後,我們就把合約部署到 TestNet 上,點選右上角的 Run,然後按下 Deploy

點選 Deploy 之後應該會自動跳出 MetaMask for CMT 的視窗,我們直接按下 Submit 就可以了。

部署完成後在 CMT Tracking 上會有該筆交易的紀錄 https://testnet.cmttracking.io/tx/0xe791890c31f47e69196fd2a135dc6bea5768e7a8d74bbdab3bf1b28b799f53b1

使用 Truffle 來建構智能合約(下面我直接拿 Ca Chen 講師簡報中的範例)

$ npm install -g truffle

下載 Pet Shop

$ mkdir pet-shop && cd pet-shop
$ truffle nubox pet-shop

編譯:

$ truffle compile

修改網路設定

將網路切換成 travis 的網路

$ truffle migrate --network travis

啟動 Pete’s Pet Shop

$ npm run dev

記得要將 MetaMask for CMT 的網路切換成 Localhost 8545:

取得狗狗一隻:

右圖顯示 Success 表示已經取得狗狗了

小記

CyberMiles(CMT)的交易速度比起 ETH 來說真的快很多,的確可以直接用在交易上(大家應該都不想要明明東西已經賣了,但是錢還在飛還沒到 xD)

--

--