Implement String for OutPoint.

This commit is contained in:
Josh Rickmar 2015-01-05 16:40:43 -05:00
parent df3469a792
commit a9e05a3030
2 changed files with 24 additions and 0 deletions

View file

@ -9,6 +9,7 @@ import (
"encoding/binary" "encoding/binary"
"fmt" "fmt"
"io" "io"
"strconv"
) )
const ( const (
@ -75,6 +76,21 @@ func NewOutPoint(hash *ShaHash, index uint32) *OutPoint {
} }
} }
// String returns the OutPoint in the human-readable form "hash:index".
func (o OutPoint) String() string {
// Allocate enough for hash string, colon, and 10 digits. Although
// at the time of writing, the number of digits can be no greater than
// the length of the decimal representation of maxTxOutPerMessage, the
// maximum message payload may increase in the future and this
// optimization may go unnoticed, so allocate space for 10 decimal
// digits, which will fit any uint32.
buf := make([]byte, 2*HashSize+1, 2*HashSize+1+10)
copy(buf, o.Hash.String())
buf[2*HashSize] = ':'
buf = strconv.AppendUint(buf, uint64(o.Index), 10)
return string(buf)
}
// TxIn defines a bitcoin transaction input. // TxIn defines a bitcoin transaction input.
type TxIn struct { type TxIn struct {
PreviousOutPoint OutPoint PreviousOutPoint OutPoint

View file

@ -6,6 +6,7 @@ package btcwire_test
import ( import (
"bytes" "bytes"
"fmt"
"io" "io"
"reflect" "reflect"
"testing" "testing"
@ -44,6 +45,8 @@ func TestTx(t *testing.T) {
} }
// Ensure we get the same transaction output point data back out. // Ensure we get the same transaction output point data back out.
// NOTE: This is a block hash and made up index, but we're only
// testing package functionality.
prevOutIndex := uint32(1) prevOutIndex := uint32(1)
prevOut := btcwire.NewOutPoint(hash, prevOutIndex) prevOut := btcwire.NewOutPoint(hash, prevOutIndex)
if !prevOut.Hash.IsEqual(hash) { if !prevOut.Hash.IsEqual(hash) {
@ -54,6 +57,11 @@ func TestTx(t *testing.T) {
t.Errorf("NewOutPoint: wrong index - got %v, want %v", t.Errorf("NewOutPoint: wrong index - got %v, want %v",
prevOut.Index, prevOutIndex) prevOut.Index, prevOutIndex)
} }
prevOutStr := fmt.Sprintf("%s:%d", hash.String(), prevOutIndex)
if s := prevOut.String(); s != prevOutStr {
t.Errorf("OutPoint.String: unexpected result - got %v, "+
"want %v", s, prevOutStr)
}
// Ensure we get the same transaction input back out. // Ensure we get the same transaction input back out.
sigScript := []byte{0x04, 0x31, 0xdc, 0x00, 0x1b, 0x01, 0x62} sigScript := []byte{0x04, 0x31, 0xdc, 0x00, 0x1b, 0x01, 0x62}