Skip to main content

Adhoc Market and Pool Deployment

In this example we create a market and deploy a pool(with liquidity) for it in two distinct steps/transactions.

1. Create the market

First we create the market, the step is very similar to the Market Creation Example with the exception that we do not supply the pool params, and that we have to supply the creationType type.

import { KeyringPair } from "@polkadot/keyring/types";
import {
batterystationRpc,
create,
CreateStandaloneMarketParams,
evenWeights,
RpcContext,
Sdk,
swapFeeFromFloat,
ZTG,
} from "@zeitgeistpm/sdk";

/**
* Initialize the SDK in full or rpc mode to be able to submit transactions to the chain.
*/
const sdk: Sdk<RpcContext> = await create(batterystationRpc());

/**
* Get the signer from the wallet extension or other keyring.
*/
const signer: KeyringPair = getSignerSomehow();

/**
* Params for creating a standalone market without pool.
*/
const params: CreateStandaloneMarketParams<typeof sdk> = {
signer,
waitForFinalization: false,
baseAsset: { Ztg: null },
disputeMechanism: "Authorized",
creationType: "Permissionless",
marketType: { Categorical: 2 },
oracle: signer.address,
period: { Timestamp: [Date.now(), Date.now() + 60 * 60 * 24 * 1000 * 2] },
deadlines: {
disputeDuration: 5000,
gracePeriod: 200,
oracleDuration: 500,
},
metadata: {
__meta: "markets",
question: "Creating a market and pool in two steps.",
description: "Two step market creation.",
slug: "two-step-market-example",
categories: [
{ name: "yes", ticker: "Y" },
{ name: "no", ticker: "N" },
],
tags: ["dev"],
},
};

/**
* Create market transaction and send it.
*/
const marketCreationResponse = await sdk.model.markets.create(params);

/**
* Extracts the market from events in the block.
*/
const { market } = marketCreationResponse.saturate().unwrap();

/**
* Print the results.
*/
console.log(`Market created with id: ${market.marketId}`);

Read more about signing transactions.

2. Deploying Pool for the market with liquidity.

Here we submit a second transaction that deploys a swap pool for the market created above and adds additional liquidity to it.

/**
* In this second step we create a pool for the market.
*/
const poolCreationResponse = await market.deploySwapPoolAndAdditionalLiquidity({
signer,
amount: ZTG.mul(300).toString(),
swapFee: swapFeeFromFloat(1).toString(),
weights: evenWeights(2),
});

/**
* Extracts the pool from events in the block.
*/
const pool = poolCreationResponse.saturate().unwrap();

/**
* Print the results.
*/
console.log(`Pool created with id: ${pool.poolId}`);