以太坊開發文件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