diff options
author | Sonic <sonic@dexon.org> | 2018-11-09 14:47:57 +0800 |
---|---|---|
committer | Wei-Ning Huang <w@dexon.org> | 2019-04-09 21:32:53 +0800 |
commit | 089257a3da86184c66f666ff8e119e1ca7850357 (patch) | |
tree | f40fa6d9d4760a6171e88999deb33ebb2f546ad1 /dex/downloader/types.go | |
parent | 09f24f35eff61861c21b854a648c3afec579ff47 (diff) | |
download | dexon-089257a3da86184c66f666ff8e119e1ca7850357.tar dexon-089257a3da86184c66f666ff8e119e1ca7850357.tar.gz dexon-089257a3da86184c66f666ff8e119e1ca7850357.tar.bz2 dexon-089257a3da86184c66f666ff8e119e1ca7850357.tar.lz dexon-089257a3da86184c66f666ff8e119e1ca7850357.tar.xz dexon-089257a3da86184c66f666ff8e119e1ca7850357.tar.zst dexon-089257a3da86184c66f666ff8e119e1ca7850357.zip |
dex: copy fetcher and downloader from eth
Diffstat (limited to 'dex/downloader/types.go')
-rw-r--r-- | dex/downloader/types.go | 79 |
1 files changed, 79 insertions, 0 deletions
diff --git a/dex/downloader/types.go b/dex/downloader/types.go new file mode 100644 index 000000000..d320b7590 --- /dev/null +++ b/dex/downloader/types.go @@ -0,0 +1,79 @@ +// Copyright 2015 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see <http://www.gnu.org/licenses/>. + +package downloader + +import ( + "fmt" + + "github.com/dexon-foundation/dexon/core/types" +) + +// peerDropFn is a callback type for dropping a peer detected as malicious. +type peerDropFn func(id string) + +// dataPack is a data message returned by a peer for some query. +type dataPack interface { + PeerId() string + Items() int + Stats() string +} + +// headerPack is a batch of block headers returned by a peer. +type headerPack struct { + peerID string + headers []*types.Header +} + +func (p *headerPack) PeerId() string { return p.peerID } +func (p *headerPack) Items() int { return len(p.headers) } +func (p *headerPack) Stats() string { return fmt.Sprintf("%d", len(p.headers)) } + +// bodyPack is a batch of block bodies returned by a peer. +type bodyPack struct { + peerID string + transactions [][]*types.Transaction + uncles [][]*types.Header +} + +func (p *bodyPack) PeerId() string { return p.peerID } +func (p *bodyPack) Items() int { + if len(p.transactions) <= len(p.uncles) { + return len(p.transactions) + } + return len(p.uncles) +} +func (p *bodyPack) Stats() string { return fmt.Sprintf("%d:%d", len(p.transactions), len(p.uncles)) } + +// receiptPack is a batch of receipts returned by a peer. +type receiptPack struct { + peerID string + receipts [][]*types.Receipt +} + +func (p *receiptPack) PeerId() string { return p.peerID } +func (p *receiptPack) Items() int { return len(p.receipts) } +func (p *receiptPack) Stats() string { return fmt.Sprintf("%d", len(p.receipts)) } + +// statePack is a batch of states returned by a peer. +type statePack struct { + peerID string + states [][]byte +} + +func (p *statePack) PeerId() string { return p.peerID } +func (p *statePack) Items() int { return len(p.states) } +func (p *statePack) Stats() string { return fmt.Sprintf("%d", len(p.states)) } |