@xarmian/envoi-sdk
Version:
SDK for enVoi, a naming service for Voi Network
73 lines (72 loc) • 2.52 kB
JavaScript
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 '';
}
}
};
}