Creating zkSend Links
Products and services that incorporate zkSend links may be subject to financial regulations, including obtaining money transmitter licenses in jurisdictions where you provide your services. It is the developer's responsibility to ensure compliance with all relevant laws and obtain any necessary licenses. The information provided by Mysten Labs is not legal advice, and developers should consult with a qualified legal professional to address their specific circumstances.
Limitations
- zkSend only supports Mainnet and Testnet at this time.
- Objects within links must be publicly transferrable.
Create a link
You can start creating your own zkSend link using the ZkSendLinkBuilder
class. This class
constructor takes an object with the following options:
sender
(required) - Required. The address of the sender / creator of the link.client
(optional) - The@mysten/sui
client used to fetch data to construct the link. If not provided, a default client will be used.network
(optional) - The Sui network that the link will be created for. Defaults tomainnet
.
Adding SUI to the link
You can add SUI to the link by calling link.addClaimableMist()
. This method takes the following
params:
amount
(required) - The amount of MIST (the base unit of SUI) to add to the link.
Adding non-SUI coins to the link
You can add non-SUI coins to the link by calling link.addClaimableBalance()
. This method takes the
following params:
coinType
(required) - The coin type of the coin to add to the link (e.g.0x2::sui::SUI
).amount
(required) - The amount of the coin to add to the link. Represented in the base unit of the coin.
The SDK will automatically perform the necessary coin management logic to transfer the defined amount, such as merging and splitting coin objects.
Adding objects to the link
You can add a publicly-transferrable object to the link by calling link.addClaimableObject()
. This
method takes the following params:
id
(required) - The ID of the object. This must be owned by thesender
you configured when creating the link.
Adding objects created in the same transaction
You can create objects to add to links in the same transaction the link is created in by using
link.addClaimableObjectRef()
ref
(required) - The reference to the object you want to add to the link.type
(required) - The move type of the object you are adding
Getting the link URL
At any time, you can get the URL for the link by calling link.getLink()
.
Submitting the link transaction
Once you have built your zkSend link, you need to execute a transaction to transfer assets and make the link claimable.
You can call the link.createSendTransaction()
method, which returns a Transaction
object that
you can sign and submit to the blockchain.
If you have a keypair you would like to send the transaction with, you can use the create
method
as shorthand for creating the send transaction, signing it, and submitting it to the blockchain.
Claiming a link
To claim a link via the SDK you can use the ZkSendLink
class:
Listing links you have created
To list the links created by a specific address, you can use the listCreatedLinks
function:
Listing transactions and the links they created
getSentTransactionsWithLinks
will return a list of transactions sent by the provided address. Each
result will include the transaction that was sent, along with an array containing any links that
were created or regenerated by that transaction.
By default getSentTransactionsWithLinks
will not load the assets for claimed links. This can be
changed by passing loadClaimedAssets: true
to the function.
Regenerating links
If you lose a link you've created, you can re-generate the link (this can only done from the address that originally created the link):
Bulk link creation
To create multiple links in a single transaction, you can use ZkSendLinkBuilder.createLinks
: