Go-Ethereum

是否可以通過 JSON RPC 解鎖 geth 錢包?

  • August 13, 2016

我目前正在乙太坊的 JSON RPC 之上開發一個應用程序。我希望能夠根據需要解鎖和鎖定錢包,類似於比特幣的做法。但是,目前似乎只能通過personal.unlockAccount使用控制台解鎖geth錢包。我想知道 - 這是解鎖 geth 錢包的唯一方法,還是有一些方法可以通過其他方式來完成,最好是使用 JSON RPC?

使用Go Ethereum - Management APIs - personal_sendTransaction API 解鎖您的帳戶並同時發送您的交易更安全:

個人發送交易

驗證給定的密碼並送出交易。

該事務與 eth_sendTransaction 的參數相同,並且包含發件人地址。如果密碼可用於解密登錄到 tx.from 的私鑰,則交易被驗證、簽名並發送到網路上。該賬戶在節點中未全域解鎖,不能用於其他RPC呼叫。

Client    Method invocation
Console   personal.signAndSendTransaction(tx, passphrase)
RPC       {"method": "personal_sendTransaction", "params": [tx, string]}

請注意,在 Geth 1.5 之前,請使用 personal_signAndSendTransaction,因為這是最初的介紹性名稱,後來才重命名為目前的最終版本。

例子

var tx = {from: "0x391694e7e0b0cce554cb130d723a9d27458f9298", to: "0xafa3f8684e54059998bc3a7b0d2b0da075154d66", value: web3.toWei(1.23, "ether")}
undefined
personal.sendTransaction(tx, "passphrase")
0x8474441674cdd47b35b875fd1a530b800b51a5264b9975fb21129eeb8c18582f

您的帳戶僅針對指定的交易解鎖。

您必須使用gethAPI 選項通過 RPC 介面啟用個人 API:

geth --rpc --rpcapi "eth,net,web3,personal" [other option] console

您可能需要閱讀以下連結,了解通過 RPC 允許個人 API 的安全性:


2016 年 7 月 21 日更新 - 回復下面的評論

我搜尋了gethgithub 儲存庫,personal_sendTransaction但找不到文本。然而,我發現internal/web3ext/web3ext.go#L435-L440

new web3._extend.Method({
   name: 'signAndSendTransaction',
   call: 'personal_signAndSendTransaction',
   params: 2,
   inputFormatter: [web3._extend.formatters.inputTransactionFormatter, null]
})

就像你說的,文件似乎已經過時了。

引用自:https://ethereum.stackexchange.com/questions/7196