transaction: fix DescriptionURL attribute handling

Both dev and master actually did it wrong.
This commit is contained in:
Roman Khimov 2019-08-30 15:35:38 +03:00
parent d0c39a561c
commit 3495fecc65

View file

@ -36,7 +36,10 @@ func (attr *Attribute) DecodeBinary(r io.Reader) error {
case Script: case Script:
datasize = 20 datasize = 20
case DescriptionURL: case DescriptionURL:
datasize = 1 // It's not VarUint as per C# implementation, dunno why
var urllen uint8
br.ReadLE(&urllen)
datasize = uint64(urllen)
case Description, Remark, Remark1, Remark2, Remark3, Remark4, case Description, Remark, Remark1, Remark2, Remark3, Remark4,
Remark5, Remark6, Remark7, Remark8, Remark9, Remark10, Remark11, Remark5, Remark6, Remark7, Remark8, Remark9, Remark10, Remark11,
Remark12, Remark13, Remark14, Remark15: Remark12, Remark13, Remark14, Remark15:
@ -56,10 +59,13 @@ func (attr *Attribute) EncodeBinary(w io.Writer) error {
switch attr.Usage { switch attr.Usage {
case ECDH02, ECDH03: case ECDH02, ECDH03:
bw.WriteLE(attr.Data[1:]) bw.WriteLE(attr.Data[1:])
case DescriptionURL, Description, Remark, Remark1, Remark2, Remark3, Remark4, case Description, Remark, Remark1, Remark2, Remark3, Remark4,
Remark5, Remark6, Remark7, Remark8, Remark9, Remark10, Remark11, Remark5, Remark6, Remark7, Remark8, Remark9, Remark10, Remark11,
Remark12, Remark13, Remark14, Remark15: Remark12, Remark13, Remark14, Remark15:
bw.WriteVarUint(uint64(len(attr.Data))) bw.WriteBytes(attr.Data)
case DescriptionURL:
var urllen uint8 = uint8(len(attr.Data))
bw.WriteLE(urllen)
fallthrough fallthrough
case Script, ContractHash, Vote, Hash1, Hash2, Hash3, Hash4, Hash5, Hash6, case Script, ContractHash, Vote, Hash1, Hash2, Hash3, Hash4, Hash5, Hash6,
Hash7, Hash8, Hash9, Hash10, Hash11, Hash12, Hash13, Hash14, Hash15: Hash7, Hash8, Hash9, Hash10, Hash11, Hash12, Hash13, Hash14, Hash15:
@ -81,7 +87,7 @@ func (attr *Attribute) Size() int {
case Script: case Script:
sz += 20 // uint8 + 20 = size(attrUsage) + 20 sz += 20 // uint8 + 20 = size(attrUsage) + 20
case DescriptionURL: case DescriptionURL:
sz += 1 sz += 1 + len(attr.Data)
default: default:
sz += util.GetVarSize(attr.Data) sz += util.GetVarSize(attr.Data)
} }