> For the complete documentation index, see [llms.txt](https://docs.smartbch.org/smartbch/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.smartbch.org/smartbch/archives/runmultinodewithfakenode.md).

# Fake RPC Server for Testing

## Dependencies

Please follow the guide for [multi-node testnet](broken://pages/-Mb5hpSce9HHUCYcyAPm). And do add the `--mainnet-url` option to specifiy a bitcoincashnode's RPC endpoint, which can be a real one or a fake one, just as following:

```
./smartbchd start --mainnet-url=http://node-ip-address:port-number
```

## Running a Fake RPC Server for Testing

The `bchnode` tool mimics a real bitcoincashnode's RPC behavior. You can use it with the following steps:

### Start the bchnode RPC Server

```
Git clone https://github.com/smartbch/testkit.git
cd bchnode
go run main.go &
```

### Add a New Validator's public key and voting power

The format is `pubkey`-`votingPower`-`action`, where the action can be "add", "edit" or "retire".

```
cd scripts ;# there are some utility scripts in the directory testkit/bchnode/scripts
./pubkey.sh eeed4fae3da010e393efed2aacd271971fd2383fc68109a475d6c9ef65435d52-9-add
```

The `bchnode` produces blocks with fixed interval (default is 3 seconds) to vote for the validators.

### Adjust block interval

To change the block interval to 10 seconds:

```
./interval.sh 10
```

### Simulate a Block Reorg

```
./reorg.sh
```

The `bchnode` will simulate a fork at the height which is 8 blocks less than current height, and re-generate the recent 8 blocks.

## The Suggested Scenarios for Test

1. Configure `bchnode` to follow the voting power and pubkeys specified in genesis.json
2. Keep the current voting power and pubkeys for three epochs.
3. Change the voting power setting of `bchnode`, such that at new epochs, the smartbchd follows the new voting power.
4. Run block reorg at `bchnode`, and smartbchd can work normally.
5. Add new validators in and let `bchnode` vote them to be active.
6. Restart smartbchd and it can also work fine.

## smartBCH parameters for testing with bchnode

```
NumBlocksInEpoch       int64 = 30
NumBlocksToClearMemory int64 = 1000s
WaitingBlockDelayTime  int64 = 2s
SwitchEpochDelayTime   int64 = 10s
MinVotingPercentPerEpoch        = 10 //10 percent in NumBlocksInEpoch, like 2016 / 10 = 201
MinVotingPubKeysPercentPerEpoch = 34 //34 percent in active validators,
```


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## 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, and the optional `goal` query parameter:

```
GET https://docs.smartbch.org/smartbch/archives/runmultinodewithfakenode.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

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.
