From f2e0e636526dd00388cc3b401c772e790138fac7 Mon Sep 17 00:00:00 2001 From: Damian Ramirez Date: Fri, 24 Jan 2025 10:24:34 -0300 Subject: [PATCH] implement request-response pattern for IsPendingAdmin and update tests. --- chainio/clients/elcontracts/reader.go | 20 ++++++++++++-------- chainio/clients/elcontracts/reader_test.go | 16 ++++++++++++---- chainio/clients/elcontracts/types.go | 9 +++++++++ chainio/clients/elcontracts/writer_test.go | 16 ++++++++++++---- 4 files changed, 45 insertions(+), 16 deletions(-) diff --git a/chainio/clients/elcontracts/reader.go b/chainio/clients/elcontracts/reader.go index e9bdf6df..379319a6 100644 --- a/chainio/clients/elcontracts/reader.go +++ b/chainio/clients/elcontracts/reader.go @@ -1036,19 +1036,23 @@ func (r *ChainReader) ListAdmins( func (r *ChainReader) IsPendingAdmin( ctx context.Context, - accountAddress gethcommon.Address, - pendingAdminAddress gethcommon.Address, -) (bool, error) { + blockNumber *big.Int, + request IsPendingAdminRequest, +) (IsPendingAdminResponse, error) { + if r.permissionController == nil { + return IsPendingAdminResponse{}, errors.New("PermissionController contract not provided") + } + isPendingAdmin, err := r.permissionController.IsPendingAdmin( - &bind.CallOpts{Context: ctx}, - accountAddress, - pendingAdminAddress, + &bind.CallOpts{Context: ctx, BlockNumber: blockNumber}, + request.AccountAddress, + request.PendingAdminAddress, ) // This call should not fail since it's a getter if err != nil { - return false, utils.WrapError("call to permission controller failed", err) + return IsPendingAdminResponse{}, utils.WrapError("call to permission controller failed", err) } - return isPendingAdmin, nil + return IsPendingAdminResponse{IsPendingAdmin: isPendingAdmin}, nil } func (r *ChainReader) IsAdmin( diff --git a/chainio/clients/elcontracts/reader_test.go b/chainio/clients/elcontracts/reader_test.go index c770ea5e..d2d558b9 100644 --- a/chainio/clients/elcontracts/reader_test.go +++ b/chainio/clients/elcontracts/reader_test.go @@ -709,9 +709,13 @@ func TestAdminFunctions(t *testing.T) { assert.NoError(t, err) t.Run("non-existent pending admin", func(t *testing.T) { - isPendingAdmin, err := chainReader.IsPendingAdmin(context.Background(), operatorAddr, pendingAdminAddr) + request := elcontracts.IsPendingAdminRequest{ + AccountAddress: operatorAddr, + PendingAdminAddress: pendingAdminAddr, + } + response, err := chainReader.IsPendingAdmin(context.Background(), nil, request) assert.NoError(t, err) - assert.False(t, isPendingAdmin) + assert.False(t, response.IsPendingAdmin) }) t.Run("list pending admins when empty", func(t *testing.T) { @@ -734,9 +738,13 @@ func TestAdminFunctions(t *testing.T) { assert.NoError(t, err) assert.Equal(t, receipt.Status, gethtypes.ReceiptStatusSuccessful) - isPendingAdmin, err := chainReader.IsPendingAdmin(context.Background(), operatorAddr, pendingAdminAddr) + requestPending := elcontracts.IsPendingAdminRequest{ + AccountAddress: operatorAddr, + PendingAdminAddress: pendingAdminAddr, + } + responsePending, err := chainReader.IsPendingAdmin(context.Background(), nil, requestPending) assert.NoError(t, err) - assert.True(t, isPendingAdmin) + assert.True(t, responsePending.IsPendingAdmin) requestListPending := elcontracts.ListPendingAdminsRequest{ AccountAddress: operatorAddr, diff --git a/chainio/clients/elcontracts/types.go b/chainio/clients/elcontracts/types.go index e59dc859..acfe93d4 100644 --- a/chainio/clients/elcontracts/types.go +++ b/chainio/clients/elcontracts/types.go @@ -401,3 +401,12 @@ type ListAdminsRequest struct { type ListAdminsResponse struct { Admins []common.Address } + +type IsPendingAdminRequest struct { + AccountAddress common.Address + PendingAdminAddress common.Address +} + +type IsPendingAdminResponse struct { + IsPendingAdmin bool +} diff --git a/chainio/clients/elcontracts/writer_test.go b/chainio/clients/elcontracts/writer_test.go index 3da27d2e..ff4f9e3d 100644 --- a/chainio/clients/elcontracts/writer_test.go +++ b/chainio/clients/elcontracts/writer_test.go @@ -740,9 +740,13 @@ func TestAddAndRemovePendingAdmin(t *testing.T) { require.NoError(t, err) require.Equal(t, gethtypes.ReceiptStatusSuccessful, receipt.Status) - isPendingAdmin, err := chainReader.IsPendingAdmin(context.Background(), operatorAddr, pendingAdmin) + request := elcontracts.IsPendingAdminRequest{ + AccountAddress: operatorAddr, + PendingAdminAddress: pendingAdmin, + } + response, err := chainReader.IsPendingAdmin(context.Background(), nil, request) require.NoError(t, err) - require.True(t, isPendingAdmin) + require.True(t, response.IsPendingAdmin) }) t.Run("add pending admin when already added", func(t *testing.T) { @@ -755,9 +759,13 @@ func TestAddAndRemovePendingAdmin(t *testing.T) { require.NoError(t, err) require.Equal(t, gethtypes.ReceiptStatusSuccessful, receipt.Status) - isPendingAdmin, err := chainReader.IsPendingAdmin(context.Background(), operatorAddr, pendingAdmin) + request := elcontracts.IsPendingAdminRequest{ + AccountAddress: operatorAddr, + PendingAdminAddress: pendingAdmin, + } + response, err := chainReader.IsPendingAdmin(context.Background(), nil, request) require.NoError(t, err) - require.False(t, isPendingAdmin) + require.False(t, response.IsPendingAdmin) }) }