.NET 1.1.0 - Additional AA & External Wallet Support

Firekeeper

This update comes with a couple additions and changes that should make your developer experience slightly better.

Smart Wallets

Added SmartWallet.GetAllAdmins and SmartWallet.GetAllActiveSigners helper functions, to respectively get all the admins that might have been added using SmartWallet.AddAdmin and all the temporary signers that were added using SmartWallet.CreateSessionKey and are still unexpired.

GetAllAdmins returns a List<string> of all your admins.

GetAllActiveSigners returns permissions similar to the inputs of CreateSessionKey

SignerPermissions
{
string Signer // the signer address
List<string> ApprovedTargets // contracts signer is allowed to interact with
BigInteger NativeTokenLimitPerTransaction // wei
BigInteger StartTimestamp // unix
BigInteger EndTimestamp // unix
}

Furthermore, these functions now throw when called directly on the Smart Wallet, to make sure signatures are 1271 compatible and not confuse developers by forwarding these calls down to the personal wallet acting as a signer.

Functions: SmartWallet.EthSign, SmartWallet.RecoverAddressFromEthSign and SmartWallet.PersonalSign(byte[])

External Accounts

As we begun implementing the .NET SDK on different platforms, we ran into an issue when integrating external wallet types on such platforms - EIP-712.

We've added a utility to remedy this: Utils.ToJsonExternalWalletFriendly<TMessage, TDomain>(TypedData typedData, TMessage message)

This method will convert any typed data parameters into correct and verifiable formats, specially in cases of EIP-1271 Smart Wallet type signatures. If you're implementing an external wallet, we recommend using this util in your IThirdwebWallet.SignTypedDataV4<TMessage,TDomain> overrides.

This has been confirmed to work with MetaMask (native and extension) and WalletConnect.

Miscellaneous

Thirdweb.Pay specific constants have been removed.

Previously, adding using Thirdweb and using Thirdweb.Pay made it annoying to accesss Thirdweb.Constants - this is no longer the case.