mirror of
https://github.com/mempool/mempool.git
synced 2024-11-19 09:52:14 +01:00
124 lines
3.5 KiB
Markdown
124 lines
3.5 KiB
Markdown
# gbt
|
|
|
|
**gbt:** rust implementation of the getBlockTemplate algorithm
|
|
|
|
This project was bootstrapped by [napi](https://www.npmjs.com/package/@napi-rs/cli).
|
|
|
|
## Installing gbt
|
|
|
|
Installing gbt requires a [supported version of Node and Rust](https://github.com/napi-rs/napi-rs#platform-support).
|
|
|
|
The build process also requires [Rust](https://www.rust-lang.org/tools/install) to be installed.
|
|
|
|
You can install the project with npm. In the project directory, run:
|
|
|
|
```sh
|
|
$ npm install
|
|
```
|
|
|
|
This fully installs the project, including installing any dependencies and running the build.
|
|
|
|
## Building gbt
|
|
|
|
If you have already installed the project and only want to run the build, run:
|
|
|
|
```sh
|
|
$ npm run build
|
|
```
|
|
|
|
This command uses the [napi build](https://www.npmjs.com/package/@napi-rs/cli) utility to run the Rust build and copy the built library into `./gbt.[TARGET_TRIPLE].node`.
|
|
|
|
## Exploring gbt
|
|
|
|
After building gbt, you can explore its exports at the Node REPL:
|
|
|
|
```sh
|
|
$ npm install
|
|
$ node
|
|
> require('.').hello()
|
|
"hello node"
|
|
```
|
|
|
|
## Available Scripts
|
|
|
|
In the project directory, you can run:
|
|
|
|
### `npm install`
|
|
|
|
Installs the project, including running `npm run build-release`.
|
|
|
|
### `npm build`
|
|
|
|
Builds the Node addon (`gbt.[TARGET_TRIPLE].node`) from source.
|
|
|
|
Additional [`cargo build`](https://doc.rust-lang.org/cargo/commands/cargo-build.html) arguments may be passed to `npm build` and `npm build-*` commands. For example, to enable a [cargo feature](https://doc.rust-lang.org/cargo/reference/features.html):
|
|
|
|
```
|
|
npm run build -- --feature=beetle
|
|
```
|
|
|
|
#### `npm build-debug`
|
|
|
|
Alias for `npm build`.
|
|
|
|
#### `npm build-release`
|
|
|
|
Same as [`npm build`](#npm-build) but, builds the module with the [`release`](https://doc.rust-lang.org/cargo/reference/profiles.html#release) profile. Release builds will compile slower, but run faster.
|
|
|
|
### `npm test`
|
|
|
|
Runs the unit tests by calling `cargo test`. You can learn more about [adding tests to your Rust code](https://doc.rust-lang.org/book/ch11-01-writing-tests.html) from the [Rust book](https://doc.rust-lang.org/book/).
|
|
|
|
## Project Layout
|
|
|
|
The directory structure of this project is:
|
|
|
|
```
|
|
gbt/
|
|
├── Cargo.toml
|
|
├── README.md
|
|
├── gbt.[TARGET_TRIPLE].node
|
|
├── package.json
|
|
├── src/
|
|
| └── lib.rs
|
|
└── target/
|
|
```
|
|
|
|
### Cargo.toml
|
|
|
|
The Cargo [manifest file](https://doc.rust-lang.org/cargo/reference/manifest.html), which informs the `cargo` command.
|
|
|
|
### README.md
|
|
|
|
This file.
|
|
|
|
### gbt.\[TARGET_TRIPLE\].node
|
|
|
|
The Node addon—i.e., a binary Node module—generated by building the project. This is the main module for this package, as dictated by the `"main"` key in `package.json`.
|
|
|
|
Under the hood, a [Node addon](https://nodejs.org/api/addons.html) is a [dynamically-linked shared object](https://en.wikipedia.org/wiki/Library_(computing)#Shared_libraries). The `"build"` script produces this file by copying it from within the `target/` directory, which is where the Rust build produces the shared object.
|
|
|
|
### package.json
|
|
|
|
The npm [manifest file](https://docs.npmjs.com/cli/v7/configuring-npm/package-json), which informs the `npm` command.
|
|
|
|
### src/
|
|
|
|
The directory tree containing the Rust source code for the project.
|
|
|
|
### src/lib.rs
|
|
|
|
The Rust library's main module.
|
|
|
|
### target/
|
|
|
|
Binary artifacts generated by the Rust build.
|
|
|
|
## Learn More
|
|
|
|
To learn more about Neon, see the [Napi-RS documentation](https://napi.rs/docs/introduction/getting-started).
|
|
|
|
To learn more about Rust, see the [Rust documentation](https://www.rust-lang.org).
|
|
|
|
To learn more about Node, see the [Node documentation](https://nodejs.org).
|