@xyo-network/xl1-protocol-sdk 1.3.13 → 1.3.15

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.
Files changed (70) hide show
  1. package/README.md +11 -32
  2. package/dist/neutral/index.mjs +15 -0
  3. package/dist/neutral/index.mjs.map +1 -1
  4. package/dist/types/index.d.ts +1 -0
  5. package/dist/types/index.d.ts.map +1 -1
  6. package/dist/types/instances/BoundWitness.d.ts +9 -0
  7. package/dist/types/instances/BoundWitness.d.ts.map +1 -0
  8. package/dist/types/instances/Data.d.ts +4 -0
  9. package/dist/types/instances/Data.d.ts.map +1 -0
  10. package/dist/types/instances/Fees.d.ts +8 -0
  11. package/dist/types/instances/Fees.d.ts.map +1 -0
  12. package/dist/types/instances/HydratedBoundWitness.d.ts +10 -0
  13. package/dist/types/instances/HydratedBoundWitness.d.ts.map +1 -0
  14. package/dist/types/instances/Object.d.ts +5 -0
  15. package/dist/types/instances/Object.d.ts.map +1 -0
  16. package/dist/types/instances/Payload.d.ts +6 -0
  17. package/dist/types/instances/Payload.d.ts.map +1 -0
  18. package/dist/types/instances/Signature.d.ts +8 -0
  19. package/dist/types/instances/Signature.d.ts.map +1 -0
  20. package/dist/types/instances/block/BlockFields.d.ts +9 -0
  21. package/dist/types/instances/block/BlockFields.d.ts.map +1 -0
  22. package/dist/types/instances/block/HydratedBlock.d.ts +8 -0
  23. package/dist/types/instances/block/HydratedBlock.d.ts.map +1 -0
  24. package/dist/types/instances/block/SignedHydratedBlock.d.ts +6 -0
  25. package/dist/types/instances/block/SignedHydratedBlock.d.ts.map +1 -0
  26. package/dist/types/instances/block/index.d.ts +3 -0
  27. package/dist/types/instances/block/index.d.ts.map +1 -0
  28. package/dist/types/instances/index.d.ts +10 -0
  29. package/dist/types/instances/index.d.ts.map +1 -0
  30. package/dist/types/instances/modifiers/Signed.d.ts +7 -0
  31. package/dist/types/instances/modifiers/Signed.d.ts.map +1 -0
  32. package/dist/types/instances/modifiers/Validatable.d.ts +5 -0
  33. package/dist/types/instances/modifiers/Validatable.d.ts.map +1 -0
  34. package/dist/types/instances/modifiers/index.d.ts +3 -0
  35. package/dist/types/instances/modifiers/index.d.ts.map +1 -0
  36. package/dist/types/instances/transaction/HydratedTransaction.d.ts +6 -0
  37. package/dist/types/instances/transaction/HydratedTransaction.d.ts.map +1 -0
  38. package/dist/types/instances/transaction/SignedHydratedTransaction.d.ts +6 -0
  39. package/dist/types/instances/transaction/SignedHydratedTransaction.d.ts.map +1 -0
  40. package/dist/types/instances/transaction/TransactionFields.d.ts +9 -0
  41. package/dist/types/instances/transaction/TransactionFields.d.ts.map +1 -0
  42. package/dist/types/instances/transaction/index.d.ts +3 -0
  43. package/dist/types/instances/transaction/index.d.ts.map +1 -0
  44. package/dist/types/transaction/index.d.ts +1 -0
  45. package/dist/types/transaction/index.d.ts.map +1 -1
  46. package/dist/types/transaction/transactionRequiredGas.d.ts +3 -0
  47. package/dist/types/transaction/transactionRequiredGas.d.ts.map +1 -0
  48. package/package.json +5 -2
  49. package/src/index.ts +1 -0
  50. package/src/instances/BoundWitness.ts +13 -0
  51. package/src/instances/Data.ts +3 -0
  52. package/src/instances/Fees.ts +8 -0
  53. package/src/instances/HydratedBoundWitness.ts +15 -0
  54. package/src/instances/Object.ts +5 -0
  55. package/src/instances/Payload.ts +6 -0
  56. package/src/instances/Signature.ts +11 -0
  57. package/src/instances/block/BlockFields.ts +13 -0
  58. package/src/instances/block/HydratedBlock.ts +10 -0
  59. package/src/instances/block/SignedHydratedBlock.ts +6 -0
  60. package/src/instances/block/index.ts +2 -0
  61. package/src/instances/index.ts +9 -0
  62. package/src/instances/modifiers/Signed.ts +8 -0
  63. package/src/instances/modifiers/Validatable.ts +5 -0
  64. package/src/instances/modifiers/index.ts +2 -0
  65. package/src/instances/transaction/HydratedTransaction.ts +9 -0
  66. package/src/instances/transaction/SignedHydratedTransaction.ts +8 -0
  67. package/src/instances/transaction/TransactionFields.ts +13 -0
  68. package/src/instances/transaction/index.ts +2 -0
  69. package/src/transaction/index.ts +1 -0
  70. package/src/transaction/transactionRequiredGas.ts +14 -0
