ts
Copy
import dotenv from 'dotenv';
import { TypedDataDomain, TypedDataField, getDefaultProvider, ethers } from 'ethers_v6';
import { StardustCustodialSDK } from '@stardust-gg/stardust-custodial-sdk';
dotenv.config();
// Setup constants
const STARDUST_API_KEY = process.env.PROD_SYSTEM_STARDUST_API_KEY!;
const STARDUST_PROFILE_ID = process.env.PROD_SYSTEM_STARDUST_PROFILE_ID!;
// Typed Data Domain and Types
const domain: TypedDataDomain = {
  name: 'testing',
  version: '1',
  verifyingContract: '0x355172E1AA17117DfCFDD2AcB4b0BFDA8308Cbc9',
};
const types: Record<string, TypedDataField[]> = {
  Order: [
    { name: 'buyer', type: 'address' },
    { name: 'seller', type: 'address' },
    { name: 'price', type: 'uint256' },
    { name: 'tokenId', type: 'uint256' },
    { name: 'nonce', type: 'uint256' },
  ],
};
const value: Record<string, any> = {
  buyer: '0x355172E1AA17117DfCFDD2AcB4b0BFDA8308Cbc9',
  seller: '0x355172E1AA17117DfCFDD2AcB4b0BFDA8308Cbc9',
  price: '2',
  tokenId: '2',
  nonce: '3',
};
// Main function
async function main() {
  try {
    // Initialize Provider
    const provider = getDefaultProvider('mainnet');
    // Initialize Stardust SDK
    const sdk = new StardustCustodialSDK(STARDUST_API_KEY);
    // Get Wallet
    const profile = await sdk.getProfile(STARDUST_PROFILE_ID);
    const { wallet } = profile;
    // Get V6 Signer
    const signer = wallet.ethers.v6.getSigner(provider);
    // Sign the typed data - natively in ethers v6
    const sig = await signer.signTypedData(domain, types, value);
    // Verify the typed data and get the recovered address
    const recoveredAddress = ethers.verifyTypedData(domain, types, value, sig);
    // Log results
    console.log(`Signature: ${sig}`);
    console.log(`Ethereum Address: ${await signer.getAddress()}`);
    console.log(`Recovered Address: ${recoveredAddress}`);
  } catch (error) {
    console.error(`Error: ${JSON.stringify(error)}`);
  }
}
main();

