Skip to content

Commit

Permalink
adds evm_client wait for transaction confirmation (celestiaorg#354)
Browse files Browse the repository at this point in the history
  • Loading branch information
rach-id committed May 9, 2022
1 parent 4f1a12c commit 78a2a44
Show file tree
Hide file tree
Showing 2 changed files with 56 additions and 7 deletions.
61 changes: 55 additions & 6 deletions x/qgb/orchestrator/evm_client.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,9 @@ import (
"context"
"crypto/ecdsa"
"errors"
"fmt"
"math/big"
"time"

"github.com/ethereum/go-ethereum/common"
"github.com/ethereum/go-ethereum/ethclient"
Expand Down Expand Up @@ -37,20 +39,20 @@ type evmClient struct {
logger tmlog.Logger
wrapper wrapper.QuantumGravityBridge
privateKey *ecdsa.PrivateKey
evmRpc string
evmRPC string
}

func NewEvmClient(
logger tmlog.Logger,
wrapper wrapper.QuantumGravityBridge,
privateKey *ecdsa.PrivateKey,
evmRpc string,
evmRPC string,
) EVMClient {
return &evmClient{
logger: logger,
wrapper: wrapper,
privateKey: privateKey,
evmRpc: evmRpc,
evmRPC: evmRPC,
}
}

Expand All @@ -60,6 +62,7 @@ func (ec *evmClient) UpdateValidatorSet(
valset types.Valset,
sigs []wrapper.Signature,
) error {
ec.logger.Info(fmt.Sprintf("relaying valset %d...", nonce))
opts, err := ec.NewTransactOpts(ctx, 1000000)
if err != nil {
return err
Expand All @@ -86,7 +89,22 @@ func (ec *evmClient) UpdateValidatorSet(
if err != nil {
return err
}
ec.logger.Info("ValSetUpdate", tx.Hash().String())

// TODO put this in a separate function and listen for new EVM blocks instead of just sleeping
for i := 0; i < 60; i++ {
ec.logger.Debug(fmt.Sprintf("waiting for valset %d to be confirmed: %s", nonce, tx.Hash().String()))
lastNonce, err := ec.StateLastValsetNonce(&bind.CallOpts{Context: ctx})
if err != nil {
return err
}
if lastNonce == nonce {
ec.logger.Info(fmt.Sprintf("relayed valset %d: %s", nonce, tx.Hash().String()))
return nil
}
time.Sleep(10 * time.Second)
}

ec.logger.Error(fmt.Sprintf("failed valset %d: %s", nonce, tx.Hash().String()))
return nil
}

Expand Down Expand Up @@ -118,14 +136,45 @@ func (ec *evmClient) SubmitDataRootTupleRoot(
if err != nil {
return err
}
ec.logger.Info("DataRootTupleRootUpdated", tx.Hash().String())

// TODO put this in a separate function and listen for new EVM blocks instead of just sleeping
for i := 0; i < 60; i++ {
ec.logger.Debug(fmt.Sprintf(
"waiting for data commitment %d-%d to be confirmed: %s",
lastDataCommitmentNonce,
lastDataCommitmentNonce-types.DataCommitmentWindow,
tx.Hash().String(),
))
lastNonce, err := ec.StateLastDataRootTupleRootNonce(&bind.CallOpts{Context: ctx})
if err != nil {
return err
}
if lastNonce == lastDataCommitmentNonce {
ec.logger.Info(fmt.Sprintf(
"relayed data commitment %d-%d: %s",
lastDataCommitmentNonce,
lastDataCommitmentNonce-types.DataCommitmentWindow,
tx.Hash().String(),
))
return nil
}
time.Sleep(10 * time.Second)
}
ec.logger.Error(
fmt.Sprintf(
"failed to relay data commitment %d-%d: %s",
lastDataCommitmentNonce,
lastDataCommitmentNonce-types.DataCommitmentWindow,
tx.Hash().String(),
),
)
return nil
}

func (ec *evmClient) NewTransactOpts(ctx context.Context, gasLim uint64) (*bind.TransactOpts, error) {
builder := newTransactOptsBuilder(ec.privateKey)

ethClient, err := ethclient.Dial(ec.evmRpc)
ethClient, err := ethclient.Dial(ec.evmRPC)
if err != nil {
return nil, err
}
Expand Down
2 changes: 1 addition & 1 deletion x/qgb/orchestrator/relayer_client.go
Original file line number Diff line number Diff line change
Expand Up @@ -86,7 +86,7 @@ func (oc *relayerClient) SubscribeValset(ctx context.Context) (<-chan types.Vals
continue
}
valsetsChan <- *newVs
// Give some time for newVs to be commited before we continue
// Give some time for newVs to be committed before we continue
// This will change with the worker pool design pattern we will adopt
time.Sleep(10 * time.Second)
}
Expand Down

0 comments on commit 78a2a44

Please sign in to comment.