Skip to content

Commit dbe09f3

Browse files
chore: update photon api (#1634)
* chore: update photon api * fix: context * fix: install script * Update sdk-libs/client/src/indexer/photon_indexer.rs * chore: trigger forester ci on program and photon api changes * switch to warp-vms for forester ci workflow * add retry logic for `get_validity_proof_v2` --------- Co-authored-by: Sergey Timoshin <sergeytimoshin@proton.me>
1 parent e208fa1 commit dbe09f3

15 files changed

+126
-110
lines changed

.github/actionlint.yaml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ self-hosted-runner:
55
- buildjet-4vcpu-ubuntu-2204
66
- buildjet-8vcpu-ubuntu-2204
77
- buildjet-16vcpu-ubuntu-2204
8+
- warp-ubuntu-latest-x64-4x
89
# Configuration variables in array of strings defined in your repository or
910
# organization. `null` means disabling configuration variables check.
1011
# Empty array means no configuration variable is allowed.

.github/workflows/forester-tests.yml

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,14 +6,20 @@ on:
66
paths:
77
- "forester/**"
88
- "forester-utils/**"
9-
- "photon-api/**"
9+
- "sdk-libs/photon-api/**"
10+
- "programs/**"
11+
- "program-libs/batched-merkle-tree/**"
12+
- "scripts/**"
1013
- ".github/workflows/forester-tests.yml"
1114
pull_request:
12-
branches: ["**"]
15+
branches: ["main"]
1316
paths:
1417
- "forester/**"
1518
- "forester-utils/**"
16-
- "photon-api/**"
19+
- "sdk-libs/photon-api/**"
20+
- "programs/**"
21+
- "program-libs/batched-merkle-tree/**"
22+
- "scripts/**"
1723
- ".github/workflows/forester-tests.yml"
1824
types: [opened, synchronize, reopened, ready_for_review]
1925

@@ -69,7 +75,7 @@ jobs:
6975
},
7076
]
7177
name: test-${{ matrix.test-name.name }}
72-
runs-on: ubuntu-latest
78+
runs-on: warp-ubuntu-latest-x64-4x
7379
timeout-minutes: ${{ matrix.test-name.timeout }}
7480
steps:
7581
- uses: actions/checkout@v4

scripts/install.sh

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -102,7 +102,7 @@ install_rust() {
102102
export PATH="${PREFIX}/cargo/bin:${PATH}"
103103
rustup component add clippy rustfmt
104104
cargo install cargo-expand --locked
105-
cargo install --git https://github.com/Lightprotocol/photon.git --branch jorrit/feat-add-test --locked
105+
cargo install --git https://github.com/Lightprotocol/photon.git --rev a779dbece532eb8cbb16f6d80974b85ebf37522b --locked
106106
log "rust"
107107
fi
108108
}

sdk-libs/client/src/indexer/photon_indexer.rs

