Allow external signers to modify the payload (#6030)

* remove validateSignedTransaction

* add optional allowCallDataAlteration defaulting to true

* nit

* spacing

* Update packages/api/src/submittable/createClass.ts
This commit is contained in:
Thibaut Sardan
2024-11-19 09:18:14 -05:00
committed by GitHub
parent c998d261fd
commit cb1078ac4b
2 changed files with 6 additions and 1 deletions
+5 -1
View File
@@ -325,6 +325,7 @@ export function createClass <ApiType extends ApiTypes> ({ api, apiType, blockHas
#signViaSigner = async (address: Address | string | Uint8Array, options: SignatureOptions, header: Header | null): Promise<SignerInfo> => {
const signer = options.signer || api.signer;
const allowCallDataAlteration = options.allowCallDataAlteration ?? true;
if (!signer) {
throw new Error('No signer specified, either via api.setSigner or via sign options. You possibly need to pass through an explicit keypair for the origin so it can be used for signing.');
@@ -367,7 +368,10 @@ export function createClass <ApiType extends ApiTypes> ({ api, apiType, blockHas
throw new Error(`When using the signedTransaction field, the transaction must be signed. Recieved isSigned: ${ext.isSigned}`);
}
this.#validateSignedTransaction(payload, ext);
if (!allowCallDataAlteration) {
this.#validateSignedTransaction(payload, ext);
}
// This is only used for signAsync - signAndSend does not need to adjust the super payload or
// add the signature.
super.addSignature(address, result.signature, newSignerPayload.toPayload());
+1
View File
@@ -188,6 +188,7 @@ export interface IExtrinsicEra extends Codec {
}
export interface SignatureOptions {
allowCallDataAlteration?: boolean;
blockHash: Uint8Array | string;
era?: IExtrinsicEra;
genesisHash: Uint8Array | string;