Merge pull request #3 from openrelayxyz/feature/state-update-code
Talked with Philip - Merging
This commit is contained in:
		
						commit
						97c44a8fe6
					
				| @ -314,6 +314,11 @@ func prepare(ctx *cli.Context) { | ||||
| func geth(ctx *cli.Context) error { | ||||
| 	if err := plugins.Initialize(path.Join(ctx.GlobalString(utils.DataDirFlag.Name), "plugins"), ctx); err != nil { return err } | ||||
| 	prepare(ctx) | ||||
| 	if !plugins.ParseFlags(ctx.Args()) { | ||||
| 		if args := ctx.Args(); len(args) > 0 { | ||||
| 			return fmt.Errorf("invalid command: %q", args[0]) | ||||
| 		} | ||||
| 	} | ||||
| 	stack, backend := makeFullNode(ctx) | ||||
| 	wrapperBackend := wrappers.NewBackend(backend) | ||||
| 	pluginsInitializeNode(stack, wrapperBackend) | ||||
| @ -322,11 +327,6 @@ func geth(ctx *cli.Context) error { | ||||
| 		return err | ||||
| 	} | ||||
| 	defer stack.Close() | ||||
| 	if !plugins.ParseFlags(ctx.Args()) { | ||||
| 		if args := ctx.Args(); len(args) > 0 { | ||||
| 			return fmt.Errorf("invalid command: %q", args[0]) | ||||
| 		} | ||||
| 	} | ||||
| 	stack.RegisterAPIs(pluginGetAPIs(stack, wrapperBackend)) | ||||
| 
 | ||||
| 	startNode(ctx, stack, backend) | ||||
|  | ||||
| @ -1566,7 +1566,7 @@ func (bc *BlockChain) writeBlockWithState(block *types.Block, receipts []*types. | ||||
| 	bc.futureBlocks.Remove(block.Hash()) | ||||
| 
 | ||||
| 	if status == CanonStatTy { | ||||
| 		pluginNewHead(block, block.Hash(), logs) | ||||
| 		pluginNewHead(block, block.Hash(), logs, externTd) | ||||
| 		bc.chainFeed.Send(ChainEvent{Block: block, Hash: block.Hash(), Logs: logs}) | ||||
| 		if len(logs) > 0 { | ||||
| 			bc.logsFeed.Send(logs) | ||||
|  | ||||
| @ -2,6 +2,7 @@ package core | ||||
| 
 | ||||
| import ( | ||||
|   "encoding/json" | ||||
|   "math/big" | ||||
|   "github.com/ethereum/go-ethereum/core/types" | ||||
|   "github.com/ethereum/go-ethereum/common" | ||||
|   "github.com/ethereum/go-ethereum/plugins" | ||||
| @ -105,9 +106,9 @@ func pluginPostProcessBlock(block *types.Block) { | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| func PluginNewHead(pl *plugins.PluginLoader, block *types.Block, hash common.Hash, logs []*types.Log) { | ||||
| func PluginNewHead(pl *plugins.PluginLoader, block *types.Block, hash common.Hash, logs []*types.Log, td *big.Int) { | ||||
|   fnList := pl.Lookup("NewHead", func(item interface{}) bool { | ||||
|     _, ok := item.(func([]byte, core.Hash, [][]byte)) | ||||
|     _, ok := item.(func([]byte, core.Hash, [][]byte, *big.Int)) | ||||
|     return ok | ||||
|   }) | ||||
|   blockBytes, _ := rlp.EncodeToBytes(block) | ||||
| @ -116,17 +117,17 @@ func PluginNewHead(pl *plugins.PluginLoader, block *types.Block, hash common.Has | ||||
|     logBytes[i], _ = rlp.EncodeToBytes(l) | ||||
|   } | ||||
|   for _, fni := range fnList { | ||||
|     if fn, ok := fni.(func([]byte, core.Hash, [][]byte)); ok { | ||||
|       fn(blockBytes, core.Hash(hash), logBytes) | ||||
|     if fn, ok := fni.(func([]byte, core.Hash, [][]byte, *big.Int)); ok { | ||||
|       fn(blockBytes, core.Hash(hash), logBytes, td) | ||||
|     } | ||||
|   } | ||||
| } | ||||
| func pluginNewHead(block *types.Block, hash common.Hash, logs []*types.Log) { | ||||
| func pluginNewHead(block *types.Block, hash common.Hash, logs []*types.Log, td *big.Int) { | ||||
|   if plugins.DefaultPluginLoader == nil { | ||||
| 		log.Warn("Attempting NewHead, but default PluginLoader has not been initialized") | ||||
|     return | ||||
|   } | ||||
|   PluginNewHead(plugins.DefaultPluginLoader, block, hash, logs) | ||||
|   PluginNewHead(plugins.DefaultPluginLoader, block, hash, logs, td) | ||||
| } | ||||
| 
 | ||||
| func PluginNewSideBlock(pl *plugins.PluginLoader, block *types.Block, hash common.Hash, logs []*types.Log) { | ||||
|  | ||||
| @ -7,9 +7,9 @@ import ( | ||||
| 	"github.com/openrelayxyz/plugeth-utils/core" | ||||
| ) | ||||
| 
 | ||||
| func PluginStateUpdate(pl *plugins.PluginLoader, blockRoot, parentRoot common.Hash, destructs map[common.Hash]struct{}, accounts map[common.Hash][]byte, storage map[common.Hash]map[common.Hash][]byte) { | ||||
| func PluginStateUpdate(pl *plugins.PluginLoader, blockRoot, parentRoot common.Hash, destructs map[common.Hash]struct{}, accounts map[common.Hash][]byte, storage map[common.Hash]map[common.Hash][]byte, codeUpdates map[common.Hash][]byte) { | ||||
| 	fnList := pl.Lookup("StateUpdate", func(item interface{}) bool { | ||||
| 		_, ok := item.(func(core.Hash, core.Hash, map[core.Hash]struct{}, map[core.Hash][]byte, map[core.Hash]map[core.Hash][]byte)) | ||||
| 		_, ok := item.(func(core.Hash, core.Hash, map[core.Hash]struct{}, map[core.Hash][]byte, map[core.Hash]map[core.Hash][]byte, map[core.Hash][]byte)) | ||||
| 		return ok | ||||
| 	}) | ||||
| 	coreDestructs := make(map[core.Hash]struct{}) | ||||
| @ -27,18 +27,22 @@ func PluginStateUpdate(pl *plugins.PluginLoader, blockRoot, parentRoot common.Ha | ||||
| 			coreStorage[core.Hash(k)][core.Hash(h)] = d | ||||
| 		} | ||||
| 	} | ||||
| 	coreCode := make(map[core.Hash][]byte) | ||||
| 	for k, v := range codeUpdates { | ||||
| 		coreCode[core.Hash(k)] = v | ||||
| 	} | ||||
| 
 | ||||
| 	for _, fni := range fnList { | ||||
| 		if fn, ok := fni.(func(core.Hash, core.Hash, map[core.Hash]struct{}, map[core.Hash][]byte, map[core.Hash]map[core.Hash][]byte)); ok { | ||||
| 			fn(core.Hash(blockRoot), core.Hash(parentRoot), coreDestructs, coreAccounts, coreStorage) | ||||
| 		if fn, ok := fni.(func(core.Hash, core.Hash, map[core.Hash]struct{}, map[core.Hash][]byte, map[core.Hash]map[core.Hash][]byte, map[core.Hash][]byte)); ok { | ||||
| 			fn(core.Hash(blockRoot), core.Hash(parentRoot), coreDestructs, coreAccounts, coreStorage, coreCode) | ||||
| 		} | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| func pluginStateUpdate(blockRoot, parentRoot common.Hash, destructs map[common.Hash]struct{}, accounts map[common.Hash][]byte, storage map[common.Hash]map[common.Hash][]byte) { | ||||
| func pluginStateUpdate(blockRoot, parentRoot common.Hash, destructs map[common.Hash]struct{}, accounts map[common.Hash][]byte, storage map[common.Hash]map[common.Hash][]byte, codeUpdates map[common.Hash][]byte) { | ||||
| 	if plugins.DefaultPluginLoader == nil { | ||||
| 		log.Warn("Attempting StateUpdate, but default PluginLoader has not been initialized") | ||||
| 		return | ||||
| 	} | ||||
| 	PluginStateUpdate(plugins.DefaultPluginLoader, blockRoot, parentRoot, destructs, accounts, storage) | ||||
| 	PluginStateUpdate(plugins.DefaultPluginLoader, blockRoot, parentRoot, destructs, accounts, storage, codeUpdates) | ||||
| } | ||||
|  | ||||
| @ -903,12 +903,14 @@ func (s *StateDB) Commit(deleteEmptyObjects bool) (common.Hash, error) { | ||||
| 	s.IntermediateRoot(deleteEmptyObjects) | ||||
| 
 | ||||
| 	// Commit objects to the trie, measuring the elapsed time
 | ||||
| 	codeUpdates := make(map[common.Hash][]byte) | ||||
| 	codeWriter := s.db.TrieDB().DiskDB().NewBatch() | ||||
| 	for addr := range s.stateObjectsDirty { | ||||
| 		if obj := s.stateObjects[addr]; !obj.deleted { | ||||
| 			// Write any contract code associated with the state object
 | ||||
| 			if obj.code != nil && obj.dirtyCode { | ||||
| 				rawdb.WriteCode(codeWriter, common.BytesToHash(obj.CodeHash()), obj.code) | ||||
| 				codeUpdates[common.BytesToHash(obj.CodeHash())] = obj.code | ||||
| 				obj.dirtyCode = false | ||||
| 			} | ||||
| 			// Write any storage changes in the state object to its storage trie
 | ||||
| @ -952,7 +954,7 @@ func (s *StateDB) Commit(deleteEmptyObjects bool) (common.Hash, error) { | ||||
| 		} | ||||
| 		// Only update if there's a state transition (skip empty Clique blocks)
 | ||||
| 		if parent := s.snap.Root(); parent != root { | ||||
| 			pluginStateUpdate(root, parent, s.snapDestructs, s.snapAccounts, s.snapStorage) | ||||
| 			pluginStateUpdate(root, parent, s.snapDestructs, s.snapAccounts, s.snapStorage, codeUpdates) | ||||
| 			if err := s.snaps.Update(root, parent, s.snapDestructs, s.snapAccounts, s.snapStorage); err != nil { | ||||
| 				log.Warn("Failed to update snapshot tree", "from", parent, "to", root, "err", err) | ||||
| 			} | ||||
|  | ||||
							
								
								
									
										12
									
								
								go.mod
									
									
									
									
									
								
							
							
						
						
									
										12
									
								
								go.mod
									
									
									
									
									
								
							| @ -1,6 +1,6 @@ | ||||
| module github.com/ethereum/go-ethereum | ||||
| 
 | ||||
| go 1.15 | ||||
| go 1.16 | ||||
| 
 | ||||
| require ( | ||||
| 	github.com/Azure/azure-pipeline-go v0.2.2 // indirect | ||||
| @ -8,6 +8,7 @@ require ( | ||||
| 	github.com/Azure/go-autorest/autorest/adal v0.8.0 // indirect | ||||
| 	github.com/StackExchange/wmi v0.0.0-20180116203802-5d049714c4a6 // indirect | ||||
| 	github.com/VictoriaMetrics/fastcache v1.6.0 | ||||
| 	github.com/aws/aws-sdk-go v1.40.45 | ||||
| 	github.com/aws/aws-sdk-go-v2 v1.2.0 | ||||
| 	github.com/aws/aws-sdk-go-v2/config v1.1.1 | ||||
| 	github.com/aws/aws-sdk-go-v2/credentials v1.1.1 | ||||
| @ -29,7 +30,7 @@ require ( | ||||
| 	github.com/go-sourcemap/sourcemap v2.1.2+incompatible // indirect | ||||
| 	github.com/go-stack/stack v1.8.0 | ||||
| 	github.com/golang/protobuf v1.4.3 | ||||
| 	github.com/golang/snappy v0.0.3 | ||||
| 	github.com/golang/snappy v0.0.4 | ||||
| 	github.com/google/gofuzz v1.1.1-0.20200604201612-c04b05f3adfa | ||||
| 	github.com/google/uuid v1.1.5 | ||||
| 	github.com/gorilla/websocket v1.4.2 | ||||
| @ -49,7 +50,7 @@ require ( | ||||
| 	github.com/naoina/go-stringutil v0.1.0 // indirect | ||||
| 	github.com/naoina/toml v0.1.2-0.20170918210437-9fafd6967416 | ||||
| 	github.com/olekukonko/tablewriter v0.0.5 | ||||
| 	github.com/openrelayxyz/plugeth-utils v0.0.6 | ||||
| 	github.com/openrelayxyz/plugeth-utils v0.0.7 | ||||
| 	github.com/peterh/liner v1.1.1-0.20190123174540-a2c9a5303de7 | ||||
| 	github.com/prometheus/tsdb v0.7.1 | ||||
| 	github.com/rjeczalik/notify v0.9.1 | ||||
| @ -62,11 +63,12 @@ require ( | ||||
| 	github.com/tyler-smith/go-bip39 v1.0.1-0.20181017060643-dbb3b84ba2ef | ||||
| 	golang.org/x/crypto v0.0.0-20210322153248-0c34fe9e7dc2 | ||||
| 	golang.org/x/sync v0.0.0-20210220032951-036812b2e83c | ||||
| 	golang.org/x/sys v0.0.0-20210420205809-ac73e9fd8988 | ||||
| 	golang.org/x/text v0.3.4 | ||||
| 	golang.org/x/sys v0.0.0-20210423082822-04245dca01da | ||||
| 	golang.org/x/text v0.3.6 | ||||
| 	golang.org/x/time v0.0.0-20201208040808-7e3f01d25324 | ||||
| 	gopkg.in/natefinch/npipe.v2 v2.0.0-20160621034901-c1b8fa8bdcce | ||||
| 	gopkg.in/olebedev/go-duktape.v3 v3.0.0-20200619000410-60c24ae608a6 | ||||
| 	gopkg.in/sourcemap.v1 v1.0.5 // indirect | ||||
| 	gopkg.in/urfave/cli.v1 v1.20.0 | ||||
| 	gotest.tools v2.2.0+incompatible // indirect | ||||
| ) | ||||
|  | ||||
							
								
								
									
										23
									
								
								go.sum
									
									
									
									
									
								
							
							
						
						
									
										23
									
								
								go.sum
									
									
									
									
									
								
							| @ -33,7 +33,6 @@ github.com/Azure/go-autorest/autorest/date v0.2.0 h1:yW+Zlqf26583pE43KhfnhFcdmSW | ||||
| github.com/Azure/go-autorest/autorest/date v0.2.0/go.mod h1:vcORJHLJEh643/Ioh9+vPmf1Ij9AEBM5FuBIXLmIy0g= | ||||
| github.com/Azure/go-autorest/autorest/mocks v0.1.0/go.mod h1:OTyCOPRA2IgIlWxVYxBee2F5Gr4kF2zd2J5cFRaIDN0= | ||||
| github.com/Azure/go-autorest/autorest/mocks v0.2.0/go.mod h1:OTyCOPRA2IgIlWxVYxBee2F5Gr4kF2zd2J5cFRaIDN0= | ||||
| github.com/Azure/go-autorest/autorest/mocks v0.3.0 h1:qJumjCaCudz+OcqE9/XtEPfvtOjOmKaui4EOpFI6zZc= | ||||
| github.com/Azure/go-autorest/autorest/mocks v0.3.0/go.mod h1:a8FDP3DYzQ4RYfVAxAN3SVSiiO77gL2j2ronKKP0syM= | ||||
| github.com/Azure/go-autorest/logger v0.1.0 h1:ruG4BSDXONFRrZZJ2GUXDiUyVpayPmb1GnWeHDdaNKY= | ||||
| github.com/Azure/go-autorest/logger v0.1.0/go.mod h1:oExouG+K6PryycPJfVSxi/koC6LSNgds39diKLz7Vrc= | ||||
| @ -55,6 +54,8 @@ github.com/allegro/bigcache v1.2.1-0.20190218064605-e24eb225f156 h1:eMwmnE/GDgah | ||||
| github.com/allegro/bigcache v1.2.1-0.20190218064605-e24eb225f156/go.mod h1:Cb/ax3seSYIx7SuZdm2G2xzfwmv3TPSk2ucNfQESPXM= | ||||
| github.com/andreyvit/diff v0.0.0-20170406064948-c7f18ee00883/go.mod h1:rCTlJbsFo29Kk6CurOXKm700vrz8f0KW0JNfpkRJY/8= | ||||
| github.com/apache/arrow/go/arrow v0.0.0-20191024131854-af6fa24be0db/go.mod h1:VTxUBvSJ3s3eHAg65PNgrsn5BtqCRPdmyXh6rAfdxN0= | ||||
| github.com/aws/aws-sdk-go v1.40.45 h1:QN1nsY27ssD/JmW4s83qmSb+uL6DG4GmCDzjmJB4xUI= | ||||
| github.com/aws/aws-sdk-go v1.40.45/go.mod h1:585smgzpB/KqRA+K3y/NL/oYRqQvpNJYvLm+LY1U59Q= | ||||
| github.com/aws/aws-sdk-go-v2 v1.2.0 h1:BS+UYpbsElC82gB+2E2jiCBg36i8HlubTB/dO/moQ9c= | ||||
| github.com/aws/aws-sdk-go-v2 v1.2.0/go.mod h1:zEQs02YRBw1DjK0PoJv3ygDYOFTre1ejlJWl8FwAuQo= | ||||
| github.com/aws/aws-sdk-go-v2/config v1.1.1 h1:ZAoq32boMzcaTW9bcUacBswAmHTbvlvDJICgHFZuECo= | ||||
| @ -176,8 +177,9 @@ github.com/golang/protobuf v1.4.3 h1:JjCZWpVbqXDqFVmTfYWEVTMIYrL/NPdPSCHPJ0T/raM | ||||
| github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= | ||||
| github.com/golang/snappy v0.0.0-20180518054509-2e65f85255db/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= | ||||
| github.com/golang/snappy v0.0.1/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= | ||||
| github.com/golang/snappy v0.0.3 h1:fHPg5GQYlCeLIPB9BZqMVR5nR9A+IM5zcgeTdjMYmLA= | ||||
| github.com/golang/snappy v0.0.3/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= | ||||
| github.com/golang/snappy v0.0.4 h1:yAGX7huGHXlcLOEtBnF4w7FQwA26wojNCwOYAEhLjQM= | ||||
| github.com/golang/snappy v0.0.4/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= | ||||
| github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= | ||||
| github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= | ||||
| github.com/google/flatbuffers v1.11.0/go.mod h1:1AeVuKshWv4vARoZatz6mlQ0JxURH0Kv5+zNeJKJCa8= | ||||
| @ -232,7 +234,9 @@ github.com/jackpal/go-nat-pmp v1.0.2-0.20160603034137-1fa385a6f458/go.mod h1:QPH | ||||
| github.com/jedisct1/go-minisign v0.0.0-20190909160543-45766022959e h1:UvSe12bq+Uj2hWd8aOlwPmoZ+CITRFrdit+sDGfAg8U= | ||||
| github.com/jedisct1/go-minisign v0.0.0-20190909160543-45766022959e/go.mod h1:G1CVv03EnqU1wYL2dFwXxW2An0az9JTl/ZsqXQeBlkU= | ||||
| github.com/jessevdk/go-flags v0.0.0-20141203071132-1679536dcc89/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI= | ||||
| github.com/jmespath/go-jmespath v0.4.0 h1:BEgLn5cpjn8UN1mAw4NjwDrS35OdebyEtFe+9YPoQUg= | ||||
| github.com/jmespath/go-jmespath v0.4.0/go.mod h1:T8mJZnbsbmF+m6zOOFylbeCJqk5+pHWvzYPziyZiYoo= | ||||
| github.com/jmespath/go-jmespath/internal/testify v1.5.1 h1:shLQSRRSCCPj3f2gpwzGwWFoC7ycTf1rcQZHOlsJ6N8= | ||||
| github.com/jmespath/go-jmespath/internal/testify v1.5.1/go.mod h1:L3OGu8Wl2/fWfCI6z80xFu9LTZmf1ZRjMHUOPmWr69U= | ||||
| github.com/jrick/logrotate v1.0.0/go.mod h1:LNinyqDIJnpAur+b8yyulnQw/wDuN1+BYKlTRt3OuAQ= | ||||
| github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= | ||||
| @ -305,6 +309,8 @@ github.com/onsi/gomega v1.10.1 h1:o0+MgICZLuZ7xjH7Vx6zS/zcu93/BEp1VwkIW1mEXCE= | ||||
| github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo= | ||||
| github.com/openrelayxyz/plugeth-utils v0.0.6 h1:bnoUyRBrxbkfd5Zn89X1D6zEQicpPY3qW81iBrq+6e4= | ||||
| github.com/openrelayxyz/plugeth-utils v0.0.6/go.mod h1:Lv47unyKJ3b/PVbVAt9Uk+RQmpdrzDOsjSCPhAMQAps= | ||||
| github.com/openrelayxyz/plugeth-utils v0.0.7 h1:rPJJYSncqwWo/v57Aghl2LL4bcNg5lHfIthrSeeQE8M= | ||||
| github.com/openrelayxyz/plugeth-utils v0.0.7/go.mod h1:Lv47unyKJ3b/PVbVAt9Uk+RQmpdrzDOsjSCPhAMQAps= | ||||
| github.com/opentracing/opentracing-go v1.0.2/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= | ||||
| github.com/opentracing/opentracing-go v1.0.3-0.20180606204148-bd9c31933947/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= | ||||
| github.com/opentracing/opentracing-go v1.1.0 h1:pWlfV3Bxv7k65HYwkikxat0+s3pV4bsqf19k25Ur8rU= | ||||
| @ -337,6 +343,8 @@ github.com/prometheus/tsdb v0.7.1/go.mod h1:qhTCs0VvXwvX/y3TZrWD7rabWM+ijKTux40T | ||||
| github.com/retailnext/hllpp v1.0.1-0.20180308014038-101a6d2f8b52/go.mod h1:RDpi1RftBQPUCDRw6SmxeaREsAaRKnOclghuzp/WRzc= | ||||
| github.com/rjeczalik/notify v0.9.1 h1:CLCKso/QK1snAlnhNR/CNvNiFU2saUtjV0bx3EwNeCE= | ||||
| github.com/rjeczalik/notify v0.9.1/go.mod h1:rKwnCoCGeuQnwBtTSPL9Dad03Vh2n40ePRrjvIXnJho= | ||||
| github.com/robertkrimen/otto v0.0.0-20210614181706-373ff5438452 h1:ewTtJ72GFy2e0e8uyiDwMG3pKCS5mBh+hdSTYsPKEP8= | ||||
| github.com/robertkrimen/otto v0.0.0-20210614181706-373ff5438452/go.mod h1:xvqspoSXJTIpemEonrMDFq6XzwHYYgToXWj5eRX1OtY= | ||||
| github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= | ||||
| github.com/rs/cors v1.7.0 h1:+88SsELBHx5r+hZ8TCkggzSstaWNbDvThkVK8H6f9ik= | ||||
| github.com/rs/cors v1.7.0/go.mod h1:gFx+x8UowdsKA9AchylcLynDq+nNFfI8FkUZdN/jGCU= | ||||
| @ -440,8 +448,9 @@ golang.org/x/net v0.0.0-20200520004742-59133d7f0dd7/go.mod h1:qpuaurCH72eLCgpAm/ | ||||
| golang.org/x/net v0.0.0-20200813134508-3edf25e44fcc/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= | ||||
| golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= | ||||
| golang.org/x/net v0.0.0-20210220033124-5f55cee0dc0d/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= | ||||
| golang.org/x/net v0.0.0-20210226172049-e18ecbb05110 h1:qWPm9rbaAMKs8Bq/9LRpbMqxWRVUAQwMI9fVrssnTfw= | ||||
| golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= | ||||
| golang.org/x/net v0.0.0-20210614182718-04defd469f4e h1:XpT3nA5TvE525Ne3hInMh6+GETgn27Zfm9dxsThnX2Q= | ||||
| golang.org/x/net v0.0.0-20210614182718-04defd469f4e/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= | ||||
| golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= | ||||
| golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= | ||||
| golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= | ||||
| @ -484,16 +493,18 @@ golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7w | ||||
| golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= | ||||
| golang.org/x/sys v0.0.0-20210316164454-77fc1eacc6aa/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= | ||||
| golang.org/x/sys v0.0.0-20210324051608-47abb6519492/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= | ||||
| golang.org/x/sys v0.0.0-20210420205809-ac73e9fd8988 h1:EjgCl+fVlIaPJSori0ikSz3uV0DOHKWOJFpv1sAAhBM= | ||||
| golang.org/x/sys v0.0.0-20210420205809-ac73e9fd8988/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= | ||||
| golang.org/x/sys v0.0.0-20210423082822-04245dca01da h1:b3NXsE2LusjYGGjL5bxEVZZORm/YEFFrWFjR8eFrw/c= | ||||
| golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= | ||||
| golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1 h1:v+OssWQX+hTHEmOBgwxdZxK4zHq3yOs8F9J7mk0PY8E= | ||||
| golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= | ||||
| golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= | ||||
| golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= | ||||
| golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= | ||||
| golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= | ||||
| golang.org/x/text v0.3.4 h1:0YWbFKbhXG/wIiuHDSKpS0Iy7FSA+u45VtBMfQcFTTc= | ||||
| golang.org/x/text v0.3.4/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= | ||||
| golang.org/x/text v0.3.6 h1:aRYxNxv6iGQlyVaZmk6ZgYEDa+Jg18DxebPSrd6bg1M= | ||||
| golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= | ||||
| golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= | ||||
| golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= | ||||
| golang.org/x/time v0.0.0-20201208040808-7e3f01d25324 h1:Hir2P/De0WpUhtrKGGjvSb2YxUgyZ7EFOSLIcSSpiwE= | ||||
| @ -584,6 +595,8 @@ gopkg.in/natefinch/npipe.v2 v2.0.0-20160621034901-c1b8fa8bdcce h1:+JknDZhAj8YMt7 | ||||
| gopkg.in/natefinch/npipe.v2 v2.0.0-20160621034901-c1b8fa8bdcce/go.mod h1:5AcXVHNjg+BDxry382+8OKon8SEWiKktQR07RKPsv1c= | ||||
| gopkg.in/olebedev/go-duktape.v3 v3.0.0-20200619000410-60c24ae608a6 h1:a6cXbcDDUkSBlpnkWV1bJ+vv3mOgQEltEJ2rPxroVu0= | ||||
| gopkg.in/olebedev/go-duktape.v3 v3.0.0-20200619000410-60c24ae608a6/go.mod h1:uAJfkITjFhyEEuUfm7bsmCZRbW5WRq8s9EY8HZ6hCns= | ||||
| gopkg.in/sourcemap.v1 v1.0.5 h1:inv58fC9f9J3TK2Y2R1NPntXEn3/wjWHkonhIUODNTI= | ||||
| gopkg.in/sourcemap.v1 v1.0.5/go.mod h1:2RlvNNSMglmRrcvhfuzp4hQHwOtjxlbjX7UPY/GXb78= | ||||
| gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ= | ||||
| gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw= | ||||
| gopkg.in/urfave/cli.v1 v1.20.0 h1:NdAVW6RYxDif9DhDHaAortIu956m2c0v+09AZBPTbE0= | ||||
|  | ||||
							
								
								
									
										36
									
								
								plugins/wrappers/dbwrapper.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										36
									
								
								plugins/wrappers/dbwrapper.go
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,36 @@ | ||||
| package wrappers | ||||
| 
 | ||||
| import ( | ||||
| 	"github.com/ethereum/go-ethereum/ethdb" | ||||
| 	"github.com/openrelayxyz/plugeth-utils/restricted" | ||||
| ) | ||||
| 
 | ||||
| type dbWrapper struct{ | ||||
| 	db ethdb.Database | ||||
| } | ||||
| 
 | ||||
| func (d *dbWrapper) Has(key []byte) (bool, error) { return d.db.Has(key) } | ||||
| func (d *dbWrapper) Get(key []byte) ([]byte, error) { return d.db.Get(key) } | ||||
| func (d *dbWrapper) Put(key []byte, value []byte) error { return d.db.Put(key, value) } | ||||
| func (d *dbWrapper) Delete(key []byte) error { return d.db.Delete(key) } | ||||
| func (d *dbWrapper) Stat(property string) (string, error) { return d.db.Stat(property) } | ||||
| func (d *dbWrapper) Compact(start []byte, limit []byte) error { return d.db.Compact(start, limit) } | ||||
| func (d *dbWrapper) HasAncient(kind string, number uint64) (bool, error) { return d.db.HasAncient(kind, number) } | ||||
| func (d *dbWrapper) Ancient(kind string, number uint64) ([]byte, error) { return d.db.Ancient(kind, number) } | ||||
| func (d *dbWrapper) Ancients() (uint64, error) { return d.db.Ancients() } | ||||
| func (d *dbWrapper) AncientSize(kind string) (uint64, error) { return d.db.AncientSize(kind) } | ||||
| func (d *dbWrapper) AppendAncient(number uint64, hash, header, body, receipt, td []byte) error { return d.db.AppendAncient(number, hash, header, body, receipt, td) } | ||||
| func (d *dbWrapper) TruncateAncients(n uint64) error { return d.db.TruncateAncients(n) } | ||||
| func (d *dbWrapper) Sync() error { return d.db.Sync() } | ||||
| func (d *dbWrapper) Close() error { return d.db.Close() } | ||||
| func (d *dbWrapper) NewIterator(prefix []byte, start []byte) restricted.Iterator { return &iterWrapper{d.db.NewIterator(prefix, start)} } | ||||
| 
 | ||||
| type iterWrapper struct { | ||||
| 	iter  ethdb.Iterator | ||||
| } | ||||
| 
 | ||||
| func (it *iterWrapper) Next() bool { return it.iter.Next() } | ||||
| func (it *iterWrapper) Error() error { return it.iter.Error() } | ||||
| func (it *iterWrapper) Key() []byte { return it.iter.Key() } | ||||
| func (it *iterWrapper) Value() []byte { return it.iter.Value() } | ||||
| func (it *iterWrapper) Release() { it.iter.Release() } | ||||
| @ -240,7 +240,7 @@ func (b *Backend) SuggestGasTipCap(ctx context.Context) (*big.Int, error) { | ||||
| 	return b.b.SuggestGasTipCap(ctx) | ||||
| } | ||||
| func (b *Backend) ChainDb() restricted.Database { | ||||
| 	return b.b.ChainDb() | ||||
| 	return &dbWrapper{b.b.ChainDb()} | ||||
| } | ||||
| func (b *Backend) ExtRPCEnabled() bool { | ||||
| 	return b.b.ExtRPCEnabled() | ||||
| @ -588,12 +588,12 @@ func (b *Backend) ChainConfig() *params.ChainConfig { | ||||
| 	} | ||||
| 	b.chainConfig = ¶ms.ChainConfig{} | ||||
| 	nval := reflect.ValueOf(b.b.ChainConfig()) | ||||
| 	ntype := nval.Type() | ||||
| 	ntype := nval.Elem().Type() | ||||
| 	lval := reflect.ValueOf(b.chainConfig) | ||||
| 	for i := 0; i < nval.NumField(); i++ { | ||||
| 	for i := 0; i < nval.Elem().NumField(); i++ { | ||||
| 		field := ntype.Field(i) | ||||
| 		v := nval.FieldByName(field.Name) | ||||
| 		lv := lval.FieldByName(field.Name) | ||||
| 		v := nval.Elem().FieldByName(field.Name) | ||||
| 		lv := lval.Elem().FieldByName(field.Name) | ||||
| 		if v.Type() == lv.Type() && lv.CanSet() { | ||||
| 			lv.Set(v) | ||||
| 		} else { | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user