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

Posted

技术标签:

【中文标题】如何使用现有钱包签署使用节点 JS 脚本运行的 solana 交易?【英文标题】:How can I sign my solana transaction which runs with node JS script with existing wallet? 【发布时间】:2021-10-30 23:21:13 【问题描述】:

我需要通过使用 solana/web3.js 构建的节点脚本从我现有的地址(从 Phantom 钱包创建)发送一些 SOL。 我的钱包里有一个私钥。但我无法使用我的私钥字符串签署创建密钥对。

const from = web3.Keypair.generate();
// how to get my wallet account from private key to from account

谢谢

【问题讨论】:

【参考方案1】:

如果你有字节数组形式的密钥对,你可以使用Keypair.fromSecretKey来获取你的密钥对:https://github.com/solana-labs/solana/blob/82a6bbe06891bc58ed1fa0586ae5d168e68516bd/web3.js/src/keypair.ts#L60

如果您只有 base58 编码的字符串,则必须先使用 bs58 节点包对其进行解码:

import bs58 from `bs58`;
const decoded = bs58.decode(keypairString);

【讨论】:

base58 编码字符串表示我们可以从 phantom 或 sollet 等钱包中导出为私钥 遇到错误,Error: Non-base58 character【参考方案2】:

您可以从钱包中导出私钥,您会得到一个 8 字节整数数组,类似于 [244, 13, 5, ...]

然后您可以使用将其转换为密钥对

const keyPair = Keypair.fromSecretKey(new Uint8Array([244, 13, 5, ...]));

你可以使用上面的keyPair来签名

【讨论】:

我有一个虚拟钱包,我无法以字节数组的形式报告私钥。但是@Jon 回答对我有用。谢谢 如果我们只有一个字符串输入的私钥呢? new Uint8Array(string) 将每个字符串字符转换为数组元素,这不是我们想要的?‍♂️

以上是关于如何使用现有钱包签署使用节点 JS 脚本运行的 solana 交易?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用服务器上的调度程序自动运行我的节点 js 脚本

如何将交易从元掩码钱包发送到后端节点 js

web3.js 实现调用狐狸钱包完成用户登录

如何检查没有链接的节点的d3 js力图并删除它们?

如何使用DB连接运行Mongo JS Shell脚本?

Web3:访问 MetaMask 钱包中的私钥