Skip to content

Commit 8d485f4

Browse files
committed
Merge branch 'andrius/audit-fixes-2026-05-14' into 'main'
Audit fixes for report 2026-05-14 See merge request flarenetwork/ftso/fast-updates!42
2 parents c3b7012 + 8047fbe commit 8d485f4

3 files changed

Lines changed: 31 additions & 26 deletions

File tree

go-client/client/client.go

Lines changed: 5 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -164,16 +164,11 @@ func CreateFastUpdatesClient(cfg *config.Config, valuesProvider provider.ValuesP
164164
}
165165

166166
if cfg.Client.SortitionPrivateKey == "" {
167-
fastUpdatesClient.key, err = sortition.KeyGen()
168-
if err != nil {
169-
return nil, fmt.Errorf("CreateFastUpdatesClient: KeyGen: %w", err)
170-
}
171-
logger.Info("generated new private sortition key: %s", "0x"+fastUpdatesClient.key.Sk.Text(16))
172-
} else {
173-
fastUpdatesClient.key, err = sortition.KeyFromString(cfg.Client.SortitionPrivateKey)
174-
if err != nil {
175-
return nil, fmt.Errorf("CreateFastUpdatesClient: KeyGen: %w", err)
176-
}
167+
return nil, fmt.Errorf("CreateFastUpdatesClient: sortition_private_key must be provided via configuration")
168+
}
169+
fastUpdatesClient.key, err = sortition.KeyFromString(cfg.Client.SortitionPrivateKey)
170+
if err != nil {
171+
return nil, fmt.Errorf("CreateFastUpdatesClient: KeyFromString: %w", err)
177172
}
178173

179174
fastUpdatesClient.registeredEpochs = make(map[int64]bool)

go-client/config.toml

Lines changed: 15 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,12 @@
22
# Use --config parameter to specify the path to the configuration file.
33

44
[client]
5-
signing_private_key = "0xd49743deccbccc5dc7baa8e69e5be03298da8688a15dd202e20f15d5e0e9a9fb"
6-
sortition_private_key = "0xd49743deccbccc5dc7baa8e69e5be03298da8688a15dd202e20f15d5e0e9a9fb"
5+
# Voter signing key registered in VoterRegistry. 32-byte hex string.
6+
# Example: "0xd49743deccbccc5dc7baa8e69e5be03298da8688a15dd202e20f15d5e0e9a9fb"
7+
signing_private_key = ""
8+
# Sortition key registered in VoterRegistry, used to generate verifiable
9+
# randomness for submission ordering. 32-byte hex string. See keygen/.
10+
sortition_private_key = ""
711
fast_updater_address = "0x9B931f5d3e24fc8C9064DB35bDc8FB4bE0E862f9"
812
fast_updates_configuration_address = "0x9A53e14B58383642cdB2bb4D5C46989F05C6B5f9"
913
submission_address = "0x2cA6571Daa15ce734Bbd0Bf27D5C9D16787fc33f"
@@ -15,11 +19,15 @@ max_weight = 512
1519
value_provider_url = "http://127.0.0.1:3101/feed-values/0"
1620

1721
[transactions]
18-
accounts = [
19-
"0xd49743deccbccc5dc7baa8e69e5be03298da8688a15dd202e20f15d5e0e9a9fb",
20-
"0x23c601ae397441f3ef6f1075dcb0031ff17fb079837beadaf3c84d96c6f3e569",
21-
"0xee9d129c1997549ee09c0757af5939b2483d80ad649a0eda68e8b0357ad11131",
22-
]
22+
# Funded EOA private keys used to submit fast-update transactions.
23+
# Multiple accounts let the client submit in parallel for the same
24+
# block window. Each entry is a 32-byte hex string.
25+
# Example:
26+
# accounts = [
27+
# "0xd49743deccbccc5dc7baa8e69e5be03298da8688a15dd202e20f15d5e0e9a9fb",
28+
# "0x23c601ae397441f3ef6f1075dcb0031ff17fb079837beadaf3c84d96c6f3e569",
29+
# ]
30+
accounts = []
2331
gas_limit = 2500000
2432
value = 0
2533
gas_price_multiplier = 2.5

go-client/provider/feed_provider.go

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -98,16 +98,18 @@ func StringToDeltas(update string) []byte {
9898
return deltas
9999
}
100100

101-
// Sorts values according to feeds order.
101+
// Sorts values according to feeds order, returning nil for any
102+
// requested feed not present in feedValues so the caller can rely on
103+
// positional indexing.
102104
func sortFeedValues(feeds []FeedId, feedValues []FeedValue) []*float64 {
103-
var values []*float64
104-
for _, feed := range feeds {
105-
for _, v := range feedValues {
106-
if v.Feed == feed {
107-
values = append(values, v.Value)
108-
break
109-
}
110-
}
105+
valuesByFeed := make(map[FeedId]*float64, len(feedValues))
106+
for _, v := range feedValues {
107+
valuesByFeed[v.Feed] = v.Value
108+
}
109+
110+
values := make([]*float64, len(feeds))
111+
for i, feed := range feeds {
112+
values[i] = valuesByFeed[feed]
111113
}
112114
return values
113115
}

0 commit comments

Comments
 (0)