Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
N
nebula
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
exchain
nebula
Commits
3210a8c6
Unverified
Commit
3210a8c6
authored
Sep 26, 2024
by
Disco
Committed by
GitHub
Sep 26, 2024
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
chore: rename isthmus to interop on golang files (#12133)
parent
c65c1f88
Changes
4
Show whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
31 additions
and
31 deletions
+31
-31
attributes_test.go
op-node/rollup/derive/attributes_test.go
+2
-2
fuzz_parsers_test.go
op-node/rollup/derive/fuzz_parsers_test.go
+5
-5
l1_block_info.go
op-node/rollup/derive/l1_block_info.go
+15
-15
l1_block_info_test.go
op-node/rollup/derive/l1_block_info_test.go
+9
-9
No files found.
op-node/rollup/derive/attributes_test.go
View file @
3210a8c6
...
@@ -195,7 +195,7 @@ func TestPreparePayloadAttributes(t *testing.T) {
...
@@ -195,7 +195,7 @@ func TestPreparePayloadAttributes(t *testing.T) {
require
.
Equal
(
t
,
l1InfoTx
,
[]
byte
(
attrs
.
Transactions
[
0
]))
require
.
Equal
(
t
,
l1InfoTx
,
[]
byte
(
attrs
.
Transactions
[
0
]))
require
.
True
(
t
,
attrs
.
NoTxPool
)
require
.
True
(
t
,
attrs
.
NoTxPool
)
})
})
t
.
Run
(
"new origin with deposits on post-I
sthmus
"
,
func
(
t
*
testing
.
T
)
{
t
.
Run
(
"new origin with deposits on post-I
nterop
"
,
func
(
t
*
testing
.
T
)
{
rng
:=
rand
.
New
(
rand
.
NewSource
(
1234
))
rng
:=
rand
.
New
(
rand
.
NewSource
(
1234
))
l1Fetcher
:=
&
testutils
.
MockL1Source
{}
l1Fetcher
:=
&
testutils
.
MockL1Source
{}
defer
l1Fetcher
.
AssertExpectations
(
t
)
defer
l1Fetcher
.
AssertExpectations
(
t
)
...
@@ -247,7 +247,7 @@ func TestPreparePayloadAttributes(t *testing.T) {
...
@@ -247,7 +247,7 @@ func TestPreparePayloadAttributes(t *testing.T) {
require
.
True
(
t
,
attrs
.
NoTxPool
)
require
.
True
(
t
,
attrs
.
NoTxPool
)
})
})
t
.
Run
(
"same origin without deposits on post-I
sthmus
"
,
func
(
t
*
testing
.
T
)
{
t
.
Run
(
"same origin without deposits on post-I
nterop
"
,
func
(
t
*
testing
.
T
)
{
rng
:=
rand
.
New
(
rand
.
NewSource
(
1234
))
rng
:=
rand
.
New
(
rand
.
NewSource
(
1234
))
l1Fetcher
:=
&
testutils
.
MockL1Source
{}
l1Fetcher
:=
&
testutils
.
MockL1Source
{}
defer
l1Fetcher
.
AssertExpectations
(
t
)
defer
l1Fetcher
.
AssertExpectations
(
t
)
...
...
op-node/rollup/derive/fuzz_parsers_test.go
View file @
3210a8c6
...
@@ -93,16 +93,16 @@ func FuzzL1InfoEcotoneRoundTrip(f *testing.F) {
...
@@ -93,16 +93,16 @@ func FuzzL1InfoEcotoneRoundTrip(f *testing.F) {
if
!
cmp
.
Equal
(
in
,
out
,
cmp
.
Comparer
(
testutils
.
BigEqual
))
{
if
!
cmp
.
Equal
(
in
,
out
,
cmp
.
Comparer
(
testutils
.
BigEqual
))
{
t
.
Fatalf
(
"The Ecotone data did not round trip correctly. in: %v. out: %v"
,
in
,
out
)
t
.
Fatalf
(
"The Ecotone data did not round trip correctly. in: %v. out: %v"
,
in
,
out
)
}
}
enc
,
err
=
in
.
marshalBinaryI
sthmus
()
enc
,
err
=
in
.
marshalBinaryI
nterop
()
if
err
!=
nil
{
if
err
!=
nil
{
t
.
Fatalf
(
"Failed to marshal I
sthmus
binary: %v"
,
err
)
t
.
Fatalf
(
"Failed to marshal I
nterop
binary: %v"
,
err
)
}
}
err
=
out
.
unmarshalBinaryI
sthmus
(
enc
)
err
=
out
.
unmarshalBinaryI
nterop
(
enc
)
if
err
!=
nil
{
if
err
!=
nil
{
t
.
Fatalf
(
"Failed to unmarshal I
sthmus
binary: %v"
,
err
)
t
.
Fatalf
(
"Failed to unmarshal I
nterop
binary: %v"
,
err
)
}
}
if
!
cmp
.
Equal
(
in
,
out
,
cmp
.
Comparer
(
testutils
.
BigEqual
))
{
if
!
cmp
.
Equal
(
in
,
out
,
cmp
.
Comparer
(
testutils
.
BigEqual
))
{
t
.
Fatalf
(
"The I
sthmus
data did not round trip correctly. in: %v. out: %v"
,
in
,
out
)
t
.
Fatalf
(
"The I
nterop
data did not round trip correctly. in: %v. out: %v"
,
in
,
out
)
}
}
})
})
...
...
op-node/rollup/derive/l1_block_info.go
View file @
3210a8c6
...
@@ -20,7 +20,7 @@ import (
...
@@ -20,7 +20,7 @@ import (
const
(
const
(
L1InfoFuncBedrockSignature
=
"setL1BlockValues(uint64,uint64,uint256,bytes32,uint64,bytes32,uint256,uint256)"
L1InfoFuncBedrockSignature
=
"setL1BlockValues(uint64,uint64,uint256,bytes32,uint64,bytes32,uint256,uint256)"
L1InfoFuncEcotoneSignature
=
"setL1BlockValuesEcotone()"
L1InfoFuncEcotoneSignature
=
"setL1BlockValuesEcotone()"
L1InfoFuncI
sthmusSignature
=
"setL1BlockValuesIsthmus
()"
L1InfoFuncI
nteropSignature
=
"setL1BlockValuesInterop
()"
DepositsCompleteSignature
=
"depositsComplete()"
DepositsCompleteSignature
=
"depositsComplete()"
L1InfoArguments
=
8
L1InfoArguments
=
8
L1InfoBedrockLen
=
4
+
32
*
L1InfoArguments
L1InfoBedrockLen
=
4
+
32
*
L1InfoArguments
...
@@ -28,8 +28,8 @@ const (
...
@@ -28,8 +28,8 @@ const (
DepositsCompleteLen
=
4
// only the selector
DepositsCompleteLen
=
4
// only the selector
// DepositsCompleteGas allocates 21k gas for intrinsic tx costs, and
// DepositsCompleteGas allocates 21k gas for intrinsic tx costs, and
// an additional 15k to ensure that the DepositsComplete call does not run out of gas.
// an additional 15k to ensure that the DepositsComplete call does not run out of gas.
// GasBenchMark_L1BlockI
sthmus
_DepositsComplete:test_depositsComplete_benchmark() (gas: 7768)
// GasBenchMark_L1BlockI
nterop
_DepositsComplete:test_depositsComplete_benchmark() (gas: 7768)
// GasBenchMark_L1BlockI
sthmus
_DepositsComplete_Warm:test_depositsComplete_benchmark() (gas: 5768)
// GasBenchMark_L1BlockI
nterop
_DepositsComplete_Warm:test_depositsComplete_benchmark() (gas: 5768)
// see `test_depositsComplete_benchmark` at: `/packages/contracts-bedrock/test/BenchmarkTest.t.sol`
// see `test_depositsComplete_benchmark` at: `/packages/contracts-bedrock/test/BenchmarkTest.t.sol`
DepositsCompleteGas
=
uint64
(
21
_000
+
15
_000
)
DepositsCompleteGas
=
uint64
(
21
_000
+
15
_000
)
)
)
...
@@ -37,7 +37,7 @@ const (
...
@@ -37,7 +37,7 @@ const (
var
(
var
(
L1InfoFuncBedrockBytes4
=
crypto
.
Keccak256
([]
byte
(
L1InfoFuncBedrockSignature
))[
:
4
]
L1InfoFuncBedrockBytes4
=
crypto
.
Keccak256
([]
byte
(
L1InfoFuncBedrockSignature
))[
:
4
]
L1InfoFuncEcotoneBytes4
=
crypto
.
Keccak256
([]
byte
(
L1InfoFuncEcotoneSignature
))[
:
4
]
L1InfoFuncEcotoneBytes4
=
crypto
.
Keccak256
([]
byte
(
L1InfoFuncEcotoneSignature
))[
:
4
]
L1InfoFuncI
sthmusBytes4
=
crypto
.
Keccak256
([]
byte
(
L1InfoFuncIsthmus
Signature
))[
:
4
]
L1InfoFuncI
nteropBytes4
=
crypto
.
Keccak256
([]
byte
(
L1InfoFuncInterop
Signature
))[
:
4
]
DepositsCompleteBytes4
=
crypto
.
Keccak256
([]
byte
(
DepositsCompleteSignature
))[
:
4
]
DepositsCompleteBytes4
=
crypto
.
Keccak256
([]
byte
(
DepositsCompleteSignature
))[
:
4
]
L1InfoDepositerAddress
=
common
.
HexToAddress
(
"0xdeaddeaddeaddeaddeaddeaddeaddeaddead0001"
)
L1InfoDepositerAddress
=
common
.
HexToAddress
(
"0xdeaddeaddeaddeaddeaddeaddeaddeaddead0001"
)
L1BlockAddress
=
predeploys
.
L1BlockAddr
L1BlockAddress
=
predeploys
.
L1BlockAddr
...
@@ -155,7 +155,7 @@ func (info *L1BlockInfo) unmarshalBinaryBedrock(data []byte) error {
...
@@ -155,7 +155,7 @@ func (info *L1BlockInfo) unmarshalBinaryBedrock(data []byte) error {
return
nil
return
nil
}
}
// I
sthmus
& Ecotone Binary Format
// I
nterop
& Ecotone Binary Format
// +---------+--------------------------+
// +---------+--------------------------+
// | Bytes | Field |
// | Bytes | Field |
// +---------+--------------------------+
// +---------+--------------------------+
...
@@ -179,16 +179,16 @@ func (info *L1BlockInfo) marshalBinaryEcotone() ([]byte, error) {
...
@@ -179,16 +179,16 @@ func (info *L1BlockInfo) marshalBinaryEcotone() ([]byte, error) {
return
out
,
nil
return
out
,
nil
}
}
func
(
info
*
L1BlockInfo
)
marshalBinaryI
sthmus
()
([]
byte
,
error
)
{
func
(
info
*
L1BlockInfo
)
marshalBinaryI
nterop
()
([]
byte
,
error
)
{
out
,
err
:=
marshalBinaryWithSignature
(
info
,
L1InfoFuncI
sthmus
Bytes4
)
out
,
err
:=
marshalBinaryWithSignature
(
info
,
L1InfoFuncI
nterop
Bytes4
)
if
err
!=
nil
{
if
err
!=
nil
{
return
nil
,
fmt
.
Errorf
(
"failed to marshal I
sthmus
l1 block info: %w"
,
err
)
return
nil
,
fmt
.
Errorf
(
"failed to marshal I
nterop
l1 block info: %w"
,
err
)
}
}
return
out
,
nil
return
out
,
nil
}
}
func
marshalBinaryWithSignature
(
info
*
L1BlockInfo
,
signature
[]
byte
)
([]
byte
,
error
)
{
func
marshalBinaryWithSignature
(
info
*
L1BlockInfo
,
signature
[]
byte
)
([]
byte
,
error
)
{
w
:=
bytes
.
NewBuffer
(
make
([]
byte
,
0
,
L1InfoEcotoneLen
))
// Ecotone and I
sthmus
have the same length
w
:=
bytes
.
NewBuffer
(
make
([]
byte
,
0
,
L1InfoEcotoneLen
))
// Ecotone and I
nterop
have the same length
if
err
:=
solabi
.
WriteSignature
(
w
,
signature
);
err
!=
nil
{
if
err
:=
solabi
.
WriteSignature
(
w
,
signature
);
err
!=
nil
{
return
nil
,
err
return
nil
,
err
}
}
...
@@ -231,8 +231,8 @@ func (info *L1BlockInfo) unmarshalBinaryEcotone(data []byte) error {
...
@@ -231,8 +231,8 @@ func (info *L1BlockInfo) unmarshalBinaryEcotone(data []byte) error {
return
unmarshalBinaryWithSignatureAndData
(
info
,
L1InfoFuncEcotoneBytes4
,
data
)
return
unmarshalBinaryWithSignatureAndData
(
info
,
L1InfoFuncEcotoneBytes4
,
data
)
}
}
func
(
info
*
L1BlockInfo
)
unmarshalBinaryI
sthmus
(
data
[]
byte
)
error
{
func
(
info
*
L1BlockInfo
)
unmarshalBinaryI
nterop
(
data
[]
byte
)
error
{
return
unmarshalBinaryWithSignatureAndData
(
info
,
L1InfoFuncI
sthmus
Bytes4
,
data
)
return
unmarshalBinaryWithSignatureAndData
(
info
,
L1InfoFuncI
nterop
Bytes4
,
data
)
}
}
func
unmarshalBinaryWithSignatureAndData
(
info
*
L1BlockInfo
,
signature
[]
byte
,
data
[]
byte
)
error
{
func
unmarshalBinaryWithSignatureAndData
(
info
*
L1BlockInfo
,
signature
[]
byte
,
data
[]
byte
)
error
{
...
@@ -285,7 +285,7 @@ func isEcotoneButNotFirstBlock(rollupCfg *rollup.Config, l2Timestamp uint64) boo
...
@@ -285,7 +285,7 @@ func isEcotoneButNotFirstBlock(rollupCfg *rollup.Config, l2Timestamp uint64) boo
return
rollupCfg
.
IsEcotone
(
l2Timestamp
)
&&
!
rollupCfg
.
IsEcotoneActivationBlock
(
l2Timestamp
)
return
rollupCfg
.
IsEcotone
(
l2Timestamp
)
&&
!
rollupCfg
.
IsEcotoneActivationBlock
(
l2Timestamp
)
}
}
// isInteropButNotFirstBlock returns whether the specified block is subject to the I
sthmus
upgrade,
// isInteropButNotFirstBlock returns whether the specified block is subject to the I
nterop
upgrade,
// but is not the activation block itself.
// but is not the activation block itself.
func
isInteropButNotFirstBlock
(
rollupCfg
*
rollup
.
Config
,
l2Timestamp
uint64
)
bool
{
func
isInteropButNotFirstBlock
(
rollupCfg
*
rollup
.
Config
,
l2Timestamp
uint64
)
bool
{
// Since we use the pre-interop L1 tx one last time during the upgrade block,
// Since we use the pre-interop L1 tx one last time during the upgrade block,
...
@@ -300,7 +300,7 @@ func L1BlockInfoFromBytes(rollupCfg *rollup.Config, l2BlockTime uint64, data []b
...
@@ -300,7 +300,7 @@ func L1BlockInfoFromBytes(rollupCfg *rollup.Config, l2BlockTime uint64, data []b
var
info
L1BlockInfo
var
info
L1BlockInfo
// Important, this should be ordered from most recent to oldest
// Important, this should be ordered from most recent to oldest
if
isInteropButNotFirstBlock
(
rollupCfg
,
l2BlockTime
)
{
if
isInteropButNotFirstBlock
(
rollupCfg
,
l2BlockTime
)
{
return
&
info
,
info
.
unmarshalBinaryI
sthmus
(
data
)
return
&
info
,
info
.
unmarshalBinaryI
nterop
(
data
)
}
}
if
isEcotoneButNotFirstBlock
(
rollupCfg
,
l2BlockTime
)
{
if
isEcotoneButNotFirstBlock
(
rollupCfg
,
l2BlockTime
)
{
return
&
info
,
info
.
unmarshalBinaryEcotone
(
data
)
return
&
info
,
info
.
unmarshalBinaryEcotone
(
data
)
...
@@ -333,9 +333,9 @@ func L1InfoDeposit(rollupCfg *rollup.Config, sysCfg eth.SystemConfig, seqNumber
...
@@ -333,9 +333,9 @@ func L1InfoDeposit(rollupCfg *rollup.Config, sysCfg eth.SystemConfig, seqNumber
l1BlockInfo
.
BlobBaseFeeScalar
=
scalars
.
BlobBaseFeeScalar
l1BlockInfo
.
BlobBaseFeeScalar
=
scalars
.
BlobBaseFeeScalar
l1BlockInfo
.
BaseFeeScalar
=
scalars
.
BaseFeeScalar
l1BlockInfo
.
BaseFeeScalar
=
scalars
.
BaseFeeScalar
if
isInteropButNotFirstBlock
(
rollupCfg
,
l2Timestamp
)
{
if
isInteropButNotFirstBlock
(
rollupCfg
,
l2Timestamp
)
{
out
,
err
:=
l1BlockInfo
.
marshalBinaryI
sthmus
()
out
,
err
:=
l1BlockInfo
.
marshalBinaryI
nterop
()
if
err
!=
nil
{
if
err
!=
nil
{
return
nil
,
fmt
.
Errorf
(
"failed to marshal I
sthmus
l1 block info: %w"
,
err
)
return
nil
,
fmt
.
Errorf
(
"failed to marshal I
nterop
l1 block info: %w"
,
err
)
}
}
data
=
out
data
=
out
}
else
{
}
else
{
...
...
op-node/rollup/derive/l1_block_info_test.go
View file @
3210a8c6
...
@@ -154,7 +154,7 @@ func TestParseL1InfoDepositTxData(t *testing.T) {
...
@@ -154,7 +154,7 @@ func TestParseL1InfoDepositTxData(t *testing.T) {
require
.
Equal
(
t
,
depTx
.
Gas
,
uint64
(
RegolithSystemTxGas
))
require
.
Equal
(
t
,
depTx
.
Gas
,
uint64
(
RegolithSystemTxGas
))
require
.
Equal
(
t
,
L1InfoEcotoneLen
,
len
(
depTx
.
Data
))
require
.
Equal
(
t
,
L1InfoEcotoneLen
,
len
(
depTx
.
Data
))
})
})
t
.
Run
(
"i
sthmus
"
,
func
(
t
*
testing
.
T
)
{
t
.
Run
(
"i
nterop
"
,
func
(
t
*
testing
.
T
)
{
rng
:=
rand
.
New
(
rand
.
NewSource
(
1234
))
rng
:=
rand
.
New
(
rand
.
NewSource
(
1234
))
info
:=
testutils
.
MakeBlockInfo
(
nil
)(
rng
)
info
:=
testutils
.
MakeBlockInfo
(
nil
)(
rng
)
rollupCfg
:=
rollup
.
Config
{
BlockTime
:
2
,
Genesis
:
rollup
.
Genesis
{
L2Time
:
1000
}}
rollupCfg
:=
rollup
.
Config
{
BlockTime
:
2
,
Genesis
:
rollup
.
Genesis
{
L2Time
:
1000
}}
...
@@ -165,25 +165,25 @@ func TestParseL1InfoDepositTxData(t *testing.T) {
...
@@ -165,25 +165,25 @@ func TestParseL1InfoDepositTxData(t *testing.T) {
require
.
NoError
(
t
,
err
)
require
.
NoError
(
t
,
err
)
require
.
False
(
t
,
depTx
.
IsSystemTransaction
)
require
.
False
(
t
,
depTx
.
IsSystemTransaction
)
require
.
Equal
(
t
,
depTx
.
Gas
,
uint64
(
RegolithSystemTxGas
))
require
.
Equal
(
t
,
depTx
.
Gas
,
uint64
(
RegolithSystemTxGas
))
require
.
Equal
(
t
,
L1InfoEcotoneLen
,
len
(
depTx
.
Data
),
"the length is same in i
sthmus
"
)
require
.
Equal
(
t
,
L1InfoEcotoneLen
,
len
(
depTx
.
Data
),
"the length is same in i
nterop
"
)
require
.
Equal
(
t
,
L1InfoFuncI
sthmusBytes4
,
depTx
.
Data
[
:
4
],
"upgrade is active, need isthmus
signature"
)
require
.
Equal
(
t
,
L1InfoFuncI
nteropBytes4
,
depTx
.
Data
[
:
4
],
"upgrade is active, need interop
signature"
)
})
})
t
.
Run
(
"activation-block i
sthmus
"
,
func
(
t
*
testing
.
T
)
{
t
.
Run
(
"activation-block i
nterop
"
,
func
(
t
*
testing
.
T
)
{
rng
:=
rand
.
New
(
rand
.
NewSource
(
1234
))
rng
:=
rand
.
New
(
rand
.
NewSource
(
1234
))
info
:=
testutils
.
MakeBlockInfo
(
nil
)(
rng
)
info
:=
testutils
.
MakeBlockInfo
(
nil
)(
rng
)
rollupCfg
:=
rollup
.
Config
{
BlockTime
:
2
,
Genesis
:
rollup
.
Genesis
{
L2Time
:
1000
}}
rollupCfg
:=
rollup
.
Config
{
BlockTime
:
2
,
Genesis
:
rollup
.
Genesis
{
L2Time
:
1000
}}
rollupCfg
.
ActivateAtGenesis
(
rollup
.
Fjord
)
rollupCfg
.
ActivateAtGenesis
(
rollup
.
Fjord
)
i
sthmusTime
:=
rollupCfg
.
Genesis
.
L2Time
+
rollupCfg
.
BlockTime
// activate isthmus
just after genesis
i
nteropTime
:=
rollupCfg
.
Genesis
.
L2Time
+
rollupCfg
.
BlockTime
// activate interop
just after genesis
rollupCfg
.
InteropTime
=
&
i
sthmus
Time
rollupCfg
.
InteropTime
=
&
i
nterop
Time
depTx
,
err
:=
L1InfoDeposit
(
&
rollupCfg
,
randomL1Cfg
(
rng
,
info
),
randomSeqNr
(
rng
),
info
,
i
sthmus
Time
)
depTx
,
err
:=
L1InfoDeposit
(
&
rollupCfg
,
randomL1Cfg
(
rng
,
info
),
randomSeqNr
(
rng
),
info
,
i
nterop
Time
)
require
.
NoError
(
t
,
err
)
require
.
NoError
(
t
,
err
)
require
.
False
(
t
,
depTx
.
IsSystemTransaction
)
require
.
False
(
t
,
depTx
.
IsSystemTransaction
)
require
.
Equal
(
t
,
depTx
.
Gas
,
uint64
(
RegolithSystemTxGas
))
require
.
Equal
(
t
,
depTx
.
Gas
,
uint64
(
RegolithSystemTxGas
))
// I
sthmus
activates, but ecotone L1 info is still used at this upgrade block
// I
nterop
activates, but ecotone L1 info is still used at this upgrade block
require
.
Equal
(
t
,
L1InfoEcotoneLen
,
len
(
depTx
.
Data
))
require
.
Equal
(
t
,
L1InfoEcotoneLen
,
len
(
depTx
.
Data
))
require
.
Equal
(
t
,
L1InfoFuncEcotoneBytes4
,
depTx
.
Data
[
:
4
])
require
.
Equal
(
t
,
L1InfoFuncEcotoneBytes4
,
depTx
.
Data
[
:
4
])
})
})
t
.
Run
(
"genesis-block i
sthmus
"
,
func
(
t
*
testing
.
T
)
{
t
.
Run
(
"genesis-block i
nterop
"
,
func
(
t
*
testing
.
T
)
{
rng
:=
rand
.
New
(
rand
.
NewSource
(
1234
))
rng
:=
rand
.
New
(
rand
.
NewSource
(
1234
))
info
:=
testutils
.
MakeBlockInfo
(
nil
)(
rng
)
info
:=
testutils
.
MakeBlockInfo
(
nil
)(
rng
)
rollupCfg
:=
rollup
.
Config
{
BlockTime
:
2
,
Genesis
:
rollup
.
Genesis
{
L2Time
:
1000
}}
rollupCfg
:=
rollup
.
Config
{
BlockTime
:
2
,
Genesis
:
rollup
.
Genesis
{
L2Time
:
1000
}}
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment