區塊鏈 建立錢包(以太坊)

2022-07-20 18:18:16 字數 3284 閱讀 1814

所有問題大體可以分為三類:區塊鏈基本概念,錢包安全知識以及錢包轉賬交易

(1)去中心化

因為整個網路沒有中心統治者。系統依靠的是網路上多個參與者的公平約束,所以任意每幾個節點的權利和義務都是均等的,而且每乙個節點都會儲存這個區塊鏈上所有資料。即使該節點被損壞或遭受攻擊,仍然不會對賬簿造成任何威脅。

(2)不可逆

區塊鏈上的資訊必須不可撤銷,不能隨意銷毀。系統是開源的,整個系統都必須是公開透明的,因此某筆交易被全網廣播以後,達到 6 個確認以上就成功記錄在案了,且不可逆轉不可撤銷。注: imtoken 是 12 個區塊確認。

(3)不可篡改

確保資訊或合約無法偽造。賬簿在某個人或某幾人手上,造假的可能性就非常高,但每個人手裡都有一本賬簿,除非整個遊戲裡超過51%的人都更改某一筆賬目,否則任何的篡改都是無效的,這也是集體維護和監督的優越性。

(4)匿名性

各區塊節點的身份資訊不需要公告或驗證, 資訊傳遞可以匿名進行。舉個簡單的例子, 就是你在區塊鏈上向乙個錢包位址發起交易, 但是卻無法知道這個位址背後確切對應的是那乙個人, 或者你的私鑰被某乙個黑客盜竊了, 無法從乙個錢包位址中得知黑客是誰。

2,以太坊基本概念

(1)錢包位址

以0x開頭的42位的雜湊值 (16進製制) 字串

(2)keystore

明文私鑰通過加密演算法加密過後的 json 格式的字串, 一般以檔案形式儲存

(3)助記詞

12 (或者 15、18、21) 單詞構成, 使用者可以通過助記詞匯入錢包, 但反過來講, 如果他人得到了你的助記詞, 不需要任何密碼就可以輕而易舉的轉移你的資產, 所以要妥善保管自己的助記詞

(4)明文私鑰

64位的16進製制雜湊值字串, 用一句話闡述明文私鑰的重要性 「誰掌握了私鑰, 誰就掌握了該錢包的使用權!」 同樣, 如果他人得到了你的明文私鑰, 不需要任何密碼就可以輕而易舉的轉移你的資產

通俗地去解釋,以銀行賬戶為模擬,這些名詞分別對應內容如下:

1,生成助記詞

1 import bip39 from 'react-native-bip39'

2 getmnemonic()=>, function

(err) )

9 }

2,生成seed與錢包物件wallet

使用助記詞計算出seed,然後得到wallet

1 import crypto from 'crypto'2//

hdkey

3var bitcoin_versions = 45

function

hdkey (versions)

15 hdkey.frommasterseed = function

(seedbuffer, versions)

26//

wallethdkey

27function

ethereumhdkey ()

2930

function

fromhdkey (hdkey)

3536 ethereumhdkey.frommasterseed = function

(seedbuffer)

39//

獲取錢包物件

40 getwallet = (mnemonic) =>

3,生成錢包位址與keystore檔案

1 1wallet = function (priv,pub) wallet.prototype.getv3filename = function

(timestamp)

10 wallet.prototype.getaddress = function

() 13 wallet.prototype.tov3 = function

(password, opts, callback)

15var salt = opts.salt || crypto.randombytes(32)

16var iv = opts.iv || crypto.randombytes(16)

17var

derivedkey

18var kdf = opts.kdf || 'scrypt'

19var kdfparams =

23if (kdf === 'pbkdf2')

28else

3132

var ciphertext = buffer.concat([ cipher.update(this

.privkey), cipher.final() ])

3334

var mac = ethutil.sha3(buffer.concat([ derivedkey.slice(16, 32), buffer.from(ciphertext, 'hex') ]))

3536

return

),39 address: this.getaddress().tostring('hex'),

40crypto: ,

45 cipher: opts.cipher || 'aes-128-ctr',

46kdf: kdf,

47kdfparams: kdfparams,

48 mac: mac.tostring('hex')49}

50}5152

}53 getaddressandwallet=(wallet)=>);

61 }

4,獲取私鑰,用於交易

1 wallet.prototype.getprivatekey = function

() 4 wallet.prototype.getpublickey = function

() 7

var privatekey = wallet.getprivatekey().tostring('hex')//

獲取私鑰

8var getpublickey = wallet.getpublickey().tostring('hex')

區塊鏈開發(七)以太坊錢包 Mist

建立鏈條的geth命令 geth datadir init genesis.json geth datadir nodiscover console 2 geth.log 在命令列模式下,新建賬號,並且啟動挖礦 personal.newaccount 123456 0x48ad44beba68a98...

以太坊區塊鏈

由私鑰控制.與 無關聯 可以建立發起交易給另外乙個賬戶.外部賬號之間的交易是轉賬 外部賬戶轉賬到合約賬戶可以啟用合約賬戶 被合約 控制,有關聯的 可以響應外部賬戶發起的交易 這裡需要注意的是這裡的merkle樹並不是位元幣的merkle樹,以太坊使用的是mpt樹.merkle樹的變種,功能更強大.可...

20180717 區塊鏈相關學習 以太坊錢包

重置以太坊私有鏈的方法 1.刪除根目錄下隱藏的檔案.ethash,在mac系統中該資料夾 下 2.刪除以太坊私有鏈下面的geth keystore兩個資料夾 當前區塊數 在以太坊的底層眼中,智慧型合約也是部署在以太坊條鏈上乙個特殊賬戶,因此對智慧型合約的呼叫,也就是對智慧型合約賬戶的一次send t...