7
7
//
8
8
9
9
import XCTest
10
+ @testable import Core
10
11
@testable import web3swift
11
12
12
13
class EthereumContractTest : LocalTestCase {
13
14
private static let eventsOnlyABI = " [{ \" anonymous \" :false, \" inputs \" :[{ \" indexed \" :true, \" internalType \" : \" uint256 \" , \" name \" : \" operation \" , \" type \" : \" uint256 \" },{ \" indexed \" :true, \" internalType \" : \" address \" , \" name \" : \" contractAddress \" , \" type \" : \" address \" },{ \" indexed \" :true, \" internalType \" : \" uint256 \" , \" name \" : \" value \" , \" type \" : \" uint256 \" }], \" name \" : \" ContractCreated \" , \" type \" : \" event \" },{ \" anonymous \" :false, \" inputs \" :[{ \" indexed \" :true, \" internalType \" : \" bytes32 \" , \" name \" : \" dataKey \" , \" type \" : \" bytes32 \" }], \" name \" : \" DataChanged \" , \" type \" : \" event \" },{ \" anonymous \" :false, \" inputs \" :[{ \" indexed \" :true, \" internalType \" : \" uint256 \" , \" name \" : \" operation \" , \" type \" : \" uint256 \" },{ \" indexed \" :true, \" internalType \" : \" address \" , \" name \" : \" to \" , \" type \" : \" address \" },{ \" indexed \" :true, \" internalType \" : \" uint256 \" , \" name \" : \" value \" , \" type \" : \" uint256 \" },{ \" indexed \" :false, \" internalType \" : \" bytes4 \" , \" name \" : \" selector \" , \" type \" : \" bytes4 \" }], \" name \" : \" Executed \" , \" type \" : \" event \" },{ \" anonymous \" :false, \" inputs \" :[{ \" indexed \" :true, \" internalType \" : \" address \" , \" name \" : \" previousOwner \" , \" type \" : \" address \" },{ \" indexed \" :true, \" internalType \" : \" address \" , \" name \" : \" newOwner \" , \" type \" : \" address \" }], \" name \" : \" OwnershipTransferred \" , \" type \" : \" event \" },{ \" anonymous \" :false, \" inputs \" :[{ \" indexed \" :true, \" internalType \" : \" address \" , \" name \" : \" from \" , \" type \" : \" address \" },{ \" indexed \" :false, \" internalType \" : \" uint256 \" , \" name \" : \" value \" , \" type \" : \" uint256 \" },{ \" indexed \" :true, \" internalType \" : \" bytes32 \" , \" name \" : \" typeId \" , \" type \" : \" bytes32 \" },{ \" indexed \" :true, \" internalType \" : \" bytes \" , \" name \" : \" returnedValue \" , \" type \" : \" bytes \" },{ \" indexed \" :false, \" internalType \" : \" bytes \" , \" name \" : \" receivedData \" , \" type \" : \" bytes \" }], \" name \" : \" UniversalReceiver \" , \" type \" : \" event \" },{ \" anonymous \" :false, \" inputs \" :[{ \" indexed \" :true, \" internalType \" : \" address \" , \" name \" : \" sender \" , \" type \" : \" address \" },{ \" indexed \" :true, \" internalType \" : \" uint256 \" , \" name \" : \" value \" , \" type \" : \" uint256 \" }], \" name \" : \" ValueReceived \" , \" type \" : \" event \" }] "
14
15
15
16
private static let overloadedFunctionsABI = " [{ \" inputs \" :[], \" stateMutability \" : \" nonpayable \" , \" type \" : \" constructor \" },{ \" anonymous \" :false, \" inputs \" :[{ \" indexed \" :true, \" internalType \" : \" uint256 \" , \" name \" : \" operation \" , \" type \" : \" uint256 \" },{ \" indexed \" :true, \" internalType \" : \" address \" , \" name \" : \" contractAddress \" , \" type \" : \" address \" },{ \" indexed \" :true, \" internalType \" : \" uint256 \" , \" name \" : \" value \" , \" type \" : \" uint256 \" }], \" name \" : \" ContractCreated \" , \" type \" : \" event \" },{ \" anonymous \" :false, \" inputs \" :[{ \" indexed \" :true, \" internalType \" : \" bytes32 \" , \" name \" : \" dataKey \" , \" type \" : \" bytes32 \" }], \" name \" : \" DataChanged \" , \" type \" : \" event \" },{ \" anonymous \" :false, \" inputs \" :[{ \" indexed \" :true, \" internalType \" : \" uint256 \" , \" name \" : \" operation \" , \" type \" : \" uint256 \" },{ \" indexed \" :true, \" internalType \" : \" address \" , \" name \" : \" to \" , \" type \" : \" address \" },{ \" indexed \" :true, \" internalType \" : \" uint256 \" , \" name \" : \" value \" , \" type \" : \" uint256 \" },{ \" indexed \" :false, \" internalType \" : \" bytes4 \" , \" name \" : \" selector \" , \" type \" : \" bytes4 \" }], \" name \" : \" Executed \" , \" type \" : \" event \" },{ \" anonymous \" :false, \" inputs \" :[{ \" indexed \" :true, \" internalType \" : \" address \" , \" name \" : \" previousOwner \" , \" type \" : \" address \" },{ \" indexed \" :true, \" internalType \" : \" address \" , \" name \" : \" newOwner \" , \" type \" : \" address \" }], \" name \" : \" OwnershipTransferred \" , \" type \" : \" event \" },{ \" anonymous \" :false, \" inputs \" :[{ \" indexed \" :true, \" internalType \" : \" address \" , \" name \" : \" from \" , \" type \" : \" address \" },{ \" indexed \" :false, \" internalType \" : \" uint256 \" , \" name \" : \" value \" , \" type \" : \" uint256 \" },{ \" indexed \" :true, \" internalType \" : \" bytes32 \" , \" name \" : \" typeId \" , \" type \" : \" bytes32 \" },{ \" indexed \" :true, \" internalType \" : \" bytes \" , \" name \" : \" returnedValue \" , \" type \" : \" bytes \" },{ \" indexed \" :false, \" internalType \" : \" bytes \" , \" name \" : \" receivedData \" , \" type \" : \" bytes \" }], \" name \" : \" UniversalReceiver \" , \" type \" : \" event \" },{ \" anonymous \" :false, \" inputs \" :[{ \" indexed \" :true, \" internalType \" : \" address \" , \" name \" : \" sender \" , \" type \" : \" address \" },{ \" indexed \" :true, \" internalType \" : \" uint256 \" , \" name \" : \" value \" , \" type \" : \" uint256 \" }], \" name \" : \" ValueReceived \" , \" type \" : \" event \" },{ \" stateMutability \" : \" payable \" , \" type \" : \" fallback \" },{ \" inputs \" :[{ \" internalType \" : \" bytes32[] \" , \" name \" : \" dataKeys \" , \" type \" : \" bytes32[] \" }], \" name \" : \" getData \" , \" outputs \" :[{ \" internalType \" : \" bytes[] \" , \" name \" : \" dataValues \" , \" type \" : \" bytes[] \" }], \" stateMutability \" : \" view \" , \" type \" : \" function \" },{ \" inputs \" :[{ \" internalType \" : \" bytes32 \" , \" name \" : \" dataKey \" , \" type \" : \" bytes32 \" }], \" name \" : \" getData \" , \" outputs \" :[{ \" internalType \" : \" bytes \" , \" name \" : \" dataValue \" , \" type \" : \" bytes \" }], \" stateMutability \" : \" view \" , \" type \" : \" function \" },{ \" inputs \" :[], \" name \" : \" noInputFunction \" , \" outputs \" :[], \" stateMutability \" : \" nonpayable \" , \" type \" : \" function \" },{ \" inputs \" :[{ \" internalType \" : \" bytes32[] \" , \" name \" : \" dataKeys \" , \" type \" : \" bytes32[] \" },{ \" internalType \" : \" bytes[] \" , \" name \" : \" dataValues \" , \" type \" : \" bytes[] \" }], \" name \" : \" setData \" , \" outputs \" :[], \" stateMutability \" : \" nonpayable \" , \" type \" : \" function \" },{ \" inputs \" :[{ \" internalType \" : \" bytes32 \" , \" name \" : \" dataKey \" , \" type \" : \" bytes32 \" },{ \" internalType \" : \" bytes \" , \" name \" : \" dataValue \" , \" type \" : \" bytes \" }], \" name \" : \" setData \" , \" outputs \" :[], \" stateMutability \" : \" nonpayable \" , \" type \" : \" function \" }] "
16
17
17
- func test_decodeEvents( ) throws {
18
- let contract = ganache. contract ( EthereumContractTest . eventsOnlyABI) !
18
+ func test_decodeEvents( ) async throws {
19
+ let web3 = try ! await Web3 . new ( LocalTestCase . url)
20
+ let contract = web3. contract ( EthereumContractTest . eventsOnlyABI) !
19
21
20
22
XCTAssertTrue ( contract. contract. allEvents. count == 6 )
21
23
XCTAssertNotNil ( contract. contract. events [ " ContractCreated " ] )
@@ -26,8 +28,9 @@ class EthereumContractTest: LocalTestCase {
26
28
XCTAssertNotNil ( contract. contract. events [ " ValueReceived " ] )
27
29
}
28
30
29
- func test_decodedAllFunctions( ) throws {
30
- let contract = ganache. contract ( EthereumContractTest . overloadedFunctionsABI) !
31
+ func test_decodedAllFunctions( ) async throws {
32
+ let web3 = try ! await Web3 . new ( LocalTestCase . url)
33
+ let contract = web3. contract ( EthereumContractTest . overloadedFunctionsABI) !
31
34
32
35
XCTAssertTrue ( contract. contract. allMethods. count == 5 )
33
36
@@ -48,17 +51,19 @@ class EthereumContractTest: LocalTestCase {
48
51
XCTAssertTrue ( contract. contract. methods [ getFuncSignature ( " noInputFunction() " ) ] ? . count == 1 )
49
52
}
50
53
51
- func test_encodeMethodBasedOnNameWithParameters_mustFail( ) throws {
52
- let contract = ganache. contract ( EthereumContractTest . overloadedFunctionsABI) !
54
+ func test_encodeMethodBasedOnNameWithParameters_mustFail( ) async throws {
55
+ let web3 = try ! await Web3 . new ( LocalTestCase . url)
56
+ let contract = web3. contract ( EthereumContractTest . overloadedFunctionsABI) !
53
57
54
58
/// Encoding method that expects parameters but we are not giving any.
55
59
/// Result must be `nil`.
56
60
XCTAssertNil ( contract. method ( " setData(bytes32,bytes) " ) )
57
61
XCTAssertNil ( contract. method ( getFuncSignature ( " setData(bytes32,bytes) " ) ) )
58
62
}
59
63
60
- func test_encodeMethodBasedOnNameWithParameters( ) throws {
61
- let contract = ganache. contract ( EthereumContractTest . overloadedFunctionsABI,
64
+ func test_encodeMethodBasedOnNameWithParameters( ) async throws {
65
+ let web3 = try ! await Web3 . new ( LocalTestCase . url)
66
+ let contract = web3. contract ( EthereumContractTest . overloadedFunctionsABI,
62
67
at: EthereumAddress ( " 0x6394b37Cf80A7358b38068f0CA4760ad49983a1B " ) !) !
63
68
let parameters : [ AnyObject ] = [
64
69
[ Data . randomBytes ( length: 32 ) !,
@@ -81,8 +86,9 @@ class EthereumContractTest: LocalTestCase {
81
86
testDecoding ( getFuncSignature ( functionNameWithParameters) )
82
87
}
83
88
84
- func test_encodeMethodBasedOnHexSignature( ) throws {
85
- let contract = ganache. contract ( EthereumContractTest . overloadedFunctionsABI,
89
+ func test_encodeMethodBasedOnHexSignature( ) async throws {
90
+ let web3 = try ! await Web3 . new ( LocalTestCase . url)
91
+ let contract = web3. contract ( EthereumContractTest . overloadedFunctionsABI,
86
92
at: EthereumAddress ( " 0x6394b37Cf80A7358b38068f0CA4760ad49983a1B " ) !) !
87
93
let parameters : [ AnyObject ] = [ Data . randomBytes ( length: 32 ) !, Data . randomBytes ( length: 32 ) !] as [ AnyObject ]
88
94
let functionSignature = getFuncSignature ( " setData(bytes32,bytes) " )
0 commit comments