Skip to main content

Custom Universal Signer

Overview

If you don't have a supported library signer or want to create a custom implementation, you can construct a Universal Signer manually.

Custom Universal Signer

PushChain.utils.signer.construct(account, {options}): Promise<UniversalSigner>

const account = {
address: '<WALLET_ADDRESS>',
chain: '<PushChain.CONSTANTS.CHAIN.CHAIN_TYPE'>
};

const customSignAndSendTransaction = async (unsignedTx) => {
return new Uint8Array('<RESPONSE_TO_SIGN_AND_SEND_TRANSACTION>');
};

const customSignMessage = async (data) => {
return new Uint8Array('<RESPONSE_TO_SIGN_MESSAGE>');
};

const customSignTypedData = async (typedDataArgs) => {
return new Uint8Array('<RESPONSE_TO_SIGN_TYPED_DATA>');
};

const skeleton = PushChain.utils.signer.construct(account, {
signMessage: customSignMessage,
signTransaction: customSignTransaction,
signTypedData: customSignTypedData
});

const universalSigner = await PushChain.utils.signer.toUniversal(skeleton);

TheseArgumentsare mandatory

ArgumentsTypeDescription
accountUniversalAccountAccount information containing address and chain
optionsObjectObject containing the signing function implementations
options.signAndSendTransaction(unsignedTx: Uint8Array) => Promise<Uint8Array>Function to sign transaction data
options.signMessage(data: Uint8Array) => Promise<Uint8Array>Function to sign raw message data
options.signTypedData(params) => Promise<Uint8Array>Function to sign typed data (EIP-712)
Returns `UniversalSignerSkeleton` <object>
// UniversalSignerSkeleton object
{
signerId: 'CustomGeneratedSigner',
account: {
chain: 'eip155:42101',
address: '0x98cA97d2FB78B3C0597E2F78cd11868cACF423C5'
},
signMessage: [AsyncFunction: customSignMessage],
signAndSendTransaction: [AsyncFunction: customSignAndSendTransaction],
signTypedData: [AsyncFunction: customSignTypedData]
}

Live Playground: Creating Custom Universal Signer from Ethers.js 👇.

VIRTUAL NODE IDE

Next Steps