Skip to content

Commit

Permalink
Add parsing of arrays for eip712
Browse files Browse the repository at this point in the history
  • Loading branch information
abdrasulov committed Sep 8, 2022
1 parent 2e8a084 commit 04e1904
Show file tree
Hide file tree
Showing 2 changed files with 5 additions and 39 deletions.
3 changes: 1 addition & 2 deletions ethereumkit/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -84,8 +84,7 @@ dependencies {
kapt "androidx.room:room-compiler:$room_version"

//Eip712
def kethereum_version = "0.83.6"
implementation "com.github.komputing.kethereum:erc712:$kethereum_version"
implementation 'org.web3j:crypto:4.9.4'

// Test helpers
testImplementation 'junit:junit:4.13.2'
Expand Down
Original file line number Diff line number Diff line change
@@ -1,55 +1,22 @@
package io.horizontalsystems.ethereumkit.crypto

import com.google.gson.Gson
import pm.gnosis.eip712.EIP712JsonAdapter
import pm.gnosis.eip712.EIP712JsonParser
import pm.gnosis.eip712.typedDataHash
import java.io.BufferedReader
import java.io.InputStream
import java.io.InputStreamReader
import org.web3j.crypto.StructuredDataEncoder

class EIP712Encoder {

private val eip712JsonAdapter = EIP712GsonAdapter()
private val gson = Gson()

fun encodeTypedDataHash(rawJsonMessage: String): ByteArray {
val domainWithMessage = EIP712JsonParser(eip712JsonAdapter).parseMessage(rawJsonMessage)
return typedDataHash(domainWithMessage.message, domainWithMessage.domain)
return StructuredDataEncoder(rawJsonMessage).hashStructuredData()
}

fun parseTypedData(rawJsonMessage: String): TypedData? {
return try {
eip712JsonAdapter.parseTypedData(rawJsonMessage)
gson.fromJson(rawJsonMessage, TypedData::class.java)
} catch (error: Throwable) {
null
}
}

private class EIP712GsonAdapter : EIP712JsonAdapter {
private val gson = Gson()

override fun parse(inputStream: InputStream): EIP712JsonAdapter.Result {
val typedData = gson.fromJson(BufferedReader(InputStreamReader(inputStream)), TypedData::class.java)
return convert(typedData)
}

override fun parse(typedDataJson: String): EIP712JsonAdapter.Result {
return convert(parseTypedData(typedDataJson))
}

fun parseTypedData(rawJsonMessage: String): TypedData {
return gson.fromJson(rawJsonMessage, TypedData::class.java)
}

private fun convert(typedData: TypedData): EIP712JsonAdapter.Result {
return EIP712JsonAdapter.Result(
primaryType = typedData.primaryType,
domain = typedData.domain,
message = typedData.message,
types = typedData.types.mapValues { (_, types) -> types.map { EIP712JsonAdapter.Parameter(it.name, it.type) } }
)
}
}
}

data class TypedData(
Expand Down

0 comments on commit 04e1904

Please sign in to comment.