Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
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
Original file line number Diff line number Diff line change
Expand Up @@ -119,15 +119,15 @@ extension SDK {
if var cfg = ffiConfig {
return withUnsafePointer(to: &cfg) { cfgPtr in
dash_sdk_sync_addresses_batch_with_result(
UnsafePointer(sdkPtr.ptr),
sdkPtr.ptr,
keysBase, indicesBase, count, keySizeU32, gapLimit,
kbKeysPtr, kbIndPtr, kbNonPtr, kbAmtPtr, kbCount,
cfgPtr, syncHeight, syncTimestamp, recentBlock
)
}
} else {
return dash_sdk_sync_addresses_batch_with_result(
UnsafePointer(sdkPtr.ptr),
sdkPtr.ptr,
keysBase, indicesBase, count, keySizeU32, gapLimit,
kbKeysPtr, kbIndPtr, kbNonPtr, kbAmtPtr, kbCount,
nil, syncHeight, syncTimestamp, recentBlock
Expand Down Expand Up @@ -182,6 +182,6 @@ extension SDK {
// MARK: - Private Sendable Wrapper

private final class AddressSyncSendableSdkPtr: @unchecked Sendable {
let ptr: UnsafeMutablePointer<SDKHandle>
init(_ p: UnsafeMutablePointer<SDKHandle>) { self.ptr = p }
let ptr: OpaquePointer
init(_ p: OpaquePointer) { self.ptr = p }
}
26 changes: 11 additions & 15 deletions packages/swift-sdk/Sources/SwiftDashSDK/Address/Addresses.swift
Original file line number Diff line number Diff line change
Expand Up @@ -1293,7 +1293,7 @@ public class Addresses: @unchecked Sendable {
throw SDKError.internalError("Failed to parse identity")
}

let identityHandle = identityHandlePtr.assumingMemoryBound(to: IdentityHandle.self)
let identityHandle = OpaquePointer(identityHandlePtr)
defer { dash_sdk_identity_destroy(identityHandle) }

// Prepare FFI inputs
Expand Down Expand Up @@ -1332,7 +1332,7 @@ public class Addresses: @unchecked Sendable {
let result = ffiInputs.withUnsafeMutableBufferPointer { inputsBuffer -> DashSDKResult in
dash_sdk_identity_top_up_from_addresses(
handle,
UnsafePointer(identityHandle),
identityHandle,
inputsBuffer.baseAddress,
UInt(inputs.count),
nil // put_settings
Expand Down Expand Up @@ -1433,7 +1433,7 @@ public class Addresses: @unchecked Sendable {
throw SDKError.internalError("Failed to parse identity")
}

let identityHandle = identityHandlePtr.assumingMemoryBound(to: IdentityHandle.self)
let identityHandle = OpaquePointer(identityHandlePtr)
defer { dash_sdk_identity_destroy(identityHandle) }

// Create signer from private key
Expand All @@ -1456,7 +1456,7 @@ public class Addresses: @unchecked Sendable {
}

defer {
dash_sdk_signer_destroy(signer.assumingMemoryBound(to: SignerHandle.self))
dash_sdk_signer_destroy(OpaquePointer(signer))
}

// Prepare FFI outputs
Expand All @@ -1483,11 +1483,11 @@ public class Addresses: @unchecked Sendable {
let result = ffiOutputs.withUnsafeMutableBufferPointer { outputsBuffer -> DashSDKResult in
dash_sdk_identity_transfer_credits_to_addresses(
handle,
UnsafePointer(identityHandle),
identityHandle,
outputsBuffer.baseAddress,
UInt(outputs.count),
publicKeyId,
signer.assumingMemoryBound(to: SignerHandle.self),
OpaquePointer(signer),
nil // put_settings
)
}
Expand Down Expand Up @@ -1587,7 +1587,7 @@ public class Addresses: @unchecked Sendable {
throw SDKError.internalError("Failed to parse identity")
}

let identityHandle = identityHandlePtr.assumingMemoryBound(to: IdentityHandle.self)
let identityHandle = OpaquePointer(identityHandlePtr)
// Note: We don't destroy this handle here because it will be replaced by the created identity

// Create signer from private key
Expand All @@ -1611,7 +1611,7 @@ public class Addresses: @unchecked Sendable {
}

defer {
dash_sdk_signer_destroy(signer.assumingMemoryBound(to: SignerHandle.self))
dash_sdk_signer_destroy(OpaquePointer(signer))
}

// Prepare FFI inputs
Expand Down Expand Up @@ -1669,11 +1669,11 @@ public class Addresses: @unchecked Sendable {
let result = ffiInputs.withUnsafeMutableBufferPointer { inputsBuffer -> DashSDKResult in
dash_sdk_identity_create_from_addresses(
handle,
UnsafePointer(identityHandle),
identityHandle,
inputsBuffer.baseAddress,
UInt(inputs.count),
ffiOutput,
signer.assumingMemoryBound(to: SignerHandle.self),
OpaquePointer(signer),
nil // put_settings
)
}
Expand Down Expand Up @@ -1728,10 +1728,6 @@ public class Addresses: @unchecked Sendable {
// Free the result (but keep the identity handle - caller must free it)
dash_sdk_identity_create_from_addresses_result_free(resultPtr)

// Convert UnsafeMutablePointer<IdentityHandle> to OpaquePointer
// OpaquePointer initializer returns optional, so we force unwrap since we know it's valid
let createdIdentityHandle = OpaquePointer(UnsafeRawPointer(identityHandlePtr))!

return (createdIdentityHandle, PlatformAddressInfosResult(infos: infos))
return (identityHandlePtr, PlatformAddressInfosResult(infos: infos))
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -88,13 +88,13 @@ public final class KeychainSigner: Signer, @unchecked Sendable {

/// FFI signer handle. Pass to any `*_with_signer` entry point;
/// the underlying pointer is the C-imported
/// `UnsafeMutablePointer<SignerHandle>` from `platform-wallet-ffi.h`
/// `OpaquePointer` from `platform-wallet-ffi.h`
/// (and equivalently `rs-sdk-ffi.h`). Owned by this object —
/// freed in `deinit` via `dash_sdk_signer_destroy`. Caller must
/// keep the `KeychainSigner` alive for the duration of any FFI
/// call that captured this pointer (see the keepalive contract
/// above).
public var handle: UnsafeMutablePointer<SignerHandle> {
public var handle: OpaquePointer {
Comment thread
ZocoLini marked this conversation as resolved.
handlePtr
}

Expand Down Expand Up @@ -182,7 +182,7 @@ public final class KeychainSigner: Signer, @unchecked Sendable {

/// Raw pointer to the FFI signer handle. Boxed by Rust and freed
/// in `deinit`.
private var handlePtr: UnsafeMutablePointer<SignerHandle>!
private var handlePtr: OpaquePointer!

// MARK: Init

Expand Down Expand Up @@ -603,7 +603,7 @@ public final class KeychainSigner: Signer, @unchecked Sendable {
guard let rawSigner = signerResult.data else {
return .failure(.ffiSignerCreationFailed(message: "null handle"))
}
let signerHandle = rawSigner.assumingMemoryBound(to: SignerHandle.self)
let signerHandle = OpaquePointer(rawSigner)
defer { dash_sdk_signer_destroy(signerHandle) }

let signResult = data.withUnsafeBytes { dataBuf -> DashSDKResult in
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -368,7 +368,7 @@ extension SDK {

defer {
// Clean up contract handle when done
let contractPtr = contractHandle.assumingMemoryBound(to: DataContractHandle.self)
let contractPtr = OpaquePointer(contractHandle)
dash_sdk_data_contract_destroy(contractPtr)
}

Expand All @@ -383,7 +383,7 @@ extension SDK {
if let orderByClause = orderByClauseCString {
return orderByClause.withUnsafeBufferPointer { orderByPtr in
var searchParams = DashSDKDocumentSearchParams()
searchParams.data_contract_handle = UnsafePointer(contractHandle.assumingMemoryBound(to: DataContractHandle.self))
searchParams.data_contract_handle = OpaquePointer(contractHandle)
searchParams.document_type = documentTypePtr.baseAddress
searchParams.where_json = wherePtr.baseAddress
searchParams.order_by_json = orderByPtr.baseAddress
Expand All @@ -403,7 +403,7 @@ extension SDK {
}
} else {
var searchParams = DashSDKDocumentSearchParams()
searchParams.data_contract_handle = UnsafePointer(contractHandle.assumingMemoryBound(to: DataContractHandle.self))
searchParams.data_contract_handle = OpaquePointer(contractHandle)
searchParams.document_type = documentTypePtr.baseAddress
searchParams.where_json = wherePtr.baseAddress
searchParams.order_by_json = nil
Expand All @@ -424,7 +424,7 @@ extension SDK {
}
} else {
var searchParams = DashSDKDocumentSearchParams()
searchParams.data_contract_handle = UnsafePointer(contractHandle.assumingMemoryBound(to: DataContractHandle.self))
searchParams.data_contract_handle = OpaquePointer(contractHandle)
searchParams.document_type = documentTypePtr.baseAddress
searchParams.where_json = nil
searchParams.order_by_json = nil
Expand Down Expand Up @@ -459,12 +459,12 @@ extension SDK {

defer {
// Clean up contract handle when done
let contractPtr = contractHandle.assumingMemoryBound(to: DataContractHandle.self)
let contractPtr = OpaquePointer(contractHandle)
dash_sdk_data_contract_destroy(contractPtr)
}

// Now fetch the document
let documentResult = dash_sdk_document_fetch(handle, contractHandle.assumingMemoryBound(to: DataContractHandle.self), documentType, documentId)
let documentResult = dash_sdk_document_fetch(handle, OpaquePointer(contractHandle), documentType, documentId)

if let error = documentResult.error {
let errorMessage = error.pointee.message != nil ? String(cString: error.pointee.message!) : "Unknown error"
Expand All @@ -478,11 +478,11 @@ extension SDK {

defer {
// Clean up document handle
dash_sdk_document_destroy(handle, documentHandle.assumingMemoryBound(to: DocumentHandle.self))
dash_sdk_document_destroy(handle, OpaquePointer(documentHandle))
}

// Get document info to convert to JSON
let info = dash_sdk_document_get_info(documentHandle.assumingMemoryBound(to: DocumentHandle.self))
let info = dash_sdk_document_get_info(OpaquePointer(documentHandle))
defer {
if let info = info {
dash_sdk_document_info_free(info)
Expand Down
Loading
Loading