SNS Java 脚本 SDK
JavaScript SDK 用于解决索拉纳名称服务(SNS)域,读取记录和所有权数据,并构建 SNS 交易指令 @solana/web3.js 1.x (中文(简体) ).
搬去V3吗? 此发布并非完全后向兼容 。 评议 更改日志 用来打破变化和移民笔记.
安装
npm install @bonfida/spl-name-service @solana/web3.js
SDK 对等者依赖 @solana/web3.js ^1.98.2为RPC业务提供网络3.js连接。 虽然Node.js是主测试环境,但浏览器应用程序通过相容的捆绑器得到充分支持.
读取APIs获取并解码账户数据. 变异绑定返回 TransactionInstruction, (中文(简体) ), Promise<TransactionInstruction>,或 Promise<TransactionInstruction[]>。将返回的指令添加到交易中,设置其付费人和最近的blockhash,收集账户meta所需的签名,并通过您的应用程序提交交易.
子路径导入
虽然根入点仍然可用,但应用程序也可以使用子路径导入:
import { getPrimaryDomain } from "@bonfida/spl-name-service/address";
import { resolve, safeResolve } from "@bonfida/spl-name-service/domain";
import { getMultipleRecords, Record } from "@bonfida/spl-name-service/record";
支持的子路径是 address, (中文(简体) ), bindings, (中文(简体) ), constants, (中文(简体) ), domain, (中文(简体) ), errors, (中文(简体) ), instructions, (中文(简体) ), nft, (中文(简体) ), record, (中文(简体) ), states, (中文(简体) ), twitter, (中文(简体) ), types,以及 utils。 。 。 .
快速启动
解决域
import { Connection } from "@solana/web3.js";
import { resolve } from "@bonfida/spl-name-service/domain";
const connection = new Connection("https://your-rpc-endpoint.example");
const owner = await resolve(connection, "mydomain.sns"); // Or use `safeResolve`.
console.log(owner.toBase58());
获取主域
import { Connection, PublicKey } from "@solana/web3.js";
import { getPrimaryDomain } from "@bonfida/spl-name-service/address";
const connection = new Connection("https://your-rpc-endpoint.example");
const wallet = new PublicKey("<WALLET_ADDRESS>");
const primaryDomain = await getPrimaryDomain(connection, wallet);
console.log(`${primaryDomain.reverse}.sns`, primaryDomain.stale);
列出所有者的域
import { Connection, PublicKey } from "@solana/web3.js";
import {
getSnsDomainsForOwner,
getSnsNftsForOwner,
getSolDomainsForOwner,
getSolNftsForOwner,
} from "@bonfida/spl-name-service/address";
const connection = new Connection("https://your-rpc-endpoint.example");
const wallet = new PublicKey("<WALLET_ADDRESS>");
const snsDomains = await getSnsDomainsForOwner(connection, wallet);
const snsNfts = await getSnsNftsForOwner(connection, wallet);
const solDomains = await getSolDomainsForOwner(connection, wallet);
const solNfts = await getSolNftsForOwner(connection, wallet);
console.log(snsDomains.map(({ domain }) => `${domain}.sns`));
console.log(snsNfts.map(({ domain }) => `${domain}.sns`));
console.log(solDomains.map(({ domain }) => `${domain}.sol`));
console.log(solNfts.map(({ domain }) => `${domain}.sol`));
域输入 决议
使用每个 API 所需的表单, 而不是将名称自己正常化 :
| API 家庭 | 所需投入 | 范围 |
|---|---|---|
域解析为 resolve 财务报告和审定财务报表 safeResolve | 完整后缀名称, 例如 mydomain.sns 或者说 mydomain.sol | .sns 财务报告和审定财务报表 .sol 域 |
| 顶级写法, 如注册、 传输、 燃烧和背景变化 | 小写 mydomain.sns | 仅顶级域; 子域不被接受 |
| 记录读取和写入 | 小写 mydomain.sns 或者说 sub.mydomain.sns | 顶级域或一级子域 |
| 子域创建 | 小写 sub.mydomain.sns | 一级子域 |
| 衍生和原始名称账户助手 | TLD 三角或原始输入, 例如 mydomain 或者说 sub.mydomain | 遵守每个低级助手的账户格式合同 |
API 参考
决议
-
resolve- 决心.sns通过SNS-IP 5所有权优先和.sol通过其犬科SRS记录.resolve(connection: Connection, domain: string, config?: ResolveConfig): Promise<PublicKey> -
safeResolve接下来resolve,但对于带有.sol后缀,它也会解决相应的.sns域并丢出SnsSolResolutionMismatchError如果目标不同.safeResolve(connection: Connection, domain: string, config?: ResolveConfig): Promise<PublicKey>
记录读取和验证
-
getRecord——取出并核实一V2记录.getRecord(connection: Connection, domain: string, record: Record, options?: { deserialize?: boolean }): Promise<RecordResult> -
getMultipleRecords——返回结果为输入顺序;缺失的记录账户为undefined在相应的索引中.getMultipleRecords(connection: Connection, domain: string, records: Record[], options?: { deserialize?: boolean }): Promise<(RecordResult | undefined)[]>
下列独立助手并非来自 RecordResult数字 :
-
getRecordV1Key编号 :getRecordV2Key——从 TLD- trimmed 域中获取记录账户密钥, 如mydomain。 。 。 .getRecordV1Key(domain: string, record: Record): PublicKey getRecordV2Key(domain: string, record: Record): PublicKey -
serializeRecordContent编号 :deserializeRecordContent——编码存储内容,或解码存储内容.serializeRecordContent(content: string, record: Record): Buffer deserializeRecordContent(content: Buffer, record: Record): string -
verifyStaleness——独立取取并检查V2记录的沉滞性验证.verifyStaleness(connection: Connection, record: Record, domain: string): Promise<boolean> -
verifyRightOfAssociation——独立取取并检查V2唱片的关联权验证.verifyRightOfAssociation(connection: Connection, record: Record, domain: string, verifier?: Buffer): Promise<boolean>
记录写入
同步返回一个函数 TransactionInstruction数字 :
-
createRecordcreateRecord(domain: string, record: Record, content: string, owner: PublicKey, payer: PublicKey): TransactionInstruction -
updateRecordupdateRecord(domain: string, record: Record, content: string, owner: PublicKey, payer: PublicKey): TransactionInstruction -
deleteRecorddeleteRecord(domain: string, record: Record, owner: PublicKey, payer: PublicKey): TransactionInstruction -
setRecordStalenessVerifiersetRecordStalenessVerifier(domain: string, record: Record, owner: PublicKey, payer: PublicKey, verifier: PublicKey): TransactionInstruction -
setRecordRoaVerifiersetRecordRoaVerifier(domain: string, record: Record, owner: PublicKey, payer: PublicKey, verifier: PublicKey): TransactionInstruction -
validateRecordRoavalidateRecordRoa(domain: string, record: Record, owner: PublicKey, payer: PublicKey, verifier: PublicKey): TransactionInstruction -
validateRecordRoaEthereum—— 说signature是 64 字节,并且expectedPubkey是一个20字节的Ethereum地址.validateRecordRoaEthereum(domain: string, record: Record, owner: PublicKey, payer: PublicKey, signature: Buffer, expectedPubkey: Buffer): TransactionInstruction
登记和生命周期
登记仅限于小写顶层 .sns 名称。 返回形状因操作而异:
-
registerDomain——返回注册指令,并可能预留"一权委托人"关联子账户指令. 选中的薄荷必须有配置的 Pyth 价格种子 .registerDomain(domain: string, space: number, buyer: PublicKey, buyerTokenAccount: PublicKey, mint?: PublicKey, referrerKey?: PublicKey): Promise<TransactionInstruction[]> -
registerDomainWithNft——返回一"狼-NFT"注册指令. 衍生nameAccount财务报告和审定财务报表reverseLookupAccount在召唤之前.registerDomainWithNft(domain: string, space: number, nameAccount: PublicKey, reverseLookupAccount: PublicKey, buyer: PublicKey, nftSource: PublicKey, nftMint: PublicKey): TransactionInstruction -
transferDomain——取回当前所有者并返回一个传输指令.transferDomain(connection: Connection, domain: string, newOwner: PublicKey): Promise<TransactionInstruction> -
burnDomain返回一个燃烧指令;target接受回收的灯塔.burnDomain(domain: string, owner: PublicKey, target: PublicKey): TransactionInstruction -
setPrimaryDomain– 返回一个已生成域账户的指令 .setPrimaryDomain(connection: Connection, nameAccount: PublicKey, owner: PublicKey): Promise<TransactionInstruction> -
setBackground——返回设置已发布的自定义背景所需的指令.setBackground(connection: Connection, domain: string, bg: CustomBg, owner: PublicKey): Promise<TransactionInstruction[]>
子域
-
createSubdomain——返回名称账户创建指令,并在没有反向账户时,返回反向查看指令.subdomain必须是小写单关.sns子域名.createSubdomain(connection: Connection, subdomain: string, owner: PublicKey, space?: number, feePayer?: PublicKey): Promise<TransactionInstruction[]> -
transferSubdomain——返回一个传输指令. 何时owner省略,该函数检索当前所有者;设置isParentOwnerSigner当母所有者授权转让时.transferSubdomain(connection: Connection, subdomain: string, newOwner: PublicKey, isParentOwnerSigner?: boolean, owner?: PublicKey): Promise<TransactionInstruction> -
findSubdomains——返回父名账户密钥的倒解子域标签.findSubdomains(connection: Connection, parentKey: PublicKey): Promise<string[]>
所有权和反向查询
-
getSnsDomainKeysForOwner——返回直接注册拥有的顶级名账户密钥.getSnsDomainKeysForOwner(connection: Connection, wallet: PublicKey): Promise<PublicKey[]> -
getSnsDomainsForOwner——在那些直接拥有的密钥中添加了TLD-无反向名称;它排除了象征性域,子域,以及没有反向数据的条目.getSnsDomainsForOwner(connection: Connection, wallet: PublicKey): Promise<{ domain: string; key: PublicKey }[]> -
getSnsNftsForOwner——以反向数据返回已符号化域.getSnsNftsForOwner(connection: Connection, owner: PublicKey): Promise<{ domain: string; key: PublicKey; mint: PublicKey }[]> -
getSolDomainKeysForOwner——返回未过期、直接拥有钱包的顶级记录公钥.sol记录。 记录不包括在内.getSolDomainKeysForOwner(connection: Connection, wallet: PublicKey): Promise<PublicKey[]> -
getSolDomainsForOwner——返回未过期、直接拥有钱包的顶层.sol记录。 已返回domain值为 TLD- trimmed; 符号化域、 子域和错误的单个记录除外.getSolDomainsForOwner(connection: Connection, wallet: PublicKey): Promise<{ domain: string; key: PublicKey }[]> -
getSolNftsForOwner- 返回未过期的托肯-2022.sol区域。 结果包括TLD-trimmed名称,SRS记录密钥,和象征性薄荷.getSolNftsForOwner(connection: Connection, owner: PublicKey): Promise<{ domain: string; key: PublicKey; mint: PublicKey }[]> -
getAllSnsDomains——返回原始的顶级注册程序账户,其account.data切入32字节的登记所有者字段.getAllSnsDomains(connection: Connection): Promise<GetProgramAccountsResponse> -
getAllSolDomains——返回原始的顶级SRS程序账户,包括过期记录,其account.data切入32字节的SRS所有者字段。 拥有者字节可以代表钱包地址或Token-2022 mint.getAllSolDomains(connection: Connection): Promise<GetProgramAccountsResponse> -
getPrimaryDomain——返回主名账户密钥,无 TLD 倒取名,并 stale 状态.getPrimaryDomain(connection: Connection, owner: PublicKey): Promise<{ domain: PublicKey; reverse: string; stale: boolean }> -
getMultiplePrimaryDomains——按输入顺序返回无 TLD 主名; 缺少条目为undefined。 。 。 .getMultiplePrimaryDomains(connection: Connection, wallets: PublicKey[]): Promise<(string | undefined)[]> -
reverseLookup——返回一个没有 TLD 的倒置名称 .reverseLookup(connection: Connection, nameAccount: PublicKey, parent?: PublicKey): Promise<string> -
reverseLookupBatch——按输入顺序返回无 TLD 名称;缺少倒转记录为undefined。 。 。 .reverseLookupBatch(connection: Connection, nameAccounts: PublicKey[]): Promise<(string | undefined)[]>
高级 API
对于账户层面的整合,根导出还包括衍生物和原始名称注册帮助者,例如: getSnsDomainKeySync, (中文(简体) ), getSolDomainKeySync, (中文(简体) ), getReverseKeySync, (中文(简体) ), getReverseKeyFromDomainKey, (中文(简体) ), getHashedNameSync, (中文(简体) ), getNameAccountKeySync, (中文(简体) ), createNameRegistry, (中文(简体) ), updateNameRegistry, (中文(简体) ), deleteNameRegistry,以及 createReverse。 。 。 .
NFT帮助者和状态类包括域-薄荷/所有者/记录检索, NameRegistryState, (中文(简体) ), PrimaryDomain,和NFT国家出口. CustomBg, (中文(简体) ), getCustomBgKeys,以及 setBackground 支持已发布的自定义背景 。 这个 devnet export 提供了 devnet 特定绑定和常数。 低级教学班和原始状态解码器也出口用于专业集成.
遗产 Twitter注册API仍被出口用于高级相容性. 它们不属于所建议的域解析或登记路径.
证件和移徙
许可证
本项目可在 MIT 许可证。 。 。 .