initializeNonceAccount.test.ts 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. import test from 'ava';
  2. import {
  3. Nonce,
  4. NonceState,
  5. NonceVersion,
  6. SYSTEM_PROGRAM_ID,
  7. createAccount,
  8. fetchNonce,
  9. getNonceSize,
  10. initializeNonceAccount,
  11. } from '../src/index.js';
  12. import { createUmi } from './_setup.js';
  13. import { generateSigner } from '@metaplex-foundation/umi';
  14. test('it creates and initialize a durable nonce account', async (t) => {
  15. // Given some brand now payer, authority, and nonce KeyPairSigners.
  16. const umi = await createUmi();
  17. const nonce = generateSigner(umi);
  18. const nonceAuthority = generateSigner(umi);
  19. // When we use them to create and initialize a nonce account.
  20. const space = getNonceSize();
  21. const rent = await umi.rpc.getRent(getNonceSize());
  22. await createAccount(umi, {
  23. newAccount: nonce,
  24. lamports: rent.basisPoints,
  25. space,
  26. programAddress: SYSTEM_PROGRAM_ID,
  27. })
  28. .add(
  29. initializeNonceAccount(umi, {
  30. nonceAccount: nonce.publicKey,
  31. nonceAuthority: nonceAuthority.publicKey,
  32. })
  33. )
  34. .sendAndConfirm(umi);
  35. // Then we expect the nonce account to exist with the following data.
  36. t.like(await fetchNonce(umi, nonce.publicKey), <Nonce>{
  37. publicKey: nonce.publicKey,
  38. version: NonceVersion.Current,
  39. state: NonceState.Initialized,
  40. authority: nonceAuthority.publicKey,
  41. });
  42. });