@xyo-network/xl1-protocol-sdk 1.4.8 → 1.5.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.
@@ -94,13 +94,13 @@ var hydrateElevatedTransaction = /* @__PURE__ */ __name(async (archivist, hash)
94
94
  }, "hydrateElevatedTransaction");
95
95
 
96
96
  // src/transaction/transactionRequiredGas.ts
97
- import { TransactionGasCosts } from "@xyo-network/xl1-protocol";
97
+ import { AttoXL1, TransactionGasCosts } from "@xyo-network/xl1-protocol";
98
98
  function transactionRequiredGas([transaction, payloads]) {
99
99
  const characters = payloads.reduce((acc, payload) => acc + JSON.stringify(payload).length, 0);
100
100
  const hashes = transaction.payload_hashes.length + 1;
101
101
  const signatures = transaction.addresses.length + 1;
102
102
  const elevatedPayloads = (transaction.script ?? []).length;
103
- return TransactionGasCosts.characterStorage * BigInt(characters) + TransactionGasCosts.hashValidation * BigInt(hashes) + TransactionGasCosts.signatureValidation * BigInt(signatures) + TransactionGasCosts.payloadValidation * BigInt(elevatedPayloads);
103
+ return AttoXL1(TransactionGasCosts.characterStorage * BigInt(characters) + TransactionGasCosts.hashValidation * BigInt(hashes) + TransactionGasCosts.signatureValidation * BigInt(signatures) + TransactionGasCosts.payloadValidation * BigInt(elevatedPayloads));
104
104
  }
105
105
  __name(transactionRequiredGas, "transactionRequiredGas");
