Skip to content

Commit e57d119

Browse files
committed
Added: Receive type at ABI.Element
1 parent 35ce6fd commit e57d119

File tree

2 files changed

+37
-0
lines changed

2 files changed

+37
-0
lines changed

Sources/web3swift/EthereumABI/ABIElements.swift

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@ public extension ABI {
4343
case constructor(Constructor)
4444
case fallback(Fallback)
4545
case event(Event)
46+
case receive(Receive)
4647

4748
public enum StateMutability {
4849
case payable
@@ -142,6 +143,15 @@ public extension ABI {
142143
}
143144
}
144145
}
146+
public struct Receive {
147+
public let payable: Bool
148+
public let inputs: [InOut]
149+
150+
public init(inputs: [InOut], payable: Bool) {
151+
self.inputs = inputs
152+
self.payable = payable
153+
}
154+
}
145155
}
146156
}
147157

@@ -161,6 +171,8 @@ extension ABI.Element {
161171
let signature = function.methodEncoding
162172
guard let data = ABIEncoder.encode(types: function.inputs, values: parameters) else {return nil}
163173
return signature + data
174+
case .receive(_):
175+
return nil
164176
}
165177
}
166178
}
@@ -199,6 +211,8 @@ extension ABI.Element {
199211
i = i + 1
200212
}
201213
return returnArray
214+
case .receive(_):
215+
return nil
202216
}
203217
}
204218

@@ -272,6 +286,8 @@ extension ABI.Element {
272286
i = i + 1
273287
}
274288
return returnArray
289+
case .receive(_):
290+
return nil
275291
}
276292
}
277293
}

Sources/web3swift/EthereumABI/ABIParsing.swift

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ extension ABI {
3030
case constructor
3131
case fallback
3232
case event
33+
case receive
3334
}
3435

3536
}
@@ -58,6 +59,9 @@ fileprivate func parseToElement(from abiRecord: ABI.Record, type: ABI.ElementTyp
5859
case .event:
5960
let event = try parseEvent(abiRecord: abiRecord)
6061
return ABI.Element.event(event)
62+
case .receive:
63+
let receive = try parseReceive(abiRecord: abiRecord)
64+
return ABI.Element.receive(receive)
6165
}
6266

6367
}
@@ -121,6 +125,23 @@ fileprivate func parseEvent(abiRecord:ABI.Record) throws -> ABI.Element.Event {
121125
return functionElement
122126
}
123127

128+
fileprivate func parseReceive(abiRecord:ABI.Record) throws -> ABI.Element.Receive {
129+
let inputs = try abiRecord.inputs?.map({ (input:ABI.Input) throws -> ABI.Element.InOut in
130+
let nativeInput = try input.parse()
131+
return nativeInput
132+
})
133+
let abiInputs = inputs != nil ? inputs! : [ABI.Element.InOut]()
134+
var payable = false
135+
if (abiRecord.payable != nil) {
136+
payable = abiRecord.payable!
137+
}
138+
if (abiRecord.stateMutability == "payable") {
139+
payable = true
140+
}
141+
let functionElement = ABI.Element.Receive(inputs: abiInputs, payable: payable)
142+
return functionElement
143+
}
144+
124145
extension ABI.Input {
125146
func parse() throws -> ABI.Element.InOut {
126147
let name = self.name != nil ? self.name! : ""

0 commit comments

Comments
 (0)