Skip to content

Commit 240a2a7

Browse files
committed
chore(x/core): addressing review comments
- Stop distribution if data request escrow runs out. - RevealBody.Reveal is now a byte slice instead of a base64 string. - Core EndBlock now completes the full tally process of a given data request in one loop iteration. - Validate that a reveal's exit code can fit in a uint8. - Validate version in PostDataRequest. - Basic module parameter validation
1 parent ffcbac0 commit 240a2a7

18 files changed

+578
-487
lines changed

go.mod

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,7 @@ require (
5454
go.uber.org/mock v0.4.0
5555
golang.org/x/crypto v0.32.0
5656
golang.org/x/exp v0.0.0-20240909161429-701f63a606c0
57+
golang.org/x/mod v0.22.0
5758
google.golang.org/genproto/googleapis/api v0.0.0-20241202173237-19429a94021a
5859
google.golang.org/grpc v1.70.0
5960
google.golang.org/protobuf v1.36.5

go.sum

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1181,6 +1181,8 @@ golang.org/x/mod v0.4.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
11811181
golang.org/x/mod v0.4.1/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
11821182
golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
11831183
golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4=
1184+
golang.org/x/mod v0.22.0 h1:D4nJWe9zXqHOmWqj4VMOJhvzj7bEZg4wEYa759z1pH4=
1185+
golang.org/x/mod v0.22.0/go.mod h1:6SkKJ3Xj0I0BrPOZoBy3bdMptDDU9oJrpohJ3eWZ1fY=
11841186
golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
11851187
golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
11861188
golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=

proto/sedachain/core/v1/core.proto

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -108,11 +108,17 @@ enum DataRequestStatus {
108108

109109
// RevealBody is the content of a reveal.
110110
message RevealBody {
111+
// Hex-encoded ID of the data request
111112
string dr_id = 1;
113+
// Block height of the data request posting
112114
uint64 dr_block_height = 2;
115+
// Exit code of the data request execution (used as uint8)
113116
uint32 exit_code = 3;
117+
// Gas used by the data request execution
114118
uint64 gas_used = 4;
115-
string reveal = 5;
119+
// Contents of the reveal
120+
bytes reveal = 5;
121+
// List of data proxy public keys used
116122
repeated string proxy_pub_keys = 6
117123
[ (gogoproto.jsontag) = "proxy_public_keys" ];
118124
}

x/core/keeper/endblock.go

Lines changed: 25 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -58,18 +58,18 @@ func (k Keeper) ProcessTallies(ctx sdk.Context) error {
5858

5959
// Loop through the list to apply filter, execute tally, and post
6060
// execution result.
61-
tallyResults := make([]TallyResult, tallyLen)
62-
dataResults := make([]batchingtypes.DataResult, tallyLen)
61+
var tallyResult TallyResult
62+
var dataResult batchingtypes.DataResult
6363

64-
for i, id := range drIDs {
64+
for _, id := range drIDs {
6565
dr, err := k.GetDataRequest(ctx, id)
6666
if err != nil {
6767
telemetry.SetGauge(1, types.TelemetryKeyDRFlowHalt)
6868
k.Logger(ctx).Error("[HALTS_DR_FLOW] failed to retrieve data request", "err", err)
6969
return nil
7070
}
7171

72-
dataResults[i] = batchingtypes.DataResult{
72+
dataResult = batchingtypes.DataResult{
7373
DrId: dr.Id,
7474
//nolint:gosec // G115: Block height is never negative.
7575
DrBlockHeight: uint64(dr.PostedHeight),
@@ -92,19 +92,19 @@ func (k Keeper) ProcessTallies(ctx sdk.Context) error {
9292
gasMeter := types.NewGasMeter(dr.TallyGasLimit, dr.ExecGasLimit, tallyConfig.MaxTallyGasLimit, dr.PostedGasPrice, tallyConfig.GasCostBase)
9393

9494
if len(dr.Commits) < int(dr.ReplicationFactor) {
95-
dataResults[i].Result = []byte(fmt.Sprintf("need %d commits; received %d", dr.ReplicationFactor, len(dr.Commits)))
96-
dataResults[i].ExitCode = types.TallyExitCodeNotEnoughCommits
95+
dataResult.Result = []byte(fmt.Sprintf("need %d commits; received %d", dr.ReplicationFactor, len(dr.Commits)))
96+
dataResult.ExitCode = types.TallyExitCodeNotEnoughCommits
9797
k.Logger(ctx).Info("data request's number of commits did not meet replication factor", "request_id", dr.Id)
9898

9999
MeterExecutorGasFallback(dr, tallyConfig.ExecutionGasCostFallback, gasMeter)
100100
} else {
101-
_, tallyResults[i] = k.FilterAndTally(ctx, dr, tallyConfig, gasMeter)
102-
dataResults[i].Result = tallyResults[i].Result
103-
dataResults[i].ExitCode = tallyResults[i].ExitCode
104-
dataResults[i].Consensus = tallyResults[i].Consensus
101+
_, tallyResult = k.FilterAndTally(ctx, dr, tallyConfig, gasMeter)
102+
dataResult.Result = tallyResult.Result
103+
dataResult.ExitCode = tallyResult.ExitCode
104+
dataResult.Consensus = tallyResult.Consensus
105105

106106
k.Logger(ctx).Info("completed tally", "request_id", dr.Id)
107-
k.Logger(ctx).Debug("tally result", "request_id", dr.Id, "tally_result", tallyResults[i])
107+
k.Logger(ctx).Debug("tally result", "request_id", dr.Id, "tally_result", tallyResult)
108108
}
109109

110110
distributions := k.GetGasMeterResults(ctx, gasMeter, dr.Id, dr.PostedHeight, tallyConfig.BurnRatio)
@@ -128,35 +128,33 @@ func (k Keeper) ProcessTallies(ctx sdk.Context) error {
128128
return err
129129
}
130130

131-
dataResults[i].GasUsed = gasMeter.TotalGasUsed()
132-
dataResults[i].Id, err = dataResults[i].TryHash()
131+
dataResult.GasUsed = gasMeter.TotalGasUsed()
132+
dataResult.Id, err = dataResult.TryHash()
133133
if err != nil {
134134
return err
135135
}
136-
}
137136

138-
// Store the data results for batching.
139-
for i := range dataResults {
140-
err := k.batchingKeeper.SetDataResultForBatching(ctx, dataResults[i])
137+
// Store the data results for batching.
138+
err = k.batchingKeeper.SetDataResultForBatching(ctx, dataResult)
141139
// If writing to the store fails we should stop the node to prevent acting on invalid state.
142140
if err != nil {
143141
k.Logger(ctx).Error("failed to store data result for batching", "err", err)
144142
return err
145143
}
146144

147-
k.Logger(ctx).Info("tally flow completed", "request_id", dataResults[i].DrId)
145+
k.Logger(ctx).Info("tally flow completed", "request_id", dataResult.DrId)
148146
ctx.EventManager().EmitEvent(
149147
sdk.NewEvent(
150148
types.EventTypeTallyCompletion,
151-
sdk.NewAttribute(types.AttributeDataResultID, dataResults[i].Id),
152-
sdk.NewAttribute(types.AttributeDataRequestID, dataResults[i].DrId),
153-
sdk.NewAttribute(types.AttributeTypeConsensus, strconv.FormatBool(dataResults[i].Consensus)),
154-
sdk.NewAttribute(types.AttributeTallyVMStdOut, strings.Join(tallyResults[i].StdOut, "\n")),
155-
sdk.NewAttribute(types.AttributeTallyVMStdErr, strings.Join(tallyResults[i].StdErr, "\n")),
156-
sdk.NewAttribute(types.AttributeExecGasUsed, fmt.Sprintf("%v", tallyResults[i].ExecGasUsed)),
157-
sdk.NewAttribute(types.AttributeTallyGasUsed, fmt.Sprintf("%v", tallyResults[i].TallyGasUsed)),
158-
sdk.NewAttribute(types.AttributeTallyExitCode, fmt.Sprintf("%02x", dataResults[i].ExitCode)),
159-
sdk.NewAttribute(types.AttributeProxyPubKeys, strings.Join(tallyResults[i].ProxyPubKeys, "\n")),
149+
sdk.NewAttribute(types.AttributeDataResultID, dataResult.Id),
150+
sdk.NewAttribute(types.AttributeDataRequestID, dataResult.DrId),
151+
sdk.NewAttribute(types.AttributeTypeConsensus, strconv.FormatBool(dataResult.Consensus)),
152+
sdk.NewAttribute(types.AttributeTallyVMStdOut, strings.Join(tallyResult.StdOut, "\n")),
153+
sdk.NewAttribute(types.AttributeTallyVMStdErr, strings.Join(tallyResult.StdErr, "\n")),
154+
sdk.NewAttribute(types.AttributeExecGasUsed, fmt.Sprintf("%v", tallyResult.ExecGasUsed)),
155+
sdk.NewAttribute(types.AttributeTallyGasUsed, fmt.Sprintf("%v", tallyResult.TallyGasUsed)),
156+
sdk.NewAttribute(types.AttributeTallyExitCode, fmt.Sprintf("%02x", dataResult.ExitCode)),
157+
sdk.NewAttribute(types.AttributeProxyPubKeys, strings.Join(tallyResult.ProxyPubKeys, "\n")),
160158
),
161159
)
162160
}

0 commit comments

Comments
 (0)