Skip to content

Commit

Permalink
Squashed commit of the following:
Browse files Browse the repository at this point in the history
commit 6695f82
Merge: e07e80c a582e6f
Author: Kero <[email protected]>
Date:   Wed Apr 19 14:25:18 2023 +0800

    Merge pull request #17 from node-real/gastrack

    average base fee

commit e07e80c
Merge: 250fbcb 372ec73
Author: Kero <[email protected]>
Date:   Mon Apr 17 18:29:41 2023 +0800

    Merge pull request #14 from keroro520/docker-build-push-workflow

    feat(.github): add docker-build-push.yml

commit 372ec73
Author: keroro <[email protected]>
Date:   Tue Apr 11 10:22:14 2023 +0800

    feat(.github): add docker-build-push.yml

commit 250fbcb
Merge: f7e1641 8fa4ea6
Author: Kero <[email protected]>
Date:   Thu Apr 13 15:49:56 2023 +0800

    Merge pull request #11 from node-real/update_to_for_bsc_0.5

    update to for_bsc 0.5

commit 8fa4ea6
Author: s7v7nislands <[email protected]>
Date:   Thu Apr 13 13:22:43 2023 +0800

    update to for_bsc 0.5

commit a582e6f
Author: s7v7nislands <[email protected]>
Date:   Wed Apr 12 18:24:56 2023 +0800

    filter system trxs which gas price is zero

commit f7e1641
Merge: 0188575 25954a2
Author: Kero <[email protected]>
Date:   Wed Apr 12 15:29:02 2023 +0800

    Merge pull request #9 from keroro520/cherry-pick-ci-with-tag

    Cherry pick ci with tag

commit 25954a2
Author: keroro <[email protected]>
Date:   Tue Apr 11 21:15:56 2023 +0800

    fix(.github): change create trigger to push trigger

commit 4173294
Author: ArthurMa <[email protected]>
Date:   Tue Apr 11 19:30:23 2023 +0800

    Update ci-with-tag.yml

commit a7672a5
Author: ArthurMa <[email protected]>
Date:   Tue Apr 11 18:44:26 2023 +0800

    Update ci-with-tag.yml

commit 071c9d8
Author: ArthurMa <[email protected]>
Date:   Tue Apr 11 17:51:44 2023 +0800

    Update ci-with-tag.yml

commit 1d83273
Author: ArthurMa <[email protected]>
Date:   Tue Apr 11 17:44:58 2023 +0800

    Update ci-with-tag.yml

commit 023aa14
Author: ArthurMa <[email protected]>
Date:   Tue Apr 11 17:12:30 2023 +0800

    Update ci-with-tag.yml

commit 40a7234
Author: ArthurMa <[email protected]>
Date:   Tue Apr 11 17:10:56 2023 +0800

    Update and rename ci-with-pr.yml to ci-with-tag.yml

commit 2f7128c
Author: arthurma <[email protected]>
Date:   Tue Apr 11 14:24:56 2023 +0800

    [beta] new a CI flow to export image to nr ecr

commit 307353a
Author: s7v7nislands <[email protected]>
Date:   Mon Apr 10 16:16:52 2023 +0800

    add avarage gasprice to l1 block info

commit 0188575
Merge: 9b95617 2bf1e92
Author: s7v7nislands <[email protected]>
Date:   Thu Apr 6 17:59:17 2023 +0800

    Merge pull request #4 from node-real/fix_gasprice

    fix gasprice

commit 2bf1e92
Author: s7v7nislands <[email protected]>
Date:   Thu Apr 6 16:47:03 2023 +0800

    fix gasprice

commit 9b95617
Merge: fbba7ba d75fb80
Author: Kero <[email protected]>
Date:   Tue Mar 28 16:53:01 2023 +0800

    Merge pull request #2 from node-real/fix_basefee

    fix basefee

commit d75fb80
Author: s7v7nislands <[email protected]>
Date:   Tue Mar 28 16:51:12 2023 +0800

    fix basefee

commit fbba7ba
Merge: 7bdcb0f 22779e4
Author: s7v7nislands <[email protected]>
Date:   Mon Mar 27 16:19:31 2023 +0800

    Merge pull request #1 from node-real/fix_bsc

    fix optimims port to bsc

commit 22779e4
Author: s7v7nislands <[email protected]>
Date:   Sun Mar 26 21:44:48 2023 +0800

    fix optimims port to bsc
  • Loading branch information
