Skip to content

Commit 7b83033

Browse files
committed
fix: read vote
1 parent 9f4c0c7 commit 7b83033

8 files changed

Lines changed: 20 additions & 39 deletions

File tree

universalClient/externalchains/evm/read_executor.go

Lines changed: 2 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -36,11 +36,6 @@ func (c *Client) ExecuteRead(ctx context.Context, req *ucallbacktypes.ReadReques
3636
}
3737
blockNum := new(big.Int).SetUint64(height)
3838

39-
header, err := c.rpcClient.GetHeaderByNumber(ctx, blockNum)
40-
if err != nil {
41-
return nil, fmt.Errorf("failed to fetch header at %d: %w", height, err)
42-
}
43-
4439
var resultData []byte
4540
switch env.QueryType {
4641
case evmQueryAccountBalance:
@@ -93,10 +88,8 @@ func (c *Client) ExecuteRead(ctx context.Context, req *ucallbacktypes.ReadReques
9388
}
9489

9590
return &ucallbacktypes.ReadResult{
96-
Status: ucallbacktypes.ReadStatus_READ_STATUS_SUCCESS,
97-
ResultData: resultData,
98-
ObservedBlockHeight: height,
99-
ObservedBlockHash: header.Hash().Bytes(),
91+
Status: ucallbacktypes.ReadStatus_READ_STATUS_SUCCESS,
92+
ResultData: resultData,
10093
}, nil
10194
}
10295

universalClient/externalchains/evm/read_executor_test.go

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -115,8 +115,6 @@ func TestExecuteRead_AccountBalance(t *testing.T) {
115115
require.NoError(t, err)
116116
assert.Equal(t, ucallbacktypes.ReadStatus_READ_STATUS_SUCCESS, result.Status)
117117
assert.Equal(t, big.NewInt(1_000_000), new(big.Int).SetBytes(result.ResultData))
118-
assert.Equal(t, uint64(100), result.ObservedBlockHeight)
119-
assert.Len(t, result.ObservedBlockHash, 32)
120118
}
121119

