Microsoft Blockchain 合作案例
區塊鏈實作:在成功得案例上做出您的第一個應用
WiFi access:
msevent998dl
Azure Blockchain-as-a-service(Demo)-30mins
Michael Chi 軟體開發工程師
作者GitHub:https://github.com/michael-chi/blockchain-learning
Before we start
What is …
- Blockchain
 - distributed ledger
 - smart contract
 
Plus
- have programming knowledge
 - Azure Knowledge
 
純技術 Workshop
區塊鏈解決方案中遇到問題如何解決,以解決的思路
Blockchain Case:
- 東南亞航空公司
 - 農業產銷的公司,類似台糖的農產品版本
 
農業產銷的公司
- 有數個 farmer 管理者,用以確認 農人、農地大小、產品品質
 - 農民有數種、法律有數種、農地有數種,希望解決繁瑣的問題
 
解決方式
IPFS 行星檔案系統:類似區塊鏈 p2p 的分散式檔案系統
- 將農民資訊 ID 放到 smart contract 上,而藉由 hash ID ,將個人資料儲存於資料庫,不上鏈
 - 農地資料同上,ID 上鏈,其餘放到 IPFS 上
 
東南亞港口管理的機構
港口想要建造一艘新的船隻,非常麻煩,可能需要 30
60 張的憑證,需要 36 個月,而其中多數憑證需要人工申請,非常耗時耗人力。
解決方式
一家船隻的擁有者,造船時,創建一個 smart contract 放到區塊鏈上,每張 smart contract 都代表一個憑證,取得憑證後,交給監管驗證,核發後建造。
Baseline
- 參與者多
 - 資料共享者多
 - 憑證可以透過區塊鏈在多個機構中流通
 
參與者越多,越適合用區塊鏈來解決問題
How we work with the customer
- 3 週聯絡交流
 - 2 週前往顧客公司討論
 - 2 月 coding
 
航空公司
希望多家航空公司的里程數(紅利)可以共用,多個參與者可以擁有共通的交流平台。
- 擁有一個共通的貨幣,用以交換產品或價值
 - 一個開放的平台,任何人只要他想,就可以來參與這個平台
 - 這個平台必須夠安全
 - 必須是全球性的
 - 輕易的加入這個聯盟
 
解決方式
我們認為區塊鏈是好的解決方案、一個安全的方式,資料在其中是分享的,且是一個分散式的系統,資料就會在節點之中去 Ledger。
How do we
- 創建一個 Token 、 ETH 、 Hyperledger?
 - 外幣交換的機制?
 - Track Transaction?
 - 如何與現有的會員系統做整合?
 - interact with other participates?
 - 如何建立一個全球可信賴的系統?
 - 多國間的資料如何同步?
 - 如何管理?
 
思考方向
- 先解決簡單的問題
 - 設計一個給單一客戶的架構
 - 延伸至其他公司
 
業務場景
- 創建一個貨幣,將各個公司的會員點數擁有一個共通的轉換媒介
 - 所有透過這個貨幣的交易都必須被完整的記錄下來
 - 所以的夥伴必須被管理,必須是某個航空公司的會員才能轉換
 
區塊鏈角度
- 所有的客戶、智能合約都是一個 address 。
 - 需要數個 contract
- Token contract
 - Exchange Rate Contract
 - Transaction Contract
- 記錄一些特殊的交易邏輯
 
 
 
We decide to
微軟在 eth 有各種合作,又 因為有 80% 的 Token 都是 ERC 20 所以採取 ERC20
- smart from eth
 - uses ERC 20 Standard
- Function
- total supply
 - balanceOf
 - Transfar
 - transferFrom
 - Approve
 - allowance
 
 - Events 
- Transfer
 - Approval
 
 
 - Function
 - openzepplin:一個針對安全性做增強的 Token 範本
 
Create Digital Token
==等補簡報中的 3 個 smart contract 的 Function==
- Transaction
 - Token
 - Echange Rate
 
Questions
Now we have smart contracts ready
- Q:如果邏輯需要更改時該如何是好?
- 如何 update ?
 
 - A:Proxy Pattern
- 將邏輯與資料分開
 - 透過更改 Proxy contract ,判斷應該呼叫哪個版本
 
 - Q:如何使 API、操作 smart contract ,使之呈現於終端裝置上?
 - A:需要一個 
- Library
 - API
 - Authentication
- In smart contract
- Function Modifier
 
 - In API
- Truffle.js 部署 Smart Contracts 並測試
 
 
 - In smart contract
 - WEB3.JS
Challenge
 
 - Q:如何管理雲端的 eth 與離線的 Database
 - A:在 Azure 上
- Function App
 - Web App/API app
 - Vitual Machines
 
 
兩種解決方式

oracle
![]()
小結
- 呼叫己身 API
 - 管理自己的會員
 - 以 VPN 等等網路傳到區塊鏈上同步
 - 需要報表時,從 Databasr 查詢
 - 需要驗證時,從 Blockchain 查詢
 
未來的問題
- 區塊鏈、SQL 哪邊是主體
 - 是否能夠讓網路互連
 - 普通的 CI/CD 可以使用 Azure 內建的 CI/CD
 - Smart Contract CI/CD
- 當你部署一個新的版本後,對區塊鏈來說就是一個全新的事情,而究竟要不要自動使用 CI/CD 尚未有定論。
 
 
What’s Next
- 我們不希望每一個 case 都從頭開始
 - 我們希望能夠有個 base ,之後的開發都由此延伸
 - 我們有一個解決方案在 Azure 上,只要將它組合起來
 
Before Start
https://www.microsoftazurepass.com/SubmitPromoCode
https://onedrive.live.com/?authkey=%21AHCMYjJIaYWpXF0&id=E0579E51F1904020%21363386&cid=E0579E51F1904020
快速的建立區塊鏈並運用
運用 Azure 上的 template
從 60% ~ 70% 開始建立區塊鏈
之後會把代碼開源出來到 GitHub (大驚!!
For 聯盟鏈
Microsoft Blockchain 合作案例
https://william-mou.github.io/2018/01/17/Microsoft-Blockchain-合作案例/
 



