@ar
为AR.IO网络的索拉纳-本土SDK. 提供类型
客户类别(ARIO, (中文(简体) ), ANT, (中文(简体) ), ANTRegistry),PDA助手,
以及索拉纳的AR.IO协议的代管原始人.
哥达马生成的指令构建器和账户解码器是
供应 @ar.io/solana-contracts。 。 。 .
目录
安装
要求数 node>=v18.0.0。 。 。 .
npm install @ar.io/sdk
或者说
yarn add @ar.io/sdk
快速启动
import { ARIO } from '@ar.io/sdk';
import { createSolanaRpc } from '@solana/kit';
const rpc = createSolanaRpc('https://api.mainnet-beta.solana.com');
const ario = ARIO.init({ rpc });
const gateways = await ario.getGateways();
写操作需要一个 @solana/kit 签名加一个 rpcSubscriptions
客户端(由工具包使用) sendAndConfirmTransaction:
import { ARIO } from '@ar.io/sdk';
import {
createSolanaRpc,
createSolanaRpcSubscriptions,
createKeyPairSignerFromBytes,
} from '@solana/kit';
import { readFileSync } from 'node:fs';
const rpc = createSolanaRpc('https://api.mainnet-beta.solana.com');
const rpcSubscriptions = createSolanaRpcSubscriptions(
'wss://api.mainnet-beta.solana.com',
);
const signer = await createKeyPairSignerFromBytes(
new Uint8Array(JSON.parse(readFileSync('keypair.json', 'utf8'))),
);
const ario = ARIO.init({ rpc, rpcSubscriptions, signer });
await ario.buyRecord({
name: 'foo',
type: 'lease',
years: 1,
processId: '<ANT mint pubkey>',
});
产出
{
"items": [
{
"gatewayAddress": "QGWqtJdLLgm2ehFWiiPzMaoFLD50CnGuzZIPEdoDRGQ",
"observerAddress": "IPdwa3Mb_9pDD8c2IaJx6aad51Ss-_TfStVwBuhtXMs",
"operatorStake": 250000000000,
"totalDelegatedStake": 0,
"settings": {
"allowDelegatedStaking": true,
"allowedDelegates": [],
"autoStake": false,
"delegateRewardShareRatio": 10,
"minDelegatedStake": 100000000,
"fqdn": "ar-io.dev",
"label": "ar.io Test",
"note": "Test Gateway operated by PDS for the ar.io ecosystem.",
"port": 443,
"properties": "raJgvbFU-YAnku-WsupIdbTsqqGLQiYpGzoqk9SCVgY",
"protocol": "https"
},
"startTimestamp": 1720720621424,
"endTimestamp": 0,
"stats": {
"passedConsecutiveEpochs": 30,
"failedConsecutiveEpochs": 0,
"totalEpochCount": 31,
"passedEpochCount": 30,
"failedEpochCount": 1,
"observedEpochCount": 30,
"prescribedEpochCount": 31
},
"status": "joined",
"weights": {
"stakeWeight": 5.02400000024,
"tenureWeight": 0.19444444444444,
"gatewayPerformanceRatio": 1,
"observerPerformanceRatio": 1,
"gatewayRewardRatioWeight": 1,
"observerRewardRatioWeight": 1,
"compositeWeight": 0.97688888893556,
"normalizedCompositeWeight": 0.19247316211083
}
}
],
"hasMore": true,
"nextCursor": "-4xgjroXENKYhTWqrBo57HQwvDL51mMdfsdsxJy6Y2Z_sA",
"totalItems": 316,
"limit": 100,
"sortBy": "startTimestamp",
"sortOrder": "desc"
}
使用量
SDK作为ES模块发布("type": "module"并且现在
与现代捆绑器相兼容,例如Webpack、Rollup、ESbuilding,以及
维特。 普通JS的消费者应迁移到无害环境管理(18+节点支持无害环境管理)
原生的). 参考 [示例] 目录查看如何使用 SDK
在各种环境中.
子路径导出
@ar.io/sdk——主条目.ARIO, (中文(简体) ),ANT, (中文(简体) ),ANTRegistry索拉纳语 客户类 PDA 帮助者 解剖者 代管原始人.@ar.io/sdk/solana- 主条目的别名(为一次发布而保留) 而消费者则从先前的子路径布局中迁移.
网页
[尖叫声] 捆绑的网络项目默认不提供多填充(Vite, (英文)ESBuild, Webpack, Rollup等. 根据你的组合,你 将需要多填充器
crypto, (中文(简体) ),process财务报告和审定财务报表buffer。参见 [示例/webpack]和[示例/vite]的例子.
import { ARIO } from '@ar.io/sdk';
import { createSolanaRpc } from '@solana/kit';
const ario = ARIO.init({
rpc: createSolanaRpc('https://api.mainnet-beta.solana.com'),
});
const gateways = await ario.getGateways();
浏览器捆绑
<script type="module">
// replace <version> with a release version
import { ARIO } from 'https://github.com/ar-io/ar-io-sdk/releases/download/v<version>/web.bundle.min.js';
import { createSolanaRpc } from 'https://esm.sh/@solana/kit@6';
const ario = ARIO.init({
rpc: createSolanaRpc('https://api.mainnet-beta.solana.com'),
});
const gateways = await ario.getGateways();
</script>
类型脚本
SDK飞船TypeScript型号与JS出品相并列. 类型是
从 ./lib/types/solana/index.d.ts 自动解析
为无害环境管理的消费者服务.
[注] 建议使用脚本 5.3+ (SDK 用途)
nodenext模块 决 定.js相对进口的扩展).
ARIO合同
常规
init({ rpc, rpcSubscriptions?, signer? })
创建只读或可写入的ARIO客户端的工厂功能.
提供 signer 加号 rpcSubscriptions 启用写法
(单位:千美元)joinNetwork, (中文(简体) ), delegateStake, (中文(简体) ), buyRecord(见A/C.5/49/70,附件)。 没有签名,
客户端只读.
import { ARIO } from '@ar.io/sdk';
import {
createSolanaRpc,
createSolanaRpcSubscriptions,
createKeyPairSignerFromBytes,
} from '@solana/kit';
const rpc = createSolanaRpc('https://api.mainnet-beta.solana.com');
// read-only client
const ario = ARIO.init({ rpc });
// read-write client (needs rpcSubscriptions for sendAndConfirm)
const rpcSubscriptions = createSolanaRpcSubscriptions(
'wss://api.mainnet-beta.solana.com',
);
const signer = await createKeyPairSignerFromBytes(/* 64-byte secret key */);
const arioWrite = ARIO.init({ rpc, rpcSubscriptions, signer });
getInfo()
获取ARIO进程的信息.
const ario = ARIO.init({ rpc });
const info = await ario.getInfo();
产出
{
"Name": "AR.IO",
"Ticker": "ARIO",
"Logo": "",
"Denomination": 6,
"Handlers": [],
"LastCreatedEpochIndex": 0,
"LastDistributedEpochIndex": 0,
"totalSupply": 1000000000000000,
"protocolBalance": 0,
"epochSettings": {
"durationMs": 86400000,
"prescribedNameCount": 25,
"maxObservers": 50
}
}
说明数字 :
Handlers, (中文(简体) ),LastCreatedEpochIndex,以及LastDistributedEpochIndex是索拉纳上的占位符(返回后与相容的字段形状) 消费者代码.totalSupply编号 :protocolBalance被现场读取 页:1ArioConfigPDA; 开发部;epochSettings现场直播EpochSettingsPDA (英语). 见src/solana/io-readable.ts准确的投影.
getTokenSupply()
收回全部的代币供应,返回mARIO. 供应总量包括:
total- 提供所有物品的总数量circulating- 供应总量减去锁住、取出、授权和计分locked- 协议中锁入的标志(已金库)withdrawn- 经营者和发包人从协议中取出的迹象delegated- 授予网关的标志staked- 网关操作员在协议中加注的标志protocolBalance- 记在协议金库里 这已包括在流通供应中.
const ario = ARIO.init({ rpc });
const supply = await ario.getTokenSupply();
产出
{
"total": 1000000000000000000,
"circulating": 998094653842520,
"locked": 0,
"withdrawn": 560563387278,
"delegated": 1750000000,
"staked": 1343032770199,
"protocolBalance": 46317263683761
}
getBalance({ address })
获取指定的钱包地址的余额.
const ario = ARIO.init({ rpc });
// the balance will be returned in mARIO as a value
const balance = await ario
.getBalance({
address: "QGWqtJdLLgm2ehFWiiPzMaoFLD50CnGuzZIPEdoDRGQ",
})
.then((balance: number) => new mARIOToken(balance).toARIO()); // convert it to ARIO for readability
产出
100000
getBalances({ cursor, limit, sortBy, sortOrder })
收回ARIO进程的余额 mARIO,并按规定的标准进行分类。 这个 cursor 用于 pagination 是上次请求中最后一个钱包地址 .
const ario = ARIO.init({ rpc });
const balances = await ario.getBalances({
cursor: "-4xgjroXENKYhTWqrBo57HQwvDL51mMdfsdsxJy6Y2Z_sA",
limit: 100,
sortBy: "balance",
sortOrder: "desc",
});
产出
{
"items": [
{
"address": "-4xgjroXENKYhTWqrBo57HQwvDL51mMvSxJy6Y2Z_sA",
"balance": 1000000
},
{
"address": "-7vXsQZQDk8TMDlpiSLy3CnLi5PDPlAaN2DaynORpck",
"balance": 1000000
}
// ...98 other balances
],
"hasMore": true,
"nextCursor": "-7vXsQZQDk8TMDlpiSLy3CnLi5PDPlAaN2DaynORpck",
"totalItems": 1789,
"sortBy": "balance",
"sortOrder": "desc"
}
transfer({ target, qty })
转账 mARIO 送交指定的 target 收件人地址 。 要求数 signer 将按 ARIO.init 签署交易.
注:要求 signer 将按 ARIO.init 签署交易.
const ario = ARIO.init({ rpc, rpcSubscriptions, signer });
const { id: txId } = await ario.transfer({
target: 'RecipientSolanaPubkeyBase58',
qty: new ARIOToken(1000).toMARIO(),
});
网络
SDK和你的组合说话 @solana/kit RPC 客户点
默认为主网-β。 devnet 或本地验证符, 覆盖
rPC URL和(在任何非主网集群)每个方案地址:
import { ARIO } from '@ar.io/sdk';
import { createSolanaRpc, address } from '@solana/kit';
const ario = ARIO.init({
rpc: createSolanaRpc('https://api.devnet.solana.com'),
coreProgramId: address('<ARIO_CORE_PROGRAM_ID>'),
garProgramId: address('<ARIO_GAR_PROGRAM_ID>'),
arnsProgramId: address('<ARIO_ARNS_PROGRAM_ID>'),
antProgramId: address('<ARIO_ANT_PROGRAM_ID>'),
});
本地网( urfpool) 源程序ID from
migration/localnet/out/localnet.env 输入 solana-ar-io 单相机.
断层
getVault({ address, vaultId })
通过指定的钱包地址和金库ID获取ARIO进程的锁定-平衡用户金库.
const ario = ARIO.init({ rpc });
const vault = await ario.getVault({
address: "QGWqtJdLLgm2ehFWiiPzMaoFLD50CnGuzZIPEdoDRGQ",
vaultId: "vaultIdOne",
});
产出
{
"balance": 1000000,
"startTimestamp": 123,
"endTimestamp": 4567
}
getVaults({ cursor, limit, sortBy, sortOrder })
检索ARIO进程的所有锁定-平衡用户金库,并按指定标准进行分解和排序. 这个 cursor 用于 pagination 是上次请求中最后一个钱包地址 .
const ario = ARIO.init({ rpc });
const vaults = await ario.getVaults({
cursor: "0",
limit: 100,
sortBy: "balance",
sortOrder: "desc",
});
产出
{
"items": [
{
"address": "QGWqtJdLLgm2ehFWiiPzMaoFLD50CnGuzZIPEdoDRGQ",
"vaultId": "vaultIdOne",
"balance": 1000000,
"startTimestamp": 123,
"endTimestamp": 4567
},
{
"address": "QGWqtJdLLgm2ehFWiiPzMaoFLD50CnGuzZIPEdoDRGQ",
"vaultId": "vaultIdTwo",
"balance": 1000000,
"startTimestamp": 123,
"endTimestamp": 4567
}
// ...98 other addresses with vaults
],
"hasMore": true,
"nextCursor": "QGWqtJdLLgm2ehFWiiPzMaoFLD50CnGuzZIPEdoDRGQ",
"totalItems": 1789,
"sortBy": "balance",
"sortOrder": "desc"
}
vaultedTransfer({ recipient, quantity, lockLengthMs, revokable })
转账 mARIO 送交指定的 recipient 地址并锁定指定的余额 lockLengthMs 毫秒长. 这个 revokable 旗下决定发送者是否能够撤销已保存的传输.
注:要求 signer 将按 ARIO.init 签署交易.
const ario = ARIO.init({ rpc, rpcSubscriptions, signer });
const { id: txId } = await ario.vaultedTransfer(
{
recipient: "-5dV7nk7waR8v4STuwPnTck1zFVkQqJh5K9q9Zik4Y5",
quantity: new ARIOToken(1000).toMARIO(),
lockLengthMs: 1000 * 60 * 60 * 24 * 365, // 1 year
revokable: true,
},
// optional additional tags
{ tags: [{ name: "App-Name", value: "My-Awesome-App" }] },
);
revokeVault({ recipient, vaultId })
撤销由收件人地址和金库身份的金库转移。 只有金库转移的发件人才能撤销.
注:要求 signer 将按 ARIO.init 签署交易.
const ario = ARIO.init({ rpc, rpcSubscriptions, signer });
const { id: txId } = await ario.revokeVault({
recipient: "-5dV7nk7waR8v4STuwPnTck1zFVkQqJh5K9q9Zik4Y5",
vaultId: "IPdwa3Mb_9pDD8c2IaJx6aad51Ss-_TfStVwBuhtXMs",
});
createVault({ lockLengthMs, quantity })
创建指定的金库 quantity 从签名者的余额中锁定它 lockLengthMs 毫秒长.
const ario = ARIO.init({ rpc, rpcSubscriptions, signer });
const { id: txId } = await ario.createVault({
lockLengthMs: 1000 * 60 * 60 * 24 * 365, // 1 year
quantity: new ARIOToken(1000).toMARIO(),
});
extendVault({ vaultId, extendLengthMs })
以指定方式将签名人金库的锁长度延长 extendLengthMs 毫秒长.
const ario = ARIO.init({ rpc, rpcSubscriptions, signer });
const { id: txId } = await ario.extendVault({
vaultId: "vaultIdOne",
extendLengthMs: 1000 * 60 * 60 * 24 * 365, // 1 year
});
increaseVault({ vaultId, quantity })
通过指定方式增加签名人金库的余额 quantity 马里奥.
const ario = ARIO.init({ rpc, rpcSubscriptions, signer });
const { id: txId } = await ario.increaseVault({
vaultId: "vaultIdOne",
quantity: new ARIOToken(1000).toMARIO(),
});
网关
getGateway({ address })
取取网关信息 取取钱包地址.
const ario = ARIO.init({ rpc });
const gateway = await ario.getGateway({
address: "-7vXsQZQDk8TMDlpiSLy3CnLi5PDPlAaN2DaynORpck",
});
产出
{
"observerAddress": "IPdwa3Mb_9pDD8c2IaJx6aad51Ss-_TfStVwBuhtXMs",
"operatorStake": 250000000000,
"totalDelegatedStake": 0,
"settings": {
"allowDelegatedStaking": true,
"allowedDelegates": [],
"autoStake": false,
"delegateRewardShareRatio": 10,
"minDelegatedStake": 100000000,
"fqdn": "ar-io.dev",
"label": "ar.io Test",
"note": "Test Gateway operated by PDS for the ar.io ecosystem.",
"port": 443,
"properties": "raJgvbFU-YAnku-WsupIdbTsqqGLQiYpGzoqk9SCVgY",
"protocol": "https"
},
"startTimestamp": 1720720620813,
"endTimestamp": 0,
"stats": {
"passedConsecutiveEpochs": 30,
"failedConsecutiveEpochs": 0,
"totalEpochCount": 31,
"passedEpochCount": 30,
"failedEpochCount": 1,
"observedEpochCount": 30,
"prescribedEpochCount": 31
},
"status": "joined",
"weights": {
"stakeWeight": 5.02400000024,
"tenureWeight": 0.19444444444444,
"gatewayPerformanceRatio": 1,
"observerPerformanceRatio": 1,
"gatewayRewardRatioWeight": 1,
"observerRewardRatioWeight": 1,
"compositeWeight": 0.97688888893556,
"normalizedCompositeWeight": 0.19247316211083
}
}
getGateways({ cursor, limit, sortBy, sortOrder })
检索ARIO进程的已注册网关,使用页码并按指定标准进行排序. 这个 cursor 用于 pagination 是上次请求中最后一个网关地址 .
const ario = ARIO.init({ rpc });
const gateways = await ario.getGateways({
limit: 100,
sortOrder: "desc",
sortBy: "operatorStake",
});
可用 sortBy 选项是网关对象上的任何密钥,例如. operatorStake, (中文(简体) ), start, (中文(简体) ), status, (中文(简体) ), settings.fqdn, (中文(简体) ), settings.label, (中文(简体) ), settings.note, (中文(简体) ), settings.port, (中文(简体) ), settings.protocol, (中文(简体) ), stats.failedConsecutiveEpochs, (中文(简体) ), stats.passedConsecutiveEpochs等 (中文(简体) ).
产出
{
"items": [
{
"gatewayAddress": "QGWqtJdLLgm2ehFWiiPzMaoFLD50CnGuzZIPEdoDRGQ",
"observerAddress": "IPdwa3Mb_9pDD8c2IaJx6aad51Ss-_TfStVwBuhtXMs",
"operatorStake": 250000000000,
"totalDelegatedStake": 0,
"settings": {
"allowDelegatedStaking": true,
"allowedDelegates": [],
"autoStake": false,
"delegateRewardShareRatio": 10,
"minDelegatedStake": 100000000,
"fqdn": "ar-io.dev",
"label": "ar.io Test",
"note": "Test Gateway operated by PDS for the ar.io ecosystem.",
"port": 443,
"properties": "raJgvbFU-YAnku-WsupIdbTsqqGLQiYpGzoqk9SCVgY",
"protocol": "https"
},
"startTimestamp": 1720720620813,
"endTimestamp": 0,
"stats": {
"passedConsecutiveEpochs": 30,
"failedConsecutiveEpochs": 0,
"totalEpochCount": 31,
"passedEpochCount": 30,
"failedEpochCount": 1,
"observedEpochCount": 30,
"prescribedEpochCount": 31
},
"status": "joined",
"weights": {
"stakeWeight": 5.02400000024,
"tenureWeight": 0.19444444444444,
"gatewayPerformanceRatio": 1,
"observerPerformanceRatio": 1,
"gatewayRewardRatioWeight": 1,
"observerRewardRatioWeight": 1,
"compositeWeight": 0.97688888893556,
"normalizedCompositeWeight": 0.19247316211083
}
}
],
"hasMore": true,
"nextCursor": "-4xgjroXENKYhTWqrBo57HQwvDL51mMdfsdsxJy6Y2Z_sA",
"totalItems": 316,
"limit": 100,
"sortBy": "operatorStake",
"sortOrder": "desc"
}
getGatewayDelegates({ address, cursor, limit, sortBy, sortOrder })
征用所有代表的特定网关,按规定标准进行分层分拣. 这个 cursor 用于 pagination 是上次请求中最后一个代表地址.
const ario = ARIO.init({ rpc });
const delegates = await ario.getGatewayDelegates({
address: "QGWqtJdLLgm2ehFWiiPzMaoFLD50CnGuzZIPEdoDRGQ",
limit: 3,
sortBy: "startTimestamp",
sortOrder: "desc",
});
产出
{
"nextCursor": "ScEtph9-vfY7lgqlUWwUwOmm99ySeZGQhOX0MFAyFEs",
"limit": 3,
"sortBy": "startTimestamp",
"totalItems": 32,
"sortOrder": "desc",
"hasMore": true,
"items": [
{
"delegatedStake": 600000000,
"address": "qD5VLaMYyIHlT6vH59TgYIs6g3EFlVjlPqljo6kqVxk",
"startTimestamp": 1732716956301
},
{
"delegatedStake": 508999038,
"address": "KG8TlcWk-8pvroCjiLD2J5zkG9rqC6yYaBuZNqHEyY4",
"startTimestamp": 1731828123742
},
{
"delegatedStake": 510926479,
"address": "ScEtph9-vfY7lgqlUWwUwOmm99ySeZGQhOX0MFAyFEs",
"startTimestamp": 1731689356040
}
]
}
joinNetwork(params)
通过其关联的钱包加入 ar.io 网络的网关 .
注:要求 signer 将按 ARIO.init 签署交易.
const ario = ARIO.init({ rpc, rpcSubscriptions, signer });
const { id: txId } = await ario.joinNetwork(
{
qty: new ARIOToken(10_000).toMARIO(), // minimum operator stake allowed
allowDelegatedStaking: true, // allows delegated staking
minDelegatedStake: new ARIOToken(100).toMARIO(), // minimum delegated stake allowed
delegateRewardShareRatio: 10, // percentage of rewards to share with delegates (e.g. 10%)
label: "john smith", // min 1, max 64 characters
note: "The example gateway", // max 256 characters
properties: "FH1aVetOoulPGqgYukj0VE0wIhDy90WiQoV3U2PeY44", // Arweave transaction ID containing additional properties of the Gateway
observerWallet: "0VE0wIhDy90WiQoV3U2PeY44FH1aVetOoulPGqgYukj", // wallet address of the observer, must match OBSERVER_WALLET on the observer
fqdn: "example.com", // fully qualified domain name - note: you must own the domain and set the OBSERVER_WALLET on your gateway to match `observerWallet`
port: 443, // port number
protocol: "https", // only 'https' is supported
},
// optional additional tags
{ tags: [{ name: "App-Name", value: "My-Awesome-App" }] },
);
leaveNetwork()
将网关设置为 leaving 在ar.io网络。 要求数 signer 将按 ARIO.init 签署交易。 网关操作员和代表的利害关系已妥善保管,休假后将归还。 该网关将在休假后从网络中移除.
注:要求 signer 将按 ARIO.init 签署交易.
const ario = ARIO.init({ rpc, rpcSubscriptions, signer });
const { id: txId } = await ario.leaveNetwork(
// optional additional tags
{ tags: [{ name: "App-Name", value: "My-Awesome-App" }] },
);
updateGatewaySettings({ ...settings })
写入呼叫者网关配置的新网关设置 .
注:要求 signer 将按 ARIO.init 签署交易.
const ario = ARIO.init({ rpc, rpcSubscriptions, signer });
const { id: txId } = await ario.updateGatewaySettings(
{
// any other settings you want to update
minDelegatedStake: new ARIOToken(100).toMARIO(),
},
// optional additional tags
{ tags: [{ name: "App-Name", value: "My-Awesome-App" }] },
);
updateOperationsAddress({ operationsAddress })
授权第二个地址来更新呼叫者的网关元数据(参见 updateGatewayMetadata)和花出网关的ArNS折扣. 拍摄、授权设置和操作地址本身仅限操作员使用。 把接线员的地址传过去 撤销代表团.
尚未迁移到计划1.2.0的网关无法持有操作地址;在这种情况下 migrate_gateway 自动添加到同一交易中.
注:只有索拉纳语,所以是开着的 SolanaARIOWriteable 而不是交叉后端 ARIOWrite 类型。 必须由网关操作员签名 .
import { SolanaARIOWriteable } from "@ar.io/sdk";
const ario = new SolanaARIOWriteable({ rpc, rpcSubscriptions, signer });
const { id: txId } = await ario.updateOperationsAddress({
operationsAddress: "DeLegateAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA",
});
updateGatewayMetadata({ gatewayAddress?, ...metadata })
更新网关 label, (中文(简体) ), fqdn, (中文(简体) ), port, (中文(简体) ), protocol, (中文(简体) ), properties 和(或) note。可以由网关操作员签名,也可以由其操作地址签名,在这种情况下,通过操作员为 gatewayAddress。操作地址只有在网关处于1.2.0计划时才能获得荣誉.
注:仅索拉纳语(SolanaARIOWriteable) (中文(简体) ).
// signed by the gateway's operations address
const ario = new SolanaARIOWriteable({ rpc, rpcSubscriptions, signer });
const { id: txId } = await ario.updateGatewayMetadata({
gatewayAddress: "GatewayAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA",
fqdn: "gateway.example.com",
port: 443,
});
当阅读网关时, operationsAddress 仅用于1.2.0或以后的网关;下面是程序忽略字段,只有操作员才能操作.
migrateGateway({ gatewayAddress }) 编号 : migrateGateways({ gatewayAddresses?, batchSize? })
Migrates Gateway 账户为 1.2.0 计划(ADR-030)。 无授权——签字人支付少量租金上调(每个网关32字节). migrateGateways 没有 gatewayAddresses 迁移仍然低于1.2.0的每个网关(见 getUnmigratedGatewayAddresses()),每笔交易默认为8起,并止于第一批失败的批次.
注:仅索拉纳语(SolanaARIOWriteable) (中文(简体) ).
const ario = new SolanaARIOWriteable({ rpc, rpcSubscriptions, signer });
const pending = await ario.getUnmigratedGatewayAddresses();
const { migrated, signatures } = await ario.migrateGateways();
transferEpochSettingsAuthority({ newAuthority })
双手 EpochSettings.authority ——时代管理指令的关键——到新地址,如多西格(ADR-0031). 必须由现任当局签署.
注:仅索拉纳语(SolanaARIOWriteable) (中文(简体) ).
const ario = new SolanaARIOWriteable({ rpc, rpcSubscriptions, signer });
const { id: txId } = await ario.transferEpochSettingsAuthority({
newAuthority: "MuLtisigAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA",
});
increaseDelegateStake({ target, qty })
增加目标网关上的呼叫者权益.
注:要求 signer 将按 ARIO.init 签署交易.
const ario = ARIO.init({ rpc, rpcSubscriptions, signer });
const { id: txId } = await ario.increaseDelegateStake(
{
target: "t4Xr0_J4Iurt7caNST02cMotaz2FIbWQ4Kbj616RHl3",
qty: new ARIOToken(100).toMARIO(),
},
// optional additional tags
{ tags: [{ name: "App-Name", value: "My-Awesome-App" }] },
);
decreaseDelegateStake({ target, qty, instant })
减少目标网关上的呼叫者赌注。 可以立即设定为 true。 。 。 .
注:要求 signer 将按 ARIO.init 签署交易.
const ario = ARIO.init({ rpc, rpcSubscriptions, signer });
const { id: txId } = await ario.decreaseDelegateStake(
{
target: "t4Xr0_J4Iurt7caNST02cMotaz2FIbWQ4Kbj616RHl3",
qty: new ARIOToken(100).toMARIO(),
},
{
tags: [{ name: "App-Name", value: "My-Awesome-App" }],
},
);
支付提前取出费,并立即取出.
const ario = ARIO.init({ rpc, rpcSubscriptions, signer });
const { id: txId } = await ario.decreaseDelegateStake({
target: "t4Xr0_J4Iurt7caNST02cMotaz2FIbWQ4Kbj616RHl3",
qty: new ARIOToken(100).toMARIO(),
instant: true, // Immediately withdraw this stake and pay the instant withdrawal fee
});
getDelegations({ address, cursor, limit, sortBy, sortOrder })
在所有网关取出所有活跃和被保险的花桩,用于特定地址,并按指定标准进行分类。 这个 cursor 用于 pagination 是上次请求的最后一个 missionId(简便的网关并开始解码的时间戳).
const ario = ARIO.init({ rpc });
const vaults = await ario.getDelegations({
address: "t4Xr0_J4Iurt7caNST02cMotaz2FIbWQ4Kbj616RHl3",
cursor: "QGWqtJdLLgm2ehFWiiPzMaoFLD50CnGuzZIPEdoDRGQ_123456789",
limit: 2,
sortBy: "startTimestamp",
sortOrder: "asc",
});
产出
{
"sortOrder": "asc",
"hasMore": true,
"totalItems": 95,
"limit": 2,
"sortBy": "startTimestamp",
"items": [
{
"type": "stake",
"startTimestamp": 1727815440632,
"gatewayAddress": "QGWqtJdLLgm2ehFWiiPzMaoFLD50CnGuzZIPEdoDRGQ",
"delegationId": "QGWqtJdLLgm2ehFWiiPzMaoFLD50CnGuzZIPEdoDRGQ_1727815440632",
"balance": 1383212512
},
{
"type": "vault",
"startTimestamp": 1730996691117,
"gatewayAddress": "QGWqtJdLLgm2ehFWiiPzMaoFLD50CnGuzZIPEdoDRGQ",
"delegationId": "QGWqtJdLLgm2ehFWiiPzMaoFLD50CnGuzZIPEdoDRGQ_1730996691117",
"vaultId": "_sGDS7X1hyLCVpfe40GWioH9BSOb7f0XWbhHBa1q4-g",
"balance": 50000000,
"endTimestamp": 1733588691117
}
],
"nextCursor": "QGWqtJdLLgm2ehFWiiPzMaoFLD50CnGuzZIPEdoDRGQ_1730996691117"
}
instantWithdrawal({ gatewayAddress, vaultId })
立即取出网关上现有的金库. 如果没有 gatewayAddress 提供签名人地址.
注:要求 signer 将按 ARIO.init 签署交易.
const ario = ARIO.init({ rpc, rpcSubscriptions, signer });
// removes a delegated vault from a gateway
const { id: txId } = await ario.instantWithdrawal(
{
// gateway address where delegate vault exists
gatewayAddress: "t4Xr0_J4Iurt7caNST02cMotaz2FIbWQ4Kbj616RHl3",
// delegated vault id to cancel
vaultId: "fDrr0_J4Iurt7caNST02cMotaz2FIbWQ4Kcj616RHl3",
},
// optional additional tags
{
tags: [{ name: "App-Name", value: "My-Awesome-App" }],
},
);
// removes an operator vault from a gateway
const { id: txId } = await ario.instantWithdrawal({
vaultId: "fDrr0_J4Iurt7caNST02cMotaz2FIbWQ4Kcj616RHl3",
});
cancelWithdrawal({ gatewayAddress, vaultId })
取消网关上已有的金库。 保险箱的木桩将归还给呼叫者。 若无 gatewayAddress 提供签名人地址.
注:要求 signer 将按 ARIO.init 签署交易.
const ario = ARIO.init({ rpc, rpcSubscriptions, signer });
// cancels a delegated vault from a gateway
const { id: txId } = await ario.cancelWithdrawal(
{
// gateway address where vault exists
gatewayAddress: "t4Xr0_J4Iurt7caNST02cMotaz2FIbWQ4Kbj616RHl3",
// vault id to cancel
vaultId: "fDrr0_J4Iurt7caNST02cMotaz2FIbWQ4Kcj616RHl3",
},
// optional additional tags
{ tags: [{ name: "App-Name", value: "My-Awesome-App" }] },
);
// cancels an operator vault from a gateway
const { id: txId } = await ario.cancelWithdrawal({
// operator vault id to cancel
vaultId: "fDrr0_J4Iurt7caNST02cMotaz2FIbWQ4Kcj616RHl3",
});
getAllowedDelegates({ address, cursor, limit, sortBy, sortOrder })
所有检索都允许代表获得具体地址。 这个 cursor 用于 pagination 是上次请求中最后一个地址.
const ario = ARIO.init({ rpc });
const allowedDelegates = await ario.getAllowedDelegates({
address: "QGWqtJdLLgm2ehFWiiPzMaoFLD50CnGuzZIPEdoDRGQ",
});
产出
{
"sortOrder": "desc",
"hasMore": false,
"totalItems": 4,
"limit": 100,
"items": [
"PZ5vIhHf8VY969TxBPQN-rYY9CNFP9ggNsMBqlWUzWM",
"N4h8M9A9hasa3tF47qQyNvcKjm4APBKuFs7vqUVm-SI",
"JcC4ZLUY76vmWha5y6RwKsFqYTrMZhbockl8iM9p5lQ",
"31LPFYoow2G7j-eSSsrIh8OlNaARZ84-80J-8ba68d8"
]
}
getGatewayVaults({ address, cursor, limit, sortBy, sortOrder })
检索所有网关上的所有金库,以获取特定地址,并按指定标准进行分类。 这个 cursor 用于 pagination 是上一个请求中最后一个 kullsId .
const ario = ARIO.init({ rpc });
const vaults = await ario.getGatewayVaults({
address: '"PZ5vIhHf8VY969TxBPQN-rYY9CNFP9ggNsMBqlWUzWM',
});
产出
{
"sortOrder": "desc",
"hasMore": false,
"totalItems": 1,
"limit": 100,
"sortBy": "endTimestamp",
"items": [
{
"cursorId": "PZ5vIhHf8VY969TxBPQN-rYY9CNFP9ggNsMBqlWUzWM_1728067635857",
"startTimestamp": 1728067635857,
"balance": 50000000000,
"vaultId": "PZ5vIhHf8VY969TxBPQN-rYY9CNFP9ggNsMBqlWUzWM",
"endTimestamp": 1735843635857
}
]
}
getAllGatewayVaults({ cursor, limit, sortBy, sortOrder })
在所有网关上收回所有金库,按规定标准进行分层和排序。 这个 cursor 用于 pagination 是上一个请求中最后一个 kullsId .
const ario = ARIO.init({ rpc });
const vaults = await ario.getAllGatewayVaults({
limit: 1,
sortBy: "endTimestamp",
sortOrder: "desc",
});
产出
{
"sortOrder": "desc",
"hasMore": true,
"totalItems": 95,
"limit": 1,
"sortBy": "endTimestamp",
"items": [
{
"cursorId": "PZ5vIhHf8VY969TxBPQN-rYY9CNFP9ggNsMBqlWUzWM_E-QVU3dta36Wia2uQw6tQLjQk7Qw5uN0Z6fUzsoqzUc",
"gatewayAddress": "PZ5vIhHf8VY969TxBPQN-rYY9CNFP9ggNsMBqlWUzWM",
"startTimestamp": 1728067635857,
"balance": 50000000000,
"vaultId": "E-QVU3dta36Wia2uQw6tQLjQk7Qw5uN0Z6fUzsoqzUc",
"endTimestamp": 1735843635857
}
],
"nextCursor": "PZ5vIhHf8VY969TxBPQN-rYY9CNFP9ggNsMBqlWUzWM_E-QVU3dta36Wia2uQw6tQLjQk7Qw5uN0Z6fUzsoqzUc"
}
getWithdrawals({ address, cursor, limit, sortBy, sortOrder })
归还所有未了的退款 address - 包括两个操作员-摄取的减少(isDelegate: false(a) 减少(isDelegate: true) (中文(简体) ). 撤回在下列情况下可以主张: Date.now() >= endTimestamp; 调用 claimWithdrawal({ withdrawalId: item.vaultId }) 以释出符相.
这是驱动“您有 X 的可要求提取” UIs 所读到的 , 而无需在钱包交互的每一个网关上扇出扇子 .
const ario = ARIO.init({ rpc, rpcSubscriptions, signer });
const withdrawals = await ario.getWithdrawals({
address: "9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin",
});
const claimable = withdrawals.items.filter(
(w) => Date.now() >= w.endTimestamp,
);
产出
{
"hasMore": false,
"totalItems": 2,
"limit": 100,
"items": [
{
"cursorId": "8CSdSjf7gXqQ5p1U2qfdwHzVw9sZRYHJpDpV87dnvb4d",
"vaultId": "0",
"gatewayAddress": "Bxz7Q2tWfqr9Q5T6cZjUnVxRk9CnHwShfgUaW5fY1Mvr",
"balance": 50000000000,
"startTimestamp": 1735843635857,
"endTimestamp": 1738435635857,
"isDelegate": true
},
{
"cursorId": "FmWUz4w7vSdLcz1nN8H1n2KkjJgrQQXR1n4kV3WqJ7Hf",
"vaultId": "1",
"gatewayAddress": "9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin",
"balance": 10000000000,
"startTimestamp": 1735843835857,
"endTimestamp": 1738435835857,
"isDelegate": false
}
]
}
increaseOperatorStake({ qty })
增加呼叫者操作员的利害关系。 必须使用注册为网关操作员的钱包执行 .
注:要求 signer 将按 ARIO.init 签署交易.
const ario = ARIO.init({ rpc, rpcSubscriptions, signer });
const { id: txId } = await ario.increaseOperatorStake(
{
qty: new ARIOToken(100).toMARIO(),
},
{
tags: [{ name: "App-Name", value: "My-Awesome-App" }],
},
);
decreaseOperatorStake({ qty })
减少呼叫者操作员的赌注。 必须使用注册为网关操作员的钱包执行 。 要求数 signer 将按 ARIO.init 签署交易.
注:要求 signer 将按 ARIO.init 签署交易.
const ario = ARIO.init({ rpc, rpcSubscriptions, signer });
const { id: txId } = await ario.decreaseOperatorStake(
{
qty: new ARIOToken(100).toMARIO(),
},
{
tags: [{ name: "App-Name", value: "My-Awesome-App" }],
},
);
redelegateStake({ target, source, stakeQty, vaultId })
将特定地址的利害关系重排到一个新的网关。 为了从现有的提款金库中重新除去,可以选择包含空格ID. 重新委托费根据收费标准及利害关系金额计算. 允许用户每7个纪元自由重排一次. 除了免费重新授权之外,每次额外的重新授权将增加10%的收费,上限为60%的重新授权费.
例如:如果1000马里奥重新授权,收费率为10%,那么收费为100马里奥。 导致900 mARIO被重新下放到新的网关,100 mARIO被扣除回协议余额.
const ario = ARIO.init({ rpc, rpcSubscriptions, signer });
const { id: txId } = await ario.redelegateStake({
target: "t4Xr0_J4Iurt7caNST02cMotaz2FIbWQ4Kbj616RHl3",
source: "HwFceQaMQnOBgKDpnFqCqgwKwEU5LBme1oXRuQOWSRA",
stakeQty: new ARIOToken(1000).toMARIO(),
vaultId: "fDrr0_J4Iurt7caNST02cMotaz2FIbWQ4Kcj616RHl3",
});
getRedelegationFee({ address })
收回收费标准作为重新删除特定地址的利害关系所需的百分比。 收费率从0%到60%不等,根据自上次重新收费以来重新授权的次数计算.
const ario = ARIO.init({ rpc });
const fee = await ario.getRedelegationFee({
address: "t4Xr0_J4Iurt7caNST02cMotaz2FIbWQ4Kbj616RHl3",
});
产出
{
"redelegationFeeRate": 10,
"feeResetTimestamp": 1730996691117
}
getAllDelegates({ cursor, limit, sortBy, sortOrder })
在所有网关上收回所有代表,按规定标准进行分层和分类。 这个 cursor 用于平面图是 cursorId 来源于代表地址和先前请求的网关地址。 (例如 address_gatewayAddress。 。 。 .
const ario = ARIO.init({ rpc });
const delegates = await ario.getAllDelegates({
limit: 2,
sortBy: "startTimestamp",
sortOrder: "desc",
});
产出
{
"sortOrder": "desc",
"hasMore": true,
"totalItems": 95,
"limit": 2,
"sortBy": "startTimestamp",
"items": [
{
"startTimestamp": 1734709397622,
"cursorId": "9jfM0uzGNc9Mkhjo1ixGoqM7ygSem9wx_EokiVgi0Bs_E-QVU3dta36Wia2uQw6tQLjQk7Qw5uN0Z6fUzsoqzUc",
"gatewayAddress": "E-QVU3dta36Wia2uQw6tQLjQk7Qw5uN0Z6fUzsoqzUc",
"address": "9jfM0uzGNc9Mkhjo1ixGoqM7ygSem9wx_EokiVgi0Bs",
"delegatedStake": 2521349108,
"vaultedStake": 0
},
{
"startTimestamp": 1734593229454,
"cursorId": "LtV0aSqgK3YI7c5FmfvZd-wG95TJ9sezj_a4syaLMS8_M0WP8KSzCvKpzC-HPF1WcddLgGaL9J4DGi76iMnhrN4",
"gatewayAddress": "M0WP8KSzCvKpzC-HPF1WcddLgGaL9J4DGi76iMnhrN4",
"address": "LtV0aSqgK3YI7c5FmfvZd-wG95TJ9sezj_a4syaLMS8",
"delegatedStake": 1685148110,
"vaultedStake": 10000000
}
],
"nextCursor": "PZ5vIhHf8VY969TxBPQN-rYY9CNFP9ggNsMBqlWUzWM_QGWqtJdLLgm2ehFWiiPzMaoFLD50CnGuzZIPEdoDRGQ"
}
ar.io 名称系统
resolveArNSName({ name })
将一个 ARNS 名称确定为存储在相应 ANT id 名称上的基础数据 ID .
解析基名
const ario = ARIO.init({ rpc });
const record = await ario.resolveArNSName({ name: "ardrive" });
产出
{
"name": "ardrive",
"processId": "bh9l1cy0aksiL_x9M359faGzM_yjralacHIUo8_nQXM",
"txId": "kvhEUsIY5bXe0Wu2-YUFz20O078uYFzmQIO-7brv8qw",
"type": "lease",
"ttlSeconds": 3600,
"undernameLimit": 100
}
解析下名
const ario = ARIO.init({ rpc });
const record = await ario.resolveArNSName({ name: "logo_ardrive" });
产出
{
"name": "ardrive",
"processId": "bh9l1cy0aksiL_x9M359faGzM_yjralacHIUo8_nQXM",
"txId": "kvhEUsIY5bXe0Wu2-YUFz20O078uYFzmQIO-7brv8qw",
"type": "lease",
"ttlSeconds": 3600,
"undernameLimit": 100
}
buyRecord({ name, type, years, processId, antState })
购买新的有指定名称、类型、处理Id和持续时间的ArNS记录.
注:要求 signer 将按 ARIO.init 签署交易.
参数 :
name- 说吧 所需经费: 要购买的 ANS 记录的名称type- 说吧 所需经费: 要购买的 ANS 记录类型processId- 说吧 选项: 现有ANT进程的过程 ID. 如果未提供,则使用所提供的新的ANT程序signer将产生, 并且将分配ArNS记录 用于这一过程.years- 说吧 选项: ArNS记录的年限. 未提供且type实值lease记录会租一年 未提供且type实值permabuy,记录将永久注册.referrer- 说吧 选项: 跟踪采购转介分析(例如:.my-app.com(中文(简体) )antState- 说吧 选项 (单位:千美元)只买索拉纳原子: ANT初始元数据+基础@目标在同一个交易中烤入新铸造的ANT,所以名称会立即解决您的内容而不是默认的AR. IO标志. 字段 :transactionId(单位:千美元)@目标——当targetProtocol实值1, (中文(简体) ),targetProtocol(单位:千美元)0= 默认,1= 森林小组/,ticker, (中文(简体) ),logo(43-Char Arweave TX id), (中文(简体) ),description(≤512个字符),keywords页:1. 当被忽略时processId提供 ——通过ANT可写入来设定现有ANT的元数据. 注意: TTL 无法被设定为 mint (initialize没有 TTL 字段),所以非默认 TTL 仍然需要后购setBaseNameRecord和非常长的description编号 :keywords设定可能超过交易大小限制——使交易保持在采购后路径上.
// Atomic buy that also points the name at your content in one transaction:
const record = await ario.buyRecord({
name: "ardrive",
type: "lease",
years: 1,
antState: {
transactionId: "432l1cy0aksiL_x9M359faGzM_yjralacHIUo8_nQXM", // base @ target
ticker: "ARDRIVE",
description: "Permanent, decentralized data storage.",
keywords: ["storage", "permaweb"],
},
});
const ario = ARIO.init({ rpc, rpcSubscriptions, signer });
const record = await ario.buyRecord(
{
name: "ardrive",
type: "lease",
years: 1,
processId: "bh9l1cy0aksiL_x9M359faGzM_yjralacHIUo8_nQXM", // optional: assign to existing ANT process
referrer: "my-app.com", // optional: track purchase referrals for analytics
},
{
// optional tags
tags: [{ name: "App-Name", value: "ArNS-App" }],
onSigningProgress: (step, event) => {
console.log(`Signing progress: ${step}`);
if (step === "spawning-ant") {
console.log("Spawning ant:", event);
}
if (step === "registering-ant") {
console.log("Registering ant:", event);
}
if (step === "verifying-state") {
console.log("Verifying state:", event);
}
if (step === "buying-name") {
console.log("Buying name:", event);
}
},
},
);
upgradeRecord({ name })
将现有租赁的ArNS记录升级为永久所有权。 记录必须目前为呼叫者所拥有并属于"租赁"类型.
注:要求 signer 将按 ARIO.init 签署交易.
const ario = ARIO.init({ rpc, rpcSubscriptions, signer });
const record = await ario.upgradeRecord(
{
name: "ardrive",
referrer: "my-app.com", // optional: track purchase referrals for analytics
},
{
// optional tags
tags: [{ name: "App-Name", value: "ArNS-App" }],
},
);
getArNSRecord({ name })
获取指定的 ARNS 名称的记录信息 .
const ario = ARIO.init({ rpc });
const record = await ario.getArNSRecord({ name: "ardrive" });
产出
{
"processId": "bh9l1cy0aksiL_x9M359faGzM_yjralacHIUo8_nQXM",
"startTimestamp": 1720720819969,
"endTimestamp": 1752256702026,
"type": "lease",
"undernameLimit": 100,
"purchasePrice": 75541282285
}
getArNSRecords({ cursor, limit, sortBy, sortOrder })
检索ARIO进程的所有已登记的ArNS记录,并按规定的标准进行分解和排序。 这个 cursor 用于 pagination 是上个请求中最后一个 ARNS 名称 .
const ario = ARIO.init({ rpc });
// get the newest 100 names
const records = await ario.getArNSRecords({
limit: 100,
sortBy: "startTimestamp",
sortOrder: "desc",
});
可用 sortBy 选项是记录对象上的任何密钥,例如. name, (中文(简体) ), processId, (中文(简体) ), endTimestamp, (中文(简体) ), startTimestamp, (中文(简体) ), type, (中文(简体) ), undernames。 。 。 .
产出
{
"items": [
{
"name": "ao",
"processId": "eNey-H9RB9uCdoJUvPULb35qhZVXZcEXv8xds4aHhkQ",
"purchasePrice": 75541282285,
"startTimestamp": 1720720621424,
"endTimestamp": 1752256702026,
"type": "permabuy",
"undernameLimit": 10
},
{
"name": "ardrive",
"processId": "bh9l1cy0aksiL_x9M359faGzM_yjralacHIUo8_nQXM",
"endTimestamp": 1720720819969,
"startTimestamp": 1720720620813,
"purchasePrice": 75541282285,
"type": "lease",
"undernameLimit": 100
},
{
"name": "arweave",
"processId": "bh9l1cy0aksiL_x9M359faGzM_yjralacHIUo8_nQXM",
"endTimestamp": 1720720819969,
"startTimestamp": 1720720620800,
"purchasePrice": 75541282285,
"type": "lease",
"undernameLimit": 100
},
{
"name": "ar-io",
"processId": "bh9l1cy0aksiL_x9M359faGzM_yjralacHIUo8_nQXM",
"endTimestamp": 1720720819969,
"startTimestamp": 1720720619000,
"purchasePrice": 75541282285,
"type": "lease",
"undernameLimit": 100
},
{
"name": "fwd",
"processId": "bh9l1cy0aksiL_x9M359faGzM_yjralacHIUo8_nQXM",
"endTimestamp": 1720720819969,
"startTimestamp": 1720720220811,
"purchasePrice": 75541282285,
"type": "lease",
"undernameLimit": 100
}
// ...95 other records
],
"hasMore": true,
"nextCursor": "fwdresearch",
"totalItems": 21740,
"sortBy": "startTimestamp",
"sortOrder": "desc"
}
getArNSRecordsForAddress({ address, cursor, limit, sortBy, sortOrder })
根据 ANTRegistry 访问控制列表,按指定标准分解和排序。 这个 cursor 用于 pagination 是上个请求中最后一个 ARNS 名称 .
const ario = ARIO.init({ rpc });
const records = await ario.getArNSRecordsForAddress({
address: "t4Xr0_J4Iurt7caNST02cMotaz2FIbWQ4Kbj616RHl3",
limit: 100,
sortBy: "startTimestamp",
sortOrder: "desc",
});
可用 sortBy 选项是记录对象上的任何密钥,例如. name, (中文(简体) ), processId, (中文(简体) ), endTimestamp, (中文(简体) ), startTimestamp, (中文(简体) ), type, (中文(简体) ), undernames。 。 。 .
产出
{
"limit": 1,
"totalItems": 31,
"hasMore": true,
"nextCursor": "ardrive",
"items": [
{
"startTimestamp": 1740009600000,
"name": "ardrive",
"endTimestamp": 1777328018367,
"type": "permabuy",
"purchasePrice": 0,
"undernameLimit": 100,
"processId": "hpF0HdijWlBLFePjWX6u_-Lg3Z2E_PrP_AoaXDVs0bA"
}
],
"sortOrder": "desc",
"sortBy": "startTimestamp"
}
increaseUndernameLimit({ name, qty })
将域的下名支持最多增加至10k. 域名默认最多支持10个下名.
注:要求 signer 将按 ARIO.init 签署交易.
const ario = ARIO.init({ rpc, rpcSubscriptions, signer });
const { id: txId } = await ario.increaseUndernameLimit(
{
name: "ar-io",
qty: 420,
referrer: "my-app.com", // optional: track purchase referrals for analytics
},
// optional additional tags
{ tags: [{ name: "App-Name", value: "My-Awesome-App" }] },
);
extendLease({ name, years })
延长已注册的ArNS域名的租约,视宽限期状况,延长1-5年. 永久注册域无法扩展 .
const ario = ARIO.init({ rpc, rpcSubscriptions, signer });
const { id: txId } = await ario.extendLease(
{
name: "ar-io",
years: 1,
referrer: "my-app.com", // optional: track purchase referrals for analytics
},
// optional additional tags
{ tags: [{ name: "App-Name", value: "My-Awesome-App" }] },
);
getTokenCost({ intent, ...args })
计算 mARIO 中的价来进行相关的交互, 例如“ Buy- Name” 交互, 其中的参数是该交互的特定参数 .
const price = await ario
.getTokenCost({
intent: "Buy-Name",
name: "ar-io",
type: "permabuy",
})
.then((p) => new mARIOToken(p).toARIO()); // convert to ARIO for readability
产出
1642.34
getCostDetails({ intent, fromAddress, fundFrom, ...args})
计算相关交互的扩展成本细节, 例如“ Buy- Name” 交互, 其中参数是该交互的特定参数 。 来自Address的地址 将收取互动, 和FundFrom是 资金从何处取出 balance, (中文(简体) ), stakes,或 any。 。 。 .
关于索拉纳,结果还包括: gasEstimate ——钱包总SOL(以灯塔为单位)需要执行意图:交易费(从最近的链上优先排序费中引用)外加流出产生的账户的免租金存款. 对于 Buy-Name 既包括交易(ANT 产卵+购买),也包括产卵资产/配给物和ANS记录的租金;首次没有ACL账户的买家也被引用ACL靴子租金(通过) fromAddress 因此,可以进行检查。 收费方面是一个保守的上行约束:写道从预发模拟中收紧了计算单元限制,因此登陆费通常较低.
网关运营商折扣(索拉纳). 采购Buy-Name, (中文(简体) ), Extend-Lease, (中文(简体) ), Increase-Undername-Limit, (中文(简体) ), Upgrade-Name当支付者是网关的运营商时, 或当网关迁移后, 网关的操作地址就会降低20%, 网关被连接, 运行至少180天, 并经过至少90%的时代。 初名费从不折价. 引文和购买方法buyRecord, (中文(简体) ), buyReturnedName, (中文(简体) ), extendLease, (中文(简体) ), increaseUndernameLimit, (中文(简体) ), upgradeRecord)适用同一条规则:默认情况下,他们使用付款人自己的网关,只有在它符合条件时才会增加折扣(程序拒绝其折扣网关不合格的购买). 网关上的操作地址名称 discountGatewayAddress (其运营商地址); 命名一个不符合条件的网关是错误 。 CLI: 爱丽丝 --discount-gateway-address。 。 。 .
const costDetails = await ario.getCostDetails({
intent: "Buy-Name",
fromAddress: "t4Xr0_J4Iurt7caNST02cMotaz2FIbWQ4Kbj616RHl3",
fundFrom: "stakes",
name: "ar-io",
type: "permabuy",
});
产出
{
"tokenCost": 1907401818,
"discounts": [
{
"name": "Gateway Operator",
"discountTotal": 476850455,
"multiplier": 0.8
}
],
"gasEstimate": {
"totalLamports": 14679680,
"feeLamports": 23000,
"baseFeeLamports": 15000,
"priorityFeeLamports": 8000,
"rentLamports": 14656680,
"rentReclaimedLamports": 0,
"priorityFeeMicroLamports": 10000,
"computeUnitLimit": 400000,
"signatureCount": 3,
"transactionCount": 2
}
}
getDemandFactor()
检索网络目前的需要系数。 需求因子是根据目前的网络需要,对ANS交互成本采用的乘数.
const ario = ARIO.init({ rpc });
const demandFactor = await ario.getDemandFactor();
产出
1.05256
getArNSReturnedNames({ cursor, limit, sortBy, sortOrder })
获取 ARIO 进程的所有活动返回名称,按照指定标准进行分解和排序。 这个 cursor 用于 pagination 是上次请求中最后返回的名称.
const ario = ARIO.init({ rpc });
const returnedNames = await ario.getArNSReturnedNames({
limit: 100,
sortBy: "endTimestamp",
sortOrder: "asc", // return the returned names ending soonest first
});
产出
{
"items": [
{
"name": "permalink",
"startTimestamp": 1729775641349,
"endTimestamp": 1730985241349,
"initiator": "GaQrvEMKBpkjofgnBi_B3IgIDmY_XYelVLB6GcRGrHc",
"premiumMultiplier": 50
}
],
"hasMore": false,
"totalItems": 1,
"limit": 100,
"sortBy": "endTimestamp",
"sortOrder": "asc"
}
getArNSReturnedName({ name })
为指定的返回名称获取返回的名称数据.
const ario = ARIO.init({ rpc });
const returnedName = await ario.getArNSReturnedName({ name: "permalink" });
产出
{
"name": "permalink",
"startTimestamp": 1729775641349,
"endTimestamp": 1730985241349,
"initiator": "GaQrvEMKBpkjofgnBi_B3IgIDmY_XYelVLB6GcRGrHc",
"premiumMultiplier": 50
}
埃波希斯语Name
getCurrentEpoch()
返回当前时代数据.
const ario = ARIO.init({ rpc });
const epoch = await ario.getCurrentEpoch();
产出
{
"epochIndex": 0,
"startHeight": 0,
"startTimestamp": 1720720621424,
"endTimestamp": 1752256702026,
"distributionTimestamp": 1752256702026,
"observations": {
"failureSummaries": {
"-Tk2DDk8k4zkwtppp_XFKKI5oUgh6IEHygAoN7mD-w8": [
"Ie2wEEUDKoU26c7IuckHNn3vMFdNQnMvfPBrFzAb3NA"
]
},
"reports": {
"IPdwa3Mb_9pDD8c2IaJx6aad51Ss-_TfStVwBuhtXMs": "B6UUjKWjjEWDBvDSMXWNmymfwvgR9EN27z5FTkEVlX4"
}
},
"prescribedNames": ["ardrive", "ar-io", "arweave", "fwd", "ao"],
"prescribedObservers": [
{
"gatewayAddress": "2Fk8lCmDegPg6jjprl57-UCpKmNgYiKwyhkU4vMNDnE",
"observerAddress": "2Fk8lCmDegPg6jjprl57-UCpKmNgYiKwyhkU4vMNDnE",
"stake": 10000000000,
"startTimestamp": 1720720621424,
"stakeWeight": 1,
"tenureWeight": 0.4494598765432099,
"gatewayPerformanceRatio": 1,
"observerPerformanceRatio": 1,
"gatewayRewardRatioWeight": 1,
"observerRewardRatioWeight": 1,
"compositeWeight": 0.4494598765432099,
"normalizedCompositeWeight": 0.002057032496835938
}
],
"distributions": {
"totalEligibleGateways": 1,
"totalEligibleRewards": 100000000,
"totalEligibleObserverReward": 100000000,
"totalEligibleGatewayReward": 100000000
},
"arnsStats": {
"totalReturnedNames": 0,
"totalActiveNames": 0,
"totalGracePeriodNames": 0,
"totalReservedNames": 0
}
}
getEpoch({ epochIndex })
返回指定块高度的时代数据。 如果没有提供时代索引,则使用当前时代.
const ario = ARIO.init({ rpc });
const epoch = await ario.getEpoch({ epochIndex: 0 });
产出
{
"epochIndex": 0,
"startHeight": 0,
"startTimestamp": 1720720620813,
"endTimestamp": 1752256702026,
"distributionTimestamp": 1752256702026,
"observations": {
"failureSummaries": {
"-Tk2DDk8k4zkwtppp_XFKKI5oUgh6IEHygAoN7mD-w8": [
"Ie2wEEUDKoU26c7IuckHNn3vMFdNQnMvfPBrFzAb3NA"
]
},
"reports": {
"IPdwa3Mb_9pDD8c2IaJx6aad51Ss-_TfStVwBuhtXMs": "B6UUjKWjjEWDBvDSMXWNmymfwvgR9EN27z5FTkEVlX4"
}
},
"prescribedNames": ["ardrive", "ar-io", "arweave", "fwd", "ao"],
"prescribedObservers": [
{
"gatewayAddress": "2Fk8lCmDegPg6jjprl57-UCpKmNgYiKwyhkU4vMNDnE",
"observerAddress": "2Fk8lCmDegPg6jjprl57-UCpKmNgYiKwyhkU4vMNDnE",
"stake": 10000000000,
"startTimestamp": 1720720620813,
"stakeWeight": 1,
"tenureWeight": 0.4494598765432099,
"gatewayPerformanceRatio": 1,
"observerPerformanceRatio": 1,
"gatewayRewardRatioWeight": 1,
"observerRewardRatioWeight": 1,
"compositeWeight": 0.4494598765432099,
"normalizedCompositeWeight": 0.002057032496835938
}
],
"distributions": {
"totalEligibleGateways": 1,
"totalEligibleRewards": 100000000,
"totalEligibleObserverReward": 100000000,
"totalEligibleGatewayReward": 100000000
},
"arnsStats": {
"totalReturnedNames": 0,
"totalActiveNames": 0,
"totalGracePeriodNames": 0,
"totalReservedNames": 0
}
}
`获得资格奖({ opochIndex }),{光标、限制、排序By、排序命令})
返回指定块高的合格时代奖。 如果没有提供时代索引,则使用当前时代.
const ario = ARIO.init({ rpc });
const rewards = await ario.getEligibleEpochRewards({ epochIndex: 0 });
产出
{
"sortOrder": "desc",
"hasMore": true,
"totalItems": 37,
"limit": 1,
"sortBy": "cursorId",
"items": [
{
"cursorId": "xN_aVln30LmoCffwmk5_kRkcyQZyZWy1o_TNtM_CTm0_xN_aVln30LmoCffwmk5_kRkcyQZyZWy1o_TNtM_CTm0",
"recipient": "xN_aVln30LmoCffwmk5_kRkcyQZyZWy1o_TNtM_CTm0",
"gatewayAddress": "xN_aVln30LmoCffwmk5_kRkcyQZyZWy1o_TNtM_CTm0",
"eligibleReward": 2627618704,
"type": "operatorReward"
}
],
"nextCursor": "xN_aVln30LmoCffwmk5_kRkcyQZyZWy1o_TNtM_CTm0_xN_aVln30LmoCffwmk5_kRkcyQZyZWy1o_TNtM_CTm0"
}
getObservations({ epochIndex })
返回有时代索引的观测列表。 如果没有提供时代索引,则使用当前时代.
const ario = ARIO.init({ rpc });
const observations = await ario.getObservations();
产出
{
"failureSummaries": {
"-Tk2DDk8k4zkwtppp_XFKKI5oUgh6IEHygAoN7mD-w8": [
"Ie2wEEUDKoU26c7IuckHNn3vMFdNQnMvfPBrFzAb3NA"
]
},
"reports": {
"IPdwa3Mb_9pDD8c2IaJx6aad51Ss-_TfStVwBuhtXMs": "B6UUjKWjjEWDBvDSMXWNmymfwvgR9EN27z5FTkEVlX4",
"Ie2wEEUDKoU26c7IuckHNn3vMFdNQnMvfPBrFzAb3NA": "7tKsiQ2fxv0D8ZVN_QEv29fZ8hwFIgHoEDrpeEG0DIs",
"osZP4D9cqeDvbVFBaEfjIxwc1QLIvRxUBRAxDIX9je8": "aatgznEvC_UPcxp1v0uw_RqydhIfKm4wtt1KCpONBB0",
"qZ90I67XG68BYIAFVNfm9PUdM7v1XtFTn7u-EOZFAtk": "Bd8SmFK9-ktJRmwIungS8ur6JM-JtpxrvMtjt5JkB1M"
}
}
getDistributions({ epochIndex })
返回当前奖励分发信息。 如果没有提供时代索引,则使用当前时代.
const ario = ARIO.init({ rpc });
const distributions = await ario.getDistributions({ epochIndex: 0 });
产出
{
"totalEligibleGateways": 1,
"totalEligibleRewards": 100000000,
"totalEligibleObserverReward": 100000000,
"totalEligibleGatewayReward": 100000000
}
saveObservations({ reportTxId, failedGateways })
保存当前时代的观测结果。 要求数 signer 将按 ARIO.init 签署交易.
注:要求 signer 将按 ARIO.init 签署交易.
const ario = ARIO.init({ rpc, rpcSubscriptions, signer });
const { id: txId } = await ario.saveObservations(
{
reportTxId: "fDrr0_J4Iurt7caNST02cMotaz2FIbWQ4Kcj616RHl3",
failedGateways: ["t4Xr0_J4Iurt7caNST02cMotaz2FIbWQ4Kbj616RHl3"],
},
{
tags: [{ name: "App-Name", value: "My-Awesome-App" }],
},
);
getPrescribedObservers({ epochIndex })
获取ARIO进程的指定观察员. 要获取上一个时代设置的指定观察员 epochIndex 以至理想的时代索引.
const ario = ARIO.init({ rpc });
const observers = await ario.getPrescribedObservers({ epochIndex: 0 });
产出
[
{
"gatewayAddress": "BpQlyhREz4lNGS-y3rSS1WxADfxPpAuing9Lgfdrj2U",
"observerAddress": "2Fk8lCmDegPg6jjprl57-UCpKmNgYiKwyhkU4vMNDnE",
"stake": 10000000000,
"startTimestamp": 1720720620813,
"stakeWeight": 1,
"tenureWeight": 0.41453703703703704,
"gatewayPerformanceRatio": 1,
"observerPerformanceRatio": 1,
"gatewayRewardRatioWeight": 1,
"observerRewardRatioWeight": 1,
"compositeWeight": 0.41453703703703704,
"normalizedCompositeWeight": 0.0018972019546783507
}
]
crankEpochStep(options?)
高级的,无授权的时代曲柄。 通过 一个 每个呼叫的步数 并返回它所采取的动作 —— 运行在循环上( 这就是 独立起跑器和观察式起跑器 它拥有整个 顺序,所以你不会 协调个人指示自己:
create → tally → prescribe → distribute → close - 关闭一个时代的
先观察PDAclose_observation这样 close_epoch 不回头..
加上无权限维护的闲置尾巴 : compound 代表奖励,
update_demand_factor,以及 prune_returned_names。近路径是
非婚生: 清理失败永远不会阻碍下一个时代的创建.
const ario = ARIO.init({ rpc, rpcSubscriptions, signer });
// one step
const result = await ario.crankEpochStep();
// → { action, epochIndex?, txId?, progress? }
// action ∈ create | tally | prescribe | distribute | close
// | close_observation | compound | update_demand_factor
// | prune_returned_names | idle
// or drive it on an interval
setInterval(async () => {
const r = await ario.crankEpochStep();
if (r.action !== 'idle') console.log(r.action, r.epochIndex, r.txId);
}, 60_000);
所有选项都是可选的 : batchSize, (中文(简体) ), enableClose, (中文(简体) ), epochRetention, (中文(简体) ),
enableCompound, (中文(简体) ), compoundMinPendingRewards, (中文(简体) ), enableDemandFactorRoll, (中文(简体) ),
enablePrune, (中文(简体) ), pruneBatchSize, (中文(简体) ), nameRegistryAccount。 。 。 .
主要名称
getPrimaryNames({ cursor, limit, sortBy, sortOrder })
检索所有主要名称并按指定标准进行排序。 这个 cursor 用于 pagination 是上一个请求的姓氏 .
const ario = ARIO.init({ rpc });
const names = await ario.getPrimaryNames({
cursor: "ao", // this is the last name from the previous request
limit: 1,
sortBy: "startTimestamp",
sortOrder: "desc",
});
产出
{
"sortOrder": "desc",
"hasMore": true,
"totalItems": 100,
"limit": 1,
"sortBy": "startTimestamp",
"nextCursor": "arns",
"items": [
{
"name": "arns",
"owner": "HwFceQaMQnOBgKDpnFqCqgwKwEU5LBme1oXRuQOWSRA",
"processId": "bh9l1cy0aksiL_x9M359faGzM_yjralacHIUo8_nQXM",
"startTimestamp": 1719356032297
}
]
}
getPrimaryName({ name, address })
获取给定名称或地址的主名.
const ario = ARIO.init({ rpc });
const name = await ario.g