@faktoryfun/core-sdk
Version:
The official SDK for interacting with Faktory tokens and DEX contracts
106 lines (105 loc) • 3.57 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.getNetworkByPrincipal = getNetworkByPrincipal;
exports.validateNetwork = validateNetwork;
exports.getNetwork = getNetwork;
exports.getTxVersion = getTxVersion;
exports.getApiUrl = getApiUrl;
exports.callReadOnlyFunction = callReadOnlyFunction;
exports.cvToJSON = cvToJSON;
exports.logBroadcastResult = logBroadcastResult;
exports.getNonces = getNonces;
exports.getNextNonce = getNextNonce;
const common_1 = require("@stacks/common");
const network_1 = require("@stacks/network");
const transactions_1 = require("@stacks/transactions");
function getNetworkByPrincipal(principal) {
if ((0, transactions_1.validateStacksAddress)(principal)) {
const prefix = principal.substring(0, 2);
if (prefix === "SP" || prefix === "SM") {
return "mainnet";
}
else if (prefix === "ST" || prefix === "SN") {
return "testnet";
}
}
console.log("Invalid principal, using testnet");
return "testnet";
}
function validateNetwork(network) {
if (network &&
["mainnet", "testnet", "devnet", "mocknet"].includes(network)) {
return network;
}
return "mainnet";
}
function getNetwork(network) {
switch (network) {
case "mainnet":
return new network_1.StacksMainnet();
case "testnet":
return new network_1.StacksTestnet();
default:
return new network_1.StacksTestnet();
}
}
function getTxVersion(network) {
switch (network) {
case "mainnet":
return common_1.TransactionVersion.Mainnet;
case "testnet":
return common_1.TransactionVersion.Testnet;
default:
return common_1.TransactionVersion.Testnet;
}
}
function getApiUrl(network) {
switch (network) {
case "mainnet":
return "https://api.hiro.so";
case "testnet":
return "https://api.testnet.hiro.so";
default:
return "https://api.testnet.hiro.so";
}
}
async function callReadOnlyFunction(options) {
return (0, transactions_1.callReadOnlyFunction)(options);
}
function cvToJSON(val) {
return (0, transactions_1.cvToJSON)(val);
}
async function logBroadcastResult(broadcastResponse, from) {
if ("error" in broadcastResponse) {
console.error("Transaction failed to broadcast");
console.error(`Error: ${broadcastResponse.error}`);
if (broadcastResponse.reason) {
console.error(`Reason: ${broadcastResponse.reason}`);
}
if (broadcastResponse.reason_data) {
console.error(`Reason Data: ${JSON.stringify(broadcastResponse.reason_data, null, 2)}`);
}
}
else {
console.log("Transaction broadcasted successfully!");
if (from)
console.log(`FROM: ${from}`);
console.log(`TXID: 0x${broadcastResponse.txid}`);
}
}
// gets the current nonce for the account from the API
// more reliable than @stacks/transactions getNonce()
async function getNonces(network, address) {
const apiUrl = getApiUrl(network);
const response = await fetch(`${apiUrl}/extended/v1/address/${address}/nonces`);
if (!response.ok) {
throw new Error(`Failed to get nonce: ${response.statusText}`);
}
const data = await response.json();
return data;
}
async function getNextNonce(network, address) {
const nonces = await getNonces(network, address);
const nextNonce = nonces.possible_next_nonce;
return nextNonce;
}