@awarizon/sdk 2.2.0 → 2.2.1
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/dist/index.js +11 -10
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +11 -10
- package/dist/index.mjs.map +1 -1
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -298,7 +298,7 @@ var awarizonRpc = {
|
|
|
298
298
|
// Campaign endpoints
|
|
299
299
|
getCampaign: {
|
|
300
300
|
description: "Get campaign details by campaign ID (0x hex)",
|
|
301
|
-
params: [{ name: "campaign_id", type: "
|
|
301
|
+
params: [{ name: "campaign_id", type: "H256" }],
|
|
302
302
|
type: "Json"
|
|
303
303
|
},
|
|
304
304
|
getActiveCampaignCount: {
|
|
@@ -308,7 +308,7 @@ var awarizonRpc = {
|
|
|
308
308
|
},
|
|
309
309
|
getCampaignDeliveryStatus: {
|
|
310
310
|
description: "Get delivery progress for a campaign",
|
|
311
|
-
params: [{ name: "campaign_id", type: "
|
|
311
|
+
params: [{ name: "campaign_id", type: "H256" }],
|
|
312
312
|
type: "Json"
|
|
313
313
|
},
|
|
314
314
|
// Inbox endpoints
|
|
@@ -600,8 +600,8 @@ function parsePlanckString(value) {
|
|
|
600
600
|
// src/rpc.ts
|
|
601
601
|
async function getDeveloperProfile(api, account) {
|
|
602
602
|
const result = await api.rpc.awarizon.getDeveloperProfile(account);
|
|
603
|
+
if (result.isEmpty) return null;
|
|
603
604
|
const json = result.toJSON();
|
|
604
|
-
if (!json) return null;
|
|
605
605
|
return {
|
|
606
606
|
...json,
|
|
607
607
|
staked_riz: BigInt(json.staked_riz ?? "0"),
|
|
@@ -618,8 +618,8 @@ async function getDeveloperManifests(api, account) {
|
|
|
618
618
|
}
|
|
619
619
|
async function getCampaign(api, campaignId) {
|
|
620
620
|
const result = await api.rpc.awarizon.getCampaign(campaignId);
|
|
621
|
+
if (result.isEmpty) return null;
|
|
621
622
|
const json = result.toJSON();
|
|
622
|
-
if (!json) return null;
|
|
623
623
|
return {
|
|
624
624
|
...json,
|
|
625
625
|
max_deliveries: BigInt(json.max_deliveries ?? "0"),
|
|
@@ -633,8 +633,8 @@ async function getActiveCampaignCount(api) {
|
|
|
633
633
|
}
|
|
634
634
|
async function getCampaignDeliveryStatus(api, campaignId) {
|
|
635
635
|
const result = await api.rpc.awarizon.getCampaignDeliveryStatus(campaignId);
|
|
636
|
+
if (result.isEmpty) return null;
|
|
636
637
|
const json = result.toJSON();
|
|
637
|
-
if (!json) return null;
|
|
638
638
|
return {
|
|
639
639
|
current_deliveries: BigInt(json.current_deliveries ?? "0"),
|
|
640
640
|
max_deliveries: BigInt(json.max_deliveries ?? "0"),
|
|
@@ -648,9 +648,8 @@ async function getInboxCount(api, wallet) {
|
|
|
648
648
|
}
|
|
649
649
|
async function getInboxRecord(api, wallet, recordId) {
|
|
650
650
|
const result = await api.rpc.awarizon.getInboxRecord(wallet, recordId);
|
|
651
|
-
|
|
652
|
-
|
|
653
|
-
return json;
|
|
651
|
+
if (result.isEmpty) return null;
|
|
652
|
+
return result.toJSON();
|
|
654
653
|
}
|
|
655
654
|
async function getWalletTargetingProfile(api, wallet) {
|
|
656
655
|
const result = await api.rpc.awarizon.getWalletTargetingProfile(wallet);
|
|
@@ -719,8 +718,8 @@ async function getVestingSchedule(api, account) {
|
|
|
719
718
|
}
|
|
720
719
|
async function getIdentity(api, account) {
|
|
721
720
|
const result = await api.rpc.awarizon.getIdentity(account, null);
|
|
721
|
+
if (result.isEmpty) return null;
|
|
722
722
|
const json = result.toJSON();
|
|
723
|
-
if (!json) return null;
|
|
724
723
|
return {
|
|
725
724
|
account: json.account,
|
|
726
725
|
rizName: json.riz_name ?? null,
|
|
@@ -742,8 +741,8 @@ async function getIdentity(api, account) {
|
|
|
742
741
|
}
|
|
743
742
|
async function lookupName(api, name) {
|
|
744
743
|
const result = await api.rpc.awarizon.lookupName(name, null);
|
|
744
|
+
if (result.isEmpty) return null;
|
|
745
745
|
const json = result.toJSON();
|
|
746
|
-
if (!json) return null;
|
|
747
746
|
const identity = json.identity ? await getIdentity(api, json.account) : null;
|
|
748
747
|
return {
|
|
749
748
|
rizName: json.riz_name,
|
|
@@ -772,6 +771,7 @@ async function getTotalIdentities(api) {
|
|
|
772
771
|
}
|
|
773
772
|
async function getDexPool(api, assetA, assetB) {
|
|
774
773
|
const result = await api.rpc.dex.getPool(assetA, assetB);
|
|
774
|
+
if (result.isEmpty) return null;
|
|
775
775
|
return result.toJSON();
|
|
776
776
|
}
|
|
777
777
|
async function getDexQuote(api, assetIn, assetOut, amountIn) {
|
|
@@ -780,6 +780,7 @@ async function getDexQuote(api, assetIn, assetOut, amountIn) {
|
|
|
780
780
|
}
|
|
781
781
|
async function getDexTwap(api, assetA, assetB) {
|
|
782
782
|
const result = await api.rpc.dex.getTwap(assetA, assetB);
|
|
783
|
+
if (result.isEmpty) return null;
|
|
783
784
|
return result.toJSON();
|
|
784
785
|
}
|
|
785
786
|
async function getAllDexPools(api, limit = 50) {
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../src/client.ts","../src/customTypes.ts","../src/constants.ts","../src/utils.ts","../src/rpc.ts","../src/extrinsics/developer.ts","../src/extrinsics/manifests.ts","../src/extrinsics/campaigns.ts","../src/extrinsics/inbox.ts","../src/extrinsics/targeting.ts","../src/extrinsics/validators.ts","../src/extrinsics/assets.ts","../src/wallet.ts","../src/errors.ts"],"sourcesContent":["// @awarizon/sdk — main entry point\n\n// Client\nexport { AwarizonClient, connect } from './client'\n\n// Types\nexport type {\n AppCategory,\n CampaignStatus,\n InboxRecordStatus,\n DeveloperStatus,\n TransactionType,\n TargetingCriteria,\n DeveloperProfile,\n AppManifest,\n Campaign,\n InboxRecord,\n ValidatorInfo,\n Delegation,\n ValidatorPerformance,\n EngagementEvent,\n NetworkStats,\n CampaignDeliveryStatus,\n TransactionSummary,\n WalletTargetingProfile,\n ValidatorPerformanceResponse,\n TokenStats,\n VestingSchedule,\n ChainType,\n LinkStatus,\n LinkedAddress,\n IdentityRecord,\n NameLookup,\n DexAssetWire,\n DexPoolResponse,\n DexQuoteResponse,\n DexTwapResponse,\n} from './types'\n\n// Constants\nexport {\n PLANCK,\n RIZ,\n MICRO_RIZ,\n MILLI_RIZ,\n DEFAULT_ENDPOINT,\n DEFAULT_INDEXER_ENDPOINT,\n CHAIN_NAME,\n BLOCK_TIME_SECONDS,\n EPOCH_LENGTH_BLOCKS,\n MIN_SESSION_SECONDS,\n MIN_INTERACTIONS,\n ENGAGEMENT_COOLDOWN_HOURS,\n MAX_ENGAGEMENT_EVENTS_PER_DAY,\n MIN_CAMPAIGN_DURATION_DAYS,\n MAX_CAMPAIGN_DURATION_DAYS,\n DEFAULT_CAMPAIGN_DURATION_DAYS,\n DEVELOPER_MIN_TENURE_DAYS,\n MAX_TARGETING_DIMENSIONS,\n MAX_REGION_CODES_PER_CAMPAIGN,\n MAX_CATEGORY_HISTORY_ENTRIES,\n GENESIS_VALIDATORS,\n TARGET_VALIDATORS,\n PERF_WEIGHT_UPTIME_BPS,\n PERF_WEIGHT_FINALITY_BPS,\n PERF_WEIGHT_BLOCKS_BPS,\n PERF_WEIGHT_SLASH_BPS,\n} from './constants'\n\n// Utils\nexport {\n formatRiz,\n parseRiz,\n hexToBytes,\n bytesToHex,\n generateCampaignId,\n isValidAddress,\n blocksToTime,\n parsePlanckString,\n} from './utils'\n\n// Custom types registry (for advanced usage)\nexport { awarizonTypes, awarizonRpc } from './customTypes'\n\n// RPC\nexport {\n getDeveloperProfile,\n getDeveloperCampaigns,\n getDeveloperManifests,\n getCampaign,\n getActiveCampaignCount,\n getCampaignDeliveryStatus,\n getInboxCount,\n getInboxRecord,\n getWalletTargetingProfile,\n checkCampaignMatch,\n getActiveValidators,\n getValidatorCount,\n getValidatorPerformance,\n getNetworkStats,\n getTokenStats,\n getRecentTransactions,\n getBlockTransactions,\n getVestingSchedule,\n getIdentity,\n lookupName,\n getLinkedAddresses,\n isNameAvailable,\n getTotalIdentities,\n getDexPool,\n getDexQuote,\n getDexTwap,\n getAllDexPools,\n getDexFeeDestination,\n getDexTotalBurned,\n} from './rpc'\n\n// Extrinsics\nexport * from './extrinsics'\n\n// Wallet helpers\nexport {\n createKeyring,\n keypairFromMnemonic,\n keypairFromSeed,\n aliceKeypair,\n bobKeypair,\n signAndSend,\n} from './wallet'\n\n// Errors\nexport {\n AwarizonError,\n DeveloperNotFoundError,\n DeveloperAlreadyRegisteredError,\n DeveloperNotVerifiedError,\n DeveloperSuspendedError,\n ManifestNotFoundError,\n ManifestAlreadyRegisteredError,\n ManifestLimitReachedError,\n CampaignNotFoundError,\n CampaignNotActiveError,\n CampaignExpiredError,\n CampaignDeliveryLimitReachedError,\n InboxRecordNotFoundError,\n InboxAlreadyDeliveredError,\n InboxFullError,\n EngagementCooldownActiveError,\n EngagementDailyLimitReachedError,\n EngagementInvalidError,\n InsufficientStakeError,\n InsufficientBalanceError,\n TargetingDimensionLimitExceededError,\n InvalidManifestHashError,\n InvalidCampaignIdError,\n UnauthorizedError,\n EpochNotReadyError,\n NotExpiredYetError,\n ResetNotReadyError,\n ValidatorAlreadyRegisteredError,\n ValidatorNotFoundError,\n RegionCapExceededError,\n CountryCapExceededError,\n DelegationNotFoundError,\n CannotDelegateToSelfError,\n ValidatorNotActiveError,\n AlreadyDelegatedError,\n MaxValidatorsReachedError,\n parseChainError,\n} from './errors'\n","import { ApiPromise, WsProvider } from '@polkadot/api'\nimport { awarizonRpc, awarizonTypes } from './customTypes'\nimport { DEFAULT_ENDPOINT } from './constants'\n\nexport class AwarizonClient {\n private api: ApiPromise | null = null\n private endpoint: string\n // In-flight connection attempt. Callers that arrive while a connect() is\n // already underway await this instead of racing to create their own\n // ApiPromise/WsProvider — without it, several hooks calling connect()\n // concurrently on mount would each open a separate connection.\n private connecting: Promise<ApiPromise> | null = null\n\n constructor(endpoint: string = DEFAULT_ENDPOINT) {\n this.endpoint = endpoint\n }\n\n async connect(): Promise<ApiPromise> {\n if (this.api?.isConnected) return this.api\n if (this.connecting) return this.connecting\n\n this.connecting = (async () => {\n const provider = new WsProvider(this.endpoint)\n const api = await ApiPromise.create({\n provider,\n types: awarizonTypes,\n rpc: awarizonRpc,\n })\n await api.isReady\n this.api = api\n return api\n })()\n\n try {\n return await this.connecting\n } finally {\n this.connecting = null\n }\n }\n\n async disconnect(): Promise<void> {\n if (this.api) {\n await this.api.disconnect()\n this.api = null\n }\n }\n\n getApi(): ApiPromise {\n if (!this.api?.isConnected) {\n throw new Error('Not connected. Call connect() first.')\n }\n return this.api\n }\n\n async subscribeNewBlocks(\n callback: (blockNumber: number, blockHash: string) => void\n ): Promise<() => void> {\n const api = this.getApi()\n const unsub = await api.rpc.chain.subscribeNewHeads((header) => {\n callback(header.number.toNumber(), header.hash.toHex())\n })\n return unsub as unknown as () => void\n }\n\n async getBalance(address: string): Promise<bigint> {\n const api = this.getApi()\n const account = await api.query.system.account(address)\n return BigInt((account as any).data.free.toString())\n }\n}\n\nexport async function connect(\n endpoint: string = DEFAULT_ENDPOINT\n): Promise<AwarizonClient> {\n const client = new AwarizonClient(endpoint)\n await client.connect()\n return client\n}\n","// Custom SCALE type registry and RPC definitions for @polkadot/api.\n// Enum variants and struct field names derived from:\n// pallets/awarizon-types/src/lib.rs\n// pallets/awarizon-consensus/src/lib.rs\n// node/src/awarizon_rpc.rs\n\nexport const awarizonTypes = {\n // pallets/awarizon-types/src/lib.rs — enum AppCategory\n AppCategory: {\n _enum: [\n 'DeFi',\n 'Gaming',\n 'Social',\n 'Productivity',\n 'Infrastructure',\n 'DigitalAssets',\n 'DeveloperTools',\n 'Education',\n ],\n },\n\n // pallets/awarizon-types/src/lib.rs — enum CampaignStatus\n CampaignStatus: {\n _enum: ['Pending', 'Active', 'Expired', 'Terminated'],\n },\n\n // pallets/awarizon-types/src/lib.rs — enum InboxRecordStatus\n InboxRecordStatus: {\n _enum: ['Pending', 'Delivered', 'Dismissed', 'Engaged'],\n },\n\n // pallets/awarizon-types/src/lib.rs — enum DeveloperStatus\n DeveloperStatus: {\n _enum: ['Unverified', 'Verified', 'Suspended'],\n },\n\n // pallets/awarizon-types/src/lib.rs — enum TransactionType\n TransactionType: {\n _enum: ['Financial', 'Distribution', 'System'],\n },\n\n // pallets/awarizon-types/src/lib.rs — struct TargetingCriteria\n TargetingCriteria: {\n wallet_age_min: 'Option<u32>',\n wallet_age_max: 'Option<u32>',\n riz_balance_min: 'Option<u128>',\n riz_balance_max: 'Option<u128>',\n activity_min: 'Option<u32>',\n activity_max: 'Option<u32>',\n region_codes: 'Vec<u8>',\n category_history: 'Vec<AppCategory>',\n custom_logic_hash: 'Option<H256>',\n },\n\n // pallets/awarizon-types/src/lib.rs — struct DeveloperProfile<AccountId, BlockNumber>\n DeveloperProfile: {\n account: 'AccountId',\n staked_riz: 'u128',\n status: 'DeveloperStatus',\n first_distribution_block: 'Option<u32>',\n violation_count: 'u32',\n total_campaigns: 'u32',\n total_deliveries: 'u64',\n },\n\n // pallets/awarizon-types/src/lib.rs — struct AppManifest<AccountId, BlockNumber>\n AppManifest: {\n manifest_hash: 'H256',\n developer: 'AccountId',\n category: 'AppCategory',\n registered_at: 'u32',\n metadata_uri: 'Vec<u8>',\n },\n\n // pallets/awarizon-types/src/lib.rs — struct Campaign<AccountId, BlockNumber>\n Campaign: {\n campaign_id: 'H256',\n developer: 'AccountId',\n manifest_hash: 'H256',\n targeting: 'TargetingCriteria',\n status: 'CampaignStatus',\n created_at: 'u32',\n expires_at: 'u32',\n max_deliveries: 'u64',\n current_deliveries: 'u64',\n storage_fee_paid: 'u128',\n },\n\n // pallets/awarizon-types/src/lib.rs — struct InboxRecord<AccountId, BlockNumber>\n InboxRecord: {\n record_id: 'H256',\n campaign_id: 'H256',\n developer: 'AccountId',\n manifest_hash: 'H256',\n category: 'AppCategory',\n status: 'InboxRecordStatus',\n delivered_at: 'u32',\n engaged_at: 'Option<u32>',\n reward_claimed: 'bool',\n },\n\n // pallets/awarizon-consensus/src/lib.rs — struct ValidatorInfo<AccountId>\n ValidatorInfo: {\n account: 'AccountId',\n self_stake: 'u128',\n delegated_stake: 'u128',\n region_code: 'u8',\n country_code: 'u8',\n uptime_bps: 'u32',\n finality_bps: 'u32',\n blocks_bps: 'u32',\n slash_count: 'u32',\n is_active: 'bool',\n epoch_registered: 'u64',\n },\n\n // pallets/awarizon-consensus/src/lib.rs — struct Delegation<AccountId>\n Delegation: {\n delegator: 'AccountId',\n validator: 'AccountId',\n amount: 'u128',\n epoch_delegated: 'u64',\n },\n}\n\n// RPC method definitions for @polkadot/api.\n// All methods are in the \"awarizon\" namespace and return JSON (not SCALE).\n// Wire names from: node/src/awarizon_rpc.rs #[method(name = \"...\")]\nexport const awarizonRpc = {\n awarizon: {\n // Developer endpoints\n getDeveloperProfile: {\n description: 'Get developer profile by SS58 account address',\n params: [{ name: 'account', type: 'Text' }],\n type: 'Json',\n },\n getDeveloperCampaigns: {\n description: 'Get all campaign IDs for a developer',\n params: [{ name: 'account', type: 'Text' }],\n type: 'Vec<Text>',\n },\n getDeveloperManifests: {\n description: 'Get all manifest hashes for a developer',\n params: [{ name: 'account', type: 'Text' }],\n type: 'Vec<Text>',\n },\n\n // Campaign endpoints\n getCampaign: {\n description: 'Get campaign details by campaign ID (0x hex)',\n params: [{ name: 'campaign_id', type: 'Text' }],\n type: 'Json',\n },\n getActiveCampaignCount: {\n description: 'Get the number of currently active campaigns',\n params: [],\n type: 'u64',\n },\n getCampaignDeliveryStatus: {\n description: 'Get delivery progress for a campaign',\n params: [{ name: 'campaign_id', type: 'Text' }],\n type: 'Json',\n },\n\n // Inbox endpoints\n getInboxCount: {\n description: 'Get number of inbox records for a wallet',\n params: [{ name: 'wallet', type: 'Text' }],\n type: 'u32',\n },\n getInboxRecord: {\n description: 'Get a specific inbox record by wallet and record ID',\n params: [\n { name: 'wallet', type: 'Text' },\n { name: 'record_id', type: 'Text' },\n ],\n type: 'Json',\n },\n\n // Targeting endpoints\n getWalletTargetingProfile: {\n description: 'Get pre-computed targeting profile for a wallet',\n params: [{ name: 'wallet', type: 'Text' }],\n type: 'Json',\n },\n checkCampaignMatch: {\n description: 'Check cached targeting match result for (campaign, wallet)',\n params: [\n { name: 'campaign_id', type: 'Text' },\n { name: 'wallet', type: 'Text' },\n ],\n type: 'bool',\n },\n\n // Validator endpoints\n getActiveValidators: {\n description: 'Get SS58 addresses of all active validators',\n params: [],\n type: 'Vec<Text>',\n },\n getValidatorCount: {\n description: 'Get total number of active validators',\n params: [],\n type: 'u32',\n },\n getValidatorPerformance: {\n description: 'Get performance metrics for a validator',\n params: [{ name: 'account', type: 'Text' }],\n type: 'Json',\n },\n\n // Network stats endpoints\n getNetworkStats: {\n description: 'Get Awarizon network statistics',\n params: [],\n type: 'Json',\n },\n getTokenStats: {\n description: 'Get token issuance and engagement pool statistics',\n params: [],\n type: 'Json',\n },\n getRecentTransactions: {\n description: 'Get recent transactions across the chain',\n params: [],\n type: 'Json',\n },\n getBlockTransactions: {\n description: 'Get all transactions in a specific block',\n params: [{ name: 'block_number', type: 'u32' }],\n type: 'Json',\n },\n\n // Identity endpoints\n getIdentity: {\n description: 'Get identity record for an account',\n params: [\n { name: 'account', type: 'Text' },\n { name: 'at', type: 'Option<Hash>' },\n ],\n type: 'Json',\n },\n lookupName: {\n description: 'Resolve a .riz name to an account and identity',\n params: [\n { name: 'name', type: 'Text' },\n { name: 'at', type: 'Option<Hash>' },\n ],\n type: 'Json',\n },\n isNameAvailable: {\n description: 'Check if a .riz name is available to register',\n params: [\n { name: 'name', type: 'Text' },\n { name: 'at', type: 'Option<Hash>' },\n ],\n type: 'bool',\n },\n getTotalIdentities: {\n description: 'Get total number of registered identities',\n params: [{ name: 'at', type: 'Option<Hash>' }],\n type: 'u32',\n },\n\n // Links endpoints\n getLinkedAddresses: {\n description: 'Get all linked external addresses for an account',\n params: [\n { name: 'account', type: 'Text' },\n { name: 'at', type: 'Option<Hash>' },\n ],\n type: 'Json',\n },\n },\n\n // DEX endpoints — separate \"dex\" namespace, unlike the rest of the\n // RPC surface which lives under \"awarizon\". Matches the wire names\n // in node/src/awarizon_rpc.rs (dex_getPool, dex_getQuote, ...).\n // Asset params/returns are serde JSON (a bare string \"native\" or a\n // { token: n } object), not SCALE — declared as 'Json' so\n // @polkadot/api passes them through unchanged instead of trying to\n // SCALE-encode/decode them.\n dex: {\n getPool: {\n description: 'Get pool info for an asset pair',\n params: [\n { name: 'asset_a', type: 'Json' },\n { name: 'asset_b', type: 'Json' },\n ],\n type: 'Json',\n },\n getQuote: {\n description: 'Get a price quote for a swap',\n params: [\n { name: 'asset_in', type: 'Json' },\n { name: 'asset_out', type: 'Json' },\n { name: 'amount_in', type: 'Text' },\n ],\n type: 'Json',\n },\n getTwap: {\n description: 'Get TWAP price accumulator data for a pool',\n params: [\n { name: 'asset_a', type: 'Json' },\n { name: 'asset_b', type: 'Json' },\n ],\n type: 'Json',\n },\n getAllPools: {\n description: 'Get all DEX pools, up to limit',\n params: [{ name: 'limit', type: 'u32' }],\n type: 'Json',\n },\n getFeeDestination: {\n description: 'Get protocol fee destination (\"burn\" or \"treasury\")',\n params: [],\n type: 'Text',\n },\n getTotalBurned: {\n description: 'Get total protocol fees burned, as planck decimal string',\n params: [],\n type: 'Text',\n },\n },\n}\n","// Protocol constants derived from pallets/awarizon-types/src/constants.rs\n\n// ----------------------------------------------------------------\n// Token denomination\n// ----------------------------------------------------------------\nexport const PLANCK = 1n\nexport const RIZ = 1_000_000_000_000n // 10^12 planck\nexport const MICRO_RIZ = 1_000_000n // 10^6 planck\nexport const MILLI_RIZ = 1_000_000_000n // 10^9 planck\n\n// ----------------------------------------------------------------\n// Network defaults\n// ----------------------------------------------------------------\nexport const DEFAULT_ENDPOINT = 'wss://rpc.awarizon.com'\nexport const DEFAULT_HTTP_ENDPOINT = 'https://rpc.awarizon.com'\nexport const DEFAULT_INDEXER_ENDPOINT = 'https://index.awarizon.com'\nexport const CHAIN_NAME = 'Awarizon'\n\n// ----------------------------------------------------------------\n// Consensus\n// ----------------------------------------------------------------\nexport const GENESIS_VALIDATORS = 51\nexport const TARGET_VALIDATORS = 121\nexport const BLOCK_TIME_SECONDS = 3\nexport const EPOCH_LENGTH_BLOCKS = 28_800\n\n// ----------------------------------------------------------------\n// Campaign rules\n// ----------------------------------------------------------------\nexport const MIN_CAMPAIGN_DURATION_DAYS = 1\nexport const MAX_CAMPAIGN_DURATION_DAYS = 90\nexport const DEFAULT_CAMPAIGN_DURATION_DAYS = 30\n\n// ----------------------------------------------------------------\n// Engagement rules\n// ----------------------------------------------------------------\nexport const MIN_SESSION_SECONDS = 120\nexport const MIN_INTERACTIONS = 5\nexport const ENGAGEMENT_COOLDOWN_HOURS = 24\nexport const MAX_ENGAGEMENT_EVENTS_PER_DAY = 10\n\n// ----------------------------------------------------------------\n// Targeting limits\n// ----------------------------------------------------------------\nexport const MAX_TARGETING_DIMENSIONS = 6\nexport const MAX_REGION_CODES_PER_CAMPAIGN = 64\nexport const MAX_CATEGORY_HISTORY_ENTRIES = 8\n\n// ----------------------------------------------------------------\n// Developer verification\n// ----------------------------------------------------------------\nexport const DEVELOPER_MIN_TENURE_DAYS = 30\n\n// ----------------------------------------------------------------\n// Validator performance weights (basis points, sum = 10000)\n// ----------------------------------------------------------------\nexport const PERF_WEIGHT_UPTIME_BPS = 5_000\nexport const PERF_WEIGHT_FINALITY_BPS = 2_500\nexport const PERF_WEIGHT_BLOCKS_BPS = 1_500\nexport const PERF_WEIGHT_SLASH_BPS = 1_000\nexport const PERF_MULTIPLIER_MIN_BPS = 5_000\nexport const PERF_MULTIPLIER_MAX_BPS = 12_500\n\n// ----------------------------------------------------------------\n// Geographic caps (basis points)\n// ----------------------------------------------------------------\nexport const MAX_VALIDATORS_PER_REGION_BPS = 2_000 // 20%\nexport const MAX_VALIDATORS_PER_COUNTRY_BPS = 1_000 // 10%\n","import { RIZ } from './constants'\n\n// Convert planck to RIZ display string e.g. 1_000_000_000_000n → \"1.0000\"\nexport function formatRiz(planck: bigint, decimals = 4): string {\n const whole = planck / RIZ\n const remainder = planck % RIZ\n const decStr = remainder.toString().padStart(12, '0').slice(0, decimals)\n return `${whole}.${decStr}`\n}\n\n// Convert RIZ amount string to planck bigint e.g. \"1.5\" → 1_500_000_000_000n\nexport function parseRiz(riz: string): bigint {\n const [whole, decimal = ''] = riz.split('.')\n const paddedDecimal = decimal.padEnd(12, '0').slice(0, 12)\n return BigInt(whole) * RIZ + BigInt(paddedDecimal)\n}\n\n// Convert hex string to Uint8Array\nexport function hexToBytes(hex: string): Uint8Array {\n const clean = hex.replace('0x', '')\n return new Uint8Array(\n clean.match(/.{1,2}/g)?.map(b => parseInt(b, 16)) ?? []\n )\n}\n\n// Convert Uint8Array to hex string with 0x prefix\nexport function bytesToHex(bytes: Uint8Array): string {\n return '0x' + Array.from(bytes)\n .map(b => b.toString(16).padStart(2, '0'))\n .join('')\n}\n\n// Generate a campaign ID from manifest hash + current timestamp\nexport function generateCampaignId(manifestHash: string): string {\n const timestamp = Date.now().toString(16).padStart(16, '0')\n const hashPart = manifestHash.replace('0x', '').slice(0, 48)\n return '0x' + hashPart + timestamp\n}\n\n// Basic SS58 address length check\nexport function isValidAddress(address: string): boolean {\n return address.length >= 46 && address.length <= 48\n}\n\n// Format a block count to a human-readable time estimate (3s block time)\nexport function blocksToTime(blocks: number): string {\n const seconds = blocks * 3\n if (seconds < 60) return `${seconds}s`\n if (seconds < 3600) return `${Math.floor(seconds / 60)}m`\n if (seconds < 86400) return `${Math.floor(seconds / 3600)}h`\n return `${Math.floor(seconds / 86400)}d`\n}\n\n// Parse a u128-as-string from RPC into bigint\nexport function parsePlanckString(value: string): bigint {\n return BigInt(value)\n}\n","// Typed wrappers for all 15 Awarizon custom RPC methods.\n// Wire names and return shapes derived from node/src/awarizon_rpc.rs.\n\nimport { ApiPromise } from '@polkadot/api'\nimport type {\n NetworkStats,\n CampaignDeliveryStatus,\n WalletTargetingProfile,\n ValidatorPerformanceResponse,\n TokenStats,\n DeveloperProfile,\n Campaign,\n InboxRecord,\n TransactionSummary,\n VestingSchedule,\n IdentityRecord,\n NameLookup,\n LinkedAddress,\n ChainType,\n LinkStatus,\n DexAssetWire,\n DexPoolResponse,\n DexQuoteResponse,\n DexTwapResponse,\n} from './types'\n\n// ----------------------------------------------------------------\n// Developer endpoints\n// ----------------------------------------------------------------\n\nexport async function getDeveloperProfile(\n api: ApiPromise,\n account: string\n): Promise<DeveloperProfile | null> {\n const result = await (api.rpc as any).awarizon.getDeveloperProfile(account)\n const json = result.toJSON()\n if (!json) return null\n return {\n ...json,\n staked_riz: BigInt(json.staked_riz ?? '0'),\n total_deliveries: BigInt(json.total_deliveries ?? '0'),\n } as DeveloperProfile\n}\n\nexport async function getDeveloperCampaigns(\n api: ApiPromise,\n account: string\n): Promise<string[]> {\n const result = await (api.rpc as any).awarizon.getDeveloperCampaigns(account)\n return result.toJSON() as string[]\n}\n\nexport async function getDeveloperManifests(\n api: ApiPromise,\n account: string\n): Promise<string[]> {\n const result = await (api.rpc as any).awarizon.getDeveloperManifests(account)\n return result.toJSON() as string[]\n}\n\n// ----------------------------------------------------------------\n// Campaign endpoints\n// ----------------------------------------------------------------\n\nexport async function getCampaign(\n api: ApiPromise,\n campaignId: string\n): Promise<Campaign | null> {\n const result = await (api.rpc as any).awarizon.getCampaign(campaignId)\n const json = result.toJSON()\n if (!json) return null\n return {\n ...json,\n max_deliveries: BigInt(json.max_deliveries ?? '0'),\n current_deliveries: BigInt(json.current_deliveries ?? '0'),\n storage_fee_paid: BigInt(json.storage_fee_paid ?? '0'),\n } as Campaign\n}\n\nexport async function getActiveCampaignCount(api: ApiPromise): Promise<bigint> {\n const result = await (api.rpc as any).awarizon.getActiveCampaignCount()\n return BigInt(result.toString())\n}\n\nexport async function getCampaignDeliveryStatus(\n api: ApiPromise,\n campaignId: string\n): Promise<CampaignDeliveryStatus | null> {\n const result = await (api.rpc as any).awarizon.getCampaignDeliveryStatus(campaignId)\n const json = result.toJSON()\n if (!json) return null\n return {\n current_deliveries: BigInt(json.current_deliveries ?? '0'),\n max_deliveries: BigInt(json.max_deliveries ?? '0'),\n remaining: BigInt(json.remaining ?? '0'),\n percentage_used: json.percentage_used as number,\n }\n}\n\n// ----------------------------------------------------------------\n// Inbox endpoints\n// ----------------------------------------------------------------\n\nexport async function getInboxCount(\n api: ApiPromise,\n wallet: string\n): Promise<number> {\n const result = await (api.rpc as any).awarizon.getInboxCount(wallet)\n return result.toNumber()\n}\n\nexport async function getInboxRecord(\n api: ApiPromise,\n wallet: string,\n recordId: string\n): Promise<InboxRecord | null> {\n const result = await (api.rpc as any).awarizon.getInboxRecord(wallet, recordId)\n const json = result.toJSON()\n if (!json) return null\n return json as InboxRecord\n}\n\n// ----------------------------------------------------------------\n// Targeting endpoints\n// ----------------------------------------------------------------\n\nexport async function getWalletTargetingProfile(\n api: ApiPromise,\n wallet: string\n): Promise<WalletTargetingProfile> {\n const result = await (api.rpc as any).awarizon.getWalletTargetingProfile(wallet)\n return result.toJSON() as WalletTargetingProfile\n}\n\nexport async function checkCampaignMatch(\n api: ApiPromise,\n campaignId: string,\n wallet: string\n): Promise<boolean> {\n const result = await (api.rpc as any).awarizon.checkCampaignMatch(campaignId, wallet)\n return result.isTrue\n}\n\n// ----------------------------------------------------------------\n// Validator endpoints\n// ----------------------------------------------------------------\n\nexport async function getActiveValidators(api: ApiPromise): Promise<string[]> {\n const result = await (api.rpc as any).awarizon.getActiveValidators()\n return result.toJSON() as string[]\n}\n\nexport async function getValidatorCount(api: ApiPromise): Promise<number> {\n const result = await (api.rpc as any).awarizon.getValidatorCount()\n return result.toNumber()\n}\n\nexport async function getValidatorPerformance(\n api: ApiPromise,\n account: string\n): Promise<ValidatorPerformanceResponse | null> {\n const result = await (api.rpc as any).awarizon.getValidatorPerformance(account)\n return result.toJSON() as ValidatorPerformanceResponse | null\n}\n\n// ----------------------------------------------------------------\n// Network stats endpoints\n// ----------------------------------------------------------------\n\nexport async function getNetworkStats(api: ApiPromise): Promise<NetworkStats> {\n const result = await (api.rpc as any).awarizon.getNetworkStats()\n const json = result.toJSON() as Record<string, unknown>\n return {\n total_wallets: BigInt(String(json.total_wallets ?? '0')),\n total_deliveries: BigInt(String(json.total_deliveries ?? '0')),\n active_campaigns: BigInt(String(json.active_campaigns ?? '0')),\n total_staked: String(json.total_staked ?? '0'),\n current_epoch: BigInt(String(json.current_epoch ?? '0')),\n inbox_reserve_balance: String(json.inbox_reserve_balance ?? '0'),\n total_extrinsics: Number(json.total_extrinsics ?? 0),\n circulating_supply: String(json.circulating_supply ?? '0'),\n non_circulating_supply: String(json.non_circulating_supply ?? '0'),\n }\n}\n\nexport async function getTokenStats(api: ApiPromise): Promise<TokenStats> {\n const result = await (api.rpc as any).awarizon.getTokenStats()\n return result.toJSON() as TokenStats\n}\n\nexport async function getRecentTransactions(\n api: ApiPromise\n): Promise<TransactionSummary[]> {\n const result = await (api.rpc as any).awarizon.getRecentTransactions()\n return (result.toJSON() as any[]).map((r: any) => ({\n block_number: Number(r.block_number ?? 0),\n extrinsic_index: Number(r.extrinsic_index ?? 0),\n success: Boolean(r.success),\n }))\n}\n\nexport async function getBlockTransactions(\n api: ApiPromise,\n blockNumber: number\n): Promise<TransactionSummary[]> {\n const result = await (api.rpc as any).awarizon.getBlockTransactions(blockNumber)\n return (result.toJSON() as any[]).map((r: any) => ({\n block_number: Number(r.block_number ?? 0),\n extrinsic_index: Number(r.extrinsic_index ?? 0),\n success: Boolean(r.success),\n }))\n}\n\nexport async function getVestingSchedule(\n api: ApiPromise,\n account: string\n): Promise<VestingSchedule[]> {\n const result = await (api.query as any).vesting.vesting(account)\n const json = result.toJSON()\n if (!json || !Array.isArray(json)) return []\n return json.map((v: any) => ({\n locked: String(v.locked ?? v.Locked ?? '0'),\n per_block: String(v.perBlock ?? v.per_block ?? '0'),\n starting_block: Number(v.startingBlock ?? v.starting_block ?? 0),\n }))\n}\n\n// ----------------------------------------------------------------\n// Identity endpoints\n// ----------------------------------------------------------------\n\nexport async function getIdentity(\n api: ApiPromise,\n account: string\n): Promise<IdentityRecord | null> {\n const result = await (api.rpc as any).awarizon.getIdentity(account, null)\n const json = result.toJSON()\n if (!json) return null\n return {\n account: json.account,\n rizName: json.riz_name ?? null,\n rizNameFull: json.riz_name ? json.riz_name + '.riz' : null,\n displayName: json.display_name ?? null,\n bio: json.bio ?? null,\n avatarUri: json.avatar_uri ?? null,\n website: json.website ?? null,\n registeredAt: Number(json.registered_at ?? 0),\n verified: Boolean(json.verified),\n reputationScore: Number(json.reputation_score ?? 0),\n linkedAddresses: (json.linked_addresses ?? []).map((la: any) => ({\n chain: la.chain as ChainType,\n address: la.address as string,\n status: la.status as LinkStatus,\n linkedAt: Number(la.linked_at ?? 0),\n })),\n }\n}\n\nexport async function lookupName(\n api: ApiPromise,\n name: string\n): Promise<NameLookup | null> {\n const result = await (api.rpc as any).awarizon.lookupName(name, null)\n const json = result.toJSON()\n if (!json) return null\n const identity = json.identity ? await getIdentity(api, json.account) : null\n return {\n rizName: json.riz_name as string,\n account: json.account as string,\n identity,\n }\n}\n\nexport async function getLinkedAddresses(\n api: ApiPromise,\n account: string\n): Promise<LinkedAddress[]> {\n const result = await (api.rpc as any).awarizon.getLinkedAddresses(account, null)\n const arr = result.toJSON() as any[]\n if (!Array.isArray(arr)) return []\n return arr.map((la: any) => ({\n chain: la.chain as ChainType,\n address: la.address as string,\n status: la.status as LinkStatus,\n linkedAt: Number(la.linked_at ?? 0),\n }))\n}\n\nexport async function isNameAvailable(\n api: ApiPromise,\n name: string\n): Promise<boolean> {\n const result = await (api.rpc as any).awarizon.isNameAvailable(name, null)\n return Boolean(result.toJSON())\n}\n\nexport async function getTotalIdentities(api: ApiPromise): Promise<number> {\n const result = await (api.rpc as any).awarizon.getTotalIdentities(null)\n return result.toNumber()\n}\n\n// ----------------------------------------------------------------\n// DEX endpoints — separate \"dex\" RPC namespace (see customTypes.ts)\n// ----------------------------------------------------------------\n\nexport async function getDexPool(\n api: ApiPromise,\n assetA: DexAssetWire,\n assetB: DexAssetWire\n): Promise<DexPoolResponse | null> {\n const result = await (api.rpc as any).dex.getPool(assetA, assetB)\n return result.toJSON() as DexPoolResponse | null\n}\n\nexport async function getDexQuote(\n api: ApiPromise,\n assetIn: DexAssetWire,\n assetOut: DexAssetWire,\n amountIn: string\n): Promise<DexQuoteResponse> {\n const result = await (api.rpc as any).dex.getQuote(assetIn, assetOut, amountIn)\n return result.toJSON() as DexQuoteResponse\n}\n\nexport async function getDexTwap(\n api: ApiPromise,\n assetA: DexAssetWire,\n assetB: DexAssetWire\n): Promise<DexTwapResponse | null> {\n const result = await (api.rpc as any).dex.getTwap(assetA, assetB)\n return result.toJSON() as DexTwapResponse | null\n}\n\nexport async function getAllDexPools(\n api: ApiPromise,\n limit = 50\n): Promise<DexPoolResponse[]> {\n const result = await (api.rpc as any).dex.getAllPools(limit)\n return (result.toJSON() as DexPoolResponse[] | null) ?? []\n}\n\nexport async function getDexFeeDestination(api: ApiPromise): Promise<'burn' | 'treasury'> {\n const result = await (api.rpc as any).dex.getFeeDestination()\n return result.toString().toLowerCase() === 'treasury' ? 'treasury' : 'burn'\n}\n\nexport async function getDexTotalBurned(api: ApiPromise): Promise<string> {\n const result = await (api.rpc as any).dex.getTotalBurned()\n return result.toString()\n}\n","// AwarizonState pallet — developer extrinsics\n// Pallet index: 8 (runtime/src/lib.rs #[runtime::pallet_index(8)])\n// call_index 0: register_developer()\n// call_index 1: stake_riz(amount: BalanceOf<T>)\n\nimport { ApiPromise } from '@polkadot/api'\nimport type { SubmittableExtrinsic } from '@polkadot/api/types'\nimport type { ISubmittableResult } from '@polkadot/types/types'\n\nexport function buildRegisterDeveloper(\n api: ApiPromise\n): SubmittableExtrinsic<'promise', ISubmittableResult> {\n return api.tx.awarizonState.registerDeveloper()\n}\n\nexport function buildStakeRiz(\n api: ApiPromise,\n amount: bigint\n): SubmittableExtrinsic<'promise', ISubmittableResult> {\n return api.tx.awarizonState.stakeRiz(amount)\n}\n","// AwarizonState pallet — manifest extrinsics\n// call_index 2: register_manifest(manifest_hash: [u8;32], category: AppCategory, metadata_uri: BoundedVec<u8, 256>)\n\nimport { ApiPromise } from '@polkadot/api'\nimport type { SubmittableExtrinsic } from '@polkadot/api/types'\nimport type { ISubmittableResult } from '@polkadot/types/types'\nimport type { AppCategory } from '../types'\n\nexport function buildRegisterManifest(\n api: ApiPromise,\n manifestHash: string, // 0x-prefixed 32-byte hex\n category: AppCategory,\n metadataUri: string | Uint8Array // UTF-8 string or raw bytes, max 256 bytes\n): SubmittableExtrinsic<'promise', ISubmittableResult> {\n return api.tx.awarizonState.registerManifest(manifestHash, category, metadataUri)\n}\n","// AwarizonState pallet — campaign extrinsics\n// call_index 3: create_campaign(campaign_id, manifest_hash, targeting, duration_days, max_deliveries)\n// call_index 5: terminate_campaign(campaign_id)\n// call_index 10: advance_epoch()\n// call_index 11: expire_campaign(campaign_id)\n// call_index 12: reset_daily_engagement()\n\nimport { ApiPromise } from '@polkadot/api'\nimport type { SubmittableExtrinsic } from '@polkadot/api/types'\nimport type { ISubmittableResult } from '@polkadot/types/types'\nimport type { TargetingCriteria } from '../types'\n\nexport function buildCreateCampaign(\n api: ApiPromise,\n campaignId: string, // [u8; 32] 0x hex\n manifestHash: string, // [u8; 32] 0x hex\n targeting: TargetingCriteria,\n durationDays: number, // u32, 1–90\n maxDeliveries: bigint // u64\n): SubmittableExtrinsic<'promise', ISubmittableResult> {\n return api.tx.awarizonState.createCampaign(\n campaignId,\n manifestHash,\n targeting,\n durationDays,\n maxDeliveries\n )\n}\n\nexport function buildTerminateCampaign(\n api: ApiPromise,\n campaignId: string // [u8; 32] 0x hex\n): SubmittableExtrinsic<'promise', ISubmittableResult> {\n return api.tx.awarizonState.terminateCampaign(campaignId)\n}\n\nexport function buildExpireCampaign(\n api: ApiPromise,\n campaignId: string // [u8; 32] 0x hex\n): SubmittableExtrinsic<'promise', ISubmittableResult> {\n return api.tx.awarizonState.expireCampaign(campaignId)\n}\n\nexport function buildAdvanceEpoch(\n api: ApiPromise\n): SubmittableExtrinsic<'promise', ISubmittableResult> {\n return api.tx.awarizonState.advanceEpoch()\n}\n\nexport function buildResetDailyEngagement(\n api: ApiPromise\n): SubmittableExtrinsic<'promise', ISubmittableResult> {\n return api.tx.awarizonState.resetDailyEngagement()\n}\n","// AwarizonState pallet — inbox extrinsics\n// call_index 4: deliver_to_inbox(wallet, campaign_id, record_id)\n// call_index 6: dismiss_inbox_record(record_id)\n// call_index 7: submit_engagement(record_id, session_duration_seconds, interaction_count)\n// call_index 8: claim_reward(record_id)\n// call_index 9: update_wallet_index(wallet_age_days, activity_count, category_history, region_code)\n\nimport { ApiPromise } from '@polkadot/api'\nimport type { SubmittableExtrinsic } from '@polkadot/api/types'\nimport type { ISubmittableResult } from '@polkadot/types/types'\n\nexport function buildDeliverToInbox(\n api: ApiPromise,\n wallet: string, // SS58 address of target wallet\n campaignId: string, // [u8; 32] 0x hex\n recordId: string // [u8; 32] 0x hex\n): SubmittableExtrinsic<'promise', ISubmittableResult> {\n return api.tx.awarizonState.deliverToInbox(wallet, campaignId, recordId)\n}\n\nexport function buildDismissInboxRecord(\n api: ApiPromise,\n recordId: string // [u8; 32] 0x hex\n): SubmittableExtrinsic<'promise', ISubmittableResult> {\n return api.tx.awarizonState.dismissInboxRecord(recordId)\n}\n\nexport function buildSubmitEngagement(\n api: ApiPromise,\n recordId: string, // [u8; 32] 0x hex\n sessionDurationSeconds: number, // u32, must be >= MIN_SESSION_SECONDS (120)\n interactionCount: number // u32, must be >= MIN_INTERACTIONS (5)\n): SubmittableExtrinsic<'promise', ISubmittableResult> {\n return api.tx.awarizonState.submitEngagement(\n recordId,\n sessionDurationSeconds,\n interactionCount\n )\n}\n\nexport function buildClaimReward(\n api: ApiPromise,\n recordId: string // [u8; 32] 0x hex\n): SubmittableExtrinsic<'promise', ISubmittableResult> {\n return api.tx.awarizonState.claimReward(recordId)\n}\n\nexport function buildUpdateWalletIndex(\n api: ApiPromise,\n walletAgeDays: number, // u32\n activityCount: number, // u32\n categoryHistory: number[], // BoundedVec<u8, 8> — AppCategory IDs\n regionCode: number // u8\n): SubmittableExtrinsic<'promise', ISubmittableResult> {\n return api.tx.awarizonState.updateWalletIndex(\n walletAgeDays,\n activityCount,\n categoryHistory,\n regionCode\n )\n}\n","// AwarizonTargeting pallet — targeting extrinsics\n// Pallet index: 9 (runtime/src/lib.rs #[runtime::pallet_index(9)])\n// call_index 0: build_bloom_filter(campaign_id)\n// call_index 1: check_wallet_match(campaign_id, wallet)\n// call_index 2: run_targeting_batch(campaign_id, wallets)\n\nimport { ApiPromise } from '@polkadot/api'\nimport type { SubmittableExtrinsic } from '@polkadot/api/types'\nimport type { ISubmittableResult } from '@polkadot/types/types'\n\nexport function buildBloomFilter(\n api: ApiPromise,\n campaignId: string // [u8; 32] 0x hex\n): SubmittableExtrinsic<'promise', ISubmittableResult> {\n return api.tx.awarizonTargeting.buildBloomFilter(campaignId)\n}\n\nexport function buildCheckWalletMatch(\n api: ApiPromise,\n campaignId: string, // [u8; 32] 0x hex\n wallet: string // SS58 address\n): SubmittableExtrinsic<'promise', ISubmittableResult> {\n return api.tx.awarizonTargeting.checkWalletMatch(campaignId, wallet)\n}\n\nexport function buildRunTargetingBatch(\n api: ApiPromise,\n campaignId: string, // [u8; 32] 0x hex\n wallets: string[] // SS58 addresses, max 100 (BoundedVec<AccountId, 100>)\n): SubmittableExtrinsic<'promise', ISubmittableResult> {\n return api.tx.awarizonTargeting.runTargetingBatch(campaignId, wallets)\n}\n","// AwarizonConsensus pallet — validator extrinsics\n// Pallet index: 10 (runtime/src/lib.rs #[runtime::pallet_index(10)])\n// call_index 0: register_validator(self_stake: u128, region_code: u8, country_code: u8)\n// call_index 1: delegate_stake(validator: AccountId, amount: u128)\n// call_index 2: undelegate_stake(validator: AccountId)\n// call_index 3: update_performance(validator, uptime_bps, finality_bps, blocks_bps)\n// call_index 4: run_epoch_election(epoch: u64)\n// call_index 5: slash_validator(validator: AccountId, reason: u8) — root only\n// call_index 6: set_commission(commission: u32)\n// call_index 7: claim_validator_reward()\n// call_index 8: claim_delegation_reward(validator: AccountId)\n// call_index 9: claim_all_delegation_rewards()\n// call_index 10: report_offline(validator: AccountId, missed_blocks: u32)\n// call_index 11: report_double_sign(validator: AccountId) — root only\n// call_index 12: claim_slash_compensation(validator: AccountId)\n// call_index 13: init_yield_reserve() — root only\n\nimport { ApiPromise } from '@polkadot/api'\nimport type { SubmittableExtrinsic } from '@polkadot/api/types'\nimport type { ISubmittableResult } from '@polkadot/types/types'\n\nexport function buildRegisterValidator(\n api: ApiPromise,\n selfStake: bigint, // u128 — must be >= MinValidatorStake\n regionCode: number, // u8\n countryCode: number // u8\n): SubmittableExtrinsic<'promise', ISubmittableResult> {\n return api.tx.awarizonConsensus.registerValidator(selfStake, regionCode, countryCode)\n}\n\nexport function buildDelegateStake(\n api: ApiPromise,\n validator: string, // SS58 address\n amount: bigint // u128\n): SubmittableExtrinsic<'promise', ISubmittableResult> {\n return api.tx.awarizonConsensus.delegateStake(validator, amount)\n}\n\nexport function buildUndelegateStake(\n api: ApiPromise,\n validator: string // SS58 address\n): SubmittableExtrinsic<'promise', ISubmittableResult> {\n return api.tx.awarizonConsensus.undelegateStake(validator)\n}\n\nexport function buildUpdatePerformance(\n api: ApiPromise,\n validator: string, // SS58 address\n uptimeBps: number, // u32, 0–10000\n finalityBps: number, // u32, 0–10000\n blocksBps: number // u32, 0–10000\n): SubmittableExtrinsic<'promise', ISubmittableResult> {\n return api.tx.awarizonConsensus.updatePerformance(\n validator,\n uptimeBps,\n finalityBps,\n blocksBps\n )\n}\n\nexport function buildRunEpochElection(\n api: ApiPromise,\n epoch: bigint // u64\n): SubmittableExtrinsic<'promise', ISubmittableResult> {\n return api.tx.awarizonConsensus.runEpochElection(epoch)\n}\n\nexport function buildSlashValidator(\n api: ApiPromise,\n validator: string, // SS58 address\n reason: number // u8\n): SubmittableExtrinsic<'promise', ISubmittableResult> {\n return api.tx.awarizonConsensus.slashValidator(validator, reason)\n}\n\nexport function buildSetCommission(\n api: ApiPromise,\n commission: number // u32, 0-20\n): SubmittableExtrinsic<'promise', ISubmittableResult> {\n return api.tx.awarizonConsensus.setCommission(commission)\n}\n\nexport function buildClaimValidatorReward(\n api: ApiPromise\n): SubmittableExtrinsic<'promise', ISubmittableResult> {\n return api.tx.awarizonConsensus.claimValidatorReward()\n}\n\nexport function buildClaimDelegationReward(\n api: ApiPromise,\n validator: string // SS58 address\n): SubmittableExtrinsic<'promise', ISubmittableResult> {\n return api.tx.awarizonConsensus.claimDelegationReward(validator)\n}\n\nexport function buildClaimAllDelegationRewards(\n api: ApiPromise\n): SubmittableExtrinsic<'promise', ISubmittableResult> {\n return api.tx.awarizonConsensus.claimAllDelegationRewards()\n}\n\nexport function buildReportOffline(\n api: ApiPromise,\n validator: string, // SS58 address\n missedBlocks: number // u32\n): SubmittableExtrinsic<'promise', ISubmittableResult> {\n return api.tx.awarizonConsensus.reportOffline(validator, missedBlocks)\n}\n\nexport function buildReportDoubleSign(\n api: ApiPromise,\n validator: string // SS58 address\n): SubmittableExtrinsic<'promise', ISubmittableResult> {\n return api.tx.awarizonConsensus.reportDoubleSign(validator)\n}\n\nexport function buildClaimSlashCompensation(\n api: ApiPromise,\n validator: string // SS58 address\n): SubmittableExtrinsic<'promise', ISubmittableResult> {\n return api.tx.awarizonConsensus.claimSlashCompensation(validator)\n}\n\nexport function buildInitYieldReserve(\n api: ApiPromise\n): SubmittableExtrinsic<'promise', ISubmittableResult> {\n return api.tx.awarizonConsensus.initYieldReserve()\n}\n","// pallet_assets extrinsics\n// Pallet index: 11 (runtime/src/lib.rs #[runtime::pallet_index(11)] pub type Assets = pallet_assets)\n// Method names follow @polkadot/api camelCase conversion of pallet_assets extrinsics.\n\nimport { ApiPromise } from '@polkadot/api'\nimport type { SubmittableExtrinsic } from '@polkadot/api/types'\nimport type { ISubmittableResult } from '@polkadot/types/types'\n\nexport function buildCreateAsset(\n api: ApiPromise,\n id: number, // AssetId (u32)\n admin: string, // SS58 address — asset admin account\n minBalance: bigint // minimum balance (u128)\n): SubmittableExtrinsic<'promise', ISubmittableResult> {\n return api.tx.assets.create(id, admin, minBalance)\n}\n\nexport function buildMintAsset(\n api: ApiPromise,\n id: number, // AssetId (u32)\n beneficiary: string, // SS58 address\n amount: bigint // u128\n): SubmittableExtrinsic<'promise', ISubmittableResult> {\n return api.tx.assets.mint(id, beneficiary, amount)\n}\n\nexport function buildTransferAsset(\n api: ApiPromise,\n id: number, // AssetId (u32)\n target: string, // SS58 address\n amount: bigint // u128\n): SubmittableExtrinsic<'promise', ISubmittableResult> {\n return api.tx.assets.transfer(id, target, amount)\n}\n","import { Keyring } from '@polkadot/keyring'\nimport type { KeyringPair } from '@polkadot/keyring/types'\nimport { ApiPromise } from '@polkadot/api'\nimport type { SubmittableExtrinsic } from '@polkadot/api/types'\nimport type { ISubmittableResult } from '@polkadot/types/types'\nimport { parseChainError } from './errors'\n\n// Create a Keyring instance for sr25519 (Substrate default)\nexport function createKeyring(): Keyring {\n return new Keyring({ type: 'sr25519' })\n}\n\n// Load a keypair from a mnemonic (BIP39)\nexport function keypairFromMnemonic(mnemonic: string): KeyringPair {\n const keyring = createKeyring()\n return keyring.addFromMnemonic(mnemonic)\n}\n\n// Load a keypair from a seed hex (0x...)\nexport function keypairFromSeed(seed: string): KeyringPair {\n const keyring = createKeyring()\n return keyring.addFromSeed(Buffer.from(seed.replace('0x', ''), 'hex'))\n}\n\n// Dev/test keypairs (only available on --dev chains)\nexport function aliceKeypair(): KeyringPair {\n const keyring = createKeyring()\n return keyring.addFromUri('//Alice')\n}\n\nexport function bobKeypair(): KeyringPair {\n const keyring = createKeyring()\n return keyring.addFromUri('//Bob')\n}\n\n// Sign and submit an extrinsic, returning the final status\nexport async function signAndSend(\n api: ApiPromise,\n extrinsic: SubmittableExtrinsic<'promise', ISubmittableResult>,\n signer: KeyringPair\n): Promise<{ blockHash: string; txHash: string; blockNumber: number }> {\n return new Promise((resolve, reject) => {\n extrinsic\n .signAndSend(signer, ({ status, dispatchError }: ISubmittableResult) => {\n if (status.isInBlock || status.isFinalized) {\n if (dispatchError) {\n reject(parseChainError(dispatchError.toString()))\n } else {\n const blockHash = status.isInBlock\n ? status.asInBlock.toHex()\n : status.asFinalized.toHex()\n const txHash = extrinsic.hash.toHex()\n api.rpc.chain.getHeader(blockHash)\n .then(header => resolve({ blockHash, txHash, blockNumber: header.number.toNumber() }))\n .catch(() => resolve({ blockHash, txHash, blockNumber: 0 }))\n }\n }\n })\n .catch(reject)\n })\n}\n","// Typed error classes matching on-chain error variants.\n// Error names derived from:\n// pallets/awarizon-state/src/lib.rs — Error<T> enum\n// pallets/awarizon-consensus/src/lib.rs — Error<T> enum\n\nexport class AwarizonError extends Error {\n constructor(\n message: string,\n public readonly code: string,\n public readonly details?: unknown\n ) {\n super(message)\n this.name = 'AwarizonError'\n }\n}\n\n// ----------------------------------------------------------------\n// awarizon-state errors\n// ----------------------------------------------------------------\n\nexport class DeveloperNotFoundError extends AwarizonError {\n constructor() { super('Developer not found', 'DeveloperNotFound') }\n}\nexport class DeveloperAlreadyRegisteredError extends AwarizonError {\n constructor() { super('Developer already registered', 'DeveloperAlreadyRegistered') }\n}\nexport class DeveloperNotVerifiedError extends AwarizonError {\n constructor() { super('Developer not verified', 'DeveloperNotVerified') }\n}\nexport class DeveloperSuspendedError extends AwarizonError {\n constructor() { super('Developer is suspended', 'DeveloperSuspended') }\n}\nexport class ManifestNotFoundError extends AwarizonError {\n constructor() { super('Manifest not found', 'ManifestNotFound') }\n}\nexport class ManifestAlreadyRegisteredError extends AwarizonError {\n constructor() { super('Manifest already registered', 'ManifestAlreadyRegistered') }\n}\nexport class ManifestLimitReachedError extends AwarizonError {\n constructor() { super('Manifest limit reached', 'ManifestLimitReached') }\n}\nexport class CampaignNotFoundError extends AwarizonError {\n constructor() { super('Campaign not found', 'CampaignNotFound') }\n}\nexport class CampaignNotActiveError extends AwarizonError {\n constructor() { super('Campaign is not active', 'CampaignNotActive') }\n}\nexport class CampaignExpiredError extends AwarizonError {\n constructor() { super('Campaign has expired', 'CampaignExpired') }\n}\nexport class CampaignDeliveryLimitReachedError extends AwarizonError {\n constructor() { super('Campaign delivery limit reached', 'CampaignDeliveryLimitReached') }\n}\nexport class InboxRecordNotFoundError extends AwarizonError {\n constructor() { super('Inbox record not found', 'InboxRecordNotFound') }\n}\nexport class InboxAlreadyDeliveredError extends AwarizonError {\n constructor() { super('Already delivered to this inbox', 'InboxAlreadyDelivered') }\n}\nexport class InboxFullError extends AwarizonError {\n constructor() { super('Inbox is full (1000 records)', 'InboxFull') }\n}\nexport class EngagementCooldownActiveError extends AwarizonError {\n constructor() { super('Engagement cooldown is active (24h)', 'EngagementCooldownActive') }\n}\nexport class EngagementDailyLimitReachedError extends AwarizonError {\n constructor() { super('Daily engagement limit reached (10/day)', 'EngagementDailyLimitReached') }\n}\nexport class EngagementInvalidError extends AwarizonError {\n constructor() { super('Engagement does not meet minimum requirements', 'EngagementInvalid') }\n}\nexport class InsufficientStakeError extends AwarizonError {\n constructor() { super('Insufficient stake', 'InsufficientStake') }\n}\nexport class InsufficientBalanceError extends AwarizonError {\n constructor() { super('Insufficient balance', 'InsufficientBalance') }\n}\nexport class TargetingDimensionLimitExceededError extends AwarizonError {\n constructor() { super('Targeting dimension limit exceeded (max 6)', 'TargetingDimensionLimitExceeded') }\n}\nexport class InvalidManifestHashError extends AwarizonError {\n constructor() { super('Invalid manifest hash', 'InvalidManifestHash') }\n}\nexport class InvalidCampaignIdError extends AwarizonError {\n constructor() { super('Invalid campaign ID', 'InvalidCampaignId') }\n}\nexport class UnauthorizedError extends AwarizonError {\n constructor() { super('Unauthorized', 'Unauthorized') }\n}\nexport class EpochNotReadyError extends AwarizonError {\n constructor() { super('Epoch is not ready to advance', 'EpochNotReady') }\n}\nexport class NotExpiredYetError extends AwarizonError {\n constructor() { super('Campaign has not expired yet', 'NotExpiredYet') }\n}\nexport class ResetNotReadyError extends AwarizonError {\n constructor() { super('Daily reset is not ready yet', 'ResetNotReady') }\n}\n\n// ----------------------------------------------------------------\n// awarizon-consensus errors\n// ----------------------------------------------------------------\n\nexport class ValidatorAlreadyRegisteredError extends AwarizonError {\n constructor() { super('Validator already registered', 'ValidatorAlreadyRegistered') }\n}\nexport class ValidatorNotFoundError extends AwarizonError {\n constructor() { super('Validator not found', 'ValidatorNotFound') }\n}\nexport class RegionCapExceededError extends AwarizonError {\n constructor() { super('Region validator cap exceeded (20%)', 'RegionCapExceeded') }\n}\nexport class CountryCapExceededError extends AwarizonError {\n constructor() { super('Country validator cap exceeded (10%)', 'CountryCapExceeded') }\n}\nexport class DelegationNotFoundError extends AwarizonError {\n constructor() { super('Delegation not found', 'DelegationNotFound') }\n}\nexport class CannotDelegateToSelfError extends AwarizonError {\n constructor() { super('Cannot delegate stake to yourself', 'CannotDelegateToSelf') }\n}\nexport class ValidatorNotActiveError extends AwarizonError {\n constructor() { super('Validator is not active', 'ValidatorNotActive') }\n}\nexport class AlreadyDelegatedError extends AwarizonError {\n constructor() { super('Already delegated to this validator', 'AlreadyDelegated') }\n}\nexport class MaxValidatorsReachedError extends AwarizonError {\n constructor() { super('Maximum validator count reached', 'MaxValidatorsReached') }\n}\n\n// ----------------------------------------------------------------\n// Error mapping\n// ----------------------------------------------------------------\n\nconst ERROR_MAP: Record<string, () => AwarizonError> = {\n DeveloperNotFound: () => new DeveloperNotFoundError(),\n DeveloperAlreadyRegistered: () => new DeveloperAlreadyRegisteredError(),\n DeveloperNotVerified: () => new DeveloperNotVerifiedError(),\n DeveloperSuspended: () => new DeveloperSuspendedError(),\n ManifestNotFound: () => new ManifestNotFoundError(),\n ManifestAlreadyRegistered: () => new ManifestAlreadyRegisteredError(),\n ManifestLimitReached: () => new ManifestLimitReachedError(),\n CampaignNotFound: () => new CampaignNotFoundError(),\n CampaignNotActive: () => new CampaignNotActiveError(),\n CampaignExpired: () => new CampaignExpiredError(),\n CampaignDeliveryLimitReached: () => new CampaignDeliveryLimitReachedError(),\n InboxRecordNotFound: () => new InboxRecordNotFoundError(),\n InboxAlreadyDelivered: () => new InboxAlreadyDeliveredError(),\n InboxFull: () => new InboxFullError(),\n EngagementCooldownActive: () => new EngagementCooldownActiveError(),\n EngagementDailyLimitReached: () => new EngagementDailyLimitReachedError(),\n EngagementInvalid: () => new EngagementInvalidError(),\n InsufficientStake: () => new InsufficientStakeError(),\n InsufficientBalance: () => new InsufficientBalanceError(),\n TargetingDimensionLimitExceeded: () => new TargetingDimensionLimitExceededError(),\n InvalidManifestHash: () => new InvalidManifestHashError(),\n InvalidCampaignId: () => new InvalidCampaignIdError(),\n Unauthorized: () => new UnauthorizedError(),\n EpochNotReady: () => new EpochNotReadyError(),\n NotExpiredYet: () => new NotExpiredYetError(),\n ResetNotReady: () => new ResetNotReadyError(),\n ValidatorAlreadyRegistered: () => new ValidatorAlreadyRegisteredError(),\n ValidatorNotFound: () => new ValidatorNotFoundError(),\n RegionCapExceeded: () => new RegionCapExceededError(),\n CountryCapExceeded: () => new CountryCapExceededError(),\n DelegationNotFound: () => new DelegationNotFoundError(),\n CannotDelegateToSelf: () => new CannotDelegateToSelfError(),\n ValidatorNotActive: () => new ValidatorNotActiveError(),\n AlreadyDelegated: () => new AlreadyDelegatedError(),\n MaxValidatorsReached: () => new MaxValidatorsReachedError(),\n}\n\nexport function parseChainError(error: unknown): AwarizonError {\n const errorStr = String(error)\n for (const [key, factory] of Object.entries(ERROR_MAP)) {\n if (errorStr.includes(key)) return factory()\n }\n return new AwarizonError(errorStr, 'UnknownError', error)\n}\n"],"mappings":"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","names":[]}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/client.ts","../src/customTypes.ts","../src/constants.ts","../src/utils.ts","../src/rpc.ts","../src/extrinsics/developer.ts","../src/extrinsics/manifests.ts","../src/extrinsics/campaigns.ts","../src/extrinsics/inbox.ts","../src/extrinsics/targeting.ts","../src/extrinsics/validators.ts","../src/extrinsics/assets.ts","../src/wallet.ts","../src/errors.ts"],"sourcesContent":["// @awarizon/sdk — main entry point\n\n// Client\nexport { AwarizonClient, connect } from './client'\n\n// Types\nexport type {\n AppCategory,\n CampaignStatus,\n InboxRecordStatus,\n DeveloperStatus,\n TransactionType,\n TargetingCriteria,\n DeveloperProfile,\n AppManifest,\n Campaign,\n InboxRecord,\n ValidatorInfo,\n Delegation,\n ValidatorPerformance,\n EngagementEvent,\n NetworkStats,\n CampaignDeliveryStatus,\n TransactionSummary,\n WalletTargetingProfile,\n ValidatorPerformanceResponse,\n TokenStats,\n VestingSchedule,\n ChainType,\n LinkStatus,\n LinkedAddress,\n IdentityRecord,\n NameLookup,\n DexAssetWire,\n DexPoolResponse,\n DexQuoteResponse,\n DexTwapResponse,\n} from './types'\n\n// Constants\nexport {\n PLANCK,\n RIZ,\n MICRO_RIZ,\n MILLI_RIZ,\n DEFAULT_ENDPOINT,\n DEFAULT_INDEXER_ENDPOINT,\n CHAIN_NAME,\n BLOCK_TIME_SECONDS,\n EPOCH_LENGTH_BLOCKS,\n MIN_SESSION_SECONDS,\n MIN_INTERACTIONS,\n ENGAGEMENT_COOLDOWN_HOURS,\n MAX_ENGAGEMENT_EVENTS_PER_DAY,\n MIN_CAMPAIGN_DURATION_DAYS,\n MAX_CAMPAIGN_DURATION_DAYS,\n DEFAULT_CAMPAIGN_DURATION_DAYS,\n DEVELOPER_MIN_TENURE_DAYS,\n MAX_TARGETING_DIMENSIONS,\n MAX_REGION_CODES_PER_CAMPAIGN,\n MAX_CATEGORY_HISTORY_ENTRIES,\n GENESIS_VALIDATORS,\n TARGET_VALIDATORS,\n PERF_WEIGHT_UPTIME_BPS,\n PERF_WEIGHT_FINALITY_BPS,\n PERF_WEIGHT_BLOCKS_BPS,\n PERF_WEIGHT_SLASH_BPS,\n} from './constants'\n\n// Utils\nexport {\n formatRiz,\n parseRiz,\n hexToBytes,\n bytesToHex,\n generateCampaignId,\n isValidAddress,\n blocksToTime,\n parsePlanckString,\n} from './utils'\n\n// Custom types registry (for advanced usage)\nexport { awarizonTypes, awarizonRpc } from './customTypes'\n\n// RPC\nexport {\n getDeveloperProfile,\n getDeveloperCampaigns,\n getDeveloperManifests,\n getCampaign,\n getActiveCampaignCount,\n getCampaignDeliveryStatus,\n getInboxCount,\n getInboxRecord,\n getWalletTargetingProfile,\n checkCampaignMatch,\n getActiveValidators,\n getValidatorCount,\n getValidatorPerformance,\n getNetworkStats,\n getTokenStats,\n getRecentTransactions,\n getBlockTransactions,\n getVestingSchedule,\n getIdentity,\n lookupName,\n getLinkedAddresses,\n isNameAvailable,\n getTotalIdentities,\n getDexPool,\n getDexQuote,\n getDexTwap,\n getAllDexPools,\n getDexFeeDestination,\n getDexTotalBurned,\n} from './rpc'\n\n// Extrinsics\nexport * from './extrinsics'\n\n// Wallet helpers\nexport {\n createKeyring,\n keypairFromMnemonic,\n keypairFromSeed,\n aliceKeypair,\n bobKeypair,\n signAndSend,\n} from './wallet'\n\n// Errors\nexport {\n AwarizonError,\n DeveloperNotFoundError,\n DeveloperAlreadyRegisteredError,\n DeveloperNotVerifiedError,\n DeveloperSuspendedError,\n ManifestNotFoundError,\n ManifestAlreadyRegisteredError,\n ManifestLimitReachedError,\n CampaignNotFoundError,\n CampaignNotActiveError,\n CampaignExpiredError,\n CampaignDeliveryLimitReachedError,\n InboxRecordNotFoundError,\n InboxAlreadyDeliveredError,\n InboxFullError,\n EngagementCooldownActiveError,\n EngagementDailyLimitReachedError,\n EngagementInvalidError,\n InsufficientStakeError,\n InsufficientBalanceError,\n TargetingDimensionLimitExceededError,\n InvalidManifestHashError,\n InvalidCampaignIdError,\n UnauthorizedError,\n EpochNotReadyError,\n NotExpiredYetError,\n ResetNotReadyError,\n ValidatorAlreadyRegisteredError,\n ValidatorNotFoundError,\n RegionCapExceededError,\n CountryCapExceededError,\n DelegationNotFoundError,\n CannotDelegateToSelfError,\n ValidatorNotActiveError,\n AlreadyDelegatedError,\n MaxValidatorsReachedError,\n parseChainError,\n} from './errors'\n","import { ApiPromise, WsProvider } from '@polkadot/api'\nimport { awarizonRpc, awarizonTypes } from './customTypes'\nimport { DEFAULT_ENDPOINT } from './constants'\n\nexport class AwarizonClient {\n private api: ApiPromise | null = null\n private endpoint: string\n // In-flight connection attempt. Callers that arrive while a connect() is\n // already underway await this instead of racing to create their own\n // ApiPromise/WsProvider — without it, several hooks calling connect()\n // concurrently on mount would each open a separate connection.\n private connecting: Promise<ApiPromise> | null = null\n\n constructor(endpoint: string = DEFAULT_ENDPOINT) {\n this.endpoint = endpoint\n }\n\n async connect(): Promise<ApiPromise> {\n if (this.api?.isConnected) return this.api\n if (this.connecting) return this.connecting\n\n this.connecting = (async () => {\n const provider = new WsProvider(this.endpoint)\n const api = await ApiPromise.create({\n provider,\n types: awarizonTypes,\n rpc: awarizonRpc,\n })\n await api.isReady\n this.api = api\n return api\n })()\n\n try {\n return await this.connecting\n } finally {\n this.connecting = null\n }\n }\n\n async disconnect(): Promise<void> {\n if (this.api) {\n await this.api.disconnect()\n this.api = null\n }\n }\n\n getApi(): ApiPromise {\n if (!this.api?.isConnected) {\n throw new Error('Not connected. Call connect() first.')\n }\n return this.api\n }\n\n async subscribeNewBlocks(\n callback: (blockNumber: number, blockHash: string) => void\n ): Promise<() => void> {\n const api = this.getApi()\n const unsub = await api.rpc.chain.subscribeNewHeads((header) => {\n callback(header.number.toNumber(), header.hash.toHex())\n })\n return unsub as unknown as () => void\n }\n\n async getBalance(address: string): Promise<bigint> {\n const api = this.getApi()\n const account = await api.query.system.account(address)\n return BigInt((account as any).data.free.toString())\n }\n}\n\nexport async function connect(\n endpoint: string = DEFAULT_ENDPOINT\n): Promise<AwarizonClient> {\n const client = new AwarizonClient(endpoint)\n await client.connect()\n return client\n}\n","// Custom SCALE type registry and RPC definitions for @polkadot/api.\n// Enum variants and struct field names derived from:\n// pallets/awarizon-types/src/lib.rs\n// pallets/awarizon-consensus/src/lib.rs\n// node/src/awarizon_rpc.rs\n\nexport const awarizonTypes = {\n // pallets/awarizon-types/src/lib.rs — enum AppCategory\n AppCategory: {\n _enum: [\n 'DeFi',\n 'Gaming',\n 'Social',\n 'Productivity',\n 'Infrastructure',\n 'DigitalAssets',\n 'DeveloperTools',\n 'Education',\n ],\n },\n\n // pallets/awarizon-types/src/lib.rs — enum CampaignStatus\n CampaignStatus: {\n _enum: ['Pending', 'Active', 'Expired', 'Terminated'],\n },\n\n // pallets/awarizon-types/src/lib.rs — enum InboxRecordStatus\n InboxRecordStatus: {\n _enum: ['Pending', 'Delivered', 'Dismissed', 'Engaged'],\n },\n\n // pallets/awarizon-types/src/lib.rs — enum DeveloperStatus\n DeveloperStatus: {\n _enum: ['Unverified', 'Verified', 'Suspended'],\n },\n\n // pallets/awarizon-types/src/lib.rs — enum TransactionType\n TransactionType: {\n _enum: ['Financial', 'Distribution', 'System'],\n },\n\n // pallets/awarizon-types/src/lib.rs — struct TargetingCriteria\n TargetingCriteria: {\n wallet_age_min: 'Option<u32>',\n wallet_age_max: 'Option<u32>',\n riz_balance_min: 'Option<u128>',\n riz_balance_max: 'Option<u128>',\n activity_min: 'Option<u32>',\n activity_max: 'Option<u32>',\n region_codes: 'Vec<u8>',\n category_history: 'Vec<AppCategory>',\n custom_logic_hash: 'Option<H256>',\n },\n\n // pallets/awarizon-types/src/lib.rs — struct DeveloperProfile<AccountId, BlockNumber>\n DeveloperProfile: {\n account: 'AccountId',\n staked_riz: 'u128',\n status: 'DeveloperStatus',\n first_distribution_block: 'Option<u32>',\n violation_count: 'u32',\n total_campaigns: 'u32',\n total_deliveries: 'u64',\n },\n\n // pallets/awarizon-types/src/lib.rs — struct AppManifest<AccountId, BlockNumber>\n AppManifest: {\n manifest_hash: 'H256',\n developer: 'AccountId',\n category: 'AppCategory',\n registered_at: 'u32',\n metadata_uri: 'Vec<u8>',\n },\n\n // pallets/awarizon-types/src/lib.rs — struct Campaign<AccountId, BlockNumber>\n Campaign: {\n campaign_id: 'H256',\n developer: 'AccountId',\n manifest_hash: 'H256',\n targeting: 'TargetingCriteria',\n status: 'CampaignStatus',\n created_at: 'u32',\n expires_at: 'u32',\n max_deliveries: 'u64',\n current_deliveries: 'u64',\n storage_fee_paid: 'u128',\n },\n\n // pallets/awarizon-types/src/lib.rs — struct InboxRecord<AccountId, BlockNumber>\n InboxRecord: {\n record_id: 'H256',\n campaign_id: 'H256',\n developer: 'AccountId',\n manifest_hash: 'H256',\n category: 'AppCategory',\n status: 'InboxRecordStatus',\n delivered_at: 'u32',\n engaged_at: 'Option<u32>',\n reward_claimed: 'bool',\n },\n\n // pallets/awarizon-consensus/src/lib.rs — struct ValidatorInfo<AccountId>\n ValidatorInfo: {\n account: 'AccountId',\n self_stake: 'u128',\n delegated_stake: 'u128',\n region_code: 'u8',\n country_code: 'u8',\n uptime_bps: 'u32',\n finality_bps: 'u32',\n blocks_bps: 'u32',\n slash_count: 'u32',\n is_active: 'bool',\n epoch_registered: 'u64',\n },\n\n // pallets/awarizon-consensus/src/lib.rs — struct Delegation<AccountId>\n Delegation: {\n delegator: 'AccountId',\n validator: 'AccountId',\n amount: 'u128',\n epoch_delegated: 'u64',\n },\n}\n\n// RPC method definitions for @polkadot/api.\n// All methods are in the \"awarizon\" namespace and return JSON (not SCALE).\n// Wire names from: node/src/awarizon_rpc.rs #[method(name = \"...\")]\nexport const awarizonRpc = {\n awarizon: {\n // Developer endpoints\n getDeveloperProfile: {\n description: 'Get developer profile by SS58 account address',\n params: [{ name: 'account', type: 'Text' }],\n type: 'Json',\n },\n getDeveloperCampaigns: {\n description: 'Get all campaign IDs for a developer',\n params: [{ name: 'account', type: 'Text' }],\n type: 'Vec<Text>',\n },\n getDeveloperManifests: {\n description: 'Get all manifest hashes for a developer',\n params: [{ name: 'account', type: 'Text' }],\n type: 'Vec<Text>',\n },\n\n // Campaign endpoints\n getCampaign: {\n description: 'Get campaign details by campaign ID (0x hex)',\n params: [{ name: 'campaign_id', type: 'H256' }],\n type: 'Json',\n },\n getActiveCampaignCount: {\n description: 'Get the number of currently active campaigns',\n params: [],\n type: 'u64',\n },\n getCampaignDeliveryStatus: {\n description: 'Get delivery progress for a campaign',\n params: [{ name: 'campaign_id', type: 'H256' }],\n type: 'Json',\n },\n\n // Inbox endpoints\n getInboxCount: {\n description: 'Get number of inbox records for a wallet',\n params: [{ name: 'wallet', type: 'Text' }],\n type: 'u32',\n },\n getInboxRecord: {\n description: 'Get a specific inbox record by wallet and record ID',\n params: [\n { name: 'wallet', type: 'Text' },\n { name: 'record_id', type: 'Text' },\n ],\n type: 'Json',\n },\n\n // Targeting endpoints\n getWalletTargetingProfile: {\n description: 'Get pre-computed targeting profile for a wallet',\n params: [{ name: 'wallet', type: 'Text' }],\n type: 'Json',\n },\n checkCampaignMatch: {\n description: 'Check cached targeting match result for (campaign, wallet)',\n params: [\n { name: 'campaign_id', type: 'Text' },\n { name: 'wallet', type: 'Text' },\n ],\n type: 'bool',\n },\n\n // Validator endpoints\n getActiveValidators: {\n description: 'Get SS58 addresses of all active validators',\n params: [],\n type: 'Vec<Text>',\n },\n getValidatorCount: {\n description: 'Get total number of active validators',\n params: [],\n type: 'u32',\n },\n getValidatorPerformance: {\n description: 'Get performance metrics for a validator',\n params: [{ name: 'account', type: 'Text' }],\n type: 'Json',\n },\n\n // Network stats endpoints\n getNetworkStats: {\n description: 'Get Awarizon network statistics',\n params: [],\n type: 'Json',\n },\n getTokenStats: {\n description: 'Get token issuance and engagement pool statistics',\n params: [],\n type: 'Json',\n },\n getRecentTransactions: {\n description: 'Get recent transactions across the chain',\n params: [],\n type: 'Json',\n },\n getBlockTransactions: {\n description: 'Get all transactions in a specific block',\n params: [{ name: 'block_number', type: 'u32' }],\n type: 'Json',\n },\n\n // Identity endpoints\n getIdentity: {\n description: 'Get identity record for an account',\n params: [\n { name: 'account', type: 'Text' },\n { name: 'at', type: 'Option<Hash>' },\n ],\n type: 'Json',\n },\n lookupName: {\n description: 'Resolve a .riz name to an account and identity',\n params: [\n { name: 'name', type: 'Text' },\n { name: 'at', type: 'Option<Hash>' },\n ],\n type: 'Json',\n },\n isNameAvailable: {\n description: 'Check if a .riz name is available to register',\n params: [\n { name: 'name', type: 'Text' },\n { name: 'at', type: 'Option<Hash>' },\n ],\n type: 'bool',\n },\n getTotalIdentities: {\n description: 'Get total number of registered identities',\n params: [{ name: 'at', type: 'Option<Hash>' }],\n type: 'u32',\n },\n\n // Links endpoints\n getLinkedAddresses: {\n description: 'Get all linked external addresses for an account',\n params: [\n { name: 'account', type: 'Text' },\n { name: 'at', type: 'Option<Hash>' },\n ],\n type: 'Json',\n },\n },\n\n // DEX endpoints — separate \"dex\" namespace, unlike the rest of the\n // RPC surface which lives under \"awarizon\". Matches the wire names\n // in node/src/awarizon_rpc.rs (dex_getPool, dex_getQuote, ...).\n // Asset params/returns are serde JSON (a bare string \"native\" or a\n // { token: n } object), not SCALE — declared as 'Json' so\n // @polkadot/api passes them through unchanged instead of trying to\n // SCALE-encode/decode them.\n dex: {\n getPool: {\n description: 'Get pool info for an asset pair',\n params: [\n { name: 'asset_a', type: 'Json' },\n { name: 'asset_b', type: 'Json' },\n ],\n type: 'Json',\n },\n getQuote: {\n description: 'Get a price quote for a swap',\n params: [\n { name: 'asset_in', type: 'Json' },\n { name: 'asset_out', type: 'Json' },\n { name: 'amount_in', type: 'Text' },\n ],\n type: 'Json',\n },\n getTwap: {\n description: 'Get TWAP price accumulator data for a pool',\n params: [\n { name: 'asset_a', type: 'Json' },\n { name: 'asset_b', type: 'Json' },\n ],\n type: 'Json',\n },\n getAllPools: {\n description: 'Get all DEX pools, up to limit',\n params: [{ name: 'limit', type: 'u32' }],\n type: 'Json',\n },\n getFeeDestination: {\n description: 'Get protocol fee destination (\"burn\" or \"treasury\")',\n params: [],\n type: 'Text',\n },\n getTotalBurned: {\n description: 'Get total protocol fees burned, as planck decimal string',\n params: [],\n type: 'Text',\n },\n },\n}\n","// Protocol constants derived from pallets/awarizon-types/src/constants.rs\n\n// ----------------------------------------------------------------\n// Token denomination\n// ----------------------------------------------------------------\nexport const PLANCK = 1n\nexport const RIZ = 1_000_000_000_000n // 10^12 planck\nexport const MICRO_RIZ = 1_000_000n // 10^6 planck\nexport const MILLI_RIZ = 1_000_000_000n // 10^9 planck\n\n// ----------------------------------------------------------------\n// Network defaults\n// ----------------------------------------------------------------\nexport const DEFAULT_ENDPOINT = 'wss://rpc.awarizon.com'\nexport const DEFAULT_HTTP_ENDPOINT = 'https://rpc.awarizon.com'\nexport const DEFAULT_INDEXER_ENDPOINT = 'https://index.awarizon.com'\nexport const CHAIN_NAME = 'Awarizon'\n\n// ----------------------------------------------------------------\n// Consensus\n// ----------------------------------------------------------------\nexport const GENESIS_VALIDATORS = 51\nexport const TARGET_VALIDATORS = 121\nexport const BLOCK_TIME_SECONDS = 3\nexport const EPOCH_LENGTH_BLOCKS = 28_800\n\n// ----------------------------------------------------------------\n// Campaign rules\n// ----------------------------------------------------------------\nexport const MIN_CAMPAIGN_DURATION_DAYS = 1\nexport const MAX_CAMPAIGN_DURATION_DAYS = 90\nexport const DEFAULT_CAMPAIGN_DURATION_DAYS = 30\n\n// ----------------------------------------------------------------\n// Engagement rules\n// ----------------------------------------------------------------\nexport const MIN_SESSION_SECONDS = 120\nexport const MIN_INTERACTIONS = 5\nexport const ENGAGEMENT_COOLDOWN_HOURS = 24\nexport const MAX_ENGAGEMENT_EVENTS_PER_DAY = 10\n\n// ----------------------------------------------------------------\n// Targeting limits\n// ----------------------------------------------------------------\nexport const MAX_TARGETING_DIMENSIONS = 6\nexport const MAX_REGION_CODES_PER_CAMPAIGN = 64\nexport const MAX_CATEGORY_HISTORY_ENTRIES = 8\n\n// ----------------------------------------------------------------\n// Developer verification\n// ----------------------------------------------------------------\nexport const DEVELOPER_MIN_TENURE_DAYS = 30\n\n// ----------------------------------------------------------------\n// Validator performance weights (basis points, sum = 10000)\n// ----------------------------------------------------------------\nexport const PERF_WEIGHT_UPTIME_BPS = 5_000\nexport const PERF_WEIGHT_FINALITY_BPS = 2_500\nexport const PERF_WEIGHT_BLOCKS_BPS = 1_500\nexport const PERF_WEIGHT_SLASH_BPS = 1_000\nexport const PERF_MULTIPLIER_MIN_BPS = 5_000\nexport const PERF_MULTIPLIER_MAX_BPS = 12_500\n\n// ----------------------------------------------------------------\n// Geographic caps (basis points)\n// ----------------------------------------------------------------\nexport const MAX_VALIDATORS_PER_REGION_BPS = 2_000 // 20%\nexport const MAX_VALIDATORS_PER_COUNTRY_BPS = 1_000 // 10%\n","import { RIZ } from './constants'\n\n// Convert planck to RIZ display string e.g. 1_000_000_000_000n → \"1.0000\"\nexport function formatRiz(planck: bigint, decimals = 4): string {\n const whole = planck / RIZ\n const remainder = planck % RIZ\n const decStr = remainder.toString().padStart(12, '0').slice(0, decimals)\n return `${whole}.${decStr}`\n}\n\n// Convert RIZ amount string to planck bigint e.g. \"1.5\" → 1_500_000_000_000n\nexport function parseRiz(riz: string): bigint {\n const [whole, decimal = ''] = riz.split('.')\n const paddedDecimal = decimal.padEnd(12, '0').slice(0, 12)\n return BigInt(whole) * RIZ + BigInt(paddedDecimal)\n}\n\n// Convert hex string to Uint8Array\nexport function hexToBytes(hex: string): Uint8Array {\n const clean = hex.replace('0x', '')\n return new Uint8Array(\n clean.match(/.{1,2}/g)?.map(b => parseInt(b, 16)) ?? []\n )\n}\n\n// Convert Uint8Array to hex string with 0x prefix\nexport function bytesToHex(bytes: Uint8Array): string {\n return '0x' + Array.from(bytes)\n .map(b => b.toString(16).padStart(2, '0'))\n .join('')\n}\n\n// Generate a campaign ID from manifest hash + current timestamp\nexport function generateCampaignId(manifestHash: string): string {\n const timestamp = Date.now().toString(16).padStart(16, '0')\n const hashPart = manifestHash.replace('0x', '').slice(0, 48)\n return '0x' + hashPart + timestamp\n}\n\n// Basic SS58 address length check\nexport function isValidAddress(address: string): boolean {\n return address.length >= 46 && address.length <= 48\n}\n\n// Format a block count to a human-readable time estimate (3s block time)\nexport function blocksToTime(blocks: number): string {\n const seconds = blocks * 3\n if (seconds < 60) return `${seconds}s`\n if (seconds < 3600) return `${Math.floor(seconds / 60)}m`\n if (seconds < 86400) return `${Math.floor(seconds / 3600)}h`\n return `${Math.floor(seconds / 86400)}d`\n}\n\n// Parse a u128-as-string from RPC into bigint\nexport function parsePlanckString(value: string): bigint {\n return BigInt(value)\n}\n","// Typed wrappers for all 15 Awarizon custom RPC methods.\n// Wire names and return shapes derived from node/src/awarizon_rpc.rs.\n\nimport { ApiPromise } from '@polkadot/api'\nimport type {\n NetworkStats,\n CampaignDeliveryStatus,\n WalletTargetingProfile,\n ValidatorPerformanceResponse,\n TokenStats,\n DeveloperProfile,\n Campaign,\n InboxRecord,\n TransactionSummary,\n VestingSchedule,\n IdentityRecord,\n NameLookup,\n LinkedAddress,\n ChainType,\n LinkStatus,\n DexAssetWire,\n DexPoolResponse,\n DexQuoteResponse,\n DexTwapResponse,\n} from './types'\n\n// ----------------------------------------------------------------\n// Developer endpoints\n// ----------------------------------------------------------------\n\nexport async function getDeveloperProfile(\n api: ApiPromise,\n account: string\n): Promise<DeveloperProfile | null> {\n const result = await (api.rpc as any).awarizon.getDeveloperProfile(account)\n // The `Json` RPC codec type has no concept of null — its constructor\n // does `Object.entries(value || {})`, so an RPC result of `null`\n // (Option::None on the node side) decodes to an empty Map, and\n // `.toJSON()` on that returns `{}`, not `null`. `{}` is truthy, so a\n // plain `if (!json)` check here never fires for an unregistered\n // account. `.isEmpty` reflects the real \"zero entries\" state.\n if (result.isEmpty) return null\n const json = result.toJSON()\n return {\n ...json,\n staked_riz: BigInt(json.staked_riz ?? '0'),\n total_deliveries: BigInt(json.total_deliveries ?? '0'),\n } as DeveloperProfile\n}\n\nexport async function getDeveloperCampaigns(\n api: ApiPromise,\n account: string\n): Promise<string[]> {\n const result = await (api.rpc as any).awarizon.getDeveloperCampaigns(account)\n return result.toJSON() as string[]\n}\n\nexport async function getDeveloperManifests(\n api: ApiPromise,\n account: string\n): Promise<string[]> {\n const result = await (api.rpc as any).awarizon.getDeveloperManifests(account)\n return result.toJSON() as string[]\n}\n\n// ----------------------------------------------------------------\n// Campaign endpoints\n// ----------------------------------------------------------------\n\nexport async function getCampaign(\n api: ApiPromise,\n campaignId: string\n): Promise<Campaign | null> {\n const result = await (api.rpc as any).awarizon.getCampaign(campaignId)\n if (result.isEmpty) return null\n const json = result.toJSON()\n return {\n ...json,\n max_deliveries: BigInt(json.max_deliveries ?? '0'),\n current_deliveries: BigInt(json.current_deliveries ?? '0'),\n storage_fee_paid: BigInt(json.storage_fee_paid ?? '0'),\n } as Campaign\n}\n\nexport async function getActiveCampaignCount(api: ApiPromise): Promise<bigint> {\n const result = await (api.rpc as any).awarizon.getActiveCampaignCount()\n return BigInt(result.toString())\n}\n\nexport async function getCampaignDeliveryStatus(\n api: ApiPromise,\n campaignId: string\n): Promise<CampaignDeliveryStatus | null> {\n const result = await (api.rpc as any).awarizon.getCampaignDeliveryStatus(campaignId)\n if (result.isEmpty) return null\n const json = result.toJSON()\n return {\n current_deliveries: BigInt(json.current_deliveries ?? '0'),\n max_deliveries: BigInt(json.max_deliveries ?? '0'),\n remaining: BigInt(json.remaining ?? '0'),\n percentage_used: json.percentage_used as number,\n }\n}\n\n// ----------------------------------------------------------------\n// Inbox endpoints\n// ----------------------------------------------------------------\n\nexport async function getInboxCount(\n api: ApiPromise,\n wallet: string\n): Promise<number> {\n const result = await (api.rpc as any).awarizon.getInboxCount(wallet)\n return result.toNumber()\n}\n\nexport async function getInboxRecord(\n api: ApiPromise,\n wallet: string,\n recordId: string\n): Promise<InboxRecord | null> {\n const result = await (api.rpc as any).awarizon.getInboxRecord(wallet, recordId)\n if (result.isEmpty) return null\n return result.toJSON() as InboxRecord\n}\n\n// ----------------------------------------------------------------\n// Targeting endpoints\n// ----------------------------------------------------------------\n\nexport async function getWalletTargetingProfile(\n api: ApiPromise,\n wallet: string\n): Promise<WalletTargetingProfile> {\n const result = await (api.rpc as any).awarizon.getWalletTargetingProfile(wallet)\n return result.toJSON() as WalletTargetingProfile\n}\n\nexport async function checkCampaignMatch(\n api: ApiPromise,\n campaignId: string,\n wallet: string\n): Promise<boolean> {\n const result = await (api.rpc as any).awarizon.checkCampaignMatch(campaignId, wallet)\n return result.isTrue\n}\n\n// ----------------------------------------------------------------\n// Validator endpoints\n// ----------------------------------------------------------------\n\nexport async function getActiveValidators(api: ApiPromise): Promise<string[]> {\n const result = await (api.rpc as any).awarizon.getActiveValidators()\n return result.toJSON() as string[]\n}\n\nexport async function getValidatorCount(api: ApiPromise): Promise<number> {\n const result = await (api.rpc as any).awarizon.getValidatorCount()\n return result.toNumber()\n}\n\nexport async function getValidatorPerformance(\n api: ApiPromise,\n account: string\n): Promise<ValidatorPerformanceResponse | null> {\n const result = await (api.rpc as any).awarizon.getValidatorPerformance(account)\n return result.toJSON() as ValidatorPerformanceResponse | null\n}\n\n// ----------------------------------------------------------------\n// Network stats endpoints\n// ----------------------------------------------------------------\n\nexport async function getNetworkStats(api: ApiPromise): Promise<NetworkStats> {\n const result = await (api.rpc as any).awarizon.getNetworkStats()\n const json = result.toJSON() as Record<string, unknown>\n return {\n total_wallets: BigInt(String(json.total_wallets ?? '0')),\n total_deliveries: BigInt(String(json.total_deliveries ?? '0')),\n active_campaigns: BigInt(String(json.active_campaigns ?? '0')),\n total_staked: String(json.total_staked ?? '0'),\n current_epoch: BigInt(String(json.current_epoch ?? '0')),\n inbox_reserve_balance: String(json.inbox_reserve_balance ?? '0'),\n total_extrinsics: Number(json.total_extrinsics ?? 0),\n circulating_supply: String(json.circulating_supply ?? '0'),\n non_circulating_supply: String(json.non_circulating_supply ?? '0'),\n }\n}\n\nexport async function getTokenStats(api: ApiPromise): Promise<TokenStats> {\n const result = await (api.rpc as any).awarizon.getTokenStats()\n return result.toJSON() as TokenStats\n}\n\nexport async function getRecentTransactions(\n api: ApiPromise\n): Promise<TransactionSummary[]> {\n const result = await (api.rpc as any).awarizon.getRecentTransactions()\n return (result.toJSON() as any[]).map((r: any) => ({\n block_number: Number(r.block_number ?? 0),\n extrinsic_index: Number(r.extrinsic_index ?? 0),\n success: Boolean(r.success),\n }))\n}\n\nexport async function getBlockTransactions(\n api: ApiPromise,\n blockNumber: number\n): Promise<TransactionSummary[]> {\n const result = await (api.rpc as any).awarizon.getBlockTransactions(blockNumber)\n return (result.toJSON() as any[]).map((r: any) => ({\n block_number: Number(r.block_number ?? 0),\n extrinsic_index: Number(r.extrinsic_index ?? 0),\n success: Boolean(r.success),\n }))\n}\n\nexport async function getVestingSchedule(\n api: ApiPromise,\n account: string\n): Promise<VestingSchedule[]> {\n const result = await (api.query as any).vesting.vesting(account)\n const json = result.toJSON()\n if (!json || !Array.isArray(json)) return []\n return json.map((v: any) => ({\n locked: String(v.locked ?? v.Locked ?? '0'),\n per_block: String(v.perBlock ?? v.per_block ?? '0'),\n starting_block: Number(v.startingBlock ?? v.starting_block ?? 0),\n }))\n}\n\n// ----------------------------------------------------------------\n// Identity endpoints\n// ----------------------------------------------------------------\n\nexport async function getIdentity(\n api: ApiPromise,\n account: string\n): Promise<IdentityRecord | null> {\n const result = await (api.rpc as any).awarizon.getIdentity(account, null)\n if (result.isEmpty) return null\n const json = result.toJSON()\n return {\n account: json.account,\n rizName: json.riz_name ?? null,\n rizNameFull: json.riz_name ? json.riz_name + '.riz' : null,\n displayName: json.display_name ?? null,\n bio: json.bio ?? null,\n avatarUri: json.avatar_uri ?? null,\n website: json.website ?? null,\n registeredAt: Number(json.registered_at ?? 0),\n verified: Boolean(json.verified),\n reputationScore: Number(json.reputation_score ?? 0),\n linkedAddresses: (json.linked_addresses ?? []).map((la: any) => ({\n chain: la.chain as ChainType,\n address: la.address as string,\n status: la.status as LinkStatus,\n linkedAt: Number(la.linked_at ?? 0),\n })),\n }\n}\n\nexport async function lookupName(\n api: ApiPromise,\n name: string\n): Promise<NameLookup | null> {\n const result = await (api.rpc as any).awarizon.lookupName(name, null)\n if (result.isEmpty) return null\n const json = result.toJSON()\n const identity = json.identity ? await getIdentity(api, json.account) : null\n return {\n rizName: json.riz_name as string,\n account: json.account as string,\n identity,\n }\n}\n\nexport async function getLinkedAddresses(\n api: ApiPromise,\n account: string\n): Promise<LinkedAddress[]> {\n const result = await (api.rpc as any).awarizon.getLinkedAddresses(account, null)\n const arr = result.toJSON() as any[]\n if (!Array.isArray(arr)) return []\n return arr.map((la: any) => ({\n chain: la.chain as ChainType,\n address: la.address as string,\n status: la.status as LinkStatus,\n linkedAt: Number(la.linked_at ?? 0),\n }))\n}\n\nexport async function isNameAvailable(\n api: ApiPromise,\n name: string\n): Promise<boolean> {\n const result = await (api.rpc as any).awarizon.isNameAvailable(name, null)\n return Boolean(result.toJSON())\n}\n\nexport async function getTotalIdentities(api: ApiPromise): Promise<number> {\n const result = await (api.rpc as any).awarizon.getTotalIdentities(null)\n return result.toNumber()\n}\n\n// ----------------------------------------------------------------\n// DEX endpoints — separate \"dex\" RPC namespace (see customTypes.ts)\n// ----------------------------------------------------------------\n\nexport async function getDexPool(\n api: ApiPromise,\n assetA: DexAssetWire,\n assetB: DexAssetWire\n): Promise<DexPoolResponse | null> {\n const result = await (api.rpc as any).dex.getPool(assetA, assetB)\n if (result.isEmpty) return null\n return result.toJSON() as DexPoolResponse\n}\n\nexport async function getDexQuote(\n api: ApiPromise,\n assetIn: DexAssetWire,\n assetOut: DexAssetWire,\n amountIn: string\n): Promise<DexQuoteResponse> {\n const result = await (api.rpc as any).dex.getQuote(assetIn, assetOut, amountIn)\n return result.toJSON() as DexQuoteResponse\n}\n\nexport async function getDexTwap(\n api: ApiPromise,\n assetA: DexAssetWire,\n assetB: DexAssetWire\n): Promise<DexTwapResponse | null> {\n const result = await (api.rpc as any).dex.getTwap(assetA, assetB)\n if (result.isEmpty) return null\n return result.toJSON() as DexTwapResponse\n}\n\nexport async function getAllDexPools(\n api: ApiPromise,\n limit = 50\n): Promise<DexPoolResponse[]> {\n const result = await (api.rpc as any).dex.getAllPools(limit)\n return (result.toJSON() as DexPoolResponse[] | null) ?? []\n}\n\nexport async function getDexFeeDestination(api: ApiPromise): Promise<'burn' | 'treasury'> {\n const result = await (api.rpc as any).dex.getFeeDestination()\n return result.toString().toLowerCase() === 'treasury' ? 'treasury' : 'burn'\n}\n\nexport async function getDexTotalBurned(api: ApiPromise): Promise<string> {\n const result = await (api.rpc as any).dex.getTotalBurned()\n return result.toString()\n}\n","// AwarizonState pallet — developer extrinsics\n// Pallet index: 8 (runtime/src/lib.rs #[runtime::pallet_index(8)])\n// call_index 0: register_developer()\n// call_index 1: stake_riz(amount: BalanceOf<T>)\n\nimport { ApiPromise } from '@polkadot/api'\nimport type { SubmittableExtrinsic } from '@polkadot/api/types'\nimport type { ISubmittableResult } from '@polkadot/types/types'\n\nexport function buildRegisterDeveloper(\n api: ApiPromise\n): SubmittableExtrinsic<'promise', ISubmittableResult> {\n return api.tx.awarizonState.registerDeveloper()\n}\n\nexport function buildStakeRiz(\n api: ApiPromise,\n amount: bigint\n): SubmittableExtrinsic<'promise', ISubmittableResult> {\n return api.tx.awarizonState.stakeRiz(amount)\n}\n","// AwarizonState pallet — manifest extrinsics\n// call_index 2: register_manifest(manifest_hash: [u8;32], category: AppCategory, metadata_uri: BoundedVec<u8, 256>)\n\nimport { ApiPromise } from '@polkadot/api'\nimport type { SubmittableExtrinsic } from '@polkadot/api/types'\nimport type { ISubmittableResult } from '@polkadot/types/types'\nimport type { AppCategory } from '../types'\n\nexport function buildRegisterManifest(\n api: ApiPromise,\n manifestHash: string, // 0x-prefixed 32-byte hex\n category: AppCategory,\n metadataUri: string | Uint8Array // UTF-8 string or raw bytes, max 256 bytes\n): SubmittableExtrinsic<'promise', ISubmittableResult> {\n return api.tx.awarizonState.registerManifest(manifestHash, category, metadataUri)\n}\n","// AwarizonState pallet — campaign extrinsics\n// call_index 3: create_campaign(campaign_id, manifest_hash, targeting, duration_days, max_deliveries)\n// call_index 5: terminate_campaign(campaign_id)\n// call_index 10: advance_epoch()\n// call_index 11: expire_campaign(campaign_id)\n// call_index 12: reset_daily_engagement()\n\nimport { ApiPromise } from '@polkadot/api'\nimport type { SubmittableExtrinsic } from '@polkadot/api/types'\nimport type { ISubmittableResult } from '@polkadot/types/types'\nimport type { TargetingCriteria } from '../types'\n\nexport function buildCreateCampaign(\n api: ApiPromise,\n campaignId: string, // [u8; 32] 0x hex\n manifestHash: string, // [u8; 32] 0x hex\n targeting: TargetingCriteria,\n durationDays: number, // u32, 1–90\n maxDeliveries: bigint // u64\n): SubmittableExtrinsic<'promise', ISubmittableResult> {\n return api.tx.awarizonState.createCampaign(\n campaignId,\n manifestHash,\n targeting,\n durationDays,\n maxDeliveries\n )\n}\n\nexport function buildTerminateCampaign(\n api: ApiPromise,\n campaignId: string // [u8; 32] 0x hex\n): SubmittableExtrinsic<'promise', ISubmittableResult> {\n return api.tx.awarizonState.terminateCampaign(campaignId)\n}\n\nexport function buildExpireCampaign(\n api: ApiPromise,\n campaignId: string // [u8; 32] 0x hex\n): SubmittableExtrinsic<'promise', ISubmittableResult> {\n return api.tx.awarizonState.expireCampaign(campaignId)\n}\n\nexport function buildAdvanceEpoch(\n api: ApiPromise\n): SubmittableExtrinsic<'promise', ISubmittableResult> {\n return api.tx.awarizonState.advanceEpoch()\n}\n\nexport function buildResetDailyEngagement(\n api: ApiPromise\n): SubmittableExtrinsic<'promise', ISubmittableResult> {\n return api.tx.awarizonState.resetDailyEngagement()\n}\n","// AwarizonState pallet — inbox extrinsics\n// call_index 4: deliver_to_inbox(wallet, campaign_id, record_id)\n// call_index 6: dismiss_inbox_record(record_id)\n// call_index 7: submit_engagement(record_id, session_duration_seconds, interaction_count)\n// call_index 8: claim_reward(record_id)\n// call_index 9: update_wallet_index(wallet_age_days, activity_count, category_history, region_code)\n\nimport { ApiPromise } from '@polkadot/api'\nimport type { SubmittableExtrinsic } from '@polkadot/api/types'\nimport type { ISubmittableResult } from '@polkadot/types/types'\n\nexport function buildDeliverToInbox(\n api: ApiPromise,\n wallet: string, // SS58 address of target wallet\n campaignId: string, // [u8; 32] 0x hex\n recordId: string // [u8; 32] 0x hex\n): SubmittableExtrinsic<'promise', ISubmittableResult> {\n return api.tx.awarizonState.deliverToInbox(wallet, campaignId, recordId)\n}\n\nexport function buildDismissInboxRecord(\n api: ApiPromise,\n recordId: string // [u8; 32] 0x hex\n): SubmittableExtrinsic<'promise', ISubmittableResult> {\n return api.tx.awarizonState.dismissInboxRecord(recordId)\n}\n\nexport function buildSubmitEngagement(\n api: ApiPromise,\n recordId: string, // [u8; 32] 0x hex\n sessionDurationSeconds: number, // u32, must be >= MIN_SESSION_SECONDS (120)\n interactionCount: number // u32, must be >= MIN_INTERACTIONS (5)\n): SubmittableExtrinsic<'promise', ISubmittableResult> {\n return api.tx.awarizonState.submitEngagement(\n recordId,\n sessionDurationSeconds,\n interactionCount\n )\n}\n\nexport function buildClaimReward(\n api: ApiPromise,\n recordId: string // [u8; 32] 0x hex\n): SubmittableExtrinsic<'promise', ISubmittableResult> {\n return api.tx.awarizonState.claimReward(recordId)\n}\n\nexport function buildUpdateWalletIndex(\n api: ApiPromise,\n walletAgeDays: number, // u32\n activityCount: number, // u32\n categoryHistory: number[], // BoundedVec<u8, 8> — AppCategory IDs\n regionCode: number // u8\n): SubmittableExtrinsic<'promise', ISubmittableResult> {\n return api.tx.awarizonState.updateWalletIndex(\n walletAgeDays,\n activityCount,\n categoryHistory,\n regionCode\n )\n}\n","// AwarizonTargeting pallet — targeting extrinsics\n// Pallet index: 9 (runtime/src/lib.rs #[runtime::pallet_index(9)])\n// call_index 0: build_bloom_filter(campaign_id)\n// call_index 1: check_wallet_match(campaign_id, wallet)\n// call_index 2: run_targeting_batch(campaign_id, wallets)\n\nimport { ApiPromise } from '@polkadot/api'\nimport type { SubmittableExtrinsic } from '@polkadot/api/types'\nimport type { ISubmittableResult } from '@polkadot/types/types'\n\nexport function buildBloomFilter(\n api: ApiPromise,\n campaignId: string // [u8; 32] 0x hex\n): SubmittableExtrinsic<'promise', ISubmittableResult> {\n return api.tx.awarizonTargeting.buildBloomFilter(campaignId)\n}\n\nexport function buildCheckWalletMatch(\n api: ApiPromise,\n campaignId: string, // [u8; 32] 0x hex\n wallet: string // SS58 address\n): SubmittableExtrinsic<'promise', ISubmittableResult> {\n return api.tx.awarizonTargeting.checkWalletMatch(campaignId, wallet)\n}\n\nexport function buildRunTargetingBatch(\n api: ApiPromise,\n campaignId: string, // [u8; 32] 0x hex\n wallets: string[] // SS58 addresses, max 100 (BoundedVec<AccountId, 100>)\n): SubmittableExtrinsic<'promise', ISubmittableResult> {\n return api.tx.awarizonTargeting.runTargetingBatch(campaignId, wallets)\n}\n","// AwarizonConsensus pallet — validator extrinsics\n// Pallet index: 10 (runtime/src/lib.rs #[runtime::pallet_index(10)])\n// call_index 0: register_validator(self_stake: u128, region_code: u8, country_code: u8)\n// call_index 1: delegate_stake(validator: AccountId, amount: u128)\n// call_index 2: undelegate_stake(validator: AccountId)\n// call_index 3: update_performance(validator, uptime_bps, finality_bps, blocks_bps)\n// call_index 4: run_epoch_election(epoch: u64)\n// call_index 5: slash_validator(validator: AccountId, reason: u8) — root only\n// call_index 6: set_commission(commission: u32)\n// call_index 7: claim_validator_reward()\n// call_index 8: claim_delegation_reward(validator: AccountId)\n// call_index 9: claim_all_delegation_rewards()\n// call_index 10: report_offline(validator: AccountId, missed_blocks: u32)\n// call_index 11: report_double_sign(validator: AccountId) — root only\n// call_index 12: claim_slash_compensation(validator: AccountId)\n// call_index 13: init_yield_reserve() — root only\n\nimport { ApiPromise } from '@polkadot/api'\nimport type { SubmittableExtrinsic } from '@polkadot/api/types'\nimport type { ISubmittableResult } from '@polkadot/types/types'\n\nexport function buildRegisterValidator(\n api: ApiPromise,\n selfStake: bigint, // u128 — must be >= MinValidatorStake\n regionCode: number, // u8\n countryCode: number // u8\n): SubmittableExtrinsic<'promise', ISubmittableResult> {\n return api.tx.awarizonConsensus.registerValidator(selfStake, regionCode, countryCode)\n}\n\nexport function buildDelegateStake(\n api: ApiPromise,\n validator: string, // SS58 address\n amount: bigint // u128\n): SubmittableExtrinsic<'promise', ISubmittableResult> {\n return api.tx.awarizonConsensus.delegateStake(validator, amount)\n}\n\nexport function buildUndelegateStake(\n api: ApiPromise,\n validator: string // SS58 address\n): SubmittableExtrinsic<'promise', ISubmittableResult> {\n return api.tx.awarizonConsensus.undelegateStake(validator)\n}\n\nexport function buildUpdatePerformance(\n api: ApiPromise,\n validator: string, // SS58 address\n uptimeBps: number, // u32, 0–10000\n finalityBps: number, // u32, 0–10000\n blocksBps: number // u32, 0–10000\n): SubmittableExtrinsic<'promise', ISubmittableResult> {\n return api.tx.awarizonConsensus.updatePerformance(\n validator,\n uptimeBps,\n finalityBps,\n blocksBps\n )\n}\n\nexport function buildRunEpochElection(\n api: ApiPromise,\n epoch: bigint // u64\n): SubmittableExtrinsic<'promise', ISubmittableResult> {\n return api.tx.awarizonConsensus.runEpochElection(epoch)\n}\n\nexport function buildSlashValidator(\n api: ApiPromise,\n validator: string, // SS58 address\n reason: number // u8\n): SubmittableExtrinsic<'promise', ISubmittableResult> {\n return api.tx.awarizonConsensus.slashValidator(validator, reason)\n}\n\nexport function buildSetCommission(\n api: ApiPromise,\n commission: number // u32, 0-20\n): SubmittableExtrinsic<'promise', ISubmittableResult> {\n return api.tx.awarizonConsensus.setCommission(commission)\n}\n\nexport function buildClaimValidatorReward(\n api: ApiPromise\n): SubmittableExtrinsic<'promise', ISubmittableResult> {\n return api.tx.awarizonConsensus.claimValidatorReward()\n}\n\nexport function buildClaimDelegationReward(\n api: ApiPromise,\n validator: string // SS58 address\n): SubmittableExtrinsic<'promise', ISubmittableResult> {\n return api.tx.awarizonConsensus.claimDelegationReward(validator)\n}\n\nexport function buildClaimAllDelegationRewards(\n api: ApiPromise\n): SubmittableExtrinsic<'promise', ISubmittableResult> {\n return api.tx.awarizonConsensus.claimAllDelegationRewards()\n}\n\nexport function buildReportOffline(\n api: ApiPromise,\n validator: string, // SS58 address\n missedBlocks: number // u32\n): SubmittableExtrinsic<'promise', ISubmittableResult> {\n return api.tx.awarizonConsensus.reportOffline(validator, missedBlocks)\n}\n\nexport function buildReportDoubleSign(\n api: ApiPromise,\n validator: string // SS58 address\n): SubmittableExtrinsic<'promise', ISubmittableResult> {\n return api.tx.awarizonConsensus.reportDoubleSign(validator)\n}\n\nexport function buildClaimSlashCompensation(\n api: ApiPromise,\n validator: string // SS58 address\n): SubmittableExtrinsic<'promise', ISubmittableResult> {\n return api.tx.awarizonConsensus.claimSlashCompensation(validator)\n}\n\nexport function buildInitYieldReserve(\n api: ApiPromise\n): SubmittableExtrinsic<'promise', ISubmittableResult> {\n return api.tx.awarizonConsensus.initYieldReserve()\n}\n","// pallet_assets extrinsics\n// Pallet index: 11 (runtime/src/lib.rs #[runtime::pallet_index(11)] pub type Assets = pallet_assets)\n// Method names follow @polkadot/api camelCase conversion of pallet_assets extrinsics.\n\nimport { ApiPromise } from '@polkadot/api'\nimport type { SubmittableExtrinsic } from '@polkadot/api/types'\nimport type { ISubmittableResult } from '@polkadot/types/types'\n\nexport function buildCreateAsset(\n api: ApiPromise,\n id: number, // AssetId (u32)\n admin: string, // SS58 address — asset admin account\n minBalance: bigint // minimum balance (u128)\n): SubmittableExtrinsic<'promise', ISubmittableResult> {\n return api.tx.assets.create(id, admin, minBalance)\n}\n\nexport function buildMintAsset(\n api: ApiPromise,\n id: number, // AssetId (u32)\n beneficiary: string, // SS58 address\n amount: bigint // u128\n): SubmittableExtrinsic<'promise', ISubmittableResult> {\n return api.tx.assets.mint(id, beneficiary, amount)\n}\n\nexport function buildTransferAsset(\n api: ApiPromise,\n id: number, // AssetId (u32)\n target: string, // SS58 address\n amount: bigint // u128\n): SubmittableExtrinsic<'promise', ISubmittableResult> {\n return api.tx.assets.transfer(id, target, amount)\n}\n","import { Keyring } from '@polkadot/keyring'\nimport type { KeyringPair } from '@polkadot/keyring/types'\nimport { ApiPromise } from '@polkadot/api'\nimport type { SubmittableExtrinsic } from '@polkadot/api/types'\nimport type { ISubmittableResult } from '@polkadot/types/types'\nimport { parseChainError } from './errors'\n\n// Create a Keyring instance for sr25519 (Substrate default)\nexport function createKeyring(): Keyring {\n return new Keyring({ type: 'sr25519' })\n}\n\n// Load a keypair from a mnemonic (BIP39)\nexport function keypairFromMnemonic(mnemonic: string): KeyringPair {\n const keyring = createKeyring()\n return keyring.addFromMnemonic(mnemonic)\n}\n\n// Load a keypair from a seed hex (0x...)\nexport function keypairFromSeed(seed: string): KeyringPair {\n const keyring = createKeyring()\n return keyring.addFromSeed(Buffer.from(seed.replace('0x', ''), 'hex'))\n}\n\n// Dev/test keypairs (only available on --dev chains)\nexport function aliceKeypair(): KeyringPair {\n const keyring = createKeyring()\n return keyring.addFromUri('//Alice')\n}\n\nexport function bobKeypair(): KeyringPair {\n const keyring = createKeyring()\n return keyring.addFromUri('//Bob')\n}\n\n// Sign and submit an extrinsic, returning the final status\nexport async function signAndSend(\n api: ApiPromise,\n extrinsic: SubmittableExtrinsic<'promise', ISubmittableResult>,\n signer: KeyringPair\n): Promise<{ blockHash: string; txHash: string; blockNumber: number }> {\n return new Promise((resolve, reject) => {\n extrinsic\n .signAndSend(signer, ({ status, dispatchError }: ISubmittableResult) => {\n if (status.isInBlock || status.isFinalized) {\n if (dispatchError) {\n reject(parseChainError(dispatchError.toString()))\n } else {\n const blockHash = status.isInBlock\n ? status.asInBlock.toHex()\n : status.asFinalized.toHex()\n const txHash = extrinsic.hash.toHex()\n api.rpc.chain.getHeader(blockHash)\n .then(header => resolve({ blockHash, txHash, blockNumber: header.number.toNumber() }))\n .catch(() => resolve({ blockHash, txHash, blockNumber: 0 }))\n }\n }\n })\n .catch(reject)\n })\n}\n","// Typed error classes matching on-chain error variants.\n// Error names derived from:\n// pallets/awarizon-state/src/lib.rs — Error<T> enum\n// pallets/awarizon-consensus/src/lib.rs — Error<T> enum\n\nexport class AwarizonError extends Error {\n constructor(\n message: string,\n public readonly code: string,\n public readonly details?: unknown\n ) {\n super(message)\n this.name = 'AwarizonError'\n }\n}\n\n// ----------------------------------------------------------------\n// awarizon-state errors\n// ----------------------------------------------------------------\n\nexport class DeveloperNotFoundError extends AwarizonError {\n constructor() { super('Developer not found', 'DeveloperNotFound') }\n}\nexport class DeveloperAlreadyRegisteredError extends AwarizonError {\n constructor() { super('Developer already registered', 'DeveloperAlreadyRegistered') }\n}\nexport class DeveloperNotVerifiedError extends AwarizonError {\n constructor() { super('Developer not verified', 'DeveloperNotVerified') }\n}\nexport class DeveloperSuspendedError extends AwarizonError {\n constructor() { super('Developer is suspended', 'DeveloperSuspended') }\n}\nexport class ManifestNotFoundError extends AwarizonError {\n constructor() { super('Manifest not found', 'ManifestNotFound') }\n}\nexport class ManifestAlreadyRegisteredError extends AwarizonError {\n constructor() { super('Manifest already registered', 'ManifestAlreadyRegistered') }\n}\nexport class ManifestLimitReachedError extends AwarizonError {\n constructor() { super('Manifest limit reached', 'ManifestLimitReached') }\n}\nexport class CampaignNotFoundError extends AwarizonError {\n constructor() { super('Campaign not found', 'CampaignNotFound') }\n}\nexport class CampaignNotActiveError extends AwarizonError {\n constructor() { super('Campaign is not active', 'CampaignNotActive') }\n}\nexport class CampaignExpiredError extends AwarizonError {\n constructor() { super('Campaign has expired', 'CampaignExpired') }\n}\nexport class CampaignDeliveryLimitReachedError extends AwarizonError {\n constructor() { super('Campaign delivery limit reached', 'CampaignDeliveryLimitReached') }\n}\nexport class InboxRecordNotFoundError extends AwarizonError {\n constructor() { super('Inbox record not found', 'InboxRecordNotFound') }\n}\nexport class InboxAlreadyDeliveredError extends AwarizonError {\n constructor() { super('Already delivered to this inbox', 'InboxAlreadyDelivered') }\n}\nexport class InboxFullError extends AwarizonError {\n constructor() { super('Inbox is full (1000 records)', 'InboxFull') }\n}\nexport class EngagementCooldownActiveError extends AwarizonError {\n constructor() { super('Engagement cooldown is active (24h)', 'EngagementCooldownActive') }\n}\nexport class EngagementDailyLimitReachedError extends AwarizonError {\n constructor() { super('Daily engagement limit reached (10/day)', 'EngagementDailyLimitReached') }\n}\nexport class EngagementInvalidError extends AwarizonError {\n constructor() { super('Engagement does not meet minimum requirements', 'EngagementInvalid') }\n}\nexport class InsufficientStakeError extends AwarizonError {\n constructor() { super('Insufficient stake', 'InsufficientStake') }\n}\nexport class InsufficientBalanceError extends AwarizonError {\n constructor() { super('Insufficient balance', 'InsufficientBalance') }\n}\nexport class TargetingDimensionLimitExceededError extends AwarizonError {\n constructor() { super('Targeting dimension limit exceeded (max 6)', 'TargetingDimensionLimitExceeded') }\n}\nexport class InvalidManifestHashError extends AwarizonError {\n constructor() { super('Invalid manifest hash', 'InvalidManifestHash') }\n}\nexport class InvalidCampaignIdError extends AwarizonError {\n constructor() { super('Invalid campaign ID', 'InvalidCampaignId') }\n}\nexport class UnauthorizedError extends AwarizonError {\n constructor() { super('Unauthorized', 'Unauthorized') }\n}\nexport class EpochNotReadyError extends AwarizonError {\n constructor() { super('Epoch is not ready to advance', 'EpochNotReady') }\n}\nexport class NotExpiredYetError extends AwarizonError {\n constructor() { super('Campaign has not expired yet', 'NotExpiredYet') }\n}\nexport class ResetNotReadyError extends AwarizonError {\n constructor() { super('Daily reset is not ready yet', 'ResetNotReady') }\n}\n\n// ----------------------------------------------------------------\n// awarizon-consensus errors\n// ----------------------------------------------------------------\n\nexport class ValidatorAlreadyRegisteredError extends AwarizonError {\n constructor() { super('Validator already registered', 'ValidatorAlreadyRegistered') }\n}\nexport class ValidatorNotFoundError extends AwarizonError {\n constructor() { super('Validator not found', 'ValidatorNotFound') }\n}\nexport class RegionCapExceededError extends AwarizonError {\n constructor() { super('Region validator cap exceeded (20%)', 'RegionCapExceeded') }\n}\nexport class CountryCapExceededError extends AwarizonError {\n constructor() { super('Country validator cap exceeded (10%)', 'CountryCapExceeded') }\n}\nexport class DelegationNotFoundError extends AwarizonError {\n constructor() { super('Delegation not found', 'DelegationNotFound') }\n}\nexport class CannotDelegateToSelfError extends AwarizonError {\n constructor() { super('Cannot delegate stake to yourself', 'CannotDelegateToSelf') }\n}\nexport class ValidatorNotActiveError extends AwarizonError {\n constructor() { super('Validator is not active', 'ValidatorNotActive') }\n}\nexport class AlreadyDelegatedError extends AwarizonError {\n constructor() { super('Already delegated to this validator', 'AlreadyDelegated') }\n}\nexport class MaxValidatorsReachedError extends AwarizonError {\n constructor() { super('Maximum validator count reached', 'MaxValidatorsReached') }\n}\n\n// ----------------------------------------------------------------\n// Error mapping\n// ----------------------------------------------------------------\n\nconst ERROR_MAP: Record<string, () => AwarizonError> = {\n DeveloperNotFound: () => new DeveloperNotFoundError(),\n DeveloperAlreadyRegistered: () => new DeveloperAlreadyRegisteredError(),\n DeveloperNotVerified: () => new DeveloperNotVerifiedError(),\n DeveloperSuspended: () => new DeveloperSuspendedError(),\n ManifestNotFound: () => new ManifestNotFoundError(),\n ManifestAlreadyRegistered: () => new ManifestAlreadyRegisteredError(),\n ManifestLimitReached: () => new ManifestLimitReachedError(),\n CampaignNotFound: () => new CampaignNotFoundError(),\n CampaignNotActive: () => new CampaignNotActiveError(),\n CampaignExpired: () => new CampaignExpiredError(),\n CampaignDeliveryLimitReached: () => new CampaignDeliveryLimitReachedError(),\n InboxRecordNotFound: () => new InboxRecordNotFoundError(),\n InboxAlreadyDelivered: () => new InboxAlreadyDeliveredError(),\n InboxFull: () => new InboxFullError(),\n EngagementCooldownActive: () => new EngagementCooldownActiveError(),\n EngagementDailyLimitReached: () => new EngagementDailyLimitReachedError(),\n EngagementInvalid: () => new EngagementInvalidError(),\n InsufficientStake: () => new InsufficientStakeError(),\n InsufficientBalance: () => new InsufficientBalanceError(),\n TargetingDimensionLimitExceeded: () => new TargetingDimensionLimitExceededError(),\n InvalidManifestHash: () => new InvalidManifestHashError(),\n InvalidCampaignId: () => new InvalidCampaignIdError(),\n Unauthorized: () => new UnauthorizedError(),\n EpochNotReady: () => new EpochNotReadyError(),\n NotExpiredYet: () => new NotExpiredYetError(),\n ResetNotReady: () => new ResetNotReadyError(),\n ValidatorAlreadyRegistered: () => new ValidatorAlreadyRegisteredError(),\n ValidatorNotFound: () => new ValidatorNotFoundError(),\n RegionCapExceeded: () => new RegionCapExceededError(),\n CountryCapExceeded: () => new CountryCapExceededError(),\n DelegationNotFound: () => new DelegationNotFoundError(),\n CannotDelegateToSelf: () => new CannotDelegateToSelfError(),\n ValidatorNotActive: () => new ValidatorNotActiveError(),\n AlreadyDelegated: () => new AlreadyDelegatedError(),\n MaxValidatorsReached: () => new MaxValidatorsReachedError(),\n}\n\nexport function parseChainError(error: unknown): AwarizonError {\n const errorStr = String(error)\n for (const [key, factory] of Object.entries(ERROR_MAP)) {\n if (errorStr.includes(key)) return factory()\n }\n return new AwarizonError(errorStr, 'UnknownError', error)\n}\n"],"mappings":"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","names":[]}
|
package/dist/index.mjs
CHANGED
|
@@ -130,7 +130,7 @@ var awarizonRpc = {
|
|
|
130
130
|
// Campaign endpoints
|
|
131
131
|
getCampaign: {
|
|
132
132
|
description: "Get campaign details by campaign ID (0x hex)",
|
|
133
|
-
params: [{ name: "campaign_id", type: "
|
|
133
|
+
params: [{ name: "campaign_id", type: "H256" }],
|
|
134
134
|
type: "Json"
|
|
135
135
|
},
|
|
136
136
|
getActiveCampaignCount: {
|
|
@@ -140,7 +140,7 @@ var awarizonRpc = {
|
|
|
140
140
|
},
|
|
141
141
|
getCampaignDeliveryStatus: {
|
|
142
142
|
description: "Get delivery progress for a campaign",
|
|
143
|
-
params: [{ name: "campaign_id", type: "
|
|
143
|
+
params: [{ name: "campaign_id", type: "H256" }],
|
|
144
144
|
type: "Json"
|
|
145
145
|
},
|
|
146
146
|
// Inbox endpoints
|
|
@@ -432,8 +432,8 @@ function parsePlanckString(value) {
|
|
|
432
432
|
// src/rpc.ts
|
|
433
433
|
async function getDeveloperProfile(api, account) {
|
|
434
434
|
const result = await api.rpc.awarizon.getDeveloperProfile(account);
|
|
435
|
+
if (result.isEmpty) return null;
|
|
435
436
|
const json = result.toJSON();
|
|
436
|
-
if (!json) return null;
|
|
437
437
|
return {
|
|
438
438
|
...json,
|
|
439
439
|
staked_riz: BigInt(json.staked_riz ?? "0"),
|
|
@@ -450,8 +450,8 @@ async function getDeveloperManifests(api, account) {
|
|
|
450
450
|
}
|
|
451
451
|
async function getCampaign(api, campaignId) {
|
|
452
452
|
const result = await api.rpc.awarizon.getCampaign(campaignId);
|
|
453
|
+
if (result.isEmpty) return null;
|
|
453
454
|
const json = result.toJSON();
|
|
454
|
-
if (!json) return null;
|
|
455
455
|
return {
|
|
456
456
|
...json,
|
|
457
457
|
max_deliveries: BigInt(json.max_deliveries ?? "0"),
|
|
@@ -465,8 +465,8 @@ async function getActiveCampaignCount(api) {
|
|
|
465
465
|
}
|
|
466
466
|
async function getCampaignDeliveryStatus(api, campaignId) {
|
|
467
467
|
const result = await api.rpc.awarizon.getCampaignDeliveryStatus(campaignId);
|
|
468
|
+
if (result.isEmpty) return null;
|
|
468
469
|
const json = result.toJSON();
|
|
469
|
-
if (!json) return null;
|
|
470
470
|
return {
|
|
471
471
|
current_deliveries: BigInt(json.current_deliveries ?? "0"),
|
|
472
472
|
max_deliveries: BigInt(json.max_deliveries ?? "0"),
|
|
@@ -480,9 +480,8 @@ async function getInboxCount(api, wallet) {
|
|
|
480
480
|
}
|
|
481
481
|
async function getInboxRecord(api, wallet, recordId) {
|
|
482
482
|
const result = await api.rpc.awarizon.getInboxRecord(wallet, recordId);
|
|
483
|
-
|
|
484
|
-
|
|
485
|
-
return json;
|
|
483
|
+
if (result.isEmpty) return null;
|
|
484
|
+
return result.toJSON();
|
|
486
485
|
}
|
|
487
486
|
async function getWalletTargetingProfile(api, wallet) {
|
|
488
487
|
const result = await api.rpc.awarizon.getWalletTargetingProfile(wallet);
|
|
@@ -551,8 +550,8 @@ async function getVestingSchedule(api, account) {
|
|
|
551
550
|
}
|
|
552
551
|
async function getIdentity(api, account) {
|
|
553
552
|
const result = await api.rpc.awarizon.getIdentity(account, null);
|
|
553
|
+
if (result.isEmpty) return null;
|
|
554
554
|
const json = result.toJSON();
|
|
555
|
-
if (!json) return null;
|
|
556
555
|
return {
|
|
557
556
|
account: json.account,
|
|
558
557
|
rizName: json.riz_name ?? null,
|
|
@@ -574,8 +573,8 @@ async function getIdentity(api, account) {
|
|
|
574
573
|
}
|
|
575
574
|
async function lookupName(api, name) {
|
|
576
575
|
const result = await api.rpc.awarizon.lookupName(name, null);
|
|
576
|
+
if (result.isEmpty) return null;
|
|
577
577
|
const json = result.toJSON();
|
|
578
|
-
if (!json) return null;
|
|
579
578
|
const identity = json.identity ? await getIdentity(api, json.account) : null;
|
|
580
579
|
return {
|
|
581
580
|
rizName: json.riz_name,
|
|
@@ -604,6 +603,7 @@ async function getTotalIdentities(api) {
|
|
|
604
603
|
}
|
|
605
604
|
async function getDexPool(api, assetA, assetB) {
|
|
606
605
|
const result = await api.rpc.dex.getPool(assetA, assetB);
|
|
606
|
+
if (result.isEmpty) return null;
|
|
607
607
|
return result.toJSON();
|
|
608
608
|
}
|
|
609
609
|
async function getDexQuote(api, assetIn, assetOut, amountIn) {
|
|
@@ -612,6 +612,7 @@ async function getDexQuote(api, assetIn, assetOut, amountIn) {
|
|
|
612
612
|
}
|
|
613
613
|
async function getDexTwap(api, assetA, assetB) {
|
|
614
614
|
const result = await api.rpc.dex.getTwap(assetA, assetB);
|
|
615
|
+
if (result.isEmpty) return null;
|
|
615
616
|
return result.toJSON();
|
|
616
617
|
}
|
|
617
618
|
async function getAllDexPools(api, limit = 50) {
|
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/client.ts","../src/customTypes.ts","../src/constants.ts","../src/utils.ts","../src/rpc.ts","../src/extrinsics/developer.ts","../src/extrinsics/manifests.ts","../src/extrinsics/campaigns.ts","../src/extrinsics/inbox.ts","../src/extrinsics/targeting.ts","../src/extrinsics/validators.ts","../src/extrinsics/assets.ts","../src/wallet.ts","../src/errors.ts"],"sourcesContent":["import { ApiPromise, WsProvider } from '@polkadot/api'\nimport { awarizonRpc, awarizonTypes } from './customTypes'\nimport { DEFAULT_ENDPOINT } from './constants'\n\nexport class AwarizonClient {\n private api: ApiPromise | null = null\n private endpoint: string\n // In-flight connection attempt. Callers that arrive while a connect() is\n // already underway await this instead of racing to create their own\n // ApiPromise/WsProvider — without it, several hooks calling connect()\n // concurrently on mount would each open a separate connection.\n private connecting: Promise<ApiPromise> | null = null\n\n constructor(endpoint: string = DEFAULT_ENDPOINT) {\n this.endpoint = endpoint\n }\n\n async connect(): Promise<ApiPromise> {\n if (this.api?.isConnected) return this.api\n if (this.connecting) return this.connecting\n\n this.connecting = (async () => {\n const provider = new WsProvider(this.endpoint)\n const api = await ApiPromise.create({\n provider,\n types: awarizonTypes,\n rpc: awarizonRpc,\n })\n await api.isReady\n this.api = api\n return api\n })()\n\n try {\n return await this.connecting\n } finally {\n this.connecting = null\n }\n }\n\n async disconnect(): Promise<void> {\n if (this.api) {\n await this.api.disconnect()\n this.api = null\n }\n }\n\n getApi(): ApiPromise {\n if (!this.api?.isConnected) {\n throw new Error('Not connected. Call connect() first.')\n }\n return this.api\n }\n\n async subscribeNewBlocks(\n callback: (blockNumber: number, blockHash: string) => void\n ): Promise<() => void> {\n const api = this.getApi()\n const unsub = await api.rpc.chain.subscribeNewHeads((header) => {\n callback(header.number.toNumber(), header.hash.toHex())\n })\n return unsub as unknown as () => void\n }\n\n async getBalance(address: string): Promise<bigint> {\n const api = this.getApi()\n const account = await api.query.system.account(address)\n return BigInt((account as any).data.free.toString())\n }\n}\n\nexport async function connect(\n endpoint: string = DEFAULT_ENDPOINT\n): Promise<AwarizonClient> {\n const client = new AwarizonClient(endpoint)\n await client.connect()\n return client\n}\n","// Custom SCALE type registry and RPC definitions for @polkadot/api.\n// Enum variants and struct field names derived from:\n// pallets/awarizon-types/src/lib.rs\n// pallets/awarizon-consensus/src/lib.rs\n// node/src/awarizon_rpc.rs\n\nexport const awarizonTypes = {\n // pallets/awarizon-types/src/lib.rs — enum AppCategory\n AppCategory: {\n _enum: [\n 'DeFi',\n 'Gaming',\n 'Social',\n 'Productivity',\n 'Infrastructure',\n 'DigitalAssets',\n 'DeveloperTools',\n 'Education',\n ],\n },\n\n // pallets/awarizon-types/src/lib.rs — enum CampaignStatus\n CampaignStatus: {\n _enum: ['Pending', 'Active', 'Expired', 'Terminated'],\n },\n\n // pallets/awarizon-types/src/lib.rs — enum InboxRecordStatus\n InboxRecordStatus: {\n _enum: ['Pending', 'Delivered', 'Dismissed', 'Engaged'],\n },\n\n // pallets/awarizon-types/src/lib.rs — enum DeveloperStatus\n DeveloperStatus: {\n _enum: ['Unverified', 'Verified', 'Suspended'],\n },\n\n // pallets/awarizon-types/src/lib.rs — enum TransactionType\n TransactionType: {\n _enum: ['Financial', 'Distribution', 'System'],\n },\n\n // pallets/awarizon-types/src/lib.rs — struct TargetingCriteria\n TargetingCriteria: {\n wallet_age_min: 'Option<u32>',\n wallet_age_max: 'Option<u32>',\n riz_balance_min: 'Option<u128>',\n riz_balance_max: 'Option<u128>',\n activity_min: 'Option<u32>',\n activity_max: 'Option<u32>',\n region_codes: 'Vec<u8>',\n category_history: 'Vec<AppCategory>',\n custom_logic_hash: 'Option<H256>',\n },\n\n // pallets/awarizon-types/src/lib.rs — struct DeveloperProfile<AccountId, BlockNumber>\n DeveloperProfile: {\n account: 'AccountId',\n staked_riz: 'u128',\n status: 'DeveloperStatus',\n first_distribution_block: 'Option<u32>',\n violation_count: 'u32',\n total_campaigns: 'u32',\n total_deliveries: 'u64',\n },\n\n // pallets/awarizon-types/src/lib.rs — struct AppManifest<AccountId, BlockNumber>\n AppManifest: {\n manifest_hash: 'H256',\n developer: 'AccountId',\n category: 'AppCategory',\n registered_at: 'u32',\n metadata_uri: 'Vec<u8>',\n },\n\n // pallets/awarizon-types/src/lib.rs — struct Campaign<AccountId, BlockNumber>\n Campaign: {\n campaign_id: 'H256',\n developer: 'AccountId',\n manifest_hash: 'H256',\n targeting: 'TargetingCriteria',\n status: 'CampaignStatus',\n created_at: 'u32',\n expires_at: 'u32',\n max_deliveries: 'u64',\n current_deliveries: 'u64',\n storage_fee_paid: 'u128',\n },\n\n // pallets/awarizon-types/src/lib.rs — struct InboxRecord<AccountId, BlockNumber>\n InboxRecord: {\n record_id: 'H256',\n campaign_id: 'H256',\n developer: 'AccountId',\n manifest_hash: 'H256',\n category: 'AppCategory',\n status: 'InboxRecordStatus',\n delivered_at: 'u32',\n engaged_at: 'Option<u32>',\n reward_claimed: 'bool',\n },\n\n // pallets/awarizon-consensus/src/lib.rs — struct ValidatorInfo<AccountId>\n ValidatorInfo: {\n account: 'AccountId',\n self_stake: 'u128',\n delegated_stake: 'u128',\n region_code: 'u8',\n country_code: 'u8',\n uptime_bps: 'u32',\n finality_bps: 'u32',\n blocks_bps: 'u32',\n slash_count: 'u32',\n is_active: 'bool',\n epoch_registered: 'u64',\n },\n\n // pallets/awarizon-consensus/src/lib.rs — struct Delegation<AccountId>\n Delegation: {\n delegator: 'AccountId',\n validator: 'AccountId',\n amount: 'u128',\n epoch_delegated: 'u64',\n },\n}\n\n// RPC method definitions for @polkadot/api.\n// All methods are in the \"awarizon\" namespace and return JSON (not SCALE).\n// Wire names from: node/src/awarizon_rpc.rs #[method(name = \"...\")]\nexport const awarizonRpc = {\n awarizon: {\n // Developer endpoints\n getDeveloperProfile: {\n description: 'Get developer profile by SS58 account address',\n params: [{ name: 'account', type: 'Text' }],\n type: 'Json',\n },\n getDeveloperCampaigns: {\n description: 'Get all campaign IDs for a developer',\n params: [{ name: 'account', type: 'Text' }],\n type: 'Vec<Text>',\n },\n getDeveloperManifests: {\n description: 'Get all manifest hashes for a developer',\n params: [{ name: 'account', type: 'Text' }],\n type: 'Vec<Text>',\n },\n\n // Campaign endpoints\n getCampaign: {\n description: 'Get campaign details by campaign ID (0x hex)',\n params: [{ name: 'campaign_id', type: 'Text' }],\n type: 'Json',\n },\n getActiveCampaignCount: {\n description: 'Get the number of currently active campaigns',\n params: [],\n type: 'u64',\n },\n getCampaignDeliveryStatus: {\n description: 'Get delivery progress for a campaign',\n params: [{ name: 'campaign_id', type: 'Text' }],\n type: 'Json',\n },\n\n // Inbox endpoints\n getInboxCount: {\n description: 'Get number of inbox records for a wallet',\n params: [{ name: 'wallet', type: 'Text' }],\n type: 'u32',\n },\n getInboxRecord: {\n description: 'Get a specific inbox record by wallet and record ID',\n params: [\n { name: 'wallet', type: 'Text' },\n { name: 'record_id', type: 'Text' },\n ],\n type: 'Json',\n },\n\n // Targeting endpoints\n getWalletTargetingProfile: {\n description: 'Get pre-computed targeting profile for a wallet',\n params: [{ name: 'wallet', type: 'Text' }],\n type: 'Json',\n },\n checkCampaignMatch: {\n description: 'Check cached targeting match result for (campaign, wallet)',\n params: [\n { name: 'campaign_id', type: 'Text' },\n { name: 'wallet', type: 'Text' },\n ],\n type: 'bool',\n },\n\n // Validator endpoints\n getActiveValidators: {\n description: 'Get SS58 addresses of all active validators',\n params: [],\n type: 'Vec<Text>',\n },\n getValidatorCount: {\n description: 'Get total number of active validators',\n params: [],\n type: 'u32',\n },\n getValidatorPerformance: {\n description: 'Get performance metrics for a validator',\n params: [{ name: 'account', type: 'Text' }],\n type: 'Json',\n },\n\n // Network stats endpoints\n getNetworkStats: {\n description: 'Get Awarizon network statistics',\n params: [],\n type: 'Json',\n },\n getTokenStats: {\n description: 'Get token issuance and engagement pool statistics',\n params: [],\n type: 'Json',\n },\n getRecentTransactions: {\n description: 'Get recent transactions across the chain',\n params: [],\n type: 'Json',\n },\n getBlockTransactions: {\n description: 'Get all transactions in a specific block',\n params: [{ name: 'block_number', type: 'u32' }],\n type: 'Json',\n },\n\n // Identity endpoints\n getIdentity: {\n description: 'Get identity record for an account',\n params: [\n { name: 'account', type: 'Text' },\n { name: 'at', type: 'Option<Hash>' },\n ],\n type: 'Json',\n },\n lookupName: {\n description: 'Resolve a .riz name to an account and identity',\n params: [\n { name: 'name', type: 'Text' },\n { name: 'at', type: 'Option<Hash>' },\n ],\n type: 'Json',\n },\n isNameAvailable: {\n description: 'Check if a .riz name is available to register',\n params: [\n { name: 'name', type: 'Text' },\n { name: 'at', type: 'Option<Hash>' },\n ],\n type: 'bool',\n },\n getTotalIdentities: {\n description: 'Get total number of registered identities',\n params: [{ name: 'at', type: 'Option<Hash>' }],\n type: 'u32',\n },\n\n // Links endpoints\n getLinkedAddresses: {\n description: 'Get all linked external addresses for an account',\n params: [\n { name: 'account', type: 'Text' },\n { name: 'at', type: 'Option<Hash>' },\n ],\n type: 'Json',\n },\n },\n\n // DEX endpoints — separate \"dex\" namespace, unlike the rest of the\n // RPC surface which lives under \"awarizon\". Matches the wire names\n // in node/src/awarizon_rpc.rs (dex_getPool, dex_getQuote, ...).\n // Asset params/returns are serde JSON (a bare string \"native\" or a\n // { token: n } object), not SCALE — declared as 'Json' so\n // @polkadot/api passes them through unchanged instead of trying to\n // SCALE-encode/decode them.\n dex: {\n getPool: {\n description: 'Get pool info for an asset pair',\n params: [\n { name: 'asset_a', type: 'Json' },\n { name: 'asset_b', type: 'Json' },\n ],\n type: 'Json',\n },\n getQuote: {\n description: 'Get a price quote for a swap',\n params: [\n { name: 'asset_in', type: 'Json' },\n { name: 'asset_out', type: 'Json' },\n { name: 'amount_in', type: 'Text' },\n ],\n type: 'Json',\n },\n getTwap: {\n description: 'Get TWAP price accumulator data for a pool',\n params: [\n { name: 'asset_a', type: 'Json' },\n { name: 'asset_b', type: 'Json' },\n ],\n type: 'Json',\n },\n getAllPools: {\n description: 'Get all DEX pools, up to limit',\n params: [{ name: 'limit', type: 'u32' }],\n type: 'Json',\n },\n getFeeDestination: {\n description: 'Get protocol fee destination (\"burn\" or \"treasury\")',\n params: [],\n type: 'Text',\n },\n getTotalBurned: {\n description: 'Get total protocol fees burned, as planck decimal string',\n params: [],\n type: 'Text',\n },\n },\n}\n","// Protocol constants derived from pallets/awarizon-types/src/constants.rs\n\n// ----------------------------------------------------------------\n// Token denomination\n// ----------------------------------------------------------------\nexport const PLANCK = 1n\nexport const RIZ = 1_000_000_000_000n // 10^12 planck\nexport const MICRO_RIZ = 1_000_000n // 10^6 planck\nexport const MILLI_RIZ = 1_000_000_000n // 10^9 planck\n\n// ----------------------------------------------------------------\n// Network defaults\n// ----------------------------------------------------------------\nexport const DEFAULT_ENDPOINT = 'wss://rpc.awarizon.com'\nexport const DEFAULT_HTTP_ENDPOINT = 'https://rpc.awarizon.com'\nexport const DEFAULT_INDEXER_ENDPOINT = 'https://index.awarizon.com'\nexport const CHAIN_NAME = 'Awarizon'\n\n// ----------------------------------------------------------------\n// Consensus\n// ----------------------------------------------------------------\nexport const GENESIS_VALIDATORS = 51\nexport const TARGET_VALIDATORS = 121\nexport const BLOCK_TIME_SECONDS = 3\nexport const EPOCH_LENGTH_BLOCKS = 28_800\n\n// ----------------------------------------------------------------\n// Campaign rules\n// ----------------------------------------------------------------\nexport const MIN_CAMPAIGN_DURATION_DAYS = 1\nexport const MAX_CAMPAIGN_DURATION_DAYS = 90\nexport const DEFAULT_CAMPAIGN_DURATION_DAYS = 30\n\n// ----------------------------------------------------------------\n// Engagement rules\n// ----------------------------------------------------------------\nexport const MIN_SESSION_SECONDS = 120\nexport const MIN_INTERACTIONS = 5\nexport const ENGAGEMENT_COOLDOWN_HOURS = 24\nexport const MAX_ENGAGEMENT_EVENTS_PER_DAY = 10\n\n// ----------------------------------------------------------------\n// Targeting limits\n// ----------------------------------------------------------------\nexport const MAX_TARGETING_DIMENSIONS = 6\nexport const MAX_REGION_CODES_PER_CAMPAIGN = 64\nexport const MAX_CATEGORY_HISTORY_ENTRIES = 8\n\n// ----------------------------------------------------------------\n// Developer verification\n// ----------------------------------------------------------------\nexport const DEVELOPER_MIN_TENURE_DAYS = 30\n\n// ----------------------------------------------------------------\n// Validator performance weights (basis points, sum = 10000)\n// ----------------------------------------------------------------\nexport const PERF_WEIGHT_UPTIME_BPS = 5_000\nexport const PERF_WEIGHT_FINALITY_BPS = 2_500\nexport const PERF_WEIGHT_BLOCKS_BPS = 1_500\nexport const PERF_WEIGHT_SLASH_BPS = 1_000\nexport const PERF_MULTIPLIER_MIN_BPS = 5_000\nexport const PERF_MULTIPLIER_MAX_BPS = 12_500\n\n// ----------------------------------------------------------------\n// Geographic caps (basis points)\n// ----------------------------------------------------------------\nexport const MAX_VALIDATORS_PER_REGION_BPS = 2_000 // 20%\nexport const MAX_VALIDATORS_PER_COUNTRY_BPS = 1_000 // 10%\n","import { RIZ } from './constants'\n\n// Convert planck to RIZ display string e.g. 1_000_000_000_000n → \"1.0000\"\nexport function formatRiz(planck: bigint, decimals = 4): string {\n const whole = planck / RIZ\n const remainder = planck % RIZ\n const decStr = remainder.toString().padStart(12, '0').slice(0, decimals)\n return `${whole}.${decStr}`\n}\n\n// Convert RIZ amount string to planck bigint e.g. \"1.5\" → 1_500_000_000_000n\nexport function parseRiz(riz: string): bigint {\n const [whole, decimal = ''] = riz.split('.')\n const paddedDecimal = decimal.padEnd(12, '0').slice(0, 12)\n return BigInt(whole) * RIZ + BigInt(paddedDecimal)\n}\n\n// Convert hex string to Uint8Array\nexport function hexToBytes(hex: string): Uint8Array {\n const clean = hex.replace('0x', '')\n return new Uint8Array(\n clean.match(/.{1,2}/g)?.map(b => parseInt(b, 16)) ?? []\n )\n}\n\n// Convert Uint8Array to hex string with 0x prefix\nexport function bytesToHex(bytes: Uint8Array): string {\n return '0x' + Array.from(bytes)\n .map(b => b.toString(16).padStart(2, '0'))\n .join('')\n}\n\n// Generate a campaign ID from manifest hash + current timestamp\nexport function generateCampaignId(manifestHash: string): string {\n const timestamp = Date.now().toString(16).padStart(16, '0')\n const hashPart = manifestHash.replace('0x', '').slice(0, 48)\n return '0x' + hashPart + timestamp\n}\n\n// Basic SS58 address length check\nexport function isValidAddress(address: string): boolean {\n return address.length >= 46 && address.length <= 48\n}\n\n// Format a block count to a human-readable time estimate (3s block time)\nexport function blocksToTime(blocks: number): string {\n const seconds = blocks * 3\n if (seconds < 60) return `${seconds}s`\n if (seconds < 3600) return `${Math.floor(seconds / 60)}m`\n if (seconds < 86400) return `${Math.floor(seconds / 3600)}h`\n return `${Math.floor(seconds / 86400)}d`\n}\n\n// Parse a u128-as-string from RPC into bigint\nexport function parsePlanckString(value: string): bigint {\n return BigInt(value)\n}\n","// Typed wrappers for all 15 Awarizon custom RPC methods.\n// Wire names and return shapes derived from node/src/awarizon_rpc.rs.\n\nimport { ApiPromise } from '@polkadot/api'\nimport type {\n NetworkStats,\n CampaignDeliveryStatus,\n WalletTargetingProfile,\n ValidatorPerformanceResponse,\n TokenStats,\n DeveloperProfile,\n Campaign,\n InboxRecord,\n TransactionSummary,\n VestingSchedule,\n IdentityRecord,\n NameLookup,\n LinkedAddress,\n ChainType,\n LinkStatus,\n DexAssetWire,\n DexPoolResponse,\n DexQuoteResponse,\n DexTwapResponse,\n} from './types'\n\n// ----------------------------------------------------------------\n// Developer endpoints\n// ----------------------------------------------------------------\n\nexport async function getDeveloperProfile(\n api: ApiPromise,\n account: string\n): Promise<DeveloperProfile | null> {\n const result = await (api.rpc as any).awarizon.getDeveloperProfile(account)\n const json = result.toJSON()\n if (!json) return null\n return {\n ...json,\n staked_riz: BigInt(json.staked_riz ?? '0'),\n total_deliveries: BigInt(json.total_deliveries ?? '0'),\n } as DeveloperProfile\n}\n\nexport async function getDeveloperCampaigns(\n api: ApiPromise,\n account: string\n): Promise<string[]> {\n const result = await (api.rpc as any).awarizon.getDeveloperCampaigns(account)\n return result.toJSON() as string[]\n}\n\nexport async function getDeveloperManifests(\n api: ApiPromise,\n account: string\n): Promise<string[]> {\n const result = await (api.rpc as any).awarizon.getDeveloperManifests(account)\n return result.toJSON() as string[]\n}\n\n// ----------------------------------------------------------------\n// Campaign endpoints\n// ----------------------------------------------------------------\n\nexport async function getCampaign(\n api: ApiPromise,\n campaignId: string\n): Promise<Campaign | null> {\n const result = await (api.rpc as any).awarizon.getCampaign(campaignId)\n const json = result.toJSON()\n if (!json) return null\n return {\n ...json,\n max_deliveries: BigInt(json.max_deliveries ?? '0'),\n current_deliveries: BigInt(json.current_deliveries ?? '0'),\n storage_fee_paid: BigInt(json.storage_fee_paid ?? '0'),\n } as Campaign\n}\n\nexport async function getActiveCampaignCount(api: ApiPromise): Promise<bigint> {\n const result = await (api.rpc as any).awarizon.getActiveCampaignCount()\n return BigInt(result.toString())\n}\n\nexport async function getCampaignDeliveryStatus(\n api: ApiPromise,\n campaignId: string\n): Promise<CampaignDeliveryStatus | null> {\n const result = await (api.rpc as any).awarizon.getCampaignDeliveryStatus(campaignId)\n const json = result.toJSON()\n if (!json) return null\n return {\n current_deliveries: BigInt(json.current_deliveries ?? '0'),\n max_deliveries: BigInt(json.max_deliveries ?? '0'),\n remaining: BigInt(json.remaining ?? '0'),\n percentage_used: json.percentage_used as number,\n }\n}\n\n// ----------------------------------------------------------------\n// Inbox endpoints\n// ----------------------------------------------------------------\n\nexport async function getInboxCount(\n api: ApiPromise,\n wallet: string\n): Promise<number> {\n const result = await (api.rpc as any).awarizon.getInboxCount(wallet)\n return result.toNumber()\n}\n\nexport async function getInboxRecord(\n api: ApiPromise,\n wallet: string,\n recordId: string\n): Promise<InboxRecord | null> {\n const result = await (api.rpc as any).awarizon.getInboxRecord(wallet, recordId)\n const json = result.toJSON()\n if (!json) return null\n return json as InboxRecord\n}\n\n// ----------------------------------------------------------------\n// Targeting endpoints\n// ----------------------------------------------------------------\n\nexport async function getWalletTargetingProfile(\n api: ApiPromise,\n wallet: string\n): Promise<WalletTargetingProfile> {\n const result = await (api.rpc as any).awarizon.getWalletTargetingProfile(wallet)\n return result.toJSON() as WalletTargetingProfile\n}\n\nexport async function checkCampaignMatch(\n api: ApiPromise,\n campaignId: string,\n wallet: string\n): Promise<boolean> {\n const result = await (api.rpc as any).awarizon.checkCampaignMatch(campaignId, wallet)\n return result.isTrue\n}\n\n// ----------------------------------------------------------------\n// Validator endpoints\n// ----------------------------------------------------------------\n\nexport async function getActiveValidators(api: ApiPromise): Promise<string[]> {\n const result = await (api.rpc as any).awarizon.getActiveValidators()\n return result.toJSON() as string[]\n}\n\nexport async function getValidatorCount(api: ApiPromise): Promise<number> {\n const result = await (api.rpc as any).awarizon.getValidatorCount()\n return result.toNumber()\n}\n\nexport async function getValidatorPerformance(\n api: ApiPromise,\n account: string\n): Promise<ValidatorPerformanceResponse | null> {\n const result = await (api.rpc as any).awarizon.getValidatorPerformance(account)\n return result.toJSON() as ValidatorPerformanceResponse | null\n}\n\n// ----------------------------------------------------------------\n// Network stats endpoints\n// ----------------------------------------------------------------\n\nexport async function getNetworkStats(api: ApiPromise): Promise<NetworkStats> {\n const result = await (api.rpc as any).awarizon.getNetworkStats()\n const json = result.toJSON() as Record<string, unknown>\n return {\n total_wallets: BigInt(String(json.total_wallets ?? '0')),\n total_deliveries: BigInt(String(json.total_deliveries ?? '0')),\n active_campaigns: BigInt(String(json.active_campaigns ?? '0')),\n total_staked: String(json.total_staked ?? '0'),\n current_epoch: BigInt(String(json.current_epoch ?? '0')),\n inbox_reserve_balance: String(json.inbox_reserve_balance ?? '0'),\n total_extrinsics: Number(json.total_extrinsics ?? 0),\n circulating_supply: String(json.circulating_supply ?? '0'),\n non_circulating_supply: String(json.non_circulating_supply ?? '0'),\n }\n}\n\nexport async function getTokenStats(api: ApiPromise): Promise<TokenStats> {\n const result = await (api.rpc as any).awarizon.getTokenStats()\n return result.toJSON() as TokenStats\n}\n\nexport async function getRecentTransactions(\n api: ApiPromise\n): Promise<TransactionSummary[]> {\n const result = await (api.rpc as any).awarizon.getRecentTransactions()\n return (result.toJSON() as any[]).map((r: any) => ({\n block_number: Number(r.block_number ?? 0),\n extrinsic_index: Number(r.extrinsic_index ?? 0),\n success: Boolean(r.success),\n }))\n}\n\nexport async function getBlockTransactions(\n api: ApiPromise,\n blockNumber: number\n): Promise<TransactionSummary[]> {\n const result = await (api.rpc as any).awarizon.getBlockTransactions(blockNumber)\n return (result.toJSON() as any[]).map((r: any) => ({\n block_number: Number(r.block_number ?? 0),\n extrinsic_index: Number(r.extrinsic_index ?? 0),\n success: Boolean(r.success),\n }))\n}\n\nexport async function getVestingSchedule(\n api: ApiPromise,\n account: string\n): Promise<VestingSchedule[]> {\n const result = await (api.query as any).vesting.vesting(account)\n const json = result.toJSON()\n if (!json || !Array.isArray(json)) return []\n return json.map((v: any) => ({\n locked: String(v.locked ?? v.Locked ?? '0'),\n per_block: String(v.perBlock ?? v.per_block ?? '0'),\n starting_block: Number(v.startingBlock ?? v.starting_block ?? 0),\n }))\n}\n\n// ----------------------------------------------------------------\n// Identity endpoints\n// ----------------------------------------------------------------\n\nexport async function getIdentity(\n api: ApiPromise,\n account: string\n): Promise<IdentityRecord | null> {\n const result = await (api.rpc as any).awarizon.getIdentity(account, null)\n const json = result.toJSON()\n if (!json) return null\n return {\n account: json.account,\n rizName: json.riz_name ?? null,\n rizNameFull: json.riz_name ? json.riz_name + '.riz' : null,\n displayName: json.display_name ?? null,\n bio: json.bio ?? null,\n avatarUri: json.avatar_uri ?? null,\n website: json.website ?? null,\n registeredAt: Number(json.registered_at ?? 0),\n verified: Boolean(json.verified),\n reputationScore: Number(json.reputation_score ?? 0),\n linkedAddresses: (json.linked_addresses ?? []).map((la: any) => ({\n chain: la.chain as ChainType,\n address: la.address as string,\n status: la.status as LinkStatus,\n linkedAt: Number(la.linked_at ?? 0),\n })),\n }\n}\n\nexport async function lookupName(\n api: ApiPromise,\n name: string\n): Promise<NameLookup | null> {\n const result = await (api.rpc as any).awarizon.lookupName(name, null)\n const json = result.toJSON()\n if (!json) return null\n const identity = json.identity ? await getIdentity(api, json.account) : null\n return {\n rizName: json.riz_name as string,\n account: json.account as string,\n identity,\n }\n}\n\nexport async function getLinkedAddresses(\n api: ApiPromise,\n account: string\n): Promise<LinkedAddress[]> {\n const result = await (api.rpc as any).awarizon.getLinkedAddresses(account, null)\n const arr = result.toJSON() as any[]\n if (!Array.isArray(arr)) return []\n return arr.map((la: any) => ({\n chain: la.chain as ChainType,\n address: la.address as string,\n status: la.status as LinkStatus,\n linkedAt: Number(la.linked_at ?? 0),\n }))\n}\n\nexport async function isNameAvailable(\n api: ApiPromise,\n name: string\n): Promise<boolean> {\n const result = await (api.rpc as any).awarizon.isNameAvailable(name, null)\n return Boolean(result.toJSON())\n}\n\nexport async function getTotalIdentities(api: ApiPromise): Promise<number> {\n const result = await (api.rpc as any).awarizon.getTotalIdentities(null)\n return result.toNumber()\n}\n\n// ----------------------------------------------------------------\n// DEX endpoints — separate \"dex\" RPC namespace (see customTypes.ts)\n// ----------------------------------------------------------------\n\nexport async function getDexPool(\n api: ApiPromise,\n assetA: DexAssetWire,\n assetB: DexAssetWire\n): Promise<DexPoolResponse | null> {\n const result = await (api.rpc as any).dex.getPool(assetA, assetB)\n return result.toJSON() as DexPoolResponse | null\n}\n\nexport async function getDexQuote(\n api: ApiPromise,\n assetIn: DexAssetWire,\n assetOut: DexAssetWire,\n amountIn: string\n): Promise<DexQuoteResponse> {\n const result = await (api.rpc as any).dex.getQuote(assetIn, assetOut, amountIn)\n return result.toJSON() as DexQuoteResponse\n}\n\nexport async function getDexTwap(\n api: ApiPromise,\n assetA: DexAssetWire,\n assetB: DexAssetWire\n): Promise<DexTwapResponse | null> {\n const result = await (api.rpc as any).dex.getTwap(assetA, assetB)\n return result.toJSON() as DexTwapResponse | null\n}\n\nexport async function getAllDexPools(\n api: ApiPromise,\n limit = 50\n): Promise<DexPoolResponse[]> {\n const result = await (api.rpc as any).dex.getAllPools(limit)\n return (result.toJSON() as DexPoolResponse[] | null) ?? []\n}\n\nexport async function getDexFeeDestination(api: ApiPromise): Promise<'burn' | 'treasury'> {\n const result = await (api.rpc as any).dex.getFeeDestination()\n return result.toString().toLowerCase() === 'treasury' ? 'treasury' : 'burn'\n}\n\nexport async function getDexTotalBurned(api: ApiPromise): Promise<string> {\n const result = await (api.rpc as any).dex.getTotalBurned()\n return result.toString()\n}\n","// AwarizonState pallet — developer extrinsics\n// Pallet index: 8 (runtime/src/lib.rs #[runtime::pallet_index(8)])\n// call_index 0: register_developer()\n// call_index 1: stake_riz(amount: BalanceOf<T>)\n\nimport { ApiPromise } from '@polkadot/api'\nimport type { SubmittableExtrinsic } from '@polkadot/api/types'\nimport type { ISubmittableResult } from '@polkadot/types/types'\n\nexport function buildRegisterDeveloper(\n api: ApiPromise\n): SubmittableExtrinsic<'promise', ISubmittableResult> {\n return api.tx.awarizonState.registerDeveloper()\n}\n\nexport function buildStakeRiz(\n api: ApiPromise,\n amount: bigint\n): SubmittableExtrinsic<'promise', ISubmittableResult> {\n return api.tx.awarizonState.stakeRiz(amount)\n}\n","// AwarizonState pallet — manifest extrinsics\n// call_index 2: register_manifest(manifest_hash: [u8;32], category: AppCategory, metadata_uri: BoundedVec<u8, 256>)\n\nimport { ApiPromise } from '@polkadot/api'\nimport type { SubmittableExtrinsic } from '@polkadot/api/types'\nimport type { ISubmittableResult } from '@polkadot/types/types'\nimport type { AppCategory } from '../types'\n\nexport function buildRegisterManifest(\n api: ApiPromise,\n manifestHash: string, // 0x-prefixed 32-byte hex\n category: AppCategory,\n metadataUri: string | Uint8Array // UTF-8 string or raw bytes, max 256 bytes\n): SubmittableExtrinsic<'promise', ISubmittableResult> {\n return api.tx.awarizonState.registerManifest(manifestHash, category, metadataUri)\n}\n","// AwarizonState pallet — campaign extrinsics\n// call_index 3: create_campaign(campaign_id, manifest_hash, targeting, duration_days, max_deliveries)\n// call_index 5: terminate_campaign(campaign_id)\n// call_index 10: advance_epoch()\n// call_index 11: expire_campaign(campaign_id)\n// call_index 12: reset_daily_engagement()\n\nimport { ApiPromise } from '@polkadot/api'\nimport type { SubmittableExtrinsic } from '@polkadot/api/types'\nimport type { ISubmittableResult } from '@polkadot/types/types'\nimport type { TargetingCriteria } from '../types'\n\nexport function buildCreateCampaign(\n api: ApiPromise,\n campaignId: string, // [u8; 32] 0x hex\n manifestHash: string, // [u8; 32] 0x hex\n targeting: TargetingCriteria,\n durationDays: number, // u32, 1–90\n maxDeliveries: bigint // u64\n): SubmittableExtrinsic<'promise', ISubmittableResult> {\n return api.tx.awarizonState.createCampaign(\n campaignId,\n manifestHash,\n targeting,\n durationDays,\n maxDeliveries\n )\n}\n\nexport function buildTerminateCampaign(\n api: ApiPromise,\n campaignId: string // [u8; 32] 0x hex\n): SubmittableExtrinsic<'promise', ISubmittableResult> {\n return api.tx.awarizonState.terminateCampaign(campaignId)\n}\n\nexport function buildExpireCampaign(\n api: ApiPromise,\n campaignId: string // [u8; 32] 0x hex\n): SubmittableExtrinsic<'promise', ISubmittableResult> {\n return api.tx.awarizonState.expireCampaign(campaignId)\n}\n\nexport function buildAdvanceEpoch(\n api: ApiPromise\n): SubmittableExtrinsic<'promise', ISubmittableResult> {\n return api.tx.awarizonState.advanceEpoch()\n}\n\nexport function buildResetDailyEngagement(\n api: ApiPromise\n): SubmittableExtrinsic<'promise', ISubmittableResult> {\n return api.tx.awarizonState.resetDailyEngagement()\n}\n","// AwarizonState pallet — inbox extrinsics\n// call_index 4: deliver_to_inbox(wallet, campaign_id, record_id)\n// call_index 6: dismiss_inbox_record(record_id)\n// call_index 7: submit_engagement(record_id, session_duration_seconds, interaction_count)\n// call_index 8: claim_reward(record_id)\n// call_index 9: update_wallet_index(wallet_age_days, activity_count, category_history, region_code)\n\nimport { ApiPromise } from '@polkadot/api'\nimport type { SubmittableExtrinsic } from '@polkadot/api/types'\nimport type { ISubmittableResult } from '@polkadot/types/types'\n\nexport function buildDeliverToInbox(\n api: ApiPromise,\n wallet: string, // SS58 address of target wallet\n campaignId: string, // [u8; 32] 0x hex\n recordId: string // [u8; 32] 0x hex\n): SubmittableExtrinsic<'promise', ISubmittableResult> {\n return api.tx.awarizonState.deliverToInbox(wallet, campaignId, recordId)\n}\n\nexport function buildDismissInboxRecord(\n api: ApiPromise,\n recordId: string // [u8; 32] 0x hex\n): SubmittableExtrinsic<'promise', ISubmittableResult> {\n return api.tx.awarizonState.dismissInboxRecord(recordId)\n}\n\nexport function buildSubmitEngagement(\n api: ApiPromise,\n recordId: string, // [u8; 32] 0x hex\n sessionDurationSeconds: number, // u32, must be >= MIN_SESSION_SECONDS (120)\n interactionCount: number // u32, must be >= MIN_INTERACTIONS (5)\n): SubmittableExtrinsic<'promise', ISubmittableResult> {\n return api.tx.awarizonState.submitEngagement(\n recordId,\n sessionDurationSeconds,\n interactionCount\n )\n}\n\nexport function buildClaimReward(\n api: ApiPromise,\n recordId: string // [u8; 32] 0x hex\n): SubmittableExtrinsic<'promise', ISubmittableResult> {\n return api.tx.awarizonState.claimReward(recordId)\n}\n\nexport function buildUpdateWalletIndex(\n api: ApiPromise,\n walletAgeDays: number, // u32\n activityCount: number, // u32\n categoryHistory: number[], // BoundedVec<u8, 8> — AppCategory IDs\n regionCode: number // u8\n): SubmittableExtrinsic<'promise', ISubmittableResult> {\n return api.tx.awarizonState.updateWalletIndex(\n walletAgeDays,\n activityCount,\n categoryHistory,\n regionCode\n )\n}\n","// AwarizonTargeting pallet — targeting extrinsics\n// Pallet index: 9 (runtime/src/lib.rs #[runtime::pallet_index(9)])\n// call_index 0: build_bloom_filter(campaign_id)\n// call_index 1: check_wallet_match(campaign_id, wallet)\n// call_index 2: run_targeting_batch(campaign_id, wallets)\n\nimport { ApiPromise } from '@polkadot/api'\nimport type { SubmittableExtrinsic } from '@polkadot/api/types'\nimport type { ISubmittableResult } from '@polkadot/types/types'\n\nexport function buildBloomFilter(\n api: ApiPromise,\n campaignId: string // [u8; 32] 0x hex\n): SubmittableExtrinsic<'promise', ISubmittableResult> {\n return api.tx.awarizonTargeting.buildBloomFilter(campaignId)\n}\n\nexport function buildCheckWalletMatch(\n api: ApiPromise,\n campaignId: string, // [u8; 32] 0x hex\n wallet: string // SS58 address\n): SubmittableExtrinsic<'promise', ISubmittableResult> {\n return api.tx.awarizonTargeting.checkWalletMatch(campaignId, wallet)\n}\n\nexport function buildRunTargetingBatch(\n api: ApiPromise,\n campaignId: string, // [u8; 32] 0x hex\n wallets: string[] // SS58 addresses, max 100 (BoundedVec<AccountId, 100>)\n): SubmittableExtrinsic<'promise', ISubmittableResult> {\n return api.tx.awarizonTargeting.runTargetingBatch(campaignId, wallets)\n}\n","// AwarizonConsensus pallet — validator extrinsics\n// Pallet index: 10 (runtime/src/lib.rs #[runtime::pallet_index(10)])\n// call_index 0: register_validator(self_stake: u128, region_code: u8, country_code: u8)\n// call_index 1: delegate_stake(validator: AccountId, amount: u128)\n// call_index 2: undelegate_stake(validator: AccountId)\n// call_index 3: update_performance(validator, uptime_bps, finality_bps, blocks_bps)\n// call_index 4: run_epoch_election(epoch: u64)\n// call_index 5: slash_validator(validator: AccountId, reason: u8) — root only\n// call_index 6: set_commission(commission: u32)\n// call_index 7: claim_validator_reward()\n// call_index 8: claim_delegation_reward(validator: AccountId)\n// call_index 9: claim_all_delegation_rewards()\n// call_index 10: report_offline(validator: AccountId, missed_blocks: u32)\n// call_index 11: report_double_sign(validator: AccountId) — root only\n// call_index 12: claim_slash_compensation(validator: AccountId)\n// call_index 13: init_yield_reserve() — root only\n\nimport { ApiPromise } from '@polkadot/api'\nimport type { SubmittableExtrinsic } from '@polkadot/api/types'\nimport type { ISubmittableResult } from '@polkadot/types/types'\n\nexport function buildRegisterValidator(\n api: ApiPromise,\n selfStake: bigint, // u128 — must be >= MinValidatorStake\n regionCode: number, // u8\n countryCode: number // u8\n): SubmittableExtrinsic<'promise', ISubmittableResult> {\n return api.tx.awarizonConsensus.registerValidator(selfStake, regionCode, countryCode)\n}\n\nexport function buildDelegateStake(\n api: ApiPromise,\n validator: string, // SS58 address\n amount: bigint // u128\n): SubmittableExtrinsic<'promise', ISubmittableResult> {\n return api.tx.awarizonConsensus.delegateStake(validator, amount)\n}\n\nexport function buildUndelegateStake(\n api: ApiPromise,\n validator: string // SS58 address\n): SubmittableExtrinsic<'promise', ISubmittableResult> {\n return api.tx.awarizonConsensus.undelegateStake(validator)\n}\n\nexport function buildUpdatePerformance(\n api: ApiPromise,\n validator: string, // SS58 address\n uptimeBps: number, // u32, 0–10000\n finalityBps: number, // u32, 0–10000\n blocksBps: number // u32, 0–10000\n): SubmittableExtrinsic<'promise', ISubmittableResult> {\n return api.tx.awarizonConsensus.updatePerformance(\n validator,\n uptimeBps,\n finalityBps,\n blocksBps\n )\n}\n\nexport function buildRunEpochElection(\n api: ApiPromise,\n epoch: bigint // u64\n): SubmittableExtrinsic<'promise', ISubmittableResult> {\n return api.tx.awarizonConsensus.runEpochElection(epoch)\n}\n\nexport function buildSlashValidator(\n api: ApiPromise,\n validator: string, // SS58 address\n reason: number // u8\n): SubmittableExtrinsic<'promise', ISubmittableResult> {\n return api.tx.awarizonConsensus.slashValidator(validator, reason)\n}\n\nexport function buildSetCommission(\n api: ApiPromise,\n commission: number // u32, 0-20\n): SubmittableExtrinsic<'promise', ISubmittableResult> {\n return api.tx.awarizonConsensus.setCommission(commission)\n}\n\nexport function buildClaimValidatorReward(\n api: ApiPromise\n): SubmittableExtrinsic<'promise', ISubmittableResult> {\n return api.tx.awarizonConsensus.claimValidatorReward()\n}\n\nexport function buildClaimDelegationReward(\n api: ApiPromise,\n validator: string // SS58 address\n): SubmittableExtrinsic<'promise', ISubmittableResult> {\n return api.tx.awarizonConsensus.claimDelegationReward(validator)\n}\n\nexport function buildClaimAllDelegationRewards(\n api: ApiPromise\n): SubmittableExtrinsic<'promise', ISubmittableResult> {\n return api.tx.awarizonConsensus.claimAllDelegationRewards()\n}\n\nexport function buildReportOffline(\n api: ApiPromise,\n validator: string, // SS58 address\n missedBlocks: number // u32\n): SubmittableExtrinsic<'promise', ISubmittableResult> {\n return api.tx.awarizonConsensus.reportOffline(validator, missedBlocks)\n}\n\nexport function buildReportDoubleSign(\n api: ApiPromise,\n validator: string // SS58 address\n): SubmittableExtrinsic<'promise', ISubmittableResult> {\n return api.tx.awarizonConsensus.reportDoubleSign(validator)\n}\n\nexport function buildClaimSlashCompensation(\n api: ApiPromise,\n validator: string // SS58 address\n): SubmittableExtrinsic<'promise', ISubmittableResult> {\n return api.tx.awarizonConsensus.claimSlashCompensation(validator)\n}\n\nexport function buildInitYieldReserve(\n api: ApiPromise\n): SubmittableExtrinsic<'promise', ISubmittableResult> {\n return api.tx.awarizonConsensus.initYieldReserve()\n}\n","// pallet_assets extrinsics\n// Pallet index: 11 (runtime/src/lib.rs #[runtime::pallet_index(11)] pub type Assets = pallet_assets)\n// Method names follow @polkadot/api camelCase conversion of pallet_assets extrinsics.\n\nimport { ApiPromise } from '@polkadot/api'\nimport type { SubmittableExtrinsic } from '@polkadot/api/types'\nimport type { ISubmittableResult } from '@polkadot/types/types'\n\nexport function buildCreateAsset(\n api: ApiPromise,\n id: number, // AssetId (u32)\n admin: string, // SS58 address — asset admin account\n minBalance: bigint // minimum balance (u128)\n): SubmittableExtrinsic<'promise', ISubmittableResult> {\n return api.tx.assets.create(id, admin, minBalance)\n}\n\nexport function buildMintAsset(\n api: ApiPromise,\n id: number, // AssetId (u32)\n beneficiary: string, // SS58 address\n amount: bigint // u128\n): SubmittableExtrinsic<'promise', ISubmittableResult> {\n return api.tx.assets.mint(id, beneficiary, amount)\n}\n\nexport function buildTransferAsset(\n api: ApiPromise,\n id: number, // AssetId (u32)\n target: string, // SS58 address\n amount: bigint // u128\n): SubmittableExtrinsic<'promise', ISubmittableResult> {\n return api.tx.assets.transfer(id, target, amount)\n}\n","import { Keyring } from '@polkadot/keyring'\nimport type { KeyringPair } from '@polkadot/keyring/types'\nimport { ApiPromise } from '@polkadot/api'\nimport type { SubmittableExtrinsic } from '@polkadot/api/types'\nimport type { ISubmittableResult } from '@polkadot/types/types'\nimport { parseChainError } from './errors'\n\n// Create a Keyring instance for sr25519 (Substrate default)\nexport function createKeyring(): Keyring {\n return new Keyring({ type: 'sr25519' })\n}\n\n// Load a keypair from a mnemonic (BIP39)\nexport function keypairFromMnemonic(mnemonic: string): KeyringPair {\n const keyring = createKeyring()\n return keyring.addFromMnemonic(mnemonic)\n}\n\n// Load a keypair from a seed hex (0x...)\nexport function keypairFromSeed(seed: string): KeyringPair {\n const keyring = createKeyring()\n return keyring.addFromSeed(Buffer.from(seed.replace('0x', ''), 'hex'))\n}\n\n// Dev/test keypairs (only available on --dev chains)\nexport function aliceKeypair(): KeyringPair {\n const keyring = createKeyring()\n return keyring.addFromUri('//Alice')\n}\n\nexport function bobKeypair(): KeyringPair {\n const keyring = createKeyring()\n return keyring.addFromUri('//Bob')\n}\n\n// Sign and submit an extrinsic, returning the final status\nexport async function signAndSend(\n api: ApiPromise,\n extrinsic: SubmittableExtrinsic<'promise', ISubmittableResult>,\n signer: KeyringPair\n): Promise<{ blockHash: string; txHash: string; blockNumber: number }> {\n return new Promise((resolve, reject) => {\n extrinsic\n .signAndSend(signer, ({ status, dispatchError }: ISubmittableResult) => {\n if (status.isInBlock || status.isFinalized) {\n if (dispatchError) {\n reject(parseChainError(dispatchError.toString()))\n } else {\n const blockHash = status.isInBlock\n ? status.asInBlock.toHex()\n : status.asFinalized.toHex()\n const txHash = extrinsic.hash.toHex()\n api.rpc.chain.getHeader(blockHash)\n .then(header => resolve({ blockHash, txHash, blockNumber: header.number.toNumber() }))\n .catch(() => resolve({ blockHash, txHash, blockNumber: 0 }))\n }\n }\n })\n .catch(reject)\n })\n}\n","// Typed error classes matching on-chain error variants.\n// Error names derived from:\n// pallets/awarizon-state/src/lib.rs — Error<T> enum\n// pallets/awarizon-consensus/src/lib.rs — Error<T> enum\n\nexport class AwarizonError extends Error {\n constructor(\n message: string,\n public readonly code: string,\n public readonly details?: unknown\n ) {\n super(message)\n this.name = 'AwarizonError'\n }\n}\n\n// ----------------------------------------------------------------\n// awarizon-state errors\n// ----------------------------------------------------------------\n\nexport class DeveloperNotFoundError extends AwarizonError {\n constructor() { super('Developer not found', 'DeveloperNotFound') }\n}\nexport class DeveloperAlreadyRegisteredError extends AwarizonError {\n constructor() { super('Developer already registered', 'DeveloperAlreadyRegistered') }\n}\nexport class DeveloperNotVerifiedError extends AwarizonError {\n constructor() { super('Developer not verified', 'DeveloperNotVerified') }\n}\nexport class DeveloperSuspendedError extends AwarizonError {\n constructor() { super('Developer is suspended', 'DeveloperSuspended') }\n}\nexport class ManifestNotFoundError extends AwarizonError {\n constructor() { super('Manifest not found', 'ManifestNotFound') }\n}\nexport class ManifestAlreadyRegisteredError extends AwarizonError {\n constructor() { super('Manifest already registered', 'ManifestAlreadyRegistered') }\n}\nexport class ManifestLimitReachedError extends AwarizonError {\n constructor() { super('Manifest limit reached', 'ManifestLimitReached') }\n}\nexport class CampaignNotFoundError extends AwarizonError {\n constructor() { super('Campaign not found', 'CampaignNotFound') }\n}\nexport class CampaignNotActiveError extends AwarizonError {\n constructor() { super('Campaign is not active', 'CampaignNotActive') }\n}\nexport class CampaignExpiredError extends AwarizonError {\n constructor() { super('Campaign has expired', 'CampaignExpired') }\n}\nexport class CampaignDeliveryLimitReachedError extends AwarizonError {\n constructor() { super('Campaign delivery limit reached', 'CampaignDeliveryLimitReached') }\n}\nexport class InboxRecordNotFoundError extends AwarizonError {\n constructor() { super('Inbox record not found', 'InboxRecordNotFound') }\n}\nexport class InboxAlreadyDeliveredError extends AwarizonError {\n constructor() { super('Already delivered to this inbox', 'InboxAlreadyDelivered') }\n}\nexport class InboxFullError extends AwarizonError {\n constructor() { super('Inbox is full (1000 records)', 'InboxFull') }\n}\nexport class EngagementCooldownActiveError extends AwarizonError {\n constructor() { super('Engagement cooldown is active (24h)', 'EngagementCooldownActive') }\n}\nexport class EngagementDailyLimitReachedError extends AwarizonError {\n constructor() { super('Daily engagement limit reached (10/day)', 'EngagementDailyLimitReached') }\n}\nexport class EngagementInvalidError extends AwarizonError {\n constructor() { super('Engagement does not meet minimum requirements', 'EngagementInvalid') }\n}\nexport class InsufficientStakeError extends AwarizonError {\n constructor() { super('Insufficient stake', 'InsufficientStake') }\n}\nexport class InsufficientBalanceError extends AwarizonError {\n constructor() { super('Insufficient balance', 'InsufficientBalance') }\n}\nexport class TargetingDimensionLimitExceededError extends AwarizonError {\n constructor() { super('Targeting dimension limit exceeded (max 6)', 'TargetingDimensionLimitExceeded') }\n}\nexport class InvalidManifestHashError extends AwarizonError {\n constructor() { super('Invalid manifest hash', 'InvalidManifestHash') }\n}\nexport class InvalidCampaignIdError extends AwarizonError {\n constructor() { super('Invalid campaign ID', 'InvalidCampaignId') }\n}\nexport class UnauthorizedError extends AwarizonError {\n constructor() { super('Unauthorized', 'Unauthorized') }\n}\nexport class EpochNotReadyError extends AwarizonError {\n constructor() { super('Epoch is not ready to advance', 'EpochNotReady') }\n}\nexport class NotExpiredYetError extends AwarizonError {\n constructor() { super('Campaign has not expired yet', 'NotExpiredYet') }\n}\nexport class ResetNotReadyError extends AwarizonError {\n constructor() { super('Daily reset is not ready yet', 'ResetNotReady') }\n}\n\n// ----------------------------------------------------------------\n// awarizon-consensus errors\n// ----------------------------------------------------------------\n\nexport class ValidatorAlreadyRegisteredError extends AwarizonError {\n constructor() { super('Validator already registered', 'ValidatorAlreadyRegistered') }\n}\nexport class ValidatorNotFoundError extends AwarizonError {\n constructor() { super('Validator not found', 'ValidatorNotFound') }\n}\nexport class RegionCapExceededError extends AwarizonError {\n constructor() { super('Region validator cap exceeded (20%)', 'RegionCapExceeded') }\n}\nexport class CountryCapExceededError extends AwarizonError {\n constructor() { super('Country validator cap exceeded (10%)', 'CountryCapExceeded') }\n}\nexport class DelegationNotFoundError extends AwarizonError {\n constructor() { super('Delegation not found', 'DelegationNotFound') }\n}\nexport class CannotDelegateToSelfError extends AwarizonError {\n constructor() { super('Cannot delegate stake to yourself', 'CannotDelegateToSelf') }\n}\nexport class ValidatorNotActiveError extends AwarizonError {\n constructor() { super('Validator is not active', 'ValidatorNotActive') }\n}\nexport class AlreadyDelegatedError extends AwarizonError {\n constructor() { super('Already delegated to this validator', 'AlreadyDelegated') }\n}\nexport class MaxValidatorsReachedError extends AwarizonError {\n constructor() { super('Maximum validator count reached', 'MaxValidatorsReached') }\n}\n\n// ----------------------------------------------------------------\n// Error mapping\n// ----------------------------------------------------------------\n\nconst ERROR_MAP: Record<string, () => AwarizonError> = {\n DeveloperNotFound: () => new DeveloperNotFoundError(),\n DeveloperAlreadyRegistered: () => new DeveloperAlreadyRegisteredError(),\n DeveloperNotVerified: () => new DeveloperNotVerifiedError(),\n DeveloperSuspended: () => new DeveloperSuspendedError(),\n ManifestNotFound: () => new ManifestNotFoundError(),\n ManifestAlreadyRegistered: () => new ManifestAlreadyRegisteredError(),\n ManifestLimitReached: () => new ManifestLimitReachedError(),\n CampaignNotFound: () => new CampaignNotFoundError(),\n CampaignNotActive: () => new CampaignNotActiveError(),\n CampaignExpired: () => new CampaignExpiredError(),\n CampaignDeliveryLimitReached: () => new CampaignDeliveryLimitReachedError(),\n InboxRecordNotFound: () => new InboxRecordNotFoundError(),\n InboxAlreadyDelivered: () => new InboxAlreadyDeliveredError(),\n InboxFull: () => new InboxFullError(),\n EngagementCooldownActive: () => new EngagementCooldownActiveError(),\n EngagementDailyLimitReached: () => new EngagementDailyLimitReachedError(),\n EngagementInvalid: () => new EngagementInvalidError(),\n InsufficientStake: () => new InsufficientStakeError(),\n InsufficientBalance: () => new InsufficientBalanceError(),\n TargetingDimensionLimitExceeded: () => new TargetingDimensionLimitExceededError(),\n InvalidManifestHash: () => new InvalidManifestHashError(),\n InvalidCampaignId: () => new InvalidCampaignIdError(),\n Unauthorized: () => new UnauthorizedError(),\n EpochNotReady: () => new EpochNotReadyError(),\n NotExpiredYet: () => new NotExpiredYetError(),\n ResetNotReady: () => new ResetNotReadyError(),\n ValidatorAlreadyRegistered: () => new ValidatorAlreadyRegisteredError(),\n ValidatorNotFound: () => new ValidatorNotFoundError(),\n RegionCapExceeded: () => new RegionCapExceededError(),\n CountryCapExceeded: () => new CountryCapExceededError(),\n DelegationNotFound: () => new DelegationNotFoundError(),\n CannotDelegateToSelf: () => new CannotDelegateToSelfError(),\n ValidatorNotActive: () => new ValidatorNotActiveError(),\n AlreadyDelegated: () => new AlreadyDelegatedError(),\n MaxValidatorsReached: () => new MaxValidatorsReachedError(),\n}\n\nexport function parseChainError(error: unknown): AwarizonError {\n const errorStr = String(error)\n for (const [key, factory] of Object.entries(ERROR_MAP)) {\n if (errorStr.includes(key)) return factory()\n }\n return new AwarizonError(errorStr, 'UnknownError', error)\n}\n"],"mappings":"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","names":[]}
|
|
1
|
+
{"version":3,"sources":["../src/client.ts","../src/customTypes.ts","../src/constants.ts","../src/utils.ts","../src/rpc.ts","../src/extrinsics/developer.ts","../src/extrinsics/manifests.ts","../src/extrinsics/campaigns.ts","../src/extrinsics/inbox.ts","../src/extrinsics/targeting.ts","../src/extrinsics/validators.ts","../src/extrinsics/assets.ts","../src/wallet.ts","../src/errors.ts"],"sourcesContent":["import { ApiPromise, WsProvider } from '@polkadot/api'\nimport { awarizonRpc, awarizonTypes } from './customTypes'\nimport { DEFAULT_ENDPOINT } from './constants'\n\nexport class AwarizonClient {\n private api: ApiPromise | null = null\n private endpoint: string\n // In-flight connection attempt. Callers that arrive while a connect() is\n // already underway await this instead of racing to create their own\n // ApiPromise/WsProvider — without it, several hooks calling connect()\n // concurrently on mount would each open a separate connection.\n private connecting: Promise<ApiPromise> | null = null\n\n constructor(endpoint: string = DEFAULT_ENDPOINT) {\n this.endpoint = endpoint\n }\n\n async connect(): Promise<ApiPromise> {\n if (this.api?.isConnected) return this.api\n if (this.connecting) return this.connecting\n\n this.connecting = (async () => {\n const provider = new WsProvider(this.endpoint)\n const api = await ApiPromise.create({\n provider,\n types: awarizonTypes,\n rpc: awarizonRpc,\n })\n await api.isReady\n this.api = api\n return api\n })()\n\n try {\n return await this.connecting\n } finally {\n this.connecting = null\n }\n }\n\n async disconnect(): Promise<void> {\n if (this.api) {\n await this.api.disconnect()\n this.api = null\n }\n }\n\n getApi(): ApiPromise {\n if (!this.api?.isConnected) {\n throw new Error('Not connected. Call connect() first.')\n }\n return this.api\n }\n\n async subscribeNewBlocks(\n callback: (blockNumber: number, blockHash: string) => void\n ): Promise<() => void> {\n const api = this.getApi()\n const unsub = await api.rpc.chain.subscribeNewHeads((header) => {\n callback(header.number.toNumber(), header.hash.toHex())\n })\n return unsub as unknown as () => void\n }\n\n async getBalance(address: string): Promise<bigint> {\n const api = this.getApi()\n const account = await api.query.system.account(address)\n return BigInt((account as any).data.free.toString())\n }\n}\n\nexport async function connect(\n endpoint: string = DEFAULT_ENDPOINT\n): Promise<AwarizonClient> {\n const client = new AwarizonClient(endpoint)\n await client.connect()\n return client\n}\n","// Custom SCALE type registry and RPC definitions for @polkadot/api.\n// Enum variants and struct field names derived from:\n// pallets/awarizon-types/src/lib.rs\n// pallets/awarizon-consensus/src/lib.rs\n// node/src/awarizon_rpc.rs\n\nexport const awarizonTypes = {\n // pallets/awarizon-types/src/lib.rs — enum AppCategory\n AppCategory: {\n _enum: [\n 'DeFi',\n 'Gaming',\n 'Social',\n 'Productivity',\n 'Infrastructure',\n 'DigitalAssets',\n 'DeveloperTools',\n 'Education',\n ],\n },\n\n // pallets/awarizon-types/src/lib.rs — enum CampaignStatus\n CampaignStatus: {\n _enum: ['Pending', 'Active', 'Expired', 'Terminated'],\n },\n\n // pallets/awarizon-types/src/lib.rs — enum InboxRecordStatus\n InboxRecordStatus: {\n _enum: ['Pending', 'Delivered', 'Dismissed', 'Engaged'],\n },\n\n // pallets/awarizon-types/src/lib.rs — enum DeveloperStatus\n DeveloperStatus: {\n _enum: ['Unverified', 'Verified', 'Suspended'],\n },\n\n // pallets/awarizon-types/src/lib.rs — enum TransactionType\n TransactionType: {\n _enum: ['Financial', 'Distribution', 'System'],\n },\n\n // pallets/awarizon-types/src/lib.rs — struct TargetingCriteria\n TargetingCriteria: {\n wallet_age_min: 'Option<u32>',\n wallet_age_max: 'Option<u32>',\n riz_balance_min: 'Option<u128>',\n riz_balance_max: 'Option<u128>',\n activity_min: 'Option<u32>',\n activity_max: 'Option<u32>',\n region_codes: 'Vec<u8>',\n category_history: 'Vec<AppCategory>',\n custom_logic_hash: 'Option<H256>',\n },\n\n // pallets/awarizon-types/src/lib.rs — struct DeveloperProfile<AccountId, BlockNumber>\n DeveloperProfile: {\n account: 'AccountId',\n staked_riz: 'u128',\n status: 'DeveloperStatus',\n first_distribution_block: 'Option<u32>',\n violation_count: 'u32',\n total_campaigns: 'u32',\n total_deliveries: 'u64',\n },\n\n // pallets/awarizon-types/src/lib.rs — struct AppManifest<AccountId, BlockNumber>\n AppManifest: {\n manifest_hash: 'H256',\n developer: 'AccountId',\n category: 'AppCategory',\n registered_at: 'u32',\n metadata_uri: 'Vec<u8>',\n },\n\n // pallets/awarizon-types/src/lib.rs — struct Campaign<AccountId, BlockNumber>\n Campaign: {\n campaign_id: 'H256',\n developer: 'AccountId',\n manifest_hash: 'H256',\n targeting: 'TargetingCriteria',\n status: 'CampaignStatus',\n created_at: 'u32',\n expires_at: 'u32',\n max_deliveries: 'u64',\n current_deliveries: 'u64',\n storage_fee_paid: 'u128',\n },\n\n // pallets/awarizon-types/src/lib.rs — struct InboxRecord<AccountId, BlockNumber>\n InboxRecord: {\n record_id: 'H256',\n campaign_id: 'H256',\n developer: 'AccountId',\n manifest_hash: 'H256',\n category: 'AppCategory',\n status: 'InboxRecordStatus',\n delivered_at: 'u32',\n engaged_at: 'Option<u32>',\n reward_claimed: 'bool',\n },\n\n // pallets/awarizon-consensus/src/lib.rs — struct ValidatorInfo<AccountId>\n ValidatorInfo: {\n account: 'AccountId',\n self_stake: 'u128',\n delegated_stake: 'u128',\n region_code: 'u8',\n country_code: 'u8',\n uptime_bps: 'u32',\n finality_bps: 'u32',\n blocks_bps: 'u32',\n slash_count: 'u32',\n is_active: 'bool',\n epoch_registered: 'u64',\n },\n\n // pallets/awarizon-consensus/src/lib.rs — struct Delegation<AccountId>\n Delegation: {\n delegator: 'AccountId',\n validator: 'AccountId',\n amount: 'u128',\n epoch_delegated: 'u64',\n },\n}\n\n// RPC method definitions for @polkadot/api.\n// All methods are in the \"awarizon\" namespace and return JSON (not SCALE).\n// Wire names from: node/src/awarizon_rpc.rs #[method(name = \"...\")]\nexport const awarizonRpc = {\n awarizon: {\n // Developer endpoints\n getDeveloperProfile: {\n description: 'Get developer profile by SS58 account address',\n params: [{ name: 'account', type: 'Text' }],\n type: 'Json',\n },\n getDeveloperCampaigns: {\n description: 'Get all campaign IDs for a developer',\n params: [{ name: 'account', type: 'Text' }],\n type: 'Vec<Text>',\n },\n getDeveloperManifests: {\n description: 'Get all manifest hashes for a developer',\n params: [{ name: 'account', type: 'Text' }],\n type: 'Vec<Text>',\n },\n\n // Campaign endpoints\n getCampaign: {\n description: 'Get campaign details by campaign ID (0x hex)',\n params: [{ name: 'campaign_id', type: 'H256' }],\n type: 'Json',\n },\n getActiveCampaignCount: {\n description: 'Get the number of currently active campaigns',\n params: [],\n type: 'u64',\n },\n getCampaignDeliveryStatus: {\n description: 'Get delivery progress for a campaign',\n params: [{ name: 'campaign_id', type: 'H256' }],\n type: 'Json',\n },\n\n // Inbox endpoints\n getInboxCount: {\n description: 'Get number of inbox records for a wallet',\n params: [{ name: 'wallet', type: 'Text' }],\n type: 'u32',\n },\n getInboxRecord: {\n description: 'Get a specific inbox record by wallet and record ID',\n params: [\n { name: 'wallet', type: 'Text' },\n { name: 'record_id', type: 'Text' },\n ],\n type: 'Json',\n },\n\n // Targeting endpoints\n getWalletTargetingProfile: {\n description: 'Get pre-computed targeting profile for a wallet',\n params: [{ name: 'wallet', type: 'Text' }],\n type: 'Json',\n },\n checkCampaignMatch: {\n description: 'Check cached targeting match result for (campaign, wallet)',\n params: [\n { name: 'campaign_id', type: 'Text' },\n { name: 'wallet', type: 'Text' },\n ],\n type: 'bool',\n },\n\n // Validator endpoints\n getActiveValidators: {\n description: 'Get SS58 addresses of all active validators',\n params: [],\n type: 'Vec<Text>',\n },\n getValidatorCount: {\n description: 'Get total number of active validators',\n params: [],\n type: 'u32',\n },\n getValidatorPerformance: {\n description: 'Get performance metrics for a validator',\n params: [{ name: 'account', type: 'Text' }],\n type: 'Json',\n },\n\n // Network stats endpoints\n getNetworkStats: {\n description: 'Get Awarizon network statistics',\n params: [],\n type: 'Json',\n },\n getTokenStats: {\n description: 'Get token issuance and engagement pool statistics',\n params: [],\n type: 'Json',\n },\n getRecentTransactions: {\n description: 'Get recent transactions across the chain',\n params: [],\n type: 'Json',\n },\n getBlockTransactions: {\n description: 'Get all transactions in a specific block',\n params: [{ name: 'block_number', type: 'u32' }],\n type: 'Json',\n },\n\n // Identity endpoints\n getIdentity: {\n description: 'Get identity record for an account',\n params: [\n { name: 'account', type: 'Text' },\n { name: 'at', type: 'Option<Hash>' },\n ],\n type: 'Json',\n },\n lookupName: {\n description: 'Resolve a .riz name to an account and identity',\n params: [\n { name: 'name', type: 'Text' },\n { name: 'at', type: 'Option<Hash>' },\n ],\n type: 'Json',\n },\n isNameAvailable: {\n description: 'Check if a .riz name is available to register',\n params: [\n { name: 'name', type: 'Text' },\n { name: 'at', type: 'Option<Hash>' },\n ],\n type: 'bool',\n },\n getTotalIdentities: {\n description: 'Get total number of registered identities',\n params: [{ name: 'at', type: 'Option<Hash>' }],\n type: 'u32',\n },\n\n // Links endpoints\n getLinkedAddresses: {\n description: 'Get all linked external addresses for an account',\n params: [\n { name: 'account', type: 'Text' },\n { name: 'at', type: 'Option<Hash>' },\n ],\n type: 'Json',\n },\n },\n\n // DEX endpoints — separate \"dex\" namespace, unlike the rest of the\n // RPC surface which lives under \"awarizon\". Matches the wire names\n // in node/src/awarizon_rpc.rs (dex_getPool, dex_getQuote, ...).\n // Asset params/returns are serde JSON (a bare string \"native\" or a\n // { token: n } object), not SCALE — declared as 'Json' so\n // @polkadot/api passes them through unchanged instead of trying to\n // SCALE-encode/decode them.\n dex: {\n getPool: {\n description: 'Get pool info for an asset pair',\n params: [\n { name: 'asset_a', type: 'Json' },\n { name: 'asset_b', type: 'Json' },\n ],\n type: 'Json',\n },\n getQuote: {\n description: 'Get a price quote for a swap',\n params: [\n { name: 'asset_in', type: 'Json' },\n { name: 'asset_out', type: 'Json' },\n { name: 'amount_in', type: 'Text' },\n ],\n type: 'Json',\n },\n getTwap: {\n description: 'Get TWAP price accumulator data for a pool',\n params: [\n { name: 'asset_a', type: 'Json' },\n { name: 'asset_b', type: 'Json' },\n ],\n type: 'Json',\n },\n getAllPools: {\n description: 'Get all DEX pools, up to limit',\n params: [{ name: 'limit', type: 'u32' }],\n type: 'Json',\n },\n getFeeDestination: {\n description: 'Get protocol fee destination (\"burn\" or \"treasury\")',\n params: [],\n type: 'Text',\n },\n getTotalBurned: {\n description: 'Get total protocol fees burned, as planck decimal string',\n params: [],\n type: 'Text',\n },\n },\n}\n","// Protocol constants derived from pallets/awarizon-types/src/constants.rs\n\n// ----------------------------------------------------------------\n// Token denomination\n// ----------------------------------------------------------------\nexport const PLANCK = 1n\nexport const RIZ = 1_000_000_000_000n // 10^12 planck\nexport const MICRO_RIZ = 1_000_000n // 10^6 planck\nexport const MILLI_RIZ = 1_000_000_000n // 10^9 planck\n\n// ----------------------------------------------------------------\n// Network defaults\n// ----------------------------------------------------------------\nexport const DEFAULT_ENDPOINT = 'wss://rpc.awarizon.com'\nexport const DEFAULT_HTTP_ENDPOINT = 'https://rpc.awarizon.com'\nexport const DEFAULT_INDEXER_ENDPOINT = 'https://index.awarizon.com'\nexport const CHAIN_NAME = 'Awarizon'\n\n// ----------------------------------------------------------------\n// Consensus\n// ----------------------------------------------------------------\nexport const GENESIS_VALIDATORS = 51\nexport const TARGET_VALIDATORS = 121\nexport const BLOCK_TIME_SECONDS = 3\nexport const EPOCH_LENGTH_BLOCKS = 28_800\n\n// ----------------------------------------------------------------\n// Campaign rules\n// ----------------------------------------------------------------\nexport const MIN_CAMPAIGN_DURATION_DAYS = 1\nexport const MAX_CAMPAIGN_DURATION_DAYS = 90\nexport const DEFAULT_CAMPAIGN_DURATION_DAYS = 30\n\n// ----------------------------------------------------------------\n// Engagement rules\n// ----------------------------------------------------------------\nexport const MIN_SESSION_SECONDS = 120\nexport const MIN_INTERACTIONS = 5\nexport const ENGAGEMENT_COOLDOWN_HOURS = 24\nexport const MAX_ENGAGEMENT_EVENTS_PER_DAY = 10\n\n// ----------------------------------------------------------------\n// Targeting limits\n// ----------------------------------------------------------------\nexport const MAX_TARGETING_DIMENSIONS = 6\nexport const MAX_REGION_CODES_PER_CAMPAIGN = 64\nexport const MAX_CATEGORY_HISTORY_ENTRIES = 8\n\n// ----------------------------------------------------------------\n// Developer verification\n// ----------------------------------------------------------------\nexport const DEVELOPER_MIN_TENURE_DAYS = 30\n\n// ----------------------------------------------------------------\n// Validator performance weights (basis points, sum = 10000)\n// ----------------------------------------------------------------\nexport const PERF_WEIGHT_UPTIME_BPS = 5_000\nexport const PERF_WEIGHT_FINALITY_BPS = 2_500\nexport const PERF_WEIGHT_BLOCKS_BPS = 1_500\nexport const PERF_WEIGHT_SLASH_BPS = 1_000\nexport const PERF_MULTIPLIER_MIN_BPS = 5_000\nexport const PERF_MULTIPLIER_MAX_BPS = 12_500\n\n// ----------------------------------------------------------------\n// Geographic caps (basis points)\n// ----------------------------------------------------------------\nexport const MAX_VALIDATORS_PER_REGION_BPS = 2_000 // 20%\nexport const MAX_VALIDATORS_PER_COUNTRY_BPS = 1_000 // 10%\n","import { RIZ } from './constants'\n\n// Convert planck to RIZ display string e.g. 1_000_000_000_000n → \"1.0000\"\nexport function formatRiz(planck: bigint, decimals = 4): string {\n const whole = planck / RIZ\n const remainder = planck % RIZ\n const decStr = remainder.toString().padStart(12, '0').slice(0, decimals)\n return `${whole}.${decStr}`\n}\n\n// Convert RIZ amount string to planck bigint e.g. \"1.5\" → 1_500_000_000_000n\nexport function parseRiz(riz: string): bigint {\n const [whole, decimal = ''] = riz.split('.')\n const paddedDecimal = decimal.padEnd(12, '0').slice(0, 12)\n return BigInt(whole) * RIZ + BigInt(paddedDecimal)\n}\n\n// Convert hex string to Uint8Array\nexport function hexToBytes(hex: string): Uint8Array {\n const clean = hex.replace('0x', '')\n return new Uint8Array(\n clean.match(/.{1,2}/g)?.map(b => parseInt(b, 16)) ?? []\n )\n}\n\n// Convert Uint8Array to hex string with 0x prefix\nexport function bytesToHex(bytes: Uint8Array): string {\n return '0x' + Array.from(bytes)\n .map(b => b.toString(16).padStart(2, '0'))\n .join('')\n}\n\n// Generate a campaign ID from manifest hash + current timestamp\nexport function generateCampaignId(manifestHash: string): string {\n const timestamp = Date.now().toString(16).padStart(16, '0')\n const hashPart = manifestHash.replace('0x', '').slice(0, 48)\n return '0x' + hashPart + timestamp\n}\n\n// Basic SS58 address length check\nexport function isValidAddress(address: string): boolean {\n return address.length >= 46 && address.length <= 48\n}\n\n// Format a block count to a human-readable time estimate (3s block time)\nexport function blocksToTime(blocks: number): string {\n const seconds = blocks * 3\n if (seconds < 60) return `${seconds}s`\n if (seconds < 3600) return `${Math.floor(seconds / 60)}m`\n if (seconds < 86400) return `${Math.floor(seconds / 3600)}h`\n return `${Math.floor(seconds / 86400)}d`\n}\n\n// Parse a u128-as-string from RPC into bigint\nexport function parsePlanckString(value: string): bigint {\n return BigInt(value)\n}\n","// Typed wrappers for all 15 Awarizon custom RPC methods.\n// Wire names and return shapes derived from node/src/awarizon_rpc.rs.\n\nimport { ApiPromise } from '@polkadot/api'\nimport type {\n NetworkStats,\n CampaignDeliveryStatus,\n WalletTargetingProfile,\n ValidatorPerformanceResponse,\n TokenStats,\n DeveloperProfile,\n Campaign,\n InboxRecord,\n TransactionSummary,\n VestingSchedule,\n IdentityRecord,\n NameLookup,\n LinkedAddress,\n ChainType,\n LinkStatus,\n DexAssetWire,\n DexPoolResponse,\n DexQuoteResponse,\n DexTwapResponse,\n} from './types'\n\n// ----------------------------------------------------------------\n// Developer endpoints\n// ----------------------------------------------------------------\n\nexport async function getDeveloperProfile(\n api: ApiPromise,\n account: string\n): Promise<DeveloperProfile | null> {\n const result = await (api.rpc as any).awarizon.getDeveloperProfile(account)\n // The `Json` RPC codec type has no concept of null — its constructor\n // does `Object.entries(value || {})`, so an RPC result of `null`\n // (Option::None on the node side) decodes to an empty Map, and\n // `.toJSON()` on that returns `{}`, not `null`. `{}` is truthy, so a\n // plain `if (!json)` check here never fires for an unregistered\n // account. `.isEmpty` reflects the real \"zero entries\" state.\n if (result.isEmpty) return null\n const json = result.toJSON()\n return {\n ...json,\n staked_riz: BigInt(json.staked_riz ?? '0'),\n total_deliveries: BigInt(json.total_deliveries ?? '0'),\n } as DeveloperProfile\n}\n\nexport async function getDeveloperCampaigns(\n api: ApiPromise,\n account: string\n): Promise<string[]> {\n const result = await (api.rpc as any).awarizon.getDeveloperCampaigns(account)\n return result.toJSON() as string[]\n}\n\nexport async function getDeveloperManifests(\n api: ApiPromise,\n account: string\n): Promise<string[]> {\n const result = await (api.rpc as any).awarizon.getDeveloperManifests(account)\n return result.toJSON() as string[]\n}\n\n// ----------------------------------------------------------------\n// Campaign endpoints\n// ----------------------------------------------------------------\n\nexport async function getCampaign(\n api: ApiPromise,\n campaignId: string\n): Promise<Campaign | null> {\n const result = await (api.rpc as any).awarizon.getCampaign(campaignId)\n if (result.isEmpty) return null\n const json = result.toJSON()\n return {\n ...json,\n max_deliveries: BigInt(json.max_deliveries ?? '0'),\n current_deliveries: BigInt(json.current_deliveries ?? '0'),\n storage_fee_paid: BigInt(json.storage_fee_paid ?? '0'),\n } as Campaign\n}\n\nexport async function getActiveCampaignCount(api: ApiPromise): Promise<bigint> {\n const result = await (api.rpc as any).awarizon.getActiveCampaignCount()\n return BigInt(result.toString())\n}\n\nexport async function getCampaignDeliveryStatus(\n api: ApiPromise,\n campaignId: string\n): Promise<CampaignDeliveryStatus | null> {\n const result = await (api.rpc as any).awarizon.getCampaignDeliveryStatus(campaignId)\n if (result.isEmpty) return null\n const json = result.toJSON()\n return {\n current_deliveries: BigInt(json.current_deliveries ?? '0'),\n max_deliveries: BigInt(json.max_deliveries ?? '0'),\n remaining: BigInt(json.remaining ?? '0'),\n percentage_used: json.percentage_used as number,\n }\n}\n\n// ----------------------------------------------------------------\n// Inbox endpoints\n// ----------------------------------------------------------------\n\nexport async function getInboxCount(\n api: ApiPromise,\n wallet: string\n): Promise<number> {\n const result = await (api.rpc as any).awarizon.getInboxCount(wallet)\n return result.toNumber()\n}\n\nexport async function getInboxRecord(\n api: ApiPromise,\n wallet: string,\n recordId: string\n): Promise<InboxRecord | null> {\n const result = await (api.rpc as any).awarizon.getInboxRecord(wallet, recordId)\n if (result.isEmpty) return null\n return result.toJSON() as InboxRecord\n}\n\n// ----------------------------------------------------------------\n// Targeting endpoints\n// ----------------------------------------------------------------\n\nexport async function getWalletTargetingProfile(\n api: ApiPromise,\n wallet: string\n): Promise<WalletTargetingProfile> {\n const result = await (api.rpc as any).awarizon.getWalletTargetingProfile(wallet)\n return result.toJSON() as WalletTargetingProfile\n}\n\nexport async function checkCampaignMatch(\n api: ApiPromise,\n campaignId: string,\n wallet: string\n): Promise<boolean> {\n const result = await (api.rpc as any).awarizon.checkCampaignMatch(campaignId, wallet)\n return result.isTrue\n}\n\n// ----------------------------------------------------------------\n// Validator endpoints\n// ----------------------------------------------------------------\n\nexport async function getActiveValidators(api: ApiPromise): Promise<string[]> {\n const result = await (api.rpc as any).awarizon.getActiveValidators()\n return result.toJSON() as string[]\n}\n\nexport async function getValidatorCount(api: ApiPromise): Promise<number> {\n const result = await (api.rpc as any).awarizon.getValidatorCount()\n return result.toNumber()\n}\n\nexport async function getValidatorPerformance(\n api: ApiPromise,\n account: string\n): Promise<ValidatorPerformanceResponse | null> {\n const result = await (api.rpc as any).awarizon.getValidatorPerformance(account)\n return result.toJSON() as ValidatorPerformanceResponse | null\n}\n\n// ----------------------------------------------------------------\n// Network stats endpoints\n// ----------------------------------------------------------------\n\nexport async function getNetworkStats(api: ApiPromise): Promise<NetworkStats> {\n const result = await (api.rpc as any).awarizon.getNetworkStats()\n const json = result.toJSON() as Record<string, unknown>\n return {\n total_wallets: BigInt(String(json.total_wallets ?? '0')),\n total_deliveries: BigInt(String(json.total_deliveries ?? '0')),\n active_campaigns: BigInt(String(json.active_campaigns ?? '0')),\n total_staked: String(json.total_staked ?? '0'),\n current_epoch: BigInt(String(json.current_epoch ?? '0')),\n inbox_reserve_balance: String(json.inbox_reserve_balance ?? '0'),\n total_extrinsics: Number(json.total_extrinsics ?? 0),\n circulating_supply: String(json.circulating_supply ?? '0'),\n non_circulating_supply: String(json.non_circulating_supply ?? '0'),\n }\n}\n\nexport async function getTokenStats(api: ApiPromise): Promise<TokenStats> {\n const result = await (api.rpc as any).awarizon.getTokenStats()\n return result.toJSON() as TokenStats\n}\n\nexport async function getRecentTransactions(\n api: ApiPromise\n): Promise<TransactionSummary[]> {\n const result = await (api.rpc as any).awarizon.getRecentTransactions()\n return (result.toJSON() as any[]).map((r: any) => ({\n block_number: Number(r.block_number ?? 0),\n extrinsic_index: Number(r.extrinsic_index ?? 0),\n success: Boolean(r.success),\n }))\n}\n\nexport async function getBlockTransactions(\n api: ApiPromise,\n blockNumber: number\n): Promise<TransactionSummary[]> {\n const result = await (api.rpc as any).awarizon.getBlockTransactions(blockNumber)\n return (result.toJSON() as any[]).map((r: any) => ({\n block_number: Number(r.block_number ?? 0),\n extrinsic_index: Number(r.extrinsic_index ?? 0),\n success: Boolean(r.success),\n }))\n}\n\nexport async function getVestingSchedule(\n api: ApiPromise,\n account: string\n): Promise<VestingSchedule[]> {\n const result = await (api.query as any).vesting.vesting(account)\n const json = result.toJSON()\n if (!json || !Array.isArray(json)) return []\n return json.map((v: any) => ({\n locked: String(v.locked ?? v.Locked ?? '0'),\n per_block: String(v.perBlock ?? v.per_block ?? '0'),\n starting_block: Number(v.startingBlock ?? v.starting_block ?? 0),\n }))\n}\n\n// ----------------------------------------------------------------\n// Identity endpoints\n// ----------------------------------------------------------------\n\nexport async function getIdentity(\n api: ApiPromise,\n account: string\n): Promise<IdentityRecord | null> {\n const result = await (api.rpc as any).awarizon.getIdentity(account, null)\n if (result.isEmpty) return null\n const json = result.toJSON()\n return {\n account: json.account,\n rizName: json.riz_name ?? null,\n rizNameFull: json.riz_name ? json.riz_name + '.riz' : null,\n displayName: json.display_name ?? null,\n bio: json.bio ?? null,\n avatarUri: json.avatar_uri ?? null,\n website: json.website ?? null,\n registeredAt: Number(json.registered_at ?? 0),\n verified: Boolean(json.verified),\n reputationScore: Number(json.reputation_score ?? 0),\n linkedAddresses: (json.linked_addresses ?? []).map((la: any) => ({\n chain: la.chain as ChainType,\n address: la.address as string,\n status: la.status as LinkStatus,\n linkedAt: Number(la.linked_at ?? 0),\n })),\n }\n}\n\nexport async function lookupName(\n api: ApiPromise,\n name: string\n): Promise<NameLookup | null> {\n const result = await (api.rpc as any).awarizon.lookupName(name, null)\n if (result.isEmpty) return null\n const json = result.toJSON()\n const identity = json.identity ? await getIdentity(api, json.account) : null\n return {\n rizName: json.riz_name as string,\n account: json.account as string,\n identity,\n }\n}\n\nexport async function getLinkedAddresses(\n api: ApiPromise,\n account: string\n): Promise<LinkedAddress[]> {\n const result = await (api.rpc as any).awarizon.getLinkedAddresses(account, null)\n const arr = result.toJSON() as any[]\n if (!Array.isArray(arr)) return []\n return arr.map((la: any) => ({\n chain: la.chain as ChainType,\n address: la.address as string,\n status: la.status as LinkStatus,\n linkedAt: Number(la.linked_at ?? 0),\n }))\n}\n\nexport async function isNameAvailable(\n api: ApiPromise,\n name: string\n): Promise<boolean> {\n const result = await (api.rpc as any).awarizon.isNameAvailable(name, null)\n return Boolean(result.toJSON())\n}\n\nexport async function getTotalIdentities(api: ApiPromise): Promise<number> {\n const result = await (api.rpc as any).awarizon.getTotalIdentities(null)\n return result.toNumber()\n}\n\n// ----------------------------------------------------------------\n// DEX endpoints — separate \"dex\" RPC namespace (see customTypes.ts)\n// ----------------------------------------------------------------\n\nexport async function getDexPool(\n api: ApiPromise,\n assetA: DexAssetWire,\n assetB: DexAssetWire\n): Promise<DexPoolResponse | null> {\n const result = await (api.rpc as any).dex.getPool(assetA, assetB)\n if (result.isEmpty) return null\n return result.toJSON() as DexPoolResponse\n}\n\nexport async function getDexQuote(\n api: ApiPromise,\n assetIn: DexAssetWire,\n assetOut: DexAssetWire,\n amountIn: string\n): Promise<DexQuoteResponse> {\n const result = await (api.rpc as any).dex.getQuote(assetIn, assetOut, amountIn)\n return result.toJSON() as DexQuoteResponse\n}\n\nexport async function getDexTwap(\n api: ApiPromise,\n assetA: DexAssetWire,\n assetB: DexAssetWire\n): Promise<DexTwapResponse | null> {\n const result = await (api.rpc as any).dex.getTwap(assetA, assetB)\n if (result.isEmpty) return null\n return result.toJSON() as DexTwapResponse\n}\n\nexport async function getAllDexPools(\n api: ApiPromise,\n limit = 50\n): Promise<DexPoolResponse[]> {\n const result = await (api.rpc as any).dex.getAllPools(limit)\n return (result.toJSON() as DexPoolResponse[] | null) ?? []\n}\n\nexport async function getDexFeeDestination(api: ApiPromise): Promise<'burn' | 'treasury'> {\n const result = await (api.rpc as any).dex.getFeeDestination()\n return result.toString().toLowerCase() === 'treasury' ? 'treasury' : 'burn'\n}\n\nexport async function getDexTotalBurned(api: ApiPromise): Promise<string> {\n const result = await (api.rpc as any).dex.getTotalBurned()\n return result.toString()\n}\n","// AwarizonState pallet — developer extrinsics\n// Pallet index: 8 (runtime/src/lib.rs #[runtime::pallet_index(8)])\n// call_index 0: register_developer()\n// call_index 1: stake_riz(amount: BalanceOf<T>)\n\nimport { ApiPromise } from '@polkadot/api'\nimport type { SubmittableExtrinsic } from '@polkadot/api/types'\nimport type { ISubmittableResult } from '@polkadot/types/types'\n\nexport function buildRegisterDeveloper(\n api: ApiPromise\n): SubmittableExtrinsic<'promise', ISubmittableResult> {\n return api.tx.awarizonState.registerDeveloper()\n}\n\nexport function buildStakeRiz(\n api: ApiPromise,\n amount: bigint\n): SubmittableExtrinsic<'promise', ISubmittableResult> {\n return api.tx.awarizonState.stakeRiz(amount)\n}\n","// AwarizonState pallet — manifest extrinsics\n// call_index 2: register_manifest(manifest_hash: [u8;32], category: AppCategory, metadata_uri: BoundedVec<u8, 256>)\n\nimport { ApiPromise } from '@polkadot/api'\nimport type { SubmittableExtrinsic } from '@polkadot/api/types'\nimport type { ISubmittableResult } from '@polkadot/types/types'\nimport type { AppCategory } from '../types'\n\nexport function buildRegisterManifest(\n api: ApiPromise,\n manifestHash: string, // 0x-prefixed 32-byte hex\n category: AppCategory,\n metadataUri: string | Uint8Array // UTF-8 string or raw bytes, max 256 bytes\n): SubmittableExtrinsic<'promise', ISubmittableResult> {\n return api.tx.awarizonState.registerManifest(manifestHash, category, metadataUri)\n}\n","// AwarizonState pallet — campaign extrinsics\n// call_index 3: create_campaign(campaign_id, manifest_hash, targeting, duration_days, max_deliveries)\n// call_index 5: terminate_campaign(campaign_id)\n// call_index 10: advance_epoch()\n// call_index 11: expire_campaign(campaign_id)\n// call_index 12: reset_daily_engagement()\n\nimport { ApiPromise } from '@polkadot/api'\nimport type { SubmittableExtrinsic } from '@polkadot/api/types'\nimport type { ISubmittableResult } from '@polkadot/types/types'\nimport type { TargetingCriteria } from '../types'\n\nexport function buildCreateCampaign(\n api: ApiPromise,\n campaignId: string, // [u8; 32] 0x hex\n manifestHash: string, // [u8; 32] 0x hex\n targeting: TargetingCriteria,\n durationDays: number, // u32, 1–90\n maxDeliveries: bigint // u64\n): SubmittableExtrinsic<'promise', ISubmittableResult> {\n return api.tx.awarizonState.createCampaign(\n campaignId,\n manifestHash,\n targeting,\n durationDays,\n maxDeliveries\n )\n}\n\nexport function buildTerminateCampaign(\n api: ApiPromise,\n campaignId: string // [u8; 32] 0x hex\n): SubmittableExtrinsic<'promise', ISubmittableResult> {\n return api.tx.awarizonState.terminateCampaign(campaignId)\n}\n\nexport function buildExpireCampaign(\n api: ApiPromise,\n campaignId: string // [u8; 32] 0x hex\n): SubmittableExtrinsic<'promise', ISubmittableResult> {\n return api.tx.awarizonState.expireCampaign(campaignId)\n}\n\nexport function buildAdvanceEpoch(\n api: ApiPromise\n): SubmittableExtrinsic<'promise', ISubmittableResult> {\n return api.tx.awarizonState.advanceEpoch()\n}\n\nexport function buildResetDailyEngagement(\n api: ApiPromise\n): SubmittableExtrinsic<'promise', ISubmittableResult> {\n return api.tx.awarizonState.resetDailyEngagement()\n}\n","// AwarizonState pallet — inbox extrinsics\n// call_index 4: deliver_to_inbox(wallet, campaign_id, record_id)\n// call_index 6: dismiss_inbox_record(record_id)\n// call_index 7: submit_engagement(record_id, session_duration_seconds, interaction_count)\n// call_index 8: claim_reward(record_id)\n// call_index 9: update_wallet_index(wallet_age_days, activity_count, category_history, region_code)\n\nimport { ApiPromise } from '@polkadot/api'\nimport type { SubmittableExtrinsic } from '@polkadot/api/types'\nimport type { ISubmittableResult } from '@polkadot/types/types'\n\nexport function buildDeliverToInbox(\n api: ApiPromise,\n wallet: string, // SS58 address of target wallet\n campaignId: string, // [u8; 32] 0x hex\n recordId: string // [u8; 32] 0x hex\n): SubmittableExtrinsic<'promise', ISubmittableResult> {\n return api.tx.awarizonState.deliverToInbox(wallet, campaignId, recordId)\n}\n\nexport function buildDismissInboxRecord(\n api: ApiPromise,\n recordId: string // [u8; 32] 0x hex\n): SubmittableExtrinsic<'promise', ISubmittableResult> {\n return api.tx.awarizonState.dismissInboxRecord(recordId)\n}\n\nexport function buildSubmitEngagement(\n api: ApiPromise,\n recordId: string, // [u8; 32] 0x hex\n sessionDurationSeconds: number, // u32, must be >= MIN_SESSION_SECONDS (120)\n interactionCount: number // u32, must be >= MIN_INTERACTIONS (5)\n): SubmittableExtrinsic<'promise', ISubmittableResult> {\n return api.tx.awarizonState.submitEngagement(\n recordId,\n sessionDurationSeconds,\n interactionCount\n )\n}\n\nexport function buildClaimReward(\n api: ApiPromise,\n recordId: string // [u8; 32] 0x hex\n): SubmittableExtrinsic<'promise', ISubmittableResult> {\n return api.tx.awarizonState.claimReward(recordId)\n}\n\nexport function buildUpdateWalletIndex(\n api: ApiPromise,\n walletAgeDays: number, // u32\n activityCount: number, // u32\n categoryHistory: number[], // BoundedVec<u8, 8> — AppCategory IDs\n regionCode: number // u8\n): SubmittableExtrinsic<'promise', ISubmittableResult> {\n return api.tx.awarizonState.updateWalletIndex(\n walletAgeDays,\n activityCount,\n categoryHistory,\n regionCode\n )\n}\n","// AwarizonTargeting pallet — targeting extrinsics\n// Pallet index: 9 (runtime/src/lib.rs #[runtime::pallet_index(9)])\n// call_index 0: build_bloom_filter(campaign_id)\n// call_index 1: check_wallet_match(campaign_id, wallet)\n// call_index 2: run_targeting_batch(campaign_id, wallets)\n\nimport { ApiPromise } from '@polkadot/api'\nimport type { SubmittableExtrinsic } from '@polkadot/api/types'\nimport type { ISubmittableResult } from '@polkadot/types/types'\n\nexport function buildBloomFilter(\n api: ApiPromise,\n campaignId: string // [u8; 32] 0x hex\n): SubmittableExtrinsic<'promise', ISubmittableResult> {\n return api.tx.awarizonTargeting.buildBloomFilter(campaignId)\n}\n\nexport function buildCheckWalletMatch(\n api: ApiPromise,\n campaignId: string, // [u8; 32] 0x hex\n wallet: string // SS58 address\n): SubmittableExtrinsic<'promise', ISubmittableResult> {\n return api.tx.awarizonTargeting.checkWalletMatch(campaignId, wallet)\n}\n\nexport function buildRunTargetingBatch(\n api: ApiPromise,\n campaignId: string, // [u8; 32] 0x hex\n wallets: string[] // SS58 addresses, max 100 (BoundedVec<AccountId, 100>)\n): SubmittableExtrinsic<'promise', ISubmittableResult> {\n return api.tx.awarizonTargeting.runTargetingBatch(campaignId, wallets)\n}\n","// AwarizonConsensus pallet — validator extrinsics\n// Pallet index: 10 (runtime/src/lib.rs #[runtime::pallet_index(10)])\n// call_index 0: register_validator(self_stake: u128, region_code: u8, country_code: u8)\n// call_index 1: delegate_stake(validator: AccountId, amount: u128)\n// call_index 2: undelegate_stake(validator: AccountId)\n// call_index 3: update_performance(validator, uptime_bps, finality_bps, blocks_bps)\n// call_index 4: run_epoch_election(epoch: u64)\n// call_index 5: slash_validator(validator: AccountId, reason: u8) — root only\n// call_index 6: set_commission(commission: u32)\n// call_index 7: claim_validator_reward()\n// call_index 8: claim_delegation_reward(validator: AccountId)\n// call_index 9: claim_all_delegation_rewards()\n// call_index 10: report_offline(validator: AccountId, missed_blocks: u32)\n// call_index 11: report_double_sign(validator: AccountId) — root only\n// call_index 12: claim_slash_compensation(validator: AccountId)\n// call_index 13: init_yield_reserve() — root only\n\nimport { ApiPromise } from '@polkadot/api'\nimport type { SubmittableExtrinsic } from '@polkadot/api/types'\nimport type { ISubmittableResult } from '@polkadot/types/types'\n\nexport function buildRegisterValidator(\n api: ApiPromise,\n selfStake: bigint, // u128 — must be >= MinValidatorStake\n regionCode: number, // u8\n countryCode: number // u8\n): SubmittableExtrinsic<'promise', ISubmittableResult> {\n return api.tx.awarizonConsensus.registerValidator(selfStake, regionCode, countryCode)\n}\n\nexport function buildDelegateStake(\n api: ApiPromise,\n validator: string, // SS58 address\n amount: bigint // u128\n): SubmittableExtrinsic<'promise', ISubmittableResult> {\n return api.tx.awarizonConsensus.delegateStake(validator, amount)\n}\n\nexport function buildUndelegateStake(\n api: ApiPromise,\n validator: string // SS58 address\n): SubmittableExtrinsic<'promise', ISubmittableResult> {\n return api.tx.awarizonConsensus.undelegateStake(validator)\n}\n\nexport function buildUpdatePerformance(\n api: ApiPromise,\n validator: string, // SS58 address\n uptimeBps: number, // u32, 0–10000\n finalityBps: number, // u32, 0–10000\n blocksBps: number // u32, 0–10000\n): SubmittableExtrinsic<'promise', ISubmittableResult> {\n return api.tx.awarizonConsensus.updatePerformance(\n validator,\n uptimeBps,\n finalityBps,\n blocksBps\n )\n}\n\nexport function buildRunEpochElection(\n api: ApiPromise,\n epoch: bigint // u64\n): SubmittableExtrinsic<'promise', ISubmittableResult> {\n return api.tx.awarizonConsensus.runEpochElection(epoch)\n}\n\nexport function buildSlashValidator(\n api: ApiPromise,\n validator: string, // SS58 address\n reason: number // u8\n): SubmittableExtrinsic<'promise', ISubmittableResult> {\n return api.tx.awarizonConsensus.slashValidator(validator, reason)\n}\n\nexport function buildSetCommission(\n api: ApiPromise,\n commission: number // u32, 0-20\n): SubmittableExtrinsic<'promise', ISubmittableResult> {\n return api.tx.awarizonConsensus.setCommission(commission)\n}\n\nexport function buildClaimValidatorReward(\n api: ApiPromise\n): SubmittableExtrinsic<'promise', ISubmittableResult> {\n return api.tx.awarizonConsensus.claimValidatorReward()\n}\n\nexport function buildClaimDelegationReward(\n api: ApiPromise,\n validator: string // SS58 address\n): SubmittableExtrinsic<'promise', ISubmittableResult> {\n return api.tx.awarizonConsensus.claimDelegationReward(validator)\n}\n\nexport function buildClaimAllDelegationRewards(\n api: ApiPromise\n): SubmittableExtrinsic<'promise', ISubmittableResult> {\n return api.tx.awarizonConsensus.claimAllDelegationRewards()\n}\n\nexport function buildReportOffline(\n api: ApiPromise,\n validator: string, // SS58 address\n missedBlocks: number // u32\n): SubmittableExtrinsic<'promise', ISubmittableResult> {\n return api.tx.awarizonConsensus.reportOffline(validator, missedBlocks)\n}\n\nexport function buildReportDoubleSign(\n api: ApiPromise,\n validator: string // SS58 address\n): SubmittableExtrinsic<'promise', ISubmittableResult> {\n return api.tx.awarizonConsensus.reportDoubleSign(validator)\n}\n\nexport function buildClaimSlashCompensation(\n api: ApiPromise,\n validator: string // SS58 address\n): SubmittableExtrinsic<'promise', ISubmittableResult> {\n return api.tx.awarizonConsensus.claimSlashCompensation(validator)\n}\n\nexport function buildInitYieldReserve(\n api: ApiPromise\n): SubmittableExtrinsic<'promise', ISubmittableResult> {\n return api.tx.awarizonConsensus.initYieldReserve()\n}\n","// pallet_assets extrinsics\n// Pallet index: 11 (runtime/src/lib.rs #[runtime::pallet_index(11)] pub type Assets = pallet_assets)\n// Method names follow @polkadot/api camelCase conversion of pallet_assets extrinsics.\n\nimport { ApiPromise } from '@polkadot/api'\nimport type { SubmittableExtrinsic } from '@polkadot/api/types'\nimport type { ISubmittableResult } from '@polkadot/types/types'\n\nexport function buildCreateAsset(\n api: ApiPromise,\n id: number, // AssetId (u32)\n admin: string, // SS58 address — asset admin account\n minBalance: bigint // minimum balance (u128)\n): SubmittableExtrinsic<'promise', ISubmittableResult> {\n return api.tx.assets.create(id, admin, minBalance)\n}\n\nexport function buildMintAsset(\n api: ApiPromise,\n id: number, // AssetId (u32)\n beneficiary: string, // SS58 address\n amount: bigint // u128\n): SubmittableExtrinsic<'promise', ISubmittableResult> {\n return api.tx.assets.mint(id, beneficiary, amount)\n}\n\nexport function buildTransferAsset(\n api: ApiPromise,\n id: number, // AssetId (u32)\n target: string, // SS58 address\n amount: bigint // u128\n): SubmittableExtrinsic<'promise', ISubmittableResult> {\n return api.tx.assets.transfer(id, target, amount)\n}\n","import { Keyring } from '@polkadot/keyring'\nimport type { KeyringPair } from '@polkadot/keyring/types'\nimport { ApiPromise } from '@polkadot/api'\nimport type { SubmittableExtrinsic } from '@polkadot/api/types'\nimport type { ISubmittableResult } from '@polkadot/types/types'\nimport { parseChainError } from './errors'\n\n// Create a Keyring instance for sr25519 (Substrate default)\nexport function createKeyring(): Keyring {\n return new Keyring({ type: 'sr25519' })\n}\n\n// Load a keypair from a mnemonic (BIP39)\nexport function keypairFromMnemonic(mnemonic: string): KeyringPair {\n const keyring = createKeyring()\n return keyring.addFromMnemonic(mnemonic)\n}\n\n// Load a keypair from a seed hex (0x...)\nexport function keypairFromSeed(seed: string): KeyringPair {\n const keyring = createKeyring()\n return keyring.addFromSeed(Buffer.from(seed.replace('0x', ''), 'hex'))\n}\n\n// Dev/test keypairs (only available on --dev chains)\nexport function aliceKeypair(): KeyringPair {\n const keyring = createKeyring()\n return keyring.addFromUri('//Alice')\n}\n\nexport function bobKeypair(): KeyringPair {\n const keyring = createKeyring()\n return keyring.addFromUri('//Bob')\n}\n\n// Sign and submit an extrinsic, returning the final status\nexport async function signAndSend(\n api: ApiPromise,\n extrinsic: SubmittableExtrinsic<'promise', ISubmittableResult>,\n signer: KeyringPair\n): Promise<{ blockHash: string; txHash: string; blockNumber: number }> {\n return new Promise((resolve, reject) => {\n extrinsic\n .signAndSend(signer, ({ status, dispatchError }: ISubmittableResult) => {\n if (status.isInBlock || status.isFinalized) {\n if (dispatchError) {\n reject(parseChainError(dispatchError.toString()))\n } else {\n const blockHash = status.isInBlock\n ? status.asInBlock.toHex()\n : status.asFinalized.toHex()\n const txHash = extrinsic.hash.toHex()\n api.rpc.chain.getHeader(blockHash)\n .then(header => resolve({ blockHash, txHash, blockNumber: header.number.toNumber() }))\n .catch(() => resolve({ blockHash, txHash, blockNumber: 0 }))\n }\n }\n })\n .catch(reject)\n })\n}\n","// Typed error classes matching on-chain error variants.\n// Error names derived from:\n// pallets/awarizon-state/src/lib.rs — Error<T> enum\n// pallets/awarizon-consensus/src/lib.rs — Error<T> enum\n\nexport class AwarizonError extends Error {\n constructor(\n message: string,\n public readonly code: string,\n public readonly details?: unknown\n ) {\n super(message)\n this.name = 'AwarizonError'\n }\n}\n\n// ----------------------------------------------------------------\n// awarizon-state errors\n// ----------------------------------------------------------------\n\nexport class DeveloperNotFoundError extends AwarizonError {\n constructor() { super('Developer not found', 'DeveloperNotFound') }\n}\nexport class DeveloperAlreadyRegisteredError extends AwarizonError {\n constructor() { super('Developer already registered', 'DeveloperAlreadyRegistered') }\n}\nexport class DeveloperNotVerifiedError extends AwarizonError {\n constructor() { super('Developer not verified', 'DeveloperNotVerified') }\n}\nexport class DeveloperSuspendedError extends AwarizonError {\n constructor() { super('Developer is suspended', 'DeveloperSuspended') }\n}\nexport class ManifestNotFoundError extends AwarizonError {\n constructor() { super('Manifest not found', 'ManifestNotFound') }\n}\nexport class ManifestAlreadyRegisteredError extends AwarizonError {\n constructor() { super('Manifest already registered', 'ManifestAlreadyRegistered') }\n}\nexport class ManifestLimitReachedError extends AwarizonError {\n constructor() { super('Manifest limit reached', 'ManifestLimitReached') }\n}\nexport class CampaignNotFoundError extends AwarizonError {\n constructor() { super('Campaign not found', 'CampaignNotFound') }\n}\nexport class CampaignNotActiveError extends AwarizonError {\n constructor() { super('Campaign is not active', 'CampaignNotActive') }\n}\nexport class CampaignExpiredError extends AwarizonError {\n constructor() { super('Campaign has expired', 'CampaignExpired') }\n}\nexport class CampaignDeliveryLimitReachedError extends AwarizonError {\n constructor() { super('Campaign delivery limit reached', 'CampaignDeliveryLimitReached') }\n}\nexport class InboxRecordNotFoundError extends AwarizonError {\n constructor() { super('Inbox record not found', 'InboxRecordNotFound') }\n}\nexport class InboxAlreadyDeliveredError extends AwarizonError {\n constructor() { super('Already delivered to this inbox', 'InboxAlreadyDelivered') }\n}\nexport class InboxFullError extends AwarizonError {\n constructor() { super('Inbox is full (1000 records)', 'InboxFull') }\n}\nexport class EngagementCooldownActiveError extends AwarizonError {\n constructor() { super('Engagement cooldown is active (24h)', 'EngagementCooldownActive') }\n}\nexport class EngagementDailyLimitReachedError extends AwarizonError {\n constructor() { super('Daily engagement limit reached (10/day)', 'EngagementDailyLimitReached') }\n}\nexport class EngagementInvalidError extends AwarizonError {\n constructor() { super('Engagement does not meet minimum requirements', 'EngagementInvalid') }\n}\nexport class InsufficientStakeError extends AwarizonError {\n constructor() { super('Insufficient stake', 'InsufficientStake') }\n}\nexport class InsufficientBalanceError extends AwarizonError {\n constructor() { super('Insufficient balance', 'InsufficientBalance') }\n}\nexport class TargetingDimensionLimitExceededError extends AwarizonError {\n constructor() { super('Targeting dimension limit exceeded (max 6)', 'TargetingDimensionLimitExceeded') }\n}\nexport class InvalidManifestHashError extends AwarizonError {\n constructor() { super('Invalid manifest hash', 'InvalidManifestHash') }\n}\nexport class InvalidCampaignIdError extends AwarizonError {\n constructor() { super('Invalid campaign ID', 'InvalidCampaignId') }\n}\nexport class UnauthorizedError extends AwarizonError {\n constructor() { super('Unauthorized', 'Unauthorized') }\n}\nexport class EpochNotReadyError extends AwarizonError {\n constructor() { super('Epoch is not ready to advance', 'EpochNotReady') }\n}\nexport class NotExpiredYetError extends AwarizonError {\n constructor() { super('Campaign has not expired yet', 'NotExpiredYet') }\n}\nexport class ResetNotReadyError extends AwarizonError {\n constructor() { super('Daily reset is not ready yet', 'ResetNotReady') }\n}\n\n// ----------------------------------------------------------------\n// awarizon-consensus errors\n// ----------------------------------------------------------------\n\nexport class ValidatorAlreadyRegisteredError extends AwarizonError {\n constructor() { super('Validator already registered', 'ValidatorAlreadyRegistered') }\n}\nexport class ValidatorNotFoundError extends AwarizonError {\n constructor() { super('Validator not found', 'ValidatorNotFound') }\n}\nexport class RegionCapExceededError extends AwarizonError {\n constructor() { super('Region validator cap exceeded (20%)', 'RegionCapExceeded') }\n}\nexport class CountryCapExceededError extends AwarizonError {\n constructor() { super('Country validator cap exceeded (10%)', 'CountryCapExceeded') }\n}\nexport class DelegationNotFoundError extends AwarizonError {\n constructor() { super('Delegation not found', 'DelegationNotFound') }\n}\nexport class CannotDelegateToSelfError extends AwarizonError {\n constructor() { super('Cannot delegate stake to yourself', 'CannotDelegateToSelf') }\n}\nexport class ValidatorNotActiveError extends AwarizonError {\n constructor() { super('Validator is not active', 'ValidatorNotActive') }\n}\nexport class AlreadyDelegatedError extends AwarizonError {\n constructor() { super('Already delegated to this validator', 'AlreadyDelegated') }\n}\nexport class MaxValidatorsReachedError extends AwarizonError {\n constructor() { super('Maximum validator count reached', 'MaxValidatorsReached') }\n}\n\n// ----------------------------------------------------------------\n// Error mapping\n// ----------------------------------------------------------------\n\nconst ERROR_MAP: Record<string, () => AwarizonError> = {\n DeveloperNotFound: () => new DeveloperNotFoundError(),\n DeveloperAlreadyRegistered: () => new DeveloperAlreadyRegisteredError(),\n DeveloperNotVerified: () => new DeveloperNotVerifiedError(),\n DeveloperSuspended: () => new DeveloperSuspendedError(),\n ManifestNotFound: () => new ManifestNotFoundError(),\n ManifestAlreadyRegistered: () => new ManifestAlreadyRegisteredError(),\n ManifestLimitReached: () => new ManifestLimitReachedError(),\n CampaignNotFound: () => new CampaignNotFoundError(),\n CampaignNotActive: () => new CampaignNotActiveError(),\n CampaignExpired: () => new CampaignExpiredError(),\n CampaignDeliveryLimitReached: () => new CampaignDeliveryLimitReachedError(),\n InboxRecordNotFound: () => new InboxRecordNotFoundError(),\n InboxAlreadyDelivered: () => new InboxAlreadyDeliveredError(),\n InboxFull: () => new InboxFullError(),\n EngagementCooldownActive: () => new EngagementCooldownActiveError(),\n EngagementDailyLimitReached: () => new EngagementDailyLimitReachedError(),\n EngagementInvalid: () => new EngagementInvalidError(),\n InsufficientStake: () => new InsufficientStakeError(),\n InsufficientBalance: () => new InsufficientBalanceError(),\n TargetingDimensionLimitExceeded: () => new TargetingDimensionLimitExceededError(),\n InvalidManifestHash: () => new InvalidManifestHashError(),\n InvalidCampaignId: () => new InvalidCampaignIdError(),\n Unauthorized: () => new UnauthorizedError(),\n EpochNotReady: () => new EpochNotReadyError(),\n NotExpiredYet: () => new NotExpiredYetError(),\n ResetNotReady: () => new ResetNotReadyError(),\n ValidatorAlreadyRegistered: () => new ValidatorAlreadyRegisteredError(),\n ValidatorNotFound: () => new ValidatorNotFoundError(),\n RegionCapExceeded: () => new RegionCapExceededError(),\n CountryCapExceeded: () => new CountryCapExceededError(),\n DelegationNotFound: () => new DelegationNotFoundError(),\n CannotDelegateToSelf: () => new CannotDelegateToSelfError(),\n ValidatorNotActive: () => new ValidatorNotActiveError(),\n AlreadyDelegated: () => new AlreadyDelegatedError(),\n MaxValidatorsReached: () => new MaxValidatorsReachedError(),\n}\n\nexport function parseChainError(error: unknown): AwarizonError {\n const errorStr = String(error)\n for (const [key, factory] of Object.entries(ERROR_MAP)) {\n if (errorStr.includes(key)) return factory()\n }\n return new AwarizonError(errorStr, 'UnknownError', error)\n}\n"],"mappings":"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","names":[]}
|