發表文章

目前顯示的是 7月, 2018的文章

Ethereum Casper - 認識 BLS signature

圖片
最近重新追了一下Ethereum Casper的進展,發現到好多新東西(應該是之前看得太表面 XD),Casper跟sharding會綁一起,然後又有個beacon chain,zk-STARK(zk-SNARK的升級版)也來湊一腳,短時間有點難消化,有興趣的人可以google上面幾個keyword。 不過,今天想要介紹的是BLS signature(這又是什麼?????),這個新的簽章方式讓Casper往前再邁進一步! BLS是Boneh–Lynn–Shacham的縮寫,有興趣的可以參考 wiki 。這個簽章方式厲害的是,可以把所有signature加起來,然後驗證。如果以現今的ECDSA簽章,100個人簽同一個message,那訊息量就是乘以100倍,以Ethereum官方估計,Casper的validators約有30萬,每一個finality都需要2/3的節點做投票,光是驗證signature這件事,大概就要花到一天,所以以現行的ECDSA簽章方式根本不可行。這也是之前Casper的bottleneck之一,Ethereum的researcher, Justin Drake提出了這個 方案 ,當然也不是拿了就可以用的,BLS的介紹可以參考 BLS signatures: better than Schnorr ,寫得非常清楚也好懂。下面會簡單介紹一下。 首先,就是要找到一個特殊的橢圓對稱曲線可以達到以下的算式     e(a x P, b x Q) = e(P, ab x Q) = e(ab x P, Q) = e(P, Q)^(ab) 也就是某種的交換律 用上面那邊文章的圖做解釋     pk :私鑰     P :公鑰     H(m) :可以看作是hash過的message     S :簽章 驗證簽章會滿足     e(P, H(m)) = e(G, S) 也就是 signature 可以用 P(公鑰) 跟 H(m)(hash過的message) 做 驗證,跟我們以往的認知是一致的。從公式看BLS在sign跟verify都很簡潔,資料量的部分也小了許多(好像是33 bytes)。而ECDSA在verify的部分就複雜了一點(需要先算出v值),細節可以參考 這裡 。簽章的加總(signature a

使用Truffle作smart contract測試及debug - III debug

版本 - truffle 4.1.11 一不小心,就寫到了III...沒有偷文章數的意思阿~~~ 不過我在這邊先破題,truffle的debug功能,還在發展中,其實沒有想像中的方便跟powerful,例如在debug的過程還滿常會發生exception的(這還滿常發生的)、 無法得知 global變數內容...等等。官方一樣有很詳細的解說,可以看 這裡 。 要debug其實很簡單,先複製你要debug的transaction hash,然後 $ truffle debug 0x1d8791c26e7aa941c295bed8ed81a3d5fb4790ed9f84a76e2d4341c6c4b09131 接著會看到指令 Commands: (enter) last command entered (step next) (o) step over, (i) step into, (u) step out, (n) step next (;) step instruction, (p) print instruction, (h) print this help, (q) quit (b) toggle breakpoint, (c) continue until breakpoint (+) add watch expression (`+:<expr>`), (-) remove watch expression (-:<expr>) (?) list existing watch expressions (v) print variables and values, (:) evaluate expression - see `v` o/i/u/n:一般有在用IDE debug的都知道,就不做解釋 +:可以加觀察的變數 v:就是顯示目前變數的值(global目前都是空值) 一步一步debug就會看到在哪行source code,像是這樣 Token777.sol: 277 : if (_to== address ( 0x00 )) return ; 278 : TokenReceiver x; 279 : if ( doesContractIm

使用Truffle作smart contract測試及debug - II 測試

版本 - truffle 4.1.11 延續 上篇 ,繼續講測試的部分 寫test case有兩個方式,一個是用 solidity 另一個是用 javascript ,官方文件寫得還滿清楚的。記得你寫的test case的檔案,要放在 test/ 下 先介紹solidity的寫法,要先import下面這兩個smart contract,當然也要記得import你自己的smart contract import "truffle/Assert.sol" ; import "truffle/DeployedAddresses.sol" ; import "../contracts/Token777.sol" ;  再來是命名規則,contract要以  Test   為開頭,測試function要以  test  為開頭 contract TestTaroToken { function testMint () public { Token777 token = Token777 (DeployedAddresses. Token777 ()); address user = 0x2849f61e08B66A3b0eC2512613092174Df19Db1e ; uint base = token. balanceOf (user); uint incremental = 30000000000000000000 ; token. mint (user,incremental, "" ); Assert. equal (token. balanceOf (user), base+incremental, "balance is not equal" ); } } test case看起來相當直覺,就是先取得contract object後,呼叫mint(你想測試的function)這個function,最後用Assert確認結果,跟我們一般寫UT很相似。當然也有提供 beforeAll , beforeEach , afterAll 跟  afterEach

使用Truffle作smart contract測試及debug - I 部署

今天來介紹一下truffle。 版本 - truffle 4.1.11     在我一開始踏入這個圈子的時候,是truffle是出testrpc這個工具,當時google了一下,有人說不好安裝設定,所以就選用了parity。parity對於初期開發還不錯用,有圖形化的介面,寫完的code直接部署,呼叫function有下拉式選單可以直接使用,event log也很清楚顯示。其實也滿推的,不過一開始不懂的時候,genesis 設定檔也是搞了一陣子(不過現在也沒多懂 XD)。     那parity既然這麼好用,幹嘛用truffle?truffle後來出了Ganache,一個圖形化的介面,會有transaction的列表,裡面會有input data (我覺得可惜的是沒有output event),還有log,可以看實際呼叫了哪個rpc call等一些資訊。但重要的安裝完後,點兩下直接就可以用,不需複雜的設定檔,對於單純只要開發smart contract的人來說,才是最方便的。     但是!這些都不是重點, 重點是truffle可以跑test cases跟逐步debug 。對!逐步,我跟同事分享,同事眼睛都亮起來了,因為在寫smart contract在debug部分其實挺麻煩的,雖然Remix也可以做到debug,但是class越多source file越多,在Remix上需要一個一個copy過去,就沒這麼方便。此外,寫test case這部分 對公司產品開發的流程上有很大的幫助,不用像我之前還傻傻的用web3j自己寫testing framework.....     這偏廢話有點多,接下來就介紹怎麼 寫test cases 跟 debug (安裝就不用講了吧,下載下來點兩下,下一步下一步下一步....我是用Windows XD),細節可以參考 這篇 ,官方說得滿清楚的,懶得看英文的可以繼續往下看     首先, 在Windows上不要使用Windows的cmd ,會有名稱問題,我是用Git的bash shell,然後下 truffle init 會在目錄下長出這些東西,其中Mirgrations.sol跟1_initial_migration.js都不要去動它,truffle內部會使用這兩個檔案 contracts     - Mig