2017年9月3日 星期日

R3 Corda 基本教學:前言與準備工作

I always treat blockchain as a distributed database.
For database learning, start from "CRUD" is a good approach.
(But for blockchain, please ignore delete.)

This is a note for R3 Corda learning, based on M14.

*******

不知道大家怎麼看待區塊鏈這個東西?特別是私有鏈的架構。
我個人對於私有鏈的作法一直不以為然,因為這跟封閉式有權限的資料庫幾乎無異。
如果在乎資料被部分用戶更動,難道不能用Log當作稽核的工具?
區塊鏈的原意,是要在公開的環境下使用,作為公開的賬本。
但是現在有不少的區塊鏈方案,主打私有鏈適合企業的特點。
不過我還是抱著問號,如果封閉的使用模式,何必要特地導入區塊鏈?

以上是我對私有鏈的懷疑跟疑問,但是基於工作的原因還是得碰。
從IBM Hyperledger Fabric玩到R3的Corda,Corda是我覺得最莫名其妙的東西。
連他們自己都講了,Corda不是區塊鏈,但是從區塊鏈得到啟發。
區塊鏈最基本的定義,就是區塊鏈上每一個用戶都是平等的。
可以有一樣的操作權限還有使用同樣的資料。
但是Corda完全違背這個原則,它認為所有的交易不應該發布給所有節點。
只有相關的參與方會得到資料,其他用戶不會有任何相關資料儲存。

舉例來說,一個轉帳交易只有A跟B兩方,A轉帳給B的事實。
所以在R3的Corda裡面,只有A跟B的賬本有交易紀錄,其他C或D是完全不知道的。
萬一A或B有一方的系統故障,可能有資料被另一方竄改的風險。
或者非常剛好A跟B的儲存系統同時故障,於是所有相關交易紀錄消失。
不知道這樣的模式是否有資格跟人家叫區塊鏈?
反正R3跟你說他就是要這樣玩,主打的對象是銀行等金融機構。
他們的假設是金融機構有強大且安全的基礎建設。
不管是安全性或者資料儲存備援,理論上沒有太大故障的問題。

另一主張是對金融機構,共享所有交易資料的區塊鏈賬本模式也未必適合。
所以他們開發適合金融應用的區塊鏈,這就是R3 Corda。

這家公司的理念,也讓不少原先的銀行參與者退出。
不過還是從銀行間拿了很多錢,募資至少超過一億美金。

*******

以上是個人的看法,不管你是否認同,我的重點是要介紹Corda的基本開發。
區塊鏈的學習就當作玩資料庫,從CRUD的角度切入。
(不過區塊鏈沒有Delete的概念)
知道怎麼把資料寫入跟讀出來,其他的使用就是應用程式的問題了。
反正資料庫的功能就只是紀錄資料而已,不是嗎?

Corda相較一般資料庫比較複雜,有環環相扣的模組來操作資料寫入。
透過UTXO的模式,以公證方(Notary)節點來驗證交易的真實性,避免Double Spend的問題。

舉例來說,A把100元轉給B之後,他不能再次把同樣的交易單改收款人C再次轉帳。
因為公證方會發現這個問題,一個提交的交易只能進行一次,被標示為已發生。
從這個角度,大家應該也可以意識到:如果公證方節點死了怎麼辦?
那就真的死了!整個網路無法進行交易。
站在HA的考量,Corda確實有點奇怪。只能藉由增加公證方節點的數目來避免。
(透過集中權利的公證節點又再次違背區塊鏈去中心化的理念)

在送往公證方節點之前,還有其他步驟,主要是簽署該份合約。
合約定義了交易的規則,例如轉帳這個合約就是A跟B兩方要簽署。
同意之後會把協議的資金移轉,即從A轉到B。(或者B轉到A)
簽署合約的方式就是提出轉帳的那一邊先簽名,簽完之後給另一邊簽。
(簽名的方式是使用私鑰簽名,規格是常見的X.509憑證)
兩邊都簽完之後,送到公證方確定沒問題之後,寫入到狀態資料庫內。
以上的流程透過資料流Flow來定義。

*******

目前Corda是採開放原始碼的方式,任何有興趣的人都可以自己開發相關應用。
主要的開發語言是Kotlin,一個我之前也沒聽過的東西。
簡單用一句話介紹Kotlin:他就是屬於Android的Swift!
以Java概念為基礎,用相對簡單的Scripting Language實作應用程式。
如果你有很堅強的Java底子,Kotlin應該不會造成你很大的問題。
不然就跟筆者一樣,拿別人的樣板來改吧!

除此之外,也請下載IntelliJ 2017.02 (請確定版本號一樣)
這個IDE是開發Kotlin必備的工具(開發Corda區塊鏈應用的官方工具)。

你應該跟我以前有一樣的疑問,能不能用Eclipse?
答案是不可以!
在Corda官方教育訓練時,講師的回答是這樣。
而開發Kotlin語言的公司,就是創造IntelliJ的公司。

最後是Java JDK,請安裝Java 8。
Build號碼在133之後的版本。

我後面使用的R3 Corda版本,會是根基於M13以後的版本。
從M1到M14(我寫這篇文章時最新的版本)架構變化不小。
M13之後相對之前的版本,有不少的Class都被Refactor了。
(就是Class的名稱改變或者換到其他Name Space下)
一些函式名稱也更動,算是不小的更動。
如果您現在要進入Corda的開發,不要懷疑選M13以後版本就對了。

