-
Notifications
You must be signed in to change notification settings - Fork 6
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
Add another option to provide auth details #25
Changes from all commits
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 | ||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
@@ -22,14 +22,17 @@ Prerequisite: [Node 20+](https://www.npmjs.com/package/node/v/20.11.1) | |||||||||||||||||
```shell | ||||||||||||||||||
npm install @coinbase/staking-client-library-ts | ||||||||||||||||||
``` | ||||||||||||||||||
2. Create and download an API key from the [Coinbase Developer Platform](https://portal.cdp.coinbase.com/access/api). | ||||||||||||||||||
3. Place the key named `.coinbase_cloud_api_key.json` at the root of this repository. | ||||||||||||||||||
4. Install necessary Typescript dependencies: | ||||||||||||||||||
|
||||||||||||||||||
2. Install necessary Typescript dependencies: | ||||||||||||||||||
```shell | ||||||||||||||||||
npm install -g ts-node | ||||||||||||||||||
npm install -g typescript | ||||||||||||||||||
``` | ||||||||||||||||||
5. Copy and paste one of the code samples below or any of our [provided examples](./examples/) into an `example.ts` file and run it with `ts-node` :rocket: | ||||||||||||||||||
npm install -g ts-node typescript | ||||||||||||||||||
``` | ||||||||||||||||||
|
||||||||||||||||||
3. Get your API keys info such as api key name and api private key from here: https://portal.cdp.coinbase.com/access/api. <br> | ||||||||||||||||||
These will be used in order to set up our client later in the example code. <br> | ||||||||||||||||||
For detailed instructions refer to our api key setup guide [here](https://docs.cdp.coinbase.com/developer-platform/docs/cdp-keys). | ||||||||||||||||||
|
||||||||||||||||||
4. Copy and paste one of the code samples below or any of our [provided examples](./examples/) into an `example.ts` file and run it with `ts-node` :rocket: | ||||||||||||||||||
Comment on lines
+31
to
+35
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 use fewer words here 🤔.
Suggested change
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. tl;dr want to move away from downloading the file completely |
||||||||||||||||||
```shell | ||||||||||||||||||
ts-node example.ts | ||||||||||||||||||
``` | ||||||||||||||||||
|
@@ -45,7 +48,11 @@ This code sample creates an ETH staking workflow. View the full code sample [her | |||||||||||||||||
// examples/ethereum/create-workflow.ts | ||||||||||||||||||
import { StakingClient } from "@coinbase/staking-client-library-ts"; | ||||||||||||||||||
|
||||||||||||||||||
const client = new StakingClient(); | ||||||||||||||||||
// Set your api key name and private key here. Get your keys from here: https://portal.cdp.coinbase.com/access/api | ||||||||||||||||||
const apiKeyName: string = 'your-api-key-name'; | ||||||||||||||||||
const apiPrivateKey: string = 'your-api-private-key'; | ||||||||||||||||||
|
||||||||||||||||||
const client = new StakingClient(apiKeyName, apiPrivateKey); | ||||||||||||||||||
|
||||||||||||||||||
client.Ethereum.stake('holesky', '0xdb816889F2a7362EF242E5a717dfD5B38Ae849FE', '123') | ||||||||||||||||||
.then((workflow) => { | ||||||||||||||||||
|
@@ -108,7 +115,11 @@ This code sample creates a SOL staking workflow. View the full code sample [here | |||||||||||||||||
// examples/solana/create-workflow.ts | ||||||||||||||||||
import { StakingClient } from "@coinbase/staking-client-library-ts"; | ||||||||||||||||||
|
||||||||||||||||||
const client = new StakingClient(); | ||||||||||||||||||
// Set your api key name and private key here. Get your keys from here: https://portal.cdp.coinbase.com/access/api | ||||||||||||||||||
const apiKeyName: string = 'your-api-key-name'; | ||||||||||||||||||
const apiPrivateKey: string = 'your-api-private-key'; | ||||||||||||||||||
|
||||||||||||||||||
const client = new StakingClient(apiKeyName, apiPrivateKey); | ||||||||||||||||||
|
||||||||||||||||||
client.Solana.stake('devnet', '8rMGARtkJY5QygP1mgvBFLsE9JrvXByARJiyNfcSE5Z', '100000000') | ||||||||||||||||||
.then((workflow) => { | ||||||||||||||||||
|
@@ -175,13 +186,17 @@ This code sample returns rewards for an Ethereum validator address. View the ful | |||||||||||||||||
// examples/ethereum/list-rewards.ts | ||||||||||||||||||
import { StakingClient } from "@coinbase/staking-client-library-ts"; | ||||||||||||||||||
|
||||||||||||||||||
// Set your api key name and private key here. Get your keys from here: https://portal.cdp.coinbase.com/access/api | ||||||||||||||||||
const apiKeyName: string = 'your-api-key-name'; | ||||||||||||||||||
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. what would be really cool and nice to have is a "test" API key that perhaps has limited scopes etc that I can plaster in all examples. Could be easy for someone wanting to just run the example as is, without going to the platform. |
||||||||||||||||||
const apiPrivateKey: string = 'your-api-private-key'; | ||||||||||||||||||
|
||||||||||||||||||
const client = new StakingClient(apiKeyName, apiPrivateKey); | ||||||||||||||||||
|
||||||||||||||||||
// Defines which address and rewards we want to see | ||||||||||||||||||
const address: string = | ||||||||||||||||||
'0xac53512c39d0081ca4437c285305eb423f474e6153693c12fbba4a3df78bcaa3422b31d800c5bea71c1b017168a60474'; | ||||||||||||||||||
const filter: string = `address='${address}' AND period_end_time > '2024-02-25T00:00:00Z' AND period_end_time < '2024-02-27T00:00:00Z'`; | ||||||||||||||||||
|
||||||||||||||||||
const client = new StakingClient(); | ||||||||||||||||||
|
||||||||||||||||||
// Loops through rewards array and prints each reward | ||||||||||||||||||
client.Ethereum.listRewards(filter).then((resp) => { | ||||||||||||||||||
resp.rewards!.forEach((reward) => { | ||||||||||||||||||
|
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.
I really like how the examples don't assume the user placed the API Key at a specific location anymore. It's best to be explicit in the code where possible. However, I do think it's a bit more cumbersome for a user to manually copy/paste the key's two fields into the example (including a private key, which isn't ideal from a security perspective). Especially since the CDP GUI downloads the key onto the filesystem already.
What if we asked the user to specify the file location of the API Key? So maybe it looks like this?
This is just an idea, so curious what you think.
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.
It depends what we are trying to do here - something I probably failed calling out in the PR description.. you're right downloading an API key or copy/pasting these 2 values feel equally difficult - it felt like exchanging one problem with perhaps a bigger one 😅 . But the primary aim of moving to coy/pasting these 2 details - key name and private key is so that:
We can move away from the coinbase_cloud api key file naming that the platform might take some time to update. We can skip the name confusion if we just copy/paste the relevant fields which the platform offers a good way of copy/pasting.
I believe the platform team is working on a token based auth model at which point in time, copy/pasting a token from platform UI will be the expected path. So this PR in a way preps for that eventual future. @deangalvin-cb can maybe confirm/deny this or add more color.
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.
👍 Yes, we are working directly with the https://github.com/coinbase/coinbase-sdk-ruby team to see if we can better align & unify our designs. I had @drohit-cb go this route as to not spend too much time building each iteration, and just making this quick improvement now.
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.
Kk I'm onboard 👍