diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml
index 349893bce..dac065ec1 100644
--- a/.github/workflows/build.yml
+++ b/.github/workflows/build.yml
@@ -1,5 +1,4 @@
name: Continuous Integration
-
on:
push:
branches:
@@ -10,7 +9,6 @@ on:
branches:
- master
- develop
-
jobs:
build:
name: Build
@@ -20,7 +18,7 @@ jobs:
run: |
brew install automake
- name: Checkout DashSync
- uses: actions/checkout@v2
+ uses: actions/checkout@v3
with:
path: dashsync
submodules: recursive
@@ -48,13 +46,17 @@ jobs:
xcode-version: '15.4'
- name: Rustup add targets
run: rustup target add aarch64-apple-ios x86_64-apple-ios aarch64-apple-ios-sim
- - name: Dependencies
+ - name: Build dependencies
working-directory: ./dashsync/Example
run: pod install --repo-update --verbose
- - name: Build
+ - name: Build for iOS Simulator (without code signing)
working-directory: ./dashsync/Example
env:
- scheme: ${{ 'default' }}
+ scheme: ${{ 'DashSync-Example' }}
platform: ${{ 'iOS Simulator' }}
run: |
- xcodebuild build -scheme "DashSync-Example" -workspace "DashSync.xcworkspace" -destination "platform=$platform,name=iPhone 13"
+ xcodebuild build \
+ -scheme "DashSync-Example" \
+ -workspace "DashSync.xcworkspace" \
+ -destination "platform=$platform,name=iPhone 13" \
+ CODE_SIGN_IDENTITY="" CODE_SIGNING_REQUIRED=NO CODE_SIGN_ENTITLEMENTS="" CODE_SIGNING_ALLOWED=NO
\ No newline at end of file
diff --git a/.github/workflows/coverage.yml b/.github/workflows/coverage.yml
index 172ddfba9..6504c8e63 100644
--- a/.github/workflows/coverage.yml
+++ b/.github/workflows/coverage.yml
@@ -18,7 +18,7 @@ jobs:
run: |
brew install automake
- name: Checkout DashSync
- uses: actions/checkout@v2
+ uses: actions/checkout@v3
with:
path: dashsync
submodules: recursive
diff --git a/.github/workflows/e2eTestsTestnet.yml b/.github/workflows/e2eTestsTestnet.yml
index 5592daf8a..debb99192 100644
--- a/.github/workflows/e2eTestsTestnet.yml
+++ b/.github/workflows/e2eTestsTestnet.yml
@@ -20,7 +20,7 @@ jobs:
run: |
brew install automake
- name: Checkout DashSync
- uses: actions/checkout@v2
+ uses: actions/checkout@v3
with:
path: dashsync
submodules: recursive
@@ -48,17 +48,25 @@ jobs:
- name: Dependencies
working-directory: ./dashsync/Example
run: pod install --repo-update
- - name: Build
+ - name: Build for testing (with ad-hoc code signing)
working-directory: ./dashsync/Example
env:
- scheme: ${{ 'default' }}
+ scheme: ${{ 'DashSync-Example' }}
platform: ${{ 'iOS Simulator' }}
run: |
- xcodebuild build-for-testing -scheme "DashSync-Example" -workspace "DashSync.xcworkspace" -destination "platform=$platform,name=iPhone 13"
+ xcodebuild build-for-testing \
+ -scheme "DashSync-Example" \
+ -workspace "DashSync.xcworkspace" \
+ -destination "platform=$platform,name=iPhone 13" \
+ CODE_SIGN_IDENTITY="-" CODE_SIGNING_REQUIRED=YES CODE_SIGNING_ALLOWED=YES
- name: Test Syncing Chain
working-directory: ./dashsync/Example
env:
- scheme: ${{ 'default' }}
+ scheme: ${{ 'DashSync-Example' }}
platform: ${{ 'iOS Simulator' }}
run: |
- xcodebuild test-without-building -scheme "DashSync-Example" -workspace "DashSync.xcworkspace" -destination "platform=$platform,name=iPhone 13" -testPlan TestnetE2ETests
+ xcodebuild test-without-building \
+ -scheme "DashSync-Example" \
+ -workspace "DashSync.xcworkspace" \
+ -destination "platform=$platform,name=iPhone 13" \
+ -testPlan TestnetE2ETests
\ No newline at end of file
diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml
index f92e7d6aa..2afc376d8 100644
--- a/.github/workflows/lint.yml
+++ b/.github/workflows/lint.yml
@@ -20,7 +20,7 @@ jobs:
run: |
brew install automake
- name: Checkout DashSync
- uses: actions/checkout@v2
+ uses: actions/checkout@v3
with:
path: dashsync
submodules: recursive
diff --git a/.github/workflows/network.yml b/.github/workflows/network.yml
index 753b49d44..342edf1b3 100644
--- a/.github/workflows/network.yml
+++ b/.github/workflows/network.yml
@@ -17,7 +17,7 @@ jobs:
run: |
brew install automake
- name: Checkout DashSync
- uses: actions/checkout@v2
+ uses: actions/checkout@v3
with:
path: dashsync
submodules: recursive
@@ -44,7 +44,7 @@ jobs:
run: cargo install cargo-lipo
- name: Rustup add targets
run: rustup target add x86_64-apple-darwin
- - name: Dependencies
+ - name: Build Dependencies
working-directory: ./dashsync/Example
run: pod install --repo-update
- name: Cache network info build
@@ -71,7 +71,9 @@ jobs:
run: |
./NetworkInfo -outputDir ~/
- name: Archive network ping results
- uses: actions/upload-artifact@v2
+ uses: actions/upload-artifact@v4 # Updated to v4
with:
name: testnet-network-report
path: ~/networkHealth.json
+ retention-days: 30
+ compression-level: 6 # Default, adjust as needed
\ No newline at end of file
diff --git a/.github/workflows/syncTestMainnet.yml b/.github/workflows/syncTestMainnet.yml
index 7e12492fa..54aa929e3 100644
--- a/.github/workflows/syncTestMainnet.yml
+++ b/.github/workflows/syncTestMainnet.yml
@@ -19,7 +19,7 @@ jobs:
run: |
brew install automake
- name: Checkout DashSync
- uses: actions/checkout@v2
+ uses: actions/checkout@v3
with:
path: dashsync
submodules: recursive
diff --git a/.github/workflows/syncTestTestnet.yml b/.github/workflows/syncTestTestnet.yml
index 85c69d426..d55703616 100644
--- a/.github/workflows/syncTestTestnet.yml
+++ b/.github/workflows/syncTestTestnet.yml
@@ -29,7 +29,7 @@ jobs:
git lfs ls-files -l | cut -d' ' -f1 | sort > .lfs-assets-id
working-directory: ./dashsync
- name: Restore LFS cache
- uses: actions/cache@v2
+ uses: actions/cache@v3
id: lfs-cache
with:
path: dashsync/.git/lfs
@@ -48,17 +48,26 @@ jobs:
- name: Dependencies
working-directory: ./dashsync/Example
run: pod install --repo-update
- - name: Build
+ - name: Build for testing (without code signing)
working-directory: ./dashsync/Example
env:
- scheme: ${{ 'default' }}
+ scheme: ${{ 'DashSync-Example' }}
platform: ${{ 'iOS Simulator' }}
run: |
- xcodebuild build-for-testing -scheme "DashSync-Example" -workspace "DashSync.xcworkspace" -destination "platform=$platform,name=iPhone 13"
+ xcodebuild build-for-testing \
+ -scheme "DashSync-Example" \
+ -workspace "DashSync.xcworkspace" \
+ -destination "platform=$platform,name=iPhone 13" \
+ CODE_SIGN_IDENTITY="" CODE_SIGNING_REQUIRED=NO CODE_SIGN_ENTITLEMENTS="" CODE_SIGNING_ALLOWED=NO
- name: Test Syncing Chain
working-directory: ./dashsync/Example
env:
- scheme: ${{ 'default' }}
+ scheme: ${{ 'DashSync-Example' }}
platform: ${{ 'iOS Simulator' }}
run: |
- xcodebuild test-without-building -scheme "DashSync-Example" -workspace "DashSync.xcworkspace" -destination "platform=$platform,name=iPhone 13" -testPlan TestnetSyncTests
+ xcodebuild test-without-building \
+ -scheme "DashSync-Example" \
+ -workspace "DashSync.xcworkspace" \
+ -destination "platform=$platform,name=iPhone 13" \
+ -testPlan TestnetSyncTests \
+ CODE_SIGN_IDENTITY="" CODE_SIGNING_REQUIRED=NO CODE_SIGN_ENTITLEMENTS="" CODE_SIGNING_ALLOWED=NO
\ No newline at end of file
diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml
index 857070010..205e35954 100644
--- a/.github/workflows/test.yml
+++ b/.github/workflows/test.yml
@@ -19,109 +19,192 @@ jobs:
- name: Install automake
run: |
brew install automake
+
- name: Checkout DashSync
- uses: actions/checkout@v2
+ uses: actions/checkout@v3
with:
path: dashsync
submodules: recursive
+
- name: Create LFS file list
run: |
git lfs ls-files -l | cut -d' ' -f1 | sort > .lfs-assets-id
working-directory: ./dashsync
+
- name: Restore LFS cache
uses: actions/cache@v3
id: lfs-cache
with:
path: dashsync/.git/lfs
key: lfs-${{ hashFiles('.lfs-assets-id') }}-v1
+
- name: Git LFS Pull
run: git lfs pull
working-directory: ./dashsync
+
- uses: actions/cache@v3
with:
path: ./dashsync/Example/Pods
key: ${{ runner.os }}-pods-${{ hashFiles('**/Podfile.lock') }}
restore-keys: |
${{ runner.os }}-pods-
+
- name: Rustup add targets
run: rustup target add aarch64-apple-ios x86_64-apple-ios aarch64-apple-ios-sim
+
- name: Dependencies
working-directory: ./dashsync/Example
run: pod install --repo-update
- - name: Build
+
+ - name: Build for testing (with manual code signing)
working-directory: ./dashsync/Example
env:
- scheme: ${{ 'default' }}
- platform: ${{ 'iOS Simulator' }}
+ scheme: 'DashSync-Example'
+ platform: 'iOS Simulator'
run: |
- xcodebuild build-for-testing -scheme "DashSync-Example" -workspace "DashSync.xcworkspace" -destination "platform=$platform,name=iPhone 13"
+ xcodebuild build-for-testing \
+ -scheme "$scheme" \
+ -workspace "DashSync.xcworkspace" \
+ -destination "platform=$platform,name=iPhone 13" \
+ CODE_SIGN_STYLE=Manual \
+ CODE_SIGN_IDENTITY="Sign to Run Locally"
+
- name: Test Crypto
working-directory: ./dashsync/Example
env:
- scheme: ${{ 'default' }}
- platform: ${{ 'iOS Simulator' }}
+ scheme: 'DashSync-Example'
+ platform: 'iOS Simulator'
run: |
- xcodebuild test-without-building -scheme "DashSync-Example" -workspace "DashSync.xcworkspace" -destination "platform=$platform,name=iPhone 13" -testPlan CryptoTests
+ xcodebuild test-without-building \
+ -scheme "$scheme" \
+ -workspace "DashSync.xcworkspace" \
+ -destination "platform=$platform,name=iPhone 13" \
+ -testPlan CryptoTests \
+ CODE_SIGN_STYLE=Manual \
+ CODE_SIGN_IDENTITY="Sign to Run Locally"
+
- name: Test Derivations
working-directory: ./dashsync/Example
env:
- scheme: ${{ 'default' }}
- platform: ${{ 'iOS Simulator' }}
+ scheme: 'DashSync-Example'
+ platform: 'iOS Simulator'
run: |
- xcodebuild test-without-building -scheme "DashSync-Example" -workspace "DashSync.xcworkspace" -destination "platform=$platform,name=iPhone 13" -testPlan DerivationTests
+ xcodebuild test-without-building \
+ -scheme "$scheme" \
+ -workspace "DashSync.xcworkspace" \
+ -destination "platform=$platform,name=iPhone 13" \
+ -testPlan DerivationTests \
+ CODE_SIGN_STYLE=Manual \
+ CODE_SIGN_IDENTITY="Sign to Run Locally"
+
- name: Test Libraries
working-directory: ./dashsync/Example
env:
- scheme: ${{ 'default' }}
- platform: ${{ 'iOS Simulator' }}
+ scheme: 'DashSync-Example'
+ platform: 'iOS Simulator'
run: |
- xcodebuild test-without-building -scheme "DashSync-Example" -workspace "DashSync.xcworkspace" -destination "platform=$platform,name=iPhone 13" -testPlan LibraryTests
+ xcodebuild test-without-building \
+ -scheme "$scheme" \
+ -workspace "DashSync.xcworkspace" \
+ -destination "platform=$platform,name=iPhone 13" \
+ -testPlan LibraryTests \
+ CODE_SIGN_STYLE=Manual \
+ CODE_SIGN_IDENTITY="Sign to Run Locally"
+
- name: Test Governance
working-directory: ./dashsync/Example
env:
- scheme: ${{ 'default' }}
- platform: ${{ 'iOS Simulator' }}
+ scheme: 'DashSync-Example'
+ platform: 'iOS Simulator'
run: |
- xcodebuild test-without-building -scheme "DashSync-Example" -workspace "DashSync.xcworkspace" -destination "platform=$platform,name=iPhone 13" -testPlan GovernanceTests
+ xcodebuild test-without-building \
+ -scheme "$scheme" \
+ -workspace "DashSync.xcworkspace" \
+ -destination "platform=$platform,name=iPhone 13" \
+ -testPlan GovernanceTests \
+ CODE_SIGN_STYLE=Manual \
+ CODE_SIGN_IDENTITY="Sign to Run Locally"
+
- name: Test Payments
working-directory: ./dashsync/Example
env:
- scheme: ${{ 'default' }}
- platform: ${{ 'iOS Simulator' }}
+ scheme: 'DashSync-Example'
+ platform: 'iOS Simulator'
run: |
- xcodebuild test-without-building -scheme "DashSync-Example" -workspace "DashSync.xcworkspace" -destination "platform=$platform,name=iPhone 13" -testPlan PaymentTests
+ xcodebuild test-without-building \
+ -scheme "$scheme" \
+ -workspace "DashSync.xcworkspace" \
+ -destination "platform=$platform,name=iPhone 13" \
+ -testPlan PaymentTests \
+ CODE_SIGN_STYLE=Manual \
+ CODE_SIGN_IDENTITY="Sign to Run Locally"
+
- name: Test Masternode Lists
working-directory: ./dashsync/Example
env:
- scheme: ${{ 'default' }}
- platform: ${{ 'iOS Simulator' }}
+ scheme: 'DashSync-Example'
+ platform: 'iOS Simulator'
run: |
- xcodebuild test-without-building -scheme "DashSync-Example" -workspace "DashSync.xcworkspace" -destination "platform=$platform,name=iPhone 13" -testPlan MasternodeListTests
+ xcodebuild test-without-building \
+ -scheme "$scheme" \
+ -workspace "DashSync.xcworkspace" \
+ -destination "platform=$platform,name=iPhone 13" \
+ -testPlan MasternodeListTests \
+ CODE_SIGN_STYLE=Manual \
+ CODE_SIGN_IDENTITY="Sign to Run Locally"
+
- name: Test Wallet
working-directory: ./dashsync/Example
env:
- scheme: ${{ 'default' }}
- platform: ${{ 'iOS Simulator' }}
+ scheme: 'DashSync-Example'
+ platform: 'iOS Simulator'
run: |
- xcodebuild test-without-building -scheme "DashSync-Example" -workspace "DashSync.xcworkspace" -destination "platform=$platform,name=iPhone 13" -testPlan WalletTests
+ xcodebuild test-without-building \
+ -scheme "$scheme" \
+ -workspace "DashSync.xcworkspace" \
+ -destination "platform=$platform,name=iPhone 13" \
+ -testPlan WalletTests \
+ CODE_SIGN_STYLE=Manual \
+ CODE_SIGN_IDENTITY="Sign to Run Locally"
+
- name: Test Platform Transitions
working-directory: ./dashsync/Example
env:
- scheme: ${{ 'default' }}
- platform: ${{ 'iOS Simulator' }}
+ scheme: 'DashSync-Example'
+ platform: 'iOS Simulator'
run: |
- xcodebuild test-without-building -scheme "DashSync-Example" -workspace "DashSync.xcworkspace" -destination "platform=$platform,name=iPhone 13" -testPlan PlatformTransitionTests
+ xcodebuild test-without-building \
+ -scheme "$scheme" \
+ -workspace "DashSync.xcworkspace" \
+ -destination "platform=$platform,name=iPhone 13" \
+ -testPlan PlatformTransitionTests \
+ CODE_SIGN_STYLE=Manual \
+ CODE_SIGN_IDENTITY="Sign to Run Locally"
+
- name: Test Transactions
working-directory: ./dashsync/Example
env:
- scheme: ${{ 'default' }}
- platform: ${{ 'iOS Simulator' }}
+ scheme: 'DashSync-Example'
+ platform: 'iOS Simulator'
run: |
- xcodebuild test-without-building -scheme "DashSync-Example" -workspace "DashSync.xcworkspace" -destination "platform=$platform,name=iPhone 13" -testPlan TransactionTests
+ xcodebuild test-without-building \
+ -scheme "$scheme" \
+ -workspace "DashSync.xcworkspace" \
+ -destination "platform=$platform,name=iPhone 13" \
+ -testPlan TransactionTests \
+ CODE_SIGN_STYLE=Manual \
+ CODE_SIGN_IDENTITY="Sign to Run Locally"
+
- name: Test Locks
working-directory: ./dashsync/Example
env:
- scheme: ${{ 'default' }}
- platform: ${{ 'iOS Simulator' }}
+ scheme: 'DashSync-Example'
+ platform: 'iOS Simulator'
run: |
- xcodebuild test-without-building -scheme "DashSync-Example" -workspace "DashSync.xcworkspace" -destination "platform=$platform,name=iPhone 13" -testPlan LockTests
+ xcodebuild test-without-building \
+ -scheme "$scheme" \
+ -workspace "DashSync.xcworkspace" \
+ -destination "platform=$platform,name=iPhone 13" \
+ -testPlan LockTests \
+ CODE_SIGN_STYLE=Manual \
+ CODE_SIGN_IDENTITY="Sign to Run Locally"
\ No newline at end of file
diff --git a/DashSync.podspec b/DashSync.podspec
index 98e8e450b..f052a94ad 100644
--- a/DashSync.podspec
+++ b/DashSync.podspec
@@ -34,7 +34,7 @@ Pod::Spec.new do |s|
s.ios.framework = 'UIKit'
s.macos.framework = 'Cocoa'
s.compiler_flags = '-Wno-comma'
- s.dependency 'DashSharedCore', '0.4.16'
+ s.dependency 'DashSharedCore', '0.4.19'
s.dependency 'CocoaLumberjack', '3.7.2'
s.ios.dependency 'DWAlertController', '0.2.1'
s.dependency 'DSDynamicOptions', '0.1.2'
diff --git a/DashSync/shared/DashSync.xcdatamodeld/.xccurrentversion b/DashSync/shared/DashSync.xcdatamodeld/.xccurrentversion
index 5cbe4fe8d..9697cdadc 100644
--- a/DashSync/shared/DashSync.xcdatamodeld/.xccurrentversion
+++ b/DashSync/shared/DashSync.xcdatamodeld/.xccurrentversion
@@ -3,6 +3,6 @@
_XCCurrentVersionName
- DashSync 20.xcdatamodel
+ DashSync 21.xcdatamodel
diff --git a/DashSync/shared/DashSync.xcdatamodeld/DashSync 21.xcdatamodel/contents b/DashSync/shared/DashSync.xcdatamodeld/DashSync 21.xcdatamodel/contents
new file mode 100644
index 000000000..e8661f27e
--- /dev/null
+++ b/DashSync/shared/DashSync.xcdatamodeld/DashSync 21.xcdatamodel/contents
@@ -0,0 +1,529 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/DashSync/shared/Models/Chain/DSChainConstants.h b/DashSync/shared/Models/Chain/DSChainConstants.h
index 4420efbfc..1a8b5f9b5 100644
--- a/DashSync/shared/Models/Chain/DSChainConstants.h
+++ b/DashSync/shared/Models/Chain/DSChainConstants.h
@@ -31,13 +31,13 @@
#define TESTNET_DAPI_GRPC_STANDARD_PORT 3010
#define DEVNET_DAPI_GRPC_STANDARD_PORT 3010
-#define PROTOCOL_VERSION_MAINNET 70232
+#define PROTOCOL_VERSION_MAINNET 70233
#define DEFAULT_MIN_PROTOCOL_VERSION_MAINNET 70228
-#define PROTOCOL_VERSION_TESTNET 70232
+#define PROTOCOL_VERSION_TESTNET 70233
#define DEFAULT_MIN_PROTOCOL_VERSION_TESTNET 70228
-#define PROTOCOL_VERSION_DEVNET 70232
+#define PROTOCOL_VERSION_DEVNET 70233
#define DEFAULT_MIN_PROTOCOL_VERSION_DEVNET 70228
#define PLATFORM_PROTOCOL_VERSION_MAINNET 1
diff --git a/DashSync/shared/Models/Entities/DSAssetLockTransactionEntity+CoreDataClass.h b/DashSync/shared/Models/Entities/DSAssetLockTransactionEntity+CoreDataClass.h
new file mode 100644
index 000000000..f543fb53c
--- /dev/null
+++ b/DashSync/shared/Models/Entities/DSAssetLockTransactionEntity+CoreDataClass.h
@@ -0,0 +1,43 @@
+//
+// Created by Vladimir Pirogov
+// Copyright © 2024 Dash Core Group. All rights reserved.
+//
+// Licensed under the MIT License (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// https://opensource.org/licenses/MIT
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+
+#import "DSSpecialTransactionEntity+CoreDataClass.h"
+#import
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface DSAssetLockTransactionEntity : DSSpecialTransactionEntity
+@end
+
+@interface DSAssetLockTransactionEntity (CoreDataGeneratedAccessors)
+
+- (void)insertObject:(DSTxOutputEntity *)value inCreditOutputsAtIndex:(NSUInteger)idx;
+- (void)removeObjectFromCreditOutputsAtIndex:(NSUInteger)idx;
+- (void)insertCreditOutputs:(NSArray *)value atIndexes:(NSIndexSet *)indexes;
+- (void)removeCreditOutputsAtIndexes:(NSIndexSet *)indexes;
+- (void)replaceObjectInCreditOutputsAtIndex:(NSUInteger)idx withObject:(DSTxOutputEntity *)value;
+- (void)replaceCreditOutputsAtIndexes:(NSIndexSet *)indexes withOutputs:(NSArray *)values;
+- (void)addCreditOutputsObject:(DSTxOutputEntity *)value;
+- (void)removeCreditOutputsObject:(DSTxOutputEntity *)value;
+- (void)addCreditOutputs:(NSOrderedSet *)values;
+- (void)removeCreditOutputs:(NSOrderedSet *)values;
+
+@end
+
+NS_ASSUME_NONNULL_END
+
+#import "DSAssetLockTransactionEntity+CoreDataProperties.h"
diff --git a/DashSync/shared/Models/Entities/DSAssetLockTransactionEntity+CoreDataClass.m b/DashSync/shared/Models/Entities/DSAssetLockTransactionEntity+CoreDataClass.m
new file mode 100644
index 000000000..8633ceca6
--- /dev/null
+++ b/DashSync/shared/Models/Entities/DSAssetLockTransactionEntity+CoreDataClass.m
@@ -0,0 +1,77 @@
+//
+// Created by Vladimir Pirogov
+// Copyright © 2024 Dash Core Group. All rights reserved.
+//
+// Licensed under the MIT License (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// https://opensource.org/licenses/MIT
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+
+#import "DSAddressEntity+CoreDataClass.h"
+#import "DSAssetLockTransaction.h"
+#import "DSAssetLockTransactionEntity+CoreDataClass.h"
+#import "DSChain+Protected.h"
+#import "DSChainEntity+CoreDataClass.h"
+#import "DSKeyManager.h"
+#import "DSTransactionFactory.h"
+#import "DSTransactionOutput.h"
+#import "DSTxOutputEntity+CoreDataClass.h"
+#import "NSData+Dash.h"
+#import "NSManagedObject+Sugar.h"
+#import "NSString+Dash.h"
+
+@implementation DSAssetLockTransactionEntity
+
+- (instancetype)setAttributesFromTransaction:(DSTransaction *)transaction {
+ [self.managedObjectContext performBlockAndWait:^{
+ [super setAttributesFromTransaction:transaction];
+ DSAssetLockTransaction *tx = (DSAssetLockTransaction *)transaction;
+ self.specialTransactionVersion = tx.specialTransactionVersion;
+ NSMutableOrderedSet *creditOutputs = [self mutableOrderedSetValueForKey:@"creditOutputs"];
+ while (creditOutputs.count < tx.creditOutputs.count) {
+ [creditOutputs addObject:[DSTxOutputEntity managedObjectInBlockedContext:self.managedObjectContext]];
+ }
+ while (creditOutputs.count > tx.creditOutputs.count) {
+
+ [self removeObjectFromCreditOutputsAtIndex:creditOutputs.count - 1];
+ }
+ NSUInteger idx = 0;
+ for (DSTxOutputEntity *e in creditOutputs) {
+ [e setAttributesFromTransaction:tx outputIndex:idx++ forTransactionEntity:self];
+ }
+ }];
+
+ return self;
+}
+
+- (DSTransaction *)transactionForChain:(DSChain *)chain {
+ DSAssetLockTransaction *tx = (DSAssetLockTransaction *)[super transactionForChain:chain];
+ tx.type = DSTransactionType_AssetLock;
+ [self.managedObjectContext performBlockAndWait:^{
+ tx.specialTransactionVersion = self.specialTransactionVersion;
+ for (DSTxOutputEntity *e in self.creditOutputs) {
+ NSString *address = e.address;
+ if (!address && e.script) {
+ address = [DSKeyManager addressWithScriptPubKey:e.script forChain:tx.chain];
+ }
+ DSTransactionOutput *transactionOutput = [DSTransactionOutput transactionOutputWithAmount:e.value address:address outScript:e.script onChain:tx.chain];
+ [tx.creditOutputs addObject:transactionOutput];
+ }
+ }];
+
+ return tx;
+}
+
+- (Class)transactionClass {
+ return [DSAssetLockTransaction class];
+}
+
+@end
diff --git a/DashSync/shared/Models/Entities/DSAssetLockTransactionEntity+CoreDataProperties.h b/DashSync/shared/Models/Entities/DSAssetLockTransactionEntity+CoreDataProperties.h
new file mode 100644
index 000000000..fafef85b5
--- /dev/null
+++ b/DashSync/shared/Models/Entities/DSAssetLockTransactionEntity+CoreDataProperties.h
@@ -0,0 +1,31 @@
+//
+// Created by Vladimir Pirogov
+// Copyright © 2024 Dash Core Group. All rights reserved.
+//
+// Licensed under the MIT License (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// https://opensource.org/licenses/MIT
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+
+#import "DSAssetLockTransactionEntity+CoreDataClass.h"
+
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface DSAssetLockTransactionEntity (CoreDataProperties)
+
++ (NSFetchRequest *)fetchRequest;
+
+@property (nonatomic, retain) NSOrderedSet *creditOutputs;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/DashSync/shared/Models/Entities/DSAssetLockTransactionEntity+CoreDataProperties.m b/DashSync/shared/Models/Entities/DSAssetLockTransactionEntity+CoreDataProperties.m
new file mode 100644
index 000000000..3b8e838d9
--- /dev/null
+++ b/DashSync/shared/Models/Entities/DSAssetLockTransactionEntity+CoreDataProperties.m
@@ -0,0 +1,28 @@
+//
+// Created by Vladimir Pirogov
+// Copyright © 2024 Dash Core Group. All rights reserved.
+//
+// Licensed under the MIT License (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// https://opensource.org/licenses/MIT
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+
+#import "DSAssetLockTransactionEntity+CoreDataProperties.h"
+
+@implementation DSAssetLockTransactionEntity (CoreDataProperties)
+
++ (NSFetchRequest *)fetchRequest {
+ return [NSFetchRequest fetchRequestWithEntityName:@"DSAssetLockTransactionEntity"];
+}
+
+@dynamic creditOutputs;
+
+@end
diff --git a/DashSync/shared/Models/Entities/DSAssetUnlockTransactionEntity+CoreDataClass.h b/DashSync/shared/Models/Entities/DSAssetUnlockTransactionEntity+CoreDataClass.h
new file mode 100644
index 000000000..da8899d08
--- /dev/null
+++ b/DashSync/shared/Models/Entities/DSAssetUnlockTransactionEntity+CoreDataClass.h
@@ -0,0 +1,29 @@
+//
+// Created by Vladimir Pirogov
+// Copyright © 2024 Dash Core Group. All rights reserved.
+//
+// Licensed under the MIT License (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// https://opensource.org/licenses/MIT
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+
+#import "DSSpecialTransactionEntity+CoreDataClass.h"
+#import
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface DSAssetUnlockTransactionEntity : DSSpecialTransactionEntity
+
+@end
+
+NS_ASSUME_NONNULL_END
+
+#import "DSAssetUnlockTransactionEntity+CoreDataProperties.h"
diff --git a/DashSync/shared/Models/Entities/DSAssetUnlockTransactionEntity+CoreDataClass.m b/DashSync/shared/Models/Entities/DSAssetUnlockTransactionEntity+CoreDataClass.m
new file mode 100644
index 000000000..aa67b7306
--- /dev/null
+++ b/DashSync/shared/Models/Entities/DSAssetUnlockTransactionEntity+CoreDataClass.m
@@ -0,0 +1,64 @@
+//
+// Created by Vladimir Pirogov
+// Copyright © 2024 Dash Core Group. All rights reserved.
+//
+// Licensed under the MIT License (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// https://opensource.org/licenses/MIT
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+
+#import "DSAddressEntity+CoreDataClass.h"
+#import "DSAssetUnlockTransaction.h"
+#import "DSAssetUnlockTransactionEntity+CoreDataClass.h"
+#import "DSChain+Protected.h"
+#import "DSChainEntity+CoreDataClass.h"
+#import "DSTransaction.h"
+#import "DSTransactionFactory.h"
+#import "NSData+Dash.h"
+#import "NSManagedObject+Sugar.h"
+
+@implementation DSAssetUnlockTransactionEntity
+
+- (instancetype)setAttributesFromTransaction:(DSTransaction *)transaction {
+ [self.managedObjectContext performBlockAndWait:^{
+ [super setAttributesFromTransaction:transaction];
+ DSAssetUnlockTransaction *tx = (DSAssetUnlockTransaction *)transaction;
+ self.specialTransactionVersion = tx.specialTransactionVersion;
+ self.index = tx.index;
+ self.fee = tx.fee;
+ self.requestedHeight = tx.requestedHeight;
+ self.quorumHash = uint256_data(tx.quorumHash);
+ self.quorumSignature = uint768_data(tx.quorumSignature);
+ }];
+
+ return self;
+}
+
+- (DSTransaction *)transactionForChain:(DSChain *)chain {
+ DSAssetUnlockTransaction *tx = (DSAssetUnlockTransaction *)[super transactionForChain:chain];
+ tx.type = DSTransactionType_AssetUnlock;
+ [self.managedObjectContext performBlockAndWait:^{
+ tx.specialTransactionVersion = self.specialTransactionVersion;
+ tx.index = self.index;
+ tx.fee = self.fee;
+ tx.requestedHeight = self.requestedHeight;
+ tx.quorumHash = self.quorumHash.UInt256;
+ tx.quorumSignature = self.quorumSignature.UInt768;
+ }];
+
+ return tx;
+}
+
+- (Class)transactionClass {
+ return [DSAssetUnlockTransaction class];
+}
+
+@end
diff --git a/DashSync/shared/Models/Entities/DSAssetUnlockTransactionEntity+CoreDataProperties.h b/DashSync/shared/Models/Entities/DSAssetUnlockTransactionEntity+CoreDataProperties.h
new file mode 100644
index 000000000..9c2a7baa8
--- /dev/null
+++ b/DashSync/shared/Models/Entities/DSAssetUnlockTransactionEntity+CoreDataProperties.h
@@ -0,0 +1,35 @@
+//
+// Created by Vladimir Pirogov
+// Copyright © 2024 Dash Core Group. All rights reserved.
+//
+// Licensed under the MIT License (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// https://opensource.org/licenses/MIT
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+
+#import "DSAssetUnlockTransactionEntity+CoreDataClass.h"
+
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface DSAssetUnlockTransactionEntity (CoreDataProperties)
+
++ (NSFetchRequest *)fetchRequest;
+
+@property (nonatomic, assign) uint64_t index;
+@property (nonatomic, assign) uint32_t fee;
+@property (nonatomic, assign) uint32_t requestedHeight;
+@property (nullable, nonatomic, retain) NSData *quorumHash;
+@property (nullable, nonatomic, retain) NSData *quorumSignature;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/DashSync/shared/Models/Entities/DSAssetUnlockTransactionEntity+CoreDataProperties.m b/DashSync/shared/Models/Entities/DSAssetUnlockTransactionEntity+CoreDataProperties.m
new file mode 100644
index 000000000..b5d9b60d6
--- /dev/null
+++ b/DashSync/shared/Models/Entities/DSAssetUnlockTransactionEntity+CoreDataProperties.m
@@ -0,0 +1,32 @@
+//
+// Created by Vladimir Pirogov
+// Copyright © 2024 Dash Core Group. All rights reserved.
+//
+// Licensed under the MIT License (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// https://opensource.org/licenses/MIT
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+
+#import "DSAssetUnlockTransactionEntity+CoreDataProperties.h"
+
+@implementation DSAssetUnlockTransactionEntity (CoreDataProperties)
+
++ (NSFetchRequest *)fetchRequest {
+ return [NSFetchRequest fetchRequestWithEntityName:@"DSAssetUnlockTransactionEntity"];
+}
+
+@dynamic index;
+@dynamic fee;
+@dynamic requestedHeight;
+@dynamic quorumHash;
+@dynamic quorumSignature;
+
+@end
diff --git a/DashSync/shared/Models/Managers/Chain Managers/DSBackgroundManager.m b/DashSync/shared/Models/Managers/Chain Managers/DSBackgroundManager.m
index e579e6a1f..a9a9bf897 100644
--- a/DashSync/shared/Models/Managers/Chain Managers/DSBackgroundManager.m
+++ b/DashSync/shared/Models/Managers/Chain Managers/DSBackgroundManager.m
@@ -86,7 +86,11 @@ - (void)stopBackgroundActivities {
}
- (BOOL)hasValidHeadersTask {
+#if TARGET_OS_IOS
return self.terminalHeadersSaveTaskId != UIBackgroundTaskInvalid || [UIApplication sharedApplication].applicationState != UIApplicationStateBackground;
+#else
+ return FALSE;
+#endif
}
@end
diff --git a/DashSync/shared/Models/Managers/Service Managers/DSPriceManager.m b/DashSync/shared/Models/Managers/Service Managers/DSPriceManager.m
index 59fbebdd0..badf8fbb4 100644
--- a/DashSync/shared/Models/Managers/Service Managers/DSPriceManager.m
+++ b/DashSync/shared/Models/Managers/Service Managers/DSPriceManager.m
@@ -207,6 +207,7 @@ - (instancetype)init {
if (_pricesByCode[systemCurrencyCode] == nil) {
// if we don't have currency in our plist fallback to default
systemCurrencyCode = DEFAULT_CURRENCY_CODE;
+ [defaults setObject:systemCurrencyCode forKey:LOCAL_CURRENCY_CODE_KEY];
}
self.localCurrencyCode = (userCurrencyCode) ? userCurrencyCode : systemCurrencyCode;
diff --git a/DashSync/shared/Models/Masternode/DSMasternodeListService.m b/DashSync/shared/Models/Masternode/DSMasternodeListService.m
index 3c8c15700..17c7dd746 100644
--- a/DashSync/shared/Models/Masternode/DSMasternodeListService.m
+++ b/DashSync/shared/Models/Masternode/DSMasternodeListService.m
@@ -261,7 +261,7 @@ - (void)removeFromRetrievalQueue:(NSData *)masternodeBlockHashData {
double count = self.retrievalQueue.count;
@synchronized (self.chain.chainManager.syncState) {
self.chain.chainManager.syncState.masternodeListSyncInfo.retrievalQueueCount = count;
- self.chain.chainManager.syncState.masternodeListSyncInfo.retrievalQueueMaxAmount = self.retrievalQueueMaxAmount;
+ self.chain.chainManager.syncState.masternodeListSyncInfo.retrievalQueueMaxAmount = (uint32_t) self.retrievalQueueMaxAmount;
DSLog(@"[%@] Masternode list queue updated: %f/%lu", self.chain.name, count, self.retrievalQueueMaxAmount);
[self.chain.chainManager notifySyncStateChanged];
}
@@ -275,7 +275,7 @@ - (void)cleanListsRetrievalQueue {
[self.retrievalQueue removeAllObjects];
@synchronized (self.chain.chainManager.syncState) {
self.chain.chainManager.syncState.masternodeListSyncInfo.retrievalQueueCount = 0;
- self.chain.chainManager.syncState.masternodeListSyncInfo.retrievalQueueMaxAmount = self.retrievalQueueMaxAmount;
+ self.chain.chainManager.syncState.masternodeListSyncInfo.retrievalQueueMaxAmount = (uint32_t) self.retrievalQueueMaxAmount;
DSLog(@"[%@] Masternode list queue cleaned up: 0/%lu", self.chain.name, self.retrievalQueueMaxAmount);
[self.chain.chainManager notifySyncStateChanged];
}
@@ -302,8 +302,8 @@ - (void)updateMasternodeRetrievalQueue {
return [self.store heightForBlockHash:obj1.UInt256] < [self.store heightForBlockHash:obj2.UInt256] ? NSOrderedAscending : NSOrderedDescending;
}];
@synchronized (self.chain.chainManager.syncState) {
- self.chain.chainManager.syncState.masternodeListSyncInfo.retrievalQueueCount = currentCount;
- self.chain.chainManager.syncState.masternodeListSyncInfo.retrievalQueueMaxAmount = self.retrievalQueueMaxAmount;
+ self.chain.chainManager.syncState.masternodeListSyncInfo.retrievalQueueCount = (uint32_t) currentCount;
+ self.chain.chainManager.syncState.masternodeListSyncInfo.retrievalQueueMaxAmount = (uint32_t) self.retrievalQueueMaxAmount;
DSLog(@"[%@] Masternode list queue updated: %lu/%lu", self.chain.name, currentCount, self.retrievalQueueMaxAmount);
[self.chain.chainManager notifySyncStateChanged];
}
diff --git a/DashSync/shared/Models/Network/DSPeer.m b/DashSync/shared/Models/Network/DSPeer.m
index 62f4b48f2..5a3cadb03 100644
--- a/DashSync/shared/Models/Network/DSPeer.m
+++ b/DashSync/shared/Models/Network/DSPeer.m
@@ -883,7 +883,7 @@ - (void)acceptVersionMessage:(NSData *)message {
}
_lastBlockHeight = [message UInt32AtOffset:80 + l.unsignedIntegerValue];
- if (self.version < self.chain.minProtocolVersion || self.version > self.chain.protocolVersion) {
+ if (self.version < self.chain.minProtocolVersion /*|| self.version > self.chain.protocolVersion*/) {
#if MESSAGE_LOGGING
DSLogWithLocation(self, @"protocol version %u not supported, valid versions are: [%u, %u], useragent:\"%@\", ", self.version, self.chain.minProtocolVersion, self.chain.protocolVersion, self.useragent);
#endif
diff --git a/DashSync/shared/Models/Notifications/DSSyncState.m b/DashSync/shared/Models/Notifications/DSSyncState.m
index 8b5481480..09f03a4f7 100644
--- a/DashSync/shared/Models/Notifications/DSSyncState.m
+++ b/DashSync/shared/Models/Notifications/DSSyncState.m
@@ -28,7 +28,7 @@ - (id)copyWithZone:(NSZone *)zone {
return copy;
}
- (NSString *)description {
- return [NSString stringWithFormat:@"%u/%u/%u/%u",
+ return [NSString stringWithFormat:@"%u/%u/%f/%u",
self.retrievalQueueCount,
self.retrievalQueueMaxAmount,
self.storedCount,
diff --git a/DashSync/shared/Models/Persistence/Migration/Internal/DSCoreDataMigrationVersion.h b/DashSync/shared/Models/Persistence/Migration/Internal/DSCoreDataMigrationVersion.h
index 066472548..ac5cb6549 100644
--- a/DashSync/shared/Models/Persistence/Migration/Internal/DSCoreDataMigrationVersion.h
+++ b/DashSync/shared/Models/Persistence/Migration/Internal/DSCoreDataMigrationVersion.h
@@ -41,6 +41,7 @@ typedef NS_ENUM(NSInteger, DSCoreDataMigrationVersionValue)
DSCoreDataMigrationVersionValue_18 = 18,
DSCoreDataMigrationVersionValue_19 = 19,
DSCoreDataMigrationVersionValue_20 = 20,
+ DSCoreDataMigrationVersionValue_21 = 21,
};
@interface DSCoreDataMigrationVersion : NSObject
diff --git a/DashSync/shared/Models/Persistence/Migration/Internal/DSCoreDataMigrationVersion.m b/DashSync/shared/Models/Persistence/Migration/Internal/DSCoreDataMigrationVersion.m
index 5703cf186..e6526f1f1 100644
--- a/DashSync/shared/Models/Persistence/Migration/Internal/DSCoreDataMigrationVersion.m
+++ b/DashSync/shared/Models/Persistence/Migration/Internal/DSCoreDataMigrationVersion.m
@@ -20,7 +20,7 @@
@implementation DSCoreDataMigrationVersion
+ (DSCoreDataMigrationVersionValue)current {
- return DSCoreDataMigrationVersionValue_20;
+ return DSCoreDataMigrationVersionValue_21;
}
+ (NSString *)modelResourceForVersion:(DSCoreDataMigrationVersionValue)version {
@@ -45,6 +45,7 @@ + (NSString *)modelResourceForVersion:(DSCoreDataMigrationVersionValue)version {
case DSCoreDataMigrationVersionValue_18: return @"DashSync 18";
case DSCoreDataMigrationVersionValue_19: return @"DashSync 19";
case DSCoreDataMigrationVersionValue_20: return @"DashSync 20";
+ case DSCoreDataMigrationVersionValue_21: return @"DashSync 21";
default:
return [NSString stringWithFormat:@"DashSync %ld", (long)version];
}
diff --git a/DashSync/shared/Models/Transactions/Base/DSAssetLockTransaction.h b/DashSync/shared/Models/Transactions/Base/DSAssetLockTransaction.h
new file mode 100644
index 000000000..241518775
--- /dev/null
+++ b/DashSync/shared/Models/Transactions/Base/DSAssetLockTransaction.h
@@ -0,0 +1,31 @@
+//
+// Created by Vladimir Pirogov
+// Copyright © 2024 Dash Core Group. All rights reserved.
+//
+// Licensed under the MIT License (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// https://opensource.org/licenses/MIT
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+
+#import
+#import "DSTransaction.h"
+#import "DSTransactionOutput.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface DSAssetLockTransaction : DSTransaction
+
+@property (nonatomic, assign) uint8_t specialTransactionVersion;
+@property (nonatomic, strong) NSMutableArray *creditOutputs;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/DashSync/shared/Models/Transactions/Base/DSAssetLockTransaction.m b/DashSync/shared/Models/Transactions/Base/DSAssetLockTransaction.m
new file mode 100644
index 000000000..1ce845e2a
--- /dev/null
+++ b/DashSync/shared/Models/Transactions/Base/DSAssetLockTransaction.m
@@ -0,0 +1,61 @@
+//
+// Created by Vladimir Pirogov
+// Copyright © 2024 Dash Core Group. All rights reserved.
+//
+// Licensed under the MIT License (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// https://opensource.org/licenses/MIT
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+
+#import "DSAssetLockTransaction.h"
+#import "DSChain.h"
+#import "DSTransactionFactory.h"
+#import "NSData+Dash.h"
+
+@implementation DSAssetLockTransaction
+
+- (instancetype)initWithMessage:(NSData *)message onChain:(DSChain *)chain {
+ if (!(self = [super initWithMessage:message onChain:chain]))
+ return nil;
+ self.type = DSTransactionType_AssetLock;
+ NSUInteger length = message.length;
+ uint32_t off = self.payloadOffset;
+
+ if (length - off < 1) return nil;
+ NSNumber *payloadLengthSize = nil;
+ __unused uint64_t payloadLength = [message varIntAtOffset:off length:&payloadLengthSize];
+ off += payloadLengthSize.unsignedLongValue;
+
+ if (length - off < 1) return nil;
+ self.specialTransactionVersion = [message UInt8AtOffset:off];
+ off += 1;
+
+ NSNumber *l = 0;
+ if (length - off < 1) return nil;
+ uint64_t count = (NSUInteger)[message varIntAtOffset:off length:&l]; // output count
+ off += l.unsignedIntegerValue;
+
+ NSMutableArray *creditOutputs = [NSMutableArray arrayWithCapacity:count];
+ for (NSUInteger i = 0; i < count; i++) { // outputs
+ uint64_t amount = [message UInt64AtOffset:off]; // output amount
+ off += sizeof(uint64_t);
+ NSData *outScript = [message dataAtOffset:off length:&l]; // output script
+ off += l.unsignedIntegerValue;
+ DSTransactionOutput *transactionOutput = [DSTransactionOutput transactionOutputWithAmount:amount outScript:outScript onChain:self.chain];
+ [creditOutputs addObject:transactionOutput];
+ }
+ self.creditOutputs = creditOutputs;
+ self.payloadOffset = off;
+ self.txHash = self.data.SHA256_2;
+
+ return self;
+}
+@end
diff --git a/DashSync/shared/Models/Transactions/Base/DSAssetUnlockTransaction.h b/DashSync/shared/Models/Transactions/Base/DSAssetUnlockTransaction.h
new file mode 100644
index 000000000..2a825a4de
--- /dev/null
+++ b/DashSync/shared/Models/Transactions/Base/DSAssetUnlockTransaction.h
@@ -0,0 +1,34 @@
+//
+// Created by Vladimir Pirogov
+// Copyright © 2024 Dash Core Group. All rights reserved.
+//
+// Licensed under the MIT License (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// https://opensource.org/licenses/MIT
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+
+#import
+#import "BigIntTypes.h"
+#import "DSTransaction.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface DSAssetUnlockTransaction : DSTransaction
+@property (nonatomic, assign) uint8_t specialTransactionVersion;
+@property (nonatomic, assign) uint64_t index;
+@property (nonatomic, assign) uint32_t fee;
+@property (nonatomic, assign) uint32_t requestedHeight;
+@property (nonatomic, assign) UInt256 quorumHash;
+@property (nonatomic, assign) UInt768 quorumSignature;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/DashSync/shared/Models/Transactions/Base/DSAssetUnlockTransaction.m b/DashSync/shared/Models/Transactions/Base/DSAssetUnlockTransaction.m
new file mode 100644
index 000000000..01824db34
--- /dev/null
+++ b/DashSync/shared/Models/Transactions/Base/DSAssetUnlockTransaction.m
@@ -0,0 +1,95 @@
+//
+// Created by Vladimir Pirogov
+// Copyright © 2024 Dash Core Group. All rights reserved.
+//
+// Licensed under the MIT License (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// https://opensource.org/licenses/MIT
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+
+#import "DSAssetUnlockTransaction.h"
+#import "DSChain.h"
+#import "DSTransactionFactory.h"
+#import "NSData+Dash.h"
+#import "NSMutableData+Dash.h"
+
+@implementation DSAssetUnlockTransaction
+
+- (instancetype)initWithMessage:(NSData *)message onChain:(DSChain *)chain {
+ if (!(self = [super initWithMessage:message onChain:chain]))
+ return nil;
+ self.type = DSTransactionType_AssetUnlock;
+ NSUInteger length = message.length;
+ uint32_t off = self.payloadOffset;
+
+ if (length - off < 1) return nil;
+ NSNumber *payloadLengthSize = nil;
+ uint64_t payloadLength = [message varIntAtOffset:off length:&payloadLengthSize];
+ off += payloadLengthSize.unsignedLongValue;
+
+ if (length - off < 1) return nil;
+ self.specialTransactionVersion = [message UInt8AtOffset:off];
+ off += 1;
+ if (length - off < 8) return nil;
+ self.index = [message UInt64AtOffset:off];
+ off += 8;
+ if (length - off < 4) return nil;
+ self.fee = [message UInt32AtOffset:off];
+ off += 4;
+ if (length - off < 4) return nil;
+ self.requestedHeight = [message UInt32AtOffset:off];
+ off += 4;
+
+ if (length - off < 32) return nil;
+ self.quorumHash = [message UInt256AtOffset:off];
+ off += 32;
+ if (length - off < 96) return nil;
+ self.quorumSignature = [message UInt768AtOffset:off];
+ off += 96;
+
+ self.payloadOffset = off;
+ if ([self payloadData].length != payloadLength) return nil;
+ self.txHash = self.data.SHA256_2;
+
+ return self;
+
+}
+- (BOOL)transactionTypeRequiresInputs {
+ return NO;
+}
+- (NSData *)payloadData {
+ return [self basePayloadData];
+}
+
+- (NSData *)basePayloadData {
+ NSMutableData *data = [NSMutableData data];
+ [data appendUInt8:self.specialTransactionVersion];
+ [data appendUInt64:self.index];
+ [data appendUInt32:self.fee];
+ [data appendUInt32:self.requestedHeight];
+ [data appendUInt256:self.quorumHash];
+ [data appendUInt768:self.quorumSignature];
+ return data;
+}
+
+- (NSData *)toDataWithSubscriptIndex:(NSUInteger)subscriptIndex {
+ @synchronized(self) {
+ NSMutableData *data = [[super toDataWithSubscriptIndex:subscriptIndex] mutableCopy];
+ [data appendCountedData:[self payloadData]];
+ if (subscriptIndex != NSNotFound) [data appendUInt32:SIGHASH_ALL];
+ return data;
+ }
+}
+- (size_t)size {
+ return [super size] + [self payloadData].length;
+}
+
+@end
diff --git a/DashSync/shared/Models/Transactions/Base/DSTransaction.m b/DashSync/shared/Models/Transactions/Base/DSTransaction.m
index f6f0e1f9f..428853fb9 100644
--- a/DashSync/shared/Models/Transactions/Base/DSTransaction.m
+++ b/DashSync/shared/Models/Transactions/Base/DSTransaction.m
@@ -28,6 +28,7 @@
#import "DSAccount.h"
#import "DSAddressEntity+CoreDataClass.h"
+#import "DSAssetUnlockTransaction.h"
#import "DSChain.h"
#import "DSChainEntity+CoreDataClass.h"
#import "DSChainManager.h"
@@ -408,7 +409,7 @@ - (NSData *)toDataWithSubscriptIndex:(NSUInteger)subscriptIndex {
NSArray *outputs = self.outputs;
NSUInteger inputsCount = inputs.count;
NSUInteger outputsCount = outputs.count;
- BOOL forSigHash = ([self isMemberOfClass:[DSTransaction class]] || [self isMemberOfClass:[DSCreditFundingTransaction class]]) && subscriptIndex != NSNotFound;
+ BOOL forSigHash = ([self isMemberOfClass:[DSTransaction class]] || [self isMemberOfClass:[DSCreditFundingTransaction class]] || [self isMemberOfClass:[DSAssetUnlockTransaction class]]) && subscriptIndex != NSNotFound;
NSUInteger dataSize = 8 + [NSMutableData sizeOfVarInt:inputsCount] + [NSMutableData sizeOfVarInt:outputsCount] + TX_INPUT_SIZE * inputsCount + TX_OUTPUT_SIZE * outputsCount + (forSigHash ? 4 : 0);
NSMutableData *d = [NSMutableData dataWithCapacity:dataSize];
diff --git a/DashSync/shared/Models/Transactions/DSTransactionFactory.h b/DashSync/shared/Models/Transactions/DSTransactionFactory.h
index a31f8c34d..6f2e876a8 100644
--- a/DashSync/shared/Models/Transactions/DSTransactionFactory.h
+++ b/DashSync/shared/Models/Transactions/DSTransactionFactory.h
@@ -20,8 +20,8 @@ typedef NS_ENUM(NSUInteger, DSTransactionType)
DSTransactionType_ProviderUpdateRevocation = 4,
DSTransactionType_Coinbase = 5,
DSTransactionType_QuorumCommitment = 6,
- DSTransactionType_SubscriptionRegistration = 8,
- DSTransactionType_SubscriptionTopUp = 9,
+ DSTransactionType_AssetLock = 8,
+ DSTransactionType_AssetUnlock = 9,
DSTransactionType_SubscriptionResetKey = 10,
DSTransactionType_SubscriptionCloseAccount = 11,
DSTransactionType_Transition = 12,
diff --git a/DashSync/shared/Models/Transactions/DSTransactionFactory.m b/DashSync/shared/Models/Transactions/DSTransactionFactory.m
index e47c7d11a..4bc66e4d9 100644
--- a/DashSync/shared/Models/Transactions/DSTransactionFactory.m
+++ b/DashSync/shared/Models/Transactions/DSTransactionFactory.m
@@ -5,6 +5,8 @@
// Created by Sam Westrich on 7/12/18.
//
+#import "DSAssetLockTransaction.h"
+#import "DSAssetUnlockTransaction.h"
#import "DSTransactionFactory.h"
#import "DSBlockchainIdentityCloseTransition.h"
#import "DSBlockchainIdentityRegistrationTransition.h"
@@ -56,6 +58,10 @@ + (DSTransaction *)transactionWithMessage:(NSData *)message onChain:(DSChain *)c
return [DSProviderUpdateRegistrarTransaction transactionWithMessage:message onChain:chain];
case DSTransactionType_ProviderUpdateRevocation:
return [DSProviderUpdateRevocationTransaction transactionWithMessage:message onChain:chain];
+ case DSTransactionType_AssetLock:
+ return [DSAssetLockTransaction transactionWithMessage:message onChain:chain];
+ case DSTransactionType_AssetUnlock:
+ return [DSAssetUnlockTransaction transactionWithMessage:message onChain:chain];
case DSTransactionType_QuorumCommitment:
return [DSQuorumCommitmentTransaction transactionWithMessage:message onChain:chain];
default:
@@ -69,9 +75,9 @@ + (BOOL)ignoreMessagesOfTransactionType:(DSTransactionType)transactionType {
return FALSE;
case DSTransactionType_Coinbase:
return FALSE;
- case DSTransactionType_SubscriptionRegistration:
+ case DSTransactionType_AssetLock:
return FALSE;
- case DSTransactionType_SubscriptionTopUp:
+ case DSTransactionType_AssetUnlock:
return FALSE;
case DSTransactionType_SubscriptionCloseAccount:
return FALSE;
diff --git a/DashSync/shared/Models/Wallet/DSSpecialTransactionsWalletHolder.m b/DashSync/shared/Models/Wallet/DSSpecialTransactionsWalletHolder.m
index 60509ae7d..31a6a65a1 100644
--- a/DashSync/shared/Models/Wallet/DSSpecialTransactionsWalletHolder.m
+++ b/DashSync/shared/Models/Wallet/DSSpecialTransactionsWalletHolder.m
@@ -5,6 +5,8 @@
// Created by Sam Westrich on 3/5/19.
//
+#import "DSAssetLockTransaction.h"
+#import "DSAssetUnlockTransaction.h"
#import "DSSpecialTransactionsWalletHolder.h"
#import "DSAddressEntity+CoreDataClass.h"
#import "DSChain.h"
@@ -37,6 +39,8 @@ @interface DSSpecialTransactionsWalletHolder ()
@property (nonatomic, strong) NSMutableDictionary *providerUpdateRegistrarTransactions;
@property (nonatomic, strong) NSMutableDictionary *providerUpdateRevocationTransactions;
@property (nonatomic, strong) NSMutableDictionary *creditFundingTransactions;
+@property (nonatomic, strong) NSMutableDictionary *assetLockTransactions;
+@property (nonatomic, strong) NSMutableDictionary *assetUnlockTransactions;
@property (nonatomic, strong) NSMutableArray *transactionsToSave;
@property (nonatomic, strong) NSMutableDictionary *> *transactionsToSaveInBlockSave;
@@ -53,6 +57,8 @@ - (instancetype)initWithWallet:(DSWallet *)wallet inContext:(NSManagedObjectCont
self.providerUpdateServiceTransactions = [NSMutableDictionary dictionary];
self.providerUpdateRegistrarTransactions = [NSMutableDictionary dictionary];
self.providerUpdateRevocationTransactions = [NSMutableDictionary dictionary];
+ self.assetLockTransactions = [NSMutableDictionary dictionary];
+ self.assetUnlockTransactions = [NSMutableDictionary dictionary];
self.creditFundingTransactions = [NSMutableDictionary dictionary];
self.managedObjectContext = [NSManagedObjectContext chainContext];
self.wallet = wallet;
@@ -62,7 +68,7 @@ - (instancetype)initWithWallet:(DSWallet *)wallet inContext:(NSManagedObjectCont
}
- (NSArray *)transactionDictionaries {
- return @[self.providerRegistrationTransactions, self.providerUpdateServiceTransactions, self.providerUpdateRegistrarTransactions, self.providerUpdateRevocationTransactions, self.creditFundingTransactions];
+ return @[self.providerRegistrationTransactions, self.providerUpdateServiceTransactions, self.providerUpdateRegistrarTransactions, self.providerUpdateRevocationTransactions, self.creditFundingTransactions, self.assetLockTransactions, self.assetUnlockTransactions];
}
@@ -154,6 +160,18 @@ - (BOOL)registerTransaction:(DSTransaction *)transaction saveImmediately:(BOOL)s
[self.creditFundingTransactions setObject:transaction forKey:uint256_data(creditFundingTransaction.creditBurnIdentityIdentifier)];
added = TRUE;
}
+ } else if ([transaction isMemberOfClass:[DSAssetLockTransaction class]]) {
+ DSAssetLockTransaction *assetLockTransaction = (DSAssetLockTransaction *)transaction;
+ if (![self.assetLockTransactions objectForKey:uint256_data(assetLockTransaction.txHash)]) {
+ [self.assetLockTransactions setObject:transaction forKey:uint256_data(assetLockTransaction.txHash)];
+ added = TRUE;
+ }
+ } else if ([transaction isMemberOfClass:[DSAssetUnlockTransaction class]]) {
+ DSAssetUnlockTransaction *assetUnlockTransaction = (DSAssetUnlockTransaction *)transaction;
+ if (![self.assetUnlockTransactions objectForKey:uint256_data(assetUnlockTransaction.txHash)]) {
+ [self.assetUnlockTransactions setObject:transaction forKey:uint256_data(assetUnlockTransaction.txHash)];
+ added = TRUE;
+ }
} else {
NSAssert(FALSE, @"unknown transaction type being registered");
return NO;
@@ -198,6 +216,12 @@ - (void)loadTransactions {
} else if ([transaction isMemberOfClass:[DSCreditFundingTransaction class]]) {
DSCreditFundingTransaction *creditFundingTransaction = (DSCreditFundingTransaction *)transaction;
[self.creditFundingTransactions setObject:transaction forKey:uint256_data(creditFundingTransaction.creditBurnIdentityIdentifier)];
+ } else if ([transaction isMemberOfClass:[DSAssetLockTransaction class]]) {
+ DSAssetLockTransaction *assetLockTransaction = (DSAssetLockTransaction *)transaction;
+ [self.assetLockTransactions setObject:transaction forKey:uint256_data(assetLockTransaction.txHash)];
+ } else if ([transaction isMemberOfClass:[DSAssetUnlockTransaction class]]) {
+ DSAssetUnlockTransaction *assetUnlockTransaction = (DSAssetUnlockTransaction *)transaction;
+ [self.assetUnlockTransactions setObject:transaction forKey:uint256_data(assetUnlockTransaction.txHash)];
} else { //the other ones don't have addresses in payload
NSAssert(FALSE, @"Unknown special transaction type");
}
diff --git a/Example/DashSync.xcodeproj/project.pbxproj b/Example/DashSync.xcodeproj/project.pbxproj
index c38885558..53cc4cd0a 100644
--- a/Example/DashSync.xcodeproj/project.pbxproj
+++ b/Example/DashSync.xcodeproj/project.pbxproj
@@ -51,7 +51,7 @@
2AF8A95622847ACB00F8C72D /* TextViewFormCellModel.m in Sources */ = {isa = PBXBuildFile; fileRef = 2AF8A95522847ACB00F8C72D /* TextViewFormCellModel.m */; };
2AF8A95A22847E5300F8C72D /* DSContactProfileViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 2AF8A95922847E5200F8C72D /* DSContactProfileViewController.m */; };
2AF8A95D2284820F00F8C72D /* DSContactProfileAvatarView.m in Sources */ = {isa = PBXBuildFile; fileRef = 2AF8A95C2284820F00F8C72D /* DSContactProfileAvatarView.m */; };
- 404946170FF870F9FBA4B3C7 /* libPods-NetworkInfo.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 6675EA01A2AC0589160069A4 /* libPods-NetworkInfo.a */; };
+ 4BBAD0ED05B8F29532D1887E /* libPods-NetworkInfo.a in Frameworks */ = {isa = PBXBuildFile; fileRef = FCDB05396B2E9593183904E8 /* libPods-NetworkInfo.a */; };
6003F58E195388D20070C39A /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6003F58D195388D20070C39A /* Foundation.framework */; };
6003F590195388D20070C39A /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6003F58F195388D20070C39A /* CoreGraphics.framework */; };
6003F592195388D20070C39A /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6003F591195388D20070C39A /* UIKit.framework */; };
@@ -64,13 +64,14 @@
6003F5B1195388D20070C39A /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6003F58D195388D20070C39A /* Foundation.framework */; };
6003F5B2195388D20070C39A /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6003F591195388D20070C39A /* UIKit.framework */; };
6003F5BA195388D20070C39A /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 6003F5B8195388D20070C39A /* InfoPlist.strings */; };
+ 65F8D081B17C5F08E6BBF4A8 /* libPods-DashSync-DashSync_Example.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 6F6B6FEB4981DE6989D82EB0 /* libPods-DashSync-DashSync_Example.a */; };
71719F9F1E33DC2100824A3D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 71719F9D1E33DC2100824A3D /* LaunchScreen.storyboard */; };
- 798A60FA627EC43C0AB39611 /* libPods-DashSync-DashSync_Example.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 192956F40996DE819B9D64AC /* libPods-DashSync-DashSync_Example.a */; };
- 83CFCA70892A5DF9F64BA1AA /* libPods-DashSync_Tests.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 955D615511918752AF099181 /* libPods-DashSync_Tests.a */; };
873B8AEB1B1F5CCA007FD442 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 873B8AEA1B1F5CCA007FD442 /* Main.storyboard */; };
93099D7228E7275400160709 /* MNLIST_1746460.dat in Resources */ = {isa = PBXBuildFile; fileRef = 93099D7028E7275300160709 /* MNLIST_1746460.dat */; };
93099D7328E7275400160709 /* MNL_1746460_1746516.dat in Resources */ = {isa = PBXBuildFile; fileRef = 93099D7128E7275400160709 /* MNL_1746460_1746516.dat */; };
937619A526E22E360023BE64 /* BackgroundTasks.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 937619A326E22DCD0023BE64 /* BackgroundTasks.framework */; settings = {ATTRIBUTES = (Weak, ); }; };
+ B8D9D66B2CB5A33300D289A9 /* libDashSync-macOS.a in Frameworks */ = {isa = PBXBuildFile; fileRef = B8D9D66A2CB5A33300D289A9 /* libDashSync-macOS.a */; };
+ D233D44D64AE2AA230F44AA7 /* libPods-DashSync_Tests.a in Frameworks */ = {isa = PBXBuildFile; fileRef = DE90F593715182564EB9A7E8 /* libPods-DashSync_Tests.a */; };
FB0955CC244BBDC400A93675 /* DSContactRelationshipInfoViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = FB0955CB244BBDC400A93675 /* DSContactRelationshipInfoViewController.m */; };
FB0F15A2210490C3000272E6 /* DSTransactionDetailTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = FB0F15A1210490C3000272E6 /* DSTransactionDetailTableViewCell.m */; };
FB0F15A521049432000272E6 /* DSTransactionStatusTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = FB0F15A421049432000272E6 /* DSTransactionStatusTableViewCell.m */; };
@@ -520,8 +521,6 @@
/* End PBXCopyFilesBuildPhase section */
/* Begin PBXFileReference section */
- 131B02E9F838D9B0B88342E6 /* Pods-NetworkInfo.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-NetworkInfo.release.xcconfig"; path = "Pods/Target Support Files/Pods-NetworkInfo/Pods-NetworkInfo.release.xcconfig"; sourceTree = ""; };
- 192956F40996DE819B9D64AC /* libPods-DashSync-DashSync_Example.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-DashSync-DashSync_Example.a"; sourceTree = BUILT_PRODUCTS_DIR; };
27552411E6D7D4041AC16526 /* LICENSE */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; name = LICENSE; path = ../LICENSE; sourceTree = ""; };
2A1AC63A20F9012A00B3B79F /* FormSectionModel.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = FormSectionModel.h; sourceTree = ""; };
2A1AC63B20F9012A00B3B79F /* FormSectionModel.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = FormSectionModel.m; sourceTree = ""; };
@@ -592,8 +591,8 @@
2AF8A95922847E5200F8C72D /* DSContactProfileViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = DSContactProfileViewController.m; sourceTree = ""; };
2AF8A95B2284820F00F8C72D /* DSContactProfileAvatarView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DSContactProfileAvatarView.h; sourceTree = ""; };
2AF8A95C2284820F00F8C72D /* DSContactProfileAvatarView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = DSContactProfileAvatarView.m; sourceTree = ""; };
- 2CB0B2B92A8EA70CAE7DC362 /* Pods-DashSync_Example.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-DashSync_Example.release.xcconfig"; path = "Pods/Target Support Files/Pods-DashSync_Example/Pods-DashSync_Example.release.xcconfig"; sourceTree = ""; };
- 425B12FE369253E7F3A93D58 /* Pods-DashSync-DashSync_Example.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-DashSync-DashSync_Example.debug.xcconfig"; path = "Pods/Target Support Files/Pods-DashSync-DashSync_Example/Pods-DashSync-DashSync_Example.debug.xcconfig"; sourceTree = ""; };
+ 3024E8DE0B1B84642E65E70D /* Pods-DashSync_Tests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-DashSync_Tests.debug.xcconfig"; path = "Target Support Files/Pods-DashSync_Tests/Pods-DashSync_Tests.debug.xcconfig"; sourceTree = ""; };
+ 37CF4766B1F8739167BAFE02 /* Pods-NetworkInfo.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-NetworkInfo.debug.xcconfig"; path = "Target Support Files/Pods-NetworkInfo/Pods-NetworkInfo.debug.xcconfig"; sourceTree = ""; };
6003F58A195388D20070C39A /* DashSync_Example.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = DashSync_Example.app; sourceTree = BUILT_PRODUCTS_DIR; };
6003F58D195388D20070C39A /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; };
6003F58F195388D20070C39A /* CoreGraphics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreGraphics.framework; path = System/Library/Frameworks/CoreGraphics.framework; sourceTree = SDKROOT; };
@@ -612,19 +611,21 @@
6003F5B7195388D20070C39A /* Tests-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "Tests-Info.plist"; sourceTree = ""; };
6003F5B9195388D20070C39A /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = ""; };
606FC2411953D9B200FFA9A0 /* Tests-Prefix.pch */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Tests-Prefix.pch"; sourceTree = ""; };
+ 61730B1B3737895F96BE6A54 /* Pods-DashSync-DashSync_Example.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-DashSync-DashSync_Example.debug.xcconfig"; path = "Target Support Files/Pods-DashSync-DashSync_Example/Pods-DashSync-DashSync_Example.debug.xcconfig"; sourceTree = ""; };
64A245673BBAE1DA7DAB4907 /* DashSync.podspec */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; name = DashSync.podspec; path = ../DashSync.podspec; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.ruby; };
- 6675EA01A2AC0589160069A4 /* libPods-NetworkInfo.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-NetworkInfo.a"; sourceTree = BUILT_PRODUCTS_DIR; };
+ 6F6B6FEB4981DE6989D82EB0 /* libPods-DashSync-DashSync_Example.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-DashSync-DashSync_Example.a"; sourceTree = BUILT_PRODUCTS_DIR; };
71719F9E1E33DC2100824A3D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; };
- 74FDA0D6BCD2D779E20B58FC /* Pods-DashSync-DashSync_Example.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-DashSync-DashSync_Example.release.xcconfig"; path = "Pods/Target Support Files/Pods-DashSync-DashSync_Example/Pods-DashSync-DashSync_Example.release.xcconfig"; sourceTree = ""; };
+ 77374E9036662C743187A1DA /* Pods-DashSync_Tests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-DashSync_Tests.release.xcconfig"; path = "Target Support Files/Pods-DashSync_Tests/Pods-DashSync_Tests.release.xcconfig"; sourceTree = ""; };
873B8AEA1B1F5CCA007FD442 /* Main.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; name = Main.storyboard; path = Base.lproj/Main.storyboard; sourceTree = ""; };
93099D7028E7275300160709 /* MNLIST_1746460.dat */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = MNLIST_1746460.dat; sourceTree = ""; };
93099D7128E7275400160709 /* MNL_1746460_1746516.dat */ = {isa = PBXFileReference; lastKnownFileType = file; path = MNL_1746460_1746516.dat; sourceTree = ""; };
937619A326E22DCD0023BE64 /* BackgroundTasks.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = BackgroundTasks.framework; path = Platforms/MacOSX.platform/Developer/SDKs/MacOSX11.3.sdk/System/Library/Frameworks/BackgroundTasks.framework; sourceTree = DEVELOPER_DIR; };
- 955D615511918752AF099181 /* libPods-DashSync_Tests.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-DashSync_Tests.a"; sourceTree = BUILT_PRODUCTS_DIR; };
- 98472781BAD8800EFF391FA4 /* Pods-DashSync_Example.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-DashSync_Example.debug.xcconfig"; path = "Pods/Target Support Files/Pods-DashSync_Example/Pods-DashSync_Example.debug.xcconfig"; sourceTree = ""; };
- C90A9AD2C32828341F0E6915 /* Pods-DashSync_Tests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-DashSync_Tests.debug.xcconfig"; path = "Pods/Target Support Files/Pods-DashSync_Tests/Pods-DashSync_Tests.debug.xcconfig"; sourceTree = ""; };
- D1B8FECBB1652E781A9E4620 /* Pods-NetworkInfo.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-NetworkInfo.debug.xcconfig"; path = "Pods/Target Support Files/Pods-NetworkInfo/Pods-NetworkInfo.debug.xcconfig"; sourceTree = ""; };
- DFA886AB709D97089A70E82A /* Pods-DashSync_Tests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-DashSync_Tests.release.xcconfig"; path = "Pods/Target Support Files/Pods-DashSync_Tests/Pods-DashSync_Tests.release.xcconfig"; sourceTree = ""; };
+ B8D9D6682CB5A11B00D289A9 /* libDashSync-macOS.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; path = "libDashSync-macOS.a"; sourceTree = BUILT_PRODUCTS_DIR; };
+ B8D9D66A2CB5A33300D289A9 /* libDashSync-macOS.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; path = "libDashSync-macOS.a"; sourceTree = BUILT_PRODUCTS_DIR; };
+ B8D9D66C2CB5A36600D289A9 /* DashSharedCore.xcframework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcframework; name = DashSharedCore.xcframework; path = "../../dash-shared-core/dash-spv-apple-bindings/DashSharedCore/framework/DashSharedCore.xcframework"; sourceTree = ""; };
+ BD44FCB7175424B2BE7993BB /* Pods-DashSync-DashSync_Example.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-DashSync-DashSync_Example.release.xcconfig"; path = "Target Support Files/Pods-DashSync-DashSync_Example/Pods-DashSync-DashSync_Example.release.xcconfig"; sourceTree = ""; };
+ D97E3B2F9438560328BFE431 /* Pods-NetworkInfo.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-NetworkInfo.release.xcconfig"; path = "Target Support Files/Pods-NetworkInfo/Pods-NetworkInfo.release.xcconfig"; sourceTree = ""; };
+ DE90F593715182564EB9A7E8 /* libPods-DashSync_Tests.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-DashSync_Tests.a"; sourceTree = BUILT_PRODUCTS_DIR; };
E47ABFD6469F1FD556CDA6C7 /* README.md */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = net.daringfireball.markdown; name = README.md; path = ../README.md; sourceTree = ""; };
FB0955CA244BBDC400A93675 /* DSContactRelationshipInfoViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DSContactRelationshipInfoViewController.h; sourceTree = ""; };
FB0955CB244BBDC400A93675 /* DSContactRelationshipInfoViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = DSContactRelationshipInfoViewController.m; sourceTree = ""; };
@@ -1190,6 +1191,7 @@
FBF31B6D2231C53900393301 /* DSSignPayloadViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DSSignPayloadViewController.h; sourceTree = ""; };
FBF31B6E2231C53900393301 /* DSSignPayloadViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = DSSignPayloadViewController.m; sourceTree = ""; };
FBF31B7022328AA800393301 /* DSProviderTransactionsTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = DSProviderTransactionsTests.m; sourceTree = ""; };
+ FCDB05396B2E9593183904E8 /* libPods-NetworkInfo.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-NetworkInfo.a"; sourceTree = BUILT_PRODUCTS_DIR; };
/* End PBXFileReference section */
/* Begin PBXFrameworksBuildPhase section */
@@ -1200,7 +1202,7 @@
6003F590195388D20070C39A /* CoreGraphics.framework in Frameworks */,
6003F592195388D20070C39A /* UIKit.framework in Frameworks */,
6003F58E195388D20070C39A /* Foundation.framework in Frameworks */,
- 798A60FA627EC43C0AB39611 /* libPods-DashSync-DashSync_Example.a in Frameworks */,
+ 65F8D081B17C5F08E6BBF4A8 /* libPods-DashSync-DashSync_Example.a in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@@ -1212,7 +1214,7 @@
6003F5B0195388D20070C39A /* XCTest.framework in Frameworks */,
6003F5B2195388D20070C39A /* UIKit.framework in Frameworks */,
6003F5B1195388D20070C39A /* Foundation.framework in Frameworks */,
- 83CFCA70892A5DF9F64BA1AA /* libPods-DashSync_Tests.a in Frameworks */,
+ D233D44D64AE2AA230F44AA7 /* libPods-DashSync_Tests.a in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@@ -1220,13 +1222,27 @@
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
- 404946170FF870F9FBA4B3C7 /* libPods-NetworkInfo.a in Frameworks */,
+ B8D9D66B2CB5A33300D289A9 /* libDashSync-macOS.a in Frameworks */,
+ 4BBAD0ED05B8F29532D1887E /* libPods-NetworkInfo.a in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXFrameworksBuildPhase section */
/* Begin PBXGroup section */
+ 15D149D9AD161D779756AC18 /* Pods */ = {
+ isa = PBXGroup;
+ children = (
+ 61730B1B3737895F96BE6A54 /* Pods-DashSync-DashSync_Example.debug.xcconfig */,
+ BD44FCB7175424B2BE7993BB /* Pods-DashSync-DashSync_Example.release.xcconfig */,
+ 3024E8DE0B1B84642E65E70D /* Pods-DashSync_Tests.debug.xcconfig */,
+ 77374E9036662C743187A1DA /* Pods-DashSync_Tests.release.xcconfig */,
+ 37CF4766B1F8739167BAFE02 /* Pods-NetworkInfo.debug.xcconfig */,
+ D97E3B2F9438560328BFE431 /* Pods-NetworkInfo.release.xcconfig */,
+ );
+ path = Pods;
+ sourceTree = "";
+ };
2A1B55BC2226B15A008FED65 /* Contacts */ = {
isa = PBXGroup;
children = (
@@ -1360,7 +1376,7 @@
FB974F3125AE7A2200A1DCE7 /* CI */,
FB974F5025AE8E7000A1DCE7 /* Docs */,
FB974F0F25AE595700A1DCE7 /* Linting */,
- 83DC6095687FDE098549FF30 /* Pods */,
+ 15D149D9AD161D779756AC18 /* Pods */,
);
sourceTree = "";
};
@@ -1377,14 +1393,17 @@
6003F58C195388D20070C39A /* Frameworks */ = {
isa = PBXGroup;
children = (
+ B8D9D66C2CB5A36600D289A9 /* DashSharedCore.xcframework */,
+ B8D9D66A2CB5A33300D289A9 /* libDashSync-macOS.a */,
+ B8D9D6682CB5A11B00D289A9 /* libDashSync-macOS.a */,
937619A326E22DCD0023BE64 /* BackgroundTasks.framework */,
6003F58D195388D20070C39A /* Foundation.framework */,
6003F58F195388D20070C39A /* CoreGraphics.framework */,
6003F591195388D20070C39A /* UIKit.framework */,
6003F5AF195388D20070C39A /* XCTest.framework */,
- 955D615511918752AF099181 /* libPods-DashSync_Tests.a */,
- 6675EA01A2AC0589160069A4 /* libPods-NetworkInfo.a */,
- 192956F40996DE819B9D64AC /* libPods-DashSync-DashSync_Example.a */,
+ 6F6B6FEB4981DE6989D82EB0 /* libPods-DashSync-DashSync_Example.a */,
+ DE90F593715182564EB9A7E8 /* libPods-DashSync_Tests.a */,
+ FCDB05396B2E9593183904E8 /* libPods-NetworkInfo.a */,
);
name = Frameworks;
sourceTree = "";
@@ -1470,21 +1489,6 @@
name = "Podspec Metadata";
sourceTree = "";
};
- 83DC6095687FDE098549FF30 /* Pods */ = {
- isa = PBXGroup;
- children = (
- 98472781BAD8800EFF391FA4 /* Pods-DashSync_Example.debug.xcconfig */,
- 2CB0B2B92A8EA70CAE7DC362 /* Pods-DashSync_Example.release.xcconfig */,
- C90A9AD2C32828341F0E6915 /* Pods-DashSync_Tests.debug.xcconfig */,
- DFA886AB709D97089A70E82A /* Pods-DashSync_Tests.release.xcconfig */,
- D1B8FECBB1652E781A9E4620 /* Pods-NetworkInfo.debug.xcconfig */,
- 131B02E9F838D9B0B88342E6 /* Pods-NetworkInfo.release.xcconfig */,
- 425B12FE369253E7F3A93D58 /* Pods-DashSync-DashSync_Example.debug.xcconfig */,
- 74FDA0D6BCD2D779E20B58FC /* Pods-DashSync-DashSync_Example.release.xcconfig */,
- );
- name = Pods;
- sourceTree = "";
- };
FB0F15B421090405000272E6 /* Blockchain Identities */ = {
isa = PBXGroup;
children = (
@@ -2333,12 +2337,12 @@
isa = PBXNativeTarget;
buildConfigurationList = 6003F5BF195388D20070C39A /* Build configuration list for PBXNativeTarget "DashSync_Example" */;
buildPhases = (
- BA464DCB59BC59A2B2C9AAD7 /* [CP] Check Pods Manifest.lock */,
+ E5F7123626737B797889229A /* [CP] Check Pods Manifest.lock */,
FB5A0FA7219506140079CF42 /* ShellScript */,
6003F586195388D20070C39A /* Sources */,
6003F587195388D20070C39A /* Frameworks */,
6003F588195388D20070C39A /* Resources */,
- F3524DD5332FD019D466B225 /* [CP] Copy Pods Resources */,
+ CD1F79E08B3F4F0921F064A8 /* [CP] Copy Pods Resources */,
);
buildRules = (
);
@@ -2353,7 +2357,7 @@
isa = PBXNativeTarget;
buildConfigurationList = 6003F5C2195388D20070C39A /* Build configuration list for PBXNativeTarget "DashSync_Tests" */;
buildPhases = (
- 1A450F2773F81BAA9F430A99 /* [CP] Check Pods Manifest.lock */,
+ D4B84AE4F85D9FB04692A770 /* [CP] Check Pods Manifest.lock */,
6003F5AA195388D20070C39A /* Sources */,
6003F5AB195388D20070C39A /* Frameworks */,
6003F5AC195388D20070C39A /* Resources */,
@@ -2372,11 +2376,11 @@
isa = PBXNativeTarget;
buildConfigurationList = FB9C9EFE25B80DB40039880E /* Build configuration list for PBXNativeTarget "NetworkInfo" */;
buildPhases = (
- 2B9966A4344269C863326096 /* [CP] Check Pods Manifest.lock */,
+ 8CDF557444C449CF3402DD40 /* [CP] Check Pods Manifest.lock */,
FB9C9EF625B80DB40039880E /* Sources */,
FB9C9EF725B80DB40039880E /* Frameworks */,
FB9C9EF825B80DB40039880E /* CopyFiles */,
- 2B57EF3BDD3D325283813C84 /* [CP] Copy Pods Resources */,
+ 544387655732F2E6FFDFAD9D /* [CP] Copy Pods Resources */,
);
buildRules = (
);
@@ -2398,15 +2402,16 @@
ORGANIZATIONNAME = "Dash Core Group";
TargetAttributes = {
6003F589195388D20070C39A = {
- DevelopmentTeam = 44RJ69WHFF;
+ ProvisioningStyle = Manual;
};
6003F5AD195388D20070C39A = {
DevelopmentTeam = 44RJ69WHFF;
+ ProvisioningStyle = Manual;
TestTargetID = 6003F589195388D20070C39A;
};
FB9C9EF925B80DB40039880E = {
CreatedOnToolsVersion = 12.3;
- DevelopmentTeam = 44RJ69WHFF;
+ DevelopmentTeam = VYNC8YJV73;
ProvisioningStyle = Automatic;
};
};
@@ -2760,25 +2765,7 @@
/* End PBXResourcesBuildPhase section */
/* Begin PBXShellScriptBuildPhase section */
- 1A450F2773F81BAA9F430A99 /* [CP] Check Pods Manifest.lock */ = {
- isa = PBXShellScriptBuildPhase;
- buildActionMask = 2147483647;
- files = (
- );
- inputPaths = (
- "${PODS_PODFILE_DIR_PATH}/Podfile.lock",
- "${PODS_ROOT}/Manifest.lock",
- );
- name = "[CP] Check Pods Manifest.lock";
- outputPaths = (
- "$(DERIVED_FILE_DIR)/Pods-DashSync_Tests-checkManifestLockResult.txt",
- );
- runOnlyForDeploymentPostprocessing = 0;
- shellPath = /bin/sh;
- shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n";
- showEnvVarsInLog = 0;
- };
- 2B57EF3BDD3D325283813C84 /* [CP] Copy Pods Resources */ = {
+ 544387655732F2E6FFDFAD9D /* [CP] Copy Pods Resources */ = {
isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647;
files = (
@@ -2800,7 +2787,7 @@
shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-NetworkInfo/Pods-NetworkInfo-resources.sh\"\n";
showEnvVarsInLog = 0;
};
- 2B9966A4344269C863326096 /* [CP] Check Pods Manifest.lock */ = {
+ 8CDF557444C449CF3402DD40 /* [CP] Check Pods Manifest.lock */ = {
isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647;
files = (
@@ -2822,44 +2809,70 @@
shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n";
showEnvVarsInLog = 0;
};
- BA464DCB59BC59A2B2C9AAD7 /* [CP] Check Pods Manifest.lock */ = {
+ CD1F79E08B3F4F0921F064A8 /* [CP] Copy Pods Resources */ = {
+ isa = PBXShellScriptBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ inputPaths = (
+ "${PODS_ROOT}/Target Support Files/Pods-DashSync-DashSync_Example/Pods-DashSync-DashSync_Example-resources.sh",
+ "${PODS_CONFIGURATION_BUILD_DIR}/DashSync-iOS/DashSync.bundle",
+ "${PODS_CONFIGURATION_BUILD_DIR}/Protobuf-iOS/Protobuf_Privacy.bundle",
+ "${PODS_CONFIGURATION_BUILD_DIR}/gRPC-iOS/gRPCCertificates.bundle",
+ );
+ name = "[CP] Copy Pods Resources";
+ outputPaths = (
+ "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/DashSync.bundle",
+ "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/Protobuf_Privacy.bundle",
+ "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/gRPCCertificates.bundle",
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ shellPath = /bin/sh;
+ shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-DashSync-DashSync_Example/Pods-DashSync-DashSync_Example-resources.sh\"\n";
+ showEnvVarsInLog = 0;
+ };
+ D4B84AE4F85D9FB04692A770 /* [CP] Check Pods Manifest.lock */ = {
isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647;
files = (
);
+ inputFileListPaths = (
+ );
inputPaths = (
"${PODS_PODFILE_DIR_PATH}/Podfile.lock",
"${PODS_ROOT}/Manifest.lock",
);
name = "[CP] Check Pods Manifest.lock";
+ outputFileListPaths = (
+ );
outputPaths = (
- "$(DERIVED_FILE_DIR)/Pods-DashSync-DashSync_Example-checkManifestLockResult.txt",
+ "$(DERIVED_FILE_DIR)/Pods-DashSync_Tests-checkManifestLockResult.txt",
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n";
showEnvVarsInLog = 0;
};
- F3524DD5332FD019D466B225 /* [CP] Copy Pods Resources */ = {
+ E5F7123626737B797889229A /* [CP] Check Pods Manifest.lock */ = {
isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647;
files = (
);
+ inputFileListPaths = (
+ );
inputPaths = (
- "${PODS_ROOT}/Target Support Files/Pods-DashSync-DashSync_Example/Pods-DashSync-DashSync_Example-resources.sh",
- "${PODS_CONFIGURATION_BUILD_DIR}/DashSync-iOS/DashSync.bundle",
- "${PODS_CONFIGURATION_BUILD_DIR}/Protobuf-iOS/Protobuf_Privacy.bundle",
- "${PODS_CONFIGURATION_BUILD_DIR}/gRPC-iOS/gRPCCertificates.bundle",
+ "${PODS_PODFILE_DIR_PATH}/Podfile.lock",
+ "${PODS_ROOT}/Manifest.lock",
+ );
+ name = "[CP] Check Pods Manifest.lock";
+ outputFileListPaths = (
);
- name = "[CP] Copy Pods Resources";
outputPaths = (
- "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/DashSync.bundle",
- "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/Protobuf_Privacy.bundle",
- "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/gRPCCertificates.bundle",
+ "$(DERIVED_FILE_DIR)/Pods-DashSync-DashSync_Example-checkManifestLockResult.txt",
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
- shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-DashSync-DashSync_Example/Pods-DashSync-DashSync_Example-resources.sh\"\n";
+ shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n";
showEnvVarsInLog = 0;
};
FB5A0FA7219506140079CF42 /* ShellScript */ = {
@@ -3219,10 +3232,12 @@
};
6003F5C0195388D20070C39A /* Debug */ = {
isa = XCBuildConfiguration;
- baseConfigurationReference = 425B12FE369253E7F3A93D58 /* Pods-DashSync-DashSync_Example.debug.xcconfig */;
+ baseConfigurationReference = 61730B1B3737895F96BE6A54 /* Pods-DashSync-DashSync_Example.debug.xcconfig */;
buildSettings = {
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
- DEVELOPMENT_TEAM = 44RJ69WHFF;
+ CODE_SIGN_IDENTITY = "Sign to Run Locally";
+ CODE_SIGN_STYLE = Manual;
+ DEVELOPMENT_TEAM = "";
EXCLUDED_ARCHS = "";
GCC_PRECOMPILE_PREFIX_HEADER = YES;
GCC_PREFIX_HEADER = "DashSync/DashSync-Prefix.pch";
@@ -3273,16 +3288,18 @@
);
PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.demo.${PRODUCT_NAME:rfc1034identifier}";
PRODUCT_NAME = "$(TARGET_NAME)";
+ PROVISIONING_PROFILE_SPECIFIER = "";
WRAPPER_EXTENSION = app;
};
name = Debug;
};
6003F5C1195388D20070C39A /* Release */ = {
isa = XCBuildConfiguration;
- baseConfigurationReference = 74FDA0D6BCD2D779E20B58FC /* Pods-DashSync-DashSync_Example.release.xcconfig */;
+ baseConfigurationReference = BD44FCB7175424B2BE7993BB /* Pods-DashSync-DashSync_Example.release.xcconfig */;
buildSettings = {
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
- DEVELOPMENT_TEAM = 44RJ69WHFF;
+ CODE_SIGN_STYLE = Manual;
+ DEVELOPMENT_TEAM = "";
EXCLUDED_ARCHS = "";
GCC_PRECOMPILE_PREFIX_HEADER = YES;
GCC_PREFIX_HEADER = "DashSync/DashSync-Prefix.pch";
@@ -3333,16 +3350,19 @@
);
PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.demo.${PRODUCT_NAME:rfc1034identifier}";
PRODUCT_NAME = "$(TARGET_NAME)";
+ PROVISIONING_PROFILE_SPECIFIER = "";
WRAPPER_EXTENSION = app;
};
name = Release;
};
6003F5C3195388D20070C39A /* Debug */ = {
isa = XCBuildConfiguration;
- baseConfigurationReference = C90A9AD2C32828341F0E6915 /* Pods-DashSync_Tests.debug.xcconfig */;
+ baseConfigurationReference = 3024E8DE0B1B84642E65E70D /* Pods-DashSync_Tests.debug.xcconfig */;
buildSettings = {
BUNDLE_LOADER = "$(TEST_HOST)";
- DEVELOPMENT_TEAM = 44RJ69WHFF;
+ CODE_SIGN_IDENTITY = "Sign to Run Locally";
+ CODE_SIGN_STYLE = Manual;
+ DEVELOPMENT_TEAM = "";
"EXCLUDED_ARCHS[sdk=iphonesimulator*]" = "";
GCC_PRECOMPILE_PREFIX_HEADER = YES;
GCC_PREFIX_HEADER = "Tests/Tests-Prefix.pch";
@@ -3361,7 +3381,7 @@
};
6003F5C4195388D20070C39A /* Release */ = {
isa = XCBuildConfiguration;
- baseConfigurationReference = DFA886AB709D97089A70E82A /* Pods-DashSync_Tests.release.xcconfig */;
+ baseConfigurationReference = 77374E9036662C743187A1DA /* Pods-DashSync_Tests.release.xcconfig */;
buildSettings = {
BUNDLE_LOADER = "$(TEST_HOST)";
DEVELOPMENT_TEAM = 44RJ69WHFF;
@@ -3379,7 +3399,7 @@
};
FB9C9EFF25B80DB40039880E /* Debug */ = {
isa = XCBuildConfiguration;
- baseConfigurationReference = D1B8FECBB1652E781A9E4620 /* Pods-NetworkInfo.debug.xcconfig */;
+ baseConfigurationReference = 37CF4766B1F8739167BAFE02 /* Pods-NetworkInfo.debug.xcconfig */;
buildSettings = {
CLANG_ANALYZER_NONNULL = YES;
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
@@ -3390,13 +3410,53 @@
CODE_SIGN_IDENTITY = "Apple Development";
CODE_SIGN_STYLE = Automatic;
DEBUG_INFORMATION_FORMAT = dwarf;
- DEVELOPMENT_TEAM = 44RJ69WHFF;
+ DEVELOPMENT_TEAM = VYNC8YJV73;
ENABLE_HARDENED_RUNTIME = YES;
"EXCLUDED_ARCHS[sdk=iphonesimulator*]" = "";
GCC_C_LANGUAGE_STANDARD = gnu11;
MACOSX_DEPLOYMENT_TARGET = 11.0;
MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
MTL_FAST_MATH = YES;
+ OTHER_LDFLAGS = (
+ "$(inherited)",
+ "-ObjC",
+ "-l\"BoringSSL-GRPC-macOS\"",
+ "-l\"CocoaImageHashing-macOS\"",
+ "-l\"CocoaLumberjack-macOS\"",
+ "-l\"DAPI-GRPC-macOS\"",
+ "-l\"DSDynamicOptions-macOS\"",
+ "-l\"DashSync-macOS\"",
+ "-l\"Protobuf-macOS\"",
+ "-l\"SDWebImage-macOS\"",
+ "-l\"TinyCborObjc-macOS\"",
+ "-l\"abseil-macOS\"",
+ "-l\"bz2\"",
+ "-l\"c++\"",
+ "-l\"dash_shared_core_macos\"",
+ "-l\"gRPC-Core-macOS\"",
+ "-l\"gRPC-ProtoRPC-macOS\"",
+ "-l\"gRPC-RxLibrary-macOS\"",
+ "-l\"gRPC-macOS\"",
+ "-l\"resolv\"",
+ "-l\"sqlite3\"",
+ "-l\"tinycbor-macOS\"",
+ "-l\"z\"",
+ "-framework",
+ "\"BackgroundTasks\"",
+ "-framework",
+ "\"Cocoa\"",
+ "-framework",
+ "\"CoreData\"",
+ "-framework",
+ "\"Foundation\"",
+ "-framework",
+ "\"ImageIO\"",
+ "-framework",
+ "\"Security\"",
+ "-framework",
+ "\"SystemConfiguration\"",
+ "\"-ld_classic\"",
+ );
PRODUCT_NAME = "$(TARGET_NAME)";
PROVISIONING_PROFILE_SPECIFIER = "";
SDKROOT = macosx;
@@ -3405,7 +3465,7 @@
};
FB9C9F0025B80DB40039880E /* Release */ = {
isa = XCBuildConfiguration;
- baseConfigurationReference = 131B02E9F838D9B0B88342E6 /* Pods-NetworkInfo.release.xcconfig */;
+ baseConfigurationReference = D97E3B2F9438560328BFE431 /* Pods-NetworkInfo.release.xcconfig */;
buildSettings = {
CLANG_ANALYZER_NONNULL = YES;
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
@@ -3417,13 +3477,53 @@
CODE_SIGN_STYLE = Automatic;
COPY_PHASE_STRIP = NO;
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
- DEVELOPMENT_TEAM = 44RJ69WHFF;
+ DEVELOPMENT_TEAM = VYNC8YJV73;
ENABLE_HARDENED_RUNTIME = YES;
"EXCLUDED_ARCHS[sdk=iphonesimulator*]" = "";
GCC_C_LANGUAGE_STANDARD = gnu11;
MACOSX_DEPLOYMENT_TARGET = 11.0;
MTL_ENABLE_DEBUG_INFO = NO;
MTL_FAST_MATH = YES;
+ OTHER_LDFLAGS = (
+ "$(inherited)",
+ "-ObjC",
+ "-l\"BoringSSL-GRPC-macOS\"",
+ "-l\"CocoaImageHashing-macOS\"",
+ "-l\"CocoaLumberjack-macOS\"",
+ "-l\"DAPI-GRPC-macOS\"",
+ "-l\"DSDynamicOptions-macOS\"",
+ "-l\"DashSync-macOS\"",
+ "-l\"Protobuf-macOS\"",
+ "-l\"SDWebImage-macOS\"",
+ "-l\"TinyCborObjc-macOS\"",
+ "-l\"abseil-macOS\"",
+ "-l\"bz2\"",
+ "-l\"c++\"",
+ "-l\"dash_shared_core_macos\"",
+ "-l\"gRPC-Core-macOS\"",
+ "-l\"gRPC-ProtoRPC-macOS\"",
+ "-l\"gRPC-RxLibrary-macOS\"",
+ "-l\"gRPC-macOS\"",
+ "-l\"resolv\"",
+ "-l\"sqlite3\"",
+ "-l\"tinycbor-macOS\"",
+ "-l\"z\"",
+ "-framework",
+ "\"BackgroundTasks\"",
+ "-framework",
+ "\"Cocoa\"",
+ "-framework",
+ "\"CoreData\"",
+ "-framework",
+ "\"Foundation\"",
+ "-framework",
+ "\"ImageIO\"",
+ "-framework",
+ "\"Security\"",
+ "-framework",
+ "\"SystemConfiguration\"",
+ "\"-ld_classic\"",
+ );
PRODUCT_NAME = "$(TARGET_NAME)";
PROVISIONING_PROFILE_SPECIFIER = "";
SDKROOT = macosx;
diff --git a/Example/DashSync/DSTransactionDetailViewController.m b/Example/DashSync/DSTransactionDetailViewController.m
index 8ba0bbde3..ed4552701 100644
--- a/Example/DashSync/DSTransactionDetailViewController.m
+++ b/Example/DashSync/DSTransactionDetailViewController.m
@@ -6,6 +6,8 @@
// Copyright © 2018 Dash Core Group. All rights reserved.
//
+#import "DSAssetLockTransaction.h"
+#import "DSAssetUnlockTransaction.h"
#import "DSTransactionDetailViewController.h"
#import "BRCopyLabel.h"
#import "DSTransactionAmountTableViewCell.h"
@@ -286,6 +288,10 @@ - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(N
cell.statusLabel.text = @"Coinbase Transaction";
} else if ([self.transaction isMemberOfClass:[DSCreditFundingTransaction class]]) {
cell.statusLabel.text = @"Classical Credit Funding Transaction";
+ } else if ([self.transaction isMemberOfClass:[DSAssetLockTransaction class]]) {
+ cell.statusLabel.text = @"Asset Lock Transaction";
+ } else if ([self.transaction isMemberOfClass:[DSAssetUnlockTransaction class]]) {
+ cell.statusLabel.text = @"Asset Unlock Transaction";
} else {
cell.statusLabel.text = @"Classical Transaction";
}
diff --git a/Example/Podfile b/Example/Podfile
index 85e92f967..575852f60 100644
--- a/Example/Podfile
+++ b/Example/Podfile
@@ -1,6 +1,7 @@
def common_pods
# pod 'DashSharedCore', :git => 'https://github.com/dashpay/dash-shared-core.git', :branch => 'fix/core-20-test-additional'
-# pod 'DashSharedCore', :git => 'https://github.com/dashpay/dash-shared-core.git', :commit => 'e2dc943'
+# pod 'DashSharedCore', :git => 'https://github.com/dashpay/dash-shared-core.git', :commit => '7dda9489a1d23221032e2b050c31a317a6e95631'
+# pod 'DashSharedCore', :path => '../../dash-shared-core/'
pod 'DashSync', :path => '../'
pod 'SDWebImage', '5.14.3'
pod 'CocoaImageHashing', :git => 'https://github.com/ameingast/cocoaimagehashing.git', :commit => 'ad01eee'
@@ -25,17 +26,21 @@ target 'NetworkInfo' do
end
post_install do |installer|
- installer.pods_project.targets.each do |target|
- # fixes warnings about unsupported Deployment Target in Xcode 10
- target.build_configurations.each do |config|
- config.build_settings['IPHONEOS_DEPLOYMENT_TARGET'] = '13.0'
- end
- # Hide warnings for specific pods
- if ["gRPC"].include? target.name
- target.build_configurations.each do |config|
- config.build_settings['GCC_WARN_INHIBIT_ALL_WARNINGS'] = 'YES'
- end
+ installer.pods_project.targets.each do |target|
+ # fixes warnings about unsupported Deployment Target in Xcode 10
+ target.build_configurations.each do |config|
+ config.build_settings['IPHONEOS_DEPLOYMENT_TARGET'] = '13.0'
+ end
+
+ # Ensure the GCC_WARN_INHIBIT_ALL_WARNINGS flag is removed for BoringSSL-GRPC and BoringSSL-GRPC-iOS
+ if ['BoringSSL-GRPC', 'BoringSSL-GRPC-iOS', 'BoringSSL-GRPC-macOS'].include? target.name
+ target.source_build_phase.files.each do |file|
+ if file.settings && file.settings['COMPILER_FLAGS']
+ flags = file.settings['COMPILER_FLAGS'].split
+ flags.reject! { |flag| flag == '-GCC_WARN_INHIBIT_ALL_WARNINGS' }
+ file.settings['COMPILER_FLAGS'] = flags.join(' ')
+ end
end
+ end
end
end
-
diff --git a/Example/Podfile.lock b/Example/Podfile.lock
index b0fb2e24d..c12111213 100644
--- a/Example/Podfile.lock
+++ b/Example/Podfile.lock
@@ -586,11 +586,11 @@ PODS:
- "!ProtoCompiler-gRPCPlugin (~> 1.0)"
- DAPI-GRPC/Messages
- gRPC-ProtoRPC
- - DashSharedCore (0.4.16)
+ - DashSharedCore (0.4.19)
- DashSync (0.1.0):
- CocoaLumberjack (= 3.7.2)
- DAPI-GRPC (= 0.22.0-dev.8)
- - DashSharedCore (= 0.4.16)
+ - DashSharedCore (= 0.4.19)
- DSDynamicOptions (= 0.1.2)
- DWAlertController (= 0.2.1)
- TinyCborObjc (= 0.4.6)
@@ -657,7 +657,7 @@ PODS:
- gRPC/Interface-Legacy (1.49.0):
- gRPC-RxLibrary/Interface (= 1.49.0)
- KVO-MVVM (0.5.1)
- - Protobuf (3.27.2)
+ - Protobuf (3.28.3)
- SDWebImage (5.14.3):
- SDWebImage/Core (= 5.14.3)
- SDWebImage/Core (5.14.3)
@@ -712,8 +712,8 @@ SPEC CHECKSUMS:
CocoaImageHashing: 8656031d0899abe6c1c415827de43e9798189c53
CocoaLumberjack: b7e05132ff94f6ae4dfa9d5bce9141893a21d9da
DAPI-GRPC: 138d62523bbfe7e88a39896f1053c0bc12390d9f
- DashSharedCore: 81d3327cbea4103114b768eed4d36e742417b63b
- DashSync: 5c4dea6e4ef83df33f23f85b7f2b97ef6843de87
+ DashSharedCore: 009f29640756017406ee2b0ab5f1073f1856f85e
+ DashSync: f0ee76fe1409c9071bcee21202cc8002944c801d
DSDynamicOptions: 347cc5d2c4e080eb3de6a86719ad3d861b82adfc
DWAlertController: 5f4cd8adf90336331c054857f709f5f8d4b16a5b
gRPC: 64f36d689b2ecd99c4351f74e6f91347cdc65d9f
@@ -721,11 +721,11 @@ SPEC CHECKSUMS:
gRPC-ProtoRPC: 1c223e0f1732bb8d0b9e9e0ea60cc0fe995b8e2d
gRPC-RxLibrary: 92327f150e11cf3b1c0f52e083944fd9f5cb5d1e
KVO-MVVM: 4df3afd1f7ebcb69735458b85db59c4271ada7c6
- Protobuf: fb2c13674723f76ff6eede14f78847a776455fa2
+ Protobuf: 5a8a7781d8e1004302f108977ac2d5b99323146f
SDWebImage: 9c36e66c8ce4620b41a7407698dda44211a96764
tinycbor: d4d71dddda1f8392fbb4249f63faf8552f327590
TinyCborObjc: 5204540fb90ff0c40fb22d408fa51bab79d78a80
-PODFILE CHECKSUM: 8cb419eb95422ed65fbdc41960e405e8cc54dda7
+PODFILE CHECKSUM: 426e3f03a062ea4c149b0500478f0fe6bbe5bab5
COCOAPODS: 1.15.2
diff --git a/Example/Tests/DSTransactionTests.m b/Example/Tests/DSTransactionTests.m
index 7ae28a403..200cf6dc3 100644
--- a/Example/Tests/DSTransactionTests.m
+++ b/Example/Tests/DSTransactionTests.m
@@ -8,6 +8,7 @@
#import
+#import "DSAssetUnlockTransaction.h"
#import "DSAuthenticationKeysDerivationPath.h"
#import "DSBlockchainIdentityCloseTransition.h"
#import "DSBlockchainIdentityRegistrationTransition.h"
@@ -91,6 +92,11 @@ - (void)testTransaction {
XCTAssertEqualObjects(d, tx.data, @"[DSTransaction transactionWithMessage:]");
processor_destroy_opaque_key(k);
}
+- (void)testAssetUnlockTx {
+ NSData *transactionData = @"030009000001a02ffa0d000000001976a9146641c13e0ee2ce2cdf70852bb7ae9853c01f29a988ac0000000091014e00000000000000be000000273e11004130304f40d1820b5e239baecd35249263b1206a1c76e66053ec39a04501000093d3851b6bda0518da51ff8932ef3570be20e7978369dd312947326e135004915c10b5fe0e31e572c40f41cdd941bed8115e314573faf472e1065ca370bdff486db8eaa6bbcba3943e6e5ada6a3c30dee70e39811814e59e1ffc54f3c9fca04f".hexToData;
+ DSAssetUnlockTransaction *tx = [[DSAssetUnlockTransaction alloc] initWithMessage:transactionData onChain:[DSChain testnet]];
+ XCTAssert(tx, @"Bad Asset Unlock Tx");
+}
- (void)testBlockchainIdentityFundingTransactionUniqueId {
NSData *transactionData = @"0300000002b74030bbda6edd804d4bfb2bdbbb7c207a122f3af2f6283de17074a42c6a5417020000006b483045022100815b175ab1a8fde7d651d78541ba73d2e9b297e6190f5244e1957004aa89d3c902207e1b164499569c1f282fe5533154495186484f7db22dc3dc1ccbdc9b47d997250121027f69794d6c4c942392b1416566aef9eaade43fbf07b63323c721b4518127baadffffffffb74030bbda6edd804d4bfb2bdbbb7c207a122f3af2f6283de17074a42c6a5417010000006b483045022100a7c94fe1bb6ffb66d2bb90fd8786f5bd7a0177b0f3af20342523e64291f51b3e02201f0308f1034c0f6024e368ca18949be42a896dda434520fa95b5651dc5ad3072012102009e3f2eb633ee12c0143f009bf773155a6c1d0f14271d30809b1dc06766aff0ffffffff031027000000000000166a1414ec6c36e6c39a9181f3a261a08a5171425ac5e210270000000000001976a91414ec6c36e6c39a9181f3a261a08a5171425ac5e288acc443953b000000001976a9140d1775b9ed85abeb19fd4a7d8cc88b08a29fe6de88ac00000000".hexToData;