solana-go-sdk
solana-go-sdk copied to clipboard
An optimization suggestion about transaction serialization
I have some questions about the following code:
// Serialize pack tx into byte array
func (tx *Transaction) Serialize() ([]byte, error) {
if len(tx.Signatures) == 0 || len(tx.Signatures) != int(tx.Message.Header.NumRequireSignatures) {
return nil, errors.New("Signature verification failed")
}
signatureCount := bincode.UintToVarLenBytes(uint64(len(tx.Signatures)))
messageData, err := tx.Message.Serialize()
if err != nil {
return nil, err
}
// ?? Why does here use **len(signatureCount)*64** ??
output := make([]byte, 0, len(signatureCount)+len(signatureCount)*64+len(messageData))
output = append(output, signatureCount...)
for _, sig := range tx.Signatures {
output = append(output, sig...)
}
output = append(output, messageData...)
return output, nil
}
This line output := make([]byte, 0, len(signatureCount)+len(signatureCount)*64+len(messageData))
, i think it makes more sense to use len(tx.Signatures) * 64
here.