Skip to content

Commit d8461fc

Browse files
authored
feat(handshake): lookup helper, primary network selection, simple getter functions (#403)
Signed-off-by: Akhil Repala <[email protected]>
1 parent f337303 commit d8461fc

File tree

3 files changed

+193
-32
lines changed

3 files changed

+193
-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: 174 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)
@@ -634,3 +623,177 @@ func simNet() *Network {
634623
// Need to implement
635624
return &Network{}
636625
}
626+
627+
var Networks = map[NetworkType]*Network{
628+
Mainnet: mainNet(),
629+
Testnet: testNet(),
630+
Regtest: regTest(),
631+
Simnet: simNet(),
632+
}
633+
634+
func SelectNetwork(t NetworkType) *Network {
635+
return Networks[t]
636+
}
637+
638+
var primary *Network
639+
640+
// SetPrimary sets the default/primary network.
641+
func SetPrimary(t NetworkType) *Network {
642+
n := SelectNetwork(t)
643+
if n == nil {
644+
panic("protocol: unknown network: " + string(t))
645+
}
646+
primary = n
647+
return n
648+
}
649+
650+
// Primary returns the default network and defaults to mainnet
651+
func Primary() *Network {
652+
if primary == nil {
653+
return SetPrimary(Mainnet)
654+
}
655+
return primary
656+
}
657+
658+
// Get returns a network by type (nil if unknown)
659+
func Get(t NetworkType) *Network {
660+
return SelectNetwork(t)
661+
}
662+
663+
// Ensure returns n if known, else returns Primary()
664+
func Ensure(n *Network) *Network {
665+
if n != nil {
666+
return n
667+
}
668+
return Primary()
669+
}
670+
671+
// Lookups helper functions
672+
673+
// FromMagic finds a network by magic number.
674+
func FromMagic(magic uint32, prefer ...NetworkType) *Network {
675+
if len(prefer) > 0 {
676+
n := SelectNetwork(prefer[0])
677+
if n != nil && n.Magic == magic {
678+
return n
679+
}
680+
return nil
681+
}
682+
for _, n := range Networks {
683+
if n != nil && n.Magic == magic {
684+
return n
685+
}
686+
}
687+
return nil
688+
}
689+
690+
// FromWIF finds a network by WIF prefix.
691+
func FromWIF(prefix uint32, prefer ...NetworkType) *Network {
692+
if len(prefer) > 0 {
693+
n := SelectNetwork(prefer[0])
694+
if n != nil && n.KeyPrefix.Privkey == prefix {
695+
return n
696+
}
697+
return nil
698+
}
699+
for _, n := range Networks {
700+
if n != nil && n.KeyPrefix.Privkey == prefix {
701+
return n
702+
}
703+
}
704+
return nil
705+
}
706+
707+
// FromPublic finds a network by xpubkey prefix.
708+
func FromPublic(prefix uint32, prefer ...NetworkType) *Network {
709+
if len(prefer) > 0 {
710+
n := SelectNetwork(prefer[0])
711+
if n != nil && n.KeyPrefix.XPubKey == prefix {
712+
return n
713+
}
714+
return nil
715+
}
716+
for _, n := range Networks {
717+
if n != nil && n.KeyPrefix.XPubKey == prefix {
718+
return n
719+
}
720+
}
721+
return nil
722+
}
723+
724+
// FromPrivate finds a network by its xprivkey prefix.
725+
func FromPrivate(prefix uint32, prefer ...NetworkType) *Network {
726+
if len(prefer) > 0 {
727+
n := SelectNetwork(prefer[0])
728+
if n != nil && n.KeyPrefix.XPrivKey == prefix {
729+
return n
730+
}
731+
return nil
732+
}
733+
for _, n := range Networks {
734+
if n != nil && n.KeyPrefix.XPrivKey == prefix {
735+
return n
736+
}
737+
}
738+
return nil
739+
}
740+
741+
// FromPublic58 finds a network by its xpubkey base58 prefix.
742+
func FromPublic58(prefix string, prefer ...NetworkType) *Network {
743+
if len(prefer) > 0 {
744+
n := SelectNetwork(prefer[0])
745+
if n != nil && n.KeyPrefix.XPubKey58 == prefix {
746+
return n
747+
}
748+
return nil
749+
}
750+
for _, n := range Networks {
751+
if n != nil && n.KeyPrefix.XPubKey58 == prefix {
752+
return n
753+
}
754+
}
755+
return nil
756+
}
757+
758+
// FromPrivate58 finds a network by its xprivkey base58 prefix.
759+
func FromPrivate58(prefix string, prefer ...NetworkType) *Network {
760+
if len(prefer) > 0 {
761+
n := SelectNetwork(prefer[0])
762+
if n != nil && n.KeyPrefix.XPrivKey58 == prefix {
763+
return n
764+
}
765+
return nil
766+
}
767+
for _, n := range Networks {
768+
if n != nil && n.KeyPrefix.XPrivKey58 == prefix {
769+
return n
770+
}
771+
}
772+
return nil
773+
}
774+
775+
// FromAddress finds a network by its bech32 address prefix.
776+
func FromAddress(hrp string, prefer ...NetworkType) *Network {
777+
if len(prefer) > 0 {
778+
n := SelectNetwork(prefer[0])
779+
if n != nil && n.AddressPrefix == hrp {
780+
return n
781+
}
782+
return nil
783+
}
784+
for _, n := range Networks {
785+
if n != nil && n.AddressPrefix == hrp {
786+
return n
787+
}
788+
}
789+
return nil
790+
}
791+
792+
func (n *Network) String() string {
793+
return n.Type
794+
}
795+
796+
// Types lists all supported network type constants.
797+
func Types() []NetworkType {
798+
return []NetworkType{Mainnet, Testnet, Regtest, Simnet}
799+
}

0 commit comments

Comments
 (0)