Using Dynamic Auth in Demo app
This section details the core technologies, smart contracts, and SDKs used in the demo so you can create your own custom interface.
Key Libraries and SDKs
@startale-scs/aa-sdk
: Instantiate and manage Startale smart accountsviem
: EVM interaction from TypeScript@dynamic-labs/sdk-react-core
: Dynamic social login features@dynamic-labs/ethereum
: Enables Sonieum EVM support in Dynamic
Contracts addresses and URLs
# Entrypoint
ENTRY_POINT_ADDRESS=0x0000000071727De22E5E9d8BAf0edAc6f37da032
# Infra
MINATO_RPC=https://rpc.minato.soneium.org
BUNDLER_URL=https://soneium-minato.bundler.scs.startale.com?apikey=[API_KEY]
PAYMASTER_SERVICE_URL=https://paymaster.scs.startale.com/v1?apikey=[API_KEY]
Custom Implementation Steps
1. Wrap Your App in DynamicContextProvider
<DynamicContextProvider
settings={{
environmentId: "YOUR_ENVIRONMENT_ID",
walletConnectors: [EthereumWalletConnectors],
}}
>
2. Initialise Clients
import { createBundlerClient, createPaymasterClient } from "viem/account-abstraction";
import { soneiumMinato } from "viem/chains";
import {
createPublicClient,
encodeFunctionData,
http,
} from "viem";
const publicClient = createPublicClient({
transport: http(MINATO_RPC),
chain: soneiumMinato,
});
const bundlerClient = createBundlerClient({
client: publicClient,
transport: http(BUNDLER_URL),
});
const paymasterClient = createPaymasterClient({
transport: http(PAYMASTER_SERVICE_URL),
});
### 3. Create a Smart Account instance using signer from Dynamic
```ts
import { isEthereumWallet } from "@dynamic-labs/ethereum";
import { useDynamicContext } from "@dynamic-labs/sdk-react-core";
import { createSmartAccountClient, toStartaleSmartAccount } from "@startale-scs/aa-sdk";
const { primaryWallet } = useDynamicContext();
if (!isEthereumWallet(primaryWallet)) {
console.log("Please connect with an Ethereum-compatible wallet.");
}
const walletClient = await primaryWallet.getWalletClient();
const startaleAccount = await toStartaleSmartAccount({
signer: walletClient,
chain: soneiumMinato,
transport: http(),
index: BigInt(0),
});
// Note: You can use paymaster here by providing paymaster client and paymaster context as args below.
const startaleAccountClient = createSmartAccountClient({
account: startaleAccount,
transport: http(BUNDLER_URL),
client: publicClient
});
4. Use the Smart Account APIs
const smartAccountAddress = startaleAccount.address
// startaleAccountClient.sendUserOperation.. and so on
Resources
Useful links for integrating Dynamic into your Account Abstraction dApps: