Skip to content

Commit 79e8597

Browse files
committed
add more tests
fix
1 parent c991ce3 commit 79e8597

File tree

5 files changed

+828
-136
lines changed

5 files changed

+828
-136
lines changed
Lines changed: 34 additions & 62 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,45 @@
11
package ens
22

3-
import (
4-
"github.com/gobitfly/beaconchain/pkg/commons/log"
3+
var (
4+
registryABI, _ = ENSRegistryMetaData.GetAbi()
5+
registrarControllerABI, _ = ENSETHRegistrarControllerMetaData.GetAbi()
6+
oldRegistrarControllerABI, _ = ENSOldRegistrarControllerMetaData.GetAbi()
7+
publicResolverABI, _ = ENSPublicResolverMetaData.GetAbi()
8+
)
9+
10+
var (
11+
RegistryNewResolverTopic = registryABI.Events["NewResolver"].ID
12+
RegistryNewOwnerTopic = registryABI.Events["NewOwner"].ID
13+
RegistryNewTTLTopic = registryABI.Events["NewTTL"].ID
14+
)
15+
16+
var (
17+
RegistrarControllerNameRegisteredTopic = registrarControllerABI.Events["NameRegistered"].ID
18+
RegistrarControllerNameRenewedTopic = registrarControllerABI.Events["NameRenewed"].ID
19+
)
20+
21+
var (
22+
OldRegistrarControllerNameRegisteredTopic = oldRegistrarControllerABI.Events["NameRegistered"].ID
23+
OldRegistrarControllerNameRenewedTopic = oldRegistrarControllerABI.Events["NameRenewed"].ID
24+
)
525

6-
"github.com/ethereum/go-ethereum/accounts/abi"
7-
"github.com/ethereum/go-ethereum/accounts/abi/bind"
8-
"github.com/ethereum/go-ethereum/common"
26+
var (
27+
PublicResolverNameChangedTopic = publicResolverABI.Events["NameChanged"].ID
28+
PublicResolverAddressChangedTopic = publicResolverABI.Events["AddressChanged"].ID
929
)
1030

1131
var ENSCrontractAddressesEthereum = map[string]string{
12-
"0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e": "Registry",
13-
"0x253553366Da8546fC250F225fe3d25d0C782303b": "ETHRegistrarController",
14-
"0x283Af0B28c62C092C9727F1Ee09c02CA627EB7F5": "OldEnsRegistrarController",
32+
EthereumRegistry: "Registry",
33+
EthereumRegistrarController: "ETHRegistrarController",
34+
EthereumOldEnsRegistrarController: "OldEnsRegistrarController",
1535
}
1636

37+
var (
38+
EthereumRegistry = "0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e"
39+
EthereumRegistrarController = "0x253553366Da8546fC250F225fe3d25d0C782303b"
40+
EthereumOldEnsRegistrarController = "0x283Af0B28c62C092C9727F1Ee09c02CA627EB7F5"
41+
)
42+
1743
var ENSCrontractAddressesHolesky = map[string]string{
1844
"0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e": "Registry",
1945
"0x179Be112b24Ad4cFC392eF8924DfA08C20Ad8583": "ETHRegistrarController",
@@ -38,57 +64,3 @@ func ENSContractFor(chainID string) map[string]string {
3864
return nil
3965
}
4066
}
41-
42-
var ENSRegistryParsedABI, ENSBaseRegistrarParsedABI, ENSOldRegistrarControllerParsedABI, ENSPublicResolverParsedABI, ENSETHRegistrarControllerParsedABI *abi.ABI
43-
44-
var ENSRegistryContract, ENSBaseRegistrarContract, ENSOldRegistrarControllerContract, ENSPublicResolverContract, ENSETHRegistrarControllerContract *bind.BoundContract
45-
46-
func init() {
47-
var err error
48-
49-
ENSRegistryParsedABI, err = ENSRegistryMetaData.GetAbi()
50-
if err != nil {
51-
log.Fatal(err, "error getting ens-registry-abi", 0)
52-
}
53-
ENSRegistryParsedABI, err = ENSRegistryMetaData.GetAbi()
54-
if err != nil {
55-
log.Fatal(err, "error getting ens-registry-abi", 0)
56-
}
57-
ENSBaseRegistrarParsedABI, err = ENSBaseRegistrarMetaData.GetAbi()
58-
if err != nil {
59-
log.Fatal(err, "error getting ens-base-regsitrar-abi", 0)
60-
}
61-
ENSOldRegistrarControllerParsedABI, err = ENSOldRegistrarControllerMetaData.GetAbi()
62-
if err != nil {
63-
log.Fatal(err, "error getting ens-old-registrar-controller-abi", 0)
64-
}
65-
ENSPublicResolverParsedABI, err = ENSPublicResolverMetaData.GetAbi()
66-
if err != nil {
67-
log.Fatal(err, "error getting ens-public-resolver-abi", 0)
68-
}
69-
ENSETHRegistrarControllerParsedABI, err = ENSETHRegistrarControllerMetaData.GetAbi()
70-
if err != nil {
71-
log.Fatal(err, "error getting ens-eth-registrar-controller-abi", 0)
72-
}
73-
74-
ENSRegistryContract = bind.NewBoundContract(common.Address{}, *ENSRegistryParsedABI, nil, nil, nil)
75-
if err != nil {
76-
log.Fatal(err, "error creating ens-registry-contract", 0)
77-
}
78-
ENSBaseRegistrarContract = bind.NewBoundContract(common.Address{}, *ENSBaseRegistrarParsedABI, nil, nil, nil)
79-
if err != nil {
80-
log.Fatal(err, "error creating ens-base-registrar-contract", 0)
81-
}
82-
ENSOldRegistrarControllerContract = bind.NewBoundContract(common.Address{}, *ENSOldRegistrarControllerParsedABI, nil, nil, nil)
83-
if err != nil {
84-
log.Fatal(err, "error creating ens-old-registrar-controller-contract", 0)
85-
}
86-
ENSPublicResolverContract = bind.NewBoundContract(common.Address{}, *ENSPublicResolverParsedABI, nil, nil, nil)
87-
if err != nil {
88-
log.Fatal(err, "error creating ens-public-resolver-contract", 0)
89-
}
90-
ENSETHRegistrarControllerContract = bind.NewBoundContract(common.Address{}, *ENSETHRegistrarControllerParsedABI, nil, nil, nil)
91-
if err != nil {
92-
log.Fatal(err, "error creating ens-eth-registrar-controller-contract", 0)
93-
}
94-
}

backend/pkg/executionlayer/adaptor.go

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -21,10 +21,6 @@ type IndexedBlock struct {
2121
Contracts []metadataupdates.ContractUpdateWithAddress
2222
}
2323

24-
type Store interface {
25-
Save(blockNumber uint64, hash []byte, block IndexedBlock) (err error)
26-
}
27-
2824
func NewBigtableAdaptor(data data.Store, metadataUpdates metadataupdates.Store) BigTableAdaptor {
2925
return BigTableAdaptor{
3026
data: data,

backend/pkg/executionlayer/indexer.go

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,14 +6,18 @@ import (
66
"github.com/gobitfly/beaconchain/pkg/commons/types"
77
)
88

9+
type Store interface {
10+
Save(blockNumber uint64, hash []byte, block IndexedBlock) (err error)
11+
}
12+
913
type Indexer struct {
10-
adaptor Store
14+
store Store
1115
transformers []TransformFunc
1216
}
1317

14-
func NewIndexer(adaptor Store, transformers ...TransformFunc) *Indexer {
18+
func NewIndexer(store Store, transformers ...TransformFunc) *Indexer {
1519
return &Indexer{
16-
adaptor: adaptor,
20+
store: store,
1721
transformers: transformers,
1822
}
1923
}
@@ -36,7 +40,7 @@ func (indexer *Indexer) IndexBlock(chainID string, block *types.Eth1Block) error
3640
return fmt.Errorf("error transforming block [%v]", block.Number)
3741
}
3842
}
39-
if err := indexer.adaptor.Save(block.Number, block.Hash, res); err != nil {
43+
if err := indexer.store.Save(block.Number, block.Hash, res); err != nil {
4044
return fmt.Errorf("error saving block [%v]: %w", block.Number, err)
4145
}
4246
return nil

backend/pkg/executionlayer/transformer.go

Lines changed: 39 additions & 52 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ import (
1313
"golang.org/x/exp/maps"
1414

1515
"github.com/gobitfly/beaconchain/internal/contracts"
16-
ensContracts "github.com/gobitfly/beaconchain/pkg/commons/contracts/ens"
16+
"github.com/gobitfly/beaconchain/pkg/commons/contracts/ens"
1717
"github.com/gobitfly/beaconchain/pkg/commons/db2/data"
1818
"github.com/gobitfly/beaconchain/pkg/commons/db2/metadataupdates"
1919
"github.com/gobitfly/beaconchain/pkg/commons/erc1155"
@@ -233,7 +233,7 @@ func TransformBlock(chainID string, block *types.Eth1Block, res *IndexedBlock) e
233233
idx.InternalTransactionCount++
234234
}
235235

236-
if t.GetType() == 3 {
236+
if t.GetType() == gethtypes.BlobTxType {
237237
idx.BlobTransactionCount++
238238
}
239239
}
@@ -537,14 +537,11 @@ func TransformWithdrawal(chainID string, block *types.Eth1Block, res *IndexedBlo
537537
}
538538

539539
func TransformEnsNameRegistered(chainID string, block *types.Eth1Block, res *IndexedBlock) error {
540-
ensContractAddresses := ensContracts.ENSContractFor(chainID)
540+
ensContractAddresses := ens.ENSContractFor(chainID)
541541
var ensLogs []data.ENSLog
542542
for i, tx := range block.GetTransactions() {
543543
for j, txLog := range tx.GetLogs() {
544-
ensContract, ok := ensContractAddresses[common.BytesToAddress(txLog.Address).String()]
545-
if !ok {
546-
continue
547-
}
544+
ensContract := ensContractAddresses[common.BytesToAddress(txLog.Address).String()]
548545

549546
topics := txLog.GetTopics()
550547
ethTopics := make([]common.Hash, 0, len(topics))
@@ -563,89 +560,76 @@ func TransformEnsNameRegistered(chainID string, block *types.Eth1Block, res *Ind
563560
Removed: txLog.GetRemoved(),
564561
}
565562
var ensLog data.ENSLog
566-
// TODO there is probably a better way to do this
567563
for _, lTopic := range topics {
568564
switch ensContract {
569565
case "Registry":
566+
filterer, _ := ens.NewENSRegistryFilterer(common.Address{}, nil)
570567
switch {
571-
case bytes.Equal(lTopic, ensContracts.ENSRegistryParsedABI.Events["NewResolver"].ID.Bytes()):
572-
r := &ensContracts.ENSRegistryNewResolver{}
573-
if err := ensContracts.ENSRegistryContract.UnpackLog(r, "NewResolver", ethLog); err != nil {
574-
return err
575-
}
568+
case bytes.Equal(lTopic, ens.RegistryNewResolverTopic.Bytes()):
569+
r, _ := filterer.ParseNewResolver(ethLog)
576570
ensLog.Node = &r.Node
577-
case bytes.Equal(lTopic, ensContracts.ENSRegistryParsedABI.Events["NewOwner"].ID.Bytes()):
578-
r := &ensContracts.ENSRegistryNewOwner{}
579-
if err := ensContracts.ENSRegistryContract.UnpackLog(r, "NewOwner", ethLog); err != nil {
580-
return err
581-
}
571+
case bytes.Equal(lTopic, ens.RegistryNewOwnerTopic.Bytes()):
572+
r, _ := filterer.ParseNewOwner(ethLog)
582573
ensLog.Owner = &r.Owner
583-
case bytes.Equal(lTopic, ensContracts.ENSRegistryParsedABI.Events["NewTTL"].ID.Bytes()):
584-
r := &ensContracts.ENSRegistryNewTTL{}
585-
if err := ensContracts.ENSRegistryContract.UnpackLog(r, "NewTTL", ethLog); err != nil {
586-
return err
587-
}
574+
case bytes.Equal(lTopic, ens.RegistryNewTTLTopic.Bytes()):
575+
r, _ := filterer.ParseNewTTL(ethLog)
588576
ensLog.Node = &r.Node
589577
}
590578
case "ETHRegistrarController":
579+
filterer, _ := ens.NewENSETHRegistrarControllerFilterer(common.Address{}, nil)
591580
switch {
592-
case bytes.Equal(lTopic, ensContracts.ENSETHRegistrarControllerParsedABI.Events["NameRegistered"].ID.Bytes()):
593-
r := &ensContracts.ENSETHRegistrarControllerNameRegistered{}
594-
if err := ensContracts.ENSETHRegistrarControllerContract.UnpackLog(r, "NameRegistered", ethLog); err != nil {
595-
return err
596-
}
581+
case bytes.Equal(lTopic, ens.RegistrarControllerNameRegisteredTopic.Bytes()):
582+
r, _ := filterer.ParseNameRegistered(ethLog)
597583
if err := verifyName(r.Name); err != nil {
598584
continue
599585
}
600586
ensLog.Name = &r.Name
601587
ensLog.Owner = &r.Owner
602-
case bytes.Equal(lTopic, ensContracts.ENSETHRegistrarControllerParsedABI.Events["NameRenewed"].ID.Bytes()):
603-
r := &ensContracts.ENSETHRegistrarControllerNameRenewed{}
604-
if err := ensContracts.ENSETHRegistrarControllerContract.UnpackLog(r, "NameRenewed", ethLog); err != nil {
605-
return err
606-
}
588+
case bytes.Equal(lTopic, ens.RegistrarControllerNameRenewedTopic.Bytes()):
589+
r, _ := filterer.ParseNameRenewed(ethLog)
607590
if err := verifyName(r.Name); err != nil {
608591
continue
609592
}
610593
ensLog.Name = &r.Name
611594
}
612595
case "OldEnsRegistrarController":
596+
filterer, _ := ens.NewENSOldRegistrarControllerFilterer(common.Address{}, nil)
613597
switch {
614-
case bytes.Equal(lTopic, ensContracts.ENSOldRegistrarControllerParsedABI.Events["NameRegistered"].ID.Bytes()):
615-
r := &ensContracts.ENSOldRegistrarControllerNameRegistered{}
616-
if err := ensContracts.ENSOldRegistrarControllerContract.UnpackLog(r, "NameRegistered", ethLog); err != nil {
617-
return err
618-
}
598+
case bytes.Equal(lTopic, ens.OldRegistrarControllerNameRegisteredTopic.Bytes()):
599+
r, _ := filterer.ParseNameRegistered(ethLog)
619600
if err := verifyName(r.Name); err != nil {
620601
continue
621602
}
622603
ensLog.Name = &r.Name
623604
ensLog.Owner = &r.Owner
624-
case bytes.Equal(lTopic, ensContracts.ENSOldRegistrarControllerParsedABI.Events["NameRenewed"].ID.Bytes()):
625-
r := &ensContracts.ENSOldRegistrarControllerNameRenewed{}
626-
if err := ensContracts.ENSOldRegistrarControllerContract.UnpackLog(r, "NameRenewed", ethLog); err != nil {
627-
return err
628-
}
605+
case bytes.Equal(lTopic, ens.OldRegistrarControllerNameRenewedTopic.Bytes()):
606+
r, _ := filterer.ParseNameRenewed(ethLog)
629607
if err := verifyName(r.Name); err != nil {
630608
continue
631609
}
632610
ensLog.Name = &r.Name
633611
}
634612
default:
613+
// try to parse public resolver events
614+
// in that case we are not sure that the log is emitted from a public resolver
615+
// checking the topic is not enough collision is common for events topic
616+
// TODO this might be a source of bug, someone could create a fake ens contract and emit the same
617+
// events and we will parse it like if it was the truth
618+
filterer, _ := ens.NewENSPublicResolver(common.Address{}, nil)
635619
switch {
636-
case bytes.Equal(lTopic, ensContracts.ENSPublicResolverParsedABI.Events["NameChanged"].ID.Bytes()):
637-
r := &ensContracts.ENSPublicResolverNameChanged{}
638-
if err := ensContracts.ENSPublicResolverContract.UnpackLog(r, "NameChanged", ethLog); err != nil {
639-
return err
620+
case bytes.Equal(lTopic, ens.PublicResolverNameChangedTopic.Bytes()):
621+
r, err := filterer.ParseNameChanged(ethLog)
622+
if err != nil {
623+
continue
640624
}
641625
if err := verifyName(r.Name); err != nil {
642626
continue
643627
}
644628
ensLog.Name = &r.Name
645-
case bytes.Equal(lTopic, ensContracts.ENSPublicResolverParsedABI.Events["AddressChanged"].ID.Bytes()):
646-
r := &ensContracts.ENSPublicResolverAddressChanged{}
647-
if err := ensContracts.ENSPublicResolverContract.UnpackLog(r, "AddressChanged", ethLog); err != nil {
648-
return err
629+
case bytes.Equal(lTopic, ens.PublicResolverAddressChangedTopic.Bytes()):
630+
r, err := filterer.ParseAddressChanged(ethLog)
631+
if err != nil {
632+
continue
649633
}
650634
ensLog.Node = &r.Node
651635
}
@@ -692,7 +676,10 @@ func elConfigForChainID(chainID string) *params.ChainConfig {
692676
case "1":
693677
return params.MainnetChainConfig
694678
}
695-
return nil
679+
return &params.ChainConfig{
680+
ByzantiumBlock: big.NewInt(0),
681+
ConstantinopleBlock: big.NewInt(0),
682+
}
696683
}
697684

698685
func verifyName(name string) error {

0 commit comments

Comments
 (0)