From b2b14e6ce34734542cff21b504a4579de2ff79ad Mon Sep 17 00:00:00 2001 From: Natsu Kagami Date: Mon, 3 Aug 2020 13:30:32 +0000 Subject: [PATCH] signer/core: EIP-712 encoded data should not reject a Domain without a ChainId (#21306) * Do not check for a non-nil ChainId * Add encoding test --- signer/core/signed_data.go | 6 +----- signer/core/signed_data_test.go | 8 ++++++++ 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/signer/core/signed_data.go b/signer/core/signed_data.go index 26ad0b63ff..fec464417a 100644 --- a/signer/core/signed_data.go +++ b/signer/core/signed_data.go @@ -965,11 +965,7 @@ func isPrimitiveTypeValid(primitiveType string) bool { // validate checks if the given domain is valid, i.e. contains at least // the minimum viable keys and values func (domain *TypedDataDomain) validate() error { - if domain.ChainId == nil { - return errors.New("chainId must be specified according to EIP-155") - } - - if len(domain.Name) == 0 && len(domain.Version) == 0 && len(domain.VerifyingContract) == 0 && len(domain.Salt) == 0 { + if domain.ChainId == nil && len(domain.Name) == 0 && len(domain.Version) == 0 && len(domain.VerifyingContract) == 0 && len(domain.Salt) == 0 { return errors.New("domain is undefined") } diff --git a/signer/core/signed_data_test.go b/signer/core/signed_data_test.go index e5f4780890..ab5f2cc962 100644 --- a/signer/core/signed_data_test.go +++ b/signer/core/signed_data_test.go @@ -245,6 +245,10 @@ func TestDomainChainId(t *testing.T) { if _, ok := withoutChainID.Domain.Map()["chainId"]; ok { t.Errorf("Expected the chainId key to not be present in the domain map") } + // should encode successfully + if _, err := withoutChainID.HashStruct("EIP712Domain", withoutChainID.Domain.Map()); err != nil { + t.Errorf("Expected the typedData to encode the domain successfully, got %v", err) + } withChainID := core.TypedData{ Types: core.Types{ "EIP712Domain": []core.Type{ @@ -261,6 +265,10 @@ func TestDomainChainId(t *testing.T) { if _, ok := withChainID.Domain.Map()["chainId"]; !ok { t.Errorf("Expected the chainId key be present in the domain map") } + // should encode successfully + if _, err := withChainID.HashStruct("EIP712Domain", withChainID.Domain.Map()); err != nil { + t.Errorf("Expected the typedData to encode the domain successfully, got %v", err) + } } func TestHashStruct(t *testing.T) {