Skip to content

Commit 5493dd0

Browse files
chore(EIP712): new test + moved EIP712 reused data into one file;
1 parent 07965a1 commit 5493dd0

File tree

3 files changed

+95
-74
lines changed

3 files changed

+95
-74
lines changed
Lines changed: 76 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,76 @@
1+
//
2+
// EIP712TestData.swift
3+
//
4+
// Created by JeneaVranceanu on 19.10.2023.
5+
//
6+
7+
import Foundation
8+
9+
class EIP712TestData {
10+
static let testTypedDataPayload = """
11+
{
12+
"types":{
13+
"EIP712Domain":[
14+
{
15+
"name":"name",
16+
"type":"string"
17+
},
18+
{
19+
"name":"version",
20+
"type":"string"
21+
},
22+
{
23+
"name":"chainId",
24+
"type":"uint256"
25+
},
26+
{
27+
"name":"verifyingContract",
28+
"type":"address"
29+
}
30+
],
31+
"Person":[
32+
{
33+
"name":"name",
34+
"type":"string"
35+
},
36+
{
37+
"name":"wallet",
38+
"type":"address"
39+
}
40+
],
41+
"Mail":[
42+
{
43+
"name":"from",
44+
"type":"Person"
45+
},
46+
{
47+
"name":"to",
48+
"type":"Person"
49+
},
50+
{
51+
"name":"contents",
52+
"type":"string"
53+
}
54+
]
55+
},
56+
"primaryType":"Mail",
57+
"domain":{
58+
"name":"Ether Mail",
59+
"version":"1",
60+
"chainId":1,
61+
"verifyingContract":"0xCcCCccccCCCCcCCCCCCcCcCccCcCCCcCcccccccC"
62+
},
63+
"message":{
64+
"from":{
65+
"name":"Cow",
66+
"wallet":"0xCD2a3d9F938E13CD947Ec05AbC7FE734Df8DD826"
67+
},
68+
"to":{
69+
"name":"Bob",
70+
"wallet":"0xbBbBBBBbbBBBbbbBbbBbbbbBBbBbbbbBbBbbBBbB"
71+
},
72+
"contents":"Hello, Bob!"
73+
}
74+
}
75+
"""
76+
}

Tests/web3swiftTests/localTests/EIP712Tests.swift

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -105,4 +105,16 @@ class EIP712Tests: XCTestCase {
105105
chainId: chainId)
106106
XCTAssertEqual(signature.toHexString(), "9ee2aadf14739e1cafc3bc1a0b48457c12419d5b480a8ffa86eb7df538c82d0753ca2a6f8024dea576b383cbcbe5e2b181b087e489298674bf6512756cabc5b01b")
107107
}
108+
109+
func testEIP712TypedDataSigning() throws {
110+
let mnemonic = "normal dune pole key case cradle unfold require tornado mercy hospital buyer"
111+
let keystore = try! BIP32Keystore(mnemonics: mnemonic, password: "", mnemonicsPassword: "")!
112+
let account = keystore.addresses?[0]
113+
let eip712TypedData = try EIP712Parser.parse(EIP712TestData.testTypedDataPayload)
114+
let signature = try Web3Signer.signEIP712(
115+
eip712TypedData,
116+
keystore: keystore,
117+
account: account!)
118+
XCTAssertEqual(signature.toHexString(), "70d1f5d9eac7b6303683d0792ea8dc93369e3b79888c4e0b86121bec19f479ba4067cf7ac3f8208cbc60a706c4793c2c17e19637298bb31642e531619272b26e1b")
119+
}
108120
}

Tests/web3swiftTests/localTests/EIP712TypedDataPayloadTests.swift

Lines changed: 7 additions & 74 deletions
Original file line numberDiff line numberDiff line change
@@ -13,75 +13,8 @@ import web3swift
1313

1414
/// Tests based primarily on the following example https://eips.ethereum.org/assets/eip-712/Example.js
1515
class EIP712TypedDataPayloadTests: XCTestCase {
16-
let testTypedDataPayload = """
17-
{
18-
"types":{
19-
"EIP712Domain":[
20-
{
21-
"name":"name",
22-
"type":"string"
23-
},
24-
{
25-
"name":"version",
26-
"type":"string"
27-
},
28-
{
29-
"name":"chainId",
30-
"type":"uint256"
31-
},
32-
{
33-
"name":"verifyingContract",
34-
"type":"address"
35-
}
36-
],
37-
"Person":[
38-
{
39-
"name":"name",
40-
"type":"string"
41-
},
42-
{
43-
"name":"wallet",
44-
"type":"address"
45-
}
46-
],
47-
"Mail":[
48-
{
49-
"name":"from",
50-
"type":"Person"
51-
},
52-
{
53-
"name":"to",
54-
"type":"Person"
55-
},
56-
{
57-
"name":"contents",
58-
"type":"string"
59-
}
60-
]
61-
},
62-
"primaryType":"Mail",
63-
"domain":{
64-
"name":"Ether Mail",
65-
"version":"1",
66-
"chainId":1,
67-
"verifyingContract":"0xCcCCccccCCCCcCCCCCCcCcCccCcCCCcCcccccccC"
68-
},
69-
"message":{
70-
"from":{
71-
"name":"Cow",
72-
"wallet":"0xCD2a3d9F938E13CD947Ec05AbC7FE734Df8DD826"
73-
},
74-
"to":{
75-
"name":"Bob",
76-
"wallet":"0xbBbBBBBbbBBBbbbBbbBbbbbBBbBbbbbBbBbbBBbB"
77-
},
78-
"contents":"Hello, Bob!"
79-
}
80-
}
81-
"""
82-
8316
func testEIP712Parser() throws {
84-
let parsedEip712TypedData = try EIP712Parser.parse(testTypedDataPayload)
17+
let parsedEip712TypedData = try EIP712Parser.parse(EIP712TestData.testTypedDataPayload)
8518

8619
XCTAssertEqual(parsedEip712TypedData.types.count, 3)
8720
let eip712Domain = parsedEip712TypedData.types["EIP712Domain"]
@@ -210,21 +143,21 @@ class EIP712TypedDataPayloadTests: XCTestCase {
210143
}
211144

212145
func testEIP712EncodeType() throws {
213-
let parsedEip712TypedData = try EIP712Parser.parse(testTypedDataPayload)
146+
let parsedEip712TypedData = try EIP712Parser.parse(EIP712TestData.testTypedDataPayload)
214147
try XCTAssertEqual(parsedEip712TypedData.encodeType("EIP712Domain"), "EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)")
215148
try XCTAssertEqual(parsedEip712TypedData.encodeType("Person"), "Person(string name,address wallet)")
216149
try XCTAssertEqual(parsedEip712TypedData.encodeType("Mail"), "Mail(Person from,Person to,string contents)Person(string name,address wallet)")
217150
}
218151

219152
func testEIP712TypeHash() throws {
220-
let parsedEip712TypedData = try EIP712Parser.parse(testTypedDataPayload)
153+
let parsedEip712TypedData = try EIP712Parser.parse(EIP712TestData.testTypedDataPayload)
221154
try XCTAssertEqual(parsedEip712TypedData.typeHash("EIP712Domain"), "0x8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f")
222155
try XCTAssertEqual(parsedEip712TypedData.typeHash("Person"), "0xb9d8c78acf9b987311de6c7b45bb6a9c8e1bf361fa7fd3467a2163f994c79500")
223156
try XCTAssertEqual(parsedEip712TypedData.typeHash("Mail"), "0xa0cedeb2dc280ba39b857546d74f5549c3a1d7bdc2dd96bf881f76108e23dac2")
224157
}
225158

226159
func testEIP712EncodeData() throws {
227-
let parsedEip712TypedData = try EIP712Parser.parse(testTypedDataPayload)
160+
let parsedEip712TypedData = try EIP712Parser.parse(EIP712TestData.testTypedDataPayload)
228161
let encodedMessage = "a0cedeb2dc280ba39b857546d74f5549c3a1d7bdc2dd96bf881f76108e23dac2fc71e5fa27ff56c350aa531bc129ebdf613b772b6604664f5d8dbe21b85eb0c8cd54f074a4af31b4411ff6a60c9719dbd559c221c8ac3492d9d872b041d703d1b5aadf3154a261abdd9086fc627b61efca26ae5702701d05cd2305f7c52a2fc8"
229162
XCTAssertEqual(try parsedEip712TypedData.encodeData().toHexString(), encodedMessage)
230163
XCTAssertEqual(try parsedEip712TypedData.encodeData(parsedEip712TypedData.primaryType, data: parsedEip712TypedData.message).toHexString(), encodedMessage)
@@ -242,19 +175,19 @@ class EIP712TypedDataPayloadTests: XCTestCase {
242175
}
243176

244177
func testEIP712StructHash() throws {
245-
let parsedEip712TypedData = try EIP712Parser.parse(testTypedDataPayload)
178+
let parsedEip712TypedData = try EIP712Parser.parse(EIP712TestData.testTypedDataPayload)
246179
XCTAssertEqual(try parsedEip712TypedData.structHash().toHexString(), "c52c0ee5d84264471806290a3f2c4cecfc5490626bf912d01f240d7a274b371e")
247180
XCTAssertEqual(try parsedEip712TypedData.structHash("EIP712Domain", data: parsedEip712TypedData.domain).toHexString(),
248181
"f2cee375fa42b42143804025fc449deafd50cc031ca257e0b194a650a912090f")
249182
}
250183

251184
func testEIP712SignHash() throws {
252-
let parsedEip712TypedData = try EIP712Parser.parse(testTypedDataPayload)
185+
let parsedEip712TypedData = try EIP712Parser.parse(EIP712TestData.testTypedDataPayload)
253186
XCTAssertEqual(try parsedEip712TypedData.signHash().toHexString(), "be609aee343fb3c4b28e1df9e632fca64fcfaede20f02e86244efddf30957bd2")
254187
}
255188

256189
func testEIP712Signing() throws {
257-
let parsedEip712TypedData = try EIP712Parser.parse(testTypedDataPayload)
190+
let parsedEip712TypedData = try EIP712Parser.parse(EIP712TestData.testTypedDataPayload)
258191
let privateKey = Data.fromHex("cow".sha3(.keccak256).addHexPrefix())!
259192
let publicKey = Utilities.privateToPublic(privateKey)!
260193
let address = Utilities.publicToAddress(publicKey)!

0 commit comments

Comments
 (0)