@kynesyslabs/demosdk 2.10.2 → 2.11.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -17,10 +17,11 @@ import { ContractCallPayload } from "./TransactionSubtypes/ContractCallTransacti
17
17
  import { D402PaymentPayload } from "./TransactionSubtypes/D402PaymentTransaction";
18
18
  import { EscrowPayload } from "./TransactionSubtypes/EscrowTransaction";
19
19
  import { IPFSPayload } from "./TransactionSubtypes/IPFSTransaction";
20
+ import { TokenCreationPayload, TokenExecutionPayload } from "./TransactionSubtypes/TokenTransaction";
20
21
  import { CustomCharges } from "./CustomCharges";
21
- export type TransactionContentData = ["web2Request", IWeb2Payload] | ["crosschainOperation", XMScript] | ["native", INativePayload] | ["demoswork", DemoScript] | ["l2psEncryptedTx", L2PSEncryptedPayload] | ["identity", IdentityPayload] | ["instantMessaging", InstantMessagingPayload] | ["nativeBridge", NativeBridgeTxPayload] | ["storage", StoragePayload] | ["storageProgram", StorageProgramPayload] | ["l2ps_hash_update", L2PSHashPayload] | ["contractDeploy", ContractDeployPayload] | ["contractCall", ContractCallPayload] | ["d402_payment", D402PaymentPayload] | ["escrow", EscrowPayload] | ["ipfs", IPFSPayload];
22
+ export type TransactionContentData = ["web2Request", IWeb2Payload] | ["crosschainOperation", XMScript] | ["native", INativePayload] | ["demoswork", DemoScript] | ["l2psEncryptedTx", L2PSEncryptedPayload] | ["identity", IdentityPayload] | ["instantMessaging", InstantMessagingPayload] | ["nativeBridge", NativeBridgeTxPayload] | ["storage", StoragePayload] | ["storageProgram", StorageProgramPayload] | ["l2ps_hash_update", L2PSHashPayload] | ["contractDeploy", ContractDeployPayload] | ["contractCall", ContractCallPayload] | ["d402_payment", D402PaymentPayload] | ["escrow", EscrowPayload] | ["ipfs", IPFSPayload] | ["tokenCreation", TokenCreationPayload] | ["tokenExecution", TokenExecutionPayload];
22
23
  export interface TransactionContent {
23
- type: "web2Request" | "crosschainOperation" | "subnet" | "native" | "demoswork" | "genesis" | "NODE_ONLINE" | "identity" | "instantMessaging" | "nativeBridge" | "l2psEncryptedTx" | "storage" | "storageProgram" | "l2ps_hash_update" | "contractDeploy" | "contractCall" | "d402_payment" | "escrow" | "ipfs";
24
+ type: "web2Request" | "crosschainOperation" | "subnet" | "native" | "demoswork" | "genesis" | "NODE_ONLINE" | "identity" | "instantMessaging" | "nativeBridge" | "l2psEncryptedTx" | "storage" | "storageProgram" | "l2ps_hash_update" | "contractDeploy" | "contractCall" | "d402_payment" | "escrow" | "ipfs" | "tokenCreation" | "tokenExecution";
24
25
  from: string;
25
26
  from_ed25519_address: string;
26
27
  to: string;
@@ -1 +1 @@
1
- {"version":3,"file":"Transaction.js","sourceRoot":"","sources":["../../../../src/types/blockchain/Transaction.ts"],"names":[],"mappings":"AAqGA,uCAAuC;AACvC,cAAc,uBAAuB,CAAA"}
1
+ {"version":3,"file":"Transaction.js","sourceRoot":"","sources":["../../../../src/types/blockchain/Transaction.ts"],"names":[],"mappings":"AA0GA,uCAAuC;AACvC,cAAc,uBAAuB,CAAA"}
@@ -0,0 +1,162 @@
1
+ /**
2
+ * Token Transaction Types
3
+ *
4
+ * Defines transaction subtypes for token operations:
5
+ * - tokenCreation: Deploy new tokens
6
+ * - tokenExecution: Execute token methods (transfer, mint, burn, etc.)
7
+ */
8
+ import { Transaction, TransactionContent } from "../Transaction";
9
+ import type { TokenHookType, TokenScriptMethod } from "../../token";
10
+ /**
11
+ * Payload for creating a new token.
12
+ */
13
+ export interface TokenCreationPayload {
14
+ /** Token name (1-50 alphanumeric chars with spaces) */
15
+ name: string;
16
+ /** Token ticker (1-10 uppercase alphanumeric chars) */
17
+ ticker: string;
18
+ /** Decimal places (0-18) */
19
+ decimals: number;
20
+ /** Initial supply as string (bigint serialization) */
21
+ initialSupply: string;
22
+ /** Optional script for advanced tokens */
23
+ script?: {
24
+ code: string;
25
+ methods: TokenScriptMethod[];
26
+ hooks: TokenHookType[];
27
+ };
28
+ /** Initial ACL entries (owner is always included) */
29
+ initialACL?: Array<{
30
+ address: string;
31
+ permissions: string[];
32
+ }>;
33
+ }
34
+ export type TokenCreationTransactionContent = Omit<TransactionContent, "type" | "data"> & {
35
+ type: "tokenCreation";
36
+ data: ["tokenCreation", TokenCreationPayload];
37
+ };
38
+ export interface TokenCreationTransaction extends Omit<Transaction, "content"> {
39
+ content: TokenCreationTransactionContent;
40
+ }
41
+ /**
42
+ * Standard token operation types.
43
+ */
44
+ export type TokenOperationType = "transfer" | "approve" | "transferFrom" | "mint" | "burn" | "pause" | "unpause" | "transferOwnership" | "modifyACL" | "upgradeScript" | "custom";
45
+ /**
46
+ * Payload for executing token operations.
47
+ */
48
+ export interface TokenExecutionPayload {
49
+ /** Token address (derived from deployer + nonce + hash) */
50
+ tokenAddress: string;
51
+ /** Operation type */
52
+ operation: TokenOperationType;
53
+ /** Operation arguments - structure depends on operation type */
54
+ args: TokenOperationArgs;
55
+ }
56
+ /**
57
+ * Union of all possible operation argument structures.
58
+ */
59
+ export type TokenOperationArgs = TokenTransferArgs | TokenApproveArgs | TokenTransferFromArgs | TokenMintArgs | TokenBurnArgs | TokenPauseArgs | TokenOwnershipArgs | TokenACLArgs | TokenUpgradeArgs | TokenCustomArgs;
60
+ /**
61
+ * Arguments for transfer operation.
62
+ */
63
+ export interface TokenTransferArgs {
64
+ type: "transfer";
65
+ to: string;
66
+ amount: string;
67
+ }
68
+ /**
69
+ * Arguments for approve operation.
70
+ */
71
+ export interface TokenApproveArgs {
72
+ type: "approve";
73
+ spender: string;
74
+ amount: string;
75
+ }
76
+ /**
77
+ * Arguments for transferFrom operation.
78
+ */
79
+ export interface TokenTransferFromArgs {
80
+ type: "transferFrom";
81
+ from: string;
82
+ to: string;
83
+ amount: string;
84
+ }
85
+ /**
86
+ * Arguments for mint operation.
87
+ */
88
+ export interface TokenMintArgs {
89
+ type: "mint";
90
+ to: string;
91
+ amount: string;
92
+ }
93
+ /**
94
+ * Arguments for burn operation.
95
+ */
96
+ export interface TokenBurnArgs {
97
+ type: "burn";
98
+ from: string;
99
+ amount: string;
100
+ }
101
+ /**
102
+ * Arguments for pause/unpause operations.
103
+ */
104
+ export interface TokenPauseArgs {
105
+ type: "pause" | "unpause";
106
+ }
107
+ /**
108
+ * Arguments for ownership transfer.
109
+ */
110
+ export interface TokenOwnershipArgs {
111
+ type: "transferOwnership";
112
+ newOwner: string;
113
+ }
114
+ /**
115
+ * Arguments for ACL modification.
116
+ */
117
+ export interface TokenACLArgs {
118
+ type: "modifyACL";
119
+ action: "grant" | "revoke";
120
+ address: string;
121
+ permissions: string[];
122
+ }
123
+ /**
124
+ * Arguments for script upgrade.
125
+ */
126
+ export interface TokenUpgradeArgs {
127
+ type: "upgradeScript";
128
+ newCode: string;
129
+ newMethods: TokenScriptMethod[];
130
+ newHooks: TokenHookType[];
131
+ }
132
+ /**
133
+ * Arguments for custom script methods.
134
+ */
135
+ export interface TokenCustomArgs {
136
+ type: "custom";
137
+ method: string;
138
+ params: unknown[];
139
+ }
140
+ export type TokenExecutionTransactionContent = Omit<TransactionContent, "type" | "data"> & {
141
+ type: "tokenExecution";
142
+ data: ["tokenExecution", TokenExecutionPayload];
143
+ };
144
+ export interface TokenExecutionTransaction extends Omit<Transaction, "content"> {
145
+ content: TokenExecutionTransactionContent;
146
+ }
147
+ /**
148
+ * Type guard for TokenCreationPayload.
149
+ */
150
+ export declare function isTokenCreationPayload(payload: unknown): payload is TokenCreationPayload;
151
+ /**
152
+ * Type guard for TokenExecutionPayload.
153
+ */
154
+ export declare function isTokenExecutionPayload(payload: unknown): payload is TokenExecutionPayload;
155
+ /**
156
+ * Type guard for TokenCreationTransaction.
157
+ */
158
+ export declare function isTokenCreationTransaction(tx: Transaction): tx is TokenCreationTransaction;
159
+ /**
160
+ * Type guard for TokenExecutionTransaction.
161
+ */
162
+ export declare function isTokenExecutionTransaction(tx: Transaction): tx is TokenExecutionTransaction;
@@ -0,0 +1,48 @@
1
+ /**
2
+ * Token Transaction Types
3
+ *
4
+ * Defines transaction subtypes for token operations:
5
+ * - tokenCreation: Deploy new tokens
6
+ * - tokenExecution: Execute token methods (transfer, mint, burn, etc.)
7
+ */
8
+ // SECTION: Type Guards
9
+ /**
10
+ * Type guard for TokenCreationPayload.
11
+ */
12
+ export function isTokenCreationPayload(payload) {
13
+ if (typeof payload !== "object" || payload === null)
14
+ return false;
15
+ const p = payload;
16
+ return (typeof p.name === "string" &&
17
+ typeof p.ticker === "string" &&
18
+ typeof p.decimals === "number" &&
19
+ typeof p.initialSupply === "string");
20
+ }
21
+ /**
22
+ * Type guard for TokenExecutionPayload.
23
+ */
24
+ export function isTokenExecutionPayload(payload) {
25
+ if (typeof payload !== "object" || payload === null)
26
+ return false;
27
+ const p = payload;
28
+ return (typeof p.tokenAddress === "string" &&
29
+ typeof p.operation === "string" &&
30
+ typeof p.args === "object");
31
+ }
32
+ /**
33
+ * Type guard for TokenCreationTransaction.
34
+ */
35
+ export function isTokenCreationTransaction(tx) {
36
+ return (tx.content.type === "tokenCreation" &&
37
+ Array.isArray(tx.content.data) &&
38
+ tx.content.data[0] === "tokenCreation");
39
+ }
40
+ /**
41
+ * Type guard for TokenExecutionTransaction.
42
+ */
43
+ export function isTokenExecutionTransaction(tx) {
44
+ return (tx.content.type === "tokenExecution" &&
45
+ Array.isArray(tx.content.data) &&
46
+ tx.content.data[0] === "tokenExecution");
47
+ }
48
+ //# sourceMappingURL=TokenTransaction.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TokenTransaction.js","sourceRoot":"","sources":["../../../../../src/types/blockchain/TransactionSubtypes/TokenTransaction.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AA6LH,uBAAuB;AAEvB;;GAEG;AACH,MAAM,UAAU,sBAAsB,CAAC,OAAgB;IACnD,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,OAAO,KAAK,IAAI;QAAE,OAAO,KAAK,CAAA;IACjE,MAAM,CAAC,GAAG,OAAkC,CAAA;IAC5C,OAAO,CACH,OAAO,CAAC,CAAC,IAAI,KAAK,QAAQ;QAC1B,OAAO,CAAC,CAAC,MAAM,KAAK,QAAQ;QAC5B,OAAO,CAAC,CAAC,QAAQ,KAAK,QAAQ;QAC9B,OAAO,CAAC,CAAC,aAAa,KAAK,QAAQ,CACtC,CAAA;AACL,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,uBAAuB,CAAC,OAAgB;IACpD,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,OAAO,KAAK,IAAI;QAAE,OAAO,KAAK,CAAA;IACjE,MAAM,CAAC,GAAG,OAAkC,CAAA;IAC5C,OAAO,CACH,OAAO,CAAC,CAAC,YAAY,KAAK,QAAQ;QAClC,OAAO,CAAC,CAAC,SAAS,KAAK,QAAQ;QAC/B,OAAO,CAAC,CAAC,IAAI,KAAK,QAAQ,CAC7B,CAAA;AACL,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,0BAA0B,CAAC,EAAe;IACtD,OAAO,CACH,EAAE,CAAC,OAAO,CAAC,IAAI,KAAK,eAAe;QACnC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC;QAC9B,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,eAAe,CACzC,CAAA;AACL,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,2BAA2B,CAAC,EAAe;IACvD,OAAO,CACH,EAAE,CAAC,OAAO,CAAC,IAAI,KAAK,gBAAgB;QACpC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC;QAC9B,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,gBAAgB,CAC1C,CAAA;AACL,CAAC"}
@@ -14,6 +14,7 @@ export * from './ContractCallTransaction';
14
14
  export * from './D402PaymentTransaction';
15
15
  export * from './EscrowTransaction';
16
16
  export * from './IPFSTransaction';
17
+ export * from './TokenTransaction';
17
18
  import { L2PSTransaction } from './L2PSTransaction';
18
19
  import { L2PSHashTransaction } from './L2PSHashTransaction';
19
20
  import { Web2Transaction } from './Web2Transaction';
@@ -30,4 +31,6 @@ import { ContractCallTransaction } from './ContractCallTransaction';
30
31
  import { D402PaymentTransaction } from './D402PaymentTransaction';
31
32
  import { EscrowTransaction } from './EscrowTransaction';
32
33
  import { IPFSTransaction } from './IPFSTransaction';
33
- export type SpecificTransaction = L2PSTransaction | L2PSHashTransaction | Web2Transaction | CrosschainTransaction | NativeTransaction | DemosworkTransaction | IdentityTransaction | InstantMessagingTransaction | NativeBridgeTransaction | StorageTransaction | StorageProgramTransaction | ContractDeployTransaction | ContractCallTransaction | D402PaymentTransaction | EscrowTransaction | IPFSTransaction;
34
+ import { TokenCreationTransaction } from './TokenTransaction';
35
+ import { TokenExecutionTransaction } from './TokenTransaction';
36
+ export type SpecificTransaction = L2PSTransaction | L2PSHashTransaction | Web2Transaction | CrosschainTransaction | NativeTransaction | DemosworkTransaction | IdentityTransaction | InstantMessagingTransaction | NativeBridgeTransaction | StorageTransaction | StorageProgramTransaction | ContractDeployTransaction | ContractCallTransaction | D402PaymentTransaction | EscrowTransaction | IPFSTransaction | TokenCreationTransaction | TokenExecutionTransaction;
@@ -14,4 +14,6 @@ export * from './ContractCallTransaction.js';
14
14
  export * from './D402PaymentTransaction.js';
15
15
  export * from './EscrowTransaction.js';
16
16
  export * from './IPFSTransaction.js';
17
+ // REVIEW: Token transaction types
18
+ export * from './TokenTransaction.js';
17
19
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/types/blockchain/TransactionSubtypes/index.ts"],"names":[],"mappings":"AAAA,cAAc,mBAAmB,CAAA;AACjC,cAAc,uBAAuB,CAAA;AACrC,cAAc,mBAAmB,CAAA;AACjC,cAAc,yBAAyB,CAAA;AACvC,cAAc,qBAAqB,CAAA;AACnC,cAAc,wBAAwB,CAAA;AACtC,cAAc,uBAAuB,CAAA;AACrC,cAAc,+BAA+B,CAAA;AAC7C,cAAc,2BAA2B,CAAA;AACzC,cAAc,sBAAsB,CAAA;AACpC,cAAc,6BAA6B,CAAA;AAC3C,cAAc,6BAA6B,CAAA;AAC3C,cAAc,2BAA2B,CAAA;AACzC,cAAc,0BAA0B,CAAA;AACxC,cAAc,qBAAqB,CAAA;AACnC,cAAc,mBAAmB,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/types/blockchain/TransactionSubtypes/index.ts"],"names":[],"mappings":"AAAA,cAAc,mBAAmB,CAAA;AACjC,cAAc,uBAAuB,CAAA;AACrC,cAAc,mBAAmB,CAAA;AACjC,cAAc,yBAAyB,CAAA;AACvC,cAAc,qBAAqB,CAAA;AACnC,cAAc,wBAAwB,CAAA;AACtC,cAAc,uBAAuB,CAAA;AACrC,cAAc,+BAA+B,CAAA;AAC7C,cAAc,2BAA2B,CAAA;AACzC,cAAc,sBAAsB,CAAA;AACpC,cAAc,6BAA6B,CAAA;AAC3C,cAAc,6BAA6B,CAAA;AAC3C,cAAc,2BAA2B,CAAA;AACzC,cAAc,0BAA0B,CAAA;AACxC,cAAc,qBAAqB,CAAA;AACnC,cAAc,mBAAmB,CAAA;AACjC,kCAAkC;AAClC,cAAc,oBAAoB,CAAA"}
@@ -37,3 +37,4 @@ export { type SigningAlgorithm, type EncryptionAlgorithm } from "./cryptography"
37
37
  export { Ed25519SignedObject, PqcSignedObject, encryptedObject, SerializedEncryptedObject, SerializedSignedObject, signedObject, } from "../encryption/unifiedCrypto";
38
38
  export { isTransactionType, isTransactionDataType, } from "./blockchain/TransactionSubtypes/utils";
39
39
  export { type SignatureType, type UDNetwork, type UDRegistryType, type UDRecordKey, type SolanaRecordResult, type SolanaDomainResolution, type EVMDomainResolution, type SignableAddress, type UnifiedDomainResolution, type UDIdentityAssignPayload, type UDIdentityPayload, type UDResolutionConfig, type AddressTypeInfo, } from "../abstraction/types/UDResolution";
40
+ export { type TokenPermission, type TokenACLEntry, type TokenAccessControl, type TokenMetadata, type TokenBalances, type TokenAllowances, type TokenCustomState, type TokenState, type TokenHookType, type TokenScriptMethod, type TokenScript, type TokenData, type TokenHolderReference, type StateMutation, type ScriptContext, type ScriptExecutionResult, type TokenCreationParams, type TokenQueryResult, type TokenBalanceResult, deriveTokenAddress, computeScriptHash, serializeTokenData, deserializeTokenData, balanceToString, stringToBalance, createInitialTokenState, createInitialAccessControl, createTokenMetadata, createHolderReference, isValidTicker, isValidTokenName, isValidDecimals, isValidBalance, validateTokenCreationParams, applyMutations, hasPermission, } from "./token";
@@ -13,4 +13,8 @@ export { emptyResponse as RPCResponseSkeleton, } from "./communication/rpc.js";
13
13
  export { ChainProviders, SupportedChains, SupportedTokens, } from "./bridge/constants.js";
14
14
  // Export transaction utilities
15
15
  export { isTransactionType, isTransactionDataType, } from "./blockchain/TransactionSubtypes/utils.js";
16
+ // REVIEW: Token types for Demos Network tokens with scripting support
17
+ export {
18
+ // Utility functions
19
+ deriveTokenAddress, computeScriptHash, serializeTokenData, deserializeTokenData, balanceToString, stringToBalance, createInitialTokenState, createInitialAccessControl, createTokenMetadata, createHolderReference, isValidTicker, isValidTokenName, isValidDecimals, isValidBalance, validateTokenCreationParams, applyMutations, hasPermission, } from "./token";
16
20
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/types/index.ts"],"names":[],"mappings":"AAmBA,gEAAgE;AAChE,OAAO,EAKH,oBAAoB,EACpB,aAAa,GAChB,MAAM,4BAA4B,CAAA;AAEnC,wCAAwC;AACxC,OAAO,EAoBH,gBAAgB,EAChB,gBAAgB,EAChB,kBAAkB;AAClB,6CAA6C;AAC7C,sBAAsB,EACtB,aAAa,GAChB,MAAM,kCAAkC,CAAA;AASzC,OAAO,EAAE,aAAa,EAAgB,MAAM,2BAA2B,CAAA;AA6CvE,OAAO;AACP,OAAO,EAaH,eAAe,GAClB,MAAM,QAAQ,CAAA;AAef,OAAO,EAAE,SAAS,EAAa,MAAM,uBAAuB,CAAA;AAO5D,OAAO,EAKH,YAAY,EAEZ,YAAY,GACf,MAAM,mBAAmB,CAAA;AAE1B,OAAO,EASH,aAAa,IAAI,mBAAmB,GACvC,MAAM,qBAAqB,CAAA;AAgB5B,OAAO,EACH,cAAc,EACd,eAAe,EACf,eAAe,GAClB,MAAM,oBAAoB,CAAA;AAY3B,+BAA+B;AAC/B,OAAO,EACH,iBAAiB,EACjB,qBAAqB,GACxB,MAAM,wCAAwC,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/types/index.ts"],"names":[],"mappings":"AAmBA,gEAAgE;AAChE,OAAO,EAKH,oBAAoB,EACpB,aAAa,GAChB,MAAM,4BAA4B,CAAA;AAEnC,wCAAwC;AACxC,OAAO,EAoBH,gBAAgB,EAChB,gBAAgB,EAChB,kBAAkB;AAClB,6CAA6C;AAC7C,sBAAsB,EACtB,aAAa,GAChB,MAAM,kCAAkC,CAAA;AASzC,OAAO,EAAE,aAAa,EAAgB,MAAM,2BAA2B,CAAA;AA6CvE,OAAO;AACP,OAAO,EAaH,eAAe,GAClB,MAAM,QAAQ,CAAA;AAef,OAAO,EAAE,SAAS,EAAa,MAAM,uBAAuB,CAAA;AAO5D,OAAO,EAKH,YAAY,EAEZ,YAAY,GACf,MAAM,mBAAmB,CAAA;AAE1B,OAAO,EASH,aAAa,IAAI,mBAAmB,GACvC,MAAM,qBAAqB,CAAA;AAgB5B,OAAO,EACH,cAAc,EACd,eAAe,EACf,eAAe,GAClB,MAAM,oBAAoB,CAAA;AAY3B,+BAA+B;AAC/B,OAAO,EACH,iBAAiB,EACjB,qBAAqB,GACxB,MAAM,wCAAwC,CAAA;AAmB/C,sEAAsE;AACtE,OAAO;AA4BH,oBAAoB;AACpB,kBAAkB,EAClB,iBAAiB,EACjB,kBAAkB,EAClB,oBAAoB,EACpB,eAAe,EACf,eAAe,EACf,uBAAuB,EACvB,0BAA0B,EAC1B,mBAAmB,EACnB,qBAAqB,EACrB,aAAa,EACb,gBAAgB,EAChB,eAAe,EACf,cAAc,EACd,2BAA2B,EAC3B,cAAc,EACd,aAAa,GAChB,MAAM,SAAS,CAAA"}
@@ -0,0 +1,189 @@
1
+ /**
2
+ * Token Types for Demos Network
3
+ *
4
+ * Defines the core data structures for fungible tokens with scripting support.
5
+ * Tokens are stored as GCR accounts with special properties in the data field.
6
+ *
7
+ * Storage Model:
8
+ * - Token data stored in token's GCR `details.content.token`
9
+ * - Holder pointers stored in holder's `GCRExtended.tokens` array
10
+ */
11
+ /**
12
+ * Permission flags for token access control.
13
+ * Each permission can be granted to addresses in the ACL.
14
+ */
15
+ export type TokenPermission = "canMint" | "canBurn" | "canUpgrade" | "canPause" | "canTransferOwnership" | "canModifyACL" | "canExecuteScript";
16
+ /**
17
+ * Access Control List entry for a single address.
18
+ */
19
+ export interface TokenACLEntry {
20
+ address: string;
21
+ permissions: TokenPermission[];
22
+ grantedAt: number;
23
+ grantedBy: string;
24
+ }
25
+ /**
26
+ * Token Access Control structure.
27
+ * Owner has all permissions by default.
28
+ */
29
+ export interface TokenAccessControl {
30
+ owner: string;
31
+ paused: boolean;
32
+ entries: TokenACLEntry[];
33
+ }
34
+ /**
35
+ * Immutable token metadata set at creation time.
36
+ */
37
+ export interface TokenMetadata {
38
+ name: string;
39
+ ticker: string;
40
+ decimals: number;
41
+ address: string;
42
+ deployer: string;
43
+ deployerNonce: number;
44
+ deployedAt: number;
45
+ hasScript: boolean;
46
+ }
47
+ /**
48
+ * Token balances mapping: address -> balance
49
+ * Stored centrally in the token's GCR
50
+ */
51
+ export type TokenBalances = Record<string, string>;
52
+ /**
53
+ * Token allowances mapping: owner -> spender -> amount
54
+ * For ERC20-like approve/transferFrom pattern
55
+ */
56
+ export type TokenAllowances = Record<string, Record<string, string>>;
57
+ /**
58
+ * Custom state for scripted tokens.
59
+ * Scripts can store arbitrary data here.
60
+ */
61
+ export type TokenCustomState = Record<string, unknown>;
62
+ /**
63
+ * Complete token state.
64
+ */
65
+ export interface TokenState {
66
+ totalSupply: string;
67
+ balances: TokenBalances;
68
+ allowances: TokenAllowances;
69
+ customState: TokenCustomState;
70
+ }
71
+ /**
72
+ * Hook types that can trigger script execution.
73
+ * Hooks EXTEND native operations, they don't override them.
74
+ */
75
+ export type TokenHookType = "beforeTransfer" | "afterTransfer" | "beforeMint" | "afterMint" | "beforeBurn" | "afterBurn" | "onApprove";
76
+ /**
77
+ * Script method definition for custom token logic.
78
+ */
79
+ export interface TokenScriptMethod {
80
+ name: string;
81
+ params: Array<{
82
+ name: string;
83
+ type: string;
84
+ }>;
85
+ returns?: string;
86
+ mutates: boolean;
87
+ }
88
+ /**
89
+ * Token script definition.
90
+ * Contains the script code and method signatures.
91
+ */
92
+ export interface TokenScript {
93
+ version: number;
94
+ code: string;
95
+ methods: TokenScriptMethod[];
96
+ hooks: TokenHookType[];
97
+ codeHash: string;
98
+ upgradedAt: number;
99
+ }
100
+ /**
101
+ * Complete token data as stored in GCR.
102
+ * This is the full structure stored in `details.content.token`
103
+ */
104
+ export interface TokenData {
105
+ metadata: TokenMetadata;
106
+ state: TokenState;
107
+ accessControl: TokenAccessControl;
108
+ script?: TokenScript;
109
+ }
110
+ /**
111
+ * Lightweight token reference stored in holder's GCRExtended.tokens
112
+ * Points to the token GCR for full data lookup
113
+ */
114
+ export interface TokenHolderReference {
115
+ tokenAddress: string;
116
+ ticker: string;
117
+ name: string;
118
+ decimals: number;
119
+ }
120
+ /**
121
+ * State mutation returned by scripts.
122
+ * Scripts return a list of mutations, not the new state directly.
123
+ */
124
+ export interface StateMutation {
125
+ type: "setBalance" | "addBalance" | "subBalance" | "setCustomState" | "setAllowance";
126
+ address?: string;
127
+ spender?: string;
128
+ value: string | number | Record<string, unknown>;
129
+ key?: string;
130
+ }
131
+ /**
132
+ * Context provided to script execution.
133
+ * Contains deterministic values only.
134
+ */
135
+ export interface ScriptContext {
136
+ caller: string;
137
+ method: string;
138
+ args: unknown[];
139
+ tokenState: Readonly<TokenState>;
140
+ tokenMetadata: Readonly<TokenMetadata>;
141
+ txTimestamp: number;
142
+ prevBlockHash: string;
143
+ blockHeight: number;
144
+ }
145
+ /**
146
+ * Result of script execution.
147
+ */
148
+ export interface ScriptExecutionResult {
149
+ success: boolean;
150
+ mutations: StateMutation[];
151
+ returnValue?: unknown;
152
+ error?: string;
153
+ complexity: number;
154
+ }
155
+ /**
156
+ * Token creation parameters.
157
+ */
158
+ export interface TokenCreationParams {
159
+ name: string;
160
+ ticker: string;
161
+ decimals: number;
162
+ initialSupply: string;
163
+ script?: {
164
+ code: string;
165
+ methods: TokenScriptMethod[];
166
+ hooks: TokenHookType[];
167
+ };
168
+ initialACL?: Omit<TokenACLEntry, "grantedAt" | "grantedBy">[];
169
+ }
170
+ /**
171
+ * Token query result for nodeCall responses.
172
+ */
173
+ export interface TokenQueryResult {
174
+ exists: boolean;
175
+ metadata?: TokenMetadata;
176
+ state?: TokenState;
177
+ accessControl?: TokenAccessControl;
178
+ hasScript?: boolean;
179
+ }
180
+ /**
181
+ * Token balance query result.
182
+ */
183
+ export interface TokenBalanceResult {
184
+ tokenAddress: string;
185
+ holderAddress: string;
186
+ balance: string;
187
+ decimals: number;
188
+ ticker: string;
189
+ }
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Token Types for Demos Network
3
+ *
4
+ * Defines the core data structures for fungible tokens with scripting support.
5
+ * Tokens are stored as GCR accounts with special properties in the data field.
6
+ *
7
+ * Storage Model:
8
+ * - Token data stored in token's GCR `details.content.token`
9
+ * - Holder pointers stored in holder's `GCRExtended.tokens` array
10
+ */
11
+ export {};
12
+ //# sourceMappingURL=TokenTypes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TokenTypes.js","sourceRoot":"","sources":["../../../../src/types/token/TokenTypes.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG"}
@@ -0,0 +1,95 @@
1
+ /**
2
+ * Token Utility Functions
3
+ *
4
+ * Provides address derivation, serialization, and validation utilities.
5
+ */
6
+ import type { TokenData, TokenMetadata, TokenState, TokenAccessControl, TokenCreationParams, TokenHolderReference, StateMutation } from "./TokenTypes";
7
+ /**
8
+ * Derives a deterministic token address from deployer info and token params.
9
+ * Formula: sha256(deployer + nonce + hash(tokenObject))
10
+ *
11
+ * @param deployer - Deployer's address
12
+ * @param nonce - Deployer's nonce at deployment time
13
+ * @param tokenParams - Token creation parameters
14
+ * @returns Deterministic token address (0x-prefixed)
15
+ */
16
+ export declare function deriveTokenAddress(deployer: string, nonce: number, tokenParams: TokenCreationParams): string;
17
+ /**
18
+ * Computes the hash of script code for verification.
19
+ *
20
+ * @param code - Script source code
21
+ * @returns SHA256 hash of the code
22
+ */
23
+ export declare function computeScriptHash(code: string): string;
24
+ /**
25
+ * Serializes TokenData for GCR storage.
26
+ * Ensures consistent serialization for consensus.
27
+ */
28
+ export declare function serializeTokenData(data: TokenData): string;
29
+ /**
30
+ * Deserializes TokenData from GCR storage.
31
+ */
32
+ export declare function deserializeTokenData(serialized: string): TokenData;
33
+ /**
34
+ * Converts a bigint balance to string for storage.
35
+ */
36
+ export declare function balanceToString(balance: bigint): string;
37
+ /**
38
+ * Converts a string balance back to bigint for calculations.
39
+ */
40
+ export declare function stringToBalance(str: string): bigint;
41
+ /**
42
+ * Creates initial token state from creation parameters.
43
+ */
44
+ export declare function createInitialTokenState(params: TokenCreationParams, deployerAddress: string): TokenState;
45
+ /**
46
+ * Creates initial access control with deployer as owner.
47
+ */
48
+ export declare function createInitialAccessControl(ownerAddress: string, timestamp: number, initialACL?: TokenCreationParams["initialACL"]): TokenAccessControl;
49
+ /**
50
+ * Creates complete TokenMetadata from creation parameters.
51
+ */
52
+ export declare function createTokenMetadata(params: TokenCreationParams, deployerAddress: string, deployerNonce: number, timestamp: number): TokenMetadata;
53
+ /**
54
+ * Creates a holder reference for storage in GCRExtended.tokens
55
+ */
56
+ export declare function createHolderReference(metadata: TokenMetadata): TokenHolderReference;
57
+ /**
58
+ * Validates token ticker format.
59
+ * Must be 1-10 uppercase alphanumeric characters.
60
+ */
61
+ export declare function isValidTicker(ticker: string): boolean;
62
+ /**
63
+ * Validates token name.
64
+ * Must be 1-50 characters, alphanumeric with spaces.
65
+ */
66
+ export declare function isValidTokenName(name: string): boolean;
67
+ /**
68
+ * Validates decimals range.
69
+ * Must be 0-18 (like most blockchain tokens).
70
+ */
71
+ export declare function isValidDecimals(decimals: number): boolean;
72
+ /**
73
+ * Validates a balance string is a valid non-negative integer.
74
+ */
75
+ export declare function isValidBalance(balance: string): boolean;
76
+ /**
77
+ * Validates token creation parameters.
78
+ */
79
+ export declare function validateTokenCreationParams(params: TokenCreationParams): {
80
+ valid: boolean;
81
+ errors: string[];
82
+ };
83
+ /**
84
+ * Applies a list of state mutations to token state.
85
+ * Used after script execution to update state.
86
+ *
87
+ * @param state - Current token state
88
+ * @param mutations - List of mutations to apply
89
+ * @returns New token state with mutations applied
90
+ */
91
+ export declare function applyMutations(state: TokenState, mutations: StateMutation[]): TokenState;
92
+ /**
93
+ * Checks if an address has a specific permission.
94
+ */
95
+ export declare function hasPermission(accessControl: TokenAccessControl, address: string, permission: string): boolean;