From bf88f745661f415c8409c933bfe4cccabc801c35 Mon Sep 17 00:00:00 2001 From: Damian Ramirez Date: Fri, 24 Jan 2025 10:28:17 -0300 Subject: [PATCH] implement request-response pattern for IsAdmin and update tests. --- chainio/clients/elcontracts/reader.go | 20 ++++++++++++++------ chainio/clients/elcontracts/reader_test.go | 20 ++++++++++++++------ chainio/clients/elcontracts/types.go | 9 +++++++++ chainio/clients/elcontracts/writer_test.go | 16 ++++++++++++---- 4 files changed, 49 insertions(+), 16 deletions(-) diff --git a/chainio/clients/elcontracts/reader.go b/chainio/clients/elcontracts/reader.go index 379319a6..e90f9791 100644 --- a/chainio/clients/elcontracts/reader.go +++ b/chainio/clients/elcontracts/reader.go @@ -1057,13 +1057,21 @@ func (r *ChainReader) IsPendingAdmin( func (r *ChainReader) IsAdmin( ctx context.Context, - accountAddress gethcommon.Address, - adminAddress gethcommon.Address, -) (bool, error) { - isAdmin, err := r.permissionController.IsAdmin(&bind.CallOpts{Context: ctx}, accountAddress, adminAddress) + blockNumber *big.Int, + request IsAdminRequest, +) (IsAdminResponse, error) { + if r.permissionController == nil { + return IsAdminResponse{}, errors.New("PermissionController contract not provided") + } + + isAdmin, err := r.permissionController.IsAdmin( + &bind.CallOpts{Context: ctx, BlockNumber: blockNumber}, + request.AccountAddress, + request.AdminAddress, + ) // This call should not fail since it's a getter if err != nil { - return false, utils.WrapError("call to permission controller failed", err) + return IsAdminResponse{}, utils.WrapError("call to permission controller failed", err) } - return isAdmin, nil + return IsAdminResponse{IsAdmin: isAdmin}, nil } diff --git a/chainio/clients/elcontracts/reader_test.go b/chainio/clients/elcontracts/reader_test.go index d2d558b9..9cd3be55 100644 --- a/chainio/clients/elcontracts/reader_test.go +++ b/chainio/clients/elcontracts/reader_test.go @@ -755,9 +755,13 @@ func TestAdminFunctions(t *testing.T) { }) t.Run("non-existent admin", func(t *testing.T) { - isAdmin, err := chainReader.IsAdmin(context.Background(), operatorAddr, pendingAdminAddr) + request := elcontracts.IsAdminRequest{ + AccountAddress: operatorAddr, + AdminAddress: pendingAdminAddr, + } + response, err := chainReader.IsAdmin(context.Background(), nil, request) assert.NoError(t, err) - assert.False(t, isAdmin) + assert.False(t, response.IsAdmin) }) t.Run("list admins", func(t *testing.T) { @@ -770,17 +774,21 @@ func TestAdminFunctions(t *testing.T) { assert.NoError(t, err) assert.Equal(t, receipt.Status, gethtypes.ReceiptStatusSuccessful) - requestAdmin := elcontracts.ListAdminsRequest{ + requestListAdmin := elcontracts.ListAdminsRequest{ AccountAddress: operatorAddr, } - response, err := chainReader.ListAdmins(context.Background(), nil, requestAdmin) + response, err := chainReader.ListAdmins(context.Background(), nil, requestListAdmin) assert.NoError(t, err) assert.Len(t, response.Admins, 1) admin := response.Admins[0] - isAdmin, err := chainReader.IsAdmin(context.Background(), operatorAddr, admin) + requestAdmin := elcontracts.IsAdminRequest{ + AccountAddress: operatorAddr, + AdminAddress: admin, + } + responseAdmin, err := chainReader.IsAdmin(context.Background(), nil, requestAdmin) assert.NoError(t, err) - assert.True(t, isAdmin) + assert.True(t, responseAdmin.IsAdmin) }) } diff --git a/chainio/clients/elcontracts/types.go b/chainio/clients/elcontracts/types.go index acfe93d4..a51b553e 100644 --- a/chainio/clients/elcontracts/types.go +++ b/chainio/clients/elcontracts/types.go @@ -410,3 +410,12 @@ type IsPendingAdminRequest struct { type IsPendingAdminResponse struct { IsPendingAdmin bool } + +type IsAdminRequest struct { + AccountAddress common.Address + AdminAddress common.Address +} + +type IsAdminResponse struct { + IsAdmin bool +} diff --git a/chainio/clients/elcontracts/writer_test.go b/chainio/clients/elcontracts/writer_test.go index ff4f9e3d..9a430279 100644 --- a/chainio/clients/elcontracts/writer_test.go +++ b/chainio/clients/elcontracts/writer_test.go @@ -818,9 +818,13 @@ func TestAcceptAdmin(t *testing.T) { require.NoError(t, err) require.Equal(t, gethtypes.ReceiptStatusSuccessful, receipt.Status) - isAdmin, err := chainReader.IsAdmin(context.Background(), accountAddr, pendingAdminAddr) + request := elcontracts.IsAdminRequest{ + AccountAddress: accountAddr, + AdminAddress: pendingAdminAddr, + } + response, err := chainReader.IsAdmin(context.Background(), nil, request) require.NoError(t, err) - require.True(t, isAdmin) + require.True(t, response.IsAdmin) }) t.Run("accept admin when already accepted", func(t *testing.T) { @@ -909,9 +913,13 @@ func TestRemoveAdmin(t *testing.T) { require.NoError(t, err) require.Equal(t, gethtypes.ReceiptStatusSuccessful, receipt.Status) - isAdmin, err := chainReader.IsAdmin(context.Background(), accountAddr, admin2) + request := elcontracts.IsAdminRequest{ + AccountAddress: accountAddr, + AdminAddress: admin2, + } + response, err := chainReader.IsAdmin(context.Background(), nil, request) require.NoError(t, err) - require.False(t, isAdmin) + require.False(t, response.IsAdmin) }) t.Run("remove admin 2 when already removed", func(t *testing.T) {