在 Ethereum 開發 smart contract 時,常常會因為原本語法上的設計,讓開發者可能在無意間犯下數千萬金錢的損失。以最近發生的 BEC overflow 事件,因為在一個小地方的乘法沒有使用 SafeMath 函式庫來包裝,讓 token 數量可以被 overflow 攻擊,進而造成非常驚人的損失。以及 EDU 沒有使用 SafeMath 做數值的減法。
而當我們想在 Ethereum 中增加加解密的功能時,直接將 RSA encrypt & decrypt 的演算法實現在 Solidity 中的時候,會讓大量資料的加解密消耗過多的 gas 讓整個 transaction 失敗。
Lity 是基於 Solidity language 來擴充的語言,針對上面提到的兩個問題做了改善:
-
Lity Native Interface 提供了一個 ENI 指令,當 developer 想使用複雜計算的額外功能,可以通過 ENI 指令來呼叫以 C/C++ 實作的外部 library 來執行。
-
Lity Linter 提供更安全的 overflow checker、ERC Standard checker 等讓 developer 能更安心的開發。
在本次的演講中,我將談論 Lity 的設計哲學與在實作中的各種血淚故事,以及對現在 Solidity compiler 的看法。