Как отправить солану через мое приложение в vanilla js?

Попытка сделать простую функцию отправки и получения в Солане с ванильным JS.

Ниже моя функция отправки, которая отлично работает, и теперь мне нужна функция приема. Где провайдер мог перевести Солану из моего казначейского кошелька.

Я не уверен, какой подход у меня должен быть, только начинаю. Есть ли способ просто перемещать вещи в этой функции? Или у меня должен быть совершенно другой подход?

Спасибо!

      async function transferSOL() {
  // Detecing and storing the phantom wallet of the user (creator in this case)
  var provider = phantom;

  // Establishing connection
  var connection = new web3.Connection(
    web3.clusterApiUrl('devnet'),
  );

  var transaction = new web3.Transaction().add(
    web3.SystemProgram.transfer({
      fromPubkey: provider.publicKey,
      toPubkey: treasuryWallet.publicKey,
      lamports: 0.1 * web3.LAMPORTS_PER_SOL - 100  
    }),
  );
  // Setting the variables for the transaction
  transaction.feePayer = await provider.publicKey;
  let blockhashObj = await connection.getRecentBlockhash();
  transaction.recentBlockhash = await blockhashObj.blockhash;

  // Request creator to sign the transaction (allow the transaction)
  let signed = await provider.signTransaction(transaction);
  let signature = await connection.sendRawTransaction(signed.serialize());
  await connection.confirmTransaction(signature);
}

1 ответ

Если вы хотите перевести из своей казны пользователю, то вы должны подписаться на как-то. В вашем случае похоже, что у вас уже есть пара ключей, доступная вам в вашем приложении, поэтому вы можете просто сделать:

      var transaction = new web3.Transaction().add(
    web3.SystemProgram.transfer({
      toPubkey: provider.publicKey,
      fromPubkey: treasuryWallet.publicKey,
      lamports: 0.1 * web3.LAMPORTS_PER_SOL - 100  
    }),
  );
  // Setting the variables for the transaction
  transaction.feePayer = treasuryWallet.publicKey;
  let blockhashObj = await connection.getRecentBlockhash();
  transaction.recentBlockhash = await blockhashObj.blockhash;

  // Request creator to sign the transaction (allow the transaction)
  transaction.sign(treasuryWallet);
  let signature = await connection.sendRawTransaction(transaction.serialize());
  await connection.confirmTransaction(signature);

Обратите внимание, что это очень небезопасно! Каждый, кто использует ваше веб-приложение, имеет полный доступ к казначейским средствам, если пара ключей открыта, поскольку они могут просто подписывать ею все транзакции, которые захотят.

Другие вопросы по тегам