String permitJson = """
{
"domain": {
"name": "USD Coin",
"version": "2",
"chainId": 1,
"verifyingContract": "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48"
},
"types": {
"EIP712Domain": [
{"name": "name", "type": "string"},
{"name": "version", "type": "string"},
{"name": "chainId", "type": "uint256"},
{"name": "verifyingContract", "type": "address"}
],
"Permit": [
{"name": "owner", "type": "address"},
{"name": "spender", "type": "address"},
{"name": "value", "type": "uint256"},
{"name": "nonce", "type": "uint256"},
{"name": "deadline", "type": "uint256"}
]
},
"primaryType": "Permit",
"message": {
"owner": "0xYourWalletAddress",
"spender": "0xSpenderAddress",
"value": "1000000",
"nonce": "0",
"deadline": "1735689600"
}
}""";
String signature = client.signTypedData(SignTypedDataOpts.builder()
.typedDataJson(permitJson)
.walletProperties(walletProperties)
.externalServerKeyShares(externalServerKeyShares)
.build()
).join();