mirror of
https://github.com/ethereum/go-ethereum.git
synced 2026-08-20 10:52:25 +00:00
stateless: decode witness+block
This commit is contained in:
parent
bbb8cc6bc1
commit
a32c8408bf
2 changed files with 36 additions and 10 deletions
|
|
@ -55,13 +55,11 @@ func stateless(ctx *cli.Context) error {
|
||||||
panic("block witness required")
|
panic("block witness required")
|
||||||
}
|
}
|
||||||
|
|
||||||
f, err := os.Open(blockWitnessPath)
|
b, err := os.ReadFile(blockWitnessPath)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
panic(err)
|
panic(err)
|
||||||
}
|
}
|
||||||
|
|
||||||
var b []byte
|
|
||||||
f.Read(b)
|
|
||||||
block, witness, err := state.DecodeWitnessRLP(b)
|
block, witness, err := state.DecodeWitnessRLP(b)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
panic(err)
|
panic(err)
|
||||||
|
|
|
||||||
|
|
@ -40,7 +40,7 @@ type encodedWitness struct {
|
||||||
}
|
}
|
||||||
|
|
||||||
func (e *encodedWitness) ToWitness() *Witness {
|
func (e *encodedWitness) ToWitness() *Witness {
|
||||||
var res Witness
|
res := NewWitness()
|
||||||
res.root = e.root
|
res.root = e.root
|
||||||
for i := 0; i < len(e.codes); i++ {
|
for i := 0; i < len(e.codes); i++ {
|
||||||
res.codes[e.codeHashes[i]] = e.codes[i]
|
res.codes[e.codeHashes[i]] = e.codes[i]
|
||||||
|
|
@ -55,13 +55,43 @@ func (e *encodedWitness) ToWitness() *Witness {
|
||||||
for i, blockNum := range e.blockNums {
|
for i, blockNum := range e.blockNums {
|
||||||
res.blockHashes[blockNum] = e.blockHashes[i]
|
res.blockHashes[blockNum] = e.blockHashes[i]
|
||||||
}
|
}
|
||||||
return &res
|
return res
|
||||||
}
|
}
|
||||||
|
|
||||||
func DecodeWitnessRLP(b []byte) (*types.Block, *Witness, error) {
|
func DecodeWitnessRLP(b []byte) (*types.Block, *Witness, error) {
|
||||||
var res encodedWitness
|
var res encodedWitness
|
||||||
if err := rlp.DecodeBytes(b, &res); err != nil {
|
stream := rlp.NewStream(bytes.NewBuffer(b), 1_000_000)
|
||||||
return nil, nil, err
|
_, err := stream.List()
|
||||||
|
if err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
err = res.block.DecodeRLP(stream)
|
||||||
|
if err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
if err = stream.Decode(&res.root); err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
if err = stream.Decode(&res.owners); err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
if err = stream.Decode(&res.allPaths); err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
if err = stream.Decode(&res.allNodes); err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
if err = stream.Decode(&res.blockNums); err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
if err = stream.Decode(&res.blockHashes); err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
if err = stream.Decode(&res.codeHashes); err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
if err = stream.Decode(&res.codes); err != nil {
|
||||||
|
panic(err)
|
||||||
}
|
}
|
||||||
return &res.block, res.ToWitness(), nil
|
return &res.block, res.ToWitness(), nil
|
||||||
}
|
}
|
||||||
|
|
@ -103,9 +133,7 @@ func (w *Witness) EncodeRLP() []byte {
|
||||||
}
|
}
|
||||||
l := eb.List()
|
l := eb.List()
|
||||||
w.block.EncodeRLP(eb)
|
w.block.EncodeRLP(eb)
|
||||||
if err := rlp.Encode(eb, root); err != nil {
|
eb.WriteBytes(root[:])
|
||||||
panic(err)
|
|
||||||
}
|
|
||||||
if err := rlp.Encode(eb, owners); err != nil {
|
if err := rlp.Encode(eb, owners); err != nil {
|
||||||
panic(err)
|
panic(err)
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue