To sign a transaction a user / an account would need to have to have been register and authenticated by going through Register using SDK flow.
Session-Based Authentication
In order to use this flow, you must Authenticating with SDK first to obtain a JWT. Here is a sample of how to use it
Copy import { Passport } from "@0xpass/passport" ;
import { WebauthnSigner } from "@0xpass/webauthn-signer" ;
import { stringToHex } from "viem" ;
import { Passport } from "@0xpass/passport" ;
import { WebauthnSigner } from "@0xpass/webauthn-signer" ;
const signer = new WebauthnSigner ({
rpId : window . location .hostname ,
rpName : "rpName" ,
});
const passport = new Passport ({
scopeId : "insert_your_scope_id" ,
signer : signer
});
const userInput {
username : "insert_registered_username_here"
userDisplayName : "insert_registered_user_display_name_here"
}
await passport .setupEncryption ();
await passport .authenticate (userInput);
// Transaction Can be of type legacy (0x0),
// EIP2930 (0x01) or EIP1559 (0x02)
const transaction = {
nonce : "0" ,
maxPriorityFeePerGas : "0x9184E72A" ,
maxFeePerGas : "0x9184E72A" ,
to : "0xb89FF4E9AD6B33F69153fa710F9849f51712eEc4" ,
gas : "0x7530" ,
value : "0x2386F26FC10000" ,
chainId : "0x7A69" ,
type : "0x02"
}
// Generate a threshold signature
const signature = await passport .signTransaction (transaction);
console .log (signature); // This is an rlp encoded transaction signature
signTransaction Parameters
Parameter Description Example Values The transaction object to be signed, can be a Legacy, EIP2930, or EIP1559 transaction type
Copy {
"nonce" : "0" ,
"maxPriorityFeePerGas" : "0x9184E72A" ,
"maxFeePerGas" : "0x9184E72A" ,
"to" : "0xb89FF4E9AD6B33F69153fa710F9849f51712eEc4" ,
"gas" : "0x7530" ,
"value" : "0x2386F26FC10000" ,
"chainId" : "0x7A69" ,
"type" : "0x02"
}
signTransaction Response
A successful response will return the following, an RLP encoded transaction signature from the authenticated account that can be executed as a raw transaction.
Copy {
"jsonrpc" : "2.0" ,
"result" : "signed_transaction_here" ,
"id" : 1
}
Direct Passkey Authentication
Since you will be directly authenticating with Passkeys here, you don't need to go through authentication step. Here is a code sample:
Copy import { Passport } from "@0xpass/passport" ;
import { WebauthnSigner } from "@0xpass/webauthn-signer" ;
import { stringToHex } from "viem" ;
import { Passport } from "@0xpass/passport" ;
import { WebauthnSigner } from "@0xpass/webauthn-signer" ;
const signer = new WebauthnSigner ({
rpId : window . location .hostname ,
rpName : "rpName" ,
});
const passport = new Passport ({
scope_id : "insert_your_scope_id" ,
signer : signer
});
const userInput {
username : "insert_registered_username_here"
userDisplayName : "insert_registered_user_display_name_here"
}
await passport .setupEncryption ();
//This step is different for direct authentication
passport .setUserData (userInput)
// Transaction Can be of type legacy (0x0),
// EIP2930 (0x01) or EIP1559 (0x02)
const transaction = {
nonce : "0" ,
maxPriorityFeePerGas : "0x9184E72A" ,
maxFeePerGas : "0x9184E72A" ,
to : "0xb89FF4E9AD6B33F69153fa710F9849f51712eEc4" ,
gas : "0x7530" ,
value : "0x2386F26FC10000" ,
chainId : "0x7A69" ,
type : "0x02"
}
// Generate a threshold signature
const signature = await passport .signTransaction (transaction);
console .log (signature); // This is an rlp encoded transaction signature
signTransaction Parameters
Parameter Description Example Values The transaction object to be signed, can be a Legacy, EIP2930, or EIP1559 transaction type
Copy {
"nonce" : "0" ,
"maxPriorityFeePerGas" : "0x9184E72A" ,
"maxFeePerGas" : "0x9184E72A" ,
"to" : "0xb89FF4E9AD6B33F69153fa710F9849f51712eEc4" ,
"gas" : "0x7530" ,
"value" : "0x2386F26FC10000" ,
"chainId" : "0x7A69" ,
"type" : "0x02"
}
signTransaction Response
A successful response will return the following, an RLP encoded transaction signature from the authenticated account that can be executed as a raw transaction.
Copy {
"jsonrpc" : "2.0" ,
"result" : "signed_transaction_here" ,
"id" : 1
}
Last updated 3 months ago