module Stellar

xdr source ============================================================

struct AccountEntry
{
    AccountID accountID;      // master public key for this account
    int64 balance;            // in stroops
    SequenceNumber seqNum;    // last sequence number used for this account
    uint32 numSubEntries;     // number of sub-entries this account has
                              // drives the reserve
    AccountID* inflationDest; // Account to vote for during inflation
    uint32 flags;             // see AccountFlags

    string32 homeDomain; // can be used for reverse federation and memo lookup

    // fields used for signatures
    // thresholds stores unsigned bytes: [weight of master|low|medium|high]
    Thresholds thresholds;

    Signer signers<20>; // possible signers for this account

    string32 codeKYC;
    // reserved for future use
    union switch (int v)
    {
    case 0:
        void;
    }
    ext;
};

xdr source ============================================================

union switch (int v)
    {
    case 0:
        void;
    }

xdr source ============================================================

enum AccountFlags
{ // masks for each flag

    // Flags set on issuer accounts
    // TrustLines are created with authorized set to "false" requiring
    // the issuer to set it for each TrustLine
    AUTH_REQUIRED_FLAG = 0x1,
    // If set, the authorized flag in TrustLines can be cleared
    // otherwise, authorization cannot be revoked
    AUTH_REVOCABLE_FLAG = 0x2,
    // Once set, causes all AUTH_* flags to be read-only
    AUTH_IMMUTABLE_FLAG = 0x4
};

xdr source ============================================================

union AccountMergeResult switch (AccountMergeResultCode code)
{
case ACCOUNT_MERGE_SUCCESS:
    int64 sourceAccountBalance; // how much got transfered from source account
default:
    void;
};

xdr source ============================================================

enum AccountMergeResultCode
{
    // codes considered as "success" for the operation
    ACCOUNT_MERGE_SUCCESS = 0,
    // codes considered as "failure" for the operation
    ACCOUNT_MERGE_MALFORMED = -1,      // can't merge onto itself
    ACCOUNT_MERGE_NO_ACCOUNT = -2,     // destination does not exist
    ACCOUNT_MERGE_IMMUTABLE_SET = -3,  // source account has AUTH_IMMUTABLE set
    ACCOUNT_MERGE_HAS_SUB_ENTRIES = -4 // account has trust lines/offers
};

xdr source ============================================================

struct AffirmFailOp
{
    uint64 lotID;
    string purpose<1000>;
    AccountID accountID;
};

xdr source ============================================================

union AffirmFailResult switch (AffirmFailResultCode code)
{
case AFFIRM_FAIL_SUCCESS:
    void;
default:
    void;
};

xdr source ============================================================

enum AffirmFailResultCode
{
    AFFIRM_FAIL_SUCCESS = 0,
    AFFIRM_FAIL_ERROR = 1
};

xdr source ============================================================

struct AffirmPassOp
{
    uint64 lotID; // name of the lot
    string paperHash<1000>;
    string paperLink<1000>;
    AccountID accountID;
};

xdr source ============================================================

union AffirmPassResult switch (AffirmPassResultCode code)
{
case AFFIRM_PASS_SUCCESS:
    void;
default:
    void;
};

xdr source ============================================================

enum AffirmPassResultCode
{
    AFFIRM_PASS_SUCCESS = 0,
    AFFIRM_PASS_ERROR = 1
};

xdr source ============================================================

struct AllowTrustOp
{
    AccountID trustor;
    union switch (AssetType type)
    {
    // ASSET_TYPE_NATIVE is not allowed
    case ASSET_TYPE_CREDIT_ALPHANUM4:
        opaque assetCode4[4];

    case ASSET_TYPE_CREDIT_ALPHANUM12:
        opaque assetCode12[12];

        // add other asset types here in the future
    }
    asset;

    bool authorize;
};

xdr source ============================================================

union switch (AssetType type)
    {
    // ASSET_TYPE_NATIVE is not allowed
    case ASSET_TYPE_CREDIT_ALPHANUM4:
        opaque assetCode4[4];

    case ASSET_TYPE_CREDIT_ALPHANUM12:
        opaque assetCode12[12];

        // add other asset types here in the future
    }

xdr source ============================================================

union AllowTrustResult switch (AllowTrustResultCode code)
{
case ALLOW_TRUST_SUCCESS:
    void;
default:
    void;
};

xdr source ============================================================

enum AllowTrustResultCode
{
    // codes considered as "success" for the operation
    ALLOW_TRUST_SUCCESS = 0,
    // codes considered as "failure" for the operation
    ALLOW_TRUST_MALFORMED = -1,     // asset is not ASSET_TYPE_ALPHANUM
    ALLOW_TRUST_NO_TRUST_LINE = -2, // trustor does not have a trustline
                                    // source account does not require trust
    ALLOW_TRUST_TRUST_NOT_REQUIRED = -3,
    ALLOW_TRUST_CANT_REVOKE = -4 // source account can't revoke trust
};

xdr source ============================================================

union Asset switch (AssetType type)
{
case ASSET_TYPE_NATIVE: // Not credit
    void;

case ASSET_TYPE_CREDIT_ALPHANUM4:
    struct
    {
        opaque assetCode[4]; // 1 to 4 characters
        AccountID issuer;
    } alphaNum4;

case ASSET_TYPE_CREDIT_ALPHANUM12:
    struct
    {
        opaque assetCode[12]; // 5 to 12 characters
        AccountID issuer;
    } alphaNum12;

    // add other asset types here in the future
};

xdr source ============================================================

struct
    {
        opaque assetCode[12]; // 5 to 12 characters
        AccountID issuer;
    }

xdr source ============================================================

struct
    {
        opaque assetCode[4]; // 1 to 4 characters
        AccountID issuer;
    }

xdr source ============================================================

enum AssetType
{
    ASSET_TYPE_NATIVE = 0,
    ASSET_TYPE_CREDIT_ALPHANUM4 = 1,
    ASSET_TYPE_CREDIT_ALPHANUM12 = 2
};

xdr source ============================================================

struct Auth
{
    // Empty message, just to confirm
    // establishment of MAC keys.
    int unused;
};

xdr source ============================================================

struct AuthCert
{
    Curve25519Public pubkey;
    uint64 expiration;
    Signature sig;
};

xdr source ============================================================

union AuthenticatedMessage switch (uint32 v)
{
case 0:
    struct
{
   uint64 sequence;
   StellarMessage message;
   HmacSha256Mac mac;
    } v0;
};

xdr source ============================================================

struct
{
   uint64 sequence;
   StellarMessage message;
   HmacSha256Mac mac;
    }

xdr source ============================================================

union BucketEntry switch (BucketEntryType type)
{
case LIVEENTRY:
    LedgerEntry liveEntry;

case DEADENTRY:
    LedgerKey deadEntry;
};

xdr source ============================================================

enum BucketEntryType
{
    LIVEENTRY = 0,
    DEADENTRY = 1
};

xdr source ============================================================

struct ChangeTrustOp
{
    Asset line;

    // if limit is set to 0, deletes the trust line
    int64 limit;
};

xdr source ============================================================

union ChangeTrustResult switch (ChangeTrustResultCode code)
{
case CHANGE_TRUST_SUCCESS:
    void;
default:
    void;
};

xdr source ============================================================

enum ChangeTrustResultCode
{
    // codes considered as "success" for the operation
    CHANGE_TRUST_SUCCESS = 0,
    // codes considered as "failure" for the operation
    CHANGE_TRUST_MALFORMED = -1,     // bad input
    CHANGE_TRUST_NO_ISSUER = -2,     // could not find issuer
    CHANGE_TRUST_INVALID_LIMIT = -3, // cannot drop limit below balance
                                     // cannot create with a limit of 0
    CHANGE_TRUST_LOW_RESERVE = -4 // not enough funds to create a new trust line
};

xdr source ============================================================

struct ClaimOfferAtom
{
    // emitted to identify the offer
    AccountID sellerID; // Account that owns the offer
    uint64 offerID;

    // amount and asset taken from the owner
    Asset assetSold;
    int64 amountSold;

    // amount and asset sent to the owner
    Asset assetBought;
    int64 amountBought;
};

xdr source ============================================================

struct CreateAccountOp
{
    AccountID destination; // account to create
    string32 codeKYC;
};

xdr source ============================================================

union CreateAccountResult switch (CreateAccountResultCode code)
{
case CREATE_ACCOUNT_SUCCESS:
    void;
default:
    void;
};

xdr source ============================================================

enum CreateAccountResultCode
{
    // codes considered as "success" for the operation
    CREATE_ACCOUNT_SUCCESS = 0, // account was created

    // codes considered as "failure" for the operation
    CREATE_ACCOUNT_MALFORMED = -1,   // invalid destination
    CREATE_ACCOUNT_UNDERFUNDED = -2, // not enough funds in source account
    CREATE_ACCOUNT_LOW_RESERVE =
        -3, // would create an account below the min reserve
    CREATE_ACCOUNT_ALREADY_EXIST = -4 // account already exists
};

xdr source ============================================================

struct CreateBidOp
{
    uint64 lotID; // name of the lot
    uint64 amount;
};

xdr source ============================================================

union CreateBidResult switch (CreateBidResultCode code)
{
case CREATE_BID_SUCCESS:
    void;
default:
    void;
};

xdr source ============================================================

enum CreateBidResultCode
{
    CREATE_BID_SUCCESS = 0,
    CREATE_BID_ERROR = 1
};

xdr source ============================================================

struct CreateLotOp
{
    string lotName<1000>; // name of the lot
    uint32 type;
    string32 lotCode;
    string lotAddress<1000>;
    uint32 lotBranch;
    string lotLocation<1000>;
    uint64 startPrice;
    uint32 minStep;
    uint32 maxStep;
    uint64 published;
    uint64 aucStarted;
    uint64 duration;
    uint64 pledge;
    string details<1000>;
    AccountID publisherID;
};

xdr source ============================================================

union CreateLotResult switch (CreateLotResultCode code)
{
case CREATE_LOT_SUCCESS:
    void;
default:
    void;
};

xdr source ============================================================

enum CreateLotResultCode
{
    CREATE_LOT_SUCCESS = 0, // lot was created
    CREATE_LOT_ERROR = 1 // lot was created
};

xdr source ============================================================

struct CreatePassiveOfferOp
{
    Asset selling; // A
    Asset buying;  // B
    int64 amount;  // amount taker gets. if set to 0, delete the offer
    Price price;   // cost of A in terms of B
};

xdr source ============================================================

enum CryptoKeyType
{
    KEY_TYPE_ED25519 = 0
};

xdr source ============================================================

struct Curve25519Public
{
        opaque key[32];
};

xdr source ============================================================

struct Curve25519Secret
{
        opaque key[32];
};

xdr source ============================================================

struct DecoratedSignature
{
    SignatureHint hint;  // last 4 bytes of the public key, used as a hint
    Signature signature; // actual signature
};

xdr source ============================================================

struct DontHave
{
    MessageType type;
    uint256 reqHash;
};

xdr source ============================================================

enum EnvelopeType
{
    ENVELOPE_TYPE_SCP = 1,
    ENVELOPE_TYPE_TX = 2,
    ENVELOPE_TYPE_AUTH = 3
};

xdr source ============================================================

struct Error
{
    ErrorCode code;
    string msg<100>;
};

xdr source ============================================================

enum ErrorCode
{
    ERR_MISC = 0, // Unspecific error
    ERR_DATA = 1, // Malformed data
    ERR_CONF = 2, // Misconfiguration error
    ERR_AUTH = 3, // Authentication failure
    ERR_LOAD = 4  // System overloaded
};

xdr source ============================================================

struct Hello
{
    uint32 ledgerVersion;
    uint32 overlayVersion;
    uint32 overlayMinVersion;
    Hash networkID;
    string versionStr<100>;
    int listeningPort;
    NodeID peerID;
    AuthCert cert;
    uint256 nonce;
};

xdr source ============================================================

struct HmacSha256Key
{
        opaque key[32];
};

xdr source ============================================================

struct HmacSha256Mac
{
        opaque mac[32];
};

xdr source ============================================================

struct InflationPayout // or use PaymentResultAtom to limit types?
{
    AccountID destination;
    int64 amount;
};

xdr source ============================================================

union InflationResult switch (InflationResultCode code)
{
case INFLATION_SUCCESS:
    InflationPayout payouts<>;
default:
    void;
};

xdr source ============================================================

enum InflationResultCode
{
    // codes considered as "success" for the operation
    INFLATION_SUCCESS = 0,
    // codes considered as "failure" for the operation
    INFLATION_NOT_TIME = -1
};

xdr source ============================================================

enum IPAddrType
{
    IPv4 = 0,
    IPv6 = 1
};

xdr source ============================================================

struct LedgerEntry
{
    uint32 lastModifiedLedgerSeq; // ledger the LedgerEntry was last changed

    union switch (LedgerEntryType type)
    {
    case ACCOUNT:
        AccountEntry account;
    case TRUSTLINE:
        TrustLineEntry trustLine;
    case OFFER:
        OfferEntry offer;
    case LOT:
        LotEntry lot;
    case PARTICIPANT:
        ParticipantEntry participant;
    case MESSAGE:
        MessageEntry message;
    case PROOF:
        ProofEntry proof;
    }
    data;

    // reserved for future use
    union switch (int v)
    {
    case 0:
        void;
    }
    ext;
};

xdr source ============================================================

union switch (LedgerEntryType type)
    {
    case ACCOUNT:
        AccountEntry account;
    case TRUSTLINE:
        TrustLineEntry trustLine;
    case OFFER:
        OfferEntry offer;
    case LOT:
        LotEntry lot;
    case PARTICIPANT:
        ParticipantEntry participant;
    case MESSAGE:
        MessageEntry message;
    case PROOF:
        ProofEntry proof;
    }

xdr source ============================================================

union switch (int v)
    {
    case 0:
        void;
    }

xdr source ============================================================

union LedgerEntryChange switch (LedgerEntryChangeType type)
{
case LEDGER_ENTRY_CREATED:
    LedgerEntry created;
case LEDGER_ENTRY_UPDATED:
    LedgerEntry updated;
case LEDGER_ENTRY_REMOVED:
    LedgerKey removed;
case LEDGER_ENTRY_STATE:
    LedgerEntry state;
};

xdr source ============================================================

enum LedgerEntryChangeType
{
    LEDGER_ENTRY_CREATED = 0, // entry was added to the ledger
    LEDGER_ENTRY_UPDATED = 1, // entry was modified in the ledger
    LEDGER_ENTRY_REMOVED = 2, // entry was removed from the ledger
    LEDGER_ENTRY_STATE = 3    // value of the entry
};

xdr source ============================================================

enum LedgerEntryType
{
    ACCOUNT = 0,
    TRUSTLINE = 1,
    OFFER = 2,
    LOT = 3,
    PARTICIPANT = 4,
    MESSAGE = 5,
    PROOF = 6
};

xdr source ============================================================

struct LedgerHeader
{
    uint32 ledgerVersion;    // the protocol version of the ledger
    Hash previousLedgerHash; // hash of the previous ledger header
    StellarValue scpValue;   // what consensus agreed to
    Hash txSetResultHash;    // the TransactionResultSet that led to this ledger
    Hash bucketListHash;     // hash of the ledger state

    uint32 ledgerSeq; // sequence number of this ledger

    int64 totalCoins; // total number of stroops in existence.
                      // 10,000,000 stroops in 1 XLM

    int64 feePool;       // fees burned since last inflation run
    uint32 inflationSeq; // inflation sequence number

    uint64 idPool; // last used global ID, used for generating objects

    uint32 baseFee;     // base fee per operation in stroops
    uint32 baseReserve; // account base reserve in stroops

    uint32 maxTxSetSize; // maximum size a transaction set can be

    Hash skipList[4]; // hashes of ledgers in the past. allows you to jump back
                      // in time without walking the chain back ledger by ledger
                      // each slot contains the oldest ledger that is mod of
                      // either 50  5000  50000 or 500000 depending on index
                      // skipList[0] mod(50), skipList[1] mod(5000), etc

    // reserved for future use
    union switch (int v)
    {
    case 0:
        void;
    }
    ext;
};

xdr source ============================================================

union switch (int v)
    {
    case 0:
        void;
    }

xdr source ============================================================

struct LedgerHeaderHistoryEntry
{
    Hash hash;
    LedgerHeader header;

    // reserved for future use
    union switch (int v)
    {
    case 0:
        void;
    }
    ext;
};

xdr source ============================================================

union switch (int v)
    {
    case 0:
        void;
    }

xdr source ============================================================

union LedgerKey switch (LedgerEntryType type)
{
case ACCOUNT:
    struct
    {
        AccountID accountID;
    } account;

case TRUSTLINE:
    struct
    {
        AccountID accountID;
        Asset asset;
    } trustLine;

case OFFER:
    struct
    {
        AccountID sellerID;
        uint64 offerID;
    } offer;
case LOT:
    struct
    {
        AccountID organizerID;
        uint64 lotID;
    } lot;
case PARTICIPANT:
    struct
    {
        AccountID accountID;
        uint64 lotID;
    } participant;
case MESSAGE:
    struct
    {
    AccountID accountID;
    uint64 messageID;
    } message;
case PROOF:
    struct
    {
        AccountID accountID;
        uint64 proofID;
    } proof;

};

xdr source ============================================================

struct
    {
        AccountID accountID;
    }

xdr source ============================================================

struct
    {
        AccountID organizerID;
        uint64 lotID;
    }

xdr source ============================================================

struct
    {
    AccountID accountID;
    uint64 messageID;
    }

xdr source ============================================================

struct
    {
        AccountID sellerID;
        uint64 offerID;
    }

xdr source ============================================================

struct
    {
        AccountID accountID;
        uint64 lotID;
    }

xdr source ============================================================

struct
    {
        AccountID accountID;
        uint64 proofID;
    }

xdr source ============================================================

struct
    {
        AccountID accountID;
        Asset asset;
    }

xdr source ============================================================

struct LedgerSCPMessages
{
    uint32 ledgerSeq;
    SCPEnvelope messages<>;
};

xdr source ============================================================

union LedgerUpgrade switch (LedgerUpgradeType type)
{
case LEDGER_UPGRADE_VERSION:
    uint32 newLedgerVersion; // update ledgerVersion
case LEDGER_UPGRADE_BASE_FEE:
    uint32 newBaseFee; // update baseFee
case LEDGER_UPGRADE_MAX_TX_SET_SIZE:
    uint32 newMaxTxSetSize; // update maxTxSetSize
};

xdr source ============================================================

enum LedgerUpgradeType
{
    LEDGER_UPGRADE_VERSION = 1,
    LEDGER_UPGRADE_BASE_FEE = 2,
    LEDGER_UPGRADE_MAX_TX_SET_SIZE = 3
};

xdr source ============================================================

enum LotBranch {
    AGRICULTURE = 1,
    LIVESTOCK = 2
};

xdr source ============================================================

struct LotEntry
{
    AccountID organizerID;
    uint64 lotID;
    string lotName<1000>;
    uint32 type;
    string32 lotCode;
    string lotAddress<1000>;
    uint32 lotBranch;
    string lotLocation<1000>;
    uint64 startPrice;
    uint64 bestPrice;
    uint32 minStep;
    uint32 maxStep;
    uint64 published;
    uint64 aucStarted;
    uint64 duration;
    uint64 pledge;
    AccountID publisherID;
    string details<1000>;
    // reserved for future use
    union switch (int v)
    {
    case 0:
    void;
    }
    ext;
};

xdr source ============================================================

union switch (int v)
    {
    case 0:
    void;
    }

xdr source ============================================================

enum LotType {
    TERRITORY = 1,
    FACILITY = 2
};

xdr source ============================================================

enum ManageOfferEffect
{
    MANAGE_OFFER_CREATED = 0,
    MANAGE_OFFER_UPDATED = 1,
    MANAGE_OFFER_DELETED = 2
};

xdr source ============================================================

struct ManageOfferOp
{
    Asset selling;
    Asset buying;
    int64 amount; // amount being sold. if set to 0, delete the offer
    Price price;  // price of thing being sold in terms of what you are buying

    // 0=create a new offer, otherwise edit an existing offer
    uint64 offerID;
};

xdr source ============================================================

union ManageOfferResult switch (ManageOfferResultCode code)
{
case MANAGE_OFFER_SUCCESS:
    ManageOfferSuccessResult success;
default:
    void;
};

xdr source ============================================================

enum ManageOfferResultCode
{
    // codes considered as "success" for the operation
    MANAGE_OFFER_SUCCESS = 0,

    // codes considered as "failure" for the operation
    MANAGE_OFFER_MALFORMED = -1,     // generated offer would be invalid
    MANAGE_OFFER_SELL_NO_TRUST = -2, // no trust line for what we're selling
    MANAGE_OFFER_BUY_NO_TRUST = -3,  // no trust line for what we're buying
    MANAGE_OFFER_SELL_NOT_AUTHORIZED = -4, // not authorized to sell
    MANAGE_OFFER_BUY_NOT_AUTHORIZED = -5,  // not authorized to buy
    MANAGE_OFFER_LINE_FULL = -6,      // can't receive more of what it's buying
    MANAGE_OFFER_UNDERFUNDED = -7,    // doesn't hold what it's trying to sell
    MANAGE_OFFER_CROSS_SELF = -8,     // would cross an offer from the same user
    MANAGE_OFFER_SELL_NO_ISSUER = -9, // no issuer for what we're selling
    MANAGE_OFFER_BUY_NO_ISSUER = -10, // no issuer for what we're buying

    // update errors
    MANAGE_OFFER_NOT_FOUND = -11, // offerID does not match an existing offer

    MANAGE_OFFER_LOW_RESERVE = -12 // not enough funds to create a new Offer
};

xdr source ============================================================

struct ManageOfferSuccessResult
{
    // offers that got claimed while creating this offer
    ClaimOfferAtom offersClaimed<>;

    union switch (ManageOfferEffect effect)
    {
    case MANAGE_OFFER_CREATED:
    case MANAGE_OFFER_UPDATED:
        OfferEntry offer;
    default:
        void;
    }
    offer;
};

xdr source ============================================================

union switch (ManageOfferEffect effect)
    {
    case MANAGE_OFFER_CREATED:
    case MANAGE_OFFER_UPDATED:
        OfferEntry offer;
    default:
        void;
    }

xdr source ============================================================

union Memo switch (MemoType type)
{
case MEMO_NONE:
    void;
case MEMO_TEXT:
    string text<28>;
case MEMO_ID:
    uint64 id;
case MEMO_HASH:
    Hash hash; // the hash of what to pull from the content server
case MEMO_RETURN:
    Hash retHash; // the hash of the tx you are rejecting
};

xdr source ============================================================

enum MemoType
{
    MEMO_NONE = 0,
    MEMO_TEXT = 1,
    MEMO_ID = 2,
    MEMO_HASH = 3,
    MEMO_RETURN = 4
};

xdr source ============================================================

struct MessageEntry
{
    uint64 messageID;
    AccountID accountID;
    string text<1000>;
    uint64 lotID;
    uint64 refMessageID;
    // reserved for future use
    union switch (int v)
    {
    case 0:
    void;
    }
    ext;
};

xdr source ============================================================

union switch (int v)
    {
    case 0:
    void;
    }

xdr source ============================================================

enum MessageType
{
    ERROR_MSG = 0,
    AUTH = 2,
    DONT_HAVE = 3,

    GET_PEERS = 4, // gets a list of peers this guy knows about
    PEERS = 5,

    GET_TX_SET = 6, // gets a particular txset by hash
    TX_SET = 7,

    TRANSACTION = 8, // pass on a tx you have heard about

    // SCP
    GET_SCP_QUORUMSET = 9,
    SCP_QUORUMSET = 10,
    SCP_MESSAGE = 11,
    GET_SCP_STATE = 12,

    // new messages
    HELLO = 13
};

xdr source ============================================================

struct OfferEntry
{
    AccountID sellerID;
    uint64 offerID;
    Asset selling; // A
    Asset buying;  // B
    int64 amount;  // amount of A

    /* price for this offer:
        price of A in terms of B
        price=AmountB/AmountA=priceNumerator/priceDenominator
        price is after fees
    */
    Price price;
    uint32 flags; // see OfferEntryFlags

    // reserved for future use
    union switch (int v)
    {
    case 0:
        void;
    }
    ext;
};

xdr source ============================================================

union switch (int v)
    {
    case 0:
        void;
    }

xdr source ============================================================

enum OfferEntryFlags
{
    // issuer has authorized account to perform transactions with its credit
    PASSIVE_FLAG = 1
};

xdr source ============================================================

struct Operation
{
    // sourceAccount is the account used to run the operation
    // if not set, the runtime defaults to "sourceAccount" specified at
    // the transaction level
    AccountID* sourceAccount;

    union switch (OperationType type)
    {
    case CREATE_ACCOUNT:
        CreateAccountOp createAccountOp;
    case PAYMENT:
        PaymentOp paymentOp;
    case PATH_PAYMENT:
        PathPaymentOp pathPaymentOp;
    case MANAGE_OFFER:
        ManageOfferOp manageOfferOp;
    case CREATE_PASSIVE_OFFER:
        CreatePassiveOfferOp createPassiveOfferOp;
    case SET_OPTIONS:
        SetOptionsOp setOptionsOp;
    case CHANGE_TRUST:
        ChangeTrustOp changeTrustOp;
    case ALLOW_TRUST:
        AllowTrustOp allowTrustOp;
    case ACCOUNT_MERGE:
        AccountID destination;
    case INFLATION:
        void;
    case CREATE_LOT:
        CreateLotOp createLotOp;
    case REGISTER_PARTICIPANT:
        RegisterParticipantOp registerParticipantOp;
    case PROVIDE_PROOF:
        ProvideProofOp provideProofOp;
    case SEND_MESSAGE:
        SendMessageOp sendMessageOp;
    case CREATE_BID:
        CreateBidOp createBidOp;
    case AFFIRM_FAIL:
        AffirmFailOp affirmFailOp;
    case AFFIRM_PASS:
        AffirmPassOp affirmPassOp;
    }
    body;
};

xdr source ============================================================

union switch (OperationType type)
    {
    case CREATE_ACCOUNT:
        CreateAccountOp createAccountOp;
    case PAYMENT:
        PaymentOp paymentOp;
    case PATH_PAYMENT:
        PathPaymentOp pathPaymentOp;
    case MANAGE_OFFER:
        ManageOfferOp manageOfferOp;
    case CREATE_PASSIVE_OFFER:
        CreatePassiveOfferOp createPassiveOfferOp;
    case SET_OPTIONS:
        SetOptionsOp setOptionsOp;
    case CHANGE_TRUST:
        ChangeTrustOp changeTrustOp;
    case ALLOW_TRUST:
        AllowTrustOp allowTrustOp;
    case ACCOUNT_MERGE:
        AccountID destination;
    case INFLATION:
        void;
    case CREATE_LOT:
        CreateLotOp createLotOp;
    case REGISTER_PARTICIPANT:
        RegisterParticipantOp registerParticipantOp;
    case PROVIDE_PROOF:
        ProvideProofOp provideProofOp;
    case SEND_MESSAGE:
        SendMessageOp sendMessageOp;
    case CREATE_BID:
        CreateBidOp createBidOp;
    case AFFIRM_FAIL:
        AffirmFailOp affirmFailOp;
    case AFFIRM_PASS:
        AffirmPassOp affirmPassOp;
    }

xdr source ============================================================

struct OperationMeta
{
    LedgerEntryChanges changes;
};

xdr source ============================================================

union OperationResult switch (OperationResultCode code)
{
case opINNER:
    union switch (OperationType type)
    {
    case CREATE_ACCOUNT:
        CreateAccountResult createAccountResult;
    case PAYMENT:
        PaymentResult paymentResult;
    case PATH_PAYMENT:
        PathPaymentResult pathPaymentResult;
    case MANAGE_OFFER:
        ManageOfferResult manageOfferResult;
    case CREATE_PASSIVE_OFFER:
        ManageOfferResult createPassiveOfferResult;
    case SET_OPTIONS:
        SetOptionsResult setOptionsResult;
    case CHANGE_TRUST:
        ChangeTrustResult changeTrustResult;
    case ALLOW_TRUST:
        AllowTrustResult allowTrustResult;
    case ACCOUNT_MERGE:
        AccountMergeResult accountMergeResult;
    case INFLATION:
        InflationResult inflationResult;
    case CREATE_LOT:
        CreateLotResult createLotResult;
    case REGISTER_PARTICIPANT:
        RegisterParticipantResult registerParticipantResult;
    case PROVIDE_PROOF:
        ProvideProofResult provideProofResult;
    case SEND_MESSAGE:
        SendMessageResult sendMessageResult;
    case CREATE_BID:
        CreateBidResult createBidResult;
    case AFFIRM_FAIL:
        AffirmFailResult affirmFailResult;
    case AFFIRM_PASS:
        AffirmPassResult affirmPassResult;
    }
    tr;
default:
    void;
};

xdr source ============================================================

union switch (OperationType type)
    {
    case CREATE_ACCOUNT:
        CreateAccountResult createAccountResult;
    case PAYMENT:
        PaymentResult paymentResult;
    case PATH_PAYMENT:
        PathPaymentResult pathPaymentResult;
    case MANAGE_OFFER:
        ManageOfferResult manageOfferResult;
    case CREATE_PASSIVE_OFFER:
        ManageOfferResult createPassiveOfferResult;
    case SET_OPTIONS:
        SetOptionsResult setOptionsResult;
    case CHANGE_TRUST:
        ChangeTrustResult changeTrustResult;
    case ALLOW_TRUST:
        AllowTrustResult allowTrustResult;
    case ACCOUNT_MERGE:
        AccountMergeResult accountMergeResult;
    case INFLATION:
        InflationResult inflationResult;
    case CREATE_LOT:
        CreateLotResult createLotResult;
    case REGISTER_PARTICIPANT:
        RegisterParticipantResult registerParticipantResult;
    case PROVIDE_PROOF:
        ProvideProofResult provideProofResult;
    case SEND_MESSAGE:
        SendMessageResult sendMessageResult;
    case CREATE_BID:
        CreateBidResult createBidResult;
    case AFFIRM_FAIL:
        AffirmFailResult affirmFailResult;
    case AFFIRM_PASS:
        AffirmPassResult affirmPassResult;
    }

xdr source ============================================================

enum OperationResultCode
{
    opINNER = 0, // inner object result is valid

    opBAD_AUTH = -1,  // too few valid signatures / wrong network
    opNO_ACCOUNT = -2 // source account was not found
};

xdr source ============================================================

enum OperationType
{
    CREATE_ACCOUNT = 0,
    PAYMENT = 1,
    PATH_PAYMENT = 2,
    MANAGE_OFFER = 3,
    CREATE_PASSIVE_OFFER = 4,
    SET_OPTIONS = 5,
    CHANGE_TRUST = 6,
    ALLOW_TRUST = 7,
    ACCOUNT_MERGE = 8,
    INFLATION = 9,
    CREATE_LOT = 10,
    REGISTER_PARTICIPANT = 11,
    PROVIDE_PROOF = 12,
    SEND_MESSAGE = 13,
    CREATE_BID = 14,
    AFFIRM_FAIL = 15,
    AFFIRM_PASS = 16
};

xdr source ============================================================

struct ParticipantEntry
{
    AccountID accountID;
    uint64 lotID;
    uint32 state;
    uint64 bestBid;
    uint32 bestBidSeq;

    // reserved for future use
    union switch (int v)
    {
    case 0:
    void;
    }
    ext;
};

xdr source ============================================================

union switch (int v)
    {
    case 0:
    void;
    }

xdr source ============================================================

enum ParticipantState {
    APPROVED = 0,
    PENDING = 1,
    PASS = 2,
    FAIL = 3
};

xdr source ============================================================

struct PathPaymentOp
{
    Asset sendAsset; // asset we pay with
    int64 sendMax;   // the maximum amount of sendAsset to
                     // send (excluding fees).
                     // The operation will fail if can't be met

    AccountID destination; // recipient of the payment
    Asset destAsset;       // what they end up with
    int64 destAmount;      // amount they end up with

    Asset path<5>; // additional hops it must go through to get there
};

xdr source ============================================================

union PathPaymentResult switch (PathPaymentResultCode code)
{
case PATH_PAYMENT_SUCCESS:
    struct
    {
        ClaimOfferAtom offers<>;
        SimplePaymentResult last;
    } success;
case PATH_PAYMENT_NO_ISSUER:
    Asset noIssuer; // the asset that caused the error
default:
    void;
};

xdr source ============================================================

struct
    {
        ClaimOfferAtom offers<>;
        SimplePaymentResult last;
    }

xdr source ============================================================

enum PathPaymentResultCode
{
    // codes considered as "success" for the operation
    PATH_PAYMENT_SUCCESS = 0, // success

    // codes considered as "failure" for the operation
    PATH_PAYMENT_MALFORMED = -1,          // bad input
    PATH_PAYMENT_UNDERFUNDED = -2,        // not enough funds in source account
    PATH_PAYMENT_SRC_NO_TRUST = -3,       // no trust line on source account
    PATH_PAYMENT_SRC_NOT_AUTHORIZED = -4, // source not authorized to transfer
    PATH_PAYMENT_NO_DESTINATION = -5,     // destination account does not exist
    PATH_PAYMENT_NO_TRUST = -6,           // dest missing a trust line for asset
    PATH_PAYMENT_NOT_AUTHORIZED = -7,     // dest not authorized to hold asset
    PATH_PAYMENT_LINE_FULL = -8,          // dest would go above their limit
    PATH_PAYMENT_NO_ISSUER = -9,          // missing issuer on one asset
    PATH_PAYMENT_TOO_FEW_OFFERS = -10,    // not enough offers to satisfy path
    PATH_PAYMENT_OFFER_CROSS_SELF = -11,  // would cross one of its own offers
    PATH_PAYMENT_OVER_SENDMAX = -12       // could not satisfy sendmax
};

xdr source ============================================================

struct PaymentOp
{
    AccountID destination; // recipient of the payment
    Asset asset;           // what they end up with
    int64 amount;          // amount they end up with
};

xdr source ============================================================

union PaymentResult switch (PaymentResultCode code)
{
case PAYMENT_SUCCESS:
    void;
default:
    void;
};

xdr source ============================================================

enum PaymentResultCode
{
    // codes considered as "success" for the operation
    PAYMENT_SUCCESS = 0, // payment successfuly completed

    // codes considered as "failure" for the operation
    PAYMENT_MALFORMED = -1,          // bad input
    PAYMENT_UNDERFUNDED = -2,        // not enough funds in source account
    PAYMENT_SRC_NO_TRUST = -3,       // no trust line on source account
    PAYMENT_SRC_NOT_AUTHORIZED = -4, // source not authorized to transfer
    PAYMENT_NO_DESTINATION = -5,     // destination account does not exist
    PAYMENT_NO_TRUST = -6,       // destination missing a trust line for asset
    PAYMENT_NOT_AUTHORIZED = -7, // destination not authorized to hold asset
    PAYMENT_LINE_FULL = -8,      // destination would go above their limit
    PAYMENT_NO_ISSUER = -9       // missing issuer on asset
};

xdr source ============================================================

struct PeerAddress
{
    union switch (IPAddrType type)
    {
    case IPv4:
        opaque ipv4[4];
    case IPv6:
        opaque ipv6[16];
    }
    ip;
    uint32 port;
    uint32 numFailures;
};

xdr source ============================================================

union switch (IPAddrType type)
    {
    case IPv4:
        opaque ipv4[4];
    case IPv6:
        opaque ipv6[16];
    }

xdr source ============================================================

struct Price
{
    int32 n; // numerator
    int32 d; // denominator
};

xdr source ============================================================

struct ProofEntry
{
    AccountID accountID;
    uint64 lotID;
    uint64 proofID;
    uint64 bankID;
    uint32 quantity;

    string proof<1000>;

    // reserved for future use
    union switch (int v)
    {
    case 0:
        void;
    }
    ext;
};

xdr source ============================================================

union switch (int v)
    {
    case 0:
        void;
    }

xdr source ============================================================

struct ProvideProofOp
{
    uint64 lotID; // name of the lot
    uint32 quantity;
    string proof<1000>;
    uint64 bankID;
};

xdr source ============================================================

union ProvideProofResult switch (ProvideProofResultCode code)
{
case PROVIDE_PROOF_SUCCESS:
    void;
default:
    void;
};

xdr source ============================================================

enum ProvideProofResultCode
{
    PROVIDE_PROOF_SUCCESS = 0,
    PROVIDE_PROOF_ERROR = 1
};

xdr source ============================================================

union PublicKey switch (CryptoKeyType type)
{
case KEY_TYPE_ED25519:
    uint256 ed25519;
};

xdr source ============================================================

struct RegisterParticipantOp
{
    uint64 lotID; // name of the lot
    AccountID accountID;
    uint64 bestBid;
};

xdr source ============================================================

union RegisterParticipantResult switch (RegisterParticipantResultCode code)
{
case REGISTER_PARTICIPANT_SUCCESS:
    void;
default:
    void;
};

xdr source ============================================================

enum RegisterParticipantResultCode
{
    REGISTER_PARTICIPANT_SUCCESS = 0, // lot was created
    REGISTER_PARTICIPANT_ERROR = 1 // lot was created
};

xdr source ============================================================

struct SCPBallot
{
    uint32 counter; // n
    Value value;    // x
};

xdr source ============================================================

struct SCPEnvelope
{
    SCPStatement statement;
    Signature signature;
};

xdr source ============================================================

union SCPHistoryEntry switch (int v)
{
case 0:
    SCPHistoryEntryV0 v0;
};

xdr source ============================================================

struct SCPHistoryEntryV0
{
    SCPQuorumSet quorumSets<>; // additional quorum sets used by ledgerMessages
    LedgerSCPMessages ledgerMessages;
};

xdr source ============================================================

struct SCPNomination
{
    Hash quorumSetHash; // D
    Value votes<>;      // X
    Value accepted<>;   // Y
};

xdr source ============================================================

struct SCPQuorumSet
{
    uint32 threshold;
    PublicKey validators<>;
    SCPQuorumSet innerSets<>;
};

xdr source ============================================================

struct SCPStatement
{
    NodeID nodeID;    // v
    uint64 slotIndex; // i

    union switch (SCPStatementType type)
    {
    case SCP_ST_PREPARE:
        struct
        {
            Hash quorumSetHash;       // D
            SCPBallot ballot;         // b
            SCPBallot* prepared;      // p
            SCPBallot* preparedPrime; // p'
            uint32 nC;                // c.n
            uint32 nH;                // h.n
        } prepare;
    case SCP_ST_CONFIRM:
        struct
        {
            SCPBallot ballot;   // b
            uint32 nPrepared;   // p.n
            uint32 nCommit;     // c.n
            uint32 nH;          // h.n
            Hash quorumSetHash; // D
        } confirm;
    case SCP_ST_EXTERNALIZE:
        struct
        {
            SCPBallot commit;         // c
            uint32 nH;                // h.n
            Hash commitQuorumSetHash; // D used before EXTERNALIZE
        } externalize;
    case SCP_ST_NOMINATE:
        SCPNomination nominate;
    }
    pledges;
};

xdr source ============================================================

union switch (SCPStatementType type)
    {
    case SCP_ST_PREPARE:
        struct
        {
            Hash quorumSetHash;       // D
            SCPBallot ballot;         // b
            SCPBallot* prepared;      // p
            SCPBallot* preparedPrime; // p'
            uint32 nC;                // c.n
            uint32 nH;                // h.n
        } prepare;
    case SCP_ST_CONFIRM:
        struct
        {
            SCPBallot ballot;   // b
            uint32 nPrepared;   // p.n
            uint32 nCommit;     // c.n
            uint32 nH;          // h.n
            Hash quorumSetHash; // D
        } confirm;
    case SCP_ST_EXTERNALIZE:
        struct
        {
            SCPBallot commit;         // c
            uint32 nH;                // h.n
            Hash commitQuorumSetHash; // D used before EXTERNALIZE
        } externalize;
    case SCP_ST_NOMINATE:
        SCPNomination nominate;
    }

xdr source ============================================================

struct
        {
            SCPBallot ballot;   // b
            uint32 nPrepared;   // p.n
            uint32 nCommit;     // c.n
            uint32 nH;          // h.n
            Hash quorumSetHash; // D
        }

xdr source ============================================================

struct
        {
            SCPBallot commit;         // c
            uint32 nH;                // h.n
            Hash commitQuorumSetHash; // D used before EXTERNALIZE
        }

xdr source ============================================================

struct
        {
            Hash quorumSetHash;       // D
            SCPBallot ballot;         // b
            SCPBallot* prepared;      // p
            SCPBallot* preparedPrime; // p'
            uint32 nC;                // c.n
            uint32 nH;                // h.n
        }

xdr source ============================================================

enum SCPStatementType
{
    SCP_ST_PREPARE = 0,
    SCP_ST_CONFIRM = 1,
    SCP_ST_EXTERNALIZE = 2,
    SCP_ST_NOMINATE = 3
};

xdr source ============================================================

struct SendMessageOp
{
    uint64 lotID; // name of the lot
    string text<1000>;
    uint64 refMessage;
};

xdr source ============================================================

union SendMessageResult switch (SendMessageResultCode code)
{
case SEND_MESSAGE_SUCCESS:
    void;
default:
    void;
};

xdr source ============================================================

enum SendMessageResultCode
{
    SEND_MESSAGE_SUCCESS = 0, // lot was created
    SEND_MESSAGE_ERROR = 1 // lot was created
};

xdr source ============================================================

struct SetOptionsOp
{
    AccountID* inflationDest; // sets the inflation destination

    uint32* clearFlags; // which flags to clear
    uint32* setFlags;   // which flags to set

    // account threshold manipulation
    uint32* masterWeight; // weight of the master account
    uint32* lowThreshold;
    uint32* medThreshold;
    uint32* highThreshold;

    string32* homeDomain; // sets the home domain

    // Add, update or remove a signer for the account
    // signer is deleted if the weight is 0
    Signer* signer;
};

xdr source ============================================================

union SetOptionsResult switch (SetOptionsResultCode code)
{
case SET_OPTIONS_SUCCESS:
    void;
default:
    void;
};

xdr source ============================================================

enum SetOptionsResultCode
{
    // codes considered as "success" for the operation
    SET_OPTIONS_SUCCESS = 0,
    // codes considered as "failure" for the operation
    SET_OPTIONS_LOW_RESERVE = -1,      // not enough funds to add a signer
    SET_OPTIONS_TOO_MANY_SIGNERS = -2, // max number of signers already reached
    SET_OPTIONS_BAD_FLAGS = -3,        // invalid combination of clear/set flags
    SET_OPTIONS_INVALID_INFLATION = -4,      // inflation account does not exist
    SET_OPTIONS_CANT_CHANGE = -5,            // can no longer change this option
    SET_OPTIONS_UNKNOWN_FLAG = -6,           // can't set an unknown flag
    SET_OPTIONS_THRESHOLD_OUT_OF_RANGE = -7, // bad value for weight/threshold
    SET_OPTIONS_BAD_SIGNER = -8,             // signer cannot be masterkey
    SET_OPTIONS_INVALID_HOME_DOMAIN = -9     // malformed home domain
};

xdr source ============================================================

struct Signer
{
    AccountID pubKey;
    uint32 weight; // really only need 1byte
};

xdr source ============================================================

struct SimplePaymentResult
{
    AccountID destination;
    Asset asset;
    int64 amount;
};

xdr source ============================================================

union StellarMessage switch (MessageType type)
{
case ERROR_MSG:
    Error error;
case HELLO:
    Hello hello;
case AUTH:
    Auth auth;
case DONT_HAVE:
    DontHave dontHave;
case GET_PEERS:
    void;
case PEERS:
    PeerAddress peers<>;

case GET_TX_SET:
    uint256 txSetHash;
case TX_SET:
    TransactionSet txSet;

case TRANSACTION:
    TransactionEnvelope transaction;

// SCP
case GET_SCP_QUORUMSET:
    uint256 qSetHash;
case SCP_QUORUMSET:
    SCPQuorumSet qSet;
case SCP_MESSAGE:
    SCPEnvelope envelope;
case GET_SCP_STATE:
    uint32 getSCPLedgerSeq; // ledger seq requested ; if 0, requests the latest
};

xdr source ============================================================

struct StellarValue
{
    Hash txSetHash;   // transaction set to apply to previous ledger
    uint64 closeTime; // network close time

    // upgrades to apply to the previous ledger (usually empty)
    // this is a vector of encoded 'LedgerUpgrade' so that nodes can drop
    // unknown steps during consensus if needed.
    // see notes below on 'LedgerUpgrade' for more detail
    // max size is dictated by number of upgrade types (+ room for future)
    UpgradeType upgrades<6>;

    // reserved for future use
    union switch (int v)
    {
    case 0:
        void;
    }
    ext;
};

xdr source ============================================================

union switch (int v)
    {
    case 0:
        void;
    }

xdr source ============================================================

enum ThresholdIndexes
{
    THRESHOLD_MASTER_WEIGHT = 0,
    THRESHOLD_LOW = 1,
    THRESHOLD_MED = 2,
    THRESHOLD_HIGH = 3
};

xdr source ============================================================

struct TimeBounds
{
    uint64 minTime;
    uint64 maxTime;
};

xdr source ============================================================

struct Transaction
{
    // account used to run the transaction
    AccountID sourceAccount;

    // the fee the sourceAccount will pay
    uint32 fee;

    // sequence number to consume in the account
    SequenceNumber seqNum;

    // validity range (inclusive) for the last ledger close time
    TimeBounds* timeBounds;

    Memo memo;

    Operation operations<100>;

    // reserved for future use
    union switch (int v)
    {
    case 0:
        void;
    }
    ext;
};

xdr source ============================================================

union switch (int v)
    {
    case 0:
        void;
    }

xdr source ============================================================

struct TransactionEnvelope
{
    Transaction tx;
    DecoratedSignature signatures<20>;
};

xdr source ============================================================

struct TransactionHistoryEntry
{
    uint32 ledgerSeq;
    TransactionSet txSet;

    // reserved for future use
    union switch (int v)
    {
    case 0:
        void;
    }
    ext;
};

xdr source ============================================================

union switch (int v)
    {
    case 0:
        void;
    }

xdr source ============================================================

struct TransactionHistoryResultEntry
{
    uint32 ledgerSeq;
    TransactionResultSet txResultSet;

    // reserved for future use
    union switch (int v)
    {
    case 0:
        void;
    }
    ext;
};

xdr source ============================================================

union switch (int v)
    {
    case 0:
        void;
    }

xdr source ============================================================

union TransactionMeta switch (int v)
{
case 0:
    OperationMeta operations<>;
};

xdr source ============================================================

struct TransactionResult
{
    int64 feeCharged; // actual fee charged for the transaction

    union switch (TransactionResultCode code)
    {
    case txSUCCESS:
    case txFAILED:
        OperationResult results<>;
    default:
        void;
    }
    result;

    // reserved for future use
    union switch (int v)
    {
    case 0:
        void;
    }
    ext;
};

xdr source ============================================================

union switch (int v)
    {
    case 0:
        void;
    }

xdr source ============================================================

union switch (TransactionResultCode code)
    {
    case txSUCCESS:
    case txFAILED:
        OperationResult results<>;
    default:
        void;
    }

xdr source ============================================================

enum TransactionResultCode
{
    txSUCCESS = 0, // all operations succeeded

    txFAILED = -1, // one of the operations failed (none were applied)

    txTOO_EARLY = -2,         // ledger closeTime before minTime
    txTOO_LATE = -3,          // ledger closeTime after maxTime
    txMISSING_OPERATION = -4, // no operation was specified
    txBAD_SEQ = -5,           // sequence number does not match source account

    txBAD_AUTH = -6,             // too few valid signatures / wrong network
    txINSUFFICIENT_BALANCE = -7, // fee would bring account below reserve
    txNO_ACCOUNT = -8,           // source account not found
    txINSUFFICIENT_FEE = -9,     // fee is too small
    txBAD_AUTH_EXTRA = -10,      // unused signatures attached to transaction
    txINTERNAL_ERROR = -11       // an unknown error occured
};

xdr source ============================================================

struct TransactionResultPair
{
    Hash transactionHash;
    TransactionResult result; // result for the transaction
};

xdr source ============================================================

struct TransactionResultSet
{
    TransactionResultPair results<MAX_TX_PER_LEDGER>;
};

xdr source ============================================================

struct TransactionSet
{
    Hash previousLedgerHash;
    TransactionEnvelope txs<MAX_TX_PER_LEDGER>;
};

xdr source ============================================================

struct TrustLineEntry
{
    AccountID accountID; // account this trustline belongs to
    Asset asset;         // type of asset (with issuer)
    int64 balance;       // how much of this asset the user has.
                         // Asset defines the unit for this;

    int64 limit;  // balance cannot be above this
    uint32 flags; // see TrustLineFlags

    // reserved for future use
    union switch (int v)
    {
    case 0:
        void;
    }
    ext;
};

xdr source ============================================================

union switch (int v)
    {
    case 0:
        void;
    }

xdr source ============================================================

enum TrustLineFlags
{
    // issuer has authorized account to perform transactions with its credit
    AUTHORIZED_FLAG = 1
};

Constants

AccountID
Hash
Int32
Int64
LedgerEntryChanges
MAX_TX_PER_LEDGER
NodeID
ONE
SequenceNumber
Signature
SignatureHint
String32
Thresholds
Uint256
Uint32
Uint64
UpgradeType
Value

Public Class Methods

current_network() click to toggle source

Returns the passphrase for the currently-configured network, as set by Stellar.default_network or Stellar.on_network

# File lib/stellar/networks.rb, line 25
def self.current_network
  Thread.current["stellar_network_passphrase"] || 
  @default_network || 
  Stellar::Networks::TESTNET
end
current_network_id() click to toggle source

Returns the id for the currently configured network, suitable for use in generating a signature base string or making the root account’s keypair.

# File lib/stellar/networks.rb, line 33
def self.current_network_id
  Digest::SHA256.digest(self.current_network) 
end
default_network=(passphrase) click to toggle source

Configures the default stellar network passphrase for the current process. Unless otherwise specified in a method that needs the passphrase, this value will be used.

NOTE: This method is not thread-safe. It’s best to just call this at startup once and use the other

methods of specifying a network if you need two threads in the same process to communicate with
different networks

@see Stellar.default_network @see Stellar.on_network

# File lib/stellar/networks.rb, line 19
def self.default_network=(passphrase)
  @default_network = passphrase
end
on_network(passphrase, &block) click to toggle source

Executes the provided block in the context of the provided network.

# File lib/stellar/networks.rb, line 38
def self.on_network(passphrase, &block)
  old = Thread.current["stellar_network_passphrase"]
  Thread.current["stellar_network_passphrase"] = passphrase
  block.call
ensure
  Thread.current["stellar_network_passphrase"] = old
end