Refractor (0.1.1)

Refractor is a pending transactions storage and multisig aggregator for Stellar Network.

How it works

This service allows anyone to store transactions and gather signatures required to match the signing threshold.

Any eligible signer can sign the transaction. As soon as it reaches the required threshold (calculated automatically), the service either submits the transaction to Stellar network or executes a callback.

Once uploaded to the server, the transaction cannot be deleted or modified. Other services and wallets can access and sign it by a standard URL like https://api.refractor.space/tx/4b50...3dad where its hash serves as a unique identifier.

Refractor automatically discovers potential signers and computes the thresholds. The signing process is fully coordinated, signatures aggregation occurs on the server side which in turn allows us to deal with potentially problematic cases like applying signatures from two different signers concurrently or preventing handling TX_BAD_AUTH_EXTRA errors in case of too many signatures applied to a transaction. Refractor ensures that signatures are valid and consistent.

/tx endpoint

Store a transaction

Sends a transaction (with or without signatures) to the server. If the transaction with the same hash doesn't exist on the server yet, the transaction and its signatures are stored on the server. Otherwise, Refractor finds new signatures and applies them to the existing transaction. Invalid or redundant signatures are discarded automatically.

Request Body schema: application/json

Transaction description

network
required
string
Enum: "public" "testnet"

Stellar network name ("public" or "testnet")

xdr
required
string

Base64-encoded Stellar transaction XDR with or without signatures

expires
integer
Default: "Current date + 30 days"

Transaction expiration date (UNIX timestamp), by default equals the transaction maxTime if not set

callbackUrl
string

Callback URL where the transaction will be POSTed once ready

submit
boolean
Default: false

Whether the transaction should be automatically submitted to Horizon once ready

Responses

Request samples

Content type
application/json
{
  • "network": "testnet",
  • "xdr": "AAAAAgAAAABTWgh1bRm6Aksd3hHdZ0h…"
}

Response samples

Content type
application/json
{
  • "network": "testnet",
  • "xdr": "AAAAAgAAAABTWgh1bRm6Aksd3hHdZ0h…",
  • "minTime": 1527178665,
  • "maxTime": 1727178665,
  • "callbackUrl": "https://my.server/tx-signed",
  • "submit": false,
  • "signatures": [
    ],
  • "status": "pending",
  • "submitted": 1627178665
}

Retrieve transaction info

Returns transaction information and signing status for a given transaction hash.

path Parameters
txHash
required
string (TxHash) /^[a-f0-9]{64}$/
Example: a1ef625e2bda7e71493b8a6bb4b03fa6512a67593d99acacfe5fb59b79e28154

Transaction hash

Responses

Response samples

Content type
application/json
{
  • "network": "testnet",
  • "xdr": "AAAAAgAAAABTWgh1bRm6Aksd3hHdZ0h…",
  • "minTime": 1527178665,
  • "maxTime": 1727178665,
  • "callbackUrl": "https://my.server/tx-signed",
  • "submit": false,
  • "signatures": [
    ],
  • "status": "pending",
  • "submitted": 1627178665
}