В настоящее время я разрабатываю приложение поверх Ethereum JSON RPC. Я хотел бы иметь возможность разблокировать и заблокировать кошелек по мере необходимости, подобно тому, как это делает Биткойн. Однако похоже, что на данный момент гет-кошелек можно разблокировать только через консоль через personal.unlockAccount. Мне интересно - это единственный способ разблокировать гет-кошелек, или есть способ сделать это каким-то другим способом, в идеале с помощью JSON RPC?
Безопаснее использовать Go Ethereum — Management APIs — personal_sendTransaction API, чтобы разблокировать свою учетную запись и одновременно отправить транзакцию:
personal_sendТранзакция
Подтвердите данную парольную фразу и отправьте транзакцию.
Транзакция является тем же аргументом, что и для 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
Ваша учетная запись разблокирована только для указанной транзакции.
Вам нужно будет включить личный API через интерфейс RPC, используя geth
опцию API:
geth --rpc --rpcapi "eth,net,web3,personal" [other option] console
Вы можете прочитать следующие ссылки о безопасности использования личного API через RPC:
Обновление от 21.07.2016 - Ответ на комментарий ниже
Я искал geth
репозиторий github 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]
})
Как вы сказали, документация кажется устаревшей.
Да, используя вызов API "personal_unlockAccount"
{
'jsonrpc':'2.0',
'method':'personal_unlockAccount',
'params':[address, password, seconds],
'id':1
};
Пиачу
The method personal_sendTransaction does not exist/is not available
. Тем не менее, мне удалось использоватьpersonal_listAccounts
andpersonal_unlockAccount
- я не совсем уверен, что заставит их работать, но не sendTransaction...Пиачу
personal_signAndSendTransaction
, работает - документ API управления кажется устаревшим...Мэтт