Update bdk-ffi to 0.3.1
This commit is contained in:
parent
f2b857a609
commit
2cd5fa6934
@ -19,13 +19,13 @@ fileprivate extension RustBuffer {
|
|||||||
}
|
}
|
||||||
|
|
||||||
static func from(_ ptr: UnsafeBufferPointer<UInt8>) -> RustBuffer {
|
static func from(_ ptr: UnsafeBufferPointer<UInt8>) -> RustBuffer {
|
||||||
try! rustCall { ffi_bdk_2e4d_rustbuffer_from_bytes(ForeignBytes(bufferPointer: ptr), $0) }
|
try! rustCall { ffi_bdk_d04b_rustbuffer_from_bytes(ForeignBytes(bufferPointer: ptr), $0) }
|
||||||
}
|
}
|
||||||
|
|
||||||
// Frees the buffer in place.
|
// Frees the buffer in place.
|
||||||
// The buffer must not be used after this is called.
|
// The buffer must not be used after this is called.
|
||||||
func deallocate() {
|
func deallocate() {
|
||||||
try! rustCall { ffi_bdk_2e4d_rustbuffer_free(self, $0) }
|
try! rustCall { ffi_bdk_d04b_rustbuffer_free(self, $0) }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -576,7 +576,7 @@ extension DatabaseConfig: Equatable, Hashable {}
|
|||||||
public enum Transaction {
|
public enum Transaction {
|
||||||
|
|
||||||
case unconfirmed(details: TransactionDetails )
|
case unconfirmed(details: TransactionDetails )
|
||||||
case confirmed(details: TransactionDetails, confirmation: Confirmation )
|
case confirmed(details: TransactionDetails, confirmation: BlockTime )
|
||||||
}
|
}
|
||||||
|
|
||||||
extension Transaction: ViaFfiUsingByteBuffer, ViaFfi {
|
extension Transaction: ViaFfiUsingByteBuffer, ViaFfi {
|
||||||
@ -589,7 +589,7 @@ extension Transaction: ViaFfiUsingByteBuffer, ViaFfi {
|
|||||||
)
|
)
|
||||||
case 2: return .confirmed(
|
case 2: return .confirmed(
|
||||||
details: try TransactionDetails.read(from: buf),
|
details: try TransactionDetails.read(from: buf),
|
||||||
confirmation: try Confirmation.read(from: buf)
|
confirmation: try BlockTime.read(from: buf)
|
||||||
)
|
)
|
||||||
default: throw UniffiInternalError.unexpectedEnumCase
|
default: throw UniffiInternalError.unexpectedEnumCase
|
||||||
}
|
}
|
||||||
@ -669,7 +669,7 @@ extension BlockchainConfig: Equatable, Hashable {}
|
|||||||
// Note that we don't yet support `indirect` for enums.
|
// Note that we don't yet support `indirect` for enums.
|
||||||
// See https://github.com/mozilla/uniffi-rs/issues/396 for further discussion.
|
// See https://github.com/mozilla/uniffi-rs/issues/396 for further discussion.
|
||||||
|
|
||||||
public enum MnemonicType {
|
public enum WordCount {
|
||||||
|
|
||||||
case words12
|
case words12
|
||||||
case words15
|
case words15
|
||||||
@ -678,8 +678,8 @@ public enum MnemonicType {
|
|||||||
case words24
|
case words24
|
||||||
}
|
}
|
||||||
|
|
||||||
extension MnemonicType: ViaFfiUsingByteBuffer, ViaFfi {
|
extension WordCount: ViaFfiUsingByteBuffer, ViaFfi {
|
||||||
fileprivate static func read(from buf: Reader) throws -> MnemonicType {
|
fileprivate static func read(from buf: Reader) throws -> WordCount {
|
||||||
let variant: Int32 = try buf.readInt()
|
let variant: Int32 = try buf.readInt()
|
||||||
switch variant {
|
switch variant {
|
||||||
|
|
||||||
@ -720,168 +720,49 @@ extension MnemonicType: ViaFfiUsingByteBuffer, ViaFfi {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
extension MnemonicType: Equatable, Hashable {}
|
extension WordCount: Equatable, Hashable {}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
public func generateExtendedKey(network: Network, mnemonicType: MnemonicType, password: String? ) throws -> ExtendedKeyInfo {
|
public func generateExtendedKey( network: Network, wordCount: WordCount, password: String? ) throws -> ExtendedKeyInfo {
|
||||||
let _retval = try
|
let _retval = try
|
||||||
|
|
||||||
|
|
||||||
rustCallWithError(BdkError.self) {
|
rustCallWithError(BdkError.self) {
|
||||||
|
|
||||||
bdk_2e4d_generate_extended_key(network.lower(), mnemonicType.lower(), FfiConverterOptionString.lower(password) , $0)
|
bdk_d04b_generate_extended_key(network.lower(), wordCount.lower(), FfiConverterOptionString.lower(password) , $0)
|
||||||
}
|
}
|
||||||
return try ExtendedKeyInfo.lift(_retval)
|
return try ExtendedKeyInfo.lift(_retval)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
public func restoreExtendedKey(network: Network, mnemonic: String, password: String? ) throws -> ExtendedKeyInfo {
|
public func restoreExtendedKey( network: Network, mnemonic: String, password: String? ) throws -> ExtendedKeyInfo {
|
||||||
let _retval = try
|
let _retval = try
|
||||||
|
|
||||||
|
|
||||||
rustCallWithError(BdkError.self) {
|
rustCallWithError(BdkError.self) {
|
||||||
|
|
||||||
bdk_2e4d_restore_extended_key(network.lower(), mnemonic.lower(), FfiConverterOptionString.lower(password) , $0)
|
bdk_d04b_restore_extended_key(network.lower(), mnemonic.lower(), FfiConverterOptionString.lower(password) , $0)
|
||||||
}
|
}
|
||||||
return try ExtendedKeyInfo.lift(_retval)
|
return try ExtendedKeyInfo.lift(_retval)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
public protocol OfflineWalletProtocol {
|
public protocol WalletProtocol {
|
||||||
func getNewAddress() -> String
|
func getNewAddress() -> String
|
||||||
func getLastUnusedAddress() -> String
|
func getLastUnusedAddress() -> String
|
||||||
func getBalance() throws -> UInt64
|
func getBalance() throws -> UInt64
|
||||||
func sign(psbt: PartiallySignedBitcoinTransaction ) throws
|
func sign( psbt: PartiallySignedBitcoinTransaction ) throws
|
||||||
func getTransactions() throws -> [Transaction]
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
public class OfflineWallet: OfflineWalletProtocol {
|
|
||||||
fileprivate let pointer: UnsafeMutableRawPointer
|
|
||||||
|
|
||||||
// TODO: We'd like this to be `private` but for Swifty reasons,
|
|
||||||
// we can't implement `ViaFfi` without making this `required` and we can't
|
|
||||||
// make it `required` without making it `public`.
|
|
||||||
required init(unsafeFromRawPointer pointer: UnsafeMutableRawPointer) {
|
|
||||||
self.pointer = pointer
|
|
||||||
}
|
|
||||||
public convenience init(descriptor: String, network: Network, databaseConfig: DatabaseConfig ) throws {
|
|
||||||
self.init(unsafeFromRawPointer: try
|
|
||||||
|
|
||||||
|
|
||||||
rustCallWithError(BdkError.self) {
|
|
||||||
|
|
||||||
bdk_2e4d_OfflineWallet_new(descriptor.lower(), network.lower(), databaseConfig.lower() , $0)
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
deinit {
|
|
||||||
try! rustCall { ffi_bdk_2e4d_OfflineWallet_object_free(pointer, $0) }
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
public func getNewAddress() -> String {
|
|
||||||
let _retval = try!
|
|
||||||
rustCall() {
|
|
||||||
|
|
||||||
bdk_2e4d_OfflineWallet_get_new_address(self.pointer, $0
|
|
||||||
)
|
|
||||||
}
|
|
||||||
return try! String.lift(_retval)
|
|
||||||
}
|
|
||||||
public func getLastUnusedAddress() -> String {
|
|
||||||
let _retval = try!
|
|
||||||
rustCall() {
|
|
||||||
|
|
||||||
bdk_2e4d_OfflineWallet_get_last_unused_address(self.pointer, $0
|
|
||||||
)
|
|
||||||
}
|
|
||||||
return try! String.lift(_retval)
|
|
||||||
}
|
|
||||||
public func getBalance() throws -> UInt64 {
|
|
||||||
let _retval = try
|
|
||||||
rustCallWithError(BdkError.self) {
|
|
||||||
|
|
||||||
bdk_2e4d_OfflineWallet_get_balance(self.pointer, $0
|
|
||||||
)
|
|
||||||
}
|
|
||||||
return try UInt64.lift(_retval)
|
|
||||||
}
|
|
||||||
public func sign(psbt: PartiallySignedBitcoinTransaction ) throws {
|
|
||||||
try
|
|
||||||
rustCallWithError(BdkError.self) {
|
|
||||||
|
|
||||||
bdk_2e4d_OfflineWallet_sign(self.pointer, psbt.lower() , $0
|
|
||||||
)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
public func getTransactions() throws -> [Transaction] {
|
|
||||||
let _retval = try
|
|
||||||
rustCallWithError(BdkError.self) {
|
|
||||||
|
|
||||||
bdk_2e4d_OfflineWallet_get_transactions(self.pointer, $0
|
|
||||||
)
|
|
||||||
}
|
|
||||||
return try FfiConverterSequenceEnumTransaction.lift(_retval)
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
fileprivate extension OfflineWallet {
|
|
||||||
fileprivate typealias FfiType = UnsafeMutableRawPointer
|
|
||||||
|
|
||||||
fileprivate static func read(from buf: Reader) throws -> Self {
|
|
||||||
let v: UInt64 = try buf.readInt()
|
|
||||||
// The Rust code won't compile if a pointer won't fit in a UInt64.
|
|
||||||
// We have to go via `UInt` because that's the thing that's the size of a pointer.
|
|
||||||
let ptr = UnsafeMutableRawPointer(bitPattern: UInt(truncatingIfNeeded: v))
|
|
||||||
if (ptr == nil) {
|
|
||||||
throw UniffiInternalError.unexpectedNullPointer
|
|
||||||
}
|
|
||||||
return try self.lift(ptr!)
|
|
||||||
}
|
|
||||||
|
|
||||||
fileprivate func write(into buf: Writer) {
|
|
||||||
// This fiddling is because `Int` is the thing that's the same size as a pointer.
|
|
||||||
// The Rust code won't compile if a pointer won't fit in a `UInt64`.
|
|
||||||
buf.writeInt(UInt64(bitPattern: Int64(Int(bitPattern: self.lower()))))
|
|
||||||
}
|
|
||||||
|
|
||||||
fileprivate static func lift(_ pointer: UnsafeMutableRawPointer) throws -> Self {
|
|
||||||
return Self(unsafeFromRawPointer: pointer)
|
|
||||||
}
|
|
||||||
|
|
||||||
fileprivate func lower() -> UnsafeMutableRawPointer {
|
|
||||||
return self.pointer
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Ideally this would be `fileprivate`, but Swift says:
|
|
||||||
// """
|
|
||||||
// 'private' modifier cannot be used with extensions that declare protocol conformances
|
|
||||||
// """
|
|
||||||
extension OfflineWallet : ViaFfi, Serializable {}
|
|
||||||
|
|
||||||
|
|
||||||
public protocol OnlineWalletProtocol {
|
|
||||||
func getNewAddress() -> String
|
|
||||||
func getLastUnusedAddress() -> String
|
|
||||||
func getBalance() throws -> UInt64
|
|
||||||
func sign(psbt: PartiallySignedBitcoinTransaction ) throws
|
|
||||||
func getTransactions() throws -> [Transaction]
|
func getTransactions() throws -> [Transaction]
|
||||||
func getNetwork() -> Network
|
func getNetwork() -> Network
|
||||||
func sync(progressUpdate: BdkProgress, maxAddressParam: UInt32? ) throws
|
func sync( progressUpdate: BdkProgress, maxAddressParam: UInt32? ) throws
|
||||||
func broadcast(psbt: PartiallySignedBitcoinTransaction ) throws -> Transaction
|
func broadcast( psbt: PartiallySignedBitcoinTransaction ) throws -> Transaction
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public class OnlineWallet: OnlineWalletProtocol {
|
public class Wallet: WalletProtocol {
|
||||||
fileprivate let pointer: UnsafeMutableRawPointer
|
fileprivate let pointer: UnsafeMutableRawPointer
|
||||||
|
|
||||||
// TODO: We'd like this to be `private` but for Swifty reasons,
|
// TODO: We'd like this to be `private` but for Swifty reasons,
|
||||||
@ -890,18 +771,18 @@ public class OnlineWallet: OnlineWalletProtocol {
|
|||||||
required init(unsafeFromRawPointer pointer: UnsafeMutableRawPointer) {
|
required init(unsafeFromRawPointer pointer: UnsafeMutableRawPointer) {
|
||||||
self.pointer = pointer
|
self.pointer = pointer
|
||||||
}
|
}
|
||||||
public convenience init(descriptor: String, changeDescriptor: String?, network: Network, databaseConfig: DatabaseConfig, blockchainConfig: BlockchainConfig ) throws {
|
public convenience init( descriptor: String, changeDescriptor: String?, network: Network, databaseConfig: DatabaseConfig, blockchainConfig: BlockchainConfig ) throws {
|
||||||
self.init(unsafeFromRawPointer: try
|
self.init(unsafeFromRawPointer: try
|
||||||
|
|
||||||
|
|
||||||
rustCallWithError(BdkError.self) {
|
rustCallWithError(BdkError.self) {
|
||||||
|
|
||||||
bdk_2e4d_OnlineWallet_new(descriptor.lower(), FfiConverterOptionString.lower(changeDescriptor), network.lower(), databaseConfig.lower(), blockchainConfig.lower() , $0)
|
bdk_d04b_Wallet_new(descriptor.lower(), FfiConverterOptionString.lower(changeDescriptor), network.lower(), databaseConfig.lower(), blockchainConfig.lower() , $0)
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
deinit {
|
deinit {
|
||||||
try! rustCall { ffi_bdk_2e4d_OnlineWallet_object_free(pointer, $0) }
|
try! rustCall { ffi_bdk_d04b_Wallet_object_free(pointer, $0) }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -911,7 +792,7 @@ public class OnlineWallet: OnlineWalletProtocol {
|
|||||||
let _retval = try!
|
let _retval = try!
|
||||||
rustCall() {
|
rustCall() {
|
||||||
|
|
||||||
bdk_2e4d_OnlineWallet_get_new_address(self.pointer, $0
|
bdk_d04b_Wallet_get_new_address(self.pointer, $0
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
return try! String.lift(_retval)
|
return try! String.lift(_retval)
|
||||||
@ -920,7 +801,7 @@ public class OnlineWallet: OnlineWalletProtocol {
|
|||||||
let _retval = try!
|
let _retval = try!
|
||||||
rustCall() {
|
rustCall() {
|
||||||
|
|
||||||
bdk_2e4d_OnlineWallet_get_last_unused_address(self.pointer, $0
|
bdk_d04b_Wallet_get_last_unused_address(self.pointer, $0
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
return try! String.lift(_retval)
|
return try! String.lift(_retval)
|
||||||
@ -929,16 +810,16 @@ public class OnlineWallet: OnlineWalletProtocol {
|
|||||||
let _retval = try
|
let _retval = try
|
||||||
rustCallWithError(BdkError.self) {
|
rustCallWithError(BdkError.self) {
|
||||||
|
|
||||||
bdk_2e4d_OnlineWallet_get_balance(self.pointer, $0
|
bdk_d04b_Wallet_get_balance(self.pointer, $0
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
return try UInt64.lift(_retval)
|
return try UInt64.lift(_retval)
|
||||||
}
|
}
|
||||||
public func sign(psbt: PartiallySignedBitcoinTransaction ) throws {
|
public func sign( psbt: PartiallySignedBitcoinTransaction ) throws {
|
||||||
try
|
try
|
||||||
rustCallWithError(BdkError.self) {
|
rustCallWithError(BdkError.self) {
|
||||||
|
|
||||||
bdk_2e4d_OnlineWallet_sign(self.pointer, psbt.lower() , $0
|
bdk_d04b_Wallet_sign(self.pointer, psbt.lower() , $0
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -946,7 +827,7 @@ public class OnlineWallet: OnlineWalletProtocol {
|
|||||||
let _retval = try
|
let _retval = try
|
||||||
rustCallWithError(BdkError.self) {
|
rustCallWithError(BdkError.self) {
|
||||||
|
|
||||||
bdk_2e4d_OnlineWallet_get_transactions(self.pointer, $0
|
bdk_d04b_Wallet_get_transactions(self.pointer, $0
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
return try FfiConverterSequenceEnumTransaction.lift(_retval)
|
return try FfiConverterSequenceEnumTransaction.lift(_retval)
|
||||||
@ -955,24 +836,24 @@ public class OnlineWallet: OnlineWalletProtocol {
|
|||||||
let _retval = try!
|
let _retval = try!
|
||||||
rustCall() {
|
rustCall() {
|
||||||
|
|
||||||
bdk_2e4d_OnlineWallet_get_network(self.pointer, $0
|
bdk_d04b_Wallet_get_network(self.pointer, $0
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
return try! Network.lift(_retval)
|
return try! Network.lift(_retval)
|
||||||
}
|
}
|
||||||
public func sync(progressUpdate: BdkProgress, maxAddressParam: UInt32? ) throws {
|
public func sync( progressUpdate: BdkProgress, maxAddressParam: UInt32? ) throws {
|
||||||
try
|
try
|
||||||
rustCallWithError(BdkError.self) {
|
rustCallWithError(BdkError.self) {
|
||||||
|
|
||||||
bdk_2e4d_OnlineWallet_sync(self.pointer, ffiConverterCallbackInterfaceBdkProgress.lower(progressUpdate), FfiConverterOptionUInt32.lower(maxAddressParam) , $0
|
bdk_d04b_Wallet_sync(self.pointer, ffiConverterCallbackInterfaceBdkProgress.lower(progressUpdate), FfiConverterOptionUInt32.lower(maxAddressParam) , $0
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
public func broadcast(psbt: PartiallySignedBitcoinTransaction ) throws -> Transaction {
|
public func broadcast( psbt: PartiallySignedBitcoinTransaction ) throws -> Transaction {
|
||||||
let _retval = try
|
let _retval = try
|
||||||
rustCallWithError(BdkError.self) {
|
rustCallWithError(BdkError.self) {
|
||||||
|
|
||||||
bdk_2e4d_OnlineWallet_broadcast(self.pointer, psbt.lower() , $0
|
bdk_d04b_Wallet_broadcast(self.pointer, psbt.lower() , $0
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
return try Transaction.lift(_retval)
|
return try Transaction.lift(_retval)
|
||||||
@ -981,10 +862,10 @@ public class OnlineWallet: OnlineWalletProtocol {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
fileprivate extension OnlineWallet {
|
fileprivate extension Wallet {
|
||||||
fileprivate typealias FfiType = UnsafeMutableRawPointer
|
typealias FfiType = UnsafeMutableRawPointer
|
||||||
|
|
||||||
fileprivate static func read(from buf: Reader) throws -> Self {
|
static func read(from buf: Reader) throws -> Self {
|
||||||
let v: UInt64 = try buf.readInt()
|
let v: UInt64 = try buf.readInt()
|
||||||
// The Rust code won't compile if a pointer won't fit in a UInt64.
|
// The Rust code won't compile if a pointer won't fit in a UInt64.
|
||||||
// We have to go via `UInt` because that's the thing that's the size of a pointer.
|
// We have to go via `UInt` because that's the thing that's the size of a pointer.
|
||||||
@ -995,17 +876,17 @@ fileprivate extension OnlineWallet {
|
|||||||
return try self.lift(ptr!)
|
return try self.lift(ptr!)
|
||||||
}
|
}
|
||||||
|
|
||||||
fileprivate func write(into buf: Writer) {
|
func write(into buf: Writer) {
|
||||||
// This fiddling is because `Int` is the thing that's the same size as a pointer.
|
// This fiddling is because `Int` is the thing that's the same size as a pointer.
|
||||||
// The Rust code won't compile if a pointer won't fit in a `UInt64`.
|
// The Rust code won't compile if a pointer won't fit in a `UInt64`.
|
||||||
buf.writeInt(UInt64(bitPattern: Int64(Int(bitPattern: self.lower()))))
|
buf.writeInt(UInt64(bitPattern: Int64(Int(bitPattern: self.lower()))))
|
||||||
}
|
}
|
||||||
|
|
||||||
fileprivate static func lift(_ pointer: UnsafeMutableRawPointer) throws -> Self {
|
static func lift(_ pointer: UnsafeMutableRawPointer) throws -> Self {
|
||||||
return Self(unsafeFromRawPointer: pointer)
|
return Self(unsafeFromRawPointer: pointer)
|
||||||
}
|
}
|
||||||
|
|
||||||
fileprivate func lower() -> UnsafeMutableRawPointer {
|
func lower() -> UnsafeMutableRawPointer {
|
||||||
return self.pointer
|
return self.pointer
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1014,10 +895,11 @@ fileprivate extension OnlineWallet {
|
|||||||
// """
|
// """
|
||||||
// 'private' modifier cannot be used with extensions that declare protocol conformances
|
// 'private' modifier cannot be used with extensions that declare protocol conformances
|
||||||
// """
|
// """
|
||||||
extension OnlineWallet : ViaFfi, Serializable {}
|
extension Wallet : ViaFfi, Serializable {}
|
||||||
|
|
||||||
|
|
||||||
public protocol PartiallySignedBitcoinTransactionProtocol {
|
public protocol PartiallySignedBitcoinTransactionProtocol {
|
||||||
|
func serialize() -> String
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1030,31 +912,50 @@ public class PartiallySignedBitcoinTransaction: PartiallySignedBitcoinTransactio
|
|||||||
required init(unsafeFromRawPointer pointer: UnsafeMutableRawPointer) {
|
required init(unsafeFromRawPointer pointer: UnsafeMutableRawPointer) {
|
||||||
self.pointer = pointer
|
self.pointer = pointer
|
||||||
}
|
}
|
||||||
public convenience init(wallet: OnlineWallet, recipient: String, amount: UInt64, feeRate: Float? ) throws {
|
public convenience init( wallet: Wallet, recipient: String, amount: UInt64, feeRate: Float? ) throws {
|
||||||
self.init(unsafeFromRawPointer: try
|
self.init(unsafeFromRawPointer: try
|
||||||
|
|
||||||
|
|
||||||
rustCallWithError(BdkError.self) {
|
rustCallWithError(BdkError.self) {
|
||||||
|
|
||||||
bdk_2e4d_PartiallySignedBitcoinTransaction_new(wallet.lower(), recipient.lower(), amount.lower(), FfiConverterOptionFloat.lower(feeRate) , $0)
|
bdk_d04b_PartiallySignedBitcoinTransaction_new(wallet.lower(), recipient.lower(), amount.lower(), FfiConverterOptionFloat.lower(feeRate) , $0)
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
deinit {
|
deinit {
|
||||||
try! rustCall { ffi_bdk_2e4d_PartiallySignedBitcoinTransaction_object_free(pointer, $0) }
|
try! rustCall { ffi_bdk_d04b_PartiallySignedBitcoinTransaction_object_free(pointer, $0) }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public static func deserialize( psbtBase64: String ) throws -> PartiallySignedBitcoinTransaction {
|
||||||
|
return PartiallySignedBitcoinTransaction(unsafeFromRawPointer: try
|
||||||
|
|
||||||
|
|
||||||
|
rustCallWithError(BdkError.self) {
|
||||||
|
|
||||||
|
bdk_d04b_PartiallySignedBitcoinTransaction_deserialize(psbtBase64.lower() , $0)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
public func serialize() -> String {
|
||||||
|
let _retval = try!
|
||||||
|
rustCall() {
|
||||||
|
|
||||||
|
bdk_d04b_PartiallySignedBitcoinTransaction_serialize(self.pointer, $0
|
||||||
|
)
|
||||||
|
}
|
||||||
|
return try! String.lift(_retval)
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
fileprivate extension PartiallySignedBitcoinTransaction {
|
fileprivate extension PartiallySignedBitcoinTransaction {
|
||||||
fileprivate typealias FfiType = UnsafeMutableRawPointer
|
typealias FfiType = UnsafeMutableRawPointer
|
||||||
|
|
||||||
fileprivate static func read(from buf: Reader) throws -> Self {
|
static func read(from buf: Reader) throws -> Self {
|
||||||
let v: UInt64 = try buf.readInt()
|
let v: UInt64 = try buf.readInt()
|
||||||
// The Rust code won't compile if a pointer won't fit in a UInt64.
|
// The Rust code won't compile if a pointer won't fit in a UInt64.
|
||||||
// We have to go via `UInt` because that's the thing that's the size of a pointer.
|
// We have to go via `UInt` because that's the thing that's the size of a pointer.
|
||||||
@ -1065,17 +966,17 @@ fileprivate extension PartiallySignedBitcoinTransaction {
|
|||||||
return try self.lift(ptr!)
|
return try self.lift(ptr!)
|
||||||
}
|
}
|
||||||
|
|
||||||
fileprivate func write(into buf: Writer) {
|
func write(into buf: Writer) {
|
||||||
// This fiddling is because `Int` is the thing that's the same size as a pointer.
|
// This fiddling is because `Int` is the thing that's the same size as a pointer.
|
||||||
// The Rust code won't compile if a pointer won't fit in a `UInt64`.
|
// The Rust code won't compile if a pointer won't fit in a `UInt64`.
|
||||||
buf.writeInt(UInt64(bitPattern: Int64(Int(bitPattern: self.lower()))))
|
buf.writeInt(UInt64(bitPattern: Int64(Int(bitPattern: self.lower()))))
|
||||||
}
|
}
|
||||||
|
|
||||||
fileprivate static func lift(_ pointer: UnsafeMutableRawPointer) throws -> Self {
|
static func lift(_ pointer: UnsafeMutableRawPointer) throws -> Self {
|
||||||
return Self(unsafeFromRawPointer: pointer)
|
return Self(unsafeFromRawPointer: pointer)
|
||||||
}
|
}
|
||||||
|
|
||||||
fileprivate func lower() -> UnsafeMutableRawPointer {
|
func lower() -> UnsafeMutableRawPointer {
|
||||||
return self.pointer
|
return self.pointer
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1196,7 +1097,7 @@ fileprivate extension TransactionDetails {
|
|||||||
|
|
||||||
extension TransactionDetails: ViaFfiUsingByteBuffer, ViaFfi {}
|
extension TransactionDetails: ViaFfiUsingByteBuffer, ViaFfi {}
|
||||||
|
|
||||||
public struct Confirmation {
|
public struct BlockTime {
|
||||||
public var height: UInt32
|
public var height: UInt32
|
||||||
public var timestamp: UInt64
|
public var timestamp: UInt64
|
||||||
|
|
||||||
@ -1209,8 +1110,8 @@ public struct Confirmation {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
extension Confirmation: Equatable, Hashable {
|
extension BlockTime: Equatable, Hashable {
|
||||||
public static func ==(lhs: Confirmation, rhs: Confirmation) -> Bool {
|
public static func ==(lhs: BlockTime, rhs: BlockTime) -> Bool {
|
||||||
if lhs.height != rhs.height {
|
if lhs.height != rhs.height {
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
@ -1227,9 +1128,9 @@ extension Confirmation: Equatable, Hashable {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
fileprivate extension Confirmation {
|
fileprivate extension BlockTime {
|
||||||
static func read(from buf: Reader) throws -> Confirmation {
|
static func read(from buf: Reader) throws -> BlockTime {
|
||||||
return try Confirmation(
|
return try BlockTime(
|
||||||
height: UInt32.read(from: buf),
|
height: UInt32.read(from: buf),
|
||||||
timestamp: UInt64.read(from: buf)
|
timestamp: UInt64.read(from: buf)
|
||||||
)
|
)
|
||||||
@ -1241,7 +1142,7 @@ fileprivate extension Confirmation {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
extension Confirmation: ViaFfiUsingByteBuffer, ViaFfi {}
|
extension BlockTime: ViaFfiUsingByteBuffer, ViaFfi {}
|
||||||
|
|
||||||
public struct ElectrumConfig {
|
public struct ElectrumConfig {
|
||||||
public var url: String
|
public var url: String
|
||||||
@ -1868,13 +1769,13 @@ extension BdkError: Error { }
|
|||||||
// Declaration and FfiConverters for BdkProgress Callback Interface
|
// Declaration and FfiConverters for BdkProgress Callback Interface
|
||||||
|
|
||||||
public protocol BdkProgress : AnyObject {
|
public protocol BdkProgress : AnyObject {
|
||||||
func update(progress: Float, message: String? )
|
func update( progress: Float, message: String? )
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// The ForeignCallback that is passed to Rust.
|
// The ForeignCallback that is passed to Rust.
|
||||||
fileprivate let foreignCallbackCallbackInterfaceBdkProgress : ForeignCallback =
|
fileprivate let foreignCallbackCallbackInterfaceBdkProgress : ForeignCallback =
|
||||||
{ (handle: Handle, method: Int32, args: RustBuffer) -> RustBuffer in
|
{ (handle: Handle, method: Int32, args: RustBuffer, out_buf: UnsafeMutablePointer<RustBuffer>) -> Int32 in
|
||||||
func invokeUpdate(_ swiftCallbackInterface: BdkProgress, _ args: RustBuffer) throws -> RustBuffer {
|
func invokeUpdate(_ swiftCallbackInterface: BdkProgress, _ args: RustBuffer) throws -> RustBuffer {
|
||||||
defer { args.deallocate() }
|
defer { args.deallocate() }
|
||||||
|
|
||||||
@ -1894,20 +1795,30 @@ fileprivate let foreignCallbackCallbackInterfaceBdkProgress : ForeignCallback =
|
|||||||
switch method {
|
switch method {
|
||||||
case IDX_CALLBACK_FREE:
|
case IDX_CALLBACK_FREE:
|
||||||
ffiConverterCallbackInterfaceBdkProgress.drop(handle: handle)
|
ffiConverterCallbackInterfaceBdkProgress.drop(handle: handle)
|
||||||
return RustBuffer()
|
// No return value.
|
||||||
case 1: return try! invokeUpdate(cb, args)
|
// See docs of ForeignCallback in `uniffi/src/ffi/foreigncallbacks.rs`
|
||||||
|
return 0
|
||||||
|
case 1:
|
||||||
|
let buffer = try! invokeUpdate(cb, args)
|
||||||
|
out_buf.pointee = buffer
|
||||||
|
// Value written to out buffer.
|
||||||
|
// See docs of ForeignCallback in `uniffi/src/ffi/foreigncallbacks.rs`
|
||||||
|
return 1
|
||||||
|
|
||||||
// This should never happen, because an out of bounds method index won't
|
// This should never happen, because an out of bounds method index won't
|
||||||
// ever be used. Once we can catch errors, we should return an InternalError.
|
// ever be used. Once we can catch errors, we should return an InternalError.
|
||||||
// https://github.com/mozilla/uniffi-rs/issues/351
|
// https://github.com/mozilla/uniffi-rs/issues/351
|
||||||
default: return RustBuffer()
|
default:
|
||||||
|
// An unexpected error happened.
|
||||||
|
// See docs of ForeignCallback in `uniffi/src/ffi/foreigncallbacks.rs`
|
||||||
|
return -1
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// The ffiConverter which transforms the Callbacks in to Handles to pass to Rust.
|
// The ffiConverter which transforms the Callbacks in to Handles to pass to Rust.
|
||||||
private let ffiConverterCallbackInterfaceBdkProgress: FfiConverterCallbackInterface<BdkProgress> = {
|
private let ffiConverterCallbackInterfaceBdkProgress: FfiConverterCallbackInterface<BdkProgress> = {
|
||||||
try! rustCall { (err: UnsafeMutablePointer<RustCallStatus>) in
|
try! rustCall { (err: UnsafeMutablePointer<RustCallStatus>) in
|
||||||
ffi_bdk_2e4d_BdkProgress_init_callback(foreignCallbackCallbackInterfaceBdkProgress, err)
|
ffi_bdk_d04b_BdkProgress_init_callback(foreignCallbackCallbackInterfaceBdkProgress, err)
|
||||||
}
|
}
|
||||||
return FfiConverterCallbackInterface<BdkProgress>()
|
return FfiConverterCallbackInterface<BdkProgress>()
|
||||||
}()
|
}()
|
||||||
@ -1983,10 +1894,9 @@ extension String: ViaFfi {
|
|||||||
buf.writeBytes(self.utf8)
|
buf.writeBytes(self.utf8)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// Helper code for OfflineWallet class is found in ObjectTemplate.swift
|
|
||||||
// Helper code for OnlineWallet class is found in ObjectTemplate.swift
|
|
||||||
// Helper code for PartiallySignedBitcoinTransaction class is found in ObjectTemplate.swift
|
// Helper code for PartiallySignedBitcoinTransaction class is found in ObjectTemplate.swift
|
||||||
// Helper code for Confirmation record is found in RecordTemplate.swift
|
// Helper code for Wallet class is found in ObjectTemplate.swift
|
||||||
|
// Helper code for BlockTime record is found in RecordTemplate.swift
|
||||||
// Helper code for ElectrumConfig record is found in RecordTemplate.swift
|
// Helper code for ElectrumConfig record is found in RecordTemplate.swift
|
||||||
// Helper code for EsploraConfig record is found in RecordTemplate.swift
|
// Helper code for EsploraConfig record is found in RecordTemplate.swift
|
||||||
// Helper code for ExtendedKeyInfo record is found in RecordTemplate.swift
|
// Helper code for ExtendedKeyInfo record is found in RecordTemplate.swift
|
||||||
@ -1994,9 +1904,9 @@ extension String: ViaFfi {
|
|||||||
// Helper code for TransactionDetails record is found in RecordTemplate.swift
|
// Helper code for TransactionDetails record is found in RecordTemplate.swift
|
||||||
// Helper code for BlockchainConfig enum is found in EnumTemplate.swift
|
// Helper code for BlockchainConfig enum is found in EnumTemplate.swift
|
||||||
// Helper code for DatabaseConfig enum is found in EnumTemplate.swift
|
// Helper code for DatabaseConfig enum is found in EnumTemplate.swift
|
||||||
// Helper code for MnemonicType enum is found in EnumTemplate.swift
|
|
||||||
// Helper code for Network enum is found in EnumTemplate.swift
|
// Helper code for Network enum is found in EnumTemplate.swift
|
||||||
// Helper code for Transaction enum is found in EnumTemplate.swift
|
// Helper code for Transaction enum is found in EnumTemplate.swift
|
||||||
|
// Helper code for WordCount enum is found in EnumTemplate.swift
|
||||||
// Helper code for BdkError error is found in ErrorTemplate.swift
|
// Helper code for BdkError error is found in ErrorTemplate.swift
|
||||||
|
|
||||||
fileprivate enum FfiConverterOptionUInt8: FfiConverterUsingByteBuffer {
|
fileprivate enum FfiConverterOptionUInt8: FfiConverterUsingByteBuffer {
|
||||||
|
2
bdk-ffi
2
bdk-ffi
@ -1 +1 @@
|
|||||||
Subproject commit 6fe9bddcfab97d061668da35cde2d12197014c7a
|
Subproject commit 89d58db02a7b04eba9e18c9c84213845ed01d2dc
|
Loading…
x
Reference in New Issue
Block a user