Skip to main content
By default, the Rhinestone SDK uses a Safe smart account. You can override this by passing an account field to createAccount with the type set to your preferred implementation.
const rhinestoneAccount = await rhinestone.createAccount({
  account: {
    type: 'nexus',
  },
  owners: {
    type: 'ecdsa',
    accounts: [account],
  },
})
const rhinestoneAccount = await rhinestone.createAccount({
  account: {
    type: 'safe',
  },
  owners: {
    // ECDSA/ENS owners become the Safe's native owner. Passkey/multi-factor
    // owners have no EOA, so the native owner is set to the NoSafeOwner
    // contract (0xbabe99…5e72), which rejects every signature — the native
    // owner path is dead and auth runs solely through the 7579 validators.
    type: 'ecdsa',
    accounts: [account],
  },
})
const rhinestoneAccount = await rhinestone.createAccount({
  account: {
    type: 'startale',
  },
  owners: {
    type: 'ecdsa',
    accounts: [account],
    module: '0x00000072f286204bb934ed49d8969e86f7dec7b1',
  },
})
const rhinestoneAccount = await rhinestone.createAccount({
  account: {
    type: 'kernel',
  },
  owners: {
    type: 'ecdsa',
    accounts: [account],
  },
})
The account type determines the smart contract implementation deployed for the user. All supported types are fully compatible with Rhinestone’s intent infrastructure and ERC-7579 module ecosystem.
Need support for a different account implementation? Open an issue and we’ll take a look.