MCPcopy Index your code
hub / github.com/CovenantSQL/CovenantSQL / GetBPFromDNSSeed

Method GetBPFromDNSSeed

route/ipv6seed.go:48–141  ·  view source on GitHub ↗

GetBPFromDNSSeed gets BP info from the IPv6 domain

(BPDomain string)

Source from the content-addressed store, hash-verified

46
47// GetBPFromDNSSeed gets BP info from the IPv6 domain
48func (isc *IPv6SeedClient) GetBPFromDNSSeed(BPDomain string) (BPNodes IDNodeMap, err error) {
49 // Public key
50 var pubKeyBuf []byte
51 var pubBuf, nonceBuf, addrBuf, nodeIDBuf []byte
52 var pubErr, nonceErr, addrErr, nodeIDErr error
53 wg := new(sync.WaitGroup)
54 wg.Add(4)
55
56 f := func(host string) ([]net.IP, error) {
57 return net.LookupIP(host)
58 }
59 // Public key
60 go func() {
61 defer wg.Done()
62 pubBuf, pubErr = ipv6.FromDomain(PUBKEY+BPDomain, f)
63 }()
64 // Nonce
65 go func() {
66 defer wg.Done()
67 nonceBuf, nonceErr = ipv6.FromDomain(NONCE+BPDomain, f)
68 }()
69 // Addr
70 go func() {
71 defer wg.Done()
72 addrBuf, addrErr = ipv6.FromDomain(ADDR+BPDomain, f)
73 }()
74 // NodeID
75 go func() {
76 defer wg.Done()
77 nodeIDBuf, nodeIDErr = ipv6.FromDomain(ID+BPDomain, f)
78 }()
79
80 wg.Wait()
81
82 switch {
83 case pubErr != nil:
84 err = pubErr
85 return
86 case nonceErr != nil:
87 err = nonceErr
88 return
89 case addrErr != nil:
90 err = addrErr
91 return
92 case nodeIDErr != nil:
93 err = nodeIDErr
94 return
95 }
96
97 // For bug that trim the public header before or equal cql 0.7.0
98 if len(pubBuf) == asymmetric.PublicKeyBytesLen-1 {
99 pubKeyBuf = make([]byte, asymmetric.PublicKeyBytesLen)
100 pubKeyBuf[0] = asymmetric.PublicKeyFormatHeader
101 copy(pubKeyBuf[1:], pubBuf)
102 } else if len(pubBuf) == 48 {
103 pubKeyBuf, err = crypto.RemovePKCSPadding(pubBuf)
104 if err != nil {
105 return

Callers 4

initBPNodeIDsFunction · 0.95
TestIPv6SeedFunction · 0.95
TestGenTestNetDomainFunction · 0.95
TestResolverFunction · 0.95

Calls 8

UnmarshalBinaryMethod · 0.95
ToNodeIDMethod · 0.95
RemovePKCSPaddingFunction · 0.92
Uint256FromBytesFunction · 0.92
WaitMethod · 0.80
ErrorfMethod · 0.80
SetBytesMethod · 0.80
AddMethod · 0.45

Tested by 3

TestIPv6SeedFunction · 0.76
TestGenTestNetDomainFunction · 0.76
TestResolverFunction · 0.76