SOL钱包开发
大约 3 分钟
SOL钱包开发
账户生成
- 公钥私钥
const solanaWeb3 = require('@solana/web3.js');
// 生成新的密钥对
const keypair = solanaWeb3.Keypair.generate();
console.log("公钥:", keypair.publicKey.toBase58());
console.log("私钥:", keypair.secretKey);
公钥: C9ArttcScpFjwVkb7vGeqPmUs7CTQ1vHH1qNKCgw2x93
私钥: Uint8Array(64) [
65, 86, 171, 59, 137, 44, 233, 114, 136, 154, 240,
5, 135, 32, 11, 89, 202, 114, 102, 11, 152, 15,
224, 164, 91, 149, 252, 5, 180, 159, 198, 242, 165,
136, 90, 8, 18, 108, 65, 211, 216, 76, 87, 117,
155, 64, 64, 77, 170, 132, 247, 67, 57, 73, 89,
51, 118, 145, 3, 186, 160, 124, 82, 54
]
- 助记词
const solanaWeb3 = require('@solana/web3.js');
const bip39 = require('bip39');
const { derivePath } = require('ed25519-hd-key');
// 生成助记词
const mnemonic = bip39.generateMnemonic();
console.log("助记词:", mnemonic);
// 从助记词生成种子
const seed = bip39.mnemonicToSeedSync(mnemonic);
// 使用 Solana 的派生路径 m/44'/501'/0'/0'
const path = "m/44'/501'/0'/0'";
const { key } = derivePath(path, seed.toString('hex'));
// 根据派生的 seed 生成密钥对
const keypair = solanaWeb3.Keypair.fromSeed(key);
console.log("公钥:", keypair.publicKey.toBase58());
console.log("私钥:", keypair.secretKey);
助记词: chunk view deal hen horse visual cook below dish recall awesome upgrade
公钥: Gm14JyqRqPqMr8go2myLbvB4nSX4y3toqmv1kpJCR1A6
私钥: Uint8Array(64) [
154, 35, 110, 47, 158, 126, 70, 105, 3, 100, 41,
146, 66, 47, 35, 193, 147, 138, 234, 165, 233, 10,
43, 134, 136, 58, 0, 246, 141, 168, 61, 74, 234,
36, 236, 140, 191, 121, 202, 247, 68, 36, 214, 26,
217, 250, 231, 148, 185, 65, 213, 101, 232, 110, 123,
252, 151, 34, 118, 229, 183, 31, 80, 95
]
交易信息
- 获取资金
const solanaWeb3 = require('@solana/web3.js');
// 连接到 Solana 的主网
const connection = new solanaWeb3.Connection(solanaWeb3.clusterApiUrl('mainnet-beta'), 'confirmed');
// 使用你的公钥创建一个公钥对象
const publicKey = new solanaWeb3.PublicKey("So11111111111111111111111111111111111111112");
// 查询账户余额
connection.getBalance(publicKey).then(balance => {
console.log("余额:", balance / solanaWeb3.LAMPORTS_PER_SOL, "SOL");
});
- 发送交易
const solanaWeb3 = require('@solana/web3.js');
// 连接到 Solana 的主网
const connection = new solanaWeb3.Connection(solanaWeb3.clusterApiUrl('mainnet-beta'), 'confirmed');
// 从密钥创建一个 Keypair(假设你已有私钥)
const secretKey = Uint8Array.from([154, 35, 110, 47, 158, 126, 70, 105, 3, 100, 41,
146, 66, 47, 35, 193, 147, 138, 234, 165, 233, 10,
43, 134, 136, 58, 0, 246, 141, 168, 61, 74, 234,
36, 236, 140, 191, 121, 202, 247, 68, 36, 214, 26,
217, 250, 231, 148, 185, 65, 213, 101, 232, 110, 123,
252, 151, 34, 118, 229, 183, 31, 80, 95]);
const senderKeypair = solanaWeb3.Keypair.fromSecretKey(secretKey);
// 接收者公钥(将 SOL 发送到的地址)
const recipientPublicKey = new solanaWeb3.PublicKey("Gm14JyqRqPqMr8go2myLbvB4nSX4y3toqmv1kpJCR1A6");
// 创建一笔交易
const transaction = new solanaWeb3.Transaction().add(
solanaWeb3.SystemProgram.transfer({
fromPubkey: senderKeypair.publicKey,
toPubkey: recipientPublicKey,
lamports: 1000000, // 发送的金额,单位是 lamports,1 SOL = 1,000,000,000 lamports
})
);
// 签署并发送交易
(async () => {
try {
const signature = await solanaWeb3.sendAndConfirmTransaction(
connection,
transaction,
[senderKeypair]
);
console.log("交易成功,签名:", signature);
} catch (err) {
console.error("交易失败:", err);
}
})();
账户恢复
- 私钥恢复
const solanaWeb3 = require('@solana/web3.js');
// 假设你有一个现有的私钥
const secretKey = Uint8Array.from([65, 86, 171, 59, 137, 44, 233, 114, 136, 154, 240,
5, 135, 32, 11, 89, 202, 114, 102, 11, 152, 15,
224, 164, 91, 149, 252, 5, 180, 159, 198, 242, 165,
136, 90, 8, 18, 108, 65, 211, 216, 76, 87, 117,
155, 64, 64, 77, 170, 132, 247, 67, 57, 73, 89,
51, 118, 145, 3, 186, 160, 124, 82, 54])
// 根据私钥还原 Keypair
const keypair = solanaWeb3.Keypair.fromSecretKey(secretKey);
console.log("公钥:", keypair.publicKey.toBase58());
console.log("私钥:", keypair.secretKey);
- 助记词恢复
const bip39 = require('bip39');
const solanaWeb3 = require('@solana/web3.js');
const { derivePath } = require('ed25519-hd-key');
// 假设这是你的助记词
const mnemonic = "chunk view deal hen horse visual cook below dish recall awesome upgrade";
// 从助记词生成种子
const seed = bip39.mnemonicToSeedSync(mnemonic);
// 使用 Solana 的派生路径 m/44'/501'/0'/0'
const path = "m/44'/501'/0'/0'";
const { key } = derivePath(path, seed.toString('hex'));
// 通过种子还原密钥对
const keypair = solanaWeb3.Keypair.fromSeed(key);
console.log("还原的公钥:", keypair.publicKey.toBase58());
console.log("还原的私钥:", keypair.secretKey);