pyth-crosschain/express_relay/sdk/js/README.md

81 lines
2.0 KiB
Markdown

# Pyth Express Relay JS SDK
Utility library for interacting with the Pyth Express Relay API.
## Installation
### npm
```
$ npm install --save @pythnetwork/express-relay-evm-js
```
### Yarn
```
$ yarn add @pythnetwork/express-relay-evm-js
```
## Development
To generate the latest type declarations from the server openapi schema, run:
```bash
npm run generate-api-types
```
## Quickstart
```typescript
import {
Client,
OpportunityParams,
BidParams,
} from "@pythnetwork/express-relay-evm-js";
function calculateOpportunityBid(opportunity: Opportunity): BidParams | null {
// searcher implementation here
// if the opportunity is not suitable for the searcher, return null
}
async function bidStatusCallback(bidStatus: BidStatusUpdate) {
console.log(`Bid status for bid ${bidStatus.id}: ${bidStatus.status.status}`);
}
async function opportunityCallback(opportunity: Opportunity) {
const bidParams = calculateOpportunityBid(opportunity);
if (bidParams === null) return;
const opportunityBid = await client.signOpportunityBid(
opportunity,
bidParams,
privateKey // searcher private key with appropriate permissions and assets
);
await client.submitOpportunityBid(opportunityBid);
}
const client = new Client(
{ baseUrl: "https://per-staging.dourolabs.app/" },
bidStatusCallback,
opportunityCallback
);
await client.subscribeChains([chain_id]); // chain id you want to subscribe to
```
### Example
There is an example searcher in [examples](./src/examples/) directory.
#### SimpleSearcher
[This example](./src/examples/simpleSearcher.ts) fetches `OpportunityParams` from the specified endpoint,
creates a fixed bid on each opportunity and signs them with the provided private key, and finally submits them back to the server. You can run it with
`npm run simple-searcher`. A full command looks like this:
```bash
npm run simple-searcher -- \
--endpoint https://per-staging.dourolabs.app/ \
--chain-id op_sepolia \
--private-key <YOUR-PRIVATE-KEY>
```