1. 程式人生 > >以太坊開發文件06

以太坊開發文件06

管理帳戶

警告 請記住您的密碼。

如果您丟失了用於加密帳戶的密碼,則無法訪問該帳戶。重複:沒有密碼的情況下訪問您的帳戶是不可能的,並且在這裡沒有忘記我的密碼選項。別忘記了。

注意:金鑰檔名稱命名約定已更改0.9.36本檔案旨在反映前沿版本所用帳戶的準確資訊。

以太坊CLI geth通過account命令提供帳戶管理

account command [arguments...]

管理帳戶可讓您建立新帳戶,列出所有現有帳戶,將私鑰匯入新帳戶,遷移至最新金鑰格式並更改密碼。

當系統提示您輸入密碼時,它支援互動模式,也支援通過給定密碼檔案提供密碼的非互動模式。非互動模式僅用於在測試網路或已知的安全環境中進行指令碼使用。

確保您記住您在建立新帳戶時(使用新的,更新或匯入)提供的密碼。沒有它,你無法解鎖你的帳戶。

請注意,不支援以非加密格式匯出您的金鑰。

金鑰儲存在<DATADIR>/keystore確保定期備份你的金鑰!有關更多資訊,請參閱DATADIR備份和還原金鑰檔案的最新格式是:UTC--<created_at UTC ISO8601>-<address hex>上市時的賬戶順序是字典,但是作為時間戳格式的結果,它實際上是建立順序

在以太節點之間傳送整個目錄或其中的個別金鑰是安全的。請注意,如果您將金鑰從不同節點新增到您的節點,則帳戶順序可能會更改。因此,請確保您不要依賴或更改指令碼或程式碼片段中的索引。

最後。不要忘記你的密碼

SUBCOMMANDS:

        list    print account addresses
        new     create a new account
        update  update an existing account
        import  import a private key into a new account

你可以通過獲取更多子命令的資訊 geth account help <subcommand>

例子

互動式使用

建立一個帳戶

$ geth account new
Your new account is locked with a password. Please give a password. Do not forget this password.
Passphrase:
Repeat Passphrase:
Address: {168bc315a2ee09042d83d7c5811b533620531f67}

上市賬戶

$ geth account list
Account #0: {a94f5374fce5edbc8e2a8697c15331677e6ebf0b}
Account #1: {c385233b188811c9f355d4caec14df86d6248235}
Account #2: {7f444580bfef4b9bc7e14eb7fb2a029336b07c9d}

匯入私鑰

$ geth --datadir /someOtherEthDataDir  account import ./key.prv
The new account will be encrypted with a passphrase.
Please enter a passphrase now.
Passphrase:
Repeat Passphrase:
Address: {7f444580bfef4b9bc7e14eb7fb2a029336b07c9d}

帳戶更新

$ geth account update a94f5374fce5edbc8e2a8697c15331677e6ebf0b
Unlocking account a94f5374fce5edbc8e2a8697c15331677e6ebf0b | Attempt 1/3
Passphrase:
0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b
Account 'a94f5374fce5edbc8e2a8697c15331677e6ebf0b' unlocked.
Please give a new password. Do not forget this password.
Passphrase:
Repeat Passphrase:
0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b

非互動式使用

您提供明文密碼檔案作為--password標誌的引數檔案中的資料由密碼的原始字元組成,後跟一個換行符。

注意:不建議直接將密碼作為命令列的一部分提供,但您始終可以使用shell欺騙來繞過此限制。

$ geth --password /path/to/password account new

$ geth --password /path/to/password account update b0047c606f3af7392e073ed13253f8f4710b08b6

$ geth account list

$ geth --datadir /someOtherEthDataDir --password /path/to/anotherpassword account import ./key.prv

建立帳戶

建立一個新的帳戶

geth account new

建立一個新帳戶並列印地址。

在控制檯上,使用:

> personal.newAccount("passphrase")

