Skip to content

Commit 29e3d04

Browse files
authored
[OEV-244] Remove job spec validations for dualTransmission meta (#17482)
* remove validation for dualTransmission hint * remove other dualTransmissionMeta validations; remove associated unit test * restore some test cases * remove assertion * changeset file * remove more test material
1 parent 7771b45 commit 29e3d04

File tree

3 files changed

+6
-162
lines changed

3 files changed

+6
-162
lines changed

.changeset/curly-oranges-like.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
"chainlink": patch
3+
---
4+
5+
Relax some validations on dualTransmission meta job specs

core/services/job/job_orm_test.go

Lines changed: 0 additions & 90 deletions
Original file line numberDiff line numberDiff line change
@@ -2187,96 +2187,6 @@ func TestORM_CreateJob_OCR2_With_DualTransmission(t *testing.T) {
21872187

21882188
dtTransmitterAddress := cltest.MustGenerateRandomKey(t)
21892189

2190-
metaNotSliceDualTransmissionSpec := fmt.Sprintf(`
2191-
enableDualTransmission=true
2192-
[relayConfig.dualTransmission]
2193-
contractAddress = '0x613a38AC1659769640aaE063C651F48E0250454C'
2194-
transmitterAddress = '%s'
2195-
[relayConfig.dualTransmission.meta]
2196-
key1 = 'val1'
2197-
key2 = ['val2','val3']
2198-
`,
2199-
dtTransmitterAddress.Address.String())
2200-
2201-
jb, err = ocr2validate.ValidatedOracleSpecToml(testutils.Context(t), config.OCR2(), config.Insecure(), baseJobSpec+metaNotSliceDualTransmissionSpec, nil)
2202-
require.NoError(t, err)
2203-
require.ErrorContains(t, jobORM.CreateJob(ctx, &jb), "dual transmission meta value key1 is not a slice")
2204-
2205-
hintNotValidDualTransmissionSpec := fmt.Sprintf(`
2206-
enableDualTransmission=true
2207-
[relayConfig.dualTransmission]
2208-
contractAddress = '0x613a38AC1659769640aaE063C651F48E0250454C'
2209-
transmitterAddress = '%s'
2210-
[relayConfig.dualTransmission.meta]
2211-
hint = ['some-invalid-hint']
2212-
key2 = ['val2','val3']
2213-
`,
2214-
dtTransmitterAddress.Address.String())
2215-
2216-
jb, err = ocr2validate.ValidatedOracleSpecToml(testutils.Context(t), config.OCR2(), config.Insecure(), baseJobSpec+hintNotValidDualTransmissionSpec, nil)
2217-
require.NoError(t, err)
2218-
require.ErrorContains(t, jobORM.CreateJob(ctx, &jb), "dual transmission meta.hint value some-invalid-hint should be one of the following [contract_address function_selector logs calldata default_logs full]")
2219-
2220-
invalidRefundFormatDualTransmissionSpec := fmt.Sprintf(`
2221-
enableDualTransmission=true
2222-
[relayConfig.dualTransmission]
2223-
contractAddress = '0x613a38AC1659769640aaE063C651F48E0250454C'
2224-
transmitterAddress = '%s'
2225-
[relayConfig.dualTransmission.meta]
2226-
hint = ['calldata','logs']
2227-
refund = ['0x00']
2228-
`,
2229-
dtTransmitterAddress.Address.String())
2230-
2231-
jb, err = ocr2validate.ValidatedOracleSpecToml(testutils.Context(t), config.OCR2(), config.Insecure(), baseJobSpec+invalidRefundFormatDualTransmissionSpec, nil)
2232-
require.NoError(t, err)
2233-
require.ErrorContains(t, jobORM.CreateJob(ctx, &jb), "invalid dual transmission refund, format should be <ADDRESS>:<PERCENT>")
2234-
2235-
invalidRefundAddressFormatDualTransmissionSpec := fmt.Sprintf(`
2236-
enableDualTransmission=true
2237-
[relayConfig.dualTransmission]
2238-
contractAddress = '0x613a38AC1659769640aaE063C651F48E0250454C'
2239-
transmitterAddress = '%s'
2240-
[relayConfig.dualTransmission.meta]
2241-
hint = ['calldata','logs']
2242-
refund = ['0x000:50']
2243-
`,
2244-
dtTransmitterAddress.Address.String())
2245-
2246-
jb, err = ocr2validate.ValidatedOracleSpecToml(testutils.Context(t), config.OCR2(), config.Insecure(), baseJobSpec+invalidRefundAddressFormatDualTransmissionSpec, nil)
2247-
require.NoError(t, err)
2248-
require.ErrorContains(t, jobORM.CreateJob(ctx, &jb), "invalid dual transmission refund address, 0x000 is not a valid address")
2249-
2250-
invalidRefundPercentFormatDualTransmissionSpec := fmt.Sprintf(`
2251-
enableDualTransmission=true
2252-
[relayConfig.dualTransmission]
2253-
contractAddress = '0x613a38AC1659769640aaE063C651F48E0250454C'
2254-
transmitterAddress = '%s'
2255-
[relayConfig.dualTransmission.meta]
2256-
hint = ['calldata','logs']
2257-
refund = ['0x0000000000000000000000000000000000000000:A']
2258-
`,
2259-
dtTransmitterAddress.Address.String())
2260-
2261-
jb, err = ocr2validate.ValidatedOracleSpecToml(testutils.Context(t), config.OCR2(), config.Insecure(), baseJobSpec+invalidRefundPercentFormatDualTransmissionSpec, nil)
2262-
require.NoError(t, err)
2263-
require.ErrorContains(t, jobORM.CreateJob(ctx, &jb), "invalid dual transmission refund percent, A is not a number")
2264-
2265-
invalidRefundPercentTotalFormatDualTransmissionSpec := fmt.Sprintf(`
2266-
enableDualTransmission=true
2267-
[relayConfig.dualTransmission]
2268-
contractAddress = '0x613a38AC1659769640aaE063C651F48E0250454C'
2269-
transmitterAddress = '%s'
2270-
[relayConfig.dualTransmission.meta]
2271-
hint = ['calldata','logs']
2272-
refund = ['0x0000000000000000000000000000000000000000:50','0x0000000000000000000000000000000000000001:50']
2273-
`,
2274-
dtTransmitterAddress.Address.String())
2275-
2276-
jb, err = ocr2validate.ValidatedOracleSpecToml(testutils.Context(t), config.OCR2(), config.Insecure(), baseJobSpec+invalidRefundPercentTotalFormatDualTransmissionSpec, nil)
2277-
require.NoError(t, err)
2278-
require.ErrorContains(t, jobORM.CreateJob(ctx, &jb), "invalid dual transmission refund percentages, total sum of percentages must be less than 100")
2279-
22802190
completeDualTransmissionSpec := fmt.Sprintf(`
22812191
enableDualTransmission=true
22822192
[relayConfig.dualTransmission]

core/services/job/orm.go

Lines changed: 1 addition & 72 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,6 @@ import (
77
"fmt"
88
"reflect"
99
"slices"
10-
"strconv"
11-
"strings"
1210
"time"
1311

1412
"github.com/ethereum/go-ethereum/common"
@@ -335,15 +333,10 @@ func (o *orm) CreateJob(ctx context.Context, jb *Job) error {
335333
return errors.New("invalid transmitter address in dual transmission config")
336334
}
337335

338-
rawMeta, ok := dualTransmissionConfig["meta"].(map[string]interface{})
339-
if !ok {
336+
if _, ok := dualTransmissionConfig["meta"].(map[string]interface{}); !ok {
340337
return errors.New("invalid dual transmission meta")
341338
}
342339

343-
if err = validateDualTransmissionMeta(rawMeta); err != nil {
344-
return err
345-
}
346-
347340
if err = validateKeyStoreMatchForRelay(ctx, jb.OCR2OracleSpec.Relay, tx.keyStore, dtTransmitterAddress); err != nil {
348341
return errors.Wrap(err, "unknown dual transmission transmitterAddress")
349342
}
@@ -1724,70 +1717,6 @@ func (o *orm) loadJobSpecErrors(ctx context.Context, jb *Job) error {
17241717
return errors.Wrapf(o.ds.SelectContext(ctx, &jb.JobSpecErrors, `SELECT * FROM job_spec_errors WHERE job_id = $1`, jb.ID), "failed to load job spec errors for job %d", jb.ID)
17251718
}
17261719

1727-
func validateDualTransmissionHint(vals []interface{}) error {
1728-
accepted := []string{"contract_address", "function_selector", "logs", "calldata", "default_logs", "full"}
1729-
for _, v := range vals {
1730-
valString, ok := v.(string)
1731-
if !ok {
1732-
return errors.Errorf("dual transmission meta value %v is not a string", v)
1733-
}
1734-
if !slices.Contains(accepted, valString) {
1735-
return errors.Errorf("dual transmission meta.hint value %s should be one of the following %s", valString, accepted)
1736-
}
1737-
}
1738-
return nil
1739-
}
1740-
1741-
func validateDualTransmissionRefund(vals []interface{}) error {
1742-
totalRefund := 0
1743-
for _, v := range vals {
1744-
valString, ok := v.(string)
1745-
if !ok {
1746-
return errors.Errorf("dual transmission meta value %v is not a string", v)
1747-
}
1748-
1749-
s := strings.Split(valString, ":")
1750-
if len(s) != 2 {
1751-
return errors.New("invalid dual transmission refund, format should be <ADDRESS>:<PERCENT>")
1752-
}
1753-
if !common.IsHexAddress(s[0]) {
1754-
return errors.Errorf("invalid dual transmission refund address, %s is not a valid address", s[0])
1755-
}
1756-
percent, err := strconv.Atoi(s[1])
1757-
if err != nil {
1758-
return errors.Errorf("invalid dual transmission refund percent, %s is not a number", s[1])
1759-
}
1760-
totalRefund += percent
1761-
}
1762-
1763-
if totalRefund >= 100 {
1764-
return errors.New("invalid dual transmission refund percentages, total sum of percentages must be less than 100")
1765-
}
1766-
return nil
1767-
}
1768-
1769-
func validateDualTransmissionMeta(meta map[string]interface{}) error {
1770-
for k, v := range meta {
1771-
metaFieldValues, ok := v.([]interface{})
1772-
if !ok {
1773-
return errors.Errorf("dual transmission meta value %s is not a slice", k)
1774-
}
1775-
if k == "hint" {
1776-
if err := validateDualTransmissionHint(metaFieldValues); err != nil {
1777-
return err
1778-
}
1779-
}
1780-
1781-
if k == "refund" {
1782-
if err := validateDualTransmissionRefund(metaFieldValues); err != nil {
1783-
return err
1784-
}
1785-
}
1786-
}
1787-
1788-
return nil
1789-
}
1790-
17911720
func checkIfKeyHasLock(ctx context.Context, ks keystore.Eth, address common.Address, usage evmkeystore.ServiceType) bool {
17921721
rm := ks.GetResourceMutex(ctx, address)
17931722

0 commit comments

Comments
 (0)