Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Implement Horizon Protocol 14 API changes #295

Merged
merged 3 commits into from
Oct 2, 2020
Merged

Conversation

tamirms
Copy link
Contributor

@tamirms tamirms commented Oct 1, 2020

This PR implements support for Horizon's Protocol 14 API changes. Here is a summary of all the API changes:

New objects

  • Claimable Balance with the following fields:
    • id - balance ID,
    • paging_token - paging token,
    • asset - asset available to be claimed (in canonical form),
    • amount - amount available to be claimed (string, like all amounts),
    • sponsor - sponsoring account ID (can be null),
    • last_modified_ledger - sequence number of the ledger when the balance was last modified,
    • claimants - list of objects:
      • destination - destination account ID,
      • predicate - predicate required to claim a balance (see below).

Modified objects

  • Account object:
    • New sponsor field (account ID, can be null).
    • New num_sponsoring field - number of reserves sponsored by this account,
    • New num_sponsored field - number of reserves sponsored for this account.
  • New sponsor field (account ID) in Account > Balance object (only for non-native assets, can be null).
  • New sponsor field (account ID) in Account > Signers object (can be null).
  • New sponsor field (account ID) in Account's Data object (can be null).
  • New sponsor field (account ID) in Offer object (can be null).

New endpoints

  • /claimable_balances - the list of Claimable Balance objects with the following parameters (only one param per request allowed):
    • asset - find all claimable balances with the given asset (in canonical form),
    • claimant - find all claimable balances with the given claimant account ID,
    • sponsor - find all claimable balances sponsored by a given sponsor account ID.
  • /claimable_balances/{id} - a single Claimable Balance object.

Modified endpoints

  • /accounts can now by filtered by sponsor (new GET param).
  • /offers can now by filtered by sponsor (new GET param).

New operations

  • create_claimable_balance with the following fields:
    • asset - asset available to be claimed (in canonical form),
    • amount - amount available to be claimed,
    • claimants - list of claimants with predicates (see below):
      • destination - destination account ID,
      • predicate - predicate required to claim a balance (see below).
  • claim_claimable_balance with the following fields:
    • balance_id - unique ID of balance to be claimed,
    • claimant - account ID of a claimant.
  • begin_sponsoring_future_reserves with the following fields:
    • sponsored_id - account ID for which future reserves will be sponsored.
  • end_sponsoring_future_reserves with the following fields:
    • begin_sponsor - account sponsoring reserves.
  • revoke_sponsorship with the following fields:
    • account_id - if account sponsorship was revoked,
    • claimable_balance_id - if claimable balance sponsorship was revoked,
    • data_account_id - if account data sponsorship was revoked,
    • data_name - if account data sponsorship was revoked,
    • offer_id - if offer sponsorship was revoked,
    • trustline_account_id - if trustline sponsorship was revoked,
    • trustline_asset - if trustline sponsorship was revoked,
    • signer_account_id - if signer sponsorship was revoked,
    • signer_key - if signer sponsorship was revoked.

New effects

  • claimable_balance_created with the following fields:
    • balance_id - unique ID of claimable balance,
    • asset - asset available to be claimed (in canonical form),
    • amount - amount available to be claimed.
  • claimable_balance_claimant_created with the following fields:
    • balance_id - unique ID of a claimable balance,
    • asset - asset available to be claimed (in canonical form),
    • amount - amount available to be claimed,
    • predicate - predicate required to claim a balance (see below).
  • claimable_balance_claimed with the following fields:
    • balance_id - unique ID of a claimable balance,
    • asset - asset available to be claimed (in canonical form),
    • amount - amount available to be claimed,
  • account_sponsorship_created with the following fields:
    • sponsor - sponsor of an account.
  • account_sponsorship_updated with the following fields:
    • new_sponsor - new sponsor of an account,
    • former_sponsor - former sponsor of an account.
  • account_sponsorship_removed with the following fields:
    • former_sponsor - former sponsor of an account.
  • trustline_sponsorship_created with the following fields:
    • sponsor - sponsor of a trustline.
  • trustline_sponsorship_updated with the following fields:
    • new_sponsor - new sponsor of a trustline,
    • former_sponsor - former sponsor of a trustline.
  • trustline_sponsorship_removed with the following fields:
    • former_sponsor - former sponsor of a trustline.
  • claimable_balance_sponsorship_created with the following fields:
    • sponsor - sponsor of a claimable balance.
  • claimable_balance_sponsorship_updated with the following fields:
    • new_sponsor - new sponsor of a claimable balance,
    • former_sponsor - former sponsor of a claimable balance.
  • claimable_balance_sponsorship_removed with the following fields:
    • former_sponsor - former sponsor of a claimable balance.
  • signer_sponsorship_created with the following fields:
    • signer - signer being sponsored.
    • sponsor - signer sponsor.
  • signer_sponsorship_updated with the following fields:
    • signer - signer being sponsored.
    • former_sponsor - the former sponsor of the signer.
    • new_sponsor - the new sponsor of the signer.
  • signer_sponsorship_removed with the following fields:
    • former_sponsor - former sponsor of a signer.

predicate field

predicate field is a JSON representation of xdr.ClaimPredicate as defined in CAP-23 and is a requirement that needs to be satisfied to claim the balance. It is a recursive structure that can be represented in JSON using for example the following Golang struct:

type claimPredicateJSON struct {
	And           *[]claimPredicateJSON `json:"and,omitempty"`
	Or            *[]claimPredicateJSON `json:"or,omitempty"`
	Not           *claimPredicateJSON   `json:"not,omitempty"`
	Unconditional bool                  `json:"unconditional,omitempty"`
	AbsBefore     *time.Time            `json:"absBefore,omitempty"`
	RelBefore     *int64                `json:"relBefore,omitempty"`
}

In the next I will add support for creating transactions with claimable balance and sponsorship operations. The final PR will update the changelog.

@tamirms tamirms requested review from bartekn and abuiles October 1, 2020 15:20
src/main/java/org/stellar/sdk/Asset.java Show resolved Hide resolved
src/main/java/org/stellar/sdk/Predicate.java Outdated Show resolved Hide resolved
src/main/java/org/stellar/sdk/Predicate.java Show resolved Hide resolved
src/main/java/org/stellar/sdk/Predicate.java Show resolved Hide resolved
@tamirms tamirms merged commit 74ea7c3 into release-0.19.0 Oct 2, 2020
@tamirms tamirms deleted the protocol-14-api branch October 2, 2020 07:08
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants