Skip to content
Merged
Show file tree
Hide file tree
Changes from 3 commits
Commits
Show all changes
28 commits
Select commit Hold shift + click to select a range
c9760d3
feat(graphql): Allow waiting for finalization in client
DaughterOfMars Oct 27, 2025
cd89928
bindings
DaughterOfMars Oct 27, 2025
9d3ba6e
go home
DaughterOfMars Oct 27, 2025
f234a4e
add doc
DaughterOfMars Oct 28, 2025
6842feb
Improve wait fn and execute
DaughterOfMars Oct 28, 2025
770bc44
apply to other execute fn
DaughterOfMars Oct 28, 2025
731500c
Merge branch 'sdk-bindings' into feat/graphql-ex-finalization
DaughterOfMars Oct 28, 2025
9ed2bfb
Merge branch 'sdk-bindings' into feat/graphql-ex-finalization
DaughterOfMars Oct 28, 2025
b843622
clippy
DaughterOfMars Oct 28, 2025
abf5c9d
review
DaughterOfMars Oct 29, 2025
e613a32
Update crates/iota-sdk-graphql-client/src/lib.rs
DaughterOfMars Oct 29, 2025
f50986d
Merge branch 'sdk-bindings' into feat/graphql-ex-finalization
DaughterOfMars Oct 29, 2025
d2e6b30
more bindings updates
DaughterOfMars Oct 29, 2025
14da042
update gas station example
DaughterOfMars Oct 29, 2025
da48452
fix responses and wait for checkpoint inclusion
DaughterOfMars Oct 29, 2025
51d2d5b
Don't return transaction effects
DaughterOfMars Oct 30, 2025
4be54e8
fix balance query and improvements
DaughterOfMars Oct 30, 2025
8a7846a
Update schema and add `is_tx_indexed_on_node`
DaughterOfMars Oct 30, 2025
11b52b9
add WaitForTx
DaughterOfMars Oct 30, 2025
0927922
rename variants
DaughterOfMars Oct 30, 2025
b63e9dd
typo
DaughterOfMars Oct 30, 2025
ba711cb
Update iota binary
DaughterOfMars Oct 30, 2025
aa155a8
fix tests
DaughterOfMars Oct 30, 2025
d395945
fix more tests
DaughterOfMars Oct 30, 2025
beb3480
fix publish example
DaughterOfMars Oct 30, 2025
7f4fa1f
review
DaughterOfMars Oct 30, 2025
a39ad98
Merge branch 'sdk-bindings' into feat/graphql-ex-finalization
DaughterOfMars Oct 30, 2025
0268032
Merge branch 'sdk-bindings' into feat/graphql-ex-finalization
DaughterOfMars Oct 30, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion bindings/go/examples/sign_send_iota/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,7 @@ func main() {
}
userSignature := sdk.UserSignatureNewSimple(signature)

effects, err := client.ExecuteTx([]*sdk.UserSignature{userSignature}, txn)
effects, err := client.ExecuteTx([]*sdk.UserSignature{userSignature}, txn, false)
if err.(*sdk.SdkFfiError) != nil {
log.Fatalf("Failed to execute: %v", err)
}
Expand Down
49 changes: 45 additions & 4 deletions bindings/go/iota_sdk_ffi/iota_sdk_ffi.go
Original file line number Diff line number Diff line change
Expand Up @@ -3395,7 +3395,7 @@ func uniffiCheckChecksums() {
checksum := rustCall(func(_uniffiStatus *C.RustCallStatus) C.uint16_t {
return C.uniffi_iota_sdk_ffi_checksum_method_graphqlclient_execute_tx()
})
if checksum != 41079 {
if checksum != 6738 {
// If this happens try cleaning and rebuilding your project
panic("iota_sdk_ffi: uniffi_iota_sdk_ffi_checksum_method_graphqlclient_execute_tx: UniFFI API checksum mismatch")
}
Expand Down Expand Up @@ -3689,6 +3689,15 @@ func uniffiCheckChecksums() {
}
}
{
checksum := rustCall(func(_uniffiStatus *C.RustCallStatus) C.uint16_t {
return C.uniffi_iota_sdk_ffi_checksum_method_graphqlclient_wait_for_tx_finalization()
})
if checksum != 22865 {
// If this happens try cleaning and rebuilding your project
panic("iota_sdk_ffi: uniffi_iota_sdk_ffi_checksum_method_graphqlclient_wait_for_tx_finalization: UniFFI API checksum mismatch")
}
}
{
checksum := rustCall(func(_uniffiStatus *C.RustCallStatus) C.uint16_t {
return C.uniffi_iota_sdk_ffi_checksum_method_identifier_as_str()
})
Expand Down Expand Up @@ -14379,7 +14388,7 @@ type GraphQlClientInterface interface {
// (optional) event filter.
Events(filter *EventFilter, paginationFilter *PaginationFilter) (EventPage, error)
// Execute a transaction.
ExecuteTx(signatures []*UserSignature, tx *Transaction) (**TransactionEffects, error)
ExecuteTx(signatures []*UserSignature, tx *Transaction, waitForFinalization bool) (**TransactionEffects, error)
// Get the list of gas coins for the specified address.
GasCoins(owner *Address, paginationFilter *PaginationFilter) (CoinPage, error)
// Get the default name pointing to this address, if one exists.
Expand Down Expand Up @@ -14492,6 +14501,7 @@ type GraphQlClientInterface interface {
TransactionsDataEffects(filter *TransactionsFilter, paginationFilter *PaginationFilter) (TransactionDataEffectsPage, error)
// Get a page of transactions' effects based on the provided filters.
TransactionsEffects(filter *TransactionsFilter, paginationFilter *PaginationFilter) (TransactionEffectsPage, error)
WaitForTxFinalization(digest *Digest, timeout *time.Duration) (**TransactionEffects, error)
}
// The GraphQL client for interacting with the IOTA blockchain.
type GraphQlClient struct {
Expand Down Expand Up @@ -15104,7 +15114,7 @@ func (_self *GraphQlClient) Events(filter *EventFilter, paginationFilter *Pagina
}

// Execute a transaction.
func (_self *GraphQlClient) ExecuteTx(signatures []*UserSignature, tx *Transaction) (**TransactionEffects, error) {
func (_self *GraphQlClient) ExecuteTx(signatures []*UserSignature, tx *Transaction, waitForFinalization bool) (**TransactionEffects, error) {
_pointer := _self.ffiObject.incrementPointer("*GraphQlClient")
defer _self.ffiObject.decrementPointer()
res, err :=uniffiRustCallAsync[SdkFfiError](
Expand All @@ -15121,7 +15131,7 @@ func (_self *GraphQlClient) ExecuteTx(signatures []*UserSignature, tx *Transacti
return FfiConverterOptionalTransactionEffectsINSTANCE.Lift(ffi)
},
C.uniffi_iota_sdk_ffi_fn_method_graphqlclient_execute_tx(
_pointer,FfiConverterSequenceUserSignatureINSTANCE.Lower(signatures), FfiConverterTransactionINSTANCE.Lower(tx)),
_pointer,FfiConverterSequenceUserSignatureINSTANCE.Lower(signatures), FfiConverterTransactionINSTANCE.Lower(tx), FfiConverterBoolINSTANCE.Lower(waitForFinalization)),
// pollFn
func (handle C.uint64_t, continuation C.UniffiRustFutureContinuationCallback, data C.uint64_t) {
C.ffi_iota_sdk_ffi_rust_future_poll_rust_buffer(handle, continuation, data)
Expand Down Expand Up @@ -16200,6 +16210,37 @@ func (_self *GraphQlClient) TransactionsEffects(filter *TransactionsFilter, pagi

return res, err
}

func (_self *GraphQlClient) WaitForTxFinalization(digest *Digest, timeout *time.Duration) (**TransactionEffects, error) {
_pointer := _self.ffiObject.incrementPointer("*GraphQlClient")
defer _self.ffiObject.decrementPointer()
res, err :=uniffiRustCallAsync[SdkFfiError](
FfiConverterSdkFfiErrorINSTANCE,
// completeFn
func(handle C.uint64_t, status *C.RustCallStatus) RustBufferI {
res := C.ffi_iota_sdk_ffi_rust_future_complete_rust_buffer(handle, status)
return GoRustBuffer {
inner: res,
}
},
// liftFn
func(ffi RustBufferI) **TransactionEffects {
return FfiConverterOptionalTransactionEffectsINSTANCE.Lift(ffi)
},
C.uniffi_iota_sdk_ffi_fn_method_graphqlclient_wait_for_tx_finalization(
_pointer,FfiConverterDigestINSTANCE.Lower(digest), FfiConverterOptionalDurationINSTANCE.Lower(timeout)),
// pollFn
func (handle C.uint64_t, continuation C.UniffiRustFutureContinuationCallback, data C.uint64_t) {
C.ffi_iota_sdk_ffi_rust_future_poll_rust_buffer(handle, continuation, data)
},
// freeFn
func (handle C.uint64_t) {
C.ffi_iota_sdk_ffi_rust_future_free_rust_buffer(handle)
},
)

return res, err
}
func (object *GraphQlClient) Destroy() {
runtime.SetFinalizer(object, nil)
object.ffiObject.destroy()
Expand Down
13 changes: 12 additions & 1 deletion bindings/go/iota_sdk_ffi/iota_sdk_ffi.h
Original file line number Diff line number Diff line change
Expand Up @@ -1732,7 +1732,7 @@ uint64_t uniffi_iota_sdk_ffi_fn_method_graphqlclient_events(void* ptr, RustBuffe
#endif
#ifndef UNIFFI_FFIDEF_UNIFFI_IOTA_SDK_FFI_FN_METHOD_GRAPHQLCLIENT_EXECUTE_TX
#define UNIFFI_FFIDEF_UNIFFI_IOTA_SDK_FFI_FN_METHOD_GRAPHQLCLIENT_EXECUTE_TX
uint64_t uniffi_iota_sdk_ffi_fn_method_graphqlclient_execute_tx(void* ptr, RustBuffer signatures, void* tx
uint64_t uniffi_iota_sdk_ffi_fn_method_graphqlclient_execute_tx(void* ptr, RustBuffer signatures, void* tx, int8_t wait_for_finalization
);
#endif
#ifndef UNIFFI_FFIDEF_UNIFFI_IOTA_SDK_FFI_FN_METHOD_GRAPHQLCLIENT_GAS_COINS
Expand Down Expand Up @@ -1895,6 +1895,11 @@ uint64_t uniffi_iota_sdk_ffi_fn_method_graphqlclient_transactions_data_effects(v
uint64_t uniffi_iota_sdk_ffi_fn_method_graphqlclient_transactions_effects(void* ptr, RustBuffer filter, RustBuffer pagination_filter
);
#endif
#ifndef UNIFFI_FFIDEF_UNIFFI_IOTA_SDK_FFI_FN_METHOD_GRAPHQLCLIENT_WAIT_FOR_TX_FINALIZATION
#define UNIFFI_FFIDEF_UNIFFI_IOTA_SDK_FFI_FN_METHOD_GRAPHQLCLIENT_WAIT_FOR_TX_FINALIZATION
uint64_t uniffi_iota_sdk_ffi_fn_method_graphqlclient_wait_for_tx_finalization(void* ptr, void* digest, RustBuffer timeout
);
#endif
#ifndef UNIFFI_FFIDEF_UNIFFI_IOTA_SDK_FFI_FN_CLONE_IDENTIFIER
#define UNIFFI_FFIDEF_UNIFFI_IOTA_SDK_FFI_FN_CLONE_IDENTIFIER
void* uniffi_iota_sdk_ffi_fn_clone_identifier(void* ptr, RustCallStatus *out_status
Expand Down Expand Up @@ -8902,6 +8907,12 @@ uint16_t uniffi_iota_sdk_ffi_checksum_method_graphqlclient_transactions_data_eff
#define UNIFFI_FFIDEF_UNIFFI_IOTA_SDK_FFI_CHECKSUM_METHOD_GRAPHQLCLIENT_TRANSACTIONS_EFFECTS
uint16_t uniffi_iota_sdk_ffi_checksum_method_graphqlclient_transactions_effects(void

);
#endif
#ifndef UNIFFI_FFIDEF_UNIFFI_IOTA_SDK_FFI_CHECKSUM_METHOD_GRAPHQLCLIENT_WAIT_FOR_TX_FINALIZATION
#define UNIFFI_FFIDEF_UNIFFI_IOTA_SDK_FFI_CHECKSUM_METHOD_GRAPHQLCLIENT_WAIT_FOR_TX_FINALIZATION
uint16_t uniffi_iota_sdk_ffi_checksum_method_graphqlclient_wait_for_tx_finalization(void

);
#endif
#ifndef UNIFFI_FFIDEF_UNIFFI_IOTA_SDK_FFI_CHECKSUM_METHOD_IDENTIFIER_AS_STR
Expand Down
42 changes: 37 additions & 5 deletions bindings/kotlin/lib/iota_sdk/iota_sdk_ffi.kt
Original file line number Diff line number Diff line change
Expand Up @@ -2887,6 +2887,8 @@ internal interface UniffiForeignFutureCompleteVoid : com.sun.jna.Callback {








Expand Down Expand Up @@ -3645,6 +3647,8 @@ fun uniffi_iota_sdk_ffi_checksum_method_graphqlclient_transactions_data_effects(
): Short
fun uniffi_iota_sdk_ffi_checksum_method_graphqlclient_transactions_effects(
): Short
fun uniffi_iota_sdk_ffi_checksum_method_graphqlclient_wait_for_tx_finalization(
): Short
fun uniffi_iota_sdk_ffi_checksum_method_identifier_as_str(
): Short
fun uniffi_iota_sdk_ffi_checksum_method_makemovevector_elements(
Expand Down Expand Up @@ -5440,7 +5444,7 @@ fun uniffi_iota_sdk_ffi_fn_method_graphqlclient_epoch_total_transaction_blocks(`
): Long
fun uniffi_iota_sdk_ffi_fn_method_graphqlclient_events(`ptr`: Pointer,`filter`: RustBuffer.ByValue,`paginationFilter`: RustBuffer.ByValue,
): Long
fun uniffi_iota_sdk_ffi_fn_method_graphqlclient_execute_tx(`ptr`: Pointer,`signatures`: RustBuffer.ByValue,`tx`: Pointer,
fun uniffi_iota_sdk_ffi_fn_method_graphqlclient_execute_tx(`ptr`: Pointer,`signatures`: RustBuffer.ByValue,`tx`: Pointer,`waitForFinalization`: Byte,
): Long
fun uniffi_iota_sdk_ffi_fn_method_graphqlclient_gas_coins(`ptr`: Pointer,`owner`: Pointer,`paginationFilter`: RustBuffer.ByValue,
): Long
Expand Down Expand Up @@ -5506,6 +5510,8 @@ fun uniffi_iota_sdk_ffi_fn_method_graphqlclient_transactions_data_effects(`ptr`:
): Long
fun uniffi_iota_sdk_ffi_fn_method_graphqlclient_transactions_effects(`ptr`: Pointer,`filter`: RustBuffer.ByValue,`paginationFilter`: RustBuffer.ByValue,
): Long
fun uniffi_iota_sdk_ffi_fn_method_graphqlclient_wait_for_tx_finalization(`ptr`: Pointer,`digest`: Pointer,`timeout`: RustBuffer.ByValue,
): Long
fun uniffi_iota_sdk_ffi_fn_clone_identifier(`ptr`: Pointer,uniffi_out_err: UniffiRustCallStatus,
): Pointer
fun uniffi_iota_sdk_ffi_fn_free_identifier(`ptr`: Pointer,uniffi_out_err: UniffiRustCallStatus,
Expand Down Expand Up @@ -8433,7 +8439,7 @@ private fun uniffiCheckApiChecksums(lib: IntegrityCheckingUniffiLib) {
if (lib.uniffi_iota_sdk_ffi_checksum_method_graphqlclient_events() != 20245.toShort()) {
throw RuntimeException("UniFFI API checksum mismatch: try cleaning and rebuilding your project")
}
if (lib.uniffi_iota_sdk_ffi_checksum_method_graphqlclient_execute_tx() != 41079.toShort()) {
if (lib.uniffi_iota_sdk_ffi_checksum_method_graphqlclient_execute_tx() != 6738.toShort()) {
throw RuntimeException("UniFFI API checksum mismatch: try cleaning and rebuilding your project")
}
if (lib.uniffi_iota_sdk_ffi_checksum_method_graphqlclient_gas_coins() != 24826.toShort()) {
Expand Down Expand Up @@ -8532,6 +8538,9 @@ private fun uniffiCheckApiChecksums(lib: IntegrityCheckingUniffiLib) {
if (lib.uniffi_iota_sdk_ffi_checksum_method_graphqlclient_transactions_effects() != 25858.toShort()) {
throw RuntimeException("UniFFI API checksum mismatch: try cleaning and rebuilding your project")
}
if (lib.uniffi_iota_sdk_ffi_checksum_method_graphqlclient_wait_for_tx_finalization() != 22865.toShort()) {
throw RuntimeException("UniFFI API checksum mismatch: try cleaning and rebuilding your project")
}
if (lib.uniffi_iota_sdk_ffi_checksum_method_identifier_as_str() != 63815.toShort()) {
throw RuntimeException("UniFFI API checksum mismatch: try cleaning and rebuilding your project")
}
Expand Down Expand Up @@ -21869,7 +21878,7 @@ public interface GraphQlClientInterface {
/**
* Execute a transaction.
*/
suspend fun `executeTx`(`signatures`: List<UserSignature>, `tx`: Transaction): TransactionEffects?
suspend fun `executeTx`(`signatures`: List<UserSignature>, `tx`: Transaction, `waitForFinalization`: kotlin.Boolean = false): TransactionEffects?

/**
* Get the list of gas coins for the specified address.
Expand Down Expand Up @@ -22079,6 +22088,8 @@ public interface GraphQlClientInterface {
*/
suspend fun `transactionsEffects`(`filter`: TransactionsFilter? = null, `paginationFilter`: PaginationFilter? = null): TransactionEffectsPage

suspend fun `waitForTxFinalization`(`digest`: Digest, `timeout`: java.time.Duration? = null): TransactionEffects?

companion object
}

Expand Down Expand Up @@ -22613,12 +22624,12 @@ open class GraphQlClient: Disposable, AutoCloseable, GraphQlClientInterface
*/
@Throws(SdkFfiException::class)
@Suppress("ASSIGNED_BUT_NEVER_ACCESSED_VARIABLE")
override suspend fun `executeTx`(`signatures`: List<UserSignature>, `tx`: Transaction) : TransactionEffects? {
override suspend fun `executeTx`(`signatures`: List<UserSignature>, `tx`: Transaction, `waitForFinalization`: kotlin.Boolean) : TransactionEffects? {
return uniffiRustCallAsync(
callWithPointer { thisPtr ->
UniffiLib.INSTANCE.uniffi_iota_sdk_ffi_fn_method_graphqlclient_execute_tx(
thisPtr,
FfiConverterSequenceTypeUserSignature.lower(`signatures`),FfiConverterTypeTransaction.lower(`tx`),
FfiConverterSequenceTypeUserSignature.lower(`signatures`),FfiConverterTypeTransaction.lower(`tx`),FfiConverterBoolean.lower(`waitForFinalization`),
)
},
{ future, callback, continuation -> UniffiLib.INSTANCE.ffi_iota_sdk_ffi_rust_future_poll_rust_buffer(future, callback, continuation) },
Expand Down Expand Up @@ -23449,6 +23460,27 @@ open class GraphQlClient: Disposable, AutoCloseable, GraphQlClientInterface
}


@Throws(SdkFfiException::class)
@Suppress("ASSIGNED_BUT_NEVER_ACCESSED_VARIABLE")
override suspend fun `waitForTxFinalization`(`digest`: Digest, `timeout`: java.time.Duration?) : TransactionEffects? {
return uniffiRustCallAsync(
callWithPointer { thisPtr ->
UniffiLib.INSTANCE.uniffi_iota_sdk_ffi_fn_method_graphqlclient_wait_for_tx_finalization(
thisPtr,
FfiConverterTypeDigest.lower(`digest`),FfiConverterOptionalDuration.lower(`timeout`),
)
},
{ future, callback, continuation -> UniffiLib.INSTANCE.ffi_iota_sdk_ffi_rust_future_poll_rust_buffer(future, callback, continuation) },
{ future, continuation -> UniffiLib.INSTANCE.ffi_iota_sdk_ffi_rust_future_complete_rust_buffer(future, continuation) },
{ future -> UniffiLib.INSTANCE.ffi_iota_sdk_ffi_rust_future_free_rust_buffer(future) },
// lift function
{ FfiConverterOptionalTypeTransactionEffects.lift(it) },
// Error FFI converter
SdkFfiException.ErrorHandler,
)
}




companion object {
Expand Down
Loading