錢包是用於傳送和接受代幣的客戶端,就像我們使用郵箱來管理自己的郵件,我們需要乙個客戶端來管理自己的代幣。錢包的本質是保管私鑰的工具,私鑰就是一串很長的數字和字母組合的字串,這個字串讓你有權力把自己的數字貨幣送給別人,換句話說,無論誰知道你的私鑰,都可以控制你的數字貨幣。私鑰也用於生成你的代幣位址 - 這就像郵箱位址,只有知道位址才能給別人傳送代幣。
然而,儘管代幣位址是通過私鑰生成的,但是沒有辦法通過檢查數字貨幣位址來確定私鑰是什麼。總而言之,錢包的核心功能是私鑰的建立、儲存和使用。
錢包的型別
私鑰不同的生成方法,也對應著不同的錢包結構,通常可以分為非確定性錢包和確定性錢包。位元幣最早的客戶端(satoshi client)就是非確定性錢包,錢包是一堆隨機生成的私鑰的集合。 客戶端會預先生成 100 個隨機私鑰,並且每個私鑰只使用一次。每個交易使用乙個位址的概念是中本聰提出的。如果交易比較頻繁,私鑰可能會用光,然後再產生一批私鑰,所以每次完成 100 個交易後,你必須備份新的 wallet.dat 檔案,否則可能會丟失資產。
這種錢包難以管理和備份。如果你生成很多私鑰,你必須儲存它們所有的副本。這就意味著這個錢包必須被經常性地備份。每個私鑰都必須備份,否則一旦錢包不可訪問時,無法找回錢包。確定性錢包則不需要每次轉賬都要備份,確定性錢包的私鑰是對種子進行單向雜湊運算生成的,種子是一串由隨機數生成器生成的隨機數。在確定性錢包中,只要有這個種子,就可以找回所有私鑰,只需備份種子就相當於備份您的所有錢包,所以這個種子也相當重要,一定要備份到安全的地方。
什麼是 以太坊錢包
以太坊 錢包是目前常用的確定性錢包 ,說到 以太坊錢包,大家可能第一反應會想到硬體錢包 (hardware wallet),其實這裡的 以太坊 是 hierarchical deterministic(分層確定性)的縮寫。所謂分層,就是乙個大公司可以為每個子部門分別生成不同的私鑰,子部門還可以再管理子子部門的私鑰,每個部門可以看到所有子部門裡的幣,也可以花這裡面的幣。也可以只給會計人員某個層級的公鑰,讓他可以看見這個部門及子部門的收支記錄,但不能花裡面的錢,使得財務管理更方便了。
分層確定性的概念早在 bip32 提案提出。根據位元幣核心開發者 gregory maxwell 的原始描述和討論,pieter wuille 在2012 年 02月 11日整理完善提交 bip32 。直到 2023年 6月 15 日 才被合併到 bitcoin core,目前幾乎所有的錢包服務商都整合了該協議。bip32 是 以太坊 錢包的核心提案,通過種子來生成主私鑰,然後派生海量的子私鑰和位址,但是種子是一串很長的隨機數,不利於記錄,所以我們用演算法將種子轉化為一串助記詞 (mnemonic),方便儲存記錄,這就是 bip39,它擴充套件了 以太坊 錢包種子的生成演算法。bip43 對 bip32 樹結構增加了子索引標識 purpose 的擴充套件 m/purpose』/ * 。
bip44 是在 bip43 和 bip32 的基礎上增加多幣種,通過 以太坊 錢包派生多個位址,可以同時管理主網和測試網的位元幣,bip44 提出了5層的路徑建議,如下:m/purpse』/coin_type』/account』/change/address_indexbip44的規則使得 以太坊 錢包非常強大,使用者只需要儲存乙個種子,就能控制所有幣種,所有賬戶的錢包。
位元幣 以太坊 錢包是如何生成的?
生成乙個助記詞(參見 bip39)
該助記詞使用 pbkdf2 轉化為種子(參見 bip39)
種子用於使用 hmac-sha512 生成根私鑰(參見 bip32)
從該根私鑰,匯出子私鑰(參見 bip32),其中節點布局由bip44設定
可以看出 bip39 生成助記詞的過程非常重要, 大家肯定關心 bip39 的安全性,如果乙個 以太坊 錢包助記詞是 12 個單詞,一共有 2048 個單詞可能性,如何算出隨機的生成的助記詞所有可能性是乙個排列問題,根據公式: n!/( n - r )! ,既 2048!/(2048-12)! = 5.2715379713014884760003093175282 e+39 。
我們可以舉個模擬,地球上的沙子數量在大約是1 後面 18 個零。如果你可以每秒生成 一百萬個助記詞,那麼一年可以生成 1000000*60*60*24*365=3.1536e+13,大約需要 1.6715937e+26 年遍歷所有助記詞,這是多少年呢?
以太坊目前解決方案
以太坊在 eip84 討論,是否遵循 bip32 和 bip44,社群裡提出來很多有意思的觀點,位元幣是基於 utxo 的,所以可以使用 以太坊 錢包(bip32)為每個交易分配乙個新位址,以保護您的隱私。然而,以太坊是基於帳戶,每個帳戶都有乙個位址,bip 是位元幣的提案,而且位元幣的資料結構的設計是圍繞改變位址的想法構建的,bip 的一些提案可能並不適合以太坊。以太坊的模式和位元幣utxo 不同,以太坊轉賬不能改變位址,如果在以太坊上實現 utxo ,使用者還必須簽名兩個交易以將餘額的一部分傳送到乙個位址,將餘額的一部分傳送到第二個位址 - 這將使成本增加一倍,而且第二個交易可能不會在同乙個區塊中,當然以太坊也可以通過智慧型合約的方式實現。
另外,以太坊目前官方錢包採用 kdf 的形式,也就是我們常說的 keystore 的形式。
在 eip85 的討論,以太坊社群似乎預設也採用了 bip32 的做法
先來說一說 bip32 的好處
使用時間長,已經接受社群審查
已經有多個程式語言的實現
多個硬體錢包正在使用
可以乙個錢包,同時支援位元幣和以太坊
eip85 提議以太坊路徑為 : m/44』/60』/a』/0/n這裡 的 a 表示帳號,n 是第 n 生成的位址,60 是在 slip44 提案中暫定的,因為 bip44 只定義到 0 - 31。
目前已知以太坊客戶端的具體實現:
總結使用單個位址錢包,你的所有交易都將與單個位址相關聯,由於區塊鏈所有的交易記錄都是公開的,所以任何人都可以看到看到每個位址的所有交易記錄以及賬戶餘額。以太坊錢包通過在傳送和接收資金時能夠生成新位址,大大提高私隱性,使你的交易難以追蹤。當然匿名性是相對的,現在我們也有私隱性更好的零知識證明演算法。
以太坊錢包是生成不重複使用位址的方法 ,記住乙個種子就可以訪問所有位址的錢而不需要每個位址都備份私鑰。當然以太坊 錢包不僅適用於位元幣,以太坊錢包可以讓乙個錢包同時管理多資產成為可能性。
以太坊代幣事件監控 以太坊ERC20代幣合約案例
一.erc20代幣合約與web3呼叫 二.erc20合約標準 contract erc20 require compilcaipiao const bytecode bytecodejsonobj.bytecode const inte ce bytecodejsonobj.inte ce 2.匯入...
理解以太坊上的代幣
如果你對以太坊的世界有一些了解,你很可能聽過人們聊到代幣 尤其是 erc20 代幣.乙個 代幣 在以太坊基本上就是乙個遵循一些共同規則的智慧型合約 即它實現了所有其他代幣合約共享的一組標準函式,例如 transfer address to,uint256 value 和 balanceof addr...
以太坊智慧型合約部署代幣
pragma solidity 0.4.0 建立乙個基礎合約,用於指定某些操作只能由合約擁有者 執行 contract owned 宣告乙個修改器,證明只有合約擁有者才能執行某些操作 modifier onlyownerelse 此函式的功能是把合約轉讓給指定使用者 function transfe...