Fork of plugeth with any needed changes for statediff plugin
Go to file
Austin Roberts bc14d12fd7 Use the statedb database to get Tries
The old approach of getting state tries involved instantiating a
new state database and using it to instantiate a trie. What we didn't
realize was that state database needed to have Close() called on it,
which we didn't offer a way for plugins to do, resulting in memory
leaking.

This approach reuses the primary trie database associated with the
blockchain object, albeit a bit indirectly. This will allow access
to recent tries that are stored in memory, where previously only
tries that had been committed to disk were accessible.
2023-12-06 16:10:17 -06:00
.circleci cirlce ci update to go 1.20 2023-09-15 07:08:02 -07:00
.github Initial commit of merge geth v1.11.5 2023-04-21 13:24:40 -07:00
accounts accounts, cmd: fix typos (#28300) 2023-10-11 11:29:10 +03:00
beacon beacon/engine: add shouldOverrideBuilder to payload envelope (#28029) 2023-09-04 09:26:13 -04:00
build tests: update execution-spec-tests to 1.0.5 (#28337) 2023-10-16 20:10:05 +02:00
cmd Use the statedb database to get Tries 2023-12-06 16:10:17 -06:00
common eth/protocols/snap: fix snap sync failure on empty storage range (#28306) 2023-10-13 09:08:26 +02:00
consensus Added IsEIP1559() hook 2023-10-16 15:33:22 -07:00
console console: add cleanup to avoid leaks in newTester (#27695) 2023-07-11 21:27:48 +02:00
core Merge pull request #92 from openrelayxyz/feature/etc-plugin 2023-10-30 12:53:00 -05:00
crypto crypto/bn256: eliminate dead store (#27944) 2023-08-23 21:26:30 +02:00
docs docs/postmortems: remove wrong parentheses (#26066) 2022-11-01 14:50:03 +01:00
eth Merge commit '3f907d6a6' into merge/geth-v1.13.4 2023-10-17 09:42:15 -07:00
ethclient internal/ethapi: fix codehash lookup in eth_getProof (#28357) 2023-10-17 09:25:16 +02:00
ethdb cmd, core, ethdb: enable Pebble on 32 bits and OpenBSD too (#28335) 2023-10-13 22:50:20 +03:00
ethstats ethstats: set readlimit on ethstats server connection (#26207) 2022-11-17 15:33:03 +01:00
event all: move main transaction pool into a subpool (#27463) 2023-06-16 15:29:40 +03:00
graphql graphql: add 4844 blob fields (#27963) 2023-09-14 10:23:16 +02:00
internal internal/ethapi: fix codehash lookup in eth_getProof (#28357) 2023-10-17 09:25:16 +02:00
les all: move light.NodeSet to trienode.ProofSet (#28287) 2023-10-10 10:30:47 +02:00
light all: move light.NodeSet to trienode.ProofSet (#28287) 2023-10-10 10:30:47 +02:00
log internal, log: remove code for old unsupported go-versions (#28090) 2023-09-13 01:42:32 -04:00
metrics metrics: add support for enabling metrics from env vars (#28118) 2023-09-14 13:56:06 +03:00
miner fix: broken url link (#28342) 2023-10-17 14:32:35 +08:00
node node: increase batch limits for auth rpc API (#27924) 2023-08-16 15:26:49 +02:00
p2p all: use rlp.DecodeBytes instead of rlp.Decode where possible (#27994) 2023-08-24 11:47:42 +03:00
params Merge pull request #92 from openrelayxyz/feature/etc-plugin 2023-10-30 12:53:00 -05:00
plugins Use the statedb database to get Tries 2023-12-06 16:10:17 -06:00
rlp rlp/rlpgen: remove build tag (#28106) 2023-09-14 12:28:40 +02:00
rpc Merge commit '0d45d72d7' into merge/geth-v1.13.3 2023-10-12 07:16:53 -07:00
signer all: use rlp.DecodeBytes instead of rlp.Decode where possible (#27994) 2023-08-24 11:47:42 +03:00
swarm swarm: fix outdated link (#26501) 2023-01-16 11:00:55 +01:00
tests tests: update execution-spec-tests to 1.0.5 (#28337) 2023-10-16 20:10:05 +02:00
trie Merge commit '3f907d6a6' into merge/geth-v1.13.4 2023-10-17 09:42:15 -07:00
.dockerignore cmd, internal/build, docker: advertise commit date in unstable build versions (#19522) 2019-05-08 16:44:28 +03:00
.gitattributes .gitattributes: enable solidity highlighting on github (#16425) 2018-04-03 15:21:24 +02:00
.gitignore git: ignore tests/spec-tests folder (#28254) 2023-10-10 10:56:50 +02:00
.gitmodules tests: external evm benchmarks (#24050) 2022-01-28 08:47:19 +01:00
.golangci.yml build: upgrade to go 1.19 (#25726) 2022-09-10 13:25:40 +02:00
.mailmap AUTHORS: remove one more duplicate entry (#24950) 2022-05-24 21:04:21 +02:00
.travis.yml travis: get rid of old useless GO111MODULE directives (#27991) 2023-08-23 18:54:30 +03:00
appveyor.yml ci: disable coverage reporting in appveyor and travis 2023-02-17 15:34:30 +01:00
AUTHORS AUTHORS: remove one more duplicate entry (#24950) 2022-05-24 21:04:21 +02:00
circle.yml circleci: enable docker based hive testing 2016-07-15 16:07:34 +03:00
COPYING COYPING: restore the full text text of GPL (#21568) 2020-09-15 08:27:17 +02:00
COPYING.LESSER all: update license information 2015-07-07 14:12:44 +02:00
Dockerfile Merge commit '7371b3817' into merge/geth-v1.13.0 2023-09-12 12:34:24 -07:00
Dockerfile.alltools travis, build: update Go to 1.20.1 (#26653) 2023-02-16 09:00:45 +02:00
go.mod Merge pull request #92 from openrelayxyz/feature/etc-plugin 2023-10-30 12:53:00 -05:00
go.sum Merge pull request #92 from openrelayxyz/feature/etc-plugin 2023-10-30 12:53:00 -05:00
interfaces.go all: fix some typos (#25551) 2022-08-19 09:00:21 +03:00
Makefile travis: get rid of old useless GO111MODULE directives (#27991) 2023-08-23 18:54:30 +03:00
oss-fuzz.sh core/vm: use golang native big.Int (#26834) 2023-03-08 13:12:53 -05:00
README.md Added pull request test requirements to README 2023-09-10 13:50:16 -07:00
SECURITY.md Issue template corrections 2022-03-30 15:06:50 -07:00
slack-post.sh Push binaries to S3 2022-01-11 14:40:43 -06:00

PluGeth

PluGeth is a fork of the Go Ethereum Client (Geth) that implements a plugin architecture, allowing developers to extend Geth's capabilities in a number of different ways using plugins, rather than having to create additional, new forks of Geth.

Documentation can be found here.

Design Goals

The upstream Geth client exists primarily to serve as a client for the Ethereum mainnet, though it also supports a number of popular testnets. Supporting the Ethereum mainnet is a big enough challenge in its own right that the Geth team generally avoids changes to support other networks, or to provide features only a small handful of users would be interested in.

The result is that many projects have forked Geth. Some implement their own consensus protocols or alter the behavior of the EVM to support other networks. Others are designed to extract information from the Ethereum mainnet in ways the standard Geth client does not support.

PluGeth aims to provide a single Geth fork that developers can choose to extend rather than forking the Geth project. Out of the box, PluGeth behaves exactly like upstream Geth, but by installing plugins written in Golang, developers can extend its functionality in a wide variety of way.

Submitting Pull Requests

We are eager to include contributions from the community into the project. We ask that pull requests which include new features to be covered by our test plugin found in: /plugins/test-plugin. The test design and instructions for use are documented there. If further assistance is needed please get in touch with us.

Contact Us

If you're trying to do something that isn't supported by the current plugin system, Reach out to us on Discord and we'll help you figure out how to make it work.

System Requirements

System requirements will vary depending on which network you are connecting to. On the Ethereum mainnet, you should have at least 8 GB RAM, 2 CPUs, and 350 GB of SSD disks.

PluGeth relies on Golang's Plugin implementation, which is only supported on Linux, FreeBSD, and macOS. Windows support is unlikely to be added in the foreseeable future.

Licensing Considerations

The Geth codebase is licensed under the LGPL. By linking with Geth, you have an obligation to enable anyone you provide your plugin binaries to run against their own modified versions of Geth. Because of how Golang plugins work running against updated versions of Geth may require recompiling the plugin.

If you plan to license your plugin under the LGPL or a more permissive license, you should be able to meet these requirements. If you plan to use your plugin privately without distributing it, you should be fine. If you plan to release your plugin without making the source available, you may find yourself in violation of Geth's license unless you can provide a way to relink it against more recent versions of Geth.