> For the complete documentation index, see [llms.txt](https://confluxnetwork.gitbook.io/js-conflux-sdk/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://confluxnetwork.gitbook.io/js-conflux-sdk/api/pos.md).

# PoS

### Classes

[PoS](#PoS)

Class contains pos RPC methods For the detail meaning of fields, please refer to the PoS RPC document:

### Typedefs

[PivotDecision](#PivotDecision) : `Object`[PoSStatus](#PoSStatus) : `Object`

PoS status

[VotePowerState](#VotePowerState) : `Object`[PoSAccountStatus](#PoSAccountStatus) : `Object`[PoSAccount](#PoSAccount) : `Object`[PoSTransaction](#PoSTransaction) : `Object`[Signature](#Signature) : `Object`[PoSBlock](#PoSBlock) : `Object`[CommitteeNode](#CommitteeNode) : `Object`[Election](#Election) : `Object`[CurrentCommittee](#CurrentCommittee) : `Object`[PoSCommittee](#PoSCommittee) : `Object`[PoSReward](#PoSReward) : `Object`[PoSEpochRewards](#PoSEpochRewards) : `Object`

### PoS

Class contains pos RPC methods For the detail meaning of fields, please refer to the PoS RPC document:

**Kind**: global class<br>

#### new PoS(conflux)

Create PoS instance

**Returns**: [`PoS`](#PoS) - The PoS instance

| Param   | Type      | Description        |
| ------- | --------- | ------------------ |
| conflux | `Conflux` | The Conflux object |

### PivotDecision : `Object`

**Kind**: global typedef\
**Properties**

| Name      | Type     |
| --------- | -------- |
| height    | `number` |
| blockHash | `string` |

### PoSStatus : `Object`

PoS status

**Kind**: global typedef\
**Properties**

| Name            | Type                              |
| --------------- | --------------------------------- |
| latestCommitted | `number`                          |
| epoch           | `number`                          |
| latestVoted     | `number`                          |
| latestTxNumber  | `number`                          |
| pivotDecision   | [`PivotDecision`](#PivotDecision) |

### VotePowerState : `Object`

**Kind**: global typedef\
**Properties**

| Name           | Type     |
| -------------- | -------- |
| endBlockNumber | `number` |
| power          | `number` |

### PoSAccountStatus : `Object`

**Kind**: global typedef\
**Properties**

| Name           | Type                                        |
| -------------- | ------------------------------------------- |
| availableVotes | `number`                                    |
| forfeited      | `number`                                    |
| inQueue        | [`Array.<VotePowerState>`](#VotePowerState) |
| outQueue       | [`Array.<VotePowerState>`](#VotePowerState) |
| locked         | `number`                                    |
| unlocked       | `number`                                    |
| forceRetired   | `number` \| `null`                          |

### PoSAccount : `Object`

**Kind**: global typedef\
**Properties**

| Name        | Type                                    |
| ----------- | --------------------------------------- |
| blockNumber | `number`                                |
| status      | [`PoSAccountStatus`](#PoSAccountStatus) |

### PoSTransaction : `Object`

**Kind**: global typedef\
**Properties**

| Name        | Type               |
| ----------- | ------------------ |
| hash        | `string`           |
| blockHash   | `string`           |
| from        | `string`           |
| status      | `string`           |
| type        | `string`           |
| number      | `number`           |
| timestamp   | `number` \| `null` |
| blockNumber | `number` \| `null` |
| payload     | `*`                |

### Signature : `Object`

**Kind**: global typedef\
**Properties**

| Name    | Type     |
| ------- | -------- |
| votes   | `number` |
| account | `string` |

### PoSBlock : `Object`

**Kind**: global typedef\
**Properties**

| Name          | Type                              |
| ------------- | --------------------------------- |
| epoch         | `number`                          |
| height        | `number`                          |
| pivotDecision | [`PivotDecision`](#PivotDecision) |
| round         | `number`                          |
| timestamp     | `number`                          |
| lastTxNumber  | `number`                          |
| signatures    | [`Signature`](#Signature)         |

### CommitteeNode : `Object`

**Kind**: global typedef\
**Properties**

| Name        | Type     |
| ----------- | -------- |
| votingPower | `number` |
| address     | `string` |

### Election : `Object`

**Kind**: global typedef\
**Properties**

| Name             | Type                                      |
| ---------------- | ----------------------------------------- |
| isFinalized      | `boolean`                                 |
| startBlockNumber | `number`                                  |
| topElectingNodes | [`Array.<CommitteeNode>`](#CommitteeNode) |

### CurrentCommittee : `Object`

**Kind**: global typedef\
**Properties**

| Name              | Type                                      |
| ----------------- | ----------------------------------------- |
| epochNumber       | `number`                                  |
| quorumVotingPower | `number`                                  |
| totalVotingPower  | `number`                                  |
| nodes             | [`Array.<CommitteeNode>`](#CommitteeNode) |

### PoSCommittee : `Object`

**Kind**: global typedef\
**Properties**

| Name             | Type                                    |
| ---------------- | --------------------------------------- |
| currentCommittee | [`CurrentCommittee`](#CurrentCommittee) |
| elections        | [`Array.<Election>`](#Election)         |

### PoSReward : `Object`

**Kind**: global typedef\
**Properties**

| Name       | Type     |
| ---------- | -------- |
| reward     | `number` |
| posAddress | `string` |
| powAddress | `string` |

### PoSEpochRewards : `Object`

**Kind**: global typedef\
**Properties**

| Name           | Type                              |
| -------------- | --------------------------------- |
| powEpochHash   | `string`                          |
| accountRewards | [`Array.<PoSReward>`](#PoSReward) |

### .getStatus ⇒ [`Promise.<PoSStatus>`](#PoSStatus)

**Kind**: instance member\
**Returns**: [`Promise.<PoSStatus>`](#PoSStatus) - PoS status object\
**Example**

```js
await conflux.pos.getStatus();
// {
//   epoch: 138,
//   latestCommitted: 8235,
//   latestTxNumber: '0xa5e2',
//   latestVoted: 8238,
//   pivotDecision: {
//     blockHash: '0x97625d04ece6fe322ae38010ac877447927b4d5963af7eaea7db9befb615e510',
//     height: 394020
//   }
// }
```

### .getAccount ⇒ [`Promise.<PoSAccount>`](#PoSAccount)

**Kind**: instance member

| Param          | Type              | Description           |
| -------------- | ----------------- | --------------------- |
| account        | `Hash`            | Account address       |
| \[blockNumber] | `number` \| `hex` | Optional block number |

**Example**

```js
await conflux.pos.getAccount('0x0f0ccf5ee5276b102316acb3943a2750085f85ac7b94bdbf9d8901f03a7d7cc3');
{
  address: '0x0f0ccf5ee5276b102316acb3943a2750085f85ac7b94bdbf9d8901f03a7d7cc3',
  blockNumber: 8240,
  status: {
    availableVotes: 1525,
    forceRetired: null,
    forfeited: 0,
    inQueue: [],
    locked: 1525,
    outQueue: [],
    unlocked: 1
  }
}
```

### .getBlockByHash ⇒ [`Promise.<PoSBlock>`](#PoSBlock)

**Kind**: instance member

| Param | Type     | Description           |
| ----- | -------- | --------------------- |
| hash  | `string` | The hash of PoS block |

**Example**

```js
await conflux.pos.getBlockByHash('0x97625d04ece6fe322ae38010ac877447927b4d5963af7eaea7db9befb615e510');
```

### .getBlockByNumber ⇒ [`Promise.<PoSBlock>`](#PoSBlock)

**Kind**: instance member

| Param       | Type              | Description             |
| ----------- | ----------------- | ----------------------- |
| blockNumber | `number` \| `hex` | The number of PoS block |

**Example**

```js
await conflux.pos.getBlockByNumber(8235);
{
  epoch: 138,
  hash: '0x1daf5443b7556cc39c3d4fe5e208fa77c3f5c053ea4bd637f5e43dfa7f0a95cb',
  height: 8235,
  miner: '0x0f0ccf5ee5276b102316acb3943a2750085f85ac7b94bdbf9d8901f03a7d7cc3',
  lastTxNumber: 42467,
  parentHash: '0x308699b307c81906ab97cbf213532c196f2d718f4641266aa444209349d9e31c',
  pivotDecision: {
    blockHash: '0x97625d04ece6fe322ae38010ac877447927b4d5963af7eaea7db9befb615e510',
    height: 394020
  },
  round: 15,
  signatures: [
    {
      account: '0x00f7c03318f8c4a7c6ae432e124b4a0474e973139a87f9ea6ae3efba66af7d8a',
      votes: 3
    }
  ],
  timestamp: 1638340165169041
}
```

### .getCommittee ⇒ [`Promise.<PoSCommittee>`](#PoSCommittee)

**Kind**: instance member

| Param          | Type              | Description           |
| -------------- | ----------------- | --------------------- |
| \[blockNumber] | `number` \| `hex` | Optional block number |

**Example**

```js
await conflux.pos.getCommittee();
{
  currentCommittee: {
    epochNumber: 138,
    nodes: [
     {
      address: "0xf92d8504fad118ddb5cf475180f5bcffaa967a9f9fa9c3c899ff9ad0de99694a",
      votingPower: 3
     }
    ],
    quorumVotingPower: 199,
    totalVotingPower: 297
  },
  elections: [
    {
      isFinalized: false,
      startBlockNumber: 8280,
      topElectingNodes: [
        {
          address: "0x0f0ccf5ee5276b102316acb3943a2750085f85ac7b94bdbf9d8901f03a7d7cc3",
          votingPower: 3
        }
      ]
    },
    {
      isFinalized: false,
      startBlockNumber: 8340,
      topElectingNodes: []
    }
  ]
}
```

### .getTransactionByNumber ⇒ [`Promise.<PoSTransaction>`](#PoSTransaction)

**Kind**: instance member

| Param    | Type                 | Description               |
| -------- | -------------------- | ------------------------- |
| txNumber | `number` \| `string` | The number of transaction |

**Example**

```js
await conflux.pos.getTransactionByNumber(8235);
{
  blockHash: '0xe684e88981b7ffe14741a2274e7b65b89ae2e133ebdd783d71ddeeacb4e957d6',
  blockNumber: 8243,
  from: '0x0000000000000000000000000000000000000000000000000000000000000000',
  hash: '0xaa92222b6a20342285ed56de2b77a05a6c1a9a3e4750e4952af8f908f7316b5d',
  number: 42480,
  payload: null,
  status: 'Executed',
  timestamp: 1638340649662468,
  type: 'BlockMetadata'
}
```

### .getRewardsByEpoch(epoch) ⇒ [`Promise.<PoSEpochRewards>`](#PoSEpochRewards)

**Kind**: instance function

| Param | Type                 | Description        |
| ----- | -------------------- | ------------------ |
| epoch | `number` \| `string` | A PoS epoch number |

**Example**

```js
await conflux.pos.getRewardsByEpoch(138);
{
  accountRewards: [
    {
      posAddress: '0x83ca56dd7b9d1222fff48565ed0261f42a17099061d905f9e743f89574dbd8e0',
      powAddress: 'NET8888:TYPE.USER:AAKFSH1RUYS4P040J5M7DJRJBGMX9ZV7HAJTFN2DKP',
      reward: 605265415757735647n
    },
    ... 122 more items
  ],
  powEpochHash: '0xd634c0a71c6197a6fad9f80439b31b4c7191b3ee42335b1548dad1160f7f628c'
}
```