s7v7nislands committed Apr 24, 2023
1 parent 1afd173 commit 8397563
Show file tree
Hide file tree
Showing 15 changed files with 266 additions and 28 deletions.
77 changes: 77 additions & 0 deletions .github/workflows/ci-with-tag.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,77 @@
name: CI-trigger-by-tag

on:
push:
tags:
- '*'
env:
REGION: us-east-1
ECR_REGISTRY_ID: 553885929720

jobs:
ci-lint:
runs-on: [self-hosted,qa-infra-k8s]
steps:
- uses: actions/checkout@v3
with:
token: ${{ secrets.GITHUB_TOKEN }}
- name: static check
id: static-check
# TODO: developers need to add static check scripts
run: |
echo "static check"
ci-tests:
runs-on: [self-hosted,qa-infra-k8s]
steps:
- uses: actions/checkout@v3
with:
token: ${{ secrets.GITHUB_TOKEN }}
- name: unit tests
id: unit-tests
# TODO: developers need to add unit test scripts
run: |
echo "unit tests"
ci-build:
runs-on: [self-hosted,qa-infra-k8s]
needs: [ci-lint, ci-tests]
steps:
- uses: actions/checkout@v3
with:
token: ${{ secrets.GITHUB_TOKEN }}
- name: Configure AWS credentials
uses: aws-actions/configure-aws-credentials@v2 # More information on this action can be found below in the 'AWS Credentials' section
with:
role-to-assume: arn:aws:iam::553885929720:role/tf_nodereal_prod_ecr_cicd_deployment_assume_role
aws-region: us-east-1
role-duration-seconds: 1800
- name: Build, tag, and push image to Amazon ECR
env:
OP_NODE_IMAGE_REPO: op-node
OP_BATCHER_IMAGE_REPO: op-batcher
OP_PROPOSER_IMAGE_REPO: op-proposer
run: |
OP_NODE_IMAGE_NAME="${ECR_REGISTRY_ID}.dkr.ecr.${REGION}.amazonaws.com/$OP_NODE_IMAGE_REPO:${GITHUB_REF#refs/*/}"
OP_BATCHER_IMAGE_NAME="${ECR_REGISTRY_ID}.dkr.ecr.${REGION}.amazonaws.com/$OP_BATCHER_IMAGE_REPO:${GITHUB_REF#refs/*/}"
OP_PROPOSER_IMAGE_NAME="${ECR_REGISTRY_ID}.dkr.ecr.${REGION}.amazonaws.com/$OP_PROPOSER_IMAGE_REPO:${GITHUB_REF#refs/*/}"
aws ecr get-login-password --region ${REGION} | docker login --username AWS --password-stdin ${ECR_REGISTRY_ID}.dkr.ecr.${REGION}.amazonaws.com
aws ecr --region $REGION describe-repositories --registry-id $ECR_REGISTRY_ID --repository-names $OP_NODE_IMAGE_REPO || aws ecr --region $REGION create-repository --registry-id $ECR_REGISTRY_ID --repository-name $OP_NODE_IMAGE_REPO
aws ecr --region $REGION set-repository-policy --registry-id $ECR_REGISTRY_ID --repository-name $OP_NODE_IMAGE_REPO --policy-text file:///home/runner/repo-access-permissions.json
aws ecr --region $REGION describe-repositories --registry-id $ECR_REGISTRY_ID --repository-names $OP_BATCHER_IMAGE_REPO || aws ecr --region $REGION create-repository --registry-id $ECR_REGISTRY_ID --repository-name $OP_BATCHER_IMAGE_REPO
aws ecr --region $REGION set-repository-policy --registry-id $ECR_REGISTRY_ID --repository-name $OP_BATCHER_IMAGE_REPO --policy-text file:///home/runner/repo-access-permissions.json
aws ecr --region $REGION describe-repositories --registry-id $ECR_REGISTRY_ID --repository-names $OP_PROPOSER_IMAGE_REPO || aws ecr --region $REGION create-repository --registry-id $ECR_REGISTRY_ID --repository-name $OP_PROPOSER_IMAGE_REPO
aws ecr --region $REGION set-repository-policy --registry-id $ECR_REGISTRY_ID --repository-name $OP_PROPOSER_IMAGE_REPO --policy-text file:///home/runner/repo-access-permissions.json
docker build --build-arg GIT_TOKEN=${{ secrets.GO_MODULES_TOKEN }} -t $OP_NODE_IMAGE_NAME -f op-node/Dockerfile .
docker push $OP_NODE_IMAGE_NAME
docker build --build-arg GIT_TOKEN=${{ secrets.GO_MODULES_TOKEN }} -t $OP_BATCHER_IMAGE_NAME -f op-batcher/Dockerfile .
docker push $OP_BATCHER_IMAGE_NAME
docker build --build-arg GIT_TOKEN=${{ secrets.GO_MODULES_TOKEN }} -t $OP_PROPOSER_IMAGE_NAME -f op-proposer/Dockerfile .
docker push $OP_PROPOSER_IMAGE_NAME
48 changes: 48 additions & 0 deletions .github/workflows/docker-build-push.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
name: Build and Push Docker Images

