From 3311e99683d55ffab0f15aca74181997d32cae26 Mon Sep 17 00:00:00 2001 From: Dmitry Date: Sat, 8 Dec 2018 23:07:33 +0300 Subject: [PATCH] Updated Example pods --- Example/Podfile.lock | 28 +- Example/Pods/CryptoSwift/README.md | 4 +- .../Sources/CryptoSwift/BlockMode/GCM.swift | 43 +- .../CryptoSwift/UInt64+Extension.swift | 14 +- .../Public/PromiseKit/PromiseKit-umbrella.h | 6 +- .../Local Podspecs/web3swift.podspec.json | 12 +- Example/Pods/Manifest.lock | 28 +- Example/Pods/Pods.xcodeproj/project.pbxproj | 2370 +++++++++-------- .../Pods/PromiseKit/Sources/Catchable.swift | 2 +- .../PromiseKit/Sources/Configuration.swift | 22 +- .../Pods/PromiseKit/Sources/Guarantee.swift | 2 +- .../Pods/PromiseKit/Sources/LogEvent.swift | 27 + Example/Pods/PromiseKit/Sources/Promise.swift | 2 +- .../Pods/PromiseKit/Sources/Resolver.swift | 9 +- .../web3swift/web3swift.xcconfig | 4 +- Example/Pods/web3swift/README.md | 8 +- .../Pods/web3swift/Sources/ABIv2/ABIv2.swift | 8 + .../Sources/ABIv2/ABIv2Decoding.swift | 68 +- .../Sources/ABIv2/ABIv2Elements.swift | 36 +- .../Sources/ABIv2/ABIv2Encoding.swift | 23 +- .../Sources/ABIv2/ABIv2ParameterTypes.swift | 27 +- .../Sources/ABIv2/ABIv2Parsing.swift | 32 +- .../Sources/ABIv2/ABIv2TypeParser.swift | 12 +- .../Contract/ComparisonExtensions.swift | 8 +- .../Sources/Contract/ContractABIv2.swift | 105 +- .../Sources/Contract/ContractProtocol.swift | 52 +- .../EthereumFilterEncodingExtensions.swift | 10 +- .../Sources/Contract/EventFiltering.swift | 2 +- .../web3swift/Sources/Contracts/ERC20.swift | 103 +- .../web3swift/Sources/Contracts/ERC721.swift | 36 +- .../web3swift/Sources/Contracts/ERC777.swift | 177 +- .../web3swift/Sources/Contracts/ERC888.swift | 40 +- .../Sources/Contracts/SecurityToken.swift | 289 +- .../Sources/Convenience/Array+Extension.swift | 2 +- .../Sources/Convenience/Base58.swift | 12 +- .../Convenience/CryptoExtensions.swift | 33 +- .../Sources/Convenience/Data+Extension.swift | 42 +- .../Convenience/LibSecp256k1Extension.swift | 17 +- .../NativeTypesEncoding+Extensions.swift | 16 +- .../Convenience/RIPEMD160+StackOveflow.swift | 6 +- .../Convenience/String+Extension.swift | 2 +- .../Sources/Convenience/UInt256.swift | 18 +- .../web3swift/Sources/Encryption/AES.swift | 198 ++ .../Sources/Encryption/Cryptor/Crypto.swift | 119 + .../Sources/Encryption/Cryptor/Cryptor.swift | 71 + .../Sources/Encryption/Cryptor/Digest.swift | 279 ++ .../Sources/Encryption/Cryptor/HMAC.swift | 379 +++ .../Encryption/Cryptor/KeyDerivation.swift | 234 ++ .../Sources/Encryption/Cryptor/Random.swift | 106 + .../Encryption/Cryptor/SSLPointerTricks.swift | 100 + .../Sources/Encryption/Cryptor/Status.swift | 288 ++ .../Encryption/Cryptor/StreamCryptor.swift | 1040 ++++++++ .../Encryption/Cryptor/Updatable.swift | 100 + .../Encryption/Cryptor/Utilities.swift | 259 ++ .../Sources/Encryption/DerivedKey.swift | 440 +++ .../Sources/Encryption/PrivateKey.swift | 113 + Example/Pods/web3swift/Sources/Guides.swift | 6 +- .../Web3+BrowserFunctions.swift | 109 +- .../Sources/HookedFunctions/Web3+Wallet.swift | 47 +- .../KeystoreManager/AbstractKeystore.swift | 1 + .../Sources/KeystoreManager/BIP32HDNode.swift | 133 +- .../KeystoreManager/BIP32Keystore.swift | 122 +- .../BIP32KeystoreJSONStructure.swift | 27 - .../Sources/KeystoreManager/BIP39.swift | 92 +- .../KeystoreManager/EthereumAddress.swift | 50 +- .../KeystoreManager/EthereumKeystoreV3.swift | 164 +- .../Sources/KeystoreManager/HDPath.swift | 34 +- .../Sources/KeystoreManager/IBAN.swift | 15 +- .../KeystoreManager/KeystoreManager.swift | 67 +- .../KeystoreV3JSONStructure.swift | 47 - .../KeystoreManager/PlainKeystore.swift | 14 +- .../web3swift/Sources/Migration-iOS.swift | 13 +- .../Pods/web3swift/Sources/Migration.swift | 29 +- .../Sources/ObjectiveC/W3Contracts.swift | 32 +- .../web3swift/Sources/ObjectiveC/W3Eth.swift | 2 +- .../Sources/ObjectiveC/W3Keystore.swift | 4 +- .../Sources/ObjectiveC/W3Personal.swift | 32 +- .../W3TransactionIntermediate.swift | 60 +- .../Sources/ObjectiveC/W3Wallet.swift | 8 +- .../web3swift/Sources/ObjectiveC/W3Web3.swift | 2 +- .../Sources/Transaction/BloomFilter.swift | 67 +- .../Transaction/EthereumTransaction.swift | 88 +- .../Transaction/TransactionSigner.swift | 97 +- .../SolidityDataReader.swift | 53 +- .../SolidityDataWriter.swift | 14 +- .../SolidityFunction.swift | 139 +- .../SolidityTypes.swift | 69 +- .../Sources/Transactions/Transaction.swift | 123 + .../Sources/TxPool/DictionaryReader.swift | 65 +- .../web3swift/Sources/TxPool/TxPool.swift | 25 +- .../web3swift/Sources/Utils/EIP67Code.swift | 34 +- .../Sources/{EthURL => Utils}/EthURL.swift | 66 +- .../Pods/web3swift/Sources/Utils/RLP.swift | 6 +- .../web3swift/Sources/Web3/Batching.swift | 9 +- .../Sources/Web3/Web3+Contract.swift | 13 +- .../web3swift/Sources/Web3/Web3+Eth.swift | 219 +- .../Sources/Web3/Web3+EventParser.swift | 68 +- .../web3swift/Sources/Web3/Web3+Infura.swift | 6 +- .../web3swift/Sources/Web3/Web3+JSONRPC.swift | 5 +- .../web3swift/Sources/Web3/Web3+Options.swift | 2 + .../Sources/Web3/Web3+Personal.swift | 35 +- .../Sources/Web3/Web3+Protocols.swift | 48 +- .../Sources/Web3/Web3+Structures.swift | 10 +- .../Web3/Web3+TransactionIntermediate.swift | 88 +- .../web3swift/Sources/Web3/Web3+Utils.swift | 38 +- .../Pods/web3swift/Sources/Web3/Web3.swift | 40 +- Example/web3swiftExample/ViewController.swift | 46 +- README.md | 10 +- web3swift.podspec | 4 +- 109 files changed, 7556 insertions(+), 2524 deletions(-) create mode 100644 Example/Pods/PromiseKit/Sources/LogEvent.swift create mode 100644 Example/Pods/web3swift/Sources/Encryption/AES.swift create mode 100755 Example/Pods/web3swift/Sources/Encryption/Cryptor/Crypto.swift create mode 100755 Example/Pods/web3swift/Sources/Encryption/Cryptor/Cryptor.swift create mode 100755 Example/Pods/web3swift/Sources/Encryption/Cryptor/Digest.swift create mode 100755 Example/Pods/web3swift/Sources/Encryption/Cryptor/HMAC.swift create mode 100755 Example/Pods/web3swift/Sources/Encryption/Cryptor/KeyDerivation.swift create mode 100755 Example/Pods/web3swift/Sources/Encryption/Cryptor/Random.swift create mode 100644 Example/Pods/web3swift/Sources/Encryption/Cryptor/SSLPointerTricks.swift create mode 100755 Example/Pods/web3swift/Sources/Encryption/Cryptor/Status.swift create mode 100755 Example/Pods/web3swift/Sources/Encryption/Cryptor/StreamCryptor.swift create mode 100755 Example/Pods/web3swift/Sources/Encryption/Cryptor/Updatable.swift create mode 100755 Example/Pods/web3swift/Sources/Encryption/Cryptor/Utilities.swift create mode 100644 Example/Pods/web3swift/Sources/Encryption/DerivedKey.swift create mode 100644 Example/Pods/web3swift/Sources/Encryption/PrivateKey.swift delete mode 100644 Example/Pods/web3swift/Sources/KeystoreManager/BIP32KeystoreJSONStructure.swift delete mode 100644 Example/Pods/web3swift/Sources/KeystoreManager/KeystoreV3JSONStructure.swift rename Example/Pods/web3swift/Sources/{ABIv2 => Transactions}/SolidityDataReader.swift (81%) rename Example/Pods/web3swift/Sources/{ABIv2 => Transactions}/SolidityDataWriter.swift (84%) rename Example/Pods/web3swift/Sources/{ABIv2 => Transactions}/SolidityFunction.swift (64%) rename Example/Pods/web3swift/Sources/{ABIv2 => Transactions}/SolidityTypes.swift (88%) create mode 100644 Example/Pods/web3swift/Sources/Transactions/Transaction.swift rename Example/Pods/web3swift/Sources/{EthURL => Utils}/EthURL.swift (52%) diff --git a/Example/Podfile.lock b/Example/Podfile.lock index 0128a073..00fcba2c 100644 --- a/Example/Podfile.lock +++ b/Example/Podfile.lock @@ -1,21 +1,21 @@ PODS: - BigInt (3.1.0): - SipHash (~> 1.2) - - CryptoSwift (0.13.0) - - PromiseKit (6.5.3): - - PromiseKit/CorePromise (= 6.5.3) - - PromiseKit/Foundation (= 6.5.3) - - PromiseKit/UIKit (= 6.5.3) - - PromiseKit/CorePromise (6.5.3) - - PromiseKit/Foundation (6.5.3): + - CryptoSwift (0.13.1) + - PromiseKit (6.7.0): + - PromiseKit/CorePromise (= 6.7.0) + - PromiseKit/Foundation (= 6.7.0) + - PromiseKit/UIKit (= 6.7.0) + - PromiseKit/CorePromise (6.7.0) + - PromiseKit/Foundation (6.7.0): - PromiseKit/CorePromise - - PromiseKit/UIKit (6.5.3): + - PromiseKit/UIKit (6.7.0): - PromiseKit/CorePromise - secp256k1.swift (0.1.4) - SipHash (1.2.2) - - web3swift (2.0.5): + - web3swift (2.1.2): - BigInt (~> 3.1) - - CryptoSwift (~> 0.12) + - CryptoSwift - PromiseKit (~> 6.4) - secp256k1.swift @@ -36,16 +36,16 @@ EXTERNAL SOURCES: CHECKOUT OPTIONS: web3swift: - :commit: 590bd35e8a32057860aa8dc707530004311bf0f9 + :commit: d48680a85c1ef94953d0ad2a630c483aeaf345a9 :git: https://github.com/bankex/web3swift.git SPEC CHECKSUMS: BigInt: 76b5dfdfa3e2e478d4ffdf161aeede5502e2742f - CryptoSwift: 16e78bebf567bad1c87b2d58f6547f25b74c31aa - PromiseKit: c609029bdd801f792551a504c695c7d3098b42cd + CryptoSwift: ff68c35a53e03177d31aaa2c1e8b3e010aeed6cb + PromiseKit: 453ddcc947fe7b302f3ef41882b81d31c554df7f secp256k1.swift: a7e7a214f6db6ce5db32cc6b2b45e5c4dd633634 SipHash: fad90a4683e420c52ef28063063dbbce248ea6d4 - web3swift: 2a33b0dd0fc8901f644d8f9234b0e9bc8611dc87 + web3swift: 868915a0de620a03510efbe712dcfbd576e61799 PODFILE CHECKSUM: 2b6b41ef6cd2c86449189776fb7c34f8d8e3f570 diff --git a/Example/Pods/CryptoSwift/README.md b/Example/Pods/CryptoSwift/README.md index 2e7f5498..976689ef 100644 --- a/Example/Pods/CryptoSwift/README.md +++ b/Example/Pods/CryptoSwift/README.md @@ -1,4 +1,4 @@ -[![Platform](https://img.shields.io/badge/Platforms-iOS%20%7C%20macOS%20%7C%20watchOS%20%7C%20tvOS%20%7C%20Linux-4E4E4E.svg?colorA=28a745)](#installation) +[![Platform](https://img.shields.io/badge/Platforms-iOS%20%7C%20Android%20%7CmacOS%20%7C%20watchOS%20%7C%20tvOS%20%7C%20Linux-4E4E4E.svg?colorA=28a745)](#installation) [![Swift support](https://img.shields.io/badge/Swift-3.1%20%7C%203.2%20%7C%204.0%20%7C%204.1-lightgrey.svg?colorA=28a745&colorB=4E4E4E)](#swift-versions-support) [![CocoaPods Compatible](https://img.shields.io/cocoapods/v/CryptoSwift.svg?style=flat&label=CocoaPods&colorA=28a745&&colorB=4E4E4E)](https://cocoapods.org/pods/CryptoSwift) @@ -37,7 +37,7 @@ Good mood - Easy to use - Convenient extensions for String and Data - Support for incremental updates (stream, ...) -- iOS, macOS, AppleTV, watchOS, Linux support +- iOS, Android, macOS, AppleTV, watchOS, Linux support #### Hash (Digest) [MD5](http://tools.ietf.org/html/rfc1321) diff --git a/Example/Pods/CryptoSwift/Sources/CryptoSwift/BlockMode/GCM.swift b/Example/Pods/CryptoSwift/Sources/CryptoSwift/BlockMode/GCM.swift index aee8d29e..d9bf5d94 100644 --- a/Example/Pods/CryptoSwift/Sources/CryptoSwift/BlockMode/GCM.swift +++ b/Example/Pods/CryptoSwift/Sources/CryptoSwift/BlockMode/GCM.swift @@ -24,15 +24,6 @@ public final class GCM: BlockMode { case combined /// Some applications may need to store the authentication tag and the encrypted message at different locations. case detached - - var additionalBufferSize: Int { - switch self { - case .combined: - return GCMModeWorker.tagLength - case .detached: - return 0 - } - } } public let options: BlockModeOption = [.initializationVectorRequired, .useEncryptToDecrypt] @@ -47,6 +38,11 @@ public final class GCM: BlockMode { private let iv: Array private let additionalAuthenticatedData: Array? private let mode: Mode + + /// Length of authentication tag, in bytes. + /// For encryption, the value is given as init parameter. + /// For decryption, the lenght of given authentication tag is used. + private let tagLength: Int // `authenticationTag` nil for encryption, known tag for decryption /// For encryption, the value is set at the end of the encryption. @@ -54,15 +50,17 @@ public final class GCM: BlockMode { public var authenticationTag: Array? // encrypt - public init(iv: Array, additionalAuthenticatedData: Array? = nil, mode: Mode = .detached) { + /// Possible tag lengths: 4,8,12,13,14,15,16 + public init(iv: Array, additionalAuthenticatedData: Array? = nil, tagLength: Int = 16, mode: Mode = .detached) { self.iv = iv self.additionalAuthenticatedData = additionalAuthenticatedData self.mode = mode + self.tagLength = tagLength } // decrypt public convenience init(iv: Array, authenticationTag: Array, additionalAuthenticatedData: Array? = nil, mode: Mode = .detached) { - self.init(iv: iv, additionalAuthenticatedData: additionalAuthenticatedData, mode: mode) + self.init(iv: iv, additionalAuthenticatedData: additionalAuthenticatedData, tagLength: authenticationTag.count, mode: mode) self.authenticationTag = authenticationTag } @@ -71,7 +69,7 @@ public final class GCM: BlockMode { throw Error.invalidInitializationVector } - let worker = GCMModeWorker(iv: iv.slice, aad: additionalAuthenticatedData?.slice, expectedTag: authenticationTag, mode: mode, cipherOperation: cipherOperation) + let worker = GCMModeWorker(iv: iv.slice, aad: additionalAuthenticatedData?.slice, expectedTag: authenticationTag, tagLength: tagLength, mode: mode, cipherOperation: cipherOperation) worker.didCalculateTag = { [weak self] tag in self?.authenticationTag = tag } @@ -87,8 +85,7 @@ final class GCMModeWorker: BlockModeWorker, FinalizingEncryptModeWorker, Finaliz // Callback called when authenticationTag is ready var didCalculateTag: ((Array) -> Void)? - // 128 bit tag. Other possible tags 4,8,12,13,14,15,16 - fileprivate static let tagLength = 16 + private let tagLength: Int // GCM nonce is 96-bits by default. It's the most effective length for the IV private static let nonceSize = 12 @@ -115,15 +112,21 @@ final class GCMModeWorker: BlockModeWorker, FinalizingEncryptModeWorker, Finaliz return GF(aad: [UInt8](), h: h, blockSize: blockSize) }() - init(iv: ArraySlice, aad: ArraySlice? = nil, expectedTag: Array? = nil, mode: GCM.Mode, cipherOperation: @escaping CipherOperationOnBlock) { + init(iv: ArraySlice, aad: ArraySlice? = nil, expectedTag: Array? = nil, tagLength: Int, mode: GCM.Mode, cipherOperation: @escaping CipherOperationOnBlock) { self.cipherOperation = cipherOperation self.iv = iv self.mode = mode - self.additionalBufferSize = mode.additionalBufferSize self.aad = aad self.expectedTag = expectedTag + self.tagLength = tagLength h = UInt128(cipherOperation(Array(repeating: 0, count: blockSize).slice)!) // empty block + if mode == .combined { + self.additionalBufferSize = tagLength + } else { + self.additionalBufferSize = 0 + } + // Assume nonce is 12 bytes long, otherwise initial counter would be calulated from GHASH // counter = GF.ghash(aad: [UInt8](), ciphertext: nonce) if iv.count == GCMModeWorker.nonceSize { @@ -155,7 +158,7 @@ final class GCMModeWorker: BlockModeWorker, FinalizingEncryptModeWorker, Finaliz func finalize(encrypt ciphertext: ArraySlice) throws -> ArraySlice { // Calculate MAC tag. let ghash = gf.ghashFinish() - let tag = Array((ghash ^ eky0).bytes.prefix(GCMModeWorker.tagLength)) + let tag = Array((ghash ^ eky0).bytes.prefix(tagLength)) // Notify handler didCalculateTag?(tag) @@ -192,8 +195,8 @@ final class GCMModeWorker: BlockModeWorker, FinalizingEncryptModeWorker, Finaliz switch mode { case .combined: // overwrite expectedTag property used later for verification - self.expectedTag = Array(ciphertext.suffix(GCMModeWorker.tagLength)) - return ciphertext[ciphertext.startIndex..) throws -> ArraySlice { // Calculate MAC tag. let ghash = gf.ghashFinish() - let computedTag = Array((ghash ^ eky0).bytes.prefix(GCMModeWorker.tagLength)) + let computedTag = Array((ghash ^ eky0).bytes.prefix(tagLength)) // Validate tag guard let expectedTag = self.expectedTag, computedTag == expectedTag else { diff --git a/Example/Pods/CryptoSwift/Sources/CryptoSwift/UInt64+Extension.swift b/Example/Pods/CryptoSwift/Sources/CryptoSwift/UInt64+Extension.swift index 6c8d2c6e..44a77d93 100644 --- a/Example/Pods/CryptoSwift/Sources/CryptoSwift/UInt64+Extension.swift +++ b/Example/Pods/CryptoSwift/Sources/CryptoSwift/UInt64+Extension.swift @@ -30,13 +30,13 @@ extension UInt64 { let count = bytes.count let val0 = count > 0 ? UInt64(bytes[index.advanced(by: 0)]) << 56 : 0 - let val1 = count > 0 ? UInt64(bytes[index.advanced(by: 1)]) << 48 : 0 - let val2 = count > 0 ? UInt64(bytes[index.advanced(by: 2)]) << 40 : 0 - let val3 = count > 0 ? UInt64(bytes[index.advanced(by: 3)]) << 32 : 0 - let val4 = count > 0 ? UInt64(bytes[index.advanced(by: 4)]) << 24 : 0 - let val5 = count > 0 ? UInt64(bytes[index.advanced(by: 5)]) << 16 : 0 - let val6 = count > 0 ? UInt64(bytes[index.advanced(by: 6)]) << 8 : 0 - let val7 = count > 0 ? UInt64(bytes[index.advanced(by: 7)]) : 0 + let val1 = count > 1 ? UInt64(bytes[index.advanced(by: 1)]) << 48 : 0 + let val2 = count > 2 ? UInt64(bytes[index.advanced(by: 2)]) << 40 : 0 + let val3 = count > 3 ? UInt64(bytes[index.advanced(by: 3)]) << 32 : 0 + let val4 = count > 4 ? UInt64(bytes[index.advanced(by: 4)]) << 24 : 0 + let val5 = count > 5 ? UInt64(bytes[index.advanced(by: 5)]) << 16 : 0 + let val6 = count > 6 ? UInt64(bytes[index.advanced(by: 6)]) << 8 : 0 + let val7 = count > 7 ? UInt64(bytes[index.advanced(by: 7)]) : 0 self = val0 | val1 | val2 | val3 | val4 | val5 | val6 | val7 } diff --git a/Example/Pods/Headers/Public/PromiseKit/PromiseKit-umbrella.h b/Example/Pods/Headers/Public/PromiseKit/PromiseKit-umbrella.h index 4a0b02de..ff56b53b 100644 --- a/Example/Pods/Headers/Public/PromiseKit/PromiseKit-umbrella.h +++ b/Example/Pods/Headers/Public/PromiseKit/PromiseKit-umbrella.h @@ -10,12 +10,12 @@ #endif #endif -#import "fwd.h" #import "AnyPromise.h" +#import "fwd.h" #import "PromiseKit.h" -#import "NSURLSession+AnyPromise.h" -#import "NSTask+AnyPromise.h" #import "NSNotificationCenter+AnyPromise.h" +#import "NSTask+AnyPromise.h" +#import "NSURLSession+AnyPromise.h" #import "PMKFoundation.h" #import "PMKUIKit.h" #import "UIView+AnyPromise.h" diff --git a/Example/Pods/Local Podspecs/web3swift.podspec.json b/Example/Pods/Local Podspecs/web3swift.podspec.json index 85492946..47aec118 100644 --- a/Example/Pods/Local Podspecs/web3swift.podspec.json +++ b/Example/Pods/Local Podspecs/web3swift.podspec.json @@ -1,9 +1,9 @@ { "name": "web3swift", - "version": "2.0.5", + "version": "2.1.2", "platforms": { "ios": "8.0", - "osx": "10.9", + "osx": "10.10", "tvos": "9.0", "watchos": "2.0" }, @@ -16,7 +16,7 @@ "authors": "Bankex Foundation", "source": { "git": "https://github.com/bankex/web3swift.git", - "tag": "v2.0.5" + "tag": "v2.1.2" }, "source_files": "Sources/**/*.swift", "dependencies": { @@ -26,11 +26,11 @@ "BigInt": [ "~> 3.1" ], - "CryptoSwift": [ - "~> 0.12" - ], "secp256k1.swift": [ + ], + "CryptoSwift": [ + ] } } diff --git a/Example/Pods/Manifest.lock b/Example/Pods/Manifest.lock index 0128a073..00fcba2c 100644 --- a/Example/Pods/Manifest.lock +++ b/Example/Pods/Manifest.lock @@ -1,21 +1,21 @@ PODS: - BigInt (3.1.0): - SipHash (~> 1.2) - - CryptoSwift (0.13.0) - - PromiseKit (6.5.3): - - PromiseKit/CorePromise (= 6.5.3) - - PromiseKit/Foundation (= 6.5.3) - - PromiseKit/UIKit (= 6.5.3) - - PromiseKit/CorePromise (6.5.3) - - PromiseKit/Foundation (6.5.3): + - CryptoSwift (0.13.1) + - PromiseKit (6.7.0): + - PromiseKit/CorePromise (= 6.7.0) + - PromiseKit/Foundation (= 6.7.0) + - PromiseKit/UIKit (= 6.7.0) + - PromiseKit/CorePromise (6.7.0) + - PromiseKit/Foundation (6.7.0): - PromiseKit/CorePromise - - PromiseKit/UIKit (6.5.3): + - PromiseKit/UIKit (6.7.0): - PromiseKit/CorePromise - secp256k1.swift (0.1.4) - SipHash (1.2.2) - - web3swift (2.0.5): + - web3swift (2.1.2): - BigInt (~> 3.1) - - CryptoSwift (~> 0.12) + - CryptoSwift - PromiseKit (~> 6.4) - secp256k1.swift @@ -36,16 +36,16 @@ EXTERNAL SOURCES: CHECKOUT OPTIONS: web3swift: - :commit: 590bd35e8a32057860aa8dc707530004311bf0f9 + :commit: d48680a85c1ef94953d0ad2a630c483aeaf345a9 :git: https://github.com/bankex/web3swift.git SPEC CHECKSUMS: BigInt: 76b5dfdfa3e2e478d4ffdf161aeede5502e2742f - CryptoSwift: 16e78bebf567bad1c87b2d58f6547f25b74c31aa - PromiseKit: c609029bdd801f792551a504c695c7d3098b42cd + CryptoSwift: ff68c35a53e03177d31aaa2c1e8b3e010aeed6cb + PromiseKit: 453ddcc947fe7b302f3ef41882b81d31c554df7f secp256k1.swift: a7e7a214f6db6ce5db32cc6b2b45e5c4dd633634 SipHash: fad90a4683e420c52ef28063063dbbce248ea6d4 - web3swift: 2a33b0dd0fc8901f644d8f9234b0e9bc8611dc87 + web3swift: 868915a0de620a03510efbe712dcfbd576e61799 PODFILE CHECKSUM: 2b6b41ef6cd2c86449189776fb7c34f8d8e3f570 diff --git a/Example/Pods/Pods.xcodeproj/project.pbxproj b/Example/Pods/Pods.xcodeproj/project.pbxproj index fa6f5651..25df1024 100644 --- a/Example/Pods/Pods.xcodeproj/project.pbxproj +++ b/Example/Pods/Pods.xcodeproj/project.pbxproj @@ -7,309 +7,323 @@ objects = { /* Begin PBXBuildFile section */ - 00DEEE73E22AC921F031062A3D9C5156 /* CCM.swift in Sources */ = {isa = PBXBuildFile; fileRef = A5CFBE4D8E3F9DEA2A0B9280ACBA8F63 /* CCM.swift */; }; - 00ED5D7F78A04BDC265357F7A3CDCE09 /* Updatable.swift in Sources */ = {isa = PBXBuildFile; fileRef = CF9872E0791771BF0350C68BDEAF6AF1 /* Updatable.swift */; }; - 026239FD703574E53169D0DC8AA292EE /* W3Wallet.swift in Sources */ = {isa = PBXBuildFile; fileRef = 60DE2BE0351114B86AF47BE92CB7C7D2 /* W3Wallet.swift */; }; - 028F3F6682577C152719C42699BB5B38 /* HDPath.swift in Sources */ = {isa = PBXBuildFile; fileRef = C84BFBD3F53041E1948695C6454337AF /* HDPath.swift */; }; - 04BAB9000ECA1DF9525E0A15D715B307 /* RandomUInt64.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9A7A00EB5B71CAC6DD35AEAE46485BBB /* RandomUInt64.swift */; }; - 06DD628839774A8213A63C060C56B19C /* Web3+Eth.swift in Sources */ = {isa = PBXBuildFile; fileRef = 749BD30C9C4D786D355C9F1CABEF98EE /* Web3+Eth.swift */; }; - 07474E200D907A760D504EB3FC6A7F22 /* scalar.h in Headers */ = {isa = PBXBuildFile; fileRef = D13276283CD7BE067F63AF0D5D0A29ED /* scalar.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 08C658DE6B70998B6AA0A454C4F5038A /* ERC777.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0E56949D28EA9CBA3ED7ED03F14A5AD9 /* ERC777.swift */; }; - 09885D42FFCA38314B9C3722B830F8C4 /* Guarantee.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5180C96A3F2C4F6E6EB0F99A2C753E92 /* Guarantee.swift */; }; - 0ACC52E7C0FBCD847D5E76ADD0D29738 /* AnyPromise.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2BEE5B11D316AF65FE2E3566735866B1 /* AnyPromise.swift */; }; - 0D20B0A325288828626C4D45F455A1B5 /* ContractProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2B48AEFEB678203446638C184A53E64B /* ContractProtocol.swift */; }; - 0D386423BAA4D5E1CEF633C6F43C5DAB /* group_impl.h in Headers */ = {isa = PBXBuildFile; fileRef = AA506273FE20D402CC06546320B33A71 /* group_impl.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 0E03590A1B8206DB73BFC4D44E309259 /* NSURLSession+AnyPromise.m in Sources */ = {isa = PBXBuildFile; fileRef = 36CC33F5473C9EB5587AD3FACA6B90DE /* NSURLSession+AnyPromise.m */; }; - 0E2D05B2D05AA62BB5D2E04876E99498 /* scalar_4x64.h in Headers */ = {isa = PBXBuildFile; fileRef = 7E8748F7ECF11F369F96ACE546322EE1 /* scalar_4x64.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 0E595594925920B81CBDC1EF1F737727 /* Words and Bits.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0DE4AF58D3C89E3727F8B6D6C3597499 /* Words and Bits.swift */; }; - 0E6A45EE20C46F7F1CE099B22529573F /* UInt32+Extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = A88C4EC889F8A34347E1466483883CD7 /* UInt32+Extension.swift */; }; - 0F306B4B50ED2E5BE7A78C4C8021F81D /* Deprecations.swift in Sources */ = {isa = PBXBuildFile; fileRef = C74C89FA663360E4C4CEB90FC17A149C /* Deprecations.swift */; }; - 0FBEE3FEB65291C031A304C43802EDFB /* RIPEMD160+StackOveflow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 02648BEE196ADD1702A65942247D02ED /* RIPEMD160+StackOveflow.swift */; }; - 11EF81A67F3FDDC32B304F25A524FCA1 /* race.m in Sources */ = {isa = PBXBuildFile; fileRef = 63CF6BC7483FBAE952222D596BD2E68E /* race.m */; }; - 12AFAB4F9A4FD74CC19CF9D93FD30C83 /* Data+Extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = E5BA6E1C1560F64FFA539D817C873169 /* Data+Extension.swift */; }; - 1393314FA30ED036A4876EED12EF15DF /* BigInt.swift in Sources */ = {isa = PBXBuildFile; fileRef = 821E9E815EAEB0E70E5DF7D59FE0AB6A /* BigInt.swift */; }; - 13C6947A82DB058EEB44A0F5A8DF0789 /* Catchable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0B90682E4857A7251A6A239A39EEF830 /* Catchable.swift */; }; - 1418FE8C38CFB0A63618CB505778FF1A /* String Conversion.swift in Sources */ = {isa = PBXBuildFile; fileRef = A0FA541706B5ADB9326A007DA8BD2300 /* String Conversion.swift */; }; - 14806D7FD5B085A7D4588FAF8F9F635B /* ecmult_gen_impl.h in Headers */ = {isa = PBXBuildFile; fileRef = AEE7557D9671D8E7D88346293E0F7E63 /* ecmult_gen_impl.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 1639AF201D2EC2B4C22D32D642769159 /* UInt256.swift in Sources */ = {isa = PBXBuildFile; fileRef = 82F14EE05B1AAC078E6F0F71A1AA793F /* UInt256.swift */; }; - 191D98DF1C1E3CCE9AB9E96DF00024F0 /* BIP32Keystore.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1CC1BBFEB9186646426F4D9DB837A1C4 /* BIP32Keystore.swift */; }; - 19459F7215DBE976DBC3AC53F15FB75B /* CTR.swift in Sources */ = {isa = PBXBuildFile; fileRef = 50CFD7BE304368D7A74CBF1BFFA1AAB9 /* CTR.swift */; }; - 1B008A2AD11AC2E51AA80AE659893E85 /* Web3+Protocols.swift in Sources */ = {isa = PBXBuildFile; fileRef = EE39EC20BE1457BDB2703117FA2ACB90 /* Web3+Protocols.swift */; }; - 1D58E73F2527E655EC1C8CB88DEB8792 /* Web3+Personal.swift in Sources */ = {isa = PBXBuildFile; fileRef = BEA782E83F57637A2C7DF7A92935730D /* Web3+Personal.swift */; }; - 1DB9E073BAE8480BD8842743C2C05F15 /* fwd.h in Headers */ = {isa = PBXBuildFile; fileRef = 079C629B5788020E9B6E9175918EB8EA /* fwd.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 1DEE2646673123D23022A6F29F2FF6D1 /* CipherModeWorker.swift in Sources */ = {isa = PBXBuildFile; fileRef = E2F0FFC9F4D682EDCA0B3BC7E31D6391 /* CipherModeWorker.swift */; }; - 1DF2DCA7D1B1FB213AAFB4A28438DE92 /* Blowfish.swift in Sources */ = {isa = PBXBuildFile; fileRef = E4C4F155F450EE24DC1FD13F45386C50 /* Blowfish.swift */; }; - 1E5F30BFC89D31F998EFBEF3254C329D /* scratch_impl.h in Headers */ = {isa = PBXBuildFile; fileRef = 79E3B20627D544A8466149814AEFA771 /* scratch_impl.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 1E7305656D23EE84695B703082AE55DC /* Web3+BrowserFunctions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 65F20C4E8CA4E4A462F3A843282CE690 /* Web3+BrowserFunctions.swift */; }; - 1E7FC12161228EBFD7CD6B831381184C /* NSObject+Promise.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2D06DEDD2D057F88A07E3742F6C8FAD0 /* NSObject+Promise.swift */; }; - 1EE14F44BE6D7C6D015982EBCB62366B /* Square Root.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2FBCE753FC8595A1BE151276260F520D /* Square Root.swift */; }; - 216010F74B0575A6F630793E64F89821 /* Web3.swift in Sources */ = {isa = PBXBuildFile; fileRef = 970F0CA9F12749A406EBD38CDDAA5740 /* Web3.swift */; }; - 21E31BAD1F0D63BB14192C8F761E87DD /* SHA2.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0C8AA351E1BF3DB9691B5B0DC4FB8441 /* SHA2.swift */; }; - 22664597261BD089E9A0DD87E17FF3FF /* scalar_low_impl.h in Headers */ = {isa = PBXBuildFile; fileRef = 8FF22AC893AA714534268CF0B8BD3C1E /* scalar_low_impl.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 229D10EF2F680EC8E92034152F66BE75 /* SecureBytes.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5C066022A44585CDFE3840F458996ACC /* SecureBytes.swift */; }; - 2533CB9681E56E8A006EDE75B6354603 /* W3JsonRpc.swift in Sources */ = {isa = PBXBuildFile; fileRef = B8178035CFF1C3228050CB91F924167D /* W3JsonRpc.swift */; }; - 258FFE06F31BC089472CF47D7A2C3F85 /* BIP32KeystoreJSONStructure.swift in Sources */ = {isa = PBXBuildFile; fileRef = 119271CF472742A15F9FB023C2A22BC2 /* BIP32KeystoreJSONStructure.swift */; }; - 262FEAEA9268E13A7ABAE27954503213 /* join.m in Sources */ = {isa = PBXBuildFile; fileRef = 5063221CDC264E5A2ED2339F38D4BAB2 /* join.m */; }; - 26C0E4CA3B5B3B1620C2A0C0A4681CB3 /* Blowfish+Foundation.swift in Sources */ = {isa = PBXBuildFile; fileRef = ECCAE74A88BA613BDB2B2F222930867A /* Blowfish+Foundation.swift */; }; - 26ED3B4A63802E9DED24E0C547BD4923 /* PKCS5.swift in Sources */ = {isa = PBXBuildFile; fileRef = 93DEB02628C3E1469C57C640CA49C59F /* PKCS5.swift */; }; - 293CCF04B1CD98F1A39400371F4D00CD /* ChaCha20+Foundation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 84D489D11829908FBAFEB8A5A59234D9 /* ChaCha20+Foundation.swift */; }; - 29DC7A8A5277752A7D1D61F287A52632 /* EthereumFilterEncodingExtensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = FED107FB1FF8783BC60123B5BA4A9C8A /* EthereumFilterEncodingExtensions.swift */; }; - 2A8F6944A9B01C4D77F755677E3B50CD /* Exponentiation.swift in Sources */ = {isa = PBXBuildFile; fileRef = B8CF7825C8932FBA47190DC475A53563 /* Exponentiation.swift */; }; - 2B4AEEF5291AF4C54375103E51B33EED /* Strideable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 386A031384E6E93E4C37BFC1C57D6CB2 /* Strideable.swift */; }; - 2B69D3E45CE348BEB4C36A883D188351 /* firstly.swift in Sources */ = {isa = PBXBuildFile; fileRef = B009D31FEE7D3BE0CB7EEB2C217875A6 /* firstly.swift */; }; - 2D19BDB0F7134C18713B8FE45F9447BF /* basic-config.h in Headers */ = {isa = PBXBuildFile; fileRef = F6E539B82EBE806EC86C2538D5CA676E /* basic-config.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 2DA7536DB011C8F89FF06248F35A41D4 /* Generics.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5F67042A1503EB0A585A16EEECABFEAE /* Generics.swift */; }; - 2E3C651C3330F6BDAB71A8DC809CC1B2 /* scratch.h in Headers */ = {isa = PBXBuildFile; fileRef = EE1B0D2EA4E4C7F43A6BB45E4ECC86F1 /* scratch.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 2E9E79653CE32A5CCAF111E0A0848F2F /* W3Keystore.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9C6918A11DB214188B07B9DCE18DFC91 /* W3Keystore.swift */; }; - 30AC8FC3291451013680392EAFC69B5F /* ecmult_impl.h in Headers */ = {isa = PBXBuildFile; fileRef = 92839FBEF7C69236902CBD563DB62E07 /* ecmult_impl.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 3183F4FFCA7FC1E7669DDEBD6F3068BF /* scalar_4x64_impl.h in Headers */ = {isa = PBXBuildFile; fileRef = 5BCB141C2AD66EFA3AD7DECD3C6FF057 /* scalar_4x64_impl.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 337E9AF774389091DD7AD2D9487DA2E5 /* group.h in Headers */ = {isa = PBXBuildFile; fileRef = D94069ADF67B2CE1A6A5D2916CAAA63D /* group.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 341AB28AFD37E29B673B471B4DE58B15 /* dispatch_promise.m in Sources */ = {isa = PBXBuildFile; fileRef = 919162BDBDE666743F9C73DC90CB677A /* dispatch_promise.m */; }; - 3548478F9B5F7E250E753DC71D83E405 /* ecdsa_impl.h in Headers */ = {isa = PBXBuildFile; fileRef = 75C1E70EFA763C5FB6166F15A6E97411 /* ecdsa_impl.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 35BE2933B8308EFEFC5F251E05619EF2 /* W3Structs.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2865A1F0790AEEE206D97BC74C1377FE /* W3Structs.swift */; }; - 36B2B1556AB5F91648B54E0091DCF04C /* ERC20.swift in Sources */ = {isa = PBXBuildFile; fileRef = B094DC359EAC502A4B2406D5D6E4D5B3 /* ERC20.swift */; }; - 372112E3A4F6EE0A475594CB8EF4EC5A /* Web3+Infura.swift in Sources */ = {isa = PBXBuildFile; fileRef = BD572B91B1A51E98681DFE123FAE063A /* Web3+Infura.swift */; }; - 37741FB620689069751B06889B7C7143 /* Comparable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 850CFAA5DEC3E9DAF29BF716B6F75F74 /* Comparable.swift */; }; - 386C04B57606A7333AE2325F5AE02971 /* ecdsa.h in Headers */ = {isa = PBXBuildFile; fileRef = 90DF03C4F4D71A511DF87FC13EB75C04 /* ecdsa.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 38E7083E983BA79C749C3AC59EDABE28 /* Base58.swift in Sources */ = {isa = PBXBuildFile; fileRef = B458113D1114D726F10F855423359DEF /* Base58.swift */; }; - 391F3CCB47FB02644DE0AC7BC675A21C /* NSURLSession+AnyPromise.h in Headers */ = {isa = PBXBuildFile; fileRef = F9DAD357426BA9084B0C42826F5FCE03 /* NSURLSession+AnyPromise.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 395756D8D10472F1997AD9D85743D690 /* AbstractKeystore.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5E22DF8563505CC50CD46EB54EBA3CC7 /* AbstractKeystore.swift */; }; - 39CDE4B10C60D85F37F77C939C51E074 /* Shifts.swift in Sources */ = {isa = PBXBuildFile; fileRef = EC2EF05512DDF758167753109A67594E /* Shifts.swift */; }; - 3C0603FDFED655A9ADE73F9048693EEA /* ecmult_const_impl.h in Headers */ = {isa = PBXBuildFile; fileRef = 5549D9C8CD5FA71C4B6B763EA8FD7401 /* ecmult_const_impl.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 3C86CA3DC4242581A885D3AC5E113025 /* Array+Foundation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 78EE3CBED6A7332113213CB87281F694 /* Array+Foundation.swift */; }; - 3C9C6F689A3EEF8837F762099A808748 /* CryptoSwift-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = E0B272BFB9A50AA1C2A1E6A4DEEC093D /* CryptoSwift-dummy.m */; }; - 41FA5F812D03F3324A73143D621E3FC6 /* BloomFilter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0820072EFDECEC01B5AABAEF45B9EBDA /* BloomFilter.swift */; }; + 00DEEE73E22AC921F031062A3D9C5156 /* CCM.swift in Sources */ = {isa = PBXBuildFile; fileRef = 65EFC47AE39BE0A12634ED83A94B2D43 /* CCM.swift */; }; + 00ED5D7F78A04BDC265357F7A3CDCE09 /* Updatable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 49E6C3ACB6B1F4B2BAC07F2D9EB6C7D1 /* Updatable.swift */; }; + 01DCA139E1F1C80D46ACC43A51C6D9D4 /* Promise.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3E5082D2CE9B4D00FA5D8FEFFEF3B6A4 /* Promise.swift */; }; + 029FAE00474EDA0627BCF9F2CD87EF23 /* Int+Sequence.swift in Sources */ = {isa = PBXBuildFile; fileRef = FC96A71197252E66FDB9A044EDB45B19 /* Int+Sequence.swift */; }; + 04BAB9000ECA1DF9525E0A15D715B307 /* RandomUInt64.swift in Sources */ = {isa = PBXBuildFile; fileRef = 38DB7DDD12CCFE738AAB60B319720E14 /* RandomUInt64.swift */; }; + 05CE3F98A71C6CBFFEF6A94D105AF4D5 /* UInt256.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBA1D03B12D1457183331D1577E8DCCF /* UInt256.swift */; }; + 06D17F21343455D4DA5475301CA6175D /* BlockExplorer.swift in Sources */ = {isa = PBXBuildFile; fileRef = F52E2F34F6C0A39475E54FB690367768 /* BlockExplorer.swift */; }; + 0739DAC98BAB9036D867A53B6E7FFDC3 /* Transaction.swift in Sources */ = {isa = PBXBuildFile; fileRef = 10283EB72FA757EC47D2155F1DD1D56D /* Transaction.swift */; }; + 07474E200D907A760D504EB3FC6A7F22 /* scalar.h in Headers */ = {isa = PBXBuildFile; fileRef = 14629FAD6FB40143B0A3DC72FA570C0C /* scalar.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 07FA33E064C5C6BB7A91F516F4BF20D6 /* Utilities.swift in Sources */ = {isa = PBXBuildFile; fileRef = F2F000C149E4ED4F5E4310C69BF08C13 /* Utilities.swift */; }; + 09000ECB5E6C86734F16E5A3EFE1F077 /* W3TransactionIntermediate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3475FA4FA24DF5C25B8E43D4759649C4 /* W3TransactionIntermediate.swift */; }; + 0A05FFF84357AD8784F945295EA9FDD2 /* Web3+Protocols.swift in Sources */ = {isa = PBXBuildFile; fileRef = C5C110E986B53B59CF02FF0B9A5B95DC /* Web3+Protocols.swift */; }; + 0A21FEC0A192676A240F8BE2E2E5BC48 /* W3Provider.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3F7C2D4D0DA76502C4B0BB1EAB5EB6AA /* W3Provider.swift */; }; + 0B7C7AAD2BC34D68CB4AD1D5346E8302 /* Web3+Wallet.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4B52C0A803796E2C08EA0D308B88F98C /* Web3+Wallet.swift */; }; + 0D386423BAA4D5E1CEF633C6F43C5DAB /* group_impl.h in Headers */ = {isa = PBXBuildFile; fileRef = 7EC3C4EEC5C8A68AA30BF498DA623094 /* group_impl.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 0E2D05B2D05AA62BB5D2E04876E99498 /* scalar_4x64.h in Headers */ = {isa = PBXBuildFile; fileRef = 962FB73937BD92EDB30DC9B82C99702C /* scalar_4x64.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 0E595594925920B81CBDC1EF1F737727 /* Words and Bits.swift in Sources */ = {isa = PBXBuildFile; fileRef = FC3D7041F290CB773584DD815DDC6305 /* Words and Bits.swift */; }; + 0E6A45EE20C46F7F1CE099B22529573F /* UInt32+Extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = CAD3D8A9F3681B5E12B50EBBCCEBE7E6 /* UInt32+Extension.swift */; }; + 0E87142CC57DD6E6B0899A1B6DFAEA17 /* NSTask+AnyPromise.m in Sources */ = {isa = PBXBuildFile; fileRef = DCD7DCA1175FD82BE4138DA3B1FD02C2 /* NSTask+AnyPromise.m */; }; + 0F3AD303E5DB1DD0E64BF8FCEE1E00E0 /* Web3+Infura.swift in Sources */ = {isa = PBXBuildFile; fileRef = A045D10CD29258F6A97742DD823EF075 /* Web3+Infura.swift */; }; + 107E163E373FAEECD62533926F597605 /* Web3+BrowserFunctions.swift in Sources */ = {isa = PBXBuildFile; fileRef = F609DABA356D5CD0D734B6790E4EBE79 /* Web3+BrowserFunctions.swift */; }; + 11A2CF305FE397CA0DBB6E54C6E10E7C /* Deprecations.swift in Sources */ = {isa = PBXBuildFile; fileRef = 667ABBF819D04B957E813AE14C1D51A0 /* Deprecations.swift */; }; + 127F1E94C7745F7E375A3AD2F4ED6BAA /* Migration-iOS.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6846011EC9EC59250AC077A4C1AE3145 /* Migration-iOS.swift */; }; + 1393314FA30ED036A4876EED12EF15DF /* BigInt.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6783D1511AF048A484CE1EFA28E00CD9 /* BigInt.swift */; }; + 1418FE8C38CFB0A63618CB505778FF1A /* String Conversion.swift in Sources */ = {isa = PBXBuildFile; fileRef = A09BA3EFE288EC8F646A5377B0E2945B /* String Conversion.swift */; }; + 14806D7FD5B085A7D4588FAF8F9F635B /* ecmult_gen_impl.h in Headers */ = {isa = PBXBuildFile; fileRef = 79631491C7BD42B8704F0698EF4A31F3 /* ecmult_gen_impl.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 14B647E26C4B44EF0EEBA5DF5BF0A45C /* Configuration.swift in Sources */ = {isa = PBXBuildFile; fileRef = 03BD28F1C61CE918C64BF2FDA52CAEE9 /* Configuration.swift */; }; + 186702DC285177EF3D8DCBBF360F315B /* ERC888.swift in Sources */ = {isa = PBXBuildFile; fileRef = 30C0A341948993A6DF7177A35DC594F3 /* ERC888.swift */; }; + 19459F7215DBE976DBC3AC53F15FB75B /* CTR.swift in Sources */ = {isa = PBXBuildFile; fileRef = 242D6CA2000FE946CF5051C82CDF52B7 /* CTR.swift */; }; + 19990D5AA9261FBBC2FBEA77CC0D5FB7 /* ContractABIv2.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9D8BAC3CAE91F5395F5D71E71BFED4A8 /* ContractABIv2.swift */; }; + 1A1730CCE6EF41A01CA9A4E5B2B3804F /* TransactionSigner.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3843BF01A53C05BBE20F935F232DFCC0 /* TransactionSigner.swift */; }; + 1AA756C38372CFF060BDDAE7482CB2B7 /* SolidityDataReader.swift in Sources */ = {isa = PBXBuildFile; fileRef = C2180A1812F2652CA38047EF187FD338 /* SolidityDataReader.swift */; }; + 1AAEABEE6201A6C8516C71FD29BEF762 /* web3swift-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 1AEAB4BC85800666C7F02E1A235CC06C /* web3swift-dummy.m */; }; + 1C629A619D140BC963BB016FAE396BD7 /* UIViewController+AnyPromise.m in Sources */ = {isa = PBXBuildFile; fileRef = 5793F1F10AC6DBD8AE7491B8804E2440 /* UIViewController+AnyPromise.m */; }; + 1C90F1D5F747A51BFA7D2DF3942B3B0E /* ComparisonExtensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 900CBD85D02FC90ECED5E0E2BEA39E71 /* ComparisonExtensions.swift */; }; + 1CB6489CA58A3986396F85387A8D82ED /* ABIv2Parsing.swift in Sources */ = {isa = PBXBuildFile; fileRef = AA467AEC1B0090C21020463302A20F76 /* ABIv2Parsing.swift */; }; + 1DB9E073BAE8480BD8842743C2C05F15 /* fwd.h in Headers */ = {isa = PBXBuildFile; fileRef = 93F777705930C06821199E58AA1F568F /* fwd.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 1DEE2646673123D23022A6F29F2FF6D1 /* CipherModeWorker.swift in Sources */ = {isa = PBXBuildFile; fileRef = 50C46CB5675D6E2C1833E910D6FF7AE6 /* CipherModeWorker.swift */; }; + 1DF2DCA7D1B1FB213AAFB4A28438DE92 /* Blowfish.swift in Sources */ = {isa = PBXBuildFile; fileRef = C0969D3EDAA005EBD42464516BD5C56B /* Blowfish.swift */; }; + 1E5F30BFC89D31F998EFBEF3254C329D /* scratch_impl.h in Headers */ = {isa = PBXBuildFile; fileRef = C37382FBDCE79114B671BD37C6D37EC2 /* scratch_impl.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 1EE14F44BE6D7C6D015982EBCB62366B /* Square Root.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5EB009DF65882D750C273CCE2CB45D5D /* Square Root.swift */; }; + 1F44909735D8EA085FD0DB8CB0907393 /* W3TxPool.swift in Sources */ = {isa = PBXBuildFile; fileRef = EEF659E53C622B88DC815CADEFD126A7 /* W3TxPool.swift */; }; + 21E31BAD1F0D63BB14192C8F761E87DD /* SHA2.swift in Sources */ = {isa = PBXBuildFile; fileRef = DDE40461E5080FE6F9DC8C2AA0F353F7 /* SHA2.swift */; }; + 22664597261BD089E9A0DD87E17FF3FF /* scalar_low_impl.h in Headers */ = {isa = PBXBuildFile; fileRef = E53553C348517E4DA099CE270803D0E0 /* scalar_low_impl.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 229D10EF2F680EC8E92034152F66BE75 /* SecureBytes.swift in Sources */ = {isa = PBXBuildFile; fileRef = 255DF073A7D6A6941C3A0AE4F19508A9 /* SecureBytes.swift */; }; + 22B1ED8B800CE79DF2073C7BACC8DE41 /* NSURLSession+Promise.swift in Sources */ = {isa = PBXBuildFile; fileRef = 65F6465A8248AE7707578E9509067C62 /* NSURLSession+Promise.swift */; }; + 23700D881BAA3F3FB5BCB2B8D9E52754 /* ContractProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = CB90AB92111D7062C77D54D291E3B749 /* ContractProtocol.swift */; }; + 26C0E4CA3B5B3B1620C2A0C0A4681CB3 /* Blowfish+Foundation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 60BB5F3EF02C6E480C288AD98113906D /* Blowfish+Foundation.swift */; }; + 26ED3B4A63802E9DED24E0C547BD4923 /* PKCS5.swift in Sources */ = {isa = PBXBuildFile; fileRef = E35D7D453EBB888C06442657CB51953E /* PKCS5.swift */; }; + 293CCF04B1CD98F1A39400371F4D00CD /* ChaCha20+Foundation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 05FC826C8AB6222C730376BB9D176956 /* ChaCha20+Foundation.swift */; }; + 2A8F6944A9B01C4D77F755677E3B50CD /* Exponentiation.swift in Sources */ = {isa = PBXBuildFile; fileRef = B1A071AD824600DC0941E442980DC731 /* Exponentiation.swift */; }; + 2B4AEEF5291AF4C54375103E51B33EED /* Strideable.swift in Sources */ = {isa = PBXBuildFile; fileRef = EBDEE03DAA19F3D22573E37547E4918F /* Strideable.swift */; }; + 2B64D99510BDB17994BB7B1ED0BF42B6 /* UIView+Promise.swift in Sources */ = {isa = PBXBuildFile; fileRef = B7757AC1017D1C193F42A197E6C70C07 /* UIView+Promise.swift */; }; + 2D19BDB0F7134C18713B8FE45F9447BF /* basic-config.h in Headers */ = {isa = PBXBuildFile; fileRef = 395474270A0297AC92A048DAF3FE999D /* basic-config.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 2D6326603ACCAD15FD6108EB2A6653B4 /* Web3+Options.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3E2913F98119802161D912CA04ECE41A /* Web3+Options.swift */; }; + 2DA7536DB011C8F89FF06248F35A41D4 /* Generics.swift in Sources */ = {isa = PBXBuildFile; fileRef = AFD0071BB4B3D77C0F75E4FF7B3E995D /* Generics.swift */; }; + 2E3234BC5FD506287C6C4AF45599B557 /* Web3+HttpProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3FDB735EA365FD5213A318E67F59530C /* Web3+HttpProvider.swift */; }; + 2E3C651C3330F6BDAB71A8DC809CC1B2 /* scratch.h in Headers */ = {isa = PBXBuildFile; fileRef = 1984A5610D10DEF0E3AF19C8ACC2D5FA /* scratch.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 2EEC63EA7B08FF4F31EC761D60822F83 /* BIP39+WordLists.swift in Sources */ = {isa = PBXBuildFile; fileRef = 720EDFF092375EC290D9C09BFBF90F03 /* BIP39+WordLists.swift */; }; + 2FE364CB26EAB9EEB09FCAB1172D6AFA /* W3Personal.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0BFA512E6D88B1925B2ACC11DE5A2FB6 /* W3Personal.swift */; }; + 30AC8FC3291451013680392EAFC69B5F /* ecmult_impl.h in Headers */ = {isa = PBXBuildFile; fileRef = 742739CD628C4062D619F3951CC09D08 /* ecmult_impl.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 30E1A4D91A103060E3609B9D6FE1AE5E /* Web3+Utils.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0A82257AD30BC58BB4AD3B96AF9306E9 /* Web3+Utils.swift */; }; + 3183F4FFCA7FC1E7669DDEBD6F3068BF /* scalar_4x64_impl.h in Headers */ = {isa = PBXBuildFile; fileRef = 05D3ACE550E15168F74E25A55B5F17B7 /* scalar_4x64_impl.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 323F3DDECBC48908E11D7CC0ECC26D49 /* Cryptor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7D7495DBAC5F1ED9F84E5B00E251B935 /* Cryptor.swift */; }; + 337E9AF774389091DD7AD2D9487DA2E5 /* group.h in Headers */ = {isa = PBXBuildFile; fileRef = B899063BEC35D5AD5473A8F572E13A83 /* group.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 3548478F9B5F7E250E753DC71D83E405 /* ecdsa_impl.h in Headers */ = {isa = PBXBuildFile; fileRef = 7E9CB26817958C91B5A385C376A5A90E /* ecdsa_impl.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 37741FB620689069751B06889B7C7143 /* Comparable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C9671380679AC08F2DFC9275D8F55EC /* Comparable.swift */; }; + 386C04B57606A7333AE2325F5AE02971 /* ecdsa.h in Headers */ = {isa = PBXBuildFile; fileRef = 3604B765CC022357C0DB3C1EA0489564 /* ecdsa.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 386F89D82050BEC19D007E4FF2272993 /* LibSecp256k1Extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBA4489D2973CDCF9B98D46CC98F96B5 /* LibSecp256k1Extension.swift */; }; + 391F3CCB47FB02644DE0AC7BC675A21C /* NSURLSession+AnyPromise.h in Headers */ = {isa = PBXBuildFile; fileRef = C77ADA7F1C2F95CE5E392062E46969BC /* NSURLSession+AnyPromise.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 39C6139EC9D53EC9729406F023C58A85 /* Resolver.swift in Sources */ = {isa = PBXBuildFile; fileRef = 694ECE7416177A3D28F11658BC2743D5 /* Resolver.swift */; }; + 39CDE4B10C60D85F37F77C939C51E074 /* Shifts.swift in Sources */ = {isa = PBXBuildFile; fileRef = 84CBA06B4BB09A057F0833F1217E931C /* Shifts.swift */; }; + 3BE6DFE051DFEACB6768CEFBED9618AD /* Catchable.swift in Sources */ = {isa = PBXBuildFile; fileRef = BD8E7D12304D7DEC65B66327BAFD1B78 /* Catchable.swift */; }; + 3C0603FDFED655A9ADE73F9048693EEA /* ecmult_const_impl.h in Headers */ = {isa = PBXBuildFile; fileRef = D82B1A92AAEA650E28CB709582C1661C /* ecmult_const_impl.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 3C86CA3DC4242581A885D3AC5E113025 /* Array+Foundation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9F48404C487B6785AEC33EE962112684 /* Array+Foundation.swift */; }; + 3C9C6F689A3EEF8837F762099A808748 /* CryptoSwift-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = C5B96D994F55E397FA660DD3F1916EE9 /* CryptoSwift-dummy.m */; }; + 409C59E1F24E79C3B6C70C27EF8CD1A0 /* PrivateKey.swift in Sources */ = {isa = PBXBuildFile; fileRef = CDD1D7FEEEDEF7A24C01454BE7718CA5 /* PrivateKey.swift */; }; 421E39B622D5C71234D0578A39D43811 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 74E404AA6957590324067E330E0EC533 /* UIKit.framework */; }; - 42911B8E04109940D27D03B76FDB71DA /* Integer Conversion.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0DCC1E81F394DF2AC3DAF0E19A80E4A4 /* Integer Conversion.swift */; }; - 438458433C9E5C3B7AD7C982D6166E89 /* Int+Sequence.swift in Sources */ = {isa = PBXBuildFile; fileRef = 64484EF028FFF44D370822A9870871DD /* Int+Sequence.swift */; }; - 4445881820837992DC68F1D4E31B488C /* AnyPromise.h in Headers */ = {isa = PBXBuildFile; fileRef = 7CBBB4AA48A3F01981391F1DAEF3BEFB /* AnyPromise.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 44C651789C9D7603682BBC3CA7F515BA /* Web3+EventParser.swift in Sources */ = {isa = PBXBuildFile; fileRef = 25FCF5EDD3A59297D455F8C0D77C0271 /* Web3+EventParser.swift */; }; - 451228AE4305CA28C08753A46058DCDE /* ecmult_const.h in Headers */ = {isa = PBXBuildFile; fileRef = 6773F488C4EFA761D4CA8C902ACD84E0 /* ecmult_const.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 4584BECF3ECC5FE2E920EC1176627E6A /* ABIv2Parsing.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2914E9E7A43D92ACE3A565AA03CF13B5 /* ABIv2Parsing.swift */; }; - 45FAEB66848EBEDA2CBC1CD3AA1EC1ED /* secp256k1_ecdh.h in Headers */ = {isa = PBXBuildFile; fileRef = E02FD2501C22AB2950180394C6721829 /* secp256k1_ecdh.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 480F648AB704DA8D3360D9D79FB3CE35 /* CMAC.swift in Sources */ = {isa = PBXBuildFile; fileRef = CBFA59603A52D5D5447635CEAC0029F6 /* CMAC.swift */; }; - 49E500C26600B6A3EA6A4C49A4DA48E7 /* W3TransactionIntermediate.swift in Sources */ = {isa = PBXBuildFile; fileRef = CCC6FEF199CF9F3C309996C7BFC67688 /* W3TransactionIntermediate.swift */; }; - 4AFDC32E1BA51FE83F1E2D2799ADB126 /* AnyPromise.m in Sources */ = {isa = PBXBuildFile; fileRef = AD74DF3192DC1604682334632F072502 /* AnyPromise.m */; }; - 4BC4B77152CA3AFE4A0BA7B598520145 /* NSNotificationCenter+Promise.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0F34FEA32803AAFCF536476052C8914A /* NSNotificationCenter+Promise.swift */; }; - 4CD711E88E990E7B677A41337AB9DF21 /* scalar_low.h in Headers */ = {isa = PBXBuildFile; fileRef = BE6605934B022E7FFC97ACD587CB4F97 /* scalar_low.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 4CFF75EF09263579007C95CD2C296463 /* Subtraction.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8DDE1AEEEA9497540306023E3450CB78 /* Subtraction.swift */; }; - 4D2254B09135DF9A254B5CDF645CF85F /* Batching.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1E5B02857A6C437A754788617BD9DABE /* Batching.swift */; }; - 4E2261305BEC77DE29742E2D96E816E4 /* PKCS7Padding.swift in Sources */ = {isa = PBXBuildFile; fileRef = FBAEFAC24322C028D3DB90BCDD870626 /* PKCS7Padding.swift */; }; - 4F6ED8ADD7B24315D4F8D18C227D3ACD /* Primitive Types.swift in Sources */ = {isa = PBXBuildFile; fileRef = B92C1CC0F25F8372ACC3418E1047D167 /* Primitive Types.swift */; }; - 4F97A5BBBEF9340BDE4FAB564A77806C /* SolidityFunction.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0B3E4F1990198DA8AE58A69EA50AE7B /* SolidityFunction.swift */; }; - 502126F1A8B3D5B6EDD0169B808BDB7F /* util.h in Headers */ = {isa = PBXBuildFile; fileRef = 8FA1D08204CECC8D92DA4EDBBACD6E71 /* util.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 50BA9F0E508241B22161872303C9B9E5 /* TransactionSigner.swift in Sources */ = {isa = PBXBuildFile; fileRef = 86A6D20646EEFF1A6CBE0988443EA223 /* TransactionSigner.swift */; }; - 51219E593C7F3B89AFCA81E79BC72D5F /* SolidityDataReader.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8177956DFAD008E7BEA6CF42826C883C /* SolidityDataReader.swift */; }; - 5293C0D16CC13DF8959DF52B586A76FD /* secp256k1-config.h in Headers */ = {isa = PBXBuildFile; fileRef = EBE187EBCD715E130CAD07F32E199951 /* secp256k1-config.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 55186252139D1651AB120B392E2AE6A1 /* scalar_8x32_impl.h in Headers */ = {isa = PBXBuildFile; fileRef = 633BDDDAF5229011660D994282445E53 /* scalar_8x32_impl.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 55D2B343E0179422797E53053EBAFC1A /* field_5x52.h in Headers */ = {isa = PBXBuildFile; fileRef = 2E3673DDA300BDEBBC5701EA35C231A2 /* field_5x52.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 55E5167B9B4E79213A65C737FD3A4A3C /* RLP.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2B72FAF0466F332EC9546BEFD0640340 /* RLP.swift */; }; - 587767F7C55EAA6BDF5CF8133AC0B559 /* W3Web3.swift in Sources */ = {isa = PBXBuildFile; fileRef = 11433713C0BB0884D8109DCE92B84AF5 /* W3Web3.swift */; }; - 5942833463D5DA08921E2A8C92F22CCB /* StreamEncryptor.swift in Sources */ = {isa = PBXBuildFile; fileRef = E613D1C0FCB100E8D6B26B172F667291 /* StreamEncryptor.swift */; }; - 59B1A36C1EAE04A8BD462136C3ACD005 /* UInt16+Extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = F768F184545D5B6D397FB6AEA49C6576 /* UInt16+Extension.swift */; }; - 5AE046E6BFD3D64FA7882E7732CD62BB /* W3Eth.swift in Sources */ = {isa = PBXBuildFile; fileRef = 50E4355CB3D086EA6B348922D815599A /* W3Eth.swift */; }; - 5BAB01EB7EFEF13E5B91FA1CBA4D5B0B /* Rabbit.swift in Sources */ = {isa = PBXBuildFile; fileRef = 24137077676C831A6D7DB3A4A5D0DF0D /* Rabbit.swift */; }; - 5BAB3C81DF0071176F05167F4E8A5FC7 /* Thenable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 41D9268646A911E21DF5AEC5784D87F5 /* Thenable.swift */; }; - 5C08F9341123A9BA20F0365DF963EC70 /* EthereumKeystoreV3.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4AD941010F2B34FF0A83E014985D3E1F /* EthereumKeystoreV3.swift */; }; - 5CC7E0B125A50512F6C7D358730C4565 /* Array+Extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = E40469C5303F3C3CE3FF070E010129D0 /* Array+Extension.swift */; }; - 5CFBC87EF56AF8F070374C73C3B8075B /* BlockEncryptor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 25AC0C3A7FBE683D9C77F7D81072A064 /* BlockEncryptor.swift */; }; - 5D161DF9FE1473EAF6A4192D9A94A069 /* Web3+Instance.swift in Sources */ = {isa = PBXBuildFile; fileRef = 16543E04CF5DE177695D8D12EFCA7500 /* Web3+Instance.swift */; }; - 5DCE1131F0F9161256B72AEB448568FC /* ABIv2ParameterTypes.swift in Sources */ = {isa = PBXBuildFile; fileRef = F01DF36B24F5F7C512C4E516EB80E9A2 /* ABIv2ParameterTypes.swift */; }; - 5E7AF53072889D81A2E35864994DE920 /* CustomStringConvertible.swift in Sources */ = {isa = PBXBuildFile; fileRef = 32F4C75362A1F8CB3872EC49486E8A8F /* CustomStringConvertible.swift */; }; - 608F6D3A0FA38C84FC184A50BC616E98 /* EthURL.swift in Sources */ = {isa = PBXBuildFile; fileRef = EA3F60C02F6F7CFBDE7EE6E2D800F4B8 /* EthURL.swift */; }; - 60A2704235DCEC696FC1E6893E7E1C67 /* afterlife.swift in Sources */ = {isa = PBXBuildFile; fileRef = 54E530AA65A2CFFE4F42131EB97DB4C1 /* afterlife.swift */; }; - 6167DEEE8AF37D1DDB54B9357253BA2D /* Web3+Methods.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3920B1C5D19CDCFBB3C7E8FE3815B867 /* Web3+Methods.swift */; }; - 61A22A7861DB5A0551D01D1EFAE43A10 /* CBC.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB076238E4DDFDDE07432DAA74D2FB6F /* CBC.swift */; }; - 6245D5C19D6FE2602E50DE397372DED0 /* OFB.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3BC8DFEEF8669C655454332162D20485 /* OFB.swift */; }; - 62468F214144212D8A0CDEAA38F56482 /* CBCMAC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 860BDC01E5E2DB2B99E53E95B8F8B88C /* CBCMAC.swift */; }; - 626C000318913C99E8BE22A4F2382733 /* Web3+Structures.swift in Sources */ = {isa = PBXBuildFile; fileRef = 06330FEEF0349472276FB95B3D6183FD /* Web3+Structures.swift */; }; - 62D73FBDE1C86402790D9209D183DD0A /* String+FoundationExtension.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1C98760F994CA395F12A34E14016C07C /* String+FoundationExtension.swift */; }; - 650EAC9DA5EA046AD8EC6B52EF18B28B /* KeystoreV3JSONStructure.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4D45593787CC7A3AC5EFD798FDB7825A /* KeystoreV3JSONStructure.swift */; }; - 66D318DC0C7D096C2A485F17975458E4 /* scalar_impl.h in Headers */ = {isa = PBXBuildFile; fileRef = E4D76EAF3F4783A0D597A834542FB777 /* scalar_impl.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 67A8D698C61299BF2F75B889F7775E15 /* TxPool.swift in Sources */ = {isa = PBXBuildFile; fileRef = B96A1AAD67F799566466FD3C0F9A0634 /* TxPool.swift */; }; - 68AA3ABA7811B88389544549188AAC4E /* AEADChaCha20Poly1305.swift in Sources */ = {isa = PBXBuildFile; fileRef = BC41DE6F77577FE573D6343D268D6DCB /* AEADChaCha20Poly1305.swift */; }; - 69794E1DDF0FA35F5E3C23C97A0EABC3 /* StreamDecryptor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2073146793BFFD098C78F2FD8B040475 /* StreamDecryptor.swift */; }; - 699F80AD3A7CBE023E82AD142092A75C /* field_5x52_int128_impl.h in Headers */ = {isa = PBXBuildFile; fileRef = D707D146525311DE82D6A611286E6313 /* field_5x52_int128_impl.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 6A78138C108253207A274D2B003E5EEF /* Padding.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7A205F56A261C5635384453CD770A9A3 /* Padding.swift */; }; - 6BAD817669837BE8773C65D0DE1632F9 /* NSTask+AnyPromise.m in Sources */ = {isa = PBXBuildFile; fileRef = 5FD885BF1ED35CF59BDA587169EA3706 /* NSTask+AnyPromise.m */; }; - 6BED780D2AEB887F15E5AEBFE6087C58 /* IBAN.swift in Sources */ = {isa = PBXBuildFile; fileRef = 694D22A55022028256DA14464A953049 /* IBAN.swift */; }; - 6C42D4195CC05A5A35D8D07996D5F63A /* EthereumTransaction.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0E4CC17AF81A45606F71ACC5C8BF7831 /* EthereumTransaction.swift */; }; - 6C6469B5267DB31665960C5E93DA2301 /* PMKUIKit.h in Headers */ = {isa = PBXBuildFile; fileRef = 453D568D4E91B73895395AC74DE1EFC2 /* PMKUIKit.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 6D52F758A127E67A2DEEDD3556FD5BBC /* W3Personal.swift in Sources */ = {isa = PBXBuildFile; fileRef = E5A6554F8AEDB3FD77D19CB42B8B45FB /* W3Personal.swift */; }; - 6E698FB3F3F30AB4A7A0A4859D00C51E /* secp256k1_recovery.h in Headers */ = {isa = PBXBuildFile; fileRef = 8A9B39E6446072BF453B2437F30CEE20 /* secp256k1_recovery.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 6E8CF630AF608DE1484BF70CD8C89B03 /* Guides.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8306161F4872280FE26348C2C644E8F2 /* Guides.swift */; }; - 6EBEEEDAACA227734E95EA5211665100 /* GCD.swift in Sources */ = {isa = PBXBuildFile; fileRef = EB516A8AF2B1AC9ACACF5A35763798A2 /* GCD.swift */; }; - 6F5D3081C1136AF20F2BEFBFC877AFD1 /* PCBC.swift in Sources */ = {isa = PBXBuildFile; fileRef = D7486EE98C03CFA16F87C3B85966BCAC /* PCBC.swift */; }; - 6FBF005BAE8E33BA228A701C5C965585 /* AES.swift in Sources */ = {isa = PBXBuildFile; fileRef = 86774E8CA3F133E4EECF266C53D589F4 /* AES.swift */; }; - 705057B935AF1C1B2A733B1FF1A225A8 /* hash.h in Headers */ = {isa = PBXBuildFile; fileRef = 4767B3A87DD2A40D67DAE811DD600320 /* hash.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 70C753C56B4C246E2B038E4F94BF0BBF /* Codable.swift in Sources */ = {isa = PBXBuildFile; fileRef = EC41FE6DBE1388C1063DD7390D310897 /* Codable.swift */; }; - 7113CF124A424A48F27F9D3B5451BF71 /* Process+Promise.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6CD08EAB72131642457E20FC2486DB9D /* Process+Promise.swift */; }; - 712F70052262C4439A5281D06A46EA30 /* num_gmp_impl.h in Headers */ = {isa = PBXBuildFile; fileRef = A677A6E6672644837EF729E6B6DE4DC5 /* num_gmp_impl.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 718236F77969D41EA45AE28A7EF14E52 /* Hashable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1DD3DFF154E8D99B2DE5E1EFEF16F8DA /* Hashable.swift */; }; - 722E238BD6562DA9C1B5F557228A33FE /* GCM.swift in Sources */ = {isa = PBXBuildFile; fileRef = CFE0BF56E237BBF2974C9532E8B75CA5 /* GCM.swift */; }; - 7298B3320AFFAF6A797B5D57095D59F1 /* Resolver.swift in Sources */ = {isa = PBXBuildFile; fileRef = BAE5C81D4458D9210862896E612FDF8E /* Resolver.swift */; }; - 72F0311BAEBB1B6D3AB260781A92C195 /* ECB.swift in Sources */ = {isa = PBXBuildFile; fileRef = D9561DEDFA26221B06990218E6A83A03 /* ECB.swift */; }; - 7450413BC0261000607E931165553143 /* PBKDF2.swift in Sources */ = {isa = PBXBuildFile; fileRef = 08B7F1EEF1790199C348BD616B3E24AE /* PBKDF2.swift */; }; - 76577D0616D1280BF37FA6DB670AD771 /* SipHash-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 591C88999022984BA7FD9CBF38A55EB1 /* SipHash-umbrella.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 76A7C5D7F7CDA839F242E5C2F70446DB /* field.h in Headers */ = {isa = PBXBuildFile; fileRef = 328147F8A8C036411A1541CA81D02364 /* field.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 772BFD1ADF3059C5C2D335B7C981D69F /* Cryptors.swift in Sources */ = {isa = PBXBuildFile; fileRef = A2073AC6CEAAC4B979040486A96E13CA /* Cryptors.swift */; }; - 77C24A46F5989F2C6D8204323DE04B85 /* SolidityDataWriter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 927BFB6FE81B70D5A8F83FF4CD9D7C4A /* SolidityDataWriter.swift */; }; - 77DE28EB2CFA86C010D6F808222E882B /* PromiseKit-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 4B93AEF08CD9D0B3A95B4578D9A49F1C /* PromiseKit-dummy.m */; }; - 789EC85465FD8422787D20DA10B6CCB1 /* ABIv2Elements.swift in Sources */ = {isa = PBXBuildFile; fileRef = E6826990B731C0B50429A66E655192B0 /* ABIv2Elements.swift */; }; - 79033690933B65B3E5969921B70801B5 /* Web3+TransactionIntermediate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8184617ED482F52A2821B8189EFBD4D5 /* Web3+TransactionIntermediate.swift */; }; - 7913FBE09D1518CC0396878C1157A6C2 /* ecmult.h in Headers */ = {isa = PBXBuildFile; fileRef = E43855A106DB2FA14C270CA0B86466FB /* ecmult.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 79F434A161E7A3EE5764F8D8E4A852C3 /* HMAC.swift in Sources */ = {isa = PBXBuildFile; fileRef = C0426A8B63CD5FA8241B7EA585618CD6 /* HMAC.swift */; }; - 7AA95C110DFA1AA3F7FFC260056A2443 /* Data+Extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7654723C2954A66EF43A29E64EAC0FAB /* Data+Extension.swift */; }; - 7BD023CE4E893B6C135E34987A4140E1 /* ERC888.swift in Sources */ = {isa = PBXBuildFile; fileRef = 94D6DC86975FFB0F265FD99E9CAB5366 /* ERC888.swift */; }; + 42911B8E04109940D27D03B76FDB71DA /* Integer Conversion.swift in Sources */ = {isa = PBXBuildFile; fileRef = E5C6A1E5B7EF04119F2F309D18A95729 /* Integer Conversion.swift */; }; + 4445881820837992DC68F1D4E31B488C /* AnyPromise.h in Headers */ = {isa = PBXBuildFile; fileRef = AA19C7CC5D150B8C69FDBF08FAC94C89 /* AnyPromise.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 451228AE4305CA28C08753A46058DCDE /* ecmult_const.h in Headers */ = {isa = PBXBuildFile; fileRef = BBF45D24368569AE5FC48EE9CA885CAF /* ecmult_const.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 45FAEB66848EBEDA2CBC1CD3AA1EC1ED /* secp256k1_ecdh.h in Headers */ = {isa = PBXBuildFile; fileRef = 6E85BBF0B3C0C1A72F1E790B8180A9BB /* secp256k1_ecdh.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 460FD1307C066F894E0A6412782AA1EC /* Random.swift in Sources */ = {isa = PBXBuildFile; fileRef = F946CF617B872338F47E15C5D5EE083E /* Random.swift */; }; + 4650F78933C4BAAEECE7D738CB51EFBC /* CryptoExtensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 66E1AD388CBF628B795AA7DE8A35147C /* CryptoExtensions.swift */; }; + 477E4C238921B86C095541099045C949 /* RLP.swift in Sources */ = {isa = PBXBuildFile; fileRef = D2F8C1C710508A199624D73D2F65B17F /* RLP.swift */; }; + 480F648AB704DA8D3360D9D79FB3CE35 /* CMAC.swift in Sources */ = {isa = PBXBuildFile; fileRef = BC1C413E84AE7C8A5BBD0D588D37F081 /* CMAC.swift */; }; + 494C9B434B310628B595FF5D160E6C62 /* Box.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1660EAFD01A4651EE2CDE370C121DFDF /* Box.swift */; }; + 4A042A668B08E7A608EA20DDBD2FCFDE /* when.swift in Sources */ = {isa = PBXBuildFile; fileRef = F69368BF2890110476F1F7C072DFBE2D /* when.swift */; }; + 4CC74C5A70F14E7B4B7C5188954D1662 /* EthURL.swift in Sources */ = {isa = PBXBuildFile; fileRef = 963FD09C509F4591C36958295682A908 /* EthURL.swift */; }; + 4CC87ECDB7FE60A1EFF8F2AF2143B096 /* ABIv2Elements.swift in Sources */ = {isa = PBXBuildFile; fileRef = 491185EE43B9BD095EF1FAA2497D8DA7 /* ABIv2Elements.swift */; }; + 4CD711E88E990E7B677A41337AB9DF21 /* scalar_low.h in Headers */ = {isa = PBXBuildFile; fileRef = 2AAFAE8BEE01EAB08809FEE5BF7D5DD4 /* scalar_low.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 4CFF75EF09263579007C95CD2C296463 /* Subtraction.swift in Sources */ = {isa = PBXBuildFile; fileRef = 19BB6AFB71817EC7D0EE3602F5F177F1 /* Subtraction.swift */; }; + 4E2261305BEC77DE29742E2D96E816E4 /* PKCS7Padding.swift in Sources */ = {isa = PBXBuildFile; fileRef = 22F490D97EC429B129BF2B8FE6F0BBB9 /* PKCS7Padding.swift */; }; + 4F6ED8ADD7B24315D4F8D18C227D3ACD /* Primitive Types.swift in Sources */ = {isa = PBXBuildFile; fileRef = 38B4ECBBD27BB5CC17975EE3722BA7A9 /* Primitive Types.swift */; }; + 502126F1A8B3D5B6EDD0169B808BDB7F /* util.h in Headers */ = {isa = PBXBuildFile; fileRef = D4BEB792F67555BAA869405C658DC3F2 /* util.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 5293C0D16CC13DF8959DF52B586A76FD /* secp256k1-config.h in Headers */ = {isa = PBXBuildFile; fileRef = E1D313D4B05E6D30E60394B29A9EB9EE /* secp256k1-config.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 53F6E34ED54EF578A9D07F35E9D30EEC /* ERC20.swift in Sources */ = {isa = PBXBuildFile; fileRef = D6C0567834C6A6F0A39ED88BAA8386BC /* ERC20.swift */; }; + 55186252139D1651AB120B392E2AE6A1 /* scalar_8x32_impl.h in Headers */ = {isa = PBXBuildFile; fileRef = 73097DCF76B1B4B22BFD6551328F9AC0 /* scalar_8x32_impl.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 556F5C6C529912E547A6A75836AD5D57 /* EthereumKeystoreV3.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4DEF8B22CCFC30A3F52085A421509B35 /* EthereumKeystoreV3.swift */; }; + 55D2B343E0179422797E53053EBAFC1A /* field_5x52.h in Headers */ = {isa = PBXBuildFile; fileRef = 809D461C7EAA66CF03D6FE435B31804D /* field_5x52.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 5641A3D781DA997712C20B4A7ECC9F64 /* Error.swift in Sources */ = {isa = PBXBuildFile; fileRef = 12283BCF5F3F9AC4914BE69B1E352A11 /* Error.swift */; }; + 5679F218D87C327B4C43415829A24C3E /* SolidityTypes.swift in Sources */ = {isa = PBXBuildFile; fileRef = 400C2A38E54CF66A9F77E7285BFF95DD /* SolidityTypes.swift */; }; + 56B608D435085557E948183418225BC4 /* W3JsonRpc.swift in Sources */ = {isa = PBXBuildFile; fileRef = 08E30008B02494E513E76BA05FBA754D /* W3JsonRpc.swift */; }; + 5942833463D5DA08921E2A8C92F22CCB /* StreamEncryptor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 60B22E678A9111EE9C2AE8B032627499 /* StreamEncryptor.swift */; }; + 59B1A36C1EAE04A8BD462136C3ACD005 /* UInt16+Extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = 756E4CA5BCDA3E18D8651370DDE7316C /* UInt16+Extension.swift */; }; + 5A9838EB86A08F5E51E45B7527EDC90F /* KeyDerivation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 579B6847FEF6AA493DF030C224101CEA /* KeyDerivation.swift */; }; + 5BAB01EB7EFEF13E5B91FA1CBA4D5B0B /* Rabbit.swift in Sources */ = {isa = PBXBuildFile; fileRef = 49FA5A37390AB75FD00980BAEF39DA75 /* Rabbit.swift */; }; + 5CC7E0B125A50512F6C7D358730C4565 /* Array+Extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = 78437E1A8D511A1866DC860B8A2106A4 /* Array+Extension.swift */; }; + 5CFBC87EF56AF8F070374C73C3B8075B /* BlockEncryptor.swift in Sources */ = {isa = PBXBuildFile; fileRef = A564779031839556987CB037A5C86400 /* BlockEncryptor.swift */; }; + 5D2E32F754386F579C9CEB8AD45EA128 /* Web3+Contract.swift in Sources */ = {isa = PBXBuildFile; fileRef = 097E102AFA7E8517A941B51D74BAE3D2 /* Web3+Contract.swift */; }; + 5F50FDEE99282EC0DC2F92D3D947897F /* when.m in Sources */ = {isa = PBXBuildFile; fileRef = A0A05EA9D40E2ED326E11F8DB35EACFB /* when.m */; }; + 600FAC95AB4657EF18F9D5DADC3AC410 /* after.swift in Sources */ = {isa = PBXBuildFile; fileRef = CF7DECB3307F13D950AAA9D68FB500D7 /* after.swift */; }; + 61A22A7861DB5A0551D01D1EFAE43A10 /* CBC.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0B07FB15FA291A79E3C66576B8412B2 /* CBC.swift */; }; + 6230D328684DC455E06EB30FEC158D7F /* AnyPromise.m in Sources */ = {isa = PBXBuildFile; fileRef = B332CEB52BE305BD358CA7AA455A1B56 /* AnyPromise.m */; }; + 6245D5C19D6FE2602E50DE397372DED0 /* OFB.swift in Sources */ = {isa = PBXBuildFile; fileRef = E88DCC88EAF6E3D0819C8613EF31E041 /* OFB.swift */; }; + 62468F214144212D8A0CDEAA38F56482 /* CBCMAC.swift in Sources */ = {isa = PBXBuildFile; fileRef = D8DF141858F319183BA89D019F0A28D6 /* CBCMAC.swift */; }; + 6290191CD36C20C209985E939E31E74B /* DictionaryReader.swift in Sources */ = {isa = PBXBuildFile; fileRef = 47ECEBBCAB10D43B1A32E0FEB32E0AD9 /* DictionaryReader.swift */; }; + 62D73FBDE1C86402790D9209D183DD0A /* String+FoundationExtension.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4DCF072F17844A4F41C51E72E7BED388 /* String+FoundationExtension.swift */; }; + 665DFF21170CC8500C7F444EF2A60C47 /* DecoderExtensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = B7EA41B97F52475D6743363FB2C8BE3E /* DecoderExtensions.swift */; }; + 66D318DC0C7D096C2A485F17975458E4 /* scalar_impl.h in Headers */ = {isa = PBXBuildFile; fileRef = 3D22F914863B69F74C6C9260C01646C2 /* scalar_impl.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 6895897B025C4FD952AA4E4207A8C386 /* Process+Promise.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74367BCDB3E929207633AC901EA194C3 /* Process+Promise.swift */; }; + 68AA3ABA7811B88389544549188AAC4E /* AEADChaCha20Poly1305.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6215BA52D8373DF8BD46E681FE20E099 /* AEADChaCha20Poly1305.swift */; }; + 690D13DC8AEDAC3A34068FAE32C6382D /* BIP39.swift in Sources */ = {isa = PBXBuildFile; fileRef = A6E69EC6B0DE18A6949423AED40C98DE /* BIP39.swift */; }; + 69794E1DDF0FA35F5E3C23C97A0EABC3 /* StreamDecryptor.swift in Sources */ = {isa = PBXBuildFile; fileRef = DC592B79B318C0788DB49BEB7852D7BB /* StreamDecryptor.swift */; }; + 699F80AD3A7CBE023E82AD142092A75C /* field_5x52_int128_impl.h in Headers */ = {isa = PBXBuildFile; fileRef = 642A3305FF04BC4C46ECDEED6C41D69C /* field_5x52_int128_impl.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 6A78138C108253207A274D2B003E5EEF /* Padding.swift in Sources */ = {isa = PBXBuildFile; fileRef = A435D3569EC4C066254028CCA3F1D2A6 /* Padding.swift */; }; + 6AD36253F7C3F916EF00471EEF31969D /* SSLPointerTricks.swift in Sources */ = {isa = PBXBuildFile; fileRef = AF3CE64E81CEF9249E91AACA25C8AEE0 /* SSLPointerTricks.swift */; }; + 6B1D61DC84F077930C898EE06379748C /* LogEvent.swift in Sources */ = {isa = PBXBuildFile; fileRef = B13770A8820775115265668B680D4114 /* LogEvent.swift */; }; + 6B404A828F3AD007670DC457A6431730 /* dispatch_promise.m in Sources */ = {isa = PBXBuildFile; fileRef = 4B5AC0EDD6F09683D57828771D2ACEDC /* dispatch_promise.m */; }; + 6C10BBF7EE5F3DF485C6B0644F4BB2B9 /* BIP32HDNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = 21A3E5B9C189B413005D3D07842BD1B4 /* BIP32HDNode.swift */; }; + 6C6469B5267DB31665960C5E93DA2301 /* PMKUIKit.h in Headers */ = {isa = PBXBuildFile; fileRef = 8BA43864921451363C9A38DB198A12BE /* PMKUIKit.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 6E698FB3F3F30AB4A7A0A4859D00C51E /* secp256k1_recovery.h in Headers */ = {isa = PBXBuildFile; fileRef = EC0B4EEE9A638586422A80D2FB418B32 /* secp256k1_recovery.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 6EBEEEDAACA227734E95EA5211665100 /* GCD.swift in Sources */ = {isa = PBXBuildFile; fileRef = A9D873E6F0B29BDC7E239F3DA54A6B86 /* GCD.swift */; }; + 6F5D3081C1136AF20F2BEFBFC877AFD1 /* PCBC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 04E455390F27F109776B6C4D727E2981 /* PCBC.swift */; }; + 6FBF005BAE8E33BA228A701C5C965585 /* AES.swift in Sources */ = {isa = PBXBuildFile; fileRef = C67B66957F5E865CD36ACD773BFEE7D4 /* AES.swift */; }; + 70451433113089BEA550CCC86217AA34 /* Status.swift in Sources */ = {isa = PBXBuildFile; fileRef = E7C60C367C441D15AFB6123A25CB632B /* Status.swift */; }; + 705057B935AF1C1B2A733B1FF1A225A8 /* hash.h in Headers */ = {isa = PBXBuildFile; fileRef = E071AC0A4F93562BC3FDC9728F9A8DDB /* hash.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 706173B9A0B0F32471C2C330FFFC1425 /* W3Web3.swift in Sources */ = {isa = PBXBuildFile; fileRef = 736AE845644FCE79F8223C7642108F52 /* W3Web3.swift */; }; + 7066E9632FFF2DC45F1B64B2F9B47390 /* NSRegularExpressionExtension.swift in Sources */ = {isa = PBXBuildFile; fileRef = 325639E6BE721ADD407D1C4DA421F577 /* NSRegularExpressionExtension.swift */; }; + 70C753C56B4C246E2B038E4F94BF0BBF /* Codable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 18F713DB07A71F241479241E86BE639A /* Codable.swift */; }; + 712F70052262C4439A5281D06A46EA30 /* num_gmp_impl.h in Headers */ = {isa = PBXBuildFile; fileRef = 690170EFA3CDFD20BA9FF4573A5E3CC6 /* num_gmp_impl.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 718236F77969D41EA45AE28A7EF14E52 /* Hashable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 682CDBAE11DF87F594C12FE363C2AF1D /* Hashable.swift */; }; + 722E238BD6562DA9C1B5F557228A33FE /* GCM.swift in Sources */ = {isa = PBXBuildFile; fileRef = C60A6286999504C681B391DC05434EA7 /* GCM.swift */; }; + 72F0311BAEBB1B6D3AB260781A92C195 /* ECB.swift in Sources */ = {isa = PBXBuildFile; fileRef = FE189E2AE541B29623BE902BA69B7A7B /* ECB.swift */; }; + 7450413BC0261000607E931165553143 /* PBKDF2.swift in Sources */ = {isa = PBXBuildFile; fileRef = 83AF75AF651287704614BB5AC0CB8922 /* PBKDF2.swift */; }; + 75C34A69A589A4577EDD1CB4C7A480E3 /* PlainKeystore.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9A34DEF1E7944AE805521CD816CFB62D /* PlainKeystore.swift */; }; + 7621FC03CEBDCAE4E3A5C8829CE64005 /* NSNotificationCenter+Promise.swift in Sources */ = {isa = PBXBuildFile; fileRef = D8F1B3A1D44BAC4789F724F17C5AA4B7 /* NSNotificationCenter+Promise.swift */; }; + 76577D0616D1280BF37FA6DB670AD771 /* SipHash-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B0871E7C2D3BB9A76E9C8DFCF3ECFD7 /* SipHash-umbrella.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 76A7C5D7F7CDA839F242E5C2F70446DB /* field.h in Headers */ = {isa = PBXBuildFile; fileRef = D9B50A91C4E8E91E1A533C378434F178 /* field.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 772BFD1ADF3059C5C2D335B7C981D69F /* Cryptors.swift in Sources */ = {isa = PBXBuildFile; fileRef = FE1FCA9CE6A8B389228F8EE3FD8075CC /* Cryptors.swift */; }; + 781C891B58DBBFE9D34AD0B3AE573647 /* IBAN.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2B8FA8C0DB1B4B91832B4912D543515F /* IBAN.swift */; }; + 7913FBE09D1518CC0396878C1157A6C2 /* ecmult.h in Headers */ = {isa = PBXBuildFile; fileRef = DB08DE5B5D8E35649AC4C95C7280900E /* ecmult.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 796971FDD39BB23A0CCCA1919B6A48F8 /* Web3+JSONRPC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 804B4569D093A4258FC3116308C43841 /* Web3+JSONRPC.swift */; }; + 79F434A161E7A3EE5764F8D8E4A852C3 /* HMAC.swift in Sources */ = {isa = PBXBuildFile; fileRef = D54CD8BE67A7DFF61B09E68F720EEDB3 /* HMAC.swift */; }; + 7AA95C110DFA1AA3F7FFC260056A2443 /* Data+Extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9AFC48C5F3192533C44F55ADD96E2979 /* Data+Extension.swift */; }; 7DCB5BA36E77B5F40874AFBD9201C8F7 /* Pods-web3swiftExample-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 59F77AE95BC9FEABC9D930C1AB687A02 /* Pods-web3swiftExample-dummy.m */; }; - 7E012592AD98390E558D782DE03719B6 /* ecmult_gen.h in Headers */ = {isa = PBXBuildFile; fileRef = 4200265A11EA77B6341D67869612F075 /* ecmult_gen.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 7E68A71083DE9513BE63D11603283583 /* ABIv2Decoding.swift in Sources */ = {isa = PBXBuildFile; fileRef = 601F344F6358AEC169E49948C7C40F9C /* ABIv2Decoding.swift */; }; - 7EBD1426DC9AD5865AC22F34168CF523 /* num.h in Headers */ = {isa = PBXBuildFile; fileRef = 7C80DE67B4FC5ECCD5F13C4207C1FE6E /* num.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 7EF0DDCAEA46D76838F55CD795323C18 /* web3swift-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = C81905C3606C069A176B4122FD89CF68 /* web3swift-umbrella.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 7F399EC3A1674E5693CAC41ADC0343D9 /* PromiseKit.h in Headers */ = {isa = PBXBuildFile; fileRef = 9955BD9641A6B0E814F41319D98DF262 /* PromiseKit.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 7FCF0179575204147C358C91A8EDB810 /* HKDF.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8E7A8AFBD56BDD3A249E3E50F368C50E /* HKDF.swift */; }; - 809A0139DB16D5487781AAFDC6719647 /* UIViewController+AnyPromise.m in Sources */ = {isa = PBXBuildFile; fileRef = 6777242734065537F1053F7D9FC52CD2 /* UIViewController+AnyPromise.m */; }; - 8292455C630478D7C3752B8D678E30F3 /* Cryptor.swift in Sources */ = {isa = PBXBuildFile; fileRef = B391A44739661EBBD626DB0557D2DA63 /* Cryptor.swift */; }; - 8606AA654F3D24B407E7274A9BB3995F /* Division.swift in Sources */ = {isa = PBXBuildFile; fileRef = DFC2523D807701227A42A0BA4B072590 /* Division.swift */; }; - 872E7C32791B4B5CFDA68F16EB0B1B9E /* BlockModeOptions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1B60D2F8B6A435660E4BEF8F026219C7 /* BlockModeOptions.swift */; }; - 89770DF227E0CA1A3F7FF2B28B5BB17E /* PMKFoundation.h in Headers */ = {isa = PBXBuildFile; fileRef = 37D56D19E935FEBA5608556446D8CFD7 /* PMKFoundation.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 8BD83A2A4781EE24E313DB936F7C2E0D /* BlockExplorer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0CA5927EAAE56DD0648824C11833F95E /* BlockExplorer.swift */; }; - 8C6E9B63C8A13356E57F601615AD18EA /* DecoderExtensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = EB2D0391B9E1016E3E36816581358F5A /* DecoderExtensions.swift */; }; - 8E16B929B547D6509A8F67FD42EF03F5 /* W3Contracts.swift in Sources */ = {isa = PBXBuildFile; fileRef = 296F89415B729E1A5EF75AE842AC9F0C /* W3Contracts.swift */; }; - 8FBF80B066F4DB1B0AF5FDC59F4C9C76 /* after.m in Sources */ = {isa = PBXBuildFile; fileRef = 262973B0CCA699D7E4FA87499AE05761 /* after.m */; }; - 911791CA4547761CEB8FB3918226536F /* AES+Foundation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 35C6DA12D862927A1E130AA75F0408C0 /* AES+Foundation.swift */; }; - 911C0EB1B75340B7E54890819200B6A4 /* lax_der_parsing.c in Sources */ = {isa = PBXBuildFile; fileRef = F00E2801BE31619F4F5EE94B8A7EE21E /* lax_der_parsing.c */; }; - 91455B7E888575493655EECDF553DF16 /* Checksum.swift in Sources */ = {isa = PBXBuildFile; fileRef = E4670CF787B0B2C119BA0E6DC29128BD /* Checksum.swift */; }; - 914ABB4C3727A9EE3EE1610D74369B3B /* Bridging.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6E86DAC01EFE779F7DFC2CAE2A06FD89 /* Bridging.swift */; }; - 92612B4781584E211E9DCF6249379E6D /* UIView+Promise.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74767A24D40F51DC09F8E5D15ED6B5EE /* UIView+Promise.swift */; }; - 93874CE58D7B077B62B086DA25C94923 /* field_5x52_impl.h in Headers */ = {isa = PBXBuildFile; fileRef = 6AECE74A226CC464B1BA1BDAFD6B8514 /* field_5x52_impl.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 9469A5DC4D145415053F10FE16E6D942 /* UIView+AnyPromise.m in Sources */ = {isa = PBXBuildFile; fileRef = 59C746B7913EF1023EE7F440EEE284DE /* UIView+AnyPromise.m */; }; - 94D02E7DF9CB32696ECE65B6FBFEC8DD /* lax_der_privatekey_parsing.h in Headers */ = {isa = PBXBuildFile; fileRef = 5359668EAB1F3FDD9B4FCC924CD62D13 /* lax_der_privatekey_parsing.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 94F6C4BCC5F370F9741DF09C68B34317 /* ABIv2TypeParser.swift in Sources */ = {isa = PBXBuildFile; fileRef = 66A4BA86C057FFCE1CEE5285890F85A2 /* ABIv2TypeParser.swift */; }; - 963D3305DDB31119A65F7C1AD6A2F8CA /* DigestType.swift in Sources */ = {isa = PBXBuildFile; fileRef = 73B7CE4DF4AA28AD35AABEAE4829A8B0 /* DigestType.swift */; }; - 9678C147C849385F15BA5A4CD464F8A8 /* BIP32HDNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = C42830B974DEEAD022E79700C8BCC2AE /* BIP32HDNode.swift */; }; - 96838F15BAF1486E34EC6C9AEDEAAC6A /* Cipher.swift in Sources */ = {isa = PBXBuildFile; fileRef = 244D45747E22A85D556B619478D50DA7 /* Cipher.swift */; }; - 980AAFF830F38B5442573207773979DE /* field_5x52_asm_impl.h in Headers */ = {isa = PBXBuildFile; fileRef = 820EF748A22F2DA975518626315C58A0 /* field_5x52_asm_impl.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 9985C1DF20C3A844133CC24F260232A6 /* SipHashable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5CAA30709849F28134935BA5890E3E39 /* SipHashable.swift */; }; - 9B0996B8F370BC6DA0390199420AD4F7 /* BIP39+WordLists.swift in Sources */ = {isa = PBXBuildFile; fileRef = 12565C213FF185E2106E1A013F9D7672 /* BIP39+WordLists.swift */; }; - 9B94B2D9304C518D38F555A8AAEBA5B1 /* secp256k1_main.h in Headers */ = {isa = PBXBuildFile; fileRef = B5B014CE74F064D9F3F31326A0689604 /* secp256k1_main.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 9BE8160A3394DCBBB163764BCE0D3C00 /* BlockCipher.swift in Sources */ = {isa = PBXBuildFile; fileRef = CCECF78C3301D321F89CB27BE68E8454 /* BlockCipher.swift */; }; - 9BF378D26220D1116063016C914DD7A3 /* CryptoSwift-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 2A9445790A74FC3309D763EC2B5DA37C /* CryptoSwift-umbrella.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 9C98601A6D7C0BED4B22A36404D6775C /* UInt64+Extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0F49224321685FC93392BD3FB5C5A2D1 /* UInt64+Extension.swift */; }; - 9CFFEABA4A7ABBF329B2959C2119707B /* UIViewController+AnyPromise.h in Headers */ = {isa = PBXBuildFile; fileRef = 16C9C64C2F911C8AFDE29B9D08DCFA7D /* UIViewController+AnyPromise.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 9D1F45EEE9FBFA8527847149BF3AF445 /* W3TxPool.swift in Sources */ = {isa = PBXBuildFile; fileRef = F0F77B3BDDC77F5DC41483D0C30624FA /* W3TxPool.swift */; }; - 9F222745C70FEFCD53E676AF87E99AE6 /* when.m in Sources */ = {isa = PBXBuildFile; fileRef = 85D13EA9F7FBA86858AB36B3BDCCDBF8 /* when.m */; }; - 9FD5EE0E86A12E7C14615EC5AFCA489D /* Configuration.swift in Sources */ = {isa = PBXBuildFile; fileRef = 81A053AC3ECA623B020C4255809459A0 /* Configuration.swift */; }; - 9FE9852F3FC0732382B76358A0707D19 /* EthereumAddress.swift in Sources */ = {isa = PBXBuildFile; fileRef = 40114C10B5CCEE77D6E7B9C474CEFBC7 /* EthereumAddress.swift */; }; - A16CAD820B471A5BCA7DEB3A96407F76 /* BatchedCollection.swift in Sources */ = {isa = PBXBuildFile; fileRef = 128F5488DEFFD1C3D786BD0708F25642 /* BatchedCollection.swift */; }; - A1759FAD9535BD7CD9B470EE8B366F7E /* Bit.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4A5DE251B01651B7A7A53C7434DB35DC /* Bit.swift */; }; - A2282701DE9BC91494A2065F23824272 /* Random.swift in Sources */ = {isa = PBXBuildFile; fileRef = B3CCB104E19A411D3BDA8E0C0198CAE3 /* Random.swift */; }; - A2B8E359A249C81AE1506281DBF4156A /* PromiseKit-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 22AAF319B8F0B0C5E990620D271C7D67 /* PromiseKit-umbrella.h */; settings = {ATTRIBUTES = (Project, ); }; }; - A36D804A78EB6E91FB84E808621FB59C /* lax_der_privatekey_parsing.c in Sources */ = {isa = PBXBuildFile; fileRef = 7B6E9BB40C4471B2B540C0088F77D044 /* lax_der_privatekey_parsing.c */; }; - A388AC9DF4CA18220DBBC51339A5DF7C /* when.swift in Sources */ = {isa = PBXBuildFile; fileRef = EBFDC2DCDF98D62EF41ABEAF3046056A /* when.swift */; }; - A3990AC532A16D984A30B92171E19633 /* Addition.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1D486E26367818F682831E597222E1A1 /* Addition.swift */; }; - A42BD875661CC59C609FE6D65562B66F /* DictionaryReader.swift in Sources */ = {isa = PBXBuildFile; fileRef = 61FBEF9B4568D60E87AE8A1110346BCF /* DictionaryReader.swift */; }; - A4D3B79FF90D46F17AEFCDB49277BA22 /* Web3+Contract.swift in Sources */ = {isa = PBXBuildFile; fileRef = A89380BC8BE77F88844A6861B1774B4D /* Web3+Contract.swift */; }; - A6627E9CB11CA763AE9183B1AE3A41C1 /* Web3+JSONRPC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 581DC16F958BBE3969232EB987E08E3D /* Web3+JSONRPC.swift */; }; - AA30153EC052C2F6DC67B9E50E451A6C /* SipHash-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 96A46C0F73467255E30A9C59B68F5B52 /* SipHash-dummy.m */; }; - AC619E0D90A384F0F8746CA0EDD8DDF7 /* secp256k1.swift-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = F43C057132E7C16F23D251D2EE2FC8E9 /* secp256k1.swift-umbrella.h */; settings = {ATTRIBUTES = (Project, ); }; }; - AC8314D24A9C4997D97FF98988B50E70 /* NativeTypesEncoding+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 60A31D981ECA79D1C8EE94E091668BF0 /* NativeTypesEncoding+Extensions.swift */; }; - AC8FBCB82B44474F07FD8C8620EBFD0A /* eckey_impl.h in Headers */ = {isa = PBXBuildFile; fileRef = DA80E6247DB8524C368E70A886734152 /* eckey_impl.h */; settings = {ATTRIBUTES = (Project, ); }; }; - AD497263ACF6EED9588010715CE7D60C /* NSNotificationCenter+AnyPromise.m in Sources */ = {isa = PBXBuildFile; fileRef = 91F642D7FFA9044BEA39F833A39118C4 /* NSNotificationCenter+AnyPromise.m */; }; - AD87E72027A8362815C3E99309167F40 /* num_impl.h in Headers */ = {isa = PBXBuildFile; fileRef = 1967E1F86C08C8172CBCACEF9EC537E3 /* num_impl.h */; settings = {ATTRIBUTES = (Project, ); }; }; - AEDC075B1DAA707E8223AD1F44733007 /* NSURLSession+Promise.swift in Sources */ = {isa = PBXBuildFile; fileRef = 66A57735E30A93BAF2734412C106DEFE /* NSURLSession+Promise.swift */; }; - AF42B21F235E7957C995EF23E1F32734 /* Web3+HttpProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7517A40D49A6C63FC1CB67045F92167F /* Web3+HttpProvider.swift */; }; - B0426250B0AC510218838461E79CF6D8 /* SecurityToken.swift in Sources */ = {isa = PBXBuildFile; fileRef = 631CD2935A4507165CC73441A92EA12B /* SecurityToken.swift */; }; - B05BA09F6E3A5FED52C654A6306967D2 /* Migration.swift in Sources */ = {isa = PBXBuildFile; fileRef = 501837E83E96A8F29515044102A7CC1C /* Migration.swift */; }; - B1011E59D2396AB53DA162CF603D3465 /* NSTask+AnyPromise.h in Headers */ = {isa = PBXBuildFile; fileRef = 9180CD5B0BDED35E8DA746788747AE4E /* NSTask+AnyPromise.h */; settings = {ATTRIBUTES = (Project, ); }; }; - B182E5F9372F1158E4D19F96C43EC22F /* UInt8+Extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = AD74B37D954C9625C0262333EE157016 /* UInt8+Extension.swift */; }; - B1D8DD796160A0B8127ACE88A3B28489 /* ABIv2.swift in Sources */ = {isa = PBXBuildFile; fileRef = CA453C29FD0A42C3CBF5CA11D7CBF4BE /* ABIv2.swift */; }; - B1F01F46095ACA4D66D229360122A872 /* ERC721.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9C1872FDB2DFF9F4DA5E8A8A98449ACC /* ERC721.swift */; }; - B21A1BFD3BA10D3E0189C6B3E2F20B1D /* EIP67Code.swift in Sources */ = {isa = PBXBuildFile; fileRef = 488707222647CD1E0EFA101AC53F2CE0 /* EIP67Code.swift */; }; - B49023BC475CABAAB41B788F8C8F0EE0 /* NoPadding.swift in Sources */ = {isa = PBXBuildFile; fileRef = 41A672B1904703B02BD78103EB364BEF /* NoPadding.swift */; }; - B4954FB12A1CC791395947FD502123BE /* field_impl.h in Headers */ = {isa = PBXBuildFile; fileRef = 43FCE27F7CFE2BF785C0631A77487B46 /* field_impl.h */; settings = {ATTRIBUTES = (Project, ); }; }; - B49836FFCE550E291B16D9AD71857D93 /* LibSecp256k1Extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0B213E82199407C701961027255F3968 /* LibSecp256k1Extension.swift */; }; - B4F142FE09D136C9E623D5229FF3F0D5 /* BigInt-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 434E47E1578E93D391AC801AE96B81A2 /* BigInt-umbrella.h */; settings = {ATTRIBUTES = (Project, ); }; }; - B5105ED08DEA30BA2841E575B1FC60A3 /* EventFiltering.swift in Sources */ = {isa = PBXBuildFile; fileRef = 502B38C2BA985014F8B3752A65A3E64B /* EventFiltering.swift */; }; - B85A35983F422A480ADEC1736A86725C /* KeystoreManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = F2F6ED3E8AD8434FA648ED599C5DABBB /* KeystoreManager.swift */; }; - B9D179880E2C5A583513BF6086375292 /* BigUInt.swift in Sources */ = {isa = PBXBuildFile; fileRef = 314BD93C01C9ECB7BA859B6FE82D980A /* BigUInt.swift */; }; - BB5896F65E6F1258215563C321CDD0AD /* Array+Extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1CA2B31A0C8255603E7ED05DDC223D32 /* Array+Extension.swift */; }; - BB8133970DC8F5D8AB693CCAD83F77EB /* BlockDecryptor.swift in Sources */ = {isa = PBXBuildFile; fileRef = B9CE5A6F4EA724D09118EBF04EE0577A /* BlockDecryptor.swift */; }; - BBA19F50B42B8550F7C3E81A01331697 /* num_gmp.h in Headers */ = {isa = PBXBuildFile; fileRef = 11935B49D81506A856A04A2CBDF17D94 /* num_gmp.h */; settings = {ATTRIBUTES = (Project, ); }; }; - BBB594580050D2CE28673180C413D156 /* hang.m in Sources */ = {isa = PBXBuildFile; fileRef = FC44A13DFB90FB2010835585D80CA7CA /* hang.m */; }; - BC0CC2FB93134FC6100AD12CB98A00BF /* Poly1305.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9621BCB81210850393863EE9A5DCAB29 /* Poly1305.swift */; }; - BD45182CF4418456B8F41394C93072BE /* ContractABIv2.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB4B0945DDC430546255C3CA485FE55A /* ContractABIv2.swift */; }; - BDBBF8D509153DA18A3254C1AE5A4073 /* field_10x26.h in Headers */ = {isa = PBXBuildFile; fileRef = 1C2E581F11B0E11E91AC9F50756FB7BE /* field_10x26.h */; settings = {ATTRIBUTES = (Project, ); }; }; - BE72FE5E7331E734B92C78EA9159A34F /* AES.Cryptors.swift in Sources */ = {isa = PBXBuildFile; fileRef = CC2009DA05FE7B0CC6CD787FE2A216F6 /* AES.Cryptors.swift */; }; - C02148788361EF71153C0BCCED3E5178 /* UInt128.swift in Sources */ = {isa = PBXBuildFile; fileRef = 206877A0343955E206D763CD51DBB28D /* UInt128.swift */; }; - C10810F87051704BC1F99FAB82CC3978 /* PlainKeystore.swift in Sources */ = {isa = PBXBuildFile; fileRef = A741FCD3760CFDFC4B1D1359BA1F8E82 /* PlainKeystore.swift */; }; - C1470FC6E0C93A1C29F085BEBB6BD545 /* NSNotificationCenter+AnyPromise.h in Headers */ = {isa = PBXBuildFile; fileRef = BD25BDC8FD92CF91E9C59903538EB421 /* NSNotificationCenter+AnyPromise.h */; settings = {ATTRIBUTES = (Project, ); }; }; - C372D53B4058B1AE2E8691C6ACD27585 /* W3UInt.swift in Sources */ = {isa = PBXBuildFile; fileRef = B49EAA4E55D07DE88528F6DD3A6FB92A /* W3UInt.swift */; }; - C3D15E12A04D59CE333881BF2FDD15B5 /* UIView+AnyPromise.h in Headers */ = {isa = PBXBuildFile; fileRef = E2BB5F6EBE5B864EBD1A63370A88F9D0 /* UIView+AnyPromise.h */; settings = {ATTRIBUTES = (Project, ); }; }; - C5B6A981996D87ABC52E30A41AE642C0 /* SHA1.swift in Sources */ = {isa = PBXBuildFile; fileRef = B4256A0B73B6305667577F05019F3376 /* SHA1.swift */; }; - C5C62D50ED1F4F69F6066CA54B1F8824 /* web3swift-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 867D9F973ACE2D6E884395508E430D1C /* web3swift-dummy.m */; }; - C6C7479F8D485DA38F3EEAED1BA85880 /* UIViewPropertyAnimator+Promise.swift in Sources */ = {isa = PBXBuildFile; fileRef = F41BC7D61267C154C9DBE89CBB890792 /* UIViewPropertyAnimator+Promise.swift */; }; - C6DD012D500567CD5F6239B4FA3F4B20 /* after.swift in Sources */ = {isa = PBXBuildFile; fileRef = ED12EE6ABCE2B069001ACBB70D969919 /* after.swift */; }; - C9B95B0DAEE3EF9A48478E83CE905E1F /* W3Contract.swift in Sources */ = {isa = PBXBuildFile; fileRef = CC372915A61413E94AECF37FB4E9484B /* W3Contract.swift */; }; - C9C23E2C38DCD55C3F7710CAC2482EAF /* String+Extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = 85D215E6FA857443D867EC70FBF90C58 /* String+Extension.swift */; }; - CA5AE56E6D36558C92FA845FE770FD7D /* SHA3.swift in Sources */ = {isa = PBXBuildFile; fileRef = D6604F746EAD64CD4957C2BC3EB4796A /* SHA3.swift */; }; - CAF7F95BAAA850711BA9ABB88C4DBE58 /* Data Conversion.swift in Sources */ = {isa = PBXBuildFile; fileRef = C59B64FD38788ED778728031296C71E4 /* Data Conversion.swift */; }; - CB5CC9E88F223D74FFA15031390BE152 /* CompactMap.swift in Sources */ = {isa = PBXBuildFile; fileRef = 55D2287FCE73DB9EF58308FA6B3EAF22 /* CompactMap.swift */; }; - CC29FDAC07966249C9AFFDC5D7383342 /* field_10x26_impl.h in Headers */ = {isa = PBXBuildFile; fileRef = 79EBEA6373B480D7E9E611C240DF269A /* field_10x26_impl.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 7E012592AD98390E558D782DE03719B6 /* ecmult_gen.h in Headers */ = {isa = PBXBuildFile; fileRef = 4F2E05ED5642B3C80E510E7729A65AC7 /* ecmult_gen.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 7EBD1426DC9AD5865AC22F34168CF523 /* num.h in Headers */ = {isa = PBXBuildFile; fileRef = 6050A9B3827F56B20ED096577461EF1C /* num.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 7EF0DDCAEA46D76838F55CD795323C18 /* web3swift-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 2F6975E42C8EF5304CDC82F17B3351B3 /* web3swift-umbrella.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 7F399EC3A1674E5693CAC41ADC0343D9 /* PromiseKit.h in Headers */ = {isa = PBXBuildFile; fileRef = 139758EC9623F3C2D9FA4EC1F4D0A542 /* PromiseKit.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 7FCF0179575204147C358C91A8EDB810 /* HKDF.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3336EA4AA1579C4905C29899892E0AFC /* HKDF.swift */; }; + 8100A6C05472E3112394CB3A9807F6E1 /* AbstractKeystore.swift in Sources */ = {isa = PBXBuildFile; fileRef = 056F92BF525AF8FA06347BA64BD52508 /* AbstractKeystore.swift */; }; + 81772BB9EC6FACFD30A1823BD32C6CFE /* Web3+Methods.swift in Sources */ = {isa = PBXBuildFile; fileRef = 267F14B84C228B87BD58C9A56DB7ADA9 /* Web3+Methods.swift */; }; + 8231D20DC427A95F3C202CB14EEB2836 /* ABIv2Decoding.swift in Sources */ = {isa = PBXBuildFile; fileRef = E99693164A55A257DFC9F7C244A7AFCA /* ABIv2Decoding.swift */; }; + 8292455C630478D7C3752B8D678E30F3 /* Cryptor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5A419B92E3298B9D514EF2F335BE1018 /* Cryptor.swift */; }; + 856F50A448F3352A9A9E96198A0C0958 /* Web3+TransactionIntermediate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6DB6CE40917264E5960A3988CD02E38D /* Web3+TransactionIntermediate.swift */; }; + 8606AA654F3D24B407E7274A9BB3995F /* Division.swift in Sources */ = {isa = PBXBuildFile; fileRef = E1FCB1C85402F70B07A066032990B629 /* Division.swift */; }; + 86E3C5E61A18B470EC3BCCAF128F99DF /* W3Keystore.swift in Sources */ = {isa = PBXBuildFile; fileRef = ACC410162DD85E80C18163F3554ADE48 /* W3Keystore.swift */; }; + 872E7C32791B4B5CFDA68F16EB0B1B9E /* BlockModeOptions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0BDE90B8AF54820F1C505E04F43798B6 /* BlockModeOptions.swift */; }; + 881728FED42659704EB9A935B16DE11E /* Array+Extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = 36915B25F27DFFDC9564E95D23E22D34 /* Array+Extension.swift */; }; + 89770DF227E0CA1A3F7FF2B28B5BB17E /* PMKFoundation.h in Headers */ = {isa = PBXBuildFile; fileRef = B25C80355A9840641013BBA6EDBED2A0 /* PMKFoundation.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 8A058AD6A38C6B71C58A6B0E528209E4 /* EthereumTransaction.swift in Sources */ = {isa = PBXBuildFile; fileRef = 66D8D8CC04B068280F9164CAC456B880 /* EthereumTransaction.swift */; }; + 8B264C79A2DEA7173F0C457FA1138AC7 /* hang.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8DF35A7E08698ECC2838C53E3443C1E /* hang.swift */; }; + 8B265A94EB9E30F71BF65A0777FD4FBF /* W3Contracts.swift in Sources */ = {isa = PBXBuildFile; fileRef = 311F220921CFD98F105DF864D2163127 /* W3Contracts.swift */; }; + 8CB87455C919BC6E6CB8BBAE0B1D0DFA /* NSNotificationCenter+AnyPromise.m in Sources */ = {isa = PBXBuildFile; fileRef = D04952A8F6B67C458F1C1E7D1DDEE912 /* NSNotificationCenter+AnyPromise.m */; }; + 8D28E1F4397961143406842FE3451841 /* Web3+EventParser.swift in Sources */ = {isa = PBXBuildFile; fileRef = 152769DE4560B8499E0933B0D268D91D /* Web3+EventParser.swift */; }; + 911791CA4547761CEB8FB3918226536F /* AES+Foundation.swift in Sources */ = {isa = PBXBuildFile; fileRef = AED2C144069F9D92298F862D21B61C01 /* AES+Foundation.swift */; }; + 911C0EB1B75340B7E54890819200B6A4 /* lax_der_parsing.c in Sources */ = {isa = PBXBuildFile; fileRef = 29420FCD6AE4F4E15CEB9BF2D0179EFD /* lax_der_parsing.c */; }; + 91455B7E888575493655EECDF553DF16 /* Checksum.swift in Sources */ = {isa = PBXBuildFile; fileRef = A41377B414A98972C5B5DF66FCA40220 /* Checksum.swift */; }; + 91B7CEB315E25F3B59592CB7F63C96C0 /* SolidityFunction.swift in Sources */ = {isa = PBXBuildFile; fileRef = 632251046D03D162D0B6275E7AAC744D /* SolidityFunction.swift */; }; + 923A68719E397434354E61821241801F /* Web3.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3A06501C2D31D084B44A335F1FB550BC /* Web3.swift */; }; + 9317D4213BA4BCBF71EC9E681AA9FB4D /* Updatable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3BE267986AA8998D2E0A54AA0C0A93A9 /* Updatable.swift */; }; + 932C74B15D830E09DE242ECA73C3C1FC /* ABIv2Encoding.swift in Sources */ = {isa = PBXBuildFile; fileRef = CAF5FEA1BD1CF23C84F83A8510A91044 /* ABIv2Encoding.swift */; }; + 93874CE58D7B077B62B086DA25C94923 /* field_5x52_impl.h in Headers */ = {isa = PBXBuildFile; fileRef = B6980F1275F2E0FFB72EBF8ED04511D6 /* field_5x52_impl.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 93B00E4D4CE4BDAE392145E2B8315238 /* CustomStringConvertible.swift in Sources */ = {isa = PBXBuildFile; fileRef = A4F26BB8FA400739109ABE4A624C47C2 /* CustomStringConvertible.swift */; }; + 93C147C5DB1FCF086D21F135211AA359 /* W3Eth.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7AF62E9F4EE3B2BCBE6C0442F9A308C0 /* W3Eth.swift */; }; + 94A893C4EDF1C4B3CA94B6EBBEBB4B07 /* Web3+Structures.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9D6AF661E1F3E02CE5092E03136D86F3 /* Web3+Structures.swift */; }; + 94D02E7DF9CB32696ECE65B6FBFEC8DD /* lax_der_privatekey_parsing.h in Headers */ = {isa = PBXBuildFile; fileRef = D59D6174070E0A338A5C84CBC0580DD7 /* lax_der_privatekey_parsing.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 9502CBC266ABBDE67AA5C298C4112D8E /* W3Structs.swift in Sources */ = {isa = PBXBuildFile; fileRef = E9BCCCCA2F0D32D7294B714AEA4151E1 /* W3Structs.swift */; }; + 95259A53B72E853A04870B47903C26DC /* W3Wallet.swift in Sources */ = {isa = PBXBuildFile; fileRef = 853A22BFAD63B5FEB1F501817640D9B9 /* W3Wallet.swift */; }; + 963D3305DDB31119A65F7C1AD6A2F8CA /* DigestType.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5564CAC4742D85E4F8B7C90E17F32965 /* DigestType.swift */; }; + 96838F15BAF1486E34EC6C9AEDEAAC6A /* Cipher.swift in Sources */ = {isa = PBXBuildFile; fileRef = 68EF575D658D880D787BEFA5F79A5517 /* Cipher.swift */; }; + 980AAFF830F38B5442573207773979DE /* field_5x52_asm_impl.h in Headers */ = {isa = PBXBuildFile; fileRef = A4DECE93213259BDA56985422CE9366F /* field_5x52_asm_impl.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 985C69B66363F31634A02BF3F4DCEB89 /* UIView+AnyPromise.m in Sources */ = {isa = PBXBuildFile; fileRef = 639064B44CBAFF50CC101B1ABEEC2B67 /* UIView+AnyPromise.m */; }; + 98B90215AB23BE9E701C78FEB3C10C47 /* BloomFilter.swift in Sources */ = {isa = PBXBuildFile; fileRef = E78676D6AF2AA0D191B970F1D214DC62 /* BloomFilter.swift */; }; + 9985C1DF20C3A844133CC24F260232A6 /* SipHashable.swift in Sources */ = {isa = PBXBuildFile; fileRef = F962AAEFEA1C264DA98F90C5EDBD1FCC /* SipHashable.swift */; }; + 9A8DD43F617258F92A4A46023EB8DB8B /* DerivedKey.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3C39F43F1445B754FE5D873E79FA7468 /* DerivedKey.swift */; }; + 9B94B2D9304C518D38F555A8AAEBA5B1 /* secp256k1_main.h in Headers */ = {isa = PBXBuildFile; fileRef = B77C4E778BD24CC84006E90D010E1D79 /* secp256k1_main.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 9BE8160A3394DCBBB163764BCE0D3C00 /* BlockCipher.swift in Sources */ = {isa = PBXBuildFile; fileRef = 41407CD287ECF03435BCFC21193FA2D8 /* BlockCipher.swift */; }; + 9BF378D26220D1116063016C914DD7A3 /* CryptoSwift-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = C01595A61469CA81AC6BCFCDFB8A040D /* CryptoSwift-umbrella.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 9C98601A6D7C0BED4B22A36404D6775C /* UInt64+Extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = 210489C46FB4E1B307A47B9480B1EBC2 /* UInt64+Extension.swift */; }; + 9CFFEABA4A7ABBF329B2959C2119707B /* UIViewController+AnyPromise.h in Headers */ = {isa = PBXBuildFile; fileRef = 46390D9D981148512AC83287E3045BA2 /* UIViewController+AnyPromise.h */; settings = {ATTRIBUTES = (Project, ); }; }; + A16CAD820B471A5BCA7DEB3A96407F76 /* BatchedCollection.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7A42511D06152CD5401994637D29C46C /* BatchedCollection.swift */; }; + A1759FAD9535BD7CD9B470EE8B366F7E /* Bit.swift in Sources */ = {isa = PBXBuildFile; fileRef = 48046E83BFCB7C78717CDE406F4D1CE9 /* Bit.swift */; }; + A2273EB3A4B74A16C1A0176646F3FC4B /* EthereumFilterEncodingExtensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5DCCFC51B181461FCA41827B490C4233 /* EthereumFilterEncodingExtensions.swift */; }; + A2282701DE9BC91494A2065F23824272 /* Random.swift in Sources */ = {isa = PBXBuildFile; fileRef = 55A7B9772F260392189D44F47144CF13 /* Random.swift */; }; + A2B8E359A249C81AE1506281DBF4156A /* PromiseKit-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = CDF7C5F883D41554943AFBCBB1958F16 /* PromiseKit-umbrella.h */; settings = {ATTRIBUTES = (Project, ); }; }; + A31012CEFCD7CBB214E9329816BC017E /* RIPEMD160+StackOveflow.swift in Sources */ = {isa = PBXBuildFile; fileRef = E5C0B9201A34F958BCC3E840AC1C5E0B /* RIPEMD160+StackOveflow.swift */; }; + A36D804A78EB6E91FB84E808621FB59C /* lax_der_privatekey_parsing.c in Sources */ = {isa = PBXBuildFile; fileRef = 121E3691FAB2465D90B2090B71AC8C94 /* lax_der_privatekey_parsing.c */; }; + A38D5A2D1BCAB7F5C0C2F0CA80DDCF72 /* W3Transaction.swift in Sources */ = {isa = PBXBuildFile; fileRef = 83E38CC874BAAE951F947B324C9ECFC9 /* W3Transaction.swift */; }; + A3990AC532A16D984A30B92171E19633 /* Addition.swift in Sources */ = {isa = PBXBuildFile; fileRef = 20E6C6615A8722C91F5E1A0BC053684B /* Addition.swift */; }; + A60AE42284F0C51F14E40AAF8C020162 /* afterlife.swift in Sources */ = {isa = PBXBuildFile; fileRef = 49F2AB62198BA69B964A420659A67A6F /* afterlife.swift */; }; + A616260075C0BC89D6CAA325359E82EF /* join.m in Sources */ = {isa = PBXBuildFile; fileRef = 1CCE005629EFDD560F96BC0057928915 /* join.m */; }; + AA30153EC052C2F6DC67B9E50E451A6C /* SipHash-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 5E5081AECD30D3E286094D433E83CA3E /* SipHash-dummy.m */; }; + AAA0FA181B36343F505644029D402079 /* ABIv2ParameterTypes.swift in Sources */ = {isa = PBXBuildFile; fileRef = 613C57926AE9253FFEEDE39DF3DF224C /* ABIv2ParameterTypes.swift */; }; + AB438BCB6505B27C2AAAB982CB7EE032 /* Web3+Instance.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1854EADF02D1B6AA020278DE3746BA11 /* Web3+Instance.swift */; }; + AC619E0D90A384F0F8746CA0EDD8DDF7 /* secp256k1.swift-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 022B41CAF53CC07A80D10404E734C1DE /* secp256k1.swift-umbrella.h */; settings = {ATTRIBUTES = (Project, ); }; }; + AC8FBCB82B44474F07FD8C8620EBFD0A /* eckey_impl.h in Headers */ = {isa = PBXBuildFile; fileRef = CB80FB396235F2111481913E2302A1C8 /* eckey_impl.h */; settings = {ATTRIBUTES = (Project, ); }; }; + AD87E72027A8362815C3E99309167F40 /* num_impl.h in Headers */ = {isa = PBXBuildFile; fileRef = BA2BEDF6C4F35429131D47AF514CB6EC /* num_impl.h */; settings = {ATTRIBUTES = (Project, ); }; }; + B1011E59D2396AB53DA162CF603D3465 /* NSTask+AnyPromise.h in Headers */ = {isa = PBXBuildFile; fileRef = 0CCF7BF7AF623677EECC00EEA9FBE61A /* NSTask+AnyPromise.h */; settings = {ATTRIBUTES = (Project, ); }; }; + B182E5F9372F1158E4D19F96C43EC22F /* UInt8+Extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = 990C76E8804E794BCDE0314FECEC3BD8 /* UInt8+Extension.swift */; }; + B23C3361B1D66C7AF49C9030FE330ADE /* Bridging.swift in Sources */ = {isa = PBXBuildFile; fileRef = A9C578DB159FA661619DBF792F30F5D4 /* Bridging.swift */; }; + B3D61361B181488D4AC089BC4425F895 /* StreamCryptor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 41BF4497A3C9498417FA2FF2791C38CC /* StreamCryptor.swift */; }; + B414797C53FBAE294A667806010F1868 /* NSURLSession+AnyPromise.m in Sources */ = {isa = PBXBuildFile; fileRef = 39CB4EC60CFB0DCDE2DDB07653CE5F49 /* NSURLSession+AnyPromise.m */; }; + B49023BC475CABAAB41B788F8C8F0EE0 /* NoPadding.swift in Sources */ = {isa = PBXBuildFile; fileRef = 08A008562769272750D46C151511C680 /* NoPadding.swift */; }; + B4954FB12A1CC791395947FD502123BE /* field_impl.h in Headers */ = {isa = PBXBuildFile; fileRef = ED6175F1E555E05A05739FD35664424B /* field_impl.h */; settings = {ATTRIBUTES = (Project, ); }; }; + B4F142FE09D136C9E623D5229FF3F0D5 /* BigInt-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = C68FC22DCC93C369F20109FEBB571F6F /* BigInt-umbrella.h */; settings = {ATTRIBUTES = (Project, ); }; }; + B65B03086C0C26FFE8E1896389F5B620 /* Base58.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6E4B835C3A24EE55E8C7BB286142C4EB /* Base58.swift */; }; + B89B9C5C937B2946399677AAF7F7273A /* Digest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 677284111DFA9191517F7C0B05F6020F /* Digest.swift */; }; + B8F637DC690015D16E39BAC6D87A7F36 /* Web3+Eth.swift in Sources */ = {isa = PBXBuildFile; fileRef = 876D513FA41A77C1789A0E1CD3C6F730 /* Web3+Eth.swift */; }; + B9D179880E2C5A583513BF6086375292 /* BigUInt.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2CD8AA63468BECE721C4700DC34DD46D /* BigUInt.swift */; }; + BA82FE04026C0186AA0EC3E07BA8CAE8 /* ERC721.swift in Sources */ = {isa = PBXBuildFile; fileRef = AF89F12E26B9B814836439034EE5FDEC /* ERC721.swift */; }; + BADCD5BA260E171A9C15B0E0CAB12E1F /* Batching.swift in Sources */ = {isa = PBXBuildFile; fileRef = 658034F04AF4E31BC56D96B44D511ADD /* Batching.swift */; }; + BB8133970DC8F5D8AB693CCAD83F77EB /* BlockDecryptor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 25267DCFAA145B7E4CB7177EA399A440 /* BlockDecryptor.swift */; }; + BBA19F50B42B8550F7C3E81A01331697 /* num_gmp.h in Headers */ = {isa = PBXBuildFile; fileRef = A272C009855BD26F561C1F4DB1C91C73 /* num_gmp.h */; settings = {ATTRIBUTES = (Project, ); }; }; + BC0CC2FB93134FC6100AD12CB98A00BF /* Poly1305.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6DE7ABCC2C3D359671C16059A0905CA0 /* Poly1305.swift */; }; + BDBBF8D509153DA18A3254C1AE5A4073 /* field_10x26.h in Headers */ = {isa = PBXBuildFile; fileRef = D75324744948AE5A2A9A67D91D6B1458 /* field_10x26.h */; settings = {ATTRIBUTES = (Project, ); }; }; + BE72FE5E7331E734B92C78EA9159A34F /* AES.Cryptors.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5D520CD6930323F56B70DE0C3DE14055 /* AES.Cryptors.swift */; }; + BF179B2EBDE5E52DAD357C34DF16D901 /* Thenable.swift in Sources */ = {isa = PBXBuildFile; fileRef = A42B1989EFF1F55D8144849B0F495406 /* Thenable.swift */; }; + C02148788361EF71153C0BCCED3E5178 /* UInt128.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4EE1D977186B9FF7727A1099274E4D80 /* UInt128.swift */; }; + C08FAD15D95153A053E912A1D543F8BE /* AES.swift in Sources */ = {isa = PBXBuildFile; fileRef = 194210F828E7960C67AE58C12DB912D2 /* AES.swift */; }; + C13C07C6DF99E9BBC706EEE286E4665B /* after.m in Sources */ = {isa = PBXBuildFile; fileRef = CE4A4580E42A541BBE15203F926DC8D3 /* after.m */; }; + C1470FC6E0C93A1C29F085BEBB6BD545 /* NSNotificationCenter+AnyPromise.h in Headers */ = {isa = PBXBuildFile; fileRef = CF0D12A5202C8EF776F0091BBD11B987 /* NSNotificationCenter+AnyPromise.h */; settings = {ATTRIBUTES = (Project, ); }; }; + C3D15E12A04D59CE333881BF2FDD15B5 /* UIView+AnyPromise.h in Headers */ = {isa = PBXBuildFile; fileRef = B221AE6DB4191177CDE504B1EF26FC23 /* UIView+AnyPromise.h */; settings = {ATTRIBUTES = (Project, ); }; }; + C4BA6770E611FCEF6B719048855153E5 /* SolidityDataWriter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 069436EA083AF69D4560EA1633DBA9A0 /* SolidityDataWriter.swift */; }; + C54519C7FAC7BB4F4C5F885A0283FAD7 /* TxPool.swift in Sources */ = {isa = PBXBuildFile; fileRef = 23AE376B36F24D44457DB21BC3015C37 /* TxPool.swift */; }; + C5B6A981996D87ABC52E30A41AE642C0 /* SHA1.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB9A7D6649C9BCA173ED739CA1B2B7B2 /* SHA1.swift */; }; + C9C23E2C38DCD55C3F7710CAC2482EAF /* String+Extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = BA30A89C6746AFB711BFBA0D51BD336E /* String+Extension.swift */; }; + CA5AE56E6D36558C92FA845FE770FD7D /* SHA3.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8210D7F89A2149DDFE8FCC64936FA110 /* SHA3.swift */; }; + CAF7F95BAAA850711BA9ABB88C4DBE58 /* Data Conversion.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0C2822F5BCA2B5A2CD5ABE54AD072A1A /* Data Conversion.swift */; }; + CB5CC9E88F223D74FFA15031390BE152 /* CompactMap.swift in Sources */ = {isa = PBXBuildFile; fileRef = 078BB9F2F5D7B51D34FA24BA8F34B921 /* CompactMap.swift */; }; + CC29FDAC07966249C9AFFDC5D7383342 /* field_10x26_impl.h in Headers */ = {isa = PBXBuildFile; fileRef = EDE00ED638E013B6AEFE0A9E4FABFFF2 /* field_10x26_impl.h */; settings = {ATTRIBUTES = (Project, ); }; }; + CC8D87088EDBFC2572C3B1562DC61821 /* hang.m in Sources */ = {isa = PBXBuildFile; fileRef = 2E00EFC2F83AF924EEDEE93D74F7E659 /* hang.m */; }; CCE81CA4ADFE727C687F6C14100CD5ED /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2EFB40531CB700ADF867FEEE78561E78 /* Foundation.framework */; }; - CD2117ADF521D7B0904A468BA324ED38 /* Digest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 60B220583753D6706B77ED4AF12D0BD0 /* Digest.swift */; }; - CF17E94194DCDD927A31F793097498DB /* secp256k1.swift-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = B1DC488ED2D924E6E1749F0F2C6DF0E0 /* secp256k1.swift-dummy.m */; }; - CF3EE764A7A7F7F57EB8610C7E684B04 /* Multiplication.swift in Sources */ = {isa = PBXBuildFile; fileRef = B741F8FF5272D5CE879D15D03465DB4F /* Multiplication.swift */; }; - CFCEF00E9F843C0E9885D25D3FE776AD /* BigInt-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 6057428D752A953D8A64BE24FC412439 /* BigInt-dummy.m */; }; - D051E4774CD3FDB2CE5040710A74C03E /* Operators.swift in Sources */ = {isa = PBXBuildFile; fileRef = DE0D4C5D4572E55938D0F502D579DFCB /* Operators.swift */; }; - D087069000DF05505C9EDA396912606E /* BlockMode.swift in Sources */ = {isa = PBXBuildFile; fileRef = F6C877661362295CA40037E2EC9C9F8F /* BlockMode.swift */; }; - D0A7E669EF07B7FB2AEA215784F71E30 /* Migration-iOS.swift in Sources */ = {isa = PBXBuildFile; fileRef = 56CEDC66931C716FC04ADB1152D81E8F /* Migration-iOS.swift */; }; - D0B53C7A26564AA9B8CA9797E1226B96 /* CryptoExtensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = FE168A5EE1B83636668A4F6F8CD2D671 /* CryptoExtensions.swift */; }; - D1586FB6DA4928FD02AEF7C2CCF63335 /* secp256k1.c in Sources */ = {isa = PBXBuildFile; fileRef = CD3A3AE2C01F4D969BA773F5C0F76348 /* secp256k1.c */; }; - D16B6EA89A119E3F1836406E42F830C9 /* HMAC+Foundation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2F1E4CC2ACC97BC650C16D5EE5CC903D /* HMAC+Foundation.swift */; }; - D39996BD6FC62F9DCF3C7B65CD5A58FD /* secp256k1.h in Headers */ = {isa = PBXBuildFile; fileRef = 9922A9372EA6CD134BF7AEA87B40C3D6 /* secp256k1.h */; settings = {ATTRIBUTES = (Project, ); }; }; - D42866E9D1CC9FAA8B4D290D9021ADED /* Floating Point Conversion.swift in Sources */ = {isa = PBXBuildFile; fileRef = C2FFF037764B090B1F784A7EA478DFDF /* Floating Point Conversion.swift */; }; - D4BD7AE448E16B40807AA56D6C9FB98F /* scalar_8x32.h in Headers */ = {isa = PBXBuildFile; fileRef = 651935C6233551F0DD9325E98C71571A /* scalar_8x32.h */; settings = {ATTRIBUTES = (Project, ); }; }; - D4F4D392040E3DA1F563B24CE95FB0E0 /* Rabbit+Foundation.swift in Sources */ = {isa = PBXBuildFile; fileRef = C482B2BF039963EA499F71BEEB665AE4 /* Rabbit+Foundation.swift */; }; - D6C94ACB1E36998398BEE0467D298D1E /* hash_impl.h in Headers */ = {isa = PBXBuildFile; fileRef = AAA70B4B39AD3DE75A2482D260DE1CBD /* hash_impl.h */; settings = {ATTRIBUTES = (Project, ); }; }; - D706F2D3F44C6CB98578F9690D113CBC /* hang.swift in Sources */ = {isa = PBXBuildFile; fileRef = A6095A13F14E48B0FB394628D4C6EB26 /* hang.swift */; }; - D76ADFC2682607E5BB10536F8C87CE98 /* Error.swift in Sources */ = {isa = PBXBuildFile; fileRef = 18BD1DF659DBFE582679481FC5B126B8 /* Error.swift */; }; - D7EE30EF766C1E26C8B70F154A787B93 /* ChaCha20.swift in Sources */ = {isa = PBXBuildFile; fileRef = BAC8C6AE183F0ABD88BAAC3DA9B53DAB /* ChaCha20.swift */; }; - D8F36C699650FAB9BAE179593C86669A /* PBKDF1.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2D1746624F021CB809D79A21F85BCD0B /* PBKDF1.swift */; }; - D8F373A84FF8AE563825B72D8DDA8054 /* W3Transaction.swift in Sources */ = {isa = PBXBuildFile; fileRef = CB23A5B3F61B1AE28A0C203DDBA09A6C /* W3Transaction.swift */; }; - DA52F9C6C682824DE417E40FB066151F /* main_impl.h in Headers */ = {isa = PBXBuildFile; fileRef = C94F08CF67C9E7263EFD3326BBA0A707 /* main_impl.h */; settings = {ATTRIBUTES = (Project, ); }; }; - DCD11459A6DD0C7757AD81AB42D7ADAC /* SipHasher.swift in Sources */ = {isa = PBXBuildFile; fileRef = E3A85EC299FC43DBDD17731238BE97AB /* SipHasher.swift */; }; - DD88F5F49CA86929FD674738683710CE /* Box.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6E62BB2EAF743D0AFB4DFF51BD2B9E4B /* Box.swift */; }; - DFB2807D6E6F98F5D85653793E02886B /* ComparisonExtensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = DE0D387077472AA08DA512A680D7A35A /* ComparisonExtensions.swift */; }; + CD2117ADF521D7B0904A468BA324ED38 /* Digest.swift in Sources */ = {isa = PBXBuildFile; fileRef = C665982EC93EAD9418AC8163C823BF10 /* Digest.swift */; }; + CE57E155F3D4AF1FCE7D56FA875633F9 /* W3Contract.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6B8598A451FC53A66ECAAD6AB556B266 /* W3Contract.swift */; }; + CF17E94194DCDD927A31F793097498DB /* secp256k1.swift-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = EF4F3BE64F3F58BEAA8FADD7E5289A1C /* secp256k1.swift-dummy.m */; }; + CF3EE764A7A7F7F57EB8610C7E684B04 /* Multiplication.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8C5DA839004BBE15B5F918982496B61D /* Multiplication.swift */; }; + CFCEF00E9F843C0E9885D25D3FE776AD /* BigInt-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 6D31627CBFD08BF61CDF91B14C39F7C3 /* BigInt-dummy.m */; }; + D051E4774CD3FDB2CE5040710A74C03E /* Operators.swift in Sources */ = {isa = PBXBuildFile; fileRef = AE2B3AB892289E6B34347CC8C11F0C80 /* Operators.swift */; }; + D087069000DF05505C9EDA396912606E /* BlockMode.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0DE98010B3A8966FB5726C6AB1FD4973 /* BlockMode.swift */; }; + D1586FB6DA4928FD02AEF7C2CCF63335 /* secp256k1.c in Sources */ = {isa = PBXBuildFile; fileRef = 2E7AB5EBF92C75116FA20091365F42E2 /* secp256k1.c */; }; + D16B6EA89A119E3F1836406E42F830C9 /* HMAC+Foundation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9123EA433E1E84024B2551A3C9679BBC /* HMAC+Foundation.swift */; }; + D39996BD6FC62F9DCF3C7B65CD5A58FD /* secp256k1.h in Headers */ = {isa = PBXBuildFile; fileRef = 859F20386DD833B6B2BA6A78FAE018B3 /* secp256k1.h */; settings = {ATTRIBUTES = (Project, ); }; }; + D42866E9D1CC9FAA8B4D290D9021ADED /* Floating Point Conversion.swift in Sources */ = {isa = PBXBuildFile; fileRef = 784CC85002418E7744D28289D857E97A /* Floating Point Conversion.swift */; }; + D4A841D0C1FBAB8D80E3CA1E73639881 /* W3UInt.swift in Sources */ = {isa = PBXBuildFile; fileRef = 34982F96661D907CE08E6156EA90174C /* W3UInt.swift */; }; + D4BD7AE448E16B40807AA56D6C9FB98F /* scalar_8x32.h in Headers */ = {isa = PBXBuildFile; fileRef = 28EB2496C0D9D63F363E73D83F86D86A /* scalar_8x32.h */; settings = {ATTRIBUTES = (Project, ); }; }; + D4E8783D735CA3F8B3F5055C1A9A73CD /* EthereumAddress.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2515CABA83AC1B6A45DFC6FE4B26DCD5 /* EthereumAddress.swift */; }; + D4F4D392040E3DA1F563B24CE95FB0E0 /* Rabbit+Foundation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 83C375FF5A983A5E90D728F1E946AE3A /* Rabbit+Foundation.swift */; }; + D56822F365E64737B1003C3452C315E7 /* Guarantee.swift in Sources */ = {isa = PBXBuildFile; fileRef = F9D95D283E3062C7F539A4508C289EF6 /* Guarantee.swift */; }; + D6064EF550E223D509C29E636D81B2E3 /* Guides.swift in Sources */ = {isa = PBXBuildFile; fileRef = 40D2D28099E625A2766B135710553F3F /* Guides.swift */; }; + D6718DAD2BC0A3EEF1F5A6E975A7CD12 /* AnyPromise.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4510B28955CEC6583DFB6236C78D391C /* AnyPromise.swift */; }; + D6C94ACB1E36998398BEE0467D298D1E /* hash_impl.h in Headers */ = {isa = PBXBuildFile; fileRef = 66265036E2B783E012D66AE05EB69843 /* hash_impl.h */; settings = {ATTRIBUTES = (Project, ); }; }; + D7EE30EF766C1E26C8B70F154A787B93 /* ChaCha20.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2DADF2ED577DB06A8C7F164E7F805EA1 /* ChaCha20.swift */; }; + D8F36C699650FAB9BAE179593C86669A /* PBKDF1.swift in Sources */ = {isa = PBXBuildFile; fileRef = 11CB1AB2829E37C20C39CB2F46E55418 /* PBKDF1.swift */; }; + DA52F9C6C682824DE417E40FB066151F /* main_impl.h in Headers */ = {isa = PBXBuildFile; fileRef = 4EF06ABD9B0D6698054EC2AA8D90DF1B /* main_impl.h */; settings = {ATTRIBUTES = (Project, ); }; }; + DC6CADEBAED798B58D82BBF631C5B238 /* UIViewPropertyAnimator+Promise.swift in Sources */ = {isa = PBXBuildFile; fileRef = DC4893BB39F2002A2C751431D7C96D28 /* UIViewPropertyAnimator+Promise.swift */; }; + DCD11459A6DD0C7757AD81AB42D7ADAC /* SipHasher.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4587CC3E549E4D083E4A993A8F557B8C /* SipHasher.swift */; }; + DD365BAC688D95E7298A0D370F27FB1F /* Web3+Personal.swift in Sources */ = {isa = PBXBuildFile; fileRef = A9B6082F0CF0EA74F5E388265C2C7A1F /* Web3+Personal.swift */; }; DFF3A81001B1F14A298AECD4BD36F34C /* Pods-web3swiftExample-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 26986386406787D15D8C39F0B109D08A /* Pods-web3swiftExample-umbrella.h */; settings = {ATTRIBUTES = (Project, ); }; }; - E18E1D8E4F74B3661D700F4E698BF7C3 /* SolidityTypes.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3836B05F25F7FD113337141424BF2529 /* SolidityTypes.swift */; }; - E1C083B1527754965BC5748118BC6D35 /* secp256k1_ec_mult_static_context.h in Headers */ = {isa = PBXBuildFile; fileRef = FD5E45DB5594784D46A67E3812F124F7 /* secp256k1_ec_mult_static_context.h */; settings = {ATTRIBUTES = (Project, ); }; }; - E1CF40389162E305DAC63D553399143E /* NSRegularExpressionExtension.swift in Sources */ = {isa = PBXBuildFile; fileRef = E760EF068BA9FA734A3C5CF5556701F4 /* NSRegularExpressionExtension.swift */; }; - E31D841E8C25302DF79153BB35B72EC8 /* String+Extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = BD390D51A06B39F5540906E619629D47 /* String+Extension.swift */; }; - E45158897BFE6EC89F881B42DAFEC712 /* MD5.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0AE94D353B662B4DD59AD354604229C3 /* MD5.swift */; }; - E4958690B2A255381DCAE35F233E9A0D /* Authenticator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 925E5F982D0D43286E3195E5F2A20B80 /* Authenticator.swift */; }; - E4A30DA712E1689BA2CBBEEE432E558D /* ZeroPadding.swift in Sources */ = {isa = PBXBuildFile; fileRef = B2A1EF70F3151893B73FFA4FF022DF05 /* ZeroPadding.swift */; }; - E645EFB424D1769A3DAD6950C087EA1B /* Int+Extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9661E97CF2C8DB672C4DF77F99256CF3 /* Int+Extension.swift */; }; - E90FECB66D091193C8C06C288BE0DAA3 /* Web3+Utils.swift in Sources */ = {isa = PBXBuildFile; fileRef = C5D32FAE3993FCC8E081F323AF27AE65 /* Web3+Utils.swift */; }; - E98669BD82B8EF36AA49932E9A1C5559 /* Bitwise Ops.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6B3B4AEF4BF1262925C80142B509BB98 /* Bitwise Ops.swift */; }; - EADA7FE8DC1311DCB0456E5151A7160C /* eckey.h in Headers */ = {isa = PBXBuildFile; fileRef = 54805BFC6BA6EDA4FDEAD09ED659AD89 /* eckey.h */; settings = {ATTRIBUTES = (Project, ); }; }; - EB63D2A325BE6A1891464F12D74F10EE /* AEAD.swift in Sources */ = {isa = PBXBuildFile; fileRef = BC3A82AB790BB3F75EA48811FFE34B21 /* AEAD.swift */; }; - EC2819C84DCB129B0BE81B6AD7D89C9C /* CFB.swift in Sources */ = {isa = PBXBuildFile; fileRef = 22187C79C79098AB43AF131A8275520C /* CFB.swift */; }; - EE4B42F63446EBBC0C84F8142DC5D11B /* Collection+Extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = F5B948EAC897CEF1574263042AB22940 /* Collection+Extension.swift */; }; - EEC27568810F4B0ED202181E3EE2DC12 /* Web3+Wallet.swift in Sources */ = {isa = PBXBuildFile; fileRef = 04ADAB835E8FA5E3404C57A95B78EF61 /* Web3+Wallet.swift */; }; - F1B4B2A6BEA6CB1932DFF139A8C5EC1C /* W3Provider.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4F944ECF152E4C57D2F193E88DC68232 /* W3Provider.swift */; }; - F348CE704C59C8C2CBAFE451ECF16CA7 /* Web3+Options.swift in Sources */ = {isa = PBXBuildFile; fileRef = C76C90A3560095A5FABC64A154456AF9 /* Web3+Options.swift */; }; - F35A8F0C98F8519DCAB6AEA8A81DAB85 /* Promise.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5C63D44AB099C0DAFDC25E0BC24F83FD /* Promise.swift */; }; - F44C434430FF3CD138E0F4322A736587 /* BIP39.swift in Sources */ = {isa = PBXBuildFile; fileRef = 89D0818D4609DD13DB368529B0E59FC9 /* BIP39.swift */; }; - F5BC6D311F2091508191416C30847D2F /* Utils+Foundation.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB509202EE3E33A21AD57E651625F599 /* Utils+Foundation.swift */; }; - F73F98F9E80F8EF668B4802AEF945505 /* ABIv2Encoding.swift in Sources */ = {isa = PBXBuildFile; fileRef = 80B2BFC74FA2BAF745488A4A07A4F0A3 /* ABIv2Encoding.swift */; }; - F77AC43C2114776E84892FAF30FE62E7 /* race.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9C6376CD30EFEE4A594237E1394743A6 /* race.swift */; }; - F78C1DE8D506C812DCD441568DD25248 /* Prime Test.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1441D917D59136EBE81D178A21520773 /* Prime Test.swift */; }; - F8CE0E2617EFBE9F39D572ECE27604E7 /* lax_der_parsing.h in Headers */ = {isa = PBXBuildFile; fileRef = 30F206A3EB5F9D5127CF900D217E8B52 /* lax_der_parsing.h */; settings = {ATTRIBUTES = (Project, ); }; }; - F9C4CA837A9EA5C505452422F0830C9C /* PKCS7.swift in Sources */ = {isa = PBXBuildFile; fileRef = 766CCD5A188A4E8CB3CF8EC5862521C1 /* PKCS7.swift */; }; - FD50186F4E6AE502AFE1F40E84C8D736 /* Utils.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5E392802F8B810FBDC888CEDD201296F /* Utils.swift */; }; - FDB82F652604E3895F53D4C4C189C35F /* main_impl.h in Headers */ = {isa = PBXBuildFile; fileRef = 551C530E0BD8894E3EA99690F0823AD4 /* main_impl.h */; settings = {ATTRIBUTES = (Project, ); }; }; - FF4E5A0159F501C3AA5C392D75C6DB2A /* RandomBytesSequence.swift in Sources */ = {isa = PBXBuildFile; fileRef = 258E58DA8910ED9D6C8446476D3E4D47 /* RandomBytesSequence.swift */; }; + E1C083B1527754965BC5748118BC6D35 /* secp256k1_ec_mult_static_context.h in Headers */ = {isa = PBXBuildFile; fileRef = C1574268ABF3089AE498AED67BC3597E /* secp256k1_ec_mult_static_context.h */; settings = {ATTRIBUTES = (Project, ); }; }; + E2933BAC145545B3D1DB16C66059248A /* firstly.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7D85486F43B4C0647CE49352A1BD3E0C /* firstly.swift */; }; + E3A976F7DA925ECFBBAE693C9D972843 /* ABIv2.swift in Sources */ = {isa = PBXBuildFile; fileRef = C3B2F841CFC9A5EA0A3DD94478BADB9A /* ABIv2.swift */; }; + E45158897BFE6EC89F881B42DAFEC712 /* MD5.swift in Sources */ = {isa = PBXBuildFile; fileRef = CC18BF0E8482969BD374437CE71045DD /* MD5.swift */; }; + E472D9C3D404F42A22E345935F86AECF /* Data+Extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = B29AFEB51D70B10D7BA01E68E5707078 /* Data+Extension.swift */; }; + E4818CCC50B61814A9D201E77189DCB5 /* String+Extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6D22E9BE63451188DB69F09B7F690359 /* String+Extension.swift */; }; + E4958690B2A255381DCAE35F233E9A0D /* Authenticator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9EAF4A9129974F5D8D09A592DCECA2B2 /* Authenticator.swift */; }; + E4A30DA712E1689BA2CBBEEE432E558D /* ZeroPadding.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8073DACE0B7CAECDBD557F5050C77F02 /* ZeroPadding.swift */; }; + E645EFB424D1769A3DAD6950C087EA1B /* Int+Extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = CDFDF3085A923AAB54C450CCE174DCA9 /* Int+Extension.swift */; }; + E6BE7DB6F3F0640076A659DFFB9A5366 /* race.m in Sources */ = {isa = PBXBuildFile; fileRef = DE49BDF4845DBF44ECC0B019AD32E304 /* race.m */; }; + E98055839D13D0CBF268DBAABBD58100 /* BIP32Keystore.swift in Sources */ = {isa = PBXBuildFile; fileRef = B1A4AF61AD12FFDB6B7C9DD801DE6316 /* BIP32Keystore.swift */; }; + E98669BD82B8EF36AA49932E9A1C5559 /* Bitwise Ops.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6035BDCEC69AC5C694645245D8141CB5 /* Bitwise Ops.swift */; }; + E9B29E147D0D5575C25A3E7A0846C5D6 /* HDPath.swift in Sources */ = {isa = PBXBuildFile; fileRef = 454D1C414EB0979EB31AC5AA88BFF669 /* HDPath.swift */; }; + EADA7FE8DC1311DCB0456E5151A7160C /* eckey.h in Headers */ = {isa = PBXBuildFile; fileRef = 3B049902C933CA2C9DA679ADCD85A985 /* eckey.h */; settings = {ATTRIBUTES = (Project, ); }; }; + EB63D2A325BE6A1891464F12D74F10EE /* AEAD.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1815711A9869D220E848A46359825385 /* AEAD.swift */; }; + EC2819C84DCB129B0BE81B6AD7D89C9C /* CFB.swift in Sources */ = {isa = PBXBuildFile; fileRef = 86AE722ACF1A5A8CB268002725F137C2 /* CFB.swift */; }; + EE4B42F63446EBBC0C84F8142DC5D11B /* Collection+Extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = AEAE36133FDFDB6009E2BB88A5822DDE /* Collection+Extension.swift */; }; + F00CA0EC7E4D99B29B06ADE7E947E389 /* race.swift in Sources */ = {isa = PBXBuildFile; fileRef = F3ADC03C32DC6E5CE9D92FDDC6A8229A /* race.swift */; }; + F1A9837F3544BAE7AC8B317A7EEC1D74 /* SecurityToken.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1ACE6BF9F8E004001ADF038C08274CC9 /* SecurityToken.swift */; }; + F1FE68ADE4D4365C52FC69BC263BD25B /* ABIv2TypeParser.swift in Sources */ = {isa = PBXBuildFile; fileRef = F710A6FFF948544F6EA333821E08EA0D /* ABIv2TypeParser.swift */; }; + F22024D4558259511467E092FD58C0C0 /* Crypto.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2FF184E190BFD19A4F5E7AFCF6BD4FB8 /* Crypto.swift */; }; + F5304CAE352C1BAA6D74CC9CC39510B3 /* NativeTypesEncoding+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 82E53AAC8144E1CEAB245FDC9D84BFF6 /* NativeTypesEncoding+Extensions.swift */; }; + F5BC6D311F2091508191416C30847D2F /* Utils+Foundation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0B26F45A6672620E36B004104ED2BF9C /* Utils+Foundation.swift */; }; + F6176A21AF9A9DDEB5CF58D7F2E92C2B /* EIP67Code.swift in Sources */ = {isa = PBXBuildFile; fileRef = 98340DCD205F2D928D589028BBD414B3 /* EIP67Code.swift */; }; + F78C1DE8D506C812DCD441568DD25248 /* Prime Test.swift in Sources */ = {isa = PBXBuildFile; fileRef = 344A4652CCE668F42005F6FCA6A7BDD4 /* Prime Test.swift */; }; + F8CE0E2617EFBE9F39D572ECE27604E7 /* lax_der_parsing.h in Headers */ = {isa = PBXBuildFile; fileRef = 347FCD3ECF9C2620CB3FEBCAFA3B3680 /* lax_der_parsing.h */; settings = {ATTRIBUTES = (Project, ); }; }; + F8E54F48C1FEA2AABBFFEC12DA611E56 /* KeystoreManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 852906B17625EF926029E80181D1686F /* KeystoreManager.swift */; }; + F93D2842C13B482F82BE944BEA3399E2 /* ERC777.swift in Sources */ = {isa = PBXBuildFile; fileRef = EF4FED99D40BB34B508C8D71981BDC16 /* ERC777.swift */; }; + F9788B724611169307CB65C9D0F7CE6A /* PromiseKit-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = E1DA322877B311B135D925F5EC4BBE41 /* PromiseKit-dummy.m */; }; + F9C4CA837A9EA5C505452422F0830C9C /* PKCS7.swift in Sources */ = {isa = PBXBuildFile; fileRef = 793DA9938B5F7239BC30EF8C1118F328 /* PKCS7.swift */; }; + FB4610508A3D603691C847AF78382B1E /* EventFiltering.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3022EB26C04CBD2B44459F77A25033D5 /* EventFiltering.swift */; }; + FCCDBFDD89B4096F2ACCFA67F01542EC /* NSObject+Promise.swift in Sources */ = {isa = PBXBuildFile; fileRef = 84A95789D46C4AFAB5B139B74C195534 /* NSObject+Promise.swift */; }; + FD056B8C38076EDA0722EA3661B153F4 /* HMAC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 182C4A0B2361BCBAA99560481834F610 /* HMAC.swift */; }; + FD50186F4E6AE502AFE1F40E84C8D736 /* Utils.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0042AD2270E223BD7F2AFAD60E846461 /* Utils.swift */; }; + FD69D3E31ABF1648257181A774DCA43B /* Migration.swift in Sources */ = {isa = PBXBuildFile; fileRef = E271431604B2F76EFFCAD3A64B92E30B /* Migration.swift */; }; + FDB82F652604E3895F53D4C4C189C35F /* main_impl.h in Headers */ = {isa = PBXBuildFile; fileRef = 9F2F143E4ECBBEAFF2D70335436A979E /* main_impl.h */; settings = {ATTRIBUTES = (Project, ); }; }; + FF4E5A0159F501C3AA5C392D75C6DB2A /* RandomBytesSequence.swift in Sources */ = {isa = PBXBuildFile; fileRef = CF905E33C571401D92EBCD05EA1D03A0 /* RandomBytesSequence.swift */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -400,342 +414,356 @@ /* End PBXContainerItemProxy section */ /* Begin PBXFileReference section */ - 02648BEE196ADD1702A65942247D02ED /* RIPEMD160+StackOveflow.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "RIPEMD160+StackOveflow.swift"; path = "Sources/Convenience/RIPEMD160+StackOveflow.swift"; sourceTree = ""; }; + 0042AD2270E223BD7F2AFAD60E846461 /* Utils.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Utils.swift; path = Sources/CryptoSwift/Utils.swift; sourceTree = ""; }; + 022B41CAF53CC07A80D10404E734C1DE /* secp256k1.swift-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "secp256k1.swift-umbrella.h"; path = "../../Headers/Public/secp256k1/secp256k1.swift-umbrella.h"; sourceTree = ""; }; 02C519FDB5FE4C5643A843724C5FACA2 /* Pods-web3swiftExample.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-web3swiftExample.debug.xcconfig"; sourceTree = ""; }; - 04ADAB835E8FA5E3404C57A95B78EF61 /* Web3+Wallet.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Web3+Wallet.swift"; path = "Sources/HookedFunctions/Web3+Wallet.swift"; sourceTree = ""; }; - 06330FEEF0349472276FB95B3D6183FD /* Web3+Structures.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Web3+Structures.swift"; path = "Sources/Web3/Web3+Structures.swift"; sourceTree = ""; }; - 079C629B5788020E9B6E9175918EB8EA /* fwd.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = fwd.h; path = Sources/fwd.h; sourceTree = ""; }; - 0820072EFDECEC01B5AABAEF45B9EBDA /* BloomFilter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BloomFilter.swift; path = Sources/Transaction/BloomFilter.swift; sourceTree = ""; }; - 08B7F1EEF1790199C348BD616B3E24AE /* PBKDF2.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PBKDF2.swift; path = Sources/CryptoSwift/PKCS/PBKDF2.swift; sourceTree = ""; }; - 0AE94D353B662B4DD59AD354604229C3 /* MD5.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = MD5.swift; path = Sources/CryptoSwift/MD5.swift; sourceTree = ""; }; - 0B213E82199407C701961027255F3968 /* LibSecp256k1Extension.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = LibSecp256k1Extension.swift; path = Sources/Convenience/LibSecp256k1Extension.swift; sourceTree = ""; }; - 0B90682E4857A7251A6A239A39EEF830 /* Catchable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Catchable.swift; path = Sources/Catchable.swift; sourceTree = ""; }; - 0C8AA351E1BF3DB9691B5B0DC4FB8441 /* SHA2.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SHA2.swift; path = Sources/CryptoSwift/SHA2.swift; sourceTree = ""; }; - 0CA5927EAAE56DD0648824C11833F95E /* BlockExplorer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BlockExplorer.swift; path = Sources/Deprecated/BlockExplorer.swift; sourceTree = ""; }; - 0DCC1E81F394DF2AC3DAF0E19A80E4A4 /* Integer Conversion.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Integer Conversion.swift"; path = "sources/Integer Conversion.swift"; sourceTree = ""; }; - 0DE4AF58D3C89E3727F8B6D6C3597499 /* Words and Bits.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Words and Bits.swift"; path = "sources/Words and Bits.swift"; sourceTree = ""; }; - 0E4CC17AF81A45606F71ACC5C8BF7831 /* EthereumTransaction.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = EthereumTransaction.swift; path = Sources/Transaction/EthereumTransaction.swift; sourceTree = ""; }; - 0E56949D28EA9CBA3ED7ED03F14A5AD9 /* ERC777.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ERC777.swift; path = Sources/Contracts/ERC777.swift; sourceTree = ""; }; - 0F34FEA32803AAFCF536476052C8914A /* NSNotificationCenter+Promise.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "NSNotificationCenter+Promise.swift"; path = "Extensions/Foundation/Sources/NSNotificationCenter+Promise.swift"; sourceTree = ""; }; - 0F49224321685FC93392BD3FB5C5A2D1 /* UInt64+Extension.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "UInt64+Extension.swift"; path = "Sources/CryptoSwift/UInt64+Extension.swift"; sourceTree = ""; }; - 11433713C0BB0884D8109DCE92B84AF5 /* W3Web3.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = W3Web3.swift; path = Sources/ObjectiveC/W3Web3.swift; sourceTree = ""; }; - 119271CF472742A15F9FB023C2A22BC2 /* BIP32KeystoreJSONStructure.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BIP32KeystoreJSONStructure.swift; path = Sources/KeystoreManager/BIP32KeystoreJSONStructure.swift; sourceTree = ""; }; - 11935B49D81506A856A04A2CBDF17D94 /* num_gmp.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = num_gmp.h; path = secp256k1/Classes/secp256k1/src/num_gmp.h; sourceTree = ""; }; - 12565C213FF185E2106E1A013F9D7672 /* BIP39+WordLists.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "BIP39+WordLists.swift"; path = "Sources/KeystoreManager/BIP39+WordLists.swift"; sourceTree = ""; }; - 128F5488DEFFD1C3D786BD0708F25642 /* BatchedCollection.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BatchedCollection.swift; path = Sources/CryptoSwift/BatchedCollection.swift; sourceTree = ""; }; + 03BD28F1C61CE918C64BF2FDA52CAEE9 /* Configuration.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Configuration.swift; path = Sources/Configuration.swift; sourceTree = ""; }; + 04E455390F27F109776B6C4D727E2981 /* PCBC.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PCBC.swift; path = Sources/CryptoSwift/BlockMode/PCBC.swift; sourceTree = ""; }; + 056F92BF525AF8FA06347BA64BD52508 /* AbstractKeystore.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AbstractKeystore.swift; path = Sources/KeystoreManager/AbstractKeystore.swift; sourceTree = ""; }; + 05D3ACE550E15168F74E25A55B5F17B7 /* scalar_4x64_impl.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = scalar_4x64_impl.h; path = secp256k1/Classes/secp256k1/src/scalar_4x64_impl.h; sourceTree = ""; }; + 05FC826C8AB6222C730376BB9D176956 /* ChaCha20+Foundation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "ChaCha20+Foundation.swift"; path = "Sources/CryptoSwift/Foundation/ChaCha20+Foundation.swift"; sourceTree = ""; }; + 069436EA083AF69D4560EA1633DBA9A0 /* SolidityDataWriter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SolidityDataWriter.swift; path = Sources/Transactions/SolidityDataWriter.swift; sourceTree = ""; }; + 078BB9F2F5D7B51D34FA24BA8F34B921 /* CompactMap.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CompactMap.swift; path = Sources/CryptoSwift/CompactMap.swift; sourceTree = ""; }; + 08A008562769272750D46C151511C680 /* NoPadding.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = NoPadding.swift; path = Sources/CryptoSwift/NoPadding.swift; sourceTree = ""; }; + 08E30008B02494E513E76BA05FBA754D /* W3JsonRpc.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = W3JsonRpc.swift; path = Sources/ObjectiveC/W3JsonRpc.swift; sourceTree = ""; }; + 097E102AFA7E8517A941B51D74BAE3D2 /* Web3+Contract.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Web3+Contract.swift"; path = "Sources/Web3/Web3+Contract.swift"; sourceTree = ""; }; + 0A82257AD30BC58BB4AD3B96AF9306E9 /* Web3+Utils.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Web3+Utils.swift"; path = "Sources/Web3/Web3+Utils.swift"; sourceTree = ""; }; + 0B26F45A6672620E36B004104ED2BF9C /* Utils+Foundation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Utils+Foundation.swift"; path = "Sources/CryptoSwift/Foundation/Utils+Foundation.swift"; sourceTree = ""; }; + 0BDE90B8AF54820F1C505E04F43798B6 /* BlockModeOptions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BlockModeOptions.swift; path = Sources/CryptoSwift/BlockMode/BlockModeOptions.swift; sourceTree = ""; }; + 0BFA512E6D88B1925B2ACC11DE5A2FB6 /* W3Personal.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = W3Personal.swift; path = Sources/ObjectiveC/W3Personal.swift; sourceTree = ""; }; + 0C2822F5BCA2B5A2CD5ABE54AD072A1A /* Data Conversion.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Data Conversion.swift"; path = "sources/Data Conversion.swift"; sourceTree = ""; }; + 0CCF7BF7AF623677EECC00EEA9FBE61A /* NSTask+AnyPromise.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSTask+AnyPromise.h"; path = "Extensions/Foundation/Sources/NSTask+AnyPromise.h"; sourceTree = ""; }; + 0DE98010B3A8966FB5726C6AB1FD4973 /* BlockMode.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BlockMode.swift; path = Sources/CryptoSwift/BlockMode/BlockMode.swift; sourceTree = ""; }; + 10283EB72FA757EC47D2155F1DD1D56D /* Transaction.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Transaction.swift; path = Sources/Transactions/Transaction.swift; sourceTree = ""; }; + 11CB1AB2829E37C20C39CB2F46E55418 /* PBKDF1.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PBKDF1.swift; path = Sources/CryptoSwift/PKCS/PBKDF1.swift; sourceTree = ""; }; + 121E3691FAB2465D90B2090B71AC8C94 /* lax_der_privatekey_parsing.c */ = {isa = PBXFileReference; includeInIndex = 1; name = lax_der_privatekey_parsing.c; path = secp256k1/Classes/secp256k1/contrib/lax_der_privatekey_parsing.c; sourceTree = ""; }; + 12283BCF5F3F9AC4914BE69B1E352A11 /* Error.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Error.swift; path = Sources/Error.swift; sourceTree = ""; }; 138892441A5B43660E6766A7D981C559 /* Pods-web3swiftExample.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-web3swiftExample.release.xcconfig"; sourceTree = ""; }; - 1441D917D59136EBE81D178A21520773 /* Prime Test.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Prime Test.swift"; path = "sources/Prime Test.swift"; sourceTree = ""; }; - 16543E04CF5DE177695D8D12EFCA7500 /* Web3+Instance.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Web3+Instance.swift"; path = "Sources/Web3/Web3+Instance.swift"; sourceTree = ""; }; - 16C9C64C2F911C8AFDE29B9D08DCFA7D /* UIViewController+AnyPromise.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIViewController+AnyPromise.h"; path = "Extensions/UIKit/Sources/UIViewController+AnyPromise.h"; sourceTree = ""; }; - 18BD1DF659DBFE582679481FC5B126B8 /* Error.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Error.swift; path = Sources/Error.swift; sourceTree = ""; }; - 1967E1F86C08C8172CBCACEF9EC537E3 /* num_impl.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = num_impl.h; path = secp256k1/Classes/secp256k1/src/num_impl.h; sourceTree = ""; }; - 1B60D2F8B6A435660E4BEF8F026219C7 /* BlockModeOptions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BlockModeOptions.swift; path = Sources/CryptoSwift/BlockMode/BlockModeOptions.swift; sourceTree = ""; }; - 1C2E581F11B0E11E91AC9F50756FB7BE /* field_10x26.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = field_10x26.h; path = secp256k1/Classes/secp256k1/src/field_10x26.h; sourceTree = ""; }; - 1C98760F994CA395F12A34E14016C07C /* String+FoundationExtension.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "String+FoundationExtension.swift"; path = "Sources/CryptoSwift/Foundation/String+FoundationExtension.swift"; sourceTree = ""; }; - 1CA2B31A0C8255603E7ED05DDC223D32 /* Array+Extension.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Array+Extension.swift"; path = "Sources/Convenience/Array+Extension.swift"; sourceTree = ""; }; - 1CC1BBFEB9186646426F4D9DB837A1C4 /* BIP32Keystore.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BIP32Keystore.swift; path = Sources/KeystoreManager/BIP32Keystore.swift; sourceTree = ""; }; - 1D486E26367818F682831E597222E1A1 /* Addition.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Addition.swift; path = sources/Addition.swift; sourceTree = ""; }; - 1DD3DFF154E8D99B2DE5E1EFEF16F8DA /* Hashable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Hashable.swift; path = sources/Hashable.swift; sourceTree = ""; }; - 1E5B02857A6C437A754788617BD9DABE /* Batching.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Batching.swift; path = Sources/Web3/Batching.swift; sourceTree = ""; }; - 206877A0343955E206D763CD51DBB28D /* UInt128.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = UInt128.swift; path = Sources/CryptoSwift/UInt128.swift; sourceTree = ""; }; - 2073146793BFFD098C78F2FD8B040475 /* StreamDecryptor.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = StreamDecryptor.swift; path = Sources/CryptoSwift/StreamDecryptor.swift; sourceTree = ""; }; - 22187C79C79098AB43AF131A8275520C /* CFB.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CFB.swift; path = Sources/CryptoSwift/BlockMode/CFB.swift; sourceTree = ""; }; - 22AAF319B8F0B0C5E990620D271C7D67 /* PromiseKit-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "PromiseKit-umbrella.h"; path = "../../Headers/Public/PromiseKit/PromiseKit-umbrella.h"; sourceTree = ""; }; + 139758EC9623F3C2D9FA4EC1F4D0A542 /* PromiseKit.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PromiseKit.h; path = Sources/PromiseKit.h; sourceTree = ""; }; + 14629FAD6FB40143B0A3DC72FA570C0C /* scalar.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = scalar.h; path = secp256k1/Classes/secp256k1/src/scalar.h; sourceTree = ""; }; + 152769DE4560B8499E0933B0D268D91D /* Web3+EventParser.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Web3+EventParser.swift"; path = "Sources/Web3/Web3+EventParser.swift"; sourceTree = ""; }; + 16491032ECC6F0C1C3F5F16EC7FD34F5 /* PromiseKit.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = PromiseKit.xcconfig; sourceTree = ""; }; + 1660EAFD01A4651EE2CDE370C121DFDF /* Box.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Box.swift; path = Sources/Box.swift; sourceTree = ""; }; + 1815711A9869D220E848A46359825385 /* AEAD.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AEAD.swift; path = Sources/CryptoSwift/AEAD/AEAD.swift; sourceTree = ""; }; + 182C4A0B2361BCBAA99560481834F610 /* HMAC.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = HMAC.swift; path = Sources/Encryption/Cryptor/HMAC.swift; sourceTree = ""; }; + 1854EADF02D1B6AA020278DE3746BA11 /* Web3+Instance.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Web3+Instance.swift"; path = "Sources/Web3/Web3+Instance.swift"; sourceTree = ""; }; + 18F713DB07A71F241479241E86BE639A /* Codable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Codable.swift; path = sources/Codable.swift; sourceTree = ""; }; + 194210F828E7960C67AE58C12DB912D2 /* AES.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AES.swift; path = Sources/Encryption/AES.swift; sourceTree = ""; }; + 1984A5610D10DEF0E3AF19C8ACC2D5FA /* scratch.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = scratch.h; path = secp256k1/Classes/secp256k1/src/scratch.h; sourceTree = ""; }; + 19BB6AFB71817EC7D0EE3602F5F177F1 /* Subtraction.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Subtraction.swift; path = sources/Subtraction.swift; sourceTree = ""; }; + 1ACE6BF9F8E004001ADF038C08274CC9 /* SecurityToken.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SecurityToken.swift; path = Sources/Contracts/SecurityToken.swift; sourceTree = ""; }; + 1AEAB4BC85800666C7F02E1A235CC06C /* web3swift-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "web3swift-dummy.m"; sourceTree = ""; }; + 1CCE005629EFDD560F96BC0057928915 /* join.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = join.m; path = Sources/join.m; sourceTree = ""; }; + 20E6C6615A8722C91F5E1A0BC053684B /* Addition.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Addition.swift; path = sources/Addition.swift; sourceTree = ""; }; + 210489C46FB4E1B307A47B9480B1EBC2 /* UInt64+Extension.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "UInt64+Extension.swift"; path = "Sources/CryptoSwift/UInt64+Extension.swift"; sourceTree = ""; }; + 21A3E5B9C189B413005D3D07842BD1B4 /* BIP32HDNode.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BIP32HDNode.swift; path = Sources/KeystoreManager/BIP32HDNode.swift; sourceTree = ""; }; 22B5028B455BC2616DA0209A350F33AC /* libweb3swift.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; name = libweb3swift.a; path = libweb3swift.a; sourceTree = BUILT_PRODUCTS_DIR; }; - 24137077676C831A6D7DB3A4A5D0DF0D /* Rabbit.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Rabbit.swift; path = Sources/CryptoSwift/Rabbit.swift; sourceTree = ""; }; - 244D45747E22A85D556B619478D50DA7 /* Cipher.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Cipher.swift; path = Sources/CryptoSwift/Cipher.swift; sourceTree = ""; }; + 22F490D97EC429B129BF2B8FE6F0BBB9 /* PKCS7Padding.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PKCS7Padding.swift; path = Sources/CryptoSwift/PKCS/PKCS7Padding.swift; sourceTree = ""; }; + 23AE376B36F24D44457DB21BC3015C37 /* TxPool.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = TxPool.swift; path = Sources/TxPool/TxPool.swift; sourceTree = ""; }; + 242D6CA2000FE946CF5051C82CDF52B7 /* CTR.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CTR.swift; path = Sources/CryptoSwift/BlockMode/CTR.swift; sourceTree = ""; }; 2497FA5F5C69C71ECF07A5F41831422B /* libBigInt.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; name = libBigInt.a; path = libBigInt.a; sourceTree = BUILT_PRODUCTS_DIR; }; - 258E58DA8910ED9D6C8446476D3E4D47 /* RandomBytesSequence.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RandomBytesSequence.swift; path = Sources/CryptoSwift/RandomBytesSequence.swift; sourceTree = ""; }; - 25AC0C3A7FBE683D9C77F7D81072A064 /* BlockEncryptor.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BlockEncryptor.swift; path = Sources/CryptoSwift/BlockEncryptor.swift; sourceTree = ""; }; - 25FCF5EDD3A59297D455F8C0D77C0271 /* Web3+EventParser.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Web3+EventParser.swift"; path = "Sources/Web3/Web3+EventParser.swift"; sourceTree = ""; }; - 262973B0CCA699D7E4FA87499AE05761 /* after.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = after.m; path = Sources/after.m; sourceTree = ""; }; + 2515CABA83AC1B6A45DFC6FE4B26DCD5 /* EthereumAddress.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = EthereumAddress.swift; path = Sources/KeystoreManager/EthereumAddress.swift; sourceTree = ""; }; + 25267DCFAA145B7E4CB7177EA399A440 /* BlockDecryptor.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BlockDecryptor.swift; path = Sources/CryptoSwift/BlockDecryptor.swift; sourceTree = ""; }; + 255DF073A7D6A6941C3A0AE4F19508A9 /* SecureBytes.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SecureBytes.swift; path = Sources/CryptoSwift/SecureBytes.swift; sourceTree = ""; }; + 267F14B84C228B87BD58C9A56DB7ADA9 /* Web3+Methods.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Web3+Methods.swift"; path = "Sources/Web3/Web3+Methods.swift"; sourceTree = ""; }; 26986386406787D15D8C39F0B109D08A /* Pods-web3swiftExample-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-web3swiftExample-umbrella.h"; sourceTree = ""; }; - 2865A1F0790AEEE206D97BC74C1377FE /* W3Structs.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = W3Structs.swift; path = Sources/ObjectiveC/W3Structs.swift; sourceTree = ""; }; - 28C19B4FE9B5F089948A97E83F96DADF /* secp256k1.swift-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "secp256k1.swift-prefix.pch"; sourceTree = ""; }; - 2914E9E7A43D92ACE3A565AA03CF13B5 /* ABIv2Parsing.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ABIv2Parsing.swift; path = Sources/ABIv2/ABIv2Parsing.swift; sourceTree = ""; }; - 296F89415B729E1A5EF75AE842AC9F0C /* W3Contracts.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = W3Contracts.swift; path = Sources/ObjectiveC/W3Contracts.swift; sourceTree = ""; }; - 2A9445790A74FC3309D763EC2B5DA37C /* CryptoSwift-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "CryptoSwift-umbrella.h"; path = "../../Headers/Public/CryptoSwift/CryptoSwift-umbrella.h"; sourceTree = ""; }; - 2B48AEFEB678203446638C184A53E64B /* ContractProtocol.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ContractProtocol.swift; path = Sources/Contract/ContractProtocol.swift; sourceTree = ""; }; - 2B72FAF0466F332EC9546BEFD0640340 /* RLP.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RLP.swift; path = Sources/Utils/RLP.swift; sourceTree = ""; }; - 2BEE5B11D316AF65FE2E3566735866B1 /* AnyPromise.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AnyPromise.swift; path = Sources/AnyPromise.swift; sourceTree = ""; }; + 28EB2496C0D9D63F363E73D83F86D86A /* scalar_8x32.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = scalar_8x32.h; path = secp256k1/Classes/secp256k1/src/scalar_8x32.h; sourceTree = ""; }; + 29420FCD6AE4F4E15CEB9BF2D0179EFD /* lax_der_parsing.c */ = {isa = PBXFileReference; includeInIndex = 1; name = lax_der_parsing.c; path = secp256k1/Classes/secp256k1/contrib/lax_der_parsing.c; sourceTree = ""; }; + 2AAFAE8BEE01EAB08809FEE5BF7D5DD4 /* scalar_low.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = scalar_low.h; path = secp256k1/Classes/secp256k1/src/scalar_low.h; sourceTree = ""; }; + 2B0871E7C2D3BB9A76E9C8DFCF3ECFD7 /* SipHash-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "SipHash-umbrella.h"; path = "../../Headers/Public/SipHash/SipHash-umbrella.h"; sourceTree = ""; }; + 2B8FA8C0DB1B4B91832B4912D543515F /* IBAN.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IBAN.swift; path = Sources/KeystoreManager/IBAN.swift; sourceTree = ""; }; 2C1996F80885B2585F41AC859FF99F5F /* libPromiseKit.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; name = libPromiseKit.a; path = libPromiseKit.a; sourceTree = BUILT_PRODUCTS_DIR; }; - 2D06DEDD2D057F88A07E3742F6C8FAD0 /* NSObject+Promise.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "NSObject+Promise.swift"; path = "Extensions/Foundation/Sources/NSObject+Promise.swift"; sourceTree = ""; }; - 2D1746624F021CB809D79A21F85BCD0B /* PBKDF1.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PBKDF1.swift; path = Sources/CryptoSwift/PKCS/PBKDF1.swift; sourceTree = ""; }; - 2E3673DDA300BDEBBC5701EA35C231A2 /* field_5x52.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = field_5x52.h; path = secp256k1/Classes/secp256k1/src/field_5x52.h; sourceTree = ""; }; + 2CD8AA63468BECE721C4700DC34DD46D /* BigUInt.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BigUInt.swift; path = sources/BigUInt.swift; sourceTree = ""; }; + 2DADF2ED577DB06A8C7F164E7F805EA1 /* ChaCha20.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ChaCha20.swift; path = Sources/CryptoSwift/ChaCha20.swift; sourceTree = ""; }; + 2E00EFC2F83AF924EEDEE93D74F7E659 /* hang.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = hang.m; path = Sources/hang.m; sourceTree = ""; }; + 2E7AB5EBF92C75116FA20091365F42E2 /* secp256k1.c */ = {isa = PBXFileReference; includeInIndex = 1; name = secp256k1.c; path = secp256k1/Classes/secp256k1/src/secp256k1.c; sourceTree = ""; }; 2EFB40531CB700ADF867FEEE78561E78 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS12.0.sdk/System/Library/Frameworks/Foundation.framework; sourceTree = DEVELOPER_DIR; }; - 2F1E4CC2ACC97BC650C16D5EE5CC903D /* HMAC+Foundation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "HMAC+Foundation.swift"; path = "Sources/CryptoSwift/Foundation/HMAC+Foundation.swift"; sourceTree = ""; }; - 2FBCE753FC8595A1BE151276260F520D /* Square Root.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Square Root.swift"; path = "sources/Square Root.swift"; sourceTree = ""; }; - 30F206A3EB5F9D5127CF900D217E8B52 /* lax_der_parsing.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = lax_der_parsing.h; path = secp256k1/Classes/secp256k1/contrib/lax_der_parsing.h; sourceTree = ""; }; - 314BD93C01C9ECB7BA859B6FE82D980A /* BigUInt.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BigUInt.swift; path = sources/BigUInt.swift; sourceTree = ""; }; - 328147F8A8C036411A1541CA81D02364 /* field.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = field.h; path = secp256k1/Classes/secp256k1/src/field.h; sourceTree = ""; }; - 32F4C75362A1F8CB3872EC49486E8A8F /* CustomStringConvertible.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CustomStringConvertible.swift; path = Sources/CustomStringConvertible.swift; sourceTree = ""; }; + 2F6975E42C8EF5304CDC82F17B3351B3 /* web3swift-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "web3swift-umbrella.h"; path = "../../Headers/Public/web3swift/web3swift-umbrella.h"; sourceTree = ""; }; + 2FF184E190BFD19A4F5E7AFCF6BD4FB8 /* Crypto.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Crypto.swift; path = Sources/Encryption/Cryptor/Crypto.swift; sourceTree = ""; }; + 3022EB26C04CBD2B44459F77A25033D5 /* EventFiltering.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = EventFiltering.swift; path = Sources/Contract/EventFiltering.swift; sourceTree = ""; }; + 30C0A341948993A6DF7177A35DC594F3 /* ERC888.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ERC888.swift; path = Sources/Contracts/ERC888.swift; sourceTree = ""; }; + 311F220921CFD98F105DF864D2163127 /* W3Contracts.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = W3Contracts.swift; path = Sources/ObjectiveC/W3Contracts.swift; sourceTree = ""; }; + 325639E6BE721ADD407D1C4DA421F577 /* NSRegularExpressionExtension.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = NSRegularExpressionExtension.swift; path = Sources/Convenience/NSRegularExpressionExtension.swift; sourceTree = ""; }; + 3336EA4AA1579C4905C29899892E0AFC /* HKDF.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = HKDF.swift; path = Sources/CryptoSwift/HKDF.swift; sourceTree = ""; }; + 344A4652CCE668F42005F6FCA6A7BDD4 /* Prime Test.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Prime Test.swift"; path = "sources/Prime Test.swift"; sourceTree = ""; }; + 3475FA4FA24DF5C25B8E43D4759649C4 /* W3TransactionIntermediate.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = W3TransactionIntermediate.swift; path = Sources/ObjectiveC/W3TransactionIntermediate.swift; sourceTree = ""; }; + 347FCD3ECF9C2620CB3FEBCAFA3B3680 /* lax_der_parsing.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = lax_der_parsing.h; path = secp256k1/Classes/secp256k1/contrib/lax_der_parsing.h; sourceTree = ""; }; + 34982F96661D907CE08E6156EA90174C /* W3UInt.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = W3UInt.swift; path = Sources/ObjectiveC/W3UInt.swift; sourceTree = ""; }; 35B937B7601221828F051CFC651BA2EE /* libSipHash.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; name = libSipHash.a; path = libSipHash.a; sourceTree = BUILT_PRODUCTS_DIR; }; - 35C6DA12D862927A1E130AA75F0408C0 /* AES+Foundation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "AES+Foundation.swift"; path = "Sources/CryptoSwift/Foundation/AES+Foundation.swift"; sourceTree = ""; }; - 36CC33F5473C9EB5587AD3FACA6B90DE /* NSURLSession+AnyPromise.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSURLSession+AnyPromise.m"; path = "Extensions/Foundation/Sources/NSURLSession+AnyPromise.m"; sourceTree = ""; }; - 37D56D19E935FEBA5608556446D8CFD7 /* PMKFoundation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PMKFoundation.h; path = Extensions/Foundation/Sources/PMKFoundation.h; sourceTree = ""; }; - 3836B05F25F7FD113337141424BF2529 /* SolidityTypes.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SolidityTypes.swift; path = Sources/ABIv2/SolidityTypes.swift; sourceTree = ""; }; - 386A031384E6E93E4C37BFC1C57D6CB2 /* Strideable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Strideable.swift; path = sources/Strideable.swift; sourceTree = ""; }; - 3886BF9954F9B2D273148C543BED40F9 /* PromiseKit.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; name = PromiseKit.modulemap; path = ../../Headers/Public/PromiseKit/PromiseKit.modulemap; sourceTree = ""; }; - 3920B1C5D19CDCFBB3C7E8FE3815B867 /* Web3+Methods.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Web3+Methods.swift"; path = "Sources/Web3/Web3+Methods.swift"; sourceTree = ""; }; - 3BC8DFEEF8669C655454332162D20485 /* OFB.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = OFB.swift; path = Sources/CryptoSwift/BlockMode/OFB.swift; sourceTree = ""; }; - 40114C10B5CCEE77D6E7B9C474CEFBC7 /* EthereumAddress.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = EthereumAddress.swift; path = Sources/KeystoreManager/EthereumAddress.swift; sourceTree = ""; }; - 41A672B1904703B02BD78103EB364BEF /* NoPadding.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = NoPadding.swift; path = Sources/CryptoSwift/NoPadding.swift; sourceTree = ""; }; - 41D9268646A911E21DF5AEC5784D87F5 /* Thenable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Thenable.swift; path = Sources/Thenable.swift; sourceTree = ""; }; - 4200265A11EA77B6341D67869612F075 /* ecmult_gen.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ecmult_gen.h; path = secp256k1/Classes/secp256k1/src/ecmult_gen.h; sourceTree = ""; }; - 434E47E1578E93D391AC801AE96B81A2 /* BigInt-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "BigInt-umbrella.h"; path = "../../Headers/Public/BigInt/BigInt-umbrella.h"; sourceTree = ""; }; - 43FCE27F7CFE2BF785C0631A77487B46 /* field_impl.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = field_impl.h; path = secp256k1/Classes/secp256k1/src/field_impl.h; sourceTree = ""; }; - 453D568D4E91B73895395AC74DE1EFC2 /* PMKUIKit.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PMKUIKit.h; path = Extensions/UIKit/Sources/PMKUIKit.h; sourceTree = ""; }; - 4767B3A87DD2A40D67DAE811DD600320 /* hash.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = hash.h; path = secp256k1/Classes/secp256k1/src/hash.h; sourceTree = ""; }; - 488707222647CD1E0EFA101AC53F2CE0 /* EIP67Code.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = EIP67Code.swift; path = Sources/Utils/EIP67Code.swift; sourceTree = ""; }; - 4A5DE251B01651B7A7A53C7434DB35DC /* Bit.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Bit.swift; path = Sources/CryptoSwift/Bit.swift; sourceTree = ""; }; - 4AD941010F2B34FF0A83E014985D3E1F /* EthereumKeystoreV3.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = EthereumKeystoreV3.swift; path = Sources/KeystoreManager/EthereumKeystoreV3.swift; sourceTree = ""; }; - 4B93AEF08CD9D0B3A95B4578D9A49F1C /* PromiseKit-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "PromiseKit-dummy.m"; sourceTree = ""; }; - 4D45593787CC7A3AC5EFD798FDB7825A /* KeystoreV3JSONStructure.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = KeystoreV3JSONStructure.swift; path = Sources/KeystoreManager/KeystoreV3JSONStructure.swift; sourceTree = ""; }; - 4F944ECF152E4C57D2F193E88DC68232 /* W3Provider.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = W3Provider.swift; path = Sources/ObjectiveC/W3Provider.swift; sourceTree = ""; }; - 5012A7EB246D392D8799AADC7096637B /* PromiseKit.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = PromiseKit.xcconfig; sourceTree = ""; }; - 501837E83E96A8F29515044102A7CC1C /* Migration.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Migration.swift; path = Sources/Migration.swift; sourceTree = ""; }; - 502B38C2BA985014F8B3752A65A3E64B /* EventFiltering.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = EventFiltering.swift; path = Sources/Contract/EventFiltering.swift; sourceTree = ""; }; - 5063221CDC264E5A2ED2339F38D4BAB2 /* join.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = join.m; path = Sources/join.m; sourceTree = ""; }; - 50CFD7BE304368D7A74CBF1BFFA1AAB9 /* CTR.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CTR.swift; path = Sources/CryptoSwift/BlockMode/CTR.swift; sourceTree = ""; }; - 50E4355CB3D086EA6B348922D815599A /* W3Eth.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = W3Eth.swift; path = Sources/ObjectiveC/W3Eth.swift; sourceTree = ""; }; + 3604B765CC022357C0DB3C1EA0489564 /* ecdsa.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ecdsa.h; path = secp256k1/Classes/secp256k1/src/ecdsa.h; sourceTree = ""; }; + 36915B25F27DFFDC9564E95D23E22D34 /* Array+Extension.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Array+Extension.swift"; path = "Sources/Convenience/Array+Extension.swift"; sourceTree = ""; }; + 3843BF01A53C05BBE20F935F232DFCC0 /* TransactionSigner.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = TransactionSigner.swift; path = Sources/Transaction/TransactionSigner.swift; sourceTree = ""; }; + 38B4ECBBD27BB5CC17975EE3722BA7A9 /* Primitive Types.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Primitive Types.swift"; path = "SipHash/Primitive Types.swift"; sourceTree = ""; }; + 38DB7DDD12CCFE738AAB60B319720E14 /* RandomUInt64.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RandomUInt64.swift; path = SipHash/RandomUInt64.swift; sourceTree = ""; }; + 395474270A0297AC92A048DAF3FE999D /* basic-config.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "basic-config.h"; path = "secp256k1/Classes/secp256k1/src/basic-config.h"; sourceTree = ""; }; + 39CB4EC60CFB0DCDE2DDB07653CE5F49 /* NSURLSession+AnyPromise.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSURLSession+AnyPromise.m"; path = "Extensions/Foundation/Sources/NSURLSession+AnyPromise.m"; sourceTree = ""; }; + 3A06501C2D31D084B44A335F1FB550BC /* Web3.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Web3.swift; path = Sources/Web3/Web3.swift; sourceTree = ""; }; + 3B049902C933CA2C9DA679ADCD85A985 /* eckey.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = eckey.h; path = secp256k1/Classes/secp256k1/src/eckey.h; sourceTree = ""; }; + 3BE267986AA8998D2E0A54AA0C0A93A9 /* Updatable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Updatable.swift; path = Sources/Encryption/Cryptor/Updatable.swift; sourceTree = ""; }; + 3C39F43F1445B754FE5D873E79FA7468 /* DerivedKey.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DerivedKey.swift; path = Sources/Encryption/DerivedKey.swift; sourceTree = ""; }; + 3D22F914863B69F74C6C9260C01646C2 /* scalar_impl.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = scalar_impl.h; path = secp256k1/Classes/secp256k1/src/scalar_impl.h; sourceTree = ""; }; + 3E2913F98119802161D912CA04ECE41A /* Web3+Options.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Web3+Options.swift"; path = "Sources/Web3/Web3+Options.swift"; sourceTree = ""; }; + 3E5082D2CE9B4D00FA5D8FEFFEF3B6A4 /* Promise.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Promise.swift; path = Sources/Promise.swift; sourceTree = ""; }; + 3F01ECBF3421C30613D3F570F97834C5 /* PromiseKit.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; name = PromiseKit.modulemap; path = ../../Headers/Public/PromiseKit/PromiseKit.modulemap; sourceTree = ""; }; + 3F7C2D4D0DA76502C4B0BB1EAB5EB6AA /* W3Provider.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = W3Provider.swift; path = Sources/ObjectiveC/W3Provider.swift; sourceTree = ""; }; + 3FDB735EA365FD5213A318E67F59530C /* Web3+HttpProvider.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Web3+HttpProvider.swift"; path = "Sources/Web3/Web3+HttpProvider.swift"; sourceTree = ""; }; + 400C2A38E54CF66A9F77E7285BFF95DD /* SolidityTypes.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SolidityTypes.swift; path = Sources/Transactions/SolidityTypes.swift; sourceTree = ""; }; + 40D2D28099E625A2766B135710553F3F /* Guides.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Guides.swift; path = Sources/Guides.swift; sourceTree = ""; }; + 41407CD287ECF03435BCFC21193FA2D8 /* BlockCipher.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BlockCipher.swift; path = Sources/CryptoSwift/BlockCipher.swift; sourceTree = ""; }; + 41BF4497A3C9498417FA2FF2791C38CC /* StreamCryptor.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = StreamCryptor.swift; path = Sources/Encryption/Cryptor/StreamCryptor.swift; sourceTree = ""; }; + 430835A0F03D2A5A84DBE11BCA4E57EF /* secp256k1.swift-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "secp256k1.swift-prefix.pch"; sourceTree = ""; }; + 4510B28955CEC6583DFB6236C78D391C /* AnyPromise.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AnyPromise.swift; path = Sources/AnyPromise.swift; sourceTree = ""; }; + 454D1C414EB0979EB31AC5AA88BFF669 /* HDPath.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = HDPath.swift; path = Sources/KeystoreManager/HDPath.swift; sourceTree = ""; }; + 4587CC3E549E4D083E4A993A8F557B8C /* SipHasher.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SipHasher.swift; path = SipHash/SipHasher.swift; sourceTree = ""; }; + 46390D9D981148512AC83287E3045BA2 /* UIViewController+AnyPromise.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIViewController+AnyPromise.h"; path = "Extensions/UIKit/Sources/UIViewController+AnyPromise.h"; sourceTree = ""; }; + 47ECEBBCAB10D43B1A32E0FEB32E0AD9 /* DictionaryReader.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DictionaryReader.swift; path = Sources/TxPool/DictionaryReader.swift; sourceTree = ""; }; + 48046E83BFCB7C78717CDE406F4D1CE9 /* Bit.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Bit.swift; path = Sources/CryptoSwift/Bit.swift; sourceTree = ""; }; + 491185EE43B9BD095EF1FAA2497D8DA7 /* ABIv2Elements.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ABIv2Elements.swift; path = Sources/ABIv2/ABIv2Elements.swift; sourceTree = ""; }; + 49E6C3ACB6B1F4B2BAC07F2D9EB6C7D1 /* Updatable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Updatable.swift; path = Sources/CryptoSwift/Updatable.swift; sourceTree = ""; }; + 49F2AB62198BA69B964A420659A67A6F /* afterlife.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = afterlife.swift; path = Extensions/Foundation/Sources/afterlife.swift; sourceTree = ""; }; + 49FA5A37390AB75FD00980BAEF39DA75 /* Rabbit.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Rabbit.swift; path = Sources/CryptoSwift/Rabbit.swift; sourceTree = ""; }; + 4B52C0A803796E2C08EA0D308B88F98C /* Web3+Wallet.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Web3+Wallet.swift"; path = "Sources/HookedFunctions/Web3+Wallet.swift"; sourceTree = ""; }; + 4B5AC0EDD6F09683D57828771D2ACEDC /* dispatch_promise.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = dispatch_promise.m; path = Sources/dispatch_promise.m; sourceTree = ""; }; + 4C9671380679AC08F2DFC9275D8F55EC /* Comparable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Comparable.swift; path = sources/Comparable.swift; sourceTree = ""; }; + 4DCF072F17844A4F41C51E72E7BED388 /* String+FoundationExtension.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "String+FoundationExtension.swift"; path = "Sources/CryptoSwift/Foundation/String+FoundationExtension.swift"; sourceTree = ""; }; + 4DEF8B22CCFC30A3F52085A421509B35 /* EthereumKeystoreV3.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = EthereumKeystoreV3.swift; path = Sources/KeystoreManager/EthereumKeystoreV3.swift; sourceTree = ""; }; + 4EE1D977186B9FF7727A1099274E4D80 /* UInt128.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = UInt128.swift; path = Sources/CryptoSwift/UInt128.swift; sourceTree = ""; }; + 4EF06ABD9B0D6698054EC2AA8D90DF1B /* main_impl.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = main_impl.h; path = secp256k1/Classes/secp256k1/src/modules/recovery/main_impl.h; sourceTree = ""; }; + 4F2E05ED5642B3C80E510E7729A65AC7 /* ecmult_gen.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ecmult_gen.h; path = secp256k1/Classes/secp256k1/src/ecmult_gen.h; sourceTree = ""; }; + 50C46CB5675D6E2C1833E910D6FF7AE6 /* CipherModeWorker.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CipherModeWorker.swift; path = Sources/CryptoSwift/BlockMode/CipherModeWorker.swift; sourceTree = ""; }; 50EA02714EC707E77A1214BBC12D9969 /* Pods-web3swiftExample-resources.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-web3swiftExample-resources.sh"; sourceTree = ""; }; - 5180C96A3F2C4F6E6EB0F99A2C753E92 /* Guarantee.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Guarantee.swift; path = Sources/Guarantee.swift; sourceTree = ""; }; - 5267CEA0BA9A1E0761AD465D9265501C /* CryptoSwift.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = CryptoSwift.xcconfig; sourceTree = ""; }; - 5359668EAB1F3FDD9B4FCC924CD62D13 /* lax_der_privatekey_parsing.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = lax_der_privatekey_parsing.h; path = secp256k1/Classes/secp256k1/contrib/lax_der_privatekey_parsing.h; sourceTree = ""; }; - 54805BFC6BA6EDA4FDEAD09ED659AD89 /* eckey.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = eckey.h; path = secp256k1/Classes/secp256k1/src/eckey.h; sourceTree = ""; }; - 54E530AA65A2CFFE4F42131EB97DB4C1 /* afterlife.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = afterlife.swift; path = Extensions/Foundation/Sources/afterlife.swift; sourceTree = ""; }; - 551C530E0BD8894E3EA99690F0823AD4 /* main_impl.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = main_impl.h; path = secp256k1/Classes/secp256k1/src/modules/ecdh/main_impl.h; sourceTree = ""; }; - 5549D9C8CD5FA71C4B6B763EA8FD7401 /* ecmult_const_impl.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ecmult_const_impl.h; path = secp256k1/Classes/secp256k1/src/ecmult_const_impl.h; sourceTree = ""; }; - 55D2287FCE73DB9EF58308FA6B3EAF22 /* CompactMap.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CompactMap.swift; path = Sources/CryptoSwift/CompactMap.swift; sourceTree = ""; }; - 56CEDC66931C716FC04ADB1152D81E8F /* Migration-iOS.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Migration-iOS.swift"; path = "Sources/Migration-iOS.swift"; sourceTree = ""; }; - 57F7402DA8A80E8E5A66CB8CE520BF7D /* BigInt.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; name = BigInt.modulemap; path = ../../Headers/Public/BigInt/BigInt.modulemap; sourceTree = ""; }; - 581DC16F958BBE3969232EB987E08E3D /* Web3+JSONRPC.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Web3+JSONRPC.swift"; path = "Sources/Web3/Web3+JSONRPC.swift"; sourceTree = ""; }; - 591C88999022984BA7FD9CBF38A55EB1 /* SipHash-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "SipHash-umbrella.h"; path = "../../Headers/Public/SipHash/SipHash-umbrella.h"; sourceTree = ""; }; - 592588320FCF12FB8B967F372867A041 /* web3swift.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = web3swift.xcconfig; sourceTree = ""; }; - 59C746B7913EF1023EE7F440EEE284DE /* UIView+AnyPromise.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIView+AnyPromise.m"; path = "Extensions/UIKit/Sources/UIView+AnyPromise.m"; sourceTree = ""; }; + 54B3546B934CD662E74B5A0E4DD4A0D0 /* web3swift-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "web3swift-prefix.pch"; sourceTree = ""; }; + 5564CAC4742D85E4F8B7C90E17F32965 /* DigestType.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DigestType.swift; path = Sources/CryptoSwift/DigestType.swift; sourceTree = ""; }; + 55A7B9772F260392189D44F47144CF13 /* Random.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Random.swift; path = sources/Random.swift; sourceTree = ""; }; + 5793F1F10AC6DBD8AE7491B8804E2440 /* UIViewController+AnyPromise.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIViewController+AnyPromise.m"; path = "Extensions/UIKit/Sources/UIViewController+AnyPromise.m"; sourceTree = ""; }; + 579B6847FEF6AA493DF030C224101CEA /* KeyDerivation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = KeyDerivation.swift; path = Sources/Encryption/Cryptor/KeyDerivation.swift; sourceTree = ""; }; + 588B54BC44305BE62D688A2CA11DDFE7 /* PromiseKit-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "PromiseKit-prefix.pch"; sourceTree = ""; }; 59F77AE95BC9FEABC9D930C1AB687A02 /* Pods-web3swiftExample-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-web3swiftExample-dummy.m"; sourceTree = ""; }; - 5BCB141C2AD66EFA3AD7DECD3C6FF057 /* scalar_4x64_impl.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = scalar_4x64_impl.h; path = secp256k1/Classes/secp256k1/src/scalar_4x64_impl.h; sourceTree = ""; }; - 5C066022A44585CDFE3840F458996ACC /* SecureBytes.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SecureBytes.swift; path = Sources/CryptoSwift/SecureBytes.swift; sourceTree = ""; }; - 5C63D44AB099C0DAFDC25E0BC24F83FD /* Promise.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Promise.swift; path = Sources/Promise.swift; sourceTree = ""; }; - 5CAA30709849F28134935BA5890E3E39 /* SipHashable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SipHashable.swift; path = SipHash/SipHashable.swift; sourceTree = ""; }; - 5E22DF8563505CC50CD46EB54EBA3CC7 /* AbstractKeystore.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AbstractKeystore.swift; path = Sources/KeystoreManager/AbstractKeystore.swift; sourceTree = ""; }; - 5E392802F8B810FBDC888CEDD201296F /* Utils.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Utils.swift; path = Sources/CryptoSwift/Utils.swift; sourceTree = ""; }; - 5F67042A1503EB0A585A16EEECABFEAE /* Generics.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Generics.swift; path = Sources/CryptoSwift/Generics.swift; sourceTree = ""; }; - 5FD885BF1ED35CF59BDA587169EA3706 /* NSTask+AnyPromise.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSTask+AnyPromise.m"; path = "Extensions/Foundation/Sources/NSTask+AnyPromise.m"; sourceTree = ""; }; - 601F344F6358AEC169E49948C7C40F9C /* ABIv2Decoding.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ABIv2Decoding.swift; path = Sources/ABIv2/ABIv2Decoding.swift; sourceTree = ""; }; - 6057428D752A953D8A64BE24FC412439 /* BigInt-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "BigInt-dummy.m"; sourceTree = ""; }; - 60A31D981ECA79D1C8EE94E091668BF0 /* NativeTypesEncoding+Extensions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "NativeTypesEncoding+Extensions.swift"; path = "Sources/Convenience/NativeTypesEncoding+Extensions.swift"; sourceTree = ""; }; - 60B220583753D6706B77ED4AF12D0BD0 /* Digest.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Digest.swift; path = Sources/CryptoSwift/Digest.swift; sourceTree = ""; }; - 60DE2BE0351114B86AF47BE92CB7C7D2 /* W3Wallet.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = W3Wallet.swift; path = Sources/ObjectiveC/W3Wallet.swift; sourceTree = ""; }; - 61FBEF9B4568D60E87AE8A1110346BCF /* DictionaryReader.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DictionaryReader.swift; path = Sources/TxPool/DictionaryReader.swift; sourceTree = ""; }; - 631CD2935A4507165CC73441A92EA12B /* SecurityToken.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SecurityToken.swift; path = Sources/Contracts/SecurityToken.swift; sourceTree = ""; }; - 633BDDDAF5229011660D994282445E53 /* scalar_8x32_impl.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = scalar_8x32_impl.h; path = secp256k1/Classes/secp256k1/src/scalar_8x32_impl.h; sourceTree = ""; }; - 63CF6BC7483FBAE952222D596BD2E68E /* race.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = race.m; path = Sources/race.m; sourceTree = ""; }; - 64484EF028FFF44D370822A9870871DD /* Int+Sequence.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Int+Sequence.swift"; path = "Sources/Convenience/Int+Sequence.swift"; sourceTree = ""; }; - 651935C6233551F0DD9325E98C71571A /* scalar_8x32.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = scalar_8x32.h; path = secp256k1/Classes/secp256k1/src/scalar_8x32.h; sourceTree = ""; }; - 65F20C4E8CA4E4A462F3A843282CE690 /* Web3+BrowserFunctions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Web3+BrowserFunctions.swift"; path = "Sources/HookedFunctions/Web3+BrowserFunctions.swift"; sourceTree = ""; }; - 66A4BA86C057FFCE1CEE5285890F85A2 /* ABIv2TypeParser.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ABIv2TypeParser.swift; path = Sources/ABIv2/ABIv2TypeParser.swift; sourceTree = ""; }; - 66A57735E30A93BAF2734412C106DEFE /* NSURLSession+Promise.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "NSURLSession+Promise.swift"; path = "Extensions/Foundation/Sources/NSURLSession+Promise.swift"; sourceTree = ""; }; - 6773F488C4EFA761D4CA8C902ACD84E0 /* ecmult_const.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ecmult_const.h; path = secp256k1/Classes/secp256k1/src/ecmult_const.h; sourceTree = ""; }; - 6777242734065537F1053F7D9FC52CD2 /* UIViewController+AnyPromise.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIViewController+AnyPromise.m"; path = "Extensions/UIKit/Sources/UIViewController+AnyPromise.m"; sourceTree = ""; }; - 694D22A55022028256DA14464A953049 /* IBAN.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IBAN.swift; path = Sources/KeystoreManager/IBAN.swift; sourceTree = ""; }; - 6AECE74A226CC464B1BA1BDAFD6B8514 /* field_5x52_impl.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = field_5x52_impl.h; path = secp256k1/Classes/secp256k1/src/field_5x52_impl.h; sourceTree = ""; }; - 6B3B4AEF4BF1262925C80142B509BB98 /* Bitwise Ops.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Bitwise Ops.swift"; path = "sources/Bitwise Ops.swift"; sourceTree = ""; }; - 6CD08EAB72131642457E20FC2486DB9D /* Process+Promise.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Process+Promise.swift"; path = "Extensions/Foundation/Sources/Process+Promise.swift"; sourceTree = ""; }; - 6E62BB2EAF743D0AFB4DFF51BD2B9E4B /* Box.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Box.swift; path = Sources/Box.swift; sourceTree = ""; }; - 6E86DAC01EFE779F7DFC2CAE2A06FD89 /* Bridging.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Bridging.swift; path = Sources/ObjectiveC/Bridging.swift; sourceTree = ""; }; + 5A419B92E3298B9D514EF2F335BE1018 /* Cryptor.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Cryptor.swift; path = Sources/CryptoSwift/Cryptor.swift; sourceTree = ""; }; + 5D520CD6930323F56B70DE0C3DE14055 /* AES.Cryptors.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AES.Cryptors.swift; path = Sources/CryptoSwift/AES.Cryptors.swift; sourceTree = ""; }; + 5DCCFC51B181461FCA41827B490C4233 /* EthereumFilterEncodingExtensions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = EthereumFilterEncodingExtensions.swift; path = Sources/Contract/EthereumFilterEncodingExtensions.swift; sourceTree = ""; }; + 5E5081AECD30D3E286094D433E83CA3E /* SipHash-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "SipHash-dummy.m"; sourceTree = ""; }; + 5EB009DF65882D750C273CCE2CB45D5D /* Square Root.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Square Root.swift"; path = "sources/Square Root.swift"; sourceTree = ""; }; + 6035BDCEC69AC5C694645245D8141CB5 /* Bitwise Ops.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Bitwise Ops.swift"; path = "sources/Bitwise Ops.swift"; sourceTree = ""; }; + 6050A9B3827F56B20ED096577461EF1C /* num.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = num.h; path = secp256k1/Classes/secp256k1/src/num.h; sourceTree = ""; }; + 60B22E678A9111EE9C2AE8B032627499 /* StreamEncryptor.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = StreamEncryptor.swift; path = Sources/CryptoSwift/StreamEncryptor.swift; sourceTree = ""; }; + 60BB5F3EF02C6E480C288AD98113906D /* Blowfish+Foundation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Blowfish+Foundation.swift"; path = "Sources/CryptoSwift/Foundation/Blowfish+Foundation.swift"; sourceTree = ""; }; + 613C57926AE9253FFEEDE39DF3DF224C /* ABIv2ParameterTypes.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ABIv2ParameterTypes.swift; path = Sources/ABIv2/ABIv2ParameterTypes.swift; sourceTree = ""; }; + 6215BA52D8373DF8BD46E681FE20E099 /* AEADChaCha20Poly1305.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AEADChaCha20Poly1305.swift; path = Sources/CryptoSwift/AEAD/AEADChaCha20Poly1305.swift; sourceTree = ""; }; + 632251046D03D162D0B6275E7AAC744D /* SolidityFunction.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SolidityFunction.swift; path = Sources/Transactions/SolidityFunction.swift; sourceTree = ""; }; + 639064B44CBAFF50CC101B1ABEEC2B67 /* UIView+AnyPromise.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIView+AnyPromise.m"; path = "Extensions/UIKit/Sources/UIView+AnyPromise.m"; sourceTree = ""; }; + 642A3305FF04BC4C46ECDEED6C41D69C /* field_5x52_int128_impl.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = field_5x52_int128_impl.h; path = secp256k1/Classes/secp256k1/src/field_5x52_int128_impl.h; sourceTree = ""; }; + 658034F04AF4E31BC56D96B44D511ADD /* Batching.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Batching.swift; path = Sources/Web3/Batching.swift; sourceTree = ""; }; + 65EFC47AE39BE0A12634ED83A94B2D43 /* CCM.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CCM.swift; path = Sources/CryptoSwift/BlockMode/CCM.swift; sourceTree = ""; }; + 65F6465A8248AE7707578E9509067C62 /* NSURLSession+Promise.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "NSURLSession+Promise.swift"; path = "Extensions/Foundation/Sources/NSURLSession+Promise.swift"; sourceTree = ""; }; + 66265036E2B783E012D66AE05EB69843 /* hash_impl.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = hash_impl.h; path = secp256k1/Classes/secp256k1/src/hash_impl.h; sourceTree = ""; }; + 667ABBF819D04B957E813AE14C1D51A0 /* Deprecations.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Deprecations.swift; path = Sources/Deprecations.swift; sourceTree = ""; }; + 66D8D8CC04B068280F9164CAC456B880 /* EthereumTransaction.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = EthereumTransaction.swift; path = Sources/Transaction/EthereumTransaction.swift; sourceTree = ""; }; + 66E1AD388CBF628B795AA7DE8A35147C /* CryptoExtensions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CryptoExtensions.swift; path = Sources/Convenience/CryptoExtensions.swift; sourceTree = ""; }; + 677284111DFA9191517F7C0B05F6020F /* Digest.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Digest.swift; path = Sources/Encryption/Cryptor/Digest.swift; sourceTree = ""; }; + 6783D1511AF048A484CE1EFA28E00CD9 /* BigInt.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BigInt.swift; path = sources/BigInt.swift; sourceTree = ""; }; + 682CDBAE11DF87F594C12FE363C2AF1D /* Hashable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Hashable.swift; path = sources/Hashable.swift; sourceTree = ""; }; + 6846011EC9EC59250AC077A4C1AE3145 /* Migration-iOS.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Migration-iOS.swift"; path = "Sources/Migration-iOS.swift"; sourceTree = ""; }; + 68EF575D658D880D787BEFA5F79A5517 /* Cipher.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Cipher.swift; path = Sources/CryptoSwift/Cipher.swift; sourceTree = ""; }; + 690170EFA3CDFD20BA9FF4573A5E3CC6 /* num_gmp_impl.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = num_gmp_impl.h; path = secp256k1/Classes/secp256k1/src/num_gmp_impl.h; sourceTree = ""; }; + 694ECE7416177A3D28F11658BC2743D5 /* Resolver.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Resolver.swift; path = Sources/Resolver.swift; sourceTree = ""; }; + 6B8598A451FC53A66ECAAD6AB556B266 /* W3Contract.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = W3Contract.swift; path = Sources/ObjectiveC/W3Contract.swift; sourceTree = ""; }; + 6D22E9BE63451188DB69F09B7F690359 /* String+Extension.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "String+Extension.swift"; path = "Sources/Convenience/String+Extension.swift"; sourceTree = ""; }; + 6D31627CBFD08BF61CDF91B14C39F7C3 /* BigInt-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "BigInt-dummy.m"; sourceTree = ""; }; + 6DB6CE40917264E5960A3988CD02E38D /* Web3+TransactionIntermediate.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Web3+TransactionIntermediate.swift"; path = "Sources/Web3/Web3+TransactionIntermediate.swift"; sourceTree = ""; }; + 6DE7ABCC2C3D359671C16059A0905CA0 /* Poly1305.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Poly1305.swift; path = Sources/CryptoSwift/Poly1305.swift; sourceTree = ""; }; + 6E4B835C3A24EE55E8C7BB286142C4EB /* Base58.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Base58.swift; path = Sources/Convenience/Base58.swift; sourceTree = ""; }; + 6E85BBF0B3C0C1A72F1E790B8180A9BB /* secp256k1_ecdh.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = secp256k1_ecdh.h; path = secp256k1/Classes/secp256k1/include/secp256k1_ecdh.h; sourceTree = ""; }; 6EC22F17893C2913448F25B0075A951E /* libsecp256k1.swift.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; name = libsecp256k1.swift.a; path = libsecp256k1.swift.a; sourceTree = BUILT_PRODUCTS_DIR; }; - 6FF9ADA9E357D3132834E4412980D879 /* CryptoSwift.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; name = CryptoSwift.modulemap; path = ../../Headers/Public/CryptoSwift/CryptoSwift.modulemap; sourceTree = ""; }; - 702634330D4994A9DB386204199C437F /* CryptoSwift-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "CryptoSwift-prefix.pch"; sourceTree = ""; }; - 73B7CE4DF4AA28AD35AABEAE4829A8B0 /* DigestType.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DigestType.swift; path = Sources/CryptoSwift/DigestType.swift; sourceTree = ""; }; - 74767A24D40F51DC09F8E5D15ED6B5EE /* UIView+Promise.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "UIView+Promise.swift"; path = "Extensions/UIKit/Sources/UIView+Promise.swift"; sourceTree = ""; }; - 749BD30C9C4D786D355C9F1CABEF98EE /* Web3+Eth.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Web3+Eth.swift"; path = "Sources/Web3/Web3+Eth.swift"; sourceTree = ""; }; + 6F5E1B868EFF7E8EAE54F5A425BDA9B8 /* CryptoSwift-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "CryptoSwift-prefix.pch"; sourceTree = ""; }; + 720EDFF092375EC290D9C09BFBF90F03 /* BIP39+WordLists.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "BIP39+WordLists.swift"; path = "Sources/KeystoreManager/BIP39+WordLists.swift"; sourceTree = ""; }; + 73097DCF76B1B4B22BFD6551328F9AC0 /* scalar_8x32_impl.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = scalar_8x32_impl.h; path = secp256k1/Classes/secp256k1/src/scalar_8x32_impl.h; sourceTree = ""; }; + 736AE845644FCE79F8223C7642108F52 /* W3Web3.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = W3Web3.swift; path = Sources/ObjectiveC/W3Web3.swift; sourceTree = ""; }; + 742739CD628C4062D619F3951CC09D08 /* ecmult_impl.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ecmult_impl.h; path = secp256k1/Classes/secp256k1/src/ecmult_impl.h; sourceTree = ""; }; + 74367BCDB3E929207633AC901EA194C3 /* Process+Promise.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Process+Promise.swift"; path = "Extensions/Foundation/Sources/Process+Promise.swift"; sourceTree = ""; }; 74E404AA6957590324067E330E0EC533 /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS12.0.sdk/System/Library/Frameworks/UIKit.framework; sourceTree = DEVELOPER_DIR; }; - 7517A40D49A6C63FC1CB67045F92167F /* Web3+HttpProvider.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Web3+HttpProvider.swift"; path = "Sources/Web3/Web3+HttpProvider.swift"; sourceTree = ""; }; - 75C1E70EFA763C5FB6166F15A6E97411 /* ecdsa_impl.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ecdsa_impl.h; path = secp256k1/Classes/secp256k1/src/ecdsa_impl.h; sourceTree = ""; }; - 7654723C2954A66EF43A29E64EAC0FAB /* Data+Extension.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Data+Extension.swift"; path = "Sources/CryptoSwift/Foundation/Data+Extension.swift"; sourceTree = ""; }; - 766CCD5A188A4E8CB3CF8EC5862521C1 /* PKCS7.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PKCS7.swift; path = Sources/CryptoSwift/PKCS/PKCS7.swift; sourceTree = ""; }; + 756E4CA5BCDA3E18D8651370DDE7316C /* UInt16+Extension.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "UInt16+Extension.swift"; path = "Sources/CryptoSwift/UInt16+Extension.swift"; sourceTree = ""; }; 78065485981757B26523C1E5BD7EAD03 /* Pods-web3swiftExample-frameworks.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-web3swiftExample-frameworks.sh"; sourceTree = ""; }; - 78EE3CBED6A7332113213CB87281F694 /* Array+Foundation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Array+Foundation.swift"; path = "Sources/CryptoSwift/Foundation/Array+Foundation.swift"; sourceTree = ""; }; - 79E3B20627D544A8466149814AEFA771 /* scratch_impl.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = scratch_impl.h; path = secp256k1/Classes/secp256k1/src/scratch_impl.h; sourceTree = ""; }; - 79EBEA6373B480D7E9E611C240DF269A /* field_10x26_impl.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = field_10x26_impl.h; path = secp256k1/Classes/secp256k1/src/field_10x26_impl.h; sourceTree = ""; }; - 7A205F56A261C5635384453CD770A9A3 /* Padding.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Padding.swift; path = Sources/CryptoSwift/Padding.swift; sourceTree = ""; }; - 7B6E9BB40C4471B2B540C0088F77D044 /* lax_der_privatekey_parsing.c */ = {isa = PBXFileReference; includeInIndex = 1; name = lax_der_privatekey_parsing.c; path = secp256k1/Classes/secp256k1/contrib/lax_der_privatekey_parsing.c; sourceTree = ""; }; - 7C80DE67B4FC5ECCD5F13C4207C1FE6E /* num.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = num.h; path = secp256k1/Classes/secp256k1/src/num.h; sourceTree = ""; }; - 7CBBB4AA48A3F01981391F1DAEF3BEFB /* AnyPromise.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AnyPromise.h; path = Sources/AnyPromise.h; sourceTree = ""; }; - 7E8748F7ECF11F369F96ACE546322EE1 /* scalar_4x64.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = scalar_4x64.h; path = secp256k1/Classes/secp256k1/src/scalar_4x64.h; sourceTree = ""; }; - 80B2BFC74FA2BAF745488A4A07A4F0A3 /* ABIv2Encoding.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ABIv2Encoding.swift; path = Sources/ABIv2/ABIv2Encoding.swift; sourceTree = ""; }; - 8177956DFAD008E7BEA6CF42826C883C /* SolidityDataReader.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SolidityDataReader.swift; path = Sources/ABIv2/SolidityDataReader.swift; sourceTree = ""; }; - 8184617ED482F52A2821B8189EFBD4D5 /* Web3+TransactionIntermediate.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Web3+TransactionIntermediate.swift"; path = "Sources/Web3/Web3+TransactionIntermediate.swift"; sourceTree = ""; }; - 81A053AC3ECA623B020C4255809459A0 /* Configuration.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Configuration.swift; path = Sources/Configuration.swift; sourceTree = ""; }; - 820EF748A22F2DA975518626315C58A0 /* field_5x52_asm_impl.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = field_5x52_asm_impl.h; path = secp256k1/Classes/secp256k1/src/field_5x52_asm_impl.h; sourceTree = ""; }; - 821E9E815EAEB0E70E5DF7D59FE0AB6A /* BigInt.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BigInt.swift; path = sources/BigInt.swift; sourceTree = ""; }; - 82F14EE05B1AAC078E6F0F71A1AA793F /* UInt256.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = UInt256.swift; path = Sources/Convenience/UInt256.swift; sourceTree = ""; }; - 8306161F4872280FE26348C2C644E8F2 /* Guides.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Guides.swift; path = Sources/Guides.swift; sourceTree = ""; }; - 84D489D11829908FBAFEB8A5A59234D9 /* ChaCha20+Foundation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "ChaCha20+Foundation.swift"; path = "Sources/CryptoSwift/Foundation/ChaCha20+Foundation.swift"; sourceTree = ""; }; - 850CFAA5DEC3E9DAF29BF716B6F75F74 /* Comparable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Comparable.swift; path = sources/Comparable.swift; sourceTree = ""; }; - 85D13EA9F7FBA86858AB36B3BDCCDBF8 /* when.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = when.m; path = Sources/when.m; sourceTree = ""; }; - 85D215E6FA857443D867EC70FBF90C58 /* String+Extension.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "String+Extension.swift"; path = "Sources/CryptoSwift/String+Extension.swift"; sourceTree = ""; }; - 860BDC01E5E2DB2B99E53E95B8F8B88C /* CBCMAC.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CBCMAC.swift; path = Sources/CryptoSwift/CBCMAC.swift; sourceTree = ""; }; - 86774E8CA3F133E4EECF266C53D589F4 /* AES.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AES.swift; path = Sources/CryptoSwift/AES.swift; sourceTree = ""; }; - 867D9F973ACE2D6E884395508E430D1C /* web3swift-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "web3swift-dummy.m"; sourceTree = ""; }; - 86A6D20646EEFF1A6CBE0988443EA223 /* TransactionSigner.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = TransactionSigner.swift; path = Sources/Transaction/TransactionSigner.swift; sourceTree = ""; }; - 89D0818D4609DD13DB368529B0E59FC9 /* BIP39.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BIP39.swift; path = Sources/KeystoreManager/BIP39.swift; sourceTree = ""; }; - 8A9B39E6446072BF453B2437F30CEE20 /* secp256k1_recovery.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = secp256k1_recovery.h; path = secp256k1/Classes/secp256k1/include/secp256k1_recovery.h; sourceTree = ""; }; - 8DDE1AEEEA9497540306023E3450CB78 /* Subtraction.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Subtraction.swift; path = sources/Subtraction.swift; sourceTree = ""; }; - 8E7A8AFBD56BDD3A249E3E50F368C50E /* HKDF.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = HKDF.swift; path = Sources/CryptoSwift/HKDF.swift; sourceTree = ""; }; - 8FA1D08204CECC8D92DA4EDBBACD6E71 /* util.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = util.h; path = secp256k1/Classes/secp256k1/src/util.h; sourceTree = ""; }; - 8FF22AC893AA714534268CF0B8BD3C1E /* scalar_low_impl.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = scalar_low_impl.h; path = secp256k1/Classes/secp256k1/src/scalar_low_impl.h; sourceTree = ""; }; - 90DF03C4F4D71A511DF87FC13EB75C04 /* ecdsa.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ecdsa.h; path = secp256k1/Classes/secp256k1/src/ecdsa.h; sourceTree = ""; }; - 9180CD5B0BDED35E8DA746788747AE4E /* NSTask+AnyPromise.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSTask+AnyPromise.h"; path = "Extensions/Foundation/Sources/NSTask+AnyPromise.h"; sourceTree = ""; }; - 919162BDBDE666743F9C73DC90CB677A /* dispatch_promise.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = dispatch_promise.m; path = Sources/dispatch_promise.m; sourceTree = ""; }; - 91F642D7FFA9044BEA39F833A39118C4 /* NSNotificationCenter+AnyPromise.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSNotificationCenter+AnyPromise.m"; path = "Extensions/Foundation/Sources/NSNotificationCenter+AnyPromise.m"; sourceTree = ""; }; - 925E5F982D0D43286E3195E5F2A20B80 /* Authenticator.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Authenticator.swift; path = Sources/CryptoSwift/Authenticator.swift; sourceTree = ""; }; - 927BFB6FE81B70D5A8F83FF4CD9D7C4A /* SolidityDataWriter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SolidityDataWriter.swift; path = Sources/ABIv2/SolidityDataWriter.swift; sourceTree = ""; }; - 92839FBEF7C69236902CBD563DB62E07 /* ecmult_impl.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ecmult_impl.h; path = secp256k1/Classes/secp256k1/src/ecmult_impl.h; sourceTree = ""; }; + 78437E1A8D511A1866DC860B8A2106A4 /* Array+Extension.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Array+Extension.swift"; path = "Sources/CryptoSwift/Array+Extension.swift"; sourceTree = ""; }; + 784CC85002418E7744D28289D857E97A /* Floating Point Conversion.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Floating Point Conversion.swift"; path = "sources/Floating Point Conversion.swift"; sourceTree = ""; }; + 793DA9938B5F7239BC30EF8C1118F328 /* PKCS7.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PKCS7.swift; path = Sources/CryptoSwift/PKCS/PKCS7.swift; sourceTree = ""; }; + 79631491C7BD42B8704F0698EF4A31F3 /* ecmult_gen_impl.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ecmult_gen_impl.h; path = secp256k1/Classes/secp256k1/src/ecmult_gen_impl.h; sourceTree = ""; }; + 7A42511D06152CD5401994637D29C46C /* BatchedCollection.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BatchedCollection.swift; path = Sources/CryptoSwift/BatchedCollection.swift; sourceTree = ""; }; + 7AF62E9F4EE3B2BCBE6C0442F9A308C0 /* W3Eth.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = W3Eth.swift; path = Sources/ObjectiveC/W3Eth.swift; sourceTree = ""; }; + 7D7495DBAC5F1ED9F84E5B00E251B935 /* Cryptor.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Cryptor.swift; path = Sources/Encryption/Cryptor/Cryptor.swift; sourceTree = ""; }; + 7D85486F43B4C0647CE49352A1BD3E0C /* firstly.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = firstly.swift; path = Sources/firstly.swift; sourceTree = ""; }; + 7DF7DD8FEFA3E51DCCE54FFF69453E29 /* secp256k1.swift.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; name = secp256k1.swift.modulemap; path = ../../Headers/Public/secp256k1/secp256k1.swift.modulemap; sourceTree = ""; }; + 7E9CB26817958C91B5A385C376A5A90E /* ecdsa_impl.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ecdsa_impl.h; path = secp256k1/Classes/secp256k1/src/ecdsa_impl.h; sourceTree = ""; }; + 7EC3C4EEC5C8A68AA30BF498DA623094 /* group_impl.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = group_impl.h; path = secp256k1/Classes/secp256k1/src/group_impl.h; sourceTree = ""; }; + 804B4569D093A4258FC3116308C43841 /* Web3+JSONRPC.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Web3+JSONRPC.swift"; path = "Sources/Web3/Web3+JSONRPC.swift"; sourceTree = ""; }; + 8073DACE0B7CAECDBD557F5050C77F02 /* ZeroPadding.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ZeroPadding.swift; path = Sources/CryptoSwift/ZeroPadding.swift; sourceTree = ""; }; + 809D461C7EAA66CF03D6FE435B31804D /* field_5x52.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = field_5x52.h; path = secp256k1/Classes/secp256k1/src/field_5x52.h; sourceTree = ""; }; + 8210D7F89A2149DDFE8FCC64936FA110 /* SHA3.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SHA3.swift; path = Sources/CryptoSwift/SHA3.swift; sourceTree = ""; }; + 82E53AAC8144E1CEAB245FDC9D84BFF6 /* NativeTypesEncoding+Extensions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "NativeTypesEncoding+Extensions.swift"; path = "Sources/Convenience/NativeTypesEncoding+Extensions.swift"; sourceTree = ""; }; + 83AF75AF651287704614BB5AC0CB8922 /* PBKDF2.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PBKDF2.swift; path = Sources/CryptoSwift/PKCS/PBKDF2.swift; sourceTree = ""; }; + 83C375FF5A983A5E90D728F1E946AE3A /* Rabbit+Foundation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Rabbit+Foundation.swift"; path = "Sources/CryptoSwift/Foundation/Rabbit+Foundation.swift"; sourceTree = ""; }; + 83E38CC874BAAE951F947B324C9ECFC9 /* W3Transaction.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = W3Transaction.swift; path = Sources/ObjectiveC/W3Transaction.swift; sourceTree = ""; }; + 84A95789D46C4AFAB5B139B74C195534 /* NSObject+Promise.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "NSObject+Promise.swift"; path = "Extensions/Foundation/Sources/NSObject+Promise.swift"; sourceTree = ""; }; + 84CBA06B4BB09A057F0833F1217E931C /* Shifts.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Shifts.swift; path = sources/Shifts.swift; sourceTree = ""; }; + 852331DEB565502E7B78546744763E67 /* CryptoSwift.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; name = CryptoSwift.modulemap; path = ../../Headers/Public/CryptoSwift/CryptoSwift.modulemap; sourceTree = ""; }; + 852906B17625EF926029E80181D1686F /* KeystoreManager.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = KeystoreManager.swift; path = Sources/KeystoreManager/KeystoreManager.swift; sourceTree = ""; }; + 853A22BFAD63B5FEB1F501817640D9B9 /* W3Wallet.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = W3Wallet.swift; path = Sources/ObjectiveC/W3Wallet.swift; sourceTree = ""; }; + 859F20386DD833B6B2BA6A78FAE018B3 /* secp256k1.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = secp256k1.h; path = secp256k1/Classes/secp256k1/include/secp256k1.h; sourceTree = ""; }; + 86AE722ACF1A5A8CB268002725F137C2 /* CFB.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CFB.swift; path = Sources/CryptoSwift/BlockMode/CFB.swift; sourceTree = ""; }; + 876D513FA41A77C1789A0E1CD3C6F730 /* Web3+Eth.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Web3+Eth.swift"; path = "Sources/Web3/Web3+Eth.swift"; sourceTree = ""; }; + 899DE65D62756F081C7CC9DD733B63BF /* web3swift.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; name = web3swift.modulemap; path = ../../Headers/Public/web3swift/web3swift.modulemap; sourceTree = ""; }; + 8BA43864921451363C9A38DB198A12BE /* PMKUIKit.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PMKUIKit.h; path = Extensions/UIKit/Sources/PMKUIKit.h; sourceTree = ""; }; + 8BBA20D2301EDB970DA22D2EE80A167C /* BigInt-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "BigInt-prefix.pch"; sourceTree = ""; }; + 8C5DA839004BBE15B5F918982496B61D /* Multiplication.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Multiplication.swift; path = sources/Multiplication.swift; sourceTree = ""; }; + 900CBD85D02FC90ECED5E0E2BEA39E71 /* ComparisonExtensions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ComparisonExtensions.swift; path = Sources/Contract/ComparisonExtensions.swift; sourceTree = ""; }; + 9123EA433E1E84024B2551A3C9679BBC /* HMAC+Foundation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "HMAC+Foundation.swift"; path = "Sources/CryptoSwift/Foundation/HMAC+Foundation.swift"; sourceTree = ""; }; + 927D111103F98C7DAB01E37865B0922D /* web3swift.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = web3swift.xcconfig; sourceTree = ""; }; 93A4A3777CF96A4AAC1D13BA6DCCEA73 /* Podfile */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; lastKnownFileType = text; name = Podfile; path = ../Podfile; sourceTree = SOURCE_ROOT; xcLanguageSpecificationIdentifier = xcode.lang.ruby; }; - 93DEB02628C3E1469C57C640CA49C59F /* PKCS5.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PKCS5.swift; path = Sources/CryptoSwift/PKCS/PKCS5.swift; sourceTree = ""; }; - 948D761F0CEEE3543C3AF71DE39EE168 /* SipHash.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = SipHash.xcconfig; sourceTree = ""; }; - 94D6DC86975FFB0F265FD99E9CAB5366 /* ERC888.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ERC888.swift; path = Sources/Contracts/ERC888.swift; sourceTree = ""; }; - 9621BCB81210850393863EE9A5DCAB29 /* Poly1305.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Poly1305.swift; path = Sources/CryptoSwift/Poly1305.swift; sourceTree = ""; }; - 9661E97CF2C8DB672C4DF77F99256CF3 /* Int+Extension.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Int+Extension.swift"; path = "Sources/CryptoSwift/Int+Extension.swift"; sourceTree = ""; }; - 96A02F49FD6ECB3D18135C5EBFCF1D62 /* PromiseKit-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "PromiseKit-prefix.pch"; sourceTree = ""; }; - 96A46C0F73467255E30A9C59B68F5B52 /* SipHash-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "SipHash-dummy.m"; sourceTree = ""; }; - 970F0CA9F12749A406EBD38CDDAA5740 /* Web3.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Web3.swift; path = Sources/Web3/Web3.swift; sourceTree = ""; }; - 9922A9372EA6CD134BF7AEA87B40C3D6 /* secp256k1.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = secp256k1.h; path = secp256k1/Classes/secp256k1/include/secp256k1.h; sourceTree = ""; }; - 9955BD9641A6B0E814F41319D98DF262 /* PromiseKit.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PromiseKit.h; path = Sources/PromiseKit.h; sourceTree = ""; }; - 9A7A00EB5B71CAC6DD35AEAE46485BBB /* RandomUInt64.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RandomUInt64.swift; path = SipHash/RandomUInt64.swift; sourceTree = ""; }; - 9B3129F6812687DB1F008EBBDA9BFA3E /* web3swift-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "web3swift-prefix.pch"; sourceTree = ""; }; - 9C1872FDB2DFF9F4DA5E8A8A98449ACC /* ERC721.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ERC721.swift; path = Sources/Contracts/ERC721.swift; sourceTree = ""; }; - 9C6376CD30EFEE4A594237E1394743A6 /* race.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = race.swift; path = Sources/race.swift; sourceTree = ""; }; - 9C6918A11DB214188B07B9DCE18DFC91 /* W3Keystore.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = W3Keystore.swift; path = Sources/ObjectiveC/W3Keystore.swift; sourceTree = ""; }; - A0FA541706B5ADB9326A007DA8BD2300 /* String Conversion.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "String Conversion.swift"; path = "sources/String Conversion.swift"; sourceTree = ""; }; - A2073AC6CEAAC4B979040486A96E13CA /* Cryptors.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Cryptors.swift; path = Sources/CryptoSwift/Cryptors.swift; sourceTree = ""; }; - A5CFBE4D8E3F9DEA2A0B9280ACBA8F63 /* CCM.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CCM.swift; path = Sources/CryptoSwift/BlockMode/CCM.swift; sourceTree = ""; }; - A6095A13F14E48B0FB394628D4C6EB26 /* hang.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = hang.swift; path = Sources/hang.swift; sourceTree = ""; }; - A677A6E6672644837EF729E6B6DE4DC5 /* num_gmp_impl.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = num_gmp_impl.h; path = secp256k1/Classes/secp256k1/src/num_gmp_impl.h; sourceTree = ""; }; - A741FCD3760CFDFC4B1D1359BA1F8E82 /* PlainKeystore.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PlainKeystore.swift; path = Sources/KeystoreManager/PlainKeystore.swift; sourceTree = ""; }; - A88C4EC889F8A34347E1466483883CD7 /* UInt32+Extension.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "UInt32+Extension.swift"; path = "Sources/CryptoSwift/UInt32+Extension.swift"; sourceTree = ""; }; - A89380BC8BE77F88844A6861B1774B4D /* Web3+Contract.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Web3+Contract.swift"; path = "Sources/Web3/Web3+Contract.swift"; sourceTree = ""; }; - AA506273FE20D402CC06546320B33A71 /* group_impl.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = group_impl.h; path = secp256k1/Classes/secp256k1/src/group_impl.h; sourceTree = ""; }; - AAA70B4B39AD3DE75A2482D260DE1CBD /* hash_impl.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = hash_impl.h; path = secp256k1/Classes/secp256k1/src/hash_impl.h; sourceTree = ""; }; - ACC5AE1C91E7380820C719013E46690D /* secp256k1.swift.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = secp256k1.swift.xcconfig; sourceTree = ""; }; - AD74B37D954C9625C0262333EE157016 /* UInt8+Extension.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "UInt8+Extension.swift"; path = "Sources/CryptoSwift/UInt8+Extension.swift"; sourceTree = ""; }; - AD74DF3192DC1604682334632F072502 /* AnyPromise.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = AnyPromise.m; path = Sources/AnyPromise.m; sourceTree = ""; }; - AEE7557D9671D8E7D88346293E0F7E63 /* ecmult_gen_impl.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ecmult_gen_impl.h; path = secp256k1/Classes/secp256k1/src/ecmult_gen_impl.h; sourceTree = ""; }; - B009D31FEE7D3BE0CB7EEB2C217875A6 /* firstly.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = firstly.swift; path = Sources/firstly.swift; sourceTree = ""; }; - B094DC359EAC502A4B2406D5D6E4D5B3 /* ERC20.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ERC20.swift; path = Sources/Contracts/ERC20.swift; sourceTree = ""; }; - B1DC488ED2D924E6E1749F0F2C6DF0E0 /* secp256k1.swift-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "secp256k1.swift-dummy.m"; sourceTree = ""; }; - B2A1EF70F3151893B73FFA4FF022DF05 /* ZeroPadding.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ZeroPadding.swift; path = Sources/CryptoSwift/ZeroPadding.swift; sourceTree = ""; }; - B391A44739661EBBD626DB0557D2DA63 /* Cryptor.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Cryptor.swift; path = Sources/CryptoSwift/Cryptor.swift; sourceTree = ""; }; - B3CCB104E19A411D3BDA8E0C0198CAE3 /* Random.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Random.swift; path = sources/Random.swift; sourceTree = ""; }; + 93F777705930C06821199E58AA1F568F /* fwd.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = fwd.h; path = Sources/fwd.h; sourceTree = ""; }; + 962FB73937BD92EDB30DC9B82C99702C /* scalar_4x64.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = scalar_4x64.h; path = secp256k1/Classes/secp256k1/src/scalar_4x64.h; sourceTree = ""; }; + 963FD09C509F4591C36958295682A908 /* EthURL.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = EthURL.swift; path = Sources/Utils/EthURL.swift; sourceTree = ""; }; + 98340DCD205F2D928D589028BBD414B3 /* EIP67Code.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = EIP67Code.swift; path = Sources/Utils/EIP67Code.swift; sourceTree = ""; }; + 98945FE39758A115CDD51070BFC2F7D9 /* SipHash.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; name = SipHash.modulemap; path = ../../Headers/Public/SipHash/SipHash.modulemap; sourceTree = ""; }; + 990C76E8804E794BCDE0314FECEC3BD8 /* UInt8+Extension.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "UInt8+Extension.swift"; path = "Sources/CryptoSwift/UInt8+Extension.swift"; sourceTree = ""; }; + 9A34DEF1E7944AE805521CD816CFB62D /* PlainKeystore.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PlainKeystore.swift; path = Sources/KeystoreManager/PlainKeystore.swift; sourceTree = ""; }; + 9AFC48C5F3192533C44F55ADD96E2979 /* Data+Extension.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Data+Extension.swift"; path = "Sources/CryptoSwift/Foundation/Data+Extension.swift"; sourceTree = ""; }; + 9D6AF661E1F3E02CE5092E03136D86F3 /* Web3+Structures.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Web3+Structures.swift"; path = "Sources/Web3/Web3+Structures.swift"; sourceTree = ""; }; + 9D8BAC3CAE91F5395F5D71E71BFED4A8 /* ContractABIv2.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ContractABIv2.swift; path = Sources/Contract/ContractABIv2.swift; sourceTree = ""; }; + 9EAF4A9129974F5D8D09A592DCECA2B2 /* Authenticator.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Authenticator.swift; path = Sources/CryptoSwift/Authenticator.swift; sourceTree = ""; }; + 9F2F143E4ECBBEAFF2D70335436A979E /* main_impl.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = main_impl.h; path = secp256k1/Classes/secp256k1/src/modules/ecdh/main_impl.h; sourceTree = ""; }; + 9F48404C487B6785AEC33EE962112684 /* Array+Foundation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Array+Foundation.swift"; path = "Sources/CryptoSwift/Foundation/Array+Foundation.swift"; sourceTree = ""; }; + A045D10CD29258F6A97742DD823EF075 /* Web3+Infura.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Web3+Infura.swift"; path = "Sources/Web3/Web3+Infura.swift"; sourceTree = ""; }; + A09BA3EFE288EC8F646A5377B0E2945B /* String Conversion.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "String Conversion.swift"; path = "sources/String Conversion.swift"; sourceTree = ""; }; + A0A05EA9D40E2ED326E11F8DB35EACFB /* when.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = when.m; path = Sources/when.m; sourceTree = ""; }; + A272C009855BD26F561C1F4DB1C91C73 /* num_gmp.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = num_gmp.h; path = secp256k1/Classes/secp256k1/src/num_gmp.h; sourceTree = ""; }; + A41377B414A98972C5B5DF66FCA40220 /* Checksum.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Checksum.swift; path = Sources/CryptoSwift/Checksum.swift; sourceTree = ""; }; + A42B1989EFF1F55D8144849B0F495406 /* Thenable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Thenable.swift; path = Sources/Thenable.swift; sourceTree = ""; }; + A435D3569EC4C066254028CCA3F1D2A6 /* Padding.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Padding.swift; path = Sources/CryptoSwift/Padding.swift; sourceTree = ""; }; + A4DECE93213259BDA56985422CE9366F /* field_5x52_asm_impl.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = field_5x52_asm_impl.h; path = secp256k1/Classes/secp256k1/src/field_5x52_asm_impl.h; sourceTree = ""; }; + A4F26BB8FA400739109ABE4A624C47C2 /* CustomStringConvertible.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CustomStringConvertible.swift; path = Sources/CustomStringConvertible.swift; sourceTree = ""; }; + A564779031839556987CB037A5C86400 /* BlockEncryptor.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BlockEncryptor.swift; path = Sources/CryptoSwift/BlockEncryptor.swift; sourceTree = ""; }; + A6E69EC6B0DE18A6949423AED40C98DE /* BIP39.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BIP39.swift; path = Sources/KeystoreManager/BIP39.swift; sourceTree = ""; }; + A9B6082F0CF0EA74F5E388265C2C7A1F /* Web3+Personal.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Web3+Personal.swift"; path = "Sources/Web3/Web3+Personal.swift"; sourceTree = ""; }; + A9C578DB159FA661619DBF792F30F5D4 /* Bridging.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Bridging.swift; path = Sources/ObjectiveC/Bridging.swift; sourceTree = ""; }; + A9D873E6F0B29BDC7E239F3DA54A6B86 /* GCD.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = GCD.swift; path = sources/GCD.swift; sourceTree = ""; }; + AA19C7CC5D150B8C69FDBF08FAC94C89 /* AnyPromise.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AnyPromise.h; path = Sources/AnyPromise.h; sourceTree = ""; }; + AA467AEC1B0090C21020463302A20F76 /* ABIv2Parsing.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ABIv2Parsing.swift; path = Sources/ABIv2/ABIv2Parsing.swift; sourceTree = ""; }; + ACC410162DD85E80C18163F3554ADE48 /* W3Keystore.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = W3Keystore.swift; path = Sources/ObjectiveC/W3Keystore.swift; sourceTree = ""; }; + AE2B3AB892289E6B34347CC8C11F0C80 /* Operators.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Operators.swift; path = Sources/CryptoSwift/Operators.swift; sourceTree = ""; }; + AEAE36133FDFDB6009E2BB88A5822DDE /* Collection+Extension.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Collection+Extension.swift"; path = "Sources/CryptoSwift/Collection+Extension.swift"; sourceTree = ""; }; + AED2C144069F9D92298F862D21B61C01 /* AES+Foundation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "AES+Foundation.swift"; path = "Sources/CryptoSwift/Foundation/AES+Foundation.swift"; sourceTree = ""; }; + AF3CE64E81CEF9249E91AACA25C8AEE0 /* SSLPointerTricks.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SSLPointerTricks.swift; path = Sources/Encryption/Cryptor/SSLPointerTricks.swift; sourceTree = ""; }; + AF89F12E26B9B814836439034EE5FDEC /* ERC721.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ERC721.swift; path = Sources/Contracts/ERC721.swift; sourceTree = ""; }; + AFD0071BB4B3D77C0F75E4FF7B3E995D /* Generics.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Generics.swift; path = Sources/CryptoSwift/Generics.swift; sourceTree = ""; }; + B13770A8820775115265668B680D4114 /* LogEvent.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = LogEvent.swift; path = Sources/LogEvent.swift; sourceTree = ""; }; + B1A071AD824600DC0941E442980DC731 /* Exponentiation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Exponentiation.swift; path = sources/Exponentiation.swift; sourceTree = ""; }; + B1A4AF61AD12FFDB6B7C9DD801DE6316 /* BIP32Keystore.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BIP32Keystore.swift; path = Sources/KeystoreManager/BIP32Keystore.swift; sourceTree = ""; }; + B221AE6DB4191177CDE504B1EF26FC23 /* UIView+AnyPromise.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIView+AnyPromise.h"; path = "Extensions/UIKit/Sources/UIView+AnyPromise.h"; sourceTree = ""; }; + B25C80355A9840641013BBA6EDBED2A0 /* PMKFoundation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PMKFoundation.h; path = Extensions/Foundation/Sources/PMKFoundation.h; sourceTree = ""; }; + B29AFEB51D70B10D7BA01E68E5707078 /* Data+Extension.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Data+Extension.swift"; path = "Sources/Convenience/Data+Extension.swift"; sourceTree = ""; }; + B332CEB52BE305BD358CA7AA455A1B56 /* AnyPromise.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = AnyPromise.m; path = Sources/AnyPromise.m; sourceTree = ""; }; B3F9A1907F29304BFC44C6ACB93771D4 /* Pods-web3swiftExample.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = "Pods-web3swiftExample.modulemap"; sourceTree = ""; }; - B4256A0B73B6305667577F05019F3376 /* SHA1.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SHA1.swift; path = Sources/CryptoSwift/SHA1.swift; sourceTree = ""; }; - B458113D1114D726F10F855423359DEF /* Base58.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Base58.swift; path = Sources/Convenience/Base58.swift; sourceTree = ""; }; - B49EAA4E55D07DE88528F6DD3A6FB92A /* W3UInt.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = W3UInt.swift; path = Sources/ObjectiveC/W3UInt.swift; sourceTree = ""; }; - B5B014CE74F064D9F3F31326A0689604 /* secp256k1_main.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = secp256k1_main.h; path = secp256k1/Classes/secp256k1_main.h; sourceTree = ""; }; - B741F8FF5272D5CE879D15D03465DB4F /* Multiplication.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Multiplication.swift; path = sources/Multiplication.swift; sourceTree = ""; }; - B8178035CFF1C3228050CB91F924167D /* W3JsonRpc.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = W3JsonRpc.swift; path = Sources/ObjectiveC/W3JsonRpc.swift; sourceTree = ""; }; - B8CF7825C8932FBA47190DC475A53563 /* Exponentiation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Exponentiation.swift; path = sources/Exponentiation.swift; sourceTree = ""; }; - B92C1CC0F25F8372ACC3418E1047D167 /* Primitive Types.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Primitive Types.swift"; path = "SipHash/Primitive Types.swift"; sourceTree = ""; }; - B96A1AAD67F799566466FD3C0F9A0634 /* TxPool.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = TxPool.swift; path = Sources/TxPool/TxPool.swift; sourceTree = ""; }; - B9CE5A6F4EA724D09118EBF04EE0577A /* BlockDecryptor.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BlockDecryptor.swift; path = Sources/CryptoSwift/BlockDecryptor.swift; sourceTree = ""; }; - BAC8C6AE183F0ABD88BAAC3DA9B53DAB /* ChaCha20.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ChaCha20.swift; path = Sources/CryptoSwift/ChaCha20.swift; sourceTree = ""; }; - BAE5C81D4458D9210862896E612FDF8E /* Resolver.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Resolver.swift; path = Sources/Resolver.swift; sourceTree = ""; }; - BB076238E4DDFDDE07432DAA74D2FB6F /* CBC.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CBC.swift; path = Sources/CryptoSwift/BlockMode/CBC.swift; sourceTree = ""; }; - BB4B0945DDC430546255C3CA485FE55A /* ContractABIv2.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ContractABIv2.swift; path = Sources/Contract/ContractABIv2.swift; sourceTree = ""; }; - BC3A82AB790BB3F75EA48811FFE34B21 /* AEAD.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AEAD.swift; path = Sources/CryptoSwift/AEAD/AEAD.swift; sourceTree = ""; }; - BC41DE6F77577FE573D6343D268D6DCB /* AEADChaCha20Poly1305.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AEADChaCha20Poly1305.swift; path = Sources/CryptoSwift/AEAD/AEADChaCha20Poly1305.swift; sourceTree = ""; }; - BD25BDC8FD92CF91E9C59903538EB421 /* NSNotificationCenter+AnyPromise.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSNotificationCenter+AnyPromise.h"; path = "Extensions/Foundation/Sources/NSNotificationCenter+AnyPromise.h"; sourceTree = ""; }; - BD390D51A06B39F5540906E619629D47 /* String+Extension.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "String+Extension.swift"; path = "Sources/Convenience/String+Extension.swift"; sourceTree = ""; }; - BD572B91B1A51E98681DFE123FAE063A /* Web3+Infura.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Web3+Infura.swift"; path = "Sources/Web3/Web3+Infura.swift"; sourceTree = ""; }; - BE6605934B022E7FFC97ACD587CB4F97 /* scalar_low.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = scalar_low.h; path = secp256k1/Classes/secp256k1/src/scalar_low.h; sourceTree = ""; }; - BEA782E83F57637A2C7DF7A92935730D /* Web3+Personal.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Web3+Personal.swift"; path = "Sources/Web3/Web3+Personal.swift"; sourceTree = ""; }; - C0426A8B63CD5FA8241B7EA585618CD6 /* HMAC.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = HMAC.swift; path = Sources/CryptoSwift/HMAC.swift; sourceTree = ""; }; - C18BB6DE219432BF00FEC6ECFC1DE038 /* secp256k1.swift.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; name = secp256k1.swift.modulemap; path = ../../Headers/Public/secp256k1/secp256k1.swift.modulemap; sourceTree = ""; }; - C2FFF037764B090B1F784A7EA478DFDF /* Floating Point Conversion.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Floating Point Conversion.swift"; path = "sources/Floating Point Conversion.swift"; sourceTree = ""; }; - C42830B974DEEAD022E79700C8BCC2AE /* BIP32HDNode.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BIP32HDNode.swift; path = Sources/KeystoreManager/BIP32HDNode.swift; sourceTree = ""; }; - C482B2BF039963EA499F71BEEB665AE4 /* Rabbit+Foundation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Rabbit+Foundation.swift"; path = "Sources/CryptoSwift/Foundation/Rabbit+Foundation.swift"; sourceTree = ""; }; - C59B64FD38788ED778728031296C71E4 /* Data Conversion.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Data Conversion.swift"; path = "sources/Data Conversion.swift"; sourceTree = ""; }; - C5D32FAE3993FCC8E081F323AF27AE65 /* Web3+Utils.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Web3+Utils.swift"; path = "Sources/Web3/Web3+Utils.swift"; sourceTree = ""; }; - C6B337088360041F9BD88ECEAE06BF98 /* SipHash.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; name = SipHash.modulemap; path = ../../Headers/Public/SipHash/SipHash.modulemap; sourceTree = ""; }; - C74C89FA663360E4C4CEB90FC17A149C /* Deprecations.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Deprecations.swift; path = Sources/Deprecations.swift; sourceTree = ""; }; - C76C90A3560095A5FABC64A154456AF9 /* Web3+Options.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Web3+Options.swift"; path = "Sources/Web3/Web3+Options.swift"; sourceTree = ""; }; - C81905C3606C069A176B4122FD89CF68 /* web3swift-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "web3swift-umbrella.h"; path = "../../Headers/Public/web3swift/web3swift-umbrella.h"; sourceTree = ""; }; - C84BFBD3F53041E1948695C6454337AF /* HDPath.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = HDPath.swift; path = Sources/KeystoreManager/HDPath.swift; sourceTree = ""; }; + B6980F1275F2E0FFB72EBF8ED04511D6 /* field_5x52_impl.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = field_5x52_impl.h; path = secp256k1/Classes/secp256k1/src/field_5x52_impl.h; sourceTree = ""; }; + B7757AC1017D1C193F42A197E6C70C07 /* UIView+Promise.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "UIView+Promise.swift"; path = "Extensions/UIKit/Sources/UIView+Promise.swift"; sourceTree = ""; }; + B77C4E778BD24CC84006E90D010E1D79 /* secp256k1_main.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = secp256k1_main.h; path = secp256k1/Classes/secp256k1_main.h; sourceTree = ""; }; + B7EA41B97F52475D6743363FB2C8BE3E /* DecoderExtensions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DecoderExtensions.swift; path = Sources/TxPool/DecoderExtensions.swift; sourceTree = ""; }; + B899063BEC35D5AD5473A8F572E13A83 /* group.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = group.h; path = secp256k1/Classes/secp256k1/src/group.h; sourceTree = ""; }; + BA2BEDF6C4F35429131D47AF514CB6EC /* num_impl.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = num_impl.h; path = secp256k1/Classes/secp256k1/src/num_impl.h; sourceTree = ""; }; + BA30A89C6746AFB711BFBA0D51BD336E /* String+Extension.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "String+Extension.swift"; path = "Sources/CryptoSwift/String+Extension.swift"; sourceTree = ""; }; + BBA1D03B12D1457183331D1577E8DCCF /* UInt256.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = UInt256.swift; path = Sources/Convenience/UInt256.swift; sourceTree = ""; }; + BBA4489D2973CDCF9B98D46CC98F96B5 /* LibSecp256k1Extension.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = LibSecp256k1Extension.swift; path = Sources/Convenience/LibSecp256k1Extension.swift; sourceTree = ""; }; + BBF45D24368569AE5FC48EE9CA885CAF /* ecmult_const.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ecmult_const.h; path = secp256k1/Classes/secp256k1/src/ecmult_const.h; sourceTree = ""; }; + BC1C413E84AE7C8A5BBD0D588D37F081 /* CMAC.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CMAC.swift; path = Sources/CryptoSwift/CMAC.swift; sourceTree = ""; }; + BD8E7D12304D7DEC65B66327BAFD1B78 /* Catchable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Catchable.swift; path = Sources/Catchable.swift; sourceTree = ""; }; + C01595A61469CA81AC6BCFCDFB8A040D /* CryptoSwift-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "CryptoSwift-umbrella.h"; path = "../../Headers/Public/CryptoSwift/CryptoSwift-umbrella.h"; sourceTree = ""; }; + C0969D3EDAA005EBD42464516BD5C56B /* Blowfish.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Blowfish.swift; path = Sources/CryptoSwift/Blowfish.swift; sourceTree = ""; }; + C1574268ABF3089AE498AED67BC3597E /* secp256k1_ec_mult_static_context.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = secp256k1_ec_mult_static_context.h; path = secp256k1/Classes/secp256k1_ec_mult_static_context.h; sourceTree = ""; }; + C2180A1812F2652CA38047EF187FD338 /* SolidityDataReader.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SolidityDataReader.swift; path = Sources/Transactions/SolidityDataReader.swift; sourceTree = ""; }; + C37382FBDCE79114B671BD37C6D37EC2 /* scratch_impl.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = scratch_impl.h; path = secp256k1/Classes/secp256k1/src/scratch_impl.h; sourceTree = ""; }; + C3B2F841CFC9A5EA0A3DD94478BADB9A /* ABIv2.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ABIv2.swift; path = Sources/ABIv2/ABIv2.swift; sourceTree = ""; }; + C5B96D994F55E397FA660DD3F1916EE9 /* CryptoSwift-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "CryptoSwift-dummy.m"; sourceTree = ""; }; + C5C110E986B53B59CF02FF0B9A5B95DC /* Web3+Protocols.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Web3+Protocols.swift"; path = "Sources/Web3/Web3+Protocols.swift"; sourceTree = ""; }; + C60A6286999504C681B391DC05434EA7 /* GCM.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = GCM.swift; path = Sources/CryptoSwift/BlockMode/GCM.swift; sourceTree = ""; }; + C665982EC93EAD9418AC8163C823BF10 /* Digest.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Digest.swift; path = Sources/CryptoSwift/Digest.swift; sourceTree = ""; }; + C67B66957F5E865CD36ACD773BFEE7D4 /* AES.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AES.swift; path = Sources/CryptoSwift/AES.swift; sourceTree = ""; }; + C68FC22DCC93C369F20109FEBB571F6F /* BigInt-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "BigInt-umbrella.h"; path = "../../Headers/Public/BigInt/BigInt-umbrella.h"; sourceTree = ""; }; + C77ADA7F1C2F95CE5E392062E46969BC /* NSURLSession+AnyPromise.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSURLSession+AnyPromise.h"; path = "Extensions/Foundation/Sources/NSURLSession+AnyPromise.h"; sourceTree = ""; }; C862C4E221FFC03C5881E8CB17E35A65 /* libCryptoSwift.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; name = libCryptoSwift.a; path = libCryptoSwift.a; sourceTree = BUILT_PRODUCTS_DIR; }; - C94F08CF67C9E7263EFD3326BBA0A707 /* main_impl.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = main_impl.h; path = secp256k1/Classes/secp256k1/src/modules/recovery/main_impl.h; sourceTree = ""; }; - CA453C29FD0A42C3CBF5CA11D7CBF4BE /* ABIv2.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ABIv2.swift; path = Sources/ABIv2/ABIv2.swift; sourceTree = ""; }; - CB23A5B3F61B1AE28A0C203DDBA09A6C /* W3Transaction.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = W3Transaction.swift; path = Sources/ObjectiveC/W3Transaction.swift; sourceTree = ""; }; - CBFA59603A52D5D5447635CEAC0029F6 /* CMAC.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CMAC.swift; path = Sources/CryptoSwift/CMAC.swift; sourceTree = ""; }; - CC2009DA05FE7B0CC6CD787FE2A216F6 /* AES.Cryptors.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AES.Cryptors.swift; path = Sources/CryptoSwift/AES.Cryptors.swift; sourceTree = ""; }; - CC372915A61413E94AECF37FB4E9484B /* W3Contract.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = W3Contract.swift; path = Sources/ObjectiveC/W3Contract.swift; sourceTree = ""; }; - CCC6FEF199CF9F3C309996C7BFC67688 /* W3TransactionIntermediate.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = W3TransactionIntermediate.swift; path = Sources/ObjectiveC/W3TransactionIntermediate.swift; sourceTree = ""; }; - CCECF78C3301D321F89CB27BE68E8454 /* BlockCipher.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BlockCipher.swift; path = Sources/CryptoSwift/BlockCipher.swift; sourceTree = ""; }; - CD3A3AE2C01F4D969BA773F5C0F76348 /* secp256k1.c */ = {isa = PBXFileReference; includeInIndex = 1; name = secp256k1.c; path = secp256k1/Classes/secp256k1/src/secp256k1.c; sourceTree = ""; }; - CF9872E0791771BF0350C68BDEAF6AF1 /* Updatable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Updatable.swift; path = Sources/CryptoSwift/Updatable.swift; sourceTree = ""; }; - CFE0BF56E237BBF2974C9532E8B75CA5 /* GCM.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = GCM.swift; path = Sources/CryptoSwift/BlockMode/GCM.swift; sourceTree = ""; }; - D0B3E4F1990198DA8AE58A69EA50AE7B /* SolidityFunction.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SolidityFunction.swift; path = Sources/ABIv2/SolidityFunction.swift; sourceTree = ""; }; - D13276283CD7BE067F63AF0D5D0A29ED /* scalar.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = scalar.h; path = secp256k1/Classes/secp256k1/src/scalar.h; sourceTree = ""; }; - D6604F746EAD64CD4957C2BC3EB4796A /* SHA3.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SHA3.swift; path = Sources/CryptoSwift/SHA3.swift; sourceTree = ""; }; - D707D146525311DE82D6A611286E6313 /* field_5x52_int128_impl.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = field_5x52_int128_impl.h; path = secp256k1/Classes/secp256k1/src/field_5x52_int128_impl.h; sourceTree = ""; }; - D7486EE98C03CFA16F87C3B85966BCAC /* PCBC.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PCBC.swift; path = Sources/CryptoSwift/BlockMode/PCBC.swift; sourceTree = ""; }; - D94069ADF67B2CE1A6A5D2916CAAA63D /* group.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = group.h; path = secp256k1/Classes/secp256k1/src/group.h; sourceTree = ""; }; - D9561DEDFA26221B06990218E6A83A03 /* ECB.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ECB.swift; path = Sources/CryptoSwift/BlockMode/ECB.swift; sourceTree = ""; }; - DA80E6247DB8524C368E70A886734152 /* eckey_impl.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = eckey_impl.h; path = secp256k1/Classes/secp256k1/src/eckey_impl.h; sourceTree = ""; }; - DB509202EE3E33A21AD57E651625F599 /* Utils+Foundation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Utils+Foundation.swift"; path = "Sources/CryptoSwift/Foundation/Utils+Foundation.swift"; sourceTree = ""; }; + C8DF35A7E08698ECC2838C53E3443C1E /* hang.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = hang.swift; path = Sources/hang.swift; sourceTree = ""; }; + C9873F2E94C418736B692B1AB059E649 /* secp256k1.swift.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = secp256k1.swift.xcconfig; sourceTree = ""; }; + CAD3D8A9F3681B5E12B50EBBCCEBE7E6 /* UInt32+Extension.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "UInt32+Extension.swift"; path = "Sources/CryptoSwift/UInt32+Extension.swift"; sourceTree = ""; }; + CAF5FEA1BD1CF23C84F83A8510A91044 /* ABIv2Encoding.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ABIv2Encoding.swift; path = Sources/ABIv2/ABIv2Encoding.swift; sourceTree = ""; }; + CB80FB396235F2111481913E2302A1C8 /* eckey_impl.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = eckey_impl.h; path = secp256k1/Classes/secp256k1/src/eckey_impl.h; sourceTree = ""; }; + CB90AB92111D7062C77D54D291E3B749 /* ContractProtocol.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ContractProtocol.swift; path = Sources/Contract/ContractProtocol.swift; sourceTree = ""; }; + CC18BF0E8482969BD374437CE71045DD /* MD5.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = MD5.swift; path = Sources/CryptoSwift/MD5.swift; sourceTree = ""; }; + CDD1D7FEEEDEF7A24C01454BE7718CA5 /* PrivateKey.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PrivateKey.swift; path = Sources/Encryption/PrivateKey.swift; sourceTree = ""; }; + CDF7C5F883D41554943AFBCBB1958F16 /* PromiseKit-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "PromiseKit-umbrella.h"; path = "../../Headers/Public/PromiseKit/PromiseKit-umbrella.h"; sourceTree = ""; }; + CDFDF3085A923AAB54C450CCE174DCA9 /* Int+Extension.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Int+Extension.swift"; path = "Sources/CryptoSwift/Int+Extension.swift"; sourceTree = ""; }; + CE4A4580E42A541BBE15203F926DC8D3 /* after.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = after.m; path = Sources/after.m; sourceTree = ""; }; + CF0D12A5202C8EF776F0091BBD11B987 /* NSNotificationCenter+AnyPromise.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSNotificationCenter+AnyPromise.h"; path = "Extensions/Foundation/Sources/NSNotificationCenter+AnyPromise.h"; sourceTree = ""; }; + CF7DECB3307F13D950AAA9D68FB500D7 /* after.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = after.swift; path = Sources/after.swift; sourceTree = ""; }; + CF905E33C571401D92EBCD05EA1D03A0 /* RandomBytesSequence.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RandomBytesSequence.swift; path = Sources/CryptoSwift/RandomBytesSequence.swift; sourceTree = ""; }; + D04952A8F6B67C458F1C1E7D1DDEE912 /* NSNotificationCenter+AnyPromise.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSNotificationCenter+AnyPromise.m"; path = "Extensions/Foundation/Sources/NSNotificationCenter+AnyPromise.m"; sourceTree = ""; }; + D0B07FB15FA291A79E3C66576B8412B2 /* CBC.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CBC.swift; path = Sources/CryptoSwift/BlockMode/CBC.swift; sourceTree = ""; }; + D2F8C1C710508A199624D73D2F65B17F /* RLP.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RLP.swift; path = Sources/Utils/RLP.swift; sourceTree = ""; }; + D3FAFE4EEC280E7E746C517A87CD69E2 /* SipHash.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = SipHash.xcconfig; sourceTree = ""; }; + D4BEB792F67555BAA869405C658DC3F2 /* util.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = util.h; path = secp256k1/Classes/secp256k1/src/util.h; sourceTree = ""; }; + D54CD8BE67A7DFF61B09E68F720EEDB3 /* HMAC.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = HMAC.swift; path = Sources/CryptoSwift/HMAC.swift; sourceTree = ""; }; + D570729DA4A1DA0751C72072D824E099 /* SipHash-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "SipHash-prefix.pch"; sourceTree = ""; }; + D59D6174070E0A338A5C84CBC0580DD7 /* lax_der_privatekey_parsing.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = lax_der_privatekey_parsing.h; path = secp256k1/Classes/secp256k1/contrib/lax_der_privatekey_parsing.h; sourceTree = ""; }; + D6C0567834C6A6F0A39ED88BAA8386BC /* ERC20.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ERC20.swift; path = Sources/Contracts/ERC20.swift; sourceTree = ""; }; + D75324744948AE5A2A9A67D91D6B1458 /* field_10x26.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = field_10x26.h; path = secp256k1/Classes/secp256k1/src/field_10x26.h; sourceTree = ""; }; + D82B1A92AAEA650E28CB709582C1661C /* ecmult_const_impl.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ecmult_const_impl.h; path = secp256k1/Classes/secp256k1/src/ecmult_const_impl.h; sourceTree = ""; }; + D8DF141858F319183BA89D019F0A28D6 /* CBCMAC.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CBCMAC.swift; path = Sources/CryptoSwift/CBCMAC.swift; sourceTree = ""; }; + D8F1B3A1D44BAC4789F724F17C5AA4B7 /* NSNotificationCenter+Promise.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "NSNotificationCenter+Promise.swift"; path = "Extensions/Foundation/Sources/NSNotificationCenter+Promise.swift"; sourceTree = ""; }; + D9B50A91C4E8E91E1A533C378434F178 /* field.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = field.h; path = secp256k1/Classes/secp256k1/src/field.h; sourceTree = ""; }; + DB08DE5B5D8E35649AC4C95C7280900E /* ecmult.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ecmult.h; path = secp256k1/Classes/secp256k1/src/ecmult.h; sourceTree = ""; }; + DB7610E801C93B9DBB7A6BEE62807EFF /* BigInt.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = BigInt.xcconfig; sourceTree = ""; }; + DB9A7D6649C9BCA173ED739CA1B2B7B2 /* SHA1.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SHA1.swift; path = Sources/CryptoSwift/SHA1.swift; sourceTree = ""; }; + DC4893BB39F2002A2C751431D7C96D28 /* UIViewPropertyAnimator+Promise.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "UIViewPropertyAnimator+Promise.swift"; path = "Extensions/UIKit/Sources/UIViewPropertyAnimator+Promise.swift"; sourceTree = ""; }; + DC592B79B318C0788DB49BEB7852D7BB /* StreamDecryptor.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = StreamDecryptor.swift; path = Sources/CryptoSwift/StreamDecryptor.swift; sourceTree = ""; }; + DCD7DCA1175FD82BE4138DA3B1FD02C2 /* NSTask+AnyPromise.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSTask+AnyPromise.m"; path = "Extensions/Foundation/Sources/NSTask+AnyPromise.m"; sourceTree = ""; }; DD5A83F499A1B0FA6DF5618B53E3ECA2 /* Pods-web3swiftExample-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-web3swiftExample-acknowledgements.markdown"; sourceTree = ""; }; - DE0D387077472AA08DA512A680D7A35A /* ComparisonExtensions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ComparisonExtensions.swift; path = Sources/Contract/ComparisonExtensions.swift; sourceTree = ""; }; - DE0D4C5D4572E55938D0F502D579DFCB /* Operators.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Operators.swift; path = Sources/CryptoSwift/Operators.swift; sourceTree = ""; }; - DFC2523D807701227A42A0BA4B072590 /* Division.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Division.swift; path = sources/Division.swift; sourceTree = ""; }; - E02FD2501C22AB2950180394C6721829 /* secp256k1_ecdh.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = secp256k1_ecdh.h; path = secp256k1/Classes/secp256k1/include/secp256k1_ecdh.h; sourceTree = ""; }; + DDE40461E5080FE6F9DC8C2AA0F353F7 /* SHA2.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SHA2.swift; path = Sources/CryptoSwift/SHA2.swift; sourceTree = ""; }; + DE49BDF4845DBF44ECC0B019AD32E304 /* race.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = race.m; path = Sources/race.m; sourceTree = ""; }; + E026E161C8C8039E6B7DC515F689D254 /* CryptoSwift.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = CryptoSwift.xcconfig; sourceTree = ""; }; E030C6F26BFADC8F35D1E4CA476BF788 /* Pods-web3swiftExample-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-web3swiftExample-acknowledgements.plist"; sourceTree = ""; }; - E0B272BFB9A50AA1C2A1E6A4DEEC093D /* CryptoSwift-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "CryptoSwift-dummy.m"; sourceTree = ""; }; - E2BB5F6EBE5B864EBD1A63370A88F9D0 /* UIView+AnyPromise.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIView+AnyPromise.h"; path = "Extensions/UIKit/Sources/UIView+AnyPromise.h"; sourceTree = ""; }; - E2F0FFC9F4D682EDCA0B3BC7E31D6391 /* CipherModeWorker.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CipherModeWorker.swift; path = Sources/CryptoSwift/BlockMode/CipherModeWorker.swift; sourceTree = ""; }; - E3A85EC299FC43DBDD17731238BE97AB /* SipHasher.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SipHasher.swift; path = SipHash/SipHasher.swift; sourceTree = ""; }; - E3AFD018D281A729CC31989C96615DC1 /* BigInt-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "BigInt-prefix.pch"; sourceTree = ""; }; - E40469C5303F3C3CE3FF070E010129D0 /* Array+Extension.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Array+Extension.swift"; path = "Sources/CryptoSwift/Array+Extension.swift"; sourceTree = ""; }; - E41FBED2A5A3FFB0F1E077856BFB0915 /* BigInt.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = BigInt.xcconfig; sourceTree = ""; }; - E43855A106DB2FA14C270CA0B86466FB /* ecmult.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ecmult.h; path = secp256k1/Classes/secp256k1/src/ecmult.h; sourceTree = ""; }; - E4670CF787B0B2C119BA0E6DC29128BD /* Checksum.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Checksum.swift; path = Sources/CryptoSwift/Checksum.swift; sourceTree = ""; }; - E4C4F155F450EE24DC1FD13F45386C50 /* Blowfish.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Blowfish.swift; path = Sources/CryptoSwift/Blowfish.swift; sourceTree = ""; }; - E4D76EAF3F4783A0D597A834542FB777 /* scalar_impl.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = scalar_impl.h; path = secp256k1/Classes/secp256k1/src/scalar_impl.h; sourceTree = ""; }; - E5A6554F8AEDB3FD77D19CB42B8B45FB /* W3Personal.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = W3Personal.swift; path = Sources/ObjectiveC/W3Personal.swift; sourceTree = ""; }; - E5BA6E1C1560F64FFA539D817C873169 /* Data+Extension.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Data+Extension.swift"; path = "Sources/Convenience/Data+Extension.swift"; sourceTree = ""; }; - E613D1C0FCB100E8D6B26B172F667291 /* StreamEncryptor.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = StreamEncryptor.swift; path = Sources/CryptoSwift/StreamEncryptor.swift; sourceTree = ""; }; - E6826990B731C0B50429A66E655192B0 /* ABIv2Elements.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ABIv2Elements.swift; path = Sources/ABIv2/ABIv2Elements.swift; sourceTree = ""; }; - E760EF068BA9FA734A3C5CF5556701F4 /* NSRegularExpressionExtension.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = NSRegularExpressionExtension.swift; path = Sources/Convenience/NSRegularExpressionExtension.swift; sourceTree = ""; }; - EA3F60C02F6F7CFBDE7EE6E2D800F4B8 /* EthURL.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = EthURL.swift; path = Sources/EthURL/EthURL.swift; sourceTree = ""; }; - EB2D0391B9E1016E3E36816581358F5A /* DecoderExtensions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DecoderExtensions.swift; path = Sources/TxPool/DecoderExtensions.swift; sourceTree = ""; }; - EB516A8AF2B1AC9ACACF5A35763798A2 /* GCD.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = GCD.swift; path = sources/GCD.swift; sourceTree = ""; }; - EBE187EBCD715E130CAD07F32E199951 /* secp256k1-config.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "secp256k1-config.h"; path = "secp256k1/Classes/secp256k1-config.h"; sourceTree = ""; }; - EBFDC2DCDF98D62EF41ABEAF3046056A /* when.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = when.swift; path = Sources/when.swift; sourceTree = ""; }; - EC2EF05512DDF758167753109A67594E /* Shifts.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Shifts.swift; path = sources/Shifts.swift; sourceTree = ""; }; - EC41FE6DBE1388C1063DD7390D310897 /* Codable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Codable.swift; path = sources/Codable.swift; sourceTree = ""; }; - ECCAE74A88BA613BDB2B2F222930867A /* Blowfish+Foundation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Blowfish+Foundation.swift"; path = "Sources/CryptoSwift/Foundation/Blowfish+Foundation.swift"; sourceTree = ""; }; - ED12EE6ABCE2B069001ACBB70D969919 /* after.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = after.swift; path = Sources/after.swift; sourceTree = ""; }; - EE1B0D2EA4E4C7F43A6BB45E4ECC86F1 /* scratch.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = scratch.h; path = secp256k1/Classes/secp256k1/src/scratch.h; sourceTree = ""; }; - EE39EC20BE1457BDB2703117FA2ACB90 /* Web3+Protocols.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Web3+Protocols.swift"; path = "Sources/Web3/Web3+Protocols.swift"; sourceTree = ""; }; - F00E2801BE31619F4F5EE94B8A7EE21E /* lax_der_parsing.c */ = {isa = PBXFileReference; includeInIndex = 1; name = lax_der_parsing.c; path = secp256k1/Classes/secp256k1/contrib/lax_der_parsing.c; sourceTree = ""; }; - F01DF36B24F5F7C512C4E516EB80E9A2 /* ABIv2ParameterTypes.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ABIv2ParameterTypes.swift; path = Sources/ABIv2/ABIv2ParameterTypes.swift; sourceTree = ""; }; - F0F77B3BDDC77F5DC41483D0C30624FA /* W3TxPool.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = W3TxPool.swift; path = Sources/ObjectiveC/W3TxPool.swift; sourceTree = ""; }; - F2F6ED3E8AD8434FA648ED599C5DABBB /* KeystoreManager.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = KeystoreManager.swift; path = Sources/KeystoreManager/KeystoreManager.swift; sourceTree = ""; }; - F41BC7D61267C154C9DBE89CBB890792 /* UIViewPropertyAnimator+Promise.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "UIViewPropertyAnimator+Promise.swift"; path = "Extensions/UIKit/Sources/UIViewPropertyAnimator+Promise.swift"; sourceTree = ""; }; - F43C057132E7C16F23D251D2EE2FC8E9 /* secp256k1.swift-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "secp256k1.swift-umbrella.h"; path = "../../Headers/Public/secp256k1/secp256k1.swift-umbrella.h"; sourceTree = ""; }; + E071AC0A4F93562BC3FDC9728F9A8DDB /* hash.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = hash.h; path = secp256k1/Classes/secp256k1/src/hash.h; sourceTree = ""; }; + E1D313D4B05E6D30E60394B29A9EB9EE /* secp256k1-config.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "secp256k1-config.h"; path = "secp256k1/Classes/secp256k1-config.h"; sourceTree = ""; }; + E1DA322877B311B135D925F5EC4BBE41 /* PromiseKit-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "PromiseKit-dummy.m"; sourceTree = ""; }; + E1FCB1C85402F70B07A066032990B629 /* Division.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Division.swift; path = sources/Division.swift; sourceTree = ""; }; + E271431604B2F76EFFCAD3A64B92E30B /* Migration.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Migration.swift; path = Sources/Migration.swift; sourceTree = ""; }; + E35D7D453EBB888C06442657CB51953E /* PKCS5.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PKCS5.swift; path = Sources/CryptoSwift/PKCS/PKCS5.swift; sourceTree = ""; }; + E422DF33DDACC700BF29FC3C964B8ABA /* BigInt.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; name = BigInt.modulemap; path = ../../Headers/Public/BigInt/BigInt.modulemap; sourceTree = ""; }; + E53553C348517E4DA099CE270803D0E0 /* scalar_low_impl.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = scalar_low_impl.h; path = secp256k1/Classes/secp256k1/src/scalar_low_impl.h; sourceTree = ""; }; + E5C0B9201A34F958BCC3E840AC1C5E0B /* RIPEMD160+StackOveflow.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "RIPEMD160+StackOveflow.swift"; path = "Sources/Convenience/RIPEMD160+StackOveflow.swift"; sourceTree = ""; }; + E5C6A1E5B7EF04119F2F309D18A95729 /* Integer Conversion.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Integer Conversion.swift"; path = "sources/Integer Conversion.swift"; sourceTree = ""; }; + E78676D6AF2AA0D191B970F1D214DC62 /* BloomFilter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BloomFilter.swift; path = Sources/Transaction/BloomFilter.swift; sourceTree = ""; }; + E7C60C367C441D15AFB6123A25CB632B /* Status.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Status.swift; path = Sources/Encryption/Cryptor/Status.swift; sourceTree = ""; }; + E88DCC88EAF6E3D0819C8613EF31E041 /* OFB.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = OFB.swift; path = Sources/CryptoSwift/BlockMode/OFB.swift; sourceTree = ""; }; + E99693164A55A257DFC9F7C244A7AFCA /* ABIv2Decoding.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ABIv2Decoding.swift; path = Sources/ABIv2/ABIv2Decoding.swift; sourceTree = ""; }; + E9BCCCCA2F0D32D7294B714AEA4151E1 /* W3Structs.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = W3Structs.swift; path = Sources/ObjectiveC/W3Structs.swift; sourceTree = ""; }; + EBDEE03DAA19F3D22573E37547E4918F /* Strideable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Strideable.swift; path = sources/Strideable.swift; sourceTree = ""; }; + EC0B4EEE9A638586422A80D2FB418B32 /* secp256k1_recovery.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = secp256k1_recovery.h; path = secp256k1/Classes/secp256k1/include/secp256k1_recovery.h; sourceTree = ""; }; + ED6175F1E555E05A05739FD35664424B /* field_impl.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = field_impl.h; path = secp256k1/Classes/secp256k1/src/field_impl.h; sourceTree = ""; }; + EDE00ED638E013B6AEFE0A9E4FABFFF2 /* field_10x26_impl.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = field_10x26_impl.h; path = secp256k1/Classes/secp256k1/src/field_10x26_impl.h; sourceTree = ""; }; + EEF659E53C622B88DC815CADEFD126A7 /* W3TxPool.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = W3TxPool.swift; path = Sources/ObjectiveC/W3TxPool.swift; sourceTree = ""; }; + EF4F3BE64F3F58BEAA8FADD7E5289A1C /* secp256k1.swift-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "secp256k1.swift-dummy.m"; sourceTree = ""; }; + EF4FED99D40BB34B508C8D71981BDC16 /* ERC777.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ERC777.swift; path = Sources/Contracts/ERC777.swift; sourceTree = ""; }; + F2F000C149E4ED4F5E4310C69BF08C13 /* Utilities.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Utilities.swift; path = Sources/Encryption/Cryptor/Utilities.swift; sourceTree = ""; }; + F3ADC03C32DC6E5CE9D92FDDC6A8229A /* race.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = race.swift; path = Sources/race.swift; sourceTree = ""; }; F4ED5E9BC7CFDC90149D7A21BF4E115B /* libPods-web3swiftExample.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; name = "libPods-web3swiftExample.a"; path = "libPods-web3swiftExample.a"; sourceTree = BUILT_PRODUCTS_DIR; }; - F5B948EAC897CEF1574263042AB22940 /* Collection+Extension.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Collection+Extension.swift"; path = "Sources/CryptoSwift/Collection+Extension.swift"; sourceTree = ""; }; - F6C877661362295CA40037E2EC9C9F8F /* BlockMode.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BlockMode.swift; path = Sources/CryptoSwift/BlockMode/BlockMode.swift; sourceTree = ""; }; - F6E539B82EBE806EC86C2538D5CA676E /* basic-config.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "basic-config.h"; path = "secp256k1/Classes/secp256k1/src/basic-config.h"; sourceTree = ""; }; - F768F184545D5B6D397FB6AEA49C6576 /* UInt16+Extension.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "UInt16+Extension.swift"; path = "Sources/CryptoSwift/UInt16+Extension.swift"; sourceTree = ""; }; - F9DAD357426BA9084B0C42826F5FCE03 /* NSURLSession+AnyPromise.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSURLSession+AnyPromise.h"; path = "Extensions/Foundation/Sources/NSURLSession+AnyPromise.h"; sourceTree = ""; }; - FBAEFAC24322C028D3DB90BCDD870626 /* PKCS7Padding.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PKCS7Padding.swift; path = Sources/CryptoSwift/PKCS/PKCS7Padding.swift; sourceTree = ""; }; - FBE01BA8E2528C9A8EDAEE4AF251457E /* web3swift.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; name = web3swift.modulemap; path = ../../Headers/Public/web3swift/web3swift.modulemap; sourceTree = ""; }; - FC44A13DFB90FB2010835585D80CA7CA /* hang.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = hang.m; path = Sources/hang.m; sourceTree = ""; }; - FD1FC6165612D5DBF5000CE89DDA380F /* SipHash-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "SipHash-prefix.pch"; sourceTree = ""; }; - FD5E45DB5594784D46A67E3812F124F7 /* secp256k1_ec_mult_static_context.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = secp256k1_ec_mult_static_context.h; path = secp256k1/Classes/secp256k1_ec_mult_static_context.h; sourceTree = ""; }; - FE168A5EE1B83636668A4F6F8CD2D671 /* CryptoExtensions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CryptoExtensions.swift; path = Sources/Convenience/CryptoExtensions.swift; sourceTree = ""; }; - FED107FB1FF8783BC60123B5BA4A9C8A /* EthereumFilterEncodingExtensions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = EthereumFilterEncodingExtensions.swift; path = Sources/Contract/EthereumFilterEncodingExtensions.swift; sourceTree = ""; }; + F52E2F34F6C0A39475E54FB690367768 /* BlockExplorer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BlockExplorer.swift; path = Sources/Deprecated/BlockExplorer.swift; sourceTree = ""; }; + F609DABA356D5CD0D734B6790E4EBE79 /* Web3+BrowserFunctions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Web3+BrowserFunctions.swift"; path = "Sources/HookedFunctions/Web3+BrowserFunctions.swift"; sourceTree = ""; }; + F69368BF2890110476F1F7C072DFBE2D /* when.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = when.swift; path = Sources/when.swift; sourceTree = ""; }; + F710A6FFF948544F6EA333821E08EA0D /* ABIv2TypeParser.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ABIv2TypeParser.swift; path = Sources/ABIv2/ABIv2TypeParser.swift; sourceTree = ""; }; + F946CF617B872338F47E15C5D5EE083E /* Random.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Random.swift; path = Sources/Encryption/Cryptor/Random.swift; sourceTree = ""; }; + F962AAEFEA1C264DA98F90C5EDBD1FCC /* SipHashable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SipHashable.swift; path = SipHash/SipHashable.swift; sourceTree = ""; }; + F9D95D283E3062C7F539A4508C289EF6 /* Guarantee.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Guarantee.swift; path = Sources/Guarantee.swift; sourceTree = ""; }; + FC3D7041F290CB773584DD815DDC6305 /* Words and Bits.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Words and Bits.swift"; path = "sources/Words and Bits.swift"; sourceTree = ""; }; + FC96A71197252E66FDB9A044EDB45B19 /* Int+Sequence.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Int+Sequence.swift"; path = "Sources/Convenience/Int+Sequence.swift"; sourceTree = ""; }; + FE189E2AE541B29623BE902BA69B7A7B /* ECB.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ECB.swift; path = Sources/CryptoSwift/BlockMode/ECB.swift; sourceTree = ""; }; + FE1FCA9CE6A8B389228F8EE3FD8075CC /* Cryptors.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Cryptors.swift; path = Sources/CryptoSwift/Cryptors.swift; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -802,159 +830,256 @@ name = iOS; sourceTree = ""; }; - 0E815B3E4FE725A36792FEB645F5C50E /* Support Files */ = { + 2A04BD9961A743CEB69FE828253079BA /* Support Files */ = { isa = PBXGroup; children = ( - 3886BF9954F9B2D273148C543BED40F9 /* PromiseKit.modulemap */, - 5012A7EB246D392D8799AADC7096637B /* PromiseKit.xcconfig */, - 4B93AEF08CD9D0B3A95B4578D9A49F1C /* PromiseKit-dummy.m */, - 96A02F49FD6ECB3D18135C5EBFCF1D62 /* PromiseKit-prefix.pch */, - 22AAF319B8F0B0C5E990620D271C7D67 /* PromiseKit-umbrella.h */, + 3F01ECBF3421C30613D3F570F97834C5 /* PromiseKit.modulemap */, + 16491032ECC6F0C1C3F5F16EC7FD34F5 /* PromiseKit.xcconfig */, + E1DA322877B311B135D925F5EC4BBE41 /* PromiseKit-dummy.m */, + 588B54BC44305BE62D688A2CA11DDFE7 /* PromiseKit-prefix.pch */, + CDF7C5F883D41554943AFBCBB1958F16 /* PromiseKit-umbrella.h */, ); name = "Support Files"; path = "../Target Support Files/PromiseKit"; sourceTree = ""; }; - 1B2D4D03973C0B3BE7843372FF35A40B /* Support Files */ = { + 2E19AB21B2A823C1ACEB798708E6E221 /* BigInt */ = { isa = PBXGroup; children = ( - FBE01BA8E2528C9A8EDAEE4AF251457E /* web3swift.modulemap */, - 592588320FCF12FB8B967F372867A041 /* web3swift.xcconfig */, - 867D9F973ACE2D6E884395508E430D1C /* web3swift-dummy.m */, - 9B3129F6812687DB1F008EBBDA9BFA3E /* web3swift-prefix.pch */, - C81905C3606C069A176B4122FD89CF68 /* web3swift-umbrella.h */, + 20E6C6615A8722C91F5E1A0BC053684B /* Addition.swift */, + 6783D1511AF048A484CE1EFA28E00CD9 /* BigInt.swift */, + 2CD8AA63468BECE721C4700DC34DD46D /* BigUInt.swift */, + 6035BDCEC69AC5C694645245D8141CB5 /* Bitwise Ops.swift */, + 18F713DB07A71F241479241E86BE639A /* Codable.swift */, + 4C9671380679AC08F2DFC9275D8F55EC /* Comparable.swift */, + 0C2822F5BCA2B5A2CD5ABE54AD072A1A /* Data Conversion.swift */, + E1FCB1C85402F70B07A066032990B629 /* Division.swift */, + B1A071AD824600DC0941E442980DC731 /* Exponentiation.swift */, + 784CC85002418E7744D28289D857E97A /* Floating Point Conversion.swift */, + A9D873E6F0B29BDC7E239F3DA54A6B86 /* GCD.swift */, + 682CDBAE11DF87F594C12FE363C2AF1D /* Hashable.swift */, + E5C6A1E5B7EF04119F2F309D18A95729 /* Integer Conversion.swift */, + 8C5DA839004BBE15B5F918982496B61D /* Multiplication.swift */, + 344A4652CCE668F42005F6FCA6A7BDD4 /* Prime Test.swift */, + 55A7B9772F260392189D44F47144CF13 /* Random.swift */, + 84CBA06B4BB09A057F0833F1217E931C /* Shifts.swift */, + 5EB009DF65882D750C273CCE2CB45D5D /* Square Root.swift */, + EBDEE03DAA19F3D22573E37547E4918F /* Strideable.swift */, + A09BA3EFE288EC8F646A5377B0E2945B /* String Conversion.swift */, + 19BB6AFB71817EC7D0EE3602F5F177F1 /* Subtraction.swift */, + FC3D7041F290CB773584DD815DDC6305 /* Words and Bits.swift */, + 5FF1A072941450FCD72B7461FBC70D48 /* Support Files */, ); - name = "Support Files"; - path = "../Target Support Files/web3swift"; + name = BigInt; + path = BigInt; sourceTree = ""; }; - 1E3B11D04D98C4B985263301CFD7A84E /* Support Files */ = { + 433CD3331B6C3787F473C941B61FC68F /* Frameworks */ = { isa = PBXGroup; children = ( - C18BB6DE219432BF00FEC6ECFC1DE038 /* secp256k1.swift.modulemap */, - ACC5AE1C91E7380820C719013E46690D /* secp256k1.swift.xcconfig */, - B1DC488ED2D924E6E1749F0F2C6DF0E0 /* secp256k1.swift-dummy.m */, - 28C19B4FE9B5F089948A97E83F96DADF /* secp256k1.swift-prefix.pch */, - F43C057132E7C16F23D251D2EE2FC8E9 /* secp256k1.swift-umbrella.h */, + 06CDD10DE71306278CF89108B3036DFD /* iOS */, ); - name = "Support Files"; - path = "../Target Support Files/secp256k1.swift"; + name = Frameworks; sourceTree = ""; }; - 24FDE8B1B72E5FD1166E75CCD208888A /* CryptoSwift */ = { + 44EE8CAE5FCDCD0410720B16553B0AE5 /* secp256k1.swift */ = { isa = PBXGroup; children = ( - BC3A82AB790BB3F75EA48811FFE34B21 /* AEAD.swift */, - BC41DE6F77577FE573D6343D268D6DCB /* AEADChaCha20Poly1305.swift */, - 86774E8CA3F133E4EECF266C53D589F4 /* AES.swift */, - 35C6DA12D862927A1E130AA75F0408C0 /* AES+Foundation.swift */, - CC2009DA05FE7B0CC6CD787FE2A216F6 /* AES.Cryptors.swift */, - E40469C5303F3C3CE3FF070E010129D0 /* Array+Extension.swift */, - 78EE3CBED6A7332113213CB87281F694 /* Array+Foundation.swift */, - 925E5F982D0D43286E3195E5F2A20B80 /* Authenticator.swift */, - 128F5488DEFFD1C3D786BD0708F25642 /* BatchedCollection.swift */, - 4A5DE251B01651B7A7A53C7434DB35DC /* Bit.swift */, - CCECF78C3301D321F89CB27BE68E8454 /* BlockCipher.swift */, - B9CE5A6F4EA724D09118EBF04EE0577A /* BlockDecryptor.swift */, - 25AC0C3A7FBE683D9C77F7D81072A064 /* BlockEncryptor.swift */, - F6C877661362295CA40037E2EC9C9F8F /* BlockMode.swift */, - 1B60D2F8B6A435660E4BEF8F026219C7 /* BlockModeOptions.swift */, - E4C4F155F450EE24DC1FD13F45386C50 /* Blowfish.swift */, - ECCAE74A88BA613BDB2B2F222930867A /* Blowfish+Foundation.swift */, - BB076238E4DDFDDE07432DAA74D2FB6F /* CBC.swift */, - 860BDC01E5E2DB2B99E53E95B8F8B88C /* CBCMAC.swift */, - A5CFBE4D8E3F9DEA2A0B9280ACBA8F63 /* CCM.swift */, - 22187C79C79098AB43AF131A8275520C /* CFB.swift */, - BAC8C6AE183F0ABD88BAAC3DA9B53DAB /* ChaCha20.swift */, - 84D489D11829908FBAFEB8A5A59234D9 /* ChaCha20+Foundation.swift */, - E4670CF787B0B2C119BA0E6DC29128BD /* Checksum.swift */, - 244D45747E22A85D556B619478D50DA7 /* Cipher.swift */, - E2F0FFC9F4D682EDCA0B3BC7E31D6391 /* CipherModeWorker.swift */, - CBFA59603A52D5D5447635CEAC0029F6 /* CMAC.swift */, - F5B948EAC897CEF1574263042AB22940 /* Collection+Extension.swift */, - 55D2287FCE73DB9EF58308FA6B3EAF22 /* CompactMap.swift */, - B391A44739661EBBD626DB0557D2DA63 /* Cryptor.swift */, - A2073AC6CEAAC4B979040486A96E13CA /* Cryptors.swift */, - 50CFD7BE304368D7A74CBF1BFFA1AAB9 /* CTR.swift */, - 7654723C2954A66EF43A29E64EAC0FAB /* Data+Extension.swift */, - 60B220583753D6706B77ED4AF12D0BD0 /* Digest.swift */, - 73B7CE4DF4AA28AD35AABEAE4829A8B0 /* DigestType.swift */, - D9561DEDFA26221B06990218E6A83A03 /* ECB.swift */, - CFE0BF56E237BBF2974C9532E8B75CA5 /* GCM.swift */, - 5F67042A1503EB0A585A16EEECABFEAE /* Generics.swift */, - 8E7A8AFBD56BDD3A249E3E50F368C50E /* HKDF.swift */, - C0426A8B63CD5FA8241B7EA585618CD6 /* HMAC.swift */, - 2F1E4CC2ACC97BC650C16D5EE5CC903D /* HMAC+Foundation.swift */, - 9661E97CF2C8DB672C4DF77F99256CF3 /* Int+Extension.swift */, - 0AE94D353B662B4DD59AD354604229C3 /* MD5.swift */, - 41A672B1904703B02BD78103EB364BEF /* NoPadding.swift */, - 3BC8DFEEF8669C655454332162D20485 /* OFB.swift */, - DE0D4C5D4572E55938D0F502D579DFCB /* Operators.swift */, - 7A205F56A261C5635384453CD770A9A3 /* Padding.swift */, - 2D1746624F021CB809D79A21F85BCD0B /* PBKDF1.swift */, - 08B7F1EEF1790199C348BD616B3E24AE /* PBKDF2.swift */, - D7486EE98C03CFA16F87C3B85966BCAC /* PCBC.swift */, - 93DEB02628C3E1469C57C640CA49C59F /* PKCS5.swift */, - 766CCD5A188A4E8CB3CF8EC5862521C1 /* PKCS7.swift */, - FBAEFAC24322C028D3DB90BCDD870626 /* PKCS7Padding.swift */, - 9621BCB81210850393863EE9A5DCAB29 /* Poly1305.swift */, - 24137077676C831A6D7DB3A4A5D0DF0D /* Rabbit.swift */, - C482B2BF039963EA499F71BEEB665AE4 /* Rabbit+Foundation.swift */, - 258E58DA8910ED9D6C8446476D3E4D47 /* RandomBytesSequence.swift */, - 5C066022A44585CDFE3840F458996ACC /* SecureBytes.swift */, - B4256A0B73B6305667577F05019F3376 /* SHA1.swift */, - 0C8AA351E1BF3DB9691B5B0DC4FB8441 /* SHA2.swift */, - D6604F746EAD64CD4957C2BC3EB4796A /* SHA3.swift */, - 2073146793BFFD098C78F2FD8B040475 /* StreamDecryptor.swift */, - E613D1C0FCB100E8D6B26B172F667291 /* StreamEncryptor.swift */, - 85D215E6FA857443D867EC70FBF90C58 /* String+Extension.swift */, - 1C98760F994CA395F12A34E14016C07C /* String+FoundationExtension.swift */, - 206877A0343955E206D763CD51DBB28D /* UInt128.swift */, - F768F184545D5B6D397FB6AEA49C6576 /* UInt16+Extension.swift */, - A88C4EC889F8A34347E1466483883CD7 /* UInt32+Extension.swift */, - 0F49224321685FC93392BD3FB5C5A2D1 /* UInt64+Extension.swift */, - AD74B37D954C9625C0262333EE157016 /* UInt8+Extension.swift */, - CF9872E0791771BF0350C68BDEAF6AF1 /* Updatable.swift */, - 5E392802F8B810FBDC888CEDD201296F /* Utils.swift */, - DB509202EE3E33A21AD57E651625F599 /* Utils+Foundation.swift */, - B2A1EF70F3151893B73FFA4FF022DF05 /* ZeroPadding.swift */, - 44FBDB9CD82873C646266DE3D30700F2 /* Support Files */, + 395474270A0297AC92A048DAF3FE999D /* basic-config.h */, + 3604B765CC022357C0DB3C1EA0489564 /* ecdsa.h */, + 7E9CB26817958C91B5A385C376A5A90E /* ecdsa_impl.h */, + 3B049902C933CA2C9DA679ADCD85A985 /* eckey.h */, + CB80FB396235F2111481913E2302A1C8 /* eckey_impl.h */, + DB08DE5B5D8E35649AC4C95C7280900E /* ecmult.h */, + BBF45D24368569AE5FC48EE9CA885CAF /* ecmult_const.h */, + D82B1A92AAEA650E28CB709582C1661C /* ecmult_const_impl.h */, + 4F2E05ED5642B3C80E510E7729A65AC7 /* ecmult_gen.h */, + 79631491C7BD42B8704F0698EF4A31F3 /* ecmult_gen_impl.h */, + 742739CD628C4062D619F3951CC09D08 /* ecmult_impl.h */, + D9B50A91C4E8E91E1A533C378434F178 /* field.h */, + D75324744948AE5A2A9A67D91D6B1458 /* field_10x26.h */, + EDE00ED638E013B6AEFE0A9E4FABFFF2 /* field_10x26_impl.h */, + 809D461C7EAA66CF03D6FE435B31804D /* field_5x52.h */, + A4DECE93213259BDA56985422CE9366F /* field_5x52_asm_impl.h */, + B6980F1275F2E0FFB72EBF8ED04511D6 /* field_5x52_impl.h */, + 642A3305FF04BC4C46ECDEED6C41D69C /* field_5x52_int128_impl.h */, + ED6175F1E555E05A05739FD35664424B /* field_impl.h */, + B899063BEC35D5AD5473A8F572E13A83 /* group.h */, + 7EC3C4EEC5C8A68AA30BF498DA623094 /* group_impl.h */, + E071AC0A4F93562BC3FDC9728F9A8DDB /* hash.h */, + 66265036E2B783E012D66AE05EB69843 /* hash_impl.h */, + 29420FCD6AE4F4E15CEB9BF2D0179EFD /* lax_der_parsing.c */, + 347FCD3ECF9C2620CB3FEBCAFA3B3680 /* lax_der_parsing.h */, + 121E3691FAB2465D90B2090B71AC8C94 /* lax_der_privatekey_parsing.c */, + D59D6174070E0A338A5C84CBC0580DD7 /* lax_der_privatekey_parsing.h */, + 4EF06ABD9B0D6698054EC2AA8D90DF1B /* main_impl.h */, + 9F2F143E4ECBBEAFF2D70335436A979E /* main_impl.h */, + 6050A9B3827F56B20ED096577461EF1C /* num.h */, + A272C009855BD26F561C1F4DB1C91C73 /* num_gmp.h */, + 690170EFA3CDFD20BA9FF4573A5E3CC6 /* num_gmp_impl.h */, + BA2BEDF6C4F35429131D47AF514CB6EC /* num_impl.h */, + 14629FAD6FB40143B0A3DC72FA570C0C /* scalar.h */, + 962FB73937BD92EDB30DC9B82C99702C /* scalar_4x64.h */, + 05D3ACE550E15168F74E25A55B5F17B7 /* scalar_4x64_impl.h */, + 28EB2496C0D9D63F363E73D83F86D86A /* scalar_8x32.h */, + 73097DCF76B1B4B22BFD6551328F9AC0 /* scalar_8x32_impl.h */, + 3D22F914863B69F74C6C9260C01646C2 /* scalar_impl.h */, + 2AAFAE8BEE01EAB08809FEE5BF7D5DD4 /* scalar_low.h */, + E53553C348517E4DA099CE270803D0E0 /* scalar_low_impl.h */, + 1984A5610D10DEF0E3AF19C8ACC2D5FA /* scratch.h */, + C37382FBDCE79114B671BD37C6D37EC2 /* scratch_impl.h */, + 2E7AB5EBF92C75116FA20091365F42E2 /* secp256k1.c */, + 859F20386DD833B6B2BA6A78FAE018B3 /* secp256k1.h */, + E1D313D4B05E6D30E60394B29A9EB9EE /* secp256k1-config.h */, + C1574268ABF3089AE498AED67BC3597E /* secp256k1_ec_mult_static_context.h */, + 6E85BBF0B3C0C1A72F1E790B8180A9BB /* secp256k1_ecdh.h */, + B77C4E778BD24CC84006E90D010E1D79 /* secp256k1_main.h */, + EC0B4EEE9A638586422A80D2FB418B32 /* secp256k1_recovery.h */, + D4BEB792F67555BAA869405C658DC3F2 /* util.h */, + D2831B8F787FDD34CDDDBE7C11D098C7 /* Support Files */, ); - name = CryptoSwift; - path = CryptoSwift; + name = secp256k1.swift; + path = secp256k1.swift; sourceTree = ""; }; - 433CD3331B6C3787F473C941B61FC68F /* Frameworks */ = { + 4A6EEECC3915C6843F7EDC6360D9E267 /* UIKit */ = { isa = PBXGroup; children = ( - 06CDD10DE71306278CF89108B3036DFD /* iOS */, + 8BA43864921451363C9A38DB198A12BE /* PMKUIKit.h */, + B221AE6DB4191177CDE504B1EF26FC23 /* UIView+AnyPromise.h */, + 639064B44CBAFF50CC101B1ABEEC2B67 /* UIView+AnyPromise.m */, + B7757AC1017D1C193F42A197E6C70C07 /* UIView+Promise.swift */, + 46390D9D981148512AC83287E3045BA2 /* UIViewController+AnyPromise.h */, + 5793F1F10AC6DBD8AE7491B8804E2440 /* UIViewController+AnyPromise.m */, + DC4893BB39F2002A2C751431D7C96D28 /* UIViewPropertyAnimator+Promise.swift */, ); - name = Frameworks; + name = UIKit; sourceTree = ""; }; - 44FBDB9CD82873C646266DE3D30700F2 /* Support Files */ = { + 5DC95E81EEBA925B934A5BE777BCFCAF /* web3swift */ = { isa = PBXGroup; children = ( - 6FF9ADA9E357D3132834E4412980D879 /* CryptoSwift.modulemap */, - 5267CEA0BA9A1E0761AD465D9265501C /* CryptoSwift.xcconfig */, - E0B272BFB9A50AA1C2A1E6A4DEEC093D /* CryptoSwift-dummy.m */, - 702634330D4994A9DB386204199C437F /* CryptoSwift-prefix.pch */, - 2A9445790A74FC3309D763EC2B5DA37C /* CryptoSwift-umbrella.h */, + C3B2F841CFC9A5EA0A3DD94478BADB9A /* ABIv2.swift */, + E99693164A55A257DFC9F7C244A7AFCA /* ABIv2Decoding.swift */, + 491185EE43B9BD095EF1FAA2497D8DA7 /* ABIv2Elements.swift */, + CAF5FEA1BD1CF23C84F83A8510A91044 /* ABIv2Encoding.swift */, + 613C57926AE9253FFEEDE39DF3DF224C /* ABIv2ParameterTypes.swift */, + AA467AEC1B0090C21020463302A20F76 /* ABIv2Parsing.swift */, + F710A6FFF948544F6EA333821E08EA0D /* ABIv2TypeParser.swift */, + 056F92BF525AF8FA06347BA64BD52508 /* AbstractKeystore.swift */, + 194210F828E7960C67AE58C12DB912D2 /* AES.swift */, + 36915B25F27DFFDC9564E95D23E22D34 /* Array+Extension.swift */, + 6E4B835C3A24EE55E8C7BB286142C4EB /* Base58.swift */, + 658034F04AF4E31BC56D96B44D511ADD /* Batching.swift */, + 21A3E5B9C189B413005D3D07842BD1B4 /* BIP32HDNode.swift */, + B1A4AF61AD12FFDB6B7C9DD801DE6316 /* BIP32Keystore.swift */, + A6E69EC6B0DE18A6949423AED40C98DE /* BIP39.swift */, + 720EDFF092375EC290D9C09BFBF90F03 /* BIP39+WordLists.swift */, + F52E2F34F6C0A39475E54FB690367768 /* BlockExplorer.swift */, + E78676D6AF2AA0D191B970F1D214DC62 /* BloomFilter.swift */, + A9C578DB159FA661619DBF792F30F5D4 /* Bridging.swift */, + 900CBD85D02FC90ECED5E0E2BEA39E71 /* ComparisonExtensions.swift */, + 9D8BAC3CAE91F5395F5D71E71BFED4A8 /* ContractABIv2.swift */, + CB90AB92111D7062C77D54D291E3B749 /* ContractProtocol.swift */, + 2FF184E190BFD19A4F5E7AFCF6BD4FB8 /* Crypto.swift */, + 66E1AD388CBF628B795AA7DE8A35147C /* CryptoExtensions.swift */, + 7D7495DBAC5F1ED9F84E5B00E251B935 /* Cryptor.swift */, + B29AFEB51D70B10D7BA01E68E5707078 /* Data+Extension.swift */, + B7EA41B97F52475D6743363FB2C8BE3E /* DecoderExtensions.swift */, + 3C39F43F1445B754FE5D873E79FA7468 /* DerivedKey.swift */, + 47ECEBBCAB10D43B1A32E0FEB32E0AD9 /* DictionaryReader.swift */, + 677284111DFA9191517F7C0B05F6020F /* Digest.swift */, + 98340DCD205F2D928D589028BBD414B3 /* EIP67Code.swift */, + D6C0567834C6A6F0A39ED88BAA8386BC /* ERC20.swift */, + AF89F12E26B9B814836439034EE5FDEC /* ERC721.swift */, + EF4FED99D40BB34B508C8D71981BDC16 /* ERC777.swift */, + 30C0A341948993A6DF7177A35DC594F3 /* ERC888.swift */, + 2515CABA83AC1B6A45DFC6FE4B26DCD5 /* EthereumAddress.swift */, + 5DCCFC51B181461FCA41827B490C4233 /* EthereumFilterEncodingExtensions.swift */, + 4DEF8B22CCFC30A3F52085A421509B35 /* EthereumKeystoreV3.swift */, + 66D8D8CC04B068280F9164CAC456B880 /* EthereumTransaction.swift */, + 963FD09C509F4591C36958295682A908 /* EthURL.swift */, + 3022EB26C04CBD2B44459F77A25033D5 /* EventFiltering.swift */, + 40D2D28099E625A2766B135710553F3F /* Guides.swift */, + 454D1C414EB0979EB31AC5AA88BFF669 /* HDPath.swift */, + 182C4A0B2361BCBAA99560481834F610 /* HMAC.swift */, + 2B8FA8C0DB1B4B91832B4912D543515F /* IBAN.swift */, + FC96A71197252E66FDB9A044EDB45B19 /* Int+Sequence.swift */, + 579B6847FEF6AA493DF030C224101CEA /* KeyDerivation.swift */, + 852906B17625EF926029E80181D1686F /* KeystoreManager.swift */, + BBA4489D2973CDCF9B98D46CC98F96B5 /* LibSecp256k1Extension.swift */, + E271431604B2F76EFFCAD3A64B92E30B /* Migration.swift */, + 6846011EC9EC59250AC077A4C1AE3145 /* Migration-iOS.swift */, + 82E53AAC8144E1CEAB245FDC9D84BFF6 /* NativeTypesEncoding+Extensions.swift */, + 325639E6BE721ADD407D1C4DA421F577 /* NSRegularExpressionExtension.swift */, + 9A34DEF1E7944AE805521CD816CFB62D /* PlainKeystore.swift */, + CDD1D7FEEEDEF7A24C01454BE7718CA5 /* PrivateKey.swift */, + F946CF617B872338F47E15C5D5EE083E /* Random.swift */, + E5C0B9201A34F958BCC3E840AC1C5E0B /* RIPEMD160+StackOveflow.swift */, + D2F8C1C710508A199624D73D2F65B17F /* RLP.swift */, + 1ACE6BF9F8E004001ADF038C08274CC9 /* SecurityToken.swift */, + C2180A1812F2652CA38047EF187FD338 /* SolidityDataReader.swift */, + 069436EA083AF69D4560EA1633DBA9A0 /* SolidityDataWriter.swift */, + 632251046D03D162D0B6275E7AAC744D /* SolidityFunction.swift */, + 400C2A38E54CF66A9F77E7285BFF95DD /* SolidityTypes.swift */, + AF3CE64E81CEF9249E91AACA25C8AEE0 /* SSLPointerTricks.swift */, + E7C60C367C441D15AFB6123A25CB632B /* Status.swift */, + 41BF4497A3C9498417FA2FF2791C38CC /* StreamCryptor.swift */, + 6D22E9BE63451188DB69F09B7F690359 /* String+Extension.swift */, + 10283EB72FA757EC47D2155F1DD1D56D /* Transaction.swift */, + 3843BF01A53C05BBE20F935F232DFCC0 /* TransactionSigner.swift */, + 23AE376B36F24D44457DB21BC3015C37 /* TxPool.swift */, + BBA1D03B12D1457183331D1577E8DCCF /* UInt256.swift */, + 3BE267986AA8998D2E0A54AA0C0A93A9 /* Updatable.swift */, + F2F000C149E4ED4F5E4310C69BF08C13 /* Utilities.swift */, + 6B8598A451FC53A66ECAAD6AB556B266 /* W3Contract.swift */, + 311F220921CFD98F105DF864D2163127 /* W3Contracts.swift */, + 7AF62E9F4EE3B2BCBE6C0442F9A308C0 /* W3Eth.swift */, + 08E30008B02494E513E76BA05FBA754D /* W3JsonRpc.swift */, + ACC410162DD85E80C18163F3554ADE48 /* W3Keystore.swift */, + 0BFA512E6D88B1925B2ACC11DE5A2FB6 /* W3Personal.swift */, + 3F7C2D4D0DA76502C4B0BB1EAB5EB6AA /* W3Provider.swift */, + E9BCCCCA2F0D32D7294B714AEA4151E1 /* W3Structs.swift */, + 83E38CC874BAAE951F947B324C9ECFC9 /* W3Transaction.swift */, + 3475FA4FA24DF5C25B8E43D4759649C4 /* W3TransactionIntermediate.swift */, + EEF659E53C622B88DC815CADEFD126A7 /* W3TxPool.swift */, + 34982F96661D907CE08E6156EA90174C /* W3UInt.swift */, + 853A22BFAD63B5FEB1F501817640D9B9 /* W3Wallet.swift */, + 736AE845644FCE79F8223C7642108F52 /* W3Web3.swift */, + 3A06501C2D31D084B44A335F1FB550BC /* Web3.swift */, + F609DABA356D5CD0D734B6790E4EBE79 /* Web3+BrowserFunctions.swift */, + 097E102AFA7E8517A941B51D74BAE3D2 /* Web3+Contract.swift */, + 876D513FA41A77C1789A0E1CD3C6F730 /* Web3+Eth.swift */, + 152769DE4560B8499E0933B0D268D91D /* Web3+EventParser.swift */, + 3FDB735EA365FD5213A318E67F59530C /* Web3+HttpProvider.swift */, + A045D10CD29258F6A97742DD823EF075 /* Web3+Infura.swift */, + 1854EADF02D1B6AA020278DE3746BA11 /* Web3+Instance.swift */, + 804B4569D093A4258FC3116308C43841 /* Web3+JSONRPC.swift */, + 267F14B84C228B87BD58C9A56DB7ADA9 /* Web3+Methods.swift */, + 3E2913F98119802161D912CA04ECE41A /* Web3+Options.swift */, + A9B6082F0CF0EA74F5E388265C2C7A1F /* Web3+Personal.swift */, + C5C110E986B53B59CF02FF0B9A5B95DC /* Web3+Protocols.swift */, + 9D6AF661E1F3E02CE5092E03136D86F3 /* Web3+Structures.swift */, + 6DB6CE40917264E5960A3988CD02E38D /* Web3+TransactionIntermediate.swift */, + 0A82257AD30BC58BB4AD3B96AF9306E9 /* Web3+Utils.swift */, + 4B52C0A803796E2C08EA0D308B88F98C /* Web3+Wallet.swift */, + BD52B79997D66A9D956CA16F71459380 /* Support Files */, ); - name = "Support Files"; - path = "../Target Support Files/CryptoSwift"; + name = web3swift; + path = web3swift; sourceTree = ""; }; - 779BC03CF97F3B66337C99C621D79059 /* PromiseKit */ = { + 5FF1A072941450FCD72B7461FBC70D48 /* Support Files */ = { isa = PBXGroup; children = ( - 79910B6CC494189CB782E7F498F8991E /* CorePromise */, - BF0EE547A9C65CC653E9D72330E0C51B /* Foundation */, - 0E815B3E4FE725A36792FEB645F5C50E /* Support Files */, - F78571284D30A8AC37FF24342961097E /* UIKit */, + E422DF33DDACC700BF29FC3C964B8ABA /* BigInt.modulemap */, + DB7610E801C93B9DBB7A6BEE62807EFF /* BigInt.xcconfig */, + 6D31627CBFD08BF61CDF91B14C39F7C3 /* BigInt-dummy.m */, + 8BBA20D2301EDB970DA22D2EE80A167C /* BigInt-prefix.pch */, + C68FC22DCC93C369F20109FEBB571F6F /* BigInt-umbrella.h */, ); - name = PromiseKit; - path = PromiseKit; + name = "Support Files"; + path = "../Target Support Files/BigInt"; sourceTree = ""; }; 7876869AA79AFDD4D8ED5A3466B54853 /* Targets Support Files */ = { @@ -965,63 +1090,17 @@ name = "Targets Support Files"; sourceTree = ""; }; - 79910B6CC494189CB782E7F498F8991E /* CorePromise */ = { - isa = PBXGroup; - children = ( - 262973B0CCA699D7E4FA87499AE05761 /* after.m */, - ED12EE6ABCE2B069001ACBB70D969919 /* after.swift */, - 7CBBB4AA48A3F01981391F1DAEF3BEFB /* AnyPromise.h */, - AD74DF3192DC1604682334632F072502 /* AnyPromise.m */, - 2BEE5B11D316AF65FE2E3566735866B1 /* AnyPromise.swift */, - 6E62BB2EAF743D0AFB4DFF51BD2B9E4B /* Box.swift */, - 0B90682E4857A7251A6A239A39EEF830 /* Catchable.swift */, - 81A053AC3ECA623B020C4255809459A0 /* Configuration.swift */, - 32F4C75362A1F8CB3872EC49486E8A8F /* CustomStringConvertible.swift */, - C74C89FA663360E4C4CEB90FC17A149C /* Deprecations.swift */, - 919162BDBDE666743F9C73DC90CB677A /* dispatch_promise.m */, - 18BD1DF659DBFE582679481FC5B126B8 /* Error.swift */, - B009D31FEE7D3BE0CB7EEB2C217875A6 /* firstly.swift */, - 079C629B5788020E9B6E9175918EB8EA /* fwd.h */, - 5180C96A3F2C4F6E6EB0F99A2C753E92 /* Guarantee.swift */, - FC44A13DFB90FB2010835585D80CA7CA /* hang.m */, - A6095A13F14E48B0FB394628D4C6EB26 /* hang.swift */, - 5063221CDC264E5A2ED2339F38D4BAB2 /* join.m */, - 5C63D44AB099C0DAFDC25E0BC24F83FD /* Promise.swift */, - 9955BD9641A6B0E814F41319D98DF262 /* PromiseKit.h */, - 63CF6BC7483FBAE952222D596BD2E68E /* race.m */, - 9C6376CD30EFEE4A594237E1394743A6 /* race.swift */, - BAE5C81D4458D9210862896E612FDF8E /* Resolver.swift */, - 41D9268646A911E21DF5AEC5784D87F5 /* Thenable.swift */, - 85D13EA9F7FBA86858AB36B3BDCCDBF8 /* when.m */, - EBFDC2DCDF98D62EF41ABEAF3046056A /* when.swift */, - ); - name = CorePromise; - sourceTree = ""; - }; 7DB346D0F39D3F0E887471402A8071AB = { isa = PBXGroup; children = ( 93A4A3777CF96A4AAC1D13BA6DCCEA73 /* Podfile */, 433CD3331B6C3787F473C941B61FC68F /* Frameworks */, - BF838A99D2650F6B2E7E60EDE6E389BF /* Pods */, + AD3A574559F704ED6A0646870CE0833F /* Pods */, 925C513588B03699C97E327AD9B29CBB /* Products */, 7876869AA79AFDD4D8ED5A3466B54853 /* Targets Support Files */, ); sourceTree = ""; }; - 837AFA9A3453E0E3E033111E260B5331 /* Support Files */ = { - isa = PBXGroup; - children = ( - C6B337088360041F9BD88ECEAE06BF98 /* SipHash.modulemap */, - 948D761F0CEEE3543C3AF71DE39EE168 /* SipHash.xcconfig */, - 96A46C0F73467255E30A9C59B68F5B52 /* SipHash-dummy.m */, - FD1FC6165612D5DBF5000CE89DDA380F /* SipHash-prefix.pch */, - 591C88999022984BA7FD9CBF38A55EB1 /* SipHash-umbrella.h */, - ); - name = "Support Files"; - path = "../Target Support Files/SipHash"; - sourceTree = ""; - }; 925C513588B03699C97E327AD9B29CBB /* Products */ = { isa = PBXGroup; children = ( @@ -1036,66 +1115,6 @@ name = Products; sourceTree = ""; }; - A0F2A57FA86AA595BE9FD12EC35E34C5 /* secp256k1.swift */ = { - isa = PBXGroup; - children = ( - F6E539B82EBE806EC86C2538D5CA676E /* basic-config.h */, - 90DF03C4F4D71A511DF87FC13EB75C04 /* ecdsa.h */, - 75C1E70EFA763C5FB6166F15A6E97411 /* ecdsa_impl.h */, - 54805BFC6BA6EDA4FDEAD09ED659AD89 /* eckey.h */, - DA80E6247DB8524C368E70A886734152 /* eckey_impl.h */, - E43855A106DB2FA14C270CA0B86466FB /* ecmult.h */, - 6773F488C4EFA761D4CA8C902ACD84E0 /* ecmult_const.h */, - 5549D9C8CD5FA71C4B6B763EA8FD7401 /* ecmult_const_impl.h */, - 4200265A11EA77B6341D67869612F075 /* ecmult_gen.h */, - AEE7557D9671D8E7D88346293E0F7E63 /* ecmult_gen_impl.h */, - 92839FBEF7C69236902CBD563DB62E07 /* ecmult_impl.h */, - 328147F8A8C036411A1541CA81D02364 /* field.h */, - 1C2E581F11B0E11E91AC9F50756FB7BE /* field_10x26.h */, - 79EBEA6373B480D7E9E611C240DF269A /* field_10x26_impl.h */, - 2E3673DDA300BDEBBC5701EA35C231A2 /* field_5x52.h */, - 820EF748A22F2DA975518626315C58A0 /* field_5x52_asm_impl.h */, - 6AECE74A226CC464B1BA1BDAFD6B8514 /* field_5x52_impl.h */, - D707D146525311DE82D6A611286E6313 /* field_5x52_int128_impl.h */, - 43FCE27F7CFE2BF785C0631A77487B46 /* field_impl.h */, - D94069ADF67B2CE1A6A5D2916CAAA63D /* group.h */, - AA506273FE20D402CC06546320B33A71 /* group_impl.h */, - 4767B3A87DD2A40D67DAE811DD600320 /* hash.h */, - AAA70B4B39AD3DE75A2482D260DE1CBD /* hash_impl.h */, - F00E2801BE31619F4F5EE94B8A7EE21E /* lax_der_parsing.c */, - 30F206A3EB5F9D5127CF900D217E8B52 /* lax_der_parsing.h */, - 7B6E9BB40C4471B2B540C0088F77D044 /* lax_der_privatekey_parsing.c */, - 5359668EAB1F3FDD9B4FCC924CD62D13 /* lax_der_privatekey_parsing.h */, - C94F08CF67C9E7263EFD3326BBA0A707 /* main_impl.h */, - 551C530E0BD8894E3EA99690F0823AD4 /* main_impl.h */, - 7C80DE67B4FC5ECCD5F13C4207C1FE6E /* num.h */, - 11935B49D81506A856A04A2CBDF17D94 /* num_gmp.h */, - A677A6E6672644837EF729E6B6DE4DC5 /* num_gmp_impl.h */, - 1967E1F86C08C8172CBCACEF9EC537E3 /* num_impl.h */, - D13276283CD7BE067F63AF0D5D0A29ED /* scalar.h */, - 7E8748F7ECF11F369F96ACE546322EE1 /* scalar_4x64.h */, - 5BCB141C2AD66EFA3AD7DECD3C6FF057 /* scalar_4x64_impl.h */, - 651935C6233551F0DD9325E98C71571A /* scalar_8x32.h */, - 633BDDDAF5229011660D994282445E53 /* scalar_8x32_impl.h */, - E4D76EAF3F4783A0D597A834542FB777 /* scalar_impl.h */, - BE6605934B022E7FFC97ACD587CB4F97 /* scalar_low.h */, - 8FF22AC893AA714534268CF0B8BD3C1E /* scalar_low_impl.h */, - EE1B0D2EA4E4C7F43A6BB45E4ECC86F1 /* scratch.h */, - 79E3B20627D544A8466149814AEFA771 /* scratch_impl.h */, - CD3A3AE2C01F4D969BA773F5C0F76348 /* secp256k1.c */, - 9922A9372EA6CD134BF7AEA87B40C3D6 /* secp256k1.h */, - EBE187EBCD715E130CAD07F32E199951 /* secp256k1-config.h */, - FD5E45DB5594784D46A67E3812F124F7 /* secp256k1_ec_mult_static_context.h */, - E02FD2501C22AB2950180394C6721829 /* secp256k1_ecdh.h */, - B5B014CE74F064D9F3F31326A0689604 /* secp256k1_main.h */, - 8A9B39E6446072BF453B2437F30CEE20 /* secp256k1_recovery.h */, - 8FA1D08204CECC8D92DA4EDBBACD6E71 /* util.h */, - 1E3B11D04D98C4B985263301CFD7A84E /* Support Files */, - ); - name = secp256k1.swift; - path = secp256k1.swift; - sourceTree = ""; - }; A594039006D69F6E7EB52154DD258AE1 /* Pods-web3swiftExample */ = { isa = PBXGroup; children = ( @@ -1113,207 +1132,230 @@ path = "Target Support Files/Pods-web3swiftExample"; sourceTree = ""; }; - B81478DB466C506D658CD618E266D406 /* web3swift */ = { + AD3A574559F704ED6A0646870CE0833F /* Pods */ = { isa = PBXGroup; children = ( - CA453C29FD0A42C3CBF5CA11D7CBF4BE /* ABIv2.swift */, - 601F344F6358AEC169E49948C7C40F9C /* ABIv2Decoding.swift */, - E6826990B731C0B50429A66E655192B0 /* ABIv2Elements.swift */, - 80B2BFC74FA2BAF745488A4A07A4F0A3 /* ABIv2Encoding.swift */, - F01DF36B24F5F7C512C4E516EB80E9A2 /* ABIv2ParameterTypes.swift */, - 2914E9E7A43D92ACE3A565AA03CF13B5 /* ABIv2Parsing.swift */, - 66A4BA86C057FFCE1CEE5285890F85A2 /* ABIv2TypeParser.swift */, - 5E22DF8563505CC50CD46EB54EBA3CC7 /* AbstractKeystore.swift */, - 1CA2B31A0C8255603E7ED05DDC223D32 /* Array+Extension.swift */, - B458113D1114D726F10F855423359DEF /* Base58.swift */, - 1E5B02857A6C437A754788617BD9DABE /* Batching.swift */, - C42830B974DEEAD022E79700C8BCC2AE /* BIP32HDNode.swift */, - 1CC1BBFEB9186646426F4D9DB837A1C4 /* BIP32Keystore.swift */, - 119271CF472742A15F9FB023C2A22BC2 /* BIP32KeystoreJSONStructure.swift */, - 89D0818D4609DD13DB368529B0E59FC9 /* BIP39.swift */, - 12565C213FF185E2106E1A013F9D7672 /* BIP39+WordLists.swift */, - 0CA5927EAAE56DD0648824C11833F95E /* BlockExplorer.swift */, - 0820072EFDECEC01B5AABAEF45B9EBDA /* BloomFilter.swift */, - 6E86DAC01EFE779F7DFC2CAE2A06FD89 /* Bridging.swift */, - DE0D387077472AA08DA512A680D7A35A /* ComparisonExtensions.swift */, - BB4B0945DDC430546255C3CA485FE55A /* ContractABIv2.swift */, - 2B48AEFEB678203446638C184A53E64B /* ContractProtocol.swift */, - FE168A5EE1B83636668A4F6F8CD2D671 /* CryptoExtensions.swift */, - E5BA6E1C1560F64FFA539D817C873169 /* Data+Extension.swift */, - EB2D0391B9E1016E3E36816581358F5A /* DecoderExtensions.swift */, - 61FBEF9B4568D60E87AE8A1110346BCF /* DictionaryReader.swift */, - 488707222647CD1E0EFA101AC53F2CE0 /* EIP67Code.swift */, - B094DC359EAC502A4B2406D5D6E4D5B3 /* ERC20.swift */, - 9C1872FDB2DFF9F4DA5E8A8A98449ACC /* ERC721.swift */, - 0E56949D28EA9CBA3ED7ED03F14A5AD9 /* ERC777.swift */, - 94D6DC86975FFB0F265FD99E9CAB5366 /* ERC888.swift */, - 40114C10B5CCEE77D6E7B9C474CEFBC7 /* EthereumAddress.swift */, - FED107FB1FF8783BC60123B5BA4A9C8A /* EthereumFilterEncodingExtensions.swift */, - 4AD941010F2B34FF0A83E014985D3E1F /* EthereumKeystoreV3.swift */, - 0E4CC17AF81A45606F71ACC5C8BF7831 /* EthereumTransaction.swift */, - EA3F60C02F6F7CFBDE7EE6E2D800F4B8 /* EthURL.swift */, - 502B38C2BA985014F8B3752A65A3E64B /* EventFiltering.swift */, - 8306161F4872280FE26348C2C644E8F2 /* Guides.swift */, - C84BFBD3F53041E1948695C6454337AF /* HDPath.swift */, - 694D22A55022028256DA14464A953049 /* IBAN.swift */, - 64484EF028FFF44D370822A9870871DD /* Int+Sequence.swift */, - F2F6ED3E8AD8434FA648ED599C5DABBB /* KeystoreManager.swift */, - 4D45593787CC7A3AC5EFD798FDB7825A /* KeystoreV3JSONStructure.swift */, - 0B213E82199407C701961027255F3968 /* LibSecp256k1Extension.swift */, - 501837E83E96A8F29515044102A7CC1C /* Migration.swift */, - 56CEDC66931C716FC04ADB1152D81E8F /* Migration-iOS.swift */, - 60A31D981ECA79D1C8EE94E091668BF0 /* NativeTypesEncoding+Extensions.swift */, - E760EF068BA9FA734A3C5CF5556701F4 /* NSRegularExpressionExtension.swift */, - A741FCD3760CFDFC4B1D1359BA1F8E82 /* PlainKeystore.swift */, - 02648BEE196ADD1702A65942247D02ED /* RIPEMD160+StackOveflow.swift */, - 2B72FAF0466F332EC9546BEFD0640340 /* RLP.swift */, - 631CD2935A4507165CC73441A92EA12B /* SecurityToken.swift */, - 8177956DFAD008E7BEA6CF42826C883C /* SolidityDataReader.swift */, - 927BFB6FE81B70D5A8F83FF4CD9D7C4A /* SolidityDataWriter.swift */, - D0B3E4F1990198DA8AE58A69EA50AE7B /* SolidityFunction.swift */, - 3836B05F25F7FD113337141424BF2529 /* SolidityTypes.swift */, - BD390D51A06B39F5540906E619629D47 /* String+Extension.swift */, - 86A6D20646EEFF1A6CBE0988443EA223 /* TransactionSigner.swift */, - B96A1AAD67F799566466FD3C0F9A0634 /* TxPool.swift */, - 82F14EE05B1AAC078E6F0F71A1AA793F /* UInt256.swift */, - CC372915A61413E94AECF37FB4E9484B /* W3Contract.swift */, - 296F89415B729E1A5EF75AE842AC9F0C /* W3Contracts.swift */, - 50E4355CB3D086EA6B348922D815599A /* W3Eth.swift */, - B8178035CFF1C3228050CB91F924167D /* W3JsonRpc.swift */, - 9C6918A11DB214188B07B9DCE18DFC91 /* W3Keystore.swift */, - E5A6554F8AEDB3FD77D19CB42B8B45FB /* W3Personal.swift */, - 4F944ECF152E4C57D2F193E88DC68232 /* W3Provider.swift */, - 2865A1F0790AEEE206D97BC74C1377FE /* W3Structs.swift */, - CB23A5B3F61B1AE28A0C203DDBA09A6C /* W3Transaction.swift */, - CCC6FEF199CF9F3C309996C7BFC67688 /* W3TransactionIntermediate.swift */, - F0F77B3BDDC77F5DC41483D0C30624FA /* W3TxPool.swift */, - B49EAA4E55D07DE88528F6DD3A6FB92A /* W3UInt.swift */, - 60DE2BE0351114B86AF47BE92CB7C7D2 /* W3Wallet.swift */, - 11433713C0BB0884D8109DCE92B84AF5 /* W3Web3.swift */, - 970F0CA9F12749A406EBD38CDDAA5740 /* Web3.swift */, - 65F20C4E8CA4E4A462F3A843282CE690 /* Web3+BrowserFunctions.swift */, - A89380BC8BE77F88844A6861B1774B4D /* Web3+Contract.swift */, - 749BD30C9C4D786D355C9F1CABEF98EE /* Web3+Eth.swift */, - 25FCF5EDD3A59297D455F8C0D77C0271 /* Web3+EventParser.swift */, - 7517A40D49A6C63FC1CB67045F92167F /* Web3+HttpProvider.swift */, - BD572B91B1A51E98681DFE123FAE063A /* Web3+Infura.swift */, - 16543E04CF5DE177695D8D12EFCA7500 /* Web3+Instance.swift */, - 581DC16F958BBE3969232EB987E08E3D /* Web3+JSONRPC.swift */, - 3920B1C5D19CDCFBB3C7E8FE3815B867 /* Web3+Methods.swift */, - C76C90A3560095A5FABC64A154456AF9 /* Web3+Options.swift */, - BEA782E83F57637A2C7DF7A92935730D /* Web3+Personal.swift */, - EE39EC20BE1457BDB2703117FA2ACB90 /* Web3+Protocols.swift */, - 06330FEEF0349472276FB95B3D6183FD /* Web3+Structures.swift */, - 8184617ED482F52A2821B8189EFBD4D5 /* Web3+TransactionIntermediate.swift */, - C5D32FAE3993FCC8E081F323AF27AE65 /* Web3+Utils.swift */, - 04ADAB835E8FA5E3404C57A95B78EF61 /* Web3+Wallet.swift */, - 1B2D4D03973C0B3BE7843372FF35A40B /* Support Files */, + 2E19AB21B2A823C1ACEB798708E6E221 /* BigInt */, + F32EBF5644CF559622E2DA791DE3E407 /* CryptoSwift */, + B7CD9E8D4238DBA6CCCF3D8B263436DA /* PromiseKit */, + 44EE8CAE5FCDCD0410720B16553B0AE5 /* secp256k1.swift */, + B0F16C2116C54FE689557B0592675852 /* SipHash */, + 5DC95E81EEBA925B934A5BE777BCFCAF /* web3swift */, ); - name = web3swift; - path = web3swift; + name = Pods; sourceTree = ""; }; - B84EDD0D93B01796DAE22E2F87AAFF6D /* Support Files */ = { + B0F16C2116C54FE689557B0592675852 /* SipHash */ = { isa = PBXGroup; children = ( - 57F7402DA8A80E8E5A66CB8CE520BF7D /* BigInt.modulemap */, - E41FBED2A5A3FFB0F1E077856BFB0915 /* BigInt.xcconfig */, - 6057428D752A953D8A64BE24FC412439 /* BigInt-dummy.m */, - E3AFD018D281A729CC31989C96615DC1 /* BigInt-prefix.pch */, - 434E47E1578E93D391AC801AE96B81A2 /* BigInt-umbrella.h */, + 38B4ECBBD27BB5CC17975EE3722BA7A9 /* Primitive Types.swift */, + 38DB7DDD12CCFE738AAB60B319720E14 /* RandomUInt64.swift */, + F962AAEFEA1C264DA98F90C5EDBD1FCC /* SipHashable.swift */, + 4587CC3E549E4D083E4A993A8F557B8C /* SipHasher.swift */, + B89C184F0763AD18AC85042FA58AFE6B /* Support Files */, + ); + name = SipHash; + path = SipHash; + sourceTree = ""; + }; + B7CD9E8D4238DBA6CCCF3D8B263436DA /* PromiseKit */ = { + isa = PBXGroup; + children = ( + ED21CE92B8C8BA1348D11BA199B7C3DE /* CorePromise */, + BD8742996652840BA9256E5A62C6C8D3 /* Foundation */, + 2A04BD9961A743CEB69FE828253079BA /* Support Files */, + 4A6EEECC3915C6843F7EDC6360D9E267 /* UIKit */, + ); + name = PromiseKit; + path = PromiseKit; + sourceTree = ""; + }; + B89C184F0763AD18AC85042FA58AFE6B /* Support Files */ = { + isa = PBXGroup; + children = ( + 98945FE39758A115CDD51070BFC2F7D9 /* SipHash.modulemap */, + D3FAFE4EEC280E7E746C517A87CD69E2 /* SipHash.xcconfig */, + 5E5081AECD30D3E286094D433E83CA3E /* SipHash-dummy.m */, + D570729DA4A1DA0751C72072D824E099 /* SipHash-prefix.pch */, + 2B0871E7C2D3BB9A76E9C8DFCF3ECFD7 /* SipHash-umbrella.h */, ); name = "Support Files"; - path = "../Target Support Files/BigInt"; + path = "../Target Support Files/SipHash"; + sourceTree = ""; + }; + BD52B79997D66A9D956CA16F71459380 /* Support Files */ = { + isa = PBXGroup; + children = ( + 899DE65D62756F081C7CC9DD733B63BF /* web3swift.modulemap */, + 927D111103F98C7DAB01E37865B0922D /* web3swift.xcconfig */, + 1AEAB4BC85800666C7F02E1A235CC06C /* web3swift-dummy.m */, + 54B3546B934CD662E74B5A0E4DD4A0D0 /* web3swift-prefix.pch */, + 2F6975E42C8EF5304CDC82F17B3351B3 /* web3swift-umbrella.h */, + ); + name = "Support Files"; + path = "../Target Support Files/web3swift"; sourceTree = ""; }; - BF0EE547A9C65CC653E9D72330E0C51B /* Foundation */ = { + BD8742996652840BA9256E5A62C6C8D3 /* Foundation */ = { isa = PBXGroup; children = ( - 54E530AA65A2CFFE4F42131EB97DB4C1 /* afterlife.swift */, - BD25BDC8FD92CF91E9C59903538EB421 /* NSNotificationCenter+AnyPromise.h */, - 91F642D7FFA9044BEA39F833A39118C4 /* NSNotificationCenter+AnyPromise.m */, - 0F34FEA32803AAFCF536476052C8914A /* NSNotificationCenter+Promise.swift */, - 2D06DEDD2D057F88A07E3742F6C8FAD0 /* NSObject+Promise.swift */, - 9180CD5B0BDED35E8DA746788747AE4E /* NSTask+AnyPromise.h */, - 5FD885BF1ED35CF59BDA587169EA3706 /* NSTask+AnyPromise.m */, - F9DAD357426BA9084B0C42826F5FCE03 /* NSURLSession+AnyPromise.h */, - 36CC33F5473C9EB5587AD3FACA6B90DE /* NSURLSession+AnyPromise.m */, - 66A57735E30A93BAF2734412C106DEFE /* NSURLSession+Promise.swift */, - 37D56D19E935FEBA5608556446D8CFD7 /* PMKFoundation.h */, - 6CD08EAB72131642457E20FC2486DB9D /* Process+Promise.swift */, + 49F2AB62198BA69B964A420659A67A6F /* afterlife.swift */, + CF0D12A5202C8EF776F0091BBD11B987 /* NSNotificationCenter+AnyPromise.h */, + D04952A8F6B67C458F1C1E7D1DDEE912 /* NSNotificationCenter+AnyPromise.m */, + D8F1B3A1D44BAC4789F724F17C5AA4B7 /* NSNotificationCenter+Promise.swift */, + 84A95789D46C4AFAB5B139B74C195534 /* NSObject+Promise.swift */, + 0CCF7BF7AF623677EECC00EEA9FBE61A /* NSTask+AnyPromise.h */, + DCD7DCA1175FD82BE4138DA3B1FD02C2 /* NSTask+AnyPromise.m */, + C77ADA7F1C2F95CE5E392062E46969BC /* NSURLSession+AnyPromise.h */, + 39CB4EC60CFB0DCDE2DDB07653CE5F49 /* NSURLSession+AnyPromise.m */, + 65F6465A8248AE7707578E9509067C62 /* NSURLSession+Promise.swift */, + B25C80355A9840641013BBA6EDBED2A0 /* PMKFoundation.h */, + 74367BCDB3E929207633AC901EA194C3 /* Process+Promise.swift */, ); name = Foundation; sourceTree = ""; }; - BF838A99D2650F6B2E7E60EDE6E389BF /* Pods */ = { + D2831B8F787FDD34CDDDBE7C11D098C7 /* Support Files */ = { isa = PBXGroup; children = ( - FB80DF5C7221FF9D942C3B60927AB517 /* BigInt */, - 24FDE8B1B72E5FD1166E75CCD208888A /* CryptoSwift */, - 779BC03CF97F3B66337C99C621D79059 /* PromiseKit */, - A0F2A57FA86AA595BE9FD12EC35E34C5 /* secp256k1.swift */, - FAD8B3E73871316AF014FA97D17296F7 /* SipHash */, - B81478DB466C506D658CD618E266D406 /* web3swift */, + 7DF7DD8FEFA3E51DCCE54FFF69453E29 /* secp256k1.swift.modulemap */, + C9873F2E94C418736B692B1AB059E649 /* secp256k1.swift.xcconfig */, + EF4F3BE64F3F58BEAA8FADD7E5289A1C /* secp256k1.swift-dummy.m */, + 430835A0F03D2A5A84DBE11BCA4E57EF /* secp256k1.swift-prefix.pch */, + 022B41CAF53CC07A80D10404E734C1DE /* secp256k1.swift-umbrella.h */, ); - name = Pods; + name = "Support Files"; + path = "../Target Support Files/secp256k1.swift"; sourceTree = ""; }; - F78571284D30A8AC37FF24342961097E /* UIKit */ = { + ED21CE92B8C8BA1348D11BA199B7C3DE /* CorePromise */ = { isa = PBXGroup; children = ( - 453D568D4E91B73895395AC74DE1EFC2 /* PMKUIKit.h */, - E2BB5F6EBE5B864EBD1A63370A88F9D0 /* UIView+AnyPromise.h */, - 59C746B7913EF1023EE7F440EEE284DE /* UIView+AnyPromise.m */, - 74767A24D40F51DC09F8E5D15ED6B5EE /* UIView+Promise.swift */, - 16C9C64C2F911C8AFDE29B9D08DCFA7D /* UIViewController+AnyPromise.h */, - 6777242734065537F1053F7D9FC52CD2 /* UIViewController+AnyPromise.m */, - F41BC7D61267C154C9DBE89CBB890792 /* UIViewPropertyAnimator+Promise.swift */, + CE4A4580E42A541BBE15203F926DC8D3 /* after.m */, + CF7DECB3307F13D950AAA9D68FB500D7 /* after.swift */, + AA19C7CC5D150B8C69FDBF08FAC94C89 /* AnyPromise.h */, + B332CEB52BE305BD358CA7AA455A1B56 /* AnyPromise.m */, + 4510B28955CEC6583DFB6236C78D391C /* AnyPromise.swift */, + 1660EAFD01A4651EE2CDE370C121DFDF /* Box.swift */, + BD8E7D12304D7DEC65B66327BAFD1B78 /* Catchable.swift */, + 03BD28F1C61CE918C64BF2FDA52CAEE9 /* Configuration.swift */, + A4F26BB8FA400739109ABE4A624C47C2 /* CustomStringConvertible.swift */, + 667ABBF819D04B957E813AE14C1D51A0 /* Deprecations.swift */, + 4B5AC0EDD6F09683D57828771D2ACEDC /* dispatch_promise.m */, + 12283BCF5F3F9AC4914BE69B1E352A11 /* Error.swift */, + 7D85486F43B4C0647CE49352A1BD3E0C /* firstly.swift */, + 93F777705930C06821199E58AA1F568F /* fwd.h */, + F9D95D283E3062C7F539A4508C289EF6 /* Guarantee.swift */, + 2E00EFC2F83AF924EEDEE93D74F7E659 /* hang.m */, + C8DF35A7E08698ECC2838C53E3443C1E /* hang.swift */, + 1CCE005629EFDD560F96BC0057928915 /* join.m */, + B13770A8820775115265668B680D4114 /* LogEvent.swift */, + 3E5082D2CE9B4D00FA5D8FEFFEF3B6A4 /* Promise.swift */, + 139758EC9623F3C2D9FA4EC1F4D0A542 /* PromiseKit.h */, + DE49BDF4845DBF44ECC0B019AD32E304 /* race.m */, + F3ADC03C32DC6E5CE9D92FDDC6A8229A /* race.swift */, + 694ECE7416177A3D28F11658BC2743D5 /* Resolver.swift */, + A42B1989EFF1F55D8144849B0F495406 /* Thenable.swift */, + A0A05EA9D40E2ED326E11F8DB35EACFB /* when.m */, + F69368BF2890110476F1F7C072DFBE2D /* when.swift */, ); - name = UIKit; + name = CorePromise; sourceTree = ""; }; - FAD8B3E73871316AF014FA97D17296F7 /* SipHash */ = { + F32EBF5644CF559622E2DA791DE3E407 /* CryptoSwift */ = { isa = PBXGroup; children = ( - B92C1CC0F25F8372ACC3418E1047D167 /* Primitive Types.swift */, - 9A7A00EB5B71CAC6DD35AEAE46485BBB /* RandomUInt64.swift */, - 5CAA30709849F28134935BA5890E3E39 /* SipHashable.swift */, - E3A85EC299FC43DBDD17731238BE97AB /* SipHasher.swift */, - 837AFA9A3453E0E3E033111E260B5331 /* Support Files */, + 1815711A9869D220E848A46359825385 /* AEAD.swift */, + 6215BA52D8373DF8BD46E681FE20E099 /* AEADChaCha20Poly1305.swift */, + C67B66957F5E865CD36ACD773BFEE7D4 /* AES.swift */, + AED2C144069F9D92298F862D21B61C01 /* AES+Foundation.swift */, + 5D520CD6930323F56B70DE0C3DE14055 /* AES.Cryptors.swift */, + 78437E1A8D511A1866DC860B8A2106A4 /* Array+Extension.swift */, + 9F48404C487B6785AEC33EE962112684 /* Array+Foundation.swift */, + 9EAF4A9129974F5D8D09A592DCECA2B2 /* Authenticator.swift */, + 7A42511D06152CD5401994637D29C46C /* BatchedCollection.swift */, + 48046E83BFCB7C78717CDE406F4D1CE9 /* Bit.swift */, + 41407CD287ECF03435BCFC21193FA2D8 /* BlockCipher.swift */, + 25267DCFAA145B7E4CB7177EA399A440 /* BlockDecryptor.swift */, + A564779031839556987CB037A5C86400 /* BlockEncryptor.swift */, + 0DE98010B3A8966FB5726C6AB1FD4973 /* BlockMode.swift */, + 0BDE90B8AF54820F1C505E04F43798B6 /* BlockModeOptions.swift */, + C0969D3EDAA005EBD42464516BD5C56B /* Blowfish.swift */, + 60BB5F3EF02C6E480C288AD98113906D /* Blowfish+Foundation.swift */, + D0B07FB15FA291A79E3C66576B8412B2 /* CBC.swift */, + D8DF141858F319183BA89D019F0A28D6 /* CBCMAC.swift */, + 65EFC47AE39BE0A12634ED83A94B2D43 /* CCM.swift */, + 86AE722ACF1A5A8CB268002725F137C2 /* CFB.swift */, + 2DADF2ED577DB06A8C7F164E7F805EA1 /* ChaCha20.swift */, + 05FC826C8AB6222C730376BB9D176956 /* ChaCha20+Foundation.swift */, + A41377B414A98972C5B5DF66FCA40220 /* Checksum.swift */, + 68EF575D658D880D787BEFA5F79A5517 /* Cipher.swift */, + 50C46CB5675D6E2C1833E910D6FF7AE6 /* CipherModeWorker.swift */, + BC1C413E84AE7C8A5BBD0D588D37F081 /* CMAC.swift */, + AEAE36133FDFDB6009E2BB88A5822DDE /* Collection+Extension.swift */, + 078BB9F2F5D7B51D34FA24BA8F34B921 /* CompactMap.swift */, + 5A419B92E3298B9D514EF2F335BE1018 /* Cryptor.swift */, + FE1FCA9CE6A8B389228F8EE3FD8075CC /* Cryptors.swift */, + 242D6CA2000FE946CF5051C82CDF52B7 /* CTR.swift */, + 9AFC48C5F3192533C44F55ADD96E2979 /* Data+Extension.swift */, + C665982EC93EAD9418AC8163C823BF10 /* Digest.swift */, + 5564CAC4742D85E4F8B7C90E17F32965 /* DigestType.swift */, + FE189E2AE541B29623BE902BA69B7A7B /* ECB.swift */, + C60A6286999504C681B391DC05434EA7 /* GCM.swift */, + AFD0071BB4B3D77C0F75E4FF7B3E995D /* Generics.swift */, + 3336EA4AA1579C4905C29899892E0AFC /* HKDF.swift */, + D54CD8BE67A7DFF61B09E68F720EEDB3 /* HMAC.swift */, + 9123EA433E1E84024B2551A3C9679BBC /* HMAC+Foundation.swift */, + CDFDF3085A923AAB54C450CCE174DCA9 /* Int+Extension.swift */, + CC18BF0E8482969BD374437CE71045DD /* MD5.swift */, + 08A008562769272750D46C151511C680 /* NoPadding.swift */, + E88DCC88EAF6E3D0819C8613EF31E041 /* OFB.swift */, + AE2B3AB892289E6B34347CC8C11F0C80 /* Operators.swift */, + A435D3569EC4C066254028CCA3F1D2A6 /* Padding.swift */, + 11CB1AB2829E37C20C39CB2F46E55418 /* PBKDF1.swift */, + 83AF75AF651287704614BB5AC0CB8922 /* PBKDF2.swift */, + 04E455390F27F109776B6C4D727E2981 /* PCBC.swift */, + E35D7D453EBB888C06442657CB51953E /* PKCS5.swift */, + 793DA9938B5F7239BC30EF8C1118F328 /* PKCS7.swift */, + 22F490D97EC429B129BF2B8FE6F0BBB9 /* PKCS7Padding.swift */, + 6DE7ABCC2C3D359671C16059A0905CA0 /* Poly1305.swift */, + 49FA5A37390AB75FD00980BAEF39DA75 /* Rabbit.swift */, + 83C375FF5A983A5E90D728F1E946AE3A /* Rabbit+Foundation.swift */, + CF905E33C571401D92EBCD05EA1D03A0 /* RandomBytesSequence.swift */, + 255DF073A7D6A6941C3A0AE4F19508A9 /* SecureBytes.swift */, + DB9A7D6649C9BCA173ED739CA1B2B7B2 /* SHA1.swift */, + DDE40461E5080FE6F9DC8C2AA0F353F7 /* SHA2.swift */, + 8210D7F89A2149DDFE8FCC64936FA110 /* SHA3.swift */, + DC592B79B318C0788DB49BEB7852D7BB /* StreamDecryptor.swift */, + 60B22E678A9111EE9C2AE8B032627499 /* StreamEncryptor.swift */, + BA30A89C6746AFB711BFBA0D51BD336E /* String+Extension.swift */, + 4DCF072F17844A4F41C51E72E7BED388 /* String+FoundationExtension.swift */, + 4EE1D977186B9FF7727A1099274E4D80 /* UInt128.swift */, + 756E4CA5BCDA3E18D8651370DDE7316C /* UInt16+Extension.swift */, + CAD3D8A9F3681B5E12B50EBBCCEBE7E6 /* UInt32+Extension.swift */, + 210489C46FB4E1B307A47B9480B1EBC2 /* UInt64+Extension.swift */, + 990C76E8804E794BCDE0314FECEC3BD8 /* UInt8+Extension.swift */, + 49E6C3ACB6B1F4B2BAC07F2D9EB6C7D1 /* Updatable.swift */, + 0042AD2270E223BD7F2AFAD60E846461 /* Utils.swift */, + 0B26F45A6672620E36B004104ED2BF9C /* Utils+Foundation.swift */, + 8073DACE0B7CAECDBD557F5050C77F02 /* ZeroPadding.swift */, + FEA5F5380DBB233350DD7AB8BF0DFE26 /* Support Files */, ); - name = SipHash; - path = SipHash; + name = CryptoSwift; + path = CryptoSwift; sourceTree = ""; }; - FB80DF5C7221FF9D942C3B60927AB517 /* BigInt */ = { + FEA5F5380DBB233350DD7AB8BF0DFE26 /* Support Files */ = { isa = PBXGroup; children = ( - 1D486E26367818F682831E597222E1A1 /* Addition.swift */, - 821E9E815EAEB0E70E5DF7D59FE0AB6A /* BigInt.swift */, - 314BD93C01C9ECB7BA859B6FE82D980A /* BigUInt.swift */, - 6B3B4AEF4BF1262925C80142B509BB98 /* Bitwise Ops.swift */, - EC41FE6DBE1388C1063DD7390D310897 /* Codable.swift */, - 850CFAA5DEC3E9DAF29BF716B6F75F74 /* Comparable.swift */, - C59B64FD38788ED778728031296C71E4 /* Data Conversion.swift */, - DFC2523D807701227A42A0BA4B072590 /* Division.swift */, - B8CF7825C8932FBA47190DC475A53563 /* Exponentiation.swift */, - C2FFF037764B090B1F784A7EA478DFDF /* Floating Point Conversion.swift */, - EB516A8AF2B1AC9ACACF5A35763798A2 /* GCD.swift */, - 1DD3DFF154E8D99B2DE5E1EFEF16F8DA /* Hashable.swift */, - 0DCC1E81F394DF2AC3DAF0E19A80E4A4 /* Integer Conversion.swift */, - B741F8FF5272D5CE879D15D03465DB4F /* Multiplication.swift */, - 1441D917D59136EBE81D178A21520773 /* Prime Test.swift */, - B3CCB104E19A411D3BDA8E0C0198CAE3 /* Random.swift */, - EC2EF05512DDF758167753109A67594E /* Shifts.swift */, - 2FBCE753FC8595A1BE151276260F520D /* Square Root.swift */, - 386A031384E6E93E4C37BFC1C57D6CB2 /* Strideable.swift */, - A0FA541706B5ADB9326A007DA8BD2300 /* String Conversion.swift */, - 8DDE1AEEEA9497540306023E3450CB78 /* Subtraction.swift */, - 0DE4AF58D3C89E3727F8B6D6C3597499 /* Words and Bits.swift */, - B84EDD0D93B01796DAE22E2F87AAFF6D /* Support Files */, + 852331DEB565502E7B78546744763E67 /* CryptoSwift.modulemap */, + E026E161C8C8039E6B7DC515F689D254 /* CryptoSwift.xcconfig */, + C5B96D994F55E397FA660DD3F1916EE9 /* CryptoSwift-dummy.m */, + 6F5E1B868EFF7E8EAE54F5A425BDA9B8 /* CryptoSwift-prefix.pch */, + C01595A61469CA81AC6BCFCDFB8A040D /* CryptoSwift-umbrella.h */, ); - name = BigInt; - path = BigInt; + name = "Support Files"; + path = "../Target Support Files/CryptoSwift"; sourceTree = ""; }; /* End PBXGroup section */ @@ -1460,7 +1502,7 @@ buildConfigurationList = 7F7392311A8F0101ACCA1BAF7F3F17D9 /* Build configuration list for PBXNativeTarget "PromiseKit" */; buildPhases = ( BCFB5D21DE21518C6D3A0944DFE4FF5A /* Headers */, - 134CC8DD1145CEAE8C23C0B0107D7C8A /* Sources */, + 7F16F86B873FAD9B698E1020345602B2 /* Sources */, 50618E42F489E9D22835B787A846A47D /* Frameworks */, B05250EFB54C5299F894D1773ED4FB4F /* Copy generated compatibility header */, ); @@ -1478,7 +1520,7 @@ buildConfigurationList = 77AE9F49C4C0A2399B7960659DBACADB /* Build configuration list for PBXNativeTarget "web3swift" */; buildPhases = ( 384DEAD25E756C334E9125645711DA30 /* Headers */, - 3DCF50CC4A5FDBE708AB966D47DB9A41 /* Sources */, + B29A1465E4876EF45E43B355C1F2BA17 /* Sources */, 4F27D93FD407279CF2C2D9D78BBAF4F5 /* Frameworks */, 7A7C77325E9887A19A3A7CF92E6516D3 /* Copy generated compatibility header */, ); @@ -1745,49 +1787,6 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - 134CC8DD1145CEAE8C23C0B0107D7C8A /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 8FBF80B066F4DB1B0AF5FDC59F4C9C76 /* after.m in Sources */, - C6DD012D500567CD5F6239B4FA3F4B20 /* after.swift in Sources */, - 60A2704235DCEC696FC1E6893E7E1C67 /* afterlife.swift in Sources */, - 4AFDC32E1BA51FE83F1E2D2799ADB126 /* AnyPromise.m in Sources */, - 0ACC52E7C0FBCD847D5E76ADD0D29738 /* AnyPromise.swift in Sources */, - DD88F5F49CA86929FD674738683710CE /* Box.swift in Sources */, - 13C6947A82DB058EEB44A0F5A8DF0789 /* Catchable.swift in Sources */, - 9FD5EE0E86A12E7C14615EC5AFCA489D /* Configuration.swift in Sources */, - 5E7AF53072889D81A2E35864994DE920 /* CustomStringConvertible.swift in Sources */, - 0F306B4B50ED2E5BE7A78C4C8021F81D /* Deprecations.swift in Sources */, - 341AB28AFD37E29B673B471B4DE58B15 /* dispatch_promise.m in Sources */, - D76ADFC2682607E5BB10536F8C87CE98 /* Error.swift in Sources */, - 2B69D3E45CE348BEB4C36A883D188351 /* firstly.swift in Sources */, - 09885D42FFCA38314B9C3722B830F8C4 /* Guarantee.swift in Sources */, - BBB594580050D2CE28673180C413D156 /* hang.m in Sources */, - D706F2D3F44C6CB98578F9690D113CBC /* hang.swift in Sources */, - 262FEAEA9268E13A7ABAE27954503213 /* join.m in Sources */, - AD497263ACF6EED9588010715CE7D60C /* NSNotificationCenter+AnyPromise.m in Sources */, - 4BC4B77152CA3AFE4A0BA7B598520145 /* NSNotificationCenter+Promise.swift in Sources */, - 1E7FC12161228EBFD7CD6B831381184C /* NSObject+Promise.swift in Sources */, - 6BAD817669837BE8773C65D0DE1632F9 /* NSTask+AnyPromise.m in Sources */, - 0E03590A1B8206DB73BFC4D44E309259 /* NSURLSession+AnyPromise.m in Sources */, - AEDC075B1DAA707E8223AD1F44733007 /* NSURLSession+Promise.swift in Sources */, - 7113CF124A424A48F27F9D3B5451BF71 /* Process+Promise.swift in Sources */, - F35A8F0C98F8519DCAB6AEA8A81DAB85 /* Promise.swift in Sources */, - 77DE28EB2CFA86C010D6F808222E882B /* PromiseKit-dummy.m in Sources */, - 11EF81A67F3FDDC32B304F25A524FCA1 /* race.m in Sources */, - F77AC43C2114776E84892FAF30FE62E7 /* race.swift in Sources */, - 7298B3320AFFAF6A797B5D57095D59F1 /* Resolver.swift in Sources */, - 5BAB3C81DF0071176F05167F4E8A5FC7 /* Thenable.swift in Sources */, - 9469A5DC4D145415053F10FE16E6D942 /* UIView+AnyPromise.m in Sources */, - 92612B4781584E211E9DCF6249379E6D /* UIView+Promise.swift in Sources */, - 809A0139DB16D5487781AAFDC6719647 /* UIViewController+AnyPromise.m in Sources */, - C6C7479F8D485DA38F3EEAED1BA85880 /* UIViewPropertyAnimator+Promise.swift in Sources */, - 9F222745C70FEFCD53E676AF87E99AE6 /* when.m in Sources */, - A388AC9DF4CA18220DBBC51339A5DF7C /* when.swift in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; 27804DEA2617CAE453E5796456AB1400 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; @@ -1870,102 +1869,47 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - 3DCF50CC4A5FDBE708AB966D47DB9A41 /* Sources */ = { + 7F16F86B873FAD9B698E1020345602B2 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - B1D8DD796160A0B8127ACE88A3B28489 /* ABIv2.swift in Sources */, - 7E68A71083DE9513BE63D11603283583 /* ABIv2Decoding.swift in Sources */, - 789EC85465FD8422787D20DA10B6CCB1 /* ABIv2Elements.swift in Sources */, - F73F98F9E80F8EF668B4802AEF945505 /* ABIv2Encoding.swift in Sources */, - 5DCE1131F0F9161256B72AEB448568FC /* ABIv2ParameterTypes.swift in Sources */, - 4584BECF3ECC5FE2E920EC1176627E6A /* ABIv2Parsing.swift in Sources */, - 94F6C4BCC5F370F9741DF09C68B34317 /* ABIv2TypeParser.swift in Sources */, - 395756D8D10472F1997AD9D85743D690 /* AbstractKeystore.swift in Sources */, - BB5896F65E6F1258215563C321CDD0AD /* Array+Extension.swift in Sources */, - 38E7083E983BA79C749C3AC59EDABE28 /* Base58.swift in Sources */, - 4D2254B09135DF9A254B5CDF645CF85F /* Batching.swift in Sources */, - 9678C147C849385F15BA5A4CD464F8A8 /* BIP32HDNode.swift in Sources */, - 191D98DF1C1E3CCE9AB9E96DF00024F0 /* BIP32Keystore.swift in Sources */, - 258FFE06F31BC089472CF47D7A2C3F85 /* BIP32KeystoreJSONStructure.swift in Sources */, - 9B0996B8F370BC6DA0390199420AD4F7 /* BIP39+WordLists.swift in Sources */, - F44C434430FF3CD138E0F4322A736587 /* BIP39.swift in Sources */, - 8BD83A2A4781EE24E313DB936F7C2E0D /* BlockExplorer.swift in Sources */, - 41FA5F812D03F3324A73143D621E3FC6 /* BloomFilter.swift in Sources */, - 914ABB4C3727A9EE3EE1610D74369B3B /* Bridging.swift in Sources */, - DFB2807D6E6F98F5D85653793E02886B /* ComparisonExtensions.swift in Sources */, - BD45182CF4418456B8F41394C93072BE /* ContractABIv2.swift in Sources */, - 0D20B0A325288828626C4D45F455A1B5 /* ContractProtocol.swift in Sources */, - D0B53C7A26564AA9B8CA9797E1226B96 /* CryptoExtensions.swift in Sources */, - 12AFAB4F9A4FD74CC19CF9D93FD30C83 /* Data+Extension.swift in Sources */, - 8C6E9B63C8A13356E57F601615AD18EA /* DecoderExtensions.swift in Sources */, - A42BD875661CC59C609FE6D65562B66F /* DictionaryReader.swift in Sources */, - B21A1BFD3BA10D3E0189C6B3E2F20B1D /* EIP67Code.swift in Sources */, - 36B2B1556AB5F91648B54E0091DCF04C /* ERC20.swift in Sources */, - B1F01F46095ACA4D66D229360122A872 /* ERC721.swift in Sources */, - 08C658DE6B70998B6AA0A454C4F5038A /* ERC777.swift in Sources */, - 7BD023CE4E893B6C135E34987A4140E1 /* ERC888.swift in Sources */, - 9FE9852F3FC0732382B76358A0707D19 /* EthereumAddress.swift in Sources */, - 29DC7A8A5277752A7D1D61F287A52632 /* EthereumFilterEncodingExtensions.swift in Sources */, - 5C08F9341123A9BA20F0365DF963EC70 /* EthereumKeystoreV3.swift in Sources */, - 6C42D4195CC05A5A35D8D07996D5F63A /* EthereumTransaction.swift in Sources */, - 608F6D3A0FA38C84FC184A50BC616E98 /* EthURL.swift in Sources */, - B5105ED08DEA30BA2841E575B1FC60A3 /* EventFiltering.swift in Sources */, - 6E8CF630AF608DE1484BF70CD8C89B03 /* Guides.swift in Sources */, - 028F3F6682577C152719C42699BB5B38 /* HDPath.swift in Sources */, - 6BED780D2AEB887F15E5AEBFE6087C58 /* IBAN.swift in Sources */, - 438458433C9E5C3B7AD7C982D6166E89 /* Int+Sequence.swift in Sources */, - B85A35983F422A480ADEC1736A86725C /* KeystoreManager.swift in Sources */, - 650EAC9DA5EA046AD8EC6B52EF18B28B /* KeystoreV3JSONStructure.swift in Sources */, - B49836FFCE550E291B16D9AD71857D93 /* LibSecp256k1Extension.swift in Sources */, - D0A7E669EF07B7FB2AEA215784F71E30 /* Migration-iOS.swift in Sources */, - B05BA09F6E3A5FED52C654A6306967D2 /* Migration.swift in Sources */, - AC8314D24A9C4997D97FF98988B50E70 /* NativeTypesEncoding+Extensions.swift in Sources */, - E1CF40389162E305DAC63D553399143E /* NSRegularExpressionExtension.swift in Sources */, - C10810F87051704BC1F99FAB82CC3978 /* PlainKeystore.swift in Sources */, - 0FBEE3FEB65291C031A304C43802EDFB /* RIPEMD160+StackOveflow.swift in Sources */, - 55E5167B9B4E79213A65C737FD3A4A3C /* RLP.swift in Sources */, - B0426250B0AC510218838461E79CF6D8 /* SecurityToken.swift in Sources */, - 51219E593C7F3B89AFCA81E79BC72D5F /* SolidityDataReader.swift in Sources */, - 77C24A46F5989F2C6D8204323DE04B85 /* SolidityDataWriter.swift in Sources */, - 4F97A5BBBEF9340BDE4FAB564A77806C /* SolidityFunction.swift in Sources */, - E18E1D8E4F74B3661D700F4E698BF7C3 /* SolidityTypes.swift in Sources */, - E31D841E8C25302DF79153BB35B72EC8 /* String+Extension.swift in Sources */, - 50BA9F0E508241B22161872303C9B9E5 /* TransactionSigner.swift in Sources */, - 67A8D698C61299BF2F75B889F7775E15 /* TxPool.swift in Sources */, - 1639AF201D2EC2B4C22D32D642769159 /* UInt256.swift in Sources */, - C9B95B0DAEE3EF9A48478E83CE905E1F /* W3Contract.swift in Sources */, - 8E16B929B547D6509A8F67FD42EF03F5 /* W3Contracts.swift in Sources */, - 5AE046E6BFD3D64FA7882E7732CD62BB /* W3Eth.swift in Sources */, - 2533CB9681E56E8A006EDE75B6354603 /* W3JsonRpc.swift in Sources */, - 2E9E79653CE32A5CCAF111E0A0848F2F /* W3Keystore.swift in Sources */, - 6D52F758A127E67A2DEEDD3556FD5BBC /* W3Personal.swift in Sources */, - F1B4B2A6BEA6CB1932DFF139A8C5EC1C /* W3Provider.swift in Sources */, - 35BE2933B8308EFEFC5F251E05619EF2 /* W3Structs.swift in Sources */, - D8F373A84FF8AE563825B72D8DDA8054 /* W3Transaction.swift in Sources */, - 49E500C26600B6A3EA6A4C49A4DA48E7 /* W3TransactionIntermediate.swift in Sources */, - 9D1F45EEE9FBFA8527847149BF3AF445 /* W3TxPool.swift in Sources */, - C372D53B4058B1AE2E8691C6ACD27585 /* W3UInt.swift in Sources */, - 026239FD703574E53169D0DC8AA292EE /* W3Wallet.swift in Sources */, - 587767F7C55EAA6BDF5CF8133AC0B559 /* W3Web3.swift in Sources */, - 1E7305656D23EE84695B703082AE55DC /* Web3+BrowserFunctions.swift in Sources */, - A4D3B79FF90D46F17AEFCDB49277BA22 /* Web3+Contract.swift in Sources */, - 06DD628839774A8213A63C060C56B19C /* Web3+Eth.swift in Sources */, - 44C651789C9D7603682BBC3CA7F515BA /* Web3+EventParser.swift in Sources */, - AF42B21F235E7957C995EF23E1F32734 /* Web3+HttpProvider.swift in Sources */, - 372112E3A4F6EE0A475594CB8EF4EC5A /* Web3+Infura.swift in Sources */, - 5D161DF9FE1473EAF6A4192D9A94A069 /* Web3+Instance.swift in Sources */, - A6627E9CB11CA763AE9183B1AE3A41C1 /* Web3+JSONRPC.swift in Sources */, - 6167DEEE8AF37D1DDB54B9357253BA2D /* Web3+Methods.swift in Sources */, - F348CE704C59C8C2CBAFE451ECF16CA7 /* Web3+Options.swift in Sources */, - 1D58E73F2527E655EC1C8CB88DEB8792 /* Web3+Personal.swift in Sources */, - 1B008A2AD11AC2E51AA80AE659893E85 /* Web3+Protocols.swift in Sources */, - 626C000318913C99E8BE22A4F2382733 /* Web3+Structures.swift in Sources */, - 79033690933B65B3E5969921B70801B5 /* Web3+TransactionIntermediate.swift in Sources */, - E90FECB66D091193C8C06C288BE0DAA3 /* Web3+Utils.swift in Sources */, - EEC27568810F4B0ED202181E3EE2DC12 /* Web3+Wallet.swift in Sources */, - 216010F74B0575A6F630793E64F89821 /* Web3.swift in Sources */, - C5C62D50ED1F4F69F6066CA54B1F8824 /* web3swift-dummy.m in Sources */, + C13C07C6DF99E9BBC706EEE286E4665B /* after.m in Sources */, + 600FAC95AB4657EF18F9D5DADC3AC410 /* after.swift in Sources */, + A60AE42284F0C51F14E40AAF8C020162 /* afterlife.swift in Sources */, + 6230D328684DC455E06EB30FEC158D7F /* AnyPromise.m in Sources */, + D6718DAD2BC0A3EEF1F5A6E975A7CD12 /* AnyPromise.swift in Sources */, + 494C9B434B310628B595FF5D160E6C62 /* Box.swift in Sources */, + 3BE6DFE051DFEACB6768CEFBED9618AD /* Catchable.swift in Sources */, + 14B647E26C4B44EF0EEBA5DF5BF0A45C /* Configuration.swift in Sources */, + 93B00E4D4CE4BDAE392145E2B8315238 /* CustomStringConvertible.swift in Sources */, + 11A2CF305FE397CA0DBB6E54C6E10E7C /* Deprecations.swift in Sources */, + 6B404A828F3AD007670DC457A6431730 /* dispatch_promise.m in Sources */, + 5641A3D781DA997712C20B4A7ECC9F64 /* Error.swift in Sources */, + E2933BAC145545B3D1DB16C66059248A /* firstly.swift in Sources */, + D56822F365E64737B1003C3452C315E7 /* Guarantee.swift in Sources */, + CC8D87088EDBFC2572C3B1562DC61821 /* hang.m in Sources */, + 8B264C79A2DEA7173F0C457FA1138AC7 /* hang.swift in Sources */, + A616260075C0BC89D6CAA325359E82EF /* join.m in Sources */, + 6B1D61DC84F077930C898EE06379748C /* LogEvent.swift in Sources */, + 8CB87455C919BC6E6CB8BBAE0B1D0DFA /* NSNotificationCenter+AnyPromise.m in Sources */, + 7621FC03CEBDCAE4E3A5C8829CE64005 /* NSNotificationCenter+Promise.swift in Sources */, + FCCDBFDD89B4096F2ACCFA67F01542EC /* NSObject+Promise.swift in Sources */, + 0E87142CC57DD6E6B0899A1B6DFAEA17 /* NSTask+AnyPromise.m in Sources */, + B414797C53FBAE294A667806010F1868 /* NSURLSession+AnyPromise.m in Sources */, + 22B1ED8B800CE79DF2073C7BACC8DE41 /* NSURLSession+Promise.swift in Sources */, + 6895897B025C4FD952AA4E4207A8C386 /* Process+Promise.swift in Sources */, + 01DCA139E1F1C80D46ACC43A51C6D9D4 /* Promise.swift in Sources */, + F9788B724611169307CB65C9D0F7CE6A /* PromiseKit-dummy.m in Sources */, + E6BE7DB6F3F0640076A659DFFB9A5366 /* race.m in Sources */, + F00CA0EC7E4D99B29B06ADE7E947E389 /* race.swift in Sources */, + 39C6139EC9D53EC9729406F023C58A85 /* Resolver.swift in Sources */, + BF179B2EBDE5E52DAD357C34DF16D901 /* Thenable.swift in Sources */, + 985C69B66363F31634A02BF3F4DCEB89 /* UIView+AnyPromise.m in Sources */, + 2B64D99510BDB17994BB7B1ED0BF42B6 /* UIView+Promise.swift in Sources */, + 1C629A619D140BC963BB016FAE396BD7 /* UIViewController+AnyPromise.m in Sources */, + DC6CADEBAED798B58D82BBF631C5B238 /* UIViewPropertyAnimator+Promise.swift in Sources */, + 5F50FDEE99282EC0DC2F92D3D947897F /* when.m in Sources */, + 4A042A668B08E7A608EA20DDBD2FCFDE /* when.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -1977,6 +1921,118 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + B29A1465E4876EF45E43B355C1F2BA17 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + E3A976F7DA925ECFBBAE693C9D972843 /* ABIv2.swift in Sources */, + 8231D20DC427A95F3C202CB14EEB2836 /* ABIv2Decoding.swift in Sources */, + 4CC87ECDB7FE60A1EFF8F2AF2143B096 /* ABIv2Elements.swift in Sources */, + 932C74B15D830E09DE242ECA73C3C1FC /* ABIv2Encoding.swift in Sources */, + AAA0FA181B36343F505644029D402079 /* ABIv2ParameterTypes.swift in Sources */, + 1CB6489CA58A3986396F85387A8D82ED /* ABIv2Parsing.swift in Sources */, + F1FE68ADE4D4365C52FC69BC263BD25B /* ABIv2TypeParser.swift in Sources */, + 8100A6C05472E3112394CB3A9807F6E1 /* AbstractKeystore.swift in Sources */, + C08FAD15D95153A053E912A1D543F8BE /* AES.swift in Sources */, + 881728FED42659704EB9A935B16DE11E /* Array+Extension.swift in Sources */, + B65B03086C0C26FFE8E1896389F5B620 /* Base58.swift in Sources */, + BADCD5BA260E171A9C15B0E0CAB12E1F /* Batching.swift in Sources */, + 6C10BBF7EE5F3DF485C6B0644F4BB2B9 /* BIP32HDNode.swift in Sources */, + E98055839D13D0CBF268DBAABBD58100 /* BIP32Keystore.swift in Sources */, + 2EEC63EA7B08FF4F31EC761D60822F83 /* BIP39+WordLists.swift in Sources */, + 690D13DC8AEDAC3A34068FAE32C6382D /* BIP39.swift in Sources */, + 06D17F21343455D4DA5475301CA6175D /* BlockExplorer.swift in Sources */, + 98B90215AB23BE9E701C78FEB3C10C47 /* BloomFilter.swift in Sources */, + B23C3361B1D66C7AF49C9030FE330ADE /* Bridging.swift in Sources */, + 1C90F1D5F747A51BFA7D2DF3942B3B0E /* ComparisonExtensions.swift in Sources */, + 19990D5AA9261FBBC2FBEA77CC0D5FB7 /* ContractABIv2.swift in Sources */, + 23700D881BAA3F3FB5BCB2B8D9E52754 /* ContractProtocol.swift in Sources */, + F22024D4558259511467E092FD58C0C0 /* Crypto.swift in Sources */, + 4650F78933C4BAAEECE7D738CB51EFBC /* CryptoExtensions.swift in Sources */, + 323F3DDECBC48908E11D7CC0ECC26D49 /* Cryptor.swift in Sources */, + E472D9C3D404F42A22E345935F86AECF /* Data+Extension.swift in Sources */, + 665DFF21170CC8500C7F444EF2A60C47 /* DecoderExtensions.swift in Sources */, + 9A8DD43F617258F92A4A46023EB8DB8B /* DerivedKey.swift in Sources */, + 6290191CD36C20C209985E939E31E74B /* DictionaryReader.swift in Sources */, + B89B9C5C937B2946399677AAF7F7273A /* Digest.swift in Sources */, + F6176A21AF9A9DDEB5CF58D7F2E92C2B /* EIP67Code.swift in Sources */, + 53F6E34ED54EF578A9D07F35E9D30EEC /* ERC20.swift in Sources */, + BA82FE04026C0186AA0EC3E07BA8CAE8 /* ERC721.swift in Sources */, + F93D2842C13B482F82BE944BEA3399E2 /* ERC777.swift in Sources */, + 186702DC285177EF3D8DCBBF360F315B /* ERC888.swift in Sources */, + D4E8783D735CA3F8B3F5055C1A9A73CD /* EthereumAddress.swift in Sources */, + A2273EB3A4B74A16C1A0176646F3FC4B /* EthereumFilterEncodingExtensions.swift in Sources */, + 556F5C6C529912E547A6A75836AD5D57 /* EthereumKeystoreV3.swift in Sources */, + 8A058AD6A38C6B71C58A6B0E528209E4 /* EthereumTransaction.swift in Sources */, + 4CC74C5A70F14E7B4B7C5188954D1662 /* EthURL.swift in Sources */, + FB4610508A3D603691C847AF78382B1E /* EventFiltering.swift in Sources */, + D6064EF550E223D509C29E636D81B2E3 /* Guides.swift in Sources */, + E9B29E147D0D5575C25A3E7A0846C5D6 /* HDPath.swift in Sources */, + FD056B8C38076EDA0722EA3661B153F4 /* HMAC.swift in Sources */, + 781C891B58DBBFE9D34AD0B3AE573647 /* IBAN.swift in Sources */, + 029FAE00474EDA0627BCF9F2CD87EF23 /* Int+Sequence.swift in Sources */, + 5A9838EB86A08F5E51E45B7527EDC90F /* KeyDerivation.swift in Sources */, + F8E54F48C1FEA2AABBFFEC12DA611E56 /* KeystoreManager.swift in Sources */, + 386F89D82050BEC19D007E4FF2272993 /* LibSecp256k1Extension.swift in Sources */, + 127F1E94C7745F7E375A3AD2F4ED6BAA /* Migration-iOS.swift in Sources */, + FD69D3E31ABF1648257181A774DCA43B /* Migration.swift in Sources */, + F5304CAE352C1BAA6D74CC9CC39510B3 /* NativeTypesEncoding+Extensions.swift in Sources */, + 7066E9632FFF2DC45F1B64B2F9B47390 /* NSRegularExpressionExtension.swift in Sources */, + 75C34A69A589A4577EDD1CB4C7A480E3 /* PlainKeystore.swift in Sources */, + 409C59E1F24E79C3B6C70C27EF8CD1A0 /* PrivateKey.swift in Sources */, + 460FD1307C066F894E0A6412782AA1EC /* Random.swift in Sources */, + A31012CEFCD7CBB214E9329816BC017E /* RIPEMD160+StackOveflow.swift in Sources */, + 477E4C238921B86C095541099045C949 /* RLP.swift in Sources */, + F1A9837F3544BAE7AC8B317A7EEC1D74 /* SecurityToken.swift in Sources */, + 1AA756C38372CFF060BDDAE7482CB2B7 /* SolidityDataReader.swift in Sources */, + C4BA6770E611FCEF6B719048855153E5 /* SolidityDataWriter.swift in Sources */, + 91B7CEB315E25F3B59592CB7F63C96C0 /* SolidityFunction.swift in Sources */, + 5679F218D87C327B4C43415829A24C3E /* SolidityTypes.swift in Sources */, + 6AD36253F7C3F916EF00471EEF31969D /* SSLPointerTricks.swift in Sources */, + 70451433113089BEA550CCC86217AA34 /* Status.swift in Sources */, + B3D61361B181488D4AC089BC4425F895 /* StreamCryptor.swift in Sources */, + E4818CCC50B61814A9D201E77189DCB5 /* String+Extension.swift in Sources */, + 0739DAC98BAB9036D867A53B6E7FFDC3 /* Transaction.swift in Sources */, + 1A1730CCE6EF41A01CA9A4E5B2B3804F /* TransactionSigner.swift in Sources */, + C54519C7FAC7BB4F4C5F885A0283FAD7 /* TxPool.swift in Sources */, + 05CE3F98A71C6CBFFEF6A94D105AF4D5 /* UInt256.swift in Sources */, + 9317D4213BA4BCBF71EC9E681AA9FB4D /* Updatable.swift in Sources */, + 07FA33E064C5C6BB7A91F516F4BF20D6 /* Utilities.swift in Sources */, + CE57E155F3D4AF1FCE7D56FA875633F9 /* W3Contract.swift in Sources */, + 8B265A94EB9E30F71BF65A0777FD4FBF /* W3Contracts.swift in Sources */, + 93C147C5DB1FCF086D21F135211AA359 /* W3Eth.swift in Sources */, + 56B608D435085557E948183418225BC4 /* W3JsonRpc.swift in Sources */, + 86E3C5E61A18B470EC3BCCAF128F99DF /* W3Keystore.swift in Sources */, + 2FE364CB26EAB9EEB09FCAB1172D6AFA /* W3Personal.swift in Sources */, + 0A21FEC0A192676A240F8BE2E2E5BC48 /* W3Provider.swift in Sources */, + 9502CBC266ABBDE67AA5C298C4112D8E /* W3Structs.swift in Sources */, + A38D5A2D1BCAB7F5C0C2F0CA80DDCF72 /* W3Transaction.swift in Sources */, + 09000ECB5E6C86734F16E5A3EFE1F077 /* W3TransactionIntermediate.swift in Sources */, + 1F44909735D8EA085FD0DB8CB0907393 /* W3TxPool.swift in Sources */, + D4A841D0C1FBAB8D80E3CA1E73639881 /* W3UInt.swift in Sources */, + 95259A53B72E853A04870B47903C26DC /* W3Wallet.swift in Sources */, + 706173B9A0B0F32471C2C330FFFC1425 /* W3Web3.swift in Sources */, + 107E163E373FAEECD62533926F597605 /* Web3+BrowserFunctions.swift in Sources */, + 5D2E32F754386F579C9CEB8AD45EA128 /* Web3+Contract.swift in Sources */, + B8F637DC690015D16E39BAC6D87A7F36 /* Web3+Eth.swift in Sources */, + 8D28E1F4397961143406842FE3451841 /* Web3+EventParser.swift in Sources */, + 2E3234BC5FD506287C6C4AF45599B557 /* Web3+HttpProvider.swift in Sources */, + 0F3AD303E5DB1DD0E64BF8FCEE1E00E0 /* Web3+Infura.swift in Sources */, + AB438BCB6505B27C2AAAB982CB7EE032 /* Web3+Instance.swift in Sources */, + 796971FDD39BB23A0CCCA1919B6A48F8 /* Web3+JSONRPC.swift in Sources */, + 81772BB9EC6FACFD30A1823BD32C6CFE /* Web3+Methods.swift in Sources */, + 2D6326603ACCAD15FD6108EB2A6653B4 /* Web3+Options.swift in Sources */, + DD365BAC688D95E7298A0D370F27FB1F /* Web3+Personal.swift in Sources */, + 0A05FFF84357AD8784F945295EA9FDD2 /* Web3+Protocols.swift in Sources */, + 94A893C4EDF1C4B3CA94B6EBBEBB4B07 /* Web3+Structures.swift in Sources */, + 856F50A448F3352A9A9E96198A0C0958 /* Web3+TransactionIntermediate.swift in Sources */, + 30E1A4D91A103060E3609B9D6FE1AE5E /* Web3+Utils.swift in Sources */, + 0B7C7AAD2BC34D68CB4AD1D5346E8302 /* Web3+Wallet.swift in Sources */, + 923A68719E397434354E61821241801F /* Web3.swift in Sources */, + 1AAEABEE6201A6C8516C71FD29BEF762 /* web3swift-dummy.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; C136F442420DC3ECE2331E30E7782F12 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; @@ -2098,7 +2154,7 @@ /* Begin XCBuildConfiguration section */ 1245F9B31954E59323203C0FE7463E33 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 592588320FCF12FB8B967F372867A041 /* web3swift.xcconfig */; + baseConfigurationReference = 927D111103F98C7DAB01E37865B0922D /* web3swift.xcconfig */; buildSettings = { CODE_SIGN_IDENTITY = "iPhone Developer"; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; @@ -2124,7 +2180,7 @@ }; 2909ADD29C93BBA06198D88E1314E3A6 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 5267CEA0BA9A1E0761AD465D9265501C /* CryptoSwift.xcconfig */; + baseConfigurationReference = E026E161C8C8039E6B7DC515F689D254 /* CryptoSwift.xcconfig */; buildSettings = { CODE_SIGN_IDENTITY = "iPhone Developer"; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; @@ -2211,7 +2267,7 @@ }; 46070DB279DD69E5DA3560220A981330 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 948D761F0CEEE3543C3AF71DE39EE168 /* SipHash.xcconfig */; + baseConfigurationReference = D3FAFE4EEC280E7E746C517A87CD69E2 /* SipHash.xcconfig */; buildSettings = { CODE_SIGN_IDENTITY = "iPhone Developer"; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; @@ -2237,7 +2293,7 @@ }; 49875228A1F71B0C612CCAC1CF93FA3B /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = E41FBED2A5A3FFB0F1E077856BFB0915 /* BigInt.xcconfig */; + baseConfigurationReference = DB7610E801C93B9DBB7A6BEE62807EFF /* BigInt.xcconfig */; buildSettings = { CODE_SIGN_IDENTITY = "iPhone Developer"; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; @@ -2262,7 +2318,7 @@ }; 4FA517EA01B07A2EE9989FDF5D5898E3 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = E41FBED2A5A3FFB0F1E077856BFB0915 /* BigInt.xcconfig */; + baseConfigurationReference = DB7610E801C93B9DBB7A6BEE62807EFF /* BigInt.xcconfig */; buildSettings = { CODE_SIGN_IDENTITY = "iPhone Developer"; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; @@ -2335,7 +2391,7 @@ }; 6CFE9F7861EA5BC59FDA5A24015DF546 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 948D761F0CEEE3543C3AF71DE39EE168 /* SipHash.xcconfig */; + baseConfigurationReference = D3FAFE4EEC280E7E746C517A87CD69E2 /* SipHash.xcconfig */; buildSettings = { CODE_SIGN_IDENTITY = "iPhone Developer"; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; @@ -2360,7 +2416,7 @@ }; 7F02EBE089998754451A91FBB24BDF30 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 5267CEA0BA9A1E0761AD465D9265501C /* CryptoSwift.xcconfig */; + baseConfigurationReference = E026E161C8C8039E6B7DC515F689D254 /* CryptoSwift.xcconfig */; buildSettings = { CODE_SIGN_IDENTITY = "iPhone Developer"; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; @@ -2386,7 +2442,7 @@ }; 80E1898A19467831026AB8172A522E76 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 592588320FCF12FB8B967F372867A041 /* web3swift.xcconfig */; + baseConfigurationReference = 927D111103F98C7DAB01E37865B0922D /* web3swift.xcconfig */; buildSettings = { CODE_SIGN_IDENTITY = "iPhone Developer"; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; @@ -2477,7 +2533,7 @@ }; 8C359644CE563AEBBBB0D781C95D4067 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 5012A7EB246D392D8799AADC7096637B /* PromiseKit.xcconfig */; + baseConfigurationReference = 16491032ECC6F0C1C3F5F16EC7FD34F5 /* PromiseKit.xcconfig */; buildSettings = { CODE_SIGN_IDENTITY = "iPhone Developer"; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; @@ -2503,7 +2559,7 @@ }; AAC74FD6CB8E214E0081A4BC378FCEC6 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 5012A7EB246D392D8799AADC7096637B /* PromiseKit.xcconfig */; + baseConfigurationReference = 16491032ECC6F0C1C3F5F16EC7FD34F5 /* PromiseKit.xcconfig */; buildSettings = { CODE_SIGN_IDENTITY = "iPhone Developer"; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; @@ -2528,7 +2584,7 @@ }; DA743A100E4FB36EB4BBE0A2EBCCD258 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = ACC5AE1C91E7380820C719013E46690D /* secp256k1.swift.xcconfig */; + baseConfigurationReference = C9873F2E94C418736B692B1AB059E649 /* secp256k1.swift.xcconfig */; buildSettings = { CODE_SIGN_IDENTITY = "iPhone Developer"; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; @@ -2553,7 +2609,7 @@ }; F5CAECB9311A4B983D73840D5A840A76 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = ACC5AE1C91E7380820C719013E46690D /* secp256k1.swift.xcconfig */; + baseConfigurationReference = C9873F2E94C418736B692B1AB059E649 /* secp256k1.swift.xcconfig */; buildSettings = { CODE_SIGN_IDENTITY = "iPhone Developer"; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; diff --git a/Example/Pods/PromiseKit/Sources/Catchable.swift b/Example/Pods/PromiseKit/Sources/Catchable.swift index 41ec7277..1b640ff2 100644 --- a/Example/Pods/PromiseKit/Sources/Catchable.swift +++ b/Example/Pods/PromiseKit/Sources/Catchable.swift @@ -188,7 +188,7 @@ public extension CatchMixin { @discardableResult func cauterize() -> PMKFinalizer { return self.catch { - Swift.print("PromiseKit:cauterized-error:", $0) + conf.logHandler(.cauterized($0)) } } } diff --git a/Example/Pods/PromiseKit/Sources/Configuration.swift b/Example/Pods/PromiseKit/Sources/Configuration.swift index 4891c45e..50345126 100644 --- a/Example/Pods/PromiseKit/Sources/Configuration.swift +++ b/Example/Pods/PromiseKit/Sources/Configuration.swift @@ -1,12 +1,32 @@ import Dispatch -/// PromiseKit’s configurable parameters +/** + PromiseKit’s configurable parameters. + + Do not change these after any Promise machinery executes as the configuration object is not thread-safe. + + We would like it to be, but sadly `Swift` does not expose `dispatch_once` et al. which is what we used to use in order to make the configuration immutable once first used. +*/ public struct PMKConfiguration { /// The default queues that promises handlers dispatch to public var Q: (map: DispatchQueue?, return: DispatchQueue?) = (map: DispatchQueue.main, return: DispatchQueue.main) /// The default catch-policy for all `catch` and `resolve` public var catchPolicy = CatchPolicy.allErrorsExceptCancellation + + /// The closure used to log PromiseKit events. + /// Not thread safe; change before processing any promises. + /// - Note: The default handler calls `print()` + public var logHandler: (LogEvent) -> () = { event in + switch event { + case .waitOnMainThread: + print("PromiseKit: warning: `wait()` called on main thread!") + case .pendingPromiseDeallocated: + print("PromiseKit: warning: pending promise deallocated") + case .cauterized (let error): + print("PromiseKit:cauterized-error: \(error)") + } + } } /// Modify this as soon as possible in your application’s lifetime diff --git a/Example/Pods/PromiseKit/Sources/Guarantee.swift b/Example/Pods/PromiseKit/Sources/Guarantee.swift index b17b6d51..597e97ad 100644 --- a/Example/Pods/PromiseKit/Sources/Guarantee.swift +++ b/Example/Pods/PromiseKit/Sources/Guarantee.swift @@ -116,7 +116,7 @@ public extension Guarantee { public func wait() -> T { if Thread.isMainThread { - print("PromiseKit: warning: `wait()` called on main thread!") + conf.logHandler(.waitOnMainThread) } var result = value diff --git a/Example/Pods/PromiseKit/Sources/LogEvent.swift b/Example/Pods/PromiseKit/Sources/LogEvent.swift new file mode 100644 index 00000000..a94865bd --- /dev/null +++ b/Example/Pods/PromiseKit/Sources/LogEvent.swift @@ -0,0 +1,27 @@ +/** + The PromiseKit events which may be logged. + + ```` + /// A promise or guarantee has blocked the main thread + case waitOnMainThread + + /// A promise has been deallocated without being fulfilled + case pendingPromiseDeallocated + + /// An error which occurred while fulfilling a promise was swallowed + case cauterized(Error) + + /// Errors which give a string error message + case misc (String) + ```` +*/ +public enum LogEvent { + /// A promise or guarantee has blocked the main thread + case waitOnMainThread + + /// A promise has been deallocated without being fulfilled + case pendingPromiseDeallocated + + /// An error which occurred while fulfilling a promise was swallowed + case cauterized(Error) +} diff --git a/Example/Pods/PromiseKit/Sources/Promise.swift b/Example/Pods/PromiseKit/Sources/Promise.swift index 56d1914e..da9f6aa2 100644 --- a/Example/Pods/PromiseKit/Sources/Promise.swift +++ b/Example/Pods/PromiseKit/Sources/Promise.swift @@ -109,7 +109,7 @@ public extension Promise { func wait() throws -> T { if Thread.isMainThread { - Swift.print("PromiseKit: warning: `wait()` called on main thread!") + conf.logHandler(LogEvent.waitOnMainThread) } var result = self.result diff --git a/Example/Pods/PromiseKit/Sources/Resolver.swift b/Example/Pods/PromiseKit/Sources/Resolver.swift index ec4818b0..953ece2e 100644 --- a/Example/Pods/PromiseKit/Sources/Resolver.swift +++ b/Example/Pods/PromiseKit/Sources/Resolver.swift @@ -8,7 +8,7 @@ public final class Resolver { deinit { if case .pending = box.inspect() { - print("PromiseKit: warning: pending promise deallocated") + conf.logHandler(.waitOnMainThread) } } } @@ -62,9 +62,14 @@ extension Resolver where T == Void { if let error = error { reject(error) } else { - fulfill(()) + fulfill() } } + + /// Fulfills the promise + public func fulfill() { + self.fulfill(()) + } } #endif diff --git a/Example/Pods/Target Support Files/web3swift/web3swift.xcconfig b/Example/Pods/Target Support Files/web3swift/web3swift.xcconfig index 5ab612e8..cd352fdd 100644 --- a/Example/Pods/Target Support Files/web3swift/web3swift.xcconfig +++ b/Example/Pods/Target Support Files/web3swift/web3swift.xcconfig @@ -2,8 +2,8 @@ CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/web3swift GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Public" LIBRARY_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/BigInt" "${PODS_CONFIGURATION_BUILD_DIR}/CryptoSwift" "${PODS_CONFIGURATION_BUILD_DIR}/PromiseKit" "${PODS_CONFIGURATION_BUILD_DIR}/SipHash" "${PODS_CONFIGURATION_BUILD_DIR}/secp256k1.swift" -OTHER_CFLAGS = $(inherited) -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/PromiseKit/PromiseKit.modulemap" -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/BigInt/BigInt.modulemap" -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/CryptoSwift/CryptoSwift.modulemap" -fmodule-map-file="${PODS_ROOT}/Headers/Public/secp256k1/secp256k1.swift.modulemap" -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/SipHash/SipHash.modulemap" -OTHER_SWIFT_FLAGS = $(inherited) "-D" "COCOAPODS" -Xcc -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/PromiseKit/PromiseKit.modulemap" -Xcc -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/BigInt/BigInt.modulemap" -Xcc -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/CryptoSwift/CryptoSwift.modulemap" -Xcc -fmodule-map-file="${PODS_ROOT}/Headers/Public/secp256k1/secp256k1.swift.modulemap" -Xcc -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/SipHash/SipHash.modulemap" -import-underlying-module -Xcc -fmodule-map-file="${SRCROOT}/${MODULEMAP_FILE}" +OTHER_CFLAGS = $(inherited) -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/PromiseKit/PromiseKit.modulemap" -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/BigInt/BigInt.modulemap" -fmodule-map-file="${PODS_ROOT}/Headers/Public/secp256k1/secp256k1.swift.modulemap" -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/CryptoSwift/CryptoSwift.modulemap" -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/SipHash/SipHash.modulemap" +OTHER_SWIFT_FLAGS = $(inherited) "-D" "COCOAPODS" -Xcc -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/PromiseKit/PromiseKit.modulemap" -Xcc -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/BigInt/BigInt.modulemap" -Xcc -fmodule-map-file="${PODS_ROOT}/Headers/Public/secp256k1/secp256k1.swift.modulemap" -Xcc -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/CryptoSwift/CryptoSwift.modulemap" -Xcc -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/SipHash/SipHash.modulemap" -import-underlying-module -Xcc -fmodule-map-file="${SRCROOT}/${MODULEMAP_FILE}" PODS_BUILD_DIR = ${BUILD_DIR} PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) PODS_ROOT = ${SRCROOT} diff --git a/Example/Pods/web3swift/README.md b/Example/Pods/web3swift/README.md index 4ce4bc3e..3a4a8fbc 100644 --- a/Example/Pods/web3swift/README.md +++ b/Example/Pods/web3swift/README.md @@ -1,5 +1,5 @@ -# We just released web3swift 2.0 [check it out](https://github.com/BANKEX/web3swift/releases/tag/2.0.0) -### also check our [Discord Channel](https://discord.gg/3ETv2ST) + +### You can ask for help in our [Discord Channel](https://discord.gg/3ETv2ST)

Support @@ -57,7 +57,7 @@ Don't forget to set the iOS version in a Podfile, otherwise you get an error if Add this to the dependency section of your `Package.swift` manifest: ```Swift - .package(url: "https://github.com/BANKEX/web3swift.git", from: "2.0.0") + .package(url: "https://github.com/BANKEX/web3swift.git", from: "2.1.0") ``` - **CocoaPods:** Put this in your `Podfile`: @@ -69,7 +69,7 @@ Don't forget to set the iOS version in a Podfile, otherwise you get an error if - **Carthage:** Put this in your `Cartfile`: ``` - github "BANKEX/web3swift" ~> 2.0 + github "BANKEX/web3swift" ~> 2.1 ``` diff --git a/Example/Pods/web3swift/Sources/ABIv2/ABIv2.swift b/Example/Pods/web3swift/Sources/ABIv2/ABIv2.swift index 70f3e223..479d0e00 100644 --- a/Example/Pods/web3swift/Sources/ABIv2/ABIv2.swift +++ b/Example/Pods/web3swift/Sources/ABIv2/ABIv2.swift @@ -8,13 +8,21 @@ import Foundation +/// Element type protocol protocol ABIv2ElementPropertiesProtocol { + /// Returns true if array is has fixed length var isStatic: Bool { get } + /// Returns true if type is array var isArray: Bool { get } + /// Returns true if type is tuple var isTuple: Bool { get } + /// Returns array size if type var arraySize: ABIv2.Element.ArraySize { get } + /// Returns subtype of array var subtype: ABIv2.Element.ParameterType? { get } + /// Returns memory usage of type var memoryUsage: UInt64 { get } + /// Returns default empty value for type var emptyValue: Any { get } } diff --git a/Example/Pods/web3swift/Sources/ABIv2/ABIv2Decoding.swift b/Example/Pods/web3swift/Sources/ABIv2/ABIv2Decoding.swift index 8a06beef..228cf5dd 100644 --- a/Example/Pods/web3swift/Sources/ABIv2/ABIv2Decoding.swift +++ b/Example/Pods/web3swift/Sources/ABIv2/ABIv2Decoding.swift @@ -9,9 +9,14 @@ import BigInt import Foundation -public struct ABIv2Decoder {} - -extension ABIv2Decoder { +/// Decoding functions +public struct ABIv2Decoder { + /// Decodes solidity data to swift types + /// + /// - Parameters: + /// - types: Decoding scheme + /// - data: Data to decode + /// - Returns: Array of decoded types public static func decode(types: [ABIv2.Element.InOut], data: Data) -> [AnyObject]? { let params = types.compactMap { (el) -> ABIv2.Element.ParameterType in return el.type @@ -19,8 +24,14 @@ extension ABIv2Decoder { return decode(types: params, data: data) } + /// Decodes solidity data to swift types + /// + /// - Parameters: + /// - types: Decoding scheme + /// - data: Data to decode + /// - Returns: Array of decoded types public static func decode(types: [ABIv2.Element.ParameterType], data: Data) -> [AnyObject]? { -// print("Full data: \n" + data.toHexString()) +// print("Full data: \n" + data.hex) var toReturn = [AnyObject]() var consumed: UInt64 = 0 for i in 0 ..< types.count { @@ -34,6 +45,13 @@ extension ABIv2Decoder { return toReturn } + /// Decodes single solidity type to swift type + /// + /// - Parameters: + /// - type: Decoding scheme + /// - data: Data to decode + /// - pointer: Data offset + /// - Returns: Decoded value and bytes used to decode public static func decodeSignleType(type: ABIv2.Element.ParameterType, data: Data, pointer: UInt64 = 0) -> (value: AnyObject?, bytesConsumed: UInt64?) { let (elData, nextPtr) = followTheData(type: type, data: data, pointer: pointer) guard let elementItself = elData, let nextElementPointer = nextPtr else { @@ -41,7 +59,7 @@ extension ABIv2Decoder { } switch type { case let .uint(bits): -// print("Uint256 element itself: \n" + elementItself.toHexString()) +// print("Uint256 element itself: \n" + elementItself.hex) guard elementItself.count >= 32 else { break } let mod = BigUInt(1) << bits let dataSlice = elementItself[0 ..< 32] @@ -49,7 +67,7 @@ extension ABIv2Decoder { // print("Uint256 element is: \n" + String(v)) return (v as AnyObject, type.memoryUsage) case let .int(bits): -// print("Int256 element itself: \n" + elementItself.toHexString()) +// print("Int256 element itself: \n" + elementItself.hex) guard elementItself.count >= 32 else { break } let mod = BigInt(1) << bits let dataSlice = elementItself[0 ..< 32] @@ -57,14 +75,14 @@ extension ABIv2Decoder { // print("Int256 element is: \n" + String(v)) return (v as AnyObject, type.memoryUsage) case .address: -// print("Address element itself: \n" + elementItself.toHexString()) +// print("Address element itself: \n" + elementItself.hex) guard elementItself.count >= 32 else { break } let dataSlice = elementItself[12 ..< 32] let address = Address(dataSlice) // print("Address element is: \n" + String(address.address)) return (address as AnyObject, type.memoryUsage) case .bool: -// print("Bool element itself: \n" + elementItself.toHexString()) +// print("Bool element itself: \n" + elementItself.hex) guard elementItself.count >= 32 else { break } let dataSlice = elementItself[0 ..< 32] let v = BigUInt(dataSlice) @@ -75,13 +93,13 @@ extension ABIv2Decoder { return (false as AnyObject, type.memoryUsage) } case let .bytes(length): -// print("Bytes32 element itself: \n" + elementItself.toHexString()) +// print("Bytes32 element itself: \n" + elementItself.hex) guard elementItself.count >= 32 else { break } let dataSlice = elementItself[0 ..< length] -// print("Bytes32 element is: \n" + String(dataSlice.toHexString())) +// print("Bytes32 element is: \n" + String(dataSlice.hex)) return (dataSlice as AnyObject, type.memoryUsage) case .string: -// print("String element itself: \n" + elementItself.toHexString()) +// print("String element itself: \n" + elementItself.hex) guard elementItself.count >= 32 else { break } var dataSlice = elementItself[0 ..< 32] let length = UInt64(BigUInt(dataSlice)) @@ -91,18 +109,18 @@ extension ABIv2Decoder { // print("String element is: \n" + String(string)) return (string as AnyObject, type.memoryUsage) case .dynamicBytes: -// print("Bytes element itself: \n" + elementItself.toHexString()) +// print("Bytes element itself: \n" + elementItself.hex) guard elementItself.count >= 32 else { break } var dataSlice = elementItself[0 ..< 32] let length = UInt64(BigUInt(dataSlice)) guard elementItself.count >= 32 + length else { break } dataSlice = elementItself[32 ..< 32 + length] -// print("Bytes element is: \n" + String(dataSlice.toHexString())) +// print("Bytes element is: \n" + String(dataSlice.hex)) return (dataSlice as AnyObject, type.memoryUsage) case let .array(type: subType, length: length): switch type.arraySize { case .dynamicSize: -// print("Dynamic array element itself: \n" + elementItself.toHexString()) +// print("Dynamic array element itself: \n" + elementItself.hex) if subType.isStatic { // uint[] like, expect length and elements guard elementItself.count >= 32 else { break } @@ -128,7 +146,7 @@ extension ABIv2Decoder { dataSlice = Data(elementItself[32 ..< elementItself.count]) var subpointer: UInt64 = 0 var toReturn = [AnyObject]() -// print("Dynamic array sub element itself: \n" + dataSlice.toHexString()) +// print("Dynamic array sub element itself: \n" + dataSlice.hex) for _ in 0 ..< length { let (v, c) = decodeSignleType(type: subType, data: dataSlice, pointer: subpointer) guard let valueUnwrapped = v, let consumedUnwrapped = c else { break } @@ -138,7 +156,7 @@ extension ABIv2Decoder { return (toReturn as AnyObject, nextElementPointer) } case let .staticSize(staticLength): -// print("Static array element itself: \n" + elementItself.toHexString()) +// print("Static array element itself: \n" + elementItself.hex) guard length == staticLength else { break } var toReturn = [AnyObject]() var consumed: UInt64 = 0 @@ -157,7 +175,7 @@ extension ABIv2Decoder { break } case let .tuple(types: subTypes): -// print("Tuple element itself: \n" + elementItself.toHexString()) +// print("Tuple element itself: \n" + elementItself.hex) var toReturn = [AnyObject]() var consumed: UInt64 = 0 for i in 0 ..< subTypes.count { @@ -173,23 +191,23 @@ extension ABIv2Decoder { return (toReturn as AnyObject, nextElementPointer) } case .function: -// print("Function element itself: \n" + elementItself.toHexString()) +// print("Function element itself: \n" + elementItself.hex) guard elementItself.count >= 32 else { break } let dataSlice = elementItself[8 ..< 32] -// print("Function element is: \n" + String(dataSlice.toHexString())) +// print("Function element is: \n" + String(dataSlice.hex)) return (dataSlice as AnyObject, type.memoryUsage) } return (nil, nil) } fileprivate static func followTheData(type: ABIv2.Element.ParameterType, data: Data, pointer: UInt64 = 0) -> (elementEncoding: Data?, nextElementPointer: UInt64?) { -// print("Follow the data: \n" + data.toHexString()) +// print("Follow the data: \n" + data.hex) // print("At pointer: \n" + String(pointer)) if type.isStatic { guard data.count >= pointer + type.memoryUsage else { return (nil, nil) } let elementItself = data[pointer ..< pointer + type.memoryUsage] let nextElement = pointer + type.memoryUsage -// print("Got element itself: \n" + elementItself.toHexString()) +// print("Got element itself: \n" + elementItself.hex) // print("Next element pointer: \n" + String(nextElement)) return (Data(elementItself), nextElement) } else { @@ -212,12 +230,18 @@ extension ABIv2Decoder { let elementPointer = UInt64(bn) let elementItself = data[elementPointer ..< UInt64(data.count)] let nextElement = pointer + type.memoryUsage -// print("Got element itself: \n" + elementItself.toHexString()) +// print("Got element itself: \n" + elementItself.hex) // print("Next element pointer: \n" + String(nextElement)) return (Data(elementItself), nextElement) } } + /// Decodes logs to swift types + /// + /// - Parameters: + /// - event: Decoding scheme + /// - eventLog: Event log + /// - Returns: Decoded logs public static func decodeLog(event: ABIv2.Element.Event, eventLog: EventLog) -> [String: Any]? { if event.topic != eventLog.topics[0] && !event.anonymous { return nil diff --git a/Example/Pods/web3swift/Sources/ABIv2/ABIv2Elements.swift b/Example/Pods/web3swift/Sources/ABIv2/ABIv2Elements.swift index c66c0e5d..87915a49 100644 --- a/Example/Pods/web3swift/Sources/ABIv2/ABIv2Elements.swift +++ b/Example/Pods/web3swift/Sources/ABIv2/ABIv2Elements.swift @@ -10,20 +10,22 @@ import BigInt import Foundation extension ABIv2 { - // JSON Decoding + /// Function input parameter public struct Input: Decodable { var name: String? var type: String var indexed: Bool? var components: [Input]? } - + + /// Function output parameter public struct Output: Decodable { var name: String? var type: String var components: [Output]? } - + + /// Function public struct Record: Decodable { var name: String? var type: String? @@ -34,24 +36,35 @@ extension ABIv2 { var outputs: [ABIv2.Output]? var anonymous: Bool? } - + + /// Abi Element public enum Element { + /// Array size public enum ArraySize { // bytes for convenience + /// Fixed size array or data case staticSize(UInt64) + /// Dynamic size for dynamic arrays or data case dynamicSize + /// Any other type case notArray } - + + /// Function type case function(Function) + /// Constructor case constructor(Constructor) + /// Fallback case fallback(Fallback) + /// Event case event(Event) - + + /// Input or output type public struct InOut { let name: String let type: ParameterType } - + + /// Function type public struct Function { let name: String? let inputs: [InOut] @@ -59,18 +72,21 @@ extension ABIv2 { let constant: Bool let payable: Bool } - + + /// Constructor type public struct Constructor { let inputs: [InOut] let constant: Bool let payable: Bool } - + + /// Fallback type public struct Fallback { let constant: Bool let payable: Bool } - + + /// Event type public struct Event { let name: String let inputs: [Input] diff --git a/Example/Pods/web3swift/Sources/ABIv2/ABIv2Encoding.swift b/Example/Pods/web3swift/Sources/ABIv2/ABIv2Encoding.swift index 27e339d3..f0c27136 100644 --- a/Example/Pods/web3swift/Sources/ABIv2/ABIv2Encoding.swift +++ b/Example/Pods/web3swift/Sources/ABIv2/ABIv2Encoding.swift @@ -9,8 +9,10 @@ import BigInt import Foundation +/// Encoding functions public struct ABIv2Encoder { + /// Converts value to BigUInt public static func convertToBigUInt(_ value: AnyObject) -> BigUInt? { switch value { case let v as BigUInt: @@ -58,6 +60,7 @@ public struct ABIv2Encoder { return nil } + /// Converts value to BigInt public static func convertToBigInt(_ value: AnyObject) -> BigInt? { switch value { case let v as BigUInt: @@ -99,7 +102,8 @@ public struct ABIv2Encoder { } return nil } - + + /// Converts data to value to solidity data public static func convertToData(_ value: AnyObject) -> Data? { switch value { case let d as Data: @@ -125,7 +129,8 @@ public struct ABIv2Encoder { return nil } } - + + /// Encodes values with provided scheme to solidity data public static func encode(types: [ABIv2.Element.InOut], values: [AnyObject]) -> Data? { guard types.count == values.count else { return nil } let params = types.compactMap { (el) -> ABIv2.Element.ParameterType in @@ -133,7 +138,8 @@ public struct ABIv2Encoder { } return encode(types: params, values: values) } - + + /// Encodes values with provided scheme to solidity data public static func encode(types: [ABIv2.Element.ParameterType], values: [AnyObject]) -> Data? { guard types.count == values.count else { return nil } var tails = [Data]() @@ -171,7 +177,8 @@ public struct ABIv2Encoder { } return headsConcatenated + tailsConcatenated } - + + /// Encodes single value with scheme to solidity data public static func encodeSingleType(type: ABIv2.Element.ParameterType, value: AnyObject) -> Data? { switch type { case .uint: @@ -252,7 +259,7 @@ public struct ABIv2Encoder { toReturn.append(encoding) } let total = lengthEncoding + toReturn -// print("Dynamic array of static types encoding :\n" + String(total.toHexString())) +// print("Dynamic array of static types encoding :\n" + String(total.hex)) return total } else { // create new context @@ -285,7 +292,7 @@ public struct ABIv2Encoder { } } let total = lengthEncoding + headsConcatenated + tailsConcatenated -// print("Dynamic array of dynamic types encoding :\n" + String(total.toHexString())) +// print("Dynamic array of dynamic types encoding :\n" + String(total.hex)) return total } case let .staticSize(staticLength): @@ -300,7 +307,7 @@ public struct ABIv2Encoder { guard let encoding = enc else { break } toReturn.append(encoding) } -// print("Static array of static types encoding :\n" + String(toReturn.toHexString())) +// print("Static array of static types encoding :\n" + String(toReturn.hex)) let total = toReturn return total } else { @@ -328,7 +335,7 @@ public struct ABIv2Encoder { tailsPointer = tailsPointer + BigUInt(tail.count) } let total = headsConcatenated + tailsConcatenated -// print("Static array of dynamic types encoding :\n" + String(total.toHexString())) +// print("Static array of dynamic types encoding :\n" + String(total.hex)) return total } case .notArray: diff --git a/Example/Pods/web3swift/Sources/ABIv2/ABIv2ParameterTypes.swift b/Example/Pods/web3swift/Sources/ABIv2/ABIv2ParameterTypes.swift index 26aa149f..7eaf1600 100644 --- a/Example/Pods/web3swift/Sources/ABIv2/ABIv2ParameterTypes.swift +++ b/Example/Pods/web3swift/Sources/ABIv2/ABIv2ParameterTypes.swift @@ -14,15 +14,25 @@ import Foundation extension ABIv2.Element { /// Specifies the type that parameters in a contract have. public enum ParameterType: ABIv2ElementPropertiesProtocol { + /// uintN type case uint(bits: UInt64) + /// intN type case int(bits: UInt64) + /// address type case address + /// function type case function + /// bool type case bool + /// bytesN type case bytes(length: UInt64) + /// array[N] or array[] type indirect case array(type: ParameterType, length: UInt64) + /// bytes type case dynamicBytes + /// string type case string + /// tuple type indirect case tuple(types: [ParameterType]) var isStatic: Bool { @@ -162,32 +172,38 @@ extension ABIv2.Element.ParameterType: Equatable { } extension ABIv2.Element.Function { + /// String representation of solidity function for hashing public var signature: String { return "\(name ?? "")(\(inputs.map { $0.type.abiRepresentation }.joined(separator: ",")))" } + /// Function hash in hex public var methodString: String { - return String(signature.sha3(.keccak256).prefix(8)) + return signature.keccak256().hex } - + + /// Function hash public var methodEncoding: Data { - return signature.data(using: .ascii)!.sha3(.keccak256)[0..<4] + return signature.data(using: .ascii)!.keccak256()[0..<4] } } // MARK: - Event topic extension ABIv2.Element.Event { + /// String representation of solidity event for hashing public var signature: String { return "\(name)(\(inputs.map { $0.type.abiRepresentation }.joined(separator: ",")))" } - + + /// Event hash public var topic: Data { - return signature.data(using: .ascii)!.sha3(.keccak256) + return signature.data(using: .ascii)!.keccak256() } } extension ABIv2.Element.ParameterType: ABIv2Encoding { + /// Solidity type representation public var abiRepresentation: String { switch self { case let .uint(bits): @@ -220,6 +236,7 @@ extension ABIv2.Element.ParameterType: ABIv2Encoding { } extension ABIv2.Element.ParameterType: ABIv2Validation { + /// Returns true if type is valid (or false for types like uint257) public var isValid: Bool { switch self { case let .uint(bits), let .int(bits): diff --git a/Example/Pods/web3swift/Sources/ABIv2/ABIv2Parsing.swift b/Example/Pods/web3swift/Sources/ABIv2/ABIv2Parsing.swift index a45bfba7..a1fd0ef6 100644 --- a/Example/Pods/web3swift/Sources/ABIv2/ABIv2Parsing.swift +++ b/Example/Pods/web3swift/Sources/ABIv2/ABIv2Parsing.swift @@ -9,16 +9,45 @@ import Foundation extension ABIv2 { + /// Parsing errors public enum ParsingError: Error { - case invalidJsonFile + /// Cannot parse element type case elementTypeInvalid + /// Cannot parse element name case elementNameInvalid + /// Invalid function input case functionInputInvalid + /// Invalid function output case functionOutputInvalid + /// Invalid event input case eventInputInvalid + /// Invalid parameter type case parameterTypeInvalid + /// Parameter type not found case parameterTypeNotFound + /// Invalid ABI case abiInvalid + /// Printable / user displayable description + public var localizedDescription: String { + switch self { + case .elementTypeInvalid: + return "Cannot parse element type" + case .elementNameInvalid: + return "not parse element name" + case .functionInputInvalid: + return "Invalid function input" + case .functionOutputInvalid: + return "Invalid function output" + case .eventInputInvalid: + return "Invalid event input" + case .parameterTypeInvalid: + return "Invalid parameter type" + case .parameterTypeNotFound: + return "Parameter type not found" + case .abiInvalid: + return "Invalid ABI" + } + } } enum TypeParsingExpressions { @@ -35,6 +64,7 @@ extension ABIv2 { } extension ABIv2.Record { + /// Parses record to ABIv2.Element public func parse() throws -> ABIv2.Element { let typeString = self.type != nil ? self.type! : "function" guard let type = ABIv2.ElementType(rawValue: typeString) else { diff --git a/Example/Pods/web3swift/Sources/ABIv2/ABIv2TypeParser.swift b/Example/Pods/web3swift/Sources/ABIv2/ABIv2TypeParser.swift index 095ce95d..a17783a9 100644 --- a/Example/Pods/web3swift/Sources/ABIv2/ABIv2TypeParser.swift +++ b/Example/Pods/web3swift/Sources/ABIv2/ABIv2TypeParser.swift @@ -8,6 +8,7 @@ import Foundation +/// Parses string to ParameterType public struct ABIv2TypeParser { private enum BaseParameterType: String { case address @@ -45,13 +46,19 @@ public struct ABIv2TypeParser { return nil } } - + + /// Parses string and returns parsed parameter type + /// + /// - Parameter string: String to parse + /// - Returns: Parsed parameter + /// - Throws: Web3Error.inputError public static func parseTypeString(_ string: String) throws -> ABIv2.Element.ParameterType { let (type, tail) = recursiveParseType(string) guard let t = type, tail == nil else { throw Web3Error.inputError("Failed to parse ABI element " + string) } return t } + /// Parses type public static func recursiveParseType(_ string: String) -> (type: ABIv2.Element.ParameterType?, tail: String?) { let matcher = try! NSRegularExpression(pattern: ABIv2.TypeParsingExpressions.typeEatingRegex, options: NSRegularExpression.Options.dotMatchesLineSeparators) let match = matcher.matches(in: string, options: NSRegularExpression.MatchingOptions.anchored, range: string.fullNSRange) @@ -84,7 +91,8 @@ public struct ABIv2TypeParser { } return recursiveParseArray(baseType: type!, string: tail) } - + + /// Parses array type public static func recursiveParseArray(baseType: ABIv2.Element.ParameterType, string: String) -> (type: ABIv2.Element.ParameterType?, tail: String?) { let matcher = try! NSRegularExpression(pattern: ABIv2.TypeParsingExpressions.arrayEatingRegex, options: NSRegularExpression.Options.dotMatchesLineSeparators) let match = matcher.matches(in: string, options: NSRegularExpression.MatchingOptions.anchored, range: string.fullNSRange) diff --git a/Example/Pods/web3swift/Sources/Contract/ComparisonExtensions.swift b/Example/Pods/web3swift/Sources/Contract/ComparisonExtensions.swift index f050b396..d016fda6 100644 --- a/Example/Pods/web3swift/Sources/Contract/ComparisonExtensions.swift +++ b/Example/Pods/web3swift/Sources/Contract/ComparisonExtensions.swift @@ -39,9 +39,9 @@ extension String: EventFilterComparable { public func isEqualTo(_ other: AnyObject) -> Bool { switch other { case let oth as String: - return data.sha3(.keccak256) == oth.data.sha3(.keccak256) + return data.keccak256() == oth.data.keccak256() case let oth as Data: - return data.sha3(.keccak256) == oth.sha3(.keccak256) + return data.keccak256() == oth.keccak256() default: return false } @@ -56,13 +56,13 @@ extension Data: EventFilterComparable { if self == data { return true } - let hash = data.sha3(.keccak256) + let hash = data.keccak256() return self == hash case let oth as Data: if self == oth { return true } - let hash = oth.sha3(.keccak256) + let hash = oth.keccak256() return self == hash default: return false diff --git a/Example/Pods/web3swift/Sources/Contract/ContractABIv2.swift b/Example/Pods/web3swift/Sources/Contract/ContractABIv2.swift index 28f622f3..88d8eefe 100644 --- a/Example/Pods/web3swift/Sources/Contract/ContractABIv2.swift +++ b/Example/Pods/web3swift/Sources/Contract/ContractABIv2.swift @@ -9,22 +9,28 @@ import BigInt import Foundation +/// Swift class that represents a solidity smart contract public struct ContractV2: ContractProtocol { public var allEvents: [String] { return events.keys.compactMap { $0 } } - + public var allMethods: [String] { return methods.keys.compactMap { $0 } } - + + /// Filter for contract events public struct EventFilter { + /// Event name public var parameterName: String + /// Event parameters public var parameterValues: [AnyObject] } - + public var address: Address? var _abi: [ABIv2.Element] + + /// Smart contract methods public var methods: [String: ABIv2.Element] { var toReturn = [String: ABIv2.Element]() for m in _abi { @@ -38,7 +44,8 @@ public struct ContractV2: ContractProtocol { } return toReturn } - + + /// Smart contract init arguments public var constructor: ABIv2.Element? { var toReturn: ABIv2.Element? for m in _abi { @@ -59,7 +66,8 @@ public struct ContractV2: ContractProtocol { } return toReturn } - + + /// Smart contract events public var events: [String: ABIv2.Element.Event] { var toReturn = [String: ABIv2.Element.Event]() for m in _abi { @@ -76,6 +84,7 @@ public struct ContractV2: ContractProtocol { public var options: Web3Options = .default + /// Init with json ABI public init(_ abiString: String, at address: Address? = nil) throws { let abi = try JSONDecoder().decode([ABIv2.Record].self, from: abiString.data) let abiNative = try abi.map({ (record) -> ABIv2.Element in @@ -84,29 +93,71 @@ public struct ContractV2: ContractProtocol { _abi = abiNative self.address = address } - + + /// Init with abi array public init(abi: [ABIv2.Element]) { _abi = abi } - + + /// Init with abi array and address public init(abi: [ABIv2.Element], at: Address) { _abi = abi address = at } - + + /// Method errors public enum MethodError: Error { + /// Provide contract address to send transcation case noAddress + /// You have to set the gas limit case noGasLimit + /// You have to set the gas price case noGasPrice + /// Provide constructor to deploy smart contract case noConstructor + /// Smart contract method not found case notFound + /// Cannot encode data with given parameters case cannotEncodeDataWithGivenParameters + /// Printable / user displayable description + public var localizedDescription: String { + switch self { + case .noAddress: + return "Provide contract address to send transcation" + case .noGasLimit: + return "You have to set the gas limit" + case .noGasPrice: + return "You have to set the gas price" + case .noConstructor: + return "Provide constructor to deploy smart contract" + case .notFound: + return "Smart contract method not found" + case .cannotEncodeDataWithGivenParameters: + return "Cannot encode data with given parameters" + } + } } + /// Deploy smart contract with provided bytecode + /// + /// - Parameters: + /// - bytecode: Smart contract bytecode + /// - args: Init arguments + /// - extraData: Extra data + /// - options: Transaction options + /// - Returns: Transaction and its hash public func deploy(bytecode: Data, args: Any..., extraData: Data = Data(), options: Web3Options?) throws -> EthereumTransaction { return try deploy(bytecode: bytecode, parameters: args, extraData: extraData, options: options) } + /// Deploy smart contract with provided bytecode + /// + /// - Parameters: + /// - bytecode: Smart contract bytecode + /// - args: Init arguments + /// - extraData: Extra data + /// - options: Transaction options + /// - Returns: Transaction and its hash public func deploy(bytecode: Data, parameters: [Any], extraData: Data = Data(), options: Web3Options?) throws -> EthereumTransaction { let to: Address = .contractDeployment let options = self.options.merge(with: options) @@ -125,11 +176,27 @@ public struct ContractV2: ContractProtocol { return EthereumTransaction(gasPrice: gasPrice, gasLimit: gasLimit, to: to, value: value, data: fullData) } + /// Returns smart contract method with provided name + /// + /// - Parameters: + /// - bytecode: Smart contract bytecode + /// - args: Init arguments + /// - extraData: Extra data + /// - options: Transaction options + /// - Returns: Transaction public func method(_ name: String, args: Any..., extraData: Data = Data(), options: Web3Options?) throws -> EthereumTransaction { return try method(name, parameters: args, extraData: extraData, options: options) } - - public func method(_ method: String, parameters: [Any], extraData: Data = Data(), options: Web3Options?) throws -> EthereumTransaction { + + /// Returns smart contract method with provided name + /// + /// - Parameters: + /// - bytecode: Smart contract bytecode + /// - args: Init arguments + /// - extraData: Extra data + /// - options: Transaction options + /// - Returns: Transaction + public func method(_ name: String, parameters: [Any], extraData: Data = Data(), options: Web3Options?) throws -> EthereumTransaction { var to: Address let options = self.options.merge(with: options) if let address = address { @@ -143,15 +210,20 @@ public struct ContractV2: ContractProtocol { guard let gasPrice = options.gasPrice else { throw MethodError.noGasPrice } let value = options.value ?? 0 - if method == "fallback" { + if name == "fallback" { return EthereumTransaction(gasPrice: gasPrice, gasLimit: gasLimit, to: to, value: value, data: extraData) } else { - guard let abiMethod = methods[method] else { throw MethodError.notFound } + guard let abiMethod = methods[name] else { throw MethodError.notFound } guard let encodedData = abiMethod.encodeParameters(parameters as [AnyObject]) else { throw MethodError.cannotEncodeDataWithGivenParameters } return EthereumTransaction(gasPrice: gasPrice, gasLimit: gasLimit, to: to, value: value, data: encodedData) } } + + /// Parses smart contract event + /// + /// - Parameter eventLog: encoded event + /// - Returns: Event name and its data public func parseEvent(_ eventLog: EventLog) -> (eventName: String?, eventData: [String: Any]?) { for (eName, ev) in events { if !ev.anonymous { @@ -172,16 +244,15 @@ public struct ContractV2: ContractProtocol { } return (nil, nil) } - + + /// Returns nil if there is no event with that name. public func testBloomForEventPrecence(eventName: String, bloom: EthereumBloomFilter) -> Bool? { guard let event = events[eventName] else { return nil } - if event.anonymous { - return true - } + guard !event.anonymous else { return true } let eventOfSuchTypeIsPresent = bloom.test(topic: event.topic) return eventOfSuchTypeIsPresent } - + public func decodeReturnData(_ method: String, data: Data) -> [String: Any]? { guard method != "fallback" else { return [:] } guard let function = methods[method] else { return nil } diff --git a/Example/Pods/web3swift/Sources/Contract/ContractProtocol.swift b/Example/Pods/web3swift/Sources/Contract/ContractProtocol.swift index cb0abdfd..b468db91 100644 --- a/Example/Pods/web3swift/Sources/Contract/ContractProtocol.swift +++ b/Example/Pods/web3swift/Sources/Contract/ContractProtocol.swift @@ -26,39 +26,39 @@ public protocol ContractProtocol { var allEvents: [String] { get } /// Deploys contract with bytecode and init parameters - /// - parameter bytecode: Contract bytecode - /// - parameter parameters: Contract init arguments - /// - parameter extraData: Extra data for transaction - /// - parameter options: Transaction options + /// - Parameter bytecode: Contract bytecode + /// - Parameter parameters: Contract init arguments + /// - Parameter extraData: Extra data for transaction + /// - Parameter options: Transaction options func deploy(bytecode: Data, parameters: [Any], extraData: Data, options: Web3Options?) throws -> EthereumTransaction /// Converts method to EthereumTransaction that you can call or send later - /// - parameter method: Contract function name - /// - parameter parameters: Function arguments - /// - parameter extraData: Extra data for transaction - /// - parameter options: Transaction options - /// - returns: Prepared transaction + /// - Parameter method: Contract function name + /// - Parameter parameters: Function arguments + /// - Parameter extraData: Extra data for transaction + /// - Parameter options: Transaction options + /// - Returns: Prepared transaction func method(_ method: String, parameters: [Any], extraData: Data, options: Web3Options?) throws -> EthereumTransaction /// init for deployed contract init(_ abiString: String, at address: Address?) throws /// Decodes smart contract response to dictionary - /// - parameter method: Smart contract function name - /// - parameter data: Smart contract response data + /// - Parameter method: Smart contract function name + /// - Parameter data: Smart contract response data func decodeReturnData(_ method: String, data: Data) -> [String: Any]? /// Decodes input arguments to dictionary - /// - parameter method: Smart contract function name - /// - parameter data: Smart contract input data + /// - Parameter method: Smart contract function name + /// - Parameter data: Smart contract input data func decodeInputData(_ method: String, data: Data) -> [String: Any]? /// Searches for smart contract method and decodes input arguments to dictionary - /// - parameter data: Smart contract input data + /// - Parameter data: Smart contract input data func decodeInputData(_ data: Data) -> [String: Any]? /// Parses event from log to name and dictionary data - /// - parameter eventLog: Raw event log + /// - Parameter eventLog: Raw event log func parseEvent(_ eventLog: EventLog) -> (eventName: String?, eventData: [String: Any]?) /// Tests event with filter func testBloomForEventPrecence(eventName: String, bloom: EthereumBloomFilter) -> Bool? @@ -91,12 +91,17 @@ extension String: EventFilterable {} extension Address: EventFilterable {} +/// Event filter parameters public struct EventFilter { + /// Block public enum Block { + /// Latest block case latest + /// Pending block case pending + /// Block with number case blockNumber(UInt64) - + var encoded: String { switch self { case .latest: @@ -108,9 +113,11 @@ public struct EventFilter { } } } - + + /// Init with all nils public init() {} - + + /// Init with known parameters public init(fromBlock: Block?, toBlock: Block?, addresses: [Address]? = nil, parameterFilters: [[EventFilterable]?]? = nil) { @@ -119,12 +126,17 @@ public struct EventFilter { self.addresses = addresses self.parameterFilters = parameterFilters } - + + /// Started block public var fromBlock: Block? + /// Ended block public var toBlock: Block? + /// Addresses public var addresses: [Address]? + /// Filters public var parameterFilters: [[EventFilterable]?]? - + + /// Returns Filter parameters public func rpcPreEncode() -> EventFilterParameters { var encoding = EventFilterParameters() if fromBlock != nil { diff --git a/Example/Pods/web3swift/Sources/Contract/EthereumFilterEncodingExtensions.swift b/Example/Pods/web3swift/Sources/Contract/EthereumFilterEncodingExtensions.swift index 5dd0316d..560fff73 100644 --- a/Example/Pods/web3swift/Sources/Contract/EthereumFilterEncodingExtensions.swift +++ b/Example/Pods/web3swift/Sources/Contract/EthereumFilterEncodingExtensions.swift @@ -11,32 +11,32 @@ import Foundation extension BigUInt: EventFilterEncodable { public func eventFilterEncoded() -> String? { - return abiEncode(bits: 256)?.toHexString().withHex + return abiEncode(bits: 256)?.hex.withHex } } extension BigInt: EventFilterEncodable { public func eventFilterEncoded() -> String? { - return abiEncode(bits: 256)?.toHexString().withHex + return abiEncode(bits: 256)?.hex.withHex } } extension Data: EventFilterEncodable { public func eventFilterEncoded() -> String? { guard let padded = self.setLengthLeft(32) else { return nil } - return padded.toHexString().withHex + return padded.hex.withHex } } extension Address: EventFilterEncodable { public func eventFilterEncoded() -> String? { guard let padded = self.addressData.setLengthLeft(32) else { return nil } - return padded.toHexString().withHex + return padded.hex.withHex } } extension String: EventFilterEncodable { public func eventFilterEncoded() -> String? { - return data.sha3(.keccak256).toHexString().withHex + return data.keccak256().hex.withHex } } diff --git a/Example/Pods/web3swift/Sources/Contract/EventFiltering.swift b/Example/Pods/web3swift/Sources/Contract/EventFiltering.swift index 934cb8f9..0aa7f54e 100644 --- a/Example/Pods/web3swift/Sources/Contract/EventFiltering.swift +++ b/Example/Pods/web3swift/Sources/Contract/EventFiltering.swift @@ -68,7 +68,7 @@ internal func encodeTopicToGetLogs(contract: ContractV2, eventName: String?, fil } var topics = [[String?]?]() if eventTopic != nil { - topics.append([eventTopic!.toHexString().withHex]) + topics.append([eventTopic!.hex.withHex]) } else { topics.append(nil as [String?]?) } diff --git a/Example/Pods/web3swift/Sources/Contracts/ERC20.swift b/Example/Pods/web3swift/Sources/Contracts/ERC20.swift index 12a64315..f13a455d 100644 --- a/Example/Pods/web3swift/Sources/Contracts/ERC20.swift +++ b/Example/Pods/web3swift/Sources/Contracts/ERC20.swift @@ -12,7 +12,7 @@ import PromiseKit /** Native implementation of ERC20 token - - important: NOT main thread friendly + - Important: NOT main thread friendly */ public class ERC20 { /// Token address @@ -26,71 +26,75 @@ public class ERC20 { * Automatically calls if options.gasPrice == nil */ public var gasPrice: GasPrice { return GasPrice(self) } - /// Represents Address as ERC20 token (with standart password and options) - /// - parameter address: Token address + /// Represents Address as ERC20 token (with standard password and options) + /// - Parameter address: Token address public init(_ address: Address) { self.address = address } /// Represents Address as ERC20 token - /// - parameter address: Token address - /// - parameter from: Sender address - /// - parameter address: Password to decrypt sender's private key + /// - Parameter address: Token address + /// - Parameter from: Sender address + /// - Parameter address: Password to decrypt sender's private key public init(_ address: Address, from: Address, password: String) { self.address = address options.from = from self.password = password } - /// - returns: token name/description + /// - Returns: Token name/description public func name() throws -> String { return try address.call("name()", options: options).wait().string() } - /// - returns: token symbol + /// - Returns: Token symbol public func symbol() throws -> String { return try address.call("symbol()", options: options).wait().string() } - /// - returns: total token supply + /// - Returns: Total token supply public func totalSupply() throws -> BigUInt { return try address.call("totalSupply()", options: options).wait().uint256() } - /// - returns: token decimals + /// - Returns: Token decimals public func decimals() throws -> BigUInt { return try address.call("decimals()", options: options).wait().uint256() } - /// - returns: user balance in wei + /// - Returns: User balance in wei public func balance(of user: Address) throws -> BigUInt { return try address.call("balanceOf(address)", user, options: options).wait().uint256() } - /// - returns: user balance in human-readable format (automatically calculates with decimals) + /// - Returns: user balance in human-readable format (automatically calculates with decimals) public func naturalBalance(of user: Address) throws -> String { let balance = try address.call("balanceOf(address)", user, options: options).wait().uint256() let decimals = try self.decimals() return balance.string(unitDecimals: Int(decimals)) } - /// - returns: balance that one user can take from another user - /// - parameter owner: balance holder - /// - parameter spender: recepient + /** + Shows how much balance you approved spender to get from your account. + + - Returns: Balance that one user can take from another user + - Parameter owner: Balance holder + - Parameter spender: Spender address + */ public func allowance(from owner: Address, to spender: Address) throws -> BigUInt { return try address.call("allowance(address,address)", owner, spender, options: options).wait().uint256() } /** - transfers to user \(amount) - - important: Transaction | Requires password | Contract owner only. - - returns: TransactionSendingResult - - parameter user: recepient address - - parameter amount: amount in wei to send. If you want to send 1 token (not 0.00000000001) use NaturalUnits(amount) instead + Transfers to user \(amount) + - Important: Transaction | Requires password + - Returns: TransactionSendingResult + - Parameter user: Recipient address + - Parameter amount: Amount in wei to send. If you want to send 1 token (not 0.00000000001) use NaturalUnits(amount) instead */ public func transfer(to user: Address, amount: BigUInt) throws -> TransactionSendingResult { return try address.send("transfer(address,uint256)", user, amount, password: password, options: options).wait() } /** - approves user to take \(amount) tokens from your account - NaturalUnits is user readable representaion of tokens (like "0.01" / "1.543634") - - important: Transaction | Requires password - - returns: TransactionSendingResult - - parameter user: recepient address - - parameter amount: amount in wei to send. If you want to send 1 token (not 0.00000000001) use NaturalUnits(amount) instead + Approves user to take \(amount) tokens from your account. + + - Important: Transaction | Requires password + - Returns: TransactionSendingResult + - Parameter user: Recipient address + - Parameter amount: Amount in wei to send. If you want to send 1 token (not 0.00000000001) use NaturalUnits(amount) instead */ public func approve(to user: Address, amount: BigUInt) throws -> TransactionSendingResult { @@ -98,24 +102,24 @@ public class ERC20 { } /** - transfers from user1 to user2 - NaturalUnits is user readable representaion of tokens (like "0.01" / "1.543634") - - important: Transaction | Requires password | Contract owner only. + Transfers from user1 to user2. + + - Important: Transaction | Requires password | Contract owner only. ERC20(address, from: me).transfer(to: user, amount: NaturalUnits(0.1)) is not the same as ERC20(address).transferFrom(owner: me, to: user, amount: NaturalUnits(0.1)) - - returns: TransactionSendingResult - - parameter user: recepient address - - parameter amount: amount in wei to send. If you want to send 1 token (not 0.00000000001) use NaturalUnits(amount) instead + - Returns: TransactionSendingResult + - Parameter user: Recipient address + - Parameter amount: Amount in wei to send. If you want to send 1 token (not 0.00000000001) use NaturalUnits(amount) instead */ public func transferFrom(owner: Address, to: Address, amount: BigUInt) throws -> TransactionSendingResult { return try address.send("transferFrom(address,address,uint256)", owner, to, amount, password: password, options: options).wait() } /** - transfers to user \(amount) + Transfers to user \(amount) NaturalUnits is user readable representaion of tokens (like "0.01" / "1.543634") - - important: Transaction | Requires password | Contract owner only. - - returns: TransactionSendingResult + - Important: Transaction | Requires password | Contract owner only. + - Returns: TransactionSendingResult */ public func transfer(to user: Address, amount: NaturalUnits) throws -> TransactionSendingResult { let decimals = try Int(self.decimals()) @@ -125,8 +129,8 @@ public class ERC20 { /** approves user to take \(amount) tokens from your account NaturalUnits is user readable representaion of tokens (like "0.01" / "1.543634") - - important: Transaction | Requires password - - returns: TransactionSendingResult + - Important: Transaction | Requires password + - Returns: TransactionSendingResult */ public func approve(to user: Address, amount: NaturalUnits) throws -> TransactionSendingResult { let decimals = try Int(self.decimals()) @@ -135,12 +139,17 @@ public class ERC20 { } /** - transfers from user1 to user2 + Transfers from user1 to user2 NaturalUnits is user readable representaion of tokens (like "0.01" / "1.543634") - - important: Transaction | Requires password | Contract owner only. - ERC20(address, from: me).transfer(to: user, amount: NaturalUnits(0.1)) is not the same as + - Important: Transaction | Requires password | Contract owner only. + ``` + ERC20(address, from: me).transfer(to: user, amount: NaturalUnits(0.1)) + ``` + is not the same as + ``` ERC20(address).transferFrom(owner: me, to: user, amount: NaturalUnits(0.1)) - - returns: TransactionSendingResult + ``` + - Returns: TransactionSendingResult */ public func transferFrom(owner: Address, to: Address, amount: NaturalUnits) throws -> TransactionSendingResult { let decimals = try Int(self.decimals()) @@ -159,34 +168,34 @@ public class ERC20 { self.erc20 = erc20 } - /// - returns: gas price for transfer(address,uint256) transaction + /// - Returns: Gas price for transfer(address,uint256) transaction public func transfer(to user: Address, amount: BigUInt) throws -> BigUInt { return try address.estimateGas("transfer(address,uint256)", user, amount, options: options).wait() } - /// - returns: gas price for approve(address,uint256) transaction + /// - Returns: Gas price for approve(address,uint256) transaction public func approve(to user: Address, amount: BigUInt) throws -> BigUInt { return try address.estimateGas("approve(address,uint256)", user, amount, options: options).wait() } - /// - returns: gas price for transferFrom(address,address,uint256) function + /// - Returns: Gas price for transferFrom(address,address,uint256) function public func transferFrom(owner: Address, to: Address, amount: BigUInt) throws -> BigUInt { return try address.estimateGas("transferFrom(address,address,uint256)", owner, to, amount, options: options).wait() } - /// - returns: gas price for transfer(address,uint256) transaction + /// - Returns: Gas price for transfer(address,uint256) transaction public func transfer(to user: Address, amount: NaturalUnits) throws -> BigUInt { let decimals = try Int(erc20.decimals()) let amount = amount.number(with: decimals) return try transfer(to: user, amount: amount) } - /// - returns: gas price for approve(address,uint256) transaction + /// - Returns: Gas price for approve(address,uint256) transaction public func approve(to user: Address, amount: NaturalUnits) throws -> BigUInt { let decimals = try Int(erc20.decimals()) let amount = amount.number(with: decimals) return try transfer(to: user, amount: amount) } - /// - returns: gas price for transferFrom(address,address,uint256) function + /// - Returns: Gas price for transferFrom(address,address,uint256) function public func transferFrom(owner: Address, to: Address, amount: NaturalUnits) throws -> BigUInt { let decimals = try Int(erc20.decimals()) let amount = amount.number(with: decimals) diff --git a/Example/Pods/web3swift/Sources/Contracts/ERC721.swift b/Example/Pods/web3swift/Sources/Contracts/ERC721.swift index 3296a9c0..ba6fe4ac 100644 --- a/Example/Pods/web3swift/Sources/Contracts/ERC721.swift +++ b/Example/Pods/web3swift/Sources/Contracts/ERC721.swift @@ -12,8 +12,8 @@ import PromiseKit /** - Native implementation of ERC20 token - - important: NOT main thread friendly + Native implementation of ERC721 token + - Important: NOT main thread friendly */ public class ERC721 { /// Token address @@ -27,26 +27,26 @@ public class ERC721 { * Automatically calls if options.gasPrice == nil */ public var gasPrice: GasPrice { return GasPrice(self) } - /// Represents Address as ERC721 token (with standart password and options) - /// - parameter address: Token address + /// Represents Address as ERC721 token (with standard password and options) + /// - Parameter address: Token address public init(_ address: Address) { self.address = address } /// Represents Address as ERC721 token - /// - parameter address: Token address - /// - parameter from: Sender address - /// - parameter address: Password to decrypt sender's private key + /// - Parameter address: Token address + /// - Parameter from: Sender address + /// - Parameter address: Password to decrypt sender's private key public init(_ address: Address, from: Address, password: String) { self.address = address self.password = password options.from = from } - + /// Returns current balance of user public func balance(of user: Address) throws -> BigUInt { return try address.call("balanceOf(address)",user).wait().uint256() } - /// - returns: address of token holder + /// - Returns: address of token holder public func owner(of token: BigUInt) throws -> Address { return try address.call("ownerOf(uint256)",token).wait().address() } @@ -56,7 +56,7 @@ public class ERC721 { return try address.send("approve(address,uint256)",user,token, password: password, options: options).wait() } - /// - returns: address + /// - Returns: address public func approved(for token: BigUInt) throws -> Address { return try address.call("getApproved(uint256)",token).wait().address() } @@ -69,11 +69,12 @@ public class ERC721 { return try address.call("isApprovedForAll(address,address)",owner,`operator`).wait().bool() } /// transfers token from one address to another - /// - important: admin only + /// - Important: admin only public func transfer(from: Address, to: Address, token: BigUInt) throws -> TransactionSendingResult { return try address.send("transferFrom(address,address,uint256)",from,to,token, password: password, options: options).wait() } + /// Transfers token from one address to another safely public func safeTransfer(from: Address, to: Address, token: BigUInt) throws -> TransactionSendingResult { return try address.send("safeTransferFrom(address,address,uint256)",from,to,token, password: password, options: options).wait() } @@ -86,28 +87,23 @@ public class ERC721 { var address: Address { return parent.address } var options: Web3Options { return parent.options } - /** - Native implementation of ERC20 token - - important: NOT main thread friendly - - returns: full information for all pending and queued transactions - */ init(_ parent: ERC721) { self.parent = parent } - /// - returns: gas price for approve(address,uint256) transaction + /// - Returns: gas price for approve(address,uint256) transaction public func approve(to user: Address, token: BigUInt) throws -> BigUInt { return try address.estimateGas("approve(address,uint256)",user,token, options: options).wait() } - /// - returns: gas price for setApprovalForAll(address,bool) transaction + /// - Returns: gas price for setApprovalForAll(address,bool) transaction public func setApproveForAll(operator: Address, approved: Bool) throws -> BigUInt { return try address.estimateGas("setApprovalForAll(address,bool)",`operator`,approved, options: options).wait() } - /// - returns: gas price for transferFrom(address,address,uint256) transaction + /// - Returns: gas price for transferFrom(address,address,uint256) transaction public func transfer(from: Address, to: Address, token: BigUInt) throws -> BigUInt { return try address.estimateGas("transferFrom(address,address,uint256)",from,to,token, options: options).wait() } - /// - returns: gas price for safeTransferFrom(address,address,uint256) transaction + /// - Returns: gas price for safeTransferFrom(address,address,uint256) transaction public func safeTransfer(from: Address, to: Address, token: BigUInt) throws -> BigUInt { return try address.estimateGas("safeTransferFrom(address,address,uint256)",from,to,token, options: options).wait() } diff --git a/Example/Pods/web3swift/Sources/Contracts/ERC777.swift b/Example/Pods/web3swift/Sources/Contracts/ERC777.swift index 63fe3dcf..1523d43b 100644 --- a/Example/Pods/web3swift/Sources/Contracts/ERC777.swift +++ b/Example/Pods/web3swift/Sources/Contracts/ERC777.swift @@ -9,6 +9,10 @@ import Foundation import BigInt +/** + Native implementation of ERC777 token + - Important: NOT main thread friendly + */ public class ERC777 { /// Token address public let address: Address @@ -21,68 +25,209 @@ public class ERC777 { * Automatically calls if options.gasPrice == nil */ public var gasPrice: GasPrice { return GasPrice(self) } - /// Represents Address as ERC777 token (with standart password and options) - /// - parameter address: Token address + /// Represents Address as ERC777 token (with standard password and options) + /// - Parameter address: Token address public init(_ address: Address) { self.address = address } /// Represents Address as ERC777 token - /// - parameter address: Token address - /// - parameter from: Sender address - /// - parameter address: Password to decrypt sender's private key + /// - Parameter address: Token address + /// - Parameter from: Sender address + /// - Parameter address: Password to decrypt sender's private key public init(_ address: Address, from: Address, password: String) { self.address = address self.password = password options.from = from } + /// Returns token name / description public func name() throws -> String { return try address.call("name()").wait().string() } + + /// Returns token symbol public func symbol() throws -> String { return try address.call("symbol()").wait().string() } + + /// Returns token total supply public func totalSupply() throws -> BigUInt { return try address.call("totalSupply()").wait().uint256() } + + /// Returns token decimals public func decimals() throws -> BigUInt { return try address.call("decimals()").wait().uint256() } + + + /// - Returns: User balance in wei public func balance(of user: Address) throws -> BigUInt { return try address.call("balanceOf(address)",user).wait().uint256() } + /** + Shows how much balance you approved spender to get from your account. + + - Returns: Balance that one user can take from another user + - Parameter owner: Balance holder + - Parameter spender: Spender address + + Solidity interface: + ``` solidity + allowance(address,address) + ``` + */ public func allowance(from owner: Address, to spender: Address) throws -> BigUInt { return try address.call("allowance(address,address)",owner,spender).wait().uint256() } + + /** + Transfers to user amount of balance + + - Important: Transaction | Requires password + - Returns: TransactionSendingResult + - Parameter user: Recipient address + - Parameter amount: Amount in wei to send. If you want to send 1 token (not 0.00000000001) use NaturalUnits(amount) instead + + Solidity interface: + ``` solidity + transfer(address,uint256) + ``` + */ public func transfer(to user: Address, amount: BigUInt) throws -> TransactionSendingResult { return try address.send("transfer(address,uint256)",user,amount, password: password, options: options).wait() } + + /** + Approves user to take \(amount) tokens from your account. + + - Important: Transaction | Requires password + - Returns: TransactionSendingResult + - Parameter user: Recipient address + - Parameter amount: Amount in wei to send. If you want to send 1 token (not 0.00000000001) use NaturalUnits(amount) instead + + Solidity interface: + ``` solidity + approve(address,uint256) + ``` + */ public func approve(to user: Address, amount: BigUInt) throws -> TransactionSendingResult { return try address.send("approve(address,uint256)",user,amount, password: password, options: options).wait() } + + /** + Transfers from user1 to user2. + + - Important: Transaction | Requires password | Contract owner only. + ERC777(address, from: me).transfer(to: user, amount: NaturalUnits(0.1)) is not the same as + ERC777(address).transferFrom(owner: me, to: user, amount: NaturalUnits(0.1)) + - Returns: TransactionSendingResult + - Parameter user: Recipient address + - Parameter amount: Amount in wei to send. If you want to send 1 token (not 0.00000000001) use NaturalUnits(amount) instead + + Solidity interface: + ``` solidity + transferFrom(address,address,uint256) + ``` + */ public func transfer(from: Address, to: Address, amount: BigUInt) throws -> TransactionSendingResult { return try address.send("transferFrom(address,address,uint256)",from,to,amount, password: password, options: options).wait() } + /** + Sends to user some amount of tokens + + - Important: Transaction | Requires password + - Parameter user: Recipient address + - Parameter amount: Amount in wei to send + + Solidity interface: + ``` solidity + send(address,uint256) + ``` + */ public func send(to user: Address, amount: BigUInt) throws -> TransactionSendingResult { return try address.send("send(address,uint256)",user,amount, password: password, options: options).wait() } + /** + Sends to user some amount of tokens and call some function + + - Important: Transaction | Requires password + - Parameter user: Recipient address + - Parameter amount: Amount in wei to send + - Parameter userData: Encoded function that contract calls + + Solidity interface: + ``` solidity + send(address,uint256,bytes) + ``` + */ public func send(to user: Address, amount: BigUInt, userData: Data) throws -> TransactionSendingResult { return try address.send("send(address,uint256,bytes)",user,amount,userData, password: password, options: options).wait() } + + /** + Authorize user to manager your tokens + + - Important: Transaction | Requires password + - Parameter user: Operator address + + Solidity interface: + ``` solidity + authorizeOperator(address) + ``` + */ public func authorize(operator user: Address) throws -> TransactionSendingResult { return try address.send("authorizeOperator(address)",user, password: password, options: options).wait() } + /** + Revokes operator + + - Important: Transaction | Requires password + - Parameter user: Operator address + + Solidity interface: + ``` solidity + revokeOperator(address) + ``` + */ public func revoke(operator user: Address) throws -> TransactionSendingResult { return try address.send("revokeOperator(address)",user, password: password, options: options).wait() } + /** + Returns true if user is operator of tokenHolder + + - Important: Transaction | Requires password + - Parameter user: Operator + - Parameter tokenHolder: Token holder + + Solidity interface: + ``` solidity + isOperatorFor(address,address) + ``` + */ public func isOperatorFor(operator user: Address, tokenHolder: Address) throws -> Bool { return try address.call("isOperatorFor(address,address)",user,tokenHolder).wait().bool() } + + /** + Sends from one user to another some amount of tokens and call some function + + - Important: Transaction | Requires password + - Parameter from: Token holder address + - Parameter to: Recipient address + - Parameter amount: Amount in wei to send + - Parameter userData: Encoded function that contract calls + + Solidity interface: + ``` solidity + operatorSend(address,address,uint256,bytes) + ``` + */ public func operatorSend(from: Address, to: Address, amount: BigUInt, userData: Data) throws -> TransactionSendingResult { return try address.send("operatorSend(address,address,uint256,bytes)",from,to,amount,userData, password: password, options: options).wait() } @@ -96,46 +241,46 @@ public class ERC777 { var options: Web3Options { return parent.options } /** - Native implementation of ERC20 token - - important: NOT main thread friendly - - returns: full information for all pending and queued transactions + Native implementation of ERC777 token + - Important: NOT main thread friendly + - Returns: full information for all pending and queued transactions */ init(_ parent: ERC777) { self.parent = parent } - /// - returns: gas price for transfer(address,uint256) transaction + /// - Returns: gas price for transfer(address,uint256) transaction public func transfer(to user: Address, amount: BigUInt) throws -> BigUInt { return try address.estimateGas("transfer(address,uint256)",user,amount, options: options).wait() } - /// - returns: gas price for approve(address,uint256) transaction + /// - Returns: gas price for approve(address,uint256) transaction public func approve(to user: Address, amount: BigUInt) throws -> BigUInt { return try address.estimateGas("approve(address,uint256)",user,amount, options: options).wait() } - /// - returns: gas price for transferFrom(address,address,uint256) transaction + /// - Returns: gas price for transferFrom(address,address,uint256) transaction public func transfer(from: Address, to: Address, amount: BigUInt) throws -> BigUInt { return try address.estimateGas("transferFrom(address,address,uint256)",from,to,amount, options: options).wait() } - /// - returns: gas price for send(address,uint256) transaction + /// - Returns: gas price for send(address,uint256) transaction public func send(to user: Address, amount: BigUInt) throws -> BigUInt { return try address.estimateGas("send(address,uint256)",user,amount, options: options).wait() } - /// - returns: gas price for send(address,uint256,bytes) transaction + /// - Returns: gas price for send(address,uint256,bytes) transaction public func send(to user: Address, amount: BigUInt, userData: Data) throws -> BigUInt { return try address.estimateGas("send(address,uint256,bytes)",user,amount,userData, options: options).wait() } - /// - returns: gas price for authorizeOperator(address) transaction + /// - Returns: gas price for authorizeOperator(address) transaction public func authorize(operator user: Address) throws -> BigUInt { return try address.estimateGas("authorizeOperator(address)",user, options: options).wait() } - /// - returns: gas price for revokeOperator(address) transaction + /// - Returns: gas price for revokeOperator(address) transaction public func revoke(operator user: Address) throws -> BigUInt { return try address.estimateGas("revokeOperator(address)",user, options: options).wait() } - /// - returns: gas price for operatorSend(address,address,uint256,bytes) transaction + /// - Returns: gas price for operatorSend(address,address,uint256,bytes) transaction public func operatorSend(from: Address, to: Address, amount: BigUInt, userData: Data) throws -> BigUInt { return try address.estimateGas("operatorSend(address,address,uint256,bytes)",from,to,amount,userData, options: options).wait() } diff --git a/Example/Pods/web3swift/Sources/Contracts/ERC888.swift b/Example/Pods/web3swift/Sources/Contracts/ERC888.swift index a3f602a3..c3f08a03 100644 --- a/Example/Pods/web3swift/Sources/Contracts/ERC888.swift +++ b/Example/Pods/web3swift/Sources/Contracts/ERC888.swift @@ -59,28 +59,32 @@ public class ERC888 { /// Password to unlock private key for sender address public var password: String = "BANKEXFOUNDATION" - /// Represents Address as ERC888 token (with standart password and options) - /// - parameter address: Token address + /// Represents Address as ERC888 token (with standard password and options) + /// - Parameter address: Token address public init(_ address: Address) { self.address = address } /// Represents Address as ERC888 token - /// - parameter address: Token address - /// - parameter from: Sender address - /// - parameter address: Password to decrypt sender's private key + /// - Parameter address: Token address + /// - Parameter from: Sender address + /// - Parameter address: Password to decrypt sender's private key public init(_ address: Address, from: Address, password: String) { self.address = address options.from = from self.password = password } + /// Returns token with given id public func token(id: BigUInt) -> Token { return Token(parent: self, id: id) } + /// Represents one token public class Token { + /// Token id public let id: BigUInt + /// Token parent public let parent: ERC888 fileprivate var address: Address { return parent.address } fileprivate var options: Web3Options { return parent.options } @@ -95,23 +99,23 @@ public class ERC888 { self.id = id } - /// - returns: token name/description + /// - Returns: token name/description public func name() throws -> String { return try address.call("name(uint256)", id, options: options).wait().string() } - /// - returns: token symbol + /// - Returns: token symbol public func symbol() throws -> String { return try address.call("symbol(uint256)", id, options: options).wait().string() } - /// - returns: token decimals + /// - Returns: token decimals public func decimals() throws -> BigUInt { return try address.call("decimals(uint256)", id, options: options).wait().uint256() } - /// - returns: user balance in wei + /// - Returns: user balance in wei public func balance(of user: Address) throws -> BigUInt { return try address.call("balanceOf(uint256,address)", id, user, options: options).wait().uint256() } - /// - returns: user balance in human-readable format (automatically calculates with decimals) + /// - Returns: user balance in human-readable format (automatically calculates with decimals) public func naturalBalance(of user: Address) throws -> String { let balance = try address.call("balanceOf(uint256,address)", id, user, options: options).wait().uint256() let decimals = try self.decimals() @@ -120,10 +124,10 @@ public class ERC888 { /** transfers to user \(amount) - - important: Transaction | Requires password | Contract owner only. - - returns: TransactionSendingResult - - parameter user: recepient address - - parameter amount: amount in wei to send. If you want to send 1 token (not 0.00000000001) use NaturalUnits(amount) instead + - Important: Transaction | Requires password | Contract owner only. + - Returns: TransactionSendingResult + - Parameter user: Recipient address + - Parameter amount: Amount in wei to send. If you want to send 1 token (not 0.00000000001) use NaturalUnits(amount) instead */ public func transfer(to user: Address, amount: BigUInt) throws -> TransactionSendingResult { return try address.send("transfer(uint256,address,uint256)", id, user, amount, password: password, options: options).wait() @@ -132,8 +136,8 @@ public class ERC888 { /** transfers to user \(amount) NaturalUnits is user readable representaion of tokens (like "0.01" / "1.543634") - - important: Transaction | Requires password | Contract owner only. - - returns: TransactionSendingResult + - Important: Transaction | Requires password | Contract owner only. + - Returns: TransactionSendingResult */ public func transfer(to user: Address, amount: NaturalUnits) throws -> TransactionSendingResult { let decimals = try Int(self.decimals()) @@ -153,12 +157,12 @@ public class ERC888 { self.parent = parent } - /// - returns: gas price for transfer(address,uint256) transaction + /// - Returns: gas price for transfer(address,uint256) transaction public func transfer(to user: Address, amount: BigUInt) throws -> BigUInt { return try address.estimateGas("transfer(uint256,address,uint256)", parent.id, user, amount, options: options).wait() } - /// - returns: gas price for transfer(address,uint256) transaction + /// - Returns: gas price for transfer(address,uint256) transaction public func transfer(to user: Address, amount: NaturalUnits) throws -> BigUInt { let decimals = try Int(parent.decimals()) let amount = amount.number(with: decimals) diff --git a/Example/Pods/web3swift/Sources/Contracts/SecurityToken.swift b/Example/Pods/web3swift/Sources/Contracts/SecurityToken.swift index b0b9f376..55ceaecd 100644 --- a/Example/Pods/web3swift/Sources/Contracts/SecurityToken.swift +++ b/Example/Pods/web3swift/Sources/Contracts/SecurityToken.swift @@ -31,60 +31,116 @@ public class SecurityToken { /// Password to unlock private key for sender address public var password: String = "BANKEXFOUNDATION" - /// Represents Address as ERC20 token (with standart password and options) - /// - parameter address: Token address + /// Represents Address as SecurityToken token (with standard password and options) + /// - Parameter address: Token address public init(_ address: Address) { self.address = address } - /// Represents Address as ERC20 token - /// - parameter address: Token address - /// - parameter from: Sender address - /// - parameter address: Password to decrypt sender's private key + /// Represents Address as SecurityToken token + /// - Parameter address: Token address + /// - Parameter from: Sender address + /// - Parameter address: Password to decrypt sender's private key public init(_ address: Address, from: Address, password: String) { self.address = address options.from = from self.password = password } + /// Returns token decimals public func decimals() throws -> BigUInt { return try address.call("decimals()").wait().uint256() } + /// Returns token total supply public func totalSupply() throws -> BigUInt { return try address.call("totalSupply()").wait().uint256() } + /// - Returns: User balance in wei public func balance(of owner: Address) throws -> BigUInt { return try address.call("balanceOf(address)", owner).wait().uint256() } + /** + Shows how much balance you approved spender to get from your account. + + - Returns: Balance that one user can take from another user + - Parameter owner: Balance holder + - Parameter spender: Spender address + + Solidity interface: + ``` solidity + allowance(address,address) + ``` + */ public func allowance(owner: Address, spender: Address) throws -> BigUInt { return try address.call("allowance(address,address)", owner, spender).wait().uint256() } - public func transfer(to: Address, value: BigUInt) throws -> TransactionSendingResult { - return try address.send("transfer(address,uint256)", to, value).wait() + /** + Transfers to user amount of balance + + - Important: Transaction | Requires password + - Returns: TransactionSendingResult + - Parameter user: Recipient address + - Parameter amount: Amount in wei to send. If you want to send 1 token (not 0.00000000001) use NaturalUnits(amount) instead + + Solidity interface: + ``` solidity + transfer(address,uint256) + ``` + */ + public func transfer(to: Address, amount: BigUInt) throws -> TransactionSendingResult { + return try address.send("transfer(address,uint256)", to, amount).wait() } - public func transfer(from: Address, to: Address, spender: Address) throws -> TransactionSendingResult { - return try address.send("transferFrom(address,address,uint256)", from, to, spender).wait() + /** + Transfers from user1 to user2 + NaturalUnits is user readable representaion of tokens (like "0.01" / "1.543634") + - Important: Transaction | Requires password | Contract owner only. + ``` + SecurityToken(address, from: me).transfer(to: user, amount: NaturalUnits(0.1)) + ``` + is not the same as + ``` + SecurityToken(address).transferFrom(owner: me, to: user, amount: NaturalUnits(0.1)) + ``` + - Returns: TransactionSendingResult + */ + public func transfer(from: Address, to: Address, amount: BigUInt) throws -> TransactionSendingResult { + return try address.send("transferFrom(address,address,uint256)", from, to, amount).wait() } - public func approve(spender: Address, value: BigUInt) throws -> TransactionSendingResult { - return try address.send("approve(address,uint256)", spender, value).wait() + /** + Approves user to take \(amount) tokens from your account. + + - Important: Transaction | Requires password + - Returns: TransactionSendingResult + - Parameter user: Recipient address + - Parameter amount: Amount in wei to send. If you want to send 1 token (not 0.00000000001) use NaturalUnits(amount) instead + + Solidity interface: + ``` solidity + approve(address,uint256) + ``` + */ + public func approve(spender: Address, amount: BigUInt) throws -> TransactionSendingResult { + return try address.send("approve(address,uint256)", spender, amount).wait() } + /// Decrease approved balance that spender can take from your address public func decreaseApproval(spender: Address, subtractedValue: BigUInt) throws -> TransactionSendingResult { return try address.send("decreaseApproval(address,uint256)", spender, subtractedValue).wait() } + /// Increase approved balance that spender can take from your address public func increaseApproval(spender: Address, addedValue: BigUInt) throws -> TransactionSendingResult { return try address.send("increaseApproval(address,uint256)", spender, addedValue).wait() } /** transfer, transferFrom must respect the result of verifyTransfer - solidity interface: + Solidity interface: ``` solidity function verifyTransfer(address _from, address _to, uint256 _value) external returns (bool success); ``` @@ -96,10 +152,10 @@ public class SecurityToken { /** Mints new tokens and assigns them to the target _investor. Can only be called by the STO attached to the token (Or by the ST owner if there's no STO attached yet) - - parameter investor: Address the tokens will be minted to - - parameter value: is the amount of tokens that will be minted to the investor + - Parameter investor: Address the tokens will be minted to + - Parameter value: is the amount of tokens that will be minted to the investor - solidity interface: + Solidity interface: ``` solidity function mint(address _investor, uint256 _value) external returns (bool success); ``` @@ -111,11 +167,11 @@ public class SecurityToken { /** Mints new tokens and assigns them to the target _investor. Can only be called by the STO attached to the token (Or by the ST owner if there's no STO attached yet) - - parameter investor: Address the tokens will be minted to - - parameter value: is The amount of tokens that will be minted to the investor - - parameter data: Data to indicate validation + - Parameter investor: Address the tokens will be minted to + - Parameter value: is The amount of tokens that will be minted to the investor + - Parameter data: Data to indicate validation - solidity interface: + Solidity interface: ``` solidity function mintWithData(address _investor, uint256 _value, bytes _data) external returns (bool success); ``` @@ -127,11 +183,11 @@ public class SecurityToken { /** Used to burn the securityToken on behalf of someone else - - parameter from: Address for whom to burn tokens - - parameter value: No. of tokens to be burned - - parameter data: Data to indicate validation + - Parameter from: Address for whom to burn tokens + - Parameter value: No. of tokens to be burned + - Parameter data: Data to indicate validation - solidity interface: + Solidity interface: ``` solidity function burnFromWithData(address _from, uint256 _value, bytes _data) external; ``` @@ -143,10 +199,10 @@ public class SecurityToken { /** Used to burn the securityToken - - parameter value: No. of tokens to be burned - - parameter data: Data to indicate validation + - Parameter value: No. of tokens to be burned + - Parameter data: Data to indicate validation - solidity interface: + Solidity interface: ``` solidity function burnWithData(uint256 _value, bytes _data) external; ``` @@ -160,16 +216,16 @@ public class SecurityToken { If no Permission return false - note that IModule withPerm will allow ST owner all permissions anyway this allows individual modules to override this logic if needed (to not allow ST owner all permissions) - solidity interface: + Solidity interface: ``` solidity function checkPermission(address _delegate, address _module, bytes32 _perm) external view returns (bool); ``` */ - public func checkPermission(delegate: Address, module: Address, perm: Data) throws -> Bool { return try address.call("checkPermission(address,address,bytes32)", delegate, module, perm).wait().bool() } + /// Module public struct Module { /// Module name public var name: String @@ -185,6 +241,7 @@ public class SecurityToken { public var index: BigUInt /// Name index public var nameIndex: BigUInt + /// Init with contract response public init(_ response: SolidityDataReader) throws { name = try response.string() address = try response.address() @@ -197,9 +254,9 @@ public class SecurityToken { } /** Returns module list for a module type - - parameter address: Address of the module + - Parameter address: Address of the module - solidity interface: + Solidity interface: ``` solidity function getModule(address _module) external view returns(bytes32, address, address, bool, uint8, uint256, uint256); ``` @@ -212,10 +269,10 @@ public class SecurityToken { /** Returns module list for a module name - - parameter name: Name of the module - - returns: address[] List of modules with this name + - Parameter name: Name of the module + - Returns: address[] List of modules with this name - solidity interface: + Solidity interface: ``` solidity function getModulesByName(bytes32 _name) external view returns (address[]); ``` @@ -226,10 +283,10 @@ public class SecurityToken { /** Returns module list for a module type - - parameter type: Type of the module - - returns: address[] List of modules with this type + - Parameter type: Type of the module + - Returns: address[] List of modules with this type - solidity interface: + Solidity interface: ``` solidity function getModulesByType(uint8 _type) external view returns (address[]); ``` @@ -241,9 +298,9 @@ public class SecurityToken { /** Queries totalSupply at a specified checkpoint - - parameter checkpointId: Checkpoint ID to query as of + - Parameter checkpointId: Checkpoint ID to query as of - solidity interface: + Solidity interface: ``` solidity function totalSupplyAt(uint256 _checkpointId) external view returns (uint256); ``` @@ -254,10 +311,10 @@ public class SecurityToken { /** Queries balance at a specified checkpoint - - parameter investor: Investor to query balance for - - parameter checkpointId: Checkpoint ID to query as of + - Parameter investor: Investor to query balance for + - Parameter checkpointId: Checkpoint ID to query as of - solidity interface: + Solidity interface: ``` solidity function balanceOfAt(address _investor, uint256 _checkpointId) external view returns (uint256); ``` @@ -269,7 +326,7 @@ public class SecurityToken { /** Creates a checkpoint that can be used to query historical balances / totalSuppy - solidity interface: + Solidity interface: ``` solidity function createCheckpoint() external returns (uint256); ``` @@ -282,9 +339,9 @@ public class SecurityToken { /** Gets length of investors array NB - this length may differ from investorCount if the list has not been pruned of zero-balance investors - - returns: Length + - Returns: Length - solidity interface: + Solidity interface: ``` solidity function getInvestors() external view returns (address[]); ``` @@ -296,10 +353,10 @@ public class SecurityToken { /** returns an array of investors at a given checkpoint NB - this length may differ from investorCount as it contains all investors that ever held tokens - - parameter checkpointId: Checkpoint id at which investor list is to be populated - - returns: list of investors + - Parameter checkpointId: Checkpoint id at which investor list is to be populated + - Returns: list of investors - solidity interface: + Solidity interface: ``` solidity function getInvestorsAt(uint256 _checkpointId) external view returns(address[]); ``` @@ -311,11 +368,11 @@ public class SecurityToken { /** generates subset of investors NB - can be used in batches if investor list is large - - parameter start: Position of investor to start iteration from - - parameter end: Position of investor to stop iteration at - - returns: list of investors + - Parameter start: Position of investor to start iteration from + - Parameter end: Position of investor to stop iteration at + - Returns: list of investors - solidity interface: + Solidity interface: ``` solidity function iterateInvestors(uint256 _start, uint256 _end) external view returns(address[]); ``` @@ -326,9 +383,9 @@ public class SecurityToken { /** Gets current checkpoint ID - - returns: Id + - Returns: Id - solidity interface: + Solidity interface: ``` solidity function currentCheckpointId() external view returns (uint256); ``` @@ -339,10 +396,10 @@ public class SecurityToken { /** Gets an investor at a particular index - - parameter index: Index to return address from - - returns: Investor address + - Parameter index: Index to return address from + - Returns: Investor address - solidity interface: + Solidity interface: ``` solidity function investors(uint256 _index) external view returns (address); ``` @@ -354,10 +411,10 @@ public class SecurityToken { /** Allows the owner to withdraw unspent POLY stored by them on the ST or any ERC20 token. @dev Owner can transfer POLY to the ST which will be used to pay for modules that require a POLY fee. - - parameter tokenContract: Address of the ERC20Basic compliance token - - parameter value: Amount of POLY to withdraw + - Parameter tokenContract: Address of the ERC20Basic compliance token + - Parameter value: Amount of POLY to withdraw - solidity interface: + Solidity interface: ``` solidity function withdrawERC20(address _tokenContract, uint256 _value) external; ``` @@ -368,10 +425,10 @@ public class SecurityToken { /** Allows owner to approve more POLY to one of the modules - - parameter module: Module address - - parameter budget: New budget + - Parameter module: Module address + - Parameter budget: New budget - solidity interface: + Solidity interface: ``` solidity function changeModuleBudget(address _module, uint256 _budget) external; ``` @@ -382,9 +439,9 @@ public class SecurityToken { /** Changes the tokenDetails - - parameter newTokenDetails: New token details + - Parameter newTokenDetails: New token details - solidity interface: + Solidity interface: ``` solidity function updateTokenDetails(string _newTokenDetails) external; ``` @@ -395,9 +452,9 @@ public class SecurityToken { /** Allows the owner to change token granularity - - parameter granularity: Granularity level of the token + - Parameter granularity: Granularity level of the token - solidity interface: + Solidity interface: ``` solidity function changeGranularity(uint256 _granularity) external; ``` @@ -408,11 +465,11 @@ public class SecurityToken { /** Removes addresses with zero balances from the investors list - - parameter start: Index in investors list at which to start removing zero balances - - parameter iters: Max number of iterations of the for loop + - Parameter start: Index in investors list at which to start removing zero balances + - Parameter iters: Max number of iterations of the for loop NB - pruning this list will mean you may not be able to iterate over investors on-chain as of a historical checkpoint - solidity interface: + Solidity interface: ``` solidity function pruneInvestors(uint256 _start, uint256 _iters) external; ``` @@ -424,7 +481,7 @@ public class SecurityToken { /** Freezes all the transfers - solidity interface: + Solidity interface: ``` solidity function freezeTransfers() external; ``` @@ -436,7 +493,7 @@ public class SecurityToken { /** Un-freezes all the transfers - solidity interface: + Solidity interface: ``` solidity function unfreezeTransfers() external; ``` @@ -448,7 +505,7 @@ public class SecurityToken { /** Ends token minting period permanently - solidity interface: + Solidity interface: ``` solidity function freezeMinting() external; ``` @@ -460,11 +517,11 @@ public class SecurityToken { /** Mints new tokens and assigns them to the target investors. Can only be called by the STO attached to the token or by the Issuer (Security Token contract owner) - - parameter investors: A list of addresses to whom the minted tokens will be delivered - - parameter values: A list of the amount of tokens to mint to corresponding addresses from _investor[] list - - returns: Success + - Parameter investors: A list of addresses to whom the minted tokens will be delivered + - Parameter values: A list of the amount of tokens to mint to corresponding addresses from _investor[] list + - Returns: Success - solidity interface: + Solidity interface: ``` solidity function mintMulti(address[] _investors, uint256[] _values) external returns (bool success); ``` @@ -480,12 +537,12 @@ public class SecurityToken { You are allowed to add a new moduleType if: - there is no existing module of that type yet added - the last member of the module list is replacable - - parameter moduleFactory: is the address of the module factory to be added - - parameter data: is data packed into bytes used to further configure the module (See STO usage) - - parameter maxCost: max amount of POLY willing to pay to module. (WIP) + - Parameter moduleFactory: Is the address of the module factory to be added + - Parameter data: Is data packed into bytes used to further configure the module (See STO usage) + - Parameter maxCost: Max amount of POLY willing to pay to module. (WIP) - solidity interface: + Solidity interface: ``` solidity function addModule( address _moduleFactory, @@ -501,9 +558,9 @@ public class SecurityToken { /** Archives a module attached to the SecurityToken - - parameter module: address of module to archive + - Parameter module: Address of module to archive - solidity interface: + Solidity interface: ``` solidity function archiveModule(address _module) external; ``` @@ -514,9 +571,9 @@ public class SecurityToken { /** Unarchives a module attached to the SecurityToken - - parameter module: address of module to unarchive + - Parameter module: Address of module to unarchive - solidity interface: + Solidity interface: ``` solidity function unarchiveModule(address _module) external; ``` @@ -527,9 +584,9 @@ public class SecurityToken { /** Removes a module attached to the SecurityToken - - parameter module: address of module to archive + - Parameter module: Address of module to archive - solidity interface: + Solidity interface: ``` solidity function removeModule(address _module) external; ``` @@ -540,9 +597,9 @@ public class SecurityToken { /** Used by the issuer to set the controller addresses - - parameter controller: address of the controller + - Parameter controller: Address of the controller - solidity interface: + Solidity interface: ``` solidity function setController(address _controller) external; ``` @@ -553,13 +610,13 @@ public class SecurityToken { /** Used by a controller to execute a forced transfer - - parameter from: address from which to take tokens - - parameter to: address where to send tokens - - parameter value: amount of tokens to transfer - - parameter data: data to indicate validation - - parameter log: data attached to the transfer by controller to emit in event + - Parameter from: Address from which to take tokens + - Parameter to: Address where to send tokens + - Parameter value: Amount of tokens to transfer + - Parameter data: Data to indicate validation + - Parameter log: Data attached to the transfer by controller to emit in event - solidity interface: + Solidity interface: ``` solidity function forceTransfer(address _from, address _to, uint256 _value, bytes _data, bytes _log) external; ``` @@ -570,12 +627,12 @@ public class SecurityToken { /** Used by a controller to execute a foced burn - - parameter from: address from which to take tokens - - parameter value: amount of tokens to transfer - - parameter data: data to indicate validation - - parameter log: data attached to the transfer by controller to emit in event + - Parameter from: Address from which to take tokens + - Parameter value: Amount of tokens to transfer + - Parameter data: Data to indicate validation + - Parameter log: Data attached to the transfer by controller to emit in event - solidity interface: + Solidity interface: ``` solidity function forceBurn(address _from, uint256 _value, bytes _data, bytes _log) external; ``` @@ -588,7 +645,7 @@ public class SecurityToken { Used by the issuer to permanently disable controller functionality @dev enabled via feature switch "disableControllerAllowed" - solidity interface: + Solidity interface: ``` solidity function disableController() external; ``` @@ -601,7 +658,7 @@ public class SecurityToken { /** Used to get the version of the securityToken - solidity interface: + Solidity interface: ``` solidity function getVersion() external view returns(uint8[]); ``` @@ -613,7 +670,7 @@ public class SecurityToken { /** Gets the investor count - solidity interface: + Solidity interface: ``` solidity function getInvestorCount() external view returns(uint256); ``` @@ -624,12 +681,12 @@ public class SecurityToken { /** Overloaded version of the transfer function - - parameter to: receiver of transfer - - parameter value: value of transfer - - parameter data: data to indicate validation - - returns: bool success + - Parameter to: Receiver of transfer + - Parameter value: Value of transfer + - Parameter data: Data to indicate validation + - Returns: Bool success - solidity interface: + Solidity interface: ``` solidity function transferWithData(address _to, uint256 _value, bytes _data) external returns (bool success); ``` @@ -639,13 +696,13 @@ public class SecurityToken { } /** Overloaded version of the transferFrom function - - parameter from: sender of transfer - - parameter to: receiver of transfer - - parameter value: value of transfer - - parameter data: data to indicate validation - - returns: bool success + - Parameter from: Sender of transfer + - Parameter to: Receiver of transfer + - Parameter value: Value of transfer + - Parameter data: Data to indicate validation + - Returns: Bool success - solidity interface: + Solidity interface: ``` solidity function transferFromWithData(address _from, address _to, uint256 _value, bytes _data) external returns(bool); ``` @@ -656,9 +713,9 @@ public class SecurityToken { /** Provides the granularity of the token - - returns: uint256 + - Returns: Token granularity - solidity interface: + Solidity interface: ``` solidity function granularity() external view returns(uint256); ``` diff --git a/Example/Pods/web3swift/Sources/Convenience/Array+Extension.swift b/Example/Pods/web3swift/Sources/Convenience/Array+Extension.swift index b7876f29..2f8a2d42 100644 --- a/Example/Pods/web3swift/Sources/Convenience/Array+Extension.swift +++ b/Example/Pods/web3swift/Sources/Convenience/Array+Extension.swift @@ -10,7 +10,7 @@ import Foundation extension Array { /// Splits array by chunks - /// - parameter chunkSize: size of each subarray + /// - Parameter chunkSize: Size of each subarray public func split(intoChunksOf chunkSize: Int) -> [[Element]] { return stride(from: 0, to: count, by: chunkSize).map { let endIndex = ($0.advanced(by: chunkSize) > self.count) ? self.count - $0 : chunkSize diff --git a/Example/Pods/web3swift/Sources/Convenience/Base58.swift b/Example/Pods/web3swift/Sources/Convenience/Base58.swift index 5ac855e0..71ad758a 100644 --- a/Example/Pods/web3swift/Sources/Convenience/Base58.swift +++ b/Example/Pods/web3swift/Sources/Convenience/Base58.swift @@ -116,7 +116,7 @@ struct Base58 { extension Array where Element == UInt8 { /** - - returns: base58 encoded string from byte array + - Returns: base58 encoded string from byte array */ public var base58EncodedString: String { guard !isEmpty else { return "" } @@ -124,7 +124,7 @@ extension Array where Element == UInt8 { } /** - - returns: base58 encoded string with checksum its hash at the end + - Returns: base58 encoded string with checksum its hash at the end */ public var base58CheckEncodedString: String { var bytes = self @@ -138,14 +138,14 @@ extension Array where Element == UInt8 { extension String { /** - - returns: base 58 encoded string of its utf8 representation + - Returns: base 58 encoded string of its utf8 representation */ public var base58EncodedString: String { return [UInt8](utf8).base58EncodedString } /** - - returns: data converted from base58 string + - Returns: data converted from base58 string */ public var base58DecodedData: Data? { let bytes = Base58.bytesFromBase58(self) @@ -153,7 +153,7 @@ extension String { } /** - - returns: data converted from base58 string encoded with hash + - Returns: data converted from base58 string encoded with hash */ public var base58CheckDecodedData: Data? { guard let bytes = self.base58CheckDecodedBytes else { return nil } @@ -162,7 +162,7 @@ extension String { /** - - returns: data converted from base58 string encoded with hash + - Returns: data converted from base58 string encoded with hash */ public var base58CheckDecodedBytes: [UInt8]? { var bytes = Base58.bytesFromBase58(self) diff --git a/Example/Pods/web3swift/Sources/Convenience/CryptoExtensions.swift b/Example/Pods/web3swift/Sources/Convenience/CryptoExtensions.swift index c46a1be0..65596bee 100644 --- a/Example/Pods/web3swift/Sources/Convenience/CryptoExtensions.swift +++ b/Example/Pods/web3swift/Sources/Convenience/CryptoExtensions.swift @@ -6,14 +6,14 @@ // Copyright © 2017 Alexander Vlasov. All rights reserved. // -import CryptoSwift +//import Cryptor import Foundation /** Scrypt function. Used to generate derivedKey from password, salt, n, r, p */ public func scrypt(password: String, salt: Data, length: Int, N: Int, R: Int, P: Int) -> Data? { - guard let deriver = try? Scrypt(password: Array(password.utf8), salt: salt.bytes, dkLen: length, N: N, r: R, p: P) else { return nil } + guard let deriver = try? OldScrypt(password: Array(password.utf8), salt: salt.bytes, dkLen: length, N: N, r: R, p: P) else { return nil } guard let result = try? deriver.calculate() else { return nil } return Data(result) } @@ -27,13 +27,32 @@ enum ScryptError: Error { case nIsTooLarge case rIsTooLarge case nMustBeAPowerOf2GreaterThan1 + + var localizedDescription: String { + switch self { + case .nIsTooLarge: + return "Scrypt error: N is too large" + case .rIsTooLarge: + return "Scrypt error: R is too large" + case .nMustBeAPowerOf2GreaterThan1: + return "Scrypt error: N must be a power of two and greater than 1" + } + } } /// Implementation of the scrypt key derivation function. -private class Scrypt { +private class OldScrypt { enum Error: Swift.Error { case invalidPassword case invalidSalt + var localizedDescription: String { + switch self { + case .invalidPassword: + return "Scrypt error: invalid password" + case .invalidSalt: + return "Scrypt error: invalid salt" + } + } } /// Configuration parameters. @@ -79,8 +98,11 @@ private class Scrypt { V.deallocate() } + /* 1: (B_0 ... B_{p-1}) <-- PBKDF2(P, S, 1, p * MFLen) */ - let barray = try PKCS5.PBKDF2(password: password, salt: [UInt8](salt), iterations: 1, keyLength: p * 128 * r, variant: .sha256).calculate() + + let pw = String(data: Data(password), encoding: .utf8)! + let barray = try PBKDF.deriveKey(fromPassword: pw, salt: salt, prf: .sha256, rounds: 1, derivedKeyLength: UInt(p * 128 * r)) barray.withUnsafeBytes { p in B.copyMemory(from: p.baseAddress!, byteCount: barray.count) @@ -96,7 +118,8 @@ private class Scrypt { let pointer = B.assumingMemoryBound(to: UInt8.self) let bufferPointer = UnsafeBufferPointer(start: pointer, count: p * 128 * r) let block = [UInt8](bufferPointer) - return try PKCS5.PBKDF2(password: password, salt: block, iterations: 1, keyLength: dkLen, variant: .sha256).calculate() + return try PBKDF.deriveKey(fromPassword: pw, salt: block, prf: .sha256, rounds: 1, derivedKeyLength: UInt(dkLen)) +// return try PKCS5.PBKDF2(password: password, salt: block, iterations: 1, keyLength: dkLen, variant: .sha256).calculate() } /// Computes `B = SMix_r(B, N)`. diff --git a/Example/Pods/web3swift/Sources/Convenience/Data+Extension.swift b/Example/Pods/web3swift/Sources/Convenience/Data+Extension.swift index 4fe73899..d114bb61 100644 --- a/Example/Pods/web3swift/Sources/Convenience/Data+Extension.swift +++ b/Example/Pods/web3swift/Sources/Convenience/Data+Extension.swift @@ -7,11 +7,14 @@ // import Foundation +import CryptoSwift + /// Data errors public enum DataError: Error { /// Throws if data cannot be converted to string case hexStringCorrupted(String) + /// Printable / user displayable description public var localizedDescription: String { switch self { case let .hexStringCorrupted(string): @@ -20,6 +23,12 @@ public enum DataError: Error { } } +extension Data { + func sha256() -> Data { + return digest(using: .sha256) + } +} + public extension Data { /// Inits with array of type init(fromArray values: [T]) { @@ -46,9 +55,12 @@ public extension Data { return difference == UInt8(0x00) } - /// Replaces all data bytes with zeroes - /// This one needs because if data deinits, it still will stay in the memory until the override - /// - parameter data: Data to be cleared + /// Replaces all data bytes with zeroes. + /// + /// This one needs because if data deinits, it still will stay in the memory until the override. + /// + /// webswift uses that to clear private key from memory. + /// - Parameter data: Data to be cleared static func zero(_ data: inout Data) { let count = data.count data.withUnsafeMutableBytes { (dataPtr: UnsafeMutablePointer) in @@ -56,8 +68,8 @@ public extension Data { } } - /// - parameter length: Desired data length - /// - returns: Random data + /// - Parameter length: Desired data length + /// - Returns: Random data static func random(length: Int) -> Data { var data = Data(repeating: 0, count: length) var success = false @@ -80,7 +92,7 @@ public extension Data { return data } - /// - returns: Hex representation of data + /// - Returns: Hex representation of data var hex: String { var string = "" withUnsafeBytes { (bytes: UnsafePointer) in @@ -91,10 +103,10 @@ public extension Data { return string } - /// - parameter separateEvery: Position where separator should be inserted. + /// - Parameter separateEvery: Position where separator should be inserted. /// Counts per byte (not per character) - /// - parameter separator: Separator string - /// - returns: Hex representation of data + /// - Parameter separator: Separator string + /// - Returns: Hex representation of data func hex(separateEvery: Int, separator: String = " ") -> String { var string = "" string.reserveCapacity(count*2+count/separateEvery*separator.count) @@ -112,7 +124,7 @@ public extension Data { return string } - /// - returns: Data if string is in hex format + /// - Returns: Data if string is in hex format /// Format: "0x0ba98fc797cfab9864bfac988fa", "0ba98fc797cfab9864bfac988fa" static func fromHex(_ hex: String) -> Data? { let string = hex.lowercased().withoutHex @@ -127,19 +139,19 @@ public extension Data { return Data(array) } - /// - returns: String (if its utf8 convertible) or hex string + /// - Returns: String (if its utf8 convertible) or hex string var string: String { return String(data: self, encoding: .utf8) ?? hex } - /// - returns: kaccak256 hash of data + /// - Returns: kaccak256 hash of data func keccak256() -> Data { return sha3(.keccak256) } - /// - returns: Number bits - /// - important: Returns max of 8 bytes for simplicity + /// - Returns: Number bits + /// - Important: Returns max of 8 bytes for simplicity func bitsInRange(_ startingBit: Int, _ length: Int) -> UInt64 { let bytes = self[(startingBit / 8) ..< (startingBit + length + 7) / 8] let padding = Data(repeating: 0, count: 8 - bytes.count) @@ -152,7 +164,7 @@ public extension Data { } extension UInt8 { - /// - returns: Byte as hex string (from "00" to "ff") + /// - Returns: Byte as hex string (from "00" to "ff") public var hex: String { if self < 0x10 { return "0" + String(self, radix: 16) diff --git a/Example/Pods/web3swift/Sources/Convenience/LibSecp256k1Extension.swift b/Example/Pods/web3swift/Sources/Convenience/LibSecp256k1Extension.swift index ff368738..d0df5e7c 100644 --- a/Example/Pods/web3swift/Sources/Convenience/LibSecp256k1Extension.swift +++ b/Example/Pods/web3swift/Sources/Convenience/LibSecp256k1Extension.swift @@ -58,6 +58,7 @@ public enum SECP256K1Error: Error { case invalidSignatureSize /// Public key size should be 65 bytes long case invalidPublicKeySize + /// Printable / user displayable description public var localizedDescription: String { switch self { case .signingFailed: @@ -98,6 +99,7 @@ public enum SECP256DataError: Error { case signatureCorrupted /// Invalid marshal signature size case invalidMarshalSignatureSize + /// Printable / user displayable description public var localizedDescription: String { switch self { case .cannotRecoverPublicKey: @@ -220,7 +222,7 @@ struct SECP256K1 { try privateKey.checkPrivateKeySize() var publicKey = secp256k1_pubkey() let result = privateKey.withUnsafeBytes { (privateKeyPointer: UnsafePointer) in - secp256k1_ec_pubkey_create(context!, UnsafeMutablePointer(&publicKey), privateKeyPointer) + secp256k1_ec_pubkey_create(context!, &publicKey, privateKeyPointer) } guard result != 0 else { throw SECP256DataError.cannotExtractPublicKeyFromPrivateKey } return publicKey @@ -246,7 +248,7 @@ struct SECP256K1 { let keyLen: Int = Int(serializedKey.count) var publicKey = secp256k1_pubkey() let result = serializedKey.withUnsafeBytes { (serializedKeyPointer: UnsafePointer) in - secp256k1_ec_pubkey_parse(context!, UnsafeMutablePointer(&publicKey), serializedKeyPointer, keyLen) + secp256k1_ec_pubkey_parse(context!, &publicKey, serializedKeyPointer, keyLen) } guard result != 0 else { throw SECP256DataError.cannotParsePublicKey } return publicKey @@ -256,7 +258,14 @@ struct SECP256K1 { try signature.checkSignatureSize() var recoverableSignature = secp256k1_ecdsa_recoverable_signature() let serializedSignature = Data(signature[0 ..< 64]) - let v = Int32(signature[64]) + var v = Int32(signature[64]) + + /* + fix for web3.js signs + eth-lib code: vrs.v < 2 ? vrs.v : 1 - (vrs.v % 2) + https://github.com/MaiaVictor/eth-lib/blob/d959c54faa1e1ac8d474028ed1568c5dce27cc7a/src/account.js#L60 + */ + v = v < 2 ? v : 1 - (v % 2) let result = serializedSignature.withUnsafeBytes { (serPtr: UnsafePointer) -> Int32 in withUnsafeMutablePointer(to: &recoverableSignature, { (signaturePointer: UnsafeMutablePointer) in secp256k1_ecdsa_recoverable_signature_parse_compact(context!, signaturePointer, serPtr, v) @@ -314,7 +323,7 @@ struct SECP256K1 { static func recoverSender(hash: Data, signature: Data) throws -> Address { let pubKey = try SECP256K1.recoverPublicKey(hash: hash, signature: signature, compressed: false) try pubKey.checkPublicKeySize() - let addressData = Data(pubKey.sha3(.keccak256)[12 ..< 32]) + let addressData = Data(pubKey.keccak256()[12 ..< 32]) return Address(addressData) } diff --git a/Example/Pods/web3swift/Sources/Convenience/NativeTypesEncoding+Extensions.swift b/Example/Pods/web3swift/Sources/Convenience/NativeTypesEncoding+Extensions.swift index cf3e581b..21a08d03 100644 --- a/Example/Pods/web3swift/Sources/Convenience/NativeTypesEncoding+Extensions.swift +++ b/Example/Pods/web3swift/Sources/Convenience/NativeTypesEncoding+Extensions.swift @@ -11,9 +11,9 @@ import Foundation public extension Data { /// Sets data.count to toBytes and fills missing bytes at the start of the data - /// - parameter toBytes: Desired data size - /// - parameter isNegative: Fills with ff if negative. default: false - /// - returns: Data with desired size + /// - Parameter toBytes: Desired data size + /// - Parameter isNegative: Fills with ff if negative. default: false + /// - Returns: Data with desired size func setLengthLeft(_ toBytes: UInt64, isNegative: Bool = false) -> Data? { let existingLength = UInt64(count) if existingLength == toBytes { @@ -32,9 +32,9 @@ public extension Data { } /// Sets data.count to toBytes and fills missing bytes at the end of the data - /// - parameter toBytes: Desired data size - /// - parameter isNegative: Fills with ff if negative. default: false - /// - returns: Data with desired size + /// - Parameter toBytes: Desired data size + /// - Parameter isNegative: Fills with ff if negative. default: false + /// - Returns: Data with desired size func setLengthRight(_ toBytes: UInt64, isNegative: Bool = false) -> Data? { let existingLength = UInt64(count) if existingLength == toBytes { @@ -66,7 +66,7 @@ public extension BigInt { } } - /// - returns: Fixed size data of number + /// - Returns: Fixed size data of number func abiEncode(bits: UInt64) -> Data! { let isNegative = self < (BigInt(0)) let data = toTwosComplement() @@ -91,7 +91,7 @@ public extension BigInt { } public extension BigUInt { - /// - returns: Fixed size data of number + /// - Returns: Fixed size data of number func abiEncode(bits: UInt64) -> Data? { let data = serialize() let paddedLength = UInt64(ceil((Double(bits) / 8.0))) diff --git a/Example/Pods/web3swift/Sources/Convenience/RIPEMD160+StackOveflow.swift b/Example/Pods/web3swift/Sources/Convenience/RIPEMD160+StackOveflow.swift index 9400adec..3faf3d68 100644 --- a/Example/Pods/web3swift/Sources/Convenience/RIPEMD160+StackOveflow.swift +++ b/Example/Pods/web3swift/Sources/Convenience/RIPEMD160+StackOveflow.swift @@ -308,7 +308,8 @@ public struct RIPEMD160 { MDbuf.4 &+ aa &+ bbb, MDbuf.0 &+ bb &+ ccc) } - + + /// Appends data to buffer public mutating func update(data: Data) { data.withUnsafeBytes { (ptr: UnsafePointer) in var ptr = ptr @@ -336,7 +337,8 @@ public struct RIPEMD160 { } count += Int64(data.count) } - + + /// Returns hash result public mutating func finalize() -> Data { var X = [UInt32](repeating: 0, count: 16) /* append the bit m_n == 1 */ diff --git a/Example/Pods/web3swift/Sources/Convenience/String+Extension.swift b/Example/Pods/web3swift/Sources/Convenience/String+Extension.swift index a8411b27..e9e2964a 100755 --- a/Example/Pods/web3swift/Sources/Convenience/String+Extension.swift +++ b/Example/Pods/web3swift/Sources/Convenience/String+Extension.swift @@ -19,7 +19,7 @@ extension String { } extension String { - /// - returns: keccak256 hash of string + /// - Returns: keccak256 hash of string public func keccak256() -> Data { return data.keccak256() } diff --git a/Example/Pods/web3swift/Sources/Convenience/UInt256.swift b/Example/Pods/web3swift/Sources/Convenience/UInt256.swift index b52f2b8c..bc6721a6 100644 --- a/Example/Pods/web3swift/Sources/Convenience/UInt256.swift +++ b/Example/Pods/web3swift/Sources/Convenience/UInt256.swift @@ -11,14 +11,14 @@ import Foundation extension BigUInt { - /// - parameter string: String number. can be: "0.023", "123123123.12312312312" - /// - parameter units: Units that contains decimals + /// - Parameter string: String number. can be: "0.023", "123123123.12312312312" + /// - Parameter units: Units that contains decimals public init?(_ string: String, units: Web3Units) { self.init(string, decimals: units.decimals) } - /// - parameter string: String number. can be: "0.023", "123123123.12312312312" - /// - parameter decimals: Number of decimals that string should be multiplyed by + /// - Parameter string: String number. can be: "0.023", "123123123.12312312312" + /// - Parameter decimals: Number of decimals that string should be multiplyed by public init?(_ string: String, decimals: Int) { let separators = CharacterSet(charactersIn: ".,") let components = string.trimmingCharacters(in: .whitespacesAndNewlines).components(separatedBy: separators) @@ -147,7 +147,10 @@ extension BigInt { public struct NaturalUnits { /// Error for init with string public enum Error: Swift.Error { + /// Cannot convert \(string) to number case cannotConvert(String) + + /// Printable / user displayable description public var localizedDescription: String { switch self { case let .cannotConvert(string): @@ -155,9 +158,10 @@ public struct NaturalUnits { } } } + /// String value public let string: String /// Init with string like "0.1", "1123123123", "123123.123123123123" - /// - throws: Error.cannotConvert if it cannot convert to string to BigUInt with 18 decimals + /// - Throws: Error.cannotConvert if it cannot convert to string to BigUInt with 18 decimals public init(_ string: String) throws { guard BigUInt(string, decimals: 18) != nil else { throw Error.cannotConvert(string) } self.string = string @@ -166,8 +170,8 @@ public struct NaturalUnits { public init(_ int: Int) { self.string = int.description } - /// - parameter decimals: Number of decimals - /// - returns: Wei units with decimals + /// - Parameter decimals: Number of decimals + /// - Returns: Wei units with decimals public func number(with decimals: Int) -> BigUInt { return BigUInt(string, decimals: decimals) ?? 0 } diff --git a/Example/Pods/web3swift/Sources/Encryption/AES.swift b/Example/Pods/web3swift/Sources/Encryption/AES.swift new file mode 100644 index 00000000..dfc03973 --- /dev/null +++ b/Example/Pods/web3swift/Sources/Encryption/AES.swift @@ -0,0 +1,198 @@ +// +// AES.swift +// web3swift +// +// Created by Dmitry on 30/11/2018. +// + +import Foundation +import CommonCrypto + +//extension Data { +// var bytes: Array { +// return Array(self) +// } +//} + +enum AesMode { + case ctr + case cbc + var cc: CCMode { + switch self { + case .cbc: + return CCMode(kCCModeCBC) + case .ctr: + return CCMode(kCCModeCTR) + } + } + enum Error: Swift.Error { + case invalidType(String) + } + init(_ string: String) throws { + switch string { + case "aes-128-ctr": self = .ctr + case "aes-128-cbc": self = .cbc + default: throw Error.invalidType(string) + } + } + func blockMode(_ iv: Data) -> BlockMode { + switch self { + case .ctr: return CTR(iv: iv.bytes) + case .cbc: return CBC(iv: iv.bytes) + } + } +} + +enum AESPadding { + case noPadding, pkcs5, pkcs7 + var cc: CCPadding { + switch self { + case .noPadding: + return CCPadding(ccNoPadding) + case .pkcs5: + return CCPadding(ccPKCS7Padding) + case .pkcs7: + return CCPadding(ccPKCS7Padding) + } + } +} +struct BlockMode { + var mode: AesMode + var iv: Data +} + +func CBC(iv: [UInt8]) -> BlockMode { + return BlockMode(mode: .cbc, iv: Data(iv)) +} +func CTR(iv: [UInt8]) -> BlockMode { + return BlockMode(mode: .ctr, iv: Data(iv)) +} + +class AES { + var blockMode: BlockMode + var padding: AESPadding + var key: Data + init(key: [UInt8], blockMode: BlockMode, padding: AESPadding) { + self.blockMode = blockMode + self.padding = padding + self.key = Data(key) + } + + func encrypt(_ digest: [UInt8]) throws -> [UInt8] { + return try AES128(key: key, iv: blockMode.iv).encrypt(Data(digest), padding: padding, mode: blockMode.mode).bytes + } + func encrypt(_ digest: Data) throws -> Data { + return try AES128(key: key, iv: blockMode.iv).encrypt(digest, padding: padding, mode: blockMode.mode) + } + + func decrypt(_ digest: [UInt8]) throws -> [UInt8] { + return try AES128(key: key, iv: blockMode.iv).decrypt(Data(digest), padding: padding, mode: blockMode.mode).bytes + } + func decrypt(_ digest: Data) throws -> Data { + return try AES128(key: key, iv: blockMode.iv).decrypt(digest, padding: padding, mode: blockMode.mode) + } +} + +private extension CCCryptorStatus { + func check() throws { + guard self == kCCSuccess else { throw AES128.Error.cryptoFailed(status: self) } + } +} +private extension Data { + func pointer(_ body: (UnsafePointer?) throws -> ()) rethrows { + try withUnsafeBytes(body) + } +} + +//PBKDF.deriveKey(fromPassword: mnemonics.decomposedStringWithCompatibilityMapping, salt: saltData, prf: .sha512, rounds: 2048, derivedKeyLength: 64) +struct AES128 { + private var key: Data + private var iv: Data + + init(key: Data, iv: Data) throws { + guard key.count == kCCKeySizeAES128 else { + throw Error.badKeyLength + } + guard iv.count == kCCBlockSizeAES128 else { + throw Error.badInputVectorLength + } + self.key = key + self.iv = iv + } + + enum Error: Swift.Error { + case keyGeneration(status: Int) + case cryptoFailed(status: CCCryptorStatus) + case badKeyLength + case badInputVectorLength + } + + func encrypt(_ digest: Data, padding: AESPadding, mode: AesMode) throws -> Data { + return try crypt(input: digest, operation: CCOperation(kCCEncrypt), padding: padding, mode: mode) + } + + func decrypt(_ encrypted: Data, padding: AESPadding, mode: AesMode) throws -> Data { + return try crypt(input: encrypted, operation: CCOperation(kCCDecrypt), padding: padding, mode: mode) + } + + private func crypt(input: Data, operation: CCOperation, padding: AESPadding, mode: AesMode) throws -> Data { + var outLength = Int(0) + var outBytes = [UInt8](repeating: 0, count: input.count + kCCBlockSizeAES128) + var length = 0 + + var cryptor: CCCryptorRef! + try iv.pointer { ivBytes in + try key.pointer { keyBytes in + try CCCryptorCreateWithMode(operation, mode.cc, CCAlgorithm(kCCAlgorithmAES128), padding.cc, ivBytes, keyBytes, key.count, nil, 0, 0, CCModeOptions(kCCModeOptionCTR_BE), &cryptor).check() + } + } + try input.pointer { encryptedBytes in + try CCCryptorUpdate(cryptor, encryptedBytes, input.count, &outBytes, outBytes.count, &outLength).check() + } + length += outLength + try CCCryptorFinal(cryptor, &outBytes + outLength, outBytes.count, &outLength).check() + length += outLength + + return Data(bytes: UnsafePointer(outBytes), count: length) + } + + static func createKey(password: Data, salt: Data) throws -> Data { + let length = kCCKeySizeAES256 + var status = Int32(0) + var derivedBytes = [UInt8](repeating: 0, count: length) + password.withUnsafeBytes { (passwordBytes: UnsafePointer!) in + salt.withUnsafeBytes { (saltBytes: UnsafePointer!) in + status = CCKeyDerivationPBKDF(CCPBKDFAlgorithm(kCCPBKDF2), // algorithm + passwordBytes, // password + password.count, // passwordLen + saltBytes, // salt + salt.count, // saltLen + CCPseudoRandomAlgorithm(kCCPRFHmacAlgSHA1), // prf + 10000, // rounds + &derivedBytes, // derivedKey + length) // derivedKeyLen + } + } + guard status == 0 else { + throw Error.keyGeneration(status: Int(status)) + } + return Data(bytes: UnsafePointer(derivedBytes), count: length) + } + + static func randomIv() -> Data { + return randomData(length: kCCBlockSizeAES128) + } + + static func randomSalt() -> Data { + return randomData(length: 8) + } + + static func randomData(length: Int) -> Data { + var data = Data(count: length) + let status = data.withUnsafeMutableBytes { mutableBytes in + SecRandomCopyBytes(kSecRandomDefault, length, mutableBytes) + } + assert(status == Int32(0)) + return data + } +} diff --git a/Example/Pods/web3swift/Sources/Encryption/Cryptor/Crypto.swift b/Example/Pods/web3swift/Sources/Encryption/Cryptor/Crypto.swift new file mode 100755 index 00000000..90c536fd --- /dev/null +++ b/Example/Pods/web3swift/Sources/Encryption/Cryptor/Crypto.swift @@ -0,0 +1,119 @@ +// +// Crypto.swift +// Cryptor +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// 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 Foundation + +/// +/// Implements a simplified API for calculating digests over single buffers +/// +public protocol CryptoDigest { + + /// Calculates a message digest + func digest(using algorithm: Digest.Algorithm) -> Self +} + +/// +/// Extension to the CryptoDigest to return the digest appropriate to the selected algorithm. +/// +extension CryptoDigest { + + /// An MD2 digest of this object + public var md2: Self { + return self.digest(using: .md2) + } + + /// An MD4 digest of this object + public var md4: Self { + return self.digest(using: .md4) + } + + /// An MD5 digest of this object + public var md5: Self { + return self.digest(using: .md5) + } + + /// An SHA1 digest of this object + public var sha1: Self { + return self.digest(using: .sha1) + } + + /// An SHA224 digest of this object + public var sha224: Self { + return self.digest(using: .sha224) + } + + /// An SHA256 digest of this object + public var sha256: Self { + return self.digest(using: .sha256) + } + + /// An SHA384 digest of this object + public var sha384: Self { + return self.digest(using: .sha384) + } + + /// An SHA512 digest of this object + public var sha512: Self { + return self.digest(using: .sha512) + } +} + +/// +/// Extension for Data to return an Data object containing the digest. +/// +extension Data: CryptoDigest { + /// + /// Calculates the Message Digest for this data. + /// + /// - Parameter algorithm: The digest algorithm to use + /// + /// - Returns: An `Data` object containing the message digest + /// + public func digest(using algorithm: Digest.Algorithm) -> Data { + + // This force unwrap may look scary but for CommonCrypto this cannot fail. + // The API allows for optionals to support the OpenSSL implementation which can. + return self.withUnsafeBytes() { (buffer: UnsafePointer) -> Data in + + let result = (Digest(using: algorithm).update(from: buffer, byteCount: self.count)?.final())! + let data = type(of: self).init(bytes: result, count: result.count) + return data + } + } +} + +/// +/// Extension for String to return a String containing the digest. +/// +extension String: CryptoDigest { + /// + /// Calculates the Message Digest for this string. + /// The string is converted to raw data using UTF8. + /// + /// - Parameter algorithm: The digest algorithm to use + /// + /// - Returns: A hex string of the calculated digest + /// + public func digest(using algorithm: Digest.Algorithm) -> String { + + // This force unwrap may look scary but for CommonCrypto this cannot fail. + // The API allows for optionals to support the OpenSSL implementation which can. + let result = (Digest(using: algorithm).update(string: self as String)?.final())! + return CryptoUtils.hexString(from: result) + + } +} diff --git a/Example/Pods/web3swift/Sources/Encryption/Cryptor/Cryptor.swift b/Example/Pods/web3swift/Sources/Encryption/Cryptor/Cryptor.swift new file mode 100755 index 00000000..1f3bf255 --- /dev/null +++ b/Example/Pods/web3swift/Sources/Encryption/Cryptor/Cryptor.swift @@ -0,0 +1,71 @@ +// +// Cryptor.swift +// Cryptor +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// 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 Foundation + +/// +/// Encrypts or decrypts, accumulating result. +/// +/// Useful for small in-memory buffers. +/// +/// For large files or network streams use StreamCryptor. +/// +public class Cryptor: StreamCryptor, Updatable { + + /// Internal accumulator for gathering data from the update() and final() functions. + var accumulator: [UInt8] = [] + + /// + /// Retrieves the encrypted or decrypted data. + /// + ///- Returns: the encrypted or decrypted data or nil if an error occured. + /// + public func final() -> [UInt8]? { + + let byteCount = Int(self.getOutputLength(inputByteCount: 0, isFinal: true)) + var dataOut = Array(repeating: 0, count:byteCount) + var dataOutMoved = 0 + (dataOutMoved, self.status) = final(byteArrayOut: &dataOut) + if self.status != .success { + return nil + } + accumulator += dataOut[0.. Self? { + + let outputLength = Int(self.getOutputLength(inputByteCount: byteCount, isFinal: false)) + var dataOut = Array(repeating: 0, count:outputLength) + var dataOutMoved = 0 + _ = update(bufferIn: buffer, byteCountIn: byteCount, bufferOut: &dataOut, byteCapacityOut: dataOut.count, byteCountOut: &dataOutMoved) + if self.status != .success { + return nil + } + accumulator += dataOut[0..(initializer:CC_MD2_Init, updater:CC_MD2_Update, finalizer:CC_MD2_Final, length:CC_MD2_DIGEST_LENGTH) + #elseif os(Linux) + fatalError("MD2 digest not supported by OpenSSL") + #endif + + case .md4: + #if os(macOS) || os(iOS) || os(tvOS) || os(watchOS) + engine = DigestEngineCC(initializer:CC_MD4_Init, updater:CC_MD4_Update, finalizer:CC_MD4_Final, length:CC_MD4_DIGEST_LENGTH) + #elseif os(Linux) + engine = DigestEngineCC(initializer:MD4_Init, updater:MD4_Update, finalizer:MD4_Final, length:MD4_DIGEST_LENGTH) + #endif + + case .md5: + #if os(macOS) || os(iOS) || os(tvOS) || os(watchOS) + engine = DigestEngineCC(initializer:CC_MD5_Init, updater:CC_MD5_Update, finalizer:CC_MD5_Final, length:CC_MD5_DIGEST_LENGTH) + #elseif os(Linux) + engine = DigestEngineCC(initializer:MD5_Init, updater:MD5_Update, finalizer:MD5_Final, length:MD5_DIGEST_LENGTH) + #endif + + case .sha1: + #if os(macOS) || os(iOS) || os(tvOS) || os(watchOS) + engine = DigestEngineCC(initializer:CC_SHA1_Init, updater:CC_SHA1_Update, finalizer:CC_SHA1_Final, length:CC_SHA1_DIGEST_LENGTH) + #elseif os(Linux) + engine = DigestEngineCC(initializer:SHA1_Init, updater:SHA1_Update, finalizer:SHA1_Final, length:SHA_DIGEST_LENGTH) + #endif + + case .sha224: + #if os(macOS) || os(iOS) || os(tvOS) || os(watchOS) + engine = DigestEngineCC(initializer:CC_SHA224_Init, updater:CC_SHA224_Update, finalizer:CC_SHA224_Final, length:CC_SHA224_DIGEST_LENGTH) + #elseif os(Linux) + engine = DigestEngineCC(initializer:SHA224_Init, updater:SHA224_Update, finalizer:SHA224_Final, length:SHA224_DIGEST_LENGTH) + #endif + + case .sha256: + #if os(macOS) || os(iOS) || os(tvOS) || os(watchOS) + engine = DigestEngineCC(initializer:CC_SHA256_Init, updater:CC_SHA256_Update, finalizer:CC_SHA256_Final, length:CC_SHA256_DIGEST_LENGTH) + #elseif os(Linux) + engine = DigestEngineCC(initializer: SHA256_Init, updater:SHA256_Update, finalizer:SHA256_Final, length:SHA256_DIGEST_LENGTH) + #endif + + case .sha384: + #if os(macOS) || os(iOS) || os(tvOS) || os(watchOS) + engine = DigestEngineCC(initializer:CC_SHA384_Init, updater:CC_SHA384_Update, finalizer:CC_SHA384_Final, length:CC_SHA384_DIGEST_LENGTH) + #elseif os(Linux) + engine = DigestEngineCC(initializer:SHA384_Init, updater:SHA384_Update, finalizer:SHA384_Final, length:SHA384_DIGEST_LENGTH) + #endif + + case .sha512: + #if os(macOS) || os(iOS) || os(tvOS) || os(watchOS) + engine = DigestEngineCC(initializer:CC_SHA512_Init, updater:CC_SHA512_Update, finalizer:CC_SHA512_Final, length:CC_SHA512_DIGEST_LENGTH) + #elseif os(Linux) + engine = DigestEngineCC(initializer:SHA512_Init, updater:SHA512_Update, finalizer:SHA512_Final, length:SHA512_DIGEST_LENGTH) + #endif + } + } + + /// + /// Low-level update routine. Updates the message digest calculation with + /// the contents of a byte buffer. + /// + /// - Parameters: + /// - buffer: The buffer + /// - byteCount: Number of bytes in buffer + /// + /// - Returns: This Digest object (for optional chaining) + /// + public func update(from buffer: UnsafeRawPointer, byteCount: size_t) -> Self? { + + engine.update(buffer: buffer, byteCount: CC_LONG(byteCount)) + return self + } + + /// + /// Completes the calculate of the messge digest + /// + /// - Returns: The message digest + /// + public func final() -> [UInt8] { + + return engine.final() + } +} + +// MARK: Internal Classes + +/// +/// Defines the interface between the Digest class and an +/// algorithm specific DigestEngine +/// +private protocol DigestEngine { + + /// + /// Update method + /// + /// - Parameters: + /// - buffer: The buffer to add. + /// - byteCount: The length of the buffer. + /// + func update(buffer: UnsafeRawPointer, byteCount: CC_LONG) + + /// + /// Finalizer routine + /// + /// - Returns: Byte array containing the digest. + /// + func final() -> [UInt8] +} + +/// +/// Wraps the underlying algorithm specific structures and calls +/// in a generic interface. +/// +/// - Parameter CTX: The context for the digest. +/// +private class DigestEngineCC: DigestEngine { + + typealias Context = UnsafeMutablePointer + typealias Buffer = UnsafeRawPointer + typealias Digest = UnsafeMutablePointer + typealias Initializer = (Context) -> (Int32) + typealias Updater = (Context, Buffer, CC_LONG) -> (Int32) + typealias Finalizer = (Digest, Context) -> (Int32) + + let context = Context.allocate(capacity: 1) + var initializer: Initializer + var updater: Updater + var finalizer: Finalizer + var length: Int32 + + /// + /// Default initializer + /// + /// - Parameters: + /// - initializer: The digest initializer routine. + /// - updater: The digest updater routine. + /// - finalizer: The digest finalizer routine. + /// - length: The digest length. + /// + init(initializer: @escaping Initializer, updater: @escaping Updater, finalizer: @escaping Finalizer, length: Int32) { + + self.initializer = initializer + self.updater = updater + self.finalizer = finalizer + self.length = length + _ = initializer(context) + } + + /// + /// Cleanup + /// + deinit { + + #if swift(>=4.1) + context.deallocate() + #else + context.deallocate(capacity: 1) + #endif + } + + /// + /// Update method + /// + /// - Parameters: + /// - buffer: The buffer to add. + /// - byteCount: The length of the buffer. + /// + func update(buffer: Buffer, byteCount: CC_LONG) { + + _ = updater(context, buffer, byteCount) + } + + /// + /// Finalizer routine + /// + /// - Returns: Byte array containing the digest. + /// + func final() -> [UInt8] { + + let digestLength = Int(self.length) + var digest = Array(repeating: 0, count:digestLength) + _ = finalizer(&digest, context) + return digest + } +} + + + + + diff --git a/Example/Pods/web3swift/Sources/Encryption/Cryptor/HMAC.swift b/Example/Pods/web3swift/Sources/Encryption/Cryptor/HMAC.swift new file mode 100755 index 00000000..3ffc26ff --- /dev/null +++ b/Example/Pods/web3swift/Sources/Encryption/Cryptor/HMAC.swift @@ -0,0 +1,379 @@ +// +// HMAC.swift +// Cryptor +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// 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 Foundation + +#if os(macOS) || os(iOS) || os(tvOS) || os(watchOS) + import CommonCrypto +#elseif os(Linux) + import OpenSSL +#endif + +/// +/// Calculates a cryptographic Hash-Based Message Authentication Code (HMAC). +/// +public class HMAC: Updatable { + + /// + /// Enumerates available algorithms. + /// + public enum Algorithm { + + /// Message Digest 5 + case md5 + + /// Secure Hash Algorithm 1 + case sha1 + + /// Secure Hash Algorithm 2 224-bit + case sha224 + + /// Secure Hash Algorithm 2 256-bit + case sha256 + + /// Secure Hash Algorithm 2 384-bit + case sha384 + + /// Secure Hash Algorithm 2 512-bit + case sha512 + + #if os(macOS) || os(iOS) || os(tvOS) || os(watchOS) + + static let fromNative: [CCHmacAlgorithm: Algorithm] = [ + CCHmacAlgorithm(kCCHmacAlgSHA1): .sha1, + CCHmacAlgorithm(kCCHmacAlgSHA1): .md5, + CCHmacAlgorithm(kCCHmacAlgSHA256): .sha256, + CCHmacAlgorithm(kCCHmacAlgSHA384): .sha384, + CCHmacAlgorithm(kCCHmacAlgSHA512): .sha512, + CCHmacAlgorithm(kCCHmacAlgSHA224): .sha224 + ] + + static func fromNativeValue(nativeAlg: CCHmacAlgorithm) -> Algorithm? { + + return fromNative[nativeAlg] + } + + func nativeValue() -> CCHmacAlgorithm { + + switch self { + + case .sha1: + return CCHmacAlgorithm(kCCHmacAlgSHA1) + case .md5: + return CCHmacAlgorithm(kCCHmacAlgMD5) + case .sha224: + return CCHmacAlgorithm(kCCHmacAlgSHA224) + case .sha256: + return CCHmacAlgorithm(kCCHmacAlgSHA256) + case .sha384: + return CCHmacAlgorithm(kCCHmacAlgSHA384) + case .sha512: + return CCHmacAlgorithm(kCCHmacAlgSHA512) + } + } + + #elseif os(Linux) + + #if swift(>=4.2) + + func nativeValue() -> OpaquePointer? { + + switch self { + + case .sha1: + return .init(EVP_sha1()) + case .md5: + return .init(EVP_md5()) + case .sha224: + return .init(EVP_sha224()) + case .sha256: + return .init(EVP_sha256()) + case .sha384: + return .init(EVP_sha384()) + case .sha512: + return .init(EVP_sha512()) + } + } + + #else + + func nativeValue() -> UnsafePointer { + + switch self { + + case .sha1: + return EVP_sha1() + case .md5: + return EVP_md5() + case .sha224: + return EVP_sha224() + case .sha256: + return EVP_sha256() + case .sha384: + return EVP_sha384() + case .sha512: + return EVP_sha512() + } + } + + #endif + + #endif + + /// + /// Obtains the digest length produced by this algorithm (in bytes). + /// + public func digestLength() -> Int { + + #if os(macOS) || os(iOS) || os(tvOS) || os(watchOS) + + switch self { + + case .sha1: + return Int(CC_SHA1_DIGEST_LENGTH) + case .md5: + return Int(CC_MD5_DIGEST_LENGTH) + case .sha224: + return Int(CC_SHA224_DIGEST_LENGTH) + case .sha256: + return Int(CC_SHA256_DIGEST_LENGTH) + case .sha384: + return Int(CC_SHA384_DIGEST_LENGTH) + case .sha512: + return Int(CC_SHA512_DIGEST_LENGTH) + } + + #elseif os(Linux) + + switch self { + + case .sha1: + return Int(SHA_DIGEST_LENGTH) + case .md5: + return Int(MD5_DIGEST_LENGTH) + case .sha224: + return Int(SHA224_DIGEST_LENGTH) + case .sha256: + return Int(SHA256_DIGEST_LENGTH) + case .sha384: + return Int(SHA384_DIGEST_LENGTH) + case .sha512: + return Int(SHA512_DIGEST_LENGTH) + } + + #endif + + } + } + + /// Context + #if os(macOS) || os(iOS) || os(tvOS) || os(watchOS) + + typealias Context = UnsafeMutablePointer + + #elseif os(Linux) + + #if swift(>=4.2) + + typealias Context = OpaquePointer? + + #else + + typealias Context = UnsafeMutablePointer + + #endif + + #endif + + /// Status of the calculation + public internal(set) var status: Status = .success + + #if swift(>=4.2) && os(Linux) + private let context = HMAC_CTX_new_wrapper() + #else + private let context = Context.allocate(capacity: 1) + #endif + private var algorithm: Algorithm + + // MARK: Lifecycle Methods + + /// + /// Creates a new HMAC instance with the specified algorithm and key. + /// + /// - Parameters: + /// - algorithm: Selects the algorithm + /// - keyBuffer: Specifies pointer to the key + /// - keyByteCount: Number of bytes on keyBuffer + /// + init(using algorithm: Algorithm, keyBuffer: UnsafeRawPointer, keyByteCount: Int) { + + self.algorithm = algorithm + #if os(macOS) || os(iOS) || os(tvOS) || os(watchOS) + CCHmacInit(context, algorithm.nativeValue(), keyBuffer, size_t(keyByteCount)) + #elseif os(Linux) + #if swift(>=4.2) + HMAC_Init_wrapper(context, keyBuffer, Int32(keyByteCount), .make(optional: algorithm.nativeValue())) + #else + HMAC_Init(context, keyBuffer, Int32(keyByteCount), .make(optional: algorithm.nativeValue())) + #endif + #endif + } + + /// + /// Creates a new HMAC instance with the specified algorithm and key. + /// + /// - Parameters: + /// - algorithm: Selects the algorithm + /// - key: Specifies the key as Data + /// + public init(using algorithm: Algorithm, key: Data) { + + self.algorithm = algorithm + #if os(macOS) || os(iOS) || os(tvOS) || os(watchOS) + key.withUnsafeBytes() { (buffer: UnsafePointer) in + CCHmacInit(context, algorithm.nativeValue(), buffer, size_t(key.count)) + } + #elseif os(Linux) + _ = key.withUnsafeBytes() { (buffer: UnsafePointer) in + #if swift(>=4.2) + HMAC_Init_wrapper(context, buffer, Int32(key.count), .make(optional: algorithm.nativeValue())) + #else + HMAC_Init(context, buffer, Int32(key.count), .make(optional: algorithm.nativeValue())) + #endif + } + #endif + } + + /// + /// Creates a new HMAC instance with the specified algorithm and key. + /// + /// - Parameters: + /// - algorithm: Selects the algorithm + /// - key: Specifies the key as NSData + /// + public init(using algorithm: Algorithm, key: NSData) { + + self.algorithm = algorithm + #if os(macOS) || os(iOS) || os(tvOS) || os(watchOS) + CCHmacInit(context, algorithm.nativeValue(), key.bytes, size_t(key.length)) + #elseif os(Linux) + #if swift(>=4.2) + HMAC_Init_wrapper(context, key.bytes, Int32(key.length), .make(optional: algorithm.nativeValue())) + #else + HMAC_Init(context, key.bytes, Int32(key.length), .make(optional: algorithm.nativeValue())) + #endif + #endif + } + + /// + /// Creates a new HMAC instance with the specified algorithm and key. + /// + /// - Parameters: + /// - algorithm: Selects the algorithm + /// - key: Specifies the key as byte array. + /// + public init(using algorithm: Algorithm, key: [UInt8]) { + + self.algorithm = algorithm + #if os(macOS) || os(iOS) || os(tvOS) || os(watchOS) + CCHmacInit(context, algorithm.nativeValue(), key, size_t(key.count)) + #elseif os(Linux) + #if swift(>=4.2) + HMAC_Init_wrapper(context, key, Int32(key.count), .make(optional: algorithm.nativeValue())) + #else + HMAC_Init(context, key, Int32(key.count), .make(optional: algorithm.nativeValue())) + #endif + #endif + } + + /// + /// Creates a new HMAC instance with the specified algorithm and key string. + /// The key string is converted to bytes using UTF8 encoding. + /// + /// - Parameters: + /// - algorithm: Selects the algorithm + /// - key: Specifies the key as String + /// + public init(using algorithm: Algorithm, key: String) { + + self.algorithm = algorithm + #if os(macOS) || os(iOS) || os(tvOS) || os(watchOS) + CCHmacInit(context, algorithm.nativeValue(), key, size_t(key.lengthOfBytes(using: String.Encoding.utf8))) + #elseif os(Linux) + #if swift(>=4.2) + HMAC_Init_wrapper(context, key, Int32(key.utf8.count), .make(optional: algorithm.nativeValue())) + #else + HMAC_Init(context, key, Int32(key.utf8.count), .make(optional: algorithm.nativeValue())) + #endif + #endif + } + + /// + /// Cleanup + /// + deinit { + #if os(Linux) && swift(>=4.2) + HMAC_CTX_free_wrapper(.make(optional: context)) + #else + #if os(Linux) + HMAC_CTX_cleanup(context) + #endif + #if swift(>=4.1) + context.deallocate() + #else + context.deallocate(capacity: 1) + #endif + #endif + } + + // MARK: Public Methods + + /// + /// Updates the calculation of the HMAC with the contents of a buffer. + /// + /// - Parameter buffer: Update buffer + /// + /// - Returns: The 'in-progress' calculated HMAC + /// + public func update(from buffer: UnsafeRawPointer, byteCount: size_t) -> Self? { + + #if os(macOS) || os(iOS) || os(tvOS) || os(watchOS) + CCHmacUpdate(context, buffer, byteCount) + #elseif os(Linux) + HMAC_Update(context, buffer.assumingMemoryBound(to: UInt8.self), byteCount) + #endif + return self + } + + /// + /// Finalizes the HMAC calculation + /// + /// - Returns: The final calculated HMAC + /// + public func final() -> [UInt8] { + + var hmac = Array(repeating: 0, count:algorithm.digestLength()) + #if os(macOS) || os(iOS) || os(tvOS) || os(watchOS) + CCHmacFinal(context, &hmac) + #elseif os(Linux) + var length: UInt32 = 0 + HMAC_Final(context, &hmac, &length) + #endif + return hmac + } +} + diff --git a/Example/Pods/web3swift/Sources/Encryption/Cryptor/KeyDerivation.swift b/Example/Pods/web3swift/Sources/Encryption/Cryptor/KeyDerivation.swift new file mode 100755 index 00000000..133567c2 --- /dev/null +++ b/Example/Pods/web3swift/Sources/Encryption/Cryptor/KeyDerivation.swift @@ -0,0 +1,234 @@ +// +// KeyDerivation.swift +// Cryptor +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// 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 Foundation + +#if os(macOS) || os(iOS) || os(tvOS) || os(watchOS) + import CommonCrypto +#elseif os(Linux) + import OpenSSL +#endif + +/// +/// Derives key material from a password or passphrase. +/// +public class PBKDF { + + /// Enumerates available pseudo random algorithms + public enum PseudoRandomAlgorithm { + + /// Secure Hash Algorithm 1 + case sha1 + + /// Secure Hash Algorithm 2 224-bit + case sha224 + + /// Secure Hash Algorithm 2 256-bit + case sha256 + + /// Secure Hash Algorithm 2 384-bit + case sha384 + + /// Secure Hash Algorithm 2 512-bit + case sha512 + + #if os(macOS) || os(iOS) || os(tvOS) || os(watchOS) + /// Return the OS native value + func nativeValue() -> CCPseudoRandomAlgorithm { + + switch self { + + case .sha1: + return CCPseudoRandomAlgorithm(kCCPRFHmacAlgSHA1) + case .sha224: + return CCPseudoRandomAlgorithm(kCCPRFHmacAlgSHA224) + case .sha256: + return CCPseudoRandomAlgorithm(kCCPRFHmacAlgSHA256) + case .sha384: + return CCPseudoRandomAlgorithm(kCCPRFHmacAlgSHA384) + case .sha512: + return CCPseudoRandomAlgorithm(kCCPRFHmacAlgSHA512) + } + } + + #elseif os(Linux) + + #if swift(>=4.2) + + /// Return the OS native value + func nativeValue() -> OpaquePointer? { + + switch self { + + case .sha1: + return .init(EVP_sha1()) + case .sha224: + return .init(EVP_sha224()) + case .sha256: + return .init(EVP_sha256()) + case .sha384: + return .init(EVP_sha384()) + case .sha512: + return .init(EVP_sha512()) + } + } + + #else + + /// Return the OS native value + func nativeValue() -> UnsafePointer { + + switch self { + + case .sha1: + return EVP_sha1() + case .sha224: + return EVP_sha224() + case .sha256: + return EVP_sha256() + case .sha384: + return EVP_sha384() + case .sha512: + return EVP_sha512() + } + } + + #endif + #endif + } + + /// + /// Determines the (approximate) number of iterations of the key derivation algorithm that need + /// to be run to achieve a particular delay (or calculation time). + /// + /// - Parameters: + /// - passwordLength: Password length in bytes + /// - saltLength: Salt length in bytes + /// - algorithm: The PseudoRandomAlgorithm to use + /// - derivedKeyLength: The desired key length + /// - msec: The desired calculation time + /// + /// - Returns: The number of times the algorithm should be run + /// + public class func calibrate(passwordLength: Int, saltLength: Int, algorithm: PseudoRandomAlgorithm, derivedKeyLength: Int, msec: UInt32) -> UInt { + + #if os(macOS) || os(iOS) || os(tvOS) || os(watchOS) + return UInt(CCCalibratePBKDF(CCPBKDFAlgorithm(kCCPBKDF2), passwordLength, saltLength, algorithm.nativeValue(), derivedKeyLength, msec)) + #elseif os(Linux) + // Value as per RFC 2898. + return UInt(1000 * UInt(msec)) + #endif + } + + + /// + /// Derives key material from a password and salt. + /// + /// - Parameters: + /// - password: The password string, will be converted using UTF8 + /// - salt: The salt string will be converted using UTF8 + /// - prf: The pseudo random function + /// - round: The number of rounds + /// - derivedKeyLength: The length of the desired derived key, in bytes. + /// + /// - Returns: The derived key + /// + public class func deriveKey(fromPassword password: String, salt: String, prf: PseudoRandomAlgorithm, rounds: uint, derivedKeyLength: UInt) throws -> [UInt8] { + + var derivedKey = Array(repeating: 0, count:Int(derivedKeyLength)) + #if os(macOS) || os(iOS) || os(tvOS) || os(watchOS) + let status: Int32 = CCKeyDerivationPBKDF(CCPBKDFAlgorithm(kCCPBKDF2), password, password.utf8.count, salt, salt.utf8.count, prf.nativeValue(), rounds, &derivedKey, derivedKey.count) + if status != Int32(kCCSuccess) { + + throw CryptorError.fail(status, "ERROR: CCKeyDerivationPBDK failed with status \(status).") + } + #elseif os(Linux) + let status = PKCS5_PBKDF2_HMAC(password, Int32(password.utf8.count), salt, Int32(salt.utf8.count), Int32(rounds), .make(optional: prf.nativeValue()), Int32(derivedKey.count), &derivedKey) + if status != 1 { + let error = ERR_get_error() + + throw CryptorError.fail(Int32(error), "ERROR: PKCS5_PBKDF2_HMAC failed, reason: \(errToString(ERR_error_string(error, nil)))") + } + #endif + return derivedKey + } + + /// + /// Derives key material from a password and salt. + /// + /// - Parameters: + /// - password: The password string, will be converted using UTF8 + /// - salt: The salt array of bytes + /// - prf: The pseudo random function + /// - round: The number of rounds + /// - derivedKeyLength: The length of the desired derived key, in bytes. + /// + /// - Returns: The derived key + /// + public class func deriveKey(fromPassword password: String, salt: [UInt8], prf: PseudoRandomAlgorithm, rounds: uint, derivedKeyLength: UInt) throws -> [UInt8] { + + var derivedKey = Array(repeating: 0, count:Int(derivedKeyLength)) + #if os(macOS) || os(iOS) || os(tvOS) || os(watchOS) + let status: Int32 = CCKeyDerivationPBKDF(CCPBKDFAlgorithm(kCCPBKDF2), password, password.utf8.count, salt, salt.count, prf.nativeValue(), rounds, &derivedKey, derivedKey.count) + if status != Int32(kCCSuccess) { + + throw CryptorError.fail(status, "ERROR: CCKeyDerivationPBDK failed with status \(status).") + } + #elseif os(Linux) + let status = PKCS5_PBKDF2_HMAC(password, Int32(password.utf8.count), salt, Int32(salt.count), Int32(rounds), .make(optional: prf.nativeValue()), Int32(derivedKey.count), &derivedKey) + if status != 1 { + let error = ERR_get_error() + + throw CryptorError.fail(Int32(error), "ERROR: PKCS5_PBKDF2_HMAC failed, reason: \(errToString(ERR_error_string(error, nil)))") + } + #endif + return derivedKey + } + + /// + /// Derives key material from a password buffer. + /// + /// - Parameters: + /// - password: Pointer to the password buffer + /// - passwordLength: Password length in bytes + /// - salt: Pointer to the salt buffer + /// - saltLength: Salt length in bytes + /// - prf: The PseudoRandomAlgorithm to use + /// - rounds: The number of rounds of the algorithm to use + /// - derivedKey: Pointer to the derived key buffer. + /// - derivedKeyLength: The desired key length + /// + /// - Returns: The number of times the algorithm should be run + /// + public class func deriveKey(fromPassword password: UnsafePointer, passwordLen: Int, salt: UnsafePointer, saltLen: Int, prf: PseudoRandomAlgorithm, rounds: uint, derivedKey: UnsafeMutablePointer, derivedKeyLen: Int) throws { + + #if os(macOS) || os(iOS) || os(tvOS) || os(watchOS) + let status: Int32 = CCKeyDerivationPBKDF(CCPBKDFAlgorithm(kCCPBKDF2), password, passwordLen, salt, saltLen, prf.nativeValue(), rounds, derivedKey, derivedKeyLen) + if status != Int32(kCCSuccess) { + + throw CryptorError.fail(status, "ERROR: CCKeyDerivationPBDK failed with status \(status).") + } + #elseif os(Linux) + let status = PKCS5_PBKDF2_HMAC(password, Int32(passwordLen), salt, Int32(saltLen), Int32(rounds), .make(optional: prf.nativeValue()), Int32(derivedKeyLen), derivedKey) + if status != 1 { + let error = ERR_get_error() + + throw CryptorError.fail(Int32(error), "ERROR: PKCS5_PBKDF2_HMAC failed, reason: \(errToString(ERR_error_string(error, nil)))") + } + #endif + } +} diff --git a/Example/Pods/web3swift/Sources/Encryption/Cryptor/Random.swift b/Example/Pods/web3swift/Sources/Encryption/Cryptor/Random.swift new file mode 100755 index 00000000..33266c63 --- /dev/null +++ b/Example/Pods/web3swift/Sources/Encryption/Cryptor/Random.swift @@ -0,0 +1,106 @@ +// +// Random.swift +// Cryptor +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// 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 Foundation + +#if os(macOS) || os(iOS) || os(tvOS) || os(watchOS) + import CommonCrypto +#elseif os(Linux) + import OpenSSL +#endif + +public typealias RNGStatus = Status + +/// +/// Generates buffers of random bytes. +/// +public class Random { + + /// + /// Wraps native call. + /// + /// - Note: CCRNGStatus is typealiased to CCStatus but this routine can only return kCCSuccess or kCCRNGFailure + /// + /// - Parameter bytes: A pointer to the buffer that will receive the bytes + /// + /// - Returns: `.success` or `.rngFailure` as appropriate. + /// + public class func generate(bytes: UnsafeMutablePointer, byteCount: Int) -> RNGStatus { + + #if os(macOS) || os(iOS) || os(tvOS) || os(watchOS) + let statusCode = CCRandomGenerateBytes(bytes, byteCount) + guard let status = Status(rawValue: statusCode) else { + fatalError("CCRandomGenerateBytes returned unexpected status code: \(statusCode)") + } + return status + #elseif os(Linux) + let statusCode = RAND_bytes(bytes, Int32(byteCount)) + if statusCode != 1 { + + let errCode = ERR_get_error() + return Status.rngFailure(errCode) + } + return Status.success + #endif + } + + /// + /// Generates an array of random bytes. + /// + /// - Parameter bytesCount: Number of random bytes to generate + /// + /// - Returns: an array of random bytes + /// + /// - Throws: `.success` or an `.rngFailure` on failure + /// + public class func generate(byteCount: Int) throws -> [UInt8] { + + guard byteCount > 0 else { + throw RNGStatus.paramError + } + + var bytes = Array(repeating: UInt8(0), count:byteCount) + let status = generate(bytes: &bytes, byteCount: byteCount) + + if status != .success { + throw status + } + + return bytes + } + + /// + /// A version of generateBytes that always throws an error. + /// + /// Use it to test that code handles this. + /// + /// - Parameter bytesCount: Number of random bytes to generate + /// + /// - Returns: An array of random bytes + /// + public class func generateBytesThrow(byteCount: Int) throws -> [UInt8] { + + if byteCount <= 0 { + + fatalError("generate: byteCount must be positve and non-zero") + } + var bytes: [UInt8] = Array(repeating: UInt8(0), count:byteCount) + let status = generate(bytes: &bytes, byteCount: byteCount) + throw status + //return bytes + } +} diff --git a/Example/Pods/web3swift/Sources/Encryption/Cryptor/SSLPointerTricks.swift b/Example/Pods/web3swift/Sources/Encryption/Cryptor/SSLPointerTricks.swift new file mode 100644 index 00000000..d986598d --- /dev/null +++ b/Example/Pods/web3swift/Sources/Encryption/Cryptor/SSLPointerTricks.swift @@ -0,0 +1,100 @@ +//===----------------------------------------------------------------------===// +// +// This source file is taken from SwiftNIO open source project +// +// Copyright (c) 2017-2018 Apple Inc. and the SwiftNIO project authors +// Licensed under Apache License v2.0 +// +//===----------------------------------------------------------------------===// + +// MARK:- Awful code begins here +// Hello dear reader. Let me explain what we're doing here. +// +// From OpenSSL 1.0 to OpenSSL 1.1 one of the major breaking changes was the so-called +// "great opaquifiying". Essentially, OpenSSL took all of its public structures and made +// them opaque, such that they cannot be introspected from client code. This is a great +// forward step, and brings them more in line with modern C library practices. +// +// However, it's an *enormous* inconvenience from Swift code. This is because the Swift +// translation of the C type `SSL_CTX *` changed from `UnsafeMutablePointer` to +// `OpaquePointer`. +// +// This change exists for reasonable enough reasons in Swift land (see +// https://forums.swift.org/t/opaque-pointers-in-swift/6875 for a discussion), but +// nonetheless causes enormous problems in our codebase. +// +// Our cheap way out is to make everything an OpaquePointer, and then provide initializers +// between OpaquePointer and the typed pointers. This allows us to tolerate either pointer +// type in our Swift code by bridging them over to OpaquePointer and back, and lets the +// compiler worry about how exactly to make that work. +// +// Now, in fact, Swift already has initializers between the pointer types. What it does +// not have is self-initializers: the ability to create an `OpaquePointer` from an `OpaquePointer`, +// or an `UnsafePointer` from an `UnsafePointer`. We add those two initializers here. +// We also add a special "make" function that exists to handle the special case of optional pointer +// values, which we mostly encounter in the ALPN callbacks. +// +// The *downside* of this approach is that we totally break the pointer type system. It becomes +// trivially possible to alias a pointer of type T to type U through two calls to init. This +// is not a thing we want to widely promote. For this reason, these extensions are hidden in +// this file, where we can laugh and jeer at them and generally make them feel bad about +// themselves. +// +// Hopefully, in time, these extensions can be removed. + +extension UnsafePointer { + init(_ ptr: UnsafePointer) { + self = ptr + } + + static func make(optional ptr: UnsafePointer?) -> UnsafePointer? { + return ptr.map(UnsafePointer.init) + } + + static func make(optional ptr: OpaquePointer?) -> UnsafePointer? { + return ptr.map(UnsafePointer.init) + } +} + +extension UnsafeMutablePointer { + init(_ ptr: UnsafeMutableRawPointer) { + let x = UnsafeMutablePointer(bitPattern: UInt(bitPattern: ptr))! + self = x + } + + static func make(optional ptr: UnsafeMutablePointer?) -> UnsafeMutablePointer? { + return ptr.map(UnsafeMutablePointer.init) + } + + static func make(optional ptr: UnsafeMutableRawPointer?) -> UnsafeMutablePointer? { + return ptr.map(UnsafeMutablePointer.init) + } + + static func make(optional ptr: OpaquePointer?) -> UnsafeMutablePointer? { + return ptr.map(UnsafeMutablePointer.init) + } +} + +extension UnsafeMutableRawPointer { + static func make(optional ptr: OpaquePointer?) -> UnsafeMutableRawPointer? { + return ptr.map(UnsafeMutableRawPointer.init) + } +} + +extension OpaquePointer { + init(_ ptr: OpaquePointer) { + self = ptr + } + + static func make(optional ptr: OpaquePointer?) -> OpaquePointer? { + return ptr.map(OpaquePointer.init) + } + + static func make(optional ptr: UnsafeMutableRawPointer?) -> OpaquePointer? { + return ptr.map(OpaquePointer.init) + } + + static func make(optional ptr: UnsafeMutablePointer?) -> OpaquePointer? { + return ptr.map(OpaquePointer.init) + } +} diff --git a/Example/Pods/web3swift/Sources/Encryption/Cryptor/Status.swift b/Example/Pods/web3swift/Sources/Encryption/Cryptor/Status.swift new file mode 100755 index 00000000..b98214fd --- /dev/null +++ b/Example/Pods/web3swift/Sources/Encryption/Cryptor/Status.swift @@ -0,0 +1,288 @@ +// +// Status.swift +// Cryptor +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// 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 Foundation + +#if os(macOS) || os(iOS) || os(tvOS) || os(watchOS) + import CommonCrypto +#elseif os(Linux) + import OpenSSL +#endif + +#if os(macOS) || os(iOS) || os(tvOS) || os(watchOS) +/// +/// Links the native CommonCryptoStatus enumeration to Swift versions. +/// +public enum Status: CCCryptorStatus, Swift.Error, CustomStringConvertible { + + /// Successful + case success + + /// Parameter Error + case paramError + + /// Buffer too Small + case bufferTooSmall + + /// Memory Failure + case memoryFailure + + /// Alignment Error + case alignmentError + + /// Decode Error + case decodeError + + /// Unimplemented + case unimplemented + + /// Overflow + case overflow + + /// Random Number Generator Err + case rngFailure + + /// + /// Converts this value to a native `CCCryptorStatus` value. + /// + public func toRaw() -> CCCryptorStatus { + + switch self { + + case .success: + return CCCryptorStatus(kCCSuccess) + case .paramError: + return CCCryptorStatus(kCCParamError) + case .bufferTooSmall: + return CCCryptorStatus(kCCBufferTooSmall) + case .memoryFailure: + return CCCryptorStatus(kCCMemoryFailure) + case .alignmentError: + return CCCryptorStatus(kCCAlignmentError) + case .decodeError: + return CCCryptorStatus(kCCDecodeError) + case .unimplemented: + return CCCryptorStatus(kCCUnimplemented) + case .overflow: + return CCCryptorStatus(kCCOverflow) + case .rngFailure: + return CCCryptorStatus(kCCRNGFailure) + } + } + + /// + /// Human readable descriptions of the values. (Not needed in Swift 2.0?) + /// + static let descriptions = [ + success: "Success", + paramError: "ParamError", + bufferTooSmall: "BufferTooSmall", + memoryFailure: "MemoryFailure", + alignmentError: "AlignmentError", + decodeError: "DecodeError", + unimplemented: "Unimplemented", + overflow: "Overflow", + rngFailure: "RNGFailure" + ] + + /// + /// Obtain human-readable string from enum value. + /// + public var description: String { + + return (Status.descriptions[self] != nil) ? Status.descriptions[self]! : "" + } + + /// + /// Create enum value from raw `CCCryptorStatus` value. + /// + public static func fromRaw(status: CCCryptorStatus) -> Status? { + + var from = [ + kCCSuccess: success, + kCCParamError: paramError, + kCCBufferTooSmall: bufferTooSmall, + kCCMemoryFailure: memoryFailure, + kCCAlignmentError: alignmentError, + kCCDecodeError: decodeError, + kCCUnimplemented: unimplemented, + kCCOverflow: overflow, + kCCRNGFailure: rngFailure + ] + + return from[Int(status)] + + } +} + +#elseif os(Linux) + +/// +/// Error status +/// +public enum Status: Swift.Error, CustomStringConvertible { + + /// Success + case success + + /// Unimplemented with reason + case unimplemented(String) + + /// Not supported with reason + case notSupported(String) + + /// Parameter Error + case paramError + + /// Failure with error code + case fail(UInt) + + /// Random Byte Generator Failure with error code + case rngFailure(UInt) + + /// The error code itself + public var code: Int { + + switch self { + + case .success: + return 0 + + case .notSupported: + return -1 + + case .unimplemented: + return -2 + + case .paramError: + return -3 + + case .fail(let code): + return Int(code) + + case .rngFailure(let code): + return Int(code) + } + } + + /// + /// Create enum value from raw `SSL error code` value. + /// + public static func fromRaw(status: UInt) -> Status? { + + return Status.fail(status) + } + + /// + /// Obtain human-readable string for the error code. + /// + public var description: String { + + switch self { + + case .success: + return "No error" + + case .notSupported(let reason): + return "Not supported: \(reason)" + + case .unimplemented(let reason): + return "Not implemented: \(reason)" + + case .paramError: + return "Invalid parameters passed" + + case .fail(let errorCode): + return "ERROR: code: \(errorCode), reason: \(errToString(ERR_error_string(UInt(errorCode), nil)))" + + case .rngFailure(let errorCode): + return "Random Byte Generator ERROR: code: \(errorCode), reason: \(errToString(ERR_error_string(UInt(errorCode), nil)))" + } + } +} + +// MARK: Operators + +func == (lhs: Status, rhs: Status) -> Bool { + + return lhs.code == rhs.code +} + +func != (lhs: Status, rhs: Status) -> Bool { + + return lhs.code != rhs.code +} + +#endif + +/// +/// CryptorError +/// Thrown in caaes where a _fatalError()_ is **NOT** appropriate. +/// +public enum CryptorError: Swift.Error, CustomStringConvertible { + + /// Success + case success + + /// Invalid key size + case invalidKeySize + + /// Invalid IV size + case invalidIVSizeOrLength + + /// Fail with code and string + case fail(Int32, String) + + /// The error code itself + public var errCode: Int32 { + + switch self { + + case .success: + return 0 + + case .invalidKeySize: + return -1 + + case .invalidIVSizeOrLength: + return -2 + + case .fail(let errCode, _): + return Int32(errCode) + } + } + + /// Error Description + public var description: String { + + switch self { + + case .success: + return "Success" + + case .invalidKeySize: + return "Invalid key size." + + case .invalidIVSizeOrLength: + return "Invalid IV size or length." + + case .fail(let (_, reason)): + return reason + } + } +} + diff --git a/Example/Pods/web3swift/Sources/Encryption/Cryptor/StreamCryptor.swift b/Example/Pods/web3swift/Sources/Encryption/Cryptor/StreamCryptor.swift new file mode 100755 index 00000000..2243af51 --- /dev/null +++ b/Example/Pods/web3swift/Sources/Encryption/Cryptor/StreamCryptor.swift @@ -0,0 +1,1040 @@ +// +// StreamCryptor.swift +// Cryptor +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// 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 Foundation + +#if os(macOS) || os(iOS) || os(tvOS) || os(watchOS) + import CommonCrypto +#elseif os(Linux) + import OpenSSL +#endif + +/// +/// Encrypts or decrypts return results as they become available. +/// +/// - Note: The underlying cipher may be a block or a stream cipher. +/// +/// Use for large files or network streams. +/// +/// For small, in-memory buffers Cryptor may be easier to use. +/// +public class StreamCryptor { + + #if os(Linux) + + // + // Key sizes + // + static let kCCKeySizeAES128 = 16 + static let kCCKeySizeAES192 = 24 + static let kCCKeySizeAES256 = 32 + static let kCCKeySizeDES = 8 + static let kCCKeySize3DES = 24 + static let kCCKeySizeMinCAST = 5 + static let kCCKeySizeMaxCAST = 16 + static let kCCKeySizeMinRC2 = 1 + static let kCCKeySizeMaxRC2 = 128 + static let kCCKeySizeMinBlowfish = 8 + static let kCCKeySizeMaxBlowfish = 56 + + // + // Block sizes + // + static let kCCBlockSizeAES128 = 16 + static let kCCBlockSizeDES = 8 + static let kCCBlockSize3DES = 8 + static let kCCBlockSizeCAST = 8 + static let kCCBlockSizeRC2 = 8 + static let kCCBlockSizeBlowfish = 8 + + #endif + + /// + /// Enumerates Cryptor operations + /// + public enum Operation { + + /// Encrypting + case encrypt + + /// Decrypting + case decrypt + + #if os(macOS) || os(iOS) || os(tvOS) || os(watchOS) + + /// Convert to native `CCOperation` + func nativeValue() -> CCOperation { + + switch self { + + case .encrypt: + return CCOperation(kCCEncrypt) + + case .decrypt: + return CCOperation(kCCDecrypt) + } + } + + #elseif os(Linux) + + /// Convert to native value + func nativeValue() -> UInt32 { + + switch self { + + case .encrypt: + return 0 + + case .decrypt: + return 1 + } + } + + #endif + } + + /// + /// Enumerates valid key sizes. + /// + public enum ValidKeySize { + + case fixed(Int) + case discrete([Int]) + case range(Int, Int) + + /// + /// Determines if a given `keySize` is valid for this algorithm. + /// + /// - Parameter keySize: The size to test for validity. + /// + /// - Returns: True if valid, false otherwise. + /// + func isValidKeySize(keySize: Int) -> Bool { + + switch self { + + case .fixed(let fixed): + return (fixed == keySize) + + case .range(let min, let max): + return ((keySize >= min) && (keySize <= max)) + + case .discrete(let values): + return values.contains(keySize) + } + } + + /// + /// Determines the next valid key size; that is, the first valid key size larger + /// than the given value. + /// + /// - Parameter keySize: The size for which the `next` size is desired. + /// + /// - Returns: Will return `nil` if the passed in `keySize` is greater than the max. + /// + func paddedKeySize(keySize: Int) -> Int? { + + switch self { + + case .fixed(let fixed): + return (keySize <= fixed) ? fixed : nil + + case .range(let min, let max): + return (keySize > max) ? nil : ((keySize < min) ? min : keySize) + + case .discrete(let values): + return values.sorted().reduce(nil) { answer, current in + return answer ?? ((current >= keySize) ? current : nil) + } + } + } + + + } + + /// + /// Maps CommonCryptoOptions onto a Swift struct. + /// + public struct Options: OptionSet { + + public typealias RawValue = Int + public let rawValue: RawValue + + /// Convert from a native value (i.e. `0`, `kCCOptionpkcs7Padding`, `kCCOptionECBMode`) + public init(rawValue: RawValue) { + self.rawValue = rawValue + } + + /// Convert from a native value (i.e. `0`, `kCCOptionpkcs7Padding`, `kCCOptionECBMode`) + public init(_ rawValue: RawValue) { + self.init(rawValue: rawValue) + } + + /// No options + public static let none = Options(rawValue: 0) + + #if os(macOS) || os(iOS) || os(tvOS) || os(watchOS) + + /// Use padding. Needed unless the input is a integral number of blocks long. + public static var pkcs7Padding = Options(rawValue:kCCOptionPKCS7Padding) + + /// Electronic Code Book Mode. Don't use this. + public static var ecbMode = Options(rawValue:kCCOptionECBMode) + + #elseif os(Linux) + + /// Use padding. Needed unless the input is a integral number of blocks long. + public static var pkcs7Padding = Options(rawValue:0x0001) + + /// Electronic Code Book Mode. Don't use this. + public static var ecbMode = Options(rawValue:0x0002) + + #endif + } + + /// + /// Enumerates available algorithms + /// + public enum Algorithm { + + #if os(macOS) || os(iOS) || os(tvOS) || os(watchOS) + + /// Advanced Encryption Standard + /// - Note: aes and aes128 are equivalent. + case aes, aes128, aes192, aes256 + + /// Data Encryption Standard + case des + + /// Triple des + case tripleDes + + /// cast + case cast + + /// rc2 + case rc2 + + /// blowfish + case blowfish + + #elseif os(Linux) + + /// Advanced Encryption Standard + /// - Note: aes and aes128 are equivalent. + case aes, aes128, aes192, aes256 + + /// Data Encryption Standard + case des + + /// Triple des + case tripleDes + + /// cast + case cast + + /// rc2 + case rc2 + + /// blowfish + case blowfish + + #endif + + /// Blocksize, in bytes, of algorithm. + public var blockSize: Int { + + switch self { + + case .aes, .aes128, .aes192, .aes256: + return kCCBlockSizeAES128 + + case .des: + return kCCBlockSizeDES + + case .tripleDes: + return kCCBlockSize3DES + + case .cast: + return kCCBlockSizeCAST + + case .rc2: + return kCCBlockSizeRC2 + + case .blowfish: + return kCCBlockSizeBlowfish + } + } + + public var defaultKeySize: Int { + + switch self { + + case .aes, .aes128: + return kCCKeySizeAES128 + + case .aes192: + return kCCKeySizeAES192 + + case .aes256: + return kCCKeySizeAES256 + + case .des: + return kCCKeySizeDES + + case .tripleDes: + return kCCKeySize3DES + + case .cast: + return kCCKeySizeMinCAST + + case .rc2: + return kCCKeySizeMinRC2 + + case .blowfish: + return kCCKeySizeMinBlowfish + } + } + + #if os(macOS) || os(iOS) || os(tvOS) || os(watchOS) + + /// Native, CommonCrypto constant for algorithm. + func nativeValue() -> CCAlgorithm { + + switch self { + + case .aes, .aes128, .aes192, .aes256: + return CCAlgorithm(kCCAlgorithmAES) + + case .des: + return CCAlgorithm(kCCAlgorithmDES) + + case .tripleDes: + return CCAlgorithm(kCCAlgorithm3DES) + + case .cast: + return CCAlgorithm(kCCAlgorithmCAST) + + case .rc2: + return CCAlgorithm(kCCAlgorithmRC2) + + case .blowfish: + return CCAlgorithm(kCCAlgorithmBlowfish) + } + } + + #elseif os(Linux) + + #if swift(>=4.2) + + /// Native, OpenSSL function for algorithm. + func nativeValue(options: Options) -> OpaquePointer? { + + if options == .pkcs7Padding || options == .none { + + switch self { + + case .aes, .aes128: + return .init(EVP_aes_128_cbc()) + + case .aes192: + return .init(EVP_aes_192_cbc()) + + case .aes256: + return .init(EVP_aes_256_cbc()) + + case .des: + return .init(EVP_des_cbc()) + + case .tripleDes: + return .init(EVP_des_ede3_cbc()) + + case .cast: + return .init(EVP_cast5_cbc()) + + case .rc2: + return .init(EVP_rc2_cbc()) + + case .blowfish: + return .init(EVP_bf_cbc()) + } + } + + if options == .ecbMode { + + switch self { + + case .aes, .aes128: + return .init(EVP_aes_128_ecb()) + + case .aes192: + return .init(EVP_aes_192_ecb()) + + case .aes256: + return .init(EVP_aes_256_ecb()) + + case .des: + return .init(EVP_des_ecb()) + + case .tripleDes: + return .init(EVP_des_ede3_ecb()) + + case .cast: + return .init(EVP_cast5_ecb()) + + case .rc2: + return .init(EVP_rc2_ecb()) + + case .blowfish: + return .init(EVP_bf_ecb()) + } + } + + fatalError("Unsupported options and/or algorithm.") + } + + #else + + /// Native, OpenSSL function for algorithm. + func nativeValue(options: Options) -> UnsafePointer { + + if options == .pkcs7Padding || options == .none { + + switch self { + + case .aes, .aes128: + return EVP_aes_128_cbc() + + case .aes192: + return EVP_aes_192_cbc() + + case .aes256: + return EVP_aes_256_cbc() + + case .des: + return EVP_des_cbc() + + case .tripleDes: + return EVP_des_ede3_cbc() + + case .cast: + return EVP_cast5_cbc() + + case .rc2: + return EVP_rc2_cbc() + + case .blowfish: + return EVP_bf_cbc() + } + } + + if options == .ecbMode { + + switch self { + + case .aes, .aes128: + return EVP_aes_128_ecb() + + case .aes192: + return EVP_aes_192_ecb() + + case .aes256: + return EVP_aes_256_ecb() + + case .des: + return EVP_des_ecb() + + case .tripleDes: + return EVP_des_ede3_ecb() + + case .cast: + return EVP_cast5_ecb() + + case .rc2: + return EVP_rc2_ecb() + + case .blowfish: + return EVP_bf_ecb() + } + } + + fatalError("Unsupported options and/or algorithm.") + } + + #endif + + #endif + + /// + /// Determines the valid key size for this algorithm + /// + /// - Returns: Valid key size for this algorithm. + /// + func validKeySize() -> ValidKeySize { + + #if os(macOS) || os(iOS) || os(tvOS) || os(watchOS) + + switch self { + + case .aes, .aes128, .aes192, .aes256: + return .discrete([kCCKeySizeAES128, kCCKeySizeAES192, kCCKeySizeAES256]) + + case .des: + return .fixed(kCCKeySizeDES) + + case .tripleDes: + return .fixed(kCCKeySize3DES) + + case .cast: + return .range(kCCKeySizeMinCAST, kCCKeySizeMaxCAST) + + case .rc2: + return .range(kCCKeySizeMinRC2, kCCKeySizeMaxRC2) + + case .blowfish: + return .range(kCCKeySizeMinBlowfish, kCCKeySizeMaxBlowfish) + } + + #elseif os(Linux) + + switch self { + + case .aes, .aes128: + return .fixed(kCCKeySizeAES128) + + case .aes192: + return .fixed(kCCKeySizeAES192) + + case .aes256: + return .fixed(kCCKeySizeAES256) + + case .des: + return .fixed(kCCKeySizeDES) + + case .tripleDes: + return .fixed(kCCKeySize3DES) + + case .cast: + return .range(kCCKeySizeMinCAST, kCCKeySizeMaxCAST) + + case .rc2: + return .range(kCCKeySizeMinRC2, kCCKeySizeMaxRC2) + + case .blowfish: + return .range(kCCKeySizeMinBlowfish, kCCKeySizeMaxBlowfish) + } + + #endif + } + + /// + /// Tests if a given keySize is valid for this algorithm + /// + /// - Parameter keySize: The key size to be validated. + /// + /// - Returns: True if valid, false otherwise. + /// + func isValidKeySize(keySize: Int) -> Bool { + return self.validKeySize().isValidKeySize(keySize: keySize) + } + + /// + /// Calculates the next, if any, valid keySize greater or equal to a given `keySize` for this algorithm + /// + /// - Parameter keySize: Key size for which the next size is requested. + /// + /// - Returns: Next key size or nil + /// + func paddedKeySize(keySize: Int) -> Int? { + return self.validKeySize().paddedKeySize(keySize: keySize) + } + } + + /// + /// The status code resulting from the last method call to this Cryptor. + /// Used to get additional information when optional chaining collapes. + /// + public internal(set) var status: Status = .success + + /// + /// Context obtained. True if we have it, false otherwise. + /// + private var haveContext: Bool = false + + #if os(macOS) || os(iOS) || os(tvOS) || os(watchOS) + + /// CommonCrypto Context + private var context = UnsafeMutablePointer.allocate(capacity: 1) + + #elseif os(Linux) + + #if swift(>=4.2) + + /// OpenSSL Cipher Context + private let context: OpaquePointer? = .init(EVP_CIPHER_CTX_new()) + + #else + + /// OpenSSL Cipher Context + private let context: UnsafeMutablePointer = EVP_CIPHER_CTX_new() + + #endif + + + /// Operation + private var operation: Operation = .encrypt + + /// The algorithm + private var algorithm: Algorithm + + #endif + + + // MARK: Lifecycle Methods + + /// + /// Default Initializer + /// + /// - Parameters: + /// - operation: The operation to perform see Operation (Encrypt, Decrypt) + /// - algorithm: The algorithm to use see Algorithm (AES, des, tripleDes, cast, rc2, blowfish) + /// - keyBuffer: Pointer to key buffer + /// - keyByteCount: Number of bytes in the key + /// - ivBuffer: Initialization vector buffer + /// - ivLength: Length of the ivBuffer + /// + /// - Returns: New StreamCryptor instance. + /// + public init(operation: Operation, algorithm: Algorithm, options: Options, keyBuffer: [UInt8], keyByteCount: Int, ivBuffer: UnsafePointer, ivLength: Int = 0) throws { + + guard algorithm.isValidKeySize(keySize: keyByteCount) else { + throw CryptorError.invalidKeySize + } + + guard options.contains(.ecbMode) || ivLength == algorithm.blockSize else { + throw CryptorError.invalidIVSizeOrLength + } + + #if os(macOS) || os(iOS) || os(tvOS) || os(watchOS) + + let rawStatus = CCCryptorCreate(operation.nativeValue(), algorithm.nativeValue(), CCOptions(options.rawValue), keyBuffer, keyByteCount, ivBuffer, self.context) + + if let status = Status.fromRaw(status: rawStatus) { + + self.status = status + + } else { + + throw CryptorError.fail(rawStatus, "Cryptor init returned unexpected status.") + } + + self.haveContext = true + + #elseif os(Linux) + + self.algorithm = algorithm + self.operation = operation + + var rawStatus: Int32 + + switch self.operation { + + case .encrypt: + rawStatus = EVP_EncryptInit_ex(.make(optional: self.context), .make(optional: algorithm.nativeValue(options: options)), nil, keyBuffer, ivBuffer) + + case .decrypt: + rawStatus = EVP_DecryptInit(.make(optional: self.context), .make(optional: algorithm.nativeValue(options: options)), keyBuffer, ivBuffer) + } + + if rawStatus == 0 { + + let errorCode = ERR_get_error() + if let status = Status.fromRaw(status: errorCode) { + self.status = status + } else { + + throw CryptorError.fail(Int32(errorCode), "Cryptor init returned unexpected status.") + } + } + + self.haveContext = true + + // Default to no padding... + var needPadding: Int32 = 0 + if options == .pkcs7Padding { + needPadding = 1 + } + + // Note: This call must be AFTER the init call above... + EVP_CIPHER_CTX_set_padding(.make(optional: self.context), needPadding) + + self.status = Status.success + + #endif + + } + + /// + /// Creates a new StreamCryptor + /// + /// - Parameters: + /// - operation: The operation to perform see Operation (Encrypt, Decrypt) + /// - algorithm: The algorithm to use see Algorithm (AES, des, tripleDes, cast, rc2, blowfish) + /// - key: A byte array containing key data + /// - iv: A byte array containing initialization vector + /// + /// - Returns: New StreamCryptor instance. + /// + public convenience init(operation: Operation, algorithm: Algorithm, options: Options, key: [UInt8], iv: [UInt8]) throws { + + guard let paddedKeySize = algorithm.paddedKeySize(keySize: key.count) else { + throw CryptorError.invalidKeySize + } + + try self.init(operation:operation, + algorithm:algorithm, + options:options, + keyBuffer:CryptoUtils.zeroPad(byteArray:key, blockSize: paddedKeySize), + keyByteCount:paddedKeySize, + ivBuffer:iv, + ivLength:iv.count) + } + + /// + /// Creates a new StreamCryptor + /// + /// - Parameters: + /// - operation: The operation to perform see Operation (Encrypt, Decrypt) + /// - algorithm: The algorithm to use see Algorithm (AES, des, tripleDes, cast, rc2, blowfish) + /// - key: A string containing key data (will be interpreted as UTF8) + /// - iv: A string containing initialization vector data (will be interpreted as UTF8) + /// + /// - Returns: New StreamCryptor instance. + /// + public convenience init(operation: Operation, algorithm: Algorithm, options: Options, key: String, iv: String) throws { + + let keySize = key.utf8.count + guard let paddedKeySize = algorithm.paddedKeySize(keySize: keySize) else { + throw CryptorError.invalidKeySize + } + + try self.init(operation:operation, + algorithm:algorithm, + options:options, + keyBuffer:CryptoUtils.zeroPad(string: key, blockSize: paddedKeySize), + keyByteCount:paddedKeySize, + ivBuffer:iv, + ivLength:iv.utf8.count) + } + + /// + /// Cleanup + /// + deinit { + + // Ensure we've got a context before attempting to get rid of it... + if self.haveContext == false { + return + } + + #if os(macOS) || os(iOS) || os(tvOS) || os(watchOS) + + // Ensure we've got a context before attempting to get rid of it... + if self.context.pointee == nil { + return + } + + let rawStatus = CCCryptorRelease(self.context.pointee) + if let status = Status.fromRaw(status: rawStatus) { + + if status != .success { + + NSLog("WARNING: CCCryptoRelease failed with status \(rawStatus).") + } + + } else { + + fatalError("CCCryptorUpdate returned unexpected status.") + } + + #if swift(>=4.1) + context.deallocate() + #else + context.deallocate(capacity: 1) + #endif + + self.haveContext = false + + #elseif os(Linux) + + EVP_CIPHER_CTX_free(.make(optional: self.context)) + self.haveContext = false + + #endif + } + + // MARK: Public Methods + + /// + /// Add the contents of an Data buffer to the current encryption/decryption operation. + /// + /// - Parameters: + /// - dataIn: The input data + /// - byteArrayOut: Output data + /// + /// - Returns: A tuple containing the number of output bytes produced and the status (see Status) + /// + public func update(dataIn: Data, byteArrayOut: inout [UInt8]) -> (Int, Status) { + + let dataOutAvailable = byteArrayOut.count + var dataOutMoved = 0 + dataIn.withUnsafeBytes() { (buffer: UnsafePointer) in + _ = update(bufferIn: buffer, byteCountIn: dataIn.count, bufferOut: &byteArrayOut, byteCapacityOut: dataOutAvailable, byteCountOut: &dataOutMoved) + } + return (dataOutMoved, self.status) + } + + /// + /// Add the contents of an NSData buffer to the current encryption/decryption operation. + /// + /// - Parameters: + /// - dataIn: The input data + /// - byteArrayOut: Output data + /// + /// - Returns: A tuple containing the number of output bytes produced and the status (see Status) + /// + public func update(dataIn: NSData, byteArrayOut: inout [UInt8]) -> (Int, Status) { + + let dataOutAvailable = byteArrayOut.count + var dataOutMoved = 0 + var ptr = dataIn.bytes.assumingMemoryBound(to: UInt8.self).pointee + _ = update(bufferIn: &ptr, byteCountIn: dataIn.length, bufferOut: &byteArrayOut, byteCapacityOut: dataOutAvailable, byteCountOut: &dataOutMoved) + return (dataOutMoved, self.status) + } + + /// + /// Add the contents of a byte array to the current encryption/decryption operation. + /// + /// - Parameters: + /// - byteArrayIn: The input data + /// - byteArrayOut: Output data + /// + /// - Returns: A tuple containing the number of output bytes produced and the status (see Status) + /// + public func update(byteArrayIn: [UInt8], byteArrayOut: inout [UInt8]) -> (Int, Status) { + + let dataOutAvailable = byteArrayOut.count + var dataOutMoved = 0 + _ = update(bufferIn: byteArrayIn, byteCountIn: byteArrayIn.count, bufferOut: &byteArrayOut, byteCapacityOut: dataOutAvailable, byteCountOut: &dataOutMoved) + return (dataOutMoved, self.status) + } + + /// + /// Add the contents of a string (interpreted as UTF8) to the current encryption/decryption operation. + /// + /// - Parameters: + /// - byteArrayIn: The input data + /// - byteArrayOut: Output data + /// + /// - Returns: A tuple containing the number of output bytes produced and the status (see Status) + /// + public func update(stringIn: String, byteArrayOut: inout [UInt8]) -> (Int, Status) { + + let dataOutAvailable = byteArrayOut.count + var dataOutMoved = 0 + _ = update(bufferIn: stringIn, byteCountIn: stringIn.utf8.count, bufferOut: &byteArrayOut, byteCapacityOut: dataOutAvailable, byteCountOut: &dataOutMoved) + return (dataOutMoved, self.status) + } + + /// + /// Retrieves all remaining encrypted or decrypted data from this cryptor. + /// + /// - Note: If the underlying algorithm is an block cipher and the padding option has + /// not been specified and the cumulative input to the cryptor has not been an integral + /// multiple of the block length this will fail with an alignment error. + /// + /// - Note: This method updates the status property + /// + /// - Parameter byteArrayOut: The output bffer + /// + /// - Returns: a tuple containing the number of output bytes produced and the status (see Status) + /// + public func final(byteArrayOut: inout [UInt8]) -> (Int, Status) { + + let dataOutAvailable = byteArrayOut.count + var dataOutMoved = 0 + _ = final(bufferOut: &byteArrayOut, byteCapacityOut: dataOutAvailable, byteCountOut: &dataOutMoved) + return (dataOutMoved, self.status) + } + + // MARK: - Low-level interface + + /// + /// Update the buffer + /// + /// - Parameters: + /// - bufferIn: Pointer to input buffer + /// - inByteCount: Number of bytes contained in input buffer + /// - bufferOut: Pointer to output buffer + /// - outByteCapacity: Capacity of the output buffer in bytes + /// - outByteCount: On successful completion, the number of bytes written to the output buffer + /// + /// - Returns: Status of the update + /// + public func update(bufferIn: UnsafeRawPointer, byteCountIn: Int, bufferOut: UnsafeMutablePointer, byteCapacityOut: Int, byteCountOut: inout Int) -> Status { + + if self.status == .success { + + #if os(macOS) || os(iOS) || os(tvOS) || os(watchOS) + + let rawStatus = CCCryptorUpdate(self.context.pointee, bufferIn, byteCountIn, bufferOut, byteCapacityOut, &byteCountOut) + if let status = Status.fromRaw(status: rawStatus) { + self.status = status + } else { + fatalError("CCCryptorUpdate returned unexpected status.") + } + + #elseif os(Linux) + + var rawStatus: Int32 + var outLength: Int32 = 0 + + switch self.operation { + + case .encrypt: + rawStatus = EVP_EncryptUpdate(.make(optional: self.context), bufferOut, &outLength, bufferIn.assumingMemoryBound(to: UInt8.self), Int32(byteCountIn)) + + case .decrypt: + rawStatus = EVP_DecryptUpdate(.make(optional: self.context), bufferOut, &outLength, bufferIn.assumingMemoryBound(to: UInt8.self), Int32(byteCountIn)) + } + + byteCountOut = Int(outLength) + + if rawStatus == 0 { + + let errorCode = ERR_get_error() + if let status = Status.fromRaw(status: errorCode) { + self.status = status + } else { + fatalError("Cryptor update returned unexpected status.") + } + + } else { + + self.status = Status.success + } + + #endif + + } + + return self.status + } + + /// + /// Retrieves all remaining encrypted or decrypted data from this cryptor. + /// + /// - Note: If the underlying algorithm is an block cipher and the padding option has + /// not been specified and the cumulative input to the cryptor has not been an integral + /// multiple of the block length this will fail with an alignment error. + /// + /// - Note: This method updates the status property + /// + /// - Parameters: + /// - bufferOut: Pointer to output buffer + /// - outByteCapacity: Capacity of the output buffer in bytes + /// - outByteCount: On successful completion, the number of bytes written to the output buffer + /// + /// - Returns: Status of the update + /// + public func final(bufferOut: UnsafeMutablePointer, byteCapacityOut: Int, byteCountOut: inout Int) -> Status { + + if self.status == Status.success { + + #if os(macOS) || os(iOS) || os(tvOS) || os(watchOS) + + let rawStatus = CCCryptorFinal(self.context.pointee, bufferOut, byteCapacityOut, &byteCountOut) + if let status = Status.fromRaw(status: rawStatus) { + self.status = status + } else { + fatalError("CCCryptorUpdate returned unexpected status.") + } + + #elseif os(Linux) + + var rawStatus: Int32 + var outLength: Int32 = Int32(byteCapacityOut) + + switch self.operation { + + case .encrypt: + rawStatus = EVP_EncryptFinal(.make(optional: self.context), bufferOut, &outLength) + + case .decrypt: + rawStatus = EVP_DecryptFinal(.make(optional: self.context), bufferOut, &outLength) + } + + byteCountOut = Int(outLength) + + if rawStatus == 0 { + + let errorCode = ERR_get_error() + if let status = Status.fromRaw(status: errorCode) { + self.status = status + } else { + fatalError("Cryptor final returned unexpected status.") + } + + } else { + + self.status = Status.success + } + + #endif + } + + return self.status + } + + /// + /// Determines the number of bytes that will be output by this Cryptor if inputBytes of additional + /// data is input. + /// + /// - Parameters: + /// - inputByteCount: Number of bytes that will be input. + /// - isFinal: True if buffer to be input will be the last input buffer, false otherwise. + /// + /// - Returns: The final output length + /// + public func getOutputLength(inputByteCount: Int, isFinal: Bool = false) -> Int { + + #if os(macOS) || os(iOS) || os(tvOS) || os(watchOS) + + return CCCryptorGetOutputLength(self.context.pointee, inputByteCount, isFinal) + + #elseif os(Linux) + + if inputByteCount == 0 { + return self.algorithm.blockSize + } + + return (inputByteCount + self.algorithm.blockSize - (inputByteCount % self.algorithm.blockSize)) + + #endif + } + +} diff --git a/Example/Pods/web3swift/Sources/Encryption/Cryptor/Updatable.swift b/Example/Pods/web3swift/Sources/Encryption/Cryptor/Updatable.swift new file mode 100755 index 00000000..0c01ce26 --- /dev/null +++ b/Example/Pods/web3swift/Sources/Encryption/Cryptor/Updatable.swift @@ -0,0 +1,100 @@ +// +// Updateable.swift +// Cryptor +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// 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 Foundation + +/// +/// A protocol for calculations that can be updated with incremental data buffers. +/// +public protocol Updatable { + + /// Status of the calculation. + var status: Status { get } + + /// + /// Low-level update routine. + /// Updates the calculation with the contents of a data buffer. + /// + /// - Parameters: + /// - buffer: Pointer to the data buffer + /// - byteCount: Length of the buffer in bytes + /// + /// - Returns: `Self` if no error for optional chaining, nil otherwise + /// + func update(from buffer: UnsafeRawPointer, byteCount: size_t) -> Self? +} + +/// +/// Factors out common update code from Digest, HMAC and Cryptor. +/// +extension Updatable { + /// + /// Updates the current calculation with data contained in an `NSData` object. + /// + /// - Parameter data: The `NSData` object + /// + /// - Returns: Optional `Self` or nil + /// + public func update(data: NSData) -> Self? { + + _ = update(from: data.bytes, byteCount: size_t(data.length)) + return self.status == .success ? self : nil + } + + /// + /// Updates the current calculation with data contained in an `Data` object. + /// + /// - Parameters data: The `Data` object + /// + /// - Returns: Optional `Self` or nil + /// + public func update(data: Data) -> Self? { + + _ = data.withUnsafeBytes() { (buffer: UnsafePointer) in + + _ = update(from: buffer, byteCount: size_t(data.count)) + } + return self.status == .success ? self : nil + } + + /// + /// Updates the current calculation with data contained in a byte array. + /// + /// - Parameter byteArray: The byte array + /// + /// - Returns: Optional `Self` or nil + /// + public func update(byteArray: [UInt8]) -> Self? { + + _ = update(from: byteArray, byteCount: size_t(byteArray.count)) + return self.status == .success ? self : nil + } + + /// + /// Updates the current calculation with data contained in a String. + /// The corresponding data will be generated using UTF8 encoding. + /// + /// - Parameter string: The string of data + /// + /// - Returns: Optional `Self` or nil + /// + public func update(string: String) -> Self? { + + _ = update(from: string, byteCount: size_t(string.utf8.count)) + return self.status == .success ? self : nil + } +} diff --git a/Example/Pods/web3swift/Sources/Encryption/Cryptor/Utilities.swift b/Example/Pods/web3swift/Sources/Encryption/Cryptor/Utilities.swift new file mode 100755 index 00000000..30ab9587 --- /dev/null +++ b/Example/Pods/web3swift/Sources/Encryption/Cryptor/Utilities.swift @@ -0,0 +1,259 @@ +// +// Utilities.swift +// Cryptor +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// 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 Foundation + +// +// Replaces Swift's native `fatalError` function to allow redirection +// For more details about how this all works see: +// https://marcosantadev.com/test-swift-fatalerror/ +// +func fatalError(_ message: @autoclosure () -> String = "", file: StaticString = #file, line: UInt = #line) -> Never { + + FatalErrorUtil.fatalErrorClosure(message(), file, line) +} + +// Convert an UnsafeMutablePointer? to a String, providing a +// default value of empty string if the pointer is nil. +// +// - Parameter ptr: Pointer to string to be converted. +// +// - Returns: Converted string. +// +func errToString(_ ptr: UnsafeMutablePointer?) -> String { + if let ptr = ptr { + return String(cString: ptr) + } else { + return "" + } +} + +/// +/// Allows redirection of `fatalError` for Unit Testing or for +/// library users that want to handle such errors in another way. +/// +struct FatalErrorUtil { + + static var fatalErrorClosure: (String, StaticString, UInt) -> Never = defaultFatalErrorClosure + private static let defaultFatalErrorClosure = { Swift.fatalError($0, file: $1, line: $2) } + static func replaceFatalError(closure: @escaping (String, StaticString, UInt) -> Never) { + fatalErrorClosure = closure + } + static func restoreFatalError() { + fatalErrorClosure = defaultFatalErrorClosure + } + +} + +/// +/// Various utility functions for conversions +/// +public struct CryptoUtils { + + /// + /// Converts a single hexadecimal digit encoded as a Unicode Scalar to it's corresponding value. + /// + /// - Parameter digit: A Unicode scalar in the set 0..9a..fA..F + /// + /// - Returns: The hexadecimal value of the digit + /// + static func convert(hexDigit digit: UnicodeScalar) -> UInt8 { + + switch digit { + + case UnicodeScalar(unicodeScalarLiteral:"0")...UnicodeScalar(unicodeScalarLiteral:"9"): + return UInt8(digit.value - UnicodeScalar(unicodeScalarLiteral:"0").value) + + case UnicodeScalar(unicodeScalarLiteral:"a")...UnicodeScalar(unicodeScalarLiteral:"f"): + return UInt8(digit.value - UnicodeScalar(unicodeScalarLiteral:"a").value + 0xa) + + case UnicodeScalar(unicodeScalarLiteral:"A")...UnicodeScalar(unicodeScalarLiteral:"F"): + return UInt8(digit.value - UnicodeScalar(unicodeScalarLiteral:"A").value + 0xa) + + default: + fatalError("convertHexDigit: Invalid hex digit") + } + } + + /// + /// Converts a string of hexadecimal digits to a byte array. + /// + /// - Parameter string: The hex string (must contain an even number of digits) + /// + /// - Returns: A byte array + /// + public static func byteArray(fromHex string: String) -> [UInt8] { + + var iterator = string.unicodeScalars.makeIterator() + var byteArray: [UInt8] = [] + while let msn = iterator.next() { + + if let lsn = iterator.next() { + + byteArray += [ (convert(hexDigit: msn) << 4 | convert(hexDigit: lsn)) ] + + } else { + + fatalError("arrayFromHexString: String must contain even number of characters") + } + } + return byteArray + } + + /// + /// Converts a UTF-8 String to a byte array. + /// + /// - Parameter string: the string + /// + /// - Returns: A byte array + /// + public static func byteArray(from string: String) -> [UInt8] { + + let array = [UInt8](string.utf8) + return array + } + + /// + /// Converts a string of hexadecimal digits to an `NSData` object. + /// + /// - Parameter string: The hex string (must contain an even number of digits) + /// + /// - Returns: An `NSData` object + /// + public static func data(fromHex string: String) -> NSData { + + let a = byteArray(fromHex: string) + return NSData(bytes:a, length:a.count) + } + + /// + /// Converts a string of hexadecimal digits to an `Data` object. + /// + /// - Parameter string: The hex string (must contain an even number of digits) + /// + /// - Returns: An `Data` object + /// + public static func data(fromHex string: String) -> Data { + + let a = byteArray(fromHex: string) + return Data(bytes: a, count: a.count) + } + + /// + /// Converts a byte array to an `NSData` object. + /// + /// - Parameter byteArray: The byte array + /// + /// - Returns: An `NSData` object + /// + public static func data(from byteArray: [UInt8]) -> NSData { + + return NSData(bytes:byteArray, length:byteArray.count) + } + + /// + /// Converts a byte array to an `Data` object. + /// + /// - Parameter byteArray: The byte array + /// + /// - Returns: An `Data` object + /// + public static func data(from byteArray: [UInt8]) -> Data { + + return Data(bytes: byteArray, count: byteArray.count) + } + + /// + /// Converts a byte array to a string of hexadecimal digits. + /// + /// - Parameters: + /// - byteArray: The Swift array + /// - uppercase: True to use uppercase for letter digits, lowercase otherwise + /// + /// - Returns: A String + /// + public static func hexString(from byteArray: [UInt8], uppercase: Bool = false) -> String { + + return byteArray.map() { String(format: (uppercase) ? "%02X" : "%02x", $0) }.reduce("", +) + } + + /// + /// Converts a Swift array to an `NSString` object. + /// + /// - Parameters: + /// - byteArray: The Swift array + /// - uppercase: True to use uppercase for letter digits, lowercase otherwise + /// + /// - Returns: An `NSString` object + /// + public static func hexNSString(from byteArray: [UInt8], uppercase: Bool = false) -> NSString { + + let formatString = (uppercase) ? "%02X" : "%02x" + #if os(macOS) || os(iOS) || os(tvOS) || os(watchOS) + return byteArray.map() { String(format: formatString, $0) }.reduce("", +) as NSString + #else + let aString = byteArray.map() { String(format: formatString, $0) }.reduce("", +) + return NSString(string: aString) + #endif + } + + /// + /// Converts a byte array to a String containing a comma separated list of bytes. + /// This is used to generate test data programmatically. + /// + /// - Parameter byteArray: The byte array + /// + /// - Returns: A String + /// + public static func hexList(from byteArray: [UInt8]) -> String { + + return byteArray.map() { String(format:"0x%02x, ", $0) }.reduce("", +) + } + + /// + /// Zero pads a byte array such that it is an integral number of `blockSizeinBytes` long. + /// + /// - Parameters: + /// - byteArray: The byte array + /// - blockSizeInBytes: The block size in bytes. + /// + /// - Returns: A Swift string + /// + public static func zeroPad(byteArray: [UInt8], blockSize: Int) -> [UInt8] { + + let pad = blockSize - (byteArray.count % blockSize) + guard pad != 0 else { + return byteArray + } + return byteArray + Array(repeating: 0, count: pad) + } + + /// + /// Zero pads a String (after UTF8 conversion) such that it is an integral number of `blockSizeinBytes` long. + /// + /// - Parameters: + /// - string: The String + /// - blockSizeInBytes: The block size in bytes + /// + /// - Returns: A byte array + /// + public static func zeroPad(string: String, blockSize: Int) -> [UInt8] { + + return zeroPad(byteArray: Array(string.utf8), blockSize: blockSize) + } + +} diff --git a/Example/Pods/web3swift/Sources/Encryption/DerivedKey.swift b/Example/Pods/web3swift/Sources/Encryption/DerivedKey.swift new file mode 100644 index 00000000..7a94bc7c --- /dev/null +++ b/Example/Pods/web3swift/Sources/Encryption/DerivedKey.swift @@ -0,0 +1,440 @@ +// +// Encryption.swift +// web3swift +// +// Created by Dmitry on 27/11/2018. +// Copyright © 2018 Bankex Foundation. All rights reserved. +// + +import Foundation + +protocol DerivedKey { + func calculate(password: Data) throws -> Data +} + +enum DecryptionError: Error { + case invalidPassword +} + +enum DerivedKeyType { + enum Error: Swift.Error { + case invalidType(String) + } + case scrypt + case pbkdf2 + init(_ type: String) throws { + switch type { + case "scrypt": self = .scrypt + case "pbkdf2": self = .pbkdf2 + default: throw Error.invalidType(type) + } + } + func derivedKey(_ json: DictionaryReader) throws -> DerivedKey { + switch self { + case .scrypt: return try Scrypt(json: json) + case .pbkdf2: return try PBKDF2Object(json: json) + } + } +} + +//extension HMAC.Variant { +// init(_ string: String) throws { +// switch string { +// case "hmac-sha256": +// self = HMAC.Variant.sha256 +// case "hmac-sha384": +// self = HMAC.Variant.sha384 +// case "hmac-sha512": +// self = HMAC.Variant.sha512 +// default: +// throw PBKDF2Object.Error.unknownHmacAlgorithm(string) +// } +// } +// var digestLength: Int { +// switch self { +// case .sha1: +// return 20 +// case .sha256: +// return SHA2.Variant.sha256.digestLength +// case .sha384: +// return SHA2.Variant.sha384.digestLength +// case .sha512: +// return SHA2.Variant.sha512.digestLength +// case .md5: +// return 16 +// } +// } +//} + + +enum HmacVariant { + case sha1, sha224, sha256, sha384, sha512 + var cc: PBKDF.PseudoRandomAlgorithm { + switch self { + case .sha1: return .sha1 + case .sha224: return .sha224 + case .sha256: return .sha256 + case .sha384: return .sha384 + case .sha512: return .sha512 + } + } + var c: HMAC.Algorithm { + switch self { + case .sha1: return .sha1 + case .sha224: return .sha224 + case .sha256: return .sha256 + case .sha384: return .sha384 + case .sha512: return .sha512 + } + } + + init(_ string: String) throws { + switch string { + case "hmac-sha256": + self = HmacVariant.sha256 + case "hmac-sha384": + self = HmacVariant.sha384 + case "hmac-sha512": + self = HmacVariant.sha512 + default: + throw PBKDF2Object.Error.unknownHmacAlgorithm(string) + } + } + var digestLength: Int { + switch self { + case .sha1: + return 160 / 8 + case .sha224: + return 224 / 8 + case .sha256: + return 256 / 8 + case .sha384: + return 384 / 8 + case .sha512: + return 512 / 8 + } + } +} + +extension HMAC { + enum HMACError: Error { + case authenticationFailed + } + convenience init(key: [UInt8], variant: HmacVariant) { + self.init(using: variant.c, key: Data(key)) + } + func authenticate(_ bytes: [UInt8]) throws -> [UInt8] { + if let data = update(byteArray: bytes)?.final() { + return data + } else { + throw HMACError.authenticationFailed + } + } +} +func BetterPBKDF(password: [UInt8], salt: [UInt8], iterations: Int, keyLength: Int, variant: HmacVariant) throws -> [UInt8] { + let string = String(bytes: password, encoding: .utf8)! + return try PBKDF.deriveKey(fromPassword: string, salt: salt, prf: variant.cc, rounds: UInt32(iterations), derivedKeyLength: UInt(keyLength)) +} + +class PBKDF2Object: DerivedKey { + enum Error: Swift.Error { + case unknownHmacAlgorithm(String) + case invalidParameters + var localizedDescription: String { + switch self { + case let .unknownHmacAlgorithm(string): + return "Unknown hmac algorithm \"\(string)\". Allowed: hmac-sha256, hmac-sha384, hmac-sha512" + case .invalidParameters: + return "Cannot load PBKDF2 with provided parameters" + } + } + } + let variant: HmacVariant + let keyLength: Int + let iterations: Int + let salt: [UInt8] + + init(salt: Data, iterations: Int, keyLength: Int, variant: HmacVariant) { + self.salt = Array(salt) + self.keyLength = keyLength + self.iterations = iterations + self.variant = variant + } + init(json: DictionaryReader) throws { + variant = try HmacVariant(json.at("prf").string()) + keyLength = try json.at("dklen").int() + iterations = try json.at("c").int() + salt = try Array(json.at("salt").data()) + guard iterations > 0 && !salt.isEmpty else { throw Error.invalidParameters } + if Double(keyLength) > (pow(2, 32) - 1) * Double(variant.digestLength) { + throw Error.invalidParameters + } + } + + func calculate(password: Data) throws -> Data { + do { + return try Data(BetterPBKDF(password: Array(password), salt: Array(salt), iterations: iterations, keyLength: keyLength, variant: variant)) + } catch { + throw DecryptionError.invalidPassword + } + } +} + + +/** + Scrypt function. Used to generate derivedKey from password, salt, n, r, p + */ +class Scrypt: DerivedKey { + enum ScryptError: Swift.Error { + case nIsTooLarge + case rIsTooLarge + case nMustBeAPowerOf2GreaterThan1 + + var localizedDescription: String { + switch self { + case .nIsTooLarge: + return "Scrypt error: N is too large" + case .rIsTooLarge: + return "Scrypt error: R is too large" + case .nMustBeAPowerOf2GreaterThan1: + return "Scrypt error: N must be a power of two and greater than 1" + } + } + } + enum Error: Swift.Error { + case invalidPassword + case invalidSalt + var localizedDescription: String { + switch self { + case .invalidPassword: + return "Scrypt error: invalid password" + case .invalidSalt: + return "Scrypt error: invalid salt" + } + } + } + + let salt: Data // S + let dkLen: Int + let n: Int + let r: Int + let p: Int + + init(salt: Data, dkLen: Int, N: Int, r: Int, p: Int) throws { + guard !(N < 2 || (N & (N - 1)) != 0) else { throw ScryptError.nMustBeAPowerOf2GreaterThan1 } + + guard N <= .max / 128 / r else { throw ScryptError.nIsTooLarge } + guard r <= .max / 128 / p else { throw ScryptError.rIsTooLarge } + + self.n = N + self.r = r + self.p = p + self.salt = salt + self.dkLen = dkLen + } + init(json: DictionaryReader) throws { + dkLen = try json.at("dklen").int() + n = try json.at("n").int() + r = try json.at("r").int() + p = try json.at("p").int() + salt = try json.at("salt").data() + } + + /// Runs the key derivation function with a specific password. + func calculate(password: Data) throws -> Data { + // Allocate memory. + let B = UnsafeMutableRawPointer.allocate(byteCount: 128 * r * p, alignment: 64) + let XY = UnsafeMutableRawPointer.allocate(byteCount: 256 * r + 64, alignment: 64) + let V = UnsafeMutableRawPointer.allocate(byteCount: 128 * r * n, alignment: 64) + + // Deallocate memory when done + defer { + B.deallocate() + XY.deallocate() + V.deallocate() + } + + /* 1: (B_0 ... B_{p-1}) <-- PBKDF2(P, S, 1, p * MFLen) */ + let barray = try PBKDF2Object(salt: salt, iterations: 1, keyLength: p * 128 * r, variant: .sha256).calculate(password: password) + + Array(barray).withUnsafeBytes { p in + B.copyMemory(from: p.baseAddress!, byteCount: barray.count) + } + + /* 2: for i = 0 to p - 1 do */ + for i in 0 ..< p { + /* 3: B_i <-- MF(B_i, N) */ + smix(B + i * 128 * r, V.assumingMemoryBound(to: UInt32.self), XY.assumingMemoryBound(to: UInt32.self)) + } + + /* 5: DK <-- PBKDF2(P, B, 1, dkLen) */ + let pointer = B.assumingMemoryBound(to: UInt8.self) + let bufferPointer = UnsafeBufferPointer(start: pointer, count: p * 128 * r) + let block = Data(buffer: bufferPointer) + return try PBKDF2Object(salt: block, iterations: 1, keyLength: dkLen, variant: .sha256).calculate(password: password) + } + + /// Computes `B = SMix_r(B, N)`. + /// + /// The input `block` must be `128*r` bytes in length; the temporary storage `v` must be `128*r*n` bytes in length; + /// the temporary storage `xy` must be `256*r + 64` bytes in length. The arrays `block`, `v`, and `xy` must be + /// aligned to a multiple of 64 bytes. + private func smix(_ block: UnsafeMutableRawPointer, _ v: UnsafeMutablePointer, _ xy: UnsafeMutablePointer) { + let X = xy + let Y = xy + 32 * r + let Z = xy + 64 * r + + /* 1: X <-- B */ + for k in 0 ..< 32 * r { + X[k] = (block + 4 * k).load(as: UInt32.self) + } + + + /* 2: for i = 0 to N - 1 do */ + for i in stride(from: 0, to: n, by: 2) { + /* 3: V_i <-- X */ + UnsafeMutableRawPointer(v + i * (32 * r)).copyMemory(from: X, byteCount: 128 * r) + + + /* 4: X <-- H(X) */ + blockMixSalsa8(X, Y, Z) + + /* 3: V_i <-- X */ + UnsafeMutableRawPointer(v + (i + 1) * (32 * r)).copyMemory(from: Y, byteCount: 128 * r) + + /* 4: X <-- H(X) */ + blockMixSalsa8(Y, X, Z) + } + + /* 6: for i = 0 to N - 1 do */ + for _ in stride(from: 0, to: n, by: 2) { + /* 7: j <-- Integerify(X) mod N */ + var j = Int(integerify(X) & UInt64(n - 1)) + + /* 8: X <-- H(X \xor V_j) */ + blockXor(X, v + j * 32 * r, 128 * r) + blockMixSalsa8(X, Y, Z) + + /* 7: j <-- Integerify(X) mod N */ + j = Int(integerify(Y) & UInt64(n - 1)) + + /* 8: X <-- H(X \xor V_j) */ + blockXor(Y, v + j * 32 * r, 128 * r) + blockMixSalsa8(Y, X, Z) + } + + /* 10: B' <-- X */ + for k in 0 ..< 32 * r { + UnsafeMutableRawPointer(block + 4 * k).storeBytes(of: X[k], as: UInt32.self) + } + } + + /// Returns the result of parsing `B_{2r-1}` as a little-endian integer. + private func integerify(_ block: UnsafeRawPointer) -> UInt64 { + let bi = block + (2 * r - 1) * 64 + return bi.load(as: UInt64.self) + } + + /// Compute `bout = BlockMix_{salsa20/8, r}(bin)`. + /// + /// The input `bin` must be `128*r` bytes in length; the output `bout` must also be the same size. The temporary + /// space `x` must be 64 bytes. + private func blockMixSalsa8(_ bin: UnsafePointer, _ bout: UnsafeMutablePointer, _ x: UnsafeMutablePointer) { + UnsafeMutableRawPointer(x).copyMemory(from: bin + (2 * r - 1) * 16, byteCount: 64) + for i in stride(from: 0, to: 2 * r, by: 2) { + blockXor(x, bin + i * 16, 64) + salsa20_8(x) + UnsafeMutableRawPointer(bout + i * 8).copyMemory(from: x, byteCount: 64) + + blockXor(x, bin + i * 16 + 16, 64) + salsa20_8(x) + UnsafeMutableRawPointer(bout + i * 8 + r * 16).copyMemory(from: x, byteCount: 64) + } + } + + @inline(__always) + func rotate(_ a: UInt32, _ b: UInt32) -> UInt32 { + return (a << b) | (a >> (32 - b)) + } + + /// Applies the salsa20/8 core to the provided block. + private func salsa20_8(_ block: UnsafeMutablePointer) { + var x0 = block[0] + var x1 = block[1] + var x2 = block[2] + var x3 = block[3] + var x4 = block[4] + var x5 = block[5] + var x6 = block[6] + var x7 = block[7] + var x8 = block[8] + var x9 = block[9] + var x10 = block[10] + var x11 = block[11] + var x12 = block[12] + var x13 = block[13] + var x14 = block[14] + var x15 = block[15] + + for _ in 0 ..< 4 { + x4 ^= rotate(x0 &+ x12, 7) + x8 ^= rotate(x4 &+ x0, 9) + x12 ^= rotate(x8 &+ x4, 13) + x0 ^= rotate(x12 &+ x8, 18) + x9 ^= rotate(x5 &+ x1, 7) + x13 ^= rotate(x9 &+ x5, 9) + x1 ^= rotate(x13 &+ x9, 13) + x5 ^= rotate(x1 &+ x13, 18) + x14 ^= rotate(x10 &+ x6, 7) + x2 ^= rotate(x14 &+ x10, 9) + x6 ^= rotate(x2 &+ x14, 13) + x10 ^= rotate(x6 &+ x2, 18) + x3 ^= rotate(x15 &+ x11, 7) + x7 ^= rotate(x3 &+ x15, 9) + x11 ^= rotate(x7 &+ x3, 13) + x15 ^= rotate(x11 &+ x7, 18) + x1 ^= rotate(x0 &+ x3, 7) + x2 ^= rotate(x1 &+ x0, 9) + x3 ^= rotate(x2 &+ x1, 13) + x0 ^= rotate(x3 &+ x2, 18) + x6 ^= rotate(x5 &+ x4, 7) + x7 ^= rotate(x6 &+ x5, 9) + x4 ^= rotate(x7 &+ x6, 13) + x5 ^= rotate(x4 &+ x7, 18) + x11 ^= rotate(x10 &+ x9, 7) + x8 ^= rotate(x11 &+ x10, 9) + x9 ^= rotate(x8 &+ x11, 13) + x10 ^= rotate(x9 &+ x8, 18) + x12 ^= rotate(x15 &+ x14, 7) + x13 ^= rotate(x12 &+ x15, 9) + x14 ^= rotate(x13 &+ x12, 13) + x15 ^= rotate(x14 &+ x13, 18) + } + block[0] = block[0] &+ x0 + block[1] = block[1] &+ x1 + block[2] = block[2] &+ x2 + block[3] = block[3] &+ x3 + block[4] = block[4] &+ x4 + block[5] = block[5] &+ x5 + block[6] = block[6] &+ x6 + block[7] = block[7] &+ x7 + block[8] = block[8] &+ x8 + block[9] = block[9] &+ x9 + block[10] = block[10] &+ x10 + block[11] = block[11] &+ x11 + block[12] = block[12] &+ x12 + block[13] = block[13] &+ x13 + block[14] = block[14] &+ x14 + block[15] = block[15] &+ x15 + } + + private func blockXor(_ dest: UnsafeMutableRawPointer, _ src: UnsafeRawPointer, _ len: Int) { + let D = dest.assumingMemoryBound(to: UInt.self) + let S = src.assumingMemoryBound(to: UInt.self) + let L = len / MemoryLayout.size + + for i in 0 ..< L { + D[i] ^= S[i] + } + } +} diff --git a/Example/Pods/web3swift/Sources/Encryption/PrivateKey.swift b/Example/Pods/web3swift/Sources/Encryption/PrivateKey.swift new file mode 100644 index 00000000..057f2a3f --- /dev/null +++ b/Example/Pods/web3swift/Sources/Encryption/PrivateKey.swift @@ -0,0 +1,113 @@ +// +// PrivateKey.swift +// web3swift +// +// Created by Dmitry on 29/11/2018. +// Copyright © 2018 Bankex Foundation. All rights reserved. +// + +import Foundation +import BigInt + +/** + Secp256k1 private key. + + Used in ethereum accounts. You can get public key, address and sign some data + + ## Performance + + > Operations per second in debug and release build mode + ``` + Generate Private key: + release debug + 175772 160180 + + PrivateKey -> Public Key: + release debug + 26642 9036 + + PrivateKey -> Address: + release debug + 11894 2058 + ``` + */ +public class PrivateKey { + /// Private key data + public var privateKey: Data + + /// Singleton that generates public key from private key + public lazy var publicKey: Data = try! SECP256K1.privateToPublic(privateKey: privateKey) + + /// Singleton that generates address from public key + public lazy var address: Address = try! Web3Utils.publicToAddress(publicKey) + + /// Generates random private key. All generated keys are verified + public init() { + self.privateKey = .random(length: 32) + } + + /// Init with private key data. run .verify() to verify it + public init(_ privateKey: Data) { + self.privateKey = privateKey + } + + + /// Signs hash with private key signature + /// + /// - Parameter hash: 32 bytes hash. To get hash call data.keccak256() + /// - Returns: Signature that you can use in your transactions + /// - Throws: If hash size invalid hash size or private key. Call privateKey.verify() + public func sign(hash: Data) throws -> Signature { + let signature = try SECP256K1.signForRecovery(hash: hash, privateKey: privateKey).serializedSignature + return Signature(data: signature) + } + + + /// Verifies the private key. Also every 32 byte private keys are valid + /// + /// - Throws: SECP256K1Error.invalidPrivateKey + public func verify() throws { + try SECP256K1.verifyPrivateKey(privateKey: privateKey) + } +} + + +/// Signature of some hash. You can get it by calling PrivateKey.sign(hash:) +public class Signature { + /// Signature data + public let data: Data + + /// Init with data. Don't forget to call .check(compressed:) if you want to init with custom data + /// + /// - Parameter data: Signature data + public init(data: Data) { + self.data = data + } + + + /// Checks for signature + /// + /// - Parameter compressed: Checks for compressed signature (33 bytes long) + /// - Throws: SECP256K1Error.invalidSignatureSize or SECP256DataError.signatureCorrupted + public func check(compressed: Bool = false) throws { + if compressed { + guard data.count == 33 else { throw SECP256K1Error.invalidSignatureSize } + } else { + guard data.count == 65 else { throw SECP256K1Error.invalidSignatureSize } + } + guard v < 4 else { throw SECP256DataError.signatureCorrupted } + } + + /// Signature first 32 bytes + public lazy var r = BigUInt(data[0..<32]) + /// Signature next 32 bytes + public lazy var s = BigUInt(data[32..<64]) + /// Last signature byte. Should be less than 4 + public lazy var v: UInt8 = { + var v = data.last! + if v >= 27 { + v = v - 27 + } + return v + }() +} diff --git a/Example/Pods/web3swift/Sources/Guides.swift b/Example/Pods/web3swift/Sources/Guides.swift index ccec2c77..05a2e0f6 100644 --- a/Example/Pods/web3swift/Sources/Guides.swift +++ b/Example/Pods/web3swift/Sources/Guides.swift @@ -264,7 +264,7 @@ public class Guide { ```js eth.sendTransaction({from:eth.coinbase, to: "0xDf2bC70175311A6807F085e54881Fc4931359dBF", value: web3.toWei(100, "ether")}) ``` - > Dont forget to change recepient address + > Dont forget to change recipient address ### Almost done now we have some ether in our account. So just lets use it: @@ -330,10 +330,10 @@ public class Guide { Now you can send transactions using your account: ```swift - let recepient: Address // recepient address + let recipient: Address // recipient address var options = Web3Options.default options.from = Web3.default.keystoreManager!.addresses[0] - let transaction = try Web3.default.eth.sendETH(to: recepient, amount: BigUInt("0.01", units: .eth)!, options: options) + let transaction = try Web3.default.eth.sendETH(to: recipient, amount: BigUInt("0.01", units: .eth)!, options: options) ``` */ public struct Create_and_import_account {} diff --git a/Example/Pods/web3swift/Sources/HookedFunctions/Web3+BrowserFunctions.swift b/Example/Pods/web3swift/Sources/HookedFunctions/Web3+BrowserFunctions.swift index f290c7ad..3a2694db 100644 --- a/Example/Pods/web3swift/Sources/HookedFunctions/Web3+BrowserFunctions.swift +++ b/Example/Pods/web3swift/Sources/HookedFunctions/Web3+BrowserFunctions.swift @@ -11,14 +11,16 @@ import Foundation /// Browser functions public class Web3BrowserFunctions: Web3OptionsInheritable { - /// provider for some functions + /// Provider for some functions var provider: Web3Provider unowned var web3: Web3 + + /// Default options for transactions public var options: Web3Options { return web3.options } - /// init with provider and web3 + /// Init with provider and web3 public init(provider prov: Web3Provider, web3 web3instance: Web3) { provider = prov web3 = web3instance @@ -26,8 +28,8 @@ public class Web3BrowserFunctions: Web3OptionsInheritable { /// Get a list of Ethereum accounts that a node knows about. /// If one has attached a Keystore Manager to the web3 object it returns accounts known to the keystore. - /// - important: This function is synchronous! - /// - returns: Array of addresses in the node + /// - Important: This function is synchronous! + /// - Returns: Array of addresses in the node public func getAccounts() -> [String]? { do { return try web3.eth.getAccounts().compactMap { $0.address } @@ -36,7 +38,7 @@ public class Web3BrowserFunctions: Web3OptionsInheritable { } } - /// - returns: First account from node + /// - Returns: First account from node public func getCoinbase() -> String? { guard let addresses = self.getAccounts() else { return nil } guard addresses.count > 0 else { return nil } @@ -45,9 +47,9 @@ public class Web3BrowserFunctions: Web3OptionsInheritable { /** Signs personal message - - parameter personalMessage: message to sign - - parameter account: account that signs message - - parameter password: password to decrypt private key + - Parameter personalMessage: Message to sign + - Parameter account: Account that signs message + - Parameter password: Password to decrypt private key */ public func personalSign(_ personalMessage: String, account: String, password: String = "BANKEXFOUNDATION") -> String? { return sign(personalMessage, account: account, password: password) @@ -55,9 +57,9 @@ public class Web3BrowserFunctions: Web3OptionsInheritable { /** Signs personal message - - parameter personalMessage: message to sign - - parameter account: account that signs message - - parameter password: password to decrypt private key + - Parameter personalMessage: Message to sign + - Parameter account: Account that signs message + - Parameter password: Password to decrypt private key */ public func sign(_ personalMessage: String, account: String, password: String = "BANKEXFOUNDATION") -> String? { guard let data = Data.fromHex(personalMessage) else { return nil } @@ -66,21 +68,21 @@ public class Web3BrowserFunctions: Web3OptionsInheritable { /** Signs personal message - - parameter personalMessage: message to sign - - parameter account: account that signs message - - parameter password: password to decrypt private key + - Parameter personalMessage: Message to sign + - Parameter account: Account that signs message + - Parameter password: Password to decrypt private key */ public func sign(_ personalMessage: Data, account: String, password: String = "BANKEXFOUNDATION") -> String? { let keystoreManager = self.web3.provider.attachedKeystoreManager guard let signature = try? Web3Signer.signPersonalMessage(personalMessage, keystore: keystoreManager, account: Address(account), password: password) else { return nil } - return signature.toHexString().withHex + return signature.hex.withHex } /** Recovers address that signed personal message - - parameter personalMessage: signed message - - parameter signature: signature - - returns: signer address + - Parameter personalMessage: Signed message + - Parameter signature: Signature + - Returns: Signer address */ public func personalECRecover(_ personalMessage: String, signature: String) throws -> String { return try personalECRecover(personalMessage.dataFromHex(), signature: signature.dataFromHex()) @@ -88,9 +90,9 @@ public class Web3BrowserFunctions: Web3OptionsInheritable { /** Recovers address that signed personal message - - parameter personalMessage: signed message - - parameter signature: signature - - returns: signer address + - Parameter personalMessage: Signed message + - Parameter signature: Signature + - Returns: Signer address */ public func personalECRecover(_ personalMessage: Data, signature: Data) throws -> String { try signature.checkSignatureSize() @@ -111,9 +113,9 @@ public class Web3BrowserFunctions: Web3OptionsInheritable { /** Sends transaction to the blockchain - - parameter json: transaction to send - - parameter password: password to decrypt sender's private key - - returns: transaction hash + - Parameter json: Transaction to send + - Parameter password: Password to decrypt sender's private key + - Returns: Transaction hash */ public func sendTransaction(_ json: [String: Any], password: String = "BANKEXFOUNDATION") throws -> String { let transaction = try EthereumTransaction(json) @@ -123,9 +125,9 @@ public class Web3BrowserFunctions: Web3OptionsInheritable { /** Sends transaction to the blockchain - - parameter transaction: transaction to send - - parameter password: password to decrypt sender's private key - - returns: transaction hash + - Parameter transaction: Transaction to send + - Parameter password: Password to decrypt sender's private key + - Returns: Transaction hash */ public func sendTransaction(_ transaction: EthereumTransaction, options: Web3Options, password: String = "BANKEXFOUNDATION") throws -> String { return try web3.eth.sendTransaction(transaction, options: options, password: password).hash @@ -133,8 +135,8 @@ public class Web3BrowserFunctions: Web3OptionsInheritable { /** Estimates gas that can be used for this transaction - - parameter json: transaction to send - - returns: gas limit + - Parameter json: Transaction to send + - Returns: Gas limit */ public func estimateGas(_ json: [String: Any]) throws -> BigUInt { let transaction = try EthereumTransaction(json) @@ -144,9 +146,9 @@ public class Web3BrowserFunctions: Web3OptionsInheritable { /** Estimates gas that can be used for this transaction - - parameter transaction: transaction to send - - parameter options: options that will be send with the transaction - - returns: gas limit + - Parameter transaction: Transaction to send + - Parameter options: Options that will be send with the transaction + - Returns: Gas limit */ public func estimateGas(_ transaction: EthereumTransaction, options: Web3Options) throws -> BigUInt { return try web3.eth.estimateGas(transaction, options: options) @@ -156,8 +158,8 @@ public class Web3BrowserFunctions: Web3OptionsInheritable { Prepares transaction to send. Converts json to transaction and options. Gets gas price and estimates gas for this transaction from node - - parameter json: Transaction to send - - returns: transaction and its options + - Parameter json: Transaction to send + - Returns: Transaction and its options */ public func prepareTxForApproval(_ json: [String: Any]) throws -> (transaction: EthereumTransaction, options: Web3Options) { let transaction = try EthereumTransaction(json) @@ -167,21 +169,32 @@ public class Web3BrowserFunctions: Web3OptionsInheritable { /// Transaction Errors public enum TransactionError: Error { - /// Throws if sender (options.from) is not setted + /// You have to set transaction sender in options.from case optionsFromNotFound - /// Throws if address is not found in your keystoreManager + /// Cannot find private key for address \(address) case privateKeyNotFound(forAddress: Address) - /// Throws if transaction cannot be signed + /// Cannot encode transaction case cannotEncodeTransaction + /// Printable / user displayable description + public var localizedDescription: String { + switch self { + case .optionsFromNotFound: + return "You have to set transaction sender in options.from" + case let .privateKeyNotFound(forAddress: address): + return "Cannot find private key for address \(address) in the keystore manager" + case .cannotEncodeTransaction: + return "Cannot encode transaction" + } + } } /** Prepares transaction to send. Gets gas price and estimates gas for this transaction from node - - important: you must set sender in `options.from` - - parameter transaction: Transaction to send - - returns: transaction and its options - - throws: TransactionError.optionsFromNotFound + - Important: You must set sender in `options.from` + - Parameter transaction: Transaction to send + - Returns: Transaction and its options + - Throws: TransactionError.optionsFromNotFound */ public func prepareTxForApproval(_ transaction: EthereumTransaction, options opts: Web3Options) throws -> (transaction: EthereumTransaction, options: Web3Options) { var transaction = transaction @@ -198,9 +211,9 @@ public class Web3BrowserFunctions: Web3OptionsInheritable { /** Signs transaction - - important: you must set sender in `options.from` - - parameter personalMessage: transaction to sign - - parameter password: password to decrypt private key + - Important: You must set sender in `options.from` + - Parameter personalMessage: Transaction to sign + - Parameter password: Password to decrypt private key */ public func signTransaction(_ json: [String: Any], password: String = "BANKEXFOUNDATION") throws -> String { let transaction = try EthereumTransaction(json) @@ -210,9 +223,9 @@ public class Web3BrowserFunctions: Web3OptionsInheritable { /** Signs transaction - - important: you must set sender in `options.from` - - parameter personalMessage: transaction to sign - - parameter password: password to decrypt private key + - Important: You must set sender in `options.from` + - Parameter personalMessage: Transaction to sign + - Parameter password: Password to decrypt private key */ public func signTransaction(_ trans: EthereumTransaction, options: Web3Options, password: String = "BANKEXFOUNDATION") throws -> String { var transaction = trans @@ -231,7 +244,7 @@ public class Web3BrowserFunctions: Web3OptionsInheritable { guard let keystore = keystoreManager.walletForAddress(from) else { throw TransactionError.privateKeyNotFound(forAddress: from) } try Web3Signer.signTX(transaction: &transaction, keystore: keystore, account: from, password: password) - guard let signedData = transaction.encode(forSignature: false, chainId: nil)?.toHexString().withHex else { throw TransactionError.cannotEncodeTransaction } + guard let signedData = transaction.encode(forSignature: false, chainId: nil)?.hex.withHex else { throw TransactionError.cannotEncodeTransaction } return signedData } } diff --git a/Example/Pods/web3swift/Sources/HookedFunctions/Web3+Wallet.swift b/Example/Pods/web3swift/Sources/HookedFunctions/Web3+Wallet.swift index 8bd05c5d..86dea94f 100644 --- a/Example/Pods/web3swift/Sources/HookedFunctions/Web3+Wallet.swift +++ b/Example/Pods/web3swift/Sources/HookedFunctions/Web3+Wallet.swift @@ -8,29 +8,38 @@ import BigInt // import Foundation +/// Web3Wallet errors public enum Web3WalletError: Error { + /// Wallet doesn't have any accounts case noAccounts + /// Printable / user displayable description + public var localizedDescription: String { + switch self { + case .noAccounts: + return "Wallet doesn't have any accounts" + } + } } /// Wallet functions public class Web3Wallet { - /// provider for some functions + /// Provider for some functions var provider: Web3Provider unowned var web3: Web3 - /// init with provider and web3 instance + /// Init with provider and web3 instance public init(provider prov: Web3Provider, web3 web3instance: Web3) { provider = prov web3 = web3instance } - /// - returns: all accounts in your keystoreManager + /// - Returns: All accounts in your keystoreManager public func getAccounts() -> [Address] { return web3.provider.attachedKeystoreManager.addresses } - /// - returns: returns first account in your keystoreManager - /// - throws: + /// - Returns: Returns first account in your keystoreManager + /// - Throws: /// Web3WalletError.noAccounts public func getCoinbase() throws -> Address { guard let account = getAccounts().first else { throw Web3WalletError.noAccounts } @@ -38,10 +47,10 @@ public class Web3Wallet { } /// Signs transaction with account - /// - parameter transaction: transaction to sign - /// - parameter account: Address that signs message - /// - parameter password: Password to decrypt account's private key - /// - throws: + /// - Parameter transaction: Transaction to sign + /// - Parameter account: Address that signs message + /// - Parameter password: Password to decrypt account's private key + /// - Throws: /// AbstractKeystoreError /// Error public func signTX(transaction: inout EthereumTransaction, account: Address, password: String = "BANKEXFOUNDATION") throws { @@ -51,11 +60,11 @@ public class Web3Wallet { /// Signs personalMessage with account - /// - parameter personalMessage: Message to sign - /// - parameter account: Address that signs message - /// - parameter password: Password to decrypt account's private key - /// - returns: signed message - /// - throws: SECP256K1Error + /// - Parameter personalMessage: Message to sign + /// - Parameter account: Address that signs message + /// - Parameter password: Password to decrypt account's private key + /// - Returns: Signed message + /// - Throws: SECP256K1Error /// DataError.hexStringCorrupted(String) public func signPersonalMessage(_ personalMessage: String, account: Address, password: String = "BANKEXFOUNDATION") throws -> Data { let data = try personalMessage.dataFromHex() @@ -63,11 +72,11 @@ public class Web3Wallet { } /// Signs personalMessage with account - /// - parameter personalMessage: Message to sign - /// - parameter account: Address that signs message - /// - parameter password: Password to decrypt account's private key - /// - returns: signed message - /// - throws: SECP256K1Error + /// - Parameter personalMessage: Message to sign + /// - Parameter account: Address that signs message + /// - Parameter password: Password to decrypt account's private key + /// - Returns: Signed message + /// - Throws: SECP256K1Error public func signPersonalMessage(_ personalMessage: Data, account: Address, password: String = "BANKEXFOUNDATION") throws -> Data { let keystoreManager = self.web3.provider.attachedKeystoreManager return try Web3Signer.signPersonalMessage(personalMessage, keystore: keystoreManager, account: account, password: password) diff --git a/Example/Pods/web3swift/Sources/KeystoreManager/AbstractKeystore.swift b/Example/Pods/web3swift/Sources/KeystoreManager/AbstractKeystore.swift index 426e6e54..b950317f 100644 --- a/Example/Pods/web3swift/Sources/KeystoreManager/AbstractKeystore.swift +++ b/Example/Pods/web3swift/Sources/KeystoreManager/AbstractKeystore.swift @@ -31,6 +31,7 @@ public enum AbstractKeystoreError: Error { /// Some other encryption errors case encryptionError(String) + /// Printable / user displayable description public var localizedDescription: String { switch self { case .keyDerivationError: diff --git a/Example/Pods/web3swift/Sources/KeystoreManager/BIP32HDNode.swift b/Example/Pods/web3swift/Sources/KeystoreManager/BIP32HDNode.swift index cbbe940e..21eab1bf 100644 --- a/Example/Pods/web3swift/Sources/KeystoreManager/BIP32HDNode.swift +++ b/Example/Pods/web3swift/Sources/KeystoreManager/BIP32HDNode.swift @@ -7,11 +7,11 @@ // import BigInt -import CryptoSwift +//import Cryptor import Foundation extension UInt32 { - /// - returns: Serialized bigEndian value as Data + /// - Returns: Serialized bigEndian value as Data public func serialize32() -> Data { var data = Data(count: 4) data.withUnsafeMutableBytes { (body: UnsafeMutablePointer) in @@ -34,32 +34,46 @@ private extension Data { } } +/** + Represents + */ public class HDNode { + /// HD version public struct HDversion { - public var privatePrefix = Data.fromHex("0x0488ADE4")! - public var publicPrefix = Data.fromHex("0x0488B21E")! + /// Private key prefix. Default: 0x0488ADE4 + public var privatePrefix = Data(hex: "0x0488ADE4") + /// Public key prefix. Default: 0x0488B21E + public var publicPrefix = Data(hex: "0x0488B21E") + /// Init with default values public init() {} } - + + /// Current path public var path: String? = "m" + /// Private key public var privateKey: Data? + /// Public Key public var publicKey: Data + /// Chain code public var chaincode: Data + /// Current depth public var depth: UInt8 + /// Parent 4 byte RIPEMD160 hash prefix public var parentFingerprint: Data = Data(repeating: 0, count: 4) - public var childNumber: UInt32 = UInt32(0) + /// Child number + public var childNumber: UInt32 = 0 + + /// Returns true if childNumber is greater than Int32.max public var isHardened: Bool { - return childNumber >= (UInt32(1) << 31) + return childNumber >= HDNode.hardenedIndexPrefix } - + + /// Returns isHardened ? childNumber - HDNode.hardenedIndexPrefix : childNumber public var index: UInt32 { - if isHardened { - return childNumber - (UInt32(1) << 31) - } else { - return childNumber - } + return isHardened ? childNumber - HDNode.hardenedIndexPrefix : childNumber } + /// Returns privateKey != nil public var hasPrivate: Bool { return privateKey != nil } @@ -70,11 +84,13 @@ public class HDNode { depth = UInt8(0) } + /// Init with Base58 encoded string public convenience init?(_ serializedString: String) { let data = Data(Base58.bytesFromBase58(serializedString)) self.init(data) } - + + /// Init with binary represented HDNode public init?(_ data: Data) { guard data.count == 82 else { return nil } let header = data[0 ..< 4] @@ -101,17 +117,33 @@ public class HDNode { let checksum = hashedData[0 ..< 4] if checksum != data[78 ..< 82] { return nil } } - + + /// HDNode errors public enum Error: Swift.Error { - case invalidSeedSize // seed.count should be at least 16 bytes + /// Seed size should be at least 16 bytes + case invalidSeedSize + /// Entropy size should be 64 bytes case invalidEntropySize + /// Public key should start with 0x02 or 0x03 case invalidPublicKeyPrefix + /// Printable / user displayable description + public var localizedDescription: String { + switch self { + case .invalidSeedSize: + return "Seed size should be at least 16 bytes" + case .invalidEntropySize: + return "Entropy size should be 64 bytes" + case .invalidPublicKeyPrefix: + return "Public key should start with 0x02 or 0x03" + } + } } - + + /// Init with seed public init(seed: Data) throws { guard seed.count >= 16 else { throw Error.invalidSeedSize } let hmacKey = "Bitcoin seed".data(using: .ascii)! - let hmac: Authenticator = HMAC(key: hmacKey.bytes, variant: HMAC.Variant.sha512) + let hmac = HMAC(key: hmacKey.bytes, variant: .sha512) let entropy = try hmac.authenticate(seed.bytes) try entropy.checkEntropySize() let I_L = entropy[0 ..< 32] @@ -128,33 +160,63 @@ public class HDNode { } private static var curveOrder = BigUInt("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141", radix: 16)! + + /// "m/44'/60'/0'/0" public static var defaultPath: String = "m/44'/60'/0'/0" + /// "m/44'/60'/0'" public static var defaultPathPrefix: String = "m/44'/60'/0'" + /// "m/44'/60'/0'/0/0" public static var defaultPathMetamask: String = "m/44'/60'/0'/0/0" + /// "m/44'/60'/0'/0" public static var defaultPathMetamaskPrefix: String = "m/44'/60'/0'/0" + /// 1 << 31 or UInt32(Int32.max) + 1 public static var hardenedIndexPrefix: UInt32 = (UInt32(1) << 31) -} -extension HDNode { + /// Derive Errors public enum DeriveError: Swift.Error { + /// You have to provide a private key if you want to derive private key case providePrivateKey + + /// Provided index is too big case indexIsTooBig + + /// Depth shouldn't be deeper than 254 levels case depthIsTooBig - case noHardenedDerivation // no derivation of hardened public key from extended public key - case pathComponentsShouldBeConvertableToNumber + + /// Cannot derive public key in hardened mode + case noHardenedDerivation + + /// Cannot derive public key in hardened mode + case pathComponentsShouldBeConvertibleToNumber + /// Printable / user displayable description + public var localizedDescription: String { + switch self { + case .providePrivateKey: + return "You have to provide a private key" + case .indexIsTooBig: + return "Provided index is too big" + case .depthIsTooBig: + return "Depth shouldn't be deeper than 254 levels" + case .noHardenedDerivation: + return "Cannot derive public key in hardened mode" + case .pathComponentsShouldBeConvertibleToNumber: + return "HDPath index should should be convertible" + } + } } - + + /// Returns HDNode with new index public func derive(index: UInt32, derivePrivateKey: Bool, hardened: Bool = false) throws -> HDNode { if derivePrivateKey { guard hasPrivate else { throw DeriveError.providePrivateKey } let entropy: Array var trueIndex: UInt32 - if index >= (UInt32(1) << 31) || hardened { + if index >= HDNode.hardenedIndexPrefix || hardened { trueIndex = index - if trueIndex < (UInt32(1) << 31) { - trueIndex = trueIndex + (UInt32(1) << 31) + if trueIndex < HDNode.hardenedIndexPrefix { + trueIndex = trueIndex + HDNode.hardenedIndexPrefix } - let hmac: Authenticator = HMAC(key: chaincode.bytes, variant: .sha512) + let hmac = HMAC(key: chaincode.bytes, variant: .sha512) var inputForHMAC = Data() inputForHMAC.append(Data([UInt8(0x00)])) inputForHMAC.append(privateKey!) @@ -163,7 +225,7 @@ extension HDNode { try entropy.checkEntropySize() } else { trueIndex = index - let hmac: Authenticator = HMAC(key: chaincode.bytes, variant: .sha512) + let hmac = HMAC(key: chaincode.bytes, variant: .sha512) var inputForHMAC = Data() inputForHMAC.append(publicKey) inputForHMAC.append(trueIndex.serialize32()) @@ -206,8 +268,8 @@ extension HDNode { newNode.path = newPath return newNode } else { // deriving only the public key - guard !(index >= (UInt32(1) << 31) || hardened) else { throw DeriveError.noHardenedDerivation } - let hmac: Authenticator = HMAC(key: self.chaincode.bytes, variant: .sha512) + guard !(index >= HDNode.hardenedIndexPrefix || hardened) else { throw DeriveError.noHardenedDerivation } + let hmac = HMAC(key: self.chaincode.bytes, variant: .sha512) var inputForHMAC = Data() inputForHMAC.append(publicKey) inputForHMAC.append(index.serialize32()) @@ -244,7 +306,8 @@ extension HDNode { return newNode } } - + + /// Returns HDNode with appended path public func derive(path: String, derivePrivateKey: Bool = true) throws -> HDNode { let components = path.components(separatedBy: "/") var currentNode: HDNode = self @@ -258,18 +321,20 @@ extension HDNode { if hardened { component.removeLast() } - guard let index = UInt32(component) else { throw DeriveError.pathComponentsShouldBeConvertableToNumber } + guard let index = UInt32(component) else { throw DeriveError.pathComponentsShouldBeConvertibleToNumber } currentNode = try currentNode.derive(index: index, derivePrivateKey: derivePrivateKey, hardened: hardened) } return currentNode } - + + /// Base58 string representation of HDNode's data public func serializeToString(serializePublic: Bool = true, version: HDversion = HDversion()) -> String? { guard let data = self.serialize(serializePublic: serializePublic, version: version) else { return nil } let encoded = Base58.base58FromBytes(data.bytes) return encoded } - + + /// Data representation of HDNode public func serialize(serializePublic: Bool = true, version: HDversion = HDversion()) -> Data? { var data = Data() if !serializePublic && !hasPrivate { return nil } diff --git a/Example/Pods/web3swift/Sources/KeystoreManager/BIP32Keystore.swift b/Example/Pods/web3swift/Sources/KeystoreManager/BIP32Keystore.swift index 6cd014d6..0d12dfaa 100644 --- a/Example/Pods/web3swift/Sources/KeystoreManager/BIP32Keystore.swift +++ b/Example/Pods/web3swift/Sources/KeystoreManager/BIP32Keystore.swift @@ -6,7 +6,6 @@ // Copyright © 2018 Bankex Foundation. All rights reserved. // -import CryptoSwift import Foundation private extension Dictionary where Value: Equatable { @@ -18,9 +17,12 @@ private extension Dictionary where Value: Equatable { } } +/** + BIP32 Keystore (HDWallet) + + */ public class BIP32Keystore: AbstractKeystore { - // Protocol - + /// Returns array of contained addresses public var addresses: [Address] { guard !paths.isEmpty else { return [] } var allAccounts = [Address]() @@ -30,8 +32,14 @@ public class BIP32Keystore: AbstractKeystore { return allAccounts } + /// Returns true public var isHDKeystore: Bool = true - + + /// Searches for the account's encrypted private key and decrypts it using password. + /// + /// - Parameter password: Password that used to decrypt your key. + /// - Parameter account: Account that you need + /// - Returns: private key for given address public func UNSAFE_getPrivateKeyData(password: String, account: Address) throws -> Data { guard let key = self.paths.key(of: account) else { throw AbstractKeystoreError.invalidAccountError } guard let decryptedRootNode = try? self.getPrefixNodeData(password), decryptedRootNode != nil else { throw AbstractKeystoreError.encryptionError("Failed to decrypt a keystore") } @@ -46,41 +54,65 @@ public class BIP32Keystore: AbstractKeystore { // -------------- + /// Json representation of the HDWallet public var keystoreParams: KeystoreParamsBIP32? // public var mnemonics: String? + /// Paths dictionary in format "HDPath: Address" public var paths: [String: Address] = [String: Address]() + + /// HDPath prefix. default: "m/44'/60'/0'/0" (Metamask prefix) public var rootPrefix: String + + /// Init with json file public convenience init?(_ jsonString: String) { self.init(jsonString.lowercased().data) } + /// Init with json file public init?(_ jsonData: Data) { - guard var keystorePars = try? JSONDecoder().decode(KeystoreParamsBIP32.self, from: jsonData) else { return nil } - if keystorePars.version != 3 { return nil } - if keystorePars.crypto.version != nil && keystorePars.crypto.version != "1" { return nil } - if !keystorePars.isHDWallet { return nil } - for (p, ad) in keystorePars.pathToAddress { + guard var keystoreParams = try? JSONDecoder().decode(KeystoreParamsBIP32.self, from: jsonData) else { return nil } + if keystoreParams.version != 3 { return nil } + if keystoreParams.crypto.version != nil && keystoreParams.crypto.version != "1" { return nil } + if !keystoreParams.isHDWallet { return nil } + for (p, ad) in keystoreParams.pathToAddress { paths[p] = Address(ad) } - if keystorePars.rootPath == nil { - keystorePars.rootPath = HDNode.defaultPathPrefix + if keystoreParams.rootPath == nil { + keystoreParams.rootPath = HDNode.defaultPathPrefix } - keystoreParams = keystorePars - rootPrefix = keystoreParams!.rootPath! + self.keystoreParams = keystoreParams + rootPrefix = keystoreParams.rootPath! } + /// Init with mnemonics + /// - Parameter mnemonics: Mnemonics that needs to generate your account + /// - Parameter password: Password used to encrypt your private key + /// - Parameter prefixPath: HDNode path. default: "m/44'/60'/0'/0" (Metamask prefix) + /// Shouldn't throw if you generate your mnemonics public convenience init(mnemonics: Mnemonics, password: String = "BANKEXFOUNDATION", prefixPath: String = HDNode.defaultPathMetamaskPrefix) throws { var seed = mnemonics.seed() defer { Data.zero(&seed) } try self.init(seed: seed, password: password, prefixPath: prefixPath) } + /// Init with seed + /// - Parameter seed: Seed that need to generate your account + /// - Parameter password: Password used to encrypt your private key + /// - Parameter prefixPath: HDNode path. default: "m/44'/60'/0'/0" (Metamask prefix) public init(seed: Data, password: String = "BANKEXFOUNDATION", prefixPath: String = HDNode.defaultPathMetamaskPrefix) throws { let prefixNode = try HDNode(seed: seed).derive(path: prefixPath, derivePrivateKey: true) rootPrefix = prefixPath try createNewAccount(parentNode: prefixNode, password: password) } - + + /** + Creates new sub account using the same seed (mnemonics) + + So for HDPath "m/44'/60'/0'/0". Will generate sub account "m/44'/60'/0'/1". + + Also automatically searches in current paths. + So it wouldn't skip any index or create an existing account. + */ public func createNewChildAccount(password: String = "BANKEXFOUNDATION") throws { guard let decryptedRootNode = try? self.getPrefixNodeData(password), decryptedRootNode != nil else { throw AbstractKeystoreError.encryptionError("Failed to decrypt a keystore") } guard let rootNode = HDNode(decryptedRootNode!) else { throw AbstractKeystoreError.encryptionError("Failed to deserialize a root node") } @@ -88,7 +120,8 @@ public class BIP32Keystore: AbstractKeystore { guard rootNode.depth == prefixPath.components(separatedBy: "/").count - 1 else { throw AbstractKeystoreError.encryptionError("Derivation depth mismatch") } try createNewAccount(parentNode: rootNode, password: password) } - + + /// Creates new account using custom HDNode public func createNewAccount(parentNode: HDNode, password: String = "BANKEXFOUNDATION", aesMode: String = "aes-128-cbc") throws { var newIndex = UInt32(0) for (p, _) in paths { @@ -111,6 +144,7 @@ public class BIP32Keystore: AbstractKeystore { try encryptDataToStorage(password, data: serializedRootNode, aesMode: aesMode) } + /// Creates sub account using custom HDNode public func createNewCustomChildAccount(password: String = "BANKEXFOUNDATION", path: String) throws { guard let decryptedRootNode = try? self.getPrefixNodeData(password), decryptedRootNode != nil else { throw AbstractKeystoreError.encryptionError("Failed to decrypt a keystore") } guard let rootNode = HDNode(decryptedRootNode!) else { throw AbstractKeystoreError.encryptionError("Failed to deserialize a root node") } @@ -159,12 +193,13 @@ public class BIP32Keystore: AbstractKeystore { let last16bytes = derivedKey[(derivedKey.count - 16) ... (derivedKey.count - 1)] let encryptionKey = derivedKey[0 ... 15] let IV = Data.random(length: 16) + var aesCipher: AES? switch aesMode { case "aes-128-cbc": - aesCipher = try? AES(key: encryptionKey.bytes, blockMode: CBC(iv: IV.bytes), padding: .pkcs7) + aesCipher = AES(key: encryptionKey.bytes, blockMode: CBC(iv: IV.bytes), padding: .pkcs7) case "aes-128-ctr": - aesCipher = try? AES(key: encryptionKey.bytes, blockMode: CTR(iv: IV.bytes), padding: .pkcs7) + aesCipher = AES(key: encryptionKey.bytes, blockMode: CTR(iv: IV.bytes), padding: .pkcs7) default: aesCipher = nil } @@ -176,10 +211,10 @@ public class BIP32Keystore: AbstractKeystore { var dataForMAC = Data() dataForMAC.append(last16bytes) dataForMAC.append(encryptedKeyData) - let mac = dataForMAC.sha3(.keccak256) - let kdfparams = KdfParamsV3(salt: saltData.toHexString(), dklen: dkLen, n: N, p: P, r: R, c: nil, prf: nil) - let cipherparams = CipherParamsV3(iv: IV.toHexString()) - let crypto = CryptoParamsV3(ciphertext: encryptedKeyData.toHexString(), cipher: aesMode, cipherparams: cipherparams, kdf: "scrypt", kdfparams: kdfparams, mac: mac.toHexString(), version: nil) + let mac = dataForMAC.keccak256() + let kdfparams = KdfParamsV3(salt: saltData.hex, dklen: dkLen, n: N, p: P, r: R, c: nil, prf: nil) + let cipherparams = CipherParamsV3(iv: IV.hex) + let crypto = CryptoParamsV3(ciphertext: encryptedKeyData.hex, cipher: aesMode, cipherparams: cipherparams, kdf: "scrypt", kdfparams: kdfparams, mac: mac.hex, version: nil) var pathToAddress = [String: String]() for (path, address) in paths { pathToAddress[path] = address.address @@ -190,6 +225,7 @@ public class BIP32Keystore: AbstractKeystore { keystoreParams = keystorePars } + /// Update password for your private key public func regenerate(oldPassword: String, newPassword: String, dkLen _: Int = 32, N _: Int = 4096, R _: Int = 6, P _: Int = 1) throws { var keyData = try getPrefixNodeData(oldPassword) if keyData == nil { @@ -212,20 +248,9 @@ public class BIP32Keystore: AbstractKeystore { passwordDerivedKey = scrypt(password: password, salt: saltData, length: derivedLen, N: N, R: R, P: P) case "pbkdf2": guard let algo = keystorePars.crypto.kdfparams.prf else { return nil } - var hashVariant: HMAC.Variant? - switch algo { - case "hmac-sha256": - hashVariant = HMAC.Variant.sha256 - case "hmac-sha384": - hashVariant = HMAC.Variant.sha384 - case "hmac-sha512": - hashVariant = HMAC.Variant.sha512 - default: - hashVariant = nil - } - guard hashVariant != nil else { return nil } + let hashVariant = try HmacVariant(algo) guard let c = keystorePars.crypto.kdfparams.c else { return nil } - guard let derivedArray = try? PKCS5.PBKDF2(password: Array(password.utf8), salt: saltData.bytes, iterations: c, keyLength: derivedLen, variant: hashVariant!).calculate() else { return nil } + guard let derivedArray = try? BetterPBKDF(password: Array(password.utf8), salt: saltData.bytes, iterations: c, keyLength: derivedLen, variant: hashVariant) else { return nil } passwordDerivedKey = Data(bytes: derivedArray) default: return nil @@ -237,7 +262,7 @@ public class BIP32Keystore: AbstractKeystore { guard let cipherText = Data.fromHex(keystorePars.crypto.ciphertext) else { return nil } guard cipherText.count % 32 == 0 else { return nil } dataForMAC.append(cipherText) - let mac = dataForMAC.sha3(.keccak256) + let mac = dataForMAC.keccak256() guard let calculatedMac = Data.fromHex(keystorePars.crypto.mac), mac.constantTimeComparisonTo(calculatedMac) else { return nil } let cipher = keystorePars.crypto.cipher let decryptionKey = derivedKey[0 ... 15] @@ -245,10 +270,10 @@ public class BIP32Keystore: AbstractKeystore { var decryptedPK: Array? switch cipher { case "aes-128-ctr": - guard let aesCipher = try? AES(key: decryptionKey.bytes, blockMode: CTR(iv: IV.bytes), padding: .pkcs7) else { return nil } + let aesCipher = AES(key: decryptionKey.bytes, blockMode: CTR(iv: IV.bytes), padding: .pkcs7) decryptedPK = try aesCipher.decrypt(cipherText.bytes) case "aes-128-cbc": - guard let aesCipher = try? AES(key: decryptionKey.bytes, blockMode: CBC(iv: IV.bytes), padding: .pkcs7) else { return nil } + let aesCipher = AES(key: decryptionKey.bytes, blockMode: CBC(iv: IV.bytes), padding: .pkcs7) decryptedPK = try? aesCipher.decrypt(cipherText.bytes) default: return nil @@ -257,13 +282,15 @@ public class BIP32Keystore: AbstractKeystore { guard decryptedPK?.count == 82 else { return nil } return Data(bytes: decryptedPK!) } - + + /// Returns Json file that you can store and export public func serialize() throws -> Data? { guard let params = self.keystoreParams else { return nil } let data = try JSONEncoder().encode(params) return data } + /// Returns your root node string public func serializeRootNodeToString(password: String = "BANKEXFOUNDATION") throws -> String { guard let decryptedRootNode = try? self.getPrefixNodeData(password), decryptedRootNode != nil else { throw AbstractKeystoreError.encryptionError("Failed to decrypt a keystore") } guard let rootNode = HDNode(decryptedRootNode!) else { throw AbstractKeystoreError.encryptionError("Failed to deserialize a root node") } @@ -271,3 +298,22 @@ public class BIP32Keystore: AbstractKeystore { return string } } + +/// HDWallet Json parameters (Native representation) +public struct KeystoreParamsBIP32: Decodable, Encodable { + var crypto: CryptoParamsV3 + var id: String? + var version: Int = 32 + var isHDWallet: Bool + var pathToAddress: [String: String] + var rootPath: String? + + init(crypto cr: CryptoParamsV3, id i: String, version ver: Int, rootPath: String? = nil) { + crypto = cr + id = i + version = ver + isHDWallet = true + pathToAddress = [String: String]() + self.rootPath = rootPath + } +} diff --git a/Example/Pods/web3swift/Sources/KeystoreManager/BIP32KeystoreJSONStructure.swift b/Example/Pods/web3swift/Sources/KeystoreManager/BIP32KeystoreJSONStructure.swift deleted file mode 100644 index 656a4d0b..00000000 --- a/Example/Pods/web3swift/Sources/KeystoreManager/BIP32KeystoreJSONStructure.swift +++ /dev/null @@ -1,27 +0,0 @@ -// -// BIP32KeystoreJSONStructure.swift -// web3swift -// -// Created by Alexander Vlasov on 11.01.2018. -// Copyright © 2018 Bankex Foundation. All rights reserved. -// - -import Foundation - -public struct KeystoreParamsBIP32: Decodable, Encodable { - var crypto: CryptoParamsV3 - var id: String? - var version: Int = 32 - var isHDWallet: Bool - var pathToAddress: [String: String] - var rootPath: String? - - public init(crypto cr: CryptoParamsV3, id i: String, version ver: Int, rootPath: String? = nil) { - crypto = cr - id = i - version = ver - isHDWallet = true - pathToAddress = [String: String]() - self.rootPath = rootPath - } -} diff --git a/Example/Pods/web3swift/Sources/KeystoreManager/BIP39.swift b/Example/Pods/web3swift/Sources/KeystoreManager/BIP39.swift index 5efa63e7..934643b9 100644 --- a/Example/Pods/web3swift/Sources/KeystoreManager/BIP39.swift +++ b/Example/Pods/web3swift/Sources/KeystoreManager/BIP39.swift @@ -6,20 +6,30 @@ // Copyright © 2018 Bankex Foundation. All rights reserved. // -import CryptoSwift +//import Cryptor import Foundation /// Mnemonics language -public enum BIP39Language { +public enum BIP39Language: String { + /// English word list case english + /// Chinese simplified word list case chinese_simplified + /// Chinese traditional word list case chinese_traditional + /// Japanese word list case japanese + /// Korean word list case korean + /// French word list case french + /// Italian word list case italian + /// Spanish word list case spanish - var words: [String] { + + /// Array of words in the language + public var words: [String] { switch self { case .english: return englishWords @@ -40,7 +50,8 @@ public enum BIP39Language { } } - var separator: String { + /// Word separator ("\u{3000}") for japanese and " " for anyone else + public var separator: String { switch self { case .japanese: return "\u{3000}" @@ -52,15 +63,19 @@ public enum BIP39Language { /// Mnemonics entropy size public enum EntropySize: Int { + /// 128 bit entropy case b128 = 128 + /// 160 bit entropy case b160 = 160 + /// 192 bit entropy case b192 = 192 + /// 224 bit entropy case b224 = 224 + /// 256 bit entropy case b256 = 256 } -/** - Mnemonics class. Used to generate/create/import ethereum account +/** Mnemonics class. Used to generate/create/import ethereum account To generate mnemonics use: ``` @@ -88,15 +103,40 @@ public enum EntropySize: Int { public class Mnemonics { /// Mnemonics init with data error public enum Error: Swift.Error { + /// Invalid entropy size. Entropy size should be at least 16 bytes long and a multiple of four case invalidEntropySize + /// Printable / user displayable description + public var localizedDescription: String { + return "Invalid entropy size. Entropy size should be greater than 15 and a multiple of four" + } } /// Mnemonics init with string error public enum EntropyError: Swift.Error { + /// Not enough words. Your mnemonics should have at least 12 words case notEnoughtWords + /// Invalid number of words. It is necessary that the number of words be a multiple of four case invalidNumberOfWords + /// Cannot find word \"\(string)\" in our dictionary case wordNotFound(String) + /// Invalid words order case invalidOrderOfWords + /// Checksum failed checksum: \(string1). expected: \(string2) case checksumFailed(String,String) + /// Printable / user displayable description + public var localizedDescription: String { + switch self { + case .notEnoughtWords: + return "Not enough words. Your mnemonics should have at least 12 words" + case .invalidNumberOfWords: + return "Invalid number of words. It is necessary that the number of words be a multiple of four" + case let .wordNotFound(string): + return "Cannot find word \"\(string)\" in our dictionary" + case .invalidOrderOfWords: + return "Invalid words order" + case let .checksumFailed(string1,string2): + return "Checksum failed checksum: \(string1). expected: \(string2)" + } + } } /// Mnemonics string public let string: String @@ -109,15 +149,14 @@ public class Mnemonics { /** Mnemonics password - - important: Mnemonics password affects on privateKey generation - - important: WARNING: User cannot use mnemonics generated with password in metamask or some other services that doesn't support mnemonics password - - important: With different password you will generate different address + - Important: Mnemonics password affects on privateKey generation + - Important: WARNING: User cannot use mnemonics generated with password in metamask or some other services that doesn't support mnemonics password + - Important: With different password you will generate different address */ public var password: String = "" /// Generate seed from mnemonics string. This function will ignore dictionary and won't check for mnemonics error public static func seed(from mnemonics: String, password: String) -> Data { - let mnemData = Array(mnemonics.decomposedStringWithCompatibilityMapping.utf8) let salt = "mnemonic" + password let saltData = Array(salt.decomposedStringWithCompatibilityMapping.utf8) @@ -125,15 +164,15 @@ public class Mnemonics { // or keyLength > variant.digestLength * 256 // and .calculate() won't throw any errors // so i feel free to use "try!" - let seed = try! PKCS5.PBKDF2(password: mnemData, salt: saltData, iterations: 2048, keyLength: 64, variant: .sha512).calculate() + let seed = try! PBKDF.deriveKey(fromPassword: mnemonics.decomposedStringWithCompatibilityMapping, salt: saltData, prf: .sha512, rounds: 2048, derivedKeyLength: 64) return Data(bytes: seed) } /** Init with imported mnemonics string and specific language - - throws: An error of type Mnemonics.EntropyError - - parameter string: mnemonics string - - parameter language: mnemonics language. default: .english + - Throws: An error of type Mnemonics.EntropyError + - Parameter string: Mnemonics string + - Parameter language: Mnemonics language. default: .english Requirements: 1. Minimum 12 words @@ -171,8 +210,8 @@ public class Mnemonics { /** Generate mnemonics with entropy size and language - - parameter entropySize: mnemonics seed size. default: .b256 - - parameter language: mnemonics dictionary language. default: .english + - Parameter entropySize: Mnemonics seed size. default: .b256 + - Parameter language: Mnemonics dictionary language. default: .english */ public init(entropySize: EntropySize = .b256, language: BIP39Language = .english) { self.entropy = Data.random(length: entropySize.rawValue / 8) @@ -181,22 +220,23 @@ public class Mnemonics { var fullEntropy = Data() fullEntropy.append(entropy) fullEntropy.append(checksum[0 ..< (checksumBits + 7) / 8]) - var wordList = [String]() + let separator = language.separator + let words = language.words + var indexes = [Int]() for i in 0 ..< fullEntropy.count * 8 / 11 { let bits = fullEntropy.bitsInRange(i * 11, 11) let index = Int(bits) - let word = language.words[index] - wordList.append(word) + indexes.append(index) } - self.string = wordList.joined(separator: language.separator) + self.string = indexes.map { words[$0] }.joined(separator: separator) self.language = language } /** Generate mnemonics with pregenerated entropy data - - parameter entropy: seed which generates mnemonics string - - parameter language: mnemonics dictionary language. default: .english - - throws: Error.invalidEntropySize if entropy data has invalid size (< 16 || % 4 != 0) + - Parameter entropy: Seed which generates mnemonics string + - Parameter language: Mnemonics dictionary language. default: .english + - Throws: Error.invalidEntropySize if entropy data has invalid size (< 16 || % 4 != 0) */ public init(entropy: Data, language: BIP39Language = .english) throws { guard entropy.count >= 16, entropy.count % 4 == 0 else { throw Error.invalidEntropySize } @@ -218,7 +258,7 @@ public class Mnemonics { self.language = language } - /// - returns: seed from mnemonics + /// - Returns: Seed from mnemonics public func seed() -> Data { return Mnemonics.seed(from: string, password: password) } @@ -226,8 +266,8 @@ public class Mnemonics { extension Mnemonics: CustomStringConvertible { /** - mnemonics description - - returns: .string + Mnemonics description + - Returns: .string */ public var description: String { return string diff --git a/Example/Pods/web3swift/Sources/KeystoreManager/EthereumAddress.swift b/Example/Pods/web3swift/Sources/KeystoreManager/EthereumAddress.swift index 8c99e75b..cc35efa0 100644 --- a/Example/Pods/web3swift/Sources/KeystoreManager/EthereumAddress.swift +++ b/Example/Pods/web3swift/Sources/KeystoreManager/EthereumAddress.swift @@ -11,7 +11,15 @@ import Foundation /// Address error public enum AddressError: Error { + /// Provided address is not valid (\(string)) case invalidAddress(String) + /// Printable / user displayable description + public var localizedDescription: String { + switch self { + case let .invalidAddress(string): + return "Provided address is not valid (\(string))" + } + } } /** @@ -49,8 +57,11 @@ public enum AddressError: Error { ``` */ public struct Address { + /// Address type public enum AddressType { + /// Any ethereum address case normal + /// Address for contract deployment case contractDeployment } @@ -73,10 +84,7 @@ public struct Address { public var addressData: Data { switch type { case .normal: - guard let dataArray = Data.fromHex(_address) else { return Data() } - return dataArray - // guard let d = dataArray.setLengthLeft(20) else { return Data()} - // return d + return Data.fromHex(_address) ?? Data() case .contractDeployment: return Data() } @@ -96,7 +104,7 @@ public struct Address { /// Converts address to checksum address public static func toChecksumAddress(_ addr: String) -> String? { let address = addr.lowercased().withoutHex - guard let hash = address.data(using: .ascii)?.sha3(.keccak256).toHexString() else { return nil } + guard let hash = address.data(using: .ascii)?.keccak256().hex else { return nil } var ret = "0x" for (i, char) in address.enumerated() { @@ -114,9 +122,9 @@ public struct Address { return ret } - /// init with addressString and type - /// - parameter addressString: hex string of address - /// - parameter type: address type. default: .normal + /// Init with addressString and type + /// - Parameter addressString: Hex string of address + /// - Parameter type: Address type. default: .normal /// Automatically adds 0x prefix if its not found public init(_ addressString: String, type: AddressType = .normal) { switch type { @@ -130,21 +138,21 @@ public struct Address { } } - /// - parameter addressData: address data - /// - parameter type: address type. default: .normal - /// - important: addressData is not the utf8 format of hex string + /// - Parameter addressData: Address data + /// - Parameter type: Address type. default: .normal + /// - Important: addressData is not the utf8 format of hex string public init(_ addressData: Data, type: AddressType = .normal) { - _address = addressData.toHexString().withHex + _address = addressData.hex.withHex self.type = type } /// checks if address is valid - /// - throws: AddressError.invalidAddress if its not valid + /// - Throws: AddressError.invalidAddress if its not valid public func check() throws { guard isValid else { throw AddressError.invalidAddress(_address) } } - /// - returns: "0x" address + /// - Returns: "0x" address public static var contractDeployment: Address { return Address("0x", type: .contractDeployment) } @@ -161,8 +169,14 @@ extension Address: Equatable { } } +extension Address: Hashable { + public var hashValue: Int { + return address.hashValue + } +} + extension Address: CustomStringConvertible { - /// - Returns: address hex string formatted to checksum + /// - Returns: Address hex string formatted to checksum public var description: String { return address } @@ -176,17 +190,17 @@ extension Address: ExpressibleByStringLiteral { } public extension String { - /// - returns: true if string is contract address + /// - Returns: true if string is contract address var isContractAddress: Bool { return Data(hex: self).count > 0 } - /// - returns: true is address is 20 bytes long + /// - Returns: true is address is 20 bytes long var isAddress: Bool { return Data(hex: self).count == 20 } - /// - returns: contract deployment address. + /// - Returns: Contract deployment address. var contractAddress: Address { return Address(self, type: .contractDeployment) } diff --git a/Example/Pods/web3swift/Sources/KeystoreManager/EthereumKeystoreV3.swift b/Example/Pods/web3swift/Sources/KeystoreManager/EthereumKeystoreV3.swift index 6c5e5d84..fdcb0fcd 100644 --- a/Example/Pods/web3swift/Sources/KeystoreManager/EthereumKeystoreV3.swift +++ b/Example/Pods/web3swift/Sources/KeystoreManager/EthereumKeystoreV3.swift @@ -6,24 +6,24 @@ // Copyright © 2017 Bankex Foundation. All rights reserved. // -import CryptoSwift import Foundation -public class EthereumKeystoreV3: AbstractKeystore { - // Class - - public func getAddress() -> Address? { - return address - } +/** +# Web3 Secret Storage - // Protocol +Used to store your account in json file safely +[https://github.com/ethereum/wiki/wiki/Web3-Secret-Storage-Definition](https://github.com/ethereum/wiki/wiki/Web3-Secret-Storage-Definition) +*/ +public class EthereumKeystoreV3: AbstractKeystore { + /// - Returns: array of single address or empty array public var addresses: [Address] { guard let address = address else { return [] } return [address] } - - public var isHDKeystore: Bool = false + + /// - Returns false + public var isHDKeystore = false /// throws AbstractKeystoreError.invalidPasswordError /// throws AbstractKeystoreError.invalidAccountError @@ -36,19 +36,23 @@ public class EthereumKeystoreV3: AbstractKeystore { throw AbstractKeystoreError.invalidAccountError } - // -------------- - private var address: Address? + /// Keystore address + public private(set) var address: Address? + /// Keystore Parameters (Json convertible) public var keystoreParams: KeystoreParamsV3? + /// Init with json file public convenience init?(_ jsonString: String) { self.init(jsonString.lowercased().data) } - + + /// Init with json file public convenience init?(_ jsonData: Data) { guard let keystoreParams = try? JSONDecoder().decode(KeystoreParamsV3.self, from: jsonData) else { return nil } self.init(keystoreParams) } - + + /// Init with decoded keystore parameters public init?(_ keystoreParams: KeystoreParamsV3) { if keystoreParams.version != 3 { return nil } if keystoreParams.crypto.version != nil && keystoreParams.crypto.version != "1" { return nil } @@ -59,13 +63,30 @@ public class EthereumKeystoreV3: AbstractKeystore { return nil } } - + + /** + Creates a new keystore with password and aesMode. + Clears the private key seed from memory after init + - Parameter password: Password that would be used to encrypt private key + - Parameter aesMode: Encryption mode. Allowed: "aes-128-cbc", "aes-128-ctr" + */ public init? (password: String = "BANKEXFOUNDATION", aesMode: String = "aes-128-cbc") throws { var newPrivateKey = Data.random(length: 32) defer { Data.zero(&newPrivateKey) } try encryptDataToStorage(password, keyData: newPrivateKey, aesMode: aesMode) } - + + /// Init with private key. Encrypts key but not clears it from memory. + /// + /// - Parameters: + /// - privateKey: Private key that would be used for this keystore + /// - password: Password that would be used to encrypt private key + /// - aesMode: Encryption mode. Allowed: "aes-128-cbc", "aes-128-ctr" + /// - Throws: Error if password is invalid or + /// - Important: Don't forget to clear your private key from memory using + /// ``` + /// Data.zero(&privateKey) + /// ``` public init? (privateKey: Data, password: String = "BANKEXFOUNDATION", aesMode: String = "aes-128-cbc") throws { guard privateKey.count == 32 else { return nil } try SECP256K1.verifyPrivateKey(privateKey: privateKey) @@ -85,9 +106,9 @@ public class EthereumKeystoreV3: AbstractKeystore { var aesCipher: AES! switch aesMode { case "aes-128-cbc": - aesCipher = try? AES(key: encryptionKey.bytes, blockMode: CBC(iv: IV.bytes), padding: .noPadding) + aesCipher = AES(key: encryptionKey.bytes, blockMode: CBC(iv: IV.bytes), padding: .noPadding) case "aes-128-ctr": - aesCipher = try? AES(key: encryptionKey.bytes, blockMode: CTR(iv: IV.bytes), padding: .noPadding) + aesCipher = AES(key: encryptionKey.bytes, blockMode: CTR(iv: IV.bytes), padding: .noPadding) default: aesCipher = nil } @@ -97,10 +118,10 @@ public class EthereumKeystoreV3: AbstractKeystore { var dataForMAC = Data() dataForMAC.append(last16bytes) dataForMAC.append(encryptedKeyData) - let mac = dataForMAC.sha3(.keccak256) - let kdfparams = KdfParamsV3(salt: saltData.toHexString(), dklen: dkLen, n: N, p: P, r: R, c: nil, prf: nil) - let cipherparams = CipherParamsV3(iv: IV.toHexString()) - let crypto = CryptoParamsV3(ciphertext: encryptedKeyData.toHexString(), cipher: aesMode, cipherparams: cipherparams, kdf: "scrypt", kdfparams: kdfparams, mac: mac.toHexString(), version: nil) + let mac = dataForMAC.keccak256() + let kdfparams = KdfParamsV3(salt: saltData.hex, dklen: dkLen, n: N, p: P, r: R, c: nil, prf: nil) + let cipherparams = CipherParamsV3(iv: IV.hex) + let crypto = CryptoParamsV3(ciphertext: encryptedKeyData.hex, cipher: aesMode, cipherparams: cipherparams, kdf: "scrypt", kdfparams: kdfparams, mac: mac.hex, version: nil) let pubKey = try Web3Utils.privateToPublic(keyData!) let addr = try Web3Utils.publicToAddress(pubKey) address = addr @@ -108,6 +129,7 @@ public class EthereumKeystoreV3: AbstractKeystore { keystoreParams = keystoreparams } + /// Updates account password public func regenerate(oldPassword: String, newPassword: String, dkLen _: Int = 32, N _: Int = 4096, R _: Int = 6, P _: Int = 1) throws { var keyData = try getKeyData(oldPassword) if keyData == nil { @@ -130,54 +152,108 @@ public class EthereumKeystoreV3: AbstractKeystore { passwordDerivedKey = scrypt(password: password, salt: saltData, length: derivedLen, N: N, R: R, P: P) case "pbkdf2": guard let algo = keystoreParams.crypto.kdfparams.prf else { return nil } - var hashVariant: HMAC.Variant? - switch algo { - case "hmac-sha256": - hashVariant = HMAC.Variant.sha256 - case "hmac-sha384": - hashVariant = HMAC.Variant.sha384 - case "hmac-sha512": - hashVariant = HMAC.Variant.sha512 - default: - hashVariant = nil - } - guard hashVariant != nil else { return nil } + let hashVariant = try HmacVariant(algo) guard let c = keystoreParams.crypto.kdfparams.c else { return nil } - guard let derivedArray = try? PKCS5.PBKDF2(password: Array(password.utf8), salt: saltData.bytes, iterations: c, keyLength: derivedLen, variant: hashVariant!).calculate() else { return nil } + guard let derivedArray = try? BetterPBKDF(password: Array(password.utf8), salt: saltData.bytes, iterations: c, keyLength: derivedLen, variant: hashVariant) else { return nil } passwordDerivedKey = Data(bytes: derivedArray) default: return nil } guard let derivedKey = passwordDerivedKey else { return nil } var dataForMAC = Data() - let derivedKeyLast16bytes = Data(derivedKey[(derivedKey.count - 16) ... (derivedKey.count - 1)]) - dataForMAC.append(derivedKeyLast16bytes) + dataForMAC.append(derivedKey.suffix(16)) guard let cipherText = Data.fromHex(keystoreParams.crypto.ciphertext) else { return nil } if cipherText.count != 32 { return nil } dataForMAC.append(cipherText) - let mac = dataForMAC.sha3(.keccak256) + let mac = dataForMAC.keccak256() guard let calculatedMac = Data.fromHex(keystoreParams.crypto.mac), mac.constantTimeComparisonTo(calculatedMac) else { return nil } let cipher = keystoreParams.crypto.cipher - let decryptionKey = derivedKey[0 ... 15] + let decryptionKey = derivedKey.prefix(16) guard let IV = Data.fromHex(keystoreParams.crypto.cipherparams.iv) else { return nil } var decryptedPK: Array? switch cipher { case "aes-128-ctr": - guard let aesCipher = try? AES(key: decryptionKey.bytes, blockMode: CTR(iv: IV.bytes), padding: .noPadding) else { return nil } + let aesCipher = AES(key: decryptionKey.bytes, blockMode: CTR(iv: IV.bytes), padding: .noPadding) decryptedPK = try aesCipher.decrypt(cipherText.bytes) case "aes-128-cbc": - guard let aesCipher = try? AES(key: decryptionKey.bytes, blockMode: CBC(iv: IV.bytes), padding: .noPadding) else { return nil } - decryptedPK = try? aesCipher.decrypt(cipherText.bytes) + let aesCipher = AES(key: decryptionKey.bytes, blockMode: CBC(iv: IV.bytes), padding: .noPadding) + decryptedPK = try aesCipher.decrypt(cipherText.bytes) default: return nil } guard decryptedPK != nil else { return nil } return Data(bytes: decryptedPK!) } - + + /// Returns json file encoded with v3 standard public func serialize() throws -> Data? { guard let params = self.keystoreParams else { return nil } - let data = try JSONEncoder().encode(params) + let encoder = JSONEncoder() + encoder.outputFormatting = .prettyPrinted + let data = try encoder.encode(params) return data } } + +/** + Keystore parameters [v3 compatible](https://github.com/ethereum/wiki/wiki/Web3-Secret-Storage-Definition) + + Json example: + ``` + { + "crypto" : { + "cipher" : "aes-128-ctr", + "cipherparams" : { + "iv" : "6087dab2f9fdbbfaddc31a909735c1e6" + }, + "ciphertext" : "5318b4d5bcd28de64ee5559e671353e16f075ecae9f99c7a79a38af5f869aa46", + "kdf" : "pbkdf2", + "kdfparams" : { + "c" : 262144, + "dklen" : 32, + "prf" : "hmac-sha256", + "salt" : "ae3cd4e7013836a3df6bd7241b12db061dbe2c6785853cce422d148a624ce0bd" + }, + "mac" : "517ead924a9d0dc3124507e3393d175ce3ff7c1e96529c6c555ce9e51205e9b2" + }, + "id" : "3198bc9c-6672-5ab3-d995-4942343ae5b6", + "version" : 3 + } + ``` + */ +public struct KeystoreParamsV3: Decodable, Encodable { + var address: String? + var crypto: CryptoParamsV3 + var id: String? + var version: Int + + /// Init with all params + public init(address ad: String?, crypto cr: CryptoParamsV3, id i: String, version ver: Int) { + address = ad + crypto = cr + id = i + version = ver + } +} +/// Keystore encryption info +public struct CryptoParamsV3: Decodable, Encodable { + var ciphertext: String + var cipher: String + var cipherparams: CipherParamsV3 + var kdf: String + var kdfparams: KdfParamsV3 + var mac: String + var version: String? +} +struct KdfParamsV3: Decodable, Encodable { + var salt: String + var dklen: Int + var n: Int? + var p: Int? + var r: Int? + var c: Int? + var prf: String? +} +struct CipherParamsV3: Decodable, Encodable { + var iv: String +} diff --git a/Example/Pods/web3swift/Sources/KeystoreManager/HDPath.swift b/Example/Pods/web3swift/Sources/KeystoreManager/HDPath.swift index 3b5c306e..766b6e21 100644 --- a/Example/Pods/web3swift/Sources/KeystoreManager/HDPath.swift +++ b/Example/Pods/web3swift/Sources/KeystoreManager/HDPath.swift @@ -10,53 +10,78 @@ import Foundation /// Can be used to check if HDPath is valid public class HDPath: ExpressibleByStringLiteral { + /// m/44'/60'/0'/0 public static var `default`: HDPath = "m/44'/60'/0'/0" + /// m/44'/60'/0' public static var defaultPrefix: HDPath = "m/44'/60'/0'" + /// m/44'/60'/0'/0/ public static var metamask: HDPath = "m/44'/60'/0'/0/0" + /// m/44'/60'/0'/0 public static var metamaskPrefix: HDPath = "m/44'/60'/0'/0" + /// 1 << 31 public static var hardenedIndexPrefix: UInt32 = (UInt32(1) << 31) + /// Path error public enum Error: Swift.Error { - case corrupted(String) + /// Invalid hdpath + case invalidHDPath(String) + /// Printable / user displayable description public var localizedDescription: String { switch self { - case let .corrupted(path): + case let .invalidHDPath(path): return "Invalid hdpath: \(path)" } } } + + /// Path component public struct Component: CustomStringConvertible { + /// Path index public var index: UInt32 + /// Is index hardened public var isHardened: Bool + /// String representation of the component public var description: String { return isHardened ? "\(index)'" : "\(index)" } } + /// Path starts with m/ public var m: Bool + /// Array of indexes public private(set) var components: [Component] + /// Parent path public var parent: HDPath? public typealias StringLiteralType = String - /// unsafe init with string. this one will crash if something goes wrong + /// Unsafe init with string. this one will crash if something goes wrong public required init(stringLiteral value: StringLiteralType) { (m,components) = try! HDPath.parse(value) } + + /// Init with path string public init(path: String) throws { (m,components) = try HDPath.parse(path) } + + /// Init with empty path. m = false public init() { m = false components = [] } + + /// Init with m and components public init(m: Bool = true, components: [Component]) { self.m = m self.components = components } + + /// Appends index to current path public func append(index: UInt32, hardened: Bool) { let index = hardened ? index % HDPath.hardenedIndexPrefix : index self.components.append(Component(index: index, isHardened: hardened)) } + /// Returns child path with new index public func appending(index: UInt32, hardened: Bool) -> HDPath { let index = hardened ? index % HDPath.hardenedIndexPrefix : index let component = Component(index: index, isHardened: hardened) @@ -64,6 +89,7 @@ public class HDPath: ExpressibleByStringLiteral { path.parent = self return path } + /// String representation of HDPath public var description: String { var string = "" if let parent = parent { @@ -94,7 +120,7 @@ public class HDPath: ExpressibleByStringLiteral { if hardened { component.removeLast() } - guard let index = UInt32(component) else { throw Error.corrupted(path) } + guard let index = UInt32(component) else { throw Error.invalidHDPath(path) } array.append(Component(index: index, isHardened: hardened)) } return (m,array) diff --git a/Example/Pods/web3swift/Sources/KeystoreManager/IBAN.swift b/Example/Pods/web3swift/Sources/KeystoreManager/IBAN.swift index 6b4b7c61..7109ffd3 100644 --- a/Example/Pods/web3swift/Sources/KeystoreManager/IBAN.swift +++ b/Example/Pods/web3swift/Sources/KeystoreManager/IBAN.swift @@ -13,8 +13,11 @@ import Foundation Interexchange Client Address Protocol, an IBAN-compatible system for referencing and transacting to client accounts aimed to streamline the process of transferring funds, worry-free between exchanges and, ultimately, making KYC and AML concerns a thing of the past. */ public struct ICAP { + /// Asset public var asset: String + /// Institution public var institution: String + /// Client public var client: String } @@ -130,9 +133,9 @@ public struct IBAN { /** init with iban string - - parameter ibanString: iban string like - - returns: nil if invalid address is not convertable to iban - To skip 30 symbol check, just init it with address. + - Parameter ibanString: iban string like + - Returns: nil if invalid address is not convertible to iban + To skip check for invalid address, just init it with Address. ``` let iban = IBAN("XE7338O073KYGTWWZN0F2WZ0R8PX5ZPPZS") ``` @@ -142,12 +145,12 @@ public struct IBAN { guard IBAN.isValidIBANaddress(matched) else { return nil } iban = matched } - /// checks if address.base36.count <= 30 + /// Checks if address.base36.count <= 30 public static func check(_ address: Address) -> Bool { return address.addressData.base36.count <= 30 } - /// init with address - /// - important: [Not every address is IBAN compatible](https://github.com/BANKEX/web3swift/issues/137) + /// Init with address + /// - Important: [Not every address is IBAN compatible](https://github.com/BANKEX/web3swift/issues/137) public init(_ address: Address) { let padded = address.addressData.base36.leftPadding(toLength: 30, withPad: "0") let prefix = "XE" diff --git a/Example/Pods/web3swift/Sources/KeystoreManager/KeystoreManager.swift b/Example/Pods/web3swift/Sources/KeystoreManager/KeystoreManager.swift index cfb7c3ad..41b7a368 100644 --- a/Example/Pods/web3swift/Sources/KeystoreManager/KeystoreManager.swift +++ b/Example/Pods/web3swift/Sources/KeystoreManager/KeystoreManager.swift @@ -8,9 +8,15 @@ import Foundation +/** + Manager for your keystores. + */ public class KeystoreManager: AbstractKeystore { + /// Returns true if you don't have any keystores public var isEmpty: Bool { return bip32keystores.isEmpty && keystores.isEmpty && plainKeystores.isEmpty } + /// Returns true if you don't have any bip32 keystores public var isHDKeystore: Bool { return !bip32keystores.isEmpty } + /// Returns all addresses in all keystores public var addresses: [Address] { var toReturn = [Address]() for keystore in keystores { @@ -35,25 +41,44 @@ public class KeystoreManager: AbstractKeystore { } return toReturn } - + + /// Searches for account in your keystores and decrypts its private key using provided password. + /// + /// - Parameters: + /// - password: Password that would be used to encrypt private key + /// - account: Account for your private key + /// - Returns: Private key data + /// - Throws: If cannot find an account or decrypt private key public func UNSAFE_getPrivateKeyData(password: String = "BANKEXFOUNDATION", account: Address) throws -> Data { guard let keystore = self.walletForAddress(account) else { throw AbstractKeystoreError.invalidAccountError } return try keystore.UNSAFE_getPrivateKeyData(password: password, account: account) } - + + /// Returns all your keystore managers public static var all = [KeystoreManager]() + + /// Returns default keystore manager or nil if don't have any. public static var `default`: KeystoreManager? { - if KeystoreManager.all.count == 0 { - return nil - } - return KeystoreManager.all[0] + return KeystoreManager.all.safe(0) } - + + /// Returns keystore manager with provided path. + /// + /// - Parameters: + /// - path: local directory path for scanning + /// - scanForHDwallets: Should scan for HD Wallets + /// - suffix: File suffix + /// - Returns: Keystore manager with found keystores public static func managerForPath(_ path: String, scanForHDwallets: Bool = false, suffix: String? = nil) -> KeystoreManager? { guard let newManager = try? KeystoreManager(path, scanForHDwallets: scanForHDwallets, suffix: suffix), let manager = newManager else { return nil } return manager } - + + /// Searches for the keystore that contains provided address + /// + /// - Parameter address: Account address + /// - Returns: Keystore that contains this address. + /// Returns nil if address is not found in any keystore. public func walletForAddress(_ address: Address) -> AbstractKeystore? { for keystore in keystores { guard let key = keystore.addresses.first else { continue } @@ -78,29 +103,49 @@ public class KeystoreManager: AbstractKeystore { return nil } + /// V3 Keystores public var keystores = [EthereumKeystoreV3]() + /// HD Wallets public var bip32keystores = [BIP32Keystore]() + /// Plain Keystores public var plainKeystores = [PlainKeystore]() + /// Init with V3 Keystores + /// + /// - Parameter keystores: Keystores that would be stored in .keystores public init(_ keystores: [EthereumKeystoreV3]) { self.keystores = keystores } + /// Init with HD Wallets + /// + /// - Parameter keystores: Keystores that would be stored in .bip32keystores public init(_ keystores: [BIP32Keystore]) { bip32keystores = keystores } + /// Init with Plain keystores + /// + /// - Parameter keystores: Keystores that would be stored in .plainKeystores public init(_ keystores: [PlainKeystore]) { plainKeystores = keystores } - public init() { - - } + /// Init with no keystores + public init() {} + /// Appends keystore + /// + /// - Parameter keystore: Keystore to append public func append(_ keystore: EthereumKeystoreV3) { keystores.append(keystore) } + /// Appends keystore + /// + /// - Parameter keystore: Keystore to append public func append(_ keystore: BIP32Keystore) { bip32keystores.append(keystore) } + /// Appends keystore + /// + /// - Parameter keystore: Keystore to append public func append(_ keystore: PlainKeystore) { plainKeystores.append(keystore) } diff --git a/Example/Pods/web3swift/Sources/KeystoreManager/KeystoreV3JSONStructure.swift b/Example/Pods/web3swift/Sources/KeystoreManager/KeystoreV3JSONStructure.swift deleted file mode 100644 index 61a1af75..00000000 --- a/Example/Pods/web3swift/Sources/KeystoreManager/KeystoreV3JSONStructure.swift +++ /dev/null @@ -1,47 +0,0 @@ -// -// KeystoreJSONStructure.swift -// web3swift -// -// Created by Alexander Vlasov on 10.01.2018. -// Copyright © 2018 Bankex Foundation. All rights reserved. -// - -import Foundation - -public struct KdfParamsV3: Decodable, Encodable { - var salt: String - var dklen: Int - var n: Int? - var p: Int? - var r: Int? - var c: Int? - var prf: String? -} - -public struct CipherParamsV3: Decodable, Encodable { - var iv: String -} - -public struct CryptoParamsV3: Decodable, Encodable { - var ciphertext: String - var cipher: String - var cipherparams: CipherParamsV3 - var kdf: String - var kdfparams: KdfParamsV3 - var mac: String - var version: String? -} - -public struct KeystoreParamsV3: Decodable, Encodable { - var address: String? - var crypto: CryptoParamsV3 - var id: String? - var version: Int - - public init(address ad: String?, crypto cr: CryptoParamsV3, id i: String, version ver: Int) { - address = ad - crypto = cr - id = i - version = ver - } -} diff --git a/Example/Pods/web3swift/Sources/KeystoreManager/PlainKeystore.swift b/Example/Pods/web3swift/Sources/KeystoreManager/PlainKeystore.swift index b31499f9..d3b4ce4e 100644 --- a/Example/Pods/web3swift/Sources/KeystoreManager/PlainKeystore.swift +++ b/Example/Pods/web3swift/Sources/KeystoreManager/PlainKeystore.swift @@ -8,21 +8,29 @@ import Foundation +/// Keystore that contains private key public class PlainKeystore: AbstractKeystore { private var privateKey: Data - + + /// Always returns array with one address public var addresses: [Address] + /// Default: false public var isHDKeystore: Bool = false + /// Returns keystore private key. + /// - Parameter password: We already have unencrypted private. So password doing nothing here + /// - Parameter address: We have only one address. So account will be ignored too public func UNSAFE_getPrivateKeyData(password _: String = "", account _: Address) throws -> Data { return privateKey } - + + /// Init with private key hex string public convenience init(privateKey: String) throws { try self.init(privateKey: privateKey.dataFromHex()) } - + + /// Init with private key data public init(privateKey: Data) throws { try SECP256K1.verifyPrivateKey(privateKey: privateKey) diff --git a/Example/Pods/web3swift/Sources/Migration-iOS.swift b/Example/Pods/web3swift/Sources/Migration-iOS.swift index f85e099f..14bd4645 100644 --- a/Example/Pods/web3swift/Sources/Migration-iOS.swift +++ b/Example/Pods/web3swift/Sources/Migration-iOS.swift @@ -12,11 +12,11 @@ import CIImage extension Web3 { @available (*, deprecated: 2.1, message: "Use EIP67Code, not Web3.EIP67Code") - typealias EIP67Code = web3swift.EIP67Code + public typealias EIP67Code = web3swift.EIP67Code @available (*, deprecated: 2.1, message: "Use EIP67Code") - typealias EIP67CodeGenerator = web3swift.EIP67CodeGenerator + public typealias EIP67CodeGenerator = web3swift.EIP67CodeGenerator @available (*, deprecated: 2.1, message: "Use EIP67Code") - typealias EIP67CodeParser = web3swift.EIP67CodeParser + public typealias EIP67CodeParser = web3swift.EIP67CodeParser } public struct EIP67CodeGenerator { @available (*, deprecated: 2.1, message: "Use EIP67Code.toImage(scale:)") @@ -35,4 +35,11 @@ public struct EIP67CodeParser { return EIP67Code(string: string) } } + +extension EIP67Code { + @available (*, deprecated: 2.0, message: "Use init with address") + public init(address: String) { + self.init(address: Address(address)) + } +} #endif diff --git a/Example/Pods/web3swift/Sources/Migration.swift b/Example/Pods/web3swift/Sources/Migration.swift index 466a6df3..837d5805 100644 --- a/Example/Pods/web3swift/Sources/Migration.swift +++ b/Example/Pods/web3swift/Sources/Migration.swift @@ -19,6 +19,29 @@ import BigInt /// web3swift 2.1 changes +extension EthereumBloomFilter { + @available(*, deprecated: 2.1, renamed: "test(topic:)") + public func lookup(_ topic: Data) -> Bool { + return test(topic: topic) + } + @available(*, deprecated: 2.1, message: "Use bloom.test(topic:)") + public static func bloomLookup(_ bloom: EthereumBloomFilter, topic: Data) -> Bool { + return bloom.test(topic: topic) + } + + @available(*, deprecated: 2.1, message: "Use bloom.test(topic:)") + public static func bloomLookup(_ bloom: EthereumBloomFilter, topic: BigUInt) -> Bool { + return bloom.test(topic: topic) + } +} + +extension EthereumKeystoreV3 { + @available(*,deprecated: 2.1, message: "Use .address instead of .getAddress()") + public func getAddress() -> Address? { + return address + } +} + @available (*,deprecated: 2.1, renamed: "EventParserResult") public typealias EventParserResultProtocol = EventParserResult @@ -169,12 +192,6 @@ public struct BIP39 { } } -extension EIP67Code { - @available (*, deprecated: 2.0, message: "Use init with address") - public init(address: String) { - self.init(address: Address(address)) - } -} extension KeystoreManager { @available (*, deprecated: 2.0, renamed: "default") static var defaultManager: KeystoreManager? { diff --git a/Example/Pods/web3swift/Sources/ObjectiveC/W3Contracts.swift b/Example/Pods/web3swift/Sources/ObjectiveC/W3Contracts.swift index dcc03a9e..38ce4d78 100644 --- a/Example/Pods/web3swift/Sources/ObjectiveC/W3Contracts.swift +++ b/Example/Pods/web3swift/Sources/ObjectiveC/W3Contracts.swift @@ -109,7 +109,7 @@ protocol W3OptionsInheritable: class { } /// contract owner only - /// transfers from owner to recepient + /// transfers from owner to recipient @objc public func transferFrom(owner: W3Address, to: W3Address, naturalUnits: W3NaturalUnits) throws -> W3UInt { return try contract.swift.gasPrice.transferFrom(owner: owner.swift, to: to.swift, amount: naturalUnits.swift).objc } @@ -141,7 +141,7 @@ protocol W3OptionsInheritable: class { @objc public func balance(of user: W3Address) throws -> W3UInt { return try swift.balance(of: user.swift).objc } - /// - returns: address of token holder + /// - Returns: address of token holder @objc public func owner(of token: W3UInt) throws -> W3Address { return try swift.owner(of: token.swift).objc } @@ -151,7 +151,7 @@ protocol W3OptionsInheritable: class { return try swift.approve(to: user.swift, token: token.swift).objc } - /// - returns: address + /// - Returns: address @objc public func approved(for token: W3UInt) throws -> W3Address { return try swift.approved(for: token.swift).objc } @@ -165,7 +165,7 @@ protocol W3OptionsInheritable: class { return try swift.isApprovedForAll(owner: owner.swift, operator: `operator`.swift) as NSNumber } /// transfers token from one address to another - /// - important: admin only + /// - Important: admin only @objc public func transfer(from: W3Address, to: W3Address, token: W3UInt) throws -> W3TransactionSendingResult { return try swift.transfer(from: from.swift, to: to.swift, token: token.swift).objc } @@ -184,19 +184,19 @@ Gas price functions for erc721 token requests self.contract = contract } - /// - returns: gas price for approve(address,uint256) transaction + /// - Returns: gas price for approve(address,uint256) transaction @objc public func approve(to user: W3Address, token: W3UInt) throws -> W3UInt { return try contract.swift.gasPrice.approve(to: user.swift, token: token.swift).objc } - /// - returns: gas price for setApprovalForAll(address,bool) transaction + /// - Returns: gas price for setApprovalForAll(address,bool) transaction @objc public func setApproveForAll(operator: W3Address, approved: Bool) throws -> W3UInt { return try contract.swift.gasPrice.setApproveForAll(operator: `operator`.swift, approved: approved).objc } - /// - returns: gas price for transferFrom(address,address,uint256) transaction + /// - Returns: gas price for transferFrom(address,address,uint256) transaction @objc public func transfer(from: W3Address, to: W3Address, token: W3UInt) throws -> W3UInt { return try contract.swift.gasPrice.transfer(from: from.swift, to: to.swift, token: token.swift).objc } - /// - returns: gas price for safeTransferFrom(address,address,uint256) transaction + /// - Returns: gas price for safeTransferFrom(address,address,uint256) transaction @objc public func safeTransfer(from: W3Address, to: W3Address, token: W3UInt) throws -> W3UInt { return try contract.swift.gasPrice.safeTransfer(from: from.swift, to: to.swift, token: token.swift).objc } @@ -283,38 +283,38 @@ Gas price functions for erc721 token requests self.contract = contract } - /// - returns: gas price for transfer(address,uint256) transaction + /// - Returns: gas price for transfer(address,uint256) transaction @objc public func transfer(to user: W3Address, amount: W3UInt) throws -> W3UInt { return try contract.swift.gasPrice.transfer(to: user.swift, amount: amount.swift).objc } - /// - returns: gas price for approve(address,uint256) transaction + /// - Returns: gas price for approve(address,uint256) transaction @objc public func approve(to user: W3Address, amount: W3UInt) throws -> W3UInt { return try contract.swift.gasPrice.approve(to: user.swift, amount: amount.swift).objc } - /// - returns: gas price for transferFrom(address,address,uint256) transaction + /// - Returns: gas price for transferFrom(address,address,uint256) transaction @objc public func transfer(from: W3Address, to: W3Address, amount: W3UInt) throws -> W3UInt { return try contract.swift.gasPrice.transfer(from: from.swift, to: to.swift, amount: amount.swift).objc } - /// - returns: gas price for send(address,uint256) transaction + /// - Returns: gas price for send(address,uint256) transaction @objc public func send(to user: W3Address, amount: W3UInt) throws -> W3UInt { return try contract.swift.gasPrice.send(to: user.swift, amount: amount.swift).objc } - /// - returns: gas price for send(address,uint256,bytes) transaction + /// - Returns: gas price for send(address,uint256,bytes) transaction @objc public func send(to user: W3Address, amount: W3UInt, userData: Data) throws -> W3UInt { return try contract.swift.gasPrice.send(to: user.swift, amount: amount.swift, userData: userData).objc } - /// - returns: gas price for authorizeOperator(address) transaction + /// - Returns: gas price for authorizeOperator(address) transaction @objc public func authorize(operator user: W3Address) throws -> W3UInt { return try contract.swift.gasPrice.authorize(operator: user.swift).objc } - /// - returns: gas price for revokeOperator(address) transaction + /// - Returns: gas price for revokeOperator(address) transaction @objc public func revoke(operator user: W3Address) throws -> W3UInt { return try contract.swift.gasPrice.revoke(operator: user.swift).objc } - /// - returns: gas price for operatorSend(address,address,uint256,bytes) transaction + /// - Returns: gas price for operatorSend(address,address,uint256,bytes) transaction @objc public func operatorSend(from: W3Address, to: W3Address, amount: W3UInt, userData: Data) throws -> W3UInt { return try contract.swift.gasPrice.operatorSend(from: from.swift, to: to.swift, amount: amount.swift, userData: userData).objc } diff --git a/Example/Pods/web3swift/Sources/ObjectiveC/W3Eth.swift b/Example/Pods/web3swift/Sources/ObjectiveC/W3Eth.swift index 9d603a98..6d2c91c2 100644 --- a/Example/Pods/web3swift/Sources/ObjectiveC/W3Eth.swift +++ b/Example/Pods/web3swift/Sources/ObjectiveC/W3Eth.swift @@ -191,7 +191,7 @@ import Foundation - extraData: Additional data to attach to the transaction - options: W3Options to override the default gas price, gas limit. "Value" field of the options is ignored and the "amount" parameter is used instead - - returns: + - Returns: - W3TransactionIntermediate object */ diff --git a/Example/Pods/web3swift/Sources/ObjectiveC/W3Keystore.swift b/Example/Pods/web3swift/Sources/ObjectiveC/W3Keystore.swift index a7987fd8..75a5c3c7 100644 --- a/Example/Pods/web3swift/Sources/ObjectiveC/W3Keystore.swift +++ b/Example/Pods/web3swift/Sources/ObjectiveC/W3Keystore.swift @@ -14,7 +14,7 @@ func objc(_ value: AbstractKeystore) -> W3AbstractKeystore { case let keystore as PlainKeystore: return keystore.objc case let keystore as EthereumKeystoreV3: return keystore.objc case let keystore as BIP32Keystore: return keystore.objc - default: fatalError("\(value) is not convertable to objective-c W3AbstractKeystore") + default: fatalError("\(value) is not convertible to objective-c W3AbstractKeystore") } } @@ -349,7 +349,7 @@ extension EthereumKeystoreV3 { } @objc public func getAddress() -> W3Address? { - return swift.getAddress()?.objc + return swift.address?.objc } @objc public var addresses: [W3Address] { diff --git a/Example/Pods/web3swift/Sources/ObjectiveC/W3Personal.swift b/Example/Pods/web3swift/Sources/ObjectiveC/W3Personal.swift index e87759f0..6fa7a328 100644 --- a/Example/Pods/web3swift/Sources/ObjectiveC/W3Personal.swift +++ b/Example/Pods/web3swift/Sources/ObjectiveC/W3Personal.swift @@ -19,11 +19,11 @@ import Foundation /** *Locally or remotely sign a message (arbitrary data) with the private key. To avoid potential signing of a transaction the message is first prepended by a special header and then hashed.* - - parameter message: Message Data - - parameter from: Use a private key that corresponds to this account - - parameter password: Password for account if signing locally - - returns: signed message data - - important: This call is synchronous + - Parameter message: Message Data + - Parameter from: Use a private key that corresponds to this account + - Parameter password: Password for account if signing locally + - Returns: signed message data + - Important: This call is synchronous */ @objc public func signPersonalMessage(message: Data, from: W3Address, password: String = "BANKEXFOUNDATION") throws -> Data { @@ -33,11 +33,11 @@ import Foundation /** *Unlock an account on the remote node to be able to send transactions and sign messages.* - - parameter account: W3Address of the account to unlock - - parameter password: Password to use for the account - - parameter seconds: Time inteval before automatic account lock by Ethereum node - - returns: isUnlocked - - important: This call is synchronous. Does nothing if private keys are stored locally. + - Parameter account: W3Address of the account to unlock + - Parameter password: Password to use for the account + - Parameter seconds: Time inteval before automatic account lock by Ethereum node + - Returns: isUnlocked + - Important: This call is synchronous. Does nothing if private keys are stored locally. */ @objc public func unlockAccount(account: W3Address, password: String = "BANKEXFOUNDATION", seconds: UInt64 = 300, error pointer: ErrorPointer) -> Bool { @@ -52,9 +52,9 @@ import Foundation /** *Recovers a signer of some message. Message is first prepended by special prefix (check the "signPersonalMessage" method description) and then hashed.* - - parameter personalMessage: Message Data - - parameter signature: Serialized signature, 65 bytes - - returns: signer address + - Parameter personalMessage: Message Data + - Parameter signature: Serialized signature, 65 bytes + - Returns: signer address */ @objc public func ecrecover(personalMessage: Data, signature: Data) throws -> W3Address { @@ -64,9 +64,9 @@ import Foundation /** *Recovers a signer of some hash. Checking what is under this hash is on behalf of the user.* - - parameter hash: Signed hash - - parameter signature: Serialized signature, 65 bytes - - returns: signer address + - Parameter hash: Signed hash + - Parameter signature: Serialized signature, 65 bytes + - Returns: signer address */ @objc public func ecrecover(hash: Data, signature: Data) throws -> W3Address { diff --git a/Example/Pods/web3swift/Sources/ObjectiveC/W3TransactionIntermediate.swift b/Example/Pods/web3swift/Sources/ObjectiveC/W3TransactionIntermediate.swift index 89ae05fa..22a51ce0 100644 --- a/Example/Pods/web3swift/Sources/ObjectiveC/W3TransactionIntermediate.swift +++ b/Example/Pods/web3swift/Sources/ObjectiveC/W3TransactionIntermediate.swift @@ -207,12 +207,12 @@ extension TransactionIntermediate { /** *Send a prepared transaction to the blockchain. Internally checks the nonce for a sending account, assigns it, get a gas estimate and signs a transaction either locally or on the remote node.* - - parameter password: Password for a private key if transaction is signed locally - - parameter options: Web3Options to override the previously assigned gas price, gas limit and value. - - parameter onBlock: String field determines if nonce value and the gas estimate are based on the state of a blockchain on the latest mined block ("latest") or the expected state after all the transactions in memory pool are applied ("pending"). Using "pending" allows to send transactions one after another without waiting for inclusion of the previous one in some block. + - Parameter password: Password for a private key if transaction is signed locally + - Parameter options: Web3Options to override the previously assigned gas price, gas limit and value. + - Parameter onBlock: String field determines if nonce value and the gas estimate are based on the state of a blockchain on the latest mined block ("latest") or the expected state after all the transactions in memory pool are applied ("pending"). Using "pending" allows to send transactions one after another without waiting for inclusion of the previous one in some block. - - returns: W3TransactionSendingResult - - important: This call is synchronous + - Returns: W3TransactionSendingResult + - Important: This call is synchronous */ @discardableResult @objc public func send(password: String = "BANKEXFOUNDATION", options: W3Options?, onBlock: String = "pending") throws -> W3TransactionSendingResult { @@ -222,11 +222,11 @@ extension TransactionIntermediate { /** *Calls a function of the smart-contract and parses the returned data to native objects.* - - parameter options: Web3Options to override the previously assigned gas price, gas limit and value. - - parameter onBlock: String field determines if nonce value and the gas estimate are based on the state of a blockchain on the latest mined block ("latest") or the expected state after all the transactions in memory pool are applied ("pending"). Using "pending" allows to send transactions one after another without waiting for inclusion of the previous one in some block. + - Parameter options: Web3Options to override the previously assigned gas price, gas limit and value. + - Parameter onBlock: String field determines if nonce value and the gas estimate are based on the state of a blockchain on the latest mined block ("latest") or the expected state after all the transactions in memory pool are applied ("pending"). Using "pending" allows to send transactions one after another without waiting for inclusion of the previous one in some block. - - returns: W3Response from node - - important: This call is synchronous + - Returns: W3Response from node + - Important: This call is synchronous */ @@ -238,11 +238,11 @@ extension TransactionIntermediate { /** *Estimates gas required to execute the transaction. Setting a gas limit lower than the estimate will most likely result in a failed transaction. If this call returns an error it can also indicate that transaction is invalid as itself.* - - parameter options: Web3Options to override the previously assigned gas price, gas limit and value. - - parameter onBlock: String field determines if nonce value and the gas estimate are based on the state of a blockchain on the latest mined block ("latest") or the expected state after all the transactions in memory pool are applied ("pending"). Using "pending" allows to send transactions one after another without waiting for inclusion of the previous one in some block. + - Parameter options: Web3Options to override the previously assigned gas price, gas limit and value. + - Parameter onBlock: String field determines if nonce value and the gas estimate are based on the state of a blockchain on the latest mined block ("latest") or the expected state after all the transactions in memory pool are applied ("pending"). Using "pending" allows to send transactions one after another without waiting for inclusion of the previous one in some block. - - returns: gas price - - important: This call is synchronous + - Returns: gas price + - Important: This call is synchronous */ @objc public func estimateGas(options: W3Options?, onBlock: String = "latest") throws -> W3UInt { @@ -252,11 +252,11 @@ extension TransactionIntermediate { /** *Assembles (but does not sign!) a transaction by fetching the nonce value and applying provided options.* - - parameter options: Web3Options to override the previously assigned gas price, gas limit and value. - - parameter onBlock: String field determines if nonce value and the gas estimate are based on the state of a blockchain on the latest mined block ("latest") or the expected state after all the transactions in memory pool are applied ("pending"). Using "pending" allows to send transactions one after another without waiting for inclusion of the previous one in some block. + - Parameter options: Web3Options to override the previously assigned gas price, gas limit and value. + - Parameter onBlock: String field determines if nonce value and the gas estimate are based on the state of a blockchain on the latest mined block ("latest") or the expected state after all the transactions in memory pool are applied ("pending"). Using "pending" allows to send transactions one after another without waiting for inclusion of the previous one in some block. - - returns: transaction - - important: This call is synchronous + - Returns: transaction + - Important: This call is synchronous */ @objc public func assemble(options: W3Options?, onBlock: String = "pending") throws -> W3EthereumTransaction { @@ -265,10 +265,10 @@ extension TransactionIntermediate { /** *Assembles (but does not sign!) a transaction by fetching the nonce value and applying provided options.* - - parameter options: Web3Options to override the previously assigned gas price, gas limit and value. - - parameter onBlock: String field determines if nonce value and the gas estimate are based on the state of a blockchain on the latest mined block ("latest") or the expected state after all the transactions in memory pool are applied ("pending"). Using "pending" allows to send transactions one after another without waiting for inclusion of the previous one in some block. + - Parameter options: Web3Options to override the previously assigned gas price, gas limit and value. + - Parameter onBlock: String field determines if nonce value and the gas estimate are based on the state of a blockchain on the latest mined block ("latest") or the expected state after all the transactions in memory pool are applied ("pending"). Using "pending" allows to send transactions one after another without waiting for inclusion of the previous one in some block. - - returns: Promise for ethereum transaction + - Returns: Promise for ethereum transaction */ @objc public func assembleAsync(options: W3Options?, onBlock: String = "pending", completion: @escaping (W3EthereumTransaction?,Error?)->()) { swift.assemblePromise(options: options?.swift, onBlock: onBlock) @@ -279,11 +279,11 @@ extension TransactionIntermediate { /** *Send a prepared transaction to the blockchain. Internally checks the nonce for a sending account, assigns it, get a gas estimate and signs a transaction either locally or on the remote node.* - - parameter password: Password for a private key if transaction is signed locally - - parameter options: Web3Options to override the previously assigned gas price, gas limit and value. - - parameter onBlock: String field determines if nonce value and the gas estimate are based on the state of a blockchain on the latest mined block ("latest") or the expected state after all the transactions in memory pool are applied ("pending"). Using "pending" allows to send transactions one after another without waiting for inclusion of the previous one in some block. + - Parameter password: Password for a private key if transaction is signed locally + - Parameter options: Web3Options to override the previously assigned gas price, gas limit and value. + - Parameter onBlock: String field determines if nonce value and the gas estimate are based on the state of a blockchain on the latest mined block ("latest") or the expected state after all the transactions in memory pool are applied ("pending"). Using "pending" allows to send transactions one after another without waiting for inclusion of the previous one in some block. - - returns: Promise for TransactionResult which contains transaction hash and other info + - Returns: Promise for TransactionResult which contains transaction hash and other info */ @objc public func sendAsync(password: String = "BANKEXFOUNDATION", options: W3Options?, onBlock: String = "pending", completion: @escaping (W3TransactionSendingResult?,Error?)->()) { @@ -295,10 +295,10 @@ extension TransactionIntermediate { /** *Calls a function of the smart-contract and parses the returned data to native objects.* - - parameter options: Web3Options to override the previously assigned gas price, gas limit and value. - - parameter onBlock: String field determines if nonce value and the gas estimate are based on the state of a blockchain on the latest mined block ("latest") or the expected state after all the transactions in memory pool are applied ("pending"). Using "pending" allows to send transactions one after another without waiting for inclusion of the previous one in some block. + - Parameter options: Web3Options to override the previously assigned gas price, gas limit and value. + - Parameter onBlock: String field determines if nonce value and the gas estimate are based on the state of a blockchain on the latest mined block ("latest") or the expected state after all the transactions in memory pool are applied ("pending"). Using "pending" allows to send transactions one after another without waiting for inclusion of the previous one in some block. - - returns: Promise for W3Response from node + - Returns: Promise for W3Response from node */ @objc public func callAsync(options: W3Options?, onBlock: String = "latest", completion: @escaping (W3Response?,Error?)->()) { @@ -311,10 +311,10 @@ extension TransactionIntermediate { /** *Estimates gas required to execute the transaction. Setting a gas limit lower than the estimate will most likely result in a failed transaction. If this call returns an error it can also indicate that transaction is invalid as itself.* - - parameter options: Web3Options to override the previously assigned gas price, gas limit and value. - - parameter onBlock: String field determines if nonce value and the gas estimate are based on the state of a blockchain on the latest mined block ("latest") or the expected state after all the transactions in memory pool are applied ("pending"). Using "pending" allows to send transactions one after another without waiting for inclusion of the previous one in some block. + - Parameter options: Web3Options to override the previously assigned gas price, gas limit and value. + - Parameter onBlock: String field determines if nonce value and the gas estimate are based on the state of a blockchain on the latest mined block ("latest") or the expected state after all the transactions in memory pool are applied ("pending"). Using "pending" allows to send transactions one after another without waiting for inclusion of the previous one in some block. - - returns: Promise for gas price + - Returns: Promise for gas price */ @objc public func estimateGasAsync(options: W3Options?, onBlock: String = "latest", completion: @escaping (W3UInt?,Error?)->()) { diff --git a/Example/Pods/web3swift/Sources/ObjectiveC/W3Wallet.swift b/Example/Pods/web3swift/Sources/ObjectiveC/W3Wallet.swift index f792a5d9..9a5d8823 100644 --- a/Example/Pods/web3swift/Sources/ObjectiveC/W3Wallet.swift +++ b/Example/Pods/web3swift/Sources/ObjectiveC/W3Wallet.swift @@ -18,19 +18,19 @@ import Foundation self.web3 = web3 } - /// - throws: Web3WalletError.attachadKeystoreNotFound + /// - Throws: Web3WalletError.attachadKeystoreNotFound @objc public func getAccounts() -> [W3Address] { return swift.getAccounts().map { $0.objc } } - /// - throws: + /// - Throws: /// Web3WalletError.attachadKeystoreNotFound /// Web3WalletError.noAccounts @objc public func getCoinbase() throws -> W3Address { return try swift.getCoinbase().objc } - /// - throws: + /// - Throws: /// Web3WalletError.attachadKeystoreNotFound /// AbstractKeystoreError /// Error @@ -38,7 +38,7 @@ import Foundation try swift.signTX(transaction: &transaction.swift, account: account.swift, password: password) } - /// - throws: SECP256K1Error + /// - Throws: SECP256K1Error @objc public func sign(personalMessageData: Data, account: W3Address, password: String = "BANKEXFOUNDATION") throws -> Data { return try swift.signPersonalMessage(personalMessageData, account: account.swift, password: password) } diff --git a/Example/Pods/web3swift/Sources/ObjectiveC/W3Web3.swift b/Example/Pods/web3swift/Sources/ObjectiveC/W3Web3.swift index 8432e5fc..c44d7cb8 100644 --- a/Example/Pods/web3swift/Sources/ObjectiveC/W3Web3.swift +++ b/Example/Pods/web3swift/Sources/ObjectiveC/W3Web3.swift @@ -10,7 +10,7 @@ import Foundation extension Web3Provider { public var objc: W3Web3HttpProvider { - guard let provider = self as? Web3HttpProvider else { fatalError("\(self) is not convertable to objective-c W3Web3HttpProvider") } + guard let provider = self as? Web3HttpProvider else { fatalError("\(self) is not convertible to objective-c W3Web3HttpProvider") } return provider.objc } } diff --git a/Example/Pods/web3swift/Sources/Transaction/BloomFilter.swift b/Example/Pods/web3swift/Sources/Transaction/BloomFilter.swift index f79157e3..dc15db16 100644 --- a/Example/Pods/web3swift/Sources/Transaction/BloomFilter.swift +++ b/Example/Pods/web3swift/Sources/Transaction/BloomFilter.swift @@ -7,53 +7,38 @@ // import BigInt -import CryptoSwift import Foundation +/// Ethereum bloom filter public struct EthereumBloomFilter { - public var bytes = Data(repeatElement(UInt8(0), count: 256)) + /// Bloom data + public var bytes = Data(count: 256) + + /// Init with number public init?(_ biguint: BigUInt) { guard let data = biguint.serialize().setLengthLeft(256) else { return nil } bytes = data } + /// Init with empty data public init() {} + + /// Init with data public init(_ data: Data) { - let padding = Data(repeatElement(UInt8(0), count: 256 - data.count)) + let padding = Data(count: 256 - data.count) bytes = padding + data } + /// Serialize to uint256 public func asBigUInt() -> BigUInt { return BigUInt(bytes) } -} - -// -// func (b Bloom) Test(test *big.Int) bool { -// return BloomLookup(b, test) -// } -// -// func (b Bloom) TestBytes(test []byte) bool { -// return b.Test(new(big.Int).SetBytes(test)) -// -// } -// -//// MarshalText encodes b as a hex string with 0x prefix. -// func (b Bloom) MarshalText() ([]byte, error) { -// return hexutil.Bytes(b[:]).MarshalText() -// } -// -//// UnmarshalText b as a hex string with 0x prefix. -// func (b *Bloom) UnmarshalText(input []byte) error { -// return hexutil.UnmarshalFixedText("Bloom", input, b[:]) -// } - -extension EthereumBloomFilter { + static func bloom9(_ biguint: BigUInt) -> BigUInt { return EthereumBloomFilter.bloom9(biguint.serialize()) } static func bloom9(_ data: Data) -> BigUInt { - var b = data.sha3(.keccak256) + var b = data.keccak256() var r = BigUInt(0) let mask = BigUInt(2047) for i in stride(from: 0, to: 6, by: 2) { @@ -77,6 +62,7 @@ extension EthereumBloomFilter { return bin } + /// Creates bloom filter for transaction receipts public static func createBloom(_ receipts: [TransactionReceipt]) -> EthereumBloomFilter? { var bin = BigUInt(0) for receipt in receipts { @@ -84,42 +70,33 @@ extension EthereumBloomFilter { } return EthereumBloomFilter(bin) } - + + /// Tests topic public func test(topic: Data) -> Bool { let bin = asBigUInt() let comparison = EthereumBloomFilter.bloom9(topic) return bin & comparison == comparison } - + + /// Tests topic public func test(topic: BigUInt) -> Bool { return test(topic: topic.serialize()) } - - public static func bloomLookup(_ bloom: EthereumBloomFilter, topic: Data) -> Bool { - let bin = bloom.asBigUInt() - let comparison = bloom9(topic) - return bin & comparison == comparison - } - - public static func bloomLookup(_ bloom: EthereumBloomFilter, topic: BigUInt) -> Bool { - return EthereumBloomFilter.bloomLookup(bloom, topic: topic.serialize()) - } - + + /// Adds number to bloom public mutating func add(_ biguint: BigUInt) { var bin = BigUInt(bytes) bin = bin | EthereumBloomFilter.bloom9(biguint) setBytes(bin.serialize()) } - + + /// Adds data to bloom public mutating func add(_ data: Data) { var bin = BigUInt(bytes) bin = bin | EthereumBloomFilter.bloom9(data) setBytes(bin.serialize()) } - - public func lookup(_ topic: Data) -> Bool { - return EthereumBloomFilter.bloomLookup(self, topic: topic) - } + mutating func setBytes(_ data: Data) { if bytes.count < data.count { diff --git a/Example/Pods/web3swift/Sources/Transaction/EthereumTransaction.swift b/Example/Pods/web3swift/Sources/Transaction/EthereumTransaction.swift index 55a0387d..ff6cb528 100644 --- a/Example/Pods/web3swift/Sources/Transaction/EthereumTransaction.swift +++ b/Example/Pods/web3swift/Sources/Transaction/EthereumTransaction.swift @@ -9,18 +9,29 @@ import BigInt import Foundation +/// Ethereum transaction. Ready to send public struct EthereumTransaction: CustomStringConvertible { + /// Transaction nonce public var nonce: BigUInt + /// Gas price public var gasPrice: BigUInt = 0 + /// Gas limit public var gasLimit: BigUInt = 0 + /// Recipient public var to: Address + /// Ether that would be sent to recipient public var value: BigUInt + /// Transaction data public var data: Data + /// v public var v: BigUInt = 1 + /// r public var r: BigUInt = 0 + /// s public var s: BigUInt = 0 var chainID: NetworkId? - + + /// Returns infered chain id public var inferedChainID: NetworkId? { if r == 0 && s == 0 { return NetworkId(v) @@ -31,28 +42,24 @@ public struct EthereumTransaction: CustomStringConvertible { } } + /// Returns chain id number public var intrinsicChainID: BigUInt? { return chainID?.rawValue } + /// Sets a new chain id. public mutating func UNSAFE_setChainID(_ chainID: NetworkId?) { self.chainID = chainID } - + + /// Returns transaction data hash public var hash: Data? { - var encoded: Data - let inferedChainID = self.inferedChainID - if inferedChainID != nil { - guard let enc = self.encode(forSignature: false, chainId: inferedChainID) else { return nil } - encoded = enc - } else { - guard let enc = self.encode(forSignature: false, chainId: self.chainID) else { return nil } - encoded = enc - } - let hash = encoded.sha3(.keccak256) - return hash + let chainId = inferedChainID ?? self.chainID + guard let encoded = self.encode(forSignature: false, chainId: chainId) else { return nil } + return encoded.keccak256() } - + + /// Init with transaction parameters public init(gasPrice: BigUInt, gasLimit: BigUInt, to: Address, value: BigUInt, data: Data) { nonce = BigUInt(0) self.gasPrice = gasPrice @@ -61,7 +68,8 @@ public struct EthereumTransaction: CustomStringConvertible { self.data = data self.to = to } - + + /// Init with ether sending parameters public init(to: Address, data: Data, options: Web3Options) { let merged = Web3Options.default.merge(with: options) nonce = BigUInt(0) @@ -71,7 +79,8 @@ public struct EthereumTransaction: CustomStringConvertible { self.to = to self.data = data } - + + /// Init with all parameters public init(nonce: BigUInt, gasPrice: BigUInt, gasLimit: BigUInt, to: Address, value: BigUInt, data: Data, v: BigUInt, r: BigUInt, s: BigUInt) { self.nonce = nonce self.gasPrice = gasPrice @@ -83,7 +92,8 @@ public struct EthereumTransaction: CustomStringConvertible { self.r = r self.s = s } - + + /// Merges transaction with provided options public func mergedWithOptions(_ options: Web3Options) -> EthereumTransaction { var tx = self if options.gasPrice != nil { @@ -119,12 +129,14 @@ sender: \(String(describing: sender?.address)) hash: \(String(describing: hash)) """ } - + + /// Transaction sender address public var sender: Address? { guard let publicKey = self.recoverPublicKey() else { return nil } return try? Web3Utils.publicToAddress(publicKey) } - + + /// Returns public key public func recoverPublicKey() -> Data? { // !(r == 0 && s == 0) guard r != 0 || s != 0 else { return nil } @@ -152,18 +164,21 @@ hash: \(String(describing: hash)) guard let publicKey = try? SECP256K1.recoverPublicKey(hash: hash, signature: signatureData) else { return nil } return publicKey } - + + /// Returns transaction data hash in hex string public var txhash: String? { guard sender != nil else { return nil } guard let hash = self.hash else { return nil } - let txid = hash.toHexString().withHex.lowercased() + let txid = hash.hex.withHex.lowercased() return txid } - + + /// Returns transaction data hash public var txid: String? { return txhash } - + + /// Encodes to data public func encode(forSignature: Bool = false, chainId: NetworkId? = nil) -> Data? { if forSignature { if let chainId = chainId { @@ -182,6 +197,7 @@ hash: \(String(describing: hash)) } } + /// Encodes to dictionary public func encodeAsDictionary(from: Address? = nil) -> TransactionParameters? { var toString: String? switch to.type { @@ -193,23 +209,27 @@ hash: \(String(describing: hash)) var params = TransactionParameters(from: from?.address.lowercased(), to: toString) let gasEncoding = gasLimit.abiEncode(bits: 256) - params.gas = gasEncoding?.toHexString().withHex.stripLeadingZeroes() + params.gas = gasEncoding?.hex.withHex.stripLeadingZeroes() let gasPriceEncoding = gasPrice.abiEncode(bits: 256) - params.gasPrice = gasPriceEncoding?.toHexString().withHex.stripLeadingZeroes() + params.gasPrice = gasPriceEncoding?.hex.withHex.stripLeadingZeroes() let valueEncoding = value.abiEncode(bits: 256) - params.value = valueEncoding?.toHexString().withHex.stripLeadingZeroes() + params.value = valueEncoding?.hex.withHex.stripLeadingZeroes() if data != Data() { - params.data = data.toHexString().withHex + params.data = data.hex.withHex } else { params.data = "0x" } return params } - + + + /// Returns hash for signature + /// + /// - Parameter chainID: Node's network id + /// - Returns: Transaction hash public func hashForSignature(chainID: NetworkId? = nil) -> Data? { guard let encoded = self.encode(forSignature: true, chainId: chainID) else { return nil } - let hash = encoded.sha3(.keccak256) - return hash + return encoded.keccak256() } init(_ json: [String: Any]) throws { @@ -236,8 +256,8 @@ hash: \(String(describing: hash)) /** Initializes EthereumTransaction from RLP encoded data - - parameter raw: RLP encoded data - - returns: EthereumTransaction if data wasn't not corrupted + - Parameter raw: RLP encoded data + - Returns: EthereumTransaction if data wasn't not corrupted */ public static func fromRaw(_ raw: Data) -> EthereumTransaction? { guard let totalItem = RLP.decode(raw) else { return nil } @@ -290,10 +310,10 @@ hash: \(String(describing: hash)) } var params = [txParams] as Array - let request = JsonRpcRequest(method: method, parametersArray: params) if method.parameters == 2 && onBlock != nil { params.append(onBlock as Encodable) } + let request = JsonRpcRequest(method: method, parametersArray: params) if !request.isValid { return nil } return request @@ -302,7 +322,7 @@ hash: \(String(describing: hash)) static func createRawTransaction(transaction: EthereumTransaction) -> JsonRpcRequest? { guard transaction.sender != nil else { return nil } guard let encodedData = transaction.encode() else { return nil } - let hex = encodedData.toHexString().withHex.lowercased() + let hex = encodedData.hex.withHex.lowercased() var request = JsonRpcRequest(method: .sendRawTransaction) let params = [hex] as Array let pars = JsonRpcParams(params: params) diff --git a/Example/Pods/web3swift/Sources/Transaction/TransactionSigner.swift b/Example/Pods/web3swift/Sources/Transaction/TransactionSigner.swift index e6f3a547..66f03a2e 100644 --- a/Example/Pods/web3swift/Sources/Transaction/TransactionSigner.swift +++ b/Example/Pods/web3swift/Sources/Transaction/TransactionSigner.swift @@ -9,19 +9,29 @@ import BigInt import Foundation +/// Transaction signer errors public enum TransactionSignerError: Error { + /// Cannot sign case signatureError(String) + /// Printable / user displayable description + public var localizedDescription: String { + switch self { + case let .signatureError(error): + return "Cannot sign transaction: \(error)" + } + } } +/// Ethereum signing functions public struct Web3Signer { /** Signs transaction. Uses ERP155Signer if you specified chainID otherwise it uses FallbackSigner - - parameter transaction: transaction to sign - - parameter keystore: keystore that stores account private key - - parameter account: account that signs message - - parameter password: password to decrypt private key - - parameter useExtraEntropy: add random data to signed message. default: false - - throws: Web3UtilsError.cannotConvertDataToAscii, SECP256K1Error, AbstractKeystoreError + - Parameter transaction: Transaction to sign + - Parameter keystore: Keystore that stores account private key + - Parameter account: Account that signs message + - Parameter password: Password to decrypt private key + - Parameter useExtraEntropy: Add random data to signed message. default: false + - Throws: Web3UtilsError.cannotConvertDataToAscii, SECP256K1Error, AbstractKeystoreError */ public static func signTX(transaction: inout EthereumTransaction, keystore: AbstractKeystore, account: Address, password: String, useExtraEntropy: Bool = false) throws { var privateKey = try keystore.UNSAFE_getPrivateKeyData(password: password, account: account) @@ -35,12 +45,12 @@ public struct Web3Signer { /** Signs transaction - - parameter intermediate: transaction to sign - - parameter keystore: keystore that stores account private key - - parameter account: account that signs message - - parameter password: password to decrypt private key - - parameter useExtraEntropy: add random data to signed message. default: false - - throws: Web3UtilsError.cannotConvertDataToAscii, SECP256K1Error, AbstractKeystoreError + - Parameter intermediate: Transaction to sign + - Parameter keystore: Keystore that stores account private key + - Parameter account: Account that signs message + - Parameter password: Password to decrypt private key + - Parameter useExtraEntropy: Add random data to signed message. default: false + - Throws: Web3UtilsError.cannotConvertDataToAscii, SECP256K1Error, AbstractKeystoreError */ public static func signIntermediate(intermediate: inout TransactionIntermediate, keystore: AbstractKeystore, account: Address, password: String, useExtraEntropy: Bool = false) throws { var tx = intermediate.transaction @@ -50,12 +60,12 @@ public struct Web3Signer { /** Signs personal message - - parameter personalMessage: message data - - parameter keystore: keystore that stores account private key - - parameter account: account that signs message - - parameter password: password to decrypt private key - - parameter useExtraEntropy: add random data to signed message. default: false - - throws: Web3UtilsError.cannotConvertDataToAscii, SECP256K1Error, AbstractKeystoreError + - Parameter personalMessage: Message data + - Parameter keystore: Keystore that stores account private key + - Parameter account: Account that signs message + - Parameter password: Password to decrypt private key + - Parameter useExtraEntropy: Add random data to signed message. default: false + - Throws: Web3UtilsError.cannotConvertDataToAscii, SECP256K1Error, AbstractKeystoreError */ public static func signPersonalMessage(_ personalMessage: Data, keystore: AbstractKeystore, account: Address, password: String, useExtraEntropy: Bool = false) throws -> Data { var privateKey = try keystore.UNSAFE_getPrivateKeyData(password: password, account: account) @@ -63,8 +73,16 @@ public struct Web3Signer { let hash = try Web3Utils.hashPersonalMessage(personalMessage) return try SECP256K1.signForRecovery(hash: hash, privateKey: privateKey, useExtraEntropy: useExtraEntropy).serializedSignature } - + + /// EIP155Signer public struct EIP155Signer { + /** + Sign transaction using EIP155Signer + - Parameter transaction: Transaction to sign + - Parameter privateKey: Private key that signs the transaction + - Parameter useExtraEntropy: Add random data to signed message. default: false + - Throws: Web3UtilsError.cannotConvertDataToAscii, SECP256K1Error, AbstractKeystoreError + */ public static func sign(transaction: inout EthereumTransaction, privateKey: Data, useExtraEntropy: Bool = false) throws { for _ in 0 ..< 1024 { do { @@ -74,11 +92,26 @@ public struct Web3Signer { } throw AbstractKeystoreError.invalidAccountError } - + + /// EIP155Signer errors public enum Error: Swift.Error { + /// Chain id not found. Please provide chain id to sign transaction case chainIdNotFound + /// Cannot get hash from transaction for signing case hashNotFound + /// Invalid private key case recoveredPublicKeyCorrupted + /// Printable / user displayable description + public var localizedDescription: String { + switch self { + case .chainIdNotFound: + return "Chain id not found. Please provide chain id to sign transaction" + case .hashNotFound: + return "Cannot get hash from transaction for signing" + case .recoveredPublicKeyCorrupted: + return "Invalid private key" + } + } } private static func attemptSignature(transaction: inout EthereumTransaction, privateKey: Data, useExtraEntropy: Bool = false) throws { @@ -94,8 +127,16 @@ public struct Web3Signer { guard originalPublicKey.constantTimeComparisonTo(recoveredPublicKey) else { throw Error.recoveredPublicKeyCorrupted } } } - + + /// Fallback signer public struct FallbackSigner { + /** + Sign transaction using FallbackSigner + - Parameter transaction: Transaction to sign + - Parameter privateKey: Private key that signs the transaction + - Parameter useExtraEntropy: Add random data to signed message. default: false + - Throws: Web3UtilsError.cannotConvertDataToAscii, SECP256K1Error, AbstractKeystoreError + */ public static func sign(transaction: inout EthereumTransaction, privateKey: Data, useExtraEntropy _: Bool = false) throws { for _ in 0 ..< 1024 { do { @@ -105,10 +146,22 @@ public struct Web3Signer { } throw AbstractKeystoreError.invalidAccountError } - + + /// Fallback signer errors public enum Error: Swift.Error { + /// Cannot get hash from transaction for signing case hashNotFound + /// Invalid private key case recoveredPublicKeyCorrupted + /// Printable / user displayable description + public var localizedDescription: String { + switch self { + case .hashNotFound: + return "Cannot get hash from transaction for signing" + case .recoveredPublicKeyCorrupted: + return "Invalid private key" + } + } } private static func attemptSignature(transaction: inout EthereumTransaction, privateKey: Data, useExtraEntropy: Bool = false) throws { diff --git a/Example/Pods/web3swift/Sources/ABIv2/SolidityDataReader.swift b/Example/Pods/web3swift/Sources/Transactions/SolidityDataReader.swift similarity index 81% rename from Example/Pods/web3swift/Sources/ABIv2/SolidityDataReader.swift rename to Example/Pods/web3swift/Sources/Transactions/SolidityDataReader.swift index f6f61917..a54b9bc5 100644 --- a/Example/Pods/web3swift/Sources/ABIv2/SolidityDataReader.swift +++ b/Example/Pods/web3swift/Sources/Transactions/SolidityDataReader.swift @@ -17,9 +17,24 @@ private extension Int { /// SolidityDataReader errors public enum SolidityDataReaderError: Error { + /// Element not found case notFound + /// Cannot get excepted type case wrongType + /// Not enough data case overflows + + /// Printable / user displayable description + public var localizedDescription: String { + switch self { + case .notFound: + return "Smart Contract response error: Element not found" + case .wrongType: + return "Smart Contract response error: Cannot get excepted type" + case .overflows: + return "Smart Contract response error: Not enough data" + } + } } /// Solidity data reader @@ -81,6 +96,7 @@ public class SolidityDataReader { return "" } else if pointer < Int.max { if let string = view(block: { try? stringPointer() }) { + try! skip(32) return string } else { return try string32() @@ -104,6 +120,21 @@ public class SolidityDataReader { } } + /// - Gets next 32 bytes as pointer + /// - Moves to that pointer. + /// - Returns next 32 bytes + public func bytes() throws -> Data { + return try pointer { + let length = try intCount() + guard length > 0 else { return Data() } + return try next(length) + } + } + + public func bytes32() throws -> Data { + return try next(32) + } + /// - Moves to pointer /// - Gets number of elements /// - Calls builder(self) (number of elements) times @@ -181,47 +212,47 @@ public extension SolidityDataReader { return T(number) } - /// - returns: next 32 bytes as UInt8 + /// - Returns: next 32 bytes as UInt8 func uint8() throws -> UInt8 { return try unsigned(max: 0xff) } - /// - returns: next 32 bytes as UInt16 + /// - Returns: next 32 bytes as UInt16 func uint16() throws -> UInt16 { return try unsigned(max: 0xffff) } - /// - returns: next 32 bytes as UInt32 + /// - Returns: next 32 bytes as UInt32 func uint32() throws -> UInt32 { return try unsigned(max: 0xffffffff) } - /// - returns: next 32 bytes as UInt64 + /// - Returns: next 32 bytes as UInt64 func uint64() throws -> UInt64 { return try unsigned(max: 0xffffffffffffffff) } - /// - returns: next 32 bytes as UInt64 + /// - Returns: next 32 bytes as UInt64 func uint() throws -> UInt { return try unsigned(max: BigUInt(UInt.max)) } - /// - returns: next 32 bytes as Int8 + /// - Returns: next 32 bytes as Int8 func int8() throws -> Int8 { return try signed(min: -0x80, max: 0x7f) } - /// - returns: next 32 bytes as Int16 + /// - Returns: next 32 bytes as Int16 func int16() throws -> Int16 { return try signed(min: -0x8000, max: 0x7fff) } - /// - returns: next 32 bytes as Int32 + /// - Returns: next 32 bytes as Int32 func int32() throws -> Int32 { return try signed(min: -0x80000000, max: 0x7fffffff) } - /// - returns: next 32 bytes as Int64 + /// - Returns: next 32 bytes as Int64 func int64() throws -> Int64 { return try signed(min: -0x8000000000000000, max: 0x7fffffffffffffff) } - /// - returns: next 32 bytes as Int + /// - Returns: next 32 bytes as Int func int() throws -> Int { return try signed(min: BigInt(Int.min), max: BigInt(Int.max)) } - /// - returns: next 32 bytes as Int and checks if int is >= 0 + /// - Returns: next 32 bytes as Int and checks if int is >= 0 func intCount() throws -> Int { return try signed(min: 0, max: BigInt(Int.max)) } diff --git a/Example/Pods/web3swift/Sources/ABIv2/SolidityDataWriter.swift b/Example/Pods/web3swift/Sources/Transactions/SolidityDataWriter.swift similarity index 84% rename from Example/Pods/web3swift/Sources/ABIv2/SolidityDataWriter.swift rename to Example/Pods/web3swift/Sources/Transactions/SolidityDataWriter.swift index 9afda0f9..50ada3de 100644 --- a/Example/Pods/web3swift/Sources/ABIv2/SolidityDataWriter.swift +++ b/Example/Pods/web3swift/Sources/Transactions/SolidityDataWriter.swift @@ -35,7 +35,7 @@ private extension Data { } } class SolidityDataWriter { - private var data: Data + private(set) var data: Data private var dynamicData = [SolidityDataPointer]() var offset = 0 init() { @@ -78,7 +78,19 @@ class SolidityDataWriter { self.data.append(data) } } + func setLength() { + data.replaceSubrange(0..<0, with: length(data.count, offset: 0xc0)) + } + + private func length(_ l: Int, offset: Int) -> Data { + func byte(_ value: Int) -> Data { return Data([UInt8(value)]) } + guard l + offset > 0xf7 else { return byte(l+offset) } + let serialized = BigUInt(l).serialize() + return byte(0xf7+serialized.count) + serialized + } + func done() -> Data { + guard !dynamicData.isEmpty else { return data } for pointer in dynamicData { data.write(data: (data.count - offset).solidityData, at: pointer.position) if pointer.data.count == 0 { diff --git a/Example/Pods/web3swift/Sources/ABIv2/SolidityFunction.swift b/Example/Pods/web3swift/Sources/Transactions/SolidityFunction.swift similarity index 64% rename from Example/Pods/web3swift/Sources/ABIv2/SolidityFunction.swift rename to Example/Pods/web3swift/Sources/Transactions/SolidityFunction.swift index 8371a5f2..9d6c4ee1 100644 --- a/Example/Pods/web3swift/Sources/ABIv2/SolidityFunction.swift +++ b/Example/Pods/web3swift/Sources/Transactions/SolidityFunction.swift @@ -12,9 +12,9 @@ import PromiseKit /// Protocol thats allows to convert types to solidity data public protocol SolidityDataRepresentable { - /// - returns: Solidity compatible data + /// - Returns: Solidity compatible data var solidityData: Data { get } - /// - returns: + /// - Returns: /// `true`: one element equals one byte. /// `false`: one element equals 32 bytes. /// default: false @@ -25,7 +25,7 @@ public extension SolidityDataRepresentable { } extension BinaryInteger { - /// - returns: Solidity compatible data + /// - Returns: Solidity compatible data public var solidityData: Data { return BigInt(self).abiEncode(bits: 256) } } extension Int: SolidityDataRepresentable {} @@ -59,26 +59,6 @@ extension Array: SolidityDataRepresentable where Element == SolidityDataRepresen } return data } - -// func dynamicSolidityData() -> Data { -// var data = Data(capacity: 32 * (count+1)) -// data.append(count.solidityData) -// for element in self { -// data.append(element.solidityData) -// } -// return data -// } -// func staticSolidityData(count: Int) -> Data { -// let capacity = 32 * count -// var data = Data(capacity: capacity) -// for element in self { -// data.append(element.solidityData) -// } -// if data.count < capacity { -// data.append(Data(count: capacity - data.count)) -// } -// return data -// } func data(function: String) -> Data { var data = Data(capacity: count * 32 + 4) data.append(function.keccak256()[0..<4]) @@ -90,6 +70,15 @@ extension Array: SolidityDataRepresentable where Element == SolidityDataRepresen } extension Address { + /// Prepares transaction to send. Estimates gas usage, nonce and gas price. + /// + /// - Parameters: + /// - function: Smart contract function + /// - arguments: Function arguments + /// - web3: Node address. default: .default + /// - options: Transaction options. default: nil + /// - onBlock: Future transaction block. default: "pending" + /// - Returns: Promise for the assembled transaction public func assemble(_ function: String, _ arguments: [Any], web3: Web3 = .default, options: Web3Options? = nil, onBlock: String = "pending") -> Promise { let options = web3.options.merge(with: options) @@ -106,36 +95,57 @@ extension Address { optionsForGasEstimation.from = options.from optionsForGasEstimation.to = options.to optionsForGasEstimation.value = options.value - let getNoncePromise = web3.eth.getTransactionCountPromise(address: from, onBlock: onBlock) - let gasEstimatePromise = web3.eth.estimateGasPromise(assembledTransaction, options: optionsForGasEstimation, onBlock: onBlock) - let gasPricePromise = web3.eth.getGasPricePromise() - var promisesToFulfill: [Promise] = [getNoncePromise, gasPricePromise, gasPricePromise] - when(resolved: getNoncePromise, gasEstimatePromise, gasPricePromise).map(on: queue, { (results: [Result]) throws -> EthereumTransaction in - - promisesToFulfill.removeAll() - guard case let .fulfilled(nonce) = results[0] else { - throw Web3Error.processingError("Failed to fetch nonce") - } - guard case let .fulfilled(gasEstimate) = results[1] else { - throw Web3Error.processingError("Failed to fetch gas estimate") - } - guard case let .fulfilled(gasPrice) = results[2] else { - throw Web3Error.processingError("Failed to fetch gas price") - } - let estimate = Web3Options.smartMergeGasLimit(originalOptions: options, extraOptions: options, gasEstimate: gasEstimate) - assembledTransaction.nonce = nonce + let nonce = web3.eth.getTransactionCountPromise(address: from, onBlock: onBlock) + let gasEstimate = web3.eth.estimateGasPromise(assembledTransaction, options: optionsForGasEstimation, onBlock: onBlock) + let gasPrice = web3.eth.getGasPricePromise() + nonce.catch { error in + seal.reject(Web3Error.processingError("Failed to fetch nonce")) + } + gasEstimate.catch { error in + seal.reject(Web3Error.processingError("Failed to fetch gas estimate")) + } + gasPrice.catch { error in + seal.reject(Web3Error.processingError("Failed to fetch gas price")) + } + + _ = when(fulfilled: nonce,gasEstimate,gasPrice).done(on: queue) { _ in + let estimate = Web3Options.smartMergeGasLimit(originalOptions: options, extraOptions: options, gasEstimate: gasEstimate.value!) + assembledTransaction.nonce = nonce.value! assembledTransaction.gasLimit = estimate - let finalGasPrice = Web3Options.smartMergeGasPrice(originalOptions: options, extraOptions: options, priceEstimate: gasPrice) + let finalGasPrice = Web3Options.smartMergeGasPrice(originalOptions: options, extraOptions: options, priceEstimate: gasPrice.value!) assembledTransaction.gasPrice = finalGasPrice - return assembledTransaction - }).done(on: queue, seal.fulfill).catch(on: queue, seal.reject) + seal.fulfill(assembledTransaction) + } } return returnPromise } + /// Sends transaction to call mutable smart contract function. + /// - Important: Set the sender in Web3Options.from + /// + /// - Parameters: + /// - function: Smart contract function + /// - arguments: Function arguments + /// - password: Password do decrypt your private key + /// - web3: Node address. default: .default + /// - options: Web3Options. default: nil + /// - onBlock: Future transaction block. default: "pending" + /// - Returns: Promise for sent transaction and its hash public func send(_ function: String, _ arguments: Any..., password: String = "BANKEXFOUNDATION", web3: Web3 = .default, options: Web3Options? = nil, onBlock: String = "pending") -> Promise { return send(function, arguments, password: password, web3: web3, options: options, onBlock: onBlock) } + + /// Sends transaction to call mutable smart contract function. + /// - Important: Set the sender in Web3Options.from + /// + /// - Parameters: + /// - function: Smart contract function + /// - arguments: Function arguments + /// - password: Password do decrypt your private key + /// - web3: Node address. default: .default + /// - options: Web3Options. default: nil + /// - onBlock: Future transaction block. default: "pending" + /// - Returns: Promise for sent transaction and its hash public func send(_ function: String, _ arguments: [Any], password: String = "BANKEXFOUNDATION", web3: Web3 = .default, options: Web3Options? = nil, onBlock: String = "pending") -> Promise { let options = web3.options.merge(with: options) let queue = web3.requestDispatcher.queue @@ -146,9 +156,30 @@ extension Address { return web3.eth.sendTransactionPromise(transaction, options: cleanedOptions, password: password) } } + + + /// Call a smart contract function. + /// + /// - Parameters: + /// - function: Function to call + /// - arguments: Function arguments + /// - web3: Node address. default: .default + /// - options: Web3Options. default: nil + /// - onBlock: Call block. default: "latest" + /// - Returns: Promise for function result public func call(_ function: String, _ arguments: Any..., web3: Web3 = .default, options: Web3Options? = nil, onBlock: String = "latest") -> Promise { return call(function, arguments, web3: web3, options: options, onBlock: onBlock) } + + /// Call a smart contract function. + /// + /// - Parameters: + /// - function: Function to call + /// - arguments: Function arguments + /// - web3: Node address. default: .default + /// - options: Web3Options. default: nil + /// - onBlock: Call block. default: "latest" + /// - Returns: Promise for function result public func call(_ function: String, _ arguments: [Any], web3: Web3 = .default, options: Web3Options? = nil, onBlock: String = "latest") -> Promise { let options = web3.options.merge(with: options) let function = try! SolidityFunction(function: function) @@ -166,9 +197,29 @@ extension Address { } } + + /// Estimates gas price for transaction + /// + /// - Parameters: + /// - function: Smart contract function + /// - arguments: Function arguments + /// - web3: Node address. default: .default + /// - options: Web3Options. default: nil + /// - onBlock: Gas estimation block. default: "latest" + /// - Returns: Promise for estimated gas public func estimateGas(_ function: String, _ arguments: Any..., web3: Web3 = .default, options: Web3Options? = nil, onBlock: String = "latest") -> Promise { return estimateGas(function, arguments, web3: web3, options: options, onBlock: onBlock) } + + /// Estimates gas price for transaction + /// + /// - Parameters: + /// - function: Smart contract function + /// - arguments: Function arguments + /// - web3: Node address. default: .default + /// - options: Web3Options. default: nil + /// - onBlock: Gas estimation block. default: "latest" + /// - Returns: Promise for estimated gas public func estimateGas(_ function: String, _ arguments: [Any], web3: Web3 = .default, options: Web3Options? = nil, onBlock: String = "latest") -> Promise { let options = web3.options.merge(with: options) let function = try! SolidityFunction(function: function) diff --git a/Example/Pods/web3swift/Sources/ABIv2/SolidityTypes.swift b/Example/Pods/web3swift/Sources/Transactions/SolidityTypes.swift similarity index 88% rename from Example/Pods/web3swift/Sources/ABIv2/SolidityTypes.swift rename to Example/Pods/web3swift/Sources/Transactions/SolidityTypes.swift index 6d7617f9..dd030d7e 100644 --- a/Example/Pods/web3swift/Sources/ABIv2/SolidityTypes.swift +++ b/Example/Pods/web3swift/Sources/Transactions/SolidityTypes.swift @@ -9,9 +9,17 @@ import Foundation import BigInt +/// Abi errors public enum AbiError: Error { - /// Unsupported types: function, tuple + /// Solidity types (function, tuple) are currently not supported case unsupportedType + /// Printable / user displayable description + public var localizedDescription: String { + switch self { + case .unsupportedType: + return "Solidity types (function, tuple) are currently not supported" + } + } } /** @@ -33,6 +41,10 @@ public enum AbiError: Error { ``` */ public class SolidityType: Equatable, CustomStringConvertible { + static let uint256 = SUInt(bits: 256) + static let address = SAddress() + + /// SolidityType array size public enum ArraySize { /// returns number of elements in a static array @@ -47,7 +59,7 @@ public class SolidityType: Equatable, CustomStringConvertible { /// returns true if type is array. default: false public var isArray: Bool { return false } /// returns true if type is tuple. default: false - /// - important: tuples are not supported at this moment + /// - Important: tuples are not supported at this moment public var isTuple: Bool { return false } /// returns number of elements in array if it static. default: .notArray public var arraySize: ArraySize { return .notArray } @@ -57,7 +69,7 @@ public class SolidityType: Equatable, CustomStringConvertible { public var memoryUsage: Int { return 32 } /// returns default data for empty value. default: Data(repeating: 0, count: memoryUsage) public var `default`: Data { return Data(count: memoryUsage) } - /// - returns string representation of solidity type + /// - Returns string representation of solidity type public var description: String { return "" } /// returns true if type input parameters is valid: default true public var isValid: Bool { return true } @@ -70,7 +82,15 @@ public class SolidityType: Equatable, CustomStringConvertible { /// Type conversion error public enum Error: Swift.Error { - case corrupted + /// Unknown solidity type "\(string)" + case corrupted(String) + /// Printable / user displayable description + public var localizedDescription: String { + switch self { + case let .corrupted(string): + return "Unknown solidity type: \"\(string)\"" + } + } } /// Represents solidity uintN type @@ -203,30 +223,30 @@ extension SolidityType { "int": SInt(bits: 256) ] private static func scan(tuple string: String, from index: Int) throws -> SolidityType { - guard string.last! == ")" else { throw Error.corrupted } - guard string[.. SolidityType { - guard string.last! == "]" else { throw Error.corrupted } + guard string.last! == "]" else { throw Error.corrupted(string) } let prefix = string[.. 0 else { throw Error.corrupted } + guard let count = Int(string) else { throw Error.corrupted(string) } + guard count > 0 else { throw Error.corrupted(string) } return SStaticArray(count: count, type: type) } } private static func scan(bytesArray string: String, from index: Int) throws -> SolidityType { - guard let count = Int(string[index...]) else { throw Error.corrupted } + guard let count = Int(string[index...]) else { throw Error.corrupted(string) } let type = SBytes(count: count) - guard type.isValid else { throw Error.corrupted } + guard type.isValid else { throw Error.corrupted(string) } return type } private static func scan(number string: String, from index: Int) throws -> SolidityType { @@ -237,36 +257,36 @@ extension SolidityType { isSigned = false case "int": isSigned = true - default: throw Error.corrupted + default: throw Error.corrupted(string) } let i = index+1 for (index2,character) in string[i...].enumerated() { switch character { case "[": - guard let number = Int(string[index...index+index2]) else { throw Error.corrupted } + guard let number = Int(string[index...index+index2]) else { throw Error.corrupted(string) } let type = isSigned ? SInt(bits: number) : SUInt(bits: number) - guard type.isValid else { throw Error.corrupted } - guard string.last! == "]" else { throw Error.corrupted } + guard type.isValid else { throw Error.corrupted(string) } + guard string.last! == "]" else { throw Error.corrupted(string) } // type.isValid == true let string = string[index+index2+2.. 0 else { throw Error.corrupted } + guard let count = Int(string) else { throw Error.corrupted(string) } + guard count > 0 else { throw Error.corrupted(string) } let array = SStaticArray(count: count, type: type) - guard array.isValid else { throw Error.corrupted } + guard array.isValid else { throw Error.corrupted(string) } return array } case "0"..."9": - guard index2 < 3 else { throw Error.corrupted } + guard index2 < 3 else { throw Error.corrupted(string) } continue - default: throw Error.corrupted + default: throw Error.corrupted(string) } } - guard let number = Int(string[index...]) else { throw Error.corrupted } + guard let number = Int(string[index...]) else { throw Error.corrupted(string) } let type = isSigned ? SInt(bits: number) : SUInt(bits: number) - guard type.isValid else { throw Error.corrupted } + guard type.isValid else { throw Error.corrupted(string) } return type } /** @@ -302,7 +322,7 @@ extension SolidityType { } else if let type = knownTypes[String(string)] { return type } else { - throw Error.corrupted + throw Error.corrupted(string) } } } @@ -357,6 +377,7 @@ public class SolidityFunction: CustomStringConvertible { case invalidFormat(String) /// Throws if function name is empty case emptyFunctionName(String) + /// Printable / user displayable description public var localizedDescription: String { switch self { case let .invalidFormat(function): diff --git a/Example/Pods/web3swift/Sources/Transactions/Transaction.swift b/Example/Pods/web3swift/Sources/Transactions/Transaction.swift new file mode 100644 index 00000000..3c62a7bc --- /dev/null +++ b/Example/Pods/web3swift/Sources/Transactions/Transaction.swift @@ -0,0 +1,123 @@ +// +// Transaction.swift +// web3swift +// +// Created by Dmitry on 30/11/2018. +// Copyright © 2018 Bankex Foundation. All rights reserved. +// + +import Foundation +import BigInt + +/// WIP +class Transaction { + var nonce: BigUInt = 0 + var gasPrice: BigUInt + var gasLimit: BigUInt + var to: Address + var value: BigUInt + var data: Data + + init(gasPrice: BigUInt, gasLimit: BigUInt, to: Address, value: BigUInt, data: Data) { + self.gasPrice = gasPrice + self.gasLimit = gasLimit + self.to = to + self.value = value + self.data = data + } + + func write(to data: TransactionDataWriter) { + data.append(nonce) + data.append(gasPrice) + data.append(gasLimit) + data.append(to) + data.append(value) + data.append(self.data) + } + + func write(networkId: NetworkId, to data: TransactionDataWriter) { + data.append(networkId.rawValue) + data.append(0) + data.append(0) + } + + func sign(using privateKey: PrivateKey, networkId: NetworkId? = nil) throws -> SignedTransaction { + let data = TransactionDataWriter() + write(to: data) + if let networkId = networkId { + write(networkId: networkId, to: data) + } + let hash = data.done().keccak256() + let signature = try privateKey.sign(hash: hash) + return SignedTransaction(transaction: self, signature: signature, networkId: networkId) + } +} + +/// WIP +class SignedTransaction { + let transaction: Transaction + let signature: Signature + let networkId: NetworkId? + init(transaction: Transaction, signature: Signature, networkId: NetworkId?) { + self.transaction = transaction + self.signature = signature + self.networkId = networkId + } + + func data() -> Data { + let data = TransactionDataWriter() + transaction.write(to: data) + if let networkId = networkId?.rawValue { + data.append(BigUInt(signature.v) + 35 + networkId + networkId) + } else { + data.append(BigUInt(signature.v) + 27) + } + data.append(signature.r) + data.append(signature.s) + return data.done() + } +} + +extension Data { + private func byte(_ value: Int) -> Data { + return Data([UInt8(value)]) + } + func length(offset: Int) -> Data { + guard !(count == 1 && self[0] < UInt8(offset)) else { return Data() } + let max = 0x37 + offset + guard count + offset > max else { return byte(count + offset) } + let serialized = BigUInt(count).serialize() + return byte(max + serialized.count) + serialized + } +} + +/// WIP +class TransactionDataWriter { + private(set) var data: Data + init() { + self.data = Data() + } + init(data: Data) { + self.data = data + } + + func append(_ value: BigUInt) { + _append(value.serialize()) + } + func append(_ value: Address) { + _append(value.addressData) + } + func _append(_ value: Data) { + data.append(value.length(offset: 0x80)) + data.append(value) + } + func append(_ value: Data) { + data.append(value.length(offset: 0x80)) + data.append(value) + } + + func done() -> Data { + data.replaceSubrange(0..<0, with: data.length(offset: 0xc0)) + return data + } +} diff --git a/Example/Pods/web3swift/Sources/TxPool/DictionaryReader.swift b/Example/Pods/web3swift/Sources/TxPool/DictionaryReader.swift index a0a40eeb..f22a6cde 100644 --- a/Example/Pods/web3swift/Sources/TxPool/DictionaryReader.swift +++ b/Example/Pods/web3swift/Sources/TxPool/DictionaryReader.swift @@ -40,6 +40,7 @@ public class DictionaryReader { case notFound(key: String, dictionary: [String: Any]) /// Throws if value cannot be converted to desired type case unconvertible(value: Any, expected: String) + /// Printable / user displayable description public var localizedDescription: String { switch self { case let .notFound(key, dictionary): @@ -60,20 +61,20 @@ public class DictionaryReader { return Error.unconvertible(value: raw, expected: expected) } - /// tries to represent raw as dictionary and gets value at key from it - /// - parameter key: dictionary key - /// - returns: DictionaryReader with found value - /// - throws: DictionaryReader.Error(if unconvertible to [String: Any] or if key not found in dictionary) + /// Tries to represent raw as dictionary and gets value at key from it + /// - Parameter key: Dictionary key + /// - Returns: DictionaryReader with found value + /// - Throws: DictionaryReader.Error(if unconvertible to [String: Any] or if key not found in dictionary) public func at(_ key: String) throws -> DictionaryReader { guard let data = raw as? [String: Any] else { throw unconvertible(to: "[String: Any]") } guard let value = data[key] else { throw Error.notFound(key: key, dictionary: data) } return DictionaryReader(value) } - /// tries to represent raw as dictionary and calls forEach on it - /// same as [String: Any]().map { key, value in ... } - /// - parameter block: callback for every key and value of dictionary - /// - throws: DictionaryReader.Error(if unconvertible to [String: Any]) + /// Tries to represent raw as dictionary and calls forEach on it. + /// Same as [String: Any]().map { key, value in ... } + /// - Parameter block: callback for every key and value of dictionary + /// - Throws: DictionaryReader.Error(if unconvertible to [String: Any]) public func dictionary(body: (DictionaryReader, DictionaryReader) throws -> ()) throws { guard let data = raw as? [String: Any] else { throw unconvertible(to: "[String: Any]") } try data.forEach { @@ -81,10 +82,10 @@ public class DictionaryReader { } } - /// tries to represent raw as array and calls forEach on it - /// same as [Any]().forEach { value in ... } - /// - parameter body: callback for every value in array - /// - throws: DictionaryReader.Error(if unconvertible to [Any]) + /// Tries to represent raw as array and calls forEach on it. + /// Same as [Any]().forEach { value in ... } + /// - Parameter body: Callback for every value in array + /// - Throws: DictionaryReader.Error(if unconvertible to [Any]) public func array(body: (DictionaryReader)throws->()) throws { guard let data = raw as? [Any] else { throw unconvertible(to: "[Any]") } try data.forEach { @@ -92,9 +93,9 @@ public class DictionaryReader { } } - /// tries to represent raw as string then string as address - /// - returns: Address - /// - throws: DictionaryReader.Error.unconvertible + /// Tries to represent raw as string then string as address + /// - Returns: Address + /// - Throws: DictionaryReader.Error.unconvertible public func address() throws -> Address { let string = try self.string() guard string.count >= 42 else { throw unconvertible(to: "Address") } @@ -105,9 +106,9 @@ public class DictionaryReader { return address } - /// tries to represent raw as string - /// - returns: Address - /// - throws: DictionaryReader.Error.unconvertible + /// Tries to represent raw as string + /// - Returns: Address + /// - Throws: DictionaryReader.Error.unconvertible public func string() throws -> String { if let value = raw as? String { return value @@ -118,8 +119,8 @@ public class DictionaryReader { } } - /// tries to represent raw as data or as hex string then as data - /// - throws: DictionaryReader.Error.unconvertible + /// Tries to represent raw as data or as hex string then as data + /// - Throws: DictionaryReader.Error.unconvertible public func data() throws -> Data { if let value = raw as? Data { return value @@ -128,12 +129,13 @@ public class DictionaryReader { } } - /// tries to represent raw as BigUInt - /// can convert: + /// Tries to represent raw as BigUInt. + /// + /// Can convert: /// - "0x12312312" /// - 0x123123 /// - "123123123" - /// - throws: DictionaryReader.Error.unconvertible + /// - Throws: DictionaryReader.Error.unconvertible public func uint256() throws -> BigUInt { if let value = raw as? String { if value.isHex { @@ -150,12 +152,13 @@ public class DictionaryReader { } } - /// tries to represent raw as Int - /// can convert: + /// Tries to represent raw as Int. + /// + /// Can convert: /// - "0x12312312" /// - 0x123123 /// - "123123123" - /// - throws: DictionaryReader.Error.unconvertible + /// - Throws: DictionaryReader.Error.unconvertible public func int() throws -> Int { if let value = raw as? Int { return value @@ -171,6 +174,10 @@ public class DictionaryReader { throw unconvertible(to: "Int") } } + + func json() throws -> Data { + return try JSONSerialization.data(withJSONObject: raw, options: .prettyPrinted) + } } extension Dictionary where Key == String, Value == Any { @@ -183,9 +190,9 @@ extension Dictionary where Key == String, Value == Any { var jsonDescription: String { return json.string } - /// - parameter key: dictionary key - /// - returns: DictionaryReader with found value - /// - throws: DictionaryReader.Error(if key not found in dictionary) + /// - Parameter key: Dictionary key + /// - Returns: DictionaryReader with found value + /// - Throws: DictionaryReader.Error(if key not found in dictionary) public func at(_ key: String) throws -> DictionaryReader { guard let value = self[key] else { throw notFound(at: key) } return DictionaryReader(value) diff --git a/Example/Pods/web3swift/Sources/TxPool/TxPool.swift b/Example/Pods/web3swift/Sources/TxPool/TxPool.swift index 7147a332..30841137 100644 --- a/Example/Pods/web3swift/Sources/TxPool/TxPool.swift +++ b/Example/Pods/web3swift/Sources/TxPool/TxPool.swift @@ -12,27 +12,27 @@ import BigInt /** Native realisation of txpool - - important: Doesn't works with Infura provider + - Important: Doesn't works with Infura provider */ public class TxPool { /** - - important: Doesn't works with Infura provider + - Important: Doesn't works with Infura provider */ public static var `default`: TxPool { return TxPool(web3: .default) } var web3: Web3 /** - - important: Doesn't works with Infura provider + - Important: Doesn't works with Infura provider */ public init(web3: Web3) { self.web3 = web3 } /** - - important: Doesn't works with Infura provider | main thread friendly - - returns: number of pending and queued transactions - - throws: + - Important: Doesn't works with Infura provider | main thread friendly + - Returns: number of pending and queued transactions + - Throws: DictionaryReader.Error if server has different response than expected | Web3Error.nodeError for node error | Any URLSession.dataTask Error @@ -45,9 +45,9 @@ public class TxPool { } /** - - important: Doesn't works with Infura provider | main thread friendly - - returns: main information about pending and queued transactions - - throws: + - Important: Doesn't works with Infura provider | main thread friendly + - Returns: main information about pending and queued transactions + - Throws: DictionaryReader.Error if server has different response than expected | Web3Error.nodeError for node error | Any URLSession.dataTask Error @@ -60,9 +60,9 @@ public class TxPool { } /** - - important: Doesn't works with Infura provider | main thread friendly - - returns: full information for all pending and queued transactions - - throws: + - Important: Doesn't works with Infura provider | main thread friendly + - Returns: full information for all pending and queued transactions + - Throws: DictionaryReader.Error if server has different response than expected | Web3Error.nodeError for node error | Any URLSession.dataTask Error @@ -223,4 +223,3 @@ public class TxPoolContent { } } } - diff --git a/Example/Pods/web3swift/Sources/Utils/EIP67Code.swift b/Example/Pods/web3swift/Sources/Utils/EIP67Code.swift index 7c8887ee..a3d233be 100644 --- a/Example/Pods/web3swift/Sources/Utils/EIP67Code.swift +++ b/Example/Pods/web3swift/Sources/Utils/EIP67Code.swift @@ -11,28 +11,37 @@ import BigInt import CoreImage import Foundation +/// QRCode typealias +public typealias EthereumQRCode = EIP67Code + /** QR Code representation of address or blockchain transaction - - */ - -public typealias EthereumQRCode = EIP67Code public struct EIP67Code { + /// Recipient public var address: Address + /// Gas limit public var gasLimit: BigUInt? + /// Value public var amount: BigUInt? + /// Transaction data public var data: DataType? - + + /// Data type public enum DataType { + /// Data case data(Data) + /// Function case function(Function) } + /// Function type public struct Function { + /// Function method public var method: String + /// Function parameters public var parameters: [(ABIv2.Element.ParameterType, AnyObject)] - + /// String representation public func toString() -> String? { let encoding = method + "(" + parameters.map({ (el) -> String in if let string = el.1 as? String { @@ -42,17 +51,18 @@ public struct EIP67Code { } else if let number = el.1 as? BigInt { return el.0.abiRepresentation + " " + String(number, radix: 10) } else if let data = el.1 as? Data { - return el.0.abiRepresentation + " " + data.toHexString().withHex + return el.0.abiRepresentation + " " + data.hex.withHex } return "" }).joined(separator: ", ") + ")" return encoding } } - + /// Init with address public init(address: Address) { self.address = address } + /// Init with url public init?(string: String) { guard string.hasPrefix("ethereum:") else { return nil } let striped = string.components(separatedBy: "ethereum:") @@ -83,7 +93,8 @@ public struct EIP67Code { } } } - + + /// String representation public func toString() -> String { var urlComponents = URLComponents() let mainPart = "ethereum:" + address.address.lowercased() @@ -97,7 +108,7 @@ public struct EIP67Code { if let data = self.data { switch data { case let .data(d): - queryItems.append(URLQueryItem(name: "data", value: d.toHexString().withHex)) + queryItems.append(URLQueryItem(name: "data", value: d.hex.withHex)) case let .function(f): if let enc = f.toString() { queryItems.append(URLQueryItem(name: "function", value: enc)) @@ -110,7 +121,8 @@ public struct EIP67Code { } return mainPart } - + + /// Generates QRCode image. Returns CIImage() if something goes wrong public func toImage(scale: Double = 1.0) -> CIImage { let from = self guard let string = from.toString().addingPercentEncoding(withAllowedCharacters: .urlHostAllowed) else { return CIImage() } diff --git a/Example/Pods/web3swift/Sources/EthURL/EthURL.swift b/Example/Pods/web3swift/Sources/Utils/EthURL.swift similarity index 52% rename from Example/Pods/web3swift/Sources/EthURL/EthURL.swift rename to Example/Pods/web3swift/Sources/Utils/EthURL.swift index 6ae7a787..b11dc898 100644 --- a/Example/Pods/web3swift/Sources/EthURL/EthURL.swift +++ b/Example/Pods/web3swift/Sources/Utils/EthURL.swift @@ -9,20 +9,75 @@ import BigInt import Foundation +/// Typealias for url standard +public typealias EIP681 = EthURL + +/** + Represents [EIP681](https://github.com/ethereum/EIPs/blob/master/EIPS/eip-681.md) url + + Syntax: + ``` + request = erc831_part target_address [ "@" chain_id ] [ "/" function_name ] [ "?" parameters ] + erc831_part = schema and optional prefix as defined in #831 - typically "ethereum" ":" [ "pay-" ] in this case + target_address = ethereum_address + chain_id = 1*DIGIT + function_name = STRING + ethereum_address = ( "0x" 40*40HEXDIG ) / ENS_NAME + parameters = parameter *( "&" parameter ) + parameter = key "=" value + key = "value" / "gas" / "gasLimit" / "gasPrice" / TYPE + value = number / ethereum_address / STRING + number = [ "-" / "+" ] *DIGIT [ "." 1*DIGIT ] [ ( "e" / "E" ) [ 1*DIGIT ] [ "+" UNIT ] + ``` + + Example urls: + ``` + ethereum:0xfb6916095ca1df60bb79Ce92ce3ea74c37c5d359?value=2.014e18 + + ethereum:0x89205a3a3b2a69de6dbf7f01ed13b2108b2c43e7/transfer?address=0x8e23ee67d1332ad560396262c48ffbb01f93d052&uint256=1 + ``` + */ public class EthURL { + /// Errors public enum Error: Swift.Error { + /// URL has invalid scheme. Ethereum url should start with ethereum: case wrongScheme + /// Invalid ethereum address case addressCorrupted + /// Invalid ethereum host case hostCorrupted + /// Invalid ethereum user case userCorrupted + /// Provided url is not url convertible case notURL + /// Printable / user displayable description + public var localizedDescription: String { + switch self { + case .wrongScheme: + return "URL has invalid scheme. Ethereum url should start with ethereum:" + case .addressCorrupted: + return "Invalid ethereum address" + case .hostCorrupted: + return "Invalid ethereum host" + case .userCorrupted: + return "Invalid ethereum user" + case .notURL: + return "Provided url is not url convertible" + } + } } - + + /// Is pay transaction public var isPay: Bool + /// Contract / recipient address public var targetAddress: String + /// Chain id public var chainId: BigInt? + /// Function name public var functionName: String? + /// Function arguments public var parameters = [String: String]() + /// String representation of url public var string: String { var string = "ethereum:" if isPay { @@ -40,16 +95,19 @@ public class EthURL { } return string } - + + /// Url representation public var url: URL { return URL(string: string)! } - + + /// Init with target address public init(address: String) { isPay = false targetAddress = address } - + + /// Init with url string public init(string: String) throws { let prefix = "ethereum:" guard string.hasPrefix(prefix) else { throw Error.wrongScheme } diff --git a/Example/Pods/web3swift/Sources/Utils/RLP.swift b/Example/Pods/web3swift/Sources/Utils/RLP.swift index 556766e8..28f39792 100644 --- a/Example/Pods/web3swift/Sources/Utils/RLP.swift +++ b/Example/Pods/web3swift/Sources/Utils/RLP.swift @@ -13,8 +13,8 @@ protocol ArrayType {} extension Array: ArrayType {} struct RLP { - static var length56 = BigUInt(UInt(56)) - static var lengthMax = (BigUInt(UInt(1)) << 256) + static var length56 = BigUInt(56) + static var lengthMax = (BigUInt(1) << 256) static func encode(_ element: AnyObject) -> Data? { if let string = element as? String { @@ -65,7 +65,7 @@ struct RLP { if data.count == 1 && data.bytes[0] < UInt8(0x80) { return data } else { - guard let length = encodeLength(data.count, offset: UInt8(0x80)) else { return nil } + guard let length = encodeLength(data.count, offset: 0x80) else { return nil } var encoded = Data() encoded.append(length) encoded.append(data) diff --git a/Example/Pods/web3swift/Sources/Web3/Batching.swift b/Example/Pods/web3swift/Sources/Web3/Batching.swift index 5069876f..57b03b81 100644 --- a/Example/Pods/web3swift/Sources/Web3/Batching.swift +++ b/Example/Pods/web3swift/Sources/Web3/Batching.swift @@ -9,9 +9,13 @@ import Foundation import PromiseKit +/// Request dispatcher. Allows you to send multiple JsonRpcRequests in one URLRequest public class JsonRpcRequestDispatcher { + /// Time that dispatcher waits before send the request public var MAX_WAIT_TIME: TimeInterval = 0.1 + /// Dispatch policy public var policy: DispatchPolicy + /// Dispatch queue for responses public var queue: DispatchQueue private var provider: Web3Provider @@ -106,9 +110,12 @@ public class JsonRpcRequestDispatcher { } return currentBatch } - + + /// Dispatch policy public enum DispatchPolicy { + /// Sends up to N JsonRpcRequests in one URLRequest case Batch(Int) + /// Sends one JsonRpcRequest in one URLRequest case NoBatching } diff --git a/Example/Pods/web3swift/Sources/Web3/Web3+Contract.swift b/Example/Pods/web3swift/Sources/Web3/Web3+Contract.swift index e4e0f458..d5b26c39 100644 --- a/Example/Pods/web3swift/Sources/Web3/Web3+Contract.swift +++ b/Example/Pods/web3swift/Sources/Web3/Web3+Contract.swift @@ -20,6 +20,7 @@ extension Web3 { public class Web3Contract { var contract: ContractProtocol var web3: Web3 + /// Default options public var options: Web3Options /// Initialize the bound contract instance by supplying the Web3 provider bound object, ABI, Ethereum address and some default @@ -45,6 +46,10 @@ public class Web3Contract { return try deploy(bytecode: bytecode, parameters: args, extraData: extraData, options: options) } + /// Deploys a constact instance using the previously provided (at initialization) ABI, some bytecode, constructor parameters and options. + /// If extraData is supplied it is appended to encoded bytecode and constructor parameters. + /// + /// Returns a "Transaction intermediate" object. public func deploy(bytecode: Data, parameters: [Any], extraData: Data = Data(), options: Web3Options?) throws -> TransactionIntermediate { let mergedOptions = self.options.merge(with: options) var tx = try contract.deploy(bytecode: bytecode, parameters: parameters, extraData: extraData, options: mergedOptions) @@ -52,7 +57,7 @@ public class Web3Contract { return TransactionIntermediate(transaction: tx, web3: web3, contract: contract, method: "fallback", options: mergedOptions) } - /// Creates and object responsible for calling a particular function of the contract. If method name is not found in ABI - returns nil. + /// Creates and object responsible for calling a particular function of the contract. If method name is not found in ABI - Returns nil. /// If extraData is supplied it is appended to encoded function parameters. Can be usefull if one wants to call /// the function not listed in ABI. "Parameters" should be an array corresponding to the list of parameters of the function. /// Elements of "parameters" can be other arrays or instances of String, Data, BigInt, BigUInt, Int or Address. @@ -62,6 +67,12 @@ public class Web3Contract { return try method(name, parameters: args, extraData: extraData, options: options) } + /// Creates and object responsible for calling a particular function of the contract. If method name is not found in ABI - Returns nil. + /// If extraData is supplied it is appended to encoded function parameters. Can be usefull if one wants to call + /// the function not listed in ABI. "Parameters" should be an array corresponding to the list of parameters of the function. + /// Elements of "parameters" can be other arrays or instances of String, Data, BigInt, BigUInt, Int or Address. + /// + /// Returns a "Transaction intermediate" object. public func method(_ method: String = "fallback", parameters: [Any], extraData: Data = Data(), options: Web3Options?) throws -> TransactionIntermediate { let mergedOptions = self.options.merge(with: options) var tx = try contract.method(method, parameters: parameters, extraData: extraData, options: mergedOptions) diff --git a/Example/Pods/web3swift/Sources/Web3/Web3+Eth.swift b/Example/Pods/web3swift/Sources/Web3/Web3+Eth.swift index a7f0d49f..43b8aba7 100644 --- a/Example/Pods/web3swift/Sources/Web3/Web3+Eth.swift +++ b/Example/Pods/web3swift/Sources/Web3/Web3+Eth.swift @@ -15,6 +15,7 @@ public class Web3Eth: Web3OptionsInheritable { /// provider for some functions var provider: Web3Provider unowned var web3: Web3 + /// Default options public var options: Web3Options { return web3.options } @@ -27,105 +28,105 @@ public class Web3Eth: Web3OptionsInheritable { /// Send an EthereumTransaction object to the network. Transaction is either signed locally if there is a KeystoreManager /// object bound to the web3 instance, or sent unsigned to the node. For local signing the password is required. /// - /// - parameter transaction: Transaction to send - /// - parameter options: object can override the "to", "gasPrice", "gasLimit" and "value" parameters is pre-formed transaction. + /// - Parameter transaction: Transaction to send + /// - Parameter options: Object can override the "to", "gasPrice", "gasLimit" and "value" parameters is pre-formed transaction. /// "from" field in "options" is mandatory for both local and remote signing. - /// - parameter password: Password to decrypt sender's private key - /// - important: This function is synchronous! + /// - Parameter password: Password to decrypt sender's private key + /// - Important: This function is synchronous! public func sendTransaction(_ transaction: EthereumTransaction, options: Web3Options, password: String = "BANKEXFOUNDATION") throws -> TransactionSendingResult { return try sendTransactionPromise(transaction, options: options, password: password).wait() } /// Performs a non-mutating "call" to some smart-contract. EthereumTransaction bears all function parameters required for the call. /// Does NOT decode the data returned from the smart-contract. - /// - parameter transaction: Transaction to send - /// - parameter options: object can override the "to", "gasPrice", "gasLimit" and "value" parameters is pre-formed transaction. + /// - Parameter transaction: Transaction to send + /// - Parameter options: Object can override the "to", "gasPrice", "gasLimit" and "value" parameters is pre-formed transaction. /// "from" field in "options" is mandatory for both local and remote signing. - /// - parameter onBlock: field determines if value is returned based on the state of a blockchain on the latest mined block ("latest") + /// - Parameter onBlock: Field determines if value is returned based on the state of a blockchain on the latest mined block ("latest") /// or the expected state after all the transactions in memory pool are applied ("pending"). - /// - important: This function is synchronous! - /// - returns: smart contract response + /// - Important: This function is synchronous! + /// - Returns: Smart contract response public func call(_ transaction: EthereumTransaction, options: Web3Options, onBlock: String = "latest") throws -> Data { return try callPromise(transaction, options: options, onBlock: onBlock).wait() } /// Send raw Ethereum transaction data to the network. - /// - parameter transaction: Transaction to send - /// - important: This function is synchronous! - /// - returns: TransactionSendingResult with transaction and its hash + /// - Parameter transaction: Transaction to send + /// - Important: This function is synchronous! + /// - Returns: TransactionSendingResult with transaction and its hash public func sendRawTransaction(_ transaction: Data) throws -> TransactionSendingResult { return try sendRawTransactionPromise(transaction).wait() } /// Send raw Ethereum transaction data to the network by first serializing the EthereumTransaction object. - /// - parameter transaction: Transaction to send - /// - important: This function is synchronous! - /// - returns: TransactionSendingResult with transaction and its hash + /// - Parameter transaction: Transaction to send + /// - Important: This function is synchronous! + /// - Returns: TransactionSendingResult with transaction and its hash public func sendRawTransaction(_ transaction: EthereumTransaction) throws -> TransactionSendingResult { return try sendRawTransactionPromise(transaction).wait() } - /// - parameter address: transaction sender address - /// - parameter onBlock: field determines if value is returned based on the state of a blockchain on the latest mined block ("latest") + /// - Parameter address: Transaction sender address + /// - Parameter onBlock: Field determines if value is returned based on the state of a blockchain on the latest mined block ("latest") /// or the expected state after all the transactions in memory pool are applied ("pending"). - /// - returns: a total number of transactions sent by the particular Ethereum address. - /// - important: This function is synchronous! + /// - Returns: A total number of transactions sent by the particular Ethereum address. + /// - Important: This function is synchronous! public func getTransactionCount(address: Address, onBlock: String = "latest") throws -> BigUInt { return try getTransactionCountPromise(address: address, onBlock: onBlock).wait() } - /// - parameter onBlock: field determines if value is returned based on the state of a blockchain on the latest mined block ("latest") + /// - Parameter onBlock: Field determines if value is returned based on the state of a blockchain on the latest mined block ("latest") /// or the expected state after all the transactions in memory pool are applied ("pending"). - /// - returns: a balance of particular Ethereum address in Wei units (1 ETH = 10^18 Wei). + /// - Returns: A balance of particular Ethereum address in Wei units (1 ETH = 10^18 Wei). /// - /// - important: This function is synchronous! + /// - Important: This function is synchronous! public func getBalance(address: Address, onBlock: String = "latest") throws -> BigUInt { return try getBalancePromise(address: address, onBlock: onBlock).wait() } - /// - returns: a block number of the last mined block that Ethereum node knows about. + /// - Returns: A block number of the last mined block that Ethereum node knows about. /// - /// - important: This function is synchronous! + /// - Important: This function is synchronous! public func getBlockNumber() throws -> BigUInt { return try getBlockNumberPromise().wait() } - /// - returns: a current gas price in the units of Wei. The node has internal algorithms for averaging over the last few blocks. + /// - Returns: A current gas price in the units of Wei. The node has internal algorithms for averaging over the last few blocks. /// - /// - important: This function is synchronous! + /// - Important: This function is synchronous! public func getGasPrice() throws -> BigUInt { return try getGasPricePromise().wait() } - /// - returns: transaction details for particular transaction hash. Details indicate position of the transaction in a particular block, + /// - Returns: Transaction details for particular transaction hash. Details indicate position of the transaction in a particular block, /// as well as original transaction details such as value, gas limit, gas price, etc. /// - /// - important: This function is synchronous! + /// - Important: This function is synchronous! public func getTransactionDetails(_ txhash: Data) throws -> TransactionDetails { return try getTransactionDetailsPromise(txhash).wait() } - /// - returns: transaction details for particular transaction hash. Details indicate position of the transaction in a particular block, + /// - Returns: Transaction details for particular transaction hash. Details indicate position of the transaction in a particular block, /// as well as original transaction details such as value, gas limit, gas price, etc. /// - /// - important: This function is synchronous! + /// - Important: This function is synchronous! /// - /// - returns: TransactionDetails object + /// - Returns: TransactionDetails object public func getTransactionDetails(_ txhash: String) throws -> TransactionDetails { return try getTransactionDetailsPromise(txhash).wait() } - /// - parameter txhash: Transaction hash - /// - returns: transaction receipt for particular transaction hash. Receipt indicate what has happened when the transaction + /// - Parameter txhash: Transaction hash + /// - Returns: Transaction receipt for particular transaction hash. Receipt indicate what has happened when the transaction /// was included in block, so it contains logs and status, such as succesful or failed transaction. - /// - important: This function is synchronous! + /// - Important: This function is synchronous! public func getTransactionReceipt(_ txhash: Data) throws -> TransactionReceipt { return try getTransactionReceiptPromise(txhash).wait() } - /// - parameter txhash: Transaction hash - /// - returns: transaction receipt for particular transaction hash. Receipt indicate what has happened when the transaction + /// - Parameter txhash: Transaction hash + /// - Returns: Transaction receipt for particular transaction hash. Receipt indicate what has happened when the transaction /// was included in block, so it contains logs and status, such as succesful or failed transaction. - /// - important: This function is synchronous! + /// - Important: This function is synchronous! public func getTransactionReceipt(_ txhash: String) throws -> TransactionReceipt { return try getTransactionReceiptPromise(txhash).wait() } @@ -134,12 +135,12 @@ public class Web3Eth: Web3OptionsInheritable { /// how much gas it consumes for computations. Setting the transaction gas limit lower than the estimate will most likely /// result in a failing transaction. /// - /// - parameter onBlock: field determines if value is returned based on the state of a blockchain on the latest mined block ("latest") + /// - Parameter onBlock: field determines if value is returned based on the state of a blockchain on the latest mined block ("latest") /// or the expected state after all the transactions in memory pool are applied ("pending"). /// - /// - important: This function is synchronous! - /// - returns: Maximum amount of gas that would be used in the transaction - /// - throws: Error can also indicate that transaction is invalid in the current state, so formally it's gas limit is infinite. + /// - Important: This function is synchronous! + /// - Returns: Maximum amount of gas that would be used in the transaction + /// - Throws: Error can also indicate that transaction is invalid in the current state, so formally it's gas limit is infinite. /// An example of such transaction can be sending an amount of ETH that is larger than the current account balance. public func estimateGas(_ transaction: EthereumTransaction, options: Web3Options?, onBlock: String = "latest") throws -> BigUInt { return try estimateGasPromise(transaction, options: options, onBlock: onBlock).wait() @@ -147,8 +148,8 @@ public class Web3Eth: Web3OptionsInheritable { /// Get a list of Ethereum accounts that a node knows about. /// If one has attached a Keystore Manager to the web3 object it returns accounts known to the keystore. - /// - important: This function is synchronous! - /// - returns: Array of addresses in the node + /// - Important: This function is synchronous! + /// - Returns: Array of addresses in the node public func getAccounts() throws -> [Address] { return try getAccountsPromise().wait() } @@ -157,8 +158,8 @@ public class Web3Eth: Web3OptionsInheritable { /// this call fill do a virtual join and fetch not just transaction hashes from this block, /// but full decoded EthereumTransaction objects. /// - /// - important: This function is synchronous! - /// - returns: Found Block + /// - Important: This function is synchronous! + /// - Returns: Found Block public func getBlockByHash(_ hash: String, fullTransactions: Bool = false) throws -> Block { return try getBlockByHashPromise(hash, fullTransactions: fullTransactions).wait() } @@ -167,9 +168,9 @@ public class Web3Eth: Web3OptionsInheritable { /// this call fill do a virtual join and fetch not just transaction hashes from this block, /// but full decoded EthereumTransaction objects. /// - /// - important: This function is synchronous! + /// - Important: This function is synchronous! /// - /// - returns: Found Block + /// - Returns: Found Block public func getBlockByHash(_ hash: Data, fullTransactions: Bool = false) throws -> Block { return try getBlockByHashPromise(hash, fullTransactions: fullTransactions).wait() } @@ -178,9 +179,9 @@ public class Web3Eth: Web3OptionsInheritable { /// this call fill do a virtual join and fetch not just transaction hashes from this block, /// but full decoded EthereumTransaction objects. /// - /// - important: This function is synchronous! + /// - Important: This function is synchronous! /// - /// - returns: Found Block + /// - Returns: Found Block public func getBlockByNumber(_ number: UInt64, fullTransactions: Bool = false) throws -> Block { return try getBlockByNumberPromise(number, fullTransactions: fullTransactions).wait() } @@ -189,9 +190,9 @@ public class Web3Eth: Web3OptionsInheritable { /// this call fill do a virtual join and fetch not just transaction hashes from this block, /// but full decoded EthereumTransaction objects. /// - /// - important: This function is synchronous! + /// - Important: This function is synchronous! /// - /// - returns: Found Block + /// - Returns: Found Block public func getBlockByNumber(_ number: BigUInt, fullTransactions: Bool = false) throws -> Block { return try getBlockByNumberPromise(number, fullTransactions: fullTransactions).wait() } @@ -200,21 +201,21 @@ public class Web3Eth: Web3OptionsInheritable { /// this call fill do a virtual join and fetch not just transaction hashes from this block, /// but full decoded EthereumTransaction objects. /// - /// - important: This function is synchronous! + /// - Important: This function is synchronous! /// - /// - returns: Found Block + /// - Returns: Found Block public func getBlockByNumber(_ block: String, fullTransactions: Bool = false) throws -> Block { return try getBlockByNumberPromise(block, fullTransactions: fullTransactions).wait() } /** Convenience wrapper to send Ethereum to another address. Internally it creates a virtual contract and encodes all the options and data. - - parameter to: Address to send funds to - - parameter amount: BigUInt indicating the amount in wei - - parameter extraData: Additional data to attach to the transaction - - parameter options: Web3Options to override the default gas price, gas limit. "Value" field of the options is ignored and the "amount" parameter is used instead + - Parameter to: Address to send funds to + - Parameter amount: BigUInt indicating the amount in wei + - Parameter extraData: Additional data to attach to the transaction + - Parameter options: Web3Options to override the default gas price, gas limit. "Value" field of the options is ignored and the "amount" parameter is used instead - - returns: TransactionIntermediate object + - Returns: TransactionIntermediate object */ public func sendETH(to: Address, amount: BigUInt, extraData: Data = Data(), options: Web3Options? = nil) throws -> TransactionIntermediate { let contract = try web3.contract(Web3Utils.coldWalletABI, at: to) @@ -227,7 +228,7 @@ public class Web3Eth: Web3OptionsInheritable { /// this call fill do a virtual join and fetch not just transaction hashes from this block, /// but full decoded EthereumTransaction objects. /// - /// - returns: Found Block + /// - Returns: Found Block public func getBlockNumberPromise() -> Promise { let request = JsonRpcRequest(method: .blockNumber) let rp = web3.dispatch(request) @@ -243,7 +244,7 @@ public class Web3Eth: Web3OptionsInheritable { } } - /// - returns: a current gas price in the units of Wei. The node has internal algorithms for averaging over the last few blocks. + /// - Returns: A current gas price in the units of Wei. The node has internal algorithms for averaging over the last few blocks. public func getGasPricePromise() -> Promise { let request = JsonRpcRequest(method: .gasPrice) let rp = web3.dispatch(request) @@ -263,9 +264,9 @@ public class Web3Eth: Web3OptionsInheritable { /// this call fill do a virtual join and fetch not just transaction hashes from this block, /// but full decoded EthereumTransaction objects. /// - /// - returns: Found Block + /// - Returns: Found Block public func getBlockByHashPromise(_ hash: Data, fullTransactions: Bool = false) -> Promise { - let hashString = hash.toHexString().withHex + let hashString = hash.hex.withHex return getBlockByHashPromise(hashString, fullTransactions: fullTransactions) } @@ -273,7 +274,7 @@ public class Web3Eth: Web3OptionsInheritable { /// this call fill do a virtual join and fetch not just transaction hashes from this block, /// but full decoded EthereumTransaction objects. /// - /// - returns: Found Block + /// - Returns: Found Block public func getBlockByHashPromise(_ hash: String, fullTransactions: Bool = false) -> Promise { let request = JsonRpcRequest(method: .getBlockByHash, parameters: hash, fullTransactions) let rp = web3.dispatch(request) @@ -290,14 +291,14 @@ public class Web3Eth: Web3OptionsInheritable { } - /// - returns: transaction details for particular transaction hash. Details indicate position of the transaction in a particular block, + /// - Returns: Transaction details for particular transaction hash. Details indicate position of the transaction in a particular block, /// as well as original transaction details such as value, gas limit, gas price, etc. public func getTransactionDetailsPromise(_ txhash: Data) -> Promise { - let hashString = txhash.toHexString().withHex + let hashString = txhash.hex.withHex return getTransactionDetailsPromise(hashString) } - /// - returns: transaction details for particular transaction hash. Details indicate position of the transaction in a particular block, + /// - Returns: Transaction details for particular transaction hash. Details indicate position of the transaction in a particular block, /// as well as original transaction details such as value, gas limit, gas price, etc. public func getTransactionDetailsPromise(_ txhash: String) -> Promise { let request = JsonRpcRequest(method: .getTransactionByHash, parameters: txhash) @@ -318,10 +319,10 @@ public class Web3Eth: Web3OptionsInheritable { /// Send an EthereumTransaction object to the network. Transaction is either signed locally if there is a KeystoreManager /// object bound to the web3 instance, or sent unsigned to the node. For local signing the password is required. /// - /// - parameter transaction: Transaction to send - /// - parameter options: object can override the "to", "gasPrice", "gasLimit" and "value" parameters is pre-formed transaction. + /// - Parameter transaction: Transaction to send + /// - Parameter options: Object can override the "to", "gasPrice", "gasLimit" and "value" parameters is pre-formed transaction. /// "from" field in "options" is mandatory for both local and remote signing. - /// - parameter password: Password to decrypt sender's private key + /// - Parameter password: Password to decrypt sender's private key func sendTransactionPromise(_ transaction: EthereumTransaction, options: Web3Options, password: String = "BANKEXFOUNDATION") -> Promise { // print(transaction) var assembledTransaction: EthereumTransaction = transaction.mergedWithOptions(options) @@ -360,9 +361,9 @@ public class Web3Eth: Web3OptionsInheritable { } } - /// - parameter onBlock: field determines if value is returned based on the state of a blockchain on the latest mined block ("latest") + /// - Parameter onBlock: Field determines if value is returned based on the state of a blockchain on the latest mined block ("latest") /// or the expected state after all the transactions in memory pool are applied ("pending"). - /// - returns: a balance of particular Ethereum address in Wei units (1 ETH = 10^18 Wei). + /// - Returns: A balance of particular Ethereum address in Wei units (1 ETH = 10^18 Wei). public func getBalancePromise(address: Address, onBlock: String = "latest") -> Promise { let request = JsonRpcRequest(method: .getBalance, parameters: address._address.lowercased(), onBlock) let rp = web3.dispatch(request) @@ -379,19 +380,19 @@ public class Web3Eth: Web3OptionsInheritable { } - /// - parameter txhash: Transaction hash - /// - returns: transaction receipt for particular transaction hash. Receipt indicate what has happened when the transaction + /// - Parameter txhash: Transaction hash + /// - Returns: Transaction receipt for particular transaction hash. Receipt indicate what has happened when the transaction /// was included in block, so it contains logs and status, such as succesful or failed transaction. - /// - important: This function is synchronous! + /// - Important: This function is synchronous! public func getTransactionReceiptPromise(_ txhash: Data) -> Promise { - let hashString = txhash.toHexString().withHex + let hashString = txhash.hex.withHex return getTransactionReceiptPromise(hashString) } - /// - parameter txhash: Transaction hash - /// - returns: transaction receipt for particular transaction hash. Receipt indicate what has happened when the transaction + /// - Parameter txhash: Transaction hash + /// - Returns: Transaction receipt for particular transaction hash. Receipt indicate what has happened when the transaction /// was included in block, so it contains logs and status, such as succesful or failed transaction. - /// - important: This function is synchronous! + /// - Important: This function is synchronous! public func getTransactionReceiptPromise(_ txhash: String) -> Promise { let request = JsonRpcRequest(method: .getTransactionReceipt, parameters: txhash) let rp = web3.dispatch(request) @@ -410,12 +411,12 @@ public class Web3Eth: Web3OptionsInheritable { /// how much gas it consumes for computations. Setting the transaction gas limit lower than the estimate will most likely /// result in a failing transaction. /// - /// - parameter onBlock: field determines if value is returned based on the state of a blockchain on the latest mined block ("latest") + /// - Parameter onBlock: Field determines if value is returned based on the state of a blockchain on the latest mined block ("latest") /// or the expected state after all the transactions in memory pool are applied ("pending"). /// - /// - important: This function is synchronous! - /// - returns: Maximum amount of gas that would be used in the transaction - /// - throws: Error can also indicate that transaction is invalid in the current state, so formally it's gas limit is infinite. + /// - Important: This function is synchronous! + /// - Returns: Maximum amount of gas that would be used in the transaction + /// - Throws: Error can also indicate that transaction is invalid in the current state, so formally it's gas limit is infinite. /// An example of such transaction can be sending an amount of ETH that is larger than the current account balance. func estimateGasPromise(_ transaction: EthereumTransaction, options: Web3Options? = nil, onBlock: String = "latest") -> Promise { let queue = web3.requestDispatcher.queue @@ -446,9 +447,9 @@ public class Web3Eth: Web3OptionsInheritable { /// this call fill do a virtual join and fetch not just transaction hashes from this block, /// but full decoded EthereumTransaction objects. /// - /// - important: This function is synchronous! + /// - Important: This function is synchronous! /// - /// - returns: Found Block + /// - Returns: Found Block public func getBlockByNumberPromise(_ number: UInt64, fullTransactions: Bool = false) -> Promise { let block = String(number, radix: 16).withHex return getBlockByNumberPromise(block, fullTransactions: fullTransactions) @@ -458,9 +459,9 @@ public class Web3Eth: Web3OptionsInheritable { /// this call fill do a virtual join and fetch not just transaction hashes from this block, /// but full decoded EthereumTransaction objects. /// - /// - important: This function is synchronous! + /// - Important: This function is synchronous! /// - /// - returns: Found Block + /// - Returns: Found Block public func getBlockByNumberPromise(_ number: BigUInt, fullTransactions: Bool = false) -> Promise { let block = String(number, radix: 16).withHex return getBlockByNumberPromise(block, fullTransactions: fullTransactions) @@ -470,9 +471,9 @@ public class Web3Eth: Web3OptionsInheritable { /// this call fill do a virtual join and fetch not just transaction hashes from this block, /// but full decoded EthereumTransaction objects. /// - /// - important: This function is synchronous! + /// - Important: This function is synchronous! /// - /// - returns: Found Block + /// - Returns: Found Block public func getBlockByNumberPromise(_ number: String, fullTransactions: Bool = false) -> Promise { let request = JsonRpcRequest(method: .getBlockByNumber, parameters: number, fullTransactions) let rp = web3.dispatch(request) @@ -489,9 +490,9 @@ public class Web3Eth: Web3OptionsInheritable { } /// Send raw Ethereum transaction data to the network. - /// - parameter transaction: Transaction to send - /// - important: This function is synchronous! - /// - returns: TransactionSendingResult with transaction and its hash + /// - Parameter transaction: Transaction to send + /// - Important: This function is synchronous! + /// - Returns: TransactionSendingResult with transaction and its hash func sendRawTransactionPromise(_ transaction: Data) -> Promise { guard let deserializedTX = EthereumTransaction.fromRaw(transaction) else { let promise = Promise.pending() @@ -502,9 +503,9 @@ public class Web3Eth: Web3OptionsInheritable { } /// Send raw Ethereum transaction data to the network. - /// - parameter transaction: Transaction to send - /// - important: This function is synchronous! - /// - returns: TransactionSendingResult with transaction and its hash + /// - Parameter transaction: Transaction to send + /// - Important: This function is synchronous! + /// - Returns: TransactionSendingResult with transaction and its hash func sendRawTransactionPromise(_ transaction: EthereumTransaction) -> Promise { // print(transaction) let queue = web3.requestDispatcher.queue @@ -532,21 +533,21 @@ public class Web3Eth: Web3OptionsInheritable { } } - /// - parameter address: transaction sender address - /// - parameter onBlock: field determines if value is returned based on the state of a blockchain on the latest mined block ("latest") + /// - Parameter address: Transaction sender address + /// - Parameter onBlock: Field determines if value is returned based on the state of a blockchain on the latest mined block ("latest") /// or the expected state after all the transactions in memory pool are applied ("pending"). - /// - returns: a total number of transactions sent by the particular Ethereum address. - /// - important: This function is synchronous! + /// - Returns: A total number of transactions sent by the particular Ethereum address. + /// - Important: This function is synchronous! public func getTransactionCountPromise(address: Address, onBlock: String = "latest") -> Promise { let addr = address.address return getTransactionCountPromise(address: addr, onBlock: onBlock) } - /// - parameter address: transaction sender address - /// - parameter onBlock: field determines if value is returned based on the state of a blockchain on the latest mined block ("latest") + /// - Parameter address: Transaction sender address + /// - Parameter onBlock: Field determines if value is returned based on the state of a blockchain on the latest mined block ("latest") /// or the expected state after all the transactions in memory pool are applied ("pending"). - /// - returns: a total number of transactions sent by the particular Ethereum address. - /// - important: This function is synchronous! + /// - Returns: A total number of transactions sent by the particular Ethereum address. + /// - Important: This function is synchronous! public func getTransactionCountPromise(address: String, onBlock: String = "latest") -> Promise { let request = JsonRpcRequest(method: .getTransactionCount, parameters: address.lowercased(), onBlock) let rp = web3.dispatch(request) @@ -564,8 +565,8 @@ public class Web3Eth: Web3OptionsInheritable { /// Get a list of Ethereum accounts that a node knows about. /// If one has attached a Keystore Manager to the web3 object it returns accounts known to the keystore. - /// - important: This function is synchronous! - /// - returns: Array of addresses in the node + /// - Important: This function is synchronous! + /// - Returns: Array of addresses in the node public func getAccountsPromise() -> Promise<[Address]> { let queue = web3.requestDispatcher.queue if !web3.provider.attachedKeystoreManager.isEmpty { @@ -591,13 +592,13 @@ public class Web3Eth: Web3OptionsInheritable { /// Performs a non-mutating "call" to some smart-contract. EthereumTransaction bears all function parameters required for the call. /// Does NOT decode the data returned from the smart-contract. - /// - parameter transaction: Transaction to send - /// - parameter options: object can override the "to", "gasPrice", "gasLimit" and "value" parameters is pre-formed transaction. + /// - Parameter transaction: Transaction to send + /// - Parameter options: Object can override the "to", "gasPrice", "gasLimit" and "value" parameters is pre-formed transaction. /// "from" field in "options" is mandatory for both local and remote signing. - /// - parameter onBlock: field determines if value is returned based on the state of a blockchain on the latest mined block ("latest") + /// - Parameter onBlock: Field determines if value is returned based on the state of a blockchain on the latest mined block ("latest") /// or the expected state after all the transactions in memory pool are applied ("pending"). - /// - important: This function is synchronous! - /// - returns: smart contract response + /// - Important: This function is synchronous! + /// - Returns: Smart contract response func callPromise(_ transaction: EthereumTransaction, options: Web3Options, onBlock: String = "latest") -> Promise { let queue = web3.requestDispatcher.queue do { diff --git a/Example/Pods/web3swift/Sources/Web3/Web3+EventParser.swift b/Example/Pods/web3swift/Sources/Web3/Web3+EventParser.swift index e3d82381..a491ce9f 100644 --- a/Example/Pods/web3swift/Sources/Web3/Web3+EventParser.swift +++ b/Example/Pods/web3swift/Sources/Web3/Web3+EventParser.swift @@ -31,9 +31,9 @@ extension Web3Contract { /** Parses the transaction for events matching the EventParser settings. - - parameter transaction: web3swift native EthereumTransaction object - - returns: array of events - - important: This call is synchronous + - Parameter transaction: web3swift native EthereumTransaction object + - Returns: Array of events + - Important: This call is synchronous */ public func parseTransaction(_ transaction: EthereumTransaction) throws -> [EventParserResult] { return try parseTransactionPromise(transaction).wait() @@ -41,9 +41,9 @@ extension Web3Contract { /** Parses the transaction for events matching the EventParser settings. - - parameter hash: Transaction hash - - returns: array of events - - important: This call is synchronous + - Parameter hash: Transaction hash + - Returns: Array of events + - Important: This call is synchronous */ public func parseTransactionByHash(_ hash: Data) throws -> [EventParserResult] { return try parseTransactionByHashPromise(hash).wait() @@ -51,9 +51,9 @@ extension Web3Contract { /** Parses the block for events matching the EventParser settings. - - parameter blockNumber: Ethereum network block number - - returns: array of events - - important: This call is synchronous + - Parameter blockNumber: Ethereum network block number + - Returns: Array of events + - Important: This call is synchronous */ public func parseBlockByNumber(_ blockNumber: UInt64) throws -> [EventParserResult] { return try parseBlockByNumberPromise(blockNumber).wait() @@ -61,9 +61,9 @@ extension Web3Contract { /** Parses the block for events matching the EventParser settings. - - parameter block: Native web3swift block object - - returns: array of events - - important: This call is synchronous + - Parameter block: Native web3swift block object + - Returns: array of events + - Important: This call is synchronous */ public func parseBlock(_ block: Block) throws -> [EventParserResult] { return try parseBlockPromise(block).wait() @@ -74,9 +74,9 @@ extension Web3Contract { extension Web3Contract.EventParser { /** Parses the transaction for events matching the EventParser settings. - - parameter transaction: web3swift native EthereumTransaction object - - returns: promise that returns array of events - - important: This call is synchronous + - Parameter transaction: web3swift native EthereumTransaction object + - Returns: Promise that returns array of events + - Important: This call is synchronous */ public func parseTransactionPromise(_ transaction: EthereumTransaction) -> Promise<[EventParserResult]> { let queue = web3.requestDispatcher.queue @@ -95,9 +95,9 @@ extension Web3Contract.EventParser { /** Parses the transaction for events matching the EventParser settings. - - parameter hash: Transaction hash - - returns: promise that returns array of events - - important: This call is synchronous + - Parameter hash: Transaction hash + - Returns: Promise that returns array of events + - Important: This call is synchronous */ public func parseTransactionByHashPromise(_ hash: Data) -> Promise<[EventParserResult]> { let queue = web3.requestDispatcher.queue @@ -111,9 +111,9 @@ extension Web3Contract.EventParser { /** Parses the block for events matching the EventParser settings. - - parameter blockNumber: Ethereum network block number - - returns: promise that returns array of events - - important: This call is synchronous + - Parameter blockNumber: Ethereum network block number + - Returns: Promise that returns array of events + - Important: This call is synchronous */ public func parseBlockByNumberPromise(_ blockNumber: UInt64) -> Promise<[EventParserResult]> { let queue = web3.requestDispatcher.queue @@ -135,9 +135,9 @@ extension Web3Contract.EventParser { /** Parses the block for events matching the EventParser settings. - - parameter block: Native web3swift block object - - returns: promise that returns array of events - - important: This call is synchronous + - Parameter block: Native web3swift block object + - Returns: Promise that returns array of events + - Important: This call is synchronous */ public func parseBlockPromise(_ block: Block) -> Promise<[EventParserResult]> { let queue = web3.requestDispatcher.queue @@ -211,11 +211,11 @@ extension Web3Contract.EventParser { extension Web3Contract { /** Fetches events by doing a lookup on "indexed" parameters of the event. Smart-contract developer can make some of event values "indexed" for such fast queries. - - parameter eventName: Event name, should be present in ABI interface of the contract - - parameter filter: EventFilter object setting the block limits for query - - parameter joinWithReceipts: Bool indicating whether TransactionReceipt should be fetched separately for every matched transaction - - returns: array of events - - important: This call is synchronous + - Parameter eventName: Event name, should be present in ABI interface of the contract + - Parameter filter: EventFilter object setting the block limits for query + - Parameter joinWithReceipts: Bool indicating whether TransactionReceipt should be fetched separately for every matched transaction + - Returns: Array of events + - Important: This call is synchronous */ public func getIndexedEvents(eventName: String?, filter: EventFilter, joinWithReceipts: Bool = false) throws -> [EventParserResult] { return try getIndexedEventsPromise(eventName: eventName, filter: filter, joinWithReceipts: joinWithReceipts).wait() @@ -223,11 +223,11 @@ extension Web3Contract { /** Fetches events by doing a lookup on "indexed" parameters of the event. Smart-contract developer can make some of event values "indexed" for such fast queries. - - parameter eventName: Event name, should be present in ABI interface of the contract - - parameter filter: EventFilter object setting the block limits for query - - parameter joinWithReceipts: Bool indicating whether TransactionReceipt should be fetched separately for every matched transaction - - returns: promise that returns array of events - - important: This call is synchronous + - Parameter eventName: Event name, should be present in ABI interface of the contract + - Parameter filter: EventFilter object setting the block limits for query + - Parameter joinWithReceipts: Bool indicating whether TransactionReceipt should be fetched separately for every matched transaction + - Returns: Promise that returns array of events + - Important: This call is synchronous */ public func getIndexedEventsPromise(eventName: String?, filter: EventFilter, joinWithReceipts: Bool = false) -> Promise<[EventParserResult]> { let queue = web3.requestDispatcher.queue diff --git a/Example/Pods/web3swift/Sources/Web3/Web3+Infura.swift b/Example/Pods/web3swift/Sources/Web3/Web3+Infura.swift index 1e5baed1..f75d745b 100644 --- a/Example/Pods/web3swift/Sources/Web3/Web3+Infura.swift +++ b/Example/Pods/web3swift/Sources/Web3/Web3+Infura.swift @@ -15,9 +15,9 @@ import Foundation */ public final class InfuraProvider: Web3HttpProvider { /** - - parameter net: defines network id. applies to address "https://\(net).infura.io/" - - parameter token: your infura token. appends to url address - - parameter manager: KeystoreManager for this provider + - Parameter net: Defines network id. applies to address "https://\(net).infura.io/" + - Parameter token: Your infura token. appends to url address + - Parameter manager: KeystoreManager for this provider */ public init?(_ net: NetworkId, accessToken token: String? = nil, keystoreManager manager: KeystoreManager = KeystoreManager()) { var requestURLstring = "https://\(net).infura.io/" diff --git a/Example/Pods/web3swift/Sources/Web3/Web3+JSONRPC.swift b/Example/Pods/web3swift/Sources/Web3/Web3+JSONRPC.swift index 0e019953..4dbb0b02 100644 --- a/Example/Pods/web3swift/Sources/Web3/Web3+JSONRPC.swift +++ b/Example/Pods/web3swift/Sources/Web3/Web3+JSONRPC.swift @@ -48,6 +48,7 @@ public struct JsonRpcRequest: Encodable { self.method = method self.params = JsonRpcParams(params: parameters) } + /// init with api method and parameters public init(method: JsonRpcMethod, parametersArray: [Encodable]) { self.method = method self.params = JsonRpcParams(params: parametersArray) @@ -108,8 +109,8 @@ public struct JsonRpcResponse: Decodable { /// JsonRpc optional error message public var message: String? - /// - returns: .result as DictionaryReader or throw .error - /// - throws: Web3Error.nodeError(error.message), Web3Error.nodeError("No response found") + /// - Returns: .result as DictionaryReader or throw .error + /// - Throws: Web3Error.nodeError(error.message), Web3Error.nodeError("No response found") public func response() throws -> DictionaryReader { if let error = error { throw Web3Error.nodeError(error.message) diff --git a/Example/Pods/web3swift/Sources/Web3/Web3+Options.swift b/Example/Pods/web3swift/Sources/Web3/Web3+Options.swift index 0c871b83..f4eb3696 100644 --- a/Example/Pods/web3swift/Sources/Web3/Web3+Options.swift +++ b/Example/Pods/web3swift/Sources/Web3/Web3+Options.swift @@ -9,7 +9,9 @@ import BigInt import Foundation +/// Protocol of classes that contains options parameter public protocol Web3OptionsInheritable { + /// Default options var options: Web3Options { get } } diff --git a/Example/Pods/web3swift/Sources/Web3/Web3+Personal.swift b/Example/Pods/web3swift/Sources/Web3/Web3+Personal.swift index f1e1707d..11f9c86c 100644 --- a/Example/Pods/web3swift/Sources/Web3/Web3+Personal.swift +++ b/Example/Pods/web3swift/Sources/Web3/Web3+Personal.swift @@ -15,6 +15,7 @@ public class Web3Personal: Web3OptionsInheritable { /// provider for some functions var provider: Web3Provider unowned var web3: Web3 + /// Default options public var options: Web3Options { return web3.options } @@ -28,11 +29,11 @@ public class Web3Personal: Web3OptionsInheritable { /** *Locally or remotely sign a message (arbitrary data) with the private key. To avoid potential signing of a transaction the message is first prepended by a special header and then hashed.* - - parameter message: Message Data - - parameter from: Use a private key that corresponds to this account - - parameter password: Password for account if signing locally - - returns: signed message data - - important: This call is synchronous + - Parameter message: Message Data + - Parameter from: Use a private key that corresponds to this account + - Parameter password: Password for account if signing locally + - Returns: signed message data + - Important: This call is synchronous */ public func signPersonalMessage(message: Data, from: Address, password: String = "BANKEXFOUNDATION") throws -> Data { @@ -42,11 +43,11 @@ public class Web3Personal: Web3OptionsInheritable { /** *Unlock an account on the remote node to be able to send transactions and sign messages.* - - parameter account: Address of the account to unlock - - parameter password: Password to use for the account - - parameter seconds: Time inteval before automatic account lock by Ethereum node - - returns: isUnlocked - - important: This call is synchronous. Does nothing if private keys are stored locally. + - Parameter account: Address of the account to unlock + - Parameter password: Password to use for the account + - Parameter seconds: Time inteval before automatic account lock by Ethereum node + - Returns: isUnlocked + - Important: This call is synchronous. Does nothing if private keys are stored locally. */ public func unlockAccount(account: Address, password _: String = "BANKEXFOUNDATION", seconds _: UInt64 = 300) throws -> Bool { @@ -56,9 +57,9 @@ public class Web3Personal: Web3OptionsInheritable { /** *Recovers a signer of some message. Message is first prepended by special prefix (check the "signPersonalMessage" method description) and then hashed.* - - parameter personalMessage: Message Data - - parameter signature: Serialized signature, 65 bytes - - returns: signer address + - Parameter personalMessage: Message Data + - Parameter signature: Serialized signature, 65 bytes + - Returns: signer address */ public func ecrecover(personalMessage: Data, signature: Data) throws -> Address { @@ -68,9 +69,9 @@ public class Web3Personal: Web3OptionsInheritable { /** *Recovers a signer of some hash. Checking what is under this hash is on behalf of the user.* - - parameter hash: Signed hash - - parameter signature: Serialized signature, 65 bytes - - returns: signer address + - Parameter hash: Signed hash + - Parameter signature: Serialized signature, 65 bytes + - Returns: signer address */ public func ecrecover(hash: Data, signature: Data) throws -> Address { @@ -81,7 +82,7 @@ public class Web3Personal: Web3OptionsInheritable { let queue = web3.requestDispatcher.queue do { if web3.provider.attachedKeystoreManager.isEmpty { - let hexData = message.toHexString().withHex + let hexData = message.hex.withHex let request = JsonRpcRequest(method: .personalSign, parameters: from.address.lowercased(), hexData) return web3.dispatch(request).map(on: queue) { response in guard let value: Data = response.getValue() else { diff --git a/Example/Pods/web3swift/Sources/Web3/Web3+Protocols.swift b/Example/Pods/web3swift/Sources/Web3/Web3+Protocols.swift index ee3f84ac..b79dcbe5 100644 --- a/Example/Pods/web3swift/Sources/Web3/Web3+Protocols.swift +++ b/Example/Pods/web3swift/Sources/Web3/Web3+Protocols.swift @@ -14,65 +14,65 @@ import class PromiseKit.Promise public protocol EventParserProtocol { /** Parses the transaction for events matching the EventParser settings. - - parameter transaction: web3swift native EthereumTransaction object - - returns: array of events - - important: This call is synchronous + - Parameter transaction: web3swift native EthereumTransaction object + - Returns: array of events + - Important: This call is synchronous */ func parseTransaction(_ transaction: EthereumTransaction) throws -> [EventParserResult] /** Parses the transaction for events matching the EventParser settings. - - parameter hash: Transaction hash - - returns: array of events - - important: This call is synchronous + - Parameter hash: Transaction hash + - Returns: array of events + - Important: This call is synchronous */ func parseTransactionByHash(_ hash: Data) throws -> [EventParserResult] /** Parses the block for events matching the EventParser settings. - - parameter block: Native web3swift block object - - returns: array of events - - important: This call is synchronous + - Parameter block: Native web3swift block object + - Returns: array of events + - Important: This call is synchronous */ func parseBlock(_ block: Block) throws -> [EventParserResult] /** Parses the block for events matching the EventParser settings. - - parameter blockNumber: Ethereum network block number - - returns: array of events - - important: This call is synchronous + - Parameter blockNumber: Ethereum network block number + - Returns: array of events + - Important: This call is synchronous */ func parseBlockByNumber(_ blockNumber: UInt64) throws -> [EventParserResult] /** Parses the transaction for events matching the EventParser settings. - - parameter transaction: web3swift native EthereumTransaction object - - returns: promise that returns array of events - - important: This call is synchronous + - Parameter transaction: web3swift native EthereumTransaction object + - Returns: promise that returns array of events + - Important: This call is synchronous */ func parseTransactionPromise(_ transaction: EthereumTransaction) -> Promise<[EventParserResult]> /** Parses the transaction for events matching the EventParser settings. - - parameter hash: Transaction hash - - returns: promise that returns array of events - - important: This call is synchronous + - Parameter hash: Transaction hash + - Returns: promise that returns array of events + - Important: This call is synchronous */ func parseTransactionByHashPromise(_ hash: Data) -> Promise<[EventParserResult]> /** Parses the block for events matching the EventParser settings. - - parameter blockNumber: Ethereum network block number - - returns: promise that returns array of events - - important: This call is synchronous + - Parameter blockNumber: Ethereum network block number + - Returns: promise that returns array of events + - Important: This call is synchronous */ func parseBlockByNumberPromise(_ blockNumber: UInt64) -> Promise<[EventParserResult]> /** Parses the block for events matching the EventParser settings. - - parameter block: Native web3swift block object - - returns: promise that returns array of events - - important: This call is synchronous + - Parameter block: Native web3swift block object + - Returns: promise that returns array of events + - Important: This call is synchronous */ func parseBlockPromise(_ block: Block) -> Promise<[EventParserResult]> diff --git a/Example/Pods/web3swift/Sources/Web3/Web3+Structures.swift b/Example/Pods/web3swift/Sources/Web3/Web3+Structures.swift index 2abc3983..00806231 100644 --- a/Example/Pods/web3swift/Sources/Web3/Web3+Structures.swift +++ b/Example/Pods/web3swift/Sources/Web3/Web3+Structures.swift @@ -146,7 +146,7 @@ extension EthereumTransaction: Decodable { } } -/* +/** # TransactionDetails Used as result of Web3.default.eth.getTransactionDetails */ @@ -202,7 +202,7 @@ public struct TransactionDetails: Decodable { } } -/* +/** # Transaciton Receipt Used in Web3.default.eth.getTransactionReceipt() and in contract events @@ -448,11 +448,13 @@ public struct EventLog: Decodable { public enum TransactionInBlockError: Error { /// cannot parse (data: Any) to transaction hash or dictionary case corrupted + /// Printable / user displayable description public var localizedDescription: String { return "init(data:) failed beacause: Data corrupted" } } +/// Transaction in block public enum TransactionInBlock: Decodable { /// Transaction with hash case hash(Data) @@ -482,7 +484,7 @@ public enum TransactionInBlock: Decodable { } /// init with any object - /// - parameter data: Should be in hex or dictionary format + /// - Parameter data: Should be in hex or dictionary format public init(_ data: Any) throws { if let string = data as? String { guard let d = Data.fromHex(string) else { throw TransactionInBlockError.corrupted } @@ -653,7 +655,7 @@ public struct EventParserResult { /// Event log public var eventLog: EventLog? - //// Standart init with all parameters + /// standard init with all parameters public init(eventName: String, transactionReceipt: TransactionReceipt?, contractAddress: Address, decodedResult: [String: Any]) { self.eventName = eventName self.transactionReceipt = transactionReceipt diff --git a/Example/Pods/web3swift/Sources/Web3/Web3+TransactionIntermediate.swift b/Example/Pods/web3swift/Sources/Web3/Web3+TransactionIntermediate.swift index 344a785f..6edbbea8 100644 --- a/Example/Pods/web3swift/Sources/Web3/Web3+TransactionIntermediate.swift +++ b/Example/Pods/web3swift/Sources/Web3/Web3+TransactionIntermediate.swift @@ -16,6 +16,7 @@ public enum Web3ResponseError: Error { case notFound(Int, Int) /// Error for unconvertible type case wrongType(Any, String, Int) + /// Printable / user displayable description public var localizedDescription: String { switch self { case let .notFound(index, responseSize): @@ -48,12 +49,12 @@ public class Web3Response { argumentsCount = i } - /// - returns: dictionary[key] + /// - Returns: dictionary[key] public subscript(key: String) -> Any? { return dictionary[key] } - /// - returns: dictionary["\(index)"] + /// - Returns: dictionary["\(index)"] public subscript(index: Int) -> Any? { return dictionary["\(index)"] } @@ -70,8 +71,8 @@ public class Web3Response { return String(p) } - /// - returns: next response argument as BigUInt (like self[n] as? BigUInt; n += 1) - /// - throws: Web3ResponseError.notFound if there is no value at self[n]. + /// - Returns: next response argument as BigUInt (like self[n] as? BigUInt; n += 1) + /// - Throws: Web3ResponseError.notFound if there is no value at self[n]. /// Web3ResponseError.wrongType if it cannot cast self[n] to BigUInt public func uint256() throws -> BigUInt { let value = try next() @@ -85,8 +86,8 @@ public class Web3Response { } } - /// - returns: next response argument as Address (like self[n] as? Address; n += 1) - /// - throws: Web3ResponseError.notFound if there is no value at self[n]. + /// - Returns: next response argument as Address (like self[n] as? Address; n += 1) + /// - Throws: Web3ResponseError.notFound if there is no value at self[n]. /// Web3ResponseError.wrongType if it cannot cast self[n] to Address public func address() throws -> Address { let value = try next() @@ -94,8 +95,8 @@ public class Web3Response { return address } - /// - returns: next response argument as String (like self[n] as? String; n += 1) - /// - throws: Web3ResponseError.notFound if there is no value at self[n]. + /// - Returns: next response argument as String (like self[n] as? String; n += 1) + /// - Throws: Web3ResponseError.notFound if there is no value at self[n]. /// Web3ResponseError.wrongType if it cannot cast self[n] to String public func string() throws -> String { let value = try next() @@ -103,8 +104,8 @@ public class Web3Response { return string } - /// - returns: next value in response array - /// - throws: Web3ResponseError.notFound + /// - Returns: next value in response array + /// - Throws: Web3ResponseError.notFound public func next() throws -> Any { guard let value = dictionary[nextIndex] else { throw notFound } return value @@ -140,12 +141,12 @@ public class TransactionIntermediate { /** *Send a prepared transaction to the blockchain. Internally checks the nonce for a sending account, assigns it, get a gas estimate and signs a transaction either locally or on the remote node.* - - parameter password: Password for a private key if transaction is signed locally - - parameter options: Web3Options to override the previously assigned gas price, gas limit and value. - - parameter onBlock: String field determines if nonce value and the gas estimate are based on the state of a blockchain on the latest mined block ("latest") or the expected state after all the transactions in memory pool are applied ("pending"). Using "pending" allows to send transactions one after another without waiting for inclusion of the previous one in some block. + - Parameter password: Password for a private key if transaction is signed locally + - Parameter options: Web3Options to override the previously assigned gas price, gas limit and value. + - Parameter onBlock: String field determines if nonce value and the gas estimate are based on the state of a blockchain on the latest mined block ("latest") or the expected state after all the transactions in memory pool are applied ("pending"). Using "pending" allows to send transactions one after another without waiting for inclusion of the previous one in some block. - - returns: TransactionSendingResult - - important: This call is synchronous + - Returns: TransactionSendingResult + - Important: This call is synchronous */ @discardableResult public func send(password: String = "BANKEXFOUNDATION", options: Web3Options? = nil, onBlock: String = "pending") throws -> TransactionSendingResult { @@ -155,11 +156,11 @@ public class TransactionIntermediate { /** *Calls a function of the smart-contract and parses the returned data to native objects.* - - parameter options: Web3Options to override the previously assigned gas price, gas limit and value. - - parameter onBlock: String field determines if nonce value and the gas estimate are based on the state of a blockchain on the latest mined block ("latest") or the expected state after all the transactions in memory pool are applied ("pending"). Using "pending" allows to send transactions one after another without waiting for inclusion of the previous one in some block. + - Parameter options: Web3Options to override the previously assigned gas price, gas limit and value. + - Parameter onBlock: String field determines if nonce value and the gas estimate are based on the state of a blockchain on the latest mined block ("latest") or the expected state after all the transactions in memory pool are applied ("pending"). Using "pending" allows to send transactions one after another without waiting for inclusion of the previous one in some block. - - returns: Web3Response from node - - important: This call is synchronous + - Returns: Web3Response from node + - Important: This call is synchronous */ @@ -171,11 +172,11 @@ public class TransactionIntermediate { /** *Estimates gas required to execute the transaction. Setting a gas limit lower than the estimate will most likely result in a failed transaction. If this call returns an error it can also indicate that transaction is invalid as itself.* - - parameter options: Web3Options to override the previously assigned gas price, gas limit and value. - - parameter onBlock: String field determines if nonce value and the gas estimate are based on the state of a blockchain on the latest mined block ("latest") or the expected state after all the transactions in memory pool are applied ("pending"). Using "pending" allows to send transactions one after another without waiting for inclusion of the previous one in some block. + - Parameter options: Web3Options to override the previously assigned gas price, gas limit and value. + - Parameter onBlock: String field determines if nonce value and the gas estimate are based on the state of a blockchain on the latest mined block ("latest") or the expected state after all the transactions in memory pool are applied ("pending"). Using "pending" allows to send transactions one after another without waiting for inclusion of the previous one in some block. - - returns: gas price - - important: This call is synchronous + - Returns: gas price + - Important: This call is synchronous */ public func estimateGas(options: Web3Options?, onBlock: String = "latest") throws -> BigUInt { @@ -185,11 +186,11 @@ public class TransactionIntermediate { /** *Assembles (but does not sign!) a transaction by fetching the nonce value and applying provided options.* - - parameter options: Web3Options to override the previously assigned gas price, gas limit and value. - - parameter onBlock: String field determines if nonce value and the gas estimate are based on the state of a blockchain on the latest mined block ("latest") or the expected state after all the transactions in memory pool are applied ("pending"). Using "pending" allows to send transactions one after another without waiting for inclusion of the previous one in some block. + - Parameter options: Web3Options to override the previously assigned gas price, gas limit and value. + - Parameter onBlock: String field determines if nonce value and the gas estimate are based on the state of a blockchain on the latest mined block ("latest") or the expected state after all the transactions in memory pool are applied ("pending"). Using "pending" allows to send transactions one after another without waiting for inclusion of the previous one in some block. - - returns: transaction - - important: This call is synchronous + - Returns: transaction + - Important: This call is synchronous */ public func assemble(options: Web3Options? = nil, onBlock: String = "pending") throws -> EthereumTransaction { @@ -199,10 +200,10 @@ public class TransactionIntermediate { /** *Assembles (but does not sign!) a transaction by fetching the nonce value and applying provided options.* - - parameter options: Web3Options to override the previously assigned gas price, gas limit and value. - - parameter onBlock: String field determines if nonce value and the gas estimate are based on the state of a blockchain on the latest mined block ("latest") or the expected state after all the transactions in memory pool are applied ("pending"). Using "pending" allows to send transactions one after another without waiting for inclusion of the previous one in some block. + - Parameter options: Web3Options to override the previously assigned gas price, gas limit and value. + - Parameter onBlock: String field determines if nonce value and the gas estimate are based on the state of a blockchain on the latest mined block ("latest") or the expected state after all the transactions in memory pool are applied ("pending"). Using "pending" allows to send transactions one after another without waiting for inclusion of the previous one in some block. - - returns: Promise for ethereum transaction + - Returns: Promise for ethereum transaction */ public func assemblePromise(options: Web3Options? = nil, onBlock: String = "pending") -> Promise { var assembledTransaction: EthereumTransaction = transaction @@ -258,11 +259,11 @@ public class TransactionIntermediate { /** *Send a prepared transaction to the blockchain. Internally checks the nonce for a sending account, assigns it, get a gas estimate and signs a transaction either locally or on the remote node.* - - parameter password: Password for a private key if transaction is signed locally - - parameter options: Web3Options to override the previously assigned gas price, gas limit and value. - - parameter onBlock: String field determines if nonce value and the gas estimate are based on the state of a blockchain on the latest mined block ("latest") or the expected state after all the transactions in memory pool are applied ("pending"). Using "pending" allows to send transactions one after another without waiting for inclusion of the previous one in some block. + - Parameter password: Password for a private key if transaction is signed locally + - Parameter options: Web3Options to override the previously assigned gas price, gas limit and value. + - Parameter onBlock: String field determines if nonce value and the gas estimate are based on the state of a blockchain on the latest mined block ("latest") or the expected state after all the transactions in memory pool are applied ("pending"). Using "pending" allows to send transactions one after another without waiting for inclusion of the previous one in some block. - - returns: Promise for TransactionResult which contains transaction hash and other info + - Returns: Promise for TransactionResult which contains transaction hash and other info */ public func sendPromise(password: String = "BANKEXFOUNDATION", options: Web3Options? = nil, onBlock: String = "pending") -> Promise { let queue = web3.requestDispatcher.queue @@ -278,10 +279,10 @@ public class TransactionIntermediate { /** *Calls a function of the smart-contract and parses the returned data to native objects.* - - parameter options: Web3Options to override the previously assigned gas price, gas limit and value. - - parameter onBlock: String field determines if nonce value and the gas estimate are based on the state of a blockchain on the latest mined block ("latest") or the expected state after all the transactions in memory pool are applied ("pending"). Using "pending" allows to send transactions one after another without waiting for inclusion of the previous one in some block. + - Parameter options: Web3Options to override the previously assigned gas price, gas limit and value. + - Parameter onBlock: String field determines if nonce value and the gas estimate are based on the state of a blockchain on the latest mined block ("latest") or the expected state after all the transactions in memory pool are applied ("pending"). Using "pending" allows to send transactions one after another without waiting for inclusion of the previous one in some block. - - returns: Promise for Web3Response from node + - Returns: Promise for Web3Response from node */ public func callPromise(options: Web3Options? = nil, onBlock: String = "latest") -> Promise { @@ -297,11 +298,10 @@ public class TransactionIntermediate { callPromise.done(on: queue) { data in do { if self.method == "fallback" { - let resultHex = data.toHexString().withHex + let resultHex = data.hex.withHex let response = Web3Response(["result": resultHex as Any]) seal.fulfill(response) } else { - print(data.toHexString()) guard let decodedData = self.contract.decodeReturnData(self.method, data: data) else { throw Web3Error.processingError("Can not decode returned parameters") } @@ -310,9 +310,7 @@ public class TransactionIntermediate { } catch { seal.reject(error) } - }.catch(on: queue) { err in - seal.reject(err) - } + }.catch(on: queue, seal.reject) } return returnPromise } @@ -320,10 +318,10 @@ public class TransactionIntermediate { /** *Estimates gas required to execute the transaction. Setting a gas limit lower than the estimate will most likely result in a failed transaction. If this call returns an error it can also indicate that transaction is invalid as itself.* - - parameter options: Web3Options to override the previously assigned gas price, gas limit and value. - - parameter onBlock: String field determines if nonce value and the gas estimate are based on the state of a blockchain on the latest mined block ("latest") or the expected state after all the transactions in memory pool are applied ("pending"). Using "pending" allows to send transactions one after another without waiting for inclusion of the previous one in some block. + - Parameter options: Web3Options to override the previously assigned gas price, gas limit and value. + - Parameter onBlock: String field determines if nonce value and the gas estimate are based on the state of a blockchain on the latest mined block ("latest") or the expected state after all the transactions in memory pool are applied ("pending"). Using "pending" allows to send transactions one after another without waiting for inclusion of the previous one in some block. - - returns: Promise for gas price + - Returns: Promise for gas price */ public func estimateGasPromise(options: Web3Options? = nil, onBlock: String = "latest") -> Promise { let assembledTransaction: EthereumTransaction = self.transaction diff --git a/Example/Pods/web3swift/Sources/Web3/Web3+Utils.swift b/Example/Pods/web3swift/Sources/Web3/Web3+Utils.swift index 01571541..ee14e331 100644 --- a/Example/Pods/web3swift/Sources/Web3/Web3+Utils.swift +++ b/Example/Pods/web3swift/Sources/Web3/Web3+Utils.swift @@ -16,13 +16,21 @@ public class Web3Utils { /// Various units used in Ethereum ecosystem public enum Web3Units: Int { + /// 18 decimals case eth = 18 + /// 0 decimals case wei = 0 + /// 3 decimals case kWei = 3 + /// 6 decimals case mWei = 6 + /// 9 decimals case gWei = 9 + /// 12 decimals case microEther = 12 + /// 15 decimals case finney = 15 + /// Returns number of decimals (same as .rawValue) public var decimals: Int { return rawValue } @@ -52,8 +60,11 @@ extension Web3Utils { /// Errors from Web3Utils public enum Web3UtilsError: Error { + /// Cannot convert provided data to ascii string case cannotConvertDataToAscii + /// Invalid signature length: Signature size should be 65 bytes case invalidSignatureLength + /// Printable / user displayable description public var localizedDescription: String { switch self { case .cannotConvertDataToAscii: @@ -66,8 +77,19 @@ public enum Web3UtilsError: Error { /// Errors for function Web3Utils.publicToAddressData public enum PublicKeyToAddressError: Error { + /// Public key should start with 0x04 case shouldStartWith4 + /// Public key must be 64 bytes long case invalidPublicKeySize + /// Printable / user displayable description + public var localizedDescription: String { + switch self { + case .shouldStartWith4: + return "Public key should start with 0x04" + case .invalidPublicKeySize: + return "Public key must be 64 bytes long" + } + } } extension Web3Utils { @@ -91,7 +113,7 @@ extension Web3Utils { stipped = stipped[1 ... 64] } guard stipped.count == 64 else { throw PublicKeyToAddressError.invalidPublicKeySize } - let sha3 = stipped.sha3(.keccak256) + let sha3 = stipped.keccak256() let addressData = sha3[12 ..< 32] return addressData } @@ -103,7 +125,7 @@ extension Web3Utils { /// Returns the Address object. public static func publicToAddress(_ publicKey: Data) throws -> Address { let addressData = try Web3Utils.publicToAddressData(publicKey) - let address = addressData.toHexString().withHex.lowercased() + let address = addressData.hex return Address(address) } @@ -113,7 +135,7 @@ extension Web3Utils { /// Returns a 0x prefixed hex string. public static func publicToAddressString(_ publicKey: Data) throws -> String { let addressData = try Web3Utils.publicToAddressData(publicKey) - let address = addressData.toHexString().withHex.lowercased() + let address = addressData.hex.withHex.lowercased() return address } @@ -137,11 +159,11 @@ extension Web3Utils { data.append(prefixData) data.append(personalMessage) } - return data.sha3(.keccak256) + return data.keccak256() } /// Parse a user-supplied string using the number of decimals for particular Ethereum unit. - /// If input is non-numeric or precision is not sufficient - returns nil. + /// If input is non-numeric or precision is not sufficient - Returns nil. /// Allowed decimal separators are ".", ",". public static func parseToBigUInt(_ amount: String, units: Web3Units = .eth) -> BigUInt? { let unitDecimals = units.decimals @@ -149,7 +171,7 @@ extension Web3Utils { } /// Parse a user-supplied string using the number of decimals. - /// If input is non-numeric or precision is not sufficient - returns nil. + /// If input is non-numeric or precision is not sufficient - Returns nil. /// Allowed decimal separators are ".", ",". public static func parseToBigUInt(_ amount: String, decimals: Int = 18) -> BigUInt? { let separators = CharacterSet(charactersIn: ".,") @@ -204,13 +226,13 @@ extension Web3Utils { /// returns Ethereum variant of sha3 (keccak256) of data. Returns nil is data is empty public static func keccak256(_ data: Data) -> Data? { if data.count == 0 { return nil } - return data.sha3(.keccak256) + return data.keccak256() } /// returns Ethereum variant of sha3 (keccak256) of data. Returns nil is data is empty public static func sha3(_ data: Data) -> Data? { if data.count == 0 { return nil } - return data.sha3(.keccak256) + return data.keccak256() } /// returns sha256 of data. Returns nil is data is empty diff --git a/Example/Pods/web3swift/Sources/Web3/Web3.swift b/Example/Pods/web3swift/Sources/Web3/Web3.swift index 780b32fb..fa84bf47 100644 --- a/Example/Pods/web3swift/Sources/Web3/Web3.swift +++ b/Example/Pods/web3swift/Sources/Web3/Web3.swift @@ -8,37 +8,57 @@ import Foundation +/// Web3 errors public enum Web3Error: Error { + /// Transaction serialization failed case transactionSerializationError + /// Cannot connect to local node case connectionError + /// Cannot decode data case dataError - case walletError + /// Input error: \(string) case inputError(String) + /// Node error: \(string) case nodeError(String) + /// Processing error: \(string) case processingError(String) - case keystoreError(AbstractKeystoreError) - case generalError(Error) - case unknownError + /// Printable / user displayable description + public var localizedDescription: String { + switch self { + case .transactionSerializationError: + return "Transaction serialization failed" + case .connectionError: + return "Cannot connect to local node" + case .dataError: + return "Cannot decode data" + case let .inputError(string): + return "Input error: \(string)" + case let .nodeError(string): + return "Node error: \(string)" + case let .processingError(string): + return "Processing error: \(string)" + } + } } /// An arbitary Web3 object. Is used only to construct provider bound fully functional object by either supplying provider URL /// or using pre-coded Infura nodes public extension Web3 { - /// returns web3 to work with local node at 127.0.0.1 - /// - parameter port: node port, default: 8545 + /// Returns web3 to work with local node at 127.0.0.1 + /// - Parameter port: Node port, default: 8545 public static func local(port: Int = 8545) throws -> Web3 { guard let web3 = Web3(url: URL(string: "http://127.0.0.1:\(port)")!) else { throw Web3Error.connectionError } return web3 } - /// returns web3 infura provider - /// - parameter networkId: blockchain network id. like .mainnet / .ropsten + /// Returns web3 infura provider + /// - Parameter networkId: Blockchain network id. like .mainnet / .ropsten convenience init(infura networkId: NetworkId) { let infura = InfuraProvider(networkId, accessToken: nil)! self.init(provider: infura) } /// returns web3 infura provider - /// - parameter networkId: blockchain network id. like .mainnet / .ropsten - /// - parameter accessToken: your infura access token + /// - Parameter networkId: blockchain network id. like .mainnet / .ropsten + /// - Parameter accessToken: your infura access token convenience init(infura networkId: NetworkId, accessToken: String) { let infura = InfuraProvider(networkId, accessToken: accessToken)! self.init(provider: infura) diff --git a/Example/web3swiftExample/ViewController.swift b/Example/web3swiftExample/ViewController.swift index e8a4cf19..5135952d 100644 --- a/Example/web3swiftExample/ViewController.swift +++ b/Example/web3swiftExample/ViewController.swift @@ -19,13 +19,35 @@ extension Web3 { } class ViewController: UIViewController { - + @IBOutlet weak var imageView: UIImageView! override func viewDidLoad() { super.viewDidLoad() + let queue = OperationQueue() queue.addOperation { - try? self.test() + do { + try self.test() + } catch { + print("error:",error) + } + } + queue.addOperation { + // Generating QR code + + var eip67Data = EIP67Code(address: Address("0x6394b37Cf80A7358b38068f0CA4760ad49983a1B")) + eip67Data.gasLimit = BigUInt(21000) + eip67Data.amount = BigUInt("1000000000000000000") + let encoding = eip67Data.toImage(scale: 10) + let image = UIImage(ciImage: encoding) + + DispatchQueue.main.async { + self.imageView.layer.shouldRasterize = true + self.imageView.layer.magnificationFilter = .nearest + self.imageView.layer.minificationFilter = .nearest + self.imageView.contentMode = .scaleAspectFit + self.imageView.image = image + } } } @@ -76,18 +98,6 @@ class ViewController: UIViewController { let balance = try contract.balance(of: coldWalletAddress) print("BKX token balance = \(balance)") - // Test token transfer on Rinkeby - var eip67Data = EIP67Code(address: Address("0x6394b37Cf80A7358b38068f0CA4760ad49983a1B")) - eip67Data.gasLimit = BigUInt(21000) - eip67Data.amount = BigUInt("1000000000000000000") - // eip67Data.data = - let encoding = eip67Data.toImage(scale: 10.0) - - DispatchQueue.main.async { - self.imageView.image = UIImage(ciImage: encoding) - self.imageView.contentMode = .scaleAspectFit - } - //Send on Rinkeby using normal keystore print("Rinkeby") Web3.default = Web3(infura: .rinkeby) @@ -106,7 +116,7 @@ class ViewController: UIViewController { let txid = sendingResult.hash print("On Rinkeby TXid = " + txid) - //Send ETH on Rinkeby using BIP32 keystore. Should fail due to insufficient balance + // Send ETH on Rinkeby using BIP32 keystore. Should fail due to insufficient balance web3Rinkeby.keystoreManager = bip32keystoreManager options.from = bip32ks?.addresses.first! intermediateSend = try web3Rinkeby.contract(coldWalletABI, at: coldWalletAddress).method(options: options) @@ -137,12 +147,12 @@ class ViewController: UIViewController { let transaction3 = try deployedTestAddress.send("increaseCounter(uint8)", 1, password: "BANKEXFOUNDATION").wait() print(transaction3) } - + override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() // Dispose of any resources that can be recreated. } - - + + } diff --git a/README.md b/README.md index 3a4a8fbc..bfef652f 100644 --- a/README.md +++ b/README.md @@ -42,7 +42,13 @@ - [BIP32](https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki) HD Wallets: Deterministic Wallet - [BIP39](https://github.com/bitcoin/bips/blob/master/bip-0039.mediawiki) (Seed phrases) - [BIP44](https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki) (Key generation prefixes) -- [EIP-155](https://github.com/ethereum/EIPs/blob/master/EIPS/eip-155.md) (Replay attacks protection) *_enforced!_* +- [EIP-20](https://github.com/ethereum/EIPs/blob/master/EIPS/eip-20.md) (A standard interface for tokens - ERC-20) +- [EIP-67](https://github.com/ethereum/EIPs/issues/67) (Standard URI scheme with metadata, value and byte code) +- [EIP-155](https://github.com/ethereum/EIPs/blob/master/EIPS/eip-155.md) (Replay attacks protection) *enforced!* +- [EIP-681](https://github.com/ethereum/EIPs/blob/master/EIPS/eip-681.md) (A standard way of representing various transactions, especially payment requests in Ethers and ERC-20 tokens as URLs) +- [EIP-721](https://github.com/ethereum/EIPs/blob/master/EIPS/eip-721.md) (A standard interface for non-fungible tokens, also known as deeds - ERC-721) +- [EIP-777](https://github.com/ethereum/EIPs/blob/master/EIPS/eip-777.md) (This EIP defines standard interfaces and behaviors for token contracts) +- [EIP-888](https://github.com/ethereum/EIPs/issues/888) (MultiDimensional Token Standard) ## Requirements @@ -77,7 +83,7 @@ Don't forget to set the iOS version in a Podfile, otherwise you get an error if > Hi. We spend a lot of time working on documentation. If you have some questions after reading it just [open an issue](https://github.com/bankex/web3swift/issues) or ask in our [discord channel](https://discord.gg/3ETv2ST). We would be happy to answer you. -Most of the classes are documented and have some examples on how to use it. +Most of the classes are documented and have some examples on how to use it. ### [Read documentation in using Xcode](https://bankex.github.io/web3swift/read-documentation-using-xcode.html) ### [Github Pages](https://bankex.github.io/web3swift) diff --git a/web3swift.podspec b/web3swift.podspec index fa069e3b..a5dfd1bd 100644 --- a/web3swift.podspec +++ b/web3swift.podspec @@ -1,6 +1,6 @@ Pod::Spec.new do |spec| spec.name = 'web3swift' - spec.version = '2.2.0' + spec.version = '2.1.3' spec.ios.deployment_target = "8.0" spec.osx.deployment_target = "10.10" spec.tvos.deployment_target = "9.0" @@ -9,7 +9,7 @@ Pod::Spec.new do |spec| spec.summary = 'Web3 implementation in pure Swift for iOS, macOS, tvOS, watchOS and Linux' spec.homepage = 'https://github.com/bankex/web3swift' spec.author = 'Bankex Foundation' - spec.source = { :git => 'https://github.com/bankex/web3swift.git', :branch => 'develop' } + spec.source = { :git => 'https://github.com/bankex/web3swift.git', :tag => spec.version } spec.source_files = 'Sources/web3swift/**/*.swift' spec.swift_version = '4.2' spec.dependency 'PromiseKit', '~> 6.4'