Lines changed: 46 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -132,7 +132,7 @@ impl<R: RpcConnection> Indexer<R> for PhotonIndexer<R> {
132132
let request: photon_api::models::GetQueueElementsPostRequest =
133133
photon_api::models::GetQueueElementsPostRequest {
134134
params: Box::from(photon_api::models::GetQueueElementsPostRequestParams {
135-
merkle_tree: bs58::encode(pubkey).into_string(),
135+
tree: bs58::encode(pubkey).into_string(),
136136
queue_type: queue_type as u16,
137137
num_elements,
138138
start_offset,
@@ -159,7 +159,7 @@ impl<R: RpcConnection> Indexer<R> for PhotonIndexer<R> {
159159
.collect();
160160
let root = Hash::from_base58(&x.root).unwrap();
161161
let leaf = Hash::from_base58(&x.leaf).unwrap();
162-
let merkle_tree = Hash::from_base58(&x.merkle_tree).unwrap();
162+
let merkle_tree = Hash::from_base58(&x.tree).unwrap();
163163
let tx_hash =
164164
x.tx_hash.as_ref().map(|x| Hash::from_base58(x).unwrap());
165165
let account_hash = Hash::from_base58(&x.account_hash).unwrap();
@@ -792,34 +792,52 @@ impl<R: RpcConnection> Indexer<R> for PhotonIndexer<R> {
792792
hashes: Vec<Hash>,
793793
new_addresses_with_trees: Vec<AddressWithTree>,
794794
) -> Result<CompressedProofWithContextV2, IndexerError> {
795-
self.rate_limited_request(|| async {
796-
let request = photon_api::models::GetValidityProofV2PostRequest {
797-
params: Box::new(photon_api::models::GetValidityProofPostRequestParams {
798-
hashes: Some(hashes.iter().map(|x| x.to_base58()).collect()),
799-
// new_addresses: None,
800-
new_addresses_with_trees: Some(
801-
new_addresses_with_trees
802-
.iter()
803-
.map(|x| photon_api::models::AddressWithTree {
804-
address: x.address.to_base58(),
805-
tree: x.tree.to_string(),
806-
})
807-
.collect(),
808-
),
809-
}),
810-
..Default::default()
811-
};
795+
let max_retries = 4;
796+
let mut retries = 0;
797+
let mut delay = 1000;
798+
799+
loop {
800+
match self
801+
.rate_limited_request(|| async {
802+
let request = photon_api::models::GetValidityProofV2PostRequest {
803+
params: Box::new(photon_api::models::GetValidityProofPostRequestParams {
804+
hashes: Some(hashes.iter().map(|x| x.to_base58()).collect()),
805+
new_addresses_with_trees: Some(
806+
new_addresses_with_trees
807+
.iter()
808+
.map(|x| photon_api::models::AddressWithTree {
809+
address: x.address.to_base58(),
810+
tree: x.tree.to_string(),
811+
})
812+
.collect(),
813+
),
814+
}),
815+
..Default::default()
816+
};
812817

813-
let result = photon_api::apis::default_api::get_validity_proof_v2_post(
814-
&self.configuration,
815-
request,
816-
)
817-
.await?;
818+
let result = photon_api::apis::default_api::get_validity_proof_v2_post(
819+
&self.configuration,
820+
request,
821+
)
822+
.await?;
818823

819-
let result = Self::extract_result("get_validity_proof_v2", result.result)?;
820-
Ok(*result.value)
821-
})
822-
.await
824+
let result = Self::extract_result("get_validity_proof_v2", result.result)?;
825+
Ok(*result.value)
826+
})
827+
.await
828+
{
829+
Ok(result) => return Ok(result),
830+
Err(e) => {
831+
if retries >= max_retries {
832+
return Err(e);
833+
}
834+
tokio::time::sleep(std::time::Duration::from_millis(delay)).await;
835+
retries += 1;
836+
delay *= 2;
837+
continue;
838+
}
839+
}
840+
}
823841
}
824842

825843
async fn get_indexer_slot(&self, _r: &mut R) -> Result<u64, IndexerError> {

sdk-libs/photon-api/.openapi-generator/FILES

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ docs/CompressedProofWithContext.md
2020
docs/CompressedProofWithContextV2.md
2121
docs/CompressionInfoV2.md
2222
docs/Context.md
23-
docs/ContextInfo.md
23+
docs/TreeContextInfo.md
2424
docs/DataSlice.md
2525
docs/DefaultApi.md
2626
docs/FilterSelector.md

sdk-libs/photon-api/README.md

Lines changed: 34 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -26,39 +26,39 @@ All URIs are relative to *https://devnet.helius-rpc.com?api-key=<api_key>*
2626

2727
Class | Method | HTTP request | Description
2828
------------ | ------------- | ------------- | -------------
29-
*DefaultApi* | [**get_compressed_account_balance_post**](docs/DefaultApi.md#get_compressed_account_balance_post) | **POST** /getCompressedAccountBalance |
30-
*DefaultApi* | [**get_compressed_account_post**](docs/DefaultApi.md#get_compressed_account_post) | **POST** /getCompressedAccount |
31-
*DefaultApi* | [**get_compressed_account_proof_post**](docs/DefaultApi.md#get_compressed_account_proof_post) | **POST** /getCompressedAccountProof |
32-
*DefaultApi* | [**get_compressed_account_v2_post**](docs/DefaultApi.md#get_compressed_account_v2_post) | **POST** /getCompressedAccountV2 |
33-
*DefaultApi* | [**get_compressed_accounts_by_owner_post**](docs/DefaultApi.md#get_compressed_accounts_by_owner_post) | **POST** /getCompressedAccountsByOwner |
34-
*DefaultApi* | [**get_compressed_accounts_by_owner_v2_post**](docs/DefaultApi.md#get_compressed_accounts_by_owner_v2_post) | **POST** /getCompressedAccountsByOwnerV2 |
35-
*DefaultApi* | [**get_compressed_balance_by_owner_post**](docs/DefaultApi.md#get_compressed_balance_by_owner_post) | **POST** /getCompressedBalanceByOwner |
36-
*DefaultApi* | [**get_compressed_mint_token_holders_post**](docs/DefaultApi.md#get_compressed_mint_token_holders_post) | **POST** /getCompressedMintTokenHolders |
37-
*DefaultApi* | [**get_compressed_token_account_balance_post**](docs/DefaultApi.md#get_compressed_token_account_balance_post) | **POST** /getCompressedTokenAccountBalance |
38-
*DefaultApi* | [**get_compressed_token_accounts_by_delegate_post**](docs/DefaultApi.md#get_compressed_token_accounts_by_delegate_post) | **POST** /getCompressedTokenAccountsByDelegate |
39-
*DefaultApi* | [**get_compressed_token_accounts_by_delegate_v2_post**](docs/DefaultApi.md#get_compressed_token_accounts_by_delegate_v2_post) | **POST** /getCompressedTokenAccountsByDelegateV2 |
40-
*DefaultApi* | [**get_compressed_token_accounts_by_owner_post**](docs/DefaultApi.md#get_compressed_token_accounts_by_owner_post) | **POST** /getCompressedTokenAccountsByOwner |
41-
*DefaultApi* | [**get_compressed_token_accounts_by_owner_v2_post**](docs/DefaultApi.md#get_compressed_token_accounts_by_owner_v2_post) | **POST** /getCompressedTokenAccountsByOwnerV2 |
42-
*DefaultApi* | [**get_compressed_token_balances_by_owner_post**](docs/DefaultApi.md#get_compressed_token_balances_by_owner_post) | **POST** /getCompressedTokenBalancesByOwner |
43-
*DefaultApi* | [**get_compressed_token_balances_by_owner_v2_post**](docs/DefaultApi.md#get_compressed_token_balances_by_owner_v2_post) | **POST** /getCompressedTokenBalancesByOwnerV2 |
44-
*DefaultApi* | [**get_compression_signatures_for_account_post**](docs/DefaultApi.md#get_compression_signatures_for_account_post) | **POST** /getCompressionSignaturesForAccount |
45-
*DefaultApi* | [**get_compression_signatures_for_address_post**](docs/DefaultApi.md#get_compression_signatures_for_address_post) | **POST** /getCompressionSignaturesForAddress |
46-
*DefaultApi* | [**get_compression_signatures_for_owner_post**](docs/DefaultApi.md#get_compression_signatures_for_owner_post) | **POST** /getCompressionSignaturesForOwner |
47-
*DefaultApi* | [**get_compression_signatures_for_token_owner_post**](docs/DefaultApi.md#get_compression_signatures_for_token_owner_post) | **POST** /getCompressionSignaturesForTokenOwner |
48-
*DefaultApi* | [**get_indexer_health_post**](docs/DefaultApi.md#get_indexer_health_post) | **POST** /getIndexerHealth |
49-
*DefaultApi* | [**get_indexer_slot_post**](docs/DefaultApi.md#get_indexer_slot_post) | **POST** /getIndexerSlot |
50-
*DefaultApi* | [**get_latest_compression_signatures_post**](docs/DefaultApi.md#get_latest_compression_signatures_post) | **POST** /getLatestCompressionSignatures |
51-
*DefaultApi* | [**get_latest_non_voting_signatures_post**](docs/DefaultApi.md#get_latest_non_voting_signatures_post) | **POST** /getLatestNonVotingSignatures |
52-
*DefaultApi* | [**get_multiple_compressed_account_proofs_post**](docs/DefaultApi.md#get_multiple_compressed_account_proofs_post) | **POST** /getMultipleCompressedAccountProofs |
53-
*DefaultApi* | [**get_multiple_compressed_accounts_post**](docs/DefaultApi.md#get_multiple_compressed_accounts_post) | **POST** /getMultipleCompressedAccounts |
54-
*DefaultApi* | [**get_multiple_compressed_accounts_v2_post**](docs/DefaultApi.md#get_multiple_compressed_accounts_v2_post) | **POST** /getMultipleCompressedAccountsV2 |
55-
*DefaultApi* | [**get_multiple_new_address_proofs_post**](docs/DefaultApi.md#get_multiple_new_address_proofs_post) | **POST** /getMultipleNewAddressProofs |
56-
*DefaultApi* | [**get_multiple_new_address_proofs_v2_post**](docs/DefaultApi.md#get_multiple_new_address_proofs_v2_post) | **POST** /getMultipleNewAddressProofsV2 |
57-
*DefaultApi* | [**get_queue_elements_post**](docs/DefaultApi.md#get_queue_elements_post) | **POST** /getQueueElements |
58-
*DefaultApi* | [**get_transaction_with_compression_info_post**](docs/DefaultApi.md#get_transaction_with_compression_info_post) | **POST** /getTransactionWithCompressionInfo |
59-
*DefaultApi* | [**get_transaction_with_compression_info_v2_post**](docs/DefaultApi.md#get_transaction_with_compression_info_v2_post) | **POST** /getTransactionWithCompressionInfoV2 |
60-
*DefaultApi* | [**get_validity_proof_post**](docs/DefaultApi.md#get_validity_proof_post) | **POST** /getValidityProof |
61-
*DefaultApi* | [**get_validity_proof_v2_post**](docs/DefaultApi.md#get_validity_proof_v2_post) | **POST** /getValidityProofV2 |
29+
*DefaultApi* | [**get_compressed_account_balance_post**](docs/DefaultApi.md#get_compressed_account_balance_post) | **POST** /getCompressedAccountBalance |
30+
*DefaultApi* | [**get_compressed_account_post**](docs/DefaultApi.md#get_compressed_account_post) | **POST** /getCompressedAccount |
31+
*DefaultApi* | [**get_compressed_account_proof_post**](docs/DefaultApi.md#get_compressed_account_proof_post) | **POST** /getCompressedAccountProof |
32+
*DefaultApi* | [**get_compressed_account_v2_post**](docs/DefaultApi.md#get_compressed_account_v2_post) | **POST** /getCompressedAccountV2 |
33+
*DefaultApi* | [**get_compressed_accounts_by_owner_post**](docs/DefaultApi.md#get_compressed_accounts_by_owner_post) | **POST** /getCompressedAccountsByOwner |
34+
*DefaultApi* | [**get_compressed_accounts_by_owner_v2_post**](docs/DefaultApi.md#get_compressed_accounts_by_owner_v2_post) | **POST** /getCompressedAccountsByOwnerV2 |
35+
*DefaultApi* | [**get_compressed_balance_by_owner_post**](docs/DefaultApi.md#get_compressed_balance_by_owner_post) | **POST** /getCompressedBalanceByOwner |
36+
*DefaultApi* | [**get_compressed_mint_token_holders_post**](docs/DefaultApi.md#get_compressed_mint_token_holders_post) | **POST** /getCompressedMintTokenHolders |
37+
*DefaultApi* | [**get_compressed_token_account_balance_post**](docs/DefaultApi.md#get_compressed_token_account_balance_post) | **POST** /getCompressedTokenAccountBalance |
38+
*DefaultApi* | [**get_compressed_token_accounts_by_delegate_post**](docs/DefaultApi.md#get_compressed_token_accounts_by_delegate_post) | **POST** /getCompressedTokenAccountsByDelegate |
39+
*DefaultApi* | [**get_compressed_token_accounts_by_delegate_v2_post**](docs/DefaultApi.md#get_compressed_token_accounts_by_delegate_v2_post) | **POST** /getCompressedTokenAccountsByDelegateV2 |
40+
*DefaultApi* | [**get_compressed_token_accounts_by_owner_post**](docs/DefaultApi.md#get_compressed_token_accounts_by_owner_post) | **POST** /getCompressedTokenAccountsByOwner |
41+
*DefaultApi* | [**get_compressed_token_accounts_by_owner_v2_post**](docs/DefaultApi.md#get_compressed_token_accounts_by_owner_v2_post) | **POST** /getCompressedTokenAccountsByOwnerV2 |
42+
*DefaultApi* | [**get_compressed_token_balances_by_owner_post**](docs/DefaultApi.md#get_compressed_token_balances_by_owner_post) | **POST** /getCompressedTokenBalancesByOwner |
43+
*DefaultApi* | [**get_compressed_token_balances_by_owner_v2_post**](docs/DefaultApi.md#get_compressed_token_balances_by_owner_v2_post) | **POST** /getCompressedTokenBalancesByOwnerV2 |
44+
*DefaultApi* | [**get_compression_signatures_for_account_post**](docs/DefaultApi.md#get_compression_signatures_for_account_post) | **POST** /getCompressionSignaturesForAccount |
45+
*DefaultApi* | [**get_compression_signatures_for_address_post**](docs/DefaultApi.md#get_compression_signatures_for_address_post) | **POST** /getCompressionSignaturesForAddress |
46+
*DefaultApi* | [**get_compression_signatures_for_owner_post**](docs/DefaultApi.md#get_compression_signatures_for_owner_post) | **POST** /getCompressionSignaturesForOwner |
47+
*DefaultApi* | [**get_compression_signatures_for_token_owner_post**](docs/DefaultApi.md#get_compression_signatures_for_token_owner_post) | **POST** /getCompressionSignaturesForTokenOwner |
48+
*DefaultApi* | [**get_indexer_health_post**](docs/DefaultApi.md#get_indexer_health_post) | **POST** /getIndexerHealth |
49+
*DefaultApi* | [**get_indexer_slot_post**](docs/DefaultApi.md#get_indexer_slot_post) | **POST** /getIndexerSlot |
50+
*DefaultApi* | [**get_latest_compression_signatures_post**](docs/DefaultApi.md#get_latest_compression_signatures_post) | **POST** /getLatestCompressionSignatures |
51+
*DefaultApi* | [**get_latest_non_voting_signatures_post**](docs/DefaultApi.md#get_latest_non_voting_signatures_post) | **POST** /getLatestNonVotingSignatures |
52+
*DefaultApi* | [**get_multiple_compressed_account_proofs_post**](docs/DefaultApi.md#get_multiple_compressed_account_proofs_post) | **POST** /getMultipleCompressedAccountProofs |
53+
*DefaultApi* | [**get_multiple_compressed_accounts_post**](docs/DefaultApi.md#get_multiple_compressed_accounts_post) | **POST** /getMultipleCompressedAccounts |
54+
*DefaultApi* | [**get_multiple_compressed_accounts_v2_post**](docs/DefaultApi.md#get_multiple_compressed_accounts_v2_post) | **POST** /getMultipleCompressedAccountsV2 |
55+
*DefaultApi* | [**get_multiple_new_address_proofs_post**](docs/DefaultApi.md#get_multiple_new_address_proofs_post) | **POST** /getMultipleNewAddressProofs |
56+
*DefaultApi* | [**get_multiple_new_address_proofs_v2_post**](docs/DefaultApi.md#get_multiple_new_address_proofs_v2_post) | **POST** /getMultipleNewAddressProofsV2 |
57+
*DefaultApi* | [**get_queue_elements_post**](docs/DefaultApi.md#get_queue_elements_post) | **POST** /getQueueElements |
58+
*DefaultApi* | [**get_transaction_with_compression_info_post**](docs/DefaultApi.md#get_transaction_with_compression_info_post) | **POST** /getTransactionWithCompressionInfo |
59+
*DefaultApi* | [**get_transaction_with_compression_info_v2_post**](docs/DefaultApi.md#get_transaction_with_compression_info_v2_post) | **POST** /getTransactionWithCompressionInfoV2 |
60+
*DefaultApi* | [**get_validity_proof_post**](docs/DefaultApi.md#get_validity_proof_post) | **POST** /getValidityProof |
61+
*DefaultApi* | [**get_validity_proof_v2_post**](docs/DefaultApi.md#get_validity_proof_v2_post) | **POST** /getValidityProofV2 |
6262

6363

6464
## Documentation For Models
@@ -81,7 +81,7 @@ Class | Method | HTTP request | Description
8181
- [CompressedProofWithContextV2](docs/CompressedProofWithContextV2.md)
8282
- [CompressionInfoV2](docs/CompressionInfoV2.md)
8383
- [Context](docs/Context.md)
84-
- [ContextInfo](docs/ContextInfo.md)
84+
- [TreeContextInfo](docs/TreeContextInfo.md)
8585
- [DataSlice](docs/DataSlice.md)
8686
- [FilterSelector](docs/FilterSelector.md)
8787
- [GetCompressedAccountBalancePost200Response](docs/GetCompressedAccountBalancePost200Response.md)
@@ -222,6 +222,3 @@ cargo doc --open
222222
```
223223

224224
## Author
225-
226-
227-
Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
# ContextInfo
1+
# TreeContextInfo
22

33
## Properties
44

@@ -7,8 +7,6 @@ Name | Type | Description | Notes
77
**cpi_context** | Option<**String**> | A Solana public key represented as a base58 string. | [optional][default to 111111131h1vYVSYuKP6AhS86fbRdMw9XHiZAvAaj]
88
**merkle_tree** | **String** | A Solana public key represented as a base58 string. | [default to 111111131h1vYVSYuKP6AhS86fbRdMw9XHiZAvAaj]
99
**queue** | **String** | A Solana public key represented as a base58 string. | [default to 111111131h1vYVSYuKP6AhS86fbRdMw9XHiZAvAaj]
10-
**tree_type** | **i32** | |
10+
**tree_type** | **i32** | |
1111

1212
[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
13-
14-

sdk-libs/photon-api/docs/GetCompressedAccountProofResponseValueV2.md

Lines changed: 7 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -4,14 +4,12 @@
44

55
Name | Type | Description | Notes
66
------------ | ------------- | ------------- | -------------
7-
**context** | [**models::ContextInfo**](ContextInfo.md) | |
8-
**hash** | **String** | A 32-byte hash represented as a base58 string. |
9-
**leaf_index** | **i32** | |
10-
**proof** | **Vec<String>** | |
11-
**prove_by_index** | **bool** | |
12-
**root** | **String** | A 32-byte hash represented as a base58 string. |
13-
**root_seq** | **i32** | |
7+
**context** | [**models::TreeContextInfo**](TreeContextInfo.md) | |
8+
**hash** | **String** | A 32-byte hash represented as a base58 string. |
9+
**leaf_index** | **i32** | |
10+
**proof** | **Vec<String>** | |
11+
**prove_by_index** | **bool** | |
12+
**root** | **String** | A 32-byte hash represented as a base58 string. |
13+
**root_seq** | **i32** | |
1414

1515
[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
16-
17-

0 commit comments

Comments
 (0)