Quick Start
Start Here
This guide will walk you through the process of creating and executing your first Lit Action. The steps include connecting to the Lit network, writing and deploying your Lit Action code, and finally executing the Lit Action. You can use the provided code snippets to execute this on your own machine.
If you're instead looking to learn more about how Lit Actions work, check out the Overview page.
This guide uses Lit's Datil-dev Network which is designed for application developers aiming to get familiar with the Lit SDK. Payment is not required on this network, and therefore the code is less complex. For those aiming to build production-ready applications, the Datil-test Network is recommended. Once ready, these applications can then be deployed on Datil, the Lit production network. To see the available Lit networks, check out this page.
For developers looking to explore beyond the basics, check out the Advanced Topics for more developed uses of Lit Actions.
Installing the Lit SDK
To get started with Lit Actions and the Lit SDK, you'll need to install these packages:
- npm
- yarn
npm install @lit-protocol/lit-node-client \
@lit-protocol/constants \
@lit-protocol/auth-helpers \
ethers@v5
yarn add @lit-protocol/lit-node-client \
@lit-protocol/constants \
@lit-protocol/auth-helpers \
ethers@v5
If you're just getting started with Lit or development in general, we recommend taking a look at our Starter Guides. These guides provide an environment for getting started with the Lit SDK.
You should use at least Node v19.9.0 for
- crypto support.
- webcrypto library support if targeting
web
.
Walkthrough
Connecting to the Lit Network
Running a Lit Action requires an active connection to the Lit network. This can be done by initializing a LitNodeClient instance, which will establish a connection to the Lit nodes.
We will also be initializing an Ethereum wallet using the ETHEREUM_PRIVATE_KEY
environment variable, which is required for generating session signatures in this example.
Click here to see how this is done
import { LitNodeClient } from "@lit-protocol/lit-node-client";
import { LIT_NETWORK, LIT_RPC } from "@lit-protocol/constants";
import * as ethers from "ethers";
const litNodeClient = new LitNodeClient({
litNetwork: LIT_NETWORK.DatilDev,
debug: false
});
await litNodeClient.connect();
const ethersWallet = new ethers.Wallet(
process.env.ETHEREUM_PRIVATE_KEY, // Replace with your private key
new ethers.providers.JsonRpcProvider(LIT_RPC.CHRONICLE_YELLOWSTONE)
);
Generating Session Signatures
Session signatures are used to authenticate and maintain an active connection to the nodes in the Lit network. They are required when executing a Lit Action or any other functionality (i.e. signing) with Lit. There is more than one way to generate session signatures, and that those methods can be found on their dedicated pages in the Session Signatures section.
Click here to see how this is done
import { LIT_ABILITY } from "@lit-protocol/constants";
import {
LitActionResource,
createSiweMessage,
generateAuthSig,
} from "@lit-protocol/auth-helpers";
const sessionSignatures = await litNodeClient.getSessionSigs({
chain: "ethereum",
expiration: new Date(Date.now() + 1000 * 60 * 10).toISOString(), // 10 minutes
resourceAbilityRequests: [
{
resource: new LitActionResource("*"),
ability: LIT_ABILITY.LitActionExecution,
},
],
authNeededCallback: async ({
uri,
expiration,
resourceAbilityRequests,
}) => {
const toSign = await createSiweMessage({
uri,
expiration,
resources: resourceAbilityRequests,
walletAddress: await ethersWallet.getAddress(),
nonce: await litNodeClient.getLatestBlockhash(),
litNodeClient,
});
return await generateAuthSig({
signer: ethersWallet,
toSign,
});
},
});
Storing the Lit Action
There are two ways to store a Lit Action. You can either write the code inline, or you can use IPFS to store the code. In this example, we'll use the inline method.
Click here to see how this is done
const _litActionCode = async () => {
if (magicNumber >= 42) {
LitActions.setResponse({ response:"The number is greater than or equal to 42!" });
} else {
LitActions.setResponse({ response: "The number is less than 42!" });
}
}
const litActionCode = `(${_litActionCode.toString()})();`;
Executing the Lit Action
To execute the Lit Action, we use the executeJs
function. You'll need to pass in the sessionSigs
and code
parameters. The jsParams
parameter is optional, and can be used to pass in parameters to the Lit Action.
If you'd like to use the IPFS method mentioned previously, you would instead use ipfsId
instead of code: litActionCode
, and the ipfsId
would be the IPFS CID of the Lit Action code.
More details on the executeJs
method can be found here.
Click here to see how this is done
const response = await litNodeClient.executeJs({
sessionSigs: sessionSignatures,
code: litActionCode,
jsParams: {
magicNumber: 43,
}
});
Learn More
By now you should have successfully written and executed a Lit Action. If you’d like to learn more about what’s possible with Lit Actions, check out the Advanced Topics section.
Not finding the answer you're looking for? Share your feedback on these docs by creating an issue in our GitHub Issues and Reports repository or get support by visiting our Support page.