多鏈錢包開發原理丨多鏈錢包系統開發(詳情及流程)丨多鏈錢包系統原始碼分析

xiaofufu發表於2023-02-27

  單鏈錢包通常被稱為主鏈錢包。這種錢包一般是針對渠道型公鏈開發的。比方IM Token版和MetaMask(許多朋友叫它小狐狸錢包)都是以太坊單鏈錢包,所以只支撐使用相同規範的ETH和ERC-20令牌。


  多鏈錢包


  多鏈錢包簡單來說便是能夠支撐多個主鏈渠道令牌的錢包。常見的多鏈錢包有Bitter、imToken2.0、Cobo錢包等。



 /**

 * entropy為上面透過SecureRandom生成的隨機陣列

 **/

 public List<String> toMnemonic(byte[] entropy) throws MnemonicException.MnemonicLengthException {

        //為了減少字數刪來檢查引數的程式碼

        

        //計算entropyhash作為後面的checksum

        byte[] hash = Sha256Hash.hash(entropy);

        //將hash轉換成二進位制,true為1,false為0。詳情請看:MrsFu123,bytesToBits函式的解析

        boolean[] hashBits = bytesToBits(hash);

        

        //將隨機陣列轉換成二進位制

        boolean[] entropyBits = bytesToBits(entropy);

        

        //checksum長度

        int checksumLengthBits = entropyBits.length / 32;

 

        // 將entropyBits和checksum加起來,相當於BIP39中的ENT+CS

        boolean[] concatBits = new boolean[entropyBits.length + checksumLengthBits];

        System.arraycopy(entropyBits, 0, concatBits, 0, entropyBits.length);

        System.arraycopy(hashBits, 0, concatBits, entropyBits.length, checksumLengthBits);

 

        /**

        *this.wordList是助記詞列表。

         * 

        **/

        ArrayList<String> words = new ArrayList<>();

        

        //助記詞個數

        int nwords = concatBits.length / 11;

        for (int i = 0; i < nwords; ++i) {

            int index = 0;

            for (int j = 0; j < 11; ++j) {

                //java中int是由32位二進位制組成,index左移1位,如果concatBits對應的位為true則將index對應的位設定位1

                index <<= 1;

                if (concatBits[(i * 11) + j])

                    index |= 0x1;

            }

            //根據索引從助記詞列表中獲取單詞並新增到words

            words.add(this.wordList.get(index));

        }

        //得到的助記詞    

        return words;        

    }


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69956839/viewspace-2937213/,如需轉載,請註明出處,否則將追究法律責任。

相關文章