TypeScript SDK
ZKLogin

ZkLogin

Utilities for working with zkLogin. Currently contains functionality to create and parse zkLogin signatures and compute zkLogin addresses.

To parse a serialized zkLogin signature

import { parseZkLoginSignature } from '@mysten/sui/zklogin';
 
const parsedSignature = await parseZkLoginSignature('BQNNMTY4NjAxMzAyO....');

Use getZkLoginSignature to serialize a zkLogin signature.

import { getZkLoginSignature } from '@mysten/sui/zklogin';
 
const serializedSignature = await getZkLoginSignature({ inputs, maxEpoch, userSignature });

To compute the address for a given address seed and iss you can use computeZkLoginAddressFromSeed

import { computeZkLoginAddressFromSeed } from '@mysten/sui/zklogin';
 
const address = computeZkLoginAddressFromSeed(0n, 'https://accounts.google.com');

To compute an address from jwt:

import { jwtToAddress } from '@mysten/sui/zklogin';
 
const address = jwtToAddress(jwtAsString, salt);

To compute an address from a parsed jwt:

import { computeZkLoginAddress } from '@mysten/sui/zklogin';
 
const address = computeZkLoginAddress({
	claimName,
	claimValue,
	iss,
	aud,
	userSalt: BigInt(salt),
});

To use zkLogin inside a multisig, see the Multisig Guide for more details.

Legacy addresses

When zklogin was first introduced, there was an inconsistency in how the address seed was computed. For backwards compatibility reasons there are 2 valid addresses for a given set of inputs. Methods that produce zklogin addresses all accept a legacyAddress boolean flag, either as their last parameter, or in their options argument.

import {
	computeZkLoginAddress,
	computeZkLoginAddressFromSeed,
	jwtToAddress,
	toZkLoginPublicIdentifier,
	genAddressSeed
} from '@mysten/sui/zklogin';
 
const address = jwtToAddress(jwtAsString, salt, true);
const address = computeZkLoginAddressFromSeed(0n, 'https://accounts.google.com', true);
const address = computeZkLoginAddress({
	claimName,
	claimValue,
	iss,
	aud,
	userSalt: BigInt(salt),
	legacyAddress: true,
});
const address = toZkLoginPublicIdentifier(
	genAddressSeed(userSalt, claimName, claimValue, aud),
	iss,
	{ legacyAddress: true }
).toSuiAddress();