@@ -6,7 +6,8 @@ use std::str::FromStr;
66use axum:: async_trait;
77use build_info:: chrono:: { DateTime , Utc } ;
88use indexer_dips:: {
9- store:: AgreementStore , DipsError , SignedCancellationRequest , SignedIndexingAgreementVoucher ,
9+ store:: { AgreementStore , StoredIndexingAgreement } ,
10+ DipsError , SignedCancellationRequest , SignedIndexingAgreementVoucher ,
1011 SubgraphIndexingVoucherMetadata ,
1112} ;
1213use sqlx:: { types:: BigDecimal , PgPool } ;
@@ -25,10 +26,7 @@ fn uint256_to_bigdecimal(value: &uint256, field: &str) -> Result<BigDecimal, Dip
2526
2627#[ async_trait]
2728impl AgreementStore for PsqlAgreementStore {
28- async fn get_by_id (
29- & self ,
30- id : Uuid ,
31- ) -> Result < Option < ( SignedIndexingAgreementVoucher , bool ) > , DipsError > {
29+ async fn get_by_id ( & self , id : Uuid ) -> Result < Option < StoredIndexingAgreement > , DipsError > {
3230 let item = sqlx:: query!( "SELECT * FROM indexing_agreements WHERE id=$1" , id, )
3331 . fetch_one ( & self . pool )
3432 . await ;
@@ -41,8 +39,17 @@ impl AgreementStore for PsqlAgreementStore {
4139
4240 let signed = SignedIndexingAgreementVoucher :: abi_decode ( item. signed_payload . as_ref ( ) , true )
4341 . map_err ( |e| DipsError :: AbiDecoding ( e. to_string ( ) ) ) ?;
42+ let metadata =
43+ SubgraphIndexingVoucherMetadata :: abi_decode ( signed. voucher . metadata . as_ref ( ) , true )
44+ . map_err ( |e| DipsError :: AbiDecoding ( e. to_string ( ) ) ) ?;
4445 let cancelled = item. cancelled_at . is_some ( ) ;
45- Ok ( Some ( ( signed, cancelled) ) )
46+ Ok ( Some ( StoredIndexingAgreement {
47+ voucher : signed,
48+ metadata,
49+ cancelled,
50+ current_allocation_id : item. current_allocation_id ,
51+ last_allocation_id : item. last_allocation_id ,
52+ } ) )
4653 }
4754 async fn create_agreement (
4855 & self ,
@@ -72,7 +79,7 @@ impl AgreementStore for PsqlAgreementStore {
7279 let min_epochs_per_collection: i64 = agreement. voucher . minEpochsPerCollection . into ( ) ;
7380 let max_epochs_per_collection: i64 = agreement. voucher . maxEpochsPerCollection . into ( ) ;
7481 sqlx:: query!(
75- "INSERT INTO indexing_agreements VALUES ($1,$2,$3,$4,$5,$6,$7,$8,$9,$10,$11,$12,$13,$14,$15,$16,$17,$18,$19,null,null,null)" ,
82+ "INSERT INTO indexing_agreements VALUES ($1,$2,$3,$4,$5,$6,$7,$8,$9,$10,$11,$12,$13,$14,$15,$16,$17,$18,$19,null,null,null,null )" ,
7683 id,
7784 agreement. signature. as_ref( ) ,
7885 bs,
@@ -130,7 +137,7 @@ pub(crate) mod test {
130137 use sqlx:: PgPool ;
131138 use thegraph_core:: alloy:: {
132139 primitives:: { ruint:: aliases:: U256 , Address } ,
133- sol_types:: { SolType , SolValue } ,
140+ sol_types:: SolValue ,
134141 } ;
135142 use uuid:: Uuid ;
136143
@@ -226,19 +233,15 @@ pub(crate) mod test {
226233 . unwrap ( ) ;
227234
228235 // Retrieve agreement
229- let ( retrieved_signed_voucher, cancelled) = store. get_by_id ( id) . await . unwrap ( ) . unwrap ( ) ;
230-
231- let retrieved_voucher = & retrieved_signed_voucher. voucher ;
232- let retrieved_metadata =
233- <indexer_dips:: SubgraphIndexingVoucherMetadata as SolType >:: abi_decode (
234- retrieved_voucher. metadata . as_ref ( ) ,
235- true ,
236- )
237- . unwrap ( ) ;
236+ let stored_agreement = store. get_by_id ( id) . await . unwrap ( ) . unwrap ( ) ;
237+
238+ let retrieved_voucher = & stored_agreement. voucher ;
239+ let retrieved_metadata = stored_agreement. metadata ;
240+
238241 // Verify retrieved agreement matches original
239- assert_eq ! ( retrieved_signed_voucher . signature, agreement. signature) ;
242+ assert_eq ! ( retrieved_voucher . signature, agreement. signature) ;
240243 assert_eq ! (
241- retrieved_voucher. durationEpochs,
244+ retrieved_voucher. voucher . durationEpochs,
242245 agreement. voucher. durationEpochs
243246 ) ;
244247 assert_eq ! ( retrieved_metadata. protocolNetwork, metadata. protocolNetwork) ;
@@ -247,26 +250,29 @@ pub(crate) mod test {
247250 retrieved_metadata. subgraphDeploymentId,
248251 metadata. subgraphDeploymentId
249252 ) ;
250- assert_eq ! ( retrieved_voucher. payer, agreement. voucher. payer) ;
251- assert_eq ! ( retrieved_voucher. recipient, agreement. voucher. recipient) ;
252- assert_eq ! ( retrieved_voucher. service, agreement. voucher. service) ;
253+ assert_eq ! ( retrieved_voucher. voucher. payer, agreement. voucher. payer) ;
254+ assert_eq ! (
255+ retrieved_voucher. voucher. recipient,
256+ agreement. voucher. recipient
257+ ) ;
258+ assert_eq ! ( retrieved_voucher. voucher. service, agreement. voucher. service) ;
253259 assert_eq ! (
254- retrieved_voucher. maxInitialAmount,
260+ retrieved_voucher. voucher . maxInitialAmount,
255261 agreement. voucher. maxInitialAmount
256262 ) ;
257263 assert_eq ! (
258- retrieved_voucher. maxOngoingAmountPerEpoch,
264+ retrieved_voucher. voucher . maxOngoingAmountPerEpoch,
259265 agreement. voucher. maxOngoingAmountPerEpoch
260266 ) ;
261267 assert_eq ! (
262- retrieved_voucher. maxEpochsPerCollection,
268+ retrieved_voucher. voucher . maxEpochsPerCollection,
263269 agreement. voucher. maxEpochsPerCollection
264270 ) ;
265271 assert_eq ! (
266- retrieved_voucher. minEpochsPerCollection,
272+ retrieved_voucher. voucher . minEpochsPerCollection,
267273 agreement. voucher. minEpochsPerCollection
268274 ) ;
269- assert ! ( !cancelled) ;
275+ assert ! ( !stored_agreement . cancelled) ;
270276 }
271277
272278 #[ sqlx:: test( migrations = "../../migrations" ) ]
0 commit comments