Core SDK operations for MultiversX TypeScript/JavaScript - Entrypoints, Network Providers, and Transactions.
Install
npx skillscat add multiversx/mx-ai-skills/mvx-sdk-js-core Install via the SkillsCat registry.
SKILL.md
MultiversX SDK-JS Core Operations
This skill covers the fundamental building blocks of the @multiversx/sdk-core v15 library.
Entrypoints
Network-specific clients that simplify common operations:
| Entrypoint | Network | Default URL |
|---|---|---|
DevnetEntrypoint |
Devnet | https://devnet-api.multiversx.com |
TestnetEntrypoint |
Testnet | https://testnet-api.multiversx.com |
MainnetEntrypoint |
Mainnet | https://api.multiversx.com |
LocalnetEntrypoint |
Local | http://localhost:7950 |
import { DevnetEntrypoint } from "@multiversx/sdk-core";
// Default API
const entrypoint = new DevnetEntrypoint();
// Custom API
const entrypoint = new DevnetEntrypoint({ url: "https://custom-api.com" });
// Proxy mode (gateway)
const entrypoint = new DevnetEntrypoint({
url: "https://devnet-gateway.multiversx.com",
kind: "proxy"
});Entrypoint Methods
| Method | Description |
|---|---|
createAccount() |
Create a new account instance |
createNetworkProvider() |
Get underlying network provider |
recallAccountNonce(address) |
Fetch current nonce from network |
sendTransaction(tx) |
Broadcast single transaction |
sendTransactions(txs) |
Broadcast multiple transactions |
getTransaction(txHash) |
Fetch transaction by hash |
awaitCompletedTransaction(txHash) |
Wait for finality |
Network Providers
Lower-level network access:
| Provider | Use Case |
|---|---|
ApiNetworkProvider |
Standard API queries (recommended) |
ProxyNetworkProvider |
Direct node interaction via gateway |
const provider = entrypoint.createNetworkProvider();
// Or manual instantiation
import { ApiNetworkProvider } from "@multiversx/sdk-core";
const api = new ApiNetworkProvider("https://devnet-api.multiversx.com", {
clientName: "my-app",
requestsOptions: { timeout: 10000 }
});Provider Methods
| Method | Description |
|---|---|
getNetworkConfig() |
Chain ID, gas settings, etc. |
getNetworkStatus() |
Current epoch, nonce, etc. |
getBlock(blockHash) |
Fetch block data |
getAccount(address) |
Account balance, nonce |
getAccountStorage(address) |
Contract storage |
getTransaction(txHash) |
Transaction details |
awaitTransactionCompletion(txHash) |
Wait for finality |
queryContract(query) |
VM query (read-only) |
Transaction Lifecycle
// 1. Create account and sync nonce
const account = await Account.newFromPem("wallet.pem");
account.nonce = await entrypoint.recallAccountNonce(account.address);
// 2. Create transaction (via controller)
const controller = entrypoint.createTransfersController();
const tx = await controller.createTransactionForTransfer(
account,
account.getNonceThenIncrement(),
{ receiver, nativeAmount: 1000000000000000000n }
);
// 3. Send
const txHash = await entrypoint.sendTransaction(tx);
// 4. Wait for completion
const result = await entrypoint.awaitCompletedTransaction(txHash);
console.log("Status:", result.status);Best Practices
- Always sync nonce before creating transactions
- Use
awaitCompletedTransactionfor critical operations - Handle errors - network calls can fail
- Use appropriate timeouts for long operations
- Batch transactions when possible with
sendTransactions()