Skip to content

Commit

Permalink
add translator to override DAC members URLs
Browse files Browse the repository at this point in the history
  • Loading branch information
joanestebanr committed Jul 22, 2024
1 parent e18eb66 commit 6dd5417
Show file tree
Hide file tree
Showing 7 changed files with 104 additions and 2 deletions.
5 changes: 5 additions & 0 deletions cmd/run.go
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@ import (
"github.com/0xPolygon/cdk/sequencesender/txbuilder"
"github.com/0xPolygon/cdk/state"
"github.com/0xPolygon/cdk/state/pgstatestorage"
"github.com/0xPolygon/cdk/translator"
ethtxman "github.com/0xPolygonHermez/zkevm-ethtx-manager/etherman"
"github.com/0xPolygonHermez/zkevm-ethtx-manager/etherman/etherscan"
"github.com/jackc/pgx/v4/pgxpool"
Expand Down Expand Up @@ -183,6 +184,9 @@ func newDataAvailability(c config.Config, etherman *etherman.Client) (*dataavail
if !c.Common.IsValidiumMode {
return nil, nil
}
translator := translator.NewTranslatorImpl()
log.Infof("Translator rules: %v", c.Common.Translator)
translator.AddConfigRules(c.Common.Translator)

// Backend specific config
daProtocolName, err := etherman.GetDAProtocolName()
Expand Down Expand Up @@ -210,6 +214,7 @@ func newDataAvailability(c config.Config, etherman *etherman.Client) (*dataavail
dacAddr,
pk,
dataCommitteeClient.NewFactory(),
translator,
)
if err != nil {
return nil, err
Expand Down
5 changes: 4 additions & 1 deletion common/config.go
Original file line number Diff line number Diff line change
@@ -1,8 +1,11 @@
package common

import "github.com/0xPolygon/cdk/translator"

type Config struct {
// IsValidiumMode has the value true if the sequence sender is running in validium mode.
IsValidiumMode bool `mapstructure:"IsValidiumMode"`
// Contract Versions: elderberry, banana
ContractVersions string `mapstructure:"ContractVersions"`
ContractVersions string `mapstructure:"ContractVersions"`
Translator translator.Config `mapstructure:"Translator"`
}
8 changes: 8 additions & 0 deletions dataavailability/datacommittee/datacommittee.go
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ import (
daTypes "github.com/0xPolygon/cdk-data-availability/types"
"github.com/0xPolygon/cdk/etherman"
"github.com/0xPolygon/cdk/log"
"github.com/0xPolygonHermez/zkevm-synchronizer-l1/translator"
"github.com/ethereum/go-ethereum/accounts/abi/bind"
"github.com/ethereum/go-ethereum/common"
"github.com/ethereum/go-ethereum/crypto"
Expand All @@ -22,6 +23,7 @@ import (
)

const unexpectedHashTemplate = "missmatch on transaction data. Expected hash %s, actual hash: %s"
const translateContextName = "dataCommittee"

// DataCommitteeMember represents a member of the Data Committee
type DataCommitteeMember struct {
Expand All @@ -45,6 +47,7 @@ type Backend struct {
committeeMembers []DataCommitteeMember
selectedCommitteeMember int
ctx context.Context
Translator translator.Translator
}

// New creates an instance of Backend
Expand All @@ -53,6 +56,7 @@ func New(
dataCommitteeAddr common.Address,
privKey *ecdsa.PrivateKey,
dataCommitteeClientFactory client.Factory,
translator translator.Translator,
) (*Backend, error) {
ethClient, err := ethclient.Dial(l1RPCURL)
if err != nil {
Expand All @@ -70,6 +74,7 @@ func New(
privKey: privKey,
dataCommitteeClientFactory: dataCommitteeClientFactory,
ctx: context.Background(),
Translator: translator,
}, nil
}

Expand Down Expand Up @@ -377,6 +382,9 @@ func (d *Backend) getCurrentDataCommitteeMembers() ([]DataCommitteeMember, error
if err != nil {
return nil, fmt.Errorf("error getting Members %d from L1 SC: %w", i, err)
}
if d.Translator != nil {
member.Url = d.Translator.Translate(translateContextName, member.Url)
}
members = append(members, DataCommitteeMember{
Addr: member.Addr,
URL: member.Url,
Expand Down
3 changes: 2 additions & 1 deletion sequencesender/txbuilder/banana_validium.go
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,8 @@ type TxBuilderBananaValidium struct {
condNewSeq CondNewSequence
}

func NewTxBuilderBananaValidium(rollupContract contracts.RollupBananaType, gerContract contracts.GlobalExitRootBananaType,
func NewTxBuilderBananaValidium(rollupContract contracts.RollupBananaType,
gerContract contracts.GlobalExitRootBananaType,
da dataavailability.SequenceSender, opts bind.TransactOpts, sender common.Address, maxBatchesForL1 uint64) *TxBuilderBananaValidium {
return &TxBuilderBananaValidium{
TxBuilderBananaBase: *NewTxBuilderBananaBase(rollupContract, gerContract, opts, sender),
Expand Down
11 changes: 11 additions & 0 deletions translator/config.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
package translator

type ConfigRuleFullMatch struct {
ContextName string `mapstructure:"ContextName"`
Old string `mapstructure:"Old"`
New string `mapstructure:"New"`
}

type Config struct {
FullMatchRules []ConfigRuleFullMatch `mapstructure:"FullMatchRules"`
}
5 changes: 5 additions & 0 deletions translator/translator.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
package translator

type Translator interface {
Translate(contextName string, data string) string
}
69 changes: 69 additions & 0 deletions translator/translator_impl.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
package translator

import "github.com/0xPolygonHermez/zkevm-synchronizer-l1/log"

type TranslatorFullMatchRule struct {
// If null match any context
ContextName *string
// If null match any data
FullMatchString string
NewString string
}

func (t *TranslatorFullMatchRule) Match(contextName string, data string) bool {
if t.ContextName != nil && *t.ContextName != contextName {
return false
}
if t.FullMatchString != data {
return false
}
return true
}

func (t *TranslatorFullMatchRule) Translate(contextName string, data string) string {
return t.NewString
}

func NewTranslatorFullMatchRule(contextName *string, fullMatchString string, newString string) *TranslatorFullMatchRule {
return &TranslatorFullMatchRule{
ContextName: contextName,
FullMatchString: fullMatchString,
NewString: newString,
}
}

type TranslatorImpl struct {
FullMatchRules []TranslatorFullMatchRule
}

func NewTranslatorImpl() *TranslatorImpl {
return &TranslatorImpl{
FullMatchRules: []TranslatorFullMatchRule{},
}
}

func (t *TranslatorImpl) Translate(contextName string, data string) string {
for _, rule := range t.FullMatchRules {
if rule.Match(contextName, data) {
translated := rule.Translate(contextName, data)
log.Debugf("Translated (ctxName=%s) %s to %s", contextName, data, translated)
return translated
}
}
return data
}

func (t *TranslatorImpl) AddRule(rule TranslatorFullMatchRule) {
t.FullMatchRules = append(t.FullMatchRules, rule)
}

func (t *TranslatorImpl) AddConfigRules(cfg Config) {
for _, v := range cfg.FullMatchRules {
var contextName *string
if v.ContextName != "" {
contextName = &v.ContextName
}
rule := NewTranslatorFullMatchRule(contextName, v.Old, v.New)
t.AddRule(*rule)
}
}

0 comments on commit 6dd5417

Please sign in to comment.