Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Support preset types in StarknetTypedData #182

Merged
merged 147 commits into from
Apr 8, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
147 commits
Select commit Hold shift + click to select a range
cd299f8
Update `StarknetExecutionResources`; Add `StarknetComputationResources`
DelevoXDG Mar 18, 2024
d2d94df
Update prefund amounts and max fee for declare in DevnetClient
DelevoXDG Mar 18, 2024
e012d54
Adjust tx receipt tests
DelevoXDG Mar 18, 2024
96fc841
Update `StarknetFeeEstimate` and related logic
DelevoXDG Mar 18, 2024
24de548
Finish "Update prefund amounts and max fee for declare in DevnetClient"
DelevoXDG Mar 18, 2024
2a36b16
Fix docstring for `toResourceBounds`
DelevoXDG Mar 18, 2024
10c1bc3
Use ternary operator in `.toResourceBounds()`
DelevoXDG Mar 18, 2024
84c5dde
Bump devnet
DelevoXDG Mar 18, 2024
db69dba
Use Cairo 1 accounts for tests to pass
DelevoXDG Mar 21, 2024
ee0a9a2
Fix #147 (Specify transaction version in test cases names)
DelevoXDG Mar 21, 2024
5f87f2c
Add missing `segment_arena_builtin` to `StarknetComputationResources`…
DelevoXDG Mar 21, 2024
1ba4133
Add optional `executionResources` to `StarknetL1HandlerTransactionTrace`
DelevoXDG Mar 21, 2024
a606158
Empty
DelevoXDG Mar 22, 2024
d2bfbc8
Introduce `Domain` and `Revision`
DelevoXDG Mar 26, 2024
3f0409c
Add `HashMethod` enum; Use **poseidon** hash for rev 1 typed data
DelevoXDG Mar 26, 2024
49031c5
Update `encode(dependency)` logic in line with rev 1
DelevoXDG Mar 26, 2024
c681354
Update `encode` to take `revision` into account
DelevoXDG Mar 26, 2024
58c0c8d
Mark `Starknet` as `@testable` in `TypedDataTests`
DelevoXDG Mar 26, 2024
4bb69cc
Add rev 1 test case
DelevoXDG Mar 26, 2024
a32823d
Format
DelevoXDG Mar 26, 2024
e5f2e71
Review chnages
DelevoXDG Mar 26, 2024
b894924
Review changes
DelevoXDG Mar 26, 2024
19e5338
Make `HashMethod` public; Add `hash` for two elements
DelevoXDG Mar 27, 2024
efee210
Add `MerkleTree`
DelevoXDG Mar 27, 2024
1ac7a1f
Format
DelevoXDG Mar 27, 2024
b0d94a2
Fix tests
DelevoXDG Mar 27, 2024
0006110
Add `merkletree` to reserved type names
DelevoXDG Mar 27, 2024
371fac7
Add `MerkleTreeType`, `StandardType`; Convert `TypeDeclaration` to pr…
DelevoXDG Mar 27, 2024
cb2dd71
Move `StarknetTypedData.swift` to `TypedData/StarknetTypedData.swift`
DelevoXDG Mar 27, 2024
89c4d7e
Move `TypeDeclaration` related extension to `TypeDeclaration.swift`
DelevoXDG Mar 27, 2024
f38cc0d
Fix `TypeDeclarationWrapper` decoding of `merkletree`
DelevoXDG Mar 27, 2024
1d3f8e9
Support `merkletree` basic type in `StarknetTypedData`
DelevoXDG Mar 27, 2024
6822784
Split `testSignTypedData` into rev 0 and 1 tests
DelevoXDG Mar 27, 2024
1a19f30
Merge branch 'feat/159-snip-12' into feat/159-2-merkletree
DelevoXDG Mar 27, 2024
e330ede
Move build logic to `build` method
DelevoXDG Mar 27, 2024
403bffc
Review changes
DelevoXDG Mar 27, 2024
39f671e
Rename `HashMethod`->`StarknetHashMethod`
DelevoXDG Mar 27, 2024
481872c
Merge branch 'feat/159-snip-12' into feat/159-2-merkletree
DelevoXDG Mar 28, 2024
a939de5
Fix `build` bug post `e330ede93f329de682e02a842d5db010a4243758`
DelevoXDG Mar 28, 2024
1ed2e32
Review changes
DelevoXDG Mar 28, 2024
2ec8d5d
Add `String.isArray()` extension; Refactor `.strippingPointer()` exte…
DelevoXDG Mar 28, 2024
2890b67
Move type verification logic to `verifyTypes()` helper
DelevoXDG Mar 28, 2024
5673e04
Refactor `verifyTypes()`
DelevoXDG Mar 28, 2024
0716893
Restrict empty names; Refactor tests
DelevoXDG Mar 28, 2024
6c2ceaa
Refactor `revision` related logic
DelevoXDG Mar 28, 2024
e0cb126
Require domain type; Refactor tests
DelevoXDG Mar 28, 2024
350cadd
Remove `domainNotDefined`; Use `dependencyNotDefined` instead
DelevoXDG Mar 28, 2024
5b061d9
Disallow dangling types in `verifyTypes()`
DelevoXDG Mar 28, 2024
ddbfecb
Fix `testMissingDependency` after dangling types change
DelevoXDG Mar 28, 2024
1ea8094
Add extra info to `StarknetTypedDataError` errors
DelevoXDG Mar 28, 2024
495a06e
Merge branch 'main' into feat/159-snip-12
DelevoXDG Mar 28, 2024
7206647
Merge branch 'feat/159-snip-12' into feat/159-2-merkletree
DelevoXDG Mar 28, 2024
c6c4e79
Merge branch 'feat/159-2-merkletree' into feat/159-3-verify-types
DelevoXDG Mar 28, 2024
a8eced5
Bump swift version to 5.10.0
DelevoXDG Mar 28, 2024
b093f02
Bump `swift-tools-version` to 5.9
DelevoXDG Mar 28, 2024
5600de2
Bump runner from `macos-12` to `macos-14`
DelevoXDG Mar 28, 2024
b8390f9
Bump swift version to 5.10.0
DelevoXDG Mar 28, 2024
81fa2f3
Bump `swift-tools-version` to 5.9
DelevoXDG Mar 28, 2024
d8caa2f
Bump runner from `macos-12` to `macos-14`
DelevoXDG Mar 28, 2024
4c27593
Change version to `5.9.0` in `.swift-version`
DelevoXDG Mar 28, 2024
5db449a
Merge branch 'feat/171-bump-swift-version' into feat/159-snip-12
DelevoXDG Mar 28, 2024
e5486a5
Merge branch 'feat/159-snip-12' into feat/159-2-merkletree
DelevoXDG Mar 28, 2024
2891c5a
Format
DelevoXDG Mar 28, 2024
5a197d7
Merge branch 'feat/159-2-merkletree' into feat/159-3-verify-types
DelevoXDG Mar 28, 2024
43fbb0d
Bump version to 5.10.0
DelevoXDG Mar 28, 2024
04c743c
Setup `Xcode 15.3`
DelevoXDG Mar 28, 2024
3096f02
Refactor array hanlding logic
DelevoXDG Mar 29, 2024
ee05381
Rename `hash()` -> `hashArray()`
DelevoXDG Mar 29, 2024
d09d6d9
Merge branch 'feat/159-snip-12' into feat/159-2-merkletree
DelevoXDG Mar 29, 2024
a407d21
Merge branch 'feat/159-2-merkletree' into feat/159-3-verify-types
DelevoXDG Mar 29, 2024
503509c
Merge branch 'feat/159-3-verify-types' into feat/159-4-basic-types
DelevoXDG Mar 29, 2024
8302000
Support `bool` basic type
DelevoXDG Mar 29, 2024
6e7358b
Merge `encode()` cases relying on same `unwrap` methods
DelevoXDG Mar 29, 2024
25260c3
Update `verifyTypes()` to include `bool` and all rev 1 basic types
DelevoXDG Mar 29, 2024
b1f1ee9
Support `ContractAddress`, `ClassHash`
DelevoXDG Mar 29, 2024
219f25d
Add `Felt(fromSigned)` initializer
DelevoXDG Mar 29, 2024
2fdc240
Support `u128`, `i128`, `timestamp`
DelevoXDG Mar 29, 2024
c85a2e6
Remove unused import
DelevoXDG Mar 29, 2024
c015793
Don't verify types that are not yet added
DelevoXDG Mar 29, 2024
d431053
Merge branch 'feat/159-4-basic-types' into feat/159-5-int-basic-types
DelevoXDG Mar 29, 2024
01eb940
Verify `i128`, `u128`, `timestamp`
DelevoXDG Mar 29, 2024
590d346
Add `StarknetByteArray`
DelevoXDG Mar 29, 2024
60bfec3
Support `string` revision 1 in `StarknetTypedData`
DelevoXDG Mar 29, 2024
5101ab5
Remove unnecessary `print()` in tests
DelevoXDG Mar 29, 2024
a01b7b4
Rename `Felt.byteLength`->`.byteWidth`
DelevoXDG Mar 30, 2024
b927634
Move String extensions to a common file
DelevoXDG Mar 30, 2024
d8524ee
Review changes
DelevoXDG Mar 30, 2024
9feaf94
Merge branch 'feat/171-bump-swift-version' into feat/159-snip-12
DelevoXDG Apr 2, 2024
090763c
Merge branch 'feat/159-snip-12' into feat/159-2-merkletree
DelevoXDG Apr 2, 2024
932790c
Merge branch 'feat/159-2-merkletree' into feat/159-3-verify-types
DelevoXDG Apr 2, 2024
47563a9
Merge branch 'feat/159-3-verify-types' into feat/159-4-basic-types
DelevoXDG Apr 2, 2024
4ce61a6
Merge branch 'feat/159-4-basic-types' into feat/159-5-int-basic-types
DelevoXDG Apr 2, 2024
c7e2269
Merge branch 'feat/159-5-int-basic-types' into feat/159-6-byte-array
DelevoXDG Apr 2, 2024
606a2bf
Add `testEncodeType`
DelevoXDG Apr 3, 2024
ddce0c3
Merge branch 'feat/159-snip-12' of https://github.com/software-mansio…
DelevoXDG Apr 3, 2024
3e0a5da
Merge branch 'feat/159-snip-12' into feat/159-2-merkletree
DelevoXDG Apr 3, 2024
8966f27
Add merkle tree encodeType tests
DelevoXDG Apr 3, 2024
0b9a346
Merge branch 'feat/159-2-merkletree' into feat/159-3-verify-types
DelevoXDG Apr 3, 2024
e8f8e20
Merge branch 'feat/159-3-verify-types' into feat/159-4-basic-types
DelevoXDG Apr 3, 2024
6015904
Merge branch 'feat/159-4-basic-types' into feat/159-5-int-basic-types
DelevoXDG Apr 3, 2024
9a13037
Merge branch 'feat/159-5-int-basic-types' into feat/159-6-byte-array
DelevoXDG Apr 3, 2024
abd79ca
Add `CasesRev1.basicTypes` case to `testEncodeType()`
DelevoXDG Apr 3, 2024
aa13537
Add `EnumType: TypeDeclaration`
DelevoXDG Apr 3, 2024
ac1040b
Add `String` helper extensions: `isEnum()`, `extractEnumTypes()`
DelevoXDG Apr 3, 2024
c249838
Update `verifyTypes` to handle `enum`
DelevoXDG Apr 3, 2024
2582d98
Add `.unsupportedType` variant to `StarknetTypedDataError`
DelevoXDG Apr 3, 2024
26409ab
Support `enum` type
DelevoXDG Apr 3, 2024
e2e3002
Make `revision`, `hashMethod` and `hashArray()` private
DelevoXDG Apr 3, 2024
622b5c3
Add docstring
DelevoXDG Apr 4, 2024
bdfc7dc
Add docstring
DelevoXDG Apr 4, 2024
093113d
Merge branch 'feat/159-snip-12' into feat/159-2-merkletree
DelevoXDG Apr 4, 2024
d426775
Merge branch 'feat/159-2-merkletree' into feat/159-3-verify-types
DelevoXDG Apr 4, 2024
ed61f7a
Merge branch 'feat/159-3-verify-types' into feat/159-4-basic-types
DelevoXDG Apr 4, 2024
465152a
Merge branch 'feat/159-4-basic-types' into feat/159-5-int-basic-types
DelevoXDG Apr 4, 2024
ad52186
Merge branch 'feat/159-5-int-basic-types' into feat/159-6-byte-array
DelevoXDG Apr 4, 2024
d689844
Merge branch 'feat/159-6-byte-array' into feat/159-7-enum
DelevoXDG Apr 4, 2024
daf429b
Make `revision` public
DelevoXDG Apr 4, 2024
947ebd6
Merge branch 'feat/159-snip-12' into feat/159-2-merkletree
DelevoXDG Apr 4, 2024
1d61523
Merge branch 'feat/159-2-merkletree' into feat/159-3-verify-types
DelevoXDG Apr 4, 2024
759afd0
Merge branch 'feat/159-3-verify-types' into feat/159-4-basic-types
DelevoXDG Apr 4, 2024
3d4e7e5
Merge branch 'feat/159-4-basic-types' into feat/159-5-int-basic-types
DelevoXDG Apr 4, 2024
36545a7
Merge branch 'feat/159-5-int-basic-types' into feat/159-6-byte-array
DelevoXDG Apr 4, 2024
d84f009
Merge branch 'feat/159-6-byte-array' into feat/159-7-enum
DelevoXDG Apr 4, 2024
f14872a
empty
DelevoXDG Apr 4, 2024
5330533
Support preset types
DelevoXDG Apr 3, 2024
6f44b1f
Reorder `getBasicTypes()` and `getPresetTypes()`
DelevoXDG Apr 3, 2024
786b927
Make `getBasicTypes()` static for consistency
DelevoXDG Apr 3, 2024
726c183
Add preset type redefinition tests
DelevoXDG Apr 4, 2024
e201759
Make `StarknetHashMethod` methods public
DelevoXDG Apr 5, 2024
d62ceaf
Add `.invalidNumberError` to be used instead of `.decodingError`
DelevoXDG Apr 5, 2024
28b288e
Add `.invalidBool` to be used instead of `.decodingError`
DelevoXDG Apr 5, 2024
3ef48b0
Rename `invalidNumberError`->`invalidNumericValue`
DelevoXDG Apr 5, 2024
0ef4417
Merge branch 'main' into feat/159-2-merkletree
DelevoXDG Apr 5, 2024
5ebfeac
Fix merge anomaly
DelevoXDG Apr 5, 2024
4c0b593
Merge branch 'feat/159-2-merkletree' into feat/159-3-verify-types
DelevoXDG Apr 5, 2024
b1642be
Merge branch 'feat/159-3-verify-types' into feat/159-4-basic-types
DelevoXDG Apr 8, 2024
f903902
Merge branch 'main' into feat/159-3-verify-types
DelevoXDG Apr 8, 2024
2b5eefc
Merge branch 'feat/159-3-verify-types' into feat/159-4-basic-types
DelevoXDG Apr 8, 2024
a0118c1
Merge branch 'main' into feat/159-4-basic-types
DelevoXDG Apr 8, 2024
109c270
Merge branch 'feat/159-4-basic-types' into feat/159-5-int-basic-types
DelevoXDG Apr 8, 2024
8926f44
Merge branch 'main' into feat/159-5-int-basic-types
DelevoXDG Apr 8, 2024
9629f7b
Merge branch 'feat/159-5-int-basic-types' into feat/159-6-byte-array
DelevoXDG Apr 8, 2024
464ea22
Merge branch 'main' into feat/159-6-byte-array
DelevoXDG Apr 8, 2024
bb5fbde
Merge branch 'main' into feat/159-6-byte-array
DelevoXDG Apr 8, 2024
b224357
Merge branch 'feat/159-6-byte-array' into feat/159-7-enum
DelevoXDG Apr 8, 2024
99d6ae5
Merge branch 'feat/159-7-enum' into feat/159-8-preset-types
DelevoXDG Apr 8, 2024
7f2318f
Merge branch 'main' into feat/159-8-preset-types
DelevoXDG Apr 8, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
78 changes: 59 additions & 19 deletions Sources/Starknet/Data/TypedData/StarknetTypedData.swift
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ import Foundation
public enum StarknetTypedDataError: Error, Equatable {
case decodingError
case invalidRevision(Felt)
case presetTypeRedefinition(String)
case basicTypeRedefinition(String)
case invalidTypeName(String)
case danglingType(String)
Expand Down Expand Up @@ -73,15 +74,15 @@ public struct StarknetTypedData: Codable, Equatable, Hashable {
public let domain: Domain
public let message: [String: Element]

public var revision: Revision {
try! domain.resolveRevision()
}
public let revision: Revision
private let allTypes: [String: [TypeDeclarationWrapper]]
private let hashMethod: StarknetHashMethod

private var hashMethod: StarknetHashMethod {
switch revision {
case .v0: .pedersen
case .v1: .poseidon
}
fileprivate enum CodingKeys: CodingKey {
case types
case primaryType
case domain
case message
}

private func hashArray(_ values: [Felt]) -> Felt {
Expand All @@ -96,6 +97,18 @@ public struct StarknetTypedData: Codable, Equatable, Hashable {
self.domain = domain
self.message = message

self.revision = try domain.resolveRevision()

self.allTypes = self.types.merging(
Self.getPresetTypes(revision: self.revision),
uniquingKeysWith: { current, _ in current }
)

self.hashMethod = switch revision {
case .v0: .pedersen
case .v1: .poseidon
}

try self.verifyTypes()
}

Expand Down Expand Up @@ -128,7 +141,8 @@ public struct StarknetTypedData: Codable, Equatable, Hashable {
throw StarknetTypedDataError.dependencyNotDefined(domain.separatorName)
}

let basicTypes = getBasicTypes()
let basicTypes = Self.getBasicTypes(revision: revision)
let presetTypes = Self.getPresetTypes(revision: revision)

let referencedTypes = try Set(types.values.flatMap { type in
try type.flatMap { param in
Expand All @@ -154,6 +168,9 @@ public struct StarknetTypedData: Codable, Equatable, Hashable {
guard !basicTypes.contains(typeName) else {
throw StarknetTypedDataError.basicTypeRedefinition(typeName)
}
guard presetTypes[typeName] == nil else {
throw StarknetTypedDataError.presetTypeRedefinition(typeName)
}
guard !typeName.isEmpty,
!typeName.isArray(),
!typeName.isEnum(),
Expand Down Expand Up @@ -193,13 +210,13 @@ public struct StarknetTypedData: Codable, Equatable, Hashable {

while !toVisit.isEmpty {
let currentType = toVisit.removeFirst()
let params = types[currentType] ?? []
let params = allTypes[currentType] ?? []

try params.forEach { param in
let extractedTypes = try extractTypes(from: param).map { $0.strippingPointer() }

extractedTypes.forEach { extractedType in
if types.keys.contains(extractedType), !dependencies.contains(extractedType) {
if allTypes.keys.contains(extractedType), !dependencies.contains(extractedType) {
dependencies.append(extractedType)
toVisit.append(extractedType)
}
Expand Down Expand Up @@ -239,7 +256,7 @@ public struct StarknetTypedData: Codable, Equatable, Hashable {
return "(\(enumTypes))"
}

guard let params = types[dependency] else {
guard let params = allTypes[dependency] else {
throw StarknetTypedDataError.dependencyNotDefined(dependency)
}

Expand All @@ -265,7 +282,7 @@ public struct StarknetTypedData: Codable, Equatable, Hashable {
}

func encode(element: Element, forType typeName: String, context: Context? = nil) throws -> Felt {
if types.keys.contains(typeName) {
if allTypes.keys.contains(typeName) {
let object = try unwrapObject(from: element)

return try getStructHash(typeName: typeName, data: object)
Expand Down Expand Up @@ -312,7 +329,7 @@ public struct StarknetTypedData: Codable, Equatable, Hashable {
private func encode(data: [String: Element], forType typeName: String) throws -> [Felt] {
var values: [Felt] = []

guard let types = types[typeName] else {
guard let types = allTypes[typeName] else {
throw StarknetTypedDataError.encodingError
}

Expand Down Expand Up @@ -473,13 +490,36 @@ private extension StarknetTypedData {
static let basicTypesV0: Set = ["felt", "bool", "string", "selector", "merkletree"]
static let basicTypesV1: Set = basicTypesV0.union(["enum", "u128", "i128", "ContractAddress", "ClassHash", "timestamp", "shortstring"])

func getBasicTypes() -> Set<String> {
static let presetTypesV1 = [
"u256": [
StandardType(name: "low", type: "u128"),
StandardType(name: "high", type: "u128"),
],
"TokenAmount": [
StandardType(name: "token_address", type: "ContractAddress"),
StandardType(name: "amount", type: "u256"),
],
"NftId": [
StandardType(name: "collection_address", type: "ContractAddress"),
StandardType(name: "token_id", type: "u256"),
],
]

static func getBasicTypes(revision: Revision) -> Set<String> {
switch revision {
case .v0:
Self.basicTypesV0
basicTypesV0
case .v1:
Self.basicTypesV1
basicTypesV1
}
}

static func getPresetTypes(revision: Revision) -> [String: [TypeDeclarationWrapper]] {
let types: [String: [any TypeDeclaration]] = switch revision {
case .v0: [:]
case .v1: Self.presetTypesV1
}
return types.mapValues { $0.map { TypeDeclarationWrapper($0) } }
}
}

Expand Down Expand Up @@ -621,7 +661,7 @@ extension StarknetTypedData {
private func getEnumVariants(context: Context) throws -> [TypeDeclarationWrapper] {
let enumType: EnumType = try resolveType(context)

guard let variants = types[enumType.contains] else {
guard let variants = allTypes[enumType.contains] else {
throw StarknetTypedDataError.dependencyNotDefined(enumType.contains)
}

Expand Down Expand Up @@ -652,7 +692,7 @@ extension StarknetTypedData {
private func resolveType<T: TypeDeclaration>(_ context: Context) throws -> T {
let (parent, key) = (context.parent, context.key)

guard let parentType = types[parent] else {
guard let parentType = allTypes[parent] else {
throw StarknetTypedDataError.parentNotDefined
}
guard let targetType = parentType.first(where: { $0.type.name == key }) else {
Expand Down
28 changes: 25 additions & 3 deletions Tests/StarknetTests/Data/TypedDataTests.swift
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ final class TypedDataTests: XCTestCase {
static let td = try! loadTypedDataFromFile(name: "typed_data_rev_1_example")
static let tdFeltMerkleTree = try! loadTypedDataFromFile(name: "typed_data_rev_1_felt_merkletree_example")
static let tdBasicTypes = try! loadTypedDataFromFile(name: "typed_data_rev_1_basic_types_example")
static let tdPresetTypes = try! loadTypedDataFromFile(name: "typed_data_rev_1_preset_types_example")
static let tdEnum = try! loadTypedDataFromFile(name: "typed_data_rev_1_enum_example")
}

Expand Down Expand Up @@ -95,23 +96,32 @@ final class TypedDataTests: XCTestCase {
}

func testTypesRedifintion() throws {
func testTypeRedifintion(_ type: String, _ revision: StarknetTypedData.Revision) throws {
func testBasicTypeRedifintion(_ type: String, _ revision: StarknetTypedData.Revision) throws {
try XCTAssertThrowsError(makeTypedData(type, revision)) { error in
XCTAssertEqual(error as? StarknetTypedDataError, .basicTypeRedefinition(type))
}
}
func testPresetTypeRedifintion(_ type: String, _ revision: StarknetTypedData.Revision) throws {
try XCTAssertThrowsError(makeTypedData(type, revision)) { error in
XCTAssertEqual(error as? StarknetTypedDataError, .presetTypeRedefinition(type))
}
}

let basicTypesV0 = [
"felt", "bool", "string", "selector", "merkletree",
]
let basicTypesV1 = basicTypesV0 + ["enum", "u128", "i128", "ContractAddress", "ClassHash", "timestamp", "shortstring"]
let presetTypesV1 = ["u256", "TokenAmount", "NftId"]

try XCTAssertNoThrow(makeTypedData("myType", .v0))
try basicTypesV0.forEach { type in
try testTypeRedifintion(type, .v0)
try testBasicTypeRedifintion(type, .v0)
}
try basicTypesV1.forEach { type in
try testTypeRedifintion(type, .v1)
try testBasicTypeRedifintion(type, .v1)
}
try presetTypesV1.forEach { type in
try testPresetTypeRedifintion(type, .v1)
}
}

Expand Down Expand Up @@ -287,6 +297,7 @@ final class TypedDataTests: XCTestCase {
(Self.CasesRev1.td, "Person", "0x30f7aa21b8d67cb04c30f962dd29b95ab320cb929c07d1605f5ace304dadf34"),
(Self.CasesRev1.td, "Mail", "0x560430bf7a02939edd1a5c104e7b7a55bbab9f35928b1cf5c7c97de3a907bd"),
(Self.CasesRev1.tdBasicTypes, "Example", "0x1f94cd0be8b4097a41486170fdf09a4cd23aefbc74bb2344718562994c2c111"),
(Self.CasesRev1.tdPresetTypes, "Example", "0x1a25a8bb84b761090b1fadaebe762c4b679b0d8883d2bedda695ea340839a55"),
(Self.CasesRev1.tdEnum, "Example", "0x380a54d417fb58913b904675d94a8a62e2abc3467f4b5439de0fd65fafdd1a8"),
(Self.CasesRev1.tdFeltMerkleTree, "Example", "0x160b9c0e8a7c561f9c5d9e3cc2990a1b4d26e94aa319e9eb53e163cd06c71be"),
]
Expand Down Expand Up @@ -349,6 +360,12 @@ final class TypedDataTests: XCTestCase {
"message",
"0x391d09a51a31dd17f7270aaa9904688fbeeb9c56a7e2d15c5a6af32e981c730"
),
(
Self.CasesRev1.tdPresetTypes,
"Example",
"message",
"0x74fba3f77f8a6111a9315bac313bf75ecfa46d1234e0fda60312fb6a6517667"
),
(
Self.CasesRev1.tdEnum,
"Example",
Expand Down Expand Up @@ -416,6 +433,11 @@ final class TypedDataTests: XCTestCase {
"0xcd2a3d9f938e13cd947ec05abc7fe734df8dd826",
"0x2d80b87b8bc32068247c779b2ef0f15f65c9c449325e44a9df480fb01eb43ec"
),
(
Self.CasesRev1.tdPresetTypes,
"0xcd2a3d9f938e13cd947ec05abc7fe734df8dd826",
"0x185b339d5c566a883561a88fb36da301051e2c0225deb325c91bb7aa2f3473a"
),
(
Self.CasesRev1.tdEnum,
"0xcd2a3d9f938e13cd947ec05abc7fe734df8dd826",
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
{
"types": {
"StarknetDomain": [
{ "name": "name", "type": "shortstring" },
{ "name": "version", "type": "shortstring" },
{ "name": "chainId", "type": "shortstring" },
{ "name": "revision", "type": "shortstring" }
],
"Example": [
{ "name": "n0", "type": "TokenAmount" },
{ "name": "n1", "type": "NftId" }
]
},
"primaryType": "Example",
"domain": {
"name": "StarkNet Mail",
"version": "1",
"chainId": "1",
"revision": "1"
},
"message": {
"n0": {
"token_address": "0x049d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7",
"amount": {
"low": "0x3e8",
"high": "0x0"
}
},
"n1": {
"collection_address": "0x049d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7",
"token_id": {
"low": "0x3e8",
"high": "0x0"
}
}
}
}
Loading