UNPKG

cosmic-lib

Version:

A JavaScript implementation of the CosmicLink protocol for Stellar

352 lines (202 loc) 9.39 kB
# Cosmic links specifications Cosmic links syntax mimic `js-stellar-sdk` [Transactions](https://stellar.github.io/js-stellar-sdk/Transaction.html) and [Operations](https://stellar.github.io/js-stellar-sdk/Operation.html) methods. ## General syntax ### One-operation link > ...?type={operation}&{field}={value}&{...more_fields} Where `{field}` can be either a meta field, a transaction field or a valid field for `{operation}`. Example: > <https://cosmic.link/?payment&memo=Donation&destination=tips*cosmic.link&amount=100> ### Multi-operation link > ...?type=transaction&{...metaFields|transactionFields}&operation={operation}&{...operationFields}&{...more_operations} Meta fields and transactions fields have to be provided prior to any operation, then the operations should be described sequentially. Example: > <https://cosmic.link/?transaction&memo=Example&operation=setOptions&homeDomain=example.org&operation=manageData&name=Wallet&value=example-wallet> ### XDR link > ...?xdr={xdr}&{...metaFields}[&strip=source|sequence|signatures] * `&strip`: Remove an element from the original XDR transaction. Stripping out sequence means that the transaction request can get signed anytime in the future, possibly several times. Stripping out source means that it can get signed by any account. Example: > [https://cosmic.link/?xdr=AAAA...AA==&network=public&strip=source](https://cosmic.link/?xdr=AAAAAL2ef/Z7FpGtgUvkKaEg3uvy9IH+T9chWSUhQILKTk/NAAAAZAEMX34AAAADAAAAAAAAAAAAAAABAAAAAAAAAAUAAAABAAAAAIQ/AS7GRUBBd96ykumKKUFE92+oiwRuJ7KXuvPwwTQWAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==&network=public&strip=source) ## Fields ### Meta Fields Those fields contains data that is not strictly-speaking part of the transaction object, but that is essential to its validation. Those fields are optional. #### network > &network=public|test|{passphrase} Tie the transaction to a specific network. Network-less transaction requests are interpreted as transactions that can be validated on any network. #### horizon > &horizon={url} Provide a fallback Horizon node for custom network in case the client doesn't know any. #### callback > &callback={url} Provide the destination at which the signed transaction must be posted. ### Transaction fields Those fields may be used in any transaction and are all of them are optionals. For multi-operations links, `source` will become the default source for any operation that doesn't define one. In cosmic links, having a `source` is optional as the source can be set by the wallet service when signing. #### memo The general syntax for memos is: > &memo={memoType}:{memoValue} Where `{memoType}` is one of: `text`, `id`, `hash`, `return`. A short syntax for text memo exist aswell: > &memo={memoValue} #### source > &source={address} Where `{address}` is either a federated address or an account ID, as any address in `js-cosmic-lib`. #### minTime / maxTime > &minTime|maxTime={YYYY-MM-DD} > &minTime|maxTime={YYYY-MM-DDTHH:mm:ssZ} This is the ISO 8601 date format. > &minTime|maxTime=+{minutes} This is a syntactic sugar to define minTime/maxTime relatively to the current time, in minutes. This gets immediately computed into the corresponding UTC date. #### sequence > &sequence={integer} The sequence number for this transaction. #### fee > &fee={integer} Fees for this transaction. Should at least egual the minimum network fee. ### Operation fields #### accountMerge Destroy `source` account and send its lumens to `destination`. Mandatory fields: > ...?accountMerge&destination={address} Optional fields: * &source={address} #### allowTrust Allow `trustor` to hold your asset `assetCode`. Mandatory fields: > ...?allowTrust&assetCode={string}&trustor={address} Optional fields: * &authorize=false Revoke `trustor` permission to hold `assetCode` * &source={address} #### bumpSequence Set account sequence number to `bumpTo`. Mandatory fields: > ...?bumpSequence&bumpTo={sequenceNumber} Optional fields: * &source={address} #### changeTrust Accept `asset`. > ...?changeTrust&asset={assetCode}:{assetIssuer} Optional fields: * &limit={integer} Maximum holding, if set to zero `source` will not accept `asset` anymore. * &source={address} #### createAccount Create account `destination` and send it `initialBalance` lumens. > ...?createAccount&destination={address}&initialBalance={amount} Optional fields: * &source={address} #### createPassiveSellOffer Offer to passively sell `amount` `selling` for `price` `buying` / unit. > ...?createPassiveSellOffer&selling={assetCode}:{assetIssuer}&buying={assetCode}:{assetIssuer}&amount={amount}&price={price} Notes: * Before protocol 11 update, this operation was named `createPassiveOffer`. The old name is still supported for backward compatibility. * `selling` or `buying` field may be omitted when it is lumens. * `price` can also be a fraction in the form `{1:2}` or `{sellAmount}:{buyAmount}`. Optional fields: * &source={address} #### inflation Run inflation > ...?inflation Optional fields: * &source={address} #### manageData Clear data entry `name` / Set `name` value as `value`. > ...?manageData&name={string} Optional fields * &value={string} If omitted, clear `name`, else set `name` to `value`. * &source={address} #### manageBuyOffer Offer to buy `buyAmount` `buying` for `price` `selling` / unit. > ...?manageBuyOffer&selling={assetCode}:{assetIssuer}&buying={assetCode}:{assetIssuer}&buyAmount={amount}&price={price} Notes: * `selling` or `buying` field may be omitted when it is lumens. * `price` can also be a fraction in the form `{1:2}` or `{sellAmount}:{buyAmount}`. Optional fields: * &offerId={integer} Allow to edit an existing offer. Will delete it if `amount` is set to 0. * &source={address} Syntactic sugar for deleting offer: > ...?manageBuyOffer&offerId={integer}&amount=0 #### manageSellOffer Offer to sell `amount` `selling` for `price` `buying` / unit. > ...?manageSellOffer&selling={assetCode}:{assetIssuer}&buying={assetCode}:{assetIssuer}&amount={amount}&price={price} Notes: * `selling` or `buying` field may be omitted when it is lumens. * `price` can also be a fraction in the form `{1:2}` or `{sellAmount}:{buyAmount}`. * Before protocol 11 update, this operation was named `manageOffer`. The old name is still supported for backward compatibility. Optional fields: * &offerId={integer} Allow to edit an existing offer. Will delete it if `amount` is set to 0. * &source={address} Syntactic sugar for deleting offer: > ...?manageSellOffer&offerId={integer}&amount=0 #### pathPaymentStrictReceive Send `destAmount` `destAsset` to `destination` for at most `sendMax` `sendAsset` using the available offers for the conversion. > ...?pathPaymentStrictReceive&destination={address}&destAmount={amount}&destAsset={assetCode}:{assetIssuer}&sendMax={amount}&sendAsset={assetCode}:{assetIssuer} Notes: * `destAsset` or `sendAsset` field may be omitted when it is lumens. * Before protocol 12 update, this operation was named `pathPayment`. The old name is still supported for backward compatibility. Optional fields: * &path={asset1},{asset2},...,{assetN} Where each asset is `{assetCode}:{assetIssuer}` or `XLM`. Define a conversion path to follow. If neither `destAsset` or `sendAsset` are lumens, you'll likely need `&path=XLM` to set lumens as an intermediate conversion step. * &source={address} #### pathPaymentStrictSend Send at least `destMin` `destAsset` to `destination` for `sendAmount` `sendAsset` using the available offers for the conversion. > ...?pathPaymentStrictSend&destination={address}&destMin={amount}&destAsset={assetCode}:{assetIssuer}&sendAmount={amount}&sendAsset={assetCode}:{assetIssuer} Notes: * `destAsset` or `sendAsset` field may be omitted when it is lumens. Optional fields: * &path={asset1},{asset2},...,{assetN} Where each asset is `{assetCode}:{assetIssuer}` or `XLM`. Define a conversion path to follow. If neither `destAsset` or `sendAsset` are lumens, you'll likely need `&path=XLM` to set lumens as an intermediate conversion step. * &source={address} #### payment Send `amount` `asset` to `destination`. > ...?payment&amount={amount}&destination={address} Optional fields: * &asset={assetCode}:{assetIssuer} Define `asset` when it is not lumens. * &source={address} #### setOptions Allow various actions depending on the optional fields you use. Without any field this is a void operation. > ...?setOptions Optional fields: * &inflationDest={address} Set `{address}` as the inflation destination for `source`. * &clearFlags={integer} Bitmap integer for which account flags to clear * &setFlags={integer} Bitmap integer for which account flags to set. * &masterWeight={weight} The master key weight. * &lowThreshold={weight} The sum weight for the low threshold. * &medThreshold={weight} The sum weight for the medium threshold. * &highThreshold={weight} The sum weight for the high threshold. * &signer={weight}:{type}:{value} If `weight` is set to 0, remove a signer from `source` account, else edit or add one. `type` can be either: * `key`: refer to another account * `tx`: refer to a transaction hash * `hash`: refer to a preimage or hash(x) signer * &homeDomain={string} set homedomain, or unset it if `string` is empty * &source={address}