Created
December 15, 2022 06:16
-
-
Save chiro-hiro/1ec9563d900462af8b5e961a41af0143 to your computer and use it in GitHub Desktop.
A wrapper of real JSON RPC provider
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import { ethers } from 'ethers'; | |
import { TillSuccess } from 'noqueue'; | |
// Let's consider this is a dirty trick, to force the JSON RPC | |
// to retries several times before give up | |
function getFakeProvider( | |
provider: ethers.providers.StaticJsonRpcProvider, | |
): ethers.providers.StaticJsonRpcProvider { | |
const fakeProvider = {}; | |
const injected: string[] = []; | |
for (let k in provider) { | |
// Inject public methods | |
if (typeof provider[k] === 'function' && !k.startsWith('_')) { | |
injected.push(k); | |
fakeProvider[k] = (...args: any[]) => { | |
console.log(`Injected ${k}() ha ha`); | |
// Retries 3 times every 3 secs | |
return TillSuccess(async () => provider[k](...args), 3000, 3); | |
}; | |
} | |
} | |
return new Proxy(provider, { | |
get(target, p, receiver) { | |
if (injected.includes(p as string)) { | |
return Reflect.get(fakeProvider, p, target); | |
} | |
return Reflect.get(target, p, receiver); | |
}, | |
}); | |
} | |
(async () => { | |
let provider = new ethers.providers.StaticJsonRpcProvider( | |
'https://bsc-dataseed.binance.org/', | |
); | |
let faker = getFakeProvider(provider); | |
console.log(await faker.getBlock('latest')); | |
console.log(faker._isProvider); | |
})(); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment