n8n-nodes-bittensor 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +46 -0
- package/README.md +329 -0
- package/dist/credentials/BittensorApi.credentials.d.ts +8 -0
- package/dist/credentials/BittensorApi.credentials.js +75 -0
- package/dist/credentials/BittensorApi.credentials.js.map +1 -0
- package/dist/credentials/BittensorNetwork.credentials.d.ts +8 -0
- package/dist/credentials/BittensorNetwork.credentials.js +117 -0
- package/dist/credentials/BittensorNetwork.credentials.js.map +1 -0
- package/dist/credentials/SubnetCredentials.credentials.d.ts +8 -0
- package/dist/credentials/SubnetCredentials.credentials.js +81 -0
- package/dist/credentials/SubnetCredentials.credentials.js.map +1 -0
- package/dist/nodes/Bittensor/Bittensor.node.d.ts +5 -0
- package/dist/nodes/Bittensor/Bittensor.node.js +938 -0
- package/dist/nodes/Bittensor/Bittensor.node.js.map +1 -0
- package/dist/nodes/Bittensor/bittensor.svg +4 -0
- package/dist/nodes/Bittensor/constants/hyperparameters.d.ts +23 -0
- package/dist/nodes/Bittensor/constants/hyperparameters.js +127 -0
- package/dist/nodes/Bittensor/constants/hyperparameters.js.map +1 -0
- package/dist/nodes/Bittensor/constants/networks.d.ts +31 -0
- package/dist/nodes/Bittensor/constants/networks.js +54 -0
- package/dist/nodes/Bittensor/constants/networks.js.map +1 -0
- package/dist/nodes/Bittensor/constants/pallets.d.ts +73 -0
- package/dist/nodes/Bittensor/constants/pallets.js +99 -0
- package/dist/nodes/Bittensor/constants/pallets.js.map +1 -0
- package/dist/nodes/Bittensor/constants/subnets.d.ts +25 -0
- package/dist/nodes/Bittensor/constants/subnets.js +55 -0
- package/dist/nodes/Bittensor/constants/subnets.js.map +1 -0
- package/dist/nodes/Bittensor/transport/metagraphSync.d.ts +63 -0
- package/dist/nodes/Bittensor/transport/metagraphSync.js +153 -0
- package/dist/nodes/Bittensor/transport/metagraphSync.js.map +1 -0
- package/dist/nodes/Bittensor/transport/queryClient.d.ts +93 -0
- package/dist/nodes/Bittensor/transport/queryClient.js +144 -0
- package/dist/nodes/Bittensor/transport/queryClient.js.map +1 -0
- package/dist/nodes/Bittensor/transport/subtensorClient.d.ts +138 -0
- package/dist/nodes/Bittensor/transport/subtensorClient.js +414 -0
- package/dist/nodes/Bittensor/transport/subtensorClient.js.map +1 -0
- package/dist/nodes/Bittensor/transport/taostatsApi.d.ts +133 -0
- package/dist/nodes/Bittensor/transport/taostatsApi.js +139 -0
- package/dist/nodes/Bittensor/transport/taostatsApi.js.map +1 -0
- package/dist/nodes/Bittensor/utils/addressUtils.d.ts +25 -0
- package/dist/nodes/Bittensor/utils/addressUtils.js +70 -0
- package/dist/nodes/Bittensor/utils/addressUtils.js.map +1 -0
- package/dist/nodes/Bittensor/utils/metagraphUtils.d.ts +103 -0
- package/dist/nodes/Bittensor/utils/metagraphUtils.js +113 -0
- package/dist/nodes/Bittensor/utils/metagraphUtils.js.map +1 -0
- package/dist/nodes/Bittensor/utils/unitConverter.d.ts +48 -0
- package/dist/nodes/Bittensor/utils/unitConverter.js +109 -0
- package/dist/nodes/Bittensor/utils/unitConverter.js.map +1 -0
- package/dist/nodes/Bittensor/utils/weightUtils.d.ts +49 -0
- package/dist/nodes/Bittensor/utils/weightUtils.js +90 -0
- package/dist/nodes/Bittensor/utils/weightUtils.js.map +1 -0
- package/package.json +87 -0
|
@@ -0,0 +1,153 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/*
|
|
3
|
+
* Copyright (c) Velocity BPA, LLC
|
|
4
|
+
* Licensed under the Business Source License 1.1
|
|
5
|
+
* Commercial use requires a separate commercial license.
|
|
6
|
+
* See LICENSE file for details.
|
|
7
|
+
*/
|
|
8
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
+
exports.MetagraphSync = void 0;
|
|
10
|
+
exports.createMetagraphSync = createMetagraphSync;
|
|
11
|
+
exports.syncMetagraph = syncMetagraph;
|
|
12
|
+
const CACHE_TTL = 60000; // 1 minute
|
|
13
|
+
/**
|
|
14
|
+
* Metagraph Sync Class
|
|
15
|
+
*/
|
|
16
|
+
class MetagraphSync {
|
|
17
|
+
constructor(client) {
|
|
18
|
+
this.cache = new Map();
|
|
19
|
+
this.client = client;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Sync metagraph from chain
|
|
23
|
+
*/
|
|
24
|
+
async sync(options) {
|
|
25
|
+
const { netuid } = options;
|
|
26
|
+
// Note: lite and includeAxons options reserved for future optimization
|
|
27
|
+
// Check cache
|
|
28
|
+
const cached = this.cache.get(netuid);
|
|
29
|
+
if (cached && Date.now() - cached.timestamp < CACHE_TTL) {
|
|
30
|
+
return cached.metagraph;
|
|
31
|
+
}
|
|
32
|
+
// Get basic subnet info
|
|
33
|
+
const subnetInfo = await this.client.getSubnetInfo(netuid);
|
|
34
|
+
const n = subnetInfo.n;
|
|
35
|
+
const block = await this.client.getBlockNumber();
|
|
36
|
+
// Initialize arrays
|
|
37
|
+
const neurons = [];
|
|
38
|
+
// Fetch neuron data
|
|
39
|
+
for (let uid = 0; uid < n; uid++) {
|
|
40
|
+
try {
|
|
41
|
+
const neuronData = await this.client.getNeuronInfo(netuid, uid);
|
|
42
|
+
const neuron = {
|
|
43
|
+
uid,
|
|
44
|
+
hotkey: neuronData.hotkey,
|
|
45
|
+
coldkey: '',
|
|
46
|
+
stake: BigInt(neuronData.stake),
|
|
47
|
+
stakeTao: Number(neuronData.stake) / 1e9,
|
|
48
|
+
rank: neuronData.rank / 65535,
|
|
49
|
+
trust: neuronData.trust / 65535,
|
|
50
|
+
consensus: neuronData.consensus / 65535,
|
|
51
|
+
incentive: neuronData.incentive / 65535,
|
|
52
|
+
dividends: neuronData.dividends / 65535,
|
|
53
|
+
emission: BigInt(neuronData.emission),
|
|
54
|
+
emissionTao: Number(neuronData.emission) / 1e9,
|
|
55
|
+
validatorTrust: neuronData.validatorTrust / 65535,
|
|
56
|
+
validatorPermit: neuronData.validatorPermit,
|
|
57
|
+
active: neuronData.active,
|
|
58
|
+
lastUpdate: 0,
|
|
59
|
+
};
|
|
60
|
+
neurons.push(neuron);
|
|
61
|
+
}
|
|
62
|
+
catch {
|
|
63
|
+
// Skip neurons that fail to load
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
const metagraph = {
|
|
67
|
+
netuid,
|
|
68
|
+
n,
|
|
69
|
+
block,
|
|
70
|
+
neurons,
|
|
71
|
+
};
|
|
72
|
+
// Cache result
|
|
73
|
+
this.cache.set(netuid, {
|
|
74
|
+
metagraph,
|
|
75
|
+
timestamp: Date.now(),
|
|
76
|
+
block,
|
|
77
|
+
});
|
|
78
|
+
return metagraph;
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Sync lite metagraph (UIDs and hotkeys only)
|
|
82
|
+
*/
|
|
83
|
+
async syncLite(netuid) {
|
|
84
|
+
const subnetInfo = await this.client.getSubnetInfo(netuid);
|
|
85
|
+
const n = subnetInfo.n;
|
|
86
|
+
const uids = [];
|
|
87
|
+
const hotkeys = [];
|
|
88
|
+
for (let uid = 0; uid < n; uid++) {
|
|
89
|
+
try {
|
|
90
|
+
const neuronData = await this.client.getNeuronInfo(netuid, uid);
|
|
91
|
+
uids.push(uid);
|
|
92
|
+
hotkeys.push(neuronData.hotkey);
|
|
93
|
+
}
|
|
94
|
+
catch {
|
|
95
|
+
// Skip
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
return { uids, hotkeys };
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* Get cached metagraph
|
|
102
|
+
*/
|
|
103
|
+
getCached(netuid) {
|
|
104
|
+
const cached = this.cache.get(netuid);
|
|
105
|
+
if (cached && Date.now() - cached.timestamp < CACHE_TTL) {
|
|
106
|
+
return cached.metagraph;
|
|
107
|
+
}
|
|
108
|
+
return undefined;
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* Clear cache
|
|
112
|
+
*/
|
|
113
|
+
clearCache(netuid) {
|
|
114
|
+
if (netuid !== undefined) {
|
|
115
|
+
this.cache.delete(netuid);
|
|
116
|
+
}
|
|
117
|
+
else {
|
|
118
|
+
this.cache.clear();
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* Get cache info
|
|
123
|
+
*/
|
|
124
|
+
getCacheInfo() {
|
|
125
|
+
const now = Date.now();
|
|
126
|
+
return Array.from(this.cache.entries()).map(([netuid, entry]) => ({
|
|
127
|
+
netuid,
|
|
128
|
+
age: now - entry.timestamp,
|
|
129
|
+
block: entry.block,
|
|
130
|
+
}));
|
|
131
|
+
}
|
|
132
|
+
/**
|
|
133
|
+
* Set cache TTL (for testing)
|
|
134
|
+
*/
|
|
135
|
+
setCacheTTL(_ttl) {
|
|
136
|
+
// This would require a class variable, simplified here
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
exports.MetagraphSync = MetagraphSync;
|
|
140
|
+
/**
|
|
141
|
+
* Create metagraph sync helper
|
|
142
|
+
*/
|
|
143
|
+
function createMetagraphSync(client) {
|
|
144
|
+
return new MetagraphSync(client);
|
|
145
|
+
}
|
|
146
|
+
/**
|
|
147
|
+
* Quick sync function
|
|
148
|
+
*/
|
|
149
|
+
async function syncMetagraph(client, netuid, lite = false) {
|
|
150
|
+
const sync = new MetagraphSync(client);
|
|
151
|
+
return sync.sync({ netuid, lite });
|
|
152
|
+
}
|
|
153
|
+
//# sourceMappingURL=metagraphSync.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"metagraphSync.js","sourceRoot":"","sources":["../../../../nodes/Bittensor/transport/metagraphSync.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
import { AxonInfo } from '../utils/metagraphUtils';
|
|
2
|
+
/**
|
|
3
|
+
* Query request options
|
|
4
|
+
*/
|
|
5
|
+
export interface QueryOptions {
|
|
6
|
+
timeout?: number;
|
|
7
|
+
retries?: number;
|
|
8
|
+
retryDelay?: number;
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Query response
|
|
12
|
+
*/
|
|
13
|
+
export interface QueryResponse<T = unknown> {
|
|
14
|
+
success: boolean;
|
|
15
|
+
data?: T;
|
|
16
|
+
error?: string;
|
|
17
|
+
latency?: number;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Text generation request
|
|
21
|
+
*/
|
|
22
|
+
export interface TextGenerationRequest {
|
|
23
|
+
prompt: string;
|
|
24
|
+
maxTokens?: number;
|
|
25
|
+
temperature?: number;
|
|
26
|
+
topP?: number;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Image generation request
|
|
30
|
+
*/
|
|
31
|
+
export interface ImageGenerationRequest {
|
|
32
|
+
prompt: string;
|
|
33
|
+
width?: number;
|
|
34
|
+
height?: number;
|
|
35
|
+
steps?: number;
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Query Client Class
|
|
39
|
+
*/
|
|
40
|
+
export declare class QueryClient {
|
|
41
|
+
private client;
|
|
42
|
+
private defaultOptions;
|
|
43
|
+
constructor(options?: QueryOptions);
|
|
44
|
+
/**
|
|
45
|
+
* Build axon URL
|
|
46
|
+
*/
|
|
47
|
+
private buildAxonUrl;
|
|
48
|
+
/**
|
|
49
|
+
* Query an axon endpoint
|
|
50
|
+
*/
|
|
51
|
+
query<T = unknown>(axon: AxonInfo, path: string, data: unknown, options?: QueryOptions): Promise<QueryResponse<T>>;
|
|
52
|
+
/**
|
|
53
|
+
* Text generation query
|
|
54
|
+
*/
|
|
55
|
+
generateText(axon: AxonInfo, request: TextGenerationRequest, options?: QueryOptions): Promise<QueryResponse<{
|
|
56
|
+
text: string;
|
|
57
|
+
}>>;
|
|
58
|
+
/**
|
|
59
|
+
* Image generation query
|
|
60
|
+
*/
|
|
61
|
+
generateImage(axon: AxonInfo, request: ImageGenerationRequest, options?: QueryOptions): Promise<QueryResponse<{
|
|
62
|
+
image: string;
|
|
63
|
+
}>>;
|
|
64
|
+
/**
|
|
65
|
+
* Embedding generation query
|
|
66
|
+
*/
|
|
67
|
+
generateEmbeddings(axon: AxonInfo, texts: string[], options?: QueryOptions): Promise<QueryResponse<{
|
|
68
|
+
embeddings: number[][];
|
|
69
|
+
}>>;
|
|
70
|
+
/**
|
|
71
|
+
* Health check
|
|
72
|
+
*/
|
|
73
|
+
healthCheck(axon: AxonInfo): Promise<boolean>;
|
|
74
|
+
/**
|
|
75
|
+
* Get axon info
|
|
76
|
+
*/
|
|
77
|
+
getAxonInfo(axon: AxonInfo): Promise<QueryResponse<Record<string, unknown>>>;
|
|
78
|
+
/**
|
|
79
|
+
* Batch query multiple axons
|
|
80
|
+
*/
|
|
81
|
+
batchQuery<T = unknown>(axons: AxonInfo[], path: string, data: unknown, options?: QueryOptions): Promise<QueryResponse<T>[]>;
|
|
82
|
+
/**
|
|
83
|
+
* Query with consensus (multiple miners)
|
|
84
|
+
*/
|
|
85
|
+
consensusQuery<T = unknown>(axons: AxonInfo[], path: string, data: unknown, minResponses?: number, options?: QueryOptions): Promise<{
|
|
86
|
+
responses: QueryResponse<T>[];
|
|
87
|
+
consensus: T | null;
|
|
88
|
+
}>;
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Create query client
|
|
92
|
+
*/
|
|
93
|
+
export declare function createQueryClient(options?: QueryOptions): QueryClient;
|
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/*
|
|
3
|
+
* Copyright (c) Velocity BPA, LLC
|
|
4
|
+
* Licensed under the Business Source License 1.1
|
|
5
|
+
* Commercial use requires a separate commercial license.
|
|
6
|
+
* See LICENSE file for details.
|
|
7
|
+
*/
|
|
8
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
9
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
10
|
+
};
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.QueryClient = void 0;
|
|
13
|
+
exports.createQueryClient = createQueryClient;
|
|
14
|
+
/**
|
|
15
|
+
* Query Client
|
|
16
|
+
*
|
|
17
|
+
* Client for querying Bittensor subnet miners and validators.
|
|
18
|
+
*/
|
|
19
|
+
const axios_1 = __importDefault(require("axios"));
|
|
20
|
+
/**
|
|
21
|
+
* Query Client Class
|
|
22
|
+
*/
|
|
23
|
+
class QueryClient {
|
|
24
|
+
constructor(options = {}) {
|
|
25
|
+
this.defaultOptions = {
|
|
26
|
+
timeout: options.timeout || 30000,
|
|
27
|
+
retries: options.retries || 3,
|
|
28
|
+
retryDelay: options.retryDelay || 1000,
|
|
29
|
+
};
|
|
30
|
+
this.client = axios_1.default.create({
|
|
31
|
+
timeout: this.defaultOptions.timeout,
|
|
32
|
+
headers: {
|
|
33
|
+
'Content-Type': 'application/json',
|
|
34
|
+
},
|
|
35
|
+
});
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Build axon URL
|
|
39
|
+
*/
|
|
40
|
+
buildAxonUrl(axon, path = '') {
|
|
41
|
+
const protocol = axon.protocol === 4 ? 'https' : 'http';
|
|
42
|
+
return `${protocol}://${axon.ip}:${axon.port}${path}`;
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Query an axon endpoint
|
|
46
|
+
*/
|
|
47
|
+
async query(axon, path, data, options) {
|
|
48
|
+
const opts = { ...this.defaultOptions, ...options };
|
|
49
|
+
const url = this.buildAxonUrl(axon, path);
|
|
50
|
+
const startTime = Date.now();
|
|
51
|
+
let lastError = null;
|
|
52
|
+
for (let attempt = 0; attempt < (opts.retries || 1); attempt++) {
|
|
53
|
+
try {
|
|
54
|
+
const response = await this.client.post(url, data, {
|
|
55
|
+
timeout: opts.timeout,
|
|
56
|
+
});
|
|
57
|
+
return {
|
|
58
|
+
success: true,
|
|
59
|
+
data: response.data,
|
|
60
|
+
latency: Date.now() - startTime,
|
|
61
|
+
};
|
|
62
|
+
}
|
|
63
|
+
catch (error) {
|
|
64
|
+
lastError = error;
|
|
65
|
+
if (attempt < (opts.retries || 1) - 1) {
|
|
66
|
+
await new Promise(resolve => setTimeout(resolve, opts.retryDelay));
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
return {
|
|
71
|
+
success: false,
|
|
72
|
+
error: lastError?.message || 'Unknown error',
|
|
73
|
+
latency: Date.now() - startTime,
|
|
74
|
+
};
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Text generation query
|
|
78
|
+
*/
|
|
79
|
+
async generateText(axon, request, options) {
|
|
80
|
+
return this.query(axon, '/generate', request, options);
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Image generation query
|
|
84
|
+
*/
|
|
85
|
+
async generateImage(axon, request, options) {
|
|
86
|
+
return this.query(axon, '/generate-image', request, options);
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* Embedding generation query
|
|
90
|
+
*/
|
|
91
|
+
async generateEmbeddings(axon, texts, options) {
|
|
92
|
+
return this.query(axon, '/embeddings', { texts }, options);
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Health check
|
|
96
|
+
*/
|
|
97
|
+
async healthCheck(axon) {
|
|
98
|
+
try {
|
|
99
|
+
const url = this.buildAxonUrl(axon, '/health');
|
|
100
|
+
const response = await this.client.get(url, { timeout: 5000 });
|
|
101
|
+
return response.status === 200;
|
|
102
|
+
}
|
|
103
|
+
catch {
|
|
104
|
+
return false;
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* Get axon info
|
|
109
|
+
*/
|
|
110
|
+
async getAxonInfo(axon) {
|
|
111
|
+
return this.query(axon, '/info', {});
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* Batch query multiple axons
|
|
115
|
+
*/
|
|
116
|
+
async batchQuery(axons, path, data, options) {
|
|
117
|
+
const promises = axons.map(axon => this.query(axon, path, data, options));
|
|
118
|
+
return Promise.all(promises);
|
|
119
|
+
}
|
|
120
|
+
/**
|
|
121
|
+
* Query with consensus (multiple miners)
|
|
122
|
+
*/
|
|
123
|
+
async consensusQuery(axons, path, data, minResponses = 1, options) {
|
|
124
|
+
const responses = await this.batchQuery(axons, path, data, options);
|
|
125
|
+
const successful = responses.filter(r => r.success && r.data);
|
|
126
|
+
if (successful.length < minResponses) {
|
|
127
|
+
return { responses, consensus: null };
|
|
128
|
+
}
|
|
129
|
+
// Simple consensus: return first successful response
|
|
130
|
+
// More sophisticated consensus would compare responses
|
|
131
|
+
return {
|
|
132
|
+
responses,
|
|
133
|
+
consensus: successful[0].data || null,
|
|
134
|
+
};
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
exports.QueryClient = QueryClient;
|
|
138
|
+
/**
|
|
139
|
+
* Create query client
|
|
140
|
+
*/
|
|
141
|
+
function createQueryClient(options) {
|
|
142
|
+
return new QueryClient(options);
|
|
143
|
+
}
|
|
144
|
+
//# sourceMappingURL=queryClient.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"queryClient.js","sourceRoot":"","sources":["../../../../nodes/Bittensor/transport/queryClient.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
import { NetworkType } from '../constants/networks';
|
|
2
|
+
/**
|
|
3
|
+
* Connection options
|
|
4
|
+
*/
|
|
5
|
+
export interface SubtensorConnectionOptions {
|
|
6
|
+
network: NetworkType | 'custom';
|
|
7
|
+
wsEndpoint?: string;
|
|
8
|
+
coldkeyMnemonic?: string;
|
|
9
|
+
hotkeyMnemonic?: string;
|
|
10
|
+
timeout?: number;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Transaction result
|
|
14
|
+
*/
|
|
15
|
+
export interface TransactionResult {
|
|
16
|
+
success: boolean;
|
|
17
|
+
blockHash?: string;
|
|
18
|
+
txHash?: string;
|
|
19
|
+
events?: unknown[];
|
|
20
|
+
error?: string;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Subtensor Client Class
|
|
24
|
+
*/
|
|
25
|
+
export declare class SubtensorClient {
|
|
26
|
+
private api;
|
|
27
|
+
private provider;
|
|
28
|
+
private coldkey;
|
|
29
|
+
private hotkey;
|
|
30
|
+
private _network;
|
|
31
|
+
private wsEndpoint;
|
|
32
|
+
private connected;
|
|
33
|
+
constructor(options: SubtensorConnectionOptions);
|
|
34
|
+
/**
|
|
35
|
+
* Get the connected network
|
|
36
|
+
*/
|
|
37
|
+
get network(): NetworkType | 'custom';
|
|
38
|
+
/**
|
|
39
|
+
* Connect to Subtensor
|
|
40
|
+
*/
|
|
41
|
+
connect(): Promise<void>;
|
|
42
|
+
/**
|
|
43
|
+
* Disconnect from Subtensor
|
|
44
|
+
*/
|
|
45
|
+
disconnect(): Promise<void>;
|
|
46
|
+
/**
|
|
47
|
+
* Initialize coldkey from mnemonic
|
|
48
|
+
*/
|
|
49
|
+
initColdkey(mnemonic: string): void;
|
|
50
|
+
/**
|
|
51
|
+
* Initialize hotkey from mnemonic
|
|
52
|
+
*/
|
|
53
|
+
initHotkey(mnemonic: string): void;
|
|
54
|
+
/**
|
|
55
|
+
* Ensure connected
|
|
56
|
+
*/
|
|
57
|
+
private ensureConnected;
|
|
58
|
+
/**
|
|
59
|
+
* Get balance for an address
|
|
60
|
+
*/
|
|
61
|
+
getBalance(address: string): Promise<bigint>;
|
|
62
|
+
/**
|
|
63
|
+
* Get stake for coldkey-hotkey pair
|
|
64
|
+
*/
|
|
65
|
+
getStake(coldkey: string, hotkey: string): Promise<bigint>;
|
|
66
|
+
/**
|
|
67
|
+
* Get total stake for a coldkey
|
|
68
|
+
*/
|
|
69
|
+
getTotalColdkeyStake(coldkey: string): Promise<bigint>;
|
|
70
|
+
/**
|
|
71
|
+
* Get total stake for a hotkey
|
|
72
|
+
*/
|
|
73
|
+
getTotalHotkeyStake(hotkey: string): Promise<bigint>;
|
|
74
|
+
/**
|
|
75
|
+
* Get current block number
|
|
76
|
+
*/
|
|
77
|
+
getBlockNumber(): Promise<number>;
|
|
78
|
+
/**
|
|
79
|
+
* Get block hash by number
|
|
80
|
+
*/
|
|
81
|
+
getBlockHash(blockNumber: number): Promise<string>;
|
|
82
|
+
/**
|
|
83
|
+
* Get total networks count
|
|
84
|
+
*/
|
|
85
|
+
getTotalNetworks(): Promise<number>;
|
|
86
|
+
/**
|
|
87
|
+
* Get subnet info
|
|
88
|
+
*/
|
|
89
|
+
getSubnetInfo(netuid: number): Promise<Record<string, unknown>>;
|
|
90
|
+
/**
|
|
91
|
+
* Get neuron info
|
|
92
|
+
*/
|
|
93
|
+
getNeuronInfo(netuid: number, uid: number): Promise<Record<string, unknown>>;
|
|
94
|
+
/**
|
|
95
|
+
* Get all delegates
|
|
96
|
+
*/
|
|
97
|
+
getDelegates(): Promise<string[]>;
|
|
98
|
+
/**
|
|
99
|
+
* Get delegate take rate
|
|
100
|
+
*/
|
|
101
|
+
getDelegateTake(hotkey: string): Promise<number>;
|
|
102
|
+
/**
|
|
103
|
+
* Get registration cost (burn amount)
|
|
104
|
+
*/
|
|
105
|
+
getRegistrationCost(netuid: number): Promise<bigint>;
|
|
106
|
+
/**
|
|
107
|
+
* Transfer TAO
|
|
108
|
+
*/
|
|
109
|
+
transfer(to: string, amount: number): Promise<TransactionResult>;
|
|
110
|
+
/**
|
|
111
|
+
* Add stake
|
|
112
|
+
*/
|
|
113
|
+
addStake(hotkey: string, amount: number): Promise<TransactionResult>;
|
|
114
|
+
/**
|
|
115
|
+
* Remove stake
|
|
116
|
+
*/
|
|
117
|
+
removeStake(hotkey: string, amount: number): Promise<TransactionResult>;
|
|
118
|
+
/**
|
|
119
|
+
* Set weights (validator only)
|
|
120
|
+
*/
|
|
121
|
+
setWeights(netuid: number, uids: number[], weights: number[], versionKey: number): Promise<TransactionResult>;
|
|
122
|
+
/**
|
|
123
|
+
* Burned register on subnet
|
|
124
|
+
*/
|
|
125
|
+
burnedRegister(netuid: number): Promise<TransactionResult>;
|
|
126
|
+
/**
|
|
127
|
+
* Subscribe to new blocks
|
|
128
|
+
*/
|
|
129
|
+
subscribeToBlocks(callback: (blockNumber: number) => void): Promise<() => void>;
|
|
130
|
+
/**
|
|
131
|
+
* Subscribe to events
|
|
132
|
+
*/
|
|
133
|
+
subscribeToEvents(callback: (events: unknown[]) => void): Promise<() => void>;
|
|
134
|
+
}
|
|
135
|
+
/**
|
|
136
|
+
* Create and connect a new client
|
|
137
|
+
*/
|
|
138
|
+
export declare function createSubtensorClient(options: SubtensorConnectionOptions): Promise<SubtensorClient>;
|