Skip to content

Commit 40340b1

Browse files
committed
feat(protocol): Added lookup helper functions and primary network selection & simple getters
Signed-off-by: Akhil Repala <[email protected]>
1 parent 56e38c3 commit 40340b1

File tree

3 files changed

+186
-32
lines changed

3 files changed

+186
-32
lines changed

internal/handshake/protocol/genesis/genesis-data.json

Lines changed: 0 additions & 20 deletions
This file was deleted.

internal/handshake/protocol/genesis/genesis.go

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,25 @@ import (
66
"strings"
77
)
88

9-
var raw []byte
9+
var raw = []byte(`{
10+
"main": {
11+
"version": 0,
12+
"hash": "5b6ef2d3c1f3cdcadfd9a030ba1811efdd17740f14e166489760741d075992e0",
13+
"prev_block": "0000000000000000000000000000000000000000000000000000000000000000",
14+
"merkle_root": "8e4c9756fef2ad10375f360e0560fcc7587eb5223ddf8cd7c7e06e60a1140b15",
15+
"witness_root": "1a2c60b9439206938f8d7823782abdb8b211a57431e9c9b6a6365d8d42893351",
16+
"tree_root": "0000000000000000000000000000000000000000000000000000000000000000",
17+
"reserved_root": "0000000000000000000000000000000000000000000000000000000000000000",
18+
"time": 1580745078,
19+
"bits": "0x1c00ffff",
20+
"nonce": 0,
21+
"mask": "0000000000000000000000000000000000000000000000000000000000000000",
22+
"extra_nonce": "000000000000000000000000000000000000000000000000",
23+
"height": 0,
24+
"magic": 1533997779,
25+
"data_b64": "AAAAAHZBOF4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGixguUOSBpOPjXgjeCq9uLIRpXQx6cm2pjZdjUKJM1GOTJdW/vKtEDdfNg4FYPzHWH61Ij3fjNfH4G5goRQLFQAAAAD//wAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP//////////AdBMV3cAAAAAABTwI3ri6Phg99eRJPxRPwEuWqqNIwAAAAAAAAQgULiTf8Xe8I+fPL2n5fCMcG7bgKuliAwAAAAAAAAAAAAgLV3lhgnUlw+1SPha0HqH20DgVONMyByVHKmVpY9nTbcgENdI7aG5xnuU0yROAhFndhiptLMp6JatkEMfn0gDS60g4sApmh5GZ3NRZlXwmmSx4WsleVMN5sSlnOVlTepFGA8="
26+
}
27+
}`)
1028

