@@ -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-
233222func 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