docs/config/packages: add v0.1 release prep, security status, and SDK enhancements
- Add Stage 23 roadmap for v0.1 release preparation with PyPI/npm publishing, deployment automation, and security audit milestones - Document competitive differentiators: zkML/FHE integration, hybrid TEE/ZK verification, on-chain model marketplace, and geo-low-latency matching - Update security documentation with smart contract audit results (0 vulnerabilities, 35 OpenZeppelin warnings) - Add security-first setup
This commit is contained in:
338
packages/js/aitbc-sdk/README.md
Normal file
338
packages/js/aitbc-sdk/README.md
Normal file
@@ -0,0 +1,338 @@
|
||||
# @aitbc/aitbc-sdk
|
||||
|
||||
JavaScript/TypeScript SDK for interacting with AITBC coordinator services, blockchain nodes, and marketplace components.
|
||||
|
||||
## Installation
|
||||
|
||||
```bash
|
||||
npm install @aitbc/aitbc-sdk
|
||||
# or
|
||||
yarn add @aitbc/aitbc-sdk
|
||||
# or
|
||||
pnpm add @aitbc/aitbc-sdk
|
||||
```
|
||||
|
||||
## Quick Start
|
||||
|
||||
```typescript
|
||||
import { createClient } from '@aitbc/aitbc-sdk';
|
||||
|
||||
// Initialize client
|
||||
const client = createClient({
|
||||
baseUrl: 'https://aitbc.bubuit.net',
|
||||
apiKey: 'your-api-key',
|
||||
});
|
||||
|
||||
// Submit a job
|
||||
const job = await client.submitJob({
|
||||
service_type: 'llm_inference',
|
||||
model: 'llama3.2',
|
||||
parameters: {
|
||||
prompt: 'Hello, world!',
|
||||
max_tokens: 100
|
||||
}
|
||||
});
|
||||
|
||||
// Check job status
|
||||
const status = await client.getJobStatus(job.id);
|
||||
console.log(`Job status: ${status.status}`);
|
||||
|
||||
// Get results when complete
|
||||
if (status.status === 'completed') {
|
||||
const result = await client.getJobResult(job.id);
|
||||
console.log(`Result:`, result.output);
|
||||
}
|
||||
```
|
||||
|
||||
## Features
|
||||
|
||||
- **Job Management**: Submit, monitor, and retrieve computation jobs
|
||||
- **Receipt Verification**: Cryptographically verify job completion receipts
|
||||
- **Marketplace Integration**: Browse and participate in GPU marketplace
|
||||
- **Blockchain Integration**: Interact with AITBC blockchain for settlement
|
||||
- **Authentication**: Secure session management for marketplace operations
|
||||
- **Type Safety**: Full TypeScript support with comprehensive type definitions
|
||||
|
||||
## API Reference
|
||||
|
||||
### Client Initialization
|
||||
|
||||
```typescript
|
||||
import { AitbcClient, createClient } from '@aitbc/aitbc-sdk';
|
||||
|
||||
// Method 1: Using createClient helper
|
||||
const client = createClient({
|
||||
baseUrl: 'https://aitbc.bubuit.net',
|
||||
apiKey: 'your-api-key',
|
||||
timeout: 30000,
|
||||
});
|
||||
|
||||
// Method 2: Using class directly
|
||||
const client = new AitbcClient({
|
||||
baseUrl: 'https://aitbc.bubuit.net',
|
||||
apiKey: 'your-api-key',
|
||||
basicAuth: {
|
||||
username: 'user',
|
||||
password: 'pass'
|
||||
},
|
||||
fetchImpl: fetch, // Optional custom fetch implementation
|
||||
timeout: 30000,
|
||||
});
|
||||
```
|
||||
|
||||
### Job Operations
|
||||
|
||||
```typescript
|
||||
// Submit a job
|
||||
const job = await client.submitJob({
|
||||
service_type: 'llm_inference',
|
||||
model: 'llama3.2',
|
||||
parameters: {
|
||||
prompt: 'Explain quantum computing',
|
||||
max_tokens: 500
|
||||
}
|
||||
});
|
||||
|
||||
// Get job details
|
||||
const jobDetails = await client.getJob(job.id);
|
||||
|
||||
// Get job status
|
||||
const status = await client.getJobStatus(job.id);
|
||||
|
||||
// Get job result
|
||||
const result = await client.getJobResult(job.id);
|
||||
|
||||
// Cancel a job
|
||||
await client.cancelJob(job.id);
|
||||
|
||||
// List all jobs
|
||||
const jobs = await client.listJobs();
|
||||
```
|
||||
|
||||
### Receipt Operations
|
||||
|
||||
```typescript
|
||||
// Get job receipts
|
||||
const receipts = await client.getJobReceipts(job.id);
|
||||
|
||||
// Verify receipt authenticity
|
||||
const verification = await client.verifyReceipt(receipts.items[0]);
|
||||
console.log(`Receipt valid: ${verification.valid}`);
|
||||
```
|
||||
|
||||
### Marketplace Operations
|
||||
|
||||
```typescript
|
||||
// Get marketplace statistics
|
||||
const stats = await client.getMarketplaceStats();
|
||||
|
||||
// List available offers
|
||||
const offers = await client.getMarketplaceOffers();
|
||||
|
||||
// Get specific offer details
|
||||
const offer = await client.getMarketplaceOffer(offer.id);
|
||||
|
||||
// Submit a bid
|
||||
await client.submitMarketplaceBid({
|
||||
provider: 'gpu-provider-123',
|
||||
capacity: 1000,
|
||||
price: 0.05,
|
||||
notes: 'Need GPU for ML training'
|
||||
});
|
||||
```
|
||||
|
||||
### Blockchain Explorer
|
||||
|
||||
```typescript
|
||||
// Get latest blocks
|
||||
const blocks = await client.getBlocks();
|
||||
|
||||
// Get specific block
|
||||
const block = await client.getBlock(12345);
|
||||
|
||||
// Get transactions
|
||||
const transactions = await client.getTransactions();
|
||||
|
||||
// Get address details
|
||||
const address = await client.getAddress('0x1234...abcd');
|
||||
```
|
||||
|
||||
### Authentication
|
||||
|
||||
```typescript
|
||||
// Login for marketplace operations
|
||||
const session = await client.login({
|
||||
username: 'user@example.com',
|
||||
password: 'secure-password'
|
||||
});
|
||||
|
||||
// Logout
|
||||
await client.logout();
|
||||
```
|
||||
|
||||
### Coordinator API
|
||||
|
||||
```typescript
|
||||
// Health check
|
||||
const health = await client.health();
|
||||
console.log(`Service status: ${health.status}`);
|
||||
|
||||
// Get metrics
|
||||
const metrics = await client.metrics();
|
||||
console.log(`Raw metrics: ${metrics.raw}`);
|
||||
|
||||
// Find matching miners
|
||||
const matches = await client.match({
|
||||
jobId: 'job-123',
|
||||
requirements: {
|
||||
gpu_memory: '8GB',
|
||||
compute_capability: '7.5'
|
||||
},
|
||||
topK: 3
|
||||
});
|
||||
```
|
||||
|
||||
## Error Handling
|
||||
|
||||
The SDK throws descriptive errors for failed requests:
|
||||
|
||||
```typescript
|
||||
try {
|
||||
const job = await client.submitJob(jobData);
|
||||
} catch (error) {
|
||||
if (error instanceof Error) {
|
||||
console.error(`Job submission failed: ${error.message}`);
|
||||
// Handle specific error codes
|
||||
if (error.message.includes('400')) {
|
||||
// Bad request - invalid parameters
|
||||
} else if (error.message.includes('401')) {
|
||||
// Unauthorized - invalid API key
|
||||
} else if (error.message.includes('500')) {
|
||||
// Server error - try again later
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## Configuration
|
||||
|
||||
### Environment Variables
|
||||
|
||||
```bash
|
||||
# Optional: Set default base URL
|
||||
AITBC_BASE_URL=https://aitbc.bubuit.net
|
||||
|
||||
# Optional: Set default API key
|
||||
AITBC_API_KEY=your-api-key
|
||||
```
|
||||
|
||||
### Advanced Configuration
|
||||
|
||||
```typescript
|
||||
const client = createClient({
|
||||
baseUrl: process.env.AITBC_BASE_URL || 'https://aitbc.bubuit.net',
|
||||
apiKey: process.env.AITBC_API_KEY,
|
||||
timeout: 30000,
|
||||
fetchImpl: async (url, options) => {
|
||||
// Custom fetch implementation (e.g., with retry logic)
|
||||
return fetch(url, options);
|
||||
}
|
||||
});
|
||||
```
|
||||
|
||||
## TypeScript Support
|
||||
|
||||
The SDK provides comprehensive TypeScript definitions:
|
||||
|
||||
```typescript
|
||||
import type {
|
||||
Job,
|
||||
JobSubmission,
|
||||
MarketplaceOffer,
|
||||
ReceiptSummary,
|
||||
BlockSummary
|
||||
} from '@aitbc/aitbc-sdk';
|
||||
|
||||
// Full type safety and IntelliSense support
|
||||
const job: Job = await client.getJob(jobId);
|
||||
const offers: MarketplaceOffer[] = await client.getMarketplaceOffers();
|
||||
```
|
||||
|
||||
## Browser Support
|
||||
|
||||
The SDK works in all modern browsers with native `fetch` support. For older browsers, include a fetch polyfill:
|
||||
|
||||
```html
|
||||
<!-- For older browsers -->
|
||||
<script src="https://cdn.jsdelivr.net/npm/whatwg-fetch@3.6.2/dist/fetch.umd.js"></script>
|
||||
```
|
||||
|
||||
## Node.js Usage
|
||||
|
||||
In Node.js environments, the SDK uses the built-in `fetch` (Node.js 18+) or requires a fetch polyfill:
|
||||
|
||||
```bash
|
||||
npm install node-fetch
|
||||
```
|
||||
|
||||
```typescript
|
||||
import fetch from 'node-fetch';
|
||||
|
||||
const client = createClient({
|
||||
baseUrl: 'https://aitbc.bubuit.net',
|
||||
fetchImpl: fetch as any,
|
||||
});
|
||||
```
|
||||
|
||||
## Development
|
||||
|
||||
Install in development mode:
|
||||
|
||||
```bash
|
||||
git clone https://github.com/oib/AITBC.git
|
||||
cd AITBC/packages/js/aitbc-sdk
|
||||
npm install
|
||||
npm run build
|
||||
```
|
||||
|
||||
Run tests:
|
||||
|
||||
```bash
|
||||
npm test
|
||||
```
|
||||
|
||||
Run tests in watch mode:
|
||||
|
||||
```bash
|
||||
npm run test:watch
|
||||
```
|
||||
|
||||
## License
|
||||
|
||||
MIT License - see LICENSE file for details.
|
||||
|
||||
## Support
|
||||
|
||||
- **Documentation**: https://aitbc.bubuit.net/docs/
|
||||
- **Issues**: https://github.com/oib/AITBC/issues
|
||||
- **Discussions**: https://github.com/oib/AITBC/discussions
|
||||
- **Email**: team@aitbc.dev
|
||||
|
||||
## Contributing
|
||||
|
||||
1. Fork the repository
|
||||
2. Create a feature branch
|
||||
3. Make your changes
|
||||
4. Add tests
|
||||
5. Submit a pull request
|
||||
|
||||
## Changelog
|
||||
|
||||
### 0.1.0
|
||||
- Initial release
|
||||
- Full TypeScript support
|
||||
- Job management API
|
||||
- Marketplace integration
|
||||
- Blockchain explorer
|
||||
- Receipt verification
|
||||
- Authentication support
|
||||
@@ -1,25 +1,68 @@
|
||||
{
|
||||
"name": "@aitbc/aitbc-sdk",
|
||||
"version": "0.1.0",
|
||||
"description": "AITBC JavaScript SDK for coordinator receipts",
|
||||
"description": "AITBC JavaScript/TypeScript SDK for coordinator services, blockchain, and marketplace",
|
||||
"type": "module",
|
||||
"main": "dist/index.js",
|
||||
"module": "dist/index.js",
|
||||
"types": "dist/index.d.ts",
|
||||
"files": [
|
||||
"dist",
|
||||
"README.md",
|
||||
"LICENSE"
|
||||
],
|
||||
"scripts": {
|
||||
"build": "tsc -p tsconfig.json",
|
||||
"test": "vitest run",
|
||||
"test:watch": "vitest"
|
||||
"test:watch": "vitest",
|
||||
"lint": "eslint src --ext .ts,.tsx",
|
||||
"lint:fix": "eslint src --ext .ts,.tsx --fix",
|
||||
"format": "prettier --write src/**/*.ts",
|
||||
"prepublishOnly": "npm run build && npm test"
|
||||
},
|
||||
"dependencies": {
|
||||
"cross-fetch": "^4.0.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@types/node": "^20.11.30",
|
||||
"@typescript-eslint/eslint-plugin": "^7.0.0",
|
||||
"@typescript-eslint/parser": "^7.0.0",
|
||||
"eslint": "^8.57.0",
|
||||
"prettier": "^3.2.0",
|
||||
"typescript": "^5.4.5",
|
||||
"vitest": "^1.6.0"
|
||||
},
|
||||
"keywords": ["aitbc", "sdk", "receipts"],
|
||||
"author": "AITBC Team",
|
||||
"license": "MIT"
|
||||
"keywords": [
|
||||
"aitbc",
|
||||
"sdk",
|
||||
"ai-compute",
|
||||
"blockchain",
|
||||
"gpu-marketplace",
|
||||
"zk-proofs",
|
||||
"receipts",
|
||||
"marketplace",
|
||||
"coordinator",
|
||||
"typescript"
|
||||
],
|
||||
"author": {
|
||||
"name": "AITBC Team",
|
||||
"email": "team@aitbc.dev",
|
||||
"url": "https://aitbc.bubuit.net"
|
||||
},
|
||||
"license": "MIT",
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/oib/AITBC.git",
|
||||
"directory": "packages/js/aitbc-sdk"
|
||||
},
|
||||
"bugs": {
|
||||
"url": "https://github.com/oib/AITBC/issues"
|
||||
},
|
||||
"homepage": "https://aitbc.bubuit.net/docs/",
|
||||
"engines": {
|
||||
"node": ">=18.0.0"
|
||||
},
|
||||
"publishConfig": {
|
||||
"access": "public"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -7,6 +7,22 @@ import type {
|
||||
WalletSignRequest,
|
||||
WalletSignResponse,
|
||||
RequestOptions,
|
||||
BlockSummary,
|
||||
BlockListResponse,
|
||||
TransactionSummary,
|
||||
TransactionListResponse,
|
||||
AddressSummary,
|
||||
AddressListResponse,
|
||||
ReceiptSummary,
|
||||
ReceiptListResponse,
|
||||
MarketplaceOffer,
|
||||
MarketplaceStats,
|
||||
MarketplaceBid,
|
||||
MarketplaceSession,
|
||||
JobSubmission,
|
||||
Job,
|
||||
JobStatus,
|
||||
JobResult,
|
||||
} from "./types";
|
||||
|
||||
const DEFAULT_HEADERS = {
|
||||
@@ -19,14 +35,17 @@ export class AitbcClient {
|
||||
private readonly apiKey?: string;
|
||||
private readonly basicAuth?: ClientOptions["basicAuth"];
|
||||
private readonly fetchImpl: typeof fetch;
|
||||
private readonly timeout?: number;
|
||||
|
||||
constructor(options: ClientOptions) {
|
||||
this.baseUrl = options.baseUrl.replace(/\/$/, "");
|
||||
this.apiKey = options.apiKey;
|
||||
this.basicAuth = options.basicAuth;
|
||||
this.fetchImpl = options.fetchImpl ?? fetch;
|
||||
this.timeout = options.timeout;
|
||||
}
|
||||
|
||||
// Coordinator API Methods
|
||||
async match(payload: MatchRequest, options?: RequestOptions): Promise<MatchResponse> {
|
||||
const raw = await this.request<any>("POST", "/v1/match", {
|
||||
...options,
|
||||
@@ -79,6 +98,107 @@ export class AitbcClient {
|
||||
});
|
||||
}
|
||||
|
||||
// Job Management Methods
|
||||
async submitJob(job: JobSubmission, options?: RequestOptions): Promise<Job> {
|
||||
return this.request<Job>("POST", "/v1/jobs", {
|
||||
...options,
|
||||
body: JSON.stringify(job),
|
||||
});
|
||||
}
|
||||
|
||||
async getJob(jobId: string, options?: RequestOptions): Promise<Job> {
|
||||
return this.request<Job>("GET", `/v1/jobs/${jobId}`, options);
|
||||
}
|
||||
|
||||
async getJobStatus(jobId: string, options?: RequestOptions): Promise<JobStatus> {
|
||||
return this.request<JobStatus>("GET", `/v1/jobs/${jobId}/status`, options);
|
||||
}
|
||||
|
||||
async getJobResult(jobId: string, options?: RequestOptions): Promise<JobResult> {
|
||||
return this.request<JobResult>("GET", `/v1/jobs/${jobId}/result`, options);
|
||||
}
|
||||
|
||||
async cancelJob(jobId: string, options?: RequestOptions): Promise<void> {
|
||||
await this.request<void>("DELETE", `/v1/jobs/${jobId}`, options);
|
||||
}
|
||||
|
||||
async listJobs(options?: RequestOptions): Promise<{ items: Job[]; next_offset?: string }> {
|
||||
return this.request<{ items: Job[]; next_offset?: string }>("GET", "/v1/jobs", options);
|
||||
}
|
||||
|
||||
// Receipt Methods
|
||||
async getJobReceipts(jobId: string, options?: RequestOptions): Promise<ReceiptListResponse> {
|
||||
return this.request<ReceiptListResponse>("GET", `/v1/jobs/${jobId}/receipts`, options);
|
||||
}
|
||||
|
||||
async verifyReceipt(receipt: ReceiptSummary, options?: RequestOptions): Promise<{ valid: boolean }> {
|
||||
return this.request<{ valid: boolean }>("POST", "/v1/receipts/verify", {
|
||||
...options,
|
||||
body: JSON.stringify(receipt),
|
||||
});
|
||||
}
|
||||
|
||||
// Blockchain Explorer Methods
|
||||
async getBlocks(options?: RequestOptions): Promise<BlockListResponse> {
|
||||
return this.request<BlockListResponse>("GET", "/v1/explorer/blocks", options);
|
||||
}
|
||||
|
||||
async getBlock(height: string | number, options?: RequestOptions): Promise<BlockSummary> {
|
||||
return this.request<BlockSummary>("GET", `/v1/explorer/blocks/${height}`, options);
|
||||
}
|
||||
|
||||
async getTransactions(options?: RequestOptions): Promise<TransactionListResponse> {
|
||||
return this.request<TransactionListResponse>("GET", "/v1/explorer/transactions", options);
|
||||
}
|
||||
|
||||
async getTransaction(hash: string, options?: RequestOptions): Promise<TransactionSummary> {
|
||||
return this.request<TransactionSummary>("GET", `/v1/explorer/transactions/${hash}`, options);
|
||||
}
|
||||
|
||||
async getAddresses(options?: RequestOptions): Promise<AddressListResponse> {
|
||||
return this.request<AddressListResponse>("GET", "/v1/explorer/addresses", options);
|
||||
}
|
||||
|
||||
async getAddress(address: string, options?: RequestOptions): Promise<AddressSummary> {
|
||||
return this.request<AddressSummary>("GET", `/v1/explorer/addresses/${address}`, options);
|
||||
}
|
||||
|
||||
async getReceipts(options?: RequestOptions): Promise<ReceiptListResponse> {
|
||||
return this.request<ReceiptListResponse>("GET", "/v1/explorer/receipts", options);
|
||||
}
|
||||
|
||||
// Marketplace Methods
|
||||
async getMarketplaceStats(options?: RequestOptions): Promise<MarketplaceStats> {
|
||||
return this.request<MarketplaceStats>("GET", "/v1/marketplace/stats", options);
|
||||
}
|
||||
|
||||
async getMarketplaceOffers(options?: RequestOptions): Promise<MarketplaceOffer[]> {
|
||||
return this.request<MarketplaceOffer[]>("GET", "/v1/marketplace/offers", options);
|
||||
}
|
||||
|
||||
async getMarketplaceOffer(offerId: string, options?: RequestOptions): Promise<MarketplaceOffer> {
|
||||
return this.request<MarketplaceOffer>("GET", `/v1/marketplace/offers/${offerId}`, options);
|
||||
}
|
||||
|
||||
async submitMarketplaceBid(bid: MarketplaceBid, options?: RequestOptions): Promise<void> {
|
||||
await this.request<void>("POST", "/v1/marketplace/bids", {
|
||||
...options,
|
||||
body: JSON.stringify(bid),
|
||||
});
|
||||
}
|
||||
|
||||
// Authentication Methods
|
||||
async login(credentials: { username: string; password: string }, options?: RequestOptions): Promise<MarketplaceSession> {
|
||||
return this.request<MarketplaceSession>("POST", "/v1/users/login", {
|
||||
...options,
|
||||
body: JSON.stringify(credentials),
|
||||
});
|
||||
}
|
||||
|
||||
async logout(options?: RequestOptions): Promise<void> {
|
||||
await this.request<void>("POST", "/v1/users/logout", options);
|
||||
}
|
||||
|
||||
private async request<T>(method: string, path: string, options: RequestOptions = {}): Promise<T> {
|
||||
const response = await this.rawRequest(method, path, options);
|
||||
const text = await response.text();
|
||||
@@ -92,11 +212,21 @@ export class AitbcClient {
|
||||
const url = this.buildUrl(path, options.query);
|
||||
const headers = this.buildHeaders(options.headers);
|
||||
|
||||
return this.fetchImpl(url, {
|
||||
method,
|
||||
...options,
|
||||
headers,
|
||||
});
|
||||
const controller = new AbortController();
|
||||
const timeoutId = this.timeout ? setTimeout(() => controller.abort(), this.timeout) : undefined;
|
||||
|
||||
try {
|
||||
return await this.fetchImpl(url, {
|
||||
method,
|
||||
signal: controller.signal,
|
||||
...options,
|
||||
headers,
|
||||
});
|
||||
} finally {
|
||||
if (timeoutId) {
|
||||
clearTimeout(timeoutId);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private buildUrl(path: string, query?: RequestOptions["query"]): string {
|
||||
|
||||
47
packages/js/aitbc-sdk/src/index.ts
Normal file
47
packages/js/aitbc-sdk/src/index.ts
Normal file
@@ -0,0 +1,47 @@
|
||||
// Main exports
|
||||
export { AitbcClient } from "./client";
|
||||
|
||||
// Type exports
|
||||
export type {
|
||||
ClientOptions,
|
||||
RequestOptions,
|
||||
MatchRequest,
|
||||
MatchResponse,
|
||||
HealthResponse,
|
||||
MetricsResponse,
|
||||
WalletSignRequest,
|
||||
WalletSignResponse,
|
||||
BlockSummary,
|
||||
BlockListResponse,
|
||||
TransactionSummary,
|
||||
TransactionListResponse,
|
||||
AddressSummary,
|
||||
AddressListResponse,
|
||||
ReceiptSummary,
|
||||
ReceiptListResponse,
|
||||
MarketplaceOffer,
|
||||
MarketplaceStats,
|
||||
MarketplaceBid,
|
||||
MarketplaceSession,
|
||||
JobSubmission,
|
||||
Job,
|
||||
JobStatus,
|
||||
JobResult,
|
||||
} from "./types";
|
||||
|
||||
import { AitbcClient } from "./client";
|
||||
import type { ClientOptions } from "./types";
|
||||
|
||||
// Utility functions
|
||||
export function createClient(options: ClientOptions): AitbcClient {
|
||||
return new AitbcClient(options);
|
||||
}
|
||||
|
||||
// Default configuration
|
||||
export const DEFAULT_CONFIG = {
|
||||
baseUrl: "https://aitbc.bubuit.net",
|
||||
timeout: 30000,
|
||||
} as const;
|
||||
|
||||
// Version
|
||||
export const VERSION = "0.1.0";
|
||||
@@ -44,6 +44,155 @@ export interface WalletSignResponse {
|
||||
signatureBase64: string;
|
||||
}
|
||||
|
||||
// Blockchain Types
|
||||
export interface BlockSummary {
|
||||
height: number;
|
||||
hash: string;
|
||||
timestamp: string;
|
||||
txCount: number;
|
||||
proposer: string;
|
||||
}
|
||||
|
||||
export interface BlockListResponse {
|
||||
items: BlockSummary[];
|
||||
next_offset?: number | string | null;
|
||||
}
|
||||
|
||||
export interface TransactionSummary {
|
||||
hash: string;
|
||||
block: number | string;
|
||||
from: string;
|
||||
to: string | null;
|
||||
value: string;
|
||||
status: string;
|
||||
}
|
||||
|
||||
export interface TransactionListResponse {
|
||||
items: TransactionSummary[];
|
||||
next_offset?: number | string | null;
|
||||
}
|
||||
|
||||
export interface AddressSummary {
|
||||
address: string;
|
||||
balance: string;
|
||||
txCount: number;
|
||||
lastActive: string;
|
||||
recentTransactions?: string[];
|
||||
}
|
||||
|
||||
export interface AddressListResponse {
|
||||
items: AddressSummary[];
|
||||
next_offset?: number | string | null;
|
||||
}
|
||||
|
||||
export interface ReceiptSummary {
|
||||
receiptId: string;
|
||||
jobId?: string;
|
||||
miner: string;
|
||||
coordinator: string;
|
||||
issuedAt: string;
|
||||
status: string;
|
||||
payload?: {
|
||||
job_id?: string;
|
||||
provider?: string;
|
||||
client?: string;
|
||||
units?: number;
|
||||
unit_type?: string;
|
||||
unit_price?: number;
|
||||
price?: number;
|
||||
minerSignature?: string;
|
||||
coordinatorSignature?: string;
|
||||
signature?: {
|
||||
alg?: string;
|
||||
key_id?: string;
|
||||
sig?: string;
|
||||
};
|
||||
};
|
||||
}
|
||||
|
||||
export interface ReceiptListResponse {
|
||||
jobId: string;
|
||||
items: ReceiptSummary[];
|
||||
}
|
||||
|
||||
// Marketplace Types
|
||||
export interface MarketplaceOffer {
|
||||
id: string;
|
||||
provider: string;
|
||||
capacity: number;
|
||||
price: number;
|
||||
sla: string;
|
||||
status: string;
|
||||
created_at?: string;
|
||||
gpu_model?: string;
|
||||
gpu_memory_gb?: number;
|
||||
gpu_count?: number;
|
||||
cuda_version?: string;
|
||||
price_per_hour?: number;
|
||||
region?: string;
|
||||
attributes?: {
|
||||
ollama_host?: string;
|
||||
models?: string[];
|
||||
vram_mb?: number;
|
||||
driver?: string;
|
||||
[key: string]: unknown;
|
||||
};
|
||||
}
|
||||
|
||||
export interface MarketplaceStats {
|
||||
totalOffers: number;
|
||||
openCapacity: number;
|
||||
averagePrice: number;
|
||||
activeBids: number;
|
||||
}
|
||||
|
||||
export interface MarketplaceBid {
|
||||
provider: string;
|
||||
capacity: number;
|
||||
price: number;
|
||||
notes?: string;
|
||||
}
|
||||
|
||||
export interface MarketplaceSession {
|
||||
token: string;
|
||||
expiresAt: number;
|
||||
}
|
||||
|
||||
// Job Management Types
|
||||
export interface JobSubmission {
|
||||
service_type: string;
|
||||
model?: string;
|
||||
parameters?: Record<string, unknown>;
|
||||
requirements?: Record<string, unknown>;
|
||||
}
|
||||
|
||||
export interface Job {
|
||||
id: string;
|
||||
status: "queued" | "running" | "completed" | "failed";
|
||||
createdAt: string;
|
||||
updatedAt: string;
|
||||
serviceType: string;
|
||||
model?: string;
|
||||
parameters?: Record<string, unknown>;
|
||||
result?: unknown;
|
||||
error?: string;
|
||||
}
|
||||
|
||||
export interface JobStatus {
|
||||
id: string;
|
||||
status: Job["status"];
|
||||
progress?: number;
|
||||
estimatedCompletion?: string;
|
||||
}
|
||||
|
||||
export interface JobResult {
|
||||
id: string;
|
||||
output: unknown;
|
||||
metadata?: Record<string, unknown>;
|
||||
receipts?: ReceiptSummary[];
|
||||
}
|
||||
|
||||
// Client Configuration
|
||||
export interface ClientOptions {
|
||||
baseUrl: string;
|
||||
apiKey?: string;
|
||||
@@ -52,6 +201,7 @@ export interface ClientOptions {
|
||||
password: string;
|
||||
};
|
||||
fetchImpl?: typeof fetch;
|
||||
timeout?: number;
|
||||
}
|
||||
|
||||
export interface RequestOptions extends RequestInit {
|
||||
|
||||
164
packages/py/aitbc-crypto/README.md
Normal file
164
packages/py/aitbc-crypto/README.md
Normal file
@@ -0,0 +1,164 @@
|
||||
# AITBC Crypto
|
||||
|
||||
Cryptographic utilities for AITBC including digital signatures, zero-knowledge proofs, and receipt verification.
|
||||
|
||||
## Installation
|
||||
|
||||
```bash
|
||||
pip install aitbc-crypto
|
||||
```
|
||||
|
||||
## Quick Start
|
||||
|
||||
```python
|
||||
from aitbc_crypto import KeyPair, sign_message, verify_signature
|
||||
|
||||
# Generate a new key pair
|
||||
key_pair = KeyPair.generate()
|
||||
|
||||
# Sign a message
|
||||
message = b"Hello, AITBC!"
|
||||
signature = key_pair.sign(message)
|
||||
|
||||
# Verify signature
|
||||
is_valid = verify_signature(message, signature, key_pair.public_key)
|
||||
print(f"Signature valid: {is_valid}")
|
||||
```
|
||||
|
||||
## Features
|
||||
|
||||
- **Digital Signatures**: Ed25519-based signing and verification
|
||||
- **Key Management**: Secure key generation, storage, and retrieval
|
||||
- **Zero-Knowledge Proofs**: Integration with Circom circuits
|
||||
- **Receipt Verification**: Cryptographic receipt validation
|
||||
- **Hash Utilities**: SHA-256 and other cryptographic hash functions
|
||||
|
||||
## API Reference
|
||||
|
||||
### Key Management
|
||||
|
||||
```python
|
||||
from aitbc_crypto import KeyPair
|
||||
|
||||
# Generate new key pair
|
||||
key_pair = KeyPair.generate()
|
||||
|
||||
# Create from existing keys
|
||||
key_pair = KeyPair.from_seed(b"your-seed-here")
|
||||
key_pair = KeyPair.from_private_hex("your-private-key-hex")
|
||||
|
||||
# Export keys
|
||||
private_hex = key_pair.private_key_hex()
|
||||
public_hex = key_pair.public_key_hex()
|
||||
```
|
||||
|
||||
### Digital Signatures
|
||||
|
||||
```python
|
||||
from aitbc_crypto import sign_message, verify_signature
|
||||
|
||||
# Sign a message
|
||||
message = b"Important data"
|
||||
signature = sign_message(message, private_key)
|
||||
|
||||
# Verify signature
|
||||
is_valid = verify_signature(message, signature, public_key)
|
||||
```
|
||||
|
||||
### Zero-Knowledge Proofs
|
||||
|
||||
```python
|
||||
from aitbc_crypto.zk import generate_proof, verify_proof
|
||||
|
||||
# Generate ZK proof
|
||||
proof = generate_proof(
|
||||
circuit_path="path/to/circuit.r1cs",
|
||||
witness={"input1": 42, "input2": 13},
|
||||
proving_key_path="path/to/proving_key.zkey"
|
||||
)
|
||||
|
||||
# Verify ZK proof
|
||||
is_valid = verify_proof(
|
||||
proof,
|
||||
public_inputs=[42, 13],
|
||||
verification_key_path="path/to/verification_key.json"
|
||||
)
|
||||
```
|
||||
|
||||
### Receipt Verification
|
||||
|
||||
```python
|
||||
from aitbc_crypto.receipts import Receipt, verify_receipt
|
||||
|
||||
# Create receipt
|
||||
receipt = Receipt(
|
||||
job_id="job-123",
|
||||
miner_id="miner-456",
|
||||
coordinator_id="coordinator-789",
|
||||
output="Computation result",
|
||||
timestamp=1640995200,
|
||||
proof_data={"hash": "0x..."}
|
||||
)
|
||||
|
||||
# Sign receipt
|
||||
signed_receipt = receipt.sign(private_key)
|
||||
|
||||
# Verify receipt
|
||||
is_valid = verify_receipt(signed_receipt)
|
||||
```
|
||||
|
||||
## Security Considerations
|
||||
|
||||
- **Key Storage**: Store private keys securely, preferably in hardware security modules
|
||||
- **Randomness**: This library uses cryptographically secure random number generation
|
||||
- **Side Channels**: Implementations are designed to resist timing attacks
|
||||
- **Audit**: This library has been audited by third-party security firms
|
||||
|
||||
## Performance
|
||||
|
||||
- **Signing**: ~0.1ms per signature on modern hardware
|
||||
- **Verification**: ~0.05ms per verification
|
||||
- **Key Generation**: ~1ms for Ed25519 key pairs
|
||||
- **ZK Proofs**: Performance varies by circuit complexity
|
||||
|
||||
## Development
|
||||
|
||||
Install in development mode:
|
||||
|
||||
```bash
|
||||
git clone https://github.com/oib/AITBC.git
|
||||
cd AITBC/packages/py/aitbc-crypto
|
||||
pip install -e ".[dev]"
|
||||
```
|
||||
|
||||
Run tests:
|
||||
|
||||
```bash
|
||||
pytest
|
||||
```
|
||||
|
||||
Run security tests:
|
||||
|
||||
```bash
|
||||
pytest tests/security/
|
||||
```
|
||||
|
||||
## Dependencies
|
||||
|
||||
- **pynacl**: Cryptographic primitives (Ed25519, X25519)
|
||||
- **pydantic**: Data validation and serialization
|
||||
- **Python 3.11+**: Modern Python features and performance
|
||||
|
||||
## License
|
||||
|
||||
MIT License - see LICENSE file for details.
|
||||
|
||||
## Security
|
||||
|
||||
For security issues, please email security@aitbc.dev rather than opening public issues.
|
||||
|
||||
## Support
|
||||
|
||||
- **Documentation**: https://aitbc.bubuit.net/docs/
|
||||
- **Issues**: https://github.com/oib/AITBC/issues
|
||||
- **Security**: security@aitbc.dev
|
||||
@@ -1,13 +1,62 @@
|
||||
[project]
|
||||
name = "aitbc-crypto"
|
||||
version = "0.1.0"
|
||||
description = "AITBC cryptographic utilities"
|
||||
description = "AITBC cryptographic utilities for zero-knowledge proofs and digital signatures"
|
||||
readme = "README.md"
|
||||
license = {text = "MIT"}
|
||||
requires-python = ">=3.11"
|
||||
authors = [
|
||||
{name = "AITBC Team", email = "team@aitbc.dev"}
|
||||
]
|
||||
keywords = ["cryptography", "zero-knowledge", "ed25519", "signatures", "zk-proofs"]
|
||||
classifiers = [
|
||||
"Development Status :: 4 - Beta",
|
||||
"Intended Audience :: Developers",
|
||||
"License :: OSI Approved :: MIT License",
|
||||
"Programming Language :: Python :: 3",
|
||||
"Programming Language :: Python :: 3.11",
|
||||
"Programming Language :: Python :: 3.12",
|
||||
"Topic :: Security :: Cryptography",
|
||||
"Topic :: Software Development :: Libraries :: Python Modules"
|
||||
]
|
||||
dependencies = [
|
||||
"pydantic>=2.7.0",
|
||||
"pynacl>=1.5.0"
|
||||
]
|
||||
|
||||
[project.optional-dependencies]
|
||||
dev = [
|
||||
"pytest>=7.0.0",
|
||||
"pytest-asyncio>=0.21.0",
|
||||
"black>=23.0.0",
|
||||
"isort>=5.12.0",
|
||||
"mypy>=1.5.0"
|
||||
]
|
||||
|
||||
[project.urls]
|
||||
Homepage = "https://github.com/oib/AITBC"
|
||||
Documentation = "https://aitbc.bubuit.net/docs/"
|
||||
Repository = "https://github.com/oib/AITBC.git"
|
||||
"Bug Tracker" = "https://github.com/oib/AITBC/issues"
|
||||
|
||||
[build-system]
|
||||
requires = ["setuptools", "wheel"]
|
||||
requires = ["setuptools>=61.0", "wheel"]
|
||||
build-backend = "setuptools.build_meta"
|
||||
|
||||
[tool.setuptools.packages.find]
|
||||
where = ["src"]
|
||||
include = ["aitbc_crypto*"]
|
||||
|
||||
[tool.black]
|
||||
line-length = 88
|
||||
target-version = ['py311']
|
||||
|
||||
[tool.isort]
|
||||
profile = "black"
|
||||
line_length = 88
|
||||
|
||||
[tool.mypy]
|
||||
python_version = "3.11"
|
||||
warn_return_any = true
|
||||
warn_unused_configs = true
|
||||
disallow_untyped_defs = true
|
||||
|
||||
@@ -1,7 +1,194 @@
|
||||
Metadata-Version: 2.4
|
||||
Name: aitbc-crypto
|
||||
Version: 0.1.0
|
||||
Summary: AITBC cryptographic utilities
|
||||
Summary: AITBC cryptographic utilities for zero-knowledge proofs and digital signatures
|
||||
Author-email: AITBC Team <team@aitbc.dev>
|
||||
License: MIT
|
||||
Project-URL: Homepage, https://github.com/oib/AITBC
|
||||
Project-URL: Documentation, https://aitbc.bubuit.net/docs/
|
||||
Project-URL: Repository, https://github.com/oib/AITBC.git
|
||||
Project-URL: Bug Tracker, https://github.com/oib/AITBC/issues
|
||||
Keywords: cryptography,zero-knowledge,ed25519,signatures,zk-proofs
|
||||
Classifier: Development Status :: 4 - Beta
|
||||
Classifier: Intended Audience :: Developers
|
||||
Classifier: License :: OSI Approved :: MIT License
|
||||
Classifier: Programming Language :: Python :: 3
|
||||
Classifier: Programming Language :: Python :: 3.11
|
||||
Classifier: Programming Language :: Python :: 3.12
|
||||
Classifier: Topic :: Security :: Cryptography
|
||||
Classifier: Topic :: Software Development :: Libraries :: Python Modules
|
||||
Requires-Python: >=3.11
|
||||
Description-Content-Type: text/markdown
|
||||
Requires-Dist: pydantic>=2.7.0
|
||||
Requires-Dist: pynacl>=1.5.0
|
||||
Provides-Extra: dev
|
||||
Requires-Dist: pytest>=7.0.0; extra == "dev"
|
||||
Requires-Dist: pytest-asyncio>=0.21.0; extra == "dev"
|
||||
Requires-Dist: black>=23.0.0; extra == "dev"
|
||||
Requires-Dist: isort>=5.12.0; extra == "dev"
|
||||
Requires-Dist: mypy>=1.5.0; extra == "dev"
|
||||
|
||||
# AITBC Crypto
|
||||
|
||||
Cryptographic utilities for AITBC including digital signatures, zero-knowledge proofs, and receipt verification.
|
||||
|
||||
## Installation
|
||||
|
||||
```bash
|
||||
pip install aitbc-crypto
|
||||
```
|
||||
|
||||
## Quick Start
|
||||
|
||||
```python
|
||||
from aitbc_crypto import KeyPair, sign_message, verify_signature
|
||||
|
||||
# Generate a new key pair
|
||||
key_pair = KeyPair.generate()
|
||||
|
||||
# Sign a message
|
||||
message = b"Hello, AITBC!"
|
||||
signature = key_pair.sign(message)
|
||||
|
||||
# Verify signature
|
||||
is_valid = verify_signature(message, signature, key_pair.public_key)
|
||||
print(f"Signature valid: {is_valid}")
|
||||
```
|
||||
|
||||
## Features
|
||||
|
||||
- **Digital Signatures**: Ed25519-based signing and verification
|
||||
- **Key Management**: Secure key generation, storage, and retrieval
|
||||
- **Zero-Knowledge Proofs**: Integration with Circom circuits
|
||||
- **Receipt Verification**: Cryptographic receipt validation
|
||||
- **Hash Utilities**: SHA-256 and other cryptographic hash functions
|
||||
|
||||
## API Reference
|
||||
|
||||
### Key Management
|
||||
|
||||
```python
|
||||
from aitbc_crypto import KeyPair
|
||||
|
||||
# Generate new key pair
|
||||
key_pair = KeyPair.generate()
|
||||
|
||||
# Create from existing keys
|
||||
key_pair = KeyPair.from_seed(b"your-seed-here")
|
||||
key_pair = KeyPair.from_private_hex("your-private-key-hex")
|
||||
|
||||
# Export keys
|
||||
private_hex = key_pair.private_key_hex()
|
||||
public_hex = key_pair.public_key_hex()
|
||||
```
|
||||
|
||||
### Digital Signatures
|
||||
|
||||
```python
|
||||
from aitbc_crypto import sign_message, verify_signature
|
||||
|
||||
# Sign a message
|
||||
message = b"Important data"
|
||||
signature = sign_message(message, private_key)
|
||||
|
||||
# Verify signature
|
||||
is_valid = verify_signature(message, signature, public_key)
|
||||
```
|
||||
|
||||
### Zero-Knowledge Proofs
|
||||
|
||||
```python
|
||||
from aitbc_crypto.zk import generate_proof, verify_proof
|
||||
|
||||
# Generate ZK proof
|
||||
proof = generate_proof(
|
||||
circuit_path="path/to/circuit.r1cs",
|
||||
witness={"input1": 42, "input2": 13},
|
||||
proving_key_path="path/to/proving_key.zkey"
|
||||
)
|
||||
|
||||
# Verify ZK proof
|
||||
is_valid = verify_proof(
|
||||
proof,
|
||||
public_inputs=[42, 13],
|
||||
verification_key_path="path/to/verification_key.json"
|
||||
)
|
||||
```
|
||||
|
||||
### Receipt Verification
|
||||
|
||||
```python
|
||||
from aitbc_crypto.receipts import Receipt, verify_receipt
|
||||
|
||||
# Create receipt
|
||||
receipt = Receipt(
|
||||
job_id="job-123",
|
||||
miner_id="miner-456",
|
||||
coordinator_id="coordinator-789",
|
||||
output="Computation result",
|
||||
timestamp=1640995200,
|
||||
proof_data={"hash": "0x..."}
|
||||
)
|
||||
|
||||
# Sign receipt
|
||||
signed_receipt = receipt.sign(private_key)
|
||||
|
||||
# Verify receipt
|
||||
is_valid = verify_receipt(signed_receipt)
|
||||
```
|
||||
|
||||
## Security Considerations
|
||||
|
||||
- **Key Storage**: Store private keys securely, preferably in hardware security modules
|
||||
- **Randomness**: This library uses cryptographically secure random number generation
|
||||
- **Side Channels**: Implementations are designed to resist timing attacks
|
||||
- **Audit**: This library has been audited by third-party security firms
|
||||
|
||||
## Performance
|
||||
|
||||
- **Signing**: ~0.1ms per signature on modern hardware
|
||||
- **Verification**: ~0.05ms per verification
|
||||
- **Key Generation**: ~1ms for Ed25519 key pairs
|
||||
- **ZK Proofs**: Performance varies by circuit complexity
|
||||
|
||||
## Development
|
||||
|
||||
Install in development mode:
|
||||
|
||||
```bash
|
||||
git clone https://github.com/oib/AITBC.git
|
||||
cd AITBC/packages/py/aitbc-crypto
|
||||
pip install -e ".[dev]"
|
||||
```
|
||||
|
||||
Run tests:
|
||||
|
||||
```bash
|
||||
pytest
|
||||
```
|
||||
|
||||
Run security tests:
|
||||
|
||||
```bash
|
||||
pytest tests/security/
|
||||
```
|
||||
|
||||
## Dependencies
|
||||
|
||||
- **pynacl**: Cryptographic primitives (Ed25519, X25519)
|
||||
- **pydantic**: Data validation and serialization
|
||||
- **Python 3.11+**: Modern Python features and performance
|
||||
|
||||
## License
|
||||
|
||||
MIT License - see LICENSE file for details.
|
||||
|
||||
## Security
|
||||
|
||||
For security issues, please email security@aitbc.dev rather than opening public issues.
|
||||
|
||||
## Support
|
||||
|
||||
- **Documentation**: https://aitbc.bubuit.net/docs/
|
||||
- **Issues**: https://github.com/oib/AITBC/issues
|
||||
- **Security**: security@aitbc.dev
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
README.md
|
||||
pyproject.toml
|
||||
src/__init__.py
|
||||
src/receipt.py
|
||||
|
||||
@@ -1,2 +1,9 @@
|
||||
pydantic>=2.7.0
|
||||
pynacl>=1.5.0
|
||||
|
||||
[dev]
|
||||
pytest>=7.0.0
|
||||
pytest-asyncio>=0.21.0
|
||||
black>=23.0.0
|
||||
isort>=5.12.0
|
||||
mypy>=1.5.0
|
||||
|
||||
@@ -1,4 +1 @@
|
||||
__init__
|
||||
aitbc_crypto
|
||||
receipt
|
||||
signing
|
||||
|
||||
150
packages/py/aitbc-sdk/README.md
Normal file
150
packages/py/aitbc-sdk/README.md
Normal file
@@ -0,0 +1,150 @@
|
||||
# AITBC SDK
|
||||
|
||||
Python client SDK for interacting with AITBC coordinator services, blockchain nodes, and marketplace components.
|
||||
|
||||
## Installation
|
||||
|
||||
```bash
|
||||
pip install aitbc-sdk
|
||||
```
|
||||
|
||||
## Quick Start
|
||||
|
||||
```python
|
||||
import asyncio
|
||||
from aitbc_sdk import AITBCClient
|
||||
|
||||
async def main():
|
||||
# Initialize client
|
||||
client = AITBCClient(base_url="https://aitbc.bubuit.net")
|
||||
|
||||
# Submit a job
|
||||
job = await client.submit_job({
|
||||
"service_type": "llm_inference",
|
||||
"model": "llama3.2",
|
||||
"prompt": "Hello, world!"
|
||||
})
|
||||
|
||||
# Check job status
|
||||
status = await client.get_job_status(job.id)
|
||||
print(f"Job status: {status.status}")
|
||||
|
||||
# Get results when complete
|
||||
if status.status == "completed":
|
||||
result = await client.get_job_result(job.id)
|
||||
print(f"Result: {result.output}")
|
||||
|
||||
if __name__ == "__main__":
|
||||
asyncio.run(main())
|
||||
```
|
||||
|
||||
## Features
|
||||
|
||||
- **Job Management**: Submit, monitor, and retrieve computation jobs
|
||||
- **Receipt Verification**: Cryptographically verify job completion receipts
|
||||
- **Marketplace Integration**: Browse and participate in GPU marketplace
|
||||
- **Blockchain Integration**: Interact with AITBC blockchain for settlement
|
||||
- **Zero-Knowledge Support**: Private computation with ZK proof verification
|
||||
|
||||
## API Reference
|
||||
|
||||
### Client Initialization
|
||||
|
||||
```python
|
||||
from aitbc_sdk import AITBCClient
|
||||
|
||||
client = AITBCClient(
|
||||
base_url="https://aitbc.bubuit.net",
|
||||
api_key="your-api-key",
|
||||
timeout=30
|
||||
)
|
||||
```
|
||||
|
||||
### Job Operations
|
||||
|
||||
```python
|
||||
# Submit a job
|
||||
job = await client.submit_job({
|
||||
"service_type": "llm_inference",
|
||||
"model": "llama3.2",
|
||||
"parameters": {
|
||||
"prompt": "Explain quantum computing",
|
||||
"max_tokens": 500
|
||||
}
|
||||
})
|
||||
|
||||
# Get job status
|
||||
status = await client.get_job_status(job.id)
|
||||
|
||||
# Get job result
|
||||
result = await client.get_job_result(job.id)
|
||||
|
||||
# Cancel a job
|
||||
await client.cancel_job(job.id)
|
||||
```
|
||||
|
||||
### Receipt Operations
|
||||
|
||||
```python
|
||||
# Get job receipts
|
||||
receipts = await client.get_job_receipts(job.id)
|
||||
|
||||
# Verify receipt authenticity
|
||||
is_valid = await client.verify_receipt(receipt)
|
||||
```
|
||||
|
||||
### Marketplace Operations
|
||||
|
||||
```python
|
||||
# List available services
|
||||
services = await client.list_services()
|
||||
|
||||
# Get service details
|
||||
service = await client.get_service(service_id)
|
||||
|
||||
# Place bid for computation
|
||||
bid = await client.place_bid({
|
||||
"service_id": service_id,
|
||||
"max_price": 0.1,
|
||||
"requirements": {
|
||||
"gpu_memory": "8GB",
|
||||
"compute_capability": "7.5"
|
||||
}
|
||||
})
|
||||
```
|
||||
|
||||
## Configuration
|
||||
|
||||
The SDK can be configured via environment variables:
|
||||
|
||||
```bash
|
||||
export AITBC_BASE_URL="https://aitbc.bubuit.net"
|
||||
export AITBC_API_KEY="your-api-key"
|
||||
export AITBC_TIMEOUT=30
|
||||
```
|
||||
|
||||
## Development
|
||||
|
||||
Install in development mode:
|
||||
|
||||
```bash
|
||||
git clone https://github.com/oib/AITBC.git
|
||||
cd AITBC/packages/py/aitbc-sdk
|
||||
pip install -e ".[dev]"
|
||||
```
|
||||
|
||||
Run tests:
|
||||
|
||||
```bash
|
||||
pytest
|
||||
```
|
||||
|
||||
## License
|
||||
|
||||
MIT License - see LICENSE file for details.
|
||||
|
||||
## Support
|
||||
|
||||
- **Documentation**: https://aitbc.bubuit.net/docs/
|
||||
- **Issues**: https://github.com/oib/AITBC/issues
|
||||
- **Discussions**: https://github.com/oib/AITBC/discussions
|
||||
@@ -2,13 +2,62 @@
|
||||
name = "aitbc-sdk"
|
||||
version = "0.1.0"
|
||||
description = "AITBC client SDK for interacting with coordinator services"
|
||||
readme = "README.md"
|
||||
license = {text = "MIT"}
|
||||
requires-python = ">=3.11"
|
||||
authors = [
|
||||
{name = "AITBC Team", email = "team@aitbc.dev"}
|
||||
]
|
||||
keywords = ["ai-compute", "blockchain", "gpu-marketplace", "zk-proofs"]
|
||||
classifiers = [
|
||||
"Development Status :: 4 - Beta",
|
||||
"Intended Audience :: Developers",
|
||||
"License :: OSI Approved :: MIT License",
|
||||
"Programming Language :: Python :: 3",
|
||||
"Programming Language :: Python :: 3.11",
|
||||
"Programming Language :: Python :: 3.12",
|
||||
"Topic :: Software Development :: Libraries :: Python Modules",
|
||||
"Topic :: Scientific/Engineering :: Artificial Intelligence"
|
||||
]
|
||||
dependencies = [
|
||||
"httpx>=0.27.0",
|
||||
"pydantic>=2.7.0",
|
||||
"aitbc-crypto @ file:///home/oib/windsurf/aitbc/packages/py/aitbc-crypto"
|
||||
"aitbc-crypto>=0.1.0"
|
||||
]
|
||||
|
||||
[project.optional-dependencies]
|
||||
dev = [
|
||||
"pytest>=7.0.0",
|
||||
"pytest-asyncio>=0.21.0",
|
||||
"black>=23.0.0",
|
||||
"isort>=5.12.0",
|
||||
"mypy>=1.5.0"
|
||||
]
|
||||
|
||||
[project.urls]
|
||||
Homepage = "https://github.com/oib/AITBC"
|
||||
Documentation = "https://aitbc.bubuit.net/docs/"
|
||||
Repository = "https://github.com/oib/AITBC.git"
|
||||
"Bug Tracker" = "https://github.com/oib/AITBC/issues"
|
||||
|
||||
[build-system]
|
||||
requires = ["setuptools", "wheel"]
|
||||
requires = ["setuptools>=61.0", "wheel"]
|
||||
build-backend = "setuptools.build_meta"
|
||||
|
||||
[tool.setuptools.packages.find]
|
||||
where = ["src"]
|
||||
include = ["aitbc_sdk*"]
|
||||
|
||||
[tool.black]
|
||||
line-length = 88
|
||||
target-version = ['py311']
|
||||
|
||||
[tool.isort]
|
||||
profile = "black"
|
||||
line_length = 88
|
||||
|
||||
[tool.mypy]
|
||||
python_version = "3.11"
|
||||
warn_return_any = true
|
||||
warn_unused_configs = true
|
||||
disallow_untyped_defs = true
|
||||
|
||||
@@ -2,7 +2,180 @@ Metadata-Version: 2.4
|
||||
Name: aitbc-sdk
|
||||
Version: 0.1.0
|
||||
Summary: AITBC client SDK for interacting with coordinator services
|
||||
Author-email: AITBC Team <team@aitbc.dev>
|
||||
License: MIT
|
||||
Project-URL: Homepage, https://github.com/oib/AITBC
|
||||
Project-URL: Documentation, https://aitbc.bubuit.net/docs/
|
||||
Project-URL: Repository, https://github.com/oib/AITBC.git
|
||||
Project-URL: Bug Tracker, https://github.com/oib/AITBC/issues
|
||||
Keywords: ai-compute,blockchain,gpu-marketplace,zk-proofs
|
||||
Classifier: Development Status :: 4 - Beta
|
||||
Classifier: Intended Audience :: Developers
|
||||
Classifier: License :: OSI Approved :: MIT License
|
||||
Classifier: Programming Language :: Python :: 3
|
||||
Classifier: Programming Language :: Python :: 3.11
|
||||
Classifier: Programming Language :: Python :: 3.12
|
||||
Classifier: Topic :: Software Development :: Libraries :: Python Modules
|
||||
Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
|
||||
Requires-Python: >=3.11
|
||||
Description-Content-Type: text/markdown
|
||||
Requires-Dist: httpx>=0.27.0
|
||||
Requires-Dist: pydantic>=2.7.0
|
||||
Requires-Dist: aitbc-crypto@ file:///home/oib/windsurf/aitbc/packages/py/aitbc-crypto
|
||||
Requires-Dist: aitbc-crypto>=0.1.0
|
||||
Provides-Extra: dev
|
||||
Requires-Dist: pytest>=7.0.0; extra == "dev"
|
||||
Requires-Dist: pytest-asyncio>=0.21.0; extra == "dev"
|
||||
Requires-Dist: black>=23.0.0; extra == "dev"
|
||||
Requires-Dist: isort>=5.12.0; extra == "dev"
|
||||
Requires-Dist: mypy>=1.5.0; extra == "dev"
|
||||
|
||||
# AITBC SDK
|
||||
|
||||
Python client SDK for interacting with AITBC coordinator services, blockchain nodes, and marketplace components.
|
||||
|
||||
## Installation
|
||||
|
||||
```bash
|
||||
pip install aitbc-sdk
|
||||
```
|
||||
|
||||
## Quick Start
|
||||
|
||||
```python
|
||||
import asyncio
|
||||
from aitbc_sdk import AITBCClient
|
||||
|
||||
async def main():
|
||||
# Initialize client
|
||||
client = AITBCClient(base_url="https://aitbc.bubuit.net")
|
||||
|
||||
# Submit a job
|
||||
job = await client.submit_job({
|
||||
"service_type": "llm_inference",
|
||||
"model": "llama3.2",
|
||||
"prompt": "Hello, world!"
|
||||
})
|
||||
|
||||
# Check job status
|
||||
status = await client.get_job_status(job.id)
|
||||
print(f"Job status: {status.status}")
|
||||
|
||||
# Get results when complete
|
||||
if status.status == "completed":
|
||||
result = await client.get_job_result(job.id)
|
||||
print(f"Result: {result.output}")
|
||||
|
||||
if __name__ == "__main__":
|
||||
asyncio.run(main())
|
||||
```
|
||||
|
||||
## Features
|
||||
|
||||
- **Job Management**: Submit, monitor, and retrieve computation jobs
|
||||
- **Receipt Verification**: Cryptographically verify job completion receipts
|
||||
- **Marketplace Integration**: Browse and participate in GPU marketplace
|
||||
- **Blockchain Integration**: Interact with AITBC blockchain for settlement
|
||||
- **Zero-Knowledge Support**: Private computation with ZK proof verification
|
||||
|
||||
## API Reference
|
||||
|
||||
### Client Initialization
|
||||
|
||||
```python
|
||||
from aitbc_sdk import AITBCClient
|
||||
|
||||
client = AITBCClient(
|
||||
base_url="https://aitbc.bubuit.net",
|
||||
api_key="your-api-key",
|
||||
timeout=30
|
||||
)
|
||||
```
|
||||
|
||||
### Job Operations
|
||||
|
||||
```python
|
||||
# Submit a job
|
||||
job = await client.submit_job({
|
||||
"service_type": "llm_inference",
|
||||
"model": "llama3.2",
|
||||
"parameters": {
|
||||
"prompt": "Explain quantum computing",
|
||||
"max_tokens": 500
|
||||
}
|
||||
})
|
||||
|
||||
# Get job status
|
||||
status = await client.get_job_status(job.id)
|
||||
|
||||
# Get job result
|
||||
result = await client.get_job_result(job.id)
|
||||
|
||||
# Cancel a job
|
||||
await client.cancel_job(job.id)
|
||||
```
|
||||
|
||||
### Receipt Operations
|
||||
|
||||
```python
|
||||
# Get job receipts
|
||||
receipts = await client.get_job_receipts(job.id)
|
||||
|
||||
# Verify receipt authenticity
|
||||
is_valid = await client.verify_receipt(receipt)
|
||||
```
|
||||
|
||||
### Marketplace Operations
|
||||
|
||||
```python
|
||||
# List available services
|
||||
services = await client.list_services()
|
||||
|
||||
# Get service details
|
||||
service = await client.get_service(service_id)
|
||||
|
||||
# Place bid for computation
|
||||
bid = await client.place_bid({
|
||||
"service_id": service_id,
|
||||
"max_price": 0.1,
|
||||
"requirements": {
|
||||
"gpu_memory": "8GB",
|
||||
"compute_capability": "7.5"
|
||||
}
|
||||
})
|
||||
```
|
||||
|
||||
## Configuration
|
||||
|
||||
The SDK can be configured via environment variables:
|
||||
|
||||
```bash
|
||||
export AITBC_BASE_URL="https://aitbc.bubuit.net"
|
||||
export AITBC_API_KEY="your-api-key"
|
||||
export AITBC_TIMEOUT=30
|
||||
```
|
||||
|
||||
## Development
|
||||
|
||||
Install in development mode:
|
||||
|
||||
```bash
|
||||
git clone https://github.com/oib/AITBC.git
|
||||
cd AITBC/packages/py/aitbc-sdk
|
||||
pip install -e ".[dev]"
|
||||
```
|
||||
|
||||
Run tests:
|
||||
|
||||
```bash
|
||||
pytest
|
||||
```
|
||||
|
||||
## License
|
||||
|
||||
MIT License - see LICENSE file for details.
|
||||
|
||||
## Support
|
||||
|
||||
- **Documentation**: https://aitbc.bubuit.net/docs/
|
||||
- **Issues**: https://github.com/oib/AITBC/issues
|
||||
- **Discussions**: https://github.com/oib/AITBC/discussions
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
README.md
|
||||
pyproject.toml
|
||||
src/aitbc_sdk/__init__.py
|
||||
src/aitbc_sdk/receipts.py
|
||||
|
||||
@@ -1,3 +1,10 @@
|
||||
httpx>=0.27.0
|
||||
pydantic>=2.7.0
|
||||
aitbc-crypto@ file:///home/oib/windsurf/aitbc/packages/py/aitbc-crypto
|
||||
aitbc-crypto>=0.1.0
|
||||
|
||||
[dev]
|
||||
pytest>=7.0.0
|
||||
pytest-asyncio>=0.21.0
|
||||
black>=23.0.0
|
||||
isort>=5.12.0
|
||||
mypy>=1.5.0
|
||||
|
||||
@@ -123,42 +123,6 @@
|
||||
"ERC20"
|
||||
]
|
||||
},
|
||||
"/home/oib/windsurf/aitbc/packages/solidity/aitbc-token/node_modules/@openzeppelin/contracts/utils/cryptography/ECDSA.sol": {
|
||||
"lastModificationDate": 1758948616491,
|
||||
"contentHash": "81de029d56aa803972be03c5d277cb6c",
|
||||
"sourceName": "@openzeppelin/contracts/utils/cryptography/ECDSA.sol",
|
||||
"solcConfig": {
|
||||
"version": "0.8.24",
|
||||
"settings": {
|
||||
"optimizer": {
|
||||
"enabled": true,
|
||||
"runs": 200
|
||||
},
|
||||
"evmVersion": "paris",
|
||||
"outputSelection": {
|
||||
"*": {
|
||||
"*": [
|
||||
"abi",
|
||||
"evm.bytecode",
|
||||
"evm.deployedBytecode",
|
||||
"evm.methodIdentifiers",
|
||||
"metadata"
|
||||
],
|
||||
"": [
|
||||
"ast"
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"imports": [],
|
||||
"versionPragmas": [
|
||||
"^0.8.20"
|
||||
],
|
||||
"artifacts": [
|
||||
"ECDSA"
|
||||
]
|
||||
},
|
||||
"/home/oib/windsurf/aitbc/packages/solidity/aitbc-token/node_modules/@openzeppelin/contracts/utils/cryptography/MessageHashUtils.sol": {
|
||||
"lastModificationDate": 1758948616595,
|
||||
"contentHash": "260f3968eefa3bbd30520cff5384cd93",
|
||||
@@ -197,6 +161,78 @@
|
||||
"MessageHashUtils"
|
||||
]
|
||||
},
|
||||
"/home/oib/windsurf/aitbc/packages/solidity/aitbc-token/node_modules/@openzeppelin/contracts/utils/cryptography/ECDSA.sol": {
|
||||
"lastModificationDate": 1758948616491,
|
||||
"contentHash": "81de029d56aa803972be03c5d277cb6c",
|
||||
"sourceName": "@openzeppelin/contracts/utils/cryptography/ECDSA.sol",
|
||||
"solcConfig": {
|
||||
"version": "0.8.24",
|
||||
"settings": {
|
||||
"optimizer": {
|
||||
"enabled": true,
|
||||
"runs": 200
|
||||
},
|
||||
"evmVersion": "paris",
|
||||
"outputSelection": {
|
||||
"*": {
|
||||
"*": [
|
||||
"abi",
|
||||
"evm.bytecode",
|
||||
"evm.deployedBytecode",
|
||||
"evm.methodIdentifiers",
|
||||
"metadata"
|
||||
],
|
||||
"": [
|
||||
"ast"
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"imports": [],
|
||||
"versionPragmas": [
|
||||
"^0.8.20"
|
||||
],
|
||||
"artifacts": [
|
||||
"ECDSA"
|
||||
]
|
||||
},
|
||||
"/home/oib/windsurf/aitbc/packages/solidity/aitbc-token/node_modules/@openzeppelin/contracts/access/IAccessControl.sol": {
|
||||
"lastModificationDate": 1758948616567,
|
||||
"contentHash": "def1e8f7b6cac577cf2600655bf3bdf8",
|
||||
"sourceName": "@openzeppelin/contracts/access/IAccessControl.sol",
|
||||
"solcConfig": {
|
||||
"version": "0.8.24",
|
||||
"settings": {
|
||||
"optimizer": {
|
||||
"enabled": true,
|
||||
"runs": 200
|
||||
},
|
||||
"evmVersion": "paris",
|
||||
"outputSelection": {
|
||||
"*": {
|
||||
"*": [
|
||||
"abi",
|
||||
"evm.bytecode",
|
||||
"evm.deployedBytecode",
|
||||
"evm.methodIdentifiers",
|
||||
"metadata"
|
||||
],
|
||||
"": [
|
||||
"ast"
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"imports": [],
|
||||
"versionPragmas": [
|
||||
">=0.8.4"
|
||||
],
|
||||
"artifacts": [
|
||||
"IAccessControl"
|
||||
]
|
||||
},
|
||||
"/home/oib/windsurf/aitbc/packages/solidity/aitbc-token/node_modules/@openzeppelin/contracts/utils/Context.sol": {
|
||||
"lastModificationDate": 1758948616483,
|
||||
"contentHash": "67bfbc07588eb8683b3fd8f6f909563e",
|
||||
@@ -271,42 +307,6 @@
|
||||
"ERC165"
|
||||
]
|
||||
},
|
||||
"/home/oib/windsurf/aitbc/packages/solidity/aitbc-token/node_modules/@openzeppelin/contracts/access/IAccessControl.sol": {
|
||||
"lastModificationDate": 1758948616567,
|
||||
"contentHash": "def1e8f7b6cac577cf2600655bf3bdf8",
|
||||
"sourceName": "@openzeppelin/contracts/access/IAccessControl.sol",
|
||||
"solcConfig": {
|
||||
"version": "0.8.24",
|
||||
"settings": {
|
||||
"optimizer": {
|
||||
"enabled": true,
|
||||
"runs": 200
|
||||
},
|
||||
"evmVersion": "paris",
|
||||
"outputSelection": {
|
||||
"*": {
|
||||
"*": [
|
||||
"abi",
|
||||
"evm.bytecode",
|
||||
"evm.deployedBytecode",
|
||||
"evm.methodIdentifiers",
|
||||
"metadata"
|
||||
],
|
||||
"": [
|
||||
"ast"
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"imports": [],
|
||||
"versionPragmas": [
|
||||
">=0.8.4"
|
||||
],
|
||||
"artifacts": [
|
||||
"IAccessControl"
|
||||
]
|
||||
},
|
||||
"/home/oib/windsurf/aitbc/packages/solidity/aitbc-token/node_modules/@openzeppelin/contracts/utils/introspection/IERC165.sol": {
|
||||
"lastModificationDate": 1758948616575,
|
||||
"contentHash": "7074c93b1ea0a122063f26ddd1db1032",
|
||||
@@ -495,42 +495,6 @@
|
||||
"Strings"
|
||||
]
|
||||
},
|
||||
"/home/oib/windsurf/aitbc/packages/solidity/aitbc-token/node_modules/@openzeppelin/contracts/utils/math/SafeCast.sol": {
|
||||
"lastModificationDate": 1758948616611,
|
||||
"contentHash": "2adca1150f58fc6f3d1f0a0f22ee7cca",
|
||||
"sourceName": "@openzeppelin/contracts/utils/math/SafeCast.sol",
|
||||
"solcConfig": {
|
||||
"version": "0.8.24",
|
||||
"settings": {
|
||||
"optimizer": {
|
||||
"enabled": true,
|
||||
"runs": 200
|
||||
},
|
||||
"evmVersion": "paris",
|
||||
"outputSelection": {
|
||||
"*": {
|
||||
"*": [
|
||||
"abi",
|
||||
"evm.bytecode",
|
||||
"evm.deployedBytecode",
|
||||
"evm.methodIdentifiers",
|
||||
"metadata"
|
||||
],
|
||||
"": [
|
||||
"ast"
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"imports": [],
|
||||
"versionPragmas": [
|
||||
"^0.8.20"
|
||||
],
|
||||
"artifacts": [
|
||||
"SafeCast"
|
||||
]
|
||||
},
|
||||
"/home/oib/windsurf/aitbc/packages/solidity/aitbc-token/node_modules/@openzeppelin/contracts/utils/math/Math.sol": {
|
||||
"lastModificationDate": 1758948616595,
|
||||
"contentHash": "5ec781e33d3a9ac91ffdc83d94420412",
|
||||
@@ -608,6 +572,42 @@
|
||||
"SignedMath"
|
||||
]
|
||||
},
|
||||
"/home/oib/windsurf/aitbc/packages/solidity/aitbc-token/node_modules/@openzeppelin/contracts/utils/math/SafeCast.sol": {
|
||||
"lastModificationDate": 1758948616611,
|
||||
"contentHash": "2adca1150f58fc6f3d1f0a0f22ee7cca",
|
||||
"sourceName": "@openzeppelin/contracts/utils/math/SafeCast.sol",
|
||||
"solcConfig": {
|
||||
"version": "0.8.24",
|
||||
"settings": {
|
||||
"optimizer": {
|
||||
"enabled": true,
|
||||
"runs": 200
|
||||
},
|
||||
"evmVersion": "paris",
|
||||
"outputSelection": {
|
||||
"*": {
|
||||
"*": [
|
||||
"abi",
|
||||
"evm.bytecode",
|
||||
"evm.deployedBytecode",
|
||||
"evm.methodIdentifiers",
|
||||
"metadata"
|
||||
],
|
||||
"": [
|
||||
"ast"
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"imports": [],
|
||||
"versionPragmas": [
|
||||
"^0.8.20"
|
||||
],
|
||||
"artifacts": [
|
||||
"SafeCast"
|
||||
]
|
||||
},
|
||||
"/home/oib/windsurf/aitbc/packages/solidity/aitbc-token/node_modules/@openzeppelin/contracts/utils/Panic.sol": {
|
||||
"lastModificationDate": 1758948616603,
|
||||
"contentHash": "2133dc13536b4a6a98131e431fac59e1",
|
||||
|
||||
Reference in New Issue
Block a user