GTokenTool全网最好的代币发行工具平台
当前位置:首页 >> solana教程 >> 将文件上传到 Solana 上的 Shadow Drive

将文件上传到 Solana 上的 Shadow Drive

admin solana教程 89

概述

Solana 的高成本和有限的存储容量使得存储大量数据的成本过高。GenesysGo 创建的 Shadow Drive 等链下存储解决方案已获得青睐,可以克服这些限制。


Shadow Drive 为在 Solana 上存储大量数据提供了一种经济高效且性能卓越的选项。但是,它需要主网代币,您可以通过进行 SOL → SHDW 交换来获取该代币。


在本教程中,我们将演示如何使用 TypeScript 将文件上传到 Shadow Drive。


笔记

该测试只能在主网上运行,因为 SHDW 目前没有可用的开发网选项。


先决条件

在开始之前,请确保您已安装Backpack Wallet Extension和以下先决条件:


Node.js


代码

sh -c "$(curl -sSfL https://release.solana.com/v1.14.18/install)"


Solana CLI 已安装


代码

npm install -g ts-node


设置环境

创建项目

从您的终端创建一个名为Shadow的新文件夹。

在Shadow文件夹中创建一个名为upload.ts的新文件。

安装所需的软件包:

代码

npm install @shadow-drive/sdk @project-serum/anchor


4.使用以下命令生成钱包:


代码

solana-keygen grind --starts-with N:1


5.在“ Shadow ”文件夹中创建一个名为“ helius.txt ”     的文件,并向其中添加一些内容。在此示例中,我们仅放置以下内容:

完成这些步骤后,您的文件目录结构应类似于以下内容:

1.打开名为的文件[walletAddress].json并复制密钥。我们需要为这个钱包提供资金作为示例。


2.从Chrome 网上应用店为您的浏览器安装 Backpack Wallet 扩展程序。

3.打开 Backpack Wallet 扩展并转到“设置”。


4. 在设置菜单中,选择“钱包”。

5.点击右上角“ + ”按钮,添加新钱包。

6. 选择 Solana 作为钱包类型。选择“通过私钥导入”。

7. 将钱包文件的内容粘贴到导入字段中,然后单击“导入”。

导入后,从钱包中复制公钥。你可以从另一个 Solana 钱包向这个测试钱包注入少于 0.03 SOL 的资金。


1.获取 SHDW 代币

SHDW Drive 需要一个名为 SHDW ( SHDWyBxihqiCj6YekG2GUr7wqKLeLAMK1gHZck9pL6y) 的代币来创建存储账户。您可以通过在 Solana 上使用 Jupiter 的交换流程获取 SHDW 代币。


2.访问Jupiter执行 SOL 到 SHDW 代币交换。

输入要兑换 SHDW 的 SOL 数量,然后单击“兑换”。我们只需要少于 1 SHDW 即可进行此测试(相当于 0.01 SOL)。

3. 确认交易。交易获批后,SHDW 代币将反映在您的钱包中。


构建步骤

1. 设置与 SHDW 的连接

在您的 upload.ts 文件中,我们将导入必要的模块并建立与 SHDW 网络的连接。我们将创建一个名为main的异步函数来嵌套我们的代码:


代码

const anchor = require("@project-serum/anchor");

const { Connection, clusterApiUrl, Keypair } = require("@solana/web3.js");

const { ShdwDrive, ShadowFile } = require("@shadow-drive/sdk");

const key = require('./{wallet_address}.json');

const fs = require('fs');

const rpc = "https://rpc.helius.xyz/?api-key="

async function main() {

    let secretKey = Uint8Array.from(key);

    let keypair = Keypair.fromSecretKey(secretKey);

    const connection = new Connection(

        rpc , "confirmed"

    );    

const wallet = new anchor.Wallet(keypair);

    const drive = await new ShdwDrive(connection, wallet).init();

console.log(drive)

}

main();


确保将变量替换api-key为rpc可从 Helius开发者门户获取的有效 API 密钥。此外,请const key用我们在开始之前创建的钱包的正确文件名替换。


如果您现在使用 ts-node upload.ts 运行该文件,您将在终端中看到以下内容:


代码

