Skip to content

Commit

Permalink
Fix create-gasless execute transaction
Browse files Browse the repository at this point in the history
  • Loading branch information
cgero-eth committed Apr 30, 2024
1 parent d4978d3 commit 0d0701c
Show file tree
Hide file tree
Showing 5 changed files with 69 additions and 3 deletions.
Original file line number Diff line number Diff line change
@@ -1,8 +1,9 @@
import {Client} from '@aragon/sdk-client';
import {useClient} from 'hooks/useClient';
import {useDaoDetailsQuery} from 'hooks/useDaoDetails';
import {PluginTypes} from 'hooks/usePluginClient';
import {GaslessPluginName, PluginTypes} from 'hooks/usePluginClient';
import {useParams} from 'react-router-dom';
import {useCreateExecuteGaslessProposalTransaction} from 'services/transactions/queries/useCreateExecuteGaslessProposalTransaction';
import {useCreateExecuteMultisigProposalTransaction} from 'services/transactions/queries/useCreateExecuteMultisigProposalTransaction';
import {useCreateExecuteTokenVotingProposalTransaction} from 'services/transactions/queries/useCreateExecuteTokenVotingProposalTransaction';

Expand Down Expand Up @@ -50,8 +51,23 @@ export const useCreateExecuteTransactionProposal = (
}
);

const {data: gaslessTransaction, isLoading: isGaslessTransactionLoading} =
useCreateExecuteGaslessProposalTransaction(
{
client: client as Client,
proposalId: proposalId as string,
},
{
enabled: enableHook && pluginType === GaslessPluginName,
}
);

return {
transaction: multisigTransaction ?? tokenVotingTransaction,
isLoading: isMultisigTransactionLoading || isTokenVotingTransactionLoading,
transaction:
multisigTransaction ?? tokenVotingTransaction ?? gaslessTransaction,
isLoading:
isMultisigTransactionLoading ||
isTokenVotingTransactionLoading ||
isGaslessTransactionLoading,
};
};
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
import {UseQueryOptions, useQuery} from '@tanstack/react-query';
import {IBuildExecuteGaslessProposalTransactionParams} from '../transactionsService.api';
import {transactionsQueryKeys} from '../queryKeys';
import {transactionsService} from '../transactionsService';
import {ITransaction} from '../domain/transaction';

export const useCreateExecuteGaslessProposalTransaction = (
params: IBuildExecuteGaslessProposalTransactionParams,
options?: Omit<UseQueryOptions<ITransaction>, 'queryKey'>
) => {
return useQuery({
queryKey: transactionsQueryKeys.createExecuteGaslessProposal(params),
queryFn: () =>
transactionsService.buildExecuteGaslessProposalTransaction(params),
...options,
});
};
8 changes: 8 additions & 0 deletions src/services/transactions/queryKeys.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,13 +8,15 @@ import type {
IBuildCreateGaslessProposalTransactionParams,
IBuildCreateMultisigProposalTransactionParams,
IBuildCreateTokenVotingProposalTransactionParams,
IBuildExecuteGaslessProposalTransactionParams,
} from './transactionsService.api';

export enum TransactionsQueryItem {
CREATE_DAO = 'CREATE_DAO',
VOTE_OR_APPROVAL = 'VOTE_OR_APPROVAL',
CREATE_EXECUTE_MULTISIG_PROPOSAL = 'CREATE_EXECUTE_MULTISIG_PROPOSAL',
CREATE_EXECUTE_TOKEN_VOTING_PROPOSAL = 'CREATE_EXECUTE_TOKEN_VOTING_PROPOSAL',
CREATE_EXECUTE_GASLESS_PROPOSAL = 'CREATE_EXECUTE_GASLESS_PROPOSAL',
CREATE_MULTISIG_PROPOSAL = 'CREATE_MULTISIG_PROPOSAL',
CREATE_TOKEN_VOTING_PROPOSAL = 'CREATE_TOKEN_VOTING_PROPOSAL',
CREATE_GASLESS_PROPOSAL = 'CREATE_GASLESS_PROPOSAL',
Expand All @@ -41,6 +43,12 @@ export const transactionsQueryKeys = {
TransactionsQueryItem.CREATE_EXECUTE_TOKEN_VOTING_PROPOSAL,
params,
],
createExecuteGaslessProposal: (
params: IBuildExecuteGaslessProposalTransactionParams
): QueryKey => [
TransactionsQueryItem.CREATE_EXECUTE_GASLESS_PROPOSAL,
params,
],
createMultisigProposal: (
params: IBuildCreateMultisigProposalTransactionParams
): QueryKey => [TransactionsQueryItem.CREATE_MULTISIG_PROPOSAL, params],
Expand Down
6 changes: 6 additions & 0 deletions src/services/transactions/transactionsService.api.ts
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ export interface IBuildVoteOrApprovalTransactionParams {
proposalId: string;
tryExecution?: boolean;
}

export interface IBuildExecuteMultisigProposalTransactionParams {
client: Client;
proposalId: string;
Expand All @@ -28,6 +29,11 @@ export interface IBuildExecuteTokenVotingProposalTransactionParams {
proposalId: string;
}

export interface IBuildExecuteGaslessProposalTransactionParams {
client: Client;
proposalId: string;
}

export interface IBuildCreateMultisigProposalTransactionParams {
client: Client;
actions?: DaoAction[];
Expand Down
19 changes: 19 additions & 0 deletions src/services/transactions/transactionsService.ts
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ import {
IBuildCreateMultisigProposalTransactionParams,
IBuildCreateTokenVotingProposalTransactionParams,
IBuildVoteOrApprovalTransactionParams,
IBuildExecuteGaslessProposalTransactionParams,
} from './transactionsService.api';
import {ITransaction} from './domain/transaction';
import {decodeProposalId, hexToBytes} from '@aragon/sdk-client-common';
Expand Down Expand Up @@ -124,6 +125,24 @@ class TransactionsService {
return transaction as ITransaction;
};

buildExecuteGaslessProposalTransaction = async (
params: IBuildExecuteGaslessProposalTransactionParams
): Promise<ITransaction> => {
const {proposalId, client} = params;

const signer = client.web3.getConnectedSigner();
const {pluginAddress, id} = decodeProposalId(proposalId);
const gaslessContract = VocdoniVoting__factory.connect(
pluginAddress,
signer
);

const transaction =
await gaslessContract.populateTransaction.executeProposal(id);

return transaction as ITransaction;
};

buildCreateMultisigProposalTransaction = async (
params: IBuildCreateMultisigProposalTransactionParams
): Promise<ITransaction> => {
Expand Down

0 comments on commit 0d0701c

Please sign in to comment.