Skip to main content
Теперь, когда вы настроили хуки и провайдер, давайте рассмотрим несколько примеров использования предоставленных методов.

Создание сессии

Чтобы создать сессию, вызовите метод createSession у sessionWallet. Этот метод принимает три параметра:
  1. targetProgramPublicKey: экземпляр PublicKey, представляющий целевую программу, с которой вы хотите взаимодействовать.
  2. topUp: логическое значение, установите true, если хотите первоначально пополнить сессионную пару ключей на 0,01 SOL, и false, если не хотите пополнять сессионную пару ключей.
  3. expiryInMinutes: необязательный параметр, задающий время жизни сессии в минутах. Значение по умолчанию — 60 минут.
const handleCreateSession = async () => {
  const targetProgramPublicKey = new PublicKey(
    "your_target_program_public_key"
  );
  const topUp = true;
  const expiryInMinutes = 60;

  const session = await sessionWallet.createSession(
    targetProgramPublicKey,
    topUp,
    expiryInMinutes
  );

  // you can also specify the amount you want to topUp the session wallet.
  //This will top up the amount specified, and when revoked, send back to the authority
  const session = await sessionWallet.createSession(
    targetProgramPublicKey,
    topUp ? 10000000 : 0, // 0.01 SOL
    expiryInMinutes
  );

  if (session) {
    console.log("Session created:", session);
  } else {
    console.error("Failed to create session");
  }
};
При вызове createSession создаётся новая эфемерная пара ключей, которая хранится на стороне клиента. Затем создаётся сессионный токен и сохраняется вместе с парой ключей. Это позволяет пользователю безопасно подписывать транзакции с помощью сгенерированной пары ключей, не раскрывая приватный ключ своего основного кошелька.

Подписание и отправка транзакции

Для подписания и отправки транзакции используйте метод signAndSendTransaction. Этот метод сначала подписывает транзакцию с помощью эфемерной пары ключей, созданной в ходе сессии, а затем отправляет подписанную транзакцию в сеть Solana.
const handleSendTransaction = async () => {
  const transaction = new Transaction();
  // Add instructions to the transaction
  const txids = await sessionWallet.signAndSendTransaction(transaction);

  if (txids && txids.length > 0) {
    console.log("Transaction sent:", txids);
  } else {
    console.error("Failed to send transaction");
  }
};
Метод signAndSendTransaction обеспечивает дополнительный уровень безопасности, гарантируя, что приватный ключ основного кошелька не раскрывается. Для подписи транзакции используется эфемерная пара ключей, хранящаяся на стороне клиента, что позволяет сохранить безопасность основного кошелька пользователя.

Отзыв сессии

Для отзыва сессии вызовите метод revokeSession у sessionWallet. Этот метод выполняет три действия:
  1. Удаляет эфемерную пару ключей и сессионный токен из хранилища на стороне клиента.
  2. Отзывает сессию в смарт-контракте.
  3. Возвращает лампорты владельцу и закрывает PDA сессионного токена.
const handleRevokeSession = async () => {
  await sessionWallet.revokeSession();
  console.log("Session revoked");
};
Отзыв сессии гарантирует, что эфемерная пара ключей больше не действительна и не может быть использована. Эти примеры помогут вам начать реализацию управления сессиями и функционала кошелька в вашем приложении. Обратитесь к разделу “Create Post” в примерном приложении, чтобы увидеть, как реализована работа с сессионным токеном.