sdk: do not require a payload in vaa Unmarshal
This commit is contained in:
parent
c834938f09
commit
4c25a96731
|
@ -368,13 +368,18 @@ func Unmarshal(data []byte) (*VAA, error) {
|
||||||
return nil, fmt.Errorf("failed to read commitment: %w", err)
|
return nil, fmt.Errorf("failed to read commitment: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
payload := make([]byte, InternalTruncatedPayloadSafetyLimit)
|
// Make sure to only read the payload if the VAA has one; VAAs may have a 0 length payload
|
||||||
n, err := reader.Read(payload)
|
if reader.Len() != 0 {
|
||||||
if err != nil || n == 0 {
|
payload := make([]byte, InternalTruncatedPayloadSafetyLimit)
|
||||||
return nil, fmt.Errorf("failed to read payload [%d]: %w", n, err)
|
n, err := reader.Read(payload)
|
||||||
}
|
if err != nil {
|
||||||
|
return nil, fmt.Errorf("failed to read payload [%d]: %w", n, err)
|
||||||
|
}
|
||||||
|
|
||||||
v.Payload = payload[:n]
|
v.Payload = payload[:n]
|
||||||
|
} else {
|
||||||
|
v.Payload = []byte{}
|
||||||
|
}
|
||||||
|
|
||||||
return v, nil
|
return v, nil
|
||||||
}
|
}
|
||||||
|
|
|
@ -198,6 +198,24 @@ func getVaa() VAA {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func getEmptyPayloadVaa() VAA {
|
||||||
|
var payload = []byte{}
|
||||||
|
var governanceEmitter = Address{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4}
|
||||||
|
|
||||||
|
return VAA{
|
||||||
|
Version: uint8(1),
|
||||||
|
GuardianSetIndex: uint32(1),
|
||||||
|
Signatures: []*Signature{},
|
||||||
|
Timestamp: time.Unix(0, 0),
|
||||||
|
Nonce: uint32(1),
|
||||||
|
Sequence: uint64(1),
|
||||||
|
ConsistencyLevel: uint8(32),
|
||||||
|
EmitterChain: ChainIDSolana,
|
||||||
|
EmitterAddress: governanceEmitter,
|
||||||
|
Payload: payload,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func TestAddSignature(t *testing.T) {
|
func TestAddSignature(t *testing.T) {
|
||||||
vaa := getVaa()
|
vaa := getVaa()
|
||||||
|
|
||||||
|
@ -256,6 +274,14 @@ func TestUnmarshal(t *testing.T) {
|
||||||
assert.Equal(t, &vaa1, vaa2)
|
assert.Equal(t, &vaa1, vaa2)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestUnmarshalNoPayload(t *testing.T) {
|
||||||
|
vaaBytes := []byte{0x1, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x0, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x20}
|
||||||
|
vaa1 := getEmptyPayloadVaa()
|
||||||
|
vaa2, err := Unmarshal(vaaBytes)
|
||||||
|
assert.Nil(t, err)
|
||||||
|
assert.Equal(t, &vaa1, vaa2)
|
||||||
|
}
|
||||||
|
|
||||||
func TestUnmarshalTooBig(t *testing.T) {
|
func TestUnmarshalTooBig(t *testing.T) {
|
||||||
vaa := getVaa()
|
vaa := getVaa()
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue