Skip to content

Instantly share code, notes, and snippets.

@leighmcculloch
Last active June 20, 2025 12:41
Show Gist options
  • Select an option

  • Save leighmcculloch/63e75c6553390ece7e27f262e7dc3c0c to your computer and use it in GitHub Desktop.

Select an option

Save leighmcculloch/63e75c6553390ece7e27f262e7dc3c0c to your computer and use it in GitHub Desktop.
Example using a @stellar/stellar-sdk contract client

Example using a @stellar/stellar-sdk contract client

Uses the NPM @stellar/stellar-sdk package, and demonstrates using a contract client to call a function.

Uses the Deno Runtime for JavaScript.

Usage

With Deno:

deno task run

Without Deno Installed:

npx deno task run

Example

$ deno task run
Tx Hash: 3c0694ddcdea4f617c305eedcdad4f1db4975852fa9c7cc177695ba0853f510c
Status: SUCCESS
Log:
 - {"type":"diagnostic","topics":["fn_call",{"type":"Buffer","data":[41,92,132,161,18,149,105,176,115,179,214,249,171,83,95,73,205,113,240,117,243,96,4,213,169,125,196,60,73,210,76,75]},"increment"],"data":null}
 - {"contractId":"CAUVZBFBCKKWTMDTWPLPTK2TL5E424PQOXZWABGVVF64IPCJ2JGEWSXM","type":"diagnostic","topics":["fn_return","increment"],"data":21}
 - {"type":"diagnostic","topics":["core_metrics","read_entry"],"data":"2"}
 - {"type":"diagnostic","topics":["core_metrics","write_entry"],"data":"1"}
 - {"type":"diagnostic","topics":["core_metrics","ledger_read_byte"],"data":"816"}
 - {"type":"diagnostic","topics":["core_metrics","ledger_write_byte"],"data":"132"}
 - {"type":"diagnostic","topics":["core_metrics","read_key_byte"],"data":"84"}
 - {"type":"diagnostic","topics":["core_metrics","write_key_byte"],"data":"0"}
 - {"type":"diagnostic","topics":["core_metrics","read_data_byte"],"data":"132"}
 - {"type":"diagnostic","topics":["core_metrics","write_data_byte"],"data":"132"}
 - {"type":"diagnostic","topics":["core_metrics","read_code_byte"],"data":"684"}
 - {"type":"diagnostic","topics":["core_metrics","write_code_byte"],"data":"0"}
 - {"type":"diagnostic","topics":["core_metrics","emit_event"],"data":"0"}
 - {"type":"diagnostic","topics":["core_metrics","emit_event_byte"],"data":"0"}
 - {"type":"diagnostic","topics":["core_metrics","cpu_insn"],"data":"497640"}
 - {"type":"diagnostic","topics":["core_metrics","mem_byte"],"data":"1180796"}
 - {"type":"diagnostic","topics":["core_metrics","invoke_time_nsecs"],"data":"450321"}
 - {"type":"diagnostic","topics":["core_metrics","max_rw_key_byte"],"data":"48"}
 - {"type":"diagnostic","topics":["core_metrics","max_rw_data_byte"],"data":"132"}
 - {"type":"diagnostic","topics":["core_metrics","max_rw_code_byte"],"data":"684"}
 - {"type":"diagnostic","topics":["core_metrics","max_emit_event_byte"],"data":"0"}
{
"tasks": {
"run": "deno run --deny-ffi --deny-read --allow-env=npm_config_no_proxy,NPM_CONFIG_NO_PROXY,no_proxy,NO_PROXY,npm_config_https_proxy,NPM_CONFIG_HTTPS_PROXY,https_proxy,HTTPS_PROXY,npm_config_proxy,NPM_CONFIG_PROXY,all_proxy,ALL_PROXY --allow-net=friendbot.stellar.org,soroban-testnet.stellar.org:443 main.ts"
},
"imports": {
"@stellar/stellar-sdk": "npm:@stellar/stellar-sdk@^13.3.0"
}
}
{
"version": "5",
"specifiers": {
"npm:@stellar/stellar-sdk@^13.3.0": "13.3.0"
},
"npm": {
"@stellar/[email protected]": {
"integrity": "sha512-VVolPL5goVEIsvuGqDc5uiKxV03lzfWdvYg1KikvwheDmTBO68CKDji3bAZ/kppZrx5iTA8z3Ld5yuytcvhvOQ=="
},
"@stellar/[email protected]": {
"integrity": "sha512-90EArG+eCCEzDGj3OJNoCtwpWDwxjv+rs/RNPhvg4bulpjN/CSRj+Ys/SalRcfM4/WRC5/qAfjzmJBAuquWhkA==",
"dependencies": [
"@stellar/js-xdr",
"base32.js",
"bignumber.js",
"buffer",
"sha.js",
"tweetnacl"
],
"optionalDependencies": [
"sodium-native"
]
},
"@stellar/[email protected]": {
"integrity": "sha512-8+GHcZLp+mdin8gSjcgfb/Lb6sSMYRX6Nf/0LcSJxvjLQR0XHpjGzOiRbYb2jSXo51EnA6kAV5j+4Pzh5OUKUg==",
"dependencies": [
"@stellar/stellar-base",
"axios",
"bignumber.js",
"eventsource",
"feaxios",
"randombytes",
"toml",
"urijs"
]
},
"[email protected]": {
"integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q=="
},
"[email protected]": {
"integrity": "sha512-re4CqKTJaURpzbLHtIi6XpDv20/CnpXOtjRY5/CU32L8gU8ek9UIivcfvSWvmKEngmVbrUtPpdDwWDWL7DNHvg==",
"dependencies": [
"follow-redirects",
"form-data",
"proxy-from-env"
]
},
"[email protected][email protected]": {
"integrity": "sha512-unn6Vy/Yke6F99vg/7tcrvM2KUvIhTNniaSqDbam4AWkd4NhvDVSrQiRYVlNzUV2P7SPobkCK7JFVxrJk9btCg==",
"dependencies": [
"bare-module-resolve",
"bare-semver",
"bare-url"
],
"optionalPeers": [
"bare-url"
]
},
"[email protected][email protected]": {
"integrity": "sha512-C9COe/GhWfVXKytW3DElTkiBU+Gb2OXeaVkdGdRB/lp26TVLESHkTGS876iceAGdvtPgohfp9nX8vXHGvN3++Q==",
"dependencies": [
"bare-semver",
"bare-url"
],
"optionalPeers": [
"bare-url"
]
},
"[email protected]": {
"integrity": "sha512-uaIjxokhFidJP+bmmvKSgiMzj2sV5GPHaZVAIktcxcpCyBFFWO+YlikVAdhmUo2vYFvFhOXIAlldqV29L8126g=="
},
"[email protected]": {
"integrity": "sha512-tyfW2cQcB5NN8Saijrhqn0Zh7AnFNsnczRcuWODH0eYAXBsJ5gVxAUuNr7tsHSC6IZ77cA0SitzT+s47kot8Mw==",
"dependencies": [
"bare-os"
]
},
"[email protected]": {
"integrity": "sha512-UtggzHLiTrmFOC/ogQ+Hy7VfoKoIwrP1UFcYtTxoCUdLtsIErT8+SWtOC2DH/snT9h+xDrcBEPcwKei1mzemgg=="
},
"[email protected]": {
"integrity": "sha512-FgjDeR+/yDH34By4I0qB5NxAoWv7dOTYcOXwn73kr+c93HyC2lU6tnjifqUe33LKMJcDyCYPQjEAqgOQiXkE2Q==",
"dependencies": [
"bare-path"
]
},
"[email protected]": {
"integrity": "sha512-n3TkB02ixgBOhTvANakDb4xaMXnYUVkNoRFJjQflcqMQhyEKxEHdj3E6N8t8sUQ0mjH/3/JxzlXuz3ul/J90pQ=="
},
"[email protected]": {
"integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA=="
},
"[email protected]": {
"integrity": "sha512-EM7aMFTXbptt/wZdMlBv2t8IViwQL+h6SLHosp8Yf0dqJMTnY6iL32opnAB6kAdL0SZPuvcAzFr31o0c/R3/RA=="
},
"[email protected]": {
"integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==",
"dependencies": [
"base64-js",
"ieee754"
]
},
"[email protected]": {
"integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==",
"dependencies": [
"es-errors",
"function-bind"
]
},
"[email protected]": {
"integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
"dependencies": [
"delayed-stream"
]
},
"[email protected]": {
"integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ=="
},
"[email protected]": {
"integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==",
"dependencies": [
"call-bind-apply-helpers",
"es-errors",
"gopd"
]
},
"[email protected]": {
"integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g=="
},
"[email protected]": {
"integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw=="
},
"[email protected]": {
"integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==",
"dependencies": [
"es-errors"
]
},
"[email protected]": {
"integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==",
"dependencies": [
"es-errors",
"get-intrinsic",
"has-tostringtag",
"hasown"
]
},
"[email protected]": {
"integrity": "sha512-IzUmBGPR3+oUG9dUeXynyNmf91/3zUSJg1lCktzKw47OXuhco54U3r9B7O4XX+Rb1Itm9OZ2b0RkTs10bICOxA=="
},
"[email protected]": {
"integrity": "sha512-eghR0A21fvbkcQBgZuMfQhrXxJzC0GNUGC9fXhBge33D+mFDTwl0aJ35zoQQn575BhyjQitRc5N4f+L4cP708g==",
"dependencies": [
"is-retry-allowed"
]
},
"[email protected]": {
"integrity": "sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ=="
},
"[email protected]": {
"integrity": "sha512-hGfm/slu0ZabnNt4oaRZ6uREyfCj6P4fT/n6A1rGV+Z0VdGXjfOhVUpkn6qVQONHGIFwmveGXyDs75+nr6FM8w==",
"dependencies": [
"asynckit",
"combined-stream",
"es-set-tostringtag",
"mime-types"
]
},
"[email protected]": {
"integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA=="
},
"[email protected]": {
"integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==",
"dependencies": [
"call-bind-apply-helpers",
"es-define-property",
"es-errors",
"es-object-atoms",
"function-bind",
"get-proto",
"gopd",
"has-symbols",
"hasown",
"math-intrinsics"
]
},
"[email protected]": {
"integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==",
"dependencies": [
"dunder-proto",
"es-object-atoms"
]
},
"[email protected]": {
"integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg=="
},
"[email protected]": {
"integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ=="
},
"[email protected]": {
"integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==",
"dependencies": [
"has-symbols"
]
},
"[email protected]": {
"integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==",
"dependencies": [
"function-bind"
]
},
"[email protected]": {
"integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA=="
},
"[email protected]": {
"integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
},
"[email protected]": {
"integrity": "sha512-9xH0xvoggby+u0uGF7cZXdrutWiBiaFG8ZT4YFPXL8NzkyAwX3AKGLeFQLvzDpM430+nDFBZ1LHkie/8ocL06A=="
},
"[email protected]": {
"integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g=="
},
"[email protected]": {
"integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg=="
},
"[email protected]": {
"integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
"dependencies": [
"mime-db"
]
},
"[email protected]": {
"integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg=="
},
"[email protected]": {
"integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==",
"dependencies": [
"safe-buffer"
]
},
"[email protected][email protected]": {
"integrity": "sha512-KbXAD5q2+v1GJnkzd8zzbOxchTkStSyJZ9QwoCq3QwEXAaIlG3wDYRZGzVD357jmwaGY7hr5VaoEAL0BkF0Kvg==",
"dependencies": [
"bare-addon-resolve",
"bare-url"
]
},
"[email protected]": {
"integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ=="
},
"[email protected]": {
"integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==",
"dependencies": [
"inherits",
"safe-buffer"
],
"bin": true
},
"[email protected]": {
"integrity": "sha512-OnxSlN3uyY8D0EsLHpmm2HOFmKddQVvEMmsakCrXUzSd8kjjbzL413t4ZNF3n0UxSwNgwTyUvkmZHTfuCeiYSw==",
"dependencies": [
"require-addon"
]
},
"[email protected]": {
"integrity": "sha512-y/mWCZinnvxjTKYhJ+pYxwD0mRLVvOtdS2Awbgxln6iEnt4rk0yBxeSBHkGJcPucRiG0e55mwWp+g/05rsrd6w=="
},
"[email protected]": {
"integrity": "sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw=="
},
"[email protected]": {
"integrity": "sha512-HXgFDgDommxn5/bIv0cnQZsPhHDA90NPHD6+c/v21U5+Sx5hoP8+dP9IZXBU1gIfvdRfhG8cel9QNPeionfcCQ=="
}
},
"workspace": {
"dependencies": [
"npm:@stellar/stellar-sdk@^13.3.0"
]
}
}
import {
contract,
humanizeEvents,
Keypair,
Networks,
TransactionBuilder,
} from "@stellar/stellar-sdk";
// Setup a Keypair that will become the address and key for an account on testnet.
const kp = Keypair.random();
await fetch(`https://friendbot.stellar.org?addr=${kp.publicKey()}`);
// Create a client for an "increment" contract deployed on testnet.
const client = await contract.Client.from({
contractId: "CAUVZBFBCKKWTMDTWPLPTK2TL5E424PQOXZWABGVVF64IPCJ2JGEWSXM",
rpcUrl: "https://soroban-testnet.stellar.org",
networkPassphrase: "Test SDF Network ; September 2015",
publicKey: kp.publicKey(),
signTransaction: async (xdr) => {
const tx = TransactionBuilder.fromXDR(xdr, Networks.TESTNET);
tx.sign(kp);
return { signedTxXdr: tx.toXDR() };
},
});
// Build a tx that will call the contract's "increment" function with no parameters.
const tx = await client.increment();
// Sign and send the transaction.
const sent = await tx.signAndSend();
// Result.
console.log(`Tx Hash: ${sent.getTransactionResponse.txHash}`);
console.log(`Status: ${sent.getTransactionResponse.status}`);
console.log(`Log:`);
const events = humanizeEvents(sent.getTransactionResponse.diagnosticEventsXdr);
for (const eventRaw of events) {
const event = JSON.stringify(
eventRaw,
(_, v) => typeof v === "bigint" ? v.toString() : v,
);
console.log(` - ${event}`);
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment