Skip to content

Commit 387624d

Browse files
committed
rpc: factor out get_transaction logic
1 parent 4b8754d commit 387624d

File tree

9 files changed

+380
-117
lines changed

9 files changed

+380
-117
lines changed

crates/sui-e2e-tests/tests/rpc/transactions.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33

44
use sui_macros::sim_test;
55
use sui_rpc_api::client::sdk::Client;
6-
use sui_rpc_api::rest::transactions::ListTransactionsQueryParameters;
6+
use sui_rpc_api::rest::transactions::ListTransactionsCursorParameters;
77
use test_cluster::TestClusterBuilder;
88

99
use crate::transfer_coin;
@@ -28,7 +28,7 @@ async fn list_checkpoint() {
2828
let client = Client::new(test_cluster.rpc_url()).unwrap();
2929

3030
let transactions = client
31-
.list_transactions(&ListTransactionsQueryParameters::default())
31+
.list_transactions(&ListTransactionsCursorParameters::default())
3232
.await
3333
.unwrap()
3434
.into_inner();

crates/sui-rpc-api/openapi/openapi.json

Lines changed: 150 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -595,6 +595,76 @@
595595
"$ref": "#/components/schemas/TransactionDigest"
596596
},
597597
"style": "simple"
598+
},
599+
{
600+
"in": "query",
601+
"name": "effects",
602+
"description": "Request `TransactionEffects` be included in the response\n\nDefaults to `true` if not provided.",
603+
"schema": {
604+
"description": "Request `TransactionEffects` be included in the response\n\nDefaults to `true` if not provided.",
605+
"type": "boolean"
606+
},
607+
"style": "form"
608+
},
609+
{
610+
"in": "query",
611+
"name": "effects_bcs",
612+
"description": "Request `TransactionEffects` encoded as BCS be included in the response\n\nDefaults to `false` if not provided.",
613+
"schema": {
614+
"description": "Request `TransactionEffects` encoded as BCS be included in the response\n\nDefaults to `false` if not provided.",
615+
"type": "boolean"
616+
},
617+
"style": "form"
618+
},
619+
{
620+
"in": "query",
621+
"name": "events",
622+
"description": "Request `TransactionEvents` be included in the response\n\nDefaults to `true` if not provided.",
623+
"schema": {
624+
"description": "Request `TransactionEvents` be included in the response\n\nDefaults to `true` if not provided.",
625+
"type": "boolean"
626+
},
627+
"style": "form"
628+
},
629+
{
630+
"in": "query",
631+
"name": "events_bcs",
632+
"description": "Request `TransactionEvents` encoded as BCS be included in the response\n\nDefaults to `false` if not provided.",
633+
"schema": {
634+
"description": "Request `TransactionEvents` encoded as BCS be included in the response\n\nDefaults to `false` if not provided.",
635+
"type": "boolean"
636+
},
637+
"style": "form"
638+
},
639+
{
640+
"in": "query",
641+
"name": "signatures",
642+
"description": "Request `Vec<UserSignature>` be included in the response\n\nDefaults to `true` if not provided.",
643+
"schema": {
644+
"description": "Request `Vec<UserSignature>` be included in the response\n\nDefaults to `true` if not provided.",
645+
"type": "boolean"
646+
},
647+
"style": "form"
648+
},
649+
{
650+
"in": "query",
651+
"name": "transaction",
652+
"description": "Request `Transaction` be included in the response\n\nDefaults to `true` if not provided.",
653+
"schema": {
654+
"description": "Request `Transaction` be included in the response\n\nDefaults to `true` if not provided.",
655+
"type": "boolean"
656+
},
657+
"style": "form"
658+
},
659+
{
660+
"in": "query",
661+
"name": "transaction_bcs",
662+
"description": "Request `Transaction` encoded as BCS be included in the response\n\nDefaults to `false` if not provided.",
663+
"schema": {
664+
"description": "Request `Transaction` encoded as BCS be included in the response\n\nDefaults to `false` if not provided.",
665+
"type": "boolean"
666+
},
667+
"style": "form"
598668
}
599669
],
600670
"responses": {
@@ -647,6 +717,76 @@
647717
"type": "string"
648718
},
649719
"style": "form"
720+
},
721+
{
722+
"in": "query",
723+
"name": "effects",
724+
"description": "Request `TransactionEffects` be included in the response\n\nDefaults to `true` if not provided.",
725+
"schema": {
726+
"description": "Request `TransactionEffects` be included in the response\n\nDefaults to `true` if not provided.",
727+
"type": "boolean"
728+
},
729+
"style": "form"
730+
},
731+
{
732+
"in": "query",
733+
"name": "effects_bcs",
734+
"description": "Request `TransactionEffects` encoded as BCS be included in the response\n\nDefaults to `false` if not provided.",
735+
"schema": {
736+
"description": "Request `TransactionEffects` encoded as BCS be included in the response\n\nDefaults to `false` if not provided.",
737+
"type": "boolean"
738+
},
739+
"style": "form"
740+
},
741+
{
742+
"in": "query",
743+
"name": "events",
744+
"description": "Request `TransactionEvents` be included in the response\n\nDefaults to `true` if not provided.",
745+
"schema": {
746+
"description": "Request `TransactionEvents` be included in the response\n\nDefaults to `true` if not provided.",
747+
"type": "boolean"
748+
},
749+
"style": "form"
750+
},
751+
{
752+
"in": "query",
753+
"name": "events_bcs",
754+
"description": "Request `TransactionEvents` encoded as BCS be included in the response\n\nDefaults to `false` if not provided.",
755+
"schema": {
756+
"description": "Request `TransactionEvents` encoded as BCS be included in the response\n\nDefaults to `false` if not provided.",
757+
"type": "boolean"
758+
},
759+
"style": "form"
760+
},
761+
{
762+
"in": "query",
763+
"name": "signatures",
764+
"description": "Request `Vec<UserSignature>` be included in the response\n\nDefaults to `true` if not provided.",
765+
"schema": {
766+
"description": "Request `Vec<UserSignature>` be included in the response\n\nDefaults to `true` if not provided.",
767+
"type": "boolean"
768+
},
769+
"style": "form"
770+
},
771+
{
772+
"in": "query",
773+
"name": "transaction",
774+
"description": "Request `Transaction` be included in the response\n\nDefaults to `true` if not provided.",
775+
"schema": {
776+
"description": "Request `Transaction` be included in the response\n\nDefaults to `true` if not provided.",
777+
"type": "boolean"
778+
},
779+
"style": "form"
780+
},
781+
{
782+
"in": "query",
783+
"name": "transaction_bcs",
784+
"description": "Request `Transaction` encoded as BCS be included in the response\n\nDefaults to `false` if not provided.",
785+
"schema": {
786+
"description": "Request `Transaction` encoded as BCS be included in the response\n\nDefaults to `false` if not provided.",
787+
"type": "boolean"
788+
},
789+
"style": "form"
650790
}
651791
],
652792
"responses": {
@@ -5362,15 +5502,11 @@
53625502
"TransactionResponse": {
53635503
"type": "object",
53645504
"required": [
5365-
"digest",
5366-
"effects",
5367-
"signatures",
5368-
"transaction"
5505+
"digest"
53695506
],
53705507
"properties": {
53715508
"checkpoint": {
53725509
"description": "Radix-10 encoded 64-bit unsigned integer",
5373-
"default": null,
53745510
"type": "string",
53755511
"format": "u64"
53765512
},
@@ -5380,9 +5516,15 @@
53805516
"effects": {
53815517
"$ref": "#/components/schemas/TransactionEffects"
53825518
},
5519+
"effects_bcs": {
5520+
"type": "string"
5521+
},
53835522
"events": {
53845523
"$ref": "#/components/schemas/TransactionEvents"
53855524
},
5525+
"events_bcs": {
5526+
"type": "string"
5527+
},
53865528
"signatures": {
53875529
"type": "array",
53885530
"items": {
@@ -5391,12 +5533,14 @@
53915533
},
53925534
"timestamp_ms": {
53935535
"description": "Radix-10 encoded 64-bit unsigned integer",
5394-
"default": null,
53955536
"type": "string",
53965537
"format": "u64"
53975538
},
53985539
"transaction": {
53995540
"$ref": "#/components/schemas/Transaction"
5541+
},
5542+
"transaction_bcs": {
5543+
"type": "string"
54005544
}
54015545
}
54025546
},

crates/sui-rpc-api/src/client/sdk.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -33,14 +33,14 @@ use crate::rest::system::ProtocolConfigResponse;
3333
use crate::rest::system::SystemStateSummary;
3434
use crate::rest::system::X_SUI_MAX_SUPPORTED_PROTOCOL_VERSION;
3535
use crate::rest::system::X_SUI_MIN_SUPPORTED_PROTOCOL_VERSION;
36-
use crate::rest::transactions::ListTransactionsQueryParameters;
36+
use crate::rest::transactions::ListTransactionsCursorParameters;
3737
use crate::rest::transactions::ResolveTransactionQueryParameters;
3838
use crate::rest::transactions::ResolveTransactionResponse;
3939
use crate::rest::transactions::TransactionExecutionResponse;
40-
use crate::rest::transactions::TransactionResponse;
4140
use crate::rest::transactions::TransactionSimulationResponse;
4241
use crate::types::CheckpointResponse;
4342
use crate::types::NodeInfo;
43+
use crate::types::TransactionResponse;
4444
use crate::types::X_SUI_CHAIN;
4545
use crate::types::X_SUI_CHAIN_ID;
4646
use crate::types::X_SUI_CHECKPOINT_HEIGHT;
@@ -296,7 +296,7 @@ impl Client {
296296

297297
pub async fn list_transactions(
298298
&self,
299-
parameters: &ListTransactionsQueryParameters,
299+
parameters: &ListTransactionsCursorParameters,
300300
) -> Result<Response<Vec<TransactionResponse>>> {
301301
let url = self.url().join("transactions")?;
302302

crates/sui-rpc-api/src/proto/mod.rs

Lines changed: 0 additions & 57 deletions
Original file line numberDiff line numberDiff line change
@@ -337,63 +337,6 @@ impl TryFrom<&UserSignature> for sui_types::signature::GenericSignature {
337337
}
338338
}
339339

340-
//
341-
// GetTransactionResponse
342-
//
343-
344-
impl TryFrom<crate::rest::transactions::TransactionResponse> for GetTransactionResponse {
345-
type Error = bcs::Error;
346-
347-
fn try_from(
348-
value: crate::rest::transactions::TransactionResponse,
349-
) -> Result<Self, Self::Error> {
350-
Ok(Self {
351-
digest: value.digest.as_bytes().to_vec().into(),
352-
transaction: Some(Transaction::try_from(&value.transaction)?),
353-
signatures: value
354-
.signatures
355-
.iter()
356-
.map(UserSignature::try_from)
357-
.collect::<Result<_, _>>()?,
358-
effects: Some(TransactionEffects::try_from(&value.effects)?),
359-
events: value
360-
.events
361-
.as_ref()
362-
.map(TransactionEvents::try_from)
363-
.transpose()?,
364-
checkpoint: value.checkpoint,
365-
timestamp_ms: value.timestamp_ms,
366-
})
367-
}
368-
}
369-
370-
impl TryFrom<GetTransactionResponse> for crate::rest::transactions::TransactionResponse {
371-
type Error = bcs::Error;
372-
373-
fn try_from(value: GetTransactionResponse) -> Result<Self, Self::Error> {
374-
Ok(Self {
375-
digest: sui_sdk_types::types::TransactionDigest::from_bytes(&value.digest)
376-
.map_err(|e| bcs::Error::Custom(e.to_string()))?,
377-
transaction: value
378-
.transaction
379-
.ok_or_else(|| bcs::Error::Custom("missing transaction".into()))?
380-
.pipe_ref(TryInto::try_into)?,
381-
signatures: value
382-
.signatures
383-
.iter()
384-
.map(TryInto::try_into)
385-
.collect::<Result<_, _>>()?,
386-
effects: value
387-
.effects
388-
.ok_or_else(|| bcs::Error::Custom("missing effects".into()))?
389-
.pipe_ref(TryInto::try_into)?,
390-
events: value.events.as_ref().map(TryInto::try_into).transpose()?,
391-
checkpoint: value.checkpoint,
392-
timestamp_ms: value.timestamp_ms,
393-
})
394-
}
395-
}
396-
397340
//
398341
// CheckpointTransaction
399342
//

crates/sui-rpc-api/src/reader.rs

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -113,10 +113,10 @@ impl StateReader {
113113
.ok()?
114114
}
115115

116-
pub fn get_transaction_response(
116+
pub fn get_transaction_read(
117117
&self,
118118
digest: sui_sdk_types::types::TransactionDigest,
119-
) -> crate::Result<super::rest::transactions::TransactionResponse> {
119+
) -> crate::Result<TransactionRead> {
120120
let (
121121
SignedTransaction {
122122
transaction,
@@ -135,7 +135,7 @@ impl StateReader {
135135
None
136136
};
137137

138-
Ok(crate::rest::transactions::TransactionResponse {
138+
Ok(TransactionRead {
139139
digest: transaction.digest(),
140140
transaction,
141141
signatures,
@@ -163,6 +163,17 @@ impl StateReader {
163163
}
164164
}
165165

166+
#[derive(Debug)]
167+
pub struct TransactionRead {
168+
pub digest: sui_sdk_types::types::TransactionDigest,
169+
pub transaction: sui_sdk_types::types::Transaction,
170+
pub signatures: Vec<sui_sdk_types::types::UserSignature>,
171+
pub effects: sui_sdk_types::types::TransactionEffects,
172+
pub events: Option<sui_sdk_types::types::TransactionEvents>,
173+
pub checkpoint: Option<u64>,
174+
pub timestamp_ms: Option<u64>,
175+
}
176+
166177
pub struct CheckpointTransactionsIter {
167178
reader: StateReader,
168179
direction: Direction,

0 commit comments

Comments
 (0)