106
106
  export {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/transaction/buildTransaction.ts","../../src/transaction/hydrateTransaction.ts","../../src/transaction/transactionRequiredGas.ts"],"sourcesContent":["import { assertEx } from '@xylabs/assert'\nimport type { Address } from '@xylabs/hex'\nimport { toHex } from '@xylabs/hex'\nimport type { AccountInstance } from '@xyo-network/account-model'\nimport { BoundWitnessBuilder } from '@xyo-network/boundwitness-builder'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport type { Payload } from '@xyo-network/payload-model'\nimport {\n type AllowedBlockPayload,\n defaultTransactionFees,\n type HydratedTransactionWithStorageMeta, type TransactionBoundWitness, type TransactionBoundWitnessFields, type TransactionFeesBigInt,\n} from '@xyo-network/xl1-protocol'\n\nexport async function buildTransaction(\n chain: Address,\n elevatedPayloads: AllowedBlockPayload[],\n additionalPayloads: Payload[],\n signer: AccountInstance | AccountInstance[],\n nbf: number,\n exp: number,\n from?: Address,\n fees: TransactionFeesBigInt = defaultTransactionFees,\n): Promise<HydratedTransactionWithStorageMeta> {\n if (from === undefined && Array.isArray(signer)) {\n throw new Error('from is required when signer is an array')\n }\n\n const txBoundWitnessFields: TransactionBoundWitnessFields = {\n chain,\n fees: {\n base: toHex(fees.base),\n gasLimit: toHex(fees.gasLimit),\n gasPrice: toHex(fees.gasPrice),\n priority: toHex(fees.priority),\n },\n nbf,\n exp,\n }\n\n const elevatedHashes = await PayloadBuilder.hashes(elevatedPayloads)\n const script: string[] = []\n for (const elevatedHash of elevatedHashes) {\n script.push(`elevate|${elevatedHash}`)\n }\n\n const [tx, txPayloads] = await new BoundWitnessBuilder<TransactionBoundWitness>()\n .fields({\n ...txBoundWitnessFields,\n script,\n from: from ?? (Array.isArray(signer) ? assertEx(signer.at(0)?.address) : signer.address),\n })\n .meta({ $signatures: [] })\n .payloads([...elevatedPayloads, ...additionalPayloads])\n .signers(Array.isArray(signer) ? signer : [signer])\n .build()\n\n return [await PayloadBuilder.addStorageMeta(tx), await PayloadBuilder.addStorageMeta(txPayloads)]\n}\n","import { assertEx } from '@xylabs/assert'\nimport type { Hash } from '@xylabs/hex'\nimport type { ReadArchivist } from '@xyo-network/archivist-model'\nimport { hydrateTypedBoundWitness, tryHydrateTypedBoundWitness } from '@xyo-network/archivist-model'\nimport type { Payload } from '@xyo-network/payload-model'\nimport type {\n AllowedBlockPayload,\n HydratedTransaction, HydratedTransactionWithStorageMeta, TransactionBoundWitness,\n} from '@xyo-network/xl1-protocol'\nimport { isAllowedBlockPayload, isTransactionBoundWitnessWithStorageMeta } from '@xyo-network/xl1-protocol'\n\nexport const tryHydrateTransaction = async (\n archivist: ReadArchivist,\n hash: Hash,\n): Promise<HydratedTransactionWithStorageMeta | undefined> => {\n return (await tryHydrateTypedBoundWitness<TransactionBoundWitness>(\n archivist,\n hash,\n isTransactionBoundWitnessWithStorageMeta,\n )) as HydratedTransactionWithStorageMeta | undefined\n}\n\nexport const hydrateTransaction = async (\n archivist: ReadArchivist,\n hash: Hash,\n): Promise<HydratedTransactionWithStorageMeta> => {\n return await hydrateTypedBoundWitness<TransactionBoundWitness>(\n archivist,\n hash,\n isTransactionBoundWitnessWithStorageMeta,\n ) as HydratedTransactionWithStorageMeta\n}\n\nexport const flattenHydratedTransaction = (hydratedTransaction: HydratedTransaction): Payload[] => {\n const [tx, txPayloads] = hydratedTransaction\n return [...txPayloads, tx]\n}\n\nexport const flattenHydratedTransactions = (hydratedTransactions: HydratedTransaction[]): Payload[] =>\n hydratedTransactions.flatMap(tx => flattenHydratedTransaction(tx))\n\nexport const tryHydrateElevatedTransaction = async (\n archivist: ReadArchivist,\n hash: Hash,\n): Promise<HydratedTransaction | undefined> => {\n const hydratedTransaction = await tryHydrateTransaction(archivist, hash)\n if (!hydratedTransaction) {\n return undefined\n }\n const [transaction, payloads] = hydratedTransaction\n const opCodes = (transaction.script ?? []).filter(operation => operation.startsWith('elevate|'))\n const elevatedPayloads: AllowedBlockPayload[] = []\n for (const opCode of opCodes) {\n const [code, hash] = opCode.split('|')\n if (code === 'elevated') {\n const elevatedPayload = payloads.find(payload => payload._hash === hash)\n if (isAllowedBlockPayload(elevatedPayload)) {\n elevatedPayloads.push(elevatedPayload)\n }\n }\n }\n if (opCodes.length === elevatedPayloads.length) {\n return [transaction, elevatedPayloads]\n }\n return undefined\n}\n\nexport const hydrateElevatedTransaction = async (\n archivist: ReadArchivist,\n hash: Hash,\n): Promise<HydratedTransaction> => {\n return assertEx(await tryHydrateElevatedTransaction(archivist, hash), () => 'Hydration failed')\n}\n","import type { HydratedTransaction } from '@xyo-network/xl1-protocol'\nimport { TransactionGasCosts } from '@xyo-network/xl1-protocol'\n\nexport function transactionRequiredGas([transaction, payloads]: HydratedTransaction): bigint {\n const characters = payloads.reduce((acc: number, payload) => acc + JSON.stringify(payload).length, 0)\n const hashes = transaction.payload_hashes.length + 1 /* for transaction itself */\n const signatures = transaction.addresses.length + 1\n const elevatedPayloads = (transaction.script ?? []).length\n return TransactionGasCosts.characterStorage * BigInt(characters)\n + TransactionGasCosts.hashValidation * BigInt(hashes)\n + TransactionGasCosts.signatureValidation * BigInt(signatures)\n + TransactionGasCosts.payloadValidation * BigInt(elevatedPayloads)\n}\n"],"mappings":"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","names":["assertEx","toHex","BoundWitnessBuilder","PayloadBuilder","defaultTransactionFees","buildTransaction","chain","elevatedPayloads","additionalPayloads","signer","nbf","exp","from","fees","defaultTransactionFees","undefined","Array","isArray","Error","txBoundWitnessFields","base","toHex","gasLimit","gasPrice","priority","elevatedHashes","PayloadBuilder","hashes","script","elevatedHash","push","tx","txPayloads","BoundWitnessBuilder","fields","assertEx","at","address","meta","$signatures","payloads","signers","build","addStorageMeta","assertEx","hydrateTypedBoundWitness","tryHydrateTypedBoundWitness","isAllowedBlockPayload","isTransactionBoundWitnessWithStorageMeta","tryHydrateTransaction","archivist","hash","tryHydrateTypedBoundWitness","isTransactionBoundWitnessWithStorageMeta","hydrateTransaction","hydrateTypedBoundWitness","flattenHydratedTransaction","hydratedTransaction","tx","txPayloads","flattenHydratedTransactions","hydratedTransactions","flatMap","tryHydrateElevatedTransaction","undefined","transaction","payloads","opCodes","script","filter","operation","startsWith","elevatedPayloads","opCode","code","split","elevatedPayload","find","payload","_hash","isAllowedBlockPayload","push","length","hydrateElevatedTransaction","assertEx","TransactionGasCosts","transactionRequiredGas","transaction","payloads","characters","reduce","acc","payload","JSON","stringify","length","hashes","payload_hashes","signatures","addresses","elevatedPayloads","script","TransactionGasCosts","characterStorage","BigInt","hashValidation","signatureValidation","payloadValidation"]}
1
+ {"version":3,"sources":["../../src/transaction/buildTransaction.ts","../../src/transaction/hydrateTransaction.ts","../../src/transaction/transactionRequiredGas.ts"],"sourcesContent":["import { assertEx } from '@xylabs/assert'\nimport type { Address } from '@xylabs/hex'\nimport { toHex } from '@xylabs/hex'\nimport type { AccountInstance } from '@xyo-network/account-model'\nimport { BoundWitnessBuilder } from '@xyo-network/boundwitness-builder'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport type { Payload } from '@xyo-network/payload-model'\nimport {\n type AllowedBlockPayload,\n defaultTransactionFees,\n type HydratedTransactionWithStorageMeta, type TransactionBoundWitness, type TransactionBoundWitnessFields, type TransactionFeesBigInt,\n} from '@xyo-network/xl1-protocol'\n\nexport async function buildTransaction(\n chain: Address,\n elevatedPayloads: AllowedBlockPayload[],\n additionalPayloads: Payload[],\n signer: AccountInstance | AccountInstance[],\n nbf: number,\n exp: number,\n from?: Address,\n fees: TransactionFeesBigInt = defaultTransactionFees,\n): Promise<HydratedTransactionWithStorageMeta> {\n if (from === undefined && Array.isArray(signer)) {\n throw new Error('from is required when signer is an array')\n }\n\n const txBoundWitnessFields: TransactionBoundWitnessFields = {\n chain,\n fees: {\n base: toHex(fees.base),\n gasLimit: toHex(fees.gasLimit),\n gasPrice: toHex(fees.gasPrice),\n priority: toHex(fees.priority),\n },\n nbf,\n exp,\n }\n\n const elevatedHashes = await PayloadBuilder.hashes(elevatedPayloads)\n const script: string[] = []\n for (const elevatedHash of elevatedHashes) {\n script.push(`elevate|${elevatedHash}`)\n }\n\n const [tx, txPayloads] = await new BoundWitnessBuilder<TransactionBoundWitness>()\n .fields({\n ...txBoundWitnessFields,\n script,\n from: from ?? (Array.isArray(signer) ? assertEx(signer.at(0)?.address) : signer.address),\n })\n .meta({ $signatures: [] })\n .payloads([...elevatedPayloads, ...additionalPayloads])\n .signers(Array.isArray(signer) ? signer : [signer])\n .build()\n\n return [await PayloadBuilder.addStorageMeta(tx), await PayloadBuilder.addStorageMeta(txPayloads)]\n}\n","import { assertEx } from '@xylabs/assert'\nimport type { Hash } from '@xylabs/hex'\nimport type { ReadArchivist } from '@xyo-network/archivist-model'\nimport { hydrateTypedBoundWitness, tryHydrateTypedBoundWitness } from '@xyo-network/archivist-model'\nimport type { Payload } from '@xyo-network/payload-model'\nimport type {\n AllowedBlockPayload,\n HydratedTransaction, HydratedTransactionWithStorageMeta, TransactionBoundWitness,\n} from '@xyo-network/xl1-protocol'\nimport { isAllowedBlockPayload, isTransactionBoundWitnessWithStorageMeta } from '@xyo-network/xl1-protocol'\n\nexport const tryHydrateTransaction = async (\n archivist: ReadArchivist,\n hash: Hash,\n): Promise<HydratedTransactionWithStorageMeta | undefined> => {\n return (await tryHydrateTypedBoundWitness<TransactionBoundWitness>(\n archivist,\n hash,\n isTransactionBoundWitnessWithStorageMeta,\n )) as HydratedTransactionWithStorageMeta | undefined\n}\n\nexport const hydrateTransaction = async (\n archivist: ReadArchivist,\n hash: Hash,\n): Promise<HydratedTransactionWithStorageMeta> => {\n return await hydrateTypedBoundWitness<TransactionBoundWitness>(\n archivist,\n hash,\n isTransactionBoundWitnessWithStorageMeta,\n ) as HydratedTransactionWithStorageMeta\n}\n\nexport const flattenHydratedTransaction = (hydratedTransaction: HydratedTransaction): Payload[] => {\n const [tx, txPayloads] = hydratedTransaction\n return [...txPayloads, tx]\n}\n\nexport const flattenHydratedTransactions = (hydratedTransactions: HydratedTransaction[]): Payload[] =>\n hydratedTransactions.flatMap(tx => flattenHydratedTransaction(tx))\n\nexport const tryHydrateElevatedTransaction = async (\n archivist: ReadArchivist,\n hash: Hash,\n): Promise<HydratedTransaction | undefined> => {\n const hydratedTransaction = await tryHydrateTransaction(archivist, hash)\n if (!hydratedTransaction) {\n return undefined\n }\n const [transaction, payloads] = hydratedTransaction\n const opCodes = (transaction.script ?? []).filter(operation => operation.startsWith('elevate|'))\n const elevatedPayloads: AllowedBlockPayload[] = []\n for (const opCode of opCodes) {\n const [code, hash] = opCode.split('|')\n if (code === 'elevated') {\n const elevatedPayload = payloads.find(payload => payload._hash === hash)\n if (isAllowedBlockPayload(elevatedPayload)) {\n elevatedPayloads.push(elevatedPayload)\n }\n }\n }\n if (opCodes.length === elevatedPayloads.length) {\n return [transaction, elevatedPayloads]\n }\n return undefined\n}\n\nexport const hydrateElevatedTransaction = async (\n archivist: ReadArchivist,\n hash: Hash,\n): Promise<HydratedTransaction> => {\n return assertEx(await tryHydrateElevatedTransaction(archivist, hash), () => 'Hydration failed')\n}\n","import type { HydratedTransaction } from '@xyo-network/xl1-protocol'\nimport { AttoXL1, TransactionGasCosts } from '@xyo-network/xl1-protocol'\n\nexport function transactionRequiredGas([transaction, payloads]: HydratedTransaction): AttoXL1 {\n const characters = payloads.reduce((acc: number, payload) => acc + JSON.stringify(payload).length, 0)\n const hashes = transaction.payload_hashes.length + 1 /* for transaction itself */\n const signatures = transaction.addresses.length + 1\n const elevatedPayloads = (transaction.script ?? []).length\n return AttoXL1(TransactionGasCosts.characterStorage * BigInt(characters)\n + TransactionGasCosts.hashValidation * BigInt(hashes)\n + TransactionGasCosts.signatureValidation * BigInt(signatures)\n + TransactionGasCosts.payloadValidation * BigInt(elevatedPayloads))\n}\n"],"mappings":"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","names":["assertEx","toHex","BoundWitnessBuilder","PayloadBuilder","defaultTransactionFees","buildTransaction","chain","elevatedPayloads","additionalPayloads","signer","nbf","exp","from","fees","defaultTransactionFees","undefined","Array","isArray","Error","txBoundWitnessFields","base","toHex","gasLimit","gasPrice","priority","elevatedHashes","PayloadBuilder","hashes","script","elevatedHash","push","tx","txPayloads","BoundWitnessBuilder","fields","assertEx","at","address","meta","$signatures","payloads","signers","build","addStorageMeta","assertEx","hydrateTypedBoundWitness","tryHydrateTypedBoundWitness","isAllowedBlockPayload","isTransactionBoundWitnessWithStorageMeta","tryHydrateTransaction","archivist","hash","tryHydrateTypedBoundWitness","isTransactionBoundWitnessWithStorageMeta","hydrateTransaction","hydrateTypedBoundWitness","flattenHydratedTransaction","hydratedTransaction","tx","txPayloads","flattenHydratedTransactions","hydratedTransactions","flatMap","tryHydrateElevatedTransaction","undefined","transaction","payloads","opCodes","script","filter","operation","startsWith","elevatedPayloads","opCode","code","split","elevatedPayload","find","payload","_hash","isAllowedBlockPayload","push","length","hydrateElevatedTransaction","assertEx","AttoXL1","TransactionGasCosts","transactionRequiredGas","transaction","payloads","characters","reduce","acc","payload","JSON","stringify","length","hashes","payload_hashes","signatures","addresses","elevatedPayloads","script","AttoXL1","TransactionGasCosts","characterStorage","BigInt","hashValidation","signatureValidation","payloadValidation"]}
@@ -1,11 +1,13 @@
1
1
  import type { Address } from '@xylabs/hex';
2
2
  import type { Promisable } from '@xylabs/promise';
3
+ import type { BlockWindowInstance } from './modifiers/BlockWindowInstance.ts';
3
4
  import type { BlockWindowStateInstance } from './modifiers/BlockWindowState.ts';
4
5
  import type { ValidatableInstance } from './modifiers/Validatable.ts';
6
+ import type { XL1AmountInstance } from './XL1Amount.ts';
5
7
  export interface AddressInstance extends ValidatableInstance {
6
8
  address: Address;
7
9
  }
8
10
  export interface AddressStateInstance extends AddressInstance, BlockWindowStateInstance {
9
- balance(): Promisable<bigint>;
11
+ balance(): Promisable<[XL1AmountInstance, BlockWindowInstance]>;
10
12
  }
11
13
  //# sourceMappingURL=Address.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Address.d.ts","sourceRoot":"","sources":["../../../src/instances/Address.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAA;AAC1C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAEjD,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,iCAAiC,CAAA;AAC/E,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAA;AAErE,MAAM,WAAW,eAAgB,SAAQ,mBAAmB;IAC1D,OAAO,EAAE,OAAO,CAAA;CACjB;AAED,MAAM,WAAW,oBAAqB,SAAQ,eAAe,EAAE,wBAAwB;IACrF,OAAO,IAAI,UAAU,CAAC,MAAM,CAAC,CAAA;CAC9B"}
1
+ {"version":3,"file":"Address.d.ts","sourceRoot":"","sources":["../../../src/instances/Address.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAA;AAC1C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAEjD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,oCAAoC,CAAA;AAC7E,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,iCAAiC,CAAA;AAC/E,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAA;AACrE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAA;AAEvD,MAAM,WAAW,eAAgB,SAAQ,mBAAmB;IAC1D,OAAO,EAAE,OAAO,CAAA;CACjB;AAED,MAAM,WAAW,oBAAqB,SAAQ,eAAe,EAAE,wBAAwB;IACrF,OAAO,IAAI,UAAU,CAAC,CAAC,iBAAiB,EAAE,mBAAmB,CAAC,CAAC,CAAA;CAChE"}
@@ -0,0 +1,8 @@
1
+ export interface ShiftedBigIntConfig {
2
+ locale: Intl.LocalesArgument;
3
+ maxCharacters: number;
4
+ maxDecimal: number;
5
+ minDecimals: number;
6
+ places: number;
7
+ }
8
+ //# sourceMappingURL=ShiftedBigIntConfig.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ShiftedBigIntConfig.d.ts","sourceRoot":"","sources":["../../../src/instances/ShiftedBigIntConfig.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,mBAAmB;IAClC,MAAM,EAAE,IAAI,CAAC,eAAe,CAAA;IAC5B,aAAa,EAAE,MAAM,CAAA;IACrB,UAAU,EAAE,MAAM,CAAA;IAClB,WAAW,EAAE,MAAM,CAAA;IACnB,MAAM,EAAE,MAAM,CAAA;CACf"}
@@ -0,0 +1,14 @@
1
+ import type { AttoXL1, FemtoXL1, MicroXL1, MilliXL1, NanoXL1, PicoXL1 } from '@xyo-network/xl1-protocol';
2
+ import { type ShiftedBigIntConfig } from './ShiftedBigIntConfig.ts';
3
+ export interface XL1AmountInstance {
4
+ value: AttoXL1;
5
+ to(places: bigint | number): bigint;
6
+ milli: MilliXL1;
7
+ micro: MicroXL1;
8
+ nano: NanoXL1;
9
+ pico: PicoXL1;
10
+ femto: FemtoXL1;
11
+ atto: AttoXL1;
12
+ toString(places: number, config: Partial<ShiftedBigIntConfig>): string;
13
+ }
14
+ //# sourceMappingURL=XL1Amount.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"XL1Amount.d.ts","sourceRoot":"","sources":["../../../src/instances/XL1Amount.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EACxD,MAAM,2BAA2B,CAAA;AAElC,OAAO,EAAE,KAAK,mBAAmB,EAAE,MAAM,0BAA0B,CAAA;AAEnE,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,OAAO,CAAA;IAEd,EAAE,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,CAAA;IAEnC,KAAK,EAAE,QAAQ,CAAA;IAEf,KAAK,EAAE,QAAQ,CAAA;IAEf,IAAI,EAAE,OAAO,CAAA;IAEb,IAAI,EAAE,OAAO,CAAA;IAEb,KAAK,EAAE,QAAQ,CAAA;IAEf,IAAI,EAAE,OAAO,CAAA;IAEb,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,mBAAmB,CAAC,GAAG,MAAM,CAAA;CACvE"}
@@ -6,6 +6,8 @@ export * from './Fees.ts';
6
6
  export * from './modifiers/index.ts';
7
7
  export * from './Object.ts';
8
8
  export * from './Payload.ts';
9
+ export * from './ShiftedBigIntConfig.ts';
9
10
  export * from './Signature.ts';
10
11
  export * from './transaction/index.ts';
12
+ export * from './XL1Amount.ts';
11
13
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/instances/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAA;AAC5B,cAAc,kBAAkB,CAAA;AAChC,cAAc,mBAAmB,CAAA;AACjC,cAAc,WAAW,CAAA;AACzB,cAAc,WAAW,CAAA;AACzB,cAAc,sBAAsB,CAAA;AACpC,cAAc,aAAa,CAAA;AAC3B,cAAc,cAAc,CAAA;AAC5B,cAAc,gBAAgB,CAAA;AAC9B,cAAc,wBAAwB,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/instances/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAA;AAC5B,cAAc,kBAAkB,CAAA;AAChC,cAAc,mBAAmB,CAAA;AACjC,cAAc,WAAW,CAAA;AACzB,cAAc,WAAW,CAAA;AACzB,cAAc,sBAAsB,CAAA;AACpC,cAAc,aAAa,CAAA;AAC3B,cAAc,cAAc,CAAA;AAC5B,cAAc,0BAA0B,CAAA;AACxC,cAAc,gBAAgB,CAAA;AAC9B,cAAc,wBAAwB,CAAA;AACtC,cAAc,gBAAgB,CAAA"}
@@ -1,3 +1,4 @@
1
1
  import type { HydratedTransaction } from '@xyo-network/xl1-protocol';
2
- export declare function transactionRequiredGas([transaction, payloads]: HydratedTransaction): bigint;
2
+ import { AttoXL1 } from '@xyo-network/xl1-protocol';
3
+ export declare function transactionRequiredGas([transaction, payloads]: HydratedTransaction): AttoXL1;
3
4
  //# sourceMappingURL=transactionRequiredGas.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"transactionRequiredGas.d.ts","sourceRoot":"","sources":["../../../src/transaction/transactionRequiredGas.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAA;AAGpE,wBAAgB,sBAAsB,CAAC,CAAC,WAAW,EAAE,QAAQ,CAAC,EAAE,mBAAmB,GAAG,MAAM,CAS3F"}
1
+ {"version":3,"file":"transactionRequiredGas.d.ts","sourceRoot":"","sources":["../../../src/transaction/transactionRequiredGas.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAA;AACpE,OAAO,EAAE,OAAO,EAAuB,MAAM,2BAA2B,CAAA;AAExE,wBAAgB,sBAAsB,CAAC,CAAC,WAAW,EAAE,QAAQ,CAAC,EAAE,mBAAmB,GAAG,OAAO,CAS5F"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "$schema": "http://json.schemastore.org/package.json",
3
3
  "name": "@xyo-network/xl1-protocol-sdk",
4
- "version": "1.4.8",
4
+ "version": "1.5.0",
5
5
  "description": "XYO Layer One SDK Protocol",
6
6
  "homepage": "https://xylabs.com",
7
7
  "bugs": {
@@ -34,23 +34,23 @@
34
34
  "deploy3": "echo Deploy3 not allowed!"
35
35
  },
36
36
  "dependencies": {
37
- "@xylabs/assert": "^4.10.1",
38
- "@xylabs/hex": "^4.10.1",
39
- "@xylabs/object": "^4.10.1",
40
- "@xylabs/promise": "^4.10.1",
41
- "@xyo-network/account-model": "^3.17.0",
42
- "@xyo-network/archivist-model": "^3.17.0",
43
- "@xyo-network/boundwitness-builder": "^3.17.0",
44
- "@xyo-network/boundwitness-model": "^3.17.0",
45
- "@xyo-network/payload-builder": "^3.17.0",
46
- "@xyo-network/payload-model": "^3.17.0",
47
- "@xyo-network/xl1-protocol": "^1.4.0"
37
+ "@xylabs/assert": "^4.11.3",
38
+ "@xylabs/hex": "^4.11.3",
39
+ "@xylabs/object": "^4.11.3",
40
+ "@xylabs/promise": "^4.11.3",
41
+ "@xyo-network/account-model": "^3.17.1",
42
+ "@xyo-network/archivist-model": "^3.17.1",
43
+ "@xyo-network/boundwitness-builder": "^3.17.1",
44
+ "@xyo-network/boundwitness-model": "^3.17.1",
45
+ "@xyo-network/payload-builder": "^3.17.1",
46
+ "@xyo-network/payload-model": "^3.17.1",
47
+ "@xyo-network/xl1-protocol": "^1.4.9"
48
48
  },
49
49
  "devDependencies": {
50
- "@types/node": "^22.15.21",
50
+ "@types/node": "^22.15.24",
51
51
  "@xylabs/ts-scripts-yarn3": "^6.5.7",
52
52
  "@xylabs/tsconfig": "^6.5.7",
53
- "knip": "^5.57.2",
53
+ "knip": "^5.59.1",
54
54
  "typescript": "^5.8.3"
55
55
  },
56
56
  "engines": {
@@ -1,13 +1,15 @@
1
1
  import type { Address } from '@xylabs/hex'
2
2
  import type { Promisable } from '@xylabs/promise'
3
3
 
4
+ import type { BlockWindowInstance } from './modifiers/BlockWindowInstance.ts'
4
5
  import type { BlockWindowStateInstance } from './modifiers/BlockWindowState.ts'
5
6
  import type { ValidatableInstance } from './modifiers/Validatable.ts'
7
+ import type { XL1AmountInstance } from './XL1Amount.ts'
6
8
 
7
9
  export interface AddressInstance extends ValidatableInstance {
8
10
  address: Address
9
11
  }
10
12
 
11
13
  export interface AddressStateInstance extends AddressInstance, BlockWindowStateInstance {
12
- balance(): Promisable<bigint>
14
+ balance(): Promisable<[XL1AmountInstance, BlockWindowInstance]>
13
15
  }
@@ -0,0 +1,7 @@
1
+ export interface ShiftedBigIntConfig {
2
+ locale: Intl.LocalesArgument
3
+ maxCharacters: number
4
+ maxDecimal: number
5
+ minDecimals: number
6
+ places: number
7
+ }
@@ -0,0 +1,27 @@
1
+ /* eslint-disable @typescript-eslint/member-ordering */
2
+
3
+ import type {
4
+ AttoXL1, FemtoXL1, MicroXL1, MilliXL1, NanoXL1, PicoXL1,
5
+ } from '@xyo-network/xl1-protocol'
6
+
7
+ import { type ShiftedBigIntConfig } from './ShiftedBigIntConfig.ts'
8
+
9
+ export interface XL1AmountInstance {
10
+ value: AttoXL1
11
+
12
+ to(places: bigint | number): bigint
13
+
14
+ milli: MilliXL1
15
+
16
+ micro: MicroXL1
17
+
18
+ nano: NanoXL1
19
+
20
+ pico: PicoXL1
21
+
22
+ femto: FemtoXL1
23
+
24
+ atto: AttoXL1
25
+
26
+ toString(places: number, config: Partial<ShiftedBigIntConfig>): string
27
+ }
@@ -6,5 +6,7 @@ export * from './Fees.ts'
6
6
  export * from './modifiers/index.ts'
7
7
  export * from './Object.ts'
8
8
  export * from './Payload.ts'
9
+ export * from './ShiftedBigIntConfig.ts'
9
10
  export * from './Signature.ts'
10
11
  export * from './transaction/index.ts'
12
+ export * from './XL1Amount.ts'
@@ -1,13 +1,13 @@
1
1
  import type { HydratedTransaction } from '@xyo-network/xl1-protocol'
2
- import { TransactionGasCosts } from '@xyo-network/xl1-protocol'
2
+ import { AttoXL1, TransactionGasCosts } from '@xyo-network/xl1-protocol'
3
3
 
4
- export function transactionRequiredGas([transaction, payloads]: HydratedTransaction): bigint {
4
+ export function transactionRequiredGas([transaction, payloads]: HydratedTransaction): AttoXL1 {
5
5
  const characters = payloads.reduce((acc: number, payload) => acc + JSON.stringify(payload).length, 0)
6
6
  const hashes = transaction.payload_hashes.length + 1 /* for transaction itself */
7
7
  const signatures = transaction.addresses.length + 1
8
8
  const elevatedPayloads = (transaction.script ?? []).length
9
- return TransactionGasCosts.characterStorage * BigInt(characters)
9
+ return AttoXL1(TransactionGasCosts.characterStorage * BigInt(characters)
10
10
  + TransactionGasCosts.hashValidation * BigInt(hashes)
11
11
  + TransactionGasCosts.signatureValidation * BigInt(signatures)
12
- + TransactionGasCosts.payloadValidation * BigInt(elevatedPayloads)
12
+ + TransactionGasCosts.payloadValidation * BigInt(elevatedPayloads))
13
13
  }