UNPKG

@samudai_xyz/web3-sdk

Version:

## All in one web3 integrations for Samudai

326 lines (221 loc) 7.7 kB
# web3-sdk-samudai ## All in one web3 integrations for Samudai ## Current Integrations on SDK SDK currently has the following for the web3 integrations - Gnosis - Gnosis for onchain payments - Lit Protocol - For token gating - NFT-PPFs - Fetching of NFT profile photos for users - SIWE - Sign in with ethereum - Snapshot - Snapshot for proposals ## Installation Dillinger requires [Node.js](https://nodejs.org/). ```sh npm i web3-sdk-samudai ``` ## Usage The SDK has the following components and the below table provides an overview to initialize them. | Plugin | README | | ------------ | --------------------------------------------------------------------------------------------- | | Gnosis | `const gnosis = new Gnosis(provider: Web3Provider, chaindId: number)` | | Lit Protocol | `const litProtocol = new LitProtocol()` | | NFT PPFs | `const nftPPfs = new NFTProfile()` | | SIWE | `const siwe = new Siwe(provider: Web3Provider)` | | Snapshot | `const snapshot = new Snapshot(spaceId: string, networkType: number, provider: Web3Provider)` | ## Gnosis APIs Gnosis APis are used to create transactions on the multisig and fetch transactions. To use Gnosis ### Initialize gnosis: ```sh const gnosis = new Gnosis(provider: Web3Provider, chaindId: number) ``` ### To create a single gnosis transaction ```sh const result = await gnosis.createSingleGnosisTx(receiverAddress: string, value: string, safeAddress: string, senderAddress: string) ``` > Param 1: `safeAddress` Gnosis safe address. > Param 2: `receiverAddress` Wallet address of the user whom the funds is being sent. > Param 3: `value` ETH value in wei. > Param 4: `senderAddress` Waller address of the sender ### To create a batch gnosis transaction ```sh const result = await gnosis.createBatchGnosisTx(safeAddress: string, receiverAddresses: string[], value: string, senderAddress: string) ``` > Param 1: `safeAddress` Gnosis safe address. > Param 2: `receiverAddresses` Wallet addresses of the users whom the funds is being sent. > Param 3: `value` ETH value in wei. > Param 4: `senderAddress` Waller address of the sender ### To get pending transactions for a safe ```sh const result = await gnosis.getPendingTransactions(safeAddress: string) ``` > Param 1: `safeAddress` Gnosis safe address. Example ```sh const result = await gnosis.getPendingTransactions("0xE666431e8Ba10B17D296aB16A4FF8d9A552eb488") ``` ### To get past / executed transactions for a safe ```sh const result = await gnosis.getExecutedTransactions(safeAddress: string) ``` > Param 1: `safeAddress` Gnosis safe address. Example ```sh const result = await gnosis.getExecutedTransactions("0xE666431e8Ba10B17D296aB16A4FF8d9A552eb488") ``` ### To get transactions details, status of a transactions for a safe transaction hash ```sh const result = await gnosis.getTransactionDetails(safeTxHash: string) ``` > Param 1: `safeTxHash` Transaction hash of a particular safe transaction. Example ```sh const result = await gnosis.getTransactionDetails("0x4a429ae97dd5bac92e9eef8e28fba94cf8813474c485228e58d81f04c332c399") ``` ### To connect a gnosis safe ```sh const result = await gnosis.connectGnosis(userAddress: string) ``` > Param 1: `userAddress` User address This will return the safes for which user is an owner and also list of all other owners for a safe Example ```sh const result = await gnosis.gnosisConnect("0x4a429ae97dd5bac92e9eef8e28fba94cf8813474c485228e58d81f04c332c399") ``` --- ## NFT Profile APIs NFT Profile APIs are used to fetch the NFTs owned by the user on ETH and Polygon which can later be set as profile photos ### Initialize NFT Profile Photos: ```sh const nftProfile = new NFTProfile() ``` ### To get ETH based NFTs ```sh const ethNFTs = await nftProfile.getEthProfilePPs(ethUserAddress: string) ``` > Param 1: `ethUserAddress` Wallet Address of the user. Example ```sh const ethNFTs = await nftProfile.getEthProfilePPs(0xB1BFB38a527D05442D48068ca9798FD3E5d6ce0F) ``` ### To get Polygon based NFTs ```sh const polygonNFTs = await nftProfile.getMaticProfilePPs(maticUserAddress: string) ``` > Param 1: `maticUserAddress` Wallet Address of the user. --- ## Lit Protocol APIs Lit Protocol APIs are used to for token gating To use Lit Protocol ### Initialize Lit Protocol: ```sh const litProtocol = new LitProtocol() ``` ### To create a Lit protocol gating ```sh const tokenGating = await litProtocol.init( chain: string, contractAddress: string, typeOfGating: TokenGatingType, baseUrl: string, path: string, memberId: string, tokenId?: string ) ``` > Param 1: `chain` The chain on which the Token Gating will be created. Refer the list of chains below the example. > Param 2: `contractAddress` Contract Address of the Token. > Param 3: `typeOfGating` Enum value of which type of Gating. Refer the enum list below the example. > Param 4: `baseUrl` Url of the url of frontend. > Param 5: `path` The Path that requires the token gating. > Param 6: `memberId` Member UUID that is being authenticated. > Param 7: `tokenId` Token ID of a NFT for verification. > Returns: `jwt` JWT token can be set on cookies or anything on the frontend and needs to be sent to SDK for verification Example ```sh const tokenGating = await litProtocol.init( chain: "rinkeby", contractAddress: "0xB1BFB38a527D05442D48068ca9798FD3E5d6ce0F", typeOfGating: 0, baseUrl: "http://samudai.xyz", path: '/dao/f298865a-c3a3-46e1-8ff6-ffd63ec23257', memberId: aaaff17d-c166-430d-9afc-82c88394c7b8, ) ``` List of chains | chain | | ------ | | ethereum | | rinkeby | | polygon | | goerli | | mumbai | For further chain supports based on EVM use the following list https://developer.litprotocol.com/supportedChains Enum for TokenGatingType ```sh enum TokenGatingType = { ERC20, ERC721, ERC1155, } ERC20 = 0 ERC721 = 1 ERC1155 = 2 ``` ### To verify the user ```sh const result = await litProtocol.verifyLit(jwt: string, memberId: string) ``` > Param 1: `jwt` JWT generated by the init functionality. > Param 2: `memberId` Member UUID > Returns: verifyLit returns true / false based on the access conditions --- ## SIWE SIWE is used for Sign in with ethereum To use SIWE ### Initialize SIWE: ```sh const siwe = new Siwe(provider: Web3Provider) ``` ### To sign in user, you need to ask the user to sign a message and push the users to required screen after successful signing ```sh const result = siwe.walletSignIn(domain: string) ``` > Param 1: `domain` URL of the frontend Example ``` const result = siwe.walletSignIn("https://samudai.xyz") ``` --- ## Snapshot Snapshot is used for fetching proposals and voting for them. To use snapshot ### Initialize Snapshot: ```sh const snapshot = new Snapshot(spaceId: string, networkType: number, provider: Web3Provider) ``` > Param 1: `spaceId` Space ID in Snapshot > Param 2: `networkType` 0 for Ethereum, 1 for testnets > Param 3: `provider` Web3Provider Example ``` const snapshot = new Snapshot("biryani.eth", 1, provider) ``` ### To get information about a Space ```sh const result = snapshot.getSpace() ``` ### To get active proposals ```sh const result = snapshot.getActiveProposals() ``` ### To get Recent proposals ```sh const result = snapshot.getRecentProposals() ``` ### To cast a vote ```sh const result = snapshot.castVote(proposalId: string, choice: number,account: any) ```