npm package: @finalitee-labs/uip-sdk
Description: Developer Kit for UIP
Author: Finalitee Labs
Latest version: 0.0.35

# UIP SDK Documentation

Utilities for UIP.

## Table of Contents

- [Installation](#installation)
- [API](#api)
- [Examples](#examples)

## Installation

Using npm:

```bash
npm install @finalitee-labs/uip-sdk
```

## API

Currently SDK include `Fees` module for fees calculation and 
network activity checks. Also it is possible to calculate 
message hash from source network transaction

### EVM

Main method for estimation:
```typescript
public async estimateExecutionWithGas({
  srcChainId: bigint,
  destChainId: bigint,
  gasLimit: bigint
})
```

Solana method for estimation:

```typescript
public async estimateExecutionSolana(
  input: SimulateExecuteLiteInput
)

export type SimulateExecuteLiteInput = {
  connection: Connection;
  payload: Buffer;
  srcChain: bigint;
  senderAddr: Buffer;
  destChain: bigint;
  destAddr: PublicKey;
  accounts: AccountMeta[];
  payerOverride?: PublicKey;
  computeUnits?: number;
};
```

## Examples

### Mode 

SDK is made for both testnet and mainnet usage.
Default mode set is mainnet. 

If you want to switch to testnet mode, use: 

```typescript
const provider = new UIPProvider($RPC_URL)
const feesEvm = new FeesEvm(provider)
feesEvm.mode = "testnet"
feesEvm.EIBName = "teib"
```

For switch to mainnet:

```typescript
const provider = new UIPProvider($RPC_URL)
const feesEvm = new FeesEvm(provider)
feesEvm.mode = "mainnet"
feesEvm.EIBName = "eib"
```

### Network config

SDK use public RPC providers by default. If you want to use your own 
personal config, redefine config with:

```typescript
const feesSdkConfigured = new FeesEvm(provider, config as Chain[])
```

Where config is array of `Chain` objects:
```typescript
{
  id: BigInt(11155111),
  name: "ethereum_sepolia",
  hexId: "0xAA36A7",
  type: "evm",
  mode: "testnet",
  rpcUrl: "https://ethereum-sepolia-rpc.publicnode.com",
  nativeCurrency: {
    name: "Sepolia Ether",
    symbol: "ETH",
    decimals: 18,
  },
  blockExplorerUrl: "https://sepolia.etherscan.io",
}
```

### EVM usage

```typescript
import { FeesEvm, FeesSolana, UIPProvider } from "@finalitee-labs/uip-sdk"

const provider = new UIPProvider($RPC_URL)
const feesEvm = new FeesEvm(provider)

async function getDstChainFee() {
  const fee = await feesSdk.estimateExecutionWithGas({
    srcChainId: 11155111n,
    destChainId: 33133n,
    gasLimit: 200000n,
  });
  console.log("Estimated price:", fee)
}
```

```typescript
  import { generateReceiptHash } from "@finalitee-labs/uip-sdk"
  // ... get receipt

  const msgHash = await generateReceiptHash(BigInt(33133), receipt)
```

### Solana usage

```typescript
import { FeesSolana } from "@finalitee-labs/uip-sdk"

const feesSolana = new FeesSolana()

fee = await feesSolana.estimateExecutionSolana({
  connection: new Connection(srcChain.rpcUrl),
  payload: Buffer.from(payloadOriginal),
  srcChain: BigInt(srcChainId),
  senderAddr: Buffer.from(senderContractAddr),
  destChain: BigInt(dstChainId),
  destAddr: new PublicKey(destAddr),
  accounts: [
    // Provide the accounts required for execution on the destination address
  ],
})
```