該帳戶以加密格式儲存。必須記住此密碼才能在未來解鎖您的帳戶。

對於非互動式使用,可以用--password標誌指定密碼

geth --password <passwordfile> account new

請注意,這僅用於測試,將密碼儲存到檔案或以任何其他方式公開是一個不好的主意。

通過匯入私鑰建立一個帳戶

    geth account import <keyfile>

從中匯入未加密的私鑰<keyfile>並建立一個新帳戶並列印該地址。

假設金鑰檔案包含一個未加密的私鑰,作為編碼為十六進位制的規範EC原始位元組。

帳戶以加密格式儲存,系統將提示您輸入密碼。

您必須記住此密碼才能在未來解鎖您的帳戶。

對於非互動式使用,可以用--password標誌指定密碼

geth --password <passwordfile> account import <keyfile>

注意:由於您可以直接將加密帳戶複製到另一個以太坊例項,因此在節點間傳輸帳戶時不需要此匯入/匯出機制。

警告:當您將金鑰複製到現有節點的金鑰庫中時,您習慣使用的帳戶順序可能會發生變化。因此,請確保您不要依賴帳戶順序,或者重新檢查並更新指令碼中使用的索引。

警告: 如果您將密碼標記與密碼檔案一起使用,則最好確保檔案不可讀,甚至可以列出除了您以外的任何人。您可以通

touch /path/to/password 
chmod 700 /path/to/password
cat > /path/to/password
>I type my pass here^D

更新現有帳戶

您可以update使用以帳戶地址或索引作為引數命令更新命令列上的現有帳戶

geth account update b0047c606f3af7392e073ed13253f8f4710b08b6
geth account update 2

帳戶以加密格式儲存在最新版本中,系統會提示您輸入密碼以解鎖帳戶,而另一個帳戶則儲存更新的檔案。

因此,可以使用相同的命令將不推薦格式的帳戶遷移到最新的格式,也可以更改帳戶的密碼。

對於非互動式使用,可以用--password標誌指定密碼

geth --password <passwordfile> account new

由於只能輸入一個密碼,所以只能進行格式更新,只能以互動方式更改密碼。

注意:帳戶更新有一個副作用,即您的帳戶順序發生更改。

更新成功後,所有以前的格式/版本的相同的金鑰將被刪除!


匯入您的錢包

匯入您的錢包非常容易。如果你記得你的密碼是:

geth wallet import /path/to/my/presale.wallet

會提示輸入您的密碼並匯入您的乙太網預售帳戶。它可以非互動方式與--password選項一起使用,以明文形式將密碼檔案作為包含錢夾密碼的引數。


帳戶和檢查餘額

列出您的當前帳戶

從命令列呼叫CLI:

$ geth account list
Account #0: {d1ade25ccd3d550a7eb532ac759cac7be09c2719}
Account #1: {da65665fc30803cb1fb7e6d86691e20b1826dee0}
Account #2: {e470b1a7d2c9c5c6f03bbaa8fa20db6d404a0c32}
Account #3: {f4dd5c3794f1fd0cdc0327a83aa472609c806e99}

按建立順序列出您的帳戶。

注意:如果您從其他節點複製金鑰檔案,則此順序可能會發生變化,所以請確保您不要依賴索引,也不要確定是否複製金鑰,然後在指令碼中檢查並更新帳戶索引。

當使用控制檯時:

> eth.accounts
['0x407d73d8a49eeb85d32cf465507dd71d507100c1']

或通過RPC:

# Request
$ curl -X POST --data '{"jsonrpc":"2.0","method":"eth_accounts","params":[],"id":1} http://127.0.0.1:8545'

# Result
{
  "id":1,
  "jsonrpc": "2.0",
  "result": ["0x407d73d8a49eeb85d32cf465507dd71d507100c1"]
}

