The naming of `LookupID` can cause confusion when resolving actor IDs vs
ID addresses. To avoid this:
* Refactor `StateTree` `LookupID` to `LookupIDAddress`, because it
returns ID address.
* Refactor `StateManager` `LookupID` to
`LookupIDAddress` because it also returns ID address via a chain call to
`StateTree`.
* Introduce a new API `StateManager` dedicated to resolving address to
actor ID, called `LookupID` which returns `abi.ActorID`.
For context, see:
* https://github.com/filecoin-project/lotus/pull/11723#discussion_r1534728607
This is showing up in profiles so I figured I'd optimize it a bit:
1. Avoid holding locks while recording metrics.
2. Slightly reduce allocations by re-using the metrics "mutators".
Also, use the passed context for better tracing.
This is unlikely to make a huge difference, but it may help RPC
providers a _tiny_ bit and doesn't really move the complexity needle.
1. Switch to go-multicodec as the source of multicodec code information.
This gives us a central, generated source of multicodec codes.
2. Use this library inside the VM and shapshot logic to consistently
allow CBOR, in addition to DagCBOR.
3. Remove the hard-coded CBOR constant.
This is now "FVM" native. Changes include:
1. Don't treat "trace" messages like off-chain messages. E.g., don't
include CIDs, versions, etc.
2. Include IPLD codecs where applicable.
3. Remove fields that aren't filled by the FVM (timing, some errors,
code locations, etc.).
- Event keys are now t1, t2, t3, t4 for topics; and d for data.
- ref-fvm no longer stores events in the blockstore for us. It just
returns events to the client, who is now responsible for handling
them as it wishes / according to its configuration.
- Add a flag to VMOpts to have the events AMT be written in the blockstore.
- Add a flag to the ChainStore to advertise to the rest of the system
if the ChainStore is storing events.
- Enable that flag if the EthRPC is enabled (can also add an explicit
configuration flag if wanted).
* feat: add support for generating tipset CIDs
(cherry-picked from feat/nv18-fevm)
* feat: fvm: add support for looking up past tipset CIDs
We do this by adding yet another "getter" to the VM that resolves an
epoch into a TipSetKey.
Co-authored-by: Kevin Li <ychiaoli18@users.noreply.github.com>
This also ignores the VM "Flush" option and instead, flushes
unconditionally (in the FVM):
1. In the FVM, we don't read blocks on flush (ever).
2. All _uses_ of TVX use a "proxy" blockstore that buffers writes, so
nothing should actually get flushed to lotus.