transaction: implement proper Size() everywhere
Will be needed for the block test from `dev`.
This commit is contained in:
parent
200cce9f02
commit
683424cce8
12 changed files with 63 additions and 2 deletions
|
@ -42,3 +42,11 @@ func (tx *ClaimTX) EncodeBinary(w io.Writer) error {
|
|||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func (tx *ClaimTX) Size() int {
|
||||
sz := util.GetVarSize(uint64(len(tx.Claims)))
|
||||
for _, claim := range tx.Claims {
|
||||
sz += claim.Size()
|
||||
}
|
||||
return sz
|
||||
}
|
||||
|
|
|
@ -23,3 +23,7 @@ func (tx *ContractTX) DecodeBinary(r io.Reader) error {
|
|||
func (tx *ContractTX) EncodeBinary(w io.Writer) error {
|
||||
return nil
|
||||
}
|
||||
|
||||
func (tx *ContractTX) Size() int {
|
||||
return 0
|
||||
}
|
||||
|
|
|
@ -26,3 +26,7 @@ func (tx *EnrollmentTX) DecodeBinary(r io.Reader) error {
|
|||
func (tx *EnrollmentTX) EncodeBinary(w io.Writer) error {
|
||||
return tx.PublicKey.EncodeBinary(w)
|
||||
}
|
||||
|
||||
func (tx *EnrollmentTX) Size() int {
|
||||
return len(tx.PublicKey.Bytes())
|
||||
}
|
||||
|
|
|
@ -53,3 +53,11 @@ func (tx *InvocationTX) EncodeBinary(w io.Writer) error {
|
|||
}
|
||||
return bw.Err
|
||||
}
|
||||
|
||||
func (tx *InvocationTX) Size() int {
|
||||
sz := util.GetVarSize(tx.Script)
|
||||
if (tx.Version >= 1) {
|
||||
sz += tx.Gas.Size()
|
||||
}
|
||||
return sz
|
||||
}
|
||||
|
|
|
@ -17,3 +17,7 @@ func (tx *IssueTX) DecodeBinary(r io.Reader) error {
|
|||
func (tx *IssueTX) EncodeBinary(w io.Writer) error {
|
||||
return nil
|
||||
}
|
||||
|
||||
func (tx *IssueTX) Size() int {
|
||||
return 0
|
||||
}
|
||||
|
|
|
@ -20,3 +20,7 @@ func (tx *MinerTX) DecodeBinary(r io.Reader) error {
|
|||
func (tx *MinerTX) EncodeBinary(w io.Writer) error {
|
||||
return binary.Write(w, binary.LittleEndian, tx.Nonce)
|
||||
}
|
||||
|
||||
func (tx *MinerTX) Size() int {
|
||||
return 4 // Nonce
|
||||
}
|
||||
|
|
|
@ -58,3 +58,16 @@ func (tx *PublishTX) DecodeBinary(r io.Reader) error {
|
|||
func (tx *PublishTX) EncodeBinary(w io.Writer) error {
|
||||
return nil
|
||||
}
|
||||
|
||||
func (tx *PublishTX) Size() int {
|
||||
sz := util.GetVarSize(tx.Script) + util.GetVarSize(uint64(len(tx.ParamList)))
|
||||
sz += 1 * len(tx.ParamList)
|
||||
sz += 1
|
||||
if tx.Version >= 1 {
|
||||
sz += 1
|
||||
}
|
||||
sz += util.GetVarSize(tx.Name) + util.GetVarSize(tx.CodeVersion)
|
||||
sz += util.GetVarSize(tx.Author) + util.GetVarSize(tx.Email)
|
||||
sz += util.GetVarSize(tx.Description)
|
||||
return sz
|
||||
}
|
||||
|
|
|
@ -62,3 +62,7 @@ func (tx *RegisterTX) EncodeBinary(w io.Writer) error {
|
|||
bw.WriteLE(tx.Admin)
|
||||
return bw.Err
|
||||
}
|
||||
|
||||
func (tx *RegisterTX) Size() int {
|
||||
return 1 + util.GetVarSize(tx.Name) + tx.Amount.Size() + 1 + len(tx.Owner.Bytes()) + tx.Admin.Size()
|
||||
}
|
||||
|
|
|
@ -31,3 +31,11 @@ func (tx *StateTX) DecodeBinary(r io.Reader) error {
|
|||
func (tx *StateTX) EncodeBinary(w io.Writer) error {
|
||||
return nil
|
||||
}
|
||||
|
||||
func (tx *StateTX) Size() int {
|
||||
sz := util.GetVarSize(uint64(len(tx.Descriptors)))
|
||||
for _, desc := range tx.Descriptors {
|
||||
sz += desc.Size()
|
||||
}
|
||||
return sz
|
||||
}
|
||||
|
|
|
@ -39,3 +39,7 @@ func (s *StateDescriptor) DecodeBinary(r io.Reader) error {
|
|||
func (s *StateDescriptor) EncodeBinary(w io.Writer) error {
|
||||
return nil
|
||||
}
|
||||
|
||||
func (s *StateDescriptor) Size() int {
|
||||
return 1 + util.GetVarSize(s.Key) + util.GetVarSize(s.Value) + util.GetVarSize(s.Field)
|
||||
}
|
||||
|
|
|
@ -276,8 +276,7 @@ func (t *Transaction) Size() int {
|
|||
outputSize := util.GetVarSize(t.Outputs)
|
||||
witnesSize := util.GetVarSize(t.Scripts)
|
||||
// uint8 + uint8 + attrSize + inputSize + outputSize + witnesSize
|
||||
return 2 + attrSize + inputSize + outputSize + witnesSize
|
||||
|
||||
return 2 + attrSize + inputSize + outputSize + witnesSize + t.Data.Size()
|
||||
}
|
||||
|
||||
// Bytes convert the transaction to []byte
|
||||
|
|
|
@ -7,4 +7,5 @@ import "io"
|
|||
type TXer interface {
|
||||
DecodeBinary(io.Reader) error
|
||||
EncodeBinary(io.Writer) error
|
||||
Size() int
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue