Skip to content

Commit

Permalink
Merge semita codebase into develop (#1)
Browse files Browse the repository at this point in the history
* Squashed commit of the following:

commit 6695f82783417b9f355da32ca0cc0c6068091d36
Merge: e07e80ca2 a582e6f9a
Author: Kero <[email protected]>
Date:   Wed Apr 19 14:25:18 2023 +0800

    Merge pull request bnb-chain#17 from node-real/gastrack

    average base fee

commit e07e80ca2d7432974d2217725f77876fb5b5fdd7
Merge: 250fbcb2a 372ec73b2
Author: Kero <[email protected]>
Date:   Mon Apr 17 18:29:41 2023 +0800

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

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

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

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

commit 250fbcb2a22507f973dececb33fe49fe2469b87c
Merge: f7e1641b1 8fa4ea66c
Author: Kero <[email protected]>
Date:   Thu Apr 13 15:49:56 2023 +0800

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

    update to for_bsc 0.5

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

    update to for_bsc 0.5

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

    filter system trxs which gas price is zero

commit f7e1641b12a598c1959e5d7f45c9b2e28ecf7307
Merge: 018857554 25954a2f4
Author: Kero <[email protected]>
Date:   Wed Apr 12 15:29:02 2023 +0800

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

    Cherry pick ci with tag

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

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

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

    Update ci-with-tag.yml

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

    Update ci-with-tag.yml

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

    Update ci-with-tag.yml

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

    Update ci-with-tag.yml

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

    Update ci-with-tag.yml

commit 40a7234bb94ad561310e51b2c1ccbd950ac98cd9
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 2f7128c47a95ec55a93197af1b8d2b9ecd4c573d
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 307353a3b952c25082bb347372b18a3e859e914f
Author: s7v7nislands <[email protected]>
Date:   Mon Apr 10 16:16:52 2023 +0800

    add avarage gasprice to l1 block info

commit 018857554fe497949d40552cd08204a0370a83b6
Merge: 9b95617e0 2bf1e92ad
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 2bf1e92adad9462d2659cbccee778d5fd62a1ada
Author: s7v7nislands <[email protected]>
Date:   Thu Apr 6 16:47:03 2023 +0800

    fix gasprice

commit 9b95617e0cb7c55e8efe55767a79b5b377731fa9
Merge: fbba7ba49 d75fb80c5
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 d75fb80c5db39cbb10c222dd55e02fb6c181783b
Author: s7v7nislands <[email protected]>
Date:   Tue Mar 28 16:51:12 2023 +0800

    fix basefee

commit fbba7ba495636eac7d92ded3db917fe5b3ea043c
Merge: 7bdcb0f 22779e4b3
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 22779e4b340430675e00dbca2cfa13744e9df749
Author: s7v7nislands <[email protected]>
Date:   Sun Mar 26 21:44:48 2023 +0800

    fix optimims port to bsc

* fix trx manager

---------

Co-authored-by: s7v7nislands <[email protected]>
  • Loading branch information
nolanxyg and s7v7nislands authored Apr 26, 2023
1 parent 1afd173 commit 3dd2986
Show file tree
Hide file tree
Showing 21 changed files with 356 additions and 67 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 }}
2 changes: 1 addition & 1 deletion op-bindings/bindings/erc20.go

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion op-bindings/bindings/optimismportal.go

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion op-bindings/bindings/optimismportal_more.go

Large diffs are not rendered by default.

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 3dd2986

Please sign in to comment.