@deliquifiedlabs/uniswapx-sdk
Version:
SDK for the UniswapX protocol
108 lines (78 loc) • 2.99 kB
Markdown
# uniswapx-sdk
SDK for the UniswapX protocol
## Usage
The SDK contains bindings for two main flows: parsing serialized orders & building new orders.
### Building & Signing Orders
```ts
import { DutchOrder, NonceManager } from '@uniswap/uniswapx-sdk';
import { ethers } from 'ethers';
const provider = new ethers.providers.JsonRpcProvider(RPC_URL);
const account = await provider.getSigner().getAddress();
const nonceMgr = new NonceManager(provider, 1);
const nonce = await nonceMgr.useNonce(account);
const chainId = 1;
const builder = new DutchOrderBuilder(chainId);
const order = builder
.deadline(deadline)
.decayEndTime(deadline)
.decayStartTime(deadline - 100)
.nonce(nonce)
.input({
token: '0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48',
amount: BigNumber.from('1000000'),
})
.output({
token: '0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2',
startAmount: BigNumber.from('1000000000000000000'),
endAmount: BigNumber.from('900000000000000000'),
recipient: '0x0000000000000000000000000000000000000000',
})
.build();
// Sign the built order
const { domain, types, values } = order.permitData();
const signature = wallet._signTypedData(domain, types, values);
const serializedOrder = order.serialize();
// submit serializedOrder and signature to order pool
```
### Parsing Orders
```ts
import { DutchOrder, Order } from '@uniswap/uniswapx-sdk';
const serializedOrder = '0x1111222233334444555500000000234300234...';
const chainId = 1;
const order: Order = DutchOrder.parse(serializedOrder, chainId);
const orderData = order.info;
const orderHash = order.hash();
```
### Validating Orders
```ts
import { ethers } from 'ethers';
import { OrderValidator } from 'uniswapx-sdk';
const provider = new ethers.providers.JsonRpcProvider(RPC_URL);
const validator = new OrderValidator(provider, CHAIN_ID);
const orders: SignedOrder[] = [
{
order: order1,
signature: signature1
},
{
order: order2,
signature: signature2
}
];
try {
const statusList: OrderValidation[] = await validator.validateBatch(orders);
// Do something with list of statuses
}
catch(e) {
// Handle error
}
```
### Order Object
**serialize()**
Returns an abi-encoded serialization of the order. This serialized format is passed into the corresponding reactor contract for execution.
**getSigner(signature)**
Recovers the address which created the given signature over the order. Used to determine the order maker.
**permitData()**
Returns the domain, types, and values used to generate an EIP-712 signature over the order. Note that this signature both approves the release of the order's input tokens _and_ the execution of the order itself.
**hash()**
Returns the order hash. This is used as a key to track order fulfillment on-chain. It may also be useful as a unique order identifier for off-chain purposes.