[
  {
    "path": ".gitignore",
    "content": ".DS_Store\n/.build\n/Packages\n*.xcuserstate\nxcuserdata/\nPods/\n"
  },
  {
    "path": "Docs/Document.md",
    "content": "## Getting Started\n\n#### 0. Don't forget to import it\n\n``` swift\n\nimport EtherWalletKit\n\n```\n\n#### Mainet or Testnet(Rinkeby)\nIf you want to work on the testnet(Rinkeby), use `EtherWalletRinkeby` instead of `EtherWallet`.\n\n#### Create an Ethereum Wallet\n\n```swift\n// Generate a new account with its new password.\ntry? EtherWallet.account.generateAccount(password: \"ABCDEFG\")\n\n// Import an existing account from its private key and set its new password.\ntry? EtherWallet.account.importAccount(privateKey: \"1dcbc1d6e0a4587a3a9095984cf051a1bc6ed975f15380a0ac97f01c0c045062, password: \"ABCDEFG\")\n```\n\nNote: ```password``` will be encrypted and saved to the device and it will be required to access the wallet.\n\n#### Get account information\n```swift\n// Get address of your account\nlet address = EtherWallet.account.address\n\n// Get private key of your account\nlet privateKey = try! EtherWallet.account.privateKey(password: \"ABCDEFG\")\n```\n\n#### Get balance\n\n```swift\n// Get balance of Ether\nEtherWallet.balance.etherBalance { balance in\n    print(balance)\n}\n\n// Get balance of a token\nEtherWallet.balance.tokenBalance(contractAddress: \"0xd26114cd6EE289AccF82350c8d8487fedB8A0C07\") { balance in\n    print(balance)\n}\n```\n\n#### Send\n\n```swift\n// send Ether to an address.\nEtherWallet.transaction.sendEther(to: \"0x7777787C97a35d37Db8E5afb0C92BCfd4F6480bE\", amount: \"1.5\", password: \"ABCDEFG\") { txHash in\n    print(txHash)\n}\n\n// send a token to an address.\nEtherWallet.transaction.sendToken(to: \"0x7777787C97a35d37Db8E5afb0C92BCfd4F6480bE\", contractAddress: \"0xd26114cd6EE289AccF82350c8d8487fedB8A0C07\", amount: \"20\", password: \"ABCDEFG\", decimal: 18) { txHash in\n    print(txHash)\n}\n```\n\nNote: ```password``` should be eqaul to the password of wallet created. Also you can put ```gasPrice``` as an extra parameter to set gas price for the transcation.\n"
  },
  {
    "path": "EtherWalletKit.podspec",
    "content": "#\n# Be sure to run `pod lib lint EtherWalletKit.podspec' to ensure this is a\n# valid spec before submitting.\n#\n# Any lines starting with a # are optional, but their use is encouraged\n# To learn more about a Podspec see https://guides.cocoapods.org/syntax/podspec.html\n#\n\nPod::Spec.new do |s|\n  s.name             = 'EtherWalletKit'\n  s.version          = '0.1.4'\n  s.summary          = 'Ethereum Wallet Toolkit for iOS'\n  s.swift_version    = '4.0'\n\n# This description is used to generate tags and improve search results.\n#   * Think: What does it do? Why did you write it? What is the focus?\n#   * Try to keep it short, snappy and to the point.\n#   * Write the description between the DESC delimiters below.\n#   * Finally, don't worry about the indent, CocoaPods strips it!\n\n  s.description      = <<-DESC\n  Ethereum Wallet Toolkit for iOS - You can implement Ethereum wallet without a server and blockchain knowledge.\n                       DESC\n\n  s.homepage         = 'https://github.com/SteadyAction/EtherWalletKit'\n  # s.screenshots     = 'www.example.com/screenshots_1', 'www.example.com/screenshots_2'\n  s.license          = { :type => 'MIT', :file => 'LICENSE' }\n  s.author           = { 'SteadyAction' => 'steadyaction@gmail.com' }\n  s.source           = { :git => 'https://github.com/SteadyAction/EtherWalletKit.git', :tag => s.version.to_s }\n  # s.social_media_url = 'https://twitter.com/<TWITTER_USERNAME>'\n\n  s.ios.deployment_target = '10.0'\n\n  s.source_files = 'Sources/**/*'\n  \n  # s.resource_bundles = {\n  #   'EtherWalletKit' => ['EtherWalletKit/Assets/*.png']\n  # }\n\n  # s.public_header_files = 'Pod/Classes/**/*.h'\n  # s.frameworks = 'UIKit', 'MapKit'\n  s.dependency 'web3swift', '~> 2.0'\n  s.dependency 'SwiftKeychainWrapper'\nend\n"
  },
  {
    "path": "EtherWalletKit.xcodeproj/EtherWalletKitTests_Info.plist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<plist version=\"1.0\">\n<dict>\n  <key>CFBundleDevelopmentRegion</key>\n  <string>en</string>\n  <key>CFBundleExecutable</key>\n  <string>$(EXECUTABLE_NAME)</string>\n  <key>CFBundleIdentifier</key>\n  <string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>\n  <key>CFBundleInfoDictionaryVersion</key>\n  <string>6.0</string>\n  <key>CFBundleName</key>\n  <string>$(PRODUCT_NAME)</string>\n  <key>CFBundlePackageType</key>\n  <string>BNDL</string>\n  <key>CFBundleShortVersionString</key>\n  <string>1.0</string>\n  <key>CFBundleSignature</key>\n  <string>????</string>\n  <key>CFBundleVersion</key>\n  <string>$(CURRENT_PROJECT_VERSION)</string>\n  <key>NSPrincipalClass</key>\n  <string></string>\n</dict>\n</plist>\n"
  },
  {
    "path": "EtherWalletKit.xcodeproj/EtherWalletKit_Info.plist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<plist version=\"1.0\">\n<dict>\n  <key>CFBundleDevelopmentRegion</key>\n  <string>en</string>\n  <key>CFBundleExecutable</key>\n  <string>$(EXECUTABLE_NAME)</string>\n  <key>CFBundleIdentifier</key>\n  <string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>\n  <key>CFBundleInfoDictionaryVersion</key>\n  <string>6.0</string>\n  <key>CFBundleName</key>\n  <string>$(PRODUCT_NAME)</string>\n  <key>CFBundlePackageType</key>\n  <string>FMWK</string>\n  <key>CFBundleShortVersionString</key>\n  <string>1.0</string>\n  <key>CFBundleSignature</key>\n  <string>????</string>\n  <key>CFBundleVersion</key>\n  <string>$(CURRENT_PROJECT_VERSION)</string>\n  <key>NSPrincipalClass</key>\n  <string></string>\n</dict>\n</plist>\n"
  },
  {
    "path": "EtherWalletKit.xcodeproj/project.pbxproj",
    "content": "// !$*UTF8*$!\n{\n\tarchiveVersion = 1;\n\tclasses = {\n\t};\n\tobjectVersion = 46;\n\tobjects = {\n\n/* Begin PBXAggregateTarget section */\n\t\tEtherWalletKit::EtherWalletKitPackageTests::ProductTarget /* EtherWalletKitPackageTests */ = {\n\t\t\tisa = PBXAggregateTarget;\n\t\t\tbuildConfigurationList = OBJ_31 /* Build configuration list for PBXAggregateTarget \"EtherWalletKitPackageTests\" */;\n\t\t\tbuildPhases = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t\tOBJ_34 /* PBXTargetDependency */,\n\t\t\t);\n\t\t\tname = EtherWalletKitPackageTests;\n\t\t\tproductName = EtherWalletKitPackageTests;\n\t\t};\n/* End PBXAggregateTarget section */\n\n/* Begin PBXBuildFile section */\n\t\t1EDFEC0DB3B02D59F8E546BB /* Pods_EtherWalletKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CF04867D39E0379185470242 /* Pods_EtherWalletKit.framework */; };\n\t\tE4746BA3B4CE720D158512A1 /* Pods_EtherWalletKitTest.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D808C8FA634AFA1C9EA96F19 /* Pods_EtherWalletKitTest.framework */; };\n\t\tE83118B620F3391E00FF3CCC /* EtherWallet+Account.swift in Sources */ = {isa = PBXBuildFile; fileRef = E83118B520F3391E00FF3CCC /* EtherWallet+Account.swift */; };\n\t\tE83118BA20F33BCA00FF3CCC /* EtherWallet+Balance.swift in Sources */ = {isa = PBXBuildFile; fileRef = E83118B920F33BC900FF3CCC /* EtherWallet+Balance.swift */; };\n\t\tE83118C120F4523D00FF3CCC /* EtherWallet+Transaction.swift in Sources */ = {isa = PBXBuildFile; fileRef = E83118C020F4523A00FF3CCC /* EtherWallet+Transaction.swift */; };\n\t\tE83C24A120E399B0005645EF /* EtherWallet.swift in Sources */ = {isa = PBXBuildFile; fileRef = E83C24A020E399B0005645EF /* EtherWallet.swift */; };\n\t\tE83C24AB20E39BE6005645EF /* EtherscanAPIResponse.swift in Sources */ = {isa = PBXBuildFile; fileRef = E83C24AA20E39BE6005645EF /* EtherscanAPIResponse.swift */; };\n\t\tE83C24AF20E39C2F005645EF /* TransactionData.swift in Sources */ = {isa = PBXBuildFile; fileRef = E83C24AE20E39C2F005645EF /* TransactionData.swift */; };\n\t\tE849CEBA20EB1D0700F38B76 /* GasStationAPIResponse.swift in Sources */ = {isa = PBXBuildFile; fileRef = E849CEB920EB1D0700F38B76 /* GasStationAPIResponse.swift */; };\n\t\tE849CEBC20EB4BA200F38B76 /* EthplorerAPIResponse.swift in Sources */ = {isa = PBXBuildFile; fileRef = E849CEBB20EB4BA200F38B76 /* EthplorerAPIResponse.swift */; };\n\t\tE849CEBE20EB5C3B00F38B76 /* WalletError.swift in Sources */ = {isa = PBXBuildFile; fileRef = E849CEBD20EB5C3B00F38B76 /* WalletError.swift */; };\n\t\tE86669C621024E1200F99335 /* EtherWallet+Util.swift in Sources */ = {isa = PBXBuildFile; fileRef = E86669C521024E1200F99335 /* EtherWallet+Util.swift */; };\n\t\tE8B4753B21002C98004B65E9 /* EtherWallet+Info.swift in Sources */ = {isa = PBXBuildFile; fileRef = E8B4753A21002C98004B65E9 /* EtherWallet+Info.swift */; };\n\t\tE8CB3D7821043E8D00AC6A14 /* EtherWallet+History.swift in Sources */ = {isa = PBXBuildFile; fileRef = E8CB3D7721043E8D00AC6A14 /* EtherWallet+History.swift */; };\n\t\tE8D4CF342109CCB4008476B8 /* EtherWalletTestnets.swift in Sources */ = {isa = PBXBuildFile; fileRef = E8D4CF332109CCB4008476B8 /* EtherWalletTestnets.swift */; };\n\t\tE8D4CF3E2109F07D008476B8 /* EtherWalletKitTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = E8D4CF3D2109F07D008476B8 /* EtherWalletKitTest.swift */; };\n\t\tOBJ_29 /* Package.swift in Sources */ = {isa = PBXBuildFile; fileRef = OBJ_6 /* Package.swift */; };\n\t\tOBJ_43 /* EtherWalletKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = EtherWalletKit::EtherWalletKit::Product /* EtherWalletKit.framework */; };\n/* End PBXBuildFile section */\n\n/* Begin PBXContainerItemProxy section */\n\t\tE8665C8320E3939600F4AD19 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = OBJ_1 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = \"EtherWalletKit::EtherWalletKit\";\n\t\t\tremoteInfo = EtherWalletKit;\n\t\t};\n\t\tE8665C8420E3939A00F4AD19 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = OBJ_1 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = \"EtherWalletKit::EtherWalletKitTests\";\n\t\t\tremoteInfo = EtherWalletKitTests;\n\t\t};\n/* End PBXContainerItemProxy section */\n\n/* Begin PBXCopyFilesBuildPhase section */\n\t\tE8CA9E4F2109FC0600F48458 /* CopyFiles */ = {\n\t\t\tisa = PBXCopyFilesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tdstPath = \"\";\n\t\t\tdstSubfolderSpec = 10;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXCopyFilesBuildPhase section */\n\n/* Begin PBXFileReference section */\n\t\t20E55D35F58BE23153B75758 /* Pods-EtherWalletKit.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = \"Pods-EtherWalletKit.debug.xcconfig\"; path = \"Pods/Target Support Files/Pods-EtherWalletKit/Pods-EtherWalletKit.debug.xcconfig\"; sourceTree = \"<group>\"; };\n\t\t29F409A933CCEC902753AC43 /* Pods_EtherWalletKit_EtherWalletKitTest.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_EtherWalletKit_EtherWalletKitTest.framework; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\t58BEAAFE6E50744CCC966592 /* Pods-EtherWalletKit.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = \"Pods-EtherWalletKit.release.xcconfig\"; path = \"Pods/Target Support Files/Pods-EtherWalletKit/Pods-EtherWalletKit.release.xcconfig\"; sourceTree = \"<group>\"; };\n\t\t6049B9E4E2D438BB6F94139B /* Pods-EtherWalletKit-EtherWalletKitTest.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = \"Pods-EtherWalletKit-EtherWalletKitTest.debug.xcconfig\"; path = \"Pods/Target Support Files/Pods-EtherWalletKit-EtherWalletKitTest/Pods-EtherWalletKit-EtherWalletKitTest.debug.xcconfig\"; sourceTree = \"<group>\"; };\n\t\t63C3EA9E421DCB0B6F2524FD /* Pods-EtherWalletKitTest.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = \"Pods-EtherWalletKitTest.release.xcconfig\"; path = \"Pods/Target Support Files/Pods-EtherWalletKitTest/Pods-EtherWalletKitTest.release.xcconfig\"; sourceTree = \"<group>\"; };\n\t\t74D93172CB9698EEC90AF45E /* Pods-EtherWalletKitTest.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = \"Pods-EtherWalletKitTest.debug.xcconfig\"; path = \"Pods/Target Support Files/Pods-EtherWalletKitTest/Pods-EtherWalletKitTest.debug.xcconfig\"; sourceTree = \"<group>\"; };\n\t\tCF04867D39E0379185470242 /* Pods_EtherWalletKit.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_EtherWalletKit.framework; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\tD808C8FA634AFA1C9EA96F19 /* Pods_EtherWalletKitTest.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_EtherWalletKitTest.framework; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\tE3051174CD82B2B4C9FA3E45 /* Pods-EtherWalletKit-EtherWalletKitTest.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = \"Pods-EtherWalletKit-EtherWalletKitTest.release.xcconfig\"; path = \"Pods/Target Support Files/Pods-EtherWalletKit-EtherWalletKitTest/Pods-EtherWalletKit-EtherWalletKitTest.release.xcconfig\"; sourceTree = \"<group>\"; };\n\t\tE83118B520F3391E00FF3CCC /* EtherWallet+Account.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = \"EtherWallet+Account.swift\"; sourceTree = \"<group>\"; };\n\t\tE83118B920F33BC900FF3CCC /* EtherWallet+Balance.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = \"EtherWallet+Balance.swift\"; sourceTree = \"<group>\"; };\n\t\tE83118C020F4523A00FF3CCC /* EtherWallet+Transaction.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = \"EtherWallet+Transaction.swift\"; sourceTree = \"<group>\"; };\n\t\tE83C24A020E399B0005645EF /* EtherWallet.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = EtherWallet.swift; sourceTree = \"<group>\"; };\n\t\tE83C24AA20E39BE6005645EF /* EtherscanAPIResponse.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EtherscanAPIResponse.swift; sourceTree = \"<group>\"; };\n\t\tE83C24AE20E39C2F005645EF /* TransactionData.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TransactionData.swift; sourceTree = \"<group>\"; };\n\t\tE849CEB920EB1D0700F38B76 /* GasStationAPIResponse.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GasStationAPIResponse.swift; sourceTree = \"<group>\"; };\n\t\tE849CEBB20EB4BA200F38B76 /* EthplorerAPIResponse.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EthplorerAPIResponse.swift; sourceTree = \"<group>\"; };\n\t\tE849CEBD20EB5C3B00F38B76 /* WalletError.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WalletError.swift; sourceTree = \"<group>\"; };\n\t\tE8665C8520E394CF00F4AD19 /* LICENSE */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = LICENSE; sourceTree = \"<group>\"; };\n\t\tE8665C8620E394CF00F4AD19 /* README.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = net.daringfireball.markdown; path = README.md; sourceTree = \"<group>\"; };\n\t\tE8665C8720E394CF00F4AD19 /* EtherWalletKit.podspec */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = EtherWalletKit.podspec; sourceTree = \"<group>\"; };\n\t\tE86669C521024E1200F99335 /* EtherWallet+Util.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = \"EtherWallet+Util.swift\"; sourceTree = \"<group>\"; };\n\t\tE8B4753A21002C98004B65E9 /* EtherWallet+Info.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = \"EtherWallet+Info.swift\"; sourceTree = \"<group>\"; };\n\t\tE8CB3D7721043E8D00AC6A14 /* EtherWallet+History.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = \"EtherWallet+History.swift\"; sourceTree = \"<group>\"; };\n\t\tE8D4CF332109CCB4008476B8 /* EtherWalletTestnets.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EtherWalletTestnets.swift; sourceTree = \"<group>\"; };\n\t\tE8D4CF362109E66D008476B8 /* Document.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = net.daringfireball.markdown; path = Document.md; sourceTree = \"<group>\"; };\n\t\tE8D4CF3B2109F07D008476B8 /* EtherWalletKitTest.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = EtherWalletKitTest.xctest; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\tE8D4CF3D2109F07D008476B8 /* EtherWalletKitTest.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EtherWalletKitTest.swift; sourceTree = \"<group>\"; };\n\t\tE8D4CF3F2109F07D008476B8 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = \"<group>\"; };\n\t\tEtherWalletKit::EtherWalletKit::Product /* EtherWalletKit.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = EtherWalletKit.framework; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\tEtherWalletKit::EtherWalletKitTests::Product /* EtherWalletKitTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; path = EtherWalletKitTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\tOBJ_6 /* Package.swift */ = {isa = PBXFileReference; explicitFileType = sourcecode.swift; path = Package.swift; sourceTree = \"<group>\"; };\n/* End PBXFileReference section */\n\n/* Begin PBXFrameworksBuildPhase section */\n\t\t23A961ACB3F6BDC02E74968E /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\tE8D4CF382109F07D008476B8 /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\tE4746BA3B4CE720D158512A1 /* Pods_EtherWalletKitTest.framework in Frameworks */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\tOBJ_23 /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 0;\n\t\t\tfiles = (\n\t\t\t\t1EDFEC0DB3B02D59F8E546BB /* Pods_EtherWalletKit.framework in Frameworks */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\tOBJ_42 /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 0;\n\t\t\tfiles = (\n\t\t\t\tOBJ_43 /* EtherWalletKit.framework in Frameworks */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXFrameworksBuildPhase section */\n\n/* Begin PBXGroup section */\n\t\t287731197E01E164172DCDF5 /* Frameworks */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tCF04867D39E0379185470242 /* Pods_EtherWalletKit.framework */,\n\t\t\t\t29F409A933CCEC902753AC43 /* Pods_EtherWalletKit_EtherWalletKitTest.framework */,\n\t\t\t\tD808C8FA634AFA1C9EA96F19 /* Pods_EtherWalletKitTest.framework */,\n\t\t\t);\n\t\t\tname = Frameworks;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t83A5C5AAC8028885D5C13320 /* Pods */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t20E55D35F58BE23153B75758 /* Pods-EtherWalletKit.debug.xcconfig */,\n\t\t\t\t58BEAAFE6E50744CCC966592 /* Pods-EtherWalletKit.release.xcconfig */,\n\t\t\t\t6049B9E4E2D438BB6F94139B /* Pods-EtherWalletKit-EtherWalletKitTest.debug.xcconfig */,\n\t\t\t\tE3051174CD82B2B4C9FA3E45 /* Pods-EtherWalletKit-EtherWalletKitTest.release.xcconfig */,\n\t\t\t\t74D93172CB9698EEC90AF45E /* Pods-EtherWalletKitTest.debug.xcconfig */,\n\t\t\t\t63C3EA9E421DCB0B6F2524FD /* Pods-EtherWalletKitTest.release.xcconfig */,\n\t\t\t);\n\t\t\tname = Pods;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tE83C249E20E399B0005645EF /* Sources */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tE849CEB820EB19C200F38B76 /* Structure */,\n\t\t\t\tE83C249F20E399B0005645EF /* Wallet */,\n\t\t\t);\n\t\t\tpath = Sources;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tE83C249F20E399B0005645EF /* Wallet */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tE83C24A020E399B0005645EF /* EtherWallet.swift */,\n\t\t\t\tE83118B520F3391E00FF3CCC /* EtherWallet+Account.swift */,\n\t\t\t\tE83118B920F33BC900FF3CCC /* EtherWallet+Balance.swift */,\n\t\t\t\tE83118C020F4523A00FF3CCC /* EtherWallet+Transaction.swift */,\n\t\t\t\tE8B4753A21002C98004B65E9 /* EtherWallet+Info.swift */,\n\t\t\t\tE8CB3D7721043E8D00AC6A14 /* EtherWallet+History.swift */,\n\t\t\t\tE86669C521024E1200F99335 /* EtherWallet+Util.swift */,\n\t\t\t\tE8D4CF332109CCB4008476B8 /* EtherWalletTestnets.swift */,\n\t\t\t\tE849CEBD20EB5C3B00F38B76 /* WalletError.swift */,\n\t\t\t);\n\t\t\tpath = Wallet;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tE849CEB820EB19C200F38B76 /* Structure */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tE83C24AA20E39BE6005645EF /* EtherscanAPIResponse.swift */,\n\t\t\t\tE849CEB920EB1D0700F38B76 /* GasStationAPIResponse.swift */,\n\t\t\t\tE849CEBB20EB4BA200F38B76 /* EthplorerAPIResponse.swift */,\n\t\t\t\tE83C24AE20E39C2F005645EF /* TransactionData.swift */,\n\t\t\t);\n\t\t\tpath = Structure;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tE8D4CF352109E66D008476B8 /* Docs */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tE8D4CF362109E66D008476B8 /* Document.md */,\n\t\t\t);\n\t\t\tpath = Docs;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tE8D4CF3C2109F07D008476B8 /* EtherWalletKitTest */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tE8D4CF3D2109F07D008476B8 /* EtherWalletKitTest.swift */,\n\t\t\t\tE8D4CF3F2109F07D008476B8 /* Info.plist */,\n\t\t\t);\n\t\t\tpath = EtherWalletKitTest;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tOBJ_14 /* Products */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tEtherWalletKit::EtherWalletKitTests::Product /* EtherWalletKitTests.xctest */,\n\t\t\t\tEtherWalletKit::EtherWalletKit::Product /* EtherWalletKit.framework */,\n\t\t\t\tE8D4CF3B2109F07D008476B8 /* EtherWalletKitTest.xctest */,\n\t\t\t);\n\t\t\tname = Products;\n\t\t\tsourceTree = BUILT_PRODUCTS_DIR;\n\t\t};\n\t\tOBJ_5 = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tOBJ_6 /* Package.swift */,\n\t\t\t\tE8665C8720E394CF00F4AD19 /* EtherWalletKit.podspec */,\n\t\t\t\tE8665C8520E394CF00F4AD19 /* LICENSE */,\n\t\t\t\tE8665C8620E394CF00F4AD19 /* README.md */,\n\t\t\t\tE83C249E20E399B0005645EF /* Sources */,\n\t\t\t\tE8D4CF352109E66D008476B8 /* Docs */,\n\t\t\t\tE8D4CF3C2109F07D008476B8 /* EtherWalletKitTest */,\n\t\t\t\tOBJ_14 /* Products */,\n\t\t\t\t83A5C5AAC8028885D5C13320 /* Pods */,\n\t\t\t\t287731197E01E164172DCDF5 /* Frameworks */,\n\t\t\t);\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n/* End PBXGroup section */\n\n/* Begin PBXNativeTarget section */\n\t\tE8D4CF3A2109F07D008476B8 /* EtherWalletKitTest */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = E8D4CF402109F07D008476B8 /* Build configuration list for PBXNativeTarget \"EtherWalletKitTest\" */;\n\t\t\tbuildPhases = (\n\t\t\t\tBB104CFDCBEFDE4B9B23AA5A /* [CP] Check Pods Manifest.lock */,\n\t\t\t\tE8D4CF372109F07D008476B8 /* Sources */,\n\t\t\t\tE8D4CF382109F07D008476B8 /* Frameworks */,\n\t\t\t\tE8D4CF392109F07D008476B8 /* Resources */,\n\t\t\t\tE8CA9E4F2109FC0600F48458 /* CopyFiles */,\n\t\t\t\tD62F1E8A6BB12A40C37E82EC /* [CP] Embed Pods Frameworks */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t);\n\t\t\tname = EtherWalletKitTest;\n\t\t\tproductName = EtherWalletKitTest;\n\t\t\tproductReference = E8D4CF3B2109F07D008476B8 /* EtherWalletKitTest.xctest */;\n\t\t\tproductType = \"com.apple.product-type.bundle.unit-test\";\n\t\t};\n\t\tEtherWalletKit::EtherWalletKit /* EtherWalletKit */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = OBJ_18 /* Build configuration list for PBXNativeTarget \"EtherWalletKit\" */;\n\t\t\tbuildPhases = (\n\t\t\t\t7ABA8827529429D5C2B7EEF4 /* [CP] Check Pods Manifest.lock */,\n\t\t\t\tOBJ_21 /* Sources */,\n\t\t\t\tOBJ_23 /* Frameworks */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t);\n\t\t\tname = EtherWalletKit;\n\t\t\tproductName = EtherWalletKit;\n\t\t\tproductReference = EtherWalletKit::EtherWalletKit::Product /* EtherWalletKit.framework */;\n\t\t\tproductType = \"com.apple.product-type.framework\";\n\t\t};\n\t\tEtherWalletKit::EtherWalletKitTests /* EtherWalletKitTests */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = OBJ_36 /* Build configuration list for PBXNativeTarget \"EtherWalletKitTests\" */;\n\t\t\tbuildPhases = (\n\t\t\t\tOBJ_39 /* Sources */,\n\t\t\t\tOBJ_42 /* Frameworks */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t\tOBJ_44 /* PBXTargetDependency */,\n\t\t\t);\n\t\t\tname = EtherWalletKitTests;\n\t\t\tproductName = EtherWalletKitTests;\n\t\t\tproductReference = EtherWalletKit::EtherWalletKitTests::Product /* EtherWalletKitTests.xctest */;\n\t\t\tproductType = \"com.apple.product-type.bundle.unit-test\";\n\t\t};\n\t\tEtherWalletKit::SwiftPMPackageDescription /* EtherWalletKitPackageDescription */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = OBJ_25 /* Build configuration list for PBXNativeTarget \"EtherWalletKitPackageDescription\" */;\n\t\t\tbuildPhases = (\n\t\t\t\tOBJ_28 /* Sources */,\n\t\t\t\t23A961ACB3F6BDC02E74968E /* Frameworks */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t);\n\t\t\tname = EtherWalletKitPackageDescription;\n\t\t\tproductName = EtherWalletKitPackageDescription;\n\t\t\tproductType = \"com.apple.product-type.framework\";\n\t\t};\n/* End PBXNativeTarget section */\n\n/* Begin PBXProject section */\n\t\tOBJ_1 /* Project object */ = {\n\t\t\tisa = PBXProject;\n\t\t\tattributes = {\n\t\t\t\tLastSwiftUpdateCheck = 0940;\n\t\t\t\tLastUpgradeCheck = 9999;\n\t\t\t\tTargetAttributes = {\n\t\t\t\t\tE8D4CF3A2109F07D008476B8 = {\n\t\t\t\t\t\tCreatedOnToolsVersion = 9.4.1;\n\t\t\t\t\t\tDevelopmentTeam = T4C6698GAN;\n\t\t\t\t\t\tProvisioningStyle = Automatic;\n\t\t\t\t\t};\n\t\t\t\t};\n\t\t\t};\n\t\t\tbuildConfigurationList = OBJ_2 /* Build configuration list for PBXProject \"EtherWalletKit\" */;\n\t\t\tcompatibilityVersion = \"Xcode 3.2\";\n\t\t\tdevelopmentRegion = English;\n\t\t\thasScannedForEncodings = 0;\n\t\t\tknownRegions = (\n\t\t\t\ten,\n\t\t\t);\n\t\t\tmainGroup = OBJ_5;\n\t\t\tproductRefGroup = OBJ_14 /* Products */;\n\t\t\tprojectDirPath = \"\";\n\t\t\tprojectRoot = \"\";\n\t\t\ttargets = (\n\t\t\t\tEtherWalletKit::EtherWalletKit /* EtherWalletKit */,\n\t\t\t\tEtherWalletKit::SwiftPMPackageDescription /* EtherWalletKitPackageDescription */,\n\t\t\t\tEtherWalletKit::EtherWalletKitPackageTests::ProductTarget /* EtherWalletKitPackageTests */,\n\t\t\t\tEtherWalletKit::EtherWalletKitTests /* EtherWalletKitTests */,\n\t\t\t\tE8D4CF3A2109F07D008476B8 /* EtherWalletKitTest */,\n\t\t\t);\n\t\t};\n/* End PBXProject section */\n\n/* Begin PBXResourcesBuildPhase section */\n\t\tE8D4CF392109F07D008476B8 /* Resources */ = {\n\t\t\tisa = PBXResourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXResourcesBuildPhase section */\n\n/* Begin PBXShellScriptBuildPhase section */\n\t\t7ABA8827529429D5C2B7EEF4 /* [CP] Check Pods Manifest.lock */ = {\n\t\t\tisa = PBXShellScriptBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\tinputPaths = (\n\t\t\t\t\"${PODS_PODFILE_DIR_PATH}/Podfile.lock\",\n\t\t\t\t\"${PODS_ROOT}/Manifest.lock\",\n\t\t\t);\n\t\t\tname = \"[CP] Check Pods Manifest.lock\";\n\t\t\toutputPaths = (\n\t\t\t\t\"$(DERIVED_FILE_DIR)/Pods-EtherWalletKit-checkManifestLockResult.txt\",\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t\tshellPath = /bin/sh;\n\t\t\tshellScript = \"diff \\\"${PODS_PODFILE_DIR_PATH}/Podfile.lock\\\" \\\"${PODS_ROOT}/Manifest.lock\\\" > /dev/null\\nif [ $? != 0 ] ; then\\n    # print error to STDERR\\n    echo \\\"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\\\" >&2\\n    exit 1\\nfi\\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\\necho \\\"SUCCESS\\\" > \\\"${SCRIPT_OUTPUT_FILE_0}\\\"\\n\";\n\t\t\tshowEnvVarsInLog = 0;\n\t\t};\n\t\tBB104CFDCBEFDE4B9B23AA5A /* [CP] Check Pods Manifest.lock */ = {\n\t\t\tisa = PBXShellScriptBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\tinputPaths = (\n\t\t\t\t\"${PODS_PODFILE_DIR_PATH}/Podfile.lock\",\n\t\t\t\t\"${PODS_ROOT}/Manifest.lock\",\n\t\t\t);\n\t\t\tname = \"[CP] Check Pods Manifest.lock\";\n\t\t\toutputPaths = (\n\t\t\t\t\"$(DERIVED_FILE_DIR)/Pods-EtherWalletKitTest-checkManifestLockResult.txt\",\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t\tshellPath = /bin/sh;\n\t\t\tshellScript = \"diff \\\"${PODS_PODFILE_DIR_PATH}/Podfile.lock\\\" \\\"${PODS_ROOT}/Manifest.lock\\\" > /dev/null\\nif [ $? != 0 ] ; then\\n    # print error to STDERR\\n    echo \\\"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\\\" >&2\\n    exit 1\\nfi\\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\\necho \\\"SUCCESS\\\" > \\\"${SCRIPT_OUTPUT_FILE_0}\\\"\\n\";\n\t\t\tshowEnvVarsInLog = 0;\n\t\t};\n\t\tD62F1E8A6BB12A40C37E82EC /* [CP] Embed Pods Frameworks */ = {\n\t\t\tisa = PBXShellScriptBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\tinputPaths = (\n\t\t\t\t\"${SRCROOT}/Pods/Target Support Files/Pods-EtherWalletKitTest/Pods-EtherWalletKitTest-frameworks.sh\",\n\t\t\t\t\"${BUILT_PRODUCTS_DIR}/BigInt-iOS11.4/BigInt.framework\",\n\t\t\t\t\"${BUILT_PRODUCTS_DIR}/CryptoSwift-iOS11.4/CryptoSwift.framework\",\n\t\t\t\t\"${BUILT_PRODUCTS_DIR}/EthereumABI-iOS11.4/EthereumABI.framework\",\n\t\t\t\t\"${BUILT_PRODUCTS_DIR}/EthereumAddress-iOS11.4/EthereumAddress.framework\",\n\t\t\t\t\"${BUILT_PRODUCTS_DIR}/PromiseKit-iOS11.4/PromiseKit.framework\",\n\t\t\t\t\"${BUILT_PRODUCTS_DIR}/SipHash-iOS11.4/SipHash.framework\",\n\t\t\t\t\"${BUILT_PRODUCTS_DIR}/SwiftRLP-iOS11.4/SwiftRLP.framework\",\n\t\t\t\t\"${BUILT_PRODUCTS_DIR}/scrypt-iOS11.4/scrypt.framework\",\n\t\t\t\t\"${BUILT_PRODUCTS_DIR}/secp256k1_swift-iOS11.4/secp256k1_swift.framework\",\n\t\t\t\t\"${BUILT_PRODUCTS_DIR}/web3swift-iOS11.4/Web3swift.framework\",\n\t\t\t);\n\t\t\tname = \"[CP] Embed Pods Frameworks\";\n\t\t\toutputPaths = (\n\t\t\t\t\"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/BigInt.framework\",\n\t\t\t\t\"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/CryptoSwift.framework\",\n\t\t\t\t\"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/EthereumABI.framework\",\n\t\t\t\t\"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/EthereumAddress.framework\",\n\t\t\t\t\"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/PromiseKit.framework\",\n\t\t\t\t\"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SipHash.framework\",\n\t\t\t\t\"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SwiftRLP.framework\",\n\t\t\t\t\"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/scrypt.framework\",\n\t\t\t\t\"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/secp256k1_swift.framework\",\n\t\t\t\t\"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Web3swift.framework\",\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t\tshellPath = /bin/sh;\n\t\t\tshellScript = \"\\\"${SRCROOT}/Pods/Target Support Files/Pods-EtherWalletKitTest/Pods-EtherWalletKitTest-frameworks.sh\\\"\\n\";\n\t\t\tshowEnvVarsInLog = 0;\n\t\t};\n/* End PBXShellScriptBuildPhase section */\n\n/* Begin PBXSourcesBuildPhase section */\n\t\tE8D4CF372109F07D008476B8 /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\tE8D4CF3E2109F07D008476B8 /* EtherWalletKitTest.swift in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\tOBJ_21 /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 0;\n\t\t\tfiles = (\n\t\t\t\tE83C24A120E399B0005645EF /* EtherWallet.swift in Sources */,\n\t\t\t\tE83C24AF20E39C2F005645EF /* TransactionData.swift in Sources */,\n\t\t\t\tE86669C621024E1200F99335 /* EtherWallet+Util.swift in Sources */,\n\t\t\t\tE849CEBA20EB1D0700F38B76 /* GasStationAPIResponse.swift in Sources */,\n\t\t\t\tE849CEBE20EB5C3B00F38B76 /* WalletError.swift in Sources */,\n\t\t\t\tE83118C120F4523D00FF3CCC /* EtherWallet+Transaction.swift in Sources */,\n\t\t\t\tE83118B620F3391E00FF3CCC /* EtherWallet+Account.swift in Sources */,\n\t\t\t\tE849CEBC20EB4BA200F38B76 /* EthplorerAPIResponse.swift in Sources */,\n\t\t\t\tE83118BA20F33BCA00FF3CCC /* EtherWallet+Balance.swift in Sources */,\n\t\t\t\tE83C24AB20E39BE6005645EF /* EtherscanAPIResponse.swift in Sources */,\n\t\t\t\tE8CB3D7821043E8D00AC6A14 /* EtherWallet+History.swift in Sources */,\n\t\t\t\tE8D4CF342109CCB4008476B8 /* EtherWalletTestnets.swift in Sources */,\n\t\t\t\tE8B4753B21002C98004B65E9 /* EtherWallet+Info.swift in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\tOBJ_28 /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 0;\n\t\t\tfiles = (\n\t\t\t\tOBJ_29 /* Package.swift in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\tOBJ_39 /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 0;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXSourcesBuildPhase section */\n\n/* Begin PBXTargetDependency section */\n\t\tOBJ_34 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\ttarget = EtherWalletKit::EtherWalletKitTests /* EtherWalletKitTests */;\n\t\t\ttargetProxy = E8665C8420E3939A00F4AD19 /* PBXContainerItemProxy */;\n\t\t};\n\t\tOBJ_44 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\ttarget = EtherWalletKit::EtherWalletKit /* EtherWalletKit */;\n\t\t\ttargetProxy = E8665C8320E3939600F4AD19 /* PBXContainerItemProxy */;\n\t\t};\n/* End PBXTargetDependency section */\n\n/* Begin XCBuildConfiguration section */\n\t\tE8D4CF412109F07D008476B8 /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = 74D93172CB9698EEC90AF45E /* Pods-EtherWalletKitTest.debug.xcconfig */;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_SEARCH_USER_PATHS = NO;\n\t\t\t\tCLANG_ANALYZER_NONNULL = YES;\n\t\t\t\tCLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;\n\t\t\t\tCLANG_CXX_LANGUAGE_STANDARD = \"gnu++14\";\n\t\t\t\tCLANG_CXX_LIBRARY = \"libc++\";\n\t\t\t\tCLANG_ENABLE_MODULES = YES;\n\t\t\t\tCLANG_ENABLE_OBJC_WEAK = YES;\n\t\t\t\tCLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;\n\t\t\t\tCLANG_WARN_BOOL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_COMMA = YES;\n\t\t\t\tCLANG_WARN_CONSTANT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;\n\t\t\t\tCLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;\n\t\t\t\tCLANG_WARN_DOCUMENTATION_COMMENTS = YES;\n\t\t\t\tCLANG_WARN_EMPTY_BODY = YES;\n\t\t\t\tCLANG_WARN_ENUM_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_INFINITE_RECURSION = YES;\n\t\t\t\tCLANG_WARN_INT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;\n\t\t\t\tCLANG_WARN_OBJC_LITERAL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;\n\t\t\t\tCLANG_WARN_RANGE_LOOP_ANALYSIS = YES;\n\t\t\t\tCLANG_WARN_STRICT_PROTOTYPES = YES;\n\t\t\t\tCLANG_WARN_SUSPICIOUS_MOVE = YES;\n\t\t\t\tCLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;\n\t\t\t\tCLANG_WARN_UNREACHABLE_CODE = YES;\n\t\t\t\tCLANG_WARN__DUPLICATE_METHOD_MATCH = YES;\n\t\t\t\tCODE_SIGN_IDENTITY = \"iPhone Developer\";\n\t\t\t\tCODE_SIGN_STYLE = Automatic;\n\t\t\t\tDEVELOPMENT_TEAM = T4C6698GAN;\n\t\t\t\tENABLE_STRICT_OBJC_MSGSEND = YES;\n\t\t\t\tENABLE_TESTABILITY = YES;\n\t\t\t\tGCC_C_LANGUAGE_STANDARD = gnu11;\n\t\t\t\tGCC_DYNAMIC_NO_PIC = NO;\n\t\t\t\tGCC_NO_COMMON_BLOCKS = YES;\n\t\t\t\tGCC_PREPROCESSOR_DEFINITIONS = (\n\t\t\t\t\t\"DEBUG=1\",\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t);\n\t\t\t\tGCC_WARN_64_TO_32_BIT_CONVERSION = YES;\n\t\t\t\tGCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;\n\t\t\t\tGCC_WARN_UNDECLARED_SELECTOR = YES;\n\t\t\t\tGCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;\n\t\t\t\tGCC_WARN_UNUSED_FUNCTION = YES;\n\t\t\t\tGCC_WARN_UNUSED_VARIABLE = YES;\n\t\t\t\tINFOPLIST_FILE = EtherWalletKitTest/Info.plist;\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 11.4;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks @loader_path/Frameworks\";\n\t\t\t\tMTL_ENABLE_DEBUG_INFO = YES;\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = com.SteadyAction.EtherWalletKitTest;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tSWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;\n\t\t\t\tSWIFT_VERSION = 4.0;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\tE8D4CF422109F07D008476B8 /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = 63C3EA9E421DCB0B6F2524FD /* Pods-EtherWalletKitTest.release.xcconfig */;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_SEARCH_USER_PATHS = NO;\n\t\t\t\tCLANG_ANALYZER_NONNULL = YES;\n\t\t\t\tCLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;\n\t\t\t\tCLANG_CXX_LANGUAGE_STANDARD = \"gnu++14\";\n\t\t\t\tCLANG_CXX_LIBRARY = \"libc++\";\n\t\t\t\tCLANG_ENABLE_MODULES = YES;\n\t\t\t\tCLANG_ENABLE_OBJC_WEAK = YES;\n\t\t\t\tCLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;\n\t\t\t\tCLANG_WARN_BOOL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_COMMA = YES;\n\t\t\t\tCLANG_WARN_CONSTANT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;\n\t\t\t\tCLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;\n\t\t\t\tCLANG_WARN_DOCUMENTATION_COMMENTS = YES;\n\t\t\t\tCLANG_WARN_EMPTY_BODY = YES;\n\t\t\t\tCLANG_WARN_ENUM_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_INFINITE_RECURSION = YES;\n\t\t\t\tCLANG_WARN_INT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;\n\t\t\t\tCLANG_WARN_OBJC_LITERAL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;\n\t\t\t\tCLANG_WARN_RANGE_LOOP_ANALYSIS = YES;\n\t\t\t\tCLANG_WARN_STRICT_PROTOTYPES = YES;\n\t\t\t\tCLANG_WARN_SUSPICIOUS_MOVE = YES;\n\t\t\t\tCLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;\n\t\t\t\tCLANG_WARN_UNREACHABLE_CODE = YES;\n\t\t\t\tCLANG_WARN__DUPLICATE_METHOD_MATCH = YES;\n\t\t\t\tCODE_SIGN_IDENTITY = \"iPhone Developer\";\n\t\t\t\tCODE_SIGN_STYLE = Automatic;\n\t\t\t\tCOPY_PHASE_STRIP = NO;\n\t\t\t\tDEVELOPMENT_TEAM = T4C6698GAN;\n\t\t\t\tENABLE_NS_ASSERTIONS = NO;\n\t\t\t\tENABLE_STRICT_OBJC_MSGSEND = YES;\n\t\t\t\tGCC_C_LANGUAGE_STANDARD = gnu11;\n\t\t\t\tGCC_NO_COMMON_BLOCKS = YES;\n\t\t\t\tGCC_WARN_64_TO_32_BIT_CONVERSION = YES;\n\t\t\t\tGCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;\n\t\t\t\tGCC_WARN_UNDECLARED_SELECTOR = YES;\n\t\t\t\tGCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;\n\t\t\t\tGCC_WARN_UNUSED_FUNCTION = YES;\n\t\t\t\tGCC_WARN_UNUSED_VARIABLE = YES;\n\t\t\t\tINFOPLIST_FILE = EtherWalletKitTest/Info.plist;\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 11.4;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks @loader_path/Frameworks\";\n\t\t\t\tMTL_ENABLE_DEBUG_INFO = NO;\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = com.SteadyAction.EtherWalletKitTest;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tSWIFT_VERSION = 4.0;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t\tVALIDATE_PRODUCT = YES;\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\tOBJ_19 /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = 20E55D35F58BE23153B75758 /* Pods-EtherWalletKit.debug.xcconfig */;\n\t\t\tbuildSettings = {\n\t\t\t\tENABLE_TESTABILITY = YES;\n\t\t\t\tFRAMEWORK_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"$(PLATFORM_DIR)/Developer/Library/Frameworks\",\n\t\t\t\t);\n\t\t\t\tHEADER_SEARCH_PATHS = \"$(inherited)\";\n\t\t\t\tINFOPLIST_FILE = EtherWalletKit.xcodeproj/EtherWalletKit_Info.plist;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) $(TOOLCHAIN_DIR)/usr/lib/swift/macosx\";\n\t\t\t\tOTHER_CFLAGS = \"$(inherited)\";\n\t\t\t\tOTHER_LDFLAGS = \"$(inherited)\";\n\t\t\t\tOTHER_SWIFT_FLAGS = \"$(inherited)\";\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = EtherWalletKit;\n\t\t\t\tPRODUCT_MODULE_NAME = \"$(TARGET_NAME:c99extidentifier)\";\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME:c99extidentifier)\";\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tSWIFT_VERSION = 4.0;\n\t\t\t\tTARGET_NAME = EtherWalletKit;\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\tOBJ_20 /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = 58BEAAFE6E50744CCC966592 /* Pods-EtherWalletKit.release.xcconfig */;\n\t\t\tbuildSettings = {\n\t\t\t\tENABLE_TESTABILITY = YES;\n\t\t\t\tFRAMEWORK_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"$(PLATFORM_DIR)/Developer/Library/Frameworks\",\n\t\t\t\t);\n\t\t\t\tHEADER_SEARCH_PATHS = \"$(inherited)\";\n\t\t\t\tINFOPLIST_FILE = EtherWalletKit.xcodeproj/EtherWalletKit_Info.plist;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) $(TOOLCHAIN_DIR)/usr/lib/swift/macosx\";\n\t\t\t\tOTHER_CFLAGS = \"$(inherited)\";\n\t\t\t\tOTHER_LDFLAGS = \"$(inherited)\";\n\t\t\t\tOTHER_SWIFT_FLAGS = \"$(inherited)\";\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = EtherWalletKit;\n\t\t\t\tPRODUCT_MODULE_NAME = \"$(TARGET_NAME:c99extidentifier)\";\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME:c99extidentifier)\";\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tSWIFT_VERSION = 4.0;\n\t\t\t\tTARGET_NAME = EtherWalletKit;\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\tOBJ_26 /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tLD = /usr/bin/true;\n\t\t\t\tOTHER_SWIFT_FLAGS = \"-swift-version 4 -I $(TOOLCHAIN_DIR)/usr/lib/swift/pm/4 -target x86_64-apple-macosx10.10 -sdk /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.13.sdk\";\n\t\t\t\tSWIFT_VERSION = 4.0;\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\tOBJ_27 /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tLD = /usr/bin/true;\n\t\t\t\tOTHER_SWIFT_FLAGS = \"-swift-version 4 -I $(TOOLCHAIN_DIR)/usr/lib/swift/pm/4 -target x86_64-apple-macosx10.10 -sdk /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.13.sdk\";\n\t\t\t\tSWIFT_VERSION = 4.0;\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\tOBJ_3 /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCLANG_ENABLE_OBJC_ARC = YES;\n\t\t\t\tCOMBINE_HIDPI_IMAGES = YES;\n\t\t\t\tCOPY_PHASE_STRIP = NO;\n\t\t\t\tDEBUG_INFORMATION_FORMAT = dwarf;\n\t\t\t\tDYLIB_INSTALL_NAME_BASE = \"@rpath\";\n\t\t\t\tENABLE_NS_ASSERTIONS = YES;\n\t\t\t\tGCC_OPTIMIZATION_LEVEL = 0;\n\t\t\t\tMACOSX_DEPLOYMENT_TARGET = 10.10;\n\t\t\t\tONLY_ACTIVE_ARCH = YES;\n\t\t\t\tOTHER_SWIFT_FLAGS = \"-DXcode\";\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tSDKROOT = macosx;\n\t\t\t\tSUPPORTED_PLATFORMS = \"macosx iphoneos iphonesimulator appletvos appletvsimulator watchos watchsimulator\";\n\t\t\t\tSWIFT_ACTIVE_COMPILATION_CONDITIONS = SWIFT_PACKAGE;\n\t\t\t\tSWIFT_OPTIMIZATION_LEVEL = \"-Onone\";\n\t\t\t\tUSE_HEADERMAP = NO;\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\tOBJ_32 /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\tOBJ_33 /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\tOBJ_37 /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;\n\t\t\t\tEMBEDDED_CONTENT_CONTAINS_SWIFT = YES;\n\t\t\t\tFRAMEWORK_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"$(PLATFORM_DIR)/Developer/Library/Frameworks\",\n\t\t\t\t);\n\t\t\t\tHEADER_SEARCH_PATHS = \"$(inherited)\";\n\t\t\t\tINFOPLIST_FILE = EtherWalletKit.xcodeproj/EtherWalletKitTests_Info.plist;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @loader_path/../Frameworks @loader_path/Frameworks\";\n\t\t\t\tOTHER_CFLAGS = \"$(inherited)\";\n\t\t\t\tOTHER_LDFLAGS = \"$(inherited)\";\n\t\t\t\tOTHER_SWIFT_FLAGS = \"$(inherited)\";\n\t\t\t\tSWIFT_VERSION = 4.0;\n\t\t\t\tTARGET_NAME = EtherWalletKitTests;\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\tOBJ_38 /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;\n\t\t\t\tEMBEDDED_CONTENT_CONTAINS_SWIFT = YES;\n\t\t\t\tFRAMEWORK_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"$(PLATFORM_DIR)/Developer/Library/Frameworks\",\n\t\t\t\t);\n\t\t\t\tHEADER_SEARCH_PATHS = \"$(inherited)\";\n\t\t\t\tINFOPLIST_FILE = EtherWalletKit.xcodeproj/EtherWalletKitTests_Info.plist;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @loader_path/../Frameworks @loader_path/Frameworks\";\n\t\t\t\tOTHER_CFLAGS = \"$(inherited)\";\n\t\t\t\tOTHER_LDFLAGS = \"$(inherited)\";\n\t\t\t\tOTHER_SWIFT_FLAGS = \"$(inherited)\";\n\t\t\t\tSWIFT_VERSION = 4.0;\n\t\t\t\tTARGET_NAME = EtherWalletKitTests;\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\tOBJ_4 /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCLANG_ENABLE_OBJC_ARC = YES;\n\t\t\t\tCOMBINE_HIDPI_IMAGES = YES;\n\t\t\t\tCOPY_PHASE_STRIP = YES;\n\t\t\t\tDEBUG_INFORMATION_FORMAT = \"dwarf-with-dsym\";\n\t\t\t\tDYLIB_INSTALL_NAME_BASE = \"@rpath\";\n\t\t\t\tGCC_OPTIMIZATION_LEVEL = s;\n\t\t\t\tMACOSX_DEPLOYMENT_TARGET = 10.10;\n\t\t\t\tOTHER_SWIFT_FLAGS = \"-DXcode\";\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tSDKROOT = macosx;\n\t\t\t\tSUPPORTED_PLATFORMS = \"macosx iphoneos iphonesimulator appletvos appletvsimulator watchos watchsimulator\";\n\t\t\t\tSWIFT_ACTIVE_COMPILATION_CONDITIONS = SWIFT_PACKAGE;\n\t\t\t\tSWIFT_OPTIMIZATION_LEVEL = \"-Owholemodule\";\n\t\t\t\tUSE_HEADERMAP = NO;\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n/* End XCBuildConfiguration section */\n\n/* Begin XCConfigurationList section */\n\t\tE8D4CF402109F07D008476B8 /* Build configuration list for PBXNativeTarget \"EtherWalletKitTest\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\tE8D4CF412109F07D008476B8 /* Debug */,\n\t\t\t\tE8D4CF422109F07D008476B8 /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\tOBJ_18 /* Build configuration list for PBXNativeTarget \"EtherWalletKit\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\tOBJ_19 /* Debug */,\n\t\t\t\tOBJ_20 /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\tOBJ_2 /* Build configuration list for PBXProject \"EtherWalletKit\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\tOBJ_3 /* Debug */,\n\t\t\t\tOBJ_4 /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\tOBJ_25 /* Build configuration list for PBXNativeTarget \"EtherWalletKitPackageDescription\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\tOBJ_26 /* Debug */,\n\t\t\t\tOBJ_27 /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\tOBJ_31 /* Build configuration list for PBXAggregateTarget \"EtherWalletKitPackageTests\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\tOBJ_32 /* Debug */,\n\t\t\t\tOBJ_33 /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\tOBJ_36 /* Build configuration list for PBXNativeTarget \"EtherWalletKitTests\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\tOBJ_37 /* Debug */,\n\t\t\t\tOBJ_38 /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n/* End XCConfigurationList section */\n\t};\n\trootObject = OBJ_1 /* Project object */;\n}\n"
  },
  {
    "path": "EtherWalletKit.xcodeproj/project.xcworkspace/contents.xcworkspacedata",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Workspace\n   version = \"1.0\">\n</Workspace>\n"
  },
  {
    "path": "EtherWalletKit.xcodeproj/xcshareddata/xcschemes/EtherWalletKit-Package.xcscheme",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Scheme\n   LastUpgradeVersion = \"9999\"\n   version = \"1.3\">\n   <BuildAction\n      parallelizeBuildables = \"YES\"\n      buildImplicitDependencies = \"YES\">\n      <BuildActionEntries>\n         <BuildActionEntry\n            buildForTesting = \"YES\"\n            buildForRunning = \"YES\"\n            buildForProfiling = \"YES\"\n            buildForArchiving = \"YES\"\n            buildForAnalyzing = \"YES\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"EtherWalletKit::EtherWalletKit\"\n               BuildableName = \"EtherWalletKit.framework\"\n               BlueprintName = \"EtherWalletKit\"\n               ReferencedContainer = \"container:EtherWalletKit.xcodeproj\">\n            </BuildableReference>\n         </BuildActionEntry>\n      </BuildActionEntries>\n   </BuildAction>\n   <TestAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\">\n      <Testables>\n         <TestableReference\n            skipped = \"NO\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"EtherWalletKit::EtherWalletKitTests\"\n               BuildableName = \"EtherWalletKitTests.xctest\"\n               BlueprintName = \"EtherWalletKitTests\"\n               ReferencedContainer = \"container:EtherWalletKit.xcodeproj\">\n            </BuildableReference>\n         </TestableReference>\n      </Testables>\n      <AdditionalOptions>\n      </AdditionalOptions>\n   </TestAction>\n   <LaunchAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      launchStyle = \"0\"\n      useCustomWorkingDirectory = \"NO\"\n      ignoresPersistentStateOnLaunch = \"NO\"\n      debugDocumentVersioning = \"YES\"\n      debugServiceExtension = \"internal\"\n      allowLocationSimulation = \"YES\">\n      <MacroExpansion>\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"EtherWalletKit::EtherWalletKit\"\n            BuildableName = \"EtherWalletKit.framework\"\n            BlueprintName = \"EtherWalletKit\"\n            ReferencedContainer = \"container:EtherWalletKit.xcodeproj\">\n         </BuildableReference>\n      </MacroExpansion>\n      <AdditionalOptions>\n      </AdditionalOptions>\n   </LaunchAction>\n   <ProfileAction\n      buildConfiguration = \"Release\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\"\n      savedToolIdentifier = \"\"\n      useCustomWorkingDirectory = \"NO\"\n      debugDocumentVersioning = \"YES\">\n   </ProfileAction>\n   <AnalyzeAction\n      buildConfiguration = \"Debug\">\n   </AnalyzeAction>\n   <ArchiveAction\n      buildConfiguration = \"Release\"\n      revealArchiveInOrganizer = \"YES\">\n   </ArchiveAction>\n</Scheme>\n"
  },
  {
    "path": "EtherWalletKit.xcodeproj/xcshareddata/xcschemes/xcschememanagement.plist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<plist version=\"1.0\">\n<dict>\n  <key>SchemeUserState</key>\n  <dict>\n    <key>EtherWalletKit-Package.xcscheme</key>\n    <dict></dict>\n  </dict>\n  <key>SuppressBuildableAutocreation</key>\n  <dict></dict>\n</dict>\n</plist>\n"
  },
  {
    "path": "EtherWalletKit.xcworkspace/contents.xcworkspacedata",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Workspace\n   version = \"1.0\">\n   <FileRef\n      location = \"group:EtherWalletKit.xcodeproj\">\n   </FileRef>\n   <FileRef\n      location = \"group:Pods/Pods.xcodeproj\">\n   </FileRef>\n</Workspace>\n"
  },
  {
    "path": "EtherWalletKit.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>IDEDidComputeMac32BitWarning</key>\n\t<true/>\n</dict>\n</plist>\n"
  },
  {
    "path": "EtherWalletKitTest/EtherWalletKitTest.swift",
    "content": "import XCTest\n@testable import EtherWalletKit\n\nclass EtherWalletKitTest: XCTestCase {\n    private let password = \"PASSWORD123\"\n    \n    func testAccount() {\n        guard let _  = try? EtherWallet.account.generateAccount(password: password) else {\n            XCTFail()\n            return\n        }\n        \n        XCTAssert(EtherWallet.account.hasAccount)\n        \n        guard let address = EtherWallet.account.address else {\n            XCTFail()\n            return\n        }\n        XCTAssert(address.count == 42)\n        \n        guard let privateKey = try? EtherWallet.account.privateKey(password: password) else {\n            XCTFail()\n            return\n        }\n        XCTAssert(privateKey.count == 64)\n        \n        guard let _ = try? EtherWallet.account.importAccount(privateKey: privateKey, password: password) else {\n            XCTFail()\n            return\n        }\n        \n        XCTAssert(address == EtherWallet.account.address)\n        \n        XCTAssert(EtherWallet.account.verifyPassword(password))\n        XCTAssertFalse(EtherWallet.account.verifyPassword(\"WRONG_PASSWORD\"))\n    }\n    \n    func testBalance() {\n        XCTAssert(try! EtherWallet.balance.etherBalanceSync() == \"0\")\n        XCTAssert(try! EtherWallet.balance.tokenBalanceSync(contractAddress: \"0xd26114cd6EE289AccF82350c8d8487fedB8A0C07\") == \"0\")\n    }\n}\n"
  },
  {
    "path": "EtherWalletKitTest/Info.plist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>CFBundleDevelopmentRegion</key>\n\t<string>$(DEVELOPMENT_LANGUAGE)</string>\n\t<key>CFBundleExecutable</key>\n\t<string>$(EXECUTABLE_NAME)</string>\n\t<key>CFBundleIdentifier</key>\n\t<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>\n\t<key>CFBundleInfoDictionaryVersion</key>\n\t<string>6.0</string>\n\t<key>CFBundleName</key>\n\t<string>$(PRODUCT_NAME)</string>\n\t<key>CFBundlePackageType</key>\n\t<string>BNDL</string>\n\t<key>CFBundleShortVersionString</key>\n\t<string>1.0</string>\n\t<key>CFBundleVersion</key>\n\t<string>1</string>\n</dict>\n</plist>\n"
  },
  {
    "path": "LICENSE",
    "content": "Copyright (c) 2018 SteadyAction <steadyaction@gmail.com>\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n"
  },
  {
    "path": "Package.swift",
    "content": "// swift-tools-version:4.0\n// The swift-tools-version declares the minimum version of Swift required to build this package.\n\nimport PackageDescription\n\nlet package = Package(\n    name: \"EtherWalletKit\",\n    products: [\n        // Products define the executables and libraries produced by a package, and make them visible to other packages.\n        .library(\n            name: \"EtherWalletKit\",\n            targets: [\"EtherWalletKit\"]),\n    ],\n    dependencies: [\n        // Dependencies declare other packages that this package depends on.\n        // .package(url: /* package url */, from: \"1.0.0\"),\n    ],\n    targets: [\n        // Targets are the basic building blocks of a package. A target can define a module or a test suite.\n        // Targets can depend on other targets in this package, and on products in packages which this package depends on.\n        .target(\n            name: \"EtherWalletKit\",\n            dependencies: []),\n        .testTarget(\n            name: \"EtherWalletKitTests\",\n            dependencies: [\"EtherWalletKit\"]),\n    ]\n)\n"
  },
  {
    "path": "Podfile",
    "content": "use_frameworks!\n\ntarget 'EtherWalletKit' do\n\tplatform :ios, '10.0'\n\tpod \"web3swift\", '~> 2.0'\n    pod 'SwiftKeychainWrapper'\nend\n\ntarget 'EtherWalletKitTest' do\n    pod \"web3swift\", '~> 2.0'\nend\n"
  },
  {
    "path": "README.md",
    "content": "\n<p align=\"center\">\n<a href=\"https://github.com/SteadyAction/EtherWalletKit\">\n<img src=\"https://i.imgur.com/Qyva4AF.png\" height=\"240\" alt=\"EtherWalletKit\">\n</a>\n\n[![Swift](https://img.shields.io/badge/Swift-4.2-orange.svg)](https://swift.org)\n[![Xcode](https://img.shields.io/badge/Xcode-10.0-blue.svg)](https://developer.apple.com/xcode)\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)\n<img src=\"https://img.shields.io/badge/os-iOS-green.svg?style=flat\" alt=\"iOS\">\n\n## Introduction\n\nEtherWalletKit is an Ethereum Wallet Toolkit for iOS.<br><br>\nI hope cryptocurrency and decentralized token economy become more widely adapted.\nHowever, some developers hesitate to add a crypto wallet on apps since blockchain and cryptocurrency are complex and require many new knowledge. <br><br>\nDon't worry. <br>With EtherWalletKit, you can implement an Ethereum wallet without a server and blockchain knowledge.\n\n## Features\n#### Released Features\n* Creating/Importing an account(address and private key)\n* Checking Ether and tokens balance\n* Sending Ether and tokens to other addresses\n* Browsing token information\n* Testnet(Rinkeby & Ropsten) support\n* BIP39 Mnemonics\n#### Planned Features\n* Browsing transaction history \n* Keystore import / export\n* Custom configuration / advanced transactions\n* Multiple accounts\n* Third party APIs\n* ERC-721 supports\n\n## Installation\n\n### CocoaPods\n\n<p>To integrate EtherWalletKit into your Xcode project using <a href=\"http://cocoapods.org\">CocoaPods</a>, specify it in your <code>Podfile</code>:</p>\n\n<pre><code class=\"ruby language-ruby\">pod 'EtherWalletKit'</code></pre>\n\n## Quick Start\n\n#### 0. Don't forget to import it\n\n``` swift\n\nimport EtherWalletKit\n\n```\n\n#### 1. Create an Ethereum Wallet\n\n```swift\n// Generate a new account with its new password.\ntry? EtherWallet.account.generateAccount(password: \"ABCDEFG\")\n\n// Import an existing account from its private key and set its new password.\ntry? EtherWallet.account.importAccount(privateKey: \"1dcbc1d6e0a4587a3a9095984cf051a1bc6ed975f15380a0ac97f01c0c045062, password: \"ABCDEFG\")\n```\n\nNote: ```password``` will be encrypted and saved to the device and it will be required to access the wallet.\n\n#### 2. Get balance\n\n```swift\n// Get balance of Ether\nEtherWallet.balance.etherBalance { balance in\n    print(balance)\n}\n\n// Get balance of a token\nEtherWallet.balance.tokenBalance(contractAddress: \"0xd26114cd6EE289AccF82350c8d8487fedB8A0C07\") { balance in\n    print(balance)\n}\n```\n\n#### 3. Send\n\n```swift\n// send Ether to an address.\nEtherWallet.transaction.sendEther(to: \"0x7777787C97a35d37Db8E5afb0C92BCfd4F6480bE\", amount: \"1.5\", password: \"ABCDEFG\") { txHash in\n    print(txHash)\n}\n\n// send a token to an address.\nEtherWallet.transaction.sendToken(to: \"0x7777787C97a35d37Db8E5afb0C92BCfd4F6480bE\", contractAddress: \"0xd26114cd6EE289AccF82350c8d8487fedB8A0C07\", amount: \"20\", password: \"ABCDEFG\", decimal: 18) { txHash in\n    print(txHash)\n}\n```\n\nNote: ```password``` should be eqaul to the password of wallet created. Also you can put ```gasPrice``` as an extra parameter to set gas price for the transcation.\n\nFor full documentation, please see [THIS](./Docs/Document.md).\n\n## Notes\n\n* Nothing will be sent to a server. Everything will be worked on the local device and Ethereum Blockchain.\n* You dont need to download and sync the nodes because [Infura](https://infura.io/) is doing it for you.\n* ```password``` for wallet is equal to the password for the keystore file. Always make sure a ```password``` is long enough for security.\n\n\n## Contribution\n\n* Make sure you have a [GitHub account](https://github.com/signup/free)\n* Create a GitHub pull request for your contribution\n  * Clearly describe the issue or feature.\n* Fork the repository on GitHub\n* Create a topic branch from where you want to base your work. ([Gitflow](https://www.atlassian.com/git/tutorials/comparing-workflows/gitflow-workflow) is welcome)\n  * Please avoid working directly on the `master` branch.\n* Make sure you have added the necessary tests for your changes and make sure all tests pass.\n\n\n## License\n\nEtherWalletKit is available under the MIT license. See the [LICENSE](./LICENSE) file for more info.\n"
  },
  {
    "path": "Sources/Structure/EtherscanAPIResponse.swift",
    "content": "struct EtherscanTxAPIResponse: Decodable {\n    let message: String\n    let status: String\n    let result: [GeneralTransactionData]\n}\n\nstruct EtherscanTokenTxAPIResponse: Decodable {\n    let message: String\n    let status: String\n    let result: [TokenTransactionData]\n}\n"
  },
  {
    "path": "Sources/Structure/EthplorerAPIResponse.swift",
    "content": "struct EthplorerTokenInfoAPIResponse: Decodable {\n    let address: String\n    let name: String\n    let symbol: String\n    let decimals: String\n    let totalSupply: String\n}\n"
  },
  {
    "path": "Sources/Structure/GasStationAPIResponse.swift",
    "content": "struct GasStationAPIResponse: Decodable {\n    let safeLow: Double\n    let average: Double\n    let fastest: Double\n}\n"
  },
  {
    "path": "Sources/Structure/TransactionData.swift",
    "content": "struct TransactionData {\n    let currencyName: String\n    let currencySymbol: String\n    let amount: String\n    let timestamp: String\n    let hash: String\n    let from: String\n    let to: String\n    let isError: Bool\n}\n\nstruct TokenTransactionData: Decodable {\n    let tokenName: String\n    let tokenSymbol: String\n    let tokenDecimal: String\n    let timestamp: String\n    let hash: String\n    let from: String\n    let to: String\n    var value: String\n    let gas: String\n    let gasPrice: String\n    let contractAddress: String\n    let cumulativeGasUsed: String\n    let gasUsed: String\n    let confirmations: String\n    \n    enum CodingKeys: String, CodingKey {\n        case tokenName\n        case tokenSymbol\n        case tokenDecimal\n        case timestamp = \"timeStamp\"\n        case hash\n        case from\n        case to\n        case value\n        case gas\n        case gasPrice\n        case contractAddress\n        case cumulativeGasUsed\n        case gasUsed\n        case confirmations\n    }\n}\n\nstruct GeneralTransactionData: Decodable {\n    let timestamp: String\n    let hash: String\n    let from: String\n    let to: String\n    var value: String\n    let gas: String\n    let gasPrice: String\n    let isError: String\n    let contractAddress: String\n    let cumulativeGasUsed: String\n    let gasUsed: String\n    let confirmations: String\n    \n    enum CodingKeys: String, CodingKey {\n        case timestamp = \"timeStamp\"\n        case hash\n        case from\n        case to\n        case value\n        case gas\n        case gasPrice\n        case isError\n        case contractAddress\n        case cumulativeGasUsed\n        case gasUsed\n        case confirmations\n    }\n}\n\n"
  },
  {
    "path": "Sources/Wallet/EtherWallet+Account.swift",
    "content": "import Web3swift\nimport EthereumAddress\nimport SwiftKeychainWrapper\n\npublic protocol AccountService {\n    var hasAccount: Bool { get }\n    var address: String? { get }\n    var mnemonics: String? { get set }\n    func privateKey(password: String) throws -> String\n    func verifyPassword(_ password: String) -> Bool\n    func generateAccount(password: String) throws\n    func importAccount(privateKey: String, password: String) throws\n    func importAccount(mnemonics: String, password: String) throws\n}\n\nextension EtherWallet: AccountService {\n    public var hasAccount: Bool {\n        return (try? loadKeystore()) != nil\n    }\n    \n    public var address: String? {\n        guard let keystore = try? loadKeystore() else { return nil }\n        return keystore.getAddress()?.address\n    }\n    \n    public var mnemonics: String? {\n        get {\n            return KeychainWrapper.standard.string(forKey: mnemonicsKeystoreKey)\n        }\n        set {\n            if let newValue = newValue {\n                KeychainWrapper.standard.set(newValue, forKey: mnemonicsKeystoreKey)\n            } else {\n                KeychainWrapper.standard.removeObject(forKey: mnemonicsKeystoreKey)\n            }\n        }\n    }\n    \n    public func privateKey(password: String) throws -> String {\n        let keystore = try loadKeystore()\n        guard let address = keystore.getAddress()?.address else {\n            throw WalletError.malformedKeystore\n        }\n        guard let ethereumAddress = EthereumAddress(address) else {\n            throw  WalletError.invalidAddress\n        }\n        let privateKeyData = try keystore.UNSAFE_getPrivateKeyData(password: password, account: ethereumAddress)\n        \n        return privateKeyData.toHexString()\n    }\n    \n    public func verifyPassword(_ password: String) -> Bool {\n        return (try? privateKey(password: password)) != nil\n    }\n    \n    public func generateAccount(password: String) throws {\n        guard let mnemonics = try BIP39.generateMnemonics(bitsOfEntropy: 128) else {\n            throw WalletError.unexpectedResult\n        }\n        \n        try importAccount(mnemonics: mnemonics, password: password)\n    }\n    \n    public func importAccount(privateKey: String, password: String) throws {\n        guard let privateKeyData = Data.fromHex(privateKey) else {\n            throw WalletError.invalidKey\n        }\n        guard let keystore = try EthereumKeystoreV3(privateKey: privateKeyData, password: password) else {\n            throw WalletError.malformedKeystore\n        }\n        \n        try saveKeystore(keystore)\n        self.mnemonics = nil\n    }\n    \n    public func importAccount(mnemonics: String, password: String) throws {\n        guard let keystore = (try? BIP32Keystore(mnemonics: mnemonics, password: password)) ?? nil else {\n            throw WalletError.invalidMnemonics\n        }\n        \n        guard let address = keystore.addresses?.first else {\n            throw WalletError.malformedKeystore\n        }\n        \n        guard let privateKey = try? keystore.UNSAFE_getPrivateKeyData(password: password, account: address).toHexString() else {\n            throw WalletError.malformedKeystore\n        }\n        \n        try importAccount(privateKey: privateKey, password: password)\n        self.mnemonics = mnemonics\n    }\n    \n    private func saveKeystore(_ keystore: EthereumKeystoreV3) throws {\n        keystoreCache = keystore\n        \n        guard let userDir = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true).first else {\n            throw WalletError.invalidPath\n        }\n        guard let keystoreParams = keystore.keystoreParams else {\n            throw WalletError.malformedKeystore\n        }\n        guard let keystoreData = try? JSONEncoder().encode(keystoreParams) else {\n            throw WalletError.malformedKeystore\n        }\n        if !FileManager.default.fileExists(atPath: userDir + keystoreDirectoryName) {\n            do {\n                try FileManager.default.createDirectory(atPath: userDir + keystoreDirectoryName, withIntermediateDirectories: true, attributes: nil)\n            } catch {\n                throw WalletError.invalidPath\n            }\n        }\n        \n        FileManager.default.createFile(atPath: userDir + keystoreDirectoryName + keystoreFileName, contents: keystoreData, attributes: nil)\n        \n        setupOptionsFrom()\n    }\n    \n    func loadKeystore() throws -> EthereumKeystoreV3 {\n        if let keystore = keystoreCache {\n            return keystore\n        }\n        \n        guard let userDir = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true).first else {\n            throw WalletError.invalidPath\n        }\n        guard let keystoreManager = KeystoreManager.managerForPath(userDir + keystoreDirectoryName) else {\n            throw WalletError.malformedKeystore\n        }\n        guard let address = keystoreManager.addresses?.first else {\n            throw WalletError.malformedKeystore\n        }\n        guard let keystore = keystoreManager.walletForAddress(address) as? EthereumKeystoreV3 else {\n            throw WalletError.malformedKeystore\n        }\n        \n        keystoreCache = keystore\n        \n        return keystore\n    }\n}\n"
  },
  {
    "path": "Sources/Wallet/EtherWallet+Balance.swift",
    "content": "import Web3swift\nimport EthereumAddress\nimport BigInt\n\npublic protocol BalanceService {\n    func etherBalanceSync() throws -> String\n    func etherBalance(completion: @escaping (String?) -> ())\n    func tokenBalanceSync(contractAddress: String) throws -> String\n    func tokenBalance(contractAddress: String, completion: @escaping (String?) -> ())\n}\n\nextension EtherWallet: BalanceService {\n    public func etherBalanceSync() throws -> String {\n        guard let address = address else { throw WalletError.accountDoesNotExist }\n        guard let ethereumAddress = EthereumAddress(address) else { throw WalletError.invalidAddress }\n        \n        guard let balanceInWei = try? web3Instance.eth.getBalance(address: ethereumAddress) else {\n            throw WalletError.networkFailure\n        }\n        \n        guard let balanceInEtherUnitStr = Web3.Utils.formatToEthereumUnits(balanceInWei, toUnits: Web3.Utils.Units.eth, decimals: 8, decimalSeparator: \".\") else { throw WalletError.conversionFailure }\n        \n        return balanceInEtherUnitStr\n    }\n    \n    public func etherBalance(completion: @escaping (String?) -> ()) {\n        DispatchQueue.global().async {\n            let balance = try? self.etherBalanceSync()\n            DispatchQueue.main.async {\n                completion(balance)\n            }\n        }\n    }\n    \n    public func tokenBalanceSync(contractAddress: String) throws -> String {\n        let contractEthreumAddress = EthereumAddress(contractAddress)\n        guard let contract = web3Instance.contract(Web3.Utils.erc20ABI, at: contractEthreumAddress) else { throw\n            WalletError.invalidAddress\n        }\n        guard let address = address else { throw WalletError.accountDoesNotExist }\n        \n        let parameters = [address as AnyObject]\n        let contractMethod = contract.method(\"balanceOf\", parameters: parameters, extraData: Data(), transactionOptions: transactionOptions)\n        guard let balanceInfo = try? contractMethod?.call(transactionOptions: nil), let balance = balanceInfo?[\"0\"] as? BigUInt  else {\n            throw WalletError.networkFailure\n        }\n        \n        return \"\\(balance)\"\n    }\n    \n    public func tokenBalance(contractAddress: String, completion: @escaping (String?) -> ()) {\n        DispatchQueue.global().async {\n            let balance = try? self.tokenBalanceSync(contractAddress: contractAddress)\n            DispatchQueue.main.async {\n                completion(balance)\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "Sources/Wallet/EtherWallet+History.swift",
    "content": "import Web3swift\n\npublic protocol HistoryService {\n    \n}\n\nextension EtherWallet: HistoryService {\n    \n}\n"
  },
  {
    "path": "Sources/Wallet/EtherWallet+Info.swift",
    "content": "import Web3swift\nimport EthereumAddress\n\npublic protocol InfoService {\n    func decimalsForTokenSync(address: String) throws -> Int\n    func decimalsForToken(address: String, completion: @escaping (Int?) -> ())\n    func symbolForTokenSync(address: String) throws -> String\n    func symbolForToken(address: String, completion: @escaping (String?) -> ())\n}\n\nextension EtherWallet: InfoService {\n    public func decimalsForTokenSync(address: String) throws -> Int {\n        let contract = try erc20contract(address: address)\n        let parameters = [AnyObject]()\n        guard let decimalsInfo = try? contract.method(\"decimals\", parameters: parameters, extraData: Data(), transactionOptions: transactionOptions)?.call(transactionOptions: nil), let decimals = decimalsInfo?[\"0\"] else {\n            throw WalletError.networkFailure\n        }\n        \n        guard let result = decimals as? Int else {\n            throw WalletError.unexpectedResult\n        }\n        \n        return result\n    }\n    \n    public func decimalsForToken(address: String, completion: @escaping (Int?) -> ()) {\n        DispatchQueue.global().async {\n            let decimals = try? self.decimalsForTokenSync(address: address)\n            DispatchQueue.main.async {\n                completion(decimals)\n            }\n        }\n    }\n    \n    public func symbolForTokenSync(address: String) throws -> String {\n        let contract = try erc20contract(address: address)\n        let parameters = [AnyObject]()\n        guard let symbolInfo = try? contract.method(\"symbol\", parameters: parameters, extraData: Data(), transactionOptions: transactionOptions)?.call(transactionOptions: nil), let symbol = symbolInfo?[\"0\"] as? String else {\n            throw WalletError.networkFailure\n        }\n        \n        if symbol.rangeOfCharacter(from: CharacterSet.alphanumerics.inverted) != nil {\n            throw WalletError.unexpectedResult\n        }\n        \n        return symbol\n    }\n    \n    \n    public func symbolForToken(address: String, completion: @escaping (String?) -> ()) {\n        DispatchQueue.global().async {\n            let symbol = try? self.symbolForTokenSync(address: address)\n            DispatchQueue.main.async {\n                completion(symbol)\n            }\n        }\n    }\n    \n    private func erc20contract(address: String) throws -> web3.web3contract {\n        let contractEthreumAddress = EthereumAddress(address)\n        guard let contract = web3Instance.contract(Web3.Utils.erc20ABI, at: contractEthreumAddress) else { throw WalletError.contractFailure }\n        \n        return contract\n    }\n}\n"
  },
  {
    "path": "Sources/Wallet/EtherWallet+Transaction.swift",
    "content": "import Web3swift\nimport EthereumAddress\nimport BigInt\n\npublic protocol TransactionService {\n    func sendEtherSync(to address: String, amount: String, password: String) throws -> String\n    func sendEtherSync(to address: String, amount: String, password: String, gasPrice: String?) throws -> String\n    func sendEther(to address: String, amount: String, password: String, completion: @escaping (String?) -> ())\n    func sendEther(to address: String, amount: String, password: String, gasPrice: String?, completion: @escaping (String?) -> ())\n    func sendTokenSync(to toAddress: String, contractAddress: String, amount: String, password: String, decimal: Int) throws -> String\n    func sendTokenSync(to toAddress: String, contractAddress: String, amount: String, password: String, decimal: Int, gasPrice: String?) throws -> String\n    func sendToken(to toAddress: String, contractAddress: String, amount: String, password: String, decimal:Int, completion: @escaping (String?) -> ())\n    func sendToken(to toAddress: String, contractAddress: String, amount: String, password: String, decimal:Int, gasPrice: String?, completion: @escaping (String?) -> ())\n}\n\nextension EtherWallet: TransactionService {\n    public func sendEtherSync(to address: String, amount: String, password: String) throws -> String {\n        return try sendEtherSync(to: address, amount: amount, password: password, gasPrice: nil)\n    }\n    \n    public func sendEtherSync(to address: String, amount: String, password: String, gasPrice: String?) throws -> String {\n        guard let toAddress = EthereumAddress(address) else { throw WalletError.invalidAddress }\n        let keystore = try loadKeystore()\n        \n        let etherBalance = try etherBalanceSync()\n        guard let etherBalanceInDouble = Double(etherBalance) else { throw WalletError.conversionFailure }\n        guard let amountInDouble = Double(amount) else { throw WalletError.conversionFailure }\n        guard etherBalanceInDouble >= amountInDouble else { throw WalletError.notEnoughBalance }\n        \n        let keystoreManager = KeystoreManager([keystore])\n        web3Instance.addKeystoreManager(keystoreManager)\n        \n        if let gasPrice = gasPrice {\n            options.gasPrice = BigUInt(gasPrice)\n        }\n        options.value = Web3.Utils.parseToBigUInt(amount, units: .eth)\n        guard let contract = web3Instance.contract(Web3.Utils.coldWalletABI, at: toAddress, abiVersion: 2) else {\n            throw WalletError.contractFailure\n        }\n        contract.transactionOptions = transactionOptions\n        guard let intermediateSend = contract.method() else { throw WalletError.contractFailure }\n        guard let sendResult = try? intermediateSend.send(password: password) else { throw WalletError.networkFailure }\n        \n        return sendResult.hash\n    }\n    \n    public func sendEther(to address: String, amount: String, password: String, completion: @escaping (String?) -> ()) {\n        sendEther(to: address, amount: amount, password: password, gasPrice: nil, completion: completion)\n    }\n    \n    public func sendEther(to address: String, amount: String, password: String, gasPrice: String?, completion: @escaping (String?) -> ()) {\n        DispatchQueue.global().async {\n            let txHash = try? self.sendEtherSync(to: address, amount: amount, password: password, gasPrice: gasPrice)\n            DispatchQueue.main.async {\n                completion(txHash)\n            }\n        }\n    }\n    \n    public func sendTokenSync(to toAddress: String, contractAddress: String, amount: String, password: String, decimal: Int) throws -> String {\n        return try sendTokenSync(to: toAddress, contractAddress: contractAddress, amount: amount, password: password, decimal: decimal, gasPrice: nil)\n    }\n    \n    public func sendTokenSync(to toAddress: String, contractAddress: String, amount: String, password: String, decimal: Int, gasPrice: String?) throws -> String {\n        guard let tokenAddress = EthereumAddress(contractAddress) else { throw WalletError.invalidAddress }\n        guard let fromAddress = address else { throw WalletError.accountDoesNotExist }\n        guard let fromEthereumAddress = EthereumAddress(fromAddress) else { throw WalletError.invalidAddress }\n        guard let toEthereumAddress = EthereumAddress(toAddress) else { throw WalletError.invalidAddress }\n        \n        let keystore = try loadKeystore()\n        let keystoreManager = KeystoreManager([keystore])\n        web3Instance.addKeystoreManager(keystoreManager)\n        \n        var options = Web3Options.defaultOptions()\n        options.from = fromEthereumAddress\n        \n        if let gasPrice = gasPrice {\n            options.gasPrice = BigUInt(gasPrice)\n        }\n        options.gasLimit = BigUInt(defaultGasLimitForTokenTransfer)\n        \n        guard let tokenAmount = Web3.Utils.parseToBigUInt(amount, decimals: decimal) else { throw WalletError.conversionFailure }\n        let parameters = [toEthereumAddress, tokenAmount] as [AnyObject]\n        guard let contract = web3Instance.contract(Web3.Utils.erc20ABI, at: tokenAddress, abiVersion: 2) else { throw WalletError.contractFailure }\n        guard let contractMethod = contract.method(\"transfer\", parameters: parameters, extraData: Data(), transactionOptions: transactionOptions) else { throw WalletError.contractFailure }\n        \n        var newTransactionOptions = transactionOptions\n        newTransactionOptions.callOnBlock = .latest\n        \n        guard let contractCall = try? contractMethod.send(password: password, transactionOptions: newTransactionOptions) else {\n            throw WalletError.networkFailure\n        }\n        \n        return contractCall.hash\n    }\n    \n    public func sendToken(to toAddress: String, contractAddress: String, amount: String, password: String, decimal: Int, completion: @escaping (String?) -> ()) {\n        sendToken(to: toAddress, contractAddress: contractAddress, amount: amount, password: password, decimal: decimal, gasPrice: nil, completion: completion)\n    }\n    \n    public func sendToken(to toAddress: String, contractAddress: String, amount: String, password: String, decimal:Int, gasPrice: String?, completion: @escaping (String?) -> ()) {\n        DispatchQueue.global().async {\n            let txHash = try? self.sendTokenSync(to: toAddress, contractAddress: contractAddress, amount: amount, password: password, decimal: decimal, gasPrice: gasPrice)\n            DispatchQueue.main.async {\n                completion(txHash)\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "Sources/Wallet/EtherWallet+Util.swift",
    "content": "import Web3swift\n\npublic protocol UtilService {\n    \n}\n\nextension EtherWallet: UtilService {\n    \n}\n"
  },
  {
    "path": "Sources/Wallet/EtherWallet.swift",
    "content": "import Web3swift\nimport EthereumAddress\nimport BigInt\n\npublic class EtherWallet {\n    private static let shared = EtherWallet()\n    public static let account: AccountService = EtherWallet.shared\n    public static let balance: BalanceService = EtherWallet.shared\n    public static let info: InfoService = EtherWallet.shared\n    public static let transaction: TransactionService = EtherWallet.shared\n    public static let util: UtilService = EtherWallet.shared\n    \n    private let web3Main = Web3.InfuraMainnetWeb3()\n    let keystoreDirectoryName = \"/keystore\"\n    let keystoreFileName = \"/key.json\"\n    let mnemonicsKeystoreKey = \"mnemonicsKeystoreKey\"\n    let defaultGasLimitForTokenTransfer = 100000\n    \n    var options: Web3Options\n    var transactionOptions: TransactionOptions\n    var keystoreCache: EthereumKeystoreV3?\n    \n    var web3Instance: web3 {\n        return web3Main\n    }\n    \n    private init() {\n        options = Web3Options.defaultOptions()\n        options.gasLimit = BigUInt(defaultGasLimitForTokenTransfer)\n        \n        transactionOptions = TransactionOptions.defaultOptions\n        transactionOptions.gasLimit = .limited(BigUInt(defaultGasLimitForTokenTransfer))\n        \n        setupOptionsFrom()\n    }\n    \n    func setupOptionsFrom() {\n        if let address = address {\n            options.from = EthereumAddress(address)\n            transactionOptions.from = EthereumAddress(address)\n        } else {\n            options.from = nil\n            transactionOptions.from = nil\n        }\n    }\n}\n\n\n"
  },
  {
    "path": "Sources/Wallet/EtherWalletTestnets.swift",
    "content": "import Web3swift\n\npublic class EtherWalletRinkeby: EtherWallet {\n    private let web3Rinkeby = Web3.InfuraRinkebyWeb3()\n    \n    override var web3Instance: web3 {\n        return web3Rinkeby\n    }\n}\n\npublic class EtherWalletRopsten: EtherWallet {\n    private let web3Ropsten = Web3.InfuraRopstenWeb3()\n    \n    override var web3Instance: web3 {\n        return web3Ropsten\n    }\n}\n"
  },
  {
    "path": "Sources/Wallet/WalletError.swift",
    "content": "public enum WalletError: Error {\n    case accountDoesNotExist\n    case invalidPath\n    case invalidKey\n    case invalidMnemonics\n    case invalidAddress\n    case malformedKeystore\n    case networkFailure\n    case conversionFailure\n    case notEnoughBalance\n    case contractFailure\n    case unexpectedResult\n}\n"
  }
]