# 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'
}
```


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://confluxnetwork.gitbook.io/js-conflux-sdk/api/pos.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
