Create a new nomination pool with a specific pool ID
On-chain name of method: nominationPools_createWithPoolId
Parameters
avail-js
| parameter | type | optional | description | 
|---|---|---|---|
| amount | BN | false | The amount of funds to delegate to the pool | 
| root | string | false | The account to set as [ PoolRoles::root] | 
| nominator | string | false | The account to set as the [ PoolRoles::nominator] | 
| bouncer | string | false | The account to set as the [ PoolRoles::bouncer] | 
| poolId | number | false | pool id | 
| waitFor | WaitFor | false | wait for block inclusion or finalization | 
| account | KeyringPair | false | account that will send and sign the transaction | 
| options | SignerOptions | true | used to overwrite existing signer options | 
Returns
On failure, a reason for the failure is returned. On success, the function will return a object of type PoolCreateWithPoolIdTxSuccess.
This object contains the details of the transaction and your newly created nomination pool.
Minimal example
- 
You will need to set up the dev environment required to run this example. For instructions, check out our docs here. 
- 
If you’re sending an extrinsic (i.e conducting a transaction) you will need to replace the demo seed phrase with your own seed phrase. The rest of the code should work as is. 
- The minimum amount of AVAILrequired to create a nomination pool is10_000 AVAIL.
- You need to allocate privileges to some accounts while creating the pool.
Different roles within a nomination pool
A pool consists of 4 roles, each of which having different responsibilities in managing the running of the pool.
- Root: Can change the nominator, bouncer, or itself. Further, it can perform any of the actions the nominator or bouncer can.
- Depositor: Creates the pool and is the initial member. The depositor can only leave the pool once all other members have left. Once they leave by withdrawing, the pool is fully removed from the system.
- Nominator: Can select the validators the pool nominates.
- Bouncer: Can change the pool’s state and kick (permissionlessly unbond/withdraw) members if the pool is blocked.
avail-js
- Inside your-file-name.ts, add the following code:
avail-js
import * as dotenv from 'dotenv';
import { Account, SDK, BN, Pallets } from 'avail-js-sdk';
 
dotenv.config();
 
export async function nominationPoolsCreateWithPoolId() {
    // Initialize SDK with Turing endpoint
    const sdk = await SDK.New('wss://turing-rpc.avail.so/ws');
    
    // Create account from seed in .env file
    const seed = process.env.SEED;
    if (!seed) {
      throw new Error("SEED environment variable is not set");
    }
    
    // Create account from seed
    const account = Account.new(seed);
    console.log("Account Address: ", account.address);
    
    // Initial deposit amount: 10,000 AVAIL
    const amount = new BN(10).pow(new BN(18)).mul(new BN(10000)); // 10,000 AVAIL
    console.log("Initial Deposit: 10,000 AVAIL");
    
    // Pool roles - using Alice's address for all roles
    const root = "5GrwvaEF5zXb26Fz9rcQpDWS57CtERHpNehXCPcNoHGKutQY"; // Alice
    const nominator = "5GrwvaEF5zXb26Fz9rcQpDWS57CtERHpNehXCPcNoHGKutQY"; // Alice
    const bouncer = "5GrwvaEF5zXb26Fz9rcQpDWS57CtERHpNehXCPcNoHGKutQY"; // Alice
    const poolId = 0; // Specific pool ID to create
    
    // Create pool with ID transaction
    const tx = sdk.tx.nominationPools.createWithPoolId(amount, root, nominator, bouncer, poolId);
    console.log("Submitting create pool with ID transaction...");
    
    // Execute and wait for inclusion 
    const res = await tx.executeWaitForInclusion(account, {});
    
    // Check if transaction was successful
    const isOk = res.isSuccessful();
    if (isOk === undefined) {
      throw new Error("Cannot check if transaction was successful");
    }
    else if (!isOk) {
        throw new Error("Transaction failed");
    }
    
    console.log("\nPool creation with ID completed successfully");
    // Log all transaction details
    console.log("\nTransaction Details:");
    console.log(`Transaction Hash: ${res.txHash}`);
    console.log(`Block Hash: ${res.blockHash}`);
    console.log(`Block Number: ${res.blockNumber}`);
    
    process.exit(0);
}
 
// Execute the function
nominationPoolsCreateWithPoolId();- Run the code using:
terminal
ts-node your-file-name.tsSample Response:
{
    "isErr": false,
    "event": {
        "depositor": "5FHneW46xGXgs5mUiveU4sbTyGBzmstUspZC92UhjJM694ty",
        "poolId": "0"
    },
    "event2": {
        "member": "5FHneW46xGXgs5mUiveU4sbTyGBzmstUspZC92UhjJM694ty",
        "poolId": "0",
        "bonded": "10000",
        "joined": "true"
    },
    "events": [...],
    "txHash": "0x6b50caed7950e67934cabbf88a1f7dc2e7e995ac608402f91a4db19be0da5c41",
    "txIndex": 1,
    "blockHash": "0xc06df7dbb1e404f54499f942479ddcffc92665c021ea07c2798fc2f354f403d3",
    "blockNumber": 6
}Last updated on