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
fdc00c26
Unverified
Commit
fdc00c26
authored
Oct 26, 2022
by
mergify[bot]
Committed by
GitHub
Oct 26, 2022
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'develop' into sc/md-dump-parsing
parents
34e68fca
dbdaceeb
Changes
4
Show whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
31 additions
and
7 deletions
+31
-7
config.go
op-chain-ops/genesis/config.go
+2
-1
channel_out.go
op-node/rollup/derive/channel_out.go
+1
-1
channel_out_test.go
op-node/rollup/derive/channel_out_test.go
+24
-0
derivation.md
specs/derivation.md
+4
-5
No files found.
op-chain-ops/genesis/config.go
View file @
fdc00c26
...
@@ -3,6 +3,7 @@ package genesis
...
@@ -3,6 +3,7 @@ package genesis
import
(
import
(
"encoding/json"
"encoding/json"
"errors"
"errors"
"fmt"
"math/big"
"math/big"
"os"
"os"
"path/filepath"
"path/filepath"
...
@@ -84,7 +85,7 @@ type DeployConfig struct {
...
@@ -84,7 +85,7 @@ type DeployConfig struct {
func
NewDeployConfig
(
path
string
)
(
*
DeployConfig
,
error
)
{
func
NewDeployConfig
(
path
string
)
(
*
DeployConfig
,
error
)
{
file
,
err
:=
os
.
ReadFile
(
path
)
file
,
err
:=
os
.
ReadFile
(
path
)
if
err
!=
nil
{
if
err
!=
nil
{
return
nil
,
err
return
nil
,
fmt
.
Errorf
(
"deploy config at %s not found: %w"
,
path
,
err
)
}
}
var
config
DeployConfig
var
config
DeployConfig
...
...
op-node/rollup/derive/channel_out.go
View file @
fdc00c26
...
@@ -84,7 +84,7 @@ func (co *ChannelOut) AddBlock(block *types.Block) error {
...
@@ -84,7 +84,7 @@ func (co *ChannelOut) AddBlock(block *types.Block) error {
return
err
return
err
}
}
// We encode to a temporary buffer to determine the encoded length to
// We encode to a temporary buffer to determine the encoded length to
// ensure that the total size of all RLP elements is less than MAX_RLP_BYTES_PER_CHANNEL
// ensure that the total size of all RLP elements is less than
or equal to
MAX_RLP_BYTES_PER_CHANNEL
var
buf
bytes
.
Buffer
var
buf
bytes
.
Buffer
if
err
:=
rlp
.
Encode
(
&
buf
,
batch
);
err
!=
nil
{
if
err
:=
rlp
.
Encode
(
&
buf
,
batch
);
err
!=
nil
{
return
err
return
err
...
...
op-node/rollup/derive/channel_out_test.go
View file @
fdc00c26
package
derive
package
derive
import
(
import
(
"bytes"
"math/big"
"math/big"
"testing"
"testing"
"github.com/ethereum/go-ethereum/core/types"
"github.com/ethereum/go-ethereum/core/types"
"github.com/ethereum/go-ethereum/rlp"
"github.com/stretchr/testify/require"
"github.com/stretchr/testify/require"
)
)
...
@@ -25,3 +27,25 @@ func TestChannelOutAddBlock(t *testing.T) {
...
@@ -25,3 +27,25 @@ func TestChannelOutAddBlock(t *testing.T) {
require
.
Equal
(
t
,
ErrNotDepositTx
,
err
)
require
.
Equal
(
t
,
ErrNotDepositTx
,
err
)
})
})
}
}
// TestRLPByteLimit ensures that stream encoder is properly limiting the length.
// It will decode the input if `len(input) <= inputLimit`.
func
TestRLPByteLimit
(
t
*
testing
.
T
)
{
// Should succeed if `len(input) == inputLimit`
enc
:=
[]
byte
(
"
\x8b
hello world"
)
// RLP encoding of the string "hello world"
in
:=
bytes
.
NewBuffer
(
enc
)
var
out
string
stream
:=
rlp
.
NewStream
(
in
,
12
)
err
:=
stream
.
Decode
(
&
out
)
require
.
Nil
(
t
,
err
)
require
.
Equal
(
t
,
out
,
"hello world"
)
// Should fail if the `inputLimit = len(input) - 1`
enc
=
[]
byte
(
"
\x8b
hello world"
)
// RLP encoding of the string "hello world"
in
=
bytes
.
NewBuffer
(
enc
)
var
out2
string
stream
=
rlp
.
NewStream
(
in
,
11
)
err
=
stream
.
Decode
(
&
out2
)
require
.
Equal
(
t
,
err
,
rlp
.
ErrValueTooLarge
)
require
.
Equal
(
t
,
out2
,
""
)
}
specs/derivation.md
View file @
fdc00c26
...
@@ -363,11 +363,10 @@ where:
...
@@ -363,11 +363,10 @@ where:
When decompressing a channel, we limit the amount of decompressed data to
`MAX_RLP_BYTES_PER_CHANNEL`
(currently
When decompressing a channel, we limit the amount of decompressed data to
`MAX_RLP_BYTES_PER_CHANNEL`
(currently
10,000,000 bytes), in order to avoid "zip-bomb" types of attack (where a small compressed input decompresses to a
10,000,000 bytes), in order to avoid "zip-bomb" types of attack (where a small compressed input decompresses to a
humongous amount of data). If the decompressed data exceeds the limit, things proceeds as thought the channel contained
humongous amount of data). If the decompressed data exceeds the limit, things proceeds as though the channel contained
only the first
`MAX_RLP_BYTES_PER_CHANNEL`
decompressed bytes.
only the first
`MAX_RLP_BYTES_PER_CHANNEL`
decompressed bytes. The limit is set on RLP decoding, so all batches that
can be decoded in
`MAX_RLP_BYTES_PER_CHANNEL`
will be accepted ven if the size of the channel is greater than
When decoding batches, all batches that can be completly decoded below
`MAX_RLP_BYTES_PER_CHANNEL`
will be accepted
`MAX_RLP_BYTES_PER_CHANNEL`
. The exact requirement is that
`length(input) <= MAX_RLP_BYTES_PER_CHANNEL`
.
even if the size of the channel is greater than
`MAX_RLP_BYTES_PER_CHANNEL`
.
While the above pseudocode implies that all batches are known in advance, it is possible to perform streaming
While the above pseudocode implies that all batches are known in advance, it is possible to perform streaming
compression and decompression of RLP-encoded batches. This means it is possible to start including channel frames in a
compression and decompression of RLP-encoded batches. This means it is possible to start including channel frames in a
...
...
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