如果您想以非互動方式使用帳戶,則需要將其解鎖。您可以在命令列上使用--unlock以空格分隔的帳戶列表(十六進位制或索引)作為引數選項執行此操作,以便您可以以程式設計方式為一個會話解鎖帳戶。如果您想通過RPC從Dapps使用您的帳戶,這很有用。--unlock將解鎖第一個帳戶。當您以程式設計方式建立您的賬戶時,這很有用,您不需要知道真正的賬戶來解鎖它。

解鎖一個帳戶:

geth --password <(echo this is not secret!) account new 
geth --password <(echo this is not secret!) --unlock primary --rpccorsdomain localhost --verbosity 6 2>> geth.log

您可以使用整數索引(而不是帳戶地址)來引用帳戶列表中的地址位置(與建立順序相對應)

命令列允許您解鎖多個帳戶。在這種情況下,要解鎖的引數是以空格分隔的帳戶地址或索引列表。

geth --unlock "0x407d73d8a49eeb85d32cf465507dd71d507100c1 0 5 e470b1a7d2c9c5c6f03bbaa8fa20db6d404a0c32"

如果這種構造是非互動式使用的,那麼您的密碼檔案將需要包含相關帳戶的相應密碼,每行一個。

在控制檯上,您也可以解鎖帳戶(一次一個)。

personal.unlockAccount(address, "password")

請注意,我們不推薦在這裡使用密碼引數,因為控制檯歷史記錄被記錄下來,所以你可能會損害你的帳戶。你被警告了。

檢查帳戶餘額

要檢查您的etherbase賬戶餘額:

> web3.fromWei(eth.getBalance(eth.coinbase), "ether")
6.5

用JavaScript函式列印所有天平:

function checkAllBalances() { 
var i =0; 
eth.accounts.forEach( function(e){
     console.log("  eth.accounts["+i+"]: " +  e + " \tbalance: " + web3.fromWei(eth.getBalance(e), "ether") + " ether"); 
i++; 
})
};

然後可以執行:

> checkAllBalances();
  eth.accounts[0]: 0xd1ade25ccd3d550a7eb532ac759cac7be09c2719     balance: 63.11848 ether
  eth.accounts[1]: 0xda65665fc30803cb1fb7e6d86691e20b1826dee0     balance: 0 ether
  eth.accounts[2]: 0xe470b1a7d2c9c5c6f03bbaa8fa20db6d404a0c32     balance: 1 ether
  eth.accounts[3]: 0xf4dd5c3794f1fd0cdc0327a83aa472609c806e99     balance: 6 ether

由於此功能在重新啟動geth後將消失,因此稍後可以儲存常用的功能。loadScript功能使得這個非常容易。

首先,將checkAllBalances()函式定義儲存到計算機上的檔案中。例如/Users/username/gethload.js然後從互動式控制檯載入檔案:

> loadScript("/Users/username/gethload.js")
true

該檔案將修改您的JavaScript環境,就像您手動鍵入命令一樣。隨意試驗!


傳送Ether

用控制檯傳送一個簡單的ether事務的基本方法如下:

> eth.sendTransaction({from:sender, to:receiver, value: amount})

使用內建的JavaScript,您可以輕鬆設定變數來儲存這些值。例如:

> var sender = eth.accounts[0];
> var receiver = eth.accounts[1];
> var amount = web3.toWei(0.01, "ether")

或者,您也可以通過以下方式在一行中撰寫交易:

> eth.sendTransaction({from:eth.coinbase, to:eth.accounts[1], value: web3.toWei(0.05, "ether")})
Please unlock account d1ade25ccd3d550a7eb532ac759cac7be09c2719.
Passphrase: 
Account is now unlocked for this session.
'0xeeb66b211e7d9be55232ed70c2ebb1bcc5d5fd9ed01d876fac5cff45b5bf8bf4'

由此產生的交易是 0xeeb66b211e7d9be55232ed70c2ebb1bcc5d5fd9ed01d876fac5cff45b5bf8bf4

如果密碼不正確,您將會收到錯誤資訊:

error: could not unlock sender account