Lemonade leverages the The Aragon OSx SDK to build an onchain community- designed to be neutral towards any Javascript framework, meaning it's compatible with various frameworks, including popular options like React, Vite, and Vue.
However, it's important to be aware that some crypto packages don't yet support server-side rendering, which means frameworks dependent on server-side rendering, such as NextJS, are not suitable. The SDK is compatible only with client-side frameworks.
Additionally, it should be noted that the documentation on this site is primarily based on Typescript. More information about Typescript can be found here.
SDK Installation The initial step is to integrate the Aragon OSx SDK into your project. This is done by installing the SDK package using either npm or yarn.
npm install @aragon/sdk-client
Configuring the Context
Next, you should configure the Aragon OSx SDK context in your application. This enables access to the SDK's functionalities. You can establish this context at any suitable point in your app.
To avoid multiple setups, it's advisable to implement it as a context hook within your Javascript application, particularly if you're utilizing frameworks like React, Vue, or similar. Alternatively, you can set it up in the main entry file of your application.
import { Wallet } from"@ethersproject/wallet";import { Context, ContextParams } from"@aragon/sdk-client";import { SupportedNetwork } from"@aragon/sdk-client-common";// Set up your IPFS API key. You can get one either by running a local node or by using a service like Infura or Alechmy.// Make sure to always keep these private in a file that is not committed to your public repository.exportconstIPFS_API_KEY:string="ipfs-api-key";// OPTION A: The simplest ContextParams you can have is this. This uses our default values and should work perfectly within your product.constminimalContextParams:ContextParams= {// Choose the network you want to use. You can use "goerli" (Ethereum) or "maticmum" (Polygon) for testing, or "mainnet" (Ethereum) and "polygon" (Polygon) for mainnet. network:SupportedNetwork.MAINNET, web3Providers:"https://eth.llamarpc.com",// This is the signer account who will be signing transactions for your app. You can use also use a specific account where you have funds, through passing it `new Wallet("your-wallets-private-key")` or pass it in dynamically when someone connects their wallet to your dApp. signer:Wallet.createRandom(),};// OPTION B: For a more advanced option, you can use the following ContextParams. This will allow you to use your own custom values if desired.exportconstcontextParams:ContextParams= {// Choose the network you want to use. You can use "goerli" (Ethereum) or "maticmum" (Mumbai) for testing, or "mainnet" (Ethereum) and "polygon" (Polygon) for mainnet. network:"goerli",// This is the account that will be signing transactions for your app. You can use also use a specific account where you have funds, through passing it `new Wallet("your-wallets-private-key")` or pass it in dynamically when someone connects their wallet to your dApp. signer:Wallet.createRandom(),// Optional on "rinkeby", "arbitrum-rinkeby" or "mumbai"// Pass the address of the `DaoFactory` contract you want to use. You can find it here based on your chain of choice: https://github.com/aragon/core/blob/develop/active_contracts.json// Optional. Leave it empty to use Aragon's DAO Factory contract and claim a dao.eth subdomain daoFactoryAddress:"0x1234381072385710239847120734123847123",// Optional. Pass the address of the ensRegistry for networks other than Mainnet or Goerli.// It will default to the registry deployed by Aragon. You can check them here: https://github.com/aragon/osx/blob/develop/active_contracts.json ensRegistryAddress:"0x1234381072385710239847120734123847123",// Choose your Web3 provider: Cloudfare, Infura, Alchemy, etc.// Remember to change the list of providers if a different network is selected web3Providers: ["https://rpc.ankr.com/eth_goerli"],// Optional. By default, it will use Aragon's provided endpoints.// They will switch depending on the network (production, development) ipfsNodes: [ { url:"https://test.ipfs.aragon.network/api/v0", headers: { "X-API-KEY":IPFS_API_KEY||"" }, }, ],// Optional. By default it will use Aragon's provided endpoints.// They will switch depending on the network (production, development) graphqlNodes: [ { url:"https://subgraph.satsuma-prod.com/aragon/core-goerli/api", }, ],};// After defining the context parameters, you'll use them to instantiate the Aragon SDK contextexportconstcontext:Context=newContext(contextParams); // or minimalContextParams// Instantiate the Aragon SDK contextexportconstminimalContext:Context=newContext(minimalContextParams);
Modify the context with additional parameters as needed throughout your application.
context.set({ network:1 });context.set({ signer:newWallet("private key") }); // if you're using wagmi library, you can also get the signer through their [`useSigner` method](https://wagmi.sh/react/hooks/useSigner) inside a `useEffect` hook.context.set(contextParams);