3 Land Solana SDK 软件
一个与3Land的索拉纳程序互动的节点Js SDK. 这个SDK提供了一个简单而直观的方法,可以与3Land在索拉纳区块链上的智能合同相融合.
目录
先决条件
在使用此 SDK 之前, 请保证您安装以下设备 :
- 节点.js(v16或更高)
- npm 或纱线
- 索拉纳CLI 工具
安装
清除还原
git clone https://github.com/biccsdev/3land_sdk.git
# or
npm install 3land_sdk
运行此命令以安装 sdk 所需的所有软件包
npm install
# or
yarn add
网络配置
基本网络选择
import { Store, NetworkType } from "@3land/solana-sdk";
// For Devnet (default)
const devnetStore = new Store();
// For Mainnet
const mainnetStore = new Store({
network: NetworkType.MAINNET,
});
自定义配置
// Using custom RPC endpoint
const store = new Store({
network: NetworkType.MAINNET,
customEndpoint: "https://your-custom-rpc.com",
});
// Using custom configuration
const storeWithCustomConfig = new Store({
network: NetworkType.MAINNET,
customConfig: {
programId: "your_custom_program_id",
// other config options...
},
});
环境设置
import dotenv from "dotenv";
dotenv.config();
const store = new Store({
network: (process.env.SOLANA_NETWORK as NetworkType) || NetworkType.DEVNET,
customEndpoint: process.env.SOLANA_RPC_ENDPOINT,
customConfig: {
programId: process.env.PROGRAM_ID,
},
});
示例 .env 文件 :
SOLANA_NETWORK=mainnet-beta
SOLANA_RPC_ENDPOINT=https://your-custom-rpc.com
PROGRAM_ID=your_program_id
钱包设置
Devnet 钱包设置
solana-keygen new --outfile ~/.config/solana/devnet-wallet.json
solana config set --url https://api.devnet.solana.com
solana config set --keypair ~/.config/solana/devnet-wallet.json
solana airdrop 2
主网钱包设置
solana-keygen new --outfile ~/.config/solana/mainnet-wallet.json
solana config set --url https://api.mainnet-beta.solana.com
solana config set --keypair ~/.config/solana/mainnet-wallet.json
使用量
创建存储
import { StoreConfig, FeeType } from "@3land/solana-sdk";
import { BN } from "bn.js";
try {
const storeConfig: StoreConfig = {
fee: new BN(1000000), // Fee in lamports
feePercentage: 5, // Must be between 0-100
feeType: new FeeType.AllMints(),
trust: payer.publicKey,
rules: [],
};
// Creator and storeId are optional, will default to payer.publicKey and random number
const createStoreTxId = await store.createStore(
walletKeypair,
"My 3Land Store",
storeConfig
);
console.log("Store created successfully:", createStoreTxId);
} catch (error) {
if (error.name === "ValidationError") {
console.error("Invalid parameters:", error.message);
} else {
console.error("Store creation failed:", error);
}
}
创建收藏
try {
const creator = new Creator({
address: payer.publicKey,
verified: false,
share: 100,
});
const metadata = {
symbol: "LAND", // Max 10 characters
name: "3Land Collection", // Max 32 characters
uri: "",
sellerFeeBasisPoints: new BN(0),
creators: [creator],
collection: null,
uses: null,
};
/ Prepare your image files
const imageBuffer = fs.readFileSync("path/to/image.gif").buffer;
const coverBuffer = fs.readFileSync("path/to/cover.jpeg").buffer;
const collectionOptions = {
symbol: "SDK",
metadata: {
name: metadata.name,
description: "3Land Collection Description",
files: {
file: {
arrayBuffer() {
return imageBuffer;
},
type: "image/png",
},
cover: {
arrayBuffer() {
return coverBuffer;
},
type: "image/png",
},
},
},
creators: metadata.creators,
traits: [{ attribute1: "value1" }, { attribute2: "value2" }],
sellerFeeBasisPoints: metadata.sellerFeeBasisPoints,
};
const collectionTx = await store.createCollection(
walletKeypair,
{ __kind: "V1", size: 0 },
metadata,
{
options: collectionOptions
},
false, // Mutable flag (optional)
0 // Supply (optional)
);
console.log("Collection created successfully:", collectionTx);
} catch (error) {
console.error("Collection creation failed:", error);
}
创建单版 NFT
try {
const metadata = {
name: "My 3Land NFT",
uri: "",
uriType: 1,
sellerFeeBasisPoints: 500,
collection: collectionPublicKey,
creators: [creator],
};
const saleConfig = {
prices: [
{
amount: new BN(1000000),
priceType: new CurrencyType.Native(),
},
],
priceType: new PriceRule.None(),
rules: [],
sendToVault: 0,
saleType: new SaleType.Normal(),
};
const singleEditionTx = await store.createSingleEdition(
walletKeypair,
storeAccount,
100, // Supply
metadata,
saleConfig,
[1, 0, 0], // Category
[1, 0], // Super Category
0, // Event Category
12345, // Hash Traits
collectionPublicKey,
{
options: nftOptions,
}
);
console.log("Single edition created successfully:", singleEditionTx);
} catch (error) {
console.error("Single edition creation failed:", error);
}
购买NFT
try {
// Most parameters are optional and have default values
const buyTx = await store.buySingleEdition(
walletKeypair,
[0, 0, 0, 0, 0, 0], // Distribution bumps
itemAddress // The NFT's item account address
);
console.log("Purchase successful:", buyTx);
} catch (error) {
console.error("Purchase failed:", error);
}
特征
- 存储管理
- 创建和配置 NFT 商店
- 设置自定义收费结构
- 收藏管理
- 创建 NFT 收藏
- 配置收藏元数据
- NFT 操作
- 薄荷单版 NFT
- 配置 NFT 元数据
- 制定定价和销售规则
- 处理NFT采购
- 内建验证
- 输入参数验证
- 交易错误处理
- 完整错误消息
- 分散储存
- 与Irys整合用于元数据存储
- 支持各种文件类型(jpeg, png, glb, mp3, mp4)
- 自动 URI 生成
错误类型
try {
// SDK operations
} catch (error) {
if (error.name === "ValidationError") {
// Handle validation errors
console.error("Invalid parameters:", error.message);
} else if (error instanceof SendTransactionError) {
// Handle Solana transaction errors
console.error("Transaction failed:", error.logs);
} else {
// Handle other errors
console.error("Operation failed:", error);
}
}
捐款
- 叉子存储器
- 创建您的特性分支( E)
git checkout -b feature/amazing-feature(中文(简体) ) - 提交更改( E)
git commit -m 'Add some amazing feature'(中文(简体) ) - 推向分行(
git push origin feature/amazing-feature(中文(简体) ) - 打开拉请求
支助
请在 GitHub 寄存器中创建一个问题或直接与 3Land 团队联系.
许可证
这个项目根据麻省理工学院许可证获得许可----详情见LICENSE文件.