@xyo-network/xl1-protocol-sdk 1.3.29 → 1.3.31
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/neutral/index.mjs +5 -14
- package/dist/neutral/index.mjs.map +1 -1
- package/dist/types/instances/Fees.d.ts +5 -4
- package/dist/types/instances/Fees.d.ts.map +1 -1
- package/dist/types/transaction/buildTransaction.d.ts +1 -2
- package/dist/types/transaction/buildTransaction.d.ts.map +1 -1
- package/dist/types/transaction/transactionRequiredGas.d.ts.map +1 -1
- package/package.json +10 -10
- package/src/instances/Fees.ts +6 -4
- package/src/transaction/buildTransaction.ts +5 -8
- package/src/transaction/transactionRequiredGas.ts +6 -7
package/dist/neutral/index.mjs
CHANGED
|
@@ -6,13 +6,8 @@ import { assertEx } from "@xylabs/assert";
|
|
|
6
6
|
import { toHex } from "@xylabs/hex";
|
|
7
7
|
import { BoundWitnessBuilder } from "@xyo-network/boundwitness-builder";
|
|
8
8
|
import { PayloadBuilder } from "@xyo-network/payload-builder";
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
gasPrice: 100n,
|
|
12
|
-
gasLimit: 1000000n,
|
|
13
|
-
priority: 0n
|
|
14
|
-
};
|
|
15
|
-
async function buildTransaction(chain, elevatedPayloads, additionalPayloads, signer, nbf, exp, from, fees = defaultFees) {
|
|
9
|
+
import { defaultTransactionFees } from "@xyo-network/xl1-protocol";
|
|
10
|
+
async function buildTransaction(chain, elevatedPayloads, additionalPayloads, signer, nbf, exp, from, fees = defaultTransactionFees) {
|
|
16
11
|
if (from === void 0 && Array.isArray(signer)) {
|
|
17
12
|
throw new Error("from is required when signer is an array");
|
|
18
13
|
}
|
|
@@ -99,21 +94,17 @@ var hydrateElevatedTransaction = /* @__PURE__ */ __name(async (archivist, hash)
|
|
|
99
94
|
}, "hydrateElevatedTransaction");
|
|
100
95
|
|
|
101
96
|
// src/transaction/transactionRequiredGas.ts
|
|
102
|
-
import {
|
|
97
|
+
import { TransactionGasCosts } from "@xyo-network/xl1-protocol";
|
|
103
98
|
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
99
|
const characters = payloads.reduce((acc, payload) => acc + JSON.stringify(payload).length, 0);
|
|
109
100
|
const hashes = transaction.payload_hashes.length + 1;
|
|
110
101
|
const signatures = transaction.addresses.length + 1;
|
|
111
|
-
|
|
102
|
+
const elevatedPayloads = (transaction.script ?? []).length;
|
|
103
|
+
return TransactionGasCosts.byte * BigInt(characters) + TransactionGasCosts.hashValidation * BigInt(hashes) + TransactionGasCosts.signatureValidation * BigInt(signatures) + TransactionGasCosts.payloadValidation * BigInt(elevatedPayloads);
|
|
112
104
|
}
|
|
113
105
|
__name(transactionRequiredGas, "transactionRequiredGas");
|
|
114
106
|
export {
|
|
115
107
|
buildTransaction,
|
|
116
|
-
defaultFees,
|
|
117
108
|
flattenHydratedTransaction,
|
|
118
109
|
flattenHydratedTransactions,
|
|
119
110
|
hydrateElevatedTransaction,
|
|
@@ -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 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
|
+
{"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.byte * 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","byte","BigInt","hashValidation","signatureValidation","payloadValidation"]}
|
|
@@ -1,8 +1,9 @@
|
|
|
1
|
+
import type { MicroXL1 } from '@xyo-network/xl1-protocol';
|
|
1
2
|
import type { ValidatableInstance } from './modifiers/Validatable.ts';
|
|
2
3
|
export interface TransactionFeesInstance extends ValidatableInstance {
|
|
3
|
-
base:
|
|
4
|
-
gasLimit:
|
|
5
|
-
gasPrice:
|
|
6
|
-
priority:
|
|
4
|
+
base: MicroXL1;
|
|
5
|
+
gasLimit: MicroXL1;
|
|
6
|
+
gasPrice: MicroXL1;
|
|
7
|
+
priority: MicroXL1;
|
|
7
8
|
}
|
|
8
9
|
//# sourceMappingURL=Fees.d.ts.map
|
|
@@ -1 +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,
|
|
1
|
+
{"version":3,"file":"Fees.d.ts","sourceRoot":"","sources":["../../../src/instances/Fees.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAA;AAEzD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAA;AAErE,MAAM,WAAW,uBAAwB,SAAQ,mBAAmB;IAClE,IAAI,EAAE,QAAQ,CAAA;IACd,QAAQ,EAAE,QAAQ,CAAA;IAClB,QAAQ,EAAE,QAAQ,CAAA;IAClB,QAAQ,EAAE,QAAQ,CAAA;CACnB"}
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import type { Address } from '@xylabs/hex';
|
|
2
2
|
import type { AccountInstance } from '@xyo-network/account-model';
|
|
3
3
|
import type { Payload } from '@xyo-network/payload-model';
|
|
4
|
-
import type
|
|
5
|
-
export declare const defaultFees: TransactionFeesBigInt;
|
|
4
|
+
import { type AllowedBlockPayload, type HydratedTransactionWithStorageMeta, type TransactionFeesBigInt } from '@xyo-network/xl1-protocol';
|
|
6
5
|
export declare function buildTransaction(chain: Address, elevatedPayloads: AllowedBlockPayload[], additionalPayloads: Payload[], signer: AccountInstance | AccountInstance[], nbf: number, exp: number, from?: Address, fees?: TransactionFeesBigInt): Promise<HydratedTransactionWithStorageMeta>;
|
|
7
6
|
//# sourceMappingURL=buildTransaction.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"buildTransaction.d.ts","sourceRoot":"","sources":["../../../src/transaction/buildTransaction.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAA;AAE1C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAA;AAGjE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAA;AACzD,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"buildTransaction.d.ts","sourceRoot":"","sources":["../../../src/transaction/buildTransaction.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAA;AAE1C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAA;AAGjE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAA;AACzD,OAAO,EACL,KAAK,mBAAmB,EAExB,KAAK,kCAAkC,EAAoE,KAAK,qBAAqB,EACtI,MAAM,2BAA2B,CAAA;AAElC,wBAAsB,gBAAgB,CACpC,KAAK,EAAE,OAAO,EACd,gBAAgB,EAAE,mBAAmB,EAAE,EACvC,kBAAkB,EAAE,OAAO,EAAE,EAC7B,MAAM,EAAE,eAAe,GAAG,eAAe,EAAE,EAC3C,GAAG,EAAE,MAAM,EACX,GAAG,EAAE,MAAM,EACX,IAAI,CAAC,EAAE,OAAO,EACd,IAAI,GAAE,qBAA8C,GACnD,OAAO,CAAC,kCAAkC,CAAC,CAmC7C"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transactionRequiredGas.d.ts","sourceRoot":"","sources":["../../../src/transaction/transactionRequiredGas.ts"],"names":[],"mappings":"
|
|
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"}
|
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.
|
|
4
|
+
"version": "1.3.31",
|
|
5
5
|
"description": "XYO Layer One SDK Protocol",
|
|
6
6
|
"homepage": "https://xylabs.com",
|
|
7
7
|
"bugs": {
|
|
@@ -38,19 +38,19 @@
|
|
|
38
38
|
"@xylabs/hex": "^4.9.18",
|
|
39
39
|
"@xylabs/object": "^4.9.18",
|
|
40
40
|
"@xylabs/promise": "^4.9.18",
|
|
41
|
-
"@xyo-network/account-model": "^3.16.
|
|
42
|
-
"@xyo-network/archivist-model": "^3.16.
|
|
43
|
-
"@xyo-network/boundwitness-builder": "^3.16.
|
|
44
|
-
"@xyo-network/boundwitness-model": "^3.16.
|
|
45
|
-
"@xyo-network/payload-builder": "^3.16.
|
|
46
|
-
"@xyo-network/payload-model": "^3.16.
|
|
47
|
-
"@xyo-network/xl1-protocol": "^1.3.
|
|
41
|
+
"@xyo-network/account-model": "^3.16.1",
|
|
42
|
+
"@xyo-network/archivist-model": "^3.16.1",
|
|
43
|
+
"@xyo-network/boundwitness-builder": "^3.16.1",
|
|
44
|
+
"@xyo-network/boundwitness-model": "^3.16.1",
|
|
45
|
+
"@xyo-network/payload-builder": "^3.16.1",
|
|
46
|
+
"@xyo-network/payload-model": "^3.16.1",
|
|
47
|
+
"@xyo-network/xl1-protocol": "^1.3.31"
|
|
48
48
|
},
|
|
49
49
|
"devDependencies": {
|
|
50
|
-
"@types/node": "^22.15.
|
|
50
|
+
"@types/node": "^22.15.20",
|
|
51
51
|
"@xylabs/ts-scripts-yarn3": "^6.5.7",
|
|
52
52
|
"@xylabs/tsconfig": "^6.5.7",
|
|
53
|
-
"knip": "^5.
|
|
53
|
+
"knip": "^5.57.0",
|
|
54
54
|
"typescript": "^5.8.3"
|
|
55
55
|
},
|
|
56
56
|
"engines": {
|
package/src/instances/Fees.ts
CHANGED
|
@@ -1,8 +1,10 @@
|
|
|
1
|
+
import type { MicroXL1 } from '@xyo-network/xl1-protocol'
|
|
2
|
+
|
|
1
3
|
import type { ValidatableInstance } from './modifiers/Validatable.ts'
|
|
2
4
|
|
|
3
5
|
export interface TransactionFeesInstance extends ValidatableInstance {
|
|
4
|
-
base:
|
|
5
|
-
gasLimit:
|
|
6
|
-
gasPrice:
|
|
7
|
-
priority:
|
|
6
|
+
base: MicroXL1
|
|
7
|
+
gasLimit: MicroXL1
|
|
8
|
+
gasPrice: MicroXL1
|
|
9
|
+
priority: MicroXL1
|
|
8
10
|
}
|
|
@@ -5,15 +5,12 @@ import type { AccountInstance } from '@xyo-network/account-model'
|
|
|
5
5
|
import { BoundWitnessBuilder } from '@xyo-network/boundwitness-builder'
|
|
6
6
|
import { PayloadBuilder } from '@xyo-network/payload-builder'
|
|
7
7
|
import type { Payload } from '@xyo-network/payload-model'
|
|
8
|
-
import
|
|
9
|
-
AllowedBlockPayload,
|
|
10
|
-
|
|
8
|
+
import {
|
|
9
|
+
type AllowedBlockPayload,
|
|
10
|
+
defaultTransactionFees,
|
|
11
|
+
type HydratedTransactionWithStorageMeta, type TransactionBoundWitness, type TransactionBoundWitnessFields, type TransactionFeesBigInt,
|
|
11
12
|
} from '@xyo-network/xl1-protocol'
|
|
12
13
|
|
|
13
|
-
export const defaultFees: TransactionFeesBigInt = {
|
|
14
|
-
base: 1000n, gasPrice: 100n, gasLimit: 1_000_000n, priority: 0n,
|
|
15
|
-
}
|
|
16
|
-
|
|
17
14
|
export async function buildTransaction(
|
|
18
15
|
chain: Address,
|
|
19
16
|
elevatedPayloads: AllowedBlockPayload[],
|
|
@@ -22,7 +19,7 @@ export async function buildTransaction(
|
|
|
22
19
|
nbf: number,
|
|
23
20
|
exp: number,
|
|
24
21
|
from?: Address,
|
|
25
|
-
fees: TransactionFeesBigInt =
|
|
22
|
+
fees: TransactionFeesBigInt = defaultTransactionFees,
|
|
26
23
|
): Promise<HydratedTransactionWithStorageMeta> {
|
|
27
24
|
if (from === undefined && Array.isArray(signer)) {
|
|
28
25
|
throw new Error('from is required when signer is an array')
|
|
@@ -1,14 +1,13 @@
|
|
|
1
|
-
import { hexToBigInt } from '@xylabs/hex'
|
|
2
1
|
import type { HydratedTransaction } from '@xyo-network/xl1-protocol'
|
|
2
|
+
import { TransactionGasCosts } from '@xyo-network/xl1-protocol'
|
|
3
3
|
|
|
4
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
5
|
const characters = payloads.reduce((acc: number, payload) => acc + JSON.stringify(payload).length, 0)
|
|
11
6
|
const hashes = transaction.payload_hashes.length + 1 /* for transaction itself */
|
|
12
7
|
const signatures = transaction.addresses.length + 1
|
|
13
|
-
|
|
8
|
+
const elevatedPayloads = (transaction.script ?? []).length
|
|
9
|
+
return TransactionGasCosts.byte * BigInt(characters)
|
|
10
|
+
+ TransactionGasCosts.hashValidation * BigInt(hashes)
|
|
11
|
+
+ TransactionGasCosts.signatureValidation * BigInt(signatures)
|
|
12
|
+
+ TransactionGasCosts.payloadValidation * BigInt(elevatedPayloads)
|
|
14
13
|
}
|