aboutsummaryrefslogtreecommitdiffstats
path: root/packages/web3-wrapper
diff options
context:
space:
mode:
Diffstat (limited to 'packages/web3-wrapper')
-rw-r--r--packages/web3-wrapper/src/web3_wrapper.ts37
-rw-r--r--packages/web3-wrapper/test/web3_wrapper_test.ts19
2 files changed, 55 insertions, 1 deletions
diff --git a/packages/web3-wrapper/src/web3_wrapper.ts b/packages/web3-wrapper/src/web3_wrapper.ts
index 3de152df1..d922c80cd 100644
--- a/packages/web3-wrapper/src/web3_wrapper.ts
+++ b/packages/web3-wrapper/src/web3_wrapper.ts
@@ -281,7 +281,6 @@ export class Web3Wrapper {
};
const payload = {
jsonrpc: '2.0',
- id: this._jsonRpcRequestId++,
method: 'eth_getLogs',
params: [serializedFilter],
};
@@ -403,8 +402,44 @@ export class Web3Wrapper {
}
return receipt;
}
+ /**
+ * Start the CPU mining process with the given number of threads and
+ * generate a new DAG if need be.
+ * @param threads The number of threads to mine on.
+ */
+ public async minerStartAsync(threads: number = 1): Promise<void> {
+ await this._sendRawPayloadAsync<boolean>({
+ method: 'miner_start',
+ params: [threads],
+ });
+ }
+ /**
+ * Stop the CPU mining process.
+ * @param threads The number of threads to mine on.
+ */
+ public async minerStopAsync(): Promise<void> {
+ await this._sendRawPayloadAsync<boolean>({ method: 'miner_stop', params: [] });
+ }
+ /**
+ * Returns true if client is actively mining new blocks.
+ * @returns A boolean indicating whether the node is currently mining.
+ */
+ public async isMiningAsync(): Promise<boolean> {
+ const isMining = await promisify<boolean>(this._web3.eth.getMining)();
+ return isMining;
+ }
+ /**
+ * Sets the current head of the local chain by block number. Note, this is a
+ * destructive action and may severely damage your chain. Use with extreme
+ * caution.
+ * @param blockNumber The block number to reset to.
+ */
+ public async setHeadAsync(blockNumber: number): Promise<void> {
+ await this._sendRawPayloadAsync<void>({ method: 'debug_setHead', params: [this._web3.toHex(blockNumber)] });
+ }
private async _sendRawPayloadAsync<A>(payload: Partial<JSONRPCRequestPayload>): Promise<A> {
const sendAsync = this._web3.currentProvider.sendAsync.bind(this._web3.currentProvider);
+ payload.id = this._jsonRpcRequestId++;
const response = await promisify<JSONRPCResponsePayload>(sendAsync)(payload);
const result = response.result;
return result;
diff --git a/packages/web3-wrapper/test/web3_wrapper_test.ts b/packages/web3-wrapper/test/web3_wrapper_test.ts
index 326efe654..1843bcf2c 100644
--- a/packages/web3-wrapper/test/web3_wrapper_test.ts
+++ b/packages/web3-wrapper/test/web3_wrapper_test.ts
@@ -2,6 +2,7 @@ import * as chai from 'chai';
import * as Ganache from 'ganache-core';
import 'make-promises-safe';
import 'mocha';
+import * as Web3 from 'web3';
import { Web3Wrapper } from '../src';
@@ -37,4 +38,22 @@ describe('Web3Wrapper tests', () => {
expect(networkId).to.be.equal(NETWORK_ID);
});
});
+ describe('mining functions', () => {
+ it('starts and stops the miner', async () => {
+ // Note: depending on our provider, the miner may or may not already
+ // be mining. To account for both conditions, we have what might
+ // look like too many stops and starts here, but it is necessary.
+ await web3Wrapper.minerStopAsync();
+ let isMining = await web3Wrapper.isMiningAsync();
+ expect(isMining).to.be.false();
+ await web3Wrapper.minerStartAsync(1);
+ isMining = await web3Wrapper.isMiningAsync();
+ expect(isMining).to.be.true();
+ isMining = await web3Wrapper.isMiningAsync();
+ expect(isMining).to.be.true();
+ await web3Wrapper.minerStopAsync();
+ isMining = await web3Wrapper.isMiningAsync();
+ expect(isMining).to.be.false();
+ });
+ });
});