Skip to content
Closed
Show file tree
Hide file tree
Changes from 1 commit
Commits
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
3 changes: 2 additions & 1 deletion Thirdweb/Thirdweb.RPC/ThirdwebRPC.cs
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@ public class ThirdwebRPC : IDisposable
private readonly object _responseLock = new();
private readonly object _cacheLock = new();
private readonly CancellationTokenSource _cancellationTokenSource = new();
private readonly JsonSerializerSettings _jsonSerializerSettings = new() { NullValueHandling = NullValueHandling.Ignore, };

private int _requestIdCounter = 1;

Expand Down Expand Up @@ -167,7 +168,7 @@ private ThirdwebRPC(ThirdwebClient client, BigInteger chainId)

private async Task SendBatchAsync(List<RpcRequest> batch)
{
var batchJson = JsonConvert.SerializeObject(batch);
var batchJson = JsonConvert.SerializeObject(batch, this._jsonSerializerSettings);
var content = new StringContent(batchJson, Encoding.UTF8, "application/json");

try
Expand Down
4 changes: 2 additions & 2 deletions Thirdweb/Thirdweb.Wallets/EngineWallet/EngineWallet.cs
Original file line number Diff line number Diff line change
Expand Up @@ -188,7 +188,7 @@ public Task<string> EthSign(string message)
throw new NotImplementedException();
}

public async Task<string> PersonalSign(byte[] rawMessage)
public async Task<string> PersonalSign(byte[] rawMessage, object originalMessage = null, BigInteger? chainId = null)
{
if (rawMessage == null)
{
Expand All @@ -207,7 +207,7 @@ public async Task<string> PersonalSign(byte[] rawMessage)
return JObject.Parse(content)["result"].Value<string>();
}

public async Task<string> PersonalSign(string message)
public async Task<string> PersonalSign(string message, object originalMessage = null, BigInteger? chainId = null)
{
if (string.IsNullOrEmpty(message))
{
Expand Down
8 changes: 6 additions & 2 deletions Thirdweb/Thirdweb.Wallets/IThirdwebWallet.cs
Original file line number Diff line number Diff line change
Expand Up @@ -56,15 +56,19 @@ public interface IThirdwebWallet
/// Signs a raw message using personal signing.
/// </summary>
/// <param name="rawMessage">The raw message to sign.</param>
/// <param name="originalMessage">Used for Ecosystem signing polciies purposes only.</param>
/// <param name="chainId">Used for Ecosystem signing polciies purposes only.</param>
/// <returns>The signed message.</returns>
public Task<string> PersonalSign(byte[] rawMessage);
public Task<string> PersonalSign(byte[] rawMessage, object originalMessage = null, BigInteger? chainId = null);

/// <summary>
/// Signs a message using personal signing.
/// </summary>
/// <param name="message">The message to sign.</param>
/// <param name="originalMessage">Used for Ecosystem signing polciies purposes only.</param>
/// <param name="chainId">Used for Ecosystem signing polciies purposes only.</param>
/// <returns>The signed message.</returns>
public Task<string> PersonalSign(string message);
public Task<string> PersonalSign(string message, object originalMessage = null, BigInteger? chainId = null);

/// <summary>
/// Recovers the address from a signed message using personal signing.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,8 @@ public partial class EcosystemWallet : IThirdwebWallet
private const string EMBEDDED_WALLET_PATH_V1 = $"{EMBEDDED_WALLET_BASE_PATH}/v1";
private const string ENCLAVE_PATH = $"{EMBEDDED_WALLET_PATH_V1}/enclave-wallet";

private readonly JsonSerializerSettings _jsonSerializerSettings = new() { NullValueHandling = NullValueHandling.Ignore, };

internal EcosystemWallet(
string ecosystemId,
string ecosystemPartnerId,
Expand Down Expand Up @@ -1001,17 +1003,26 @@ public Task<string> EthSign(string message)
throw new NotImplementedException();
}

public async Task<string> PersonalSign(byte[] rawMessage)
public async Task<string> PersonalSign(byte[] rawMessage, object originalMessage = null, BigInteger? chainId = null)
{
if (rawMessage == null)
{
throw new ArgumentNullException(nameof(rawMessage), "Message to sign cannot be null.");
}

var url = $"{ENCLAVE_PATH}/sign-message";
var payload = new { messagePayload = new { message = rawMessage.BytesToHex(), isRaw = true } };
var payload = new
{
messagePayload = new
{
message = rawMessage.BytesToHex(),
isRaw = true,
originalMessage,
chainId
}
};

var requestContent = new StringContent(JsonConvert.SerializeObject(payload), Encoding.UTF8, "application/json");
var requestContent = new StringContent(JsonConvert.SerializeObject(payload, this._jsonSerializerSettings), Encoding.UTF8, "application/json");

var response = await this.HttpClient.PostAsync(url, requestContent).ConfigureAwait(false);
_ = response.EnsureSuccessStatusCode();
Expand All @@ -1021,17 +1032,26 @@ public async Task<string> PersonalSign(byte[] rawMessage)
return res.Signature;
}

public async Task<string> PersonalSign(string message)
public async Task<string> PersonalSign(string message, object originalMessage = null, BigInteger? chainId = null)
{
if (string.IsNullOrEmpty(message))
{
throw new ArgumentNullException(nameof(message), "Message to sign cannot be null.");
}

var url = $"{ENCLAVE_PATH}/sign-message";
var payload = new { messagePayload = new { message, isRaw = false } };
var payload = new
{
messagePayload = new
{
message,
isRaw = false,
originalMessage,
chainId
}
};

var requestContent = new StringContent(JsonConvert.SerializeObject(payload), Encoding.UTF8, "application/json");
var requestContent = new StringContent(JsonConvert.SerializeObject(payload, this._jsonSerializerSettings), Encoding.UTF8, "application/json");

var response = await this.HttpClient.PostAsync(url, requestContent).ConfigureAwait(false);
_ = response.EnsureSuccessStatusCode();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -209,7 +209,7 @@ public virtual Task<string> RecoverAddressFromEthSign(string message, string sig
return Task.FromResult(address);
}

public virtual Task<string> PersonalSign(byte[] rawMessage)
public virtual Task<string> PersonalSign(byte[] rawMessage, object originalMessage = null, BigInteger? chainId = null)
{
if (rawMessage == null)
{
Expand All @@ -221,7 +221,7 @@ public virtual Task<string> PersonalSign(byte[] rawMessage)
return Task.FromResult(signature);
}

public virtual Task<string> PersonalSign(string message)
public virtual Task<string> PersonalSign(string message, object originalMessage = null, BigInteger? chainId = null)
{
if (string.IsNullOrEmpty(message))
{
Expand Down
16 changes: 8 additions & 8 deletions Thirdweb/Thirdweb.Wallets/SmartWallet/SmartWallet.cs
Original file line number Diff line number Diff line change
Expand Up @@ -873,11 +873,12 @@ private async Task<PMSponsorOperationResponse> GetPaymasterAndData(object reques

private async Task<byte[]> HashAndSignUserOp(UserOperationV6 userOp, ThirdwebContract entryPointContract)
{
var hexified = EncodeUserOperation(userOp);
var userOpHash = await ThirdwebContract.Read<byte[]>(entryPointContract, "getUserOpHash", userOp);
var sig =
this._personalAccount.AccountType == ThirdwebAccountType.ExternalAccount
? await this._personalAccount.PersonalSign(userOpHash.BytesToHex()).ConfigureAwait(false)
: await this._personalAccount.PersonalSign(userOpHash).ConfigureAwait(false);
? await this._personalAccount.PersonalSign(userOpHash.BytesToHex(), hexified, this.ActiveChainId).ConfigureAwait(false)
: await this._personalAccount.PersonalSign(userOpHash, hexified, this.ActiveChainId).ConfigureAwait(false);
return sig.HexToBytes();
}

Expand Down Expand Up @@ -945,10 +946,11 @@ private async Task<byte[]> HashAndSignUserOp(UserOperationV7 userOp, ThirdwebCon

var userOpHash = await ThirdwebContract.Read<byte[]>(entryPointContract, "getUserOpHash", packedOp).ConfigureAwait(false);

var hexified = EncodeUserOperation(userOp);
var sig =
this._personalAccount.AccountType == ThirdwebAccountType.ExternalAccount
? await this._personalAccount.PersonalSign(userOpHash.BytesToHex()).ConfigureAwait(false)
: await this._personalAccount.PersonalSign(userOpHash).ConfigureAwait(false);
? await this._personalAccount.PersonalSign(userOpHash.BytesToHex(), hexified, this.ActiveChainId).ConfigureAwait(false)
: await this._personalAccount.PersonalSign(userOpHash, hexified, this.ActiveChainId).ConfigureAwait(false);

return sig.HexToBytes();
}
Expand Down Expand Up @@ -1081,17 +1083,15 @@ public Task<string> RecoverAddressFromEthSign(string message, string signature)
throw new NotImplementedException();
}

public Task<string> PersonalSign(byte[] rawMessage)
public Task<string> PersonalSign(byte[] rawMessage, object originalMessage = null, BigInteger? chainId = null)
{
throw new NotImplementedException();
}

/// <summary>
/// Signs a message with the personal account. The message will be verified using EIPs 1271 and 6492 if applicable.
/// </summary>
/// <param name="message">The message to sign.</param>
/// <returns>The signature.</returns>
public async Task<string> PersonalSign(string message)
public async Task<string> PersonalSign(string message, object originalMessage = null, BigInteger? chainId = null)
{
if (await Utils.IsZkSync(this.Client, this.ActiveChainId).ConfigureAwait(false))
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -119,6 +119,7 @@ public class PackedUserOperation
public virtual byte[] Signature { get; set; }
}

[JsonObject(ItemNullValueHandling = NullValueHandling.Ignore)]
public class UserOperationHexifiedV6
{
[JsonProperty("sender")]
Expand Down Expand Up @@ -155,6 +156,7 @@ public class UserOperationHexifiedV6
public string Signature { get; set; }
}

[JsonObject(ItemNullValueHandling = NullValueHandling.Ignore)]
public class UserOperationHexifiedV7
{
[JsonProperty("sender")]
Expand Down
Loading