clef: fix chainId key being present in domain map (#19303)

This PR fixes this, moving domain.ChainId from the map's initializer down to a separate if statement which checks the existance of ChainId's value, similar to the rest of the fields, before adding it. I've also included a new test to demonstrate the issue
This commit is contained in:
Steve Gattuso 2019-04-09 04:17:09 -04:00 committed by Martin Holst Swende
parent 5b947c5004
commit f538d15241
2 changed files with 38 additions and 2 deletions

View File

@ -894,8 +894,10 @@ func (domain *TypedDataDomain) validate() error {
// Map is a helper function to generate a map version of the domain // Map is a helper function to generate a map version of the domain
func (domain *TypedDataDomain) Map() map[string]interface{} { func (domain *TypedDataDomain) Map() map[string]interface{} {
dataMap := map[string]interface{}{ dataMap := map[string]interface{}{}
"chainId": domain.ChainId,
if domain.ChainId != nil {
dataMap["chainId"] = domain.ChainId
} }
if len(domain.Name) > 0 { if len(domain.Name) > 0 {

View File

@ -225,6 +225,40 @@ func TestSignData(t *testing.T) {
} }
} }
func TestDomainChainId(t *testing.T) {
withoutChainID := TypedData{
Types: Types{
"EIP712Domain": []Type{
{Name: "name", Type: "string"},
},
},
Domain: TypedDataDomain{
Name: "test",
},
}
if _, ok := withoutChainID.Domain.Map()["chainId"]; ok {
t.Errorf("Expected the chainId key to not be present in the domain map")
}
withChainID := TypedData{
Types: Types{
"EIP712Domain": []Type{
{Name: "name", Type: "string"},
{Name: "chainId", Type: "uint256"},
},
},
Domain: TypedDataDomain{
Name: "test",
ChainId: big.NewInt(1),
},
}
if _, ok := withChainID.Domain.Map()["chainId"]; !ok {
t.Errorf("Expected the chainId key be present in the domain map")
}
}
func TestHashStruct(t *testing.T) { func TestHashStruct(t *testing.T) {
hash, err := typedData.HashStruct(typedData.PrimaryType, typedData.Message) hash, err := typedData.HashStruct(typedData.PrimaryType, typedData.Message)
if err != nil { if err != nil {