📜 [專欄新文章] Crosslink 2019 Taiwan|LibraBridge: 橋接 Libra 與 Ethereum
✍️ AndyLin
📥 歡迎投稿: https://medium.com/taipei-ethereum-meetup #徵技術分享文 #使用心得 #教學文 #medium
十月19–20日於台北矽谷會議中心舉行的 Crosslink 2019 Taiwan,由 Taipei Ethereum Meetup 合計共40多位志工協力舉辦,吸引了上百位來自全球的區塊鏈開發者社群齊聚。自從 Facebook 在今年六月公布 Libra 計劃之後,造成全球政府、金融機構以及區塊鏈產業的熱烈關注,其中也有許多區塊鏈開發者對於 Libra 的技術及應用產生很大的興趣。在19日上午其中一場演講由來自區塊鏈技術開發公司 AMIS 的軟體工程師 Bun Hsu,分享了其開發的專案「LibraBridge: 橋接 Libra 與 Ethereum」,透過實作 MVP 來實現 Libra 與 ETH 之間的 Swap 互換。
LibraBridge: 橋接 Libra 與 Ethereum — Bun Hsu(source: Crosslink 2019 Taiwan)
在演講的前半段,講者先介紹了在驗證 Libra 交易所需具備的基本知識;後半段則介紹其實作的 LibraBridge,並現場 demo。
一、驗證 Libra 交易
首先,先介紹驗證 Libra 交易需要具備的基本知識,包括 Merkle tree, transaction info 以及 transaction accumulator 等。區塊鏈網路中的 client node 分為 full node, light node, relay node,在這裡會著重在 light node 輕節點。輕節點不需擁有區塊鏈上所有的資料,只需透過 block header 中的 Merkle root 即可驗證交易。
接著介紹 Libra 的交易資訊,稱為 Transaction Information,主要分為 RawTransaction, SignedTransaction 以及 TransactionInfo 三部分,內容如下圖所示。
Libra Transaction Tree (source)
因為 Merkle root 的值在每次新節點加進來後都會改變,導致 Merkle tree 會不斷變大,因此,Libra 中的 transaction tree 被稱為 transaction accumulator。
Data stricture in the Libra protocol(source)
接著,講者以一個範例來說明上述內容。
從 gRPC client 收到交易後會顯示以下內容:
version: 44767signed_transaction { signed_txn: "..."}proof { ledger_info_to_transaction_info_proof { bitmap: 45055 non_default_siblings: "..." non_default_siblings: "..." non_default_siblings: "..." ... } transaction_info { signed_transaction_hash: "..." state_root_hash: "..." event_root_hash: "..." major_status: 4001 }}events { ...}
Version
每一個交易都有其唯一的版本號碼,也就是在 transaction accumulator 中 leaf node 的位置。以下圖為例,藍色節點的交易 version 為 4,二進制表示為 100,其中 0 表示向左,1 表示向右,因此我們可以從 root 出發,向右一次、向左兩次後找到此交易。此概念和 Plasma Cash 相似。
Transaction version(source)
bitmap & non_default_siblings
bitmap 表示哪個 siblings 為 default,1 表示 non-default;0 為 default。因為 transaction accumulator 會一直變大,大多數時間都不會是 full binary tree,因此,需要 default(placeholder) 來維持樹的結構。
bitmap & non_default_siblings(source)
transaction_info
交易的細節。其中,major_status: 4001 表示交易已被節點執行。而因為目前 Libra 不會消耗 gas,因此 gas_used 為 0 而未顯示。
在前半段演講結束前,講者也展示了用 Solidity 語言來驗證 Libra transaction Merkle proof 的程式碼。
Solidity snippet
而在後半段演講,講者先介紹了 LibraBridge 的應用場景。
二、透過可信任的第三方來執行 LIB-ETH 交換
目前要進行 Libra token 和 ETH 的交換,必須透過可信任的第三方來確保交易執行。舉例來說,假設參與方(使用者)擁有 Libra token,而託管方(MAX 交易所)有賣 ETH,參與方想要和託管方進行幣幣交換的方法為從 MAX 交易所入金 Libra 並與之交換 ETH,但前提是相信 MAX 交易所會如期出金,不會作惡。
但此時會有個問題產生:是否可在不完全信任託管方(MAX 交易所)的情況下來實現 LIB-ETH 的幣幣交換呢?
三、LibraBridge — Trustless custodian between Libra and Ethereum
在 LibraBridge 的實作中,藉由兩個 function 來實現無需託管信任的 LIB-ETH 幣幣交換:
Deposit:託管方傳送較多的 ETH 至合約中作為保證金。
Challenge:參與方可以質疑託管方是否實現承諾(在合約中驗證 Libra transaction Merkle proof)
以下分別討論正常情況及違約挑戰的情況:
Case 1: 正常情況
在正常的情況下,首先託管方會在合約中存入保證金,同時被鎖定直到一定時間後才能被託管方取回。而當使用者(參與方)想與託管方進行幣幣交換時,會先查詢合約上是否有足夠的保證金,若驗證通過,使用者將 Libra 代幣存入託管方,而當託管方確認後,則會傳送等值的 ETH 給使用者。
Case 1(source)
Case 2: 託管方違約
若託管方收到 Libra 後卻沒轉送 ETH 給使用者,則託管方即違約,使用者可以透過合約中的 Challenge 功能來執行違約挑戰,使用者可以出示 Libra 轉帳證明作為憑據,在驗證過 Libra transaction Merkle proof 後,合約上的押金(保證金)會被削減以歸還給使用者作為補償。
Case 2(source)
Demo
在演講的最後,講者也現場 demo 了 LibraBridge 的實作,有興趣的讀者也可以參考其官方錄製的 demo 影片。
而這場演講裡提到的內容,讀者也可參考 AMIS 的 Medium 文章及 github。
Crosslink 2019 Taiwan|LibraBridge: 橋接 Libra 與 Ethereum was originally published in Taipei Ethereum Meetup on Medium, where people are continuing the conversation by highlighting and responding to this story.
👏 歡迎轉載分享鼓掌
solidity github 在 Taipei Ethereum Meetup Facebook 的最佳解答
📜 [專欄新文章] Crosslink:今年最值得期待的區塊鏈技術研討會 by Taipei Ethereum Meetup
✍️ Phini Yang
📥 歡迎投稿: https://medium.com/taipei-ethereum-meetup #徵技術分享文 #使用心得 #教學文 #medium
Taipei Ethereum Meetup 從 2016 年開始就籌辦各種類型活動,協助各種人才更了解區塊鏈各項技術。從底層應用到智能合約,從學術討論到動手實作,每個月平均有 2–3 場線下活動,亦有各種線上資源,Youtube 頻道中有各場活動的錄影紀錄,Medium 專欄有超過 170 篇文章,新手基礎教學、區塊鏈生態系知識都能找的到。除此之外,在 Facebook 社群、Github 上隨時隨地都有最新產業知識更新。
這次 Crosslink 區塊鏈技術研討會將於 10 月 19 日與 20 日舉辦,為什麼呢?由於 Devcon 每年都會在不同地區舉辦,今年輪到亞洲日本地區,也是因為如此,Taipei Ethereum Meetup 才有機會將來自世界各地人才邀請到台灣,跟當地區塊鏈社群共同分享以太坊最新發展。(註:Devcon 是以太坊每年都會舉辦的研討會,來自全世界的研究員與開發者齊聚一處,發表一年的研究成果。)
此次活動講者陣容為來自美洲、歐洲,甚至澳洲各國的產業代表人物,分享主題從初階到高階,涵蓋區塊鏈理論到產品應用面等實用資訊。像是 Vitalik Buterin 以太坊創辦人與研究團隊的首席科學家,還有研究員 Danny Ryan 及王筱維,都是 Crosslink 座上賓,將介紹協議細節。其他九個全節點開發團隊中,也有來自澳洲、使用 Rust 語言的 SigmaPrime CEO Adrian Manning 帶來實作「lighthouse」。
【活動資訊】
時間: 2019–10–19(六) 09:00 ~ 2019–10–20(日) 17:00 共兩天
地點: 台灣新北市新店區北新路三段 223 號 2 樓 (台北矽谷國際會議中心)
預計參加人數:350 人
預計講題: 19 個
報名連結: https://www.accupass.com/event/1908170531551518234925
官方網站: https://crosslink.taipei/
跟我們一起窺探區塊鏈的未來展望
以太坊是為了方便創新而設計出的技術。值得注意的是,以太坊是目前各種區塊鏈生態系中擁有最多開發者的主鏈。在特定垂直領域的 Dapp 發展上,也是遙遙領先其他主鏈。
前 50 名金融 Dapp 中,有 42 名是建在以太坊上,著名案例有 MakerDAO 跟 OmiseGO。
前 50 名交易所 Dapp 中,有 44 名是建在以太坊上,著名案例有 Augur 跟 Uniswap。
前 50 名資訊安全 Dapp 中,有 42 名是建在以太坊上,著名案例有 Quantstamp。
相信未來許多嶄新想法,會持續在以太坊上誕生,被實作成下一時代產品並執行。
「擴展性 Scalability」,Crosslink 研討會重點聚焦
為了讓區塊鏈可在一段時間內處理更多交易,以太坊就有好幾種不同解決方案,主要分為改善底層共識層的協定,以及依附在底層上的第二層協定。
Eth2.0 就是新一代共識層協定,也是現在以太坊生態系中,眾多團隊全力投入研究與開發的重要專案。協定的開發由以太坊研究團隊負責撰寫協定的規格文件,另外九個開發團隊以各自偏好的語言依照規格實作出全節點。
Eth2.0 中最值得關注的兩個重要技術為「點對點網路層 libp2p 框架」,與「eWASM (Ethereum Flavored WebAssembly) 虛擬機」。libp2p 原本是由 IPFS 使用,但現已模組化為獨立專案,由 Protocol Labs 團隊維護。eWASM 為以太坊的下一代虛擬機設計。為此,Crosslink 特別安排點對點網路層 libp2p 框架的技術主管 Raúl Kripalani 來做進一步介紹,而 Second State 工程副總戴宏穎(海帶 Hydai)將剖析 eWASM 的設計美學和目前開發進度。
另一方面,第二層協定則有「狀態通道 State Channel」與「電漿網路 Plasma」兩種。前者在兩方的重複支付或遊戲上達到加速,後者則在支付應用上見長。這兩個分項則邀請來自加拿大,L4 團隊共同創辦人 Liam Horne 與日本 Cryptoeconomics Lab 研究員 Yuriko Nishijima 來介紹。
台灣本土區塊鏈產業亦邀請了不少重量級講師。在「私鑰的安全與保護」議題上,由著名資安領域專家,CYBAVO CTO 徐千洋來做分享,Tim 是台灣著名駭客會議 HITCON 與台灣駭客技術社群 CHROOT 創辦人。Pelith 創辦人、技術專欄 CryptoCow 創辦人,陳品,則著重於區塊鏈系統中使用者體驗。
學界部分,邀請到政治大學金融科技研究中心執行長的陳恭教授來介紹跨醫院資料共享之應用。陳昶吾,AMIS 首席科學家、也同時在政大開設區塊鏈課程,則會介紹權益證明中最熱門密碼學元件「可驗證延遲函數 VDF」。政大資訊科學系助理教授郭桐惟對分散式系統主題發表相關研究。
身為新手莫害怕莫慌張,Crosslink 有新手村完整規劃
我們假設這兩天是眾多與會者變成區塊鏈開發者的第一天。Wizard Amigos 創辦人 Nina Breznik 與 Alexander Praetorius 將在現場手把手教與會者寫出人生中第一個智慧合約。Wizard Amigos 是個教育 JavaScript 的 Cyber nomads 組織,在台灣非常活躍,兩位創辦人非常熱愛台灣的人情味,常常支持台灣當地區塊鏈技術社群。他們也曾為 Remix 團隊主力開發者,目前致力於 Solidity 教育 Play 專案。
你也可以參加 Aragon CEO Luis Cuende 設計的 DAO 實作工作坊。DAO (Decentralized Autonomous Organization) 是去中心化自治組織,利用智慧合約來管理組織治理中業務邏輯,也許你還停留在 2016 年,那次被駭的壞印象中。DAO 發展至今早有長足改善。Aragon 部落格中所載,其新募資模組中已納入 Vitalik 於 2018 年提出募資改良方案 DAICO,以及控制價格與發行量的數學元件「Bonding Curve」。
為什麼我們要千辛萬苦舉辦 Crosslink 研討會?
為了一個把技術人脈網絡帶進台灣的願景
我們相信:視野很重要,一個人所能接觸到的知識人際網絡將對未來人生造成巨大影響。所以,我們希望將國際技術人脈網絡帶進台灣。
在技術開發圈中,常常有知名開發者或研究者,在以前高中甚至大學時代,因為對特定領域有興趣而投入,在數年之後(或甚至不用數年 …)就能以領域專家的面貌出現。在這場研討會中遇到的人,也許會發生改變一生的對話。談論到的技術,也許會影響你的生涯選擇。
Taipei Ethereum Meetup 從來就不以營利為目標。我們是一群志工,一群為了傳播以太坊技術,讓技術資源得以與產業接軌、讓台灣開發人才能夠學習到產業最新國際動向的傳道士。
誠摯邀請各位對區塊鏈有興趣的開發者一同來參加 Crosslink 2019 Taiwan 研討會。我們不收取動不動就破萬元的門票,反而是相當合理價格,兩整天的高質量技術研討會,社會人士只需付台幣 $1200 元,學生更只需付五折票價 512 元。
歡迎你加入我們一起窺探區塊鏈未來展望,到時候見 :)
【活動資訊】
時間: 2019–10–19(六) 09:00 ~ 2019–10–20(日) 17:00 共兩天
地點: 台灣新北市新店區北新路三段 223 號 2 樓 (台北矽谷國際會議中心)
預計參加人數:350 人
預計講題: 19 個
報名連結: https://www.accupass.com/event/1908170531551518234925
官方網站: https://crosslink.taipei/
Crosslink:今年最值得期待的區塊鏈技術研討會 by Taipei Ethereum Meetup was originally published in Taipei Ethereum Meetup on Medium, where people are continuing the conversation by highlighting and responding to this story.
👏 歡迎轉載分享鼓掌
solidity github 在 Taipei Ethereum Meetup Facebook 的最佳貼文
📜 [專欄新文章] Ethereum Token — ERC20 mint 跟 burn
✍️ Kimi Wu
📥 歡迎投稿: https://medium.com/taipei-ethereum-meetup #徵技術分享文 #使用心得 #教學文 #medium
這篇會著重在erc20 smart contract實作mint跟burn的部分,所以需要先了解erc20喔!
erc20 token在設計上可以a.預先產生,b.產生部分然後部分用挖的(mint)或是c.都用挖的。當然在應用上跟token屬性有關,例如是屬於security token或是utility token。簡單來說,像是股票可以獲利或是配息概念的算是security token,需要受各國法令監管,那utility token就比較像是點數的概念,至於細節怎麼分不是本篇重點。
mint的使用時機,例如在crowd sale時,每一筆進入crowd sale的錢,crowd sale 的contract 就會呼叫token contract去產生某個數量的token,這個動作就可以稱作mint。也有不用挖的,一開始就產生好,例如秘銀(MITH),從etherscan可以看到token contract怎麼寫的,這裡可以看到MITH的contract。當然你想產多少就多少,不過就看有沒有人買單 XD
回到正題,要”挖”聽起來,就覺得很複雜,但其實smart contract的本質就是記帳,所以其實就只是數字上的加減而已,下面是範例程式
function mint(address _to, uint256 _amount) public { totalSupply_ = totalSupply_.add(_amount); balances[_to] = balances[_to].add(_amount); emit Mint(_to, _amount); }
其實就只是把增加個人的token的數量,然後增加整個contract token的總數而已。當然,這種function需要做權限的控管,不然大家都可以自己產,token就會沒價值了。講完”挖”應該很好想像怎麼burn吧?! 就是把數量減掉就好了!(當然這也需要做權限控管)
function _burn(address _who, uint256 _value) public { balances[_who] = balances[_who].sub(_value); totalSupply_ = totalSupply_.sub(_value); emit Burn(_who, _value); }
這是基本的mint跟burn,至於在應用上有需要其他邏輯,就是基於這個在往上堆疊。例如可以多加Transfer的event(erc20 標準中的Transfer event),在mint時from就是0x0,burn就是to為0x0,在應用上如果要追蹤token數量,就會比較方便。
最後在分享openzeppelin-solidity這個github repository,在看網路上很多的sample code常會看到SafeMath或是Ownable這兩個contract,其實都是出自於openzeppelin,裡面還有很多contract的範例可以參考或是使用,最棒的是他們一直有根據最新solidity的版本而做更新,所以都會根據新的語法做更新。他們把module切得相當的細,非常的OO,不過在看的時候會比較難一口氣看完,這也是Vyper開發者覺得solidity需要改善的其中一個點 -「可讀性」。因為可讀性越差,可稽核性就越差,相較之下安全性就越差。
* Vyper是類Python語法的新一代smart contract語言,目前還在beta(0.1.0-beta.2),不過Casper的smart contract已經是用Vyper寫的囉!看來Ethereum foundation的開發者是傾向往這邊走。
有錯誤或是不同看法,歡迎指教喔!
Originally published at kimiwublog.blogspot.com.
Ethereum Token — ERC20 mint 跟 burn was originally published in Taipei Ethereum Meetup on Medium, where people are continuing the conversation by highlighting and responding to this story.
👏 歡迎轉載分享鼓掌