8

While writing dispatchable methods on substrate pallets, is it possible to sign transaction from one wallet (wallet-1) and then forward that signed transaction to the blockchain from another wallet(wallet-2) so that the tx fees will be paid by wallet-2 but the transaction gets executed on behalf of wallet-1?

I have a use case where I want to create a pallet method that should only be exposed to a sudo wallet. This method would take signatures from other wallets, as args, and validate them on-chain.

PS: I, also, could only find signAndSend() method on Polkadot-js library, i.e. don't seem to find a way to do the signing and the sending to blockchain part in a two step process.

1
  • I cam across proxy-pallet. But that would require users to add proxy first using extrinsic call, which in my case won't be possible, as those accounts would not be having any balances
    – Non-named
    Commented Mar 25, 2022 at 8:23

1 Answer 1

8

The signAndSend in the JS API is actually a process you can split into 2 parts: .signAsync(...) and .send(...), internally the JS API does exactly that when calling signAndSend(...).

However even when splitting it like this, the signatory is responsible for paying the fees. When you sign a transaction, the signature actually is over the transaction payload, which includes the sender address and sender nonce, so in transaction validation both of these are checked as the originator.

In the case of Polkadot, the chicken-and-egg situation where the user has no funds but has to perform a transaction was done as part of the claims process. Here a user would attest that he/she own an account, and have an action performed, without having any funds.

The details for attest you can find here

Basically the way that process works is to sign transaction with some account and then submit an unsigned transaction. A signed extension then validates this information. A similar approach could be followed: get one account to create a signature on some data, and then use another account to send the transaction.

As you rightly point out, for the default proxy pallet, you need to have some funds reserved to be able to create a proxy. (But like in your example, the sender will pay the fees). The difference is that the full transaction is signed by the sender and all fees paid there, the account being proxied never gets involved after the initial setup.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.