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
141ffd88
Unverified
Commit
141ffd88
authored
Sep 22, 2021
by
Maurelian
Committed by
Kelvin Fichter
Nov 10, 2021
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
feat(contracts): Calculate the CTC's gas burn config at creation time
parent
95a0d803
Changes
5
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
30 additions
and
11 deletions
+30
-11
CanonicalTransactionChain.sol
...ntracts/contracts/L1/rollup/CanonicalTransactionChain.sol
+9
-4
L1CrossDomainMessenger.spec.ts
...est/contracts/L1/messaging/L1CrossDomainMessenger.spec.ts
+5
-1
CanonicalTransactionChain.gas.spec.ts
...contracts/L1/rollup/CanonicalTransactionChain.gas.spec.ts
+5
-1
CanonicalTransactionChain.spec.ts
...est/contracts/L1/rollup/CanonicalTransactionChain.spec.ts
+9
-5
constants.ts
packages/contracts/test/helpers/constants.ts
+2
-0
No files found.
packages/contracts/contracts/L1/rollup/CanonicalTransactionChain.sol
View file @
141ffd88
...
@@ -34,9 +34,9 @@ contract CanonicalTransactionChain is ICanonicalTransactionChain, Lib_AddressRes
...
@@ -34,9 +34,9 @@ contract CanonicalTransactionChain is ICanonicalTransactionChain, Lib_AddressRes
// L2 tx gas-related
// L2 tx gas-related
uint256 constant public MIN_ROLLUP_TX_GAS = 100000;
uint256 constant public MIN_ROLLUP_TX_GAS = 100000;
uint256 constant public MAX_ROLLUP_TX_SIZE = 50000;
uint256 constant public MAX_ROLLUP_TX_SIZE = 50000;
uint256
constant public L2_GAS_DISCOUNT_DIVISOR = 32
;
uint256
immutable public L2_GAS_DISCOUNT_DIVISOR
;
uint256
constant public ENQUEUE_GAS_COST = 60000
;
uint256
immutable public ENQUEUE_GAS_COST
;
uint256
public ENQUEUE_L2_GAS_PREPAID = L2_GAS_DISCOUNT_DIVISOR * ENQUEUE_GAS_COST
;
uint256
immutable public ENQUEUE_L2_GAS_PREPAID
;
// Encoding-related (all in bytes)
// Encoding-related (all in bytes)
uint256 constant internal BATCH_CONTEXT_SIZE = 16;
uint256 constant internal BATCH_CONTEXT_SIZE = 16;
...
@@ -63,13 +63,18 @@ contract CanonicalTransactionChain is ICanonicalTransactionChain, Lib_AddressRes
...
@@ -63,13 +63,18 @@ contract CanonicalTransactionChain is ICanonicalTransactionChain, Lib_AddressRes
address _libAddressManager,
address _libAddressManager,
uint256 _forceInclusionPeriodSeconds,
uint256 _forceInclusionPeriodSeconds,
uint256 _forceInclusionPeriodBlocks,
uint256 _forceInclusionPeriodBlocks,
uint256 _maxTransactionGasLimit
uint256 _maxTransactionGasLimit,
uint256 _l2GasDiscountDivisor,
uint256 _enqueueGasCost
)
)
Lib_AddressResolver(_libAddressManager)
Lib_AddressResolver(_libAddressManager)
{
{
forceInclusionPeriodSeconds = _forceInclusionPeriodSeconds;
forceInclusionPeriodSeconds = _forceInclusionPeriodSeconds;
forceInclusionPeriodBlocks = _forceInclusionPeriodBlocks;
forceInclusionPeriodBlocks = _forceInclusionPeriodBlocks;
maxTransactionGasLimit = _maxTransactionGasLimit;
maxTransactionGasLimit = _maxTransactionGasLimit;
L2_GAS_DISCOUNT_DIVISOR = _l2GasDiscountDivisor;
ENQUEUE_GAS_COST = _enqueueGasCost;
ENQUEUE_L2_GAS_PREPAID = _l2GasDiscountDivisor * _enqueueGasCost;
}
}
...
...
packages/contracts/test/contracts/L1/messaging/L1CrossDomainMessenger.spec.ts
View file @
141ffd88
...
@@ -16,6 +16,8 @@ import {
...
@@ -16,6 +16,8 @@ import {
DUMMY_BATCH_PROOFS
,
DUMMY_BATCH_PROOFS
,
FORCE_INCLUSION_PERIOD_SECONDS
,
FORCE_INCLUSION_PERIOD_SECONDS
,
FORCE_INCLUSION_PERIOD_BLOCKS
,
FORCE_INCLUSION_PERIOD_BLOCKS
,
L2_GAS_DISCOUNT_DIVISOR
,
ENQUEUE_GAS_COST
,
TrieTestGenerator
,
TrieTestGenerator
,
getNextBlockNumber
,
getNextBlockNumber
,
encodeXDomainCalldata
,
encodeXDomainCalldata
,
...
@@ -100,7 +102,9 @@ describe('L1CrossDomainMessenger', () => {
...
@@ -100,7 +102,9 @@ describe('L1CrossDomainMessenger', () => {
AddressManager
.
address
,
AddressManager
.
address
,
FORCE_INCLUSION_PERIOD_SECONDS
,
FORCE_INCLUSION_PERIOD_SECONDS
,
FORCE_INCLUSION_PERIOD_BLOCKS
,
FORCE_INCLUSION_PERIOD_BLOCKS
,
MAX_GAS_LIMIT
MAX_GAS_LIMIT
,
L2_GAS_DISCOUNT_DIVISOR
,
ENQUEUE_GAS_COST
)
)
const
batches
=
await
Factory__ChainStorageContainer
.
deploy
(
const
batches
=
await
Factory__ChainStorageContainer
.
deploy
(
...
...
packages/contracts/test/contracts/L1/rollup/CanonicalTransactionChain.gas.spec.ts
View file @
141ffd88
...
@@ -16,6 +16,8 @@ import {
...
@@ -16,6 +16,8 @@ import {
makeAddressManager
,
makeAddressManager
,
setProxyTarget
,
setProxyTarget
,
FORCE_INCLUSION_PERIOD_SECONDS
,
FORCE_INCLUSION_PERIOD_SECONDS
,
L2_GAS_DISCOUNT_DIVISOR
,
ENQUEUE_GAS_COST
,
getEthTime
,
getEthTime
,
getNextBlockNumber
,
getNextBlockNumber
,
NON_ZERO_ADDRESS
,
NON_ZERO_ADDRESS
,
...
@@ -85,7 +87,9 @@ describe('[GAS BENCHMARK] CanonicalTransactionChain', () => {
...
@@ -85,7 +87,9 @@ describe('[GAS BENCHMARK] CanonicalTransactionChain', () => {
AddressManager
.
address
,
AddressManager
.
address
,
FORCE_INCLUSION_PERIOD_SECONDS
,
FORCE_INCLUSION_PERIOD_SECONDS
,
forceInclusionPeriodBlocks
,
forceInclusionPeriodBlocks
,
MAX_GAS_LIMIT
MAX_GAS_LIMIT
,
L2_GAS_DISCOUNT_DIVISOR
,
ENQUEUE_GAS_COST
)
)
const
batches
=
await
Factory__ChainStorageContainer
.
deploy
(
const
batches
=
await
Factory__ChainStorageContainer
.
deploy
(
...
...
packages/contracts/test/contracts/L1/rollup/CanonicalTransactionChain.spec.ts
View file @
141ffd88
...
@@ -19,6 +19,8 @@ import {
...
@@ -19,6 +19,8 @@ import {
setProxyTarget
,
setProxyTarget
,
FORCE_INCLUSION_PERIOD_SECONDS
,
FORCE_INCLUSION_PERIOD_SECONDS
,
FORCE_INCLUSION_PERIOD_BLOCKS
,
FORCE_INCLUSION_PERIOD_BLOCKS
,
L2_GAS_DISCOUNT_DIVISOR
,
ENQUEUE_GAS_COST
,
setEthTime
,
setEthTime
,
NON_ZERO_ADDRESS
,
NON_ZERO_ADDRESS
,
getEthTime
,
getEthTime
,
...
@@ -132,7 +134,9 @@ describe('CanonicalTransactionChain', () => {
...
@@ -132,7 +134,9 @@ describe('CanonicalTransactionChain', () => {
AddressManager
.
address
,
AddressManager
.
address
,
FORCE_INCLUSION_PERIOD_SECONDS
,
FORCE_INCLUSION_PERIOD_SECONDS
,
FORCE_INCLUSION_PERIOD_BLOCKS
,
FORCE_INCLUSION_PERIOD_BLOCKS
,
MAX_GAS_LIMIT
MAX_GAS_LIMIT
,
L2_GAS_DISCOUNT_DIVISOR
,
ENQUEUE_GAS_COST
)
)
const
batches
=
await
Factory__ChainStorageContainer
.
deploy
(
const
batches
=
await
Factory__ChainStorageContainer
.
deploy
(
...
@@ -200,19 +204,19 @@ describe('CanonicalTransactionChain', () => {
...
@@ -200,19 +204,19 @@ describe('CanonicalTransactionChain', () => {
})
})
it
(
'
should revert if transaction gas limit does not cover rollup burn
'
,
async
()
=>
{
it
(
'
should revert if transaction gas limit does not cover rollup burn
'
,
async
()
=>
{
const
ENQUEUE_L2_GAS_PREPAID
=
const
_enqueueL2GasPrepaid
=
await
CanonicalTransactionChain
.
ENQUEUE_L2_GAS_PREPAID
()
await
CanonicalTransactionChain
.
ENQUEUE_L2_GAS_PREPAID
()
const
L2_GAS_DISCOUNT_DIVISOR
=
const
l2GasDiscountDivisor
=
await
CanonicalTransactionChain
.
L2_GAS_DISCOUNT_DIVISOR
()
await
CanonicalTransactionChain
.
L2_GAS_DISCOUNT_DIVISOR
()
const
data
=
'
0x
'
+
'
12
'
.
repeat
(
1234
)
const
data
=
'
0x
'
+
'
12
'
.
repeat
(
1234
)
// Create a tx with high L2 gas limit, but insufficient L1 gas limit to cover burn.
// Create a tx with high L2 gas limit, but insufficient L1 gas limit to cover burn.
const
l2GasLimit
=
2
*
ENQUEUE_L2_GAS_PREPAID
const
l2GasLimit
=
2
*
_enqueueL2GasPrepaid
// This l1GasLimit is equivalent to the gasToConsume amount calculated in the CTC. After
// This l1GasLimit is equivalent to the gasToConsume amount calculated in the CTC. After
// additional gas overhead, it will be enough trigger the gas burn, but not enough to cover
// additional gas overhead, it will be enough trigger the gas burn, but not enough to cover
// it.
// it.
const
l1GasLimit
=
const
l1GasLimit
=
(
l2GasLimit
-
ENQUEUE_L2_GAS_PREPAID
)
/
L2_GAS_DISCOUNT_DIVISOR
(
l2GasLimit
-
_enqueueL2GasPrepaid
)
/
l2GasDiscountDivisor
await
expect
(
await
expect
(
CanonicalTransactionChain
.
enqueue
(
target
,
l2GasLimit
,
data
,
{
CanonicalTransactionChain
.
enqueue
(
target
,
l2GasLimit
,
data
,
{
...
...
packages/contracts/test/helpers/constants.ts
View file @
141ffd88
...
@@ -11,6 +11,8 @@ export const DEFAULT_ACCOUNTS_HARDHAT = defaultAccounts.map((account) => {
...
@@ -11,6 +11,8 @@ export const DEFAULT_ACCOUNTS_HARDHAT = defaultAccounts.map((account) => {
export
const
RUN_OVM_TEST_GAS
=
20
_000_000
export
const
RUN_OVM_TEST_GAS
=
20
_000_000
export
const
FORCE_INCLUSION_PERIOD_SECONDS
=
600
export
const
FORCE_INCLUSION_PERIOD_SECONDS
=
600
export
const
L2_GAS_DISCOUNT_DIVISOR
=
32
export
const
ENQUEUE_GAS_COST
=
60
_000
export
const
FORCE_INCLUSION_PERIOD_BLOCKS
=
600
/
12
export
const
FORCE_INCLUSION_PERIOD_BLOCKS
=
600
/
12
export
const
NON_NULL_BYTES32
=
export
const
NON_NULL_BYTES32
=
...
...
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