From 6f46e2deb61704625a19c0c98e1a81a779b16879 Mon Sep 17 00:00:00 2001 From: Steve Myers Date: Sat, 2 Oct 2021 12:08:34 -0700 Subject: [PATCH] [wip] swift --- README.md | 6 +++- bdk-swift/.gitignore | 7 ++++ bdk-swift/bdk.swift/.gitignore | 7 ++++ bdk-swift/bdk.swift/Package.resolved | 16 +++++++++ bdk-swift/bdk.swift/Package.swift | 28 +++++++++++++++ bdk-swift/bdk.swift/README.md | 11 ++++++ .../Sources/bdk.swift/bdk_swift.swift | 8 +++++ .../Tests/bdk.swiftTests/bdk_swiftTests.swift | 35 +++++++++++++++++++ 8 files changed, 117 insertions(+), 1 deletion(-) create mode 100644 bdk-swift/.gitignore create mode 100644 bdk-swift/bdk.swift/.gitignore create mode 100644 bdk-swift/bdk.swift/Package.resolved create mode 100644 bdk-swift/bdk.swift/Package.swift create mode 100644 bdk-swift/bdk.swift/README.md create mode 100644 bdk-swift/bdk.swift/Sources/bdk.swift/bdk_swift.swift create mode 100644 bdk-swift/bdk.swift/Tests/bdk.swiftTests/bdk_swiftTests.swift diff --git a/README.md b/README.md index 2935e1c..495c4c2 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -Setup build environment +Setup Android build environment 1. Add Android rust targets @@ -12,6 +12,10 @@ rustup target add x86_64-apple-darwin x86_64-unknown-linux-gnu x86_64-linux-andr export ANDROID_NDK_HOME=/home//Android/Sdk/ndk/ ``` +Setup Swift build environment + +1. Install Swift, see ["Download Swift"](https://swift.org/download/) page + Adding new structs and functions 1. Create C safe Rust structs and related functions using safer-ffi diff --git a/bdk-swift/.gitignore b/bdk-swift/.gitignore new file mode 100644 index 0000000..bb460e7 --- /dev/null +++ b/bdk-swift/.gitignore @@ -0,0 +1,7 @@ +.DS_Store +/.build +/Packages +/*.xcodeproj +xcuserdata/ +DerivedData/ +.swiftpm/xcode/package.xcworkspace/contents.xcworkspacedata diff --git a/bdk-swift/bdk.swift/.gitignore b/bdk-swift/bdk.swift/.gitignore new file mode 100644 index 0000000..bb460e7 --- /dev/null +++ b/bdk-swift/bdk.swift/.gitignore @@ -0,0 +1,7 @@ +.DS_Store +/.build +/Packages +/*.xcodeproj +xcuserdata/ +DerivedData/ +.swiftpm/xcode/package.xcworkspace/contents.xcworkspacedata diff --git a/bdk-swift/bdk.swift/Package.resolved b/bdk-swift/bdk.swift/Package.resolved new file mode 100644 index 0000000..e1a027b --- /dev/null +++ b/bdk-swift/bdk.swift/Package.resolved @@ -0,0 +1,16 @@ +{ + "object": { + "pins": [ + { + "package": "Clibbdkffi", + "repositoryURL": "/home/steve/git/notmandatory/Clibbdkffi", + "state": { + "branch": null, + "revision": "9c96e359a3b1e1d5c0db61125147f6ef929bf567", + "version": "0.1.0" + } + } + ] + }, + "version": 1 +} diff --git a/bdk-swift/bdk.swift/Package.swift b/bdk-swift/bdk.swift/Package.swift new file mode 100644 index 0000000..3a7987b --- /dev/null +++ b/bdk-swift/bdk.swift/Package.swift @@ -0,0 +1,28 @@ +// swift-tools-version:5.5 +// The swift-tools-version declares the minimum version of Swift required to build this package. + +import PackageDescription + +let package = Package( + name: "bdk.swift", + products: [ + // Products define the executables and libraries a package produces, and make them visible to other packages. + .library( + name: "bdk.swift", + targets: ["bdk.swift"]), + ], + dependencies: [ + // Dependencies declare other packages that this package depends on. + .package(url: "../../../Clibbdkffi", from: "0.1.0"), + ], + targets: [ + // Targets are the basic building blocks of a package. A target can define a module or a test suite. + // Targets can depend on other targets in this package, and on products in packages this package depends on. + .target( + name: "bdk.swift", + dependencies: ["Clibbdkffi"]), + .testTarget( + name: "bdk.swiftTests", + dependencies: ["bdk.swift"]), + ] +) diff --git a/bdk-swift/bdk.swift/README.md b/bdk-swift/bdk.swift/README.md new file mode 100644 index 0000000..a678238 --- /dev/null +++ b/bdk-swift/bdk.swift/README.md @@ -0,0 +1,11 @@ +# bdk.swift + +To build: +``` +swift build -Xlinker -L../../target/debug +``` + +To test: +``` +swift test -Xlinker -L../../target/debug +``` diff --git a/bdk-swift/bdk.swift/Sources/bdk.swift/bdk_swift.swift b/bdk-swift/bdk.swift/Sources/bdk.swift/bdk_swift.swift new file mode 100644 index 0000000..3f0ecc0 --- /dev/null +++ b/bdk-swift/bdk.swift/Sources/bdk.swift/bdk_swift.swift @@ -0,0 +1,8 @@ +import Clibbdkffi + +public struct bdk_swift { + public private(set) var text = "Hello, World!" + + public init() { + } +} diff --git a/bdk-swift/bdk.swift/Tests/bdk.swiftTests/bdk_swiftTests.swift b/bdk-swift/bdk.swift/Tests/bdk.swiftTests/bdk_swiftTests.swift new file mode 100644 index 0000000..8070cc6 --- /dev/null +++ b/bdk-swift/bdk.swift/Tests/bdk.swiftTests/bdk_swiftTests.swift @@ -0,0 +1,35 @@ +import XCTest +import Clibbdkffi + +@testable import bdk_swift + +final class bdk_swiftTests: XCTestCase { + func testExample() throws { + // This is an example of a functional test case. + // Use XCTAssert and related functions to verify your tests produce the correct + // results. + XCTAssertEqual(bdk_swift().text, "Hello, World!") + let desc = "wpkh([bf988dd3/84'/1'/0']tpubDD7bHVspyCSvvU8qEycydF664NAX6EAPjJ77j9E614GU2zVdXgnZZo6JJjKbDT6fUn8owMN6TCP9rZMznsNEhJbpkEwp6fAyyoSqy3DH2Qj/0/*)"; + let change = "wpkh([bf988dd3/84'/1'/0']tpubDD7bHVspyCSvvU8qEycydF664NAX6EAPjJ77j9E614GU2zVdXgnZZo6JJjKbDT6fUn8owMN6TCP9rZMznsNEhJbpkEwp6fAyyoSqy3DH2Qj/1/*)"; + let net = "testnet"; + let blocks = "ssl://electrum.blockstream.info:60002"; + + let bc_config = new_electrum_config(blocks, nil, 5, 30, 100) + let db_config = new_memory_config() + + let wallet_result = new_wallet_result(desc,change,net,bc_config,db_config) + + free_blockchain_config(bc_config) + free_database_config(db_config) + + let wallet = wallet_result.ok + let sync_result = sync_wallet(wallet) + assert(sync_result.err == FFI_ERROR_NONE) + free_void_result(sync_result) + + let address1_result = new_address(wallet).ok + let address1 = String(cString: address1_result!, encoding: .utf8) + //print("address1 = \(address1!)") + assert(address1! == "tb1qh4ajvhz9nd76tqddnl99l89hx4dat33hrjauzw") + } +}