Security News
GitHub Removes Malicious Pull Requests Targeting Open Source Repositories
GitHub removed 27 malicious pull requests attempting to inject harmful code across multiple open source repositories, in another round of low-effort attacks.
@nomicfoundation/ethereumjs-statemanager
Advanced tools
TypeScript implementation of the Ethereum StateManager. |
---|
To obtain the latest version, simply require the project using npm
:
npm install @ethereumjs/statemanager
Note: this library was part of the @ethereumjs/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).
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
as well as an EthersStateManager
implementation that sources state and history data from an external ethers
provider.
DefaultStateManager
Exampleimport { 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()
EthersStateManager
First, a simple example of usage:
import { Account, Address } from '@ethereumjs/util'
import { EthersStateManager } from '@ethereumjs/statemanager'
import { ethers } from 'ethers'
const provider = new ethers.providers.JsonRpcProvider('https://path.to.my.provider.com')
const stateManager = new EthersStateManager({ provider, blockTag: 500000n })
const vitalikDotEth = Address.fromString('0xd8da6bf26964af9d7eed9e03e53415d37aa96045')
const account = await stateManager.getAccount(vitalikDotEth)
console.log('Vitalik has a current ETH balance of ', account.balance)
The EthersStateManager
can be be used with an ethers
JsonRpcProvider
or one of its subclasses. Instantiate the VM
and pass in an EthersStateManager
to run transactions against accounts sourced from the provider or to run blocks pulled from the provider at any specified block height.
Note: Usage of this StateManager can cause a heavy load regarding state request API calls, so be careful (or at least: aware) if used in combination with an Ethers provider connecting to a third-party API service like Infura!
CloudFlareProvider
from the @ethersproject/providers
module to get a quickstart.eth_getProof
, eth_getCode
, and eth_getStorageAt
RPC methods.earliest
in the constructor that specifies the block height you want to pull state from.latest
/pending
values supported by the Ethereum JSON-RPC are not supported as longer running scripts run the risk of state values changing as blocks are mined while your script is running.Refer to this test script for complete examples of running transactions and blocks in the vm
with data sourced from a provider.
Generated TypeDoc API Documentation
Starting with v1 the usage of BN.js for big numbers has been removed from the library and replaced with the usage of the native JS 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.
See our organizational documentation 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 first.
FAQs
An Ethereum statemanager implementation
The npm package @nomicfoundation/ethereumjs-statemanager receives a total of 30,603 weekly downloads. As such, @nomicfoundation/ethereumjs-statemanager popularity was classified as popular.
We found that @nomicfoundation/ethereumjs-statemanager demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 4 open source maintainers collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Security News
GitHub removed 27 malicious pull requests attempting to inject harmful code across multiple open source repositories, in another round of low-effort attacks.
Security News
RubyGems.org has added a new "maintainer" role that allows for publishing new versions of gems. This new permission type is aimed at improving security for gem owners and the service overall.
Security News
Node.js will be enforcing stricter semver-major PR policies a month before major releases to enhance stability and ensure reliable release candidates.