p2p

package
v0.0.0-...-1c4572a Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Nov 19, 2018 License: BSD-2-Clause Imports: 31 Imported by: 0

Documentation

Index

Constants

View Source
const (
	P2pCacheTxSize = 10240
)
View Source
const (
	Service int32 = nodeBloom + nodeNetwork + nodeGetUTXO
)

Variables

View Source
var (
	UpdateState        = 2 * time.Second
	PingTimeout        = 14 * time.Second
	DefaultSendTimeout = 10 * time.Second
	DialTimeout        = 5 * time.Second

	StreamPingTimeout           = 20 * time.Second
	MonitorPeerInfoInterval     = 10 * time.Second
	MonitorPeerNumInterval      = 30 * time.Second
	MonitorReBalanceInterval    = 2 * time.Minute
	GetAddrFromAddrBookInterval = 5 * time.Second
	GetAddrFromOnlineInterval   = 5 * time.Second
	GetAddrFromGitHubInterval   = 5 * time.Minute
	CheckActivePeersInterVal    = 5 * time.Second
	CheckBlackListInterVal      = 30 * time.Second
)
View Source
var Filter = NewFilter()
View Source
var InnerSeeds = []string{
	"39.107.234.240:13802",
	"39.105.88.66:13802",
	"39.105.87.114:13802",
	"39.105.85.247:13802",
	"39.105.87.106:13802",
	"39.105.76.78:13802",
	"39.105.82.4:13802",
	"39.105.43.225:13802",
	"39.107.239.248:13802",
	"39.105.83.33:13802",
	"120.27.234.254:13802",
	"116.62.169.41:13802",
	"47.97.169.229:13802",
	"47.98.253.181:13802",
	"47.98.252.73:13802",
	"47.98.253.127:13802",
	"47.98.251.119:13802",
	"120.27.230.87:13802",
	"47.98.59.24:13802",
	"47.98.247.98:13802",
	"39.108.133.129:13802",
	"120.79.150.175:13802",
	"39.108.97.52:13802",
	"39.108.208.73:13802",
	"120.78.154.251:13802",
	"120.79.134.73:13802",
	"120.79.174.247:13802",
	"120.79.156.149:13802",
	"120.78.135.23:13802",
	"120.79.21.219:13802",
	"47.74.248.233:13802",
	"47.88.168.235:13802",
	"47.74.229.169:13802",
	"47.74.250.4:13802",
	"47.74.157.48:13802",
	"47.252.6.16:13802",
	"47.90.247.202:13802",
	"47.252.9.86:13802",
	"47.252.13.153:13802",
	"47.252.13.228:13802",
	"47.254.129.47:13802",
	"47.254.132.237:13802",
	"47.254.150.129:13802",
	"47.254.149.155:13802",
	"47.254.145.252:13802",
	"47.74.8.101:13802",
	"47.91.19.21:13802",
	"47.74.22.60:13802",
	"47.74.22.86:13802",
	"47.91.17.139:13802",
}

内置seed 列表

View Source
var (
	LocalAddr string
)
View Source
var TestNetSeeds = []string{
	"114.55.101.159:13802",
	"47.104.125.151:13802",
	"47.104.125.97:13802",
	"47.104.125.177:13802",
}
View Source
var VERSION int32 = 119

Functions

func NewDownloadJob

func NewDownloadJob(p2pcli *Cli, peers []*Peer) *downloadJob

Types

type AddrBook

type AddrBook struct {
	Quit chan struct{}
	// contains filtered or unexported fields
}

peer address manager

func NewAddrBook

func NewAddrBook(cfg *types.P2P) *AddrBook

func (*AddrBook) AddAddress

func (a *AddrBook) AddAddress(addr *NetAddress, ka *knownAddress)

NOTE: addr must not be nil

func (*AddrBook) AddOurAddress

func (a *AddrBook) AddOurAddress(addr *NetAddress)

func (*AddrBook) Close

func (a *AddrBook) Close()