1129
var (
1230
Main Net

internal/handshake/protocol/network.go

Lines changed: 167 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -219,17 +219,6 @@ func bi(hex string) *big.Int {
219219
return n
220220
}
221221

222-
var Networks = map[NetworkType]*Network{
223-
Mainnet: mainNet(),
224-
Testnet: testNet(),
225-
Regtest: regTest(),
226-
Simnet: simNet(),
227-
}
228-
229-
func SelectNetwork(t NetworkType) *Network {
230-
return Networks[t]
231-
}
232-
233222
func testNet() *Network {
234223
const (
235224
targetSpacing = uint32(10 * 60)
@@ -482,3 +471,170 @@ func simNet() *Network {
482471
// Need to implement
483472
return &Network{}
484473
}
474+
475+
var Networks = map[NetworkType]*Network{
476+
Mainnet: mainNet(),
477+
Testnet: testNet(),
478+
Regtest: regTest(),
479+
Simnet: simNet(),
480+
}
481+
482+
func SelectNetwork(t NetworkType) *Network {
483+
return Networks[t]
484+
}
485+
486+
var primary *Network
487+
488+
// SetPrimary sets the default/primary network.
489+
func SetPrimary(t NetworkType) *Network {
490+
n := SelectNetwork(t)
491+
if n == nil {
492+
panic("protocol: unknown network: " + string(t))
493+
}
494+
primary = n
495+
return n
496+
}
497+
498+
// Primary returns the default network and defaults to mainnet
499+
func Primary() *Network {
500+
if primary == nil {
501+
return SetPrimary(Mainnet)
502+
}
503+
return primary
504+
}
505+
506+
// Get returns a network by type (nil if unknown)
507+
func Get(t NetworkType) *Network {
508+
return SelectNetwork(t)
509+
}
510+
511+
// Ensure returns t if known, else returns Primary()
512+
func Ensure(t *Network) *Network {
513+
if t != nil {
514+
return t
515+
}
516+
return Primary()
517+
}
518+
519+
// FromMagic finds a network by magic number.
520+
func FromMagic(magic uint32, prefer ...NetworkType) *Network {
521+
if len(prefer) > 0 {
522+
n := SelectNetwork(prefer[0])
523+
if n != nil && n.Magic == magic {
524+
return n
525+
}
526+
return nil
527+
}
528+
for _, n := range Networks {
529+
if n != nil && n.Magic == magic {
530+
return n
531+
}
532+
}
533+
return nil
534+
}
535+
536+
// FromWIF finds a network by WIF prefix.
537+
func FromWIF(prefix uint32, prefer ...NetworkType) *Network {
538+
if len(prefer) > 0 {
539+
n := SelectNetwork(prefer[0])
540+
if n != nil && n.KeyPrefix.Privkey == prefix {
541+
return n
542+
}
543+
return nil
544+
}
545+
for _, n := range Networks {
546+
if n != nil && n.KeyPrefix.Privkey == prefix {
547+
return n
548+
}
549+
}
550+
return nil
551+
}
552+
553+
// FromPublic finds a network by xpubkey prefix.
554+
func FromPublic(prefix uint32, prefer ...NetworkType) *Network {
555+
if len(prefer) > 0 {
556+
n := SelectNetwork(prefer[0])
557+
if n != nil && n.KeyPrefix.XPubKey == prefix {
558+
return n
559+
}
560+
return nil
561+
}
562+
for _, n := range Networks {
563+
if n != nil && n.KeyPrefix.XPubKey == prefix {
564+
return n
565+
}
566+
}
567+
return nil
568+
}
569+
570+
// FromPrivate finds a network by its xprivkey prefix.
571+
func FromPrivate(prefix uint32, prefer ...NetworkType) *Network {
572+
if len(prefer) > 0 {
573+
n := SelectNetwork(prefer[0])
574+
if n != nil && n.KeyPrefix.XPrivKey == prefix {
575+
return n
576+
}
577+
return nil
578+
}
579+
for _, n := range Networks {
580+
if n != nil && n.KeyPrefix.XPrivKey == prefix {
581+
return n
582+
}
583+
}
584+
return nil
585+
}
586+
587+
// FromPublic58 finds a network by its xpubkey base58 prefix.
588+
func FromPublic58(prefix string, prefer ...NetworkType) *Network {
589+
if len(prefer) > 0 {
590+
n := SelectNetwork(prefer[0])
591+
if n != nil && n.KeyPrefix.XPubKey58 == prefix {
592+
return n
593+
}
594+
return nil
595+
}
596+
for _, n := range Networks {
597+
if n != nil && n.KeyPrefix.XPubKey58 == prefix {
598+
return n
599+
}
600+
}
601+
return nil
602+
}
603+
604+
// FromPrivate58 finds a network by its xprivkey base58 prefix.
605+
func FromPrivate58(prefix string, prefer ...NetworkType) *Network {
606+
if len(prefer) > 0 {
607+
n := SelectNetwork(prefer[0])
608+
if n != nil && n.KeyPrefix.XPrivKey58 == prefix {
609+
return n
610+
}
611+
return nil
612+
}
613+
for _, n := range Networks {
614+
if n != nil && n.KeyPrefix.XPrivKey58 == prefix {
615+
return n
616+
}
617+
}
618+
return nil
619+
}
620+
621+
// FromAddress finds a network by its bech32 address prefix.
622+
func FromAddress(hrp string, prefer ...NetworkType) *Network {
623+
if len(prefer) > 0 {
624+
n := SelectNetwork(prefer[0])
625+
if n != nil && n.AddressPrefix == hrp {
626+
return n
627+
}
628+
return nil
629+
}
630+
for _, n := range Networks {
631+
if n != nil && n.AddressPrefix == hrp {
632+
return n
633+
}
634+
}
635+
return nil
636+
}
637+
638+
func (n *Network) String() string {
639+
return n.Type
640+
}

0 commit comments

Comments
 (0)