Skip to content

Commit 1bff58d

Browse files
chore: merged with origin/fix/abi-overloading-methods-support
2 parents 9943d2e + afda2bf commit 1bff58d

File tree

11 files changed

+340
-221
lines changed

11 files changed

+340
-221
lines changed

Sources/Core/Utility/Data+Extension.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ public extension Data {
5959
}
6060
return nil
6161
}
62-
62+
6363
func bitsInRange(_ startingBit: Int, _ length: Int) -> UInt64? { // return max of 8 bytes for simplicity, non-public
6464
if startingBit + length / 8 > self.count, length > 64, startingBit > 0, length >= 1 {return nil}
6565
let bytes = self[(startingBit/8) ..< (startingBit+length+7)/8]

Sources/web3swift/Contract/EventFiltering.swift

Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,65 @@ public struct EventFilter {
6666

6767
// MARK: - Internal functions
6868

69+
public struct EventFilter {
70+
public enum Block {
71+
case latest
72+
case pending
73+
case blockNumber(UInt64)
74+
75+
var encoded: String {
76+
switch self {
77+
case .latest:
78+
return "latest"
79+
case .pending:
80+
return "pending"
81+
case .blockNumber(let number):
82+
return String(number, radix: 16).addHexPrefix()
83+
}
84+
}
85+
}
86+
87+
public init() { }
88+
89+
public init(fromBlock: Block?, toBlock: Block?,
90+
addresses: [EthereumAddress]? = nil,
91+
parameterFilters: [[EventFilterable]?]? = nil) {
92+
self.fromBlock = fromBlock
93+
self.toBlock = toBlock
94+
self.addresses = addresses
95+
self.parameterFilters = parameterFilters
96+
}
97+
98+
public var fromBlock: Block?
99+
public var toBlock: Block?
100+
public var addresses: [EthereumAddress]?
101+
public var parameterFilters: [[EventFilterable]?]?
102+
103+
public func rpcPreEncode() -> EventFilterParameters {
104+
var encoding = EventFilterParameters()
105+
if self.fromBlock != nil {
106+
encoding.fromBlock = self.fromBlock!.encoded
107+
}
108+
if self.toBlock != nil {
109+
encoding.toBlock = self.toBlock!.encoded
110+
}
111+
if self.addresses != nil {
112+
if self.addresses!.count == 1 {
113+
encoding.address = [self.addresses![0].address]
114+
} else {
115+
var encodedAddresses = [String?]()
116+
for addr in self.addresses! {
117+
encodedAddresses.append(addr.address)
118+
}
119+
encoding.address = encodedAddresses
120+
}
121+
}
122+
return encoding
123+
}
124+
}
125+
126+
// MARK: - Internal functions
127+
69128
internal func filterLogs(decodedLogs: [EventParserResultProtocol], eventFilter: EventFilter) -> [EventParserResultProtocol] {
70129
let filteredLogs = decodedLogs.filter { (result) -> Bool in
71130
if eventFilter.addresses == nil {

Sources/web3swift/Web3/Web3+MutatingTransaction.swift

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ public class WriteTransaction: ReadTransaction {
1818
if function == nil {
1919
throw Web3Error.inputError(desc: "Contract's ABI does not have such method")
2020
}
21+
2122
if function!.constant {
2223
throw Web3Error.inputError(desc: "Trying to transact to the constant function")
2324
}

Tests/web3swiftTests/localTests/AdvancedABIv2Tests.swift

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,6 @@ class AdvancedABIv2Tests: LocalTestCase {
2121
let allAddresses = try await web3.eth.ownedAccounts()
2222
var contract = web3.contract(abiString, at: nil, abiVersion: 2)!
2323
let deployTx = contract.deploy(bytecode: bytecode)!
24-
2524
deployTx.transactionOptions.from = allAddresses[0]
2625
deployTx.transactionOptions.gasLimit = .manual(3000000)
2726
let result = try await deployTx.send()
@@ -50,11 +49,11 @@ class AdvancedABIv2Tests: LocalTestCase {
5049
let abiString = "[{\"constant\":true,\"inputs\":[],\"name\":\"testDynOfDyn\",\"outputs\":[{\"name\":\"ts\",\"type\":\"string[]\"}],\"payable\":false,\"stateMutability\":\"pure\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"testStOfDyn\",\"outputs\":[{\"name\":\"ts\",\"type\":\"string[2]\"}],\"payable\":false,\"stateMutability\":\"pure\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"testDynArray\",\"outputs\":[{\"components\":[{\"name\":\"number\",\"type\":\"uint256\"},{\"name\":\"someText\",\"type\":\"string\"},{\"name\":\"staticArray\",\"type\":\"uint256[2]\"},{\"name\":\"dynamicArray\",\"type\":\"uint256[]\"},{\"name\":\"anotherDynamicArray\",\"type\":\"string[2]\"}],\"name\":\"ts\",\"type\":\"tuple[]\"}],\"payable\":false,\"stateMutability\":\"pure\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"testStaticArray\",\"outputs\":[{\"components\":[{\"name\":\"number\",\"type\":\"uint256\"},{\"name\":\"someText\",\"type\":\"string\"},{\"name\":\"staticArray\",\"type\":\"uint256[2]\"},{\"name\":\"dynamicArray\",\"type\":\"uint256[]\"},{\"name\":\"anotherDynamicArray\",\"type\":\"string[2]\"}],\"name\":\"ts\",\"type\":\"tuple[2]\"}],\"payable\":false,\"stateMutability\":\"pure\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"testSingle\",\"outputs\":[{\"components\":[{\"name\":\"number\",\"type\":\"uint256\"},{\"name\":\"someText\",\"type\":\"string\"},{\"name\":\"staticArray\",\"type\":\"uint256[2]\"},{\"name\":\"dynamicArray\",\"type\":\"uint256[]\"},{\"name\":\"anotherDynamicArray\",\"type\":\"string[2]\"}],\"name\":\"t\",\"type\":\"tuple\"}],\"payable\":false,\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"}]"
5150
let bytecode = Data.fromHex("6080604052341561000f57600080fd5b610cb18061001e6000396000f30060806040526004361061006d576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff168063189533931461007257806338163ff51461009b57806388be6c65146100c4578063e7c1a47c146100ed578063f376e01314610116575b600080fd5b341561007d57600080fd5b61008561013f565b6040516100929190610a9f565b60405180910390f35b34156100a657600080fd5b6100ae610220565b6040516100bb9190610a7d565b60405180910390f35b34156100cf57600080fd5b6100d76102c5565b6040516100e49190610ae3565b60405180910390f35b34156100f857600080fd5b610100610350565b60405161010d9190610ac1565b60405180910390f35b341561012157600080fd5b610129610399565b6040516101369190610b05565b60405180910390f35b6060600260405190808252806020026020018201604052801561017657816020015b60608152602001906001900390816101615790505b5090506040805190810160405280600581526020017f48656c6c6f0000000000000000000000000000000000000000000000000000008152508160008151811015156101be57fe5b906020019060200201819052506040805190810160405280600581526020017f576f726c6400000000000000000000000000000000000000000000000000000081525081600181518110151561021057fe5b9060200190602002018190525090565b610228610546565b6040805190810160405280600581526020017f48656c6c6f00000000000000000000000000000000000000000000000000000081525081600060028110151561026d57fe5b60200201819052506040805190810160405280600581526020017f576f726c640000000000000000000000000000000000000000000000000000008152508160016002811015156102ba57fe5b602002018190525090565b6060600260405190808252806020026020018201604052801561030257816020015b6102ef61056d565b8152602001906001900390816102e75790505b50905061030d610399565b81600081518110151561031c57fe5b90602001906020020181905250610331610399565b81600181518110151561034057fe5b9060200190602002018190525090565b6103586105a9565b610360610399565b81600060028110151561036f57fe5b602002018190525061037f610399565b81600160028110151561038e57fe5b602002018190525090565b6103a16105d8565b60606103ab610614565b6103b3610546565b60036040519080825280602002602001820160405280156103e35781602001602082028038833980820191505090505b50925060008360008151811015156103f757fe5b9060200190602002018181525050600183600181518110151561041657fe5b9060200190602002018181525050600283600281518110151561043557fe5b90602001906020020181815250506040805190810160405280600081526020016001815250915060408051908101604052806040805190810160405280600581526020017f48656c6c6f00000000000000000000000000000000000000000000000000000081525081526020016040805190810160405280600581526020017f576f726c64000000000000000000000000000000000000000000000000000000815250815250905060a060405190810160405280600181526020016040805190810160405280600b81526020017f48656c6c6f20776f726c64000000000000000000000000000000000000000000815250815260200183815260200184815260200182815250935083935050505090565b60408051908101604052806002905b60608152602001906001900390816105555790505090565b60e060405190810160405280600081526020016060815260200161058f610636565b8152602001606081526020016105a3610658565b81525090565b6101c0604051908101604052806002905b6105c261056d565b8152602001906001900390816105ba5790505090565b60e06040519081016040528060008152602001606081526020016105fa610636565b81526020016060815260200161060e610658565b81525090565b6040805190810160405280600290602082028038833980820191505090505090565b6040805190810160405280600290602082028038833980820191505090505090565b60408051908101604052806002905b60608152602001906001900390816106675790505090565b600061068a82610b81565b8360208202850161069a85610b31565b60005b848110156106d35783830388526106b5838351610930565b92506106c082610bdb565b915060208801975060018101905061069d565b508196508694505050505092915050565b60006106ef82610b76565b836020820285016106ff85610b27565b60005b8481101561073857838303885261071a838351610930565b925061072582610bce565b9150602088019750600181019050610702565b508196508694505050505092915050565b600061075482610b8c565b8084526020840193508360208202850161076d85610b3b565b60005b848110156107a6578383038852610788838351610930565b925061079382610be8565b9150602088019750600181019050610770565b508196508694505050505092915050565b60006107c282610b97565b836020820285016107d285610b48565b60005b8481101561080b5783830388526107ed8383516109ea565b92506107f882610bf5565b91506020880197506001810190506107d5565b508196508694505050505092915050565b600061082782610ba2565b8084526020840193508360208202850161084085610b52565b60005b8481101561087957838303885261085b8383516109ea565b925061086682610c02565b9150602088019750600181019050610843565b508196508694505050505092915050565b61089381610bad565b61089c82610b5f565b60005b828110156108ce576108b2858351610a6e565b6108bb82610c0f565b915060208501945060018101905061089f565b5050505050565b60006108e082610bb8565b8084526020840193506108f283610b69565b60005b8281101561092457610908868351610a6e565b61091182610c1c565b91506020860195506001810190506108f5565b50849250505092915050565b600061093b82610bc3565b80845261094f816020860160208601610c33565b61095881610c66565b602085010191505092915050565b600060c08301600083015161097e6000860182610a6e565b50602083015184820360208601526109968282610930565b91505060408301516109ab604086018261088a565b50606083015184820360808601526109c382826108d5565b915050608083015184820360a08601526109dd82826106e4565b9150508091505092915050565b600060c083016000830151610a026000860182610a6e565b5060208301518482036020860152610a1a8282610930565b9150506040830151610a2f604086018261088a565b5060608301518482036080860152610a4782826108d5565b915050608083015184820360a0860152610a6182826106e4565b9150508091505092915050565b610a7781610c29565b82525050565b60006020820190508181036000830152610a97818461067f565b905092915050565b60006020820190508181036000830152610ab98184610749565b905092915050565b60006020820190508181036000830152610adb81846107b7565b905092915050565b60006020820190508181036000830152610afd818461081c565b905092915050565b60006020820190508181036000830152610b1f8184610966565b905092915050565b6000819050919050565b6000819050919050565b6000602082019050919050565b6000819050919050565b6000602082019050919050565b6000819050919050565b6000602082019050919050565b600060029050919050565b600060029050919050565b600081519050919050565b600060029050919050565b600081519050919050565b600060029050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b6000602082019050919050565b6000602082019050919050565b6000602082019050919050565b6000602082019050919050565b6000602082019050919050565b6000602082019050919050565b6000819050919050565b60005b83811015610c51578082015181840152602081019050610c36565b83811115610c60576000848401525b50505050565b6000601f19601f83011690509190505600a265627a7a72305820fdaf8ce6fe282a46498c8066d5b5ac382b69969eee38e1ad03c0d501b27f65366c6578706572696d656e74616cf50037")!
5251

52+
5353
let web3 = try await Web3.new(URL.init(string: "http://127.0.0.1:8545")!)
5454
let allAddresses = try await web3.eth.ownedAccounts()
5555
var contract = web3.contract(abiString, at: nil, abiVersion: 2)!
5656
let deployTx = contract.deploy(bytecode: bytecode)!
57-
5857
deployTx.transactionOptions.from = allAddresses[0]
5958
deployTx.transactionOptions.gasLimit = .manual(3000000)
6059
let result = try await deployTx.send()
@@ -87,7 +86,6 @@ class AdvancedABIv2Tests: LocalTestCase {
8786
let allAddresses = try await web3.eth.ownedAccounts()
8887
var contract = web3.contract(abiString, at: nil, abiVersion: 2)!
8988
let deployTx = contract.deploy(bytecode: bytecode)!
90-
9189
deployTx.transactionOptions.from = allAddresses[0]
9290
deployTx.transactionOptions.gasLimit = .manual(3000000)
9391
let result = try await deployTx.send()
@@ -120,7 +118,6 @@ class AdvancedABIv2Tests: LocalTestCase {
120118
let allAddresses = try await web3.eth.ownedAccounts()
121119
var contract = web3.contract(abiString, at: nil, abiVersion: 2)!
122120
let deployTx = contract.deploy(bytecode: bytecode)!
123-
124121
deployTx.transactionOptions.from = allAddresses[0]
125122
deployTx.transactionOptions.gasLimit = .manual(3000000)
126123
let result = try await deployTx.send()
@@ -153,7 +150,6 @@ class AdvancedABIv2Tests: LocalTestCase {
153150
let allAddresses = try await web3.eth.ownedAccounts()
154151
var contract = web3.contract(abiString, at: nil, abiVersion: 2)!
155152
let deployTx = contract.deploy(bytecode: bytecode)!
156-
157153
deployTx.transactionOptions.from = allAddresses[0]
158154
deployTx.transactionOptions.gasLimit = .manual(3000000)
159155
let result = try await deployTx.send()

0 commit comments

Comments
 (0)