-
Notifications
You must be signed in to change notification settings - Fork 34
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
feat: add AlchemyProvider class #205
Changes from 5 commits
01027d5
e66ed94
4e6da5f
4302f9b
7edfaa0
83642fd
0b2bd33
7d43218
a3245a4
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,2 +1,3 @@ | ||
RPC_ORIGIN=https://free-eth-node.com | ||
# RPC_ORIGIN=http://localhost:3000 | ||
ALCHEMY_API_KEY=kwIkw24q335k05WBuFXBmT3W-P5luv4g | ||
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,37 @@ | ||
import { BaseProvider } from './BaseProvider'; | ||
|
||
export class AlchemyProvider extends BaseProvider { | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I think we can do this entire thing in just 5 lines by extending There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Yea this was overengineering @jtfirek. This does the same: There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Noted @dawsbot! that's much more simplified |
||
/** | ||
* @ignore | ||
*/ | ||
selectRpcUrl(): string { | ||
return this._rpcUrls[0]; | ||
} | ||
|
||
/** | ||
* @ignore | ||
*/ | ||
post(body: Record<string, unknown>): Promise<any> { | ||
return this._post(body); | ||
} | ||
|
||
/** | ||
* @param apiKey The Alchemy API key | ||
* @param network The Ethereum network to connect to | ||
*/ | ||
constructor(apiKey: string, network = 'mainnet') { | ||
const alchemyUrl = `https://eth-${network}.alchemyapi.io/v2/${apiKey}`; | ||
super([alchemyUrl]); | ||
} | ||
} | ||
|
||
/** | ||
* Helper function to avoid "new" | ||
* | ||
* @param apiKey the Alchemy API key | ||
* @param network the Ethereum network to connect to | ||
* @returns an initiated {@link AlchemyProvider} | ||
*/ | ||
export function alchemyProvider(apiKey: string, network?: string) { | ||
return new AlchemyProvider(apiKey, network); | ||
} |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,20 @@ | ||
import { AlchemyProvider } from '../../index'; | ||
import dotenv from 'dotenv'; | ||
dotenv.config(); | ||
|
||
const apiKey = process.env.ALCHEMY_API_KEY; | ||
|
||
if (!apiKey) { | ||
throw new Error( | ||
'ALCHEMY_API_KEY is not defined in the environment variables.', | ||
); | ||
} | ||
|
||
const provider = new AlchemyProvider(apiKey); | ||
|
||
describe('alchemyProvider.getGasPrice', () => { | ||
it('should return the current gas price', async () => { | ||
const gasPrice = await provider.getGasPrice(); | ||
expect(gasPrice).toBeDefined(); | ||
}); | ||
}); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Yikes, this will be botted and spent a ton of $ on immediately @jtfirek
This needs to live in a place that is gitignored, so it never sees the eyes of the public internet. Go cancel this API key immediately. I'll take care of adding it properly to an ignored part of the codebase
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Thanks for bringing this to my attention @dawsbot! I canceled the API key and will make my own env with the using the
.env.example
you created!