122120
func TestExecuteRead_ContractCall(t *testing.T) {
@@ -201,7 +199,7 @@ func TestExecuteRead_RPCFailureIsTransient(t *testing.T) {
201199
require.NoError(t, err)
202200

203201
client := newReadTestClient(t, map[string]any{}, map[string]rpcFault{
204-
"eth_getBlockByNumber": {code: -32000, message: "node is syncing"},
202+
"eth_getBalance": {code: -32000, message: "node is syncing"},
205203
})
206204

207205
result, err := client.ExecuteRead(context.Background(), evmReadRequest(t, uint8(evmQueryAccountBalance), 0, payload))
@@ -262,7 +260,7 @@ func TestExecuteRead_EnvelopeBlockNumberUsedWhenNotPinned(t *testing.T) {
262260

263261
result, err := client.ExecuteRead(context.Background(), req)
264262
require.NoError(t, err)
265-
assert.Equal(t, uint64(55), result.ObservedBlockHeight)
263+
assert.Equal(t, ucallbacktypes.ReadStatus_READ_STATUS_SUCCESS, result.Status)
266264
}
267265

268266
func TestExecuteRead_MissingHeightIsVotableError(t *testing.T) {
@@ -312,6 +310,6 @@ func TestExecuteRead_ConfirmationGate(t *testing.T) {
312310

313311
result, err := client.ExecuteRead(context.Background(), req)
314312
require.NoError(t, err)
315-
assert.Equal(t, uint64(100), result.ObservedBlockHeight)
313+
assert.Equal(t, ucallbacktypes.ReadStatus_READ_STATUS_SUCCESS, result.Status)
316314
})
317315
}

universalClient/externalchains/svm/read_executor.go

Lines changed: 10 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -18,9 +18,8 @@ const splTokenAmountOffset = 64
1818
// ExecuteRead implements common.ChainReader for Solana chains.
1919
//
2020
// Solana cannot query state at an exact past slot, so reads run at finalized
21-
// commitment with minContextSlot as a staleness floor. ObservedBlockHeight (the
22-
// context slot) may differ across validators; core's ballot key covers the
23-
// result value only, never the observed slot.
21+
// commitment with minContextSlot as a staleness floor. The observed slot is not
22+
// carried on the result or the ballot; the vote covers the result value only.
2423
func (c *Client) ExecuteRead(ctx context.Context, req *ucallbacktypes.ReadRequest) (*ucallbacktypes.ReadResult, error) {
2524
env, err := decodeSolanaQueryEnvelope(req.Query)
2625
if err != nil {
@@ -48,13 +47,12 @@ func (c *Client) ExecuteRead(ctx context.Context, req *ucallbacktypes.ReadReques
4847
return common.NewReadErrorResult(ucallbacktypes.ReadErrorCode_READ_ERROR_INVALID_RESULT), nil
4948
}
5049
return &ucallbacktypes.ReadResult{
51-
Status: ucallbacktypes.ReadStatus_READ_STATUS_SUCCESS,
52-
ResultData: resultData,
53-
ObservedBlockHeight: slot,
50+
Status: ucallbacktypes.ReadStatus_READ_STATUS_SUCCESS,
51+
ResultData: resultData,
5452
}, nil
5553

5654
case solanaQuerySPLTokenAccount:
57-
data, owner, found, slot, rpcErr := c.rpcClient.GetAccountInfoWithSlot(ctx, account, minSlot)
55+
data, owner, found, _, rpcErr := c.rpcClient.GetAccountInfoWithSlot(ctx, account, minSlot)
5856
if rpcErr != nil {
5957
return nil, rpcErr
6058
}
@@ -73,23 +71,21 @@ func (c *Client) ExecuteRead(ctx context.Context, req *ucallbacktypes.ReadReques
7371
return common.NewReadErrorResult(ucallbacktypes.ReadErrorCode_READ_ERROR_INVALID_RESULT), nil
7472
}
7573
return &ucallbacktypes.ReadResult{
76-
Status: ucallbacktypes.ReadStatus_READ_STATUS_SUCCESS,
77-
ResultData: resultData,
78-
ObservedBlockHeight: slot,
74+
Status: ucallbacktypes.ReadStatus_READ_STATUS_SUCCESS,
75+
ResultData: resultData,
7976
}, nil
8077

8178
case solanaQueryRawAccountData:
82-
data, _, found, slot, rpcErr := c.rpcClient.GetAccountInfoWithSlot(ctx, account, minSlot)
79+
data, _, found, _, rpcErr := c.rpcClient.GetAccountInfoWithSlot(ctx, account, minSlot)
8380
if rpcErr != nil {
8481
return nil, rpcErr
8582
}
8683
if !found {
8784
return common.NewReadErrorResult(ucallbacktypes.ReadErrorCode_READ_ERROR_NOT_FOUND), nil
8885
}
8986
return &ucallbacktypes.ReadResult{
90-
Status: ucallbacktypes.ReadStatus_READ_STATUS_SUCCESS,
91-
ResultData: data,
92-
ObservedBlockHeight: slot,
87+
Status: ucallbacktypes.ReadStatus_READ_STATUS_SUCCESS,
88+
ResultData: data,
9389
}, nil
9490

9591
default:

universalClient/externalchains/svm/read_executor_test.go

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -98,7 +98,6 @@ func TestExecuteRead_LamportBalance(t *testing.T) {
9898
require.NoError(t, err)
9999
assert.Equal(t, ucallbacktypes.ReadStatus_READ_STATUS_SUCCESS, result.Status)
100100
assert.Equal(t, big.NewInt(5_000_000), new(big.Int).SetBytes(result.ResultData))
101-
assert.Equal(t, uint64(900), result.ObservedBlockHeight)
102101
})
103102

104103
t.Run("observed slot below min slot is transient", func(t *testing.T) {
@@ -133,7 +132,6 @@ func TestExecuteRead_SPLTokenAccount(t *testing.T) {
133132
require.NoError(t, err)
134133
assert.Equal(t, ucallbacktypes.ReadStatus_READ_STATUS_SUCCESS, result.Status)
135134
assert.Equal(t, big.NewInt(777), new(big.Int).SetBytes(result.ResultData))
136-
assert.Equal(t, uint64(900), result.ObservedBlockHeight)
137135
})
138136

139137
t.Run("non token-program owner is a votable ERROR", func(t *testing.T) {
@@ -185,7 +183,6 @@ func TestExecuteRead_RawAccountData(t *testing.T) {
185183
require.NoError(t, err)
186184
assert.Equal(t, ucallbacktypes.ReadStatus_READ_STATUS_SUCCESS, result.Status)
187185
assert.Equal(t, raw, result.ResultData)
188-
assert.Equal(t, uint64(900), result.ObservedBlockHeight)
189186
}
190187

191188
func TestExecuteRead_InvalidInputs(t *testing.T) {

universalClient/externalchains/web2/read_executor_test.go

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,6 @@ func TestExecuteRead_GetIdenticalFields(t *testing.T) {
7575
result, err := e.ExecuteRead(context.Background(), req)
7676
require.NoError(t, err)
7777
require.Equal(t, ucallbacktypes.ReadStatus_READ_STATUS_SUCCESS, result.Status)
78-
assert.Zero(t, result.ObservedBlockHeight)
7978

8079
stringTy, _ := abi.NewType("string", "", nil)
8180
uintTy, _ := abi.NewType("uint256", "", nil)

universalClient/pushsigner/pushsigner_test.go

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -628,9 +628,8 @@ func TestVoteFundMigrationFailure(t *testing.T) {
628628

629629
func TestVoteReadResult(t *testing.T) {
630630
result := &ucallbacktypes.ReadResult{
631-
Status: ucallbacktypes.ReadStatus_READ_STATUS_SUCCESS,
632-
ResultData: []byte{0xaa},
633-
ObservedBlockHeight: 100,
631+
Status: ucallbacktypes.ReadStatus_READ_STATUS_SUCCESS,
632+
ResultData: []byte{0xaa},
634633
}
635634

636635
t.Run("successful vote", func(t *testing.T) {

universalClient/pushwatcher/read_event_processor.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -107,7 +107,7 @@ func (p *ReadEventProcessor) HandleEvent(ctx context.Context, event *store.Event
107107
log.Info().
108108
Str("vote_tx_hash", voteTxHash).
109109
Int32("status", int32(result.Status)).
110-
Uint64("observed_height", result.ObservedBlockHeight).
110+
Str("error_code", result.ErrorCode.String()).
111111
Msg("read request voted")
112112

113113
return nil

universalClient/pushwatcher/read_event_processor_test.go

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -103,9 +103,8 @@ func assertStatus(t *testing.T, cs *common.ChainStore, eventID, status string) {
103103
func TestReadEventProcessor_SuccessFlow(t *testing.T) {
104104
req := testReadRequest()
105105
result := &ucallbacktypes.ReadResult{
106-
Status: ucallbacktypes.ReadStatus_READ_STATUS_SUCCESS,
107-
ResultData: []byte{0xaa},
108-
ObservedBlockHeight: 100,
106+
Status: ucallbacktypes.ReadStatus_READ_STATUS_SUCCESS,
107+
ResultData: []byte{0xaa},
109108
}
110109
voter := &fakeReadVoter{txHash: "VOTE_TX"}
111110
p, cs := newTestReadEventProcessor(t, voter, &fakeDestClient{result: result})

0 commit comments

Comments
 (0)