on:
push:
tags:
- '*'

jobs:
build-and-push:
runs-on: ubuntu-latest

steps:
- name: Checkout repository
uses: actions/checkout@v3

- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v2

- name: Login to GitHub Container Registry
uses: docker/login-action@v2
with:
registry: ghcr.io
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}

- name: Build and push op-node image
uses: docker/build-push-action@v4
with:
context: .
file: ./op-node/Dockerfile
push: true
tags: ghcr.io/node-real/optimism/op-node:${{ github.ref_name }}

- name: Build and push op-batcher image
uses: docker/build-push-action@v4
with:
context: .
file: ./op-batcher/Dockerfile
push: true
tags: ghcr.io/node-real/optimism/op-batcher:${{ github.ref_name }}

- name: Build and push op-proposer image
uses: docker/build-push-action@v4
with:
context: .
file: ./op-proposer/Dockerfile
push: true
tags: ghcr.io/node-real/optimism/op-proposer:${{ github.ref_name }}
15 changes: 11 additions & 4 deletions op-chain-ops/genesis/config.go
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,8 @@ import (
"github.com/ethereum-optimism/optimism/op-chain-ops/state"
"github.com/ethereum-optimism/optimism/op-node/eth"
"github.com/ethereum-optimism/optimism/op-node/rollup"
"github.com/ethereum-optimism/optimism/op-node/rollup/derive"
opservice "github.com/ethereum-optimism/optimism/op-service"
)