package/README.md CHANGED
@@ -1,44 +1,23 @@
1
- [![logo][]](https://xyo-network)
1
+ # @xyo-network/xl1-protocol-sdk
2
2
 
3
- # @xyo-network/xl1-protocol
3
+ [![logo][]](https://xyo.network)
4
4
 
5
- [![main-build][]][main-build-link]
5
+ Version: 1.3.13
6
6
 
7
- [![codacy-badge][]][codacy-link]
8
- [![codeclimate-badge][]][codeclimate-link]
9
- [![codeclimate-coverage-badge][]][codeclimate-coverage-link]
7
+ XYO Layer One SDK Protocol
10
8
 
11
- ## Table of Contents
9
+ ## Documentation
12
10
 
13
- - [@xyo-network/xl1-protocol](#xylabsapi-xyo-xl1-nodejs)
14
- - [Table of Contents](#table-of-contents)
15
- - [Description](#description)
16
- - [Maintainers](#maintainers)
17
- - [License](#license)
18
- - [Credits](#credits)
11
+ [TypeDoc Generated Documentation](https://gitbook.xyo.network/xyo-data-lab/xyo-reference/package-documentation/xyo-network__xl1-protocol-sdk)
19
12
 
20
- ## Description
21
-
22
- Api/implementation of XYO Chain API Node
23
-
24
- ## Maintainers
25
-
26
- - [Arie Trouw](https://github.com/arietrouw) [arietrouw.com](https://arietrouw.com)
13
+ Part of [sdk-xyo-client-js](https://www.npmjs.com/package/@xyo-network/sdk-xyo-client-js)
27
14
 
28
15
  ## License
29
16
 
30
- See the [LICENSE](LICENSE) file for license details
17
+ > See the [LICENSE](LICENSE) file for license details
31
18
 
32
19
  ## Credits
33
20
 
34
- [Made with 🔥 and ❄️ by XY Labs](https://xylabs.com)
35
-
36
- [logo]: https://cdn.xy.company/img/brand/XYO_full_colored.png
37
- [main-build]: https://github.com/xylabs/xl1-protocol/actions/workflows/build-main.yml/badge.svg
38
- [main-build-link]: https://github.com/xylabs/xl1-protocol/actions/workflows/build-main.yml
39
- [codacy-badge]: https://app.codacy.com/project/badge/Grade/14640dade84b44a69e7b9daafd07be46
40
- [codacy-link]: https://www.codacy.com/gh/xylabs/xl1-protocol/dashboard?utm_source=github.com&utm_medium=referral&utm_content=xylabs/api-xylabs-import-nodejs&utm_campaign=Badge_Grade
41
- [codeclimate-badge]: https://api.codeclimate.com/v1/badges/dc0bb5770f231f22f826/maintainability
42
- [codeclimate-link]: https://codeclimate.com/github/xylabs/xl1-protocol/maintainability
43
- [codeclimate-coverage-badge]: https://api.codeclimate.com/v1/badges/dc0bb5770f231f22f826/test_coverage
44
- [codeclimate-coverage-link]: https://codeclimate.com/github/xylabs/xl1-protocol/test_coverage
21
+ [Made with 🔥 and ❄️ by XYO](https://xyo.network)
22
+
23
+ [logo]: https://cdn.xy.company/img/brand/XYO_full_colored.png
@@ -97,6 +97,20 @@ var tryHydrateElevatedTransaction = /* @__PURE__ */ __name(async (archivist, has
97
97
  var hydrateElevatedTransaction = /* @__PURE__ */ __name(async (archivist, hash) => {
98
98
  return assertEx2(await tryHydrateElevatedTransaction(archivist, hash), () => "Hydration failed");
99
99
  }, "hydrateElevatedTransaction");
100
+
101
+ // src/transaction/transactionRequiredGas.ts
102
+ import { hexToBigInt } from "@xylabs/hex";
103
+ function transactionRequiredGas([transaction, payloads]) {
104
+ const gasPrice = hexToBigInt(transaction.fees.gasPrice);
105
+ const gasPerCharacter = gasPrice;
106
+ const gasPerHash = gasPrice * 1000n;
107
+ const gasPerValidatedSignature = gasPrice * 1000n;
108
+ const characters = payloads.reduce((acc, payload) => acc + JSON.stringify(payload).length, 0);
109
+ const hashes = transaction.payload_hashes.length + 1;
110
+ const signatures = transaction.addresses.length + 1;
111
+ return gasPerCharacter * BigInt(characters) + gasPerHash * BigInt(hashes) + gasPerValidatedSignature * BigInt(signatures);
112
+ }
113
+ __name(transactionRequiredGas, "transactionRequiredGas");
100
114
  export {
101
115
  buildTransaction,
102
116
  defaultFees,
@@ -104,6 +118,7 @@ export {
104
118
  flattenHydratedTransactions,
105
119
  hydrateElevatedTransaction,
106
120
  hydrateTransaction,
121
+ transactionRequiredGas,
107
122
  tryHydrateElevatedTransaction,
108
123
  tryHydrateTransaction
109
124
  };
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/transaction/buildTransaction.ts","../../src/transaction/hydrateTransaction.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 type {\n AllowedBlockPayload,\n HydratedTransactionWithStorageMeta, TransactionBoundWitness, TransactionBoundWitnessFields, TransactionFeesBigInt,\n} from '@xyo-network/xl1-protocol'\n\nexport const defaultFees: TransactionFeesBigInt = {\n base: 1000n, gasPrice: 100n, gasLimit: 1_000_000n, priority: 0n,\n}\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 = defaultFees,\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"],"mappings":"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","names":["assertEx","toHex","BoundWitnessBuilder","PayloadBuilder","defaultFees","base","gasPrice","gasLimit","priority","buildTransaction","chain","elevatedPayloads","additionalPayloads","signer","nbf","exp","from","fees","undefined","Array","isArray","Error","txBoundWitnessFields","toHex","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"]}
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 type {\n AllowedBlockPayload,\n HydratedTransactionWithStorageMeta, TransactionBoundWitness, TransactionBoundWitnessFields, TransactionFeesBigInt,\n} from '@xyo-network/xl1-protocol'\n\nexport const defaultFees: TransactionFeesBigInt = {\n base: 1000n, gasPrice: 100n, gasLimit: 1_000_000n, priority: 0n,\n}\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 = defaultFees,\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 { hexToBigInt } from '@xylabs/hex'\nimport type { HydratedTransaction } from '@xyo-network/xl1-protocol'\n\nexport function transactionRequiredGas([transaction, payloads]: HydratedTransaction): bigint {\n const gasPrice = hexToBigInt(transaction.fees.gasPrice)\n const gasPerCharacter = gasPrice\n const gasPerHash = gasPrice * 1000n\n const gasPerValidatedSignature = gasPrice * 1000n\n\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 return gasPerCharacter * BigInt(characters) + gasPerHash * BigInt(hashes) + gasPerValidatedSignature * BigInt(signatures)\n}\n"],"mappings":"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","names":["assertEx","toHex","BoundWitnessBuilder","PayloadBuilder","defaultFees","base","gasPrice","gasLimit","priority","buildTransaction","chain","elevatedPayloads","additionalPayloads","signer","nbf","exp","from","fees","undefined","Array","isArray","Error","txBoundWitnessFields","toHex","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","hexToBigInt","transactionRequiredGas","transaction","payloads","gasPrice","hexToBigInt","fees","gasPerCharacter","gasPerHash","gasPerValidatedSignature","characters","reduce","acc","payload","JSON","stringify","length","hashes","payload_hashes","signatures","addresses","BigInt"]}
@@ -1,2 +1,3 @@
1
+ export * from './instances/index.ts';
1
2
  export * from './transaction/index.ts';
2
3
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,wBAAwB,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,sBAAsB,CAAA;AACpC,cAAc,wBAAwB,CAAA"}
@@ -0,0 +1,9 @@
1
+ import type { BoundWitness } from '@xyo-network/boundwitness-model';
2
+ import type { Payload } from '@xyo-network/payload-model';
3
+ import type { PayloadInstance } from './Payload.ts';
4
+ export interface BoundWitnessInstance<TBoundWitness extends BoundWitness = BoundWitness, TPayload extends Payload = Payload> extends PayloadInstance<TBoundWitness> {
5
+ payloadCount: number;
6
+ payloads: PayloadInstance<TPayload>[];
7
+ payload(index: number): PayloadInstance<TPayload> | undefined;
8
+ }
9
+ //# sourceMappingURL=BoundWitness.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BoundWitness.d.ts","sourceRoot":"","sources":["../../../src/instances/BoundWitness.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAA;AACnE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAA;AAEzD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,cAAc,CAAA;AAEnD,MAAM,WAAW,oBAAoB,CAAC,aAAa,SAAS,YAAY,GAAG,YAAY,EACrF,QAAQ,SAAS,OAAO,GAAG,OAAO,CAAE,SAAQ,eAAe,CAAC,aAAa,CAAC;IAE1E,YAAY,EAAE,MAAM,CAAA;IACpB,QAAQ,EAAE,eAAe,CAAC,QAAQ,CAAC,EAAE,CAAA;IAErC,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,eAAe,CAAC,QAAQ,CAAC,GAAG,SAAS,CAAA;CAC9D"}
@@ -0,0 +1,4 @@
1
+ export interface DataInstance<T> {
2
+ data: T;
3
+ }
4
+ //# sourceMappingURL=Data.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Data.d.ts","sourceRoot":"","sources":["../../../src/instances/Data.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,YAAY,CAAC,CAAC;IAC7B,IAAI,EAAE,CAAC,CAAA;CACR"}
@@ -0,0 +1,8 @@
1
+ import type { ValidatableInstance } from './modifiers/Validatable.ts';
2
+ export interface TransactionFeesInstance extends ValidatableInstance {
3
+ base: bigint;
4
+ gasLimit: bigint;
5
+ gasPrice: bigint;
6
+ priority: bigint;
7
+ }
8
+ //# sourceMappingURL=Fees.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Fees.d.ts","sourceRoot":"","sources":["../../../src/instances/Fees.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAA;AAErE,MAAM,WAAW,uBAAwB,SAAQ,mBAAmB;IAClE,IAAI,EAAE,MAAM,CAAA;IACZ,QAAQ,EAAE,MAAM,CAAA;IAChB,QAAQ,EAAE,MAAM,CAAA;IAChB,QAAQ,EAAE,MAAM,CAAA;CACjB"}
@@ -0,0 +1,10 @@
1
+ import type { HydratedBoundWitness } from '@xyo-network/archivist-model';
2
+ import type { DataInstance } from './Data.ts';
3
+ import type { ValidatableInstance } from './modifiers/Validatable.ts';
4
+ export interface HydratedBoundWitnessInstance<T extends HydratedBoundWitness = HydratedBoundWitness> extends ValidatableInstance, DataInstance<T> {
5
+ boundWitness: T[0];
6
+ payloadCount: number;
7
+ payloads: T[1][number][];
8
+ payload(index: number): T[1][number] | undefined;
9
+ }
10
+ //# sourceMappingURL=HydratedBoundWitness.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"HydratedBoundWitness.d.ts","sourceRoot":"","sources":["../../../src/instances/HydratedBoundWitness.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAA;AAExE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,WAAW,CAAA;AAC7C,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAA;AAErE,MAAM,WAAW,4BAA4B,CAAC,CAAC,SAAS,oBAAoB,GAAG,oBAAoB,CACjG,SAAQ,mBAAmB,EAAE,YAAY,CAAC,CAAC,CAAC;IAE5C,YAAY,EAAE,CAAC,CAAC,CAAC,CAAC,CAAA;IAElB,YAAY,EAAE,MAAM,CAAA;IACpB,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,CAAA;IAExB,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,SAAS,CAAA;CACjD"}
@@ -0,0 +1,5 @@
1
+ import type { EmptyObject } from '@xylabs/object';
2
+ import type { DataInstance } from './Data.ts';
3
+ export interface ObjectInstance<T extends EmptyObject = EmptyObject> extends DataInstance<T> {
4
+ }
5
+ //# sourceMappingURL=Object.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Object.d.ts","sourceRoot":"","sources":["../../../src/instances/Object.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAA;AAEjD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,WAAW,CAAA;AAE7C,MAAM,WAAW,cAAc,CAAC,CAAC,SAAS,WAAW,GAAG,WAAW,CAAE,SAAQ,YAAY,CAAC,CAAC,CAAC;CAAG"}
@@ -0,0 +1,6 @@
1
+ import type { Payload } from '@xyo-network/payload-model';
2
+ import type { ValidatableInstance } from './modifiers/Validatable.ts';
3
+ import type { ObjectInstance } from './Object.ts';
4
+ export interface PayloadInstance<TPayload extends Payload = Payload> extends ObjectInstance<TPayload>, ValidatableInstance {
5
+ }
6
+ //# sourceMappingURL=Payload.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Payload.d.ts","sourceRoot":"","sources":["../../../src/instances/Payload.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAA;AAEzD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAA;AACrE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAEjD,MAAM,WAAW,eAAe,CAAC,QAAQ,SAAS,OAAO,GAAG,OAAO,CAAE,SAAQ,cAAc,CAAC,QAAQ,CAAC,EAAE,mBAAmB;CAAG"}
@@ -0,0 +1,8 @@
1
+ import type { Address, Hash, Hex } from '@xylabs/hex';
2
+ import type { ValidatableInstance } from './modifiers/Validatable.ts';
3
+ export interface SignatureInstance extends ValidatableInstance {
4
+ address: Address;
5
+ hash: Hash;
6
+ signature: Hex;
7
+ }
8
+ //# sourceMappingURL=Signature.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Signature.d.ts","sourceRoot":"","sources":["../../../src/instances/Signature.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,OAAO,EAAE,IAAI,EAAE,GAAG,EACnB,MAAM,aAAa,CAAA;AAEpB,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAA;AAErE,MAAM,WAAW,iBAAkB,SAAQ,mBAAmB;IAC5D,OAAO,EAAE,OAAO,CAAA;IAChB,IAAI,EAAE,IAAI,CAAA;IACV,SAAS,EAAE,GAAG,CAAA;CACf"}
@@ -0,0 +1,9 @@
1
+ export interface BlockFieldsInstance<TTransactionResult> {
2
+ privatePayloadCount: number;
3
+ publicPayloadCount: number;
4
+ reward: bigint;
5
+ transactionCount: number;
6
+ transactions: TTransactionResult[];
7
+ transaction(index: number): TTransactionResult | undefined;
8
+ }
9
+ //# sourceMappingURL=BlockFields.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BlockFields.d.ts","sourceRoot":"","sources":["../../../../src/instances/block/BlockFields.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,mBAAmB,CAAC,kBAAkB;IACrD,mBAAmB,EAAE,MAAM,CAAA;IAE3B,kBAAkB,EAAE,MAAM,CAAA;IAE1B,MAAM,EAAE,MAAM,CAAA;IAEd,gBAAgB,EAAE,MAAM,CAAA;IAExB,YAAY,EAAE,kBAAkB,EAAE,CAAA;IAElC,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,kBAAkB,GAAG,SAAS,CAAA;CAC3D"}
@@ -0,0 +1,8 @@
1
+ import type { HydratedBlock } from '@xyo-network/xl1-protocol';
2
+ import type { HydratedBoundWitnessInstance } from '../HydratedBoundWitness.ts';
3
+ import type { HydratedTransactionInstance } from '../transaction/index.ts';
4
+ import type { BlockFieldsInstance } from './BlockFields.ts';
5
+ export interface HydratedBlockInstance<T extends HydratedBlock = HydratedBlock> extends BlockFieldsInstance<HydratedTransactionInstance>, HydratedBoundWitnessInstance<T> {
6
+ publicPayloads: T[1][number][];
7
+ }
8
+ //# sourceMappingURL=HydratedBlock.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"HydratedBlock.d.ts","sourceRoot":"","sources":["../../../../src/instances/block/HydratedBlock.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAA;AAE9D,OAAO,KAAK,EAAE,4BAA4B,EAAE,MAAM,4BAA4B,CAAA;AAC9E,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,yBAAyB,CAAA;AAC1E,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAA;AAE3D,MAAM,WAAW,qBAAqB,CAAC,CAAC,SAAS,aAAa,GAAG,aAAa,CAAE,SAC9E,mBAAmB,CAAC,2BAA2B,CAAC,EAAE,4BAA4B,CAAC,CAAC,CAAC;IACjF,cAAc,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,CAAA;CAC/B"}
@@ -0,0 +1,6 @@
1
+ import type { SignedHydratedBlock } from '@xyo-network/xl1-protocol';
2
+ import type { SignedInstance } from '../modifiers/Signed.ts';
3
+ import type { HydratedBlockInstance } from './HydratedBlock.ts';
4
+ export interface SignedHydratedBlockInstance<T extends SignedHydratedBlock = SignedHydratedBlock> extends HydratedBlockInstance<T>, SignedInstance {
5
+ }
6
+ //# sourceMappingURL=SignedHydratedBlock.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SignedHydratedBlock.d.ts","sourceRoot":"","sources":["../../../../src/instances/block/SignedHydratedBlock.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAA;AAEpE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAA;AAC5D,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAA;AAE/D,MAAM,WAAW,2BAA2B,CAAC,CAAC,SAAS,mBAAmB,GAAG,mBAAmB,CAAE,SAAQ,qBAAqB,CAAC,CAAC,CAAC,EAAE,cAAc;CAAI"}
@@ -0,0 +1,3 @@
1
+ export * from './HydratedBlock.ts';
2
+ export * from './SignedHydratedBlock.ts';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/instances/block/index.ts"],"names":[],"mappings":"AAAA,cAAc,oBAAoB,CAAA;AAClC,cAAc,0BAA0B,CAAA"}
@@ -0,0 +1,10 @@
1
+ export * from './block/index.ts';
2
+ export * from './BoundWitness.ts';
3
+ export * from './Data.ts';
4
+ export * from './Fees.ts';
5
+ export * from './modifiers/index.ts';
6
+ export * from './Object.ts';
7
+ export * from './Payload.ts';
8
+ export * from './Signature.ts';
9
+ export * from './transaction/index.ts';
10
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/instances/index.ts"],"names":[],"mappings":"AAAA,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"}
@@ -0,0 +1,7 @@
1
+ import type { SignatureInstance } from '../Signature.ts';
2
+ export interface SignedInstance {
3
+ signatureCount: number;
4
+ signatures: SignatureInstance[];
5
+ signature(index: number): SignatureInstance | undefined;
6
+ }
7
+ //# sourceMappingURL=Signed.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Signed.d.ts","sourceRoot":"","sources":["../../../../src/instances/modifiers/Signed.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAA;AAExD,MAAM,WAAW,cAAc;IAC7B,cAAc,EAAE,MAAM,CAAA;IACtB,UAAU,EAAE,iBAAiB,EAAE,CAAA;IAE/B,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,iBAAiB,GAAG,SAAS,CAAA;CACxD"}
@@ -0,0 +1,5 @@
1
+ import type { Promisable } from '@xylabs/promise';
2
+ export interface ValidatableInstance {
3
+ validate(): Promisable<Error[]>;
4
+ }
5
+ //# sourceMappingURL=Validatable.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Validatable.d.ts","sourceRoot":"","sources":["../../../../src/instances/modifiers/Validatable.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAEjD,MAAM,WAAW,mBAAmB;IAClC,QAAQ,IAAI,UAAU,CAAC,KAAK,EAAE,CAAC,CAAA;CAChC"}
@@ -0,0 +1,3 @@
1
+ export * from './Signed.ts';
2
+ export * from './Validatable.ts';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/instances/modifiers/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAA;AAC3B,cAAc,kBAAkB,CAAA"}
@@ -0,0 +1,6 @@
1
+ import type { AllowedBlockPayload, HydratedTransaction } from '@xyo-network/xl1-protocol';
2
+ import type { HydratedBoundWitnessInstance } from '../HydratedBoundWitness.ts';
3
+ import type { TransactionFieldsInstance } from './TransactionFields.ts';
4
+ export interface HydratedTransactionInstance<T extends HydratedTransaction = HydratedTransaction, TElevatedPayload extends AllowedBlockPayload = AllowedBlockPayload> extends TransactionFieldsInstance<T[1][number] & TElevatedPayload>, HydratedBoundWitnessInstance<T> {
5
+ }
6
+ //# sourceMappingURL=HydratedTransaction.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"HydratedTransaction.d.ts","sourceRoot":"","sources":["../../../../src/instances/transaction/HydratedTransaction.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAA;AAEzF,OAAO,KAAK,EAAE,4BAA4B,EAAE,MAAM,4BAA4B,CAAA;AAC9E,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,wBAAwB,CAAA;AAEvE,MAAM,WAAW,2BAA2B,CAAC,CAAC,SAAS,mBAAmB,GAAG,mBAAmB,EAC9F,gBAAgB,SAAS,mBAAmB,GAAG,mBAAmB,CAClE,SAAQ,yBAAyB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,gBAAgB,CAAC,EAAE,4BAA4B,CAAC,CAAC,CAAC;CACpG"}
@@ -0,0 +1,6 @@
1
+ import type { AllowedBlockPayload, HydratedTransaction } from '@xyo-network/xl1-protocol';
2
+ import type { SignedInstance } from '../modifiers/Signed.ts';
3
+ import type { HydratedTransactionInstance } from './HydratedTransaction.ts';
4
+ export interface SignedHydratedTransactionInstance<T extends HydratedTransaction = HydratedTransaction, TBlockPayload extends AllowedBlockPayload = AllowedBlockPayload> extends HydratedTransactionInstance<T, TBlockPayload>, SignedInstance {
5
+ }
6
+ //# sourceMappingURL=SignedHydratedTransaction.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SignedHydratedTransaction.d.ts","sourceRoot":"","sources":["../../../../src/instances/transaction/SignedHydratedTransaction.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAA;AAEzF,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAA;AAC5D,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,0BAA0B,CAAA;AAE3E,MAAM,WAAW,iCAAiC,CAAC,CAAC,SAAS,mBAAmB,GAAG,mBAAmB,EACpG,aAAa,SAAS,mBAAmB,GAAG,mBAAmB,CAAE,SAAQ,2BAA2B,CAAC,CAAC,EAAE,aAAa,CAAC,EAAE,cAAc;CACvI"}
@@ -0,0 +1,9 @@
1
+ import type { AllowedBlockPayload } from '@xyo-network/xl1-protocol';
2
+ import type { TransactionFeesInstance } from '../Fees.ts';
3
+ export interface TransactionFieldsInstance<TBlockPayload extends AllowedBlockPayload = AllowedBlockPayload> {
4
+ elevatedPayloadCount: number;
5
+ elevatedPayloads: TBlockPayload[];
6
+ fees: TransactionFeesInstance;
7
+ elevatedPayload(index: number): TBlockPayload | undefined;
8
+ }
9
+ //# sourceMappingURL=TransactionFields.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TransactionFields.d.ts","sourceRoot":"","sources":["../../../../src/instances/transaction/TransactionFields.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAA;AAEpE,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,YAAY,CAAA;AAEzD,MAAM,WAAW,yBAAyB,CAAC,aAAa,SAAS,mBAAmB,GAAG,mBAAmB;IAExG,oBAAoB,EAAE,MAAM,CAAA;IAC5B,gBAAgB,EAAE,aAAa,EAAE,CAAA;IAEjC,IAAI,EAAE,uBAAuB,CAAA;IAE7B,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,aAAa,GAAG,SAAS,CAAA;CAC1D"}
@@ -0,0 +1,3 @@
1
+ export * from './HydratedTransaction.ts';
2
+ export * from './SignedHydratedTransaction.ts';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/instances/transaction/index.ts"],"names":[],"mappings":"AAAA,cAAc,0BAA0B,CAAA;AACxC,cAAc,gCAAgC,CAAA"}
@@ -1,3 +1,4 @@
1
1
  export * from './buildTransaction.ts';
2
2
  export * from './hydrateTransaction.ts';
3
+ export * from './transactionRequiredGas.ts';
3
4
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/transaction/index.ts"],"names":[],"mappings":"AAAA,cAAc,uBAAuB,CAAA;AACrC,cAAc,yBAAyB,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/transaction/index.ts"],"names":[],"mappings":"AAAA,cAAc,uBAAuB,CAAA;AACrC,cAAc,yBAAyB,CAAA;AACvC,cAAc,6BAA6B,CAAA"}
@@ -0,0 +1,3 @@
1
+ import type { HydratedTransaction } from '@xyo-network/xl1-protocol';
2
+ export declare function transactionRequiredGas([transaction, payloads]: HydratedTransaction): bigint;
3
+ //# sourceMappingURL=transactionRequiredGas.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transactionRequiredGas.d.ts","sourceRoot":"","sources":["../../../src/transaction/transactionRequiredGas.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAA;AAEpE,wBAAgB,sBAAsB,CAAC,CAAC,WAAW,EAAE,QAAQ,CAAC,EAAE,mBAAmB,GAAG,MAAM,CAU3F"}
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.3.13",
4
+ "version": "1.3.15",
5
5
  "description": "XYO Layer One SDK Protocol",
6
6
  "homepage": "https://xylabs.com",
7
7
  "bugs": {
@@ -36,12 +36,15 @@
36
36
  "dependencies": {
37
37
  "@xylabs/assert": "^4.8.9",
38
38
  "@xylabs/hex": "^4.8.9",
39
+ "@xylabs/object": "^4.8.9",
40
+ "@xylabs/promise": "^4.8.9",
39
41
  "@xyo-network/account-model": "^3.14.16",
40
42
  "@xyo-network/archivist-model": "^3.14.16",
41
43
  "@xyo-network/boundwitness-builder": "^3.14.16",
44
+ "@xyo-network/boundwitness-model": "^3.14.16",
42
45
  "@xyo-network/payload-builder": "^3.14.16",
43
46
  "@xyo-network/payload-model": "^3.14.16",
44
- "@xyo-network/xl1-protocol": "^1.3.10"
47
+ "@xyo-network/xl1-protocol": "^1.3.11"
45
48
  },
46
49
  "devDependencies": {
47
50
  "@types/node": "^22.15.3",
package/src/index.ts CHANGED
@@ -1 +1,2 @@
1
+ export * from './instances/index.ts'
1
2
  export * from './transaction/index.ts'
@@ -0,0 +1,13 @@
1
+ import type { BoundWitness } from '@xyo-network/boundwitness-model'
2
+ import type { Payload } from '@xyo-network/payload-model'
3
+
4
+ import type { PayloadInstance } from './Payload.ts'
5
+
6
+ export interface BoundWitnessInstance<TBoundWitness extends BoundWitness = BoundWitness,
7
+ TPayload extends Payload = Payload> extends PayloadInstance<TBoundWitness> {
8
+
9
+ payloadCount: number
10
+ payloads: PayloadInstance<TPayload>[]
11
+
12
+ payload(index: number): PayloadInstance<TPayload> | undefined
13
+ }
@@ -0,0 +1,3 @@
1
+ export interface DataInstance<T> {
2
+ data: T
3
+ }
@@ -0,0 +1,8 @@
1
+ import type { ValidatableInstance } from './modifiers/Validatable.ts'
2
+
3
+ export interface TransactionFeesInstance extends ValidatableInstance {
4
+ base: bigint
5
+ gasLimit: bigint
6
+ gasPrice: bigint
7
+ priority: bigint
8
+ }
@@ -0,0 +1,15 @@
1
+ import type { HydratedBoundWitness } from '@xyo-network/archivist-model'
2
+
3
+ import type { DataInstance } from './Data.ts'
4
+ import type { ValidatableInstance } from './modifiers/Validatable.ts'
5
+
6
+ export interface HydratedBoundWitnessInstance<T extends HydratedBoundWitness = HydratedBoundWitness>
7
+ extends ValidatableInstance, DataInstance<T> {
8
+
9
+ boundWitness: T[0]
10
+
11
+ payloadCount: number
12
+ payloads: T[1][number][]
13
+
14
+ payload(index: number): T[1][number] | undefined
15
+ }
@@ -0,0 +1,5 @@
1
+ import type { EmptyObject } from '@xylabs/object'
2
+
3
+ import type { DataInstance } from './Data.ts'
4
+
5
+ export interface ObjectInstance<T extends EmptyObject = EmptyObject> extends DataInstance<T> {}
@@ -0,0 +1,6 @@
1
+ import type { Payload } from '@xyo-network/payload-model'
2
+
3
+ import type { ValidatableInstance } from './modifiers/Validatable.ts'
4
+ import type { ObjectInstance } from './Object.ts'
5
+
6
+ export interface PayloadInstance<TPayload extends Payload = Payload> extends ObjectInstance<TPayload>, ValidatableInstance {}
@@ -0,0 +1,11 @@
1
+ import type {
2
+ Address, Hash, Hex,
3
+ } from '@xylabs/hex'
4
+
5
+ import type { ValidatableInstance } from './modifiers/Validatable.ts'
6
+
7
+ export interface SignatureInstance extends ValidatableInstance {
8
+ address: Address
9
+ hash: Hash
10
+ signature: Hex
11
+ }
@@ -0,0 +1,13 @@
1
+ export interface BlockFieldsInstance<TTransactionResult> {
2
+ privatePayloadCount: number
3
+
4
+ publicPayloadCount: number
5
+
6
+ reward: bigint
7
+
8
+ transactionCount: number
9
+
10
+ transactions: TTransactionResult[]
11
+
12
+ transaction(index: number): TTransactionResult | undefined
13
+ }
@@ -0,0 +1,10 @@
1
+ import type { HydratedBlock } from '@xyo-network/xl1-protocol'
2
+
3
+ import type { HydratedBoundWitnessInstance } from '../HydratedBoundWitness.ts'
4
+ import type { HydratedTransactionInstance } from '../transaction/index.ts'
5
+ import type { BlockFieldsInstance } from './BlockFields.ts'
6
+
7
+ export interface HydratedBlockInstance<T extends HydratedBlock = HydratedBlock> extends
8
+ BlockFieldsInstance<HydratedTransactionInstance>, HydratedBoundWitnessInstance<T> {
9
+ publicPayloads: T[1][number][]
10
+ }
@@ -0,0 +1,6 @@
1
+ import type { SignedHydratedBlock } from '@xyo-network/xl1-protocol'
2
+
3
+ import type { SignedInstance } from '../modifiers/Signed.ts'
4
+ import type { HydratedBlockInstance } from './HydratedBlock.ts'
5
+
6
+ export interface SignedHydratedBlockInstance<T extends SignedHydratedBlock = SignedHydratedBlock> extends HydratedBlockInstance<T>, SignedInstance { }
@@ -0,0 +1,2 @@
1
+ export * from './HydratedBlock.ts'
2
+ export * from './SignedHydratedBlock.ts'
@@ -0,0 +1,9 @@
1
+ export * from './block/index.ts'
2
+ export * from './BoundWitness.ts'
3
+ export * from './Data.ts'
4
+ export * from './Fees.ts'
5
+ export * from './modifiers/index.ts'
6
+ export * from './Object.ts'
7
+ export * from './Payload.ts'
8
+ export * from './Signature.ts'
9
+ export * from './transaction/index.ts'
@@ -0,0 +1,8 @@
1
+ import type { SignatureInstance } from '../Signature.ts'
2
+
3
+ export interface SignedInstance {
4
+ signatureCount: number
5
+ signatures: SignatureInstance[]
6
+
7
+ signature(index: number): SignatureInstance | undefined
8
+ }
@@ -0,0 +1,5 @@
1
+ import type { Promisable } from '@xylabs/promise'
2
+
3
+ export interface ValidatableInstance {
4
+ validate(): Promisable<Error[]>
5
+ }
@@ -0,0 +1,2 @@
1
+ export * from './Signed.ts'
2
+ export * from './Validatable.ts'
@@ -0,0 +1,9 @@
1
+ import type { AllowedBlockPayload, HydratedTransaction } from '@xyo-network/xl1-protocol'
2
+
3
+ import type { HydratedBoundWitnessInstance } from '../HydratedBoundWitness.ts'
4
+ import type { TransactionFieldsInstance } from './TransactionFields.ts'
5
+
6
+ export interface HydratedTransactionInstance<T extends HydratedTransaction = HydratedTransaction,
7
+ TElevatedPayload extends AllowedBlockPayload = AllowedBlockPayload>
8
+ extends TransactionFieldsInstance<T[1][number] & TElevatedPayload>, HydratedBoundWitnessInstance<T> {
9
+ }
@@ -0,0 +1,8 @@
1
+ import type { AllowedBlockPayload, HydratedTransaction } from '@xyo-network/xl1-protocol'
2
+
3
+ import type { SignedInstance } from '../modifiers/Signed.ts'
4
+ import type { HydratedTransactionInstance } from './HydratedTransaction.ts'
5
+
6
+ export interface SignedHydratedTransactionInstance<T extends HydratedTransaction = HydratedTransaction,
7
+ TBlockPayload extends AllowedBlockPayload = AllowedBlockPayload> extends HydratedTransactionInstance<T, TBlockPayload>, SignedInstance {
8
+ }
@@ -0,0 +1,13 @@
1
+ import type { AllowedBlockPayload } from '@xyo-network/xl1-protocol'
2
+
3
+ import type { TransactionFeesInstance } from '../Fees.ts'
4
+
5
+ export interface TransactionFieldsInstance<TBlockPayload extends AllowedBlockPayload = AllowedBlockPayload> {
6
+
7
+ elevatedPayloadCount: number
8
+ elevatedPayloads: TBlockPayload[]
9
+
10
+ fees: TransactionFeesInstance
11
+
12
+ elevatedPayload(index: number): TBlockPayload | undefined
13
+ }
@@ -0,0 +1,2 @@
1
+ export * from './HydratedTransaction.ts'
2
+ export * from './SignedHydratedTransaction.ts'
@@ -1,2 +1,3 @@
1
1
  export * from './buildTransaction.ts'
2
2
  export * from './hydrateTransaction.ts'
3
+ export * from './transactionRequiredGas.ts'
@@ -0,0 +1,14 @@
1
+ import { hexToBigInt } from '@xylabs/hex'
2
+ import type { HydratedTransaction } from '@xyo-network/xl1-protocol'
3
+
4
+ export function transactionRequiredGas([transaction, payloads]: HydratedTransaction): bigint {
5
+ const gasPrice = hexToBigInt(transaction.fees.gasPrice)
6
+ const gasPerCharacter = gasPrice
7
+ const gasPerHash = gasPrice * 1000n
8
+ const gasPerValidatedSignature = gasPrice * 1000n
9
+
10
+ const characters = payloads.reduce((acc: number, payload) => acc + JSON.stringify(payload).length, 0)
11
+ const hashes = transaction.payload_hashes.length + 1 /* for transaction itself */
12
+ const signatures = transaction.addresses.length + 1
13
+ return gasPerCharacter * BigInt(characters) + gasPerHash * BigInt(hashes) + gasPerValidatedSignature * BigInt(signatures)
14
+ }