Implement Horizon Protocol 14 API changes #295
Merged
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
This PR implements support for Horizon's Protocol 14 API changes. Here is a summary of all the API changes:
New objects
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 benull
),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
sponsor
field (account ID, can benull
).num_sponsoring
field - number of reserves sponsored by this account,num_sponsored
field - number of reserves sponsored for this account.sponsor
field (account ID) in Account > Balance object (only for non-native assets, can benull
).sponsor
field (account ID) in Account > Signers object (can benull
).sponsor
field (account ID) in Account's Data object (can benull
).sponsor
field (account ID) in Offer object (can benull
).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 bysponsor
(new GET param)./offers
can now by filtered bysponsor
(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
fieldpredicate
field is a JSON representation ofxdr.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:In the next I will add support for creating transactions with claimable balance and sponsorship operations. The final PR will update the changelog.