@ignored/statemanager
Version:
An Ethereum statemanager implementation
79 lines (52 loc) • 3.87 kB
Markdown
[![NPM Package][statemanager-npm-badge]][statemanager-npm-link]
[![GitHub Issues][statemanager-issues-badge]][statemanager-issues-link]
[![Actions Status][statemanager-actions-badge]][statemanager-actions-link]
[![Code Coverage][statemanager-coverage-badge]][statemanager-coverage-link]
[![Discord][discord-badge]][discord-link]
| TypeScript implementation of the Ethereum StateManager. |
| ------------------------------------------------------- |
To obtain the latest version, simply require the project using `npm`:
```shell
npm install @ethereumjs/statemanager
```
Note: this library was part of the [@ethereumjs/vm](../vm/) package up till VM `v5`.
The `StateManager` provides high-level access and manipulation methods to and for the Ethereum state, thinking in terms of accounts or contract code rather then the storage operations of the underlying data structure (e.g. a [Trie](../trie/)).
The library includes a TypeScript interface `StateManager` to ensure a unified interface (e.g. when passed to the VM) as well as a concrete Trie-based implementation `DefaultStateManager`.
### Example
```typescript
import { Account, Address } from '@ethereumjs/util'
import { DefaultStateManager } from '@ethereumjs/statemanager'
const stateManager = new DefaultStateManager()
const address = new Address(Buffer.from('a94f5374fce5edbc8e2a8697c15331677e6ebf0b', 'hex'))
const account = new Account(BigInt(0), BigInt(1000))
await stateManager.checkpoint()
await stateManager.putAccount(address, account)
await stateManager.commit()
await stateManager.flush()
```
Generated TypeDoc API [Documentation](./docs/README.md)
Starting with v1 the usage of [BN.js](https://github.com/indutny/bn.js/) for big numbers has been removed from the library and replaced with the usage of the native JS [BigInt](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/BigInt) data type (introduced in `ES2020`).
Please note that number-related API signatures have changed along with this version update and the minimal build target has been updated to `ES2020`.
Developer documentation - currently mainly with information on testing and debugging - can be found [here](./DEVELOPER.md).
See our organizational [documentation](https://ethereumjs.readthedocs.io) for an introduction to `EthereumJS` as well as information on current standards and best practices. If you want to join for work or carry out improvements on the libraries, please review our [contribution guidelines](https://ethereumjs.readthedocs.io/en/latest/contributing.html) first.
[](<https://tldrlegal.com/license/mozilla-public-license-2.0-(mpl-2)>)
[]: https://img.shields.io/static/v1?logo=discord&label=discord&message=Join&color=blue
[]: https://discord.gg/TNwARpR
[]: https://img.shields.io/npm/v/@ethereumjs/statemanager.svg
[]: https://www.npmjs.com/package/@ethereumjs/statemanager
[]: https://img.shields.io/github/issues/ethereumjs/ethereumjs-monorepo/package:%20statemanager?label=issues
[]: https://github.com/ethereumjs/ethereumjs-monorepo/issues?q=is%3Aopen+is%3Aissue+label%3A"package%3A+statemanager"
[]: https://github.com/ethereumjs/ethereumjs-monorepo/workflows/Statemanager/badge.svg
[]: https://github.com/ethereumjs/ethereumjs-monorepo/actions?query=workflow%3A%22Statemanager%22
[]: https://codecov.io/gh/ethereumjs/ethereumjs-monorepo/branch/master/graph/badge.svg?flag=statemanager
[]: https://codecov.io/gh/ethereumjs/ethereumjs-monorepo/tree/master/packages/statemanager