func (*AddrBook) GetAddrs

func (a *AddrBook) GetAddrs() []string

func (*AddrBook) GetPeerStat

func (a *AddrBook) GetPeerStat(addr string) *knownAddress

func (*AddrBook) GetPeers

func (a *AddrBook) GetPeers() []*NetAddress

func (*AddrBook) GetPrivPubKey

func (a *AddrBook) GetPrivPubKey() (string, string)

func (*AddrBook) ISOurAddress

func (a *AddrBook) ISOurAddress(addr *NetAddress) bool

func (*AddrBook) IsOurStringAddress

func (a *AddrBook) IsOurStringAddress(addr string) bool

func (*AddrBook) RemoveAddr

func (a *AddrBook) RemoveAddr(peeraddr string)

func (*AddrBook) Save

func (a *AddrBook) Save()

Save saves the book.

func (*AddrBook) Size

func (a *AddrBook) Size() int

func (*AddrBook) Start

func (a *AddrBook) Start() error

type BlackList

type BlackList struct {
	// contains filtered or unexported fields
}

func (*BlackList) Add

func (bl *BlackList) Add(addr string, deadline int64)

func (*BlackList) Delete

func (bl *BlackList) Delete(addr string)

func (*BlackList) GetBadPeers

func (bl *BlackList) GetBadPeers() map[string]int64

func (*BlackList) Has

func (bl *BlackList) Has(addr string) bool

type Cli

type Cli struct {
	// contains filtered or unexported fields
}

func (*Cli) BlockBroadcast

func (m *Cli) BlockBroadcast(msg queue.Message, taskindex int64)

func (*Cli) BroadCastTx

func (m *Cli) BroadCastTx(msg queue.Message, taskindex int64)

func (*Cli) CheckPeerNatOk

func (m *Cli) CheckPeerNatOk(addr string) bool

func (*Cli) CheckSelf

func (m *Cli) CheckSelf(addr string, nodeinfo *NodeInfo) bool

func (*Cli) GetAddr

func (m *Cli) GetAddr(peer *Peer) ([]string, error)

func (*Cli) GetAddrList

func (m *Cli) GetAddrList(peer *Peer) (map[string]int64, error)

func (*Cli) GetBlockHeight

func (m *Cli) GetBlockHeight(nodeinfo *NodeInfo) (int64, error)

func (*Cli) GetBlocks

func (m *Cli) GetBlocks(msg queue.Message, taskindex int64)

func (*Cli) GetHeaders

func (m *Cli) GetHeaders(msg queue.Message, taskindex int64)

func (*Cli) GetInPeersNum

func (m *Cli) GetInPeersNum(peer *Peer) (int, error)

func (*Cli) GetMemPool

func (m *Cli) GetMemPool(msg queue.Message, taskindex int64)

func (*Cli) GetNetInfo

func (m *Cli) GetNetInfo(msg queue.Message, taskindex int64)

func (*Cli) GetPeerInfo

func (m *Cli) GetPeerInfo(msg queue.Message, taskindex int64)

func (*Cli) SendPing

func (m *Cli) SendPing(peer *Peer, nodeinfo *NodeInfo) error

func (*Cli) SendVersion

func (m *Cli) SendVersion(peer *Peer, nodeinfo *NodeInfo) (string, error)

type Comm

type Comm struct{}
var P2pComm Comm

func (Comm) AddrRouteble

func (Comm) AddrRouteble(addrs []string) []string

func (Comm) BytesToInt32

func (c Comm) BytesToInt32(b []byte) int32

func (Comm) CheckSign

func (c Comm) CheckSign(in *types.P2PPing) bool

func (Comm) CollectPeerStat

func (c Comm) CollectPeerStat(err error, peer *Peer)

func (Comm) GenPrivPubkey

func (c Comm) GenPrivPubkey() ([]byte, []byte, error)

func (Comm) GetLocalAddr

func (c Comm) GetLocalAddr() string

