This repository has been deprecated in favor of the stellar-sdk
package. Please read the migration guide for how to upgrade to that package. Future changes will only be made there.
- The package is now correctly marked in
npm
as deprecated.
- See the new deprecation warning at the top of this document and in the README.
- XDR has been upgraded to the latest
stellar-base
release, supporting the current stable XDR for Protocol 20 (#167).
- The
Server.getEvents
method now correctly parses responses without acontractId
field set: theevents[i].contractId
field on an event will be omitted if there was no ID in the event (e.g. for system events; (#172)). - The
Server.getEvents()
method will correctly parse the event value as anxdr.ScVal
rather than anxdr.DiagnosticEvent
(#172). - The
Server.getEvents()
method will correctly setstartLedger
to be a number rather than a string (#174).
- The
stellar-base
dependency has been upgraded to v10.0.0-beta.4 which contains a bugfix related to large sequence numbers (#170).
- Responses for
Server.getContractData
andServer.getLedgerEntries
now include anexpirationLedgerSeq
attribute on ledger data entries that have expiry information (#153). - The new
Server._simulateTransaction
method will return the raw response directly from the RPC server rather than parsing XDR fields (#160).
- The
stellar-base
dependency has been upgraded to v10.0.0-beta.3 which contains breaking changes related to auth helpers and some bugfixes (#158). - All endpoints will now automatically decode XDR structures whenever possible. In particular,
- For the
Server.getLedgerEntries
response (#154), we parse:entries
is now guaranteed to exist, but it may be emptyentries[i].key
is an instance ofxdr.LedgerKey
- the
entries[i].xdr
field is nowval
, instead entries[i].val
is an instance ofxdr.LedgerEntryData
- For the
Server.sendTransaction
response (#157), we parse:errorResultXdr
is renamed toerrorResult
- If it's present, it's an instance of
xdr.TransactionResult
- For the
Server.getEvents
response (#156), we parse:events[i].contractId
is now an instance ofContract
events[i].topic
is now a list of decodedxdr.ScVal
instancesevents[i].value.xdr
is now remapped directly toevents.value
events[i].value
is a decodedxdr.ScVal
instance
- For the
Server.sendTransaction
response (#157), we parse:errorResultXdr
is nowerrorResult
, a parsed instance ofxdr.TransactionResult
- For the
- If you want to continue to use the raw RPC responses, you can use the
_
-prefixed methods which will return the response directly:Server._getLedgerEntries
Server._sendTransaction
Server._getEvents
Server._simulateTransaction
Server._getTransaction
- The variations of responses from
simulateTransaction
were not always being parsed correctly (#146).
- This upgrades
stellar-base
which has a critical bugfix forContract.call()
not generating valid operations (#145, stellar-base#692).
Note: This version is currently only compatible with Stellar networks running [email protected]
, which corresponds to Preview 11, the final Protocol 20 preview (using stellar/stellar-xdr@9ac0264).
- The XDR has been upgraded to the final testnet version via the
stellar-base
dependency (v10.0.0-beta.0, #135). - The
simulateTransaction
endpoint will now return arestorePreamble
structure containing the recommended footprint and minimum resource fee for anOperation.restoreFootprint
which would have made the simulation succeed (#132).
- Result types are now handled correctly by
ContractSpec
(#138).
- The
stellar-base
dependency has been updated tov10.0.0-soroban.8
, fixing some bugs and adding some small things. Refer to its release notes (stellar/js-stellar-base#687) for details.
- This adds sensible defaults
Server.simulateTransaction
's response when the RPC server omits certain fields in an unexpected way (#131).
- The
SimulateTransactionResponse
's error field now has the correct type (that is,string
: #123). - Many irrelevant or unused dependencies have been eliminated (such as
eventsource
,lodash
, and others), lowering overall bundle size (#126).
- A new
ContractSpec
class to facilitate building native JavaScript structures from custom contract types. Given a specification for the data structure (i.e.xdr.ScSpecEntry[]
), it will interpret the values via the specified type (#115).
- The minimum supported NodeJS version is now Node 16.
Server.prepareTransaction
now returns aTransactionBuilder
instance rather than an immutableTransaction
, in order to facilitate modifying your transaction after assembling it alongside the simulation response (#127).- The intent is to avoid cloning the transaction again (via
TransactionBuilder.cloneFrom
) if you need to modify parameters such as the storage access footprint. - To migrate your code, just call
.build()
on the return value.
- The intent is to avoid cloning the transaction again (via
- The RPC response schemas for simulation (see
Server.simulateTransaction()
) have been upgraded to parse the base64-encoded XDR automatically. The full interface changes are in the pull request (#127), but succinctly:SimulateTransactionResponse
->RawSimulateTransactionResponse
SimulateHostFunctionResult
->RawSimulateHostFunctionResult
- Now,
SimulateTransactionResponse
andSimulateHostFunctionResult
include the full, decoded XDR structures instead of raw, base64-encoded strings for the relevant fields (e.g.SimulateTransactionResponse.transactionData
is now an instance ofSorobanDataBuilder
,events
is now anxdr.DiagnosticEvent[]
[try outhumanizeEvents
for a friendlier representation of this field]). - The
SimulateTransactionResponse.results[]
field has been moved toSimulateTransactionResponse.result?
, since there will always be exactly zero or one result.
- The
GetTransactionStatus
is now anenum
with actual values rather than atype
(#129). - The RPC response schemas for retrieving transaction details (
Server.getTransaction()
) have been upgraded to parse the base64-encoded XDR automatically. The full interface changes are in the pull request (#129), but succinctly:GetTransactionResponse
->RawGetTransactionResponse
GetTransactionResponse
is now one ofGetSuccessfulTransactionResponse | GetFailedTransactionResponse | GetMissingTransactionResponse
, which gives proper typing to the interface depending on the response'sstatus
field.- All of the
*Xdr
properties are now full, decoded XDR structures. - There is a new
returnValue
field which is a decodedxdr.ScVal
, present iff the transaction was a successful Soroban function invocation.
Not all schemas have been broken in this manner in order to facilitate user feedback on this approach. Please add your 👍 or 👎 to #128 to vote on whether or not we should do this for the other response schemas.
- The
stellar-base
dependency has been upgraded to fix a TypeScript bug (js-stellar-base#665). - Decreased bundle size by refactoring
assembleTransaction
to use new abstractions fromstellar-base
(#120).
- We have dropped all support for the deprecated hex-encoded contract ID format (#117, js-stellar-base#658).
You should use the well-supported C...
strkey format, instead. To migrate, you can do something like
let contractId = StrKey.encodeContract(Buffer.from(hexContractId, 'hex'));
- Updated
stellar-base
dependency to v10.0.0-soroban.5 which introduces many helpful Soroban abstractions (see full release notes):- Use an existing, immutable
Transaction
as a template for a new one viaTransactionBuilder.cloneFrom(tx, opts = {})
and useopts
to override fields (#656). - Use the new
SorobanDataBuilder
class to easily prepare Soroban transaction footprints #660. - Use
humanizeEvents
to create human-readable versions ofxdr.ContractEvent
s andxdr.DiagnosticEvent
s that come out of transaction meta (#659). - Use several helpers to reliably build Soroban authorization entries for complex, multi-party signing scenarios (#663). These are each at various levels of granularity/complexity:
authorizeInvocation
authorizeInvocationCallback
buildAuthEnvelope
buildAuthEntry
- Use an existing, immutable
assembleTransaction()
(andServer.prepareTransaction()
by proxy) will now override the authorization portion of simulation if you provide a transaction with existing authorization entries. This is because, in complex auth scenarios, you may have signed entries that would be overwritten by simulation, so this just uses your existing entries (#114).- Added a missing
type
field to theEventResponse
interface (#118).
- Updated
stellar-base
dependency to fix the wayscValToNative
converts string and symbol values: they will always decode strings when possible (#112 for #645).
- Updated
stellar-base
dependency to fix an issue when building & invoking contract transactions.
Server.getContractData
has an additional, optional parameter:expirationType?: string
which should be set to either'temporary'
or'persistent'
depending on the type of ledger key. By default, it will attempt to fetch both, returning whichever one it finds (#103).assembleTransaction
now accepts simulation results for the newBumpFootprintExpirationOp
s andRestoreFootprintOp
s (#108).- The XDR library (
stellar-base
) has been upgraded to Preview 10's protocol format. This includes the following changes:
- Many XDR structures have changed, please refer to the
types/next.d.ts
diff for details (#633). - We have returned to the world in which one transaction contains one operation which contains one host function invocation. This means
Operation.invokeHostFunctions
is gone andOperation.invokeHostFunction
has changed to accept{ func, auth }
, wherefunc
is the correctxdr.HostFunction
andauth
is a list ofxdr.SorobanAuthorizationEntry
items that outline the authorization tree for the call stack (#633). Better abstractions for creating anxdr.HostFunction
are forthcoming, though you can still refer toContract.call()
for help.
- A new abstraction for dealing with large integers and
ScVal
s: seeScInt
,XdrLargeInt
, andscValToBigInt
(#620). - A new abstraction for converting between native JavaScript types and complex
ScVal
s: seenativeToScVal
andscValToNative
(#630). - We have added two new operations related to state expiration in Soroban:
BumpFootprintExpiration
andRestoreFootprint
. Please refer to their docstrings for details (#633).
- The
stellar-base
library is pinned to a specific version so that a fresh installation (via e.g.npm i soroban-client
) does not pull the latest major version (without Soroban support) (#100).
Server.getContractId()
now accepts a contract strkey (#97).
-
The XDR library (
stellar-base
) has been upgraded to handle contract strkeys (C...
addresses) better (see #612 and #614 ofstellar-base
) (#98). -
Misc. dependencies have been upgraded and the
buffer
polyfill is now a primary dependency (#98).
- Downstream dependencies are transpiled to target the same older JS environments as the main library (#96).
- The module was not being exported correctly in browser environments; the following should now work in your project (#95):
import * as SorobanClient from 'soroban-client';
- The browser bundles compatibility has increased, supporting older JS environments and undoing #90 from v0.7.0 (#95).
- Replaced the deprecated
getLedgerEntry
withgetLedgerEntries
(#66).
- Transaction simulation parses correctly when there is no auth (#89).
- TypeScript types are packaged correctly (#86).
- Documentation is packaged correctly (#87, #88).
- Published bundles support modern JS features (ES6ish) (#90).
This version was tagged solely to trigger a documentation build.
- Removed extraneous reference to
gulp
in docs building step (#80).
- Updated
Server.prepareTransaction()
for new Soroban simulation results and fees. Note the change in behavior now, where transaction fee will be increased by the resource fee estimates received from simulation (#76).
- SDK Modernization, refreshing the build system to use the latest in JS build pipelines (#69).