From 357dec26be760df6853332714c8440a317593b33 Mon Sep 17 00:00:00 2001 From: Luis Reisewitz Date: Tue, 24 Oct 2017 18:53:03 +0200 Subject: [PATCH] Add SwiftLint & Spring Cleaning (#10) --- .swiftlint.yml | 42 +++ .travis.yml | 4 + README.md | 2 +- Resources/BivrostError.swift | 16 +- Resources/Coding/BaseDecoder.swift | 52 ++-- Resources/Coding/BaseEncoder.swift | 28 +- Resources/Extensions/BigIntExtension.swift | 6 +- Resources/Extensions/DataExtension.swift | 26 +- Resources/Extensions/StringExtension.swift | 26 +- .../Generated Types/ArrayX-Generated.swift | 265 ------------------ .../Generated Types/BytesX-Generated.swift | 104 +++---- .../Generated Types/IntX-Generated.swift | 104 +++---- .../Generated Types/UIntX-Generated.swift | 104 +++---- Resources/Protocols/DynamicType.swift | 2 +- Resources/Protocols/SolidityCodable.swift | 4 +- Resources/Protocols/SolidityFunction.swift | 6 +- Resources/Protocols/StaticType.swift | 2 +- Resources/Types/Address.swift | 18 +- Resources/Types/ArrayX.swift | 9 +- Resources/Types/Bool.swift | 10 +- Resources/Types/Bytes.swift | 14 +- Resources/Types/BytesX.swift | 13 +- Resources/Types/Function.swift | 8 +- Resources/Types/IntX.swift | 11 +- Resources/Types/Solidity.swift | 1 + Resources/Types/String.swift | 12 +- Resources/Types/UIntX.swift | 11 +- Resources/Types/VariableArray.swift | 8 +- .../Generating/Templates/ArrayXTemplate.swift | 7 +- .../Generating/Templates/BytesXTemplate.swift | 9 +- .../Templates/ContractTemplate.swift | 7 +- .../Generating/Templates/IntXTemplate.swift | 9 +- .../Generating/Templates/UIntXTemplate.swift | 9 +- Tests/.swiftlint.yml | 9 + Tests/BivrostHelperTests/Assets.swift | 18 +- .../BivrostHelperTests/BaseDecoderSpec.swift | 46 +-- .../SolidityTypesSpec.swift | 95 ++++--- Tests/BivrostKitTests/Assets.swift | 18 +- .../BivrostKitTests/ContractParserSpec.swift | 8 +- .../ContractTemplateModelSpec.swift | 11 +- .../ElementJsonParserSpec.swift | 63 ++--- .../BivrostKitTests/ParameterParserSpec.swift | 22 +- 42 files changed, 462 insertions(+), 777 deletions(-) create mode 100644 .swiftlint.yml create mode 100644 Tests/.swiftlint.yml diff --git a/.swiftlint.yml b/.swiftlint.yml new file mode 100644 index 0000000..23d6185 --- /dev/null +++ b/.swiftlint.yml @@ -0,0 +1,42 @@ +included: + - Source + - Tests + - Resources + +excluded: + # basically only excluded because of file_length requirement + - "Resources/Generated Types" + +disabled_rules: + - file_header + +opt_in_rules: # some rules are only opt-in + - attributes + - closure_spacing + - contains_over_first_not_nil + - empty_count + - explicit_init + - extension_access_modifier + - fatal_error_message + - file_header + - force_unwrapping + - implicit_return + - implicitly_unwrapped_optional + - literal_expression_end_indentation + - multiline_arguments + - multiline_parameters + - number_separator + - object_literal + - operator_usage_whitespace + - overridden_super_call + - prohibited_super_call + - redundant_nil_coalescing + - sorted_imports + - trailing_closure + - unneeded_parentheses_in_closure_argument + - vertical_parameter_alignment_on_call + +# Make certain rules give out an error +force_cast: error +force_try: error +force_unwrapping: error \ No newline at end of file diff --git a/.travis.yml b/.travis.yml index ddbefe3..ca7b113 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,5 +1,9 @@ osx_image: xcode9 language: objective-c +before_install: + - brew tap yonaskolb/mint https://github.com/yonaskolb/mint.git + - brew install mint script: + - mint run realm/swiftlint@0.23.1 - swift build - swift test diff --git a/README.md b/README.md index be71931..ae93b9c 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# Bivrost +# Bivrost [![Build Status](https://travis-ci.org/gnosis/bivrost-swift.svg?branch=master)](https://travis-ci.org/gnosis/bivrost-swift) 🔥 🌈 Bridge between Solidity Contracts and Swift diff --git a/Resources/BivrostError.swift b/Resources/BivrostError.swift index 5e6600b..2bee261 100644 --- a/Resources/BivrostError.swift +++ b/Resources/BivrostError.swift @@ -7,8 +7,8 @@ // // -import Foundation import BigInt +import Foundation enum BivrostError: Error { enum Decoder: Error { @@ -20,7 +20,7 @@ enum BivrostError: Error { case invalidBytesLength(hex: String) case invalidStringEncoding(data: Data) case invalidArrayLength(hex: String) - + // Creating Objects case couldNotCreateString(source: BaseDecoder.PartitionData) case couldNotCreateBytes(source: BaseDecoder.PartitionData) @@ -30,28 +30,28 @@ enum BivrostError: Error { case couldNotCreateAddress(source: BaseDecoder.PartitionData) case couldNotCreateVariableArray(source: BaseDecoder.PartitionData) } - + enum ArrayX: Error { case itemCountMismatch(expected: UInt, actual: UInt) } - + enum BytesX: Error { case byteCountMismatch(max: UInt, actual: UInt) } - + enum Address: Error { case invalidAddress(String) case invalidBigUInt(BigUInt) } - + enum Function: Error { case invalidFunctionSelector(String) } - + enum UIntX: Error { case bitWidthMismatch(max: UInt, actual: UInt) } - + enum IntX: Error { case bitWidthMismatch(max: UInt, actual: UInt) } diff --git a/Resources/Coding/BaseDecoder.swift b/Resources/Coding/BaseDecoder.swift index 663fbd6..27ef845 100644 --- a/Resources/Coding/BaseDecoder.swift +++ b/Resources/Coding/BaseDecoder.swift @@ -1,29 +1,31 @@ // // BaseDecoder.swift -// BivrostKit +// BivrostHelper // // Created by Luis Reisewitz on 10.10.17. // Copyright © 2017 Gnosis. All rights reserved. // -import Foundation + import BigInt +import Foundation struct BaseDecoder { - fileprivate static func partitionData(inHex string: SolidityCodable.EncodeFormat) -> [SolidityCodable.EncodeFormat] { - return string.splitSolidityLines() + fileprivate static func partitionData( + inHex string: SolidityCodable.EncodeFormat) -> [SolidityCodable.EncodeFormat] { + return string.splitSolidityLines() } - + static func partition(_ data: String) -> BaseDecoder.PartitionData { return BaseDecoder.PartitionData(data: data) } - + static func decodeUInt(data: SolidityCodable.EncodeFormat) throws -> BigUInt { guard let bigUInt = BigUInt(data, radix: 16) else { throw BivrostError.Decoder.invalidUInt(hex: data) } return bigUInt } - + static func decodeBool(data: SolidityCodable.EncodeFormat) throws -> Bool { guard let bigUInt = BigUInt(data, radix: 16) else { throw BivrostError.Decoder.invalidUInt(hex: data) @@ -37,16 +39,16 @@ struct BaseDecoder { throw BivrostError.Decoder.invalidBool(hex: data) } } - + static func decodeInt(data: SolidityCodable.EncodeFormat) throws -> BigInt { guard let bigInt = BigInt(twosComplementHex: data) else { throw BivrostError.Decoder.invalidInt(hex: data) } return bigInt } - + static func decodeBytesX(data: SolidityCodable.EncodeFormat, length: UInt) throws -> Data { - let hexStringSize = String._hexStringSize(forBytes: length) + let hexStringSize = String.hexStringSize(forBytes: length) let endIndex = data.index(data.startIndex, offsetBy: Int(hexStringSize)) let hexPartition = String(data[data.startIndex.. Data { let sizePart = source.consume() guard let size = Int(sizePart, radix: 16) else { throw BivrostError.Decoder.invalidBytesLength(hex: sizePart) } - + var byteHolder = Data() while byteHolder.count < size { - if let data = Data(fromHexEncodedString: source.consume()){ + if let data = Data(fromHexEncodedString: source.consume()) { byteHolder.append(data) } } return byteHolder.prefix(upTo: size) } - + static func decodeString(source: PartitionData) throws -> String { let data = try decodeBytes(source: source) guard let string = String(data: data, encoding: .utf8) else { @@ -78,8 +80,9 @@ struct BaseDecoder { } return string } - - static func decodeArray(data: SolidityCodable.EncodeFormat, decoder: (SolidityCodable.EncodeFormat) throws -> T) throws -> [T] { + + static func decodeArray(data: SolidityCodable.EncodeFormat, + decoder: (SolidityCodable.EncodeFormat) throws -> T) throws -> [T] { let lines = partitionData(inHex: data) let sizePart = lines[0] guard let size = Int(sizePart, radix: 16), @@ -91,8 +94,10 @@ struct BaseDecoder { } return try (1..(source: PartitionData, capacity: UInt, decoder: (PartitionData) throws -> T) throws -> [T] { + + static func decodeArray(source: PartitionData, + capacity: UInt, + decoder: (PartitionData) throws -> T) rethrows -> [T] { guard capacity != 0 else { return [] } @@ -113,23 +118,22 @@ extension BaseDecoder { init(_ lines: [SolidityCodable.EncodeFormat]) { self.lines = lines } - + convenience init(data: String) { let lines = BaseDecoder.partitionData(inHex: data) self.init(lines) } - + var index: Int = 0 - + func consume() -> String { let returnValue = lines[index] - index = index + 1 + index += 1 return returnValue } - + func reset() { index = 0 } } } - diff --git a/Resources/Coding/BaseEncoder.swift b/Resources/Coding/BaseEncoder.swift index 66bb1bd..1c06bcd 100644 --- a/Resources/Coding/BaseEncoder.swift +++ b/Resources/Coding/BaseEncoder.swift @@ -1,59 +1,59 @@ // // BaseEncoder.swift -// BivrostKit +// BivrostHelper // // Created by Luis Reisewitz on 10.10.17. // Copyright © 2017 Gnosis. All rights reserved. // -import Foundation import BigInt +import Foundation struct BaseEncoder { private static let solidityLocationSizeInBytes = 32 - + static func encode(_ arguments: [SolidityCodable]) -> SolidityCodable.EncodeFormat { var parts = [(data: SolidityCodable.EncodeFormat, dynamic: Bool)]() var sizeOfStaticBlockInBytes = 0 - + arguments.forEach { let encoded = $0.encode() if type(of: $0).isDynamic { parts.append((data: encoded, dynamic: true)) // Add length of location entry to static block - sizeOfStaticBlockInBytes = sizeOfStaticBlockInBytes + solidityLocationSizeInBytes + sizeOfStaticBlockInBytes += solidityLocationSizeInBytes } else { parts.append((data: encoded, dynamic: false)) // Add byte size (hexString / 2) - sizeOfStaticBlockInBytes = sizeOfStaticBlockInBytes + encoded._hexStringByteSize + sizeOfStaticBlockInBytes += encoded.hexStringByteSize } } var staticPart = "" var dynamicPart = "" parts.forEach { pair in if pair.dynamic { - let location = sizeOfStaticBlockInBytes + dynamicPart._hexStringByteSize + let location = sizeOfStaticBlockInBytes + dynamicPart.hexStringByteSize guard let locationUint = try? Solidity.UInt256(BigUInt(location)) else { fatalError("BaseEncoder calculated invalid location for dynamic part. This should not happen.") } - staticPart = staticPart + locationUint.encode() - dynamicPart = dynamicPart + pair.data + staticPart += locationUint.encode() + dynamicPart += pair.data } else { - staticPart = staticPart + pair.data + staticPart += pair.data } } - + return staticPart + dynamicPart } - + static func encode(arguments: SolidityCodable...) -> SolidityCodable.EncodeFormat { return encode(arguments) } - + static func encode(arguments: Void) -> SolidityCodable.EncodeFormat { return "" } - + static func encodeUnPadded(uint: BigUInt, bitWidth: UInt) -> SolidityCodable.EncodeFormat { guard uint.bitWidth <= bitWidth else { fatalError("\(#function) called with UInt \(uint) that is too big for bit width \(bitWidth).") diff --git a/Resources/Extensions/BigIntExtension.swift b/Resources/Extensions/BigIntExtension.swift index 8979e12..5f720de 100644 --- a/Resources/Extensions/BigIntExtension.swift +++ b/Resources/Extensions/BigIntExtension.swift @@ -6,8 +6,8 @@ // Copyright © 2017 Gnosis. All rights reserved. // -import Foundation import BigInt +import Foundation extension BigInt { /// Returns the binary data for the two's complement. @@ -19,7 +19,7 @@ extension BigInt { } return ((~magnitude) + 1).serialize() } - + init?(twosComplementHex: String) { let lowercase = twosComplementHex.lowercased() // Check if we have a negative number, else just return @@ -34,7 +34,7 @@ extension BigInt { self.init(lowercase, radix: 16) return } - + guard let uint = BigUInt(lowercase, radix: 16) else { return nil } diff --git a/Resources/Extensions/DataExtension.swift b/Resources/Extensions/DataExtension.swift index 132c71a..1299df4 100644 --- a/Resources/Extensions/DataExtension.swift +++ b/Resources/Extensions/DataExtension.swift @@ -1,6 +1,6 @@ // // DataExtension.swift -// BivrostKit +// BivrostHelper // // Created by Luis Reisewitz on 01.10.17. // Copyright © 2017 Gnosis. All rights reserved. @@ -8,31 +8,31 @@ import Foundation -// Extension taken from https://stackoverflow.com/a/40278391/972993 +// Extension taken from https://stackoverflow.com/a/40278391/972993 (with slight modifications) extension Data { init?(fromHexEncodedString string: String) { - + // Convert 0 ... 9, a ... f, A ...F to their decimal value, // return nil for all other input characters - func decodeNibble(u: UInt16) -> UInt8? { - switch(u) { + func decode(nibble: UInt16) -> UInt8? { + switch nibble { case 0x30 ... 0x39: - return UInt8(u - 0x30) + return UInt8(nibble - 0x30) case 0x41 ... 0x46: - return UInt8(u - 0x41 + 10) + return UInt8(nibble - 0x41 + 10) case 0x61 ... 0x66: - return UInt8(u - 0x61 + 10) + return UInt8(nibble - 0x61 + 10) default: return nil } } - - self.init(capacity: string.utf16.count/2) + + self.init(capacity: string.utf16.count / 2) var even = true var byte: UInt8 = 0 - for c in string.utf16 { - guard let val = decodeNibble(u: c) else { return nil } + for codePoint in string.utf16 { + guard let val = decode(nibble: codePoint) else { return nil } if even { byte = val << 4 } else { @@ -43,7 +43,7 @@ extension Data { } guard even else { return nil } } - + func hexEncodedString() -> String { return map { String(format: "%02hhx", $0) }.joined() } diff --git a/Resources/Extensions/StringExtension.swift b/Resources/Extensions/StringExtension.swift index 4f52b30..9d92f8f 100644 --- a/Resources/Extensions/StringExtension.swift +++ b/Resources/Extensions/StringExtension.swift @@ -9,7 +9,7 @@ import Foundation // MARK: - Search Helpers -extension String { +extension String { func index(startDistance distance: Int) -> String.Index { return index(startIndex, offsetBy: distance) } @@ -24,15 +24,15 @@ extension String { case left case right } - + func pad(toMultipleOf multiple: Int, character: Character, location: PadLocation) -> String { let originalLength = self.characters.count - let desiredLength = ((originalLength - 1)|(multiple - 1)) + 1 + let desiredLength = ((originalLength - 1) | (multiple - 1)) + 1 let paddingLength = desiredLength - originalLength let padding = String(repeating: character, count: paddingLength) return location == .left ? padding + self : self + padding } - + /// Pads a given string to a multiple of 64 characters. Meant to be used for /// padding a hex string to multiples of 32 bytes. /// @@ -43,44 +43,44 @@ extension String { func padToSolidity(character: Character = "0", location: PadLocation = .left) -> String { return pad(toMultipleOf: solidityLineLengthHexString, character: character, location: location) } - + func splitSolidityLines() -> [String] { return splitByLength(solidityLineLengthHexString) } - + fileprivate func splitByLength(_ length: Int) -> [String] { var result = [String]() var collectedCharacters = [Character]() collectedCharacters.reserveCapacity(length) var count = 0 - + for character in self.characters { collectedCharacters.append(character) count += 1 - if (count == length) { + if count == length { // Reached the desired length count = 0 result.append(String(collectedCharacters)) collectedCharacters.removeAll(keepingCapacity: true) } } - + // Append the remainder if !collectedCharacters.isEmpty { result.append(String(collectedCharacters)) } - + return result } } // MARK: - Hex String Calculations extension String { - var _hexStringByteSize: Int { + var hexStringByteSize: Int { return characters.count / 2 } - - static func _hexStringSize(forBytes: UInt) -> UInt { + + static func hexStringSize(forBytes: UInt) -> UInt { return forBytes * 2 } } diff --git a/Resources/Generated Types/ArrayX-Generated.swift b/Resources/Generated Types/ArrayX-Generated.swift index 5534fb1..db3e86d 100644 --- a/Resources/Generated Types/ArrayX-Generated.swift +++ b/Resources/Generated Types/ArrayX-Generated.swift @@ -1,1552 +1,1287 @@ -// -// ArrayX-Generated.swift -// BivrostKit -// -// Created by Luis Reisewitz on 11.10.17. -// - extension Solidity { - final class Array0: _DoNotUse._ArrayX { override class var length: UInt { return 0 } } - final class Array1: _DoNotUse._ArrayX { override class var length: UInt { return 1 } } - final class Array2: _DoNotUse._ArrayX { override class var length: UInt { return 2 } } - final class Array3: _DoNotUse._ArrayX { override class var length: UInt { return 3 } } - final class Array4: _DoNotUse._ArrayX { override class var length: UInt { return 4 } } - final class Array5: _DoNotUse._ArrayX { override class var length: UInt { return 5 } } - final class Array6: _DoNotUse._ArrayX { override class var length: UInt { return 6 } } - final class Array7: _DoNotUse._ArrayX { override class var length: UInt { return 7 } } - final class Array8: _DoNotUse._ArrayX { override class var length: UInt { return 8 } } - final class Array9: _DoNotUse._ArrayX { override class var length: UInt { return 9 } } - final class Array10: _DoNotUse._ArrayX { override class var length: UInt { return 10 } } - final class Array11: _DoNotUse._ArrayX { override class var length: UInt { return 11 } } - final class Array12: _DoNotUse._ArrayX { override class var length: UInt { return 12 } } - final class Array13: _DoNotUse._ArrayX { override class var length: UInt { return 13 } } - final class Array14: _DoNotUse._ArrayX { override class var length: UInt { return 14 } } - final class Array15: _DoNotUse._ArrayX { override class var length: UInt { return 15 } } - final class Array16: _DoNotUse._ArrayX { override class var length: UInt { return 16 } } - final class Array17: _DoNotUse._ArrayX { override class var length: UInt { return 17 } } - final class Array18: _DoNotUse._ArrayX { override class var length: UInt { return 18 } } - final class Array19: _DoNotUse._ArrayX { override class var length: UInt { return 19 } } - final class Array20: _DoNotUse._ArrayX { override class var length: UInt { return 20 } } - final class Array21: _DoNotUse._ArrayX { override class var length: UInt { return 21 } } - final class Array22: _DoNotUse._ArrayX { override class var length: UInt { return 22 } } - final class Array23: _DoNotUse._ArrayX { override class var length: UInt { return 23 } } - final class Array24: _DoNotUse._ArrayX { override class var length: UInt { return 24 } } - final class Array25: _DoNotUse._ArrayX { override class var length: UInt { return 25 } } - final class Array26: _DoNotUse._ArrayX { override class var length: UInt { return 26 } } - final class Array27: _DoNotUse._ArrayX { override class var length: UInt { return 27 } } - final class Array28: _DoNotUse._ArrayX { override class var length: UInt { return 28 } } - final class Array29: _DoNotUse._ArrayX { override class var length: UInt { return 29 } } - final class Array30: _DoNotUse._ArrayX { override class var length: UInt { return 30 } } - final class Array31: _DoNotUse._ArrayX { override class var length: UInt { return 31 } } - final class Array32: _DoNotUse._ArrayX { override class var length: UInt { return 32 } } - final class Array33: _DoNotUse._ArrayX { override class var length: UInt { return 33 } } - final class Array34: _DoNotUse._ArrayX { override class var length: UInt { return 34 } } - final class Array35: _DoNotUse._ArrayX { override class var length: UInt { return 35 } } - final class Array36: _DoNotUse._ArrayX { override class var length: UInt { return 36 } } - final class Array37: _DoNotUse._ArrayX { override class var length: UInt { return 37 } } - final class Array38: _DoNotUse._ArrayX { override class var length: UInt { return 38 } } - final class Array39: _DoNotUse._ArrayX { override class var length: UInt { return 39 } } - final class Array40: _DoNotUse._ArrayX { override class var length: UInt { return 40 } } - final class Array41: _DoNotUse._ArrayX { override class var length: UInt { return 41 } } - final class Array42: _DoNotUse._ArrayX { override class var length: UInt { return 42 } } - final class Array43: _DoNotUse._ArrayX { override class var length: UInt { return 43 } } - final class Array44: _DoNotUse._ArrayX { override class var length: UInt { return 44 } } - final class Array45: _DoNotUse._ArrayX { override class var length: UInt { return 45 } } - final class Array46: _DoNotUse._ArrayX { override class var length: UInt { return 46 } } - final class Array47: _DoNotUse._ArrayX { override class var length: UInt { return 47 } } - final class Array48: _DoNotUse._ArrayX { override class var length: UInt { return 48 } } - final class Array49: _DoNotUse._ArrayX { override class var length: UInt { return 49 } } - final class Array50: _DoNotUse._ArrayX { override class var length: UInt { return 50 } } - final class Array51: _DoNotUse._ArrayX { override class var length: UInt { return 51 } } - final class Array52: _DoNotUse._ArrayX { override class var length: UInt { return 52 } } - final class Array53: _DoNotUse._ArrayX { override class var length: UInt { return 53 } } - final class Array54: _DoNotUse._ArrayX { override class var length: UInt { return 54 } } - final class Array55: _DoNotUse._ArrayX { override class var length: UInt { return 55 } } - final class Array56: _DoNotUse._ArrayX { override class var length: UInt { return 56 } } - final class Array57: _DoNotUse._ArrayX { override class var length: UInt { return 57 } } - final class Array58: _DoNotUse._ArrayX { override class var length: UInt { return 58 } } - final class Array59: _DoNotUse._ArrayX { override class var length: UInt { return 59 } } - final class Array60: _DoNotUse._ArrayX { override class var length: UInt { return 60 } } - final class Array61: _DoNotUse._ArrayX { override class var length: UInt { return 61 } } - final class Array62: _DoNotUse._ArrayX { override class var length: UInt { return 62 } } - final class Array63: _DoNotUse._ArrayX { override class var length: UInt { return 63 } } - final class Array64: _DoNotUse._ArrayX { override class var length: UInt { return 64 } } - final class Array65: _DoNotUse._ArrayX { override class var length: UInt { return 65 } } - final class Array66: _DoNotUse._ArrayX { override class var length: UInt { return 66 } } - final class Array67: _DoNotUse._ArrayX { override class var length: UInt { return 67 } } - final class Array68: _DoNotUse._ArrayX { override class var length: UInt { return 68 } } - final class Array69: _DoNotUse._ArrayX { override class var length: UInt { return 69 } } - final class Array70: _DoNotUse._ArrayX { override class var length: UInt { return 70 } } - final class Array71: _DoNotUse._ArrayX { override class var length: UInt { return 71 } } - final class Array72: _DoNotUse._ArrayX { override class var length: UInt { return 72 } } - final class Array73: _DoNotUse._ArrayX { override class var length: UInt { return 73 } } - final class Array74: _DoNotUse._ArrayX { override class var length: UInt { return 74 } } - final class Array75: _DoNotUse._ArrayX { override class var length: UInt { return 75 } } - final class Array76: _DoNotUse._ArrayX { override class var length: UInt { return 76 } } - final class Array77: _DoNotUse._ArrayX { override class var length: UInt { return 77 } } - final class Array78: _DoNotUse._ArrayX { override class var length: UInt { return 78 } } - final class Array79: _DoNotUse._ArrayX { override class var length: UInt { return 79 } } - final class Array80: _DoNotUse._ArrayX { override class var length: UInt { return 80 } } - final class Array81: _DoNotUse._ArrayX { override class var length: UInt { return 81 } } - final class Array82: _DoNotUse._ArrayX { override class var length: UInt { return 82 } } - final class Array83: _DoNotUse._ArrayX { override class var length: UInt { return 83 } } - final class Array84: _DoNotUse._ArrayX { override class var length: UInt { return 84 } } - final class Array85: _DoNotUse._ArrayX { override class var length: UInt { return 85 } } - final class Array86: _DoNotUse._ArrayX { override class var length: UInt { return 86 } } - final class Array87: _DoNotUse._ArrayX { override class var length: UInt { return 87 } } - final class Array88: _DoNotUse._ArrayX { override class var length: UInt { return 88 } } - final class Array89: _DoNotUse._ArrayX { override class var length: UInt { return 89 } } - final class Array90: _DoNotUse._ArrayX { override class var length: UInt { return 90 } } - final class Array91: _DoNotUse._ArrayX { override class var length: UInt { return 91 } } - final class Array92: _DoNotUse._ArrayX { override class var length: UInt { return 92 } } - final class Array93: _DoNotUse._ArrayX { override class var length: UInt { return 93 } } - final class Array94: _DoNotUse._ArrayX { override class var length: UInt { return 94 } } - final class Array95: _DoNotUse._ArrayX { override class var length: UInt { return 95 } } - final class Array96: _DoNotUse._ArrayX { override class var length: UInt { return 96 } } - final class Array97: _DoNotUse._ArrayX { override class var length: UInt { return 97 } } - final class Array98: _DoNotUse._ArrayX { override class var length: UInt { return 98 } } - final class Array99: _DoNotUse._ArrayX { override class var length: UInt { return 99 } } - final class Array100: _DoNotUse._ArrayX { override class var length: UInt { return 100 } } - final class Array101: _DoNotUse._ArrayX { override class var length: UInt { return 101 } } - final class Array102: _DoNotUse._ArrayX { override class var length: UInt { return 102 } } - final class Array103: _DoNotUse._ArrayX { override class var length: UInt { return 103 } } - final class Array104: _DoNotUse._ArrayX { override class var length: UInt { return 104 } } - final class Array105: _DoNotUse._ArrayX { override class var length: UInt { return 105 } } - final class Array106: _DoNotUse._ArrayX { override class var length: UInt { return 106 } } - final class Array107: _DoNotUse._ArrayX { override class var length: UInt { return 107 } } - final class Array108: _DoNotUse._ArrayX { override class var length: UInt { return 108 } } - final class Array109: _DoNotUse._ArrayX { override class var length: UInt { return 109 } } - final class Array110: _DoNotUse._ArrayX { override class var length: UInt { return 110 } } - final class Array111: _DoNotUse._ArrayX { override class var length: UInt { return 111 } } - final class Array112: _DoNotUse._ArrayX { override class var length: UInt { return 112 } } - final class Array113: _DoNotUse._ArrayX { override class var length: UInt { return 113 } } - final class Array114: _DoNotUse._ArrayX { override class var length: UInt { return 114 } } - final class Array115: _DoNotUse._ArrayX { override class var length: UInt { return 115 } } - final class Array116: _DoNotUse._ArrayX { override class var length: UInt { return 116 } } - final class Array117: _DoNotUse._ArrayX { override class var length: UInt { return 117 } } - final class Array118: _DoNotUse._ArrayX { override class var length: UInt { return 118 } } - final class Array119: _DoNotUse._ArrayX { override class var length: UInt { return 119 } } - final class Array120: _DoNotUse._ArrayX { override class var length: UInt { return 120 } } - final class Array121: _DoNotUse._ArrayX { override class var length: UInt { return 121 } } - final class Array122: _DoNotUse._ArrayX { override class var length: UInt { return 122 } } - final class Array123: _DoNotUse._ArrayX { override class var length: UInt { return 123 } } - final class Array124: _DoNotUse._ArrayX { override class var length: UInt { return 124 } } - final class Array125: _DoNotUse._ArrayX { override class var length: UInt { return 125 } } - final class Array126: _DoNotUse._ArrayX { override class var length: UInt { return 126 } } - final class Array127: _DoNotUse._ArrayX { override class var length: UInt { return 127 } } - final class Array128: _DoNotUse._ArrayX { override class var length: UInt { return 128 } } - final class Array129: _DoNotUse._ArrayX { override class var length: UInt { return 129 } } - final class Array130: _DoNotUse._ArrayX { override class var length: UInt { return 130 } } - final class Array131: _DoNotUse._ArrayX { override class var length: UInt { return 131 } } - final class Array132: _DoNotUse._ArrayX { override class var length: UInt { return 132 } } - final class Array133: _DoNotUse._ArrayX { override class var length: UInt { return 133 } } - final class Array134: _DoNotUse._ArrayX { override class var length: UInt { return 134 } } - final class Array135: _DoNotUse._ArrayX { override class var length: UInt { return 135 } } - final class Array136: _DoNotUse._ArrayX { override class var length: UInt { return 136 } } - final class Array137: _DoNotUse._ArrayX { override class var length: UInt { return 137 } } - final class Array138: _DoNotUse._ArrayX { override class var length: UInt { return 138 } } - final class Array139: _DoNotUse._ArrayX { override class var length: UInt { return 139 } } - final class Array140: _DoNotUse._ArrayX { override class var length: UInt { return 140 } } - final class Array141: _DoNotUse._ArrayX { override class var length: UInt { return 141 } } - final class Array142: _DoNotUse._ArrayX { override class var length: UInt { return 142 } } - final class Array143: _DoNotUse._ArrayX { override class var length: UInt { return 143 } } - final class Array144: _DoNotUse._ArrayX { override class var length: UInt { return 144 } } - final class Array145: _DoNotUse._ArrayX { override class var length: UInt { return 145 } } - final class Array146: _DoNotUse._ArrayX { override class var length: UInt { return 146 } } - final class Array147: _DoNotUse._ArrayX { override class var length: UInt { return 147 } } - final class Array148: _DoNotUse._ArrayX { override class var length: UInt { return 148 } } - final class Array149: _DoNotUse._ArrayX { override class var length: UInt { return 149 } } - final class Array150: _DoNotUse._ArrayX { override class var length: UInt { return 150 } } - final class Array151: _DoNotUse._ArrayX { override class var length: UInt { return 151 } } - final class Array152: _DoNotUse._ArrayX { override class var length: UInt { return 152 } } - final class Array153: _DoNotUse._ArrayX { override class var length: UInt { return 153 } } - final class Array154: _DoNotUse._ArrayX { override class var length: UInt { return 154 } } - final class Array155: _DoNotUse._ArrayX { override class var length: UInt { return 155 } } - final class Array156: _DoNotUse._ArrayX { override class var length: UInt { return 156 } } - final class Array157: _DoNotUse._ArrayX { override class var length: UInt { return 157 } } - final class Array158: _DoNotUse._ArrayX { override class var length: UInt { return 158 } } - final class Array159: _DoNotUse._ArrayX { override class var length: UInt { return 159 } } - final class Array160: _DoNotUse._ArrayX { override class var length: UInt { return 160 } } - final class Array161: _DoNotUse._ArrayX { override class var length: UInt { return 161 } } - final class Array162: _DoNotUse._ArrayX { override class var length: UInt { return 162 } } - final class Array163: _DoNotUse._ArrayX { override class var length: UInt { return 163 } } - final class Array164: _DoNotUse._ArrayX { override class var length: UInt { return 164 } } - final class Array165: _DoNotUse._ArrayX { override class var length: UInt { return 165 } } - final class Array166: _DoNotUse._ArrayX { override class var length: UInt { return 166 } } - final class Array167: _DoNotUse._ArrayX { override class var length: UInt { return 167 } } - final class Array168: _DoNotUse._ArrayX { override class var length: UInt { return 168 } } - final class Array169: _DoNotUse._ArrayX { override class var length: UInt { return 169 } } - final class Array170: _DoNotUse._ArrayX { override class var length: UInt { return 170 } } - final class Array171: _DoNotUse._ArrayX { override class var length: UInt { return 171 } } - final class Array172: _DoNotUse._ArrayX { override class var length: UInt { return 172 } } - final class Array173: _DoNotUse._ArrayX { override class var length: UInt { return 173 } } - final class Array174: _DoNotUse._ArrayX { override class var length: UInt { return 174 } } - final class Array175: _DoNotUse._ArrayX { override class var length: UInt { return 175 } } - final class Array176: _DoNotUse._ArrayX { override class var length: UInt { return 176 } } - final class Array177: _DoNotUse._ArrayX { override class var length: UInt { return 177 } } - final class Array178: _DoNotUse._ArrayX { override class var length: UInt { return 178 } } - final class Array179: _DoNotUse._ArrayX { override class var length: UInt { return 179 } } - final class Array180: _DoNotUse._ArrayX { override class var length: UInt { return 180 } } - final class Array181: _DoNotUse._ArrayX { override class var length: UInt { return 181 } } - final class Array182: _DoNotUse._ArrayX { override class var length: UInt { return 182 } } - final class Array183: _DoNotUse._ArrayX { override class var length: UInt { return 183 } } - final class Array184: _DoNotUse._ArrayX { override class var length: UInt { return 184 } } - final class Array185: _DoNotUse._ArrayX { override class var length: UInt { return 185 } } - final class Array186: _DoNotUse._ArrayX { override class var length: UInt { return 186 } } - final class Array187: _DoNotUse._ArrayX { override class var length: UInt { return 187 } } - final class Array188: _DoNotUse._ArrayX { override class var length: UInt { return 188 } } - final class Array189: _DoNotUse._ArrayX { override class var length: UInt { return 189 } } - final class Array190: _DoNotUse._ArrayX { override class var length: UInt { return 190 } } - final class Array191: _DoNotUse._ArrayX { override class var length: UInt { return 191 } } - final class Array192: _DoNotUse._ArrayX { override class var length: UInt { return 192 } } - final class Array193: _DoNotUse._ArrayX { override class var length: UInt { return 193 } } - final class Array194: _DoNotUse._ArrayX { override class var length: UInt { return 194 } } - final class Array195: _DoNotUse._ArrayX { override class var length: UInt { return 195 } } - final class Array196: _DoNotUse._ArrayX { override class var length: UInt { return 196 } } - final class Array197: _DoNotUse._ArrayX { override class var length: UInt { return 197 } } - final class Array198: _DoNotUse._ArrayX { override class var length: UInt { return 198 } } - final class Array199: _DoNotUse._ArrayX { override class var length: UInt { return 199 } } - final class Array200: _DoNotUse._ArrayX { override class var length: UInt { return 200 } } - final class Array201: _DoNotUse._ArrayX { override class var length: UInt { return 201 } } - final class Array202: _DoNotUse._ArrayX { override class var length: UInt { return 202 } } - final class Array203: _DoNotUse._ArrayX { override class var length: UInt { return 203 } } - final class Array204: _DoNotUse._ArrayX { override class var length: UInt { return 204 } } - final class Array205: _DoNotUse._ArrayX { override class var length: UInt { return 205 } } - final class Array206: _DoNotUse._ArrayX { override class var length: UInt { return 206 } } - final class Array207: _DoNotUse._ArrayX { override class var length: UInt { return 207 } } - final class Array208: _DoNotUse._ArrayX { override class var length: UInt { return 208 } } - final class Array209: _DoNotUse._ArrayX { override class var length: UInt { return 209 } } - final class Array210: _DoNotUse._ArrayX { override class var length: UInt { return 210 } } - final class Array211: _DoNotUse._ArrayX { override class var length: UInt { return 211 } } - final class Array212: _DoNotUse._ArrayX { override class var length: UInt { return 212 } } - final class Array213: _DoNotUse._ArrayX { override class var length: UInt { return 213 } } - final class Array214: _DoNotUse._ArrayX { override class var length: UInt { return 214 } } - final class Array215: _DoNotUse._ArrayX { override class var length: UInt { return 215 } } - final class Array216: _DoNotUse._ArrayX { override class var length: UInt { return 216 } } - final class Array217: _DoNotUse._ArrayX { override class var length: UInt { return 217 } } - final class Array218: _DoNotUse._ArrayX { override class var length: UInt { return 218 } } - final class Array219: _DoNotUse._ArrayX { override class var length: UInt { return 219 } } - final class Array220: _DoNotUse._ArrayX { override class var length: UInt { return 220 } } - final class Array221: _DoNotUse._ArrayX { override class var length: UInt { return 221 } } - final class Array222: _DoNotUse._ArrayX { override class var length: UInt { return 222 } } - final class Array223: _DoNotUse._ArrayX { override class var length: UInt { return 223 } } - final class Array224: _DoNotUse._ArrayX { override class var length: UInt { return 224 } } - final class Array225: _DoNotUse._ArrayX { override class var length: UInt { return 225 } } - final class Array226: _DoNotUse._ArrayX { override class var length: UInt { return 226 } } - final class Array227: _DoNotUse._ArrayX { override class var length: UInt { return 227 } } - final class Array228: _DoNotUse._ArrayX { override class var length: UInt { return 228 } } - final class Array229: _DoNotUse._ArrayX { override class var length: UInt { return 229 } } - final class Array230: _DoNotUse._ArrayX { override class var length: UInt { return 230 } } - final class Array231: _DoNotUse._ArrayX { override class var length: UInt { return 231 } } - final class Array232: _DoNotUse._ArrayX { override class var length: UInt { return 232 } } - final class Array233: _DoNotUse._ArrayX { override class var length: UInt { return 233 } } - final class Array234: _DoNotUse._ArrayX { override class var length: UInt { return 234 } } - final class Array235: _DoNotUse._ArrayX { override class var length: UInt { return 235 } } - final class Array236: _DoNotUse._ArrayX { override class var length: UInt { return 236 } } - final class Array237: _DoNotUse._ArrayX { override class var length: UInt { return 237 } } - final class Array238: _DoNotUse._ArrayX { override class var length: UInt { return 238 } } - final class Array239: _DoNotUse._ArrayX { override class var length: UInt { return 239 } } - final class Array240: _DoNotUse._ArrayX { override class var length: UInt { return 240 } } - final class Array241: _DoNotUse._ArrayX { override class var length: UInt { return 241 } } - final class Array242: _DoNotUse._ArrayX { override class var length: UInt { return 242 } } - final class Array243: _DoNotUse._ArrayX { override class var length: UInt { return 243 } } - final class Array244: _DoNotUse._ArrayX { override class var length: UInt { return 244 } } - final class Array245: _DoNotUse._ArrayX { override class var length: UInt { return 245 } } - final class Array246: _DoNotUse._ArrayX { override class var length: UInt { return 246 } } - final class Array247: _DoNotUse._ArrayX { override class var length: UInt { return 247 } } - final class Array248: _DoNotUse._ArrayX { override class var length: UInt { return 248 } } - final class Array249: _DoNotUse._ArrayX { override class var length: UInt { return 249 } } - final class Array250: _DoNotUse._ArrayX { override class var length: UInt { return 250 } } - final class Array251: _DoNotUse._ArrayX { override class var length: UInt { return 251 } } - final class Array252: _DoNotUse._ArrayX { override class var length: UInt { return 252 } } - final class Array253: _DoNotUse._ArrayX { override class var length: UInt { return 253 } } - final class Array254: _DoNotUse._ArrayX { override class var length: UInt { return 254 } } - final class Array255: _DoNotUse._ArrayX { override class var length: UInt { return 255 } } - final class Array256: _DoNotUse._ArrayX { override class var length: UInt { return 256 } } - } diff --git a/Resources/Generated Types/BytesX-Generated.swift b/Resources/Generated Types/BytesX-Generated.swift index 99d43cf..eedfd0b 100644 --- a/Resources/Generated Types/BytesX-Generated.swift +++ b/Resources/Generated Types/BytesX-Generated.swift @@ -1,202 +1,162 @@ -// -// BytesX-Generated.swift -// BivrostKit -// -// Created by Luis Reisewitz on 10.10.17. -// - extension Solidity { - - public final class Bytes1: _DoNotUse._BytesX { + final class Bytes1: _DoNotUse._BytesX { override class var length: UInt { return 1 } } - - public final class Bytes2: _DoNotUse._BytesX { + final class Bytes2: _DoNotUse._BytesX { override class var length: UInt { return 2 } } - - public final class Bytes3: _DoNotUse._BytesX { + final class Bytes3: _DoNotUse._BytesX { override class var length: UInt { return 3 } } - - public final class Bytes4: _DoNotUse._BytesX { + final class Bytes4: _DoNotUse._BytesX { override class var length: UInt { return 4 } } - - public final class Bytes5: _DoNotUse._BytesX { + final class Bytes5: _DoNotUse._BytesX { override class var length: UInt { return 5 } } - - public final class Bytes6: _DoNotUse._BytesX { + final class Bytes6: _DoNotUse._BytesX { override class var length: UInt { return 6 } } - - public final class Bytes7: _DoNotUse._BytesX { + final class Bytes7: _DoNotUse._BytesX { override class var length: UInt { return 7 } } - - public final class Bytes8: _DoNotUse._BytesX { + final class Bytes8: _DoNotUse._BytesX { override class var length: UInt { return 8 } } - - public final class Bytes9: _DoNotUse._BytesX { + final class Bytes9: _DoNotUse._BytesX { override class var length: UInt { return 9 } } - - public final class Bytes10: _DoNotUse._BytesX { + final class Bytes10: _DoNotUse._BytesX { override class var length: UInt { return 10 } } - - public final class Bytes11: _DoNotUse._BytesX { + final class Bytes11: _DoNotUse._BytesX { override class var length: UInt { return 11 } } - - public final class Bytes12: _DoNotUse._BytesX { + final class Bytes12: _DoNotUse._BytesX { override class var length: UInt { return 12 } } - - public final class Bytes13: _DoNotUse._BytesX { + final class Bytes13: _DoNotUse._BytesX { override class var length: UInt { return 13 } } - - public final class Bytes14: _DoNotUse._BytesX { + final class Bytes14: _DoNotUse._BytesX { override class var length: UInt { return 14 } } - - public final class Bytes15: _DoNotUse._BytesX { + final class Bytes15: _DoNotUse._BytesX { override class var length: UInt { return 15 } } - - public final class Bytes16: _DoNotUse._BytesX { + final class Bytes16: _DoNotUse._BytesX { override class var length: UInt { return 16 } } - - public final class Bytes17: _DoNotUse._BytesX { + final class Bytes17: _DoNotUse._BytesX { override class var length: UInt { return 17 } } - - public final class Bytes18: _DoNotUse._BytesX { + final class Bytes18: _DoNotUse._BytesX { override class var length: UInt { return 18 } } - - public final class Bytes19: _DoNotUse._BytesX { + final class Bytes19: _DoNotUse._BytesX { override class var length: UInt { return 19 } } - - public final class Bytes20: _DoNotUse._BytesX { + final class Bytes20: _DoNotUse._BytesX { override class var length: UInt { return 20 } } - - public final class Bytes21: _DoNotUse._BytesX { + final class Bytes21: _DoNotUse._BytesX { override class var length: UInt { return 21 } } - - public final class Bytes22: _DoNotUse._BytesX { + final class Bytes22: _DoNotUse._BytesX { override class var length: UInt { return 22 } } - - public final class Bytes23: _DoNotUse._BytesX { + final class Bytes23: _DoNotUse._BytesX { override class var length: UInt { return 23 } } - - public final class Bytes24: _DoNotUse._BytesX { + final class Bytes24: _DoNotUse._BytesX { override class var length: UInt { return 24 } } - - public final class Bytes25: _DoNotUse._BytesX { + final class Bytes25: _DoNotUse._BytesX { override class var length: UInt { return 25 } } - - public final class Bytes26: _DoNotUse._BytesX { + final class Bytes26: _DoNotUse._BytesX { override class var length: UInt { return 26 } } - - public final class Bytes27: _DoNotUse._BytesX { + final class Bytes27: _DoNotUse._BytesX { override class var length: UInt { return 27 } } - - public final class Bytes28: _DoNotUse._BytesX { + final class Bytes28: _DoNotUse._BytesX { override class var length: UInt { return 28 } } - - public final class Bytes29: _DoNotUse._BytesX { + final class Bytes29: _DoNotUse._BytesX { override class var length: UInt { return 29 } } - - public final class Bytes30: _DoNotUse._BytesX { + final class Bytes30: _DoNotUse._BytesX { override class var length: UInt { return 30 } } - - public final class Bytes31: _DoNotUse._BytesX { + final class Bytes31: _DoNotUse._BytesX { override class var length: UInt { return 31 } } - - public final class Bytes32: _DoNotUse._BytesX { + final class Bytes32: _DoNotUse._BytesX { override class var length: UInt { return 32 } } - } diff --git a/Resources/Generated Types/IntX-Generated.swift b/Resources/Generated Types/IntX-Generated.swift index ed0c0e4..0945606 100644 --- a/Resources/Generated Types/IntX-Generated.swift +++ b/Resources/Generated Types/IntX-Generated.swift @@ -1,202 +1,162 @@ -// -// IntX-Generated.swift -// BivrostKit -// -// Created by Luis Reisewitz on 10.10.17. -// - extension Solidity { - - public final class Int8: _DoNotUse._IntX { + final class Int8: _DoNotUse._IntX { override class var bitWidth: UInt { return 8 } } - - public final class Int16: _DoNotUse._IntX { + final class Int16: _DoNotUse._IntX { override class var bitWidth: UInt { return 16 } } - - public final class Int24: _DoNotUse._IntX { + final class Int24: _DoNotUse._IntX { override class var bitWidth: UInt { return 24 } } - - public final class Int32: _DoNotUse._IntX { + final class Int32: _DoNotUse._IntX { override class var bitWidth: UInt { return 32 } } - - public final class Int40: _DoNotUse._IntX { + final class Int40: _DoNotUse._IntX { override class var bitWidth: UInt { return 40 } } - - public final class Int48: _DoNotUse._IntX { + final class Int48: _DoNotUse._IntX { override class var bitWidth: UInt { return 48 } } - - public final class Int56: _DoNotUse._IntX { + final class Int56: _DoNotUse._IntX { override class var bitWidth: UInt { return 56 } } - - public final class Int64: _DoNotUse._IntX { + final class Int64: _DoNotUse._IntX { override class var bitWidth: UInt { return 64 } } - - public final class Int72: _DoNotUse._IntX { + final class Int72: _DoNotUse._IntX { override class var bitWidth: UInt { return 72 } } - - public final class Int80: _DoNotUse._IntX { + final class Int80: _DoNotUse._IntX { override class var bitWidth: UInt { return 80 } } - - public final class Int88: _DoNotUse._IntX { + final class Int88: _DoNotUse._IntX { override class var bitWidth: UInt { return 88 } } - - public final class Int96: _DoNotUse._IntX { + final class Int96: _DoNotUse._IntX { override class var bitWidth: UInt { return 96 } } - - public final class Int104: _DoNotUse._IntX { + final class Int104: _DoNotUse._IntX { override class var bitWidth: UInt { return 104 } } - - public final class Int112: _DoNotUse._IntX { + final class Int112: _DoNotUse._IntX { override class var bitWidth: UInt { return 112 } } - - public final class Int120: _DoNotUse._IntX { + final class Int120: _DoNotUse._IntX { override class var bitWidth: UInt { return 120 } } - - public final class Int128: _DoNotUse._IntX { + final class Int128: _DoNotUse._IntX { override class var bitWidth: UInt { return 128 } } - - public final class Int136: _DoNotUse._IntX { + final class Int136: _DoNotUse._IntX { override class var bitWidth: UInt { return 136 } } - - public final class Int144: _DoNotUse._IntX { + final class Int144: _DoNotUse._IntX { override class var bitWidth: UInt { return 144 } } - - public final class Int152: _DoNotUse._IntX { + final class Int152: _DoNotUse._IntX { override class var bitWidth: UInt { return 152 } } - - public final class Int160: _DoNotUse._IntX { + final class Int160: _DoNotUse._IntX { override class var bitWidth: UInt { return 160 } } - - public final class Int168: _DoNotUse._IntX { + final class Int168: _DoNotUse._IntX { override class var bitWidth: UInt { return 168 } } - - public final class Int176: _DoNotUse._IntX { + final class Int176: _DoNotUse._IntX { override class var bitWidth: UInt { return 176 } } - - public final class Int184: _DoNotUse._IntX { + final class Int184: _DoNotUse._IntX { override class var bitWidth: UInt { return 184 } } - - public final class Int192: _DoNotUse._IntX { + final class Int192: _DoNotUse._IntX { override class var bitWidth: UInt { return 192 } } - - public final class Int200: _DoNotUse._IntX { + final class Int200: _DoNotUse._IntX { override class var bitWidth: UInt { return 200 } } - - public final class Int208: _DoNotUse._IntX { + final class Int208: _DoNotUse._IntX { override class var bitWidth: UInt { return 208 } } - - public final class Int216: _DoNotUse._IntX { + final class Int216: _DoNotUse._IntX { override class var bitWidth: UInt { return 216 } } - - public final class Int224: _DoNotUse._IntX { + final class Int224: _DoNotUse._IntX { override class var bitWidth: UInt { return 224 } } - - public final class Int232: _DoNotUse._IntX { + final class Int232: _DoNotUse._IntX { override class var bitWidth: UInt { return 232 } } - - public final class Int240: _DoNotUse._IntX { + final class Int240: _DoNotUse._IntX { override class var bitWidth: UInt { return 240 } } - - public final class Int248: _DoNotUse._IntX { + final class Int248: _DoNotUse._IntX { override class var bitWidth: UInt { return 248 } } - - public final class Int256: _DoNotUse._IntX { + final class Int256: _DoNotUse._IntX { override class var bitWidth: UInt { return 256 } } - } diff --git a/Resources/Generated Types/UIntX-Generated.swift b/Resources/Generated Types/UIntX-Generated.swift index cdad7d0..e843498 100644 --- a/Resources/Generated Types/UIntX-Generated.swift +++ b/Resources/Generated Types/UIntX-Generated.swift @@ -1,202 +1,162 @@ -// -// UIntX-Generated.swift -// BivrostKit -// -// Created by Luis Reisewitz on 10.10.17. -// - extension Solidity { - - public final class UInt8: _DoNotUse._UIntX { + final class UInt8: _DoNotUse._UIntX { override class var bitWidth: UInt { return 8 } } - - public final class UInt16: _DoNotUse._UIntX { + final class UInt16: _DoNotUse._UIntX { override class var bitWidth: UInt { return 16 } } - - public final class UInt24: _DoNotUse._UIntX { + final class UInt24: _DoNotUse._UIntX { override class var bitWidth: UInt { return 24 } } - - public final class UInt32: _DoNotUse._UIntX { + final class UInt32: _DoNotUse._UIntX { override class var bitWidth: UInt { return 32 } } - - public final class UInt40: _DoNotUse._UIntX { + final class UInt40: _DoNotUse._UIntX { override class var bitWidth: UInt { return 40 } } - - public final class UInt48: _DoNotUse._UIntX { + final class UInt48: _DoNotUse._UIntX { override class var bitWidth: UInt { return 48 } } - - public final class UInt56: _DoNotUse._UIntX { + final class UInt56: _DoNotUse._UIntX { override class var bitWidth: UInt { return 56 } } - - public final class UInt64: _DoNotUse._UIntX { + final class UInt64: _DoNotUse._UIntX { override class var bitWidth: UInt { return 64 } } - - public final class UInt72: _DoNotUse._UIntX { + final class UInt72: _DoNotUse._UIntX { override class var bitWidth: UInt { return 72 } } - - public final class UInt80: _DoNotUse._UIntX { + final class UInt80: _DoNotUse._UIntX { override class var bitWidth: UInt { return 80 } } - - public final class UInt88: _DoNotUse._UIntX { + final class UInt88: _DoNotUse._UIntX { override class var bitWidth: UInt { return 88 } } - - public final class UInt96: _DoNotUse._UIntX { + final class UInt96: _DoNotUse._UIntX { override class var bitWidth: UInt { return 96 } } - - public final class UInt104: _DoNotUse._UIntX { + final class UInt104: _DoNotUse._UIntX { override class var bitWidth: UInt { return 104 } } - - public final class UInt112: _DoNotUse._UIntX { + final class UInt112: _DoNotUse._UIntX { override class var bitWidth: UInt { return 112 } } - - public final class UInt120: _DoNotUse._UIntX { + final class UInt120: _DoNotUse._UIntX { override class var bitWidth: UInt { return 120 } } - - public final class UInt128: _DoNotUse._UIntX { + final class UInt128: _DoNotUse._UIntX { override class var bitWidth: UInt { return 128 } } - - public final class UInt136: _DoNotUse._UIntX { + final class UInt136: _DoNotUse._UIntX { override class var bitWidth: UInt { return 136 } } - - public final class UInt144: _DoNotUse._UIntX { + final class UInt144: _DoNotUse._UIntX { override class var bitWidth: UInt { return 144 } } - - public final class UInt152: _DoNotUse._UIntX { + final class UInt152: _DoNotUse._UIntX { override class var bitWidth: UInt { return 152 } } - - public final class UInt160: _DoNotUse._UIntX { + final class UInt160: _DoNotUse._UIntX { override class var bitWidth: UInt { return 160 } } - - public final class UInt168: _DoNotUse._UIntX { + final class UInt168: _DoNotUse._UIntX { override class var bitWidth: UInt { return 168 } } - - public final class UInt176: _DoNotUse._UIntX { + final class UInt176: _DoNotUse._UIntX { override class var bitWidth: UInt { return 176 } } - - public final class UInt184: _DoNotUse._UIntX { + final class UInt184: _DoNotUse._UIntX { override class var bitWidth: UInt { return 184 } } - - public final class UInt192: _DoNotUse._UIntX { + final class UInt192: _DoNotUse._UIntX { override class var bitWidth: UInt { return 192 } } - - public final class UInt200: _DoNotUse._UIntX { + final class UInt200: _DoNotUse._UIntX { override class var bitWidth: UInt { return 200 } } - - public final class UInt208: _DoNotUse._UIntX { + final class UInt208: _DoNotUse._UIntX { override class var bitWidth: UInt { return 208 } } - - public final class UInt216: _DoNotUse._UIntX { + final class UInt216: _DoNotUse._UIntX { override class var bitWidth: UInt { return 216 } } - - public final class UInt224: _DoNotUse._UIntX { + final class UInt224: _DoNotUse._UIntX { override class var bitWidth: UInt { return 224 } } - - public final class UInt232: _DoNotUse._UIntX { + final class UInt232: _DoNotUse._UIntX { override class var bitWidth: UInt { return 232 } } - - public final class UInt240: _DoNotUse._UIntX { + final class UInt240: _DoNotUse._UIntX { override class var bitWidth: UInt { return 240 } } - - public final class UInt248: _DoNotUse._UIntX { + final class UInt248: _DoNotUse._UIntX { override class var bitWidth: UInt { return 248 } } - - public final class UInt256: _DoNotUse._UIntX { + final class UInt256: _DoNotUse._UIntX { override class var bitWidth: UInt { return 256 } } - } diff --git a/Resources/Protocols/DynamicType.swift b/Resources/Protocols/DynamicType.swift index a8cb0d1..bef0aa4 100644 --- a/Resources/Protocols/DynamicType.swift +++ b/Resources/Protocols/DynamicType.swift @@ -1,6 +1,6 @@ // // DynamicType.swift -// BivrostKit +// BivrostHelper // // Created by Luis Reisewitz on 10.10.17. // Copyright © 2017 Gnosis. All rights reserved. diff --git a/Resources/Protocols/SolidityCodable.swift b/Resources/Protocols/SolidityCodable.swift index bc366ef..841d362 100644 --- a/Resources/Protocols/SolidityCodable.swift +++ b/Resources/Protocols/SolidityCodable.swift @@ -1,6 +1,6 @@ // // SolidityCodable.swift -// BivrostKit +// BivrostHelper // // Created by Luis Reisewitz on 10.10.17. // Copyright © 2017 Gnosis. All rights reserved. @@ -9,7 +9,7 @@ protocol SolidityCodable { typealias EncodeFormat = String static var isDynamic: Swift.Bool { get } - + func encode() -> EncodeFormat static func decode(source: BaseDecoder.PartitionData) throws -> Self } diff --git a/Resources/Protocols/SolidityFunction.swift b/Resources/Protocols/SolidityFunction.swift index 44c8def..0f3ffd7 100644 --- a/Resources/Protocols/SolidityFunction.swift +++ b/Resources/Protocols/SolidityFunction.swift @@ -1,6 +1,6 @@ // // SolidityFunction.swift -// BivrostKit +// BivrostHelper // // Created by Luis Reisewitz on 12.10.17. // @@ -8,9 +8,9 @@ protocol SolidityFunction { associatedtype Arguments associatedtype Return - + static var methodId: String { get } - + static func encodeCall(arguments: Arguments) -> String static func decode(returnData: String) throws -> Return static func decode(argumentsData: String) throws -> Arguments diff --git a/Resources/Protocols/StaticType.swift b/Resources/Protocols/StaticType.swift index 85bdaff..f8759f8 100644 --- a/Resources/Protocols/StaticType.swift +++ b/Resources/Protocols/StaticType.swift @@ -1,6 +1,6 @@ // // StaticType.swift -// BivrostKit +// BivrostHelper // // Created by Luis Reisewitz on 10.10.17. // Copyright © 2017 Gnosis. All rights reserved. diff --git a/Resources/Types/Address.swift b/Resources/Types/Address.swift index 0eef3c4..57a0d27 100644 --- a/Resources/Types/Address.swift +++ b/Resources/Types/Address.swift @@ -8,20 +8,22 @@ import BigInt -extension Solidity { - public struct Address { +public extension Solidity { + struct Address { let value: Solidity.UInt160 /// Only used for some internal calculations, do not use otherwise. private let bigInt: BigUInt - + init(_ address: Swift.String) throws { - let hex = address.hasPrefix("0x") ? Swift.String(address[address.index(address.startIndex, offsetBy: 2)...]) : address + let hex = address.hasPrefix("0x") + ? Swift.String(address[address.index(address.startIndex, offsetBy: 2)...]) + : address guard let bigInt = BigUInt(hex, radix: 16) else { throw BivrostError.Address.invalidAddress(hex) } try self.init(bigUInt: bigInt) } - + init(bigUInt: BigUInt) throws { guard let uint = try? Solidity.UInt160(bigUInt) else { throw BivrostError.Address.invalidBigUInt(bigUInt) @@ -29,7 +31,7 @@ extension Solidity { value = uint self.bigInt = bigUInt } - + /// Returns an unpadded hex string version of the underlying number. /// We only pad to 40 characters = 20 bytes in case of an address that /// can be represented in less bytes (e.g. 0 address). @@ -50,7 +52,7 @@ extension Solidity.Address: StaticType { func encode() -> SolidityCodable.EncodeFormat { return value.encode() } - + static func decode(source: BaseDecoder.PartitionData) throws -> Solidity.Address { let uint = try BaseDecoder.decodeUInt(data: source.consume()) let address = try Solidity.Address(bigUInt: uint) @@ -59,7 +61,7 @@ extension Solidity.Address: StaticType { } extension Solidity.Address: Equatable { - public static func ==(lhs: Solidity.Address, rhs: Solidity.Address) -> Bool { + public static func == (lhs: Solidity.Address, rhs: Solidity.Address) -> Bool { return lhs.value == rhs.value } } diff --git a/Resources/Types/ArrayX.swift b/Resources/Types/ArrayX.swift index 025238d..82d18ed 100644 --- a/Resources/Types/ArrayX.swift +++ b/Resources/Types/ArrayX.swift @@ -8,12 +8,13 @@ /// Base type for fixed-length Solidity.Arrays. Do not use directly. extension _DoNotUse { + // swiftlint:disable:next type_name class _ArrayX { private let items: [T] class var length: UInt { fatalError("Not meant to be called directly.") } - + required init(_ items: [T]) throws { let expectedLength = type(of: self).length guard items.count == expectedLength else { @@ -32,11 +33,11 @@ extension _DoNotUse._ArrayX: SolidityCodable { } return T.isDynamic } - + func encode() -> SolidityCodable.EncodeFormat { return BaseEncoder.encode(items) } - + static func decode(source: BaseDecoder.PartitionData) throws -> Self { return try self.init(BaseDecoder.decodeArray(source: source, capacity: length, decoder: T.decode)) } @@ -44,7 +45,7 @@ extension _DoNotUse._ArrayX: SolidityCodable { // MARK: - Equatable extension _DoNotUse._ArrayX: Equatable { - static func ==(lhs: _DoNotUse._ArrayX, rhs: _DoNotUse._ArrayX) -> Bool { + static func == (lhs: _DoNotUse._ArrayX, rhs: _DoNotUse._ArrayX) -> Bool { guard type(of: lhs).length == type(of: lhs).length, lhs.items.count == rhs.items.count else { return false diff --git a/Resources/Types/Bool.swift b/Resources/Types/Bool.swift index a678c7f..5983039 100644 --- a/Resources/Types/Bool.swift +++ b/Resources/Types/Bool.swift @@ -8,10 +8,10 @@ import BigInt -extension Solidity { - public struct Bool { +public extension Solidity { + struct Bool { private let wrapper: UInt8 - + init(_ value: Swift.Bool) { guard let wrapper = try? UInt8(BigUInt(value ? 1 : 0)) else { fatalError("Solidity.Bool could not be created with value of \(value). This should not happen.") @@ -26,14 +26,14 @@ extension Solidity.Bool: StaticType { func encode() -> SolidityCodable.EncodeFormat { return wrapper.encode() } - + static func decode(source: BaseDecoder.PartitionData) throws -> Solidity.Bool { return try Solidity.Bool(BaseDecoder.decodeBool(data: source.consume())) } } extension Solidity.Bool: Equatable { - public static func ==(lhs: Solidity.Bool, rhs: Solidity.Bool) -> Bool { + public static func == (lhs: Solidity.Bool, rhs: Solidity.Bool) -> Bool { return lhs.wrapper == rhs.wrapper } } diff --git a/Resources/Types/Bytes.swift b/Resources/Types/Bytes.swift index 75b6247..7642128 100644 --- a/Resources/Types/Bytes.swift +++ b/Resources/Types/Bytes.swift @@ -1,19 +1,19 @@ // // Bytes.swift -// BivrostKit +// BivrostHelper // // Created by Luis Reisewitz on 27.09.17. // Copyright © 2017 Gnosis. All rights reserved. // -import Foundation import BigInt +import Foundation -extension Solidity { - public struct Bytes { +public extension Solidity { + struct Bytes { let value: Data let length: UInt256 - + init?(_ value: Data) { guard let length = try? Solidity.UInt256(BigUInt(value.count)) else { return nil @@ -32,14 +32,14 @@ extension Solidity.Bytes: DynamicType { } return bytes } - + func encode() -> SolidityCodable.EncodeFormat { return length.encode() + value.hexEncodedString().padToSolidity(location: .right) } } extension Solidity.Bytes: Equatable { - public static func ==(lhs: Solidity.Bytes, rhs: Solidity.Bytes) -> Bool { + public static func == (lhs: Solidity.Bytes, rhs: Solidity.Bytes) -> Bool { return lhs.length == rhs.length && lhs.value == rhs.value } } diff --git a/Resources/Types/BytesX.swift b/Resources/Types/BytesX.swift index 2c73f55..eb2658a 100644 --- a/Resources/Types/BytesX.swift +++ b/Resources/Types/BytesX.swift @@ -8,14 +8,15 @@ import Foundation // MARK: - _BytesX -extension _DoNotUse { - public class _BytesX { +public extension _DoNotUse { + // swiftlint:disable:next type_name + class _BytesX { class var length: UInt { fatalError("_BytesX.length needs to be overridden.") } - + let value: Data - + required public init(_ value: Data) throws { let maxBytes = type(of: self).length guard value.count <= maxBytes else { @@ -35,7 +36,7 @@ extension _DoNotUse._BytesX: StaticType { // If data is too small for 32bytes, right pad with 0 elements return value.hexEncodedString().padToSolidity(location: .right) } - + static func decode(source: BaseDecoder.PartitionData) throws -> Self { guard let bytes = try? self.init(BaseDecoder.decodeBytesX(data: source.consume(), length: length)) else { throw BivrostError.Decoder.couldNotCreateBytesX(source: source, length: length) @@ -46,7 +47,7 @@ extension _DoNotUse._BytesX: StaticType { // MARK: - Equatable extension _DoNotUse._BytesX: Equatable { - public static func ==(lhs: _DoNotUse._BytesX, rhs: _DoNotUse._BytesX) -> Bool { + public static func == (lhs: _DoNotUse._BytesX, rhs: _DoNotUse._BytesX) -> Bool { guard type(of: lhs).length == type(of: rhs).length else { return false } diff --git a/Resources/Types/Function.swift b/Resources/Types/Function.swift index 8df68d3..86045ad 100644 --- a/Resources/Types/Function.swift +++ b/Resources/Types/Function.swift @@ -10,7 +10,7 @@ extension Solidity { struct Function { let address: Address let functionSelector: Swift.String - + /// Represents a function to be called on any contract. Function selector /// has to be passed as a hex string with exactly 8 characters (4 bytes). /// Refer to https://github.com/ethereum/wiki/wiki/Ethereum-Contract-ABI#function-selector @@ -35,11 +35,11 @@ extension Solidity.Function: StaticType { func encode() -> SolidityCodable.EncodeFormat { // Address string padded to 20 bytes let addressHex = address.encodeUnpadded() - + let unPaddedString = addressHex + functionSelector return unPaddedString.padToSolidity(location: .right) } - + static func decode(source: BaseDecoder.PartitionData) throws -> Solidity.Function { let line = source.consume() // 20 bytes / 40 chars for Address as UInt160 @@ -61,7 +61,7 @@ extension Solidity.Function: StaticType { //} extension Solidity.Function: Equatable { - static func ==(lhs: Solidity.Function, rhs: Solidity.Function) -> Bool { + static func == (lhs: Solidity.Function, rhs: Solidity.Function) -> Bool { return lhs.address == rhs.address && lhs.functionSelector == rhs.functionSelector } } diff --git a/Resources/Types/IntX.swift b/Resources/Types/IntX.swift index 8d2d29d..26f7a3c 100644 --- a/Resources/Types/IntX.swift +++ b/Resources/Types/IntX.swift @@ -9,15 +9,16 @@ import BigInt // MARK: - _UIntX -extension _DoNotUse { - public class _IntX { +public extension _DoNotUse { + // swiftlint:disable:next type_name + class _IntX { /// Content of the Int let value: BigInt /// Specifies how wide this int is class var bitWidth: UInt { fatalError("_IntX.bitWidth needs to be overridden.") } - + required public init(_ int: BigInt) throws { let bits = type(of: self).bitWidth guard int.bitWidth <= bits else { @@ -43,7 +44,7 @@ extension _DoNotUse._IntX: StaticType { let padCharacter: Character = value.sign == .plus ? "0" : "F" return value.serialize().hexEncodedString().padToSolidity(character: padCharacter).lowercased() } - + static func decode(source: BaseDecoder.PartitionData) throws -> Self { guard let int = try? self.init(BaseDecoder.decodeInt(data: source.consume())) else { throw BivrostError.Decoder.couldNotCreateInt(source: source, bits: bitWidth) @@ -54,7 +55,7 @@ extension _DoNotUse._IntX: StaticType { // MARK: - Equatable extension _DoNotUse._IntX: Equatable { - public static func ==(lhs: _DoNotUse._IntX, rhs: _DoNotUse._IntX) -> Bool { + public static func == (lhs: _DoNotUse._IntX, rhs: _DoNotUse._IntX) -> Bool { guard type(of: lhs).bitWidth == type(of: rhs).bitWidth else { return false } diff --git a/Resources/Types/Solidity.swift b/Resources/Types/Solidity.swift index 82b61ca..fcaff75 100644 --- a/Resources/Types/Solidity.swift +++ b/Resources/Types/Solidity.swift @@ -11,4 +11,5 @@ public struct Solidity {} /// Struct containing all Abstract Solidity Types. Do not try to use them directly, /// instead use the subclasses defined in the `Solidity` struct. +// swiftlint:disable:next type_name public struct _DoNotUse {} diff --git a/Resources/Types/String.swift b/Resources/Types/String.swift index 577a56d..38eb89c 100644 --- a/Resources/Types/String.swift +++ b/Resources/Types/String.swift @@ -1,15 +1,15 @@ // // String.swift -// BivrostKit +// BivrostHelper // // Created by Luis Reisewitz on 28.09.17. // Copyright © 2017 Gnosis. All rights reserved. // -extension Solidity { - public struct String { +public extension Solidity { + struct String { let wrapper: Solidity.Bytes - + init?(_ value: Swift.String) { guard let data = value.data(using: .utf8), let bytes = Solidity.Bytes(data) else { @@ -28,14 +28,14 @@ extension Solidity.String: DynamicType { } return string } - + func encode() -> SolidityCodable.EncodeFormat { return wrapper.encode() } } extension Solidity.String: Equatable { - public static func ==(lhs: Solidity.String, rhs: Solidity.String) -> Bool { + public static func == (lhs: Solidity.String, rhs: Solidity.String) -> Bool { return lhs.wrapper == rhs.wrapper } } diff --git a/Resources/Types/UIntX.swift b/Resources/Types/UIntX.swift index 35bd6c1..24e7266 100644 --- a/Resources/Types/UIntX.swift +++ b/Resources/Types/UIntX.swift @@ -9,15 +9,16 @@ import BigInt // MARK: - _UIntX -extension _DoNotUse { - public class _UIntX { +public extension _DoNotUse { + // swiftlint:disable:next type_name + class _UIntX { /// Content of the UInt let value: BigUInt /// Specifies how wide this uint is class var bitWidth: UInt { fatalError("_UIntX.bitWidth needs to be overridden.") } - + required public init(_ uint: BigUInt) throws { let bits = type(of: self).bitWidth guard uint.bitWidth <= bits else { @@ -36,7 +37,7 @@ extension _DoNotUse._UIntX: StaticType { } return BaseEncoder.encodeUnPadded(uint: value, bitWidth: type(of: self).bitWidth).padToSolidity() } - + static func decode(source: BaseDecoder.PartitionData) throws -> Self { guard let uint = try? self.init(BaseDecoder.decodeUInt(data: source.consume())) else { throw BivrostError.Decoder.couldNotCreateUInt(source: source, bits: bitWidth) @@ -47,7 +48,7 @@ extension _DoNotUse._UIntX: StaticType { // MARK: - Equatable extension _DoNotUse._UIntX: Equatable { - public static func ==(lhs: _DoNotUse._UIntX, rhs: _DoNotUse._UIntX) -> Bool { + public static func == (lhs: _DoNotUse._UIntX, rhs: _DoNotUse._UIntX) -> Bool { guard type(of: lhs).bitWidth == type(of: rhs).bitWidth else { return false } diff --git a/Resources/Types/VariableArray.swift b/Resources/Types/VariableArray.swift index b3661ea..412ed99 100644 --- a/Resources/Types/VariableArray.swift +++ b/Resources/Types/VariableArray.swift @@ -1,6 +1,6 @@ // // VariableArray.swift -// BivrostKit +// BivrostHelper // // Created by Luis Reisewitz on 28.09.17. // Copyright © 2017 Gnosis. All rights reserved. @@ -12,7 +12,7 @@ extension Solidity { struct VariableArray { let items: [T] let length: Solidity.UInt256 - + init?(_ items: [T]) { guard let length = try? Solidity.UInt256(BigUInt(items.count)) else { return nil @@ -36,14 +36,14 @@ extension Solidity.VariableArray: DynamicType { } return array } - + func encode() -> SolidityCodable.EncodeFormat { return length.encode() + BaseEncoder.encode(items) } } extension Solidity.VariableArray: Equatable { - static func ==(lhs: Solidity.VariableArray, rhs: Solidity.VariableArray) -> Bool { + static func == (lhs: Solidity.VariableArray, rhs: Solidity.VariableArray) -> Bool { return lhs.length == rhs.length && lhs.items == rhs.items } } diff --git a/Sources/BivrostKit/Generating/Templates/ArrayXTemplate.swift b/Sources/BivrostKit/Generating/Templates/ArrayXTemplate.swift index 0338cf8..348506e 100644 --- a/Sources/BivrostKit/Generating/Templates/ArrayXTemplate.swift +++ b/Sources/BivrostKit/Generating/Templates/ArrayXTemplate.swift @@ -8,13 +8,14 @@ extension Templates { static let ArrayX = """ extension Solidity { - {% for length in lengths %} + {% for length in lengths %} final class Array{{ length }}: _DoNotUse._ArrayX { override class var length: UInt { return {{ length }} } } - {% endfor %} + {% endfor %} } - """ + + """ } diff --git a/Sources/BivrostKit/Generating/Templates/BytesXTemplate.swift b/Sources/BivrostKit/Generating/Templates/BytesXTemplate.swift index 1b6e0b9..059757d 100644 --- a/Sources/BivrostKit/Generating/Templates/BytesXTemplate.swift +++ b/Sources/BivrostKit/Generating/Templates/BytesXTemplate.swift @@ -8,13 +8,14 @@ extension Templates { static let BytesX = """ extension Solidity { - {% for length in lengths %} - public final class Bytes{{ length }}: _DoNotUse._BytesX { + {% for length in lengths %} + final class Bytes{{ length }}: _DoNotUse._BytesX { override class var length: UInt { return {{ length }} } } - {% endfor %} + {% endfor %} } - """ + + """ } diff --git a/Sources/BivrostKit/Generating/Templates/ContractTemplate.swift b/Sources/BivrostKit/Generating/Templates/ContractTemplate.swift index 55e3755..216fded 100644 --- a/Sources/BivrostKit/Generating/Templates/ContractTemplate.swift +++ b/Sources/BivrostKit/Generating/Templates/ContractTemplate.swift @@ -31,7 +31,8 @@ extension Templates { // Static Types & Location {% for decodedType in function.decodeReturnTypes %} {% if decodedType.isDynamic %} - source.consume() + // Ignore location for dynamic type + _ = source.consume() {% else %} let {{ decodedType.name }} = try {{ decodedType.type }}.decode(source: source) {% endif %} @@ -50,7 +51,8 @@ extension Templates { // Static Types & Location {% for decodedType in function.decodeArgumentsTypes %} {% if decodedType.isDynamic %} - source.consume() + // Ignore location for dynamic type + _ = source.consume() {% else %} let {{ decodedType.name }} = try {{ decodedType.type }}.decode(source: source) {% endif %} @@ -66,5 +68,6 @@ extension Templates { } {% endfor %} } + """ } diff --git a/Sources/BivrostKit/Generating/Templates/IntXTemplate.swift b/Sources/BivrostKit/Generating/Templates/IntXTemplate.swift index 1b1c105..77ecab8 100644 --- a/Sources/BivrostKit/Generating/Templates/IntXTemplate.swift +++ b/Sources/BivrostKit/Generating/Templates/IntXTemplate.swift @@ -8,13 +8,14 @@ extension Templates { static let IntX = """ extension Solidity { - {% for bitWidth in bitWidths %} - public final class Int{{ bitWidth }}: _DoNotUse._IntX { + {% for bitWidth in bitWidths %} + final class Int{{ bitWidth }}: _DoNotUse._IntX { override class var bitWidth: UInt { return {{ bitWidth }} } } - {% endfor %} + {% endfor %} } - """ + + """ } diff --git a/Sources/BivrostKit/Generating/Templates/UIntXTemplate.swift b/Sources/BivrostKit/Generating/Templates/UIntXTemplate.swift index f589e9d..778deb0 100644 --- a/Sources/BivrostKit/Generating/Templates/UIntXTemplate.swift +++ b/Sources/BivrostKit/Generating/Templates/UIntXTemplate.swift @@ -8,13 +8,14 @@ extension Templates { static let UIntX = """ extension Solidity { - {% for bitWidth in bitWidths %} - public final class UInt{{ bitWidth }}: _DoNotUse._UIntX { + {% for bitWidth in bitWidths %} + final class UInt{{ bitWidth }}: _DoNotUse._UIntX { override class var bitWidth: UInt { return {{ bitWidth }} } } - {% endfor %} + {% endfor %} } - """ + + """ } diff --git a/Tests/.swiftlint.yml b/Tests/.swiftlint.yml new file mode 100644 index 0000000..9df03df --- /dev/null +++ b/Tests/.swiftlint.yml @@ -0,0 +1,9 @@ +disabled_rules: + - force_try + - line_length + - type_body_length + - function_body_length + - force_cast + - file_length + - force_unwrapping + - file_header diff --git a/Tests/BivrostHelperTests/Assets.swift b/Tests/BivrostHelperTests/Assets.swift index 5753742..1a3c1c0 100644 --- a/Tests/BivrostHelperTests/Assets.swift +++ b/Tests/BivrostHelperTests/Assets.swift @@ -3306,7 +3306,7 @@ struct Assets { "updated_at": 1505131050037 } """ - + static let standardTokenJson = """ { "contract_name": "StandardToken", @@ -3486,7 +3486,7 @@ struct Assets { } """ - + /// Encoded string[6] with contents /// ["Hi", "I", "want", "to", "learn", "Solidity"] static let encodedFixedStringArray = "" + @@ -3502,37 +3502,37 @@ struct Assets { "00000000000000000000000000000000000000000000000000000000000001c0" + // Location of String "Solidity" "0000000000000000000000000000000000000000000000000000000000000200" + - + // Length of "Hi" "0000000000000000000000000000000000000000000000000000000000000002" + // Byte string of "Hi" "4869000000000000000000000000000000000000000000000000000000000000" + - + // Length of "I" "0000000000000000000000000000000000000000000000000000000000000001" + // Byte string of "I" "4900000000000000000000000000000000000000000000000000000000000000" + - + // Length of "want" "0000000000000000000000000000000000000000000000000000000000000004" + // Byte string of "Want" "77616e7400000000000000000000000000000000000000000000000000000000" + - + // Length of "to" "0000000000000000000000000000000000000000000000000000000000000002" + // Byte string of "to" "746f000000000000000000000000000000000000000000000000000000000000" + - + // Length of "learn" "0000000000000000000000000000000000000000000000000000000000000005" + // Byte string of "learn" "6c6561726e000000000000000000000000000000000000000000000000000000" + - + // Length of "Solidity" "0000000000000000000000000000000000000000000000000000000000000008" + // Byte string of "Solidity" "536f6c6964697479000000000000000000000000000000000000000000000000" - + /// Encoded string[] with contents /// ["Hi", "I", "want", "to", "learn", "Solidity"] static let encodedVariableStringArray = "" + diff --git a/Tests/BivrostHelperTests/BaseDecoderSpec.swift b/Tests/BivrostHelperTests/BaseDecoderSpec.swift index f6f2dd3..14d237a 100644 --- a/Tests/BivrostHelperTests/BaseDecoderSpec.swift +++ b/Tests/BivrostHelperTests/BaseDecoderSpec.swift @@ -6,60 +6,60 @@ // Copyright © 2017 Gnosis. All rights reserved. // -import Quick -import Nimble -@testable import BivrostHelper import BigInt +@testable import BivrostHelper import Foundation +import Nimble +import Quick class BaseDecoderSpec: QuickSpec { override func spec() { describe("BaseDecoder") { it("should decode UInts correctly") { expect(try? BaseDecoder.decodeUInt(data: "0000000000000000000000000000000000000000000000000000000000000000")) == BigUInt(0) - expect(try? BaseDecoder.decodeUInt(data:"0000000000000000000000000000000000000000000000000000000000000001")) == BigUInt(1) + expect(try? BaseDecoder.decodeUInt(data: "0000000000000000000000000000000000000000000000000000000000000001")) == BigUInt(1) //Max unsigned integer - expect(try? BaseDecoder.decodeUInt(data:"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff")) == BigUInt("115792089237316195423570985008687907853269984665640564039457584007913129639935") + expect(try? BaseDecoder.decodeUInt(data: "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff")) == BigUInt("115792089237316195423570985008687907853269984665640564039457584007913129639935") } - + it("should decode Bools correctly") { expect(try? BaseDecoder.decodeBool(data: "0000000000000000000000000000000000000000000000000000000000000000")) == false - expect(try? BaseDecoder.decodeBool(data:"0000000000000000000000000000000000000000000000000000000000000001")) == true + expect(try? BaseDecoder.decodeBool(data: "0000000000000000000000000000000000000000000000000000000000000001")) == true } - + it("should decode Ints correctly") { expect(try? BaseDecoder.decodeInt(data: "0000000000000000000000000000000000000000000000000000000000000000")) == BigInt(0) - expect(try? BaseDecoder.decodeInt(data:"0000000000000000000000000000000000000000000000000000000000000001")) == BigInt(1) - expect(try? BaseDecoder.decodeInt(data:"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff")) == BigInt(-1) - expect(try? BaseDecoder.decodeInt(data:"000000000000000000000000000000000000000000000000000000000000007f")) == BigInt(127) - expect(try? BaseDecoder.decodeInt(data:"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80")) == BigInt(-128) + expect(try? BaseDecoder.decodeInt(data: "0000000000000000000000000000000000000000000000000000000000000001")) == BigInt(1) + expect(try? BaseDecoder.decodeInt(data: "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff")) == BigInt(-1) + expect(try? BaseDecoder.decodeInt(data: "000000000000000000000000000000000000000000000000000000000000007f")) == BigInt(127) + expect(try? BaseDecoder.decodeInt(data: "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80")) == BigInt(-128) } - + it("should decode BytesX correctly") { expect(try? BaseDecoder.decodeBytesX(data: "0000000000000000000000000000000000000000000000000000000000000000", length: 1)) == Data(bytes: [0]) expect(try? BaseDecoder.decodeBytesX(data: "0001000000000000000000000000000000000000000000000000000000000000", length: 2)) == Data(bytes: [0, 1]) expect(try? BaseDecoder.decodeBytesX(data: "0001020000000000000000000000000000000000000000000000000000000000", length: 3)) == Data(bytes: [0, 1, 2]) expect(try? BaseDecoder.decodeBytesX(data: "6461766500000000000000000000000000000000000000000000000000000000", length: 4)) == "dave".data(using: .ascii)! } - + it("should decode Bytes correctly") { - expect(try? BaseDecoder.decodeBytes(source: BaseDecoder.PartitionData(data: "000000000000000000000000000000000000000000000000000000000000000d48656c6c6f2c20776f726c642100000000000000000000000000000000000000"))) == "Hello, world!".data(using: .ascii)! - expect(try? BaseDecoder.decodeBytes(source: BaseDecoder.PartitionData(data: "00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000"))) == Data(bytes: [0]) - expect(try? BaseDecoder.decodeBytes(source: BaseDecoder.PartitionData(data: "00000000000000000000000000000000000000000000000000000000000000020001000000000000000000000000000000000000000000000000000000000000"))) == Data(bytes: [0, 1]) - expect(try? BaseDecoder.decodeBytes(source: BaseDecoder.PartitionData(data: "00000000000000000000000000000000000000000000000000000000000000030001020000000000000000000000000000000000000000000000000000000000"))) == Data(bytes: [0, 1, 2]) - expect(try? BaseDecoder.decodeBytes(source: BaseDecoder.PartitionData(data: "00000000000000000000000000000000000000000000000000000000000000046461766500000000000000000000000000000000000000000000000000000000"))) == "dave".data(using: .ascii)! + expect(try? BaseDecoder.decodeBytes(source: BaseDecoder.PartitionData(data: "000000000000000000000000000000000000000000000000000000000000000d48656c6c6f2c20776f726c642100000000000000000000000000000000000000"))) == "Hello, world!".data(using: .ascii)! + expect(try? BaseDecoder.decodeBytes(source: BaseDecoder.PartitionData(data: "00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000"))) == Data(bytes: [0]) + expect(try? BaseDecoder.decodeBytes(source: BaseDecoder.PartitionData(data: "00000000000000000000000000000000000000000000000000000000000000020001000000000000000000000000000000000000000000000000000000000000"))) == Data(bytes: [0, 1]) + expect(try? BaseDecoder.decodeBytes(source: BaseDecoder.PartitionData(data: "00000000000000000000000000000000000000000000000000000000000000030001020000000000000000000000000000000000000000000000000000000000"))) == Data(bytes: [0, 1, 2]) + expect(try? BaseDecoder.decodeBytes(source: BaseDecoder.PartitionData(data: "00000000000000000000000000000000000000000000000000000000000000046461766500000000000000000000000000000000000000000000000000000000"))) == "dave".data(using: .ascii)! } - + it("should decode Strings correctly") { - expect(try? BaseDecoder.decodeString(source: BaseDecoder.PartitionData(data: "000000000000000000000000000000000000000000000000000000000000000d48656c6c6f2c20776f726c642100000000000000000000000000000000000000"))) == "Hello, world!" + expect(try? BaseDecoder.decodeString(source: BaseDecoder.PartitionData(data: "000000000000000000000000000000000000000000000000000000000000000d48656c6c6f2c20776f726c642100000000000000000000000000000000000000"))) == "Hello, world!" } - + it("should decode Static Arrays correctly") { // Test normal decoding expect(try? BaseDecoder.decodeArray(data: "000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000004560000000000000000000000000000000000000000000000000000000000000789", decoder: BaseDecoder.decodeUInt)) == [BigUInt("456", radix: 16)!, BigUInt("789", radix: 16)!] expect(try? BaseDecoder.decodeArray(data: "000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000", decoder: BaseDecoder.decodeBool)) == [true, false] expect(try? BaseDecoder.decodeArray(data: "0000000000000000000000000000000000000000000000000000000000000000", decoder: BaseDecoder.decodeBool)) == [] - + // Test invalid array decoding (size too big) expect { try BaseDecoder.decodeArray(data: "000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000000004560000000000000000000000000000000000000000000000000000000000000789", decoder: BaseDecoder.decodeUInt) }.to(throwError()) } diff --git a/Tests/BivrostHelperTests/SolidityTypesSpec.swift b/Tests/BivrostHelperTests/SolidityTypesSpec.swift index 3c8524d..2bd9276 100644 --- a/Tests/BivrostHelperTests/SolidityTypesSpec.swift +++ b/Tests/BivrostHelperTests/SolidityTypesSpec.swift @@ -6,12 +6,11 @@ // Copyright © 2017 Gnosis. All rights reserved. // - -import Quick -import Nimble -@testable import BivrostHelper import BigInt +@testable import BivrostHelper import Foundation +import Nimble +import Quick class SolidityTypesSpec: QuickSpec { override func spec() { @@ -22,24 +21,24 @@ class SolidityTypesSpec: QuickSpec { expect((try? Solidity.Address("0xFF"))).toNot(beNil()) expect(try? Solidity.Address("FF")).toNot(beNil()) } - + it("should return exactly 40 chars when encoding unpadded") { expect((try? Solidity.Address("0xFF"))?.encodeUnpadded()) == "00000000000000000000000000000000000000ff" expect((try? Solidity.Address("0x0"))?.encodeUnpadded().characters.count) == 40 expect((try? Solidity.Address("0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"))?.encodeUnpadded()) == "ffffffffffffffffffffffffffffffffffffffff" expect((try? Solidity.Address("0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"))?.encodeUnpadded().characters.count) == 40 } - + it("should return exactly 64 chars when encoding normally") { expect((try? Solidity.Address("0xFF"))?.encode()) == "00000000000000000000000000000000000000000000000000000000000000ff" expect((try? Solidity.Address("0x0"))?.encode().characters.count) == 64 - + expect((try? Solidity.Address("0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"))?.encode()) == "000000000000000000000000ffffffffffffffffffffffffffffffffffffffff" expect((try? Solidity.Address("0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"))?.encode().characters.count) == 64 } - + it("should return nil when handling invalid address (too large)") { - + // Exactly one nibble too large (20.5 bytes) expect((try? Solidity.Address("0xfdadadafa000000000000000000fdadadafafffff"))).to(beNil()) } @@ -49,20 +48,20 @@ class SolidityTypesSpec: QuickSpec { // Random large number bigger than 2**256 expect(try? Solidity.UInt256(BigUInt("65767676766576587658679697687685765765765765765765t765765765765765765765765765765765765765765757657657657657657657657657657657657657657657657657657657657657657657657657657657657657657657658768768768768687687687876876876876876876876876876876876876876876876876876876", radix: 36)!)).to(beNil()) } - + it("should encode positive numbers correctly") { expect((try? Solidity.UInt256(BigUInt(123)))?.encode()) == "000000000000000000000000000000000000000000000000000000000000007b" expect((try? Solidity.UInt256(BigUInt(1)))?.encode()) == "0000000000000000000000000000000000000000000000000000000000000001" // Max unsigned integer expect((try? Solidity.UInt256(BigUInt("115792089237316195423570985008687907853269984665640564039457584007913129639935")!))?.encode()) == "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff" } - + it("should encode 0 correctly") { expect((try? Solidity.UInt8(BigUInt(0)))!.encode()) == "0000000000000000000000000000000000000000000000000000000000000000" expect((try? Solidity.UInt256(BigUInt(0)))!.encode()) == "0000000000000000000000000000000000000000000000000000000000000000" expect((try? Solidity.UInt160(BigUInt(0)))!.encode()) == "0000000000000000000000000000000000000000000000000000000000000000" } - + it("should decode correctly") { let expected1 = try! Solidity.UInt8(BigUInt(0)) expect { try Solidity.UInt8.decode(source: BaseDecoder.PartitionData(data: "0000000000000000000000000000000000000000000000000000000000000000")) } == expected1 @@ -73,28 +72,28 @@ class SolidityTypesSpec: QuickSpec { expect { try Solidity.UInt256.decode(source: BaseDecoder.PartitionData(data: "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff")) } == expected3 } } - + context("IntX") { it("should not be created when the given value does not fit into 256 bits") { // Random large number bigger than 2**255 expect(try? Solidity.Int256(BigInt("65767676766576587658679697687685765765765765765765765765765765765765765765765765765765765765757657657657657657657657657657657657657657657657657657657657657657657657657657657657657657657658768768768768687687687876876876876876876876876876876876876876876876876876876", radix: 36)!)).to(beNil()) } - + it("should encode negative numbers correctly") { expect((try? Solidity.Int256(BigInt(-1)))?.encode()) == "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff" } - + it("should encode positive numbers correctly") { expect((try? Solidity.Int8(BigInt(123)))?.encode()) == "000000000000000000000000000000000000000000000000000000000000007b" } - + it("should encode 0 correctly") { expect((try? Solidity.Int8(BigInt(0)))!.encode()) == "0000000000000000000000000000000000000000000000000000000000000000" expect((try? Solidity.Int160(BigInt(0)))!.encode()) == "0000000000000000000000000000000000000000000000000000000000000000" expect((try? Solidity.Int256(BigInt(0)))!.encode()) == "0000000000000000000000000000000000000000000000000000000000000000" } } - + context("BytesX") { it("should encode byte arrays correctly") { let data1 = Data([UInt8](arrayLiteral: 0)) @@ -107,7 +106,7 @@ class SolidityTypesSpec: QuickSpec { let data4 = string.data(using: .ascii)! expect { try Solidity.Bytes4(data4).encode() } == "6461766500000000000000000000000000000000000000000000000000000000" } - + it("should throw when given data is too big for the type") { let data1 = Data([UInt8](arrayLiteral: 0, 1)) expect { try Solidity.Bytes1(data1).encode() }.to(throwError(BivrostError.BytesX.byteCountMismatch(max: 1, actual: 2))) @@ -119,7 +118,7 @@ class SolidityTypesSpec: QuickSpec { let data4 = string.data(using: .ascii)! expect { try Solidity.Bytes32(data4).encode() }.to(throwError(BivrostError.BytesX.byteCountMismatch(max: 32, actual: 64))) } - + it("should correctly pad if given data is smaller than the capacity") { let data1 = Data([UInt8](arrayLiteral: 0)) expect { try Solidity.Bytes2(data1).encode() } == "0000000000000000000000000000000000000000000000000000000000000000" @@ -132,135 +131,135 @@ class SolidityTypesSpec: QuickSpec { expect { try Solidity.Bytes32(data4).encode() } == "6461766500000000000000000000000000000000000000000000000000000000" } } - + context("ArrayX") { it("should encode multiple numbers correctly") { let numbers = [-1, 123].flatMap { try? Solidity.Int256($0) } expect { try Solidity.Array2(numbers).encode() } == "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000000000000000000000000000000000000000000000007b" } - + it("should encode a string array correctly") { let strings = ["Hi", "I", "want", "to", "learn", "Solidity"] .flatMap { Solidity.String($0) } expect { try Solidity.Array6(strings).encode() } == Assets.encodedFixedStringArray } - + it("should reject mismatching item counts") { let strings = ["Hi", "I", "want", "to", "learn", "Solidity"] .flatMap { Solidity.String($0) } expect { try Solidity.Array1(strings) }.to(throwError(BivrostError.ArrayX.itemCountMismatch(expected: 1, actual: 6))) - + expect { try Solidity.Array0([Solidity.Bool(false)]) }.to(throwError(BivrostError.ArrayX.itemCountMismatch(expected: 0, actual: 1))) } } - + // MARK: Dynamic Types - + context("Bytes") { it("should encode byte sequences correctly") { let bytes1: [UInt8] = [0, 1, 2, 3, 4, 5, 255, 220, 10, 64] let data1 = Data(bytes: bytes1) let type1 = Solidity.Bytes(data1)! expect(type1.encode().uppercased()) == "000000000000000000000000000000000000000000000000000000000000000A000102030405FFDC0A4000000000000000000000000000000000000000000000" - + let data2 = "Hello, world!".data(using: .ascii) let type2 = Solidity.Bytes(data2!)! expect(type2.encode()) == "000000000000000000000000000000000000000000000000000000000000000d48656c6c6f2c20776f726c642100000000000000000000000000000000000000" - + let bytes3: [UInt8] = [0] let data3 = Data(bytes: bytes3) let type3 = Solidity.Bytes(data3)! expect(type3.encode().uppercased()) == "00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000" - + let bytes4: [UInt8] = [0, 1] let data4 = Data(bytes: bytes4) let type4 = Solidity.Bytes(data4)! expect(type4.encode().uppercased()) == "00000000000000000000000000000000000000000000000000000000000000020001000000000000000000000000000000000000000000000000000000000000" - + let bytes5: [UInt8] = [0, 1, 2] let data5 = Data(bytes: bytes5) let type5 = Solidity.Bytes(data5)! expect(type5.encode().uppercased()) == "00000000000000000000000000000000000000000000000000000000000000030001020000000000000000000000000000000000000000000000000000000000" - + let string = "dave" let data6 = string.data(using: .ascii) let type6 = Solidity.Bytes(data6!)! expect(type6.encode().uppercased()) == "00000000000000000000000000000000000000000000000000000000000000046461766500000000000000000000000000000000000000000000000000000000" } } - + context("String") { it("should encode \"dave\" correctly") { let string = "dave" let type = Solidity.String(string)! expect(type.encode().uppercased()) == "00000000000000000000000000000000000000000000000000000000000000046461766500000000000000000000000000000000000000000000000000000000" } - + it("should encode \"Hello, world!\" correctly") { let string = "Hello, world!" let type = Solidity.String(string)! expect(type.encode().uppercased()) == "000000000000000000000000000000000000000000000000000000000000000d48656c6c6f2c20776f726c642100000000000000000000000000000000000000".uppercased() } } - + context("VariableArray") { it("should encode some static types correctly") { let bytes = [0, 1, 2, 3, 4, 5, 255, 220, 10, 64].flatMap { try? Solidity.UInt8(BigUInt($0)) } let array1 = Solidity.VariableArray(bytes)! expect(array1.encode().uppercased()) == "000000000000000000000000000000000000000000000000000000000000000A00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000500000000000000000000000000000000000000000000000000000000000000FF00000000000000000000000000000000000000000000000000000000000000DC000000000000000000000000000000000000000000000000000000000000000A0000000000000000000000000000000000000000000000000000000000000040" - + let numbers = ["456", "789"].flatMap { BigUInt($0, radix: 16) }.flatMap { try? Solidity.UInt32($0) } let array2 = Solidity.VariableArray(numbers)! expect(array2.encode()) == "000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000004560000000000000000000000000000000000000000000000000000000000000789" - + let bools: [Solidity.Bool] = [Solidity.Bool(true), Solidity.Bool(false)] let array3 = Solidity.VariableArray(bools)! expect(array3.encode()) == "000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000" - + let empty = [Solidity.Bool]() let array4 = Solidity.VariableArray(empty)! expect(array4.encode()) == "0000000000000000000000000000000000000000000000000000000000000000" } - + it("should encode a string array correctly") { let strings = ["Hi", "I", "want", "to", "learn", "Solidity"] .flatMap { Solidity.String($0) } let type = Solidity.VariableArray(strings)! expect(type.encode()) == Assets.encodedVariableStringArray } - + it("should decode a string array correctly") { let strings = ["Hi", "I", "want", "to", "learn", "Solidity"] .flatMap { Solidity.String($0) } let expectedType = Solidity.VariableArray(strings)! - + let source = BaseDecoder.PartitionData(data: Assets.encodedVariableStringArray) expect { try Solidity.VariableArray.decode(source: source) } == expectedType } - + it("should decode some static types correctly") { - let uints = [0, 4, 3423, 242323, 334934, 273, 0, 127, 128, 255, 383838383833].flatMap { try? Solidity.UInt256($0) } + let uints = [0, 4, 3_423, 242_323, 334_934, 273, 0, 127, 128, 255, 383_838_383_833].flatMap { try? Solidity.UInt256($0) } let expectedType = Solidity.VariableArray(uints) expect { try Solidity.VariableArray.decode(source: BaseDecoder.PartitionData(data: "000000000000000000000000000000000000000000000000000000000000000b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000d5f000000000000000000000000000000000000000000000000000000000003b2930000000000000000000000000000000000000000000000000000000000051c5600000000000000000000000000000000000000000000000000000000000001110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000ff000000000000000000000000000000000000000000000000000000595e8ceed9")) } == expectedType - + let bytes = [0, 1, 2, 3, 4, 5, 255, 220, 10, 64].flatMap { try? Solidity.UInt8(BigUInt($0)) } let array1 = Solidity.VariableArray(bytes)! expect { try Solidity.VariableArray.decode(source: BaseDecoder.PartitionData(data: "000000000000000000000000000000000000000000000000000000000000000A00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000500000000000000000000000000000000000000000000000000000000000000FF00000000000000000000000000000000000000000000000000000000000000DC000000000000000000000000000000000000000000000000000000000000000A0000000000000000000000000000000000000000000000000000000000000040")) } == array1 - + let numbers = ["456", "789"].flatMap { BigUInt($0, radix: 16) }.flatMap { try? Solidity.UInt32($0) } let array2 = Solidity.VariableArray(numbers)! expect { try Solidity.VariableArray.decode(source: BaseDecoder.PartitionData(data: "000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000004560000000000000000000000000000000000000000000000000000000000000789")) } == array2 - + let bools: [Solidity.Bool] = [Solidity.Bool(true), Solidity.Bool(false)] let array3 = Solidity.VariableArray(bools)! expect { try Solidity.VariableArray.decode(source: BaseDecoder.PartitionData(data: "000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000")) } == array3 - + let empty = [Solidity.Bool]() let array4 = Solidity.VariableArray(empty)! expect { try Solidity.VariableArray.decode(source: BaseDecoder.PartitionData(data: "0000000000000000000000000000000000000000000000000000000000000000")) } == array4 } } - + context("Function") { it("should reject invalid function selectors") { let testAddress = try! Solidity.Address("0xFF") @@ -271,7 +270,7 @@ class SolidityTypesSpec: QuickSpec { // Function selector empty expect((try? Solidity.Function("", at: testAddress))).to(beNil()) } - + it("should encode correctly") { let testAddress = try! Solidity.Address("0xFF") let functionSelector = "095ea7b3" @@ -280,7 +279,7 @@ class SolidityTypesSpec: QuickSpec { let testString = "00000000000000000000000000000000000000ff\(functionSelector)0000000000000000" expect((try? Solidity.Function(functionSelector, at: testAddress))?.encode()) == testString } - + it("should decode correctly") { let testAddress = try! Solidity.Address("0xFF") let functionSelector = "095ea7b3" diff --git a/Tests/BivrostKitTests/Assets.swift b/Tests/BivrostKitTests/Assets.swift index 1a65077..5424358 100644 --- a/Tests/BivrostKitTests/Assets.swift +++ b/Tests/BivrostKitTests/Assets.swift @@ -3349,7 +3349,7 @@ struct Assets { "updated_at": 1505131050037 } """ - + static let standardTokenJson = """ { "contract_name": "StandardToken", @@ -3529,7 +3529,7 @@ struct Assets { } """ - + /// Encoded string[6] with contents /// ["Hi", "I", "want", "to", "learn", "Solidity"] static let encodedFixedStringArray = "" + @@ -3545,37 +3545,37 @@ struct Assets { "00000000000000000000000000000000000000000000000000000000000001c0" + // Location of String "Solidity" "0000000000000000000000000000000000000000000000000000000000000200" + - + // Length of "Hi" "0000000000000000000000000000000000000000000000000000000000000002" + // Byte string of "Hi" "4869000000000000000000000000000000000000000000000000000000000000" + - + // Length of "I" "0000000000000000000000000000000000000000000000000000000000000001" + // Byte string of "I" "4900000000000000000000000000000000000000000000000000000000000000" + - + // Length of "want" "0000000000000000000000000000000000000000000000000000000000000004" + // Byte string of "Want" "77616e7400000000000000000000000000000000000000000000000000000000" + - + // Length of "to" "0000000000000000000000000000000000000000000000000000000000000002" + // Byte string of "to" "746f000000000000000000000000000000000000000000000000000000000000" + - + // Length of "learn" "0000000000000000000000000000000000000000000000000000000000000005" + // Byte string of "learn" "6c6561726e000000000000000000000000000000000000000000000000000000" + - + // Length of "Solidity" "0000000000000000000000000000000000000000000000000000000000000008" + // Byte string of "Solidity" "536f6c6964697479000000000000000000000000000000000000000000000000" - + /// Encoded string[] with contents /// ["Hi", "I", "want", "to", "learn", "Solidity"] static let encodedVariableStringArray = "" + diff --git a/Tests/BivrostKitTests/ContractParserSpec.swift b/Tests/BivrostKitTests/ContractParserSpec.swift index 99cab53..6a38e0b 100644 --- a/Tests/BivrostKitTests/ContractParserSpec.swift +++ b/Tests/BivrostKitTests/ContractParserSpec.swift @@ -6,10 +6,10 @@ // Copyright © 2017 Gnosis. All rights reserved. // +@testable import BivrostKit import Foundation -import Quick import Nimble -@testable import BivrostKit +import Quick class ContractParserSpec: QuickSpec { override func spec() { @@ -19,7 +19,7 @@ class ContractParserSpec: QuickSpec { expect { try ContractParser.parseContract(from: json) }.toNot(throwError()) expect { (try ContractParser.parseContract(from: json)).name } == "MultiSigWalletWithDailyLimit" } - + it("should not throw when parsing StandardToken") { let json = jsonDict(from: Assets.standardTokenJson) expect { try ContractParser.parseContract(from: json) }.toNot(throwError()) @@ -29,6 +29,6 @@ class ContractParserSpec: QuickSpec { } } -fileprivate func jsonDict(from jsonString: String) -> [String: Any] { +private func jsonDict(from jsonString: String) -> [String: Any] { return try! JSONSerialization.jsonObject(with: jsonString.data(using: .utf8)!, options: []) as! [String: Any] } diff --git a/Tests/BivrostKitTests/ContractTemplateModelSpec.swift b/Tests/BivrostKitTests/ContractTemplateModelSpec.swift index 15e7957..bcd5f73 100644 --- a/Tests/BivrostKitTests/ContractTemplateModelSpec.swift +++ b/Tests/BivrostKitTests/ContractTemplateModelSpec.swift @@ -6,11 +6,10 @@ // Copyright © 2017 Gnosis. All rights reserved. // - +@testable import BivrostKit import Foundation -import Quick import Nimble -@testable import BivrostKit +import Quick class ContractTemplateModelSpec: QuickSpec { override func spec() { @@ -23,7 +22,7 @@ class ContractTemplateModelSpec: QuickSpec { expect($0.name).to(contain($0.methodId)) } } - + it("should not append method ids to generated function names in case of no duplicates") { let json = jsonDict(from: Assets.standardTokenJson) let contract = try! ContractParser.parseContract(from: json) @@ -34,9 +33,9 @@ class ContractTemplateModelSpec: QuickSpec { } } } - + } -fileprivate func jsonDict(from jsonString: String) -> [String: Any] { +private func jsonDict(from jsonString: String) -> [String: Any] { return try! JSONSerialization.jsonObject(with: jsonString.data(using: .utf8)!, options: []) as! [String: Any] } diff --git a/Tests/BivrostKitTests/ElementJsonParserSpec.swift b/Tests/BivrostKitTests/ElementJsonParserSpec.swift index 04addcc..9cde7ee 100644 --- a/Tests/BivrostKitTests/ElementJsonParserSpec.swift +++ b/Tests/BivrostKitTests/ElementJsonParserSpec.swift @@ -7,11 +7,11 @@ // // -import Quick -import Nimble @testable import BivrostKit +import Nimble +import Quick -fileprivate typealias Element = Contract.Element +private typealias Element = Contract.Element class ElementJsonParserSpec: QuickSpec { override func spec() { @@ -21,7 +21,7 @@ class ElementJsonParserSpec: QuickSpec { expect { try ElementJsonParser.parseContractElement(from: [:]) } .to(throwError()) } - + context("Fallback Function") { it("should parse an empty fallback element correctly with defaults") { let json = ["type": "fallback"] @@ -31,7 +31,7 @@ class ElementJsonParserSpec: QuickSpec { expect(fallback.payable) == false }) } - + it("should parse a fallback element correctly") { let json: [String: Any] = ["type": "fallback", "constant": true, "payable": true] expect { try ElementJsonParser.parseContractElement(from: json) } @@ -41,7 +41,7 @@ class ElementJsonParserSpec: QuickSpec { }) } } - + context("Constructor Function") { it("should parse an empty constructor element correctly with defaults") { let json = ["type": "constructor"] @@ -52,7 +52,7 @@ class ElementJsonParserSpec: QuickSpec { expect(constructor.payable) == false }) } - + it("should parse a constructor element correctly") { let json: [String: Any] = ["type": "constructor", "constant": true, @@ -69,14 +69,14 @@ class ElementJsonParserSpec: QuickSpec { }) } } - + context("Function Function") { it("should throw when given a function element without proper fields") { let json = ["type": "function"] expect { try ElementJsonParser.parseContractElement(from: json) } .to(throwError()) } - + it("should parse a mostly empty function element correctly with defaults") { let json = ["type": "function", "name": "foo"] expect { try ElementJsonParser.parseContractElement(from: json) } @@ -90,24 +90,24 @@ class ElementJsonParserSpec: QuickSpec { expect(function.methodId) == "c2985578" }) } - + it("should parse a function element without type correctly") { let json: [String: Any] = ["name": "foo2", "constant": true, "payable": false, - "inputs": [["name":"a", "type":"string"]], - "outputs": [["name":"b", "type":"uint"]] + "inputs": [["name": "a", "type": "string"]], + "outputs": [["name": "b", "type": "uint"]] ] expect { try ElementJsonParser.parseContractElement(from: json) } .to(beFunction { function in expect(function.inputs.count) == 1 expect(function.inputs.first?.name) == "a" expect(function.inputs.first?.type) == .dynamicType(.string) - + expect(function.outputs.count) == 1 expect(function.outputs.first?.name) == "b" expect(function.outputs.first?.type) == .staticType(.uint(bits: 256)) - + expect(function.constant) == true expect(function.payable) == false expect(function.name) == "foo2" @@ -115,19 +115,19 @@ class ElementJsonParserSpec: QuickSpec { expect(function.methodId) == "bfe4a119" }) } - + it("should parse a function element with all exact parameter types correctly") { let json: [String: Any] = ["name": "foo2", "constant": true, "payable": false, - "inputs": [["name":"a", "type":"address"], - ["name":"b", "type":"uint"], - ["name":"c", "type":"int"], - ["name":"d", "type":"bool"], - ["name":"e", "type":"function"], - ["name":"f", "type":"bytes"], - ["name":"g", "type":"string"]], - "outputs": [["name":"b", "type":"uint"]] + "inputs": [["name": "a", "type": "address"], + ["name": "b", "type": "uint"], + ["name": "c", "type": "int"], + ["name": "d", "type": "bool"], + ["name": "e", "type": "function"], + ["name": "f", "type": "bytes"], + ["name": "g", "type": "string"]], + "outputs": [["name": "b", "type": "uint"]] ] expect { try ElementJsonParser.parseContractElement(from: json) } .to(beFunction { function in @@ -159,8 +159,7 @@ class ElementJsonParserSpec: QuickSpec { expect(function.methodId) == "ebd557ad" }) } - - + } context("Event Element") { it("should throw when given an event element without proper fields") { @@ -168,7 +167,7 @@ class ElementJsonParserSpec: QuickSpec { expect { try ElementJsonParser.parseContractElement(from: json) } .to(throwError()) } - + it("should parse a mostly empty event element correctly with defaults") { let json = ["type": "event", "name": "foo"] expect { try ElementJsonParser.parseContractElement(from: json) } @@ -178,12 +177,12 @@ class ElementJsonParserSpec: QuickSpec { expect(event.anonymous) == false }) } - + it("should parse an event element correctly") { let json: [String: Any] = ["type": "event", "name": "foo2", "anonymous": true, - "inputs": [["name":"a", "type":"bytes", "indexed": true]] + "inputs": [["name": "a", "type": "bytes", "indexed": true]] ] expect { try ElementJsonParser.parseContractElement(from: json) } .to(beEvent { event in @@ -202,7 +201,7 @@ class ElementJsonParserSpec: QuickSpec { // MARK: - Matchers -fileprivate func beFallback(test: @escaping (Element.Fallback) -> () = { _ in } ) -> Predicate { +private func beFallback(test: @escaping (Element.Fallback) -> Void = { _ in }) -> Predicate { return Predicate { expression in let message = ExpectationMessage.expectedTo("be a Fallback object") if let actual = try expression.evaluate(), @@ -214,7 +213,7 @@ fileprivate func beFallback(test: @escaping (Element.Fallback) -> () = { _ in } } } -fileprivate func beConstructor(test: @escaping (Element.Constructor) -> () = { _ in } ) -> Predicate { +private func beConstructor(test: @escaping (Element.Constructor) -> Void = { _ in }) -> Predicate { return Predicate { expression in let message = ExpectationMessage.expectedTo("be a Constructor object") if let actual = try expression.evaluate(), @@ -226,7 +225,7 @@ fileprivate func beConstructor(test: @escaping (Element.Constructor) -> () = { _ } } -fileprivate func beFunction(test: @escaping (Element.Function) -> () = { _ in } ) -> Predicate { +private func beFunction(test: @escaping (Element.Function) -> Void = { _ in }) -> Predicate { return Predicate { expression in let message = ExpectationMessage.expectedTo("be a Function object") if let actual = try expression.evaluate(), @@ -238,7 +237,7 @@ fileprivate func beFunction(test: @escaping (Element.Function) -> () = { _ in } } } -fileprivate func beEvent(test: @escaping (Element.Event) -> () = { _ in } ) -> Predicate { +private func beEvent(test: @escaping (Element.Event) -> Void = { _ in }) -> Predicate { return Predicate { expression in let message = ExpectationMessage.expectedTo("be an Event object") if let actual = try expression.evaluate(), diff --git a/Tests/BivrostKitTests/ParameterParserSpec.swift b/Tests/BivrostKitTests/ParameterParserSpec.swift index 0f39a39..fe156c9 100644 --- a/Tests/BivrostKitTests/ParameterParserSpec.swift +++ b/Tests/BivrostKitTests/ParameterParserSpec.swift @@ -6,9 +6,9 @@ // Copyright © 2017 Gnosis. All rights reserved. // -import Quick -import Nimble @testable import BivrostKit +import Nimble +import Quick class ParameterParserSpec: QuickSpec { override func spec() { @@ -17,7 +17,7 @@ class ParameterParserSpec: QuickSpec { expect { try ParameterParser.parseParameterType(from: [:]) } .to(throwError(ParsingError.parameterTypeNotFound)) } - + it("should throw when given an invalid type") { expect { try ParameterParser.parseParameterType(from: ["type": "foo"]) } .to(throwError(ParsingError.parameterTypeInvalid)) @@ -30,7 +30,7 @@ class ParameterParserSpec: QuickSpec { expect { try ParameterParser.parseParameterType(from: ["type": "uint16[32] "]) } .to(throwError(ParsingError.parameterTypeInvalid)) } - + context("dynamic arrays") { it("should parse dynamic arrays of exact matches correctly") { expect { try ParameterParser.parseParameterType(from: ["type": "uint[]"]) } == .dynamicType(.array(.uint(bits: 256))) @@ -39,14 +39,14 @@ class ParameterParserSpec: QuickSpec { expect { try ParameterParser.parseParameterType(from: ["type": "function[]"]) } == .dynamicType(.array(.function)) expect { try ParameterParser.parseParameterType(from: ["type": "int[]"]) } == .dynamicType(.array(.int(bits: 256))) } - + it("should throw when parsing dynamic arrays of dynamic types") { expect { try ParameterParser.parseParameterType(from: ["type": "bytes[]"]) }.to(throwError(ParsingError.parameterTypeInvalid)) expect { try ParameterParser.parseParameterType(from: ["type": "string[]"]) }.to(throwError(ParsingError.parameterTypeInvalid)) expect { try ParameterParser.parseParameterType(from: ["type": "int[][]"]) }.to(throwError(ParsingError.parameterTypeInvalid)) } } - + context("fixed length arrays") { it("should parse fixed arrays of exact matches correctly") { expect { try ParameterParser.parseParameterType(from: ["type": "uint[16]"]) } == .staticType(.array(.uint(bits: 256), length: 16)) @@ -55,13 +55,13 @@ class ParameterParserSpec: QuickSpec { expect { try ParameterParser.parseParameterType(from: ["type": "function[1]"]) } == .staticType(.array(.function, length: 1)) expect { try ParameterParser.parseParameterType(from: ["type": "int[5]"]) } == .staticType(.array(.int(bits: 256), length: 5)) } - + it("should throw when parsing fixed arrays of dynamic types") { expect { try ParameterParser.parseParameterType(from: ["type": "bytes[16]"]) }.to(throwError(ParsingError.parameterTypeInvalid)) expect { try ParameterParser.parseParameterType(from: ["type": "string[5]"]) }.to(throwError(ParsingError.parameterTypeInvalid)) expect { try ParameterParser.parseParameterType(from: ["type": "int[][19]"]) }.to(throwError(ParsingError.parameterTypeInvalid)) } - + it("should parse nested fixed arrays of exact matches correctly") { expect { try ParameterParser.parseParameterType(from: ["type": "uint[16][32]"]) } == .staticType(.array(.array(.uint(bits: 256), length: 16), length: 32)) expect { try ParameterParser.parseParameterType(from: ["type": "bool[22][5]"]) } == .staticType(.array(.array(.bool, length: 22), length: 5)) @@ -70,14 +70,14 @@ class ParameterParserSpec: QuickSpec { expect { try ParameterParser.parseParameterType(from: ["type": "int[5][9]"]) } == .staticType(.array(.array(.int(bits: 256), length: 5), length: 9)) } } - + context("number types") { it("should parse lengths of exact matches correctly") { expect { try ParameterParser.parseParameterType(from: ["type": "uint16"]) } == .staticType(.uint(bits: 16)) expect { try ParameterParser.parseParameterType(from: ["type": "int64"]) } == .staticType(.int(bits: 64)) expect { try ParameterParser.parseParameterType(from: ["type": "bytes3"]) } == .staticType(.bytes(length: 3)) } - + it("should throw when parsing non-length types with length") { expect { try ParameterParser.parseParameterType(from: ["type": "address16"]) }.to(throwError(ParsingError.parameterTypeInvalid)) expect { try ParameterParser.parseParameterType(from: ["type": "int[16]16"]) }.to(throwError(ParsingError.parameterTypeInvalid)) @@ -85,7 +85,7 @@ class ParameterParserSpec: QuickSpec { expect { try ParameterParser.parseParameterType(from: ["type": "foo16"]) }.to(throwError(ParsingError.parameterTypeInvalid)) expect { try ParameterParser.parseParameterType(from: ["type": "bool32"]) }.to(throwError(ParsingError.parameterTypeInvalid)) } - + it("should throw when parsing length types with invalid length") { expect { try ParameterParser.parseParameterType(from: ["type": "uint0"]) }.to(throwError(ParsingError.parameterTypeInvalid)) expect { try ParameterParser.parseParameterType(from: ["type": "uint257"]) }.to(throwError(ParsingError.parameterTypeInvalid))