ethers.js подключается к частной сети RPC

Я пытаюсь работать с Ethereum, и в настоящее время я использую пакет ethers npm, и я пытался подключить его к своей частной сети, которую я буду использовать для тестирования.

Я запустил свой geth с помощью этой команды.

geth --port 3000 --networkid 5  --rpc --rpcport 8545 --rpcaddr 0.0.0.0 --rpccorsdomain "*" --rpcapi "eth,net,web3,personal" 

Теперь я назначил этой машине один общедоступный IP-адрес и получил доступ извне через RPC. Но это неправильно работает.

Я запускаю этот код и могу сгенерировать адрес, но на консоли geth я не могу получить журнал о созданном кошельке.

var ethers = require('ethers');
var providers = require('ethers').providers;
var p = new providers.JsonRpcProvider('http://MY_RPC_PUBLIC_IP:8545', false, 5);
ethers.Wallet.provider=p;

var privateKey = "0x0123456789012345678901234567890123456789012345678901234567890123";
var wallet = new ethers.Wallet(privateKey);
console.log("Address: " + wallet.address);

Может ли кто-нибудь указать на ошибку, которую я здесь делаю?

Ответы (1)

Кошелек, который вы создали в приведенном выше коде, используя закрытый ключ, находится только на клиенте, в JavaScript. Geth ничего не знает ни о закрытом ключе, ни об учетной записи.

Преимущество ethers.js в том, что подписанты и провайдеры изолированы. В приведенном выше случае Geth является просто поставщиком. Подписавшаяся сторона (кошелек) может использовать провайдера:

// Connect the wallet to the provider
wallet.provider = provider;

// Ask the provider for the wallet's balance
wallet.getBalance().then(function(balance) {
    console.log(balance);
});

var sendPromise = wallet.sendTransaction({ to: targetAddress, value: amountWei})
sendPromise.then(function(tx) {
    console.log(tx);
});

Но кошелек, используя узел Geth для связи с сетью Ethereum, никогда не раскрывает секретный ключ Geth.