UNPKG

web3-zeus-provider

Version:

Reliable web3 provider that uses multiple RPC API connections and switches between them in case of failure

51 lines (43 loc) 2.28 kB
const ProviderEngine = require("web3-provider-engine"); const FiltersSubprovider = require('web3-provider-engine/subproviders/filters.js'); const WalletSubprovider = require('web3-provider-engine/subproviders/wallet.js'); const ProviderSubprovider = require("web3-provider-engine/subproviders/provider.js"); const HookedWalletEthTxSubprovider = require("web3-provider-engine/subproviders/hooked-wallet-ethtx"); const EthereumjsWallet = require('ethereumjs-wallet'); const Web3 = require("web3"); const NonceSubprovider = require('web3-provider-engine/subproviders/nonce-tracker.js'); const RpcSubprovider = require("web3-provider-engine/subproviders/rpc.js"); function PrivateKeyProvider(privateKey, providerUrl) { // this.wallet = EthereumjsWallet.fromPrivateKey(new Buffer(privateKey, "hex")); // this.address = "0x" + this.wallet.getAddress().toString("hex"); this.engine = new ProviderEngine(); this.engine.addProvider(new FiltersSubprovider()); this.engine.addProvider(new NonceSubprovider()); // this.engine.addProvider(new WalletSubprovider(this.wallet, {})); this.engine.addProvider(new HookedWalletEthTxSubprovider({ getAccounts: (cb) => { cb(null, ["0x9D889b9c7cc90B7cD2324b3Bb514a2E2ec82aC4e"]); }, getPrivateKey: (address, cb) => { console.log("GetPK", address); cb(null, Buffer.from("55572648561528C5964648FEB815211574A945B439318821602B8C60DF9FF40F", "hex")); } })); // HACK: `sendAsync` was removed // if (!Web3.providers.HttpProvider.prototype.sendAsync) { // Web3.providers.HttpProvider.prototype.sendAsync = Web3.providers.HttpProvider.prototype.send // } // this.engine.addProvider(new ProviderSubprovider(new Web3.providers.HttpProvider(providerUrl))); this.engine.addProvider(new RpcSubprovider({ rpcUrl: providerUrl, })); this.engine.start(); } PrivateKeyProvider.prototype.sendAsync = function() { console.log("sendAsync private-key-provider"); this.engine.sendAsync.apply(this.engine, arguments); }; PrivateKeyProvider.prototype.send = function() { return this.engine.send.apply(this.engine, arguments); }; module.exports = PrivateKeyProvider;