var (
Expand Down Expand Up @@ -430,8 +432,10 @@ func NewL2StorageConfig(config *DeployConfig, block *types.Block) (state.Storage
if block.Number() == nil {
return storage, errors.New("block number not set")
}
if block.BaseFee() == nil {
return storage, errors.New("block base fee not set")
if !opservice.ForBSC {
if block.BaseFee() == nil {
return storage, errors.New("block base fee not set")
}
}

storage["L2ToL1MessagePasser"] = state.StorageValues{
Expand All @@ -444,15 +448,18 @@ func NewL2StorageConfig(config *DeployConfig, block *types.Block) (state.Storage
"msgNonce": 0,
}
storage["L1Block"] = state.StorageValues{
"number": block.Number(),
"timestamp": block.Time(),
"number": block.Number(),
"timestamp": block.Time(),
"basefee": block.BaseFee(),
"hash": block.Hash(),
"sequenceNumber": 0,
"batcherHash": config.BatchSenderAddress.Hash(),
"l1FeeOverhead": config.GasPriceOracleOverhead,
"l1FeeScalar": config.GasPriceOracleScalar,
}
if opservice.ForBSC {
storage["L1Block"]["basefee"] = derive.BSCFakeBaseFee
}
storage["LegacyERC20ETH"] = state.StorageValues{
"_name": "Ether",
"_symbol": "ETH",
Expand Down
2 changes: 2 additions & 0 deletions op-e2e/actions/action.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ import (
"os"

"github.com/ethereum-optimism/optimism/op-e2e/e2eutils"
opservice "github.com/ethereum-optimism/optimism/op-service"
)

var enableParallelTesting bool = true
Expand All @@ -13,6 +14,7 @@ func init() {
if os.Getenv("OP_E2E_DISABLE_PARALLEL") == "true" {
enableParallelTesting = false
}
opservice.ForBSC = false
}

func parallel(t e2eutils.TestingBase) {
Expand Down
2 changes: 2 additions & 0 deletions op-e2e/system_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,7 @@ import (
"github.com/ethereum-optimism/optimism/op-node/sources"
"github.com/ethereum-optimism/optimism/op-node/testlog"
"github.com/ethereum-optimism/optimism/op-node/withdrawals"
opservice "github.com/ethereum-optimism/optimism/op-service"
oppprof "github.com/ethereum-optimism/optimism/op-service/pprof"
)

Expand All @@ -55,6 +56,7 @@ func init() {
if os.Getenv("OP_E2E_DISABLE_PARALLEL") == "true" {
enableParallelTesting = false
}
opservice.ForBSC = false
}

func parallel(t *testing.T) {
Expand Down
24 changes: 23 additions & 1 deletion op-node/eth/heads.go
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,8 @@ import (
"github.com/ethereum/go-ethereum/core/types"
"github.com/ethereum/go-ethereum/event"
"github.com/ethereum/go-ethereum/log"

opservice "github.com/ethereum-optimism/optimism/op-service"
)

// HeadSignalFn is used as callback function to accept head-signals
Expand Down Expand Up @@ -48,8 +50,11 @@ func WatchHeadChanges(ctx context.Context, src NewHeadSource, fn HeadSignalFn) (

type L1BlockRefsSource interface {
L1BlockRefByLabel(ctx context.Context, label BlockLabel) (L1BlockRef, error)
L1BlockRefByNumber(ctx context.Context, num uint64) (L1BlockRef, error)
}

var finalizedBlockNumberForBSC uint64 = 15

// PollBlockChanges opens a polling loop to fetch the L1 block reference with the given label,
// on provided interval and with request timeout. Results are returned with provided callback fn,
// which may block to pause/back-pressure polling.
Expand All @@ -72,7 +77,24 @@ func PollBlockChanges(ctx context.Context, log log.Logger, src L1BlockRefsSource
if err != nil {
log.Warn("failed to poll L1 block", "label", label, "err", err)
} else {
fn(ctx, ref)
if opservice.ForBSC {
reqCtx, reqCancel := context.WithTimeout(ctx, timeout)
number := ref.Number
if number < finalizedBlockNumberForBSC {
number = 0
} else {
number -= finalizedBlockNumberForBSC
}
ref, err := src.L1BlockRefByNumber(reqCtx, number)
reqCancel()
if err != nil {
log.Warn("failed to poll L1 block", "number", number, "err", err)
} else {
fn(ctx, ref)
}
} else {
fn(ctx, ref)
}
}
case <-ctx.Done():
return ctx.Err()
Expand Down
4 changes: 2 additions & 2 deletions op-node/node/node.go
Original file line number Diff line number Diff line change
Expand Up @@ -148,9 +148,9 @@ func (n *OpNode) initL1(ctx context.Context, cfg *Config) error {

// Poll for the safe L1 block and finalized block,
// which only change once per epoch at most and may be delayed.
n.l1SafeSub = eth.PollBlockChanges(n.resourcesCtx, n.log, n.l1Source, n.OnNewL1Safe, eth.Safe,
n.l1SafeSub = eth.PollBlockChanges(n.resourcesCtx, n.log, n.l1Source, n.OnNewL1Safe, eth.Unsafe,
cfg.L1EpochPollInterval, time.Second*10)
n.l1FinalizedSub = eth.PollBlockChanges(n.resourcesCtx, n.log, n.l1Source, n.OnNewL1Finalized, eth.Finalized,
n.l1FinalizedSub = eth.PollBlockChanges(n.resourcesCtx, n.log, n.l1Source, n.OnNewL1Finalized, eth.Unsafe,
cfg.L1EpochPollInterval, time.Second*10)
return nil
}
Expand Down
58 changes: 57 additions & 1 deletion op-node/rollup/derive/attributes.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ package derive
import (
"context"
"fmt"
"math/big"

"github.com/ethereum/go-ethereum/common"
"github.com/ethereum/go-ethereum/common/hexutil"
Expand All @@ -11,12 +12,14 @@ import (
"github.com/ethereum-optimism/optimism/op-bindings/predeploys"
"github.com/ethereum-optimism/optimism/op-node/eth"
"github.com/ethereum-optimism/optimism/op-node/rollup"
opservice "github.com/ethereum-optimism/optimism/op-service"
)

// L1ReceiptsFetcher fetches L1 header info and receipts for the payload attributes derivation (the info tx and deposits)
type L1ReceiptsFetcher interface {
InfoByHash(ctx context.Context, hash common.Hash) (eth.BlockInfo, error)
FetchReceipts(ctx context.Context, blockHash common.Hash) (eth.BlockInfo, types.Receipts, error)
InfoAndTxsByHash(ctx context.Context, hash common.Hash) (eth.BlockInfo, types.Transactions, error)
}

type SystemConfigL2Fetcher interface {
Expand Down Expand Up @@ -53,6 +56,14 @@ func (ba *FetchingAttributesBuilder) PreparePayloadAttributes(ctx context.Contex
return nil, NewTemporaryError(fmt.Errorf("failed to retrieve L2 parent block: %w", err))
}

var gasPrice *big.Int
if opservice.ForBSC {
gasPrice, err = ba.prepareAverageGasPrice(ctx, epoch)
if err != nil {
return nil, NewTemporaryError(fmt.Errorf("failed to prepare average gas price: %w", err))
}
}

// If the L1 origin changed this block, then we are in the first block of the epoch. In this
// case we need to fetch all transaction receipts from the L1 origin block so we can scan for
// user deposits.
Expand All @@ -76,7 +87,9 @@ func (ba *FetchingAttributesBuilder) PreparePayloadAttributes(ctx context.Contex
if err := UpdateSystemConfigWithL1Receipts(&sysConfig, receipts, ba.cfg); err != nil {
return nil, NewCriticalError(fmt.Errorf("failed to apply derived L1 sysCfg updates: %w", err))
}

if opservice.ForBSC {
info = newGasPriceWrapper(info, gasPrice)
}
l1Info = info
depositTxs = deposits
seqNumber = 0
Expand All @@ -88,6 +101,9 @@ func (ba *FetchingAttributesBuilder) PreparePayloadAttributes(ctx context.Contex
if err != nil {
return nil, NewTemporaryError(fmt.Errorf("failed to fetch L1 block info: %w", err))
}
if opservice.ForBSC {
info = newGasPriceWrapper(info, gasPrice)
}
l1Info = info
depositTxs = nil
seqNumber = l2Parent.SequenceNumber + 1
Expand Down Expand Up @@ -118,3 +134,43 @@ func (ba *FetchingAttributesBuilder) PreparePayloadAttributes(ctx context.Contex
GasLimit: (*eth.Uint64Quantity)(&sysConfig.GasLimit),
}, nil
}

var bscDefaultGasPrice = big.NewInt(5000000000)

func (ba *FetchingAttributesBuilder) prepareAverageGasPrice(ctx context.Context, epoch eth.BlockID) (*big.Int, error) {
_, txs, err := ba.l1.InfoAndTxsByHash(ctx, epoch.Hash)
if err != nil {
return nil, err
}
count := 0
var sum big.Int
for _, tx := range txs {
if tx.GasPrice().Cmp(common.Big0) <= 0 {
continue
}
sum.Add(&sum, tx.GasPrice())
count += 1
}
if count == 0 {
return bscDefaultGasPrice, nil
}
return sum.Div(&sum, big.NewInt(int64(count))), nil
}

type gasPriceWrapper struct {
eth.BlockInfo
gasprice *big.Int
}

var _ (eth.BlockInfo) = (*gasPriceWrapper)(nil)

func newGasPriceWrapper(info eth.BlockInfo, gasprice *big.Int) *gasPriceWrapper {
return &gasPriceWrapper{
BlockInfo: info,
gasprice: gasprice,
}
}

func (w *gasPriceWrapper) BaseFee() *big.Int {
return w.gasprice
}
2 changes: 2 additions & 0 deletions op-node/rollup/derive/attributes_queue_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -16,12 +16,14 @@ import (
"github.com/ethereum-optimism/optimism/op-node/rollup"
"github.com/ethereum-optimism/optimism/op-node/testlog"
"github.com/ethereum-optimism/optimism/op-node/testutils"
observice "github.com/ethereum-optimism/optimism/op-service"
)

// TestAttributesQueue checks that it properly uses the PreparePayloadAttributes function
// (which is well tested) and that it properly sets NoTxPool and adds in the candidate
// transactions.
func TestAttributesQueue(t *testing.T) {
observice.ForBSC = false
// test config, only init the necessary fields
cfg := &rollup.Config{
BlockTime: 2,
Expand Down
Loading

0 comments on commit 8397563

Please sign in to comment.