(M15應該也快了,從官方的Jira可以看到M16應該是內定1.0版)

*******

粗淺的寫了一堆東西,大家應該很難對Corda有完整的框架。
還是等下一個部分實作時配合程式碼一併說明。



2017年5月1日 星期一

馬來西亞Kluang居鑾一日遊

Kluang is city located at north Johor, Malaysia.
You can visit here from Singapore, have a one day strip.

*******

身為一個在新加坡工作的台勞客工,平常賺的錢有限。
週末不想太花錢,又想感受到放鬆跟郊外走走。
那不用多說,鄰近的馬來西亞新山絕對可以幫你滿足這些需要。
花的錢相對少,並且遠離新加坡到處都是人的商場。
拿著護照,不用辦簽證立馬說走就走,輕鬆愉快的小旅行就是這麼容易。

我已經去過新山(Johor Bahru)多數的地方了,是該開發新的景點。
小小的研究一下,柔佛州其實很大,只是多數人都在首府新山。
另外還有笨珍、古來,或是居鑾等等城市值得一訪。
經過比較之後,發現居鑾有一些吃的地方比較吸引我。
於是決定從新加坡出發,先通過新柔長堤到新山。
換車從Larkin拉慶客運站搭巴士到居鑾來個無負擔的小旅行。

從JB中央車站附近,隨時都有車子到拉慶客運站。
費用只要少少的1.7馬幣而已。
























到了拉慶客運站,找一家時間能配合,最重要是有票可賣的客運公司。
這整排的窗口可以慢慢看,選擇非常多。
根據經驗,到居鑾的車通常是一小時發一班車。


















車錢方面,只要馬幣10.8。也無需比價,通常大家賣的都是一樣價錢。
看好想要的時間有車,票還有,趕快買就對了。
我當時遲疑了一下,之後走回去窗口就是慢一小時的車了。


















約莫兩個小時的車程,巴士在居鑾的客運站停車了。
開始一日的小旅行,全部都是用走就可以到的點。


















從居鑾巴士站,可以一路走向火車站。
在這途中,我想吃的就是東甲牛腩麵(Tangkak Beef)。


















看這菜單,真是佛心來了。最大碗最貴也不過RM12.9。
多點個甘蔗汁也只是2.2馬幣。
以新加坡的物價來看,實在是便宜到不行。
為了留點肚子等等吃其他東西,點大碗的牛腩麵就好(10.6)。
外加一杯甘蔗汁,屬於童年的回憶。
(小時候我媽帶我去菜市場會給我買一杯甘蔗汁)


















東甲牛腩麵的生意很好,但是出菜的速度還算快。
等大概十分鐘不到的時間,牛腩麵跟甘蔗汁都在桌上了。


















看到在面上面的牛肉嗎?給的肉真的不算少。
湯的部分,有一點點油,的確要點一個喝的來解膩。
麵體我選擇一般的麵,你也可以選擇米粉或是粿條。


















吃完了這碗麵,用12.8馬幣結束這一回合。

*******

因為留了肚子,原本想去吃中央雞飯。
但是很遺憾他們只開到14:30,只好等下一次啦!
























那就吃火車站月台旁邊的Kluang Rail Coffee好了!
還可以順便買一下回程的火車票。

Kluang Rail Coffee已經有將近80年的歷史,目前已經有其他分店。
但是一定要來火車站的總店,總店的特色就是開在鐵窗內。
居鑾火車站月台沒有什麼小吃店,Kluang Rail Coffee是你唯一的選擇。


















就點個經典的麵包加上冰咖啡當做點心。


















看似簡單的麵包,是經過炭烤的。裡面有Kaya還有奶油。
如果沒有吃其他東西,肯定會想點第二份。
























簡單的下午茶,3.8馬幣搞定。
























*******

感覺上,居鑾的一日遊以吃為主。
如果硬要找什麼東西看,應該是火車站附近的「創意後巷」。
由本地畫家在牆上塗鴉的壁畫,有些還蠻有意思的。


















那個後巷又叫雨傘街。
























選幾幅壁畫放出來給大家看...
























*******

回程的火車班次有限,下午五點多那班要是錯過了,就是晚上十一點。
真的錯過了,就只能搭客運回新山了。
火車的時間比客運慢,但好處是對新加坡工作的人可以直接走到關卡通關回家。
省得再從拉慶換車回JB中央車站的麻煩!

另外,火車一路比較平穩,睡覺好睡。
搭客運會遇到路況不好多地方,還有司機的駕駛技術...
我就遇到拼命按喇叭的司機,而且我還坐第一排。
14馬幣的車票,比客運稍微貴一點。
























居鑾火車站很小,但有復古的感覺。






















*******

就這樣,不到50馬幣就實現了出國一日遊。
不到20元新幣(400台幣)的費用,相信人人都玩得起。

這幾個地方,都是用走的就能到了。
如果你是用M1的預付卡方案,直接在馬來西亞漫遊免費。
會扣原本的Data流量,不用其他設定。
打開Google Map就可以開始你的小旅行!


您也許同樣感興趣的文章:
新山Seoul Garden吃到飽