Skip to content
Snippets Groups Projects
output_reference.go 1.48 KiB
package transfer

import (
	"github.com/iotaledger/goshimmer/packages/binary/valuetangle/model/address"
	"github.com/iotaledger/goshimmer/packages/stringify"
)

type OutputReference struct {
	storageKey   []byte
	transferHash Id
	addressHash  address.Address
}

func NewOutputReference(transferHash Id, addressHash address.Address) *OutputReference {
	return &OutputReference{
		storageKey:   append(transferHash[:], addressHash[:]...),
		transferHash: transferHash,
		addressHash:  addressHash,
	}
}

func (reference *OutputReference) GetTransferHash() Id {
	return reference.transferHash
}

func (reference *OutputReference) GetAddress() address.Address {
	return reference.addressHash
}

func (reference *OutputReference) MarshalBinary() (result []byte, err error) {
	result = make([]byte, IdLength+address.Length)
	offset := 0

	copy(result[offset:], reference.transferHash[:])
	offset += IdLength

	copy(result[offset:], reference.addressHash[:])

	return
}

func (reference *OutputReference) UnmarshalBinary(bytes []byte) (err error) {
	offset := 0

	copy(reference.transferHash[:], bytes[offset:])
	offset += IdLength

	copy(reference.addressHash[:], bytes[offset:])

	return
}

func (reference *OutputReference) GetStorageKey() []byte {
	return reference.storageKey
}

func (reference *OutputReference) String() string {
	return stringify.Struct("TransferOutputReference",
		stringify.StructField("transferHash", reference.transferHash),
		stringify.StructField("addressHash", reference.addressHash),
	)
}