Skip to content

Commit 45f2a70

Browse files
Merge branch 'develop' into master
2 parents 1d3b939 + 0a76a4a commit 45f2a70

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

44 files changed

+906
-584
lines changed

Sources/Core/EthereumABI/ABIDecoding.swift

+4-31
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@ extension ABIDecoder {
1717
}
1818

1919
public static func decode(types: [ABI.Element.ParameterType], data: Data) -> [AnyObject]? {
20-
// print("Full data: \n" + data.toHexString())
2120
var toReturn = [AnyObject]()
2221
var consumed: UInt64 = 0
2322
for i in 0 ..< types.count {
@@ -37,34 +36,26 @@ extension ABIDecoder {
3736
}
3837
switch type {
3938
case .uint(let bits):
40-
// print("Uint256 element itself: \n" + elementItself.toHexString())
4139
guard elementItself.count >= 32 else {break}
4240
let mod = BigUInt(1) << bits
4341
let dataSlice = elementItself[0 ..< 32]
4442
let v = BigUInt(dataSlice) % mod
45-
// print("Uint256 element is: \n" + String(v))
4643
return (v as AnyObject, type.memoryUsage)
4744
case .int(let bits):
48-
// print("Int256 element itself: \n" + elementItself.toHexString())
4945
guard elementItself.count >= 32 else {break}
5046
let mod = BigInt(1) << bits
5147
let dataSlice = elementItself[0 ..< 32]
5248
let v = BigInt.fromTwosComplement(data: dataSlice) % mod
53-
// print("Int256 element is: \n" + String(v))
5449
return (v as AnyObject, type.memoryUsage)
5550
case .address:
56-
// print("Address element itself: \n" + elementItself.toHexString())
5751
guard elementItself.count >= 32 else {break}
5852
let dataSlice = elementItself[12 ..< 32]
5953
let address = EthereumAddress(dataSlice)
60-
// print("Address element is: \n" + String(address.address))
6154
return (address as AnyObject, type.memoryUsage)
6255
case .bool:
63-
// print("Bool element itself: \n" + elementItself.toHexString())
6456
guard elementItself.count >= 32 else {break}
6557
let dataSlice = elementItself[0 ..< 32]
6658
let v = BigUInt(dataSlice)
67-
// print("Address element is: \n" + String(v))
6859
if v == BigUInt(36) ||
6960
v == BigUInt(32) ||
7061
v == BigUInt(28) ||
@@ -77,34 +68,27 @@ extension ABIDecoder {
7768
return (false as AnyObject, type.memoryUsage)
7869
}
7970
case .bytes(let length):
80-
// print("Bytes32 element itself: \n" + elementItself.toHexString())
8171
guard elementItself.count >= 32 else {break}
8272
let dataSlice = elementItself[0 ..< length]
83-
// print("Bytes32 element is: \n" + String(dataSlice.toHexString()))
8473
return (dataSlice as AnyObject, type.memoryUsage)
8574
case .string:
86-
// print("String element itself: \n" + elementItself.toHexString())
8775
guard elementItself.count >= 32 else {break}
8876
var dataSlice = elementItself[0 ..< 32]
8977
let length = UInt64(BigUInt(dataSlice))
9078
guard elementItself.count >= 32+length else {break}
9179
dataSlice = elementItself[32 ..< 32 + length]
9280
guard let string = String(data: dataSlice, encoding: .utf8) else {break}
93-
// print("String element is: \n" + String(string))
9481
return (string as AnyObject, type.memoryUsage)
9582
case .dynamicBytes:
96-
// print("Bytes element itself: \n" + elementItself.toHexString())
9783
guard elementItself.count >= 32 else {break}
9884
var dataSlice = elementItself[0 ..< 32]
9985
let length = UInt64(BigUInt(dataSlice))
10086
guard elementItself.count >= 32+length else {break}
10187
dataSlice = elementItself[32 ..< 32 + length]
102-
// print("Bytes element is: \n" + String(dataSlice.toHexString()))
10388
return (dataSlice as AnyObject, type.memoryUsage)
10489
case .array(type: let subType, length: let length):
10590
switch type.arraySize {
10691
case .dynamicSize:
107-
// print("Dynamic array element itself: \n" + elementItself.toHexString())
10892
if subType.isStatic {
10993
// uint[] like, expect length and elements
11094
guard elementItself.count >= 32 else {break}
@@ -130,7 +114,6 @@ extension ABIDecoder {
130114
dataSlice = Data(elementItself[32 ..< elementItself.count])
131115
var subpointer: UInt64 = 0
132116
var toReturn = [AnyObject]()
133-
// print("Dynamic array sub element itself: \n" + dataSlice.toHexString())
134117
for _ in 0 ..< length {
135118
let (v, c) = decodeSingleType(type: subType, data: dataSlice, pointer: subpointer)
136119
guard let valueUnwrapped = v, let consumedUnwrapped = c else {break}
@@ -145,7 +128,6 @@ extension ABIDecoder {
145128
return (toReturn as AnyObject, nextElementPointer)
146129
}
147130
case .staticSize(let staticLength):
148-
// print("Static array element itself: \n" + elementItself.toHexString())
149131
guard length == staticLength else {break}
150132
var toReturn = [AnyObject]()
151133
var consumed: UInt64 = 0
@@ -164,16 +146,16 @@ extension ABIDecoder {
164146
break
165147
}
166148
case .tuple(types: let subTypes):
167-
// print("Tuple element itself: \n" + elementItself.toHexString())
168149
var toReturn = [AnyObject]()
169150
var consumed: UInt64 = 0
170151
for i in 0 ..< subTypes.count {
171152
let (v, c) = decodeSingleType(type: subTypes[i], data: elementItself, pointer: consumed)
172153
guard let valueUnwrapped = v, let consumedUnwrapped = c else {return (nil, nil)}
173154
toReturn.append(valueUnwrapped)
174-
/*
175-
When decoding a tuple that is not static or an array with a subtype that is not static, the second value in the tuple returned by decodeSignleType is a pointer to the next element, NOT the length of the consumed element. So when decoding such an element, consumed should be set to consumedUnwrapped, NOT incremented by consumedUnwrapped.
176-
*/
155+
// When decoding a tuple that is not static or an array with a subtype that is not static,
156+
// the second value in the tuple returned by decodeSignleType is a pointer to the next element,
157+
// NOT the length of the consumed element. So when decoding such an element, consumed should
158+
// be set to consumedUnwrapped, NOT incremented by consumedUnwrapped.
177159
switch subTypes[i] {
178160
case .array(type: let subType, length: _):
179161
if !subType.isStatic {
@@ -191,31 +173,24 @@ extension ABIDecoder {
191173
consumed = consumed + consumedUnwrapped
192174
}
193175
}
194-
// print("Tuple element is: \n" + String(describing: toReturn))
195176
if type.isStatic {
196177
return (toReturn as AnyObject, consumed)
197178
} else {
198179
return (toReturn as AnyObject, nextElementPointer)
199180
}
200181
case .function:
201-
// print("Function element itself: \n" + elementItself.toHexString())
202182
guard elementItself.count >= 32 else {break}
203183
let dataSlice = elementItself[8 ..< 32]
204-
// print("Function element is: \n" + String(dataSlice.toHexString()))
205184
return (dataSlice as AnyObject, type.memoryUsage)
206185
}
207186
return (nil, nil)
208187
}
209188

210189
fileprivate static func followTheData(type: ABI.Element.ParameterType, data: Data, pointer: UInt64 = 0) -> (elementEncoding: Data?, nextElementPointer: UInt64?) {
211-
// print("Follow the data: \n" + data.toHexString())
212-
// print("At pointer: \n" + String(pointer))
213190
if type.isStatic {
214191
guard data.count >= pointer + type.memoryUsage else {return (nil, nil)}
215192
let elementItself = data[pointer ..< pointer + type.memoryUsage]
216193
let nextElement = pointer + type.memoryUsage
217-
// print("Got element itself: \n" + elementItself.toHexString())
218-
// print("Next element pointer: \n" + String(nextElement))
219194
return (Data(elementItself), nextElement)
220195
} else {
221196
guard data.count >= pointer + type.memoryUsage else {return (nil, nil)}
@@ -237,8 +212,6 @@ extension ABIDecoder {
237212
let elementPointer = UInt64(bn)
238213
let elementItself = data[elementPointer ..< UInt64(data.count)]
239214
let nextElement = pointer + type.memoryUsage
240-
// print("Got element itself: \n" + elementItself.toHexString())
241-
// print("Next element pointer: \n" + String(nextElement))
242215
return (Data(elementItself), nextElement)
243216
}
244217
}

Sources/Core/EthereumABI/ABIElements.swift

-1
Original file line numberDiff line numberDiff line change
@@ -194,7 +194,6 @@ extension ABI.Element {
194194
extension ABI.Element.Constructor {
195195
public func encodeParameters(_ parameters: [AnyObject]) -> Data? {
196196
guard parameters.count == inputs.count else { return nil }
197-
// FIXME: This should be zipped, because Arrays don't guarantee it's elements order
198197
return ABIEncoder.encode(types: inputs, values: parameters)
199198
}
200199
}

Sources/Core/Transaction/BloomFilter.swift

-108
This file was deleted.

0 commit comments

Comments
 (0)