Skip to content

Commit 87a2112

Browse files
author
Alex Vlasov
committed
fix decoding empty dynamic array
1 parent 9d787ad commit 87a2112

File tree

3 files changed

+29
-2
lines changed

3 files changed

+29
-2
lines changed

web3swift/ABIv2/Classes/ABIv2Decoding.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -110,7 +110,7 @@ extension ABIv2Decoder {
110110
var dataSlice = elementItself[0 ..< 32]
111111
let length = UInt64(BigUInt(dataSlice))
112112
guard elementItself.count >= 32 + subType.memoryUsage*length else {break}
113-
dataSlice = elementItself[32 ..< subType.memoryUsage*length]
113+
dataSlice = elementItself[32 ..< 32 + subType.memoryUsage*length]
114114
var subpointer: UInt64 = 32;
115115
var toReturn = [AnyObject]()
116116
for _ in 0 ..< length {

web3swift/Contract/Classes/ContractProtocol.swift

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,10 @@ public struct EventFilter {
6767
}
6868
}
6969

70+
public init() {
71+
72+
}
73+
7074
public init(fromBlock: Block?, toBlock: Block?,
7175
addresses: [EthereumAddress]? = nil,
7276
parameterFilters: [[EventFilterable]?]? = nil) {

web3swiftTests/web3swiftTests.swift

Lines changed: 24 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1830,7 +1830,7 @@ class web3swiftTests: XCTestCase {
18301830

18311831
func testAdvancedABIv2staticArrayOfStrings() {
18321832
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\"}]"
1833-
let contractAddress = EthereumAddress("0xd14630167f878e92a40a1c12db4532f29cb3065e")
1833+
let contractAddress = EthereumAddress("0xd14630167f878e92a40a1c12db4532f29cb3065e")!
18341834
let web3 = Web3.InfuraRinkebyWeb3()
18351835
let contract = web3.contract(abiString, at: contractAddress, abiVersion: 2)
18361836
var options = Web3Options.defaultOptions()
@@ -1851,6 +1851,29 @@ class web3swiftTests: XCTestCase {
18511851
}
18521852
}
18531853

1854+
func testEmptyArrayDecoding() {
1855+
let abiString = "[{\"inputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"constant\":true,\"inputs\":[],\"name\":\"empty\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256[]\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"}]"
1856+
let contractAddress = EthereumAddress("0x200eb5ccda1c35b0f5bf82552fdd65a8aee98e79")!
1857+
let web3 = Web3.InfuraRinkebyWeb3()
1858+
let contract = web3.contract(abiString, at: contractAddress, abiVersion: 2)
1859+
var options = Web3Options.defaultOptions()
1860+
options.from = contractAddress
1861+
XCTAssert(contract != nil)
1862+
print(contract?.contract.allMethods)
1863+
let rawContract = contract?.contract as! ContractV2
1864+
print(rawContract)
1865+
let intermediate = contract?.method("empty", options: options)
1866+
XCTAssertNotNil(intermediate)
1867+
let result = intermediate!.call(options: nil)
1868+
switch result {
1869+
case .success(let payload):
1870+
print(payload)
1871+
case .failure(let error):
1872+
print(error)
1873+
XCTFail()
1874+
}
1875+
}
1876+
18541877
func testUserCase() {
18551878
let abiString = "[{\"constant\":true,\"inputs\":[],\"name\":\"getFlagData\",\"outputs\":[{\"name\":\"data\",\"type\":\"string\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"data\",\"type\":\"string\"}],\"name\":\"setFlagData\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]"
18561879
let contractAddress = EthereumAddress("0x811411e3cdfd4750cdd3552feb3b89a46ddb612e")

0 commit comments

Comments
 (0)