Documentation ¶
Overview ¶
Package math provides integer math utilities.
Index ¶
- Constants
- Variables
- func BigMax(x, y *big.Int) *big.Int
- func BigMin(x, y *big.Int) *big.Int
- func BigPow(a, b int64) *big.Int
- func Byte(bigint *big.Int, padlength, n int) byte
- func Exp(base, exponent *big.Int) *big.Int
- func FirstBitSet(v *big.Int) int
- func MustParseBig256(s string) *big.Int
- func PaddedBigBytes(bigint *big.Int, n int) []byte
- func ParseBig256(s string) (*big.Int, bool)
- func ReadBits(bigint *big.Int, buf []byte)
- func S256(x *big.Int) *big.Int
- func TransNodeIDToString(nodeID NodeID) string
- func TransPubKeyToStringID(pubKey crypto.PubKey) string
- func U256(x *big.Int) *big.Int
- type Config
- type DiscoverTable
- type Hash
- type HexOrDecimal256
- type Node
- type NodeID
- type P2pDBManager
- type ReadPacket
- type UDPConn
Constants ¶
const ( // HashLength is the expected length of the hash HashLength = 32 // AddressLength is the expected length of the address AddressLength = 20 )
Variables ¶
var ( MaxBig256 = new(big.Int).Set(tt256m1) MaxBig63 = new(big.Int).Sub(tt63, big.NewInt(1)) )
Various big integer limit values.
Functions ¶
func Byte ¶
Byte returns the byte at position n, with the supplied padlength in Little-Endian encoding. n==0 returns the MSB Example: bigint '5', padlength 32, n=31 => 5
func Exp ¶
Exp implements exponentiation by squaring. Exp returns a newly-allocated big integer and does not change base or exponent. The result is truncated to 256 bits.
Courtesy @karalabe and @chfast
func FirstBitSet ¶
FirstBitSet returns the index of the first 1 bit in v, counting from LSB.
func MustParseBig256 ¶
MustParseBig256 parses s as a 256 bit big integer and panics if the string is invalid.
func PaddedBigBytes ¶
PaddedBigBytes encodes a big integer as a big-endian byte slice. The length of the slice is at least n bytes.
func ParseBig256 ¶
ParseBig256 parses s as a 256 bit integer in decimal or hexadecimal syntax. Leading zeros are accepted. The empty string parses as zero.
func ReadBits ¶
ReadBits encodes the absolute value of bigint as big-endian bytes. Callers must ensure that buf has enough space. If buf is too short the result will be incomplete.
func S256 ¶
S256 interprets x as a two's complement number. x must not exceed 256 bits (the result is undefined if it does) and is not modified.
S256(0) = 0 S256(1) = 1 S256(2**255) = -2**255 S256(2**256-1) = -1
func TransNodeIDToString ¶ added in v0.1.1
func TransPubKeyToStringID ¶ added in v0.1.1
Types ¶
type Config ¶
type Config struct { // These settings are required and configure the UDP listener: PrivateKey crypto.PrivKey // These settings are optional: NetRestrict *netutil.Netlist // network whitelist SeedNodes []*Node // list of bootstrap nodes }
Config holds Table-related settings.
type DiscoverTable ¶
type DiscoverTable interface { Start() Stop() GetMaxDialOutNum() int //Maximum number of connections to be actively connected outward GetMaxConNumFromCache() int //Get the maximum number of nodes from cache LookupRandom() []*Node //Get some nodes in real time from the network ReadRandomNodes([]*Node, map[string]bool) int //Get some random nodes from local memory IsDhtTable() bool }
type Hash ¶
type Hash [HashLength]byte
type HexOrDecimal256 ¶
HexOrDecimal256 marshals big.Int as hex or decimal.
func NewHexOrDecimal256 ¶
func NewHexOrDecimal256(x int64) *HexOrDecimal256
NewHexOrDecimal256 creates a new HexOrDecimal256
func (*HexOrDecimal256) MarshalText ¶
func (i *HexOrDecimal256) MarshalText() ([]byte, error)
MarshalText implements encoding.TextMarshaler.
func (*HexOrDecimal256) UnmarshalText ¶
func (i *HexOrDecimal256) UnmarshalText(input []byte) error
UnmarshalText implements encoding.TextUnmarshaler.
type Node ¶
type Node struct { IP net.IP `json:"ip"` // len 4 for IPv4 or 16 for IPv6 UDP_Port uint16 `json:"udp_port"` // port numbers TCP_Port uint16 `json:"tcp_port"` // port numbers ID NodeID `json:"id"` // the node's public key }
func (*Node) Incomplete ¶
Incomplete returns true for nodes with no IP address.
func (*Node) ValidateComplete ¶
ValidateComplete checks whether n has a valid IP and UDP port.
type NodeID ¶
type NodeID [32]byte //crypto.Keccak256Hash(pubkey)
ID is a unique identifier for each node.
func TransPkbyteToNodeID ¶ added in v0.1.1
func TransPubKeyToNodeID ¶ added in v0.1.1
func (NodeID) MarshalJSON ¶ added in v0.1.1
func (*NodeID) UnmarshalJSON ¶ added in v0.1.1
type P2pDBManager ¶
type P2pDBManager interface { QuerySeeds(n int, maxAge time.Duration) []*Node LastPingReceived(id NodeID, ip net.IP) time.Time LastPongReceived(id NodeID, ip net.IP) time.Time UpdateNode(node *Node) //Store Node in DB UpdateLastPingReceived(id NodeID, ip net.IP, instance time.Time) UpdateLastPongReceived(id NodeID, ip net.IP, instance time.Time) UpdateFindFails(id NodeID, ip net.IP, fails int) FindFails(id NodeID, ip net.IP) int Close() }
type ReadPacket ¶
ReadPacket is a packet that couldn't be handled. Those packets are sent to the unhandled channel if configured.