Solana - 如何从 JavaScript / Node.js 中的本地密钥对获取帐户?

     2023-02-18     300

关键词:

【中文标题】Solana - 如何从 JavaScript / Node.js 中的本地密钥对获取帐户?【英文标题】:Solana - How to get the account from my local keypair in JavaScript / Node.js? 【发布时间】:2021-12-07 02:24:11 【问题描述】:

我正在尝试编写一个 node.js 程序,将一个 SOL 空投到我的 devnet 帐户中(我知道我可以为此使用 CLI,但我想在成功处理空投后继续使用该程序)。

在许多在线示例中,他们首先为此使用 let account = Keypair.generate();. This worked for me too, but I want to use my existing file system wallet / account with the pubkey: DNuqHBGxzm96VLkLWCUctjYW9CX68DBY6jQ1cVuYP2Ai 生成一个新的密钥对/帐户。 首先,我尝试通过运行来获取对帐户的引用:

let accountFromSeed = Keypair.fromSeed("raw present ... <rest of my seed>"); 但这引发了这个错误:UnhandledPromiseRejectionWarning: TypeError: unexpected type, use Uint8Array

然后我尝试将我的 pubkey 直接传递给 requestAirdrop() 命令:

const web3 = require("@solana/web3.js");
(async () => 
    // Connect to cluster
    console.log(web3.clusterApiUrl('devnet'))
    const connection = new web3.Connection(
        web3.clusterApiUrl('devnet'),
        'confirmed',
    );
const airdropSignature = await connection.requestAirdrop(
        "DNuqHBGxzm96VLkLWCUctjYW9CX68DBY6jQ1cVuYP2Ai",   // passing my pubkey directly into the requestAirdrop function
        web3.LAMPORTS_PER_SOL,
    );
    await connection.confirmTransaction(airdropSignature);
)();

使用node solaris 启动脚本后的错误消息:

$ node solaris
https://api.devnet.solana.com
(node:33672) UnhandledPromiseRejectionWarning: TypeError: to.toBase58 is not a function
    at Connection.requestAirdrop (C:\Users\...\workspace\privat\solana\Solaris\node_modules\@solana\web3.js\lib\index.cjs.js:4716:68)
    at C:\Users\...\workspace\privat\solana\Solaris\solaris.js:38:47
    at Object.<anonymous> (C:\Users\...\workspace\privat\solana\Solaris\solaris.js:63:3)
    at Module._compile (internal/modules/cjs/loader.js:1063:30)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:1092:10)
    at Module.load (internal/modules/cjs/loader.js:928:32)
    at Function.Module._load (internal/modules/cjs/loader.js:769:14)
    at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:72:12)
    at internal/main/run_main_module.js:17:47
(Use `node --trace-warnings ...` to show where the warning was created)
(node:33672) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). To terminate the node process on unhandled promise rejection, use the CLI flag `--unhandled-rejections=strict` (see https://nodejs.org/api/cli.html#cli_unhandled_rejections_mode). (rejection id: 2)
(node:33672) [DEP0018] DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the 
Node.js process with a non-zero exit code.

【问题讨论】:

【参考方案1】:

以下代码获取我的密钥(来自我的本地密钥对的完整内容)并从中获取帐户。然后空投 1 个 SOL 到账户中,并将 0.01 个 SOL 转移到另一个随机账户:

const web3 = require("@solana/web3.js");
const Keypair, Transaction, SystemProgram, LAMPORTS_PER_SOL, sendAndConfirmTransaction, clusterApiUrl = require("@solana/web3.js");

let secretKey = Uint8Array.from([233,65,...]); // my secret key...
let fromKeypair  = Keypair.fromSecretKey(secretKey);
// let fromKeypair = Keypair.generate();
let toKeypair = Keypair.generate();
let transaction = new Transaction();

transaction.add(
  SystemProgram.transfer(
    fromPubkey: fromKeypair.publicKey,
    toPubkey: toKeypair.publicKey,
    lamports: 10000000
  )
);

let connection = new web3.Connection(clusterApiUrl('devnet'));

connection.requestAirdrop(
    fromKeypair.publicKey,   
    web3.LAMPORTS_PER_SOL,
);

sendAndConfirmTransaction(
  connection,
  transaction,
  [fromKeypair]
);

node solaris执行

【讨论】:

如何使用 @solana/web3.js 从 Solana 中的自定义令牌中删除铸币权限?

】如何使用@solana/web3.js从Solana中的自定义令牌中删除铸币权限?【英文标题】:HowdoIremovethemintingauthorityfrommycustomtokeninSolanausing@solana/web3.js?【发布时间】:2021-11-0203:16:28【问题描述】:我已经能够使用使用web3.Keypair.generate()生成... 查看详情

如何在 SOLANA 上使用 web3 js 从令牌地址获取元数据

】如何在SOLANA上使用web3js从令牌地址获取元数据【英文标题】:HowtogetMetadatafromaTokenadressusingweb3jsonSOLANA【发布时间】:2021-12-2207:33:21【问题描述】:由于该方法,我得到了publicKey拥有的令牌列表:connection.getParsedTokenAccountsByOwner(n... 查看详情

如何使用我的私钥文件加载我的 Solana 钱包?

...描述】:我正在尝试使用我通过Solana命令行生成的私钥在JavaScript/Node.js中创建一个钱包。我想使用web3.Keypair.fromSeed()方法。这是我到目前为止所采取的步骤。创建了一个solana钱包:s 查看详情

如何使用现有钱包签署使用节点 JS 脚本运行的 solana 交易?

】如何使用现有钱包签署使用节点JS脚本运行的solana交易?【英文标题】:HowcanIsignmysolanatransactionwhichrunswithnodeJSscriptwithexistingwallet?【发布时间】:2021-10-3023:21:13【问题描述】:我需要通过使用solana/web3.js构建的节点脚本从我现有... 查看详情

如何为 Solana javascript API 创建 web3.Keypair 对象?

】如何为SolanajavascriptAPI创建web3.Keypair对象?【英文标题】:Howtocreateweb3.KeypairobjectforSolanajavascriptAPI?【发布时间】:2021-11-1521:35:09【问题描述】:我希望用户来我的网站上铸造代币。我已关注Solana文档,并在Javascript客户端部分遇... 查看详情

如何将程序部署到 Solana - Solana/Rust

】如何将程序部署到Solana-Solana/Rust【英文标题】:HowdoIdeployaprogramtoSolana-Solana/Rust【发布时间】:2021-08-0720:33:55【问题描述】:我正在尝试运行HelloWorldsolana程序。我已经克隆了thisrepo。我已经开始了这个项目solana-test-validator我运... 查看详情

Solana - 如何获取集群版本

】Solana-如何获取集群版本【英文标题】:Solana-Howtogetclusterversions【发布时间】:2021-10-1516:46:01【问题描述】:如何在Solana上获取集群版本?例如,我想知道devnet集群的当前版本。是否有命令行或网站告诉我当前版本?【问题讨... 查看详情

如何在 Windows 上安装 Solana?

】如何在Windows上安装Solana?【英文标题】:HowtoinstallSolanaonWindows?【发布时间】:2021-12-2704:53:29【问题描述】:我跑了:curlhttps://release.solana.com/v1.8.3/solana-install-init-x86_64-pc-windows-msvc.exe--outputC:\\solana-install-tmp\\solana-insta 查看详情

Solana Rust 智能合约如何获得区块高度或 Unix 时间?

】SolanaRust智能合约如何获得区块高度或Unix时间?【英文标题】:HowcanaSolanaRustsmartcontractgetblockheightorUnixtime?【发布时间】:2021-10-1408:38:03【问题描述】:我知道如何从前端传递当前的Unix时间:web3.js:anchor.web3.SYSVAR_CLOCK_PUBKEY生锈... 查看详情

solana开发入门源码(代码片段)

在这个教程里,我们将学习如何开发Solana链上程序,内容包括创建Solana账号、从测试链获取免费的SOL、编译部署与测试流程,并开发一个简单的Solana链上程序。在教程结束部分提供了完整源码的下载链接。用自己熟悉... 查看详情

Solana - 如何确定最终性

】Solana-如何确定最终性【英文标题】:Solana-HowtodetermineFinality【发布时间】:2021-10-1413:09:22【问题描述】:我目前正在开发一个后端系统,该系统需要确定Solana上的交易是否是最终的。我知道RPC方法中有一个commitment:"max"... 查看详情

Solana - 如何获得外国账户的代币余额?

】Solana-如何获得外国账户的代币余额?【英文标题】:Solana-Howtogettokenbalanceforaforeignaccount?【发布时间】:2021-12-0617:02:04【问题描述】:在Solana中,您可以通过CLI获得自己的平衡$spl-tokenaccounts但是,如果我有账户ID或他的公钥,... 查看详情

如何通过“@solana/web3.js”和“@solana/spl-token”调用 nft 程序?

】如何通过“@solana/web3.js”和“@solana/spl-token”调用nft程序?【英文标题】:Howtomakeacalltonftprogramsby\'@solana/web3.js\'and"@solana/spl-token"?【发布时间】:2021-12-0906:21:18【问题描述】:我想调用nft程序,但我不知道怎么做。我一... 查看详情

我想在 solana 上铸造一个新的代币。如何使用 solana-web3.js 做到这一点?

】我想在solana上铸造一个新的代币。如何使用solana-web3.js做到这一点?【英文标题】:Iwouldliketomintanewtokenonsolana.HowcanIdothisusingsolana-web3.js?【发布时间】:2021-09-1319:24:36【问题描述】:我正在使用solana-web3.js,但找不到任何关于如... 查看详情

如何在 Solana 中铸造限量版代币

】如何在Solana中铸造限量版代币【英文标题】:HowtomintlimitededitiontokensinSolana【发布时间】:2022-01-1907:17:02【问题描述】:我只是了解限量版不可替代代币在Solana上的运作原理。比如说,我创建了一个3D剑,我想只从3D剑文件中铸... 查看详情

如何连接到 solana discord 开发者频道?

】如何连接到solanadiscord开发者频道?【英文标题】:Howtoconnecttosolanadiscorddeveloperchannel?【发布时间】:2021-11-1714:05:18【问题描述】:我想问一下有关solana网络的问题。所以,我检查了https://docs.solana.com/。有不和谐频道邀请链接。... 查看详情

如何通过 Solana JSONRPC 发送和接收令牌

】如何通过SolanaJSONRPC发送和接收令牌【英文标题】:howtosendandreceivetokensviaSolanaJSONRPC【发布时间】:2021-12-3115:51:25【问题描述】:有以下ETHJSONRPC实现来传输令牌,可以通过PHP中的curl使用,我想完全一样,但在Solana区块链上-它支... 查看详情

在 Solana 程序部署失败后,如何恢复用于出租的 SOL?

】在Solana程序部署失败后,如何恢复用于出租的SOL?【英文标题】:HowcanIrecovertheSOLusedforrentafterafailedSolanaprogramdeployment?【发布时间】:2022-01-0614:20:32【问题描述】:我尝试部署Solana程序,但失败了,并且我丢失了用于出租的SOL... 查看详情