Skip to content

Commit 52dfa5b

Browse files
authored
chore: made Account.signTransaction returns TransactionRequest (#3895)
1 parent 67b3c80 commit 52dfa5b

File tree

5 files changed

+72
-23
lines changed

5 files changed

+72
-23
lines changed

.changeset/good-horses-speak.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
"@fuel-ts/account": patch
3+
---
4+
5+
chore: made `Account.signTransaction` returns `TransactionRequest`

packages/account/src/account.ts

Lines changed: 54 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -885,14 +885,30 @@ export class Account extends AbstractAccount implements WithAddress {
885885
* @param transactionRequestLike - The transaction request to sign.
886886
* @returns A promise that resolves to the signature of the transaction.
887887
*/
888-
async signTransaction(transactionRequestLike: TransactionRequestLike): Promise<string> {
888+
async signTransaction(
889+
transactionRequestLike: TransactionRequestLike,
890+
connectorOptions: AccountSendTxParams = {}
891+
): Promise<string | TransactionRequest> {
889892
if (!this._connector) {
890893
throw new FuelError(
891894
ErrorCode.MISSING_CONNECTOR,
892895
'A connector is required to sign transactions.'
893896
);
894897
}
895-
return this._connector.signTransaction(this.address.toString(), transactionRequestLike);
898+
899+
const transactionRequest = transactionRequestify(transactionRequestLike);
900+
901+
const { transactionRequest: requestToSign, connectorsSendTxParams } =
902+
await this.setTransactionStateForConnectors({
903+
transactionRequest,
904+
connectorOptions,
905+
});
906+
907+
return this._connector.signTransaction(
908+
this.address.toString(),
909+
requestToSign,
910+
connectorsSendTxParams
911+
);
896912
}
897913

898914
/**
@@ -906,30 +922,20 @@ export class Account extends AbstractAccount implements WithAddress {
906922
transactionRequestLike: TransactionRequestLike,
907923
{ estimateTxDependencies = true, ...connectorOptions }: AccountSendTxParams = {}
908924
): Promise<TransactionResponse> {
909-
let transactionRequest = transactionRequestify(transactionRequestLike);
925+
const transactionRequest = transactionRequestify(transactionRequestLike);
910926

911927
// Check if the account is using a connector, and therefore we do not have direct access to the
912928
// private key.
913929
if (this._connector) {
914-
const { onBeforeSend, skipCustomFee = false } = connectorOptions;
915-
916-
transactionRequest = await this.prepareTransactionForSend(transactionRequest);
917-
918-
const params: FuelConnectorSendTxParams = {
919-
onBeforeSend,
920-
skipCustomFee,
921-
provider: {
922-
url: this.provider.url,
923-
cache: await serializeProviderCache(this.provider),
924-
},
925-
transactionState: transactionRequest.flag.state,
926-
transactionSummary: await this.prepareTransactionSummary(transactionRequest),
927-
};
930+
const response = await this.setTransactionStateForConnectors({
931+
transactionRequest,
932+
connectorOptions,
933+
});
928934

929935
const transaction: string | TransactionResponse = await this._connector.sendTransaction(
930936
this.address.toString(),
931-
transactionRequest,
932-
params
937+
response.transactionRequest,
938+
response.connectorsSendTxParams
933939
);
934940

935941
return typeof transaction === 'string'
@@ -940,6 +946,7 @@ export class Account extends AbstractAccount implements WithAddress {
940946
if (estimateTxDependencies) {
941947
await this.provider.estimateTxDependencies(transactionRequest);
942948
}
949+
943950
return this.provider.sendTransaction(transactionRequest, {
944951
estimateTxDependencies: false,
945952
});
@@ -1113,4 +1120,32 @@ export class Account extends AbstractAccount implements WithAddress {
11131120
);
11141121
}
11151122
}
1123+
1124+
/** @hidden * */
1125+
private async setTransactionStateForConnectors(params: {
1126+
transactionRequest: TransactionRequest;
1127+
connectorOptions: AccountSendTxParams;
1128+
}): Promise<{
1129+
transactionRequest: TransactionRequest;
1130+
connectorsSendTxParams: FuelConnectorSendTxParams;
1131+
}> {
1132+
const { transactionRequest: requestToPrepare, connectorOptions } = params;
1133+
1134+
const { onBeforeSend, skipCustomFee = false } = connectorOptions;
1135+
1136+
const transactionRequest = await this.prepareTransactionForSend(requestToPrepare);
1137+
1138+
const connectorsSendTxParams: FuelConnectorSendTxParams = {
1139+
onBeforeSend,
1140+
skipCustomFee,
1141+
provider: {
1142+
url: this.provider.url,
1143+
cache: await serializeProviderCache(this.provider),
1144+
},
1145+
transactionState: requestToPrepare.flag.state,
1146+
transactionSummary: await this.prepareTransactionSummary(requestToPrepare),
1147+
};
1148+
1149+
return { transactionRequest, connectorsSendTxParams };
1150+
}
11161151
}

packages/account/src/connectors/fuel-connector.ts

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import type { HashableMessage } from '@fuel-ts/hasher';
44
import { EventEmitter } from 'events';
55

66
import type { Asset } from '../assets/types';
7-
import type { TransactionRequestLike, TransactionResponse } from '../providers';
7+
import type { TransactionRequest, TransactionRequestLike, TransactionResponse } from '../providers';
88

99
import { FuelConnectorEventTypes } from './types';
1010
import type {
@@ -41,7 +41,11 @@ interface Connector {
4141
signMessage(address: string, message: HashableMessage): Promise<string>;
4242
// #endregion fuel-connector-method-signMessage
4343
// #region fuel-connector-method-signTransaction
44-
signTransaction(address: string, transaction: TransactionRequestLike): Promise<string>;
44+
signTransaction(
45+
address: string,
46+
transaction: TransactionRequestLike,
47+
params?: FuelConnectorSendTxParams
48+
): Promise<string | TransactionRequest>;
4549
// #endregion fuel-connector-method-signTransaction
4650
// #region fuel-connector-method-sendTransaction
4751
sendTransaction(
@@ -185,7 +189,11 @@ export abstract class FuelConnector extends EventEmitter implements Connector {
185189
*
186190
* @returns Transaction signature
187191
*/
188-
async signTransaction(_address: string, _transaction: TransactionRequestLike): Promise<string> {
192+
async signTransaction(
193+
_address: string,
194+
_transaction: TransactionRequestLike,
195+
_params?: FuelConnectorSendTxParams
196+
): Promise<string | TransactionRequest> {
189197
throw new FuelError(FuelError.CODES.NOT_IMPLEMENTED, 'Method not implemented.');
190198
}
191199

packages/account/src/connectors/types/connector-types.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ export enum FuelConnectorMethods {
1010
accounts = 'accounts',
1111
currentAccount = 'currentAccount',
1212
// Signature methods
13+
signTransaction = 'signTransaction',
1314
signMessage = 'signMessage',
1415
sendTransaction = 'sendTransaction',
1516
// Assets metadata methods

packages/account/src/providers/transaction-request/transaction-request.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -324,7 +324,7 @@ export abstract class BaseTransactionRequest implements BaseTransactionRequestLi
324324
const accounts = Array.isArray(account) ? account : [account];
325325
await Promise.all(
326326
accounts.map(async (acc) => {
327-
this.addWitness(await acc.signTransaction(<TransactionRequestLike>this));
327+
this.addWitness((await acc.signTransaction(<TransactionRequestLike>this)) as string);
328328
})
329329
);
330330

0 commit comments

Comments
 (0)