// String returns the extended key as a human-readable base58-encoded string. func (k *ExtendedKey) String() (string, error) { if len(k.key) == 0 { return "", fmt.Errorf("zeroed extended key") } var childNumBytes [4]byte depthByte := byte(k.depth % 256) binary.BigEndian.PutUint32(childNumBytes[:], k.childNum) // The serialized format is: // version (4) || depth (1) || parent fingerprint (4)) || // child num (4) || chain code (32) || key data (33) || checksum (4) serializedBytes := make([]byte, 0, serializedKeyLen+4) serializedBytes = append(serializedBytes, k.version...) serializedBytes = append(serializedBytes, depthByte) serializedBytes = append(serializedBytes, k.parentFP...) serializedBytes = append(serializedBytes, childNumBytes[:]...) serializedBytes = append(serializedBytes, k.chainCode...) if k.isPrivate { serializedBytes = append(serializedBytes, 0x00) serializedBytes = append(serializedBytes, k.key...) } else { serializedBytes = append(serializedBytes, k.pubKeyBytes()...) } checkSum := chainhash.HashFuncB(serializedBytes)[:4] serializedBytes = append(serializedBytes, checkSum...) return base58.Encode(serializedBytes), nil }
// String creates the Wallet Import Format string encoding of a WIF structure. // See DecodeWIF for a detailed breakdown of the format and requirements of // a valid WIF string. func (w *WIF) String() string { // Precalculate size. Maximum number of bytes before base58 encoding // is two bytes for the network, one byte for the ECDSA type, 32 bytes // of private key and finally four bytes of checksum. encodeLen := 2 + 1 + 32 + 4 a := make([]byte, 0, encodeLen) a = append(a, w.netID[:]...) a = append(a, byte(w.ecType)) a = append(a, w.PrivKey.Serialize()...) cksum := chainhash.HashFuncB(a) a = append(a, cksum[:4]...) return base58.Encode(a) }