ShdwDrive {

  connection: Connection {

    _commitment: 'confirmed',

    _confirmTransactionInitialTimeout: undefined,

    _rpcEndpoint: 'https://rpc.helius.xyz/?api-key=',

...


2.创建存储帐户

要创建存储帐户,请在主函数中添加以下代码:


代码

const newAccount = await drive.createStorageAccount("heliusDemo", "1MB", "v2");

console.log(newAccount);


运行ts-node upload.ts此处的命令将输出新创建的存储帐户的ID和交易签名。


代码

{

  shdw_bucket: '5pzNpvGk3VK4XsqoCoJpqfXE7vioKkr7t4UEqbHkqnz1',

  transaction_signature: '4EFw2R7KNw45Rngg6MASqfhGDpeZvcaoQHApADhopD9WQxB6XMYBcshd7neyLFa6QtKZC5H9U5iTnggUuhdNDLfE'

}


笔记

如果钱包中没有至少 0.01 SOL 和 1 SHDW 代币,您可能会在此步骤遇到错误。


3.上传文件

一旦我们有了存储帐户,我们就可以向其中上传文件。在主函数中添加以下代码:


代码

const accts = await drive.getStorageAccounts("v2");

const fileBuff = fs.readFileSync("./helius.txt");

let acctPubKey = new anchor.web3.PublicKey(accts[0].publicKey);

const fileToUpload: ShadowFile = {

    name: "helius.txt",

    file: fileBuff,

    };

const uploadFile = await drive.uploadFile(acctPubKey, fileToUpload);

console.log(uploadFile);


上面的代码执行四个主要操作:


它将本地文件 helius.txt 读取为缓冲区。

找到我们创建的存储账户,并将其定义为我们的账户公钥。

ShadowFile它使用文件的名称和数据创建一个对象。

它使用该函数将文件上传到指定的存储帐户uploadFile。

我们现在可以运行以下命令开始上传:


代码

ts-node upload.ts


这会在我们的控制台中产生以下内容:


代码

{

  finalized_locations: [

    'https://shdw-drive.genesysgo.net/5pzNpvGk3VK4XsqoCoJpqfXE7vioKkr7t4UEqbHkqnz1/helius.txt'

  ],

  message: '3UNhH2UMys8GxqSouVPtKLAd3rcP7m3oP8LwvwH8HSp3yChaYPSaAhjub5iV2i1LDvSU3JZ9ck322kt7QhRdbMhY',

  upload_errors: []

}


现在文件已上传!您可以访问生成的 finalized_location 链接,并确保文件已正确上传。


请注意,该文件的 URL 是https://shdw-drive.genesysgo.net/[storage_account_address]/[file_name]


这意味着上传到此存储帐户的任何文件都将共享初始 URL,但文件名会发生变化。您还可以创建单独的存储帐户来存储文件。


检查完钱包后你还会发现:此操作仅花费 0.00244 SHDW 即可完成。


完整代码

代码

const anchor = require("@project-serum/anchor");

const { Connection, clusterApiUrl, Keypair } = require("@solana/web3.js");

const { ShdwDrive, ShadowFile } = require("@shadow-drive/sdk");

const key =  require('./wallet.json');

const fs = require('fs');


async function main() {

    let secretKey = Uint8Array.from(key);

    let keypair = Keypair.fromSecretKey(secretKey);

    const connection = new Connection(

        "https://rpc.helius.xyz/?api-key=", "confirmed"

    );    const wallet = new anchor.Wallet(keypair);

    const drive = await new ShdwDrive(connection, wallet).init(); 

const newAccount = await drive.createStorageAccount("heliusDemo", "1MB", "v2");

console.log(newAccount);  

    const accts = await drive.getStorageAccounts("v2");

    const fileBuff = fs.readFileSync("./helius.txt");

    let acctPubKey = new anchor.web3.PublicKey(accts[0].publicKey);

    const fileToUpload: typeof ShadowFile = {

    name: "helius.txt",

    file: fileBuff,

    };

    const uploadFile = await drive.uploadFile(acctPubKey, fileToUpload);

    console.log(uploadFile);


}

main();


结论

就这样!您已成功使用 TypeScript 将文件上传到 Shadow Drive。这些基础知识使您能够利用 SHDW 的去中心化功能,并为更高级的用例奠定基础。例如,您可以通过将文件上传功能集成到 Web 应用程序中或创建去中心化文件存储服务来扩展本教程。请查看官方文档,进一步了解Shadow Drive SDK 的功能。


作者:GTokenTool一键发币平台

交流群:https://t.me/+Kz4u3xoDpFo3ZWY1

同类推荐