Skip to content

Commit a643f98

Browse files
authored
Merge branch 'main' into firekeeper/nebula
2 parents 2ae308f + a6afc39 commit a643f98

File tree

15 files changed

+282
-89
lines changed

15 files changed

+282
-89
lines changed

Directory.Build.props

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
<?xml version="1.0" encoding="utf-8"?>
22
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
33
<PropertyGroup>
4-
<DefaultVersion>2.15.0</DefaultVersion>
4+
<DefaultVersion>2.16.0</DefaultVersion>
55
<DefaultTargetFrameworks>netstandard2.1;net6.0;net7.0;net8.0</DefaultTargetFrameworks>
66
</PropertyGroup>
77

Directory.Packages.props

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
88
<PrivateAssets>all</PrivateAssets>
99
</PackageVersion>
10+
<PackageVersion Include="Moq" Version="4.20.72" />
1011
<PackageVersion Include="Newtonsoft.Json" Version="13.0.3" />
1112
<PackageVersion Include="dotenv.net" Version="3.1.3" />
1213
<PackageVersion Include="Microsoft.NET.Test.Sdk" Version="17.7.1" />

Thirdweb.Console/Program.cs

Lines changed: 30 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -84,32 +84,16 @@
8484

8585
#region AA 0.6
8686

87-
// var smartWallet06 = await SmartWallet.Create(
88-
// personalWallet: privateKeyWallet,
89-
// chainId: 421614,
90-
// gasless: true,
91-
// factoryAddress: "0xa8deE7854fb1eA8c13b713585C81d91ea86dAD84",
92-
// entryPoint: Constants.ENTRYPOINT_ADDRESS_V06
93-
// );
94-
95-
// var receipt06 = await smartWallet06.ExecuteTransaction(new ThirdwebTransactionInput(chainId: 421614, to: await smartWallet06.GetAddress(), value: 0, data: "0x"));
96-
87+
// var smartWallet06 = await SmartWallet.Create(personalWallet: privateKeyWallet, chainId: 421614, gasless: true);
88+
// var receipt06 = await smartWallet06.Transfer(chainId: 421614, toAddress: await smartWallet06.GetAddress(), weiAmount: 0);
9789
// Console.WriteLine($"Receipt: {receipt06}");
9890

9991
#endregion
10092

10193
#region AA 0.7
10294

103-
// var smartWallet07 = await SmartWallet.Create(
104-
// personalWallet: privateKeyWallet,
105-
// chainId: 421614,
106-
// gasless: true,
107-
// factoryAddress: "0x4f4e40E8F66e3Cc0FD7423E2fbd62A769ff551FB",
108-
// entryPoint: Constants.ENTRYPOINT_ADDRESS_V07
109-
// );
110-
111-
// var receipt07 = await smartWallet07.ExecuteTransaction(new ThirdwebTransactionInput(chainId: 421614, to: await smartWallet07.GetAddress(), value: 0, data: "0x"));
112-
95+
// var smartWallet07 = await SmartWallet.Create(personalWallet: privateKeyWallet, chainId: 421614, gasless: true, entryPoint: Constants.ENTRYPOINT_ADDRESS_V07);
96+
// var receipt07 = await smartWallet07.Transfer(chainId: 421614, toAddress: await smartWallet07.GetAddress(), weiAmount: 0);
11397
// Console.WriteLine($"Receipt: {receipt07}");
11498

11599
#endregion
@@ -219,7 +203,7 @@
219203

220204
#region Smart Ecosystem Wallet
221205

222-
// var eco = await EcosystemWallet.Create(client: client, ecosystemId: "ecosystem.the-bonfire", authProvider: AuthProvider.Twitch);
206+
// var eco = await EcosystemWallet.Create(client: client, ecosystemId: "ecosystem.the-bonfire", authProvider: AuthProvider.Github);
223207
// if (!await eco.IsConnected())
224208
// {
225209
// _ = await eco.LoginWithOauth(
@@ -529,6 +513,31 @@
529513

530514
#endregion
531515

516+
#region InAppWallet - SiweExternal
517+
518+
// var inAppWalletSiweExternal = await InAppWallet.Create(client: client, authProvider: AuthProvider.SiweExternal);
519+
// if (!await inAppWalletSiweExternal.IsConnected())
520+
// {
521+
// _ = await inAppWalletSiweExternal.LoginWithSiweExternal(
522+
// isMobile: false,
523+
// browserOpenAction: (url) =>
524+
// {
525+
// var psi = new ProcessStartInfo { FileName = url, UseShellExecute = true };
526+
// _ = Process.Start(psi);
527+
// },
528+
// forceWalletIds: new List<string> { "io.metamask", "com.coinbase.wallet", "xyz.abs" }
529+
// );
530+
// }
531+
// var inAppWalletOAuthAddress = await inAppWalletSiweExternal.GetAddress();
532+
// Console.WriteLine($"InAppWallet SiweExternal address: {inAppWalletOAuthAddress}");
533+
534+
// var inAppWalletAuthDetails = inAppWalletSiweExternal.GetUserAuthDetails();
535+
// Console.WriteLine($"InAppWallet OAuth auth details: {JsonConvert.SerializeObject(inAppWalletAuthDetails, Formatting.Indented)}");
536+
537+
// await inAppWalletSiweExternal.Disconnect();
538+
539+
#endregion
540+
532541
#region Smart Wallet - Gasless Transaction
533542

534543
// var smartWallet = await SmartWallet.Create(privateKeyWallet, 78600);

Thirdweb.Tests/Thirdweb.Tests.csproj

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
<PrivateAssets>all</PrivateAssets>
2222
</PackageReference>
2323
<PackageReference Include="dotenv.net" />
24+
<PackageReference Include="Moq" />
2425
</ItemGroup>
2526

2627
<ItemGroup>

Thirdweb/Thirdweb.Transactions/ThirdwebTransaction.cs

Lines changed: 19 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -30,12 +30,12 @@ public class ThirdwebTransaction
3030
{
3131
public ThirdwebTransactionInput Input { get; }
3232

33-
private readonly IThirdwebWallet _wallet;
33+
internal readonly IThirdwebWallet Wallet;
3434

3535
private ThirdwebTransaction(IThirdwebWallet wallet, ThirdwebTransactionInput txInput)
3636
{
3737
this.Input = txInput;
38-
this._wallet = wallet;
38+
this.Wallet = wallet;
3939
}
4040

4141
/// <summary>
@@ -215,7 +215,7 @@ public static async Task<TotalCosts> EstimateTotalCosts(ThirdwebTransaction tran
215215
/// <returns>The estimated gas price.</returns>
216216
public static async Task<BigInteger> EstimateGasPrice(ThirdwebTransaction transaction, bool withBump = true)
217217
{
218-
return await Utils.FetchGasPrice(transaction._wallet.Client, transaction.Input.ChainId.Value, withBump).ConfigureAwait(false);
218+
return await Utils.FetchGasPrice(transaction.Wallet.Client, transaction.Input.ChainId.Value, withBump).ConfigureAwait(false);
219219
}
220220

221221
/// <summary>
@@ -226,10 +226,10 @@ public static async Task<BigInteger> EstimateGasPrice(ThirdwebTransaction transa
226226
/// <returns>The estimated maximum fee per gas and maximum priority fee per gas.</returns>
227227
public static async Task<(BigInteger maxFeePerGas, BigInteger maxPriorityFeePerGas)> EstimateGasFees(ThirdwebTransaction transaction, bool withBump = true)
228228
{
229-
var rpc = ThirdwebRPC.GetRpcInstance(transaction._wallet.Client, transaction.Input.ChainId.Value);
229+
var rpc = ThirdwebRPC.GetRpcInstance(transaction.Wallet.Client, transaction.Input.ChainId.Value);
230230
var chainId = transaction.Input.ChainId.Value;
231231

232-
if (await Utils.IsZkSync(transaction._wallet.Client, transaction.Input.ChainId.Value).ConfigureAwait(false))
232+
if (await Utils.IsZkSync(transaction.Wallet.Client, transaction.Input.ChainId.Value).ConfigureAwait(false))
233233
{
234234
var fees = await rpc.SendRequestAsync<JToken>("zks_estimateFee", transaction.Input).ConfigureAwait(false);
235235
var maxFee = fees["max_fee_per_gas"].ToObject<HexBigInteger>().Value;
@@ -238,7 +238,7 @@ public static async Task<BigInteger> EstimateGasPrice(ThirdwebTransaction transa
238238
}
239239
else
240240
{
241-
return await Utils.FetchGasFees(transaction._wallet.Client, chainId, withBump).ConfigureAwait(false);
241+
return await Utils.FetchGasFees(transaction.Wallet.Client, chainId, withBump).ConfigureAwait(false);
242242
}
243243
}
244244

@@ -249,7 +249,7 @@ public static async Task<BigInteger> EstimateGasPrice(ThirdwebTransaction transa
249249
/// <returns>The result of the simulation.</returns>
250250
public static async Task<string> Simulate(ThirdwebTransaction transaction)
251251
{
252-
var rpc = ThirdwebRPC.GetRpcInstance(transaction._wallet.Client, transaction.Input.ChainId.Value);
252+
var rpc = ThirdwebRPC.GetRpcInstance(transaction.Wallet.Client, transaction.Input.ChainId.Value);
253253
return await rpc.SendRequestAsync<string>("eth_call", transaction.Input, "latest");
254254
}
255255

@@ -260,8 +260,8 @@ public static async Task<string> Simulate(ThirdwebTransaction transaction)
260260
/// <returns>The estimated gas limit.</returns>
261261
public static async Task<BigInteger> EstimateGasLimit(ThirdwebTransaction transaction)
262262
{
263-
var rpc = ThirdwebRPC.GetRpcInstance(transaction._wallet.Client, transaction.Input.ChainId.Value);
264-
var isZkSync = await Utils.IsZkSync(transaction._wallet.Client, transaction.Input.ChainId.Value).ConfigureAwait(false);
263+
var rpc = ThirdwebRPC.GetRpcInstance(transaction.Wallet.Client, transaction.Input.ChainId.Value);
264+
var isZkSync = await Utils.IsZkSync(transaction.Wallet.Client, transaction.Input.ChainId.Value).ConfigureAwait(false);
265265
BigInteger divider = isZkSync
266266
? 7
267267
: transaction.Input.AuthorizationList == null
@@ -288,12 +288,12 @@ public static async Task<BigInteger> EstimateGasLimit(ThirdwebTransaction transa
288288
/// <returns>The nonce.</returns>
289289
public static async Task<BigInteger> GetNonce(ThirdwebTransaction transaction)
290290
{
291-
return await transaction._wallet.GetTransactionCount(chainId: transaction.Input.ChainId, blocktag: "pending").ConfigureAwait(false);
291+
return await transaction.Wallet.GetTransactionCount(chainId: transaction.Input.ChainId, blocktag: "pending").ConfigureAwait(false);
292292
}
293293

294294
private static async Task<BigInteger> GetGasPerPubData(ThirdwebTransaction transaction)
295295
{
296-
var rpc = ThirdwebRPC.GetRpcInstance(transaction._wallet.Client, transaction.Input.ChainId.Value);
296+
var rpc = ThirdwebRPC.GetRpcInstance(transaction.Wallet.Client, transaction.Input.ChainId.Value);
297297
var hex = (await rpc.SendRequestAsync<JToken>("zks_estimateFee", transaction.Input).ConfigureAwait(false))["gas_per_pubdata_limit"].ToString();
298298
var finalGasPerPubData = new HexBigInteger(hex).Value * 10 / 5;
299299
return finalGasPerPubData < 10000 ? 10000 : finalGasPerPubData;
@@ -306,7 +306,7 @@ private static async Task<BigInteger> GetGasPerPubData(ThirdwebTransaction trans
306306
/// <returns>The signed transaction.</returns>
307307
public static async Task<string> Sign(ThirdwebTransaction transaction)
308308
{
309-
return await transaction._wallet.SignTransaction(transaction.Input).ConfigureAwait(false);
309+
return await transaction.Wallet.SignTransaction(transaction.Input).ConfigureAwait(false);
310310
}
311311

312312
/// <summary>
@@ -362,31 +362,32 @@ public static async Task<string> Send(ThirdwebTransaction transaction)
362362
{
363363
transaction = await Prepare(transaction).ConfigureAwait(false);
364364

365-
var rpc = ThirdwebRPC.GetRpcInstance(transaction._wallet.Client, transaction.Input.ChainId.Value);
365+
var rpc = ThirdwebRPC.GetRpcInstance(transaction.Wallet.Client, transaction.Input.ChainId.Value);
366366
string hash;
367367

368-
if (await Utils.IsZkSync(transaction._wallet.Client, transaction.Input.ChainId.Value).ConfigureAwait(false) && transaction.Input.ZkSync.HasValue)
368+
if (await Utils.IsZkSync(transaction.Wallet.Client, transaction.Input.ChainId.Value).ConfigureAwait(false) && transaction.Input.ZkSync.HasValue)
369369
{
370370
var zkTx = await ConvertToZkSyncTransaction(transaction).ConfigureAwait(false);
371-
var zkTxSigned = await EIP712.GenerateSignature_ZkSyncTransaction("zkSync", "2", transaction.Input.ChainId.Value, zkTx, transaction._wallet).ConfigureAwait(false);
371+
var zkTxSigned = await EIP712.GenerateSignature_ZkSyncTransaction("zkSync", "2", transaction.Input.ChainId.Value, zkTx, transaction.Wallet).ConfigureAwait(false);
372372
hash = await rpc.SendRequestAsync<string>("eth_sendRawTransaction", zkTxSigned).ConfigureAwait(false);
373373
}
374374
else
375375
{
376-
switch (transaction._wallet.AccountType)
376+
switch (transaction.Wallet.AccountType)
377377
{
378378
case ThirdwebAccountType.PrivateKeyAccount:
379379
var signedTx = await Sign(transaction);
380380
hash = await rpc.SendRequestAsync<string>("eth_sendRawTransaction", signedTx).ConfigureAwait(false);
381381
break;
382382
case ThirdwebAccountType.SmartAccount:
383383
case ThirdwebAccountType.ExternalAccount:
384-
hash = await transaction._wallet.SendTransaction(transaction.Input).ConfigureAwait(false);
384+
hash = await transaction.Wallet.SendTransaction(transaction.Input).ConfigureAwait(false);
385385
break;
386386
default:
387387
throw new NotImplementedException("Account type not supported");
388388
}
389389
}
390+
Utils.TrackTransaction(transaction, hash);
390391
return hash;
391392
}
392393

@@ -398,7 +399,7 @@ public static async Task<string> Send(ThirdwebTransaction transaction)
398399
public static async Task<ThirdwebTransactionReceipt> SendAndWaitForTransactionReceipt(ThirdwebTransaction transaction)
399400
{
400401
var txHash = await Send(transaction).ConfigureAwait(false);
401-
return await WaitForTransactionReceipt(transaction._wallet.Client, transaction.Input.ChainId.Value, txHash).ConfigureAwait(false);
402+
return await WaitForTransactionReceipt(transaction.Wallet.Client, transaction.Input.ChainId.Value, txHash).ConfigureAwait(false);
402403
}
403404

404405
/// <summary>

Thirdweb/Thirdweb.Utils/Constants.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
public static class Constants
44
{
5-
public const string VERSION = "2.15.0";
5+
public const string VERSION = "2.16.0";
66

77
public const string IERC20_INTERFACE_ID = "0x36372b07";
88
public const string IERC721_INTERFACE_ID = "0x80ac58cd";

Thirdweb/Thirdweb.Utils/Utils.cs

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1191,4 +1191,60 @@ internal static byte[] ToByteArrayForRLPEncoding(this BigInteger value)
11911191

11921192
return value.ToBytesForRLPEncoding();
11931193
}
1194+
1195+
internal static async void TrackTransaction(ThirdwebTransaction transaction, string transactionHash)
1196+
{
1197+
try
1198+
{
1199+
var wallet = transaction.Wallet;
1200+
var content = new StringContent(
1201+
JsonConvert.SerializeObject(
1202+
new
1203+
{
1204+
source = "sdk",
1205+
action = "transaction:sent",
1206+
clientId = wallet.Client.ClientId,
1207+
chainId = transaction.Input.ChainId.Value,
1208+
transactionHash,
1209+
walletAddress = await wallet.GetAddress().ConfigureAwait(false),
1210+
walletType = wallet.WalletId,
1211+
contractAddress = transaction.Input.To,
1212+
gasPrice = transaction.Input.GasPrice?.Value ?? transaction.Input.MaxFeePerGas?.Value
1213+
}
1214+
),
1215+
Encoding.UTF8,
1216+
"application/json"
1217+
);
1218+
_ = await wallet.Client.HttpClient.PostAsync("https://c.thirdweb.com/event", content);
1219+
}
1220+
catch
1221+
{
1222+
// Ignore
1223+
}
1224+
}
1225+
1226+
internal static async void TrackConnection(IThirdwebWallet wallet)
1227+
{
1228+
try
1229+
{
1230+
var content = new StringContent(
1231+
JsonConvert.SerializeObject(
1232+
new
1233+
{
1234+
source = "connectWallet",
1235+
action = "connect",
1236+
walletAddress = await wallet.GetAddress().ConfigureAwait(false),
1237+
walletType = wallet.WalletId,
1238+
}
1239+
),
1240+
Encoding.UTF8,
1241+
"application/json"
1242+
);
1243+
_ = await wallet.Client.HttpClient.PostAsync("https://c.thirdweb.com/event", content);
1244+
}
1245+
catch
1246+
{
1247+
// Ignore
1248+
}
1249+
}
11941250
}

0 commit comments

Comments
 (0)