UNPKG

@xarmian/envoi-sdk

Version:

SDK for enVoi, a naming service for Voi Network

73 lines (72 loc) 2.52 kB
import algosdk from "algosdk"; import { CONTRACT } from "ulujs"; import { queryAddress, resolverAppId, vnsTokenAppId } from "./config.js"; import { isVoiAddress, namehash, stripNullBytes, uint8ArrayToBigInt, bigIntToUint8Array } from "./utils.js"; function createAlgodClient(config) { return new algosdk.Algodv2(config.token, config.url, config.port); } export function createChainResolver(userConfig) { const algodClient = createAlgodClient(userConfig); const ciResolver = new CONTRACT(resolverAppId, algodClient, null, { name: "resolver", description: "resolver", methods: [ { name: "name", args: [ { type: "byte[32]" } ], returns: { type: "byte[256]" } }, { name: "arc72_ownerOf", args: [ { type: "uint256" } ], returns: { type: "address" } } ], events: [] }, { addr: queryAddress, sk: new Uint8Array([]) }); return { getNameFromAddress: async (address) => { if (!isVoiAddress(address)) { return ''; } ciResolver.contractId = resolverAppId; const lookup = await namehash(`${address}.addr.reverse`); const nameR = await ciResolver.name(lookup); if (nameR.success) { return stripNullBytes(nameR.returnValue); } return ''; }, getAddressFromName: async (name) => { ciResolver.contractId = vnsTokenAppId; const lookup = uint8ArrayToBigInt(await namehash(`${name}`)); const nameR = await ciResolver.arc72_ownerOf(lookup); if (nameR.success) { return stripNullBytes(nameR.returnValue); } return ''; }, getNameFromToken: async (tokenId) => { try { ciResolver.contractId = resolverAppId; const tokenIdBigInt = BigInt(tokenId); const nameR = await ciResolver.name(bigIntToUint8Array(tokenIdBigInt)); if (nameR.success) { return stripNullBytes(nameR.returnValue); } return ''; } catch (error) { console.error('Error resolving token name:', error); return ''; } } }; }