Skip to content

Commit 8ce75d2

Browse files
authored
Merge pull request #166 from xssnick/dev-v189
Fixed block header proof parse with pruned after merge part
2 parents 426b2cd + 0b49db0 commit 8ce75d2

File tree

5 files changed

+28
-11
lines changed

5 files changed

+28
-11
lines changed

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
<img align="right" width="425px" src="https://github.com/xssnick/props/blob/master/logoimg.png?raw=true">
44

55
[![Based on TON][ton-svg]][ton]
6-
![Coverage](https://img.shields.io/badge/Coverage-73.4%25-brightgreen)
6+
![Coverage](https://img.shields.io/badge/Coverage-73.3%25-brightgreen)
77

88
Golang library for interacting with TON blockchain.
99

tlb/block.go

Lines changed: 13 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -142,15 +142,15 @@ func (h *BlockHeader) LoadFromCell(loader *cell.Slice) error {
142142
var infoPart blockInfoPart
143143
err := LoadFromCell(&infoPart, loader)
144144
if err != nil {
145-
return err
145+
return fmt.Errorf("failed to load blockInfoPart: %w", err)
146146
}
147147
h.blockInfoPart = infoPart
148148

149149
if infoPart.Flags&1 == 1 {
150150
var globalVer GlobalVersion
151151
err = LoadFromCell(&globalVer, loader)
152152
if err != nil {
153-
return err
153+
return fmt.Errorf("failed to load GlobalVersion: %w", err)
154154
}
155155
h.GenSoftware = &globalVer
156156
}
@@ -163,29 +163,29 @@ func (h *BlockHeader) LoadFromCell(loader *cell.Slice) error {
163163
}
164164
err = LoadFromCell(&masterRef, l)
165165
if err != nil {
166-
return err
166+
return fmt.Errorf("failed to load ExtBlkRef: %w", err)
167167
}
168168
h.MasterRef = &masterRef
169169
}
170170

171171
l, err := loader.LoadRef()
172172
if err != nil {
173-
return err
173+
return fmt.Errorf("failed to load ref for after merge: %w", err)
174174
}
175175
prevRef, err := loadBlkPrevInfo(l, infoPart.AfterMerge)
176176
if err != nil {
177-
return err
177+
return fmt.Errorf("failed to loadBlkPrevInfo for after merge: %w", err)
178178
}
179179
h.PrevRef = *prevRef
180180

181181
if infoPart.VertSeqnoIncr {
182182
l, err := loader.LoadRef()
183183
if err != nil {
184-
return err
184+
return fmt.Errorf("failed to load ref for vert incr: %w", err)
185185
}
186186
prevVertRef, err := loadBlkPrevInfo(l, false)
187187
if err != nil {
188-
return err
188+
return fmt.Errorf("failed to loadBlkPrevInfo for prev vert ref: %w", err)
189189
}
190190
h.PrevVertRef = prevVertRef
191191
}
@@ -195,6 +195,12 @@ func (h *BlockHeader) LoadFromCell(loader *cell.Slice) error {
195195
func loadBlkPrevInfo(loader *cell.Slice, afterMerge bool) (*BlkPrevInfo, error) {
196196
var res BlkPrevInfo
197197

198+
if loader.IsSpecial() {
199+
// TODO: rewrite BlockHeader to pure tlb loader
200+
// if it is a proof we skip load
201+
return &res, nil
202+
}
203+
198204
if !afterMerge {
199205
var blkRef ExtBlkRef
200206
err := LoadFromCell(&blkRef, loader)

tlb/stack.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -320,6 +320,10 @@ func (s *Stack) parseValue(slice *cell.Slice) (any, error) {
320320
}
321321
}
322322

323+
if root.RefsNum() == 0 {
324+
return nil
325+
}
326+
323327
ref, err := root.LoadRef()
324328
if err != nil {
325329
return fmt.Errorf("failed to load tuple's %d ref, err: %w", i, err)

ton/integration_test.go

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -659,7 +659,7 @@ func TestAPIClient_SubscribeOnTransactions(t *testing.T) {
659659
defer cancel()
660660
ctx := api.Client().StickyContext(_ctx)
661661

662-
addr := address.MustParseAddr("EQCD39VS5jcptHL8vMjEXrzGaRcCVYto7HUn4bpAOg8xqB2N")
662+
addr := address.MustParseAddr("Ef8zMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM0vF")
663663

664664
b, err := api.CurrentMasterchainInfo(ctx)
665665
if err != nil {
@@ -672,7 +672,7 @@ func TestAPIClient_SubscribeOnTransactions(t *testing.T) {
672672
t.Fatal("get acc err:", err.Error())
673673
return
674674
}
675-
initLT := acc.LastTxLT - 600000000000
675+
initLT := acc.LastTxLT - 10
676676
log.Println(initLT)
677677
lastLT := initLT
678678

@@ -682,16 +682,19 @@ func TestAPIClient_SubscribeOnTransactions(t *testing.T) {
682682
ch := make(chan *tlb.Transaction)
683683
go api.SubscribeOnTransactions(ctx, addr, lastLT, ch)
684684

685+
gotTx := false
685686
for tx := range ch {
686687
if lastLT > tx.LT {
687688
t.Fatal("incorrect tx order")
688689
}
689690
lastLT = tx.LT
690691

692+
gotTx = true
691693
println(tx.Now, tx.String())
694+
cancel()
692695
}
693696

694-
if lastLT == initLT {
697+
if !gotTx {
695698
t.Fatal("no transactions")
696699
}
697700
}

tvm/cell/slice.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -478,6 +478,10 @@ func (c *Slice) LoadBinarySnake() ([]byte, error) {
478478
return data, nil
479479
}
480480

481+
func (c *Slice) IsSpecial() bool {
482+
return c.special
483+
}
484+
481485
func (c *Slice) BitsLeft() uint {
482486
return c.bitsSz - c.loadedSz
483487
}

0 commit comments

Comments
 (0)