func (Comm) GrpcConfig

func (c Comm) GrpcConfig() grpc.ServiceConfig

func (Comm) Int32ToBytes

func (c Comm) Int32ToBytes(n int32) []byte

func (Comm) NewPingData

func (c Comm) NewPingData(nodeInfo *NodeInfo) (*types.P2PPing, error)

func (Comm) Pubkey

func (c Comm) Pubkey(key string) (string, error)

func (Comm) RandStr

func (c Comm) RandStr(n int) string

func (Comm) Signature

func (c Comm) Signature(key string, in *types.P2PPing) (*types.P2PPing, error)

type EventInterface

type EventInterface interface {
	BroadCastTx(msg queue.Message, taskindex int64)
	GetMemPool(msg queue.Message, taskindex int64)
	GetPeerInfo(msg queue.Message, taskindex int64)
	GetHeaders(msg queue.Message, taskindex int64)
	GetBlocks(msg queue.Message, taskindex int64)
	BlockBroadcast(msg queue.Message, taskindex int64)
	GetNetInfo(msg queue.Message, taskindex int64)
}

p2p 订阅的事件处理函数接口

func NewP2PCli

func NewP2PCli(network *P2p) EventInterface

type Filterdata

type Filterdata struct {
	// contains filtered or unexported fields
}

func NewFilter

func NewFilter() *Filterdata

func (*Filterdata) Close

func (f *Filterdata) Close()

func (*Filterdata) GetLock

func (f *Filterdata) GetLock()

func (*Filterdata) ManageRecvFilter

func (f *Filterdata) ManageRecvFilter()

func (*Filterdata) QueryRecvData

func (f *Filterdata) QueryRecvData(key string) bool

func (*Filterdata) RegRecvData

func (f *Filterdata) RegRecvData(key string) bool

func (*Filterdata) ReleaseLock

func (f *Filterdata) ReleaseLock()

func (*Filterdata) RemoveRecvData

func (f *Filterdata) RemoveRecvData(key string)

type Listener

type Listener interface {
	Close()
	Start()
}

func NewListener

func NewListener(protocol string, node *Node) Listener

type MConnConfig

type MConnConfig struct {
	// contains filtered or unexported fields
}

MConnConfig is a MConnection configuration.

func DefaultMConnConfig

func DefaultMConnConfig() *MConnConfig

DefaultMConnConfig returns the default config.

func NewTemMConnConfig

func NewTemMConnConfig(gconn *grpc.ClientConn, gcli pb.P2PgserviceClient) *MConnConfig

type MConnection

type MConnection struct {
	// contains filtered or unexported fields
}

func NewMConnection

func NewMConnection(conn *grpc.ClientConn, remote *NetAddress, peer *Peer) *MConnection

NewMConnection wraps net.Conn and creates multiplex connection

func NewMConnectionWithConfig

func NewMConnectionWithConfig(cfg *MConnConfig) *MConnection

func (*MConnection) Close

func (c *MConnection) Close()

type NetAddress

type NetAddress struct {
	IP   net.IP
	Port uint16
	// contains filtered or unexported fields
}

NetAddress defines information about a peer on the network including its IP address, and port.

func NewNetAddress

func NewNetAddress(addr net.Addr) *NetAddress

NewNetAddress returns a new NetAddress using the provided TCP address.

func NewNetAddressIPPort

func NewNetAddressIPPort(ip net.IP, port uint16) *NetAddress

NewNetAddressIPPort returns a new NetAddress using the provided IP and port number.

func NewNetAddressString

func NewNetAddressString(addr string) (*NetAddress, error)

NewNetAddressString returns a new NetAddress using the provided address in the form of "IP:Port". Also resolves the host if host is not an IP.

func NewNetAddressStrings

func NewNetAddressStrings(addrs []string) ([]*NetAddress, error)

NewNetAddressStrings returns an array of NetAddress'es build using the provided strings.

func (*NetAddress) Copy

func (na *NetAddress) Copy() *NetAddress

func (*NetAddress) DialTimeout

func (na *NetAddress) DialTimeout(version int32) (*grpc.ClientConn, error)

func (*NetAddress) Equals

func (na *NetAddress) Equals(other interface{}) bool

Equals reports whether na and other are the same addresses.

func (*NetAddress) Less

func (na *NetAddress) Less(other interface{}) bool

func (*NetAddress) Local

func (na *NetAddress) Local() bool

Local returns true if it is a local address.

func (*NetAddress) RFC1918

func (na *NetAddress) RFC1918() bool

func (*NetAddress) RFC3849

func (na *NetAddress) RFC3849() bool

func (*NetAddress) RFC3927

func (na *NetAddress) RFC3927() bool

func (*NetAddress) RFC3964

func (na *NetAddress) RFC3964() bool

func (*NetAddress) RFC4193

func (na *NetAddress) RFC4193() bool

func (*NetAddress) RFC4380

func (na *NetAddress) RFC4380() bool

func (*NetAddress) RFC4843

func (na *NetAddress) RFC4843() bool

func (*NetAddress) RFC4862

func (na *NetAddress) RFC4862() bool

func (*NetAddress) RFC6052

func (na *NetAddress) RFC6052() bool

func (*NetAddress) RFC6145

func (na *NetAddress) RFC6145() bool

func (*NetAddress) ReachabilityTo

func (na *NetAddress) ReachabilityTo(o *NetAddress) int

ReachabilityTo checks whenever o can be reached from na.

func (*NetAddress) Routable

func (na *NetAddress) Routable() bool

Routable returns true if the address is routable.

func (*NetAddress) String

func (na *NetAddress) String() string

String representation.

func (*NetAddress) Valid

func (na *NetAddress) Valid() bool

For IPv4 these are either a 0 or all bits set address. For IPv6 a zero address or one that matches the RFC3849 documentation address format.

type Node

type Node struct {
	// contains filtered or unexported fields
}

func NewNode

func NewNode(cfg *types.P2P) (*Node, error)

func (*Node) AddCachePeer

func (n *Node) AddCachePeer(pr *Peer)

func (*Node) CacheBoundsSize

func (n *Node) CacheBoundsSize() int

func (*Node) Close

func (n *Node) Close()

func (*Node) GetActivePeers

func (n *Node) GetActivePeers() (map[string]*Peer, map[string]*types.Peer)

func (*Node) GetCacheBounds

func (n *Node) GetCacheBounds() []*Peer

func (*Node) GetRegisterPeer

func (n *Node) GetRegisterPeer(paddr string) *Peer

func (*Node) GetRegisterPeers

func (n *Node) GetRegisterPeers() []*Peer

func (*Node) Has

func (n *Node) Has(paddr string) bool

func (*Node) HasCacheBound

func (n *Node) HasCacheBound(addr string) bool

func (*Node) RemoveCachePeer

func (n *Node) RemoveCachePeer(addr string)

func (*Node) SetQueueClient

func (n *Node) SetQueueClient(client queue.Client)

func (*Node) Size

func (n *Node) Size() int

func (*Node) Start

func (n *Node) Start()

type NodeInfo

type NodeInfo struct {
	ServiceType int32
	// contains filtered or unexported fields
}

func NewNodeInfo

func NewNodeInfo(cfg *types.P2P) *NodeInfo

func (*NodeInfo) FetchPeerInfo

func (nf *NodeInfo) FetchPeerInfo(n *Node)

func (*NodeInfo) Get

func (nf *NodeInfo) Get() *NodeInfo

func (*NodeInfo) GetExternalAddr

func (nf *NodeInfo) GetExternalAddr() *NetAddress

func (*NodeInfo) GetListenAddr

func (nf *NodeInfo) GetListenAddr() *NetAddress

func (*NodeInfo) IsNatDone

func (nf *NodeInfo) IsNatDone() bool

func (*NodeInfo) IsOutService

func (nf *NodeInfo) IsOutService() bool

func (*NodeInfo) OutSide

func (nf *NodeInfo) OutSide() bool

func (*NodeInfo) ServiceTy

func (nf *NodeInfo) ServiceTy() int32

func (*NodeInfo) Set

func (nf *NodeInfo) Set(n *NodeInfo)

func (*NodeInfo) SetExternalAddr

func (nf *NodeInfo) SetExternalAddr(addr *NetAddress)

func (*NodeInfo) SetListenAddr

func (nf *NodeInfo) SetListenAddr(addr *NetAddress)

func (*NodeInfo) SetNatDone

func (nf *NodeInfo) SetNatDone()

func (*NodeInfo) SetNetSide

func (nf *NodeInfo) SetNetSide(ok bool)

func (*NodeInfo) SetServiceTy

func (nf *NodeInfo) SetServiceTy(ty int32)

type NormalInterface

type NormalInterface interface {
	GetAddr(peer *Peer) ([]string, error)
	SendVersion(peer *Peer, nodeinfo *NodeInfo) (string, error)
	SendPing(peer *Peer, nodeinfo *NodeInfo) error
	GetBlockHeight(nodeinfo *NodeInfo) (int64, error)
	CheckPeerNatOk(addr string) bool
	GetAddrList(peer *Peer) (map[string]int64, error)
	GetInPeersNum(peer *Peer) (int, error)
	CheckSelf(addr string, nodeinfo *NodeInfo) bool
}

非p2p 订阅的事件处理函数接口

func NewNormalP2PCli

func NewNormalP2PCli() NormalInterface

type P2p

type P2p struct {
	// contains filtered or unexported fields
}

func New

func New(cfg *types.P2P) *P2p

func (*P2p) Close

func (network *P2p) Close()

func (*P2p) SetQueueClient

func (network *P2p) SetQueueClient(client queue.Client)

type P2pServer

type P2pServer struct {
	// contains filtered or unexported fields
}

func NewP2pServer

func NewP2pServer() *P2pServer

func (*P2pServer) BroadCastBlock

func (s *P2pServer) BroadCastBlock(ctx context.Context, in *pb.P2PBlock) (*pb.Reply, error)

func (*P2pServer) BroadCastTx

func (s *P2pServer) BroadCastTx(ctx context.Context, in *pb.P2PTx) (*pb.Reply, error)

func (*P2pServer) Close

func (s *P2pServer) Close()

func (*P2pServer) CollectInPeers

func (s *P2pServer) CollectInPeers(ctx context.Context, in *pb.P2PPing) (*pb.PeerList, error)

func (*P2pServer) CollectInPeers2

func (s *P2pServer) CollectInPeers2(ctx context.Context, in *pb.P2PPing) (*pb.PeersReply, error)

func (*P2pServer) GetAddr

func (s *P2pServer) GetAddr(ctx context.Context, in *pb.P2PGetAddr) (*pb.P2PAddr, error)

获取地址

func (*P2pServer) GetAddrList

func (s *P2pServer) GetAddrList(ctx context.Context, in *pb.P2PGetAddr) (*pb.P2PAddrList, error)

获取地址列表,包含地址高度

func (*P2pServer) GetBlocks

func (s *P2pServer) GetBlocks(ctx context.Context, in *pb.P2PGetBlocks) (*pb.P2PInv, error)

func (*P2pServer) GetData

func (s *P2pServer) GetData(in *pb.P2PGetData, stream pb.P2Pgservice_GetDataServer) error

func (*P2pServer) GetHeaders

func (s *P2pServer) GetHeaders(ctx context.Context, in *pb.P2PGetHeaders) (*pb.P2PHeaders, error)

func (*P2pServer) GetMemPool

func (s *P2pServer) GetMemPool(ctx context.Context, in *pb.P2PGetMempool) (*pb.P2PInv, error)

服务端查询本地mempool

func (*P2pServer) GetPeerInfo

func (s *P2pServer) GetPeerInfo(ctx context.Context, in *pb.P2PGetPeerInfo) (*pb.P2PPeerInfo, error)

func (*P2pServer) IsClose

func (s *P2pServer) IsClose() bool

func (*P2pServer) Ping

func (s *P2pServer) Ping(ctx context.Context, in *pb.P2PPing) (*pb.P2PPong, error)

func (*P2pServer) ServerStreamRead

func (s *P2pServer) ServerStreamRead(stream pb.P2Pgservice_ServerStreamReadServer) error

func (*P2pServer) ServerStreamSend

func (s *P2pServer) ServerStreamSend(in *pb.P2PPing, stream pb.P2Pgservice_ServerStreamSendServer) error

func (*P2pServer) SoftVersion

func (s *P2pServer) SoftVersion(ctx context.Context, in *pb.P2PPing) (*pb.Reply, error)

func (*P2pServer) Start

func (s *P2pServer) Start()

func (*P2pServer) Version

func (s *P2pServer) Version(ctx context.Context, in *pb.P2PVersion) (*pb.P2PVerAck, error)

版本

func (*P2pServer) Version2

func (s *P2pServer) Version2(ctx context.Context, in *pb.P2PVersion) (*pb.P2PVersion, error)

type Peer

type Peer struct {
	IsMaxInbouds bool
	// contains filtered or unexported fields
}

func NewPeer

func NewPeer(conn *grpc.ClientConn, node *Node, remote *NetAddress) *Peer

func (*Peer) Addr

func (p *Peer) Addr() string

Addr returns peer's remote network address.

func (*Peer) Close

func (p *Peer) Close()

func (*Peer) GetInBouns

func (p *Peer) GetInBouns() int32

func (*Peer) GetPeerInfo

func (p *Peer) GetPeerInfo(version int32) (*pb.P2PPeerInfo, error)

func (*Peer) GetPeerName

func (p *Peer) GetPeerName() string

func (*Peer) GetRunning

func (p *Peer) GetRunning() bool

func (*Peer) IsPersistent

func (p *Peer) IsPersistent() bool

IsPersistent returns true if the peer is persitent, false otherwise.

func (*Peer) MakePersistent

func (p *Peer) MakePersistent()

makePersistent marks the peer as persistent.

func (*Peer) SetAddr

func (p *Peer) SetAddr(addr *NetAddress)

func (*Peer) SetPeerName

func (p *Peer) SetPeerName(name string)

func (*Peer) Start

func (p *Peer) Start()

type PeerInfos

type PeerInfos struct {
	// contains filtered or unexported fields
}

func (*PeerInfos) FlushPeerInfos

func (p *PeerInfos) FlushPeerInfos(in []*types.Peer)

func (*PeerInfos) GetPeerInfo

func (p *PeerInfos) GetPeerInfo(key string) *types.Peer

func (*PeerInfos) GetPeerInfos

func (p *PeerInfos) GetPeerInfos() map[string]*types.Peer

func (*PeerInfos) PeerSize

func (p *PeerInfos) PeerSize() int

func (*PeerInfos) SetPeerInfo

func (p *PeerInfos) SetPeerInfo(peer *types.Peer)

type Stat

type Stat struct {
	// contains filtered or unexported fields
}

func (*Stat) IsOk

func (st *Stat) IsOk() bool

func (*Stat) NotOk

func (st *Stat) NotOk()

func (*Stat) Ok

func (st *Stat) Ok()

type Version

type Version struct {
	// contains filtered or unexported fields
}

func (*Version) GetVersion

func (v *Version) GetVersion() int32

func (*Version) IsSupport

func (v *Version) IsSupport() bool

func (*Version) SetSupport

func (v *Version) SetSupport(ok bool)

func (*Version) SetVersion

func (v *Version) SetVersion(ver int32)

Directories

Path Synopsis
Package nat provides access to common network port mapping protocols.
Package nat provides access to common network port mapping protocols.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL