Skip to content

Commit e4cb157

Browse files
committed
[Native - Smart Wallet] Session keys, admin adding and force deploy fix
1 parent 4a2d325 commit e4cb157

File tree

16 files changed

+656
-306
lines changed

16 files changed

+656
-306
lines changed

Assets/Thirdweb/Core/Contract Definitions/Account/AccountService.cs

+101-114
Large diffs are not rendered by default.

Assets/Thirdweb/Core/Contract Definitions/Account/ContractDefinition/AccountDefinition.cs

+87-104
Large diffs are not rendered by default.

Assets/Thirdweb/Core/Contract Definitions/Account/ContractDefinition/RoleRequest.cs

-32
This file was deleted.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
using System;
2+
using System.Threading.Tasks;
3+
using System.Collections.Generic;
4+
using System.Numerics;
5+
using Nethereum.Hex.HexTypes;
6+
using Nethereum.ABI.FunctionEncoding.Attributes;
7+
8+
namespace Thirdweb.Contracts.Account.ContractDefinition
9+
{
10+
public partial class SignerPermissionRequest : SignerPermissionRequestBase { }
11+
12+
public class SignerPermissionRequestBase
13+
{
14+
[Parameter("address", "signer", 1)]
15+
public virtual string Signer { get; set; }
16+
17+
[Parameter("uint8", "isAdmin", 2)]
18+
public virtual byte IsAdmin { get; set; }
19+
20+
[Parameter("address[]", "approvedTargets", 3)]
21+
public virtual List<string> ApprovedTargets { get; set; }
22+
23+
[Parameter("uint256", "nativeTokenLimitPerTransaction", 4)]
24+
public virtual BigInteger NativeTokenLimitPerTransaction { get; set; }
25+
26+
[Parameter("uint128", "permissionStartTimestamp", 5)]
27+
public virtual BigInteger PermissionStartTimestamp { get; set; }
28+
29+
[Parameter("uint128", "permissionEndTimestamp", 6)]
30+
public virtual BigInteger PermissionEndTimestamp { get; set; }
31+
32+
[Parameter("uint128", "reqValidityStartTimestamp", 7)]
33+
public virtual BigInteger ReqValidityStartTimestamp { get; set; }
34+
35+
[Parameter("uint128", "reqValidityEndTimestamp", 8)]
36+
public virtual BigInteger ReqValidityEndTimestamp { get; set; }
37+
38+
[Parameter("bytes32", "uid", 9)]
39+
public virtual byte[] Uid { get; set; }
40+
}
41+
}

Assets/Thirdweb/Core/Contract Definitions/Account/ContractDefinition/RoleRequest.cs.meta renamed to Assets/Thirdweb/Core/Contract Definitions/Account/ContractDefinition/SignerPermissionRequest.cs.meta

+1-1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Assets/Thirdweb/Core/Contract Definitions/Account/ContractDefinition/RoleRestrictions.cs renamed to Assets/Thirdweb/Core/Contract Definitions/Account/ContractDefinition/SignerPermissions.cs

+6-6
Original file line numberDiff line numberDiff line change
@@ -7,18 +7,18 @@
77

88
namespace Thirdweb.Contracts.Account.ContractDefinition
99
{
10-
public partial class RoleRestrictions : RoleRestrictionsBase { }
10+
public partial class SignerPermissions : SignerPermissionsBase { }
1111

12-
public class RoleRestrictionsBase
12+
public class SignerPermissionsBase
1313
{
14-
[Parameter("bytes32", "role", 1)]
15-
public virtual byte[] Role { get; set; }
14+
[Parameter("address", "signer", 1)]
15+
public virtual string Signer { get; set; }
1616

1717
[Parameter("address[]", "approvedTargets", 2)]
1818
public virtual List<string> ApprovedTargets { get; set; }
1919

20-
[Parameter("uint256", "maxValuePerTransaction", 3)]
21-
public virtual BigInteger MaxValuePerTransaction { get; set; }
20+
[Parameter("uint256", "nativeTokenLimitPerTransaction", 3)]
21+
public virtual BigInteger NativeTokenLimitPerTransaction { get; set; }
2222

2323
[Parameter("uint128", "startTimestamp", 4)]
2424
public virtual BigInteger StartTimestamp { get; set; }

Assets/Thirdweb/Core/Contract Definitions/Account/ContractDefinition/RoleRestrictions.cs.meta renamed to Assets/Thirdweb/Core/Contract Definitions/Account/ContractDefinition/SignerPermissions.cs.meta

+1-1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Assets/Thirdweb/Core/Contract Definitions/AccountFactory/AccountFactoryService.cs

+119-17
Original file line numberDiff line numberDiff line change
@@ -114,6 +114,30 @@ public Task<TransactionReceipt> CreateAccountRequestAndWaitForReceiptAsync(strin
114114
return ContractHandler.SendRequestAndWaitForReceiptAsync(createAccountFunction, cancellationToken);
115115
}
116116

117+
public Task<string> EntrypointQueryAsync(EntrypointFunction entrypointFunction, BlockParameter blockParameter = null)
118+
{
119+
return ContractHandler.QueryAsync<EntrypointFunction, string>(entrypointFunction, blockParameter);
120+
}
121+
122+
public Task<string> EntrypointQueryAsync(BlockParameter blockParameter = null)
123+
{
124+
return ContractHandler.QueryAsync<EntrypointFunction, string>(null, blockParameter);
125+
}
126+
127+
public Task<List<string>> GetAccountsQueryAsync(GetAccountsFunction getAccountsFunction, BlockParameter blockParameter = null)
128+
{
129+
return ContractHandler.QueryAsync<GetAccountsFunction, List<string>>(getAccountsFunction, blockParameter);
130+
}
131+
132+
public Task<List<string>> GetAccountsQueryAsync(BigInteger start, BigInteger end, BlockParameter blockParameter = null)
133+
{
134+
var getAccountsFunction = new GetAccountsFunction();
135+
getAccountsFunction.Start = start;
136+
getAccountsFunction.End = end;
137+
138+
return ContractHandler.QueryAsync<GetAccountsFunction, List<string>>(getAccountsFunction, blockParameter);
139+
}
140+
117141
public Task<List<string>> GetAccountsOfSignerQueryAsync(GetAccountsOfSignerFunction getAccountsOfSignerFunction, BlockParameter blockParameter = null)
118142
{
119143
return ContractHandler.QueryAsync<GetAccountsOfSignerFunction, List<string>>(getAccountsOfSignerFunction, blockParameter);
@@ -141,6 +165,16 @@ public Task<string> GetAddressQueryAsync(string adminSigner, byte[] data, BlockP
141165
return ContractHandler.QueryAsync<GetAddressFunction, string>(getAddressFunction, blockParameter);
142166
}
143167

168+
public Task<List<string>> GetAllAccountsQueryAsync(GetAllAccountsFunction getAllAccountsFunction, BlockParameter blockParameter = null)
169+
{
170+
return ContractHandler.QueryAsync<GetAllAccountsFunction, List<string>>(getAllAccountsFunction, blockParameter);
171+
}
172+
173+
public Task<List<string>> GetAllAccountsQueryAsync(BlockParameter blockParameter = null)
174+
{
175+
return ContractHandler.QueryAsync<GetAllAccountsFunction, List<string>>(null, blockParameter);
176+
}
177+
144178
public Task<byte[]> GetRoleAdminQueryAsync(GetRoleAdminFunction getRoleAdminFunction, BlockParameter blockParameter = null)
145179
{
146180
return ContractHandler.QueryAsync<GetRoleAdminFunction, byte[]>(getRoleAdminFunction, blockParameter);
@@ -181,19 +215,6 @@ public Task<BigInteger> GetRoleMemberCountQueryAsync(byte[] role, BlockParameter
181215
return ContractHandler.QueryAsync<GetRoleMemberCountFunction, BigInteger>(getRoleMemberCountFunction, blockParameter);
182216
}
183217

184-
public Task<List<string>> GetSignersOfAccountQueryAsync(GetSignersOfAccountFunction getSignersOfAccountFunction, BlockParameter blockParameter = null)
185-
{
186-
return ContractHandler.QueryAsync<GetSignersOfAccountFunction, List<string>>(getSignersOfAccountFunction, blockParameter);
187-
}
188-
189-
public Task<List<string>> GetSignersOfAccountQueryAsync(string account, BlockParameter blockParameter = null)
190-
{
191-
var getSignersOfAccountFunction = new GetSignersOfAccountFunction();
192-
getSignersOfAccountFunction.Account = account;
193-
194-
return ContractHandler.QueryAsync<GetSignersOfAccountFunction, List<string>>(getSignersOfAccountFunction, blockParameter);
195-
}
196-
197218
public Task<string> GrantRoleRequestAsync(GrantRoleFunction grantRoleFunction)
198219
{
199220
return ContractHandler.SendRequestAsync(grantRoleFunction);
@@ -250,6 +271,47 @@ public Task<bool> HasRoleWithSwitchQueryAsync(byte[] role, string account, Block
250271
return ContractHandler.QueryAsync<HasRoleWithSwitchFunction, bool>(hasRoleWithSwitchFunction, blockParameter);
251272
}
252273

274+
public Task<string> InitializeRequestAsync(InitializeFunction initializeFunction)
275+
{
276+
return ContractHandler.SendRequestAsync(initializeFunction);
277+
}
278+
279+
public Task<TransactionReceipt> InitializeRequestAndWaitForReceiptAsync(InitializeFunction initializeFunction, CancellationTokenSource cancellationToken = null)
280+
{
281+
return ContractHandler.SendRequestAndWaitForReceiptAsync(initializeFunction, cancellationToken);
282+
}
283+
284+
public Task<string> InitializeRequestAsync(string defaultAdmin, string contractURI)
285+
{
286+
var initializeFunction = new InitializeFunction();
287+
initializeFunction.DefaultAdmin = defaultAdmin;
288+
initializeFunction.ContractURI = contractURI;
289+
290+
return ContractHandler.SendRequestAsync(initializeFunction);
291+
}
292+
293+
public Task<TransactionReceipt> InitializeRequestAndWaitForReceiptAsync(string defaultAdmin, string contractURI, CancellationTokenSource cancellationToken = null)
294+
{
295+
var initializeFunction = new InitializeFunction();
296+
initializeFunction.DefaultAdmin = defaultAdmin;
297+
initializeFunction.ContractURI = contractURI;
298+
299+
return ContractHandler.SendRequestAndWaitForReceiptAsync(initializeFunction, cancellationToken);
300+
}
301+
302+
public Task<bool> IsRegisteredQueryAsync(IsRegisteredFunction isRegisteredFunction, BlockParameter blockParameter = null)
303+
{
304+
return ContractHandler.QueryAsync<IsRegisteredFunction, bool>(isRegisteredFunction, blockParameter);
305+
}
306+
307+
public Task<bool> IsRegisteredQueryAsync(string account, BlockParameter blockParameter = null)
308+
{
309+
var isRegisteredFunction = new IsRegisteredFunction();
310+
isRegisteredFunction.Account = account;
311+
312+
return ContractHandler.QueryAsync<IsRegisteredFunction, bool>(isRegisteredFunction, blockParameter);
313+
}
314+
253315
public Task<string> MulticallRequestAsync(MulticallFunction multicallFunction)
254316
{
255317
return ContractHandler.SendRequestAsync(multicallFunction);
@@ -276,6 +338,32 @@ public Task<TransactionReceipt> MulticallRequestAndWaitForReceiptAsync(List<byte
276338
return ContractHandler.SendRequestAndWaitForReceiptAsync(multicallFunction, cancellationToken);
277339
}
278340

341+
public Task<string> OnRegisterRequestAsync(OnRegisterFunction onRegisterFunction)
342+
{
343+
return ContractHandler.SendRequestAsync(onRegisterFunction);
344+
}
345+
346+
public Task<TransactionReceipt> OnRegisterRequestAndWaitForReceiptAsync(OnRegisterFunction onRegisterFunction, CancellationTokenSource cancellationToken = null)
347+
{
348+
return ContractHandler.SendRequestAndWaitForReceiptAsync(onRegisterFunction, cancellationToken);
349+
}
350+
351+
public Task<string> OnRegisterRequestAsync(byte[] salt)
352+
{
353+
var onRegisterFunction = new OnRegisterFunction();
354+
onRegisterFunction.Salt = salt;
355+
356+
return ContractHandler.SendRequestAsync(onRegisterFunction);
357+
}
358+
359+
public Task<TransactionReceipt> OnRegisterRequestAndWaitForReceiptAsync(byte[] salt, CancellationTokenSource cancellationToken = null)
360+
{
361+
var onRegisterFunction = new OnRegisterFunction();
362+
onRegisterFunction.Salt = salt;
363+
364+
return ContractHandler.SendRequestAndWaitForReceiptAsync(onRegisterFunction, cancellationToken);
365+
}
366+
279367
public Task<string> OnSignerAddedRequestAsync(OnSignerAddedFunction onSignerAddedFunction)
280368
{
281369
return ContractHandler.SendRequestAsync(onSignerAddedFunction);
@@ -286,18 +374,20 @@ public Task<TransactionReceipt> OnSignerAddedRequestAndWaitForReceiptAsync(OnSig
286374
return ContractHandler.SendRequestAndWaitForReceiptAsync(onSignerAddedFunction, cancellationToken);
287375
}
288376

289-
public Task<string> OnSignerAddedRequestAsync(string signer)
377+
public Task<string> OnSignerAddedRequestAsync(string signer, byte[] salt)
290378
{
291379
var onSignerAddedFunction = new OnSignerAddedFunction();
292380
onSignerAddedFunction.Signer = signer;
381+
onSignerAddedFunction.Salt = salt;
293382

294383
return ContractHandler.SendRequestAsync(onSignerAddedFunction);
295384
}
296385

297-
public Task<TransactionReceipt> OnSignerAddedRequestAndWaitForReceiptAsync(string signer, CancellationTokenSource cancellationToken = null)
386+
public Task<TransactionReceipt> OnSignerAddedRequestAndWaitForReceiptAsync(string signer, byte[] salt, CancellationTokenSource cancellationToken = null)
298387
{
299388
var onSignerAddedFunction = new OnSignerAddedFunction();
300389
onSignerAddedFunction.Signer = signer;
390+
onSignerAddedFunction.Salt = salt;
301391

302392
return ContractHandler.SendRequestAndWaitForReceiptAsync(onSignerAddedFunction, cancellationToken);
303393
}
@@ -312,18 +402,20 @@ public Task<TransactionReceipt> OnSignerRemovedRequestAndWaitForReceiptAsync(OnS
312402
return ContractHandler.SendRequestAndWaitForReceiptAsync(onSignerRemovedFunction, cancellationToken);
313403
}
314404

315-
public Task<string> OnSignerRemovedRequestAsync(string signer)
405+
public Task<string> OnSignerRemovedRequestAsync(string signer, byte[] salt)
316406
{
317407
var onSignerRemovedFunction = new OnSignerRemovedFunction();
318408
onSignerRemovedFunction.Signer = signer;
409+
onSignerRemovedFunction.Salt = salt;
319410

320411
return ContractHandler.SendRequestAsync(onSignerRemovedFunction);
321412
}
322413

323-
public Task<TransactionReceipt> OnSignerRemovedRequestAndWaitForReceiptAsync(string signer, CancellationTokenSource cancellationToken = null)
414+
public Task<TransactionReceipt> OnSignerRemovedRequestAndWaitForReceiptAsync(string signer, byte[] salt, CancellationTokenSource cancellationToken = null)
324415
{
325416
var onSignerRemovedFunction = new OnSignerRemovedFunction();
326417
onSignerRemovedFunction.Signer = signer;
418+
onSignerRemovedFunction.Salt = salt;
327419

328420
return ContractHandler.SendRequestAndWaitForReceiptAsync(onSignerRemovedFunction, cancellationToken);
329421
}
@@ -409,5 +501,15 @@ public Task<TransactionReceipt> SetContractURIRequestAndWaitForReceiptAsync(stri
409501

410502
return ContractHandler.SendRequestAndWaitForReceiptAsync(setContractURIFunction, cancellationToken);
411503
}
504+
505+
public Task<BigInteger> TotalAccountsQueryAsync(TotalAccountsFunction totalAccountsFunction, BlockParameter blockParameter = null)
506+
{
507+
return ContractHandler.QueryAsync<TotalAccountsFunction, BigInteger>(totalAccountsFunction, blockParameter);
508+
}
509+
510+
public Task<BigInteger> TotalAccountsQueryAsync(BlockParameter blockParameter = null)
511+
{
512+
return ContractHandler.QueryAsync<TotalAccountsFunction, BigInteger>(null, blockParameter);
513+
}
412514
}
413515
}

Assets/Thirdweb/Core/Contract Definitions/AccountFactory/ContractDefinition/AccountFactoryDefinition.cs

+117-18
Large diffs are not rendered by default.

Assets/Thirdweb/Core/Scripts/AccountAbstraction/Core/SmartWallet.cs

+16-8
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
using Thirdweb.Redcode.Awaiting;
1717
using System.Threading;
1818
using System.Collections.Concurrent;
19+
using Thirdweb.Contracts.Account.ContractDefinition;
1920

2021
namespace Thirdweb.AccountAbstraction
2122
{
@@ -70,19 +71,23 @@ internal async Task<string> GetPersonalAddress()
7071
return Nethereum.Util.AddressUtil.Current.ConvertToChecksumAddress(accounts[0]);
7172
}
7273

73-
internal async Task Initialize()
74+
internal async Task Initialize(string smartWalletOverride = null)
7475
{
7576
if (_initialized)
7677
return;
7778

7879
PersonalAddress = await GetPersonalAddress();
7980

80-
var predictedAccount = await TransactionManager.ThirdwebRead<FactoryContract.GetAddressFunction, FactoryContract.GetAddressOutputDTO>(
81-
Config.factoryAddress,
82-
new FactoryContract.GetAddressFunction() { AdminSigner = PersonalAddress, Data = new byte[] { } }
83-
);
81+
var predictedAccount =
82+
smartWalletOverride
83+
?? (
84+
await TransactionManager.ThirdwebRead<FactoryContract.GetAddressFunction, FactoryContract.GetAddressOutputDTO>(
85+
Config.factoryAddress,
86+
new FactoryContract.GetAddressFunction() { AdminSigner = PersonalAddress, Data = new byte[] { } }
87+
)
88+
).ReturnValue1;
8489

85-
Accounts = new List<string>() { predictedAccount.ReturnValue1 };
90+
Accounts = new List<string>() { predictedAccount };
8691

8792
await UpdateDeploymentStatus();
8893

@@ -97,17 +102,20 @@ internal async Task UpdateDeploymentStatus()
97102
_deployed = bytecode != "0x";
98103
}
99104

105+
internal async Task<TransactionResult> SetPermissionsForSigner(SignerPermissionRequest signerPermissionRequest, byte[] signature)
106+
{
107+
return await TransactionManager.ThirdwebWrite(Accounts[0], new SetPermissionsForSignerFunction() { Req = signerPermissionRequest, Signature = signature });
108+
}
109+
100110
internal async Task ForceDeploy()
101111
{
102112
if (_deployed)
103113
return;
104114

105-
_deploying = true;
106115
var input = new TransactionInput("0x", Accounts[0], new HexBigInteger(0));
107116
var txHash = await Request(new RpcRequestMessage(1, "eth_sendTransaction", input));
108117
await Transaction.WaitForTransactionResult(txHash.Result.ToString());
109118
await UpdateDeploymentStatus();
110-
_deploying = false;
111119
}
112120

113121
internal async Task<bool> VerifySignature(byte[] hash, byte[] signature)

0 commit comments

Comments
 (0)