@aeternity/aepp-sdk 14.1.1 → 15.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (84) hide show
  1. package/dist/aepp-sdk.browser-script.cjs +1 -1
  2. package/dist/aepp-sdk.browser-script.cjs.map +1 -1
  3. package/dist/aepp-sdk.browser.cjs +1 -1
  4. package/dist/aepp-sdk.browser.cjs.map +1 -1
  5. package/dist/aepp-sdk.cjs +3112 -506
  6. package/dist/aepp-sdk.cjs.map +1 -1
  7. package/es/account/Base.d.ts +6 -1
  8. package/es/account/Base.js.map +1 -1
  9. package/es/account/Generalized.d.ts +1 -1
  10. package/es/account/Generalized.js +7 -1
  11. package/es/account/Generalized.js.map +1 -1
  12. package/es/apis/node/models/index.d.ts +405 -79
  13. package/es/apis/node/models/index.js.map +1 -1
  14. package/es/apis/node/models/mappers.d.ts +54 -4
  15. package/es/apis/node/models/mappers.js +1910 -500
  16. package/es/apis/node/models/mappers.js.map +1 -1
  17. package/es/apis/node/node.d.ts +28 -6
  18. package/es/apis/node/node.js +276 -5
  19. package/es/apis/node/node.js.map +1 -1
  20. package/es/channel/Contract.d.ts +5 -0
  21. package/es/channel/Contract.js +8 -2
  22. package/es/channel/Contract.js.map +1 -1
  23. package/es/channel/handlers.js +3 -3
  24. package/es/channel/handlers.js.map +1 -1
  25. package/es/contract/ga.d.ts +5 -2
  26. package/es/contract/ga.js +53 -21
  27. package/es/contract/ga.js.map +1 -1
  28. package/es/index-browser.d.ts +3 -1
  29. package/es/index-browser.js +2 -1
  30. package/es/index-browser.js.map +1 -1
  31. package/es/tx/builder/constants.d.ts +13 -2
  32. package/es/tx/builder/constants.js +12 -1
  33. package/es/tx/builder/constants.js.map +1 -1
  34. package/es/tx/builder/entry/index.js +6 -0
  35. package/es/tx/builder/entry/index.js.map +1 -1
  36. package/es/tx/builder/entry/schema.d.ts +10 -10
  37. package/es/tx/builder/field-types/abi-version.js +6 -4
  38. package/es/tx/builder/field-types/abi-version.js.map +1 -1
  39. package/es/tx/builder/field-types/ct-version.d.ts +19 -0
  40. package/es/tx/builder/field-types/ct-version.js +27 -1
  41. package/es/tx/builder/field-types/ct-version.js.map +1 -1
  42. package/es/tx/builder/field-types/fee.d.ts +9 -7
  43. package/es/tx/builder/field-types/fee.js +75 -66
  44. package/es/tx/builder/field-types/fee.js.map +1 -1
  45. package/es/tx/builder/field-types/gas-limit.d.ts +5 -3
  46. package/es/tx/builder/field-types/gas-limit.js +25 -14
  47. package/es/tx/builder/field-types/gas-limit.js.map +1 -1
  48. package/es/tx/builder/field-types/gas-price.d.ts +6 -4
  49. package/es/tx/builder/field-types/gas-price.js +91 -21
  50. package/es/tx/builder/field-types/gas-price.js.map +1 -1
  51. package/es/tx/builder/field-types/interface.d.ts +20 -0
  52. package/es/tx/builder/field-types/interface.js +17 -1
  53. package/es/tx/builder/field-types/interface.js.map +1 -1
  54. package/es/tx/builder/field-types/name-fee.d.ts +3 -2
  55. package/es/tx/builder/field-types/name-fee.js +6 -0
  56. package/es/tx/builder/field-types/name-fee.js.map +1 -1
  57. package/es/tx/builder/field-types/pointers.d.ts +2 -1
  58. package/es/tx/builder/field-types/pointers.js +6 -2
  59. package/es/tx/builder/field-types/pointers.js.map +1 -1
  60. package/es/tx/builder/field-types/transaction.d.ts +4 -1
  61. package/es/tx/builder/field-types/transaction.js +18 -3
  62. package/es/tx/builder/field-types/transaction.js.map +1 -1
  63. package/es/tx/builder/field-types/with-formatting.d.ts +1 -1
  64. package/es/tx/builder/field-types/with-formatting.js +1 -1
  65. package/es/tx/builder/field-types/with-formatting.js.map +1 -1
  66. package/es/tx/builder/index.d.ts +13 -0
  67. package/es/tx/builder/index.js +92 -5
  68. package/es/tx/builder/index.js.map +1 -1
  69. package/es/tx/builder/protocol-parameters.d.ts +134 -0
  70. package/es/tx/builder/protocol-parameters.js +539 -0
  71. package/es/tx/builder/protocol-parameters.js.map +1 -0
  72. package/es/tx/builder/schema.d.ts +156 -155
  73. package/es/tx/builder/schema.js +5 -1
  74. package/es/tx/builder/schema.js.map +1 -1
  75. package/es/tx/execution-cost.js +5 -5
  76. package/es/tx/execution-cost.js.map +1 -1
  77. package/es/tx/transaction-signer.js +2 -2
  78. package/es/tx/transaction-signer.js.map +1 -1
  79. package/es/tx/validator.js +4 -4
  80. package/es/tx/validator.js.map +1 -1
  81. package/es/utils/wrap-proxy.d.ts +10 -0
  82. package/es/utils/wrap-proxy.js +18 -0
  83. package/es/utils/wrap-proxy.js.map +1 -1
  84. package/package.json +15 -3
@@ -31,6 +31,7 @@ import ttl from './field-types/ttl.js';
31
31
  import uInt from './field-types/u-int.js';
32
32
  import withDefault from './field-types/with-default.js';
33
33
  import withFormatting from './field-types/with-formatting.js';
34
+ import { serializeAsIsParam } from './field-types/interface.js';
34
35
  import { Encoding } from '../../utils/encoder.js';
35
36
  import { ArgumentError } from '../../utils/errors.js';
36
37
  import { EntryTag } from './entry/constants.js';
@@ -53,9 +54,12 @@ const clientTtl = withDefault(60 * 60, shortUInt);
53
54
  /**
54
55
  * Name ttl represented in number of blocks (Max value is 50000 blocks)
55
56
  */
56
- const nameTtl = withFormatting(value => {
57
+ const nameTtl = withFormatting((value, params) => {
57
58
  const NAME_TTL = 180000;
58
59
  value !== null && value !== void 0 ? value : value = NAME_TTL;
60
+ // SDK-release limit, node reports it as `nameClaimMaxExpiration` — skipped on re-serialization,
61
+ // see `serializeAsIsParam`
62
+ if (params[serializeAsIsParam] === true) return value;
59
63
  if (value >= 1 && value <= NAME_TTL) return value;
60
64
  throw new ArgumentError('nameTtl', `a number between 1 and ${NAME_TTL} blocks`, value);
61
65
  }, shortUInt);
@@ -1 +1 @@
1
- {"version":3,"file":"schema.js","names":["Tag","abiVersion","address","idTagToEncoding","array","coinAmount","ctVersion","encoded","entry","enumeration","fee","gasLimit","gasPrice","name","nameFee","nameId","nonce","pointers","queryFee","raw","shortUInt","shortUIntConst","string","transaction","ttl","uInt","withDefault","withFormatting","Encoding","ArgumentError","EntryTag","ORACLE_TTL_TYPES","transactionAny","transactionSignedTx","SignedTx","entryTreesPoi","TreesPoi","clientTtl","nameTtl","value","NAME_TTL","txSchema","tag","version","signatures","encodedTx","SpendTx","senderId","AccountAddress","recipientId","ContractAddress","Name","amount","payload","Bytearray","NamePreclaimTx","accountId","commitmentId","Commitment","NameClaimTx","nameSalt","NameUpdateTx","NameTransferTx","NameRevokeTx","ContractCreateTx","ownerId","code","ContractBytearray","deposit","callData","ContractCallTx","callerId","contractId","OracleRegisterTx","queryFormat","responseFormat","oracleTtlType","delta","oracleTtlValue","OracleExtendTx","oracleId","OracleAddress","OracleQueryTx","query","queryTtlType","queryTtlValue","responseTtlType","responseTtlValue","OracleRespondTx","queryId","OracleQueryId","response","ChannelCreateTx","initiator","initiatorAmount","responder","responderAmount","channelReserve","lockPeriod","initiatorDelegateIds","responderDelegateIds","stateHash","State","ChannelCloseMutualTx","channelId","Channel","fromId","initiatorAmountFinal","responderAmountFinal","ChannelCloseSoloTx","Transaction","poi","ChannelSlashTx","ChannelDepositTx","round","ChannelWithdrawTx","toId","ChannelSettleTx","ChannelForceProgressTx","update","offChainTrees","StateTrees","ChannelOffChainTx","ChannelSnapshotSoloTx","GaAttachTx","authFun","GaMetaTx","gaId","authData","tx","PayingForTx","payerId"],"sources":["../../../src/tx/builder/schema.ts"],"sourcesContent":["/**\n * Transaction Schema for TxBuilder\n */\n// # RLP version number\n// # https://github.com/aeternity/protocol/blob/master/serializations.md#binary-serialization\n\nimport { Tag } from './constants.js';\nimport SchemaTypes from './SchemaTypes.js';\nimport abiVersion from './field-types/abi-version.js';\nimport address, { idTagToEncoding } from './field-types/address.js';\nimport array from './field-types/array.js';\nimport coinAmount from './field-types/coin-amount.js';\nimport ctVersion from './field-types/ct-version.js';\nimport encoded from './field-types/encoded.js';\nimport entry from './field-types/entry.js';\nimport enumeration from './field-types/enumeration.js';\nimport fee from './field-types/fee.js';\nimport gasLimit from './field-types/gas-limit.js';\nimport gasPrice from './field-types/gas-price.js';\nimport name from './field-types/name.js';\nimport nameFee from './field-types/name-fee.js';\nimport nameId from './field-types/name-id.js';\nimport nonce from './field-types/nonce.js';\nimport pointers from './field-types/pointers.js';\nimport queryFee from './field-types/query-fee.js';\nimport raw from './field-types/raw.js';\nimport shortUInt from './field-types/short-u-int.js';\nimport shortUIntConst from './field-types/short-u-int-const.js';\nimport string from './field-types/string.js';\nimport transaction from './field-types/transaction.js';\nimport ttl from './field-types/ttl.js';\nimport uInt from './field-types/u-int.js';\nimport withDefault from './field-types/with-default.js';\nimport withFormatting from './field-types/with-formatting.js';\nimport { Encoded, Encoding } from '../../utils/encoder.js';\nimport { ArgumentError } from '../../utils/errors.js';\nimport { EntryTag } from './entry/constants.js';\nimport { EntParams, EntUnpacked } from './entry/schema.generated.js';\n\n/**\n * @category oracle\n */\nexport enum ORACLE_TTL_TYPES {\n delta = 0,\n block = 1,\n}\n\n// TODO: figure out how to omit overriding types of recursive fields\ninterface TransactionAny {\n serialize: (value: TxParams | Uint8Array | Encoded.Transaction) => Buffer;\n deserialize: (value: Buffer) => TxUnpacked;\n recursiveType: true;\n}\n\nconst transactionAny = transaction() as unknown as TransactionAny;\n\ninterface TransactionSignedTx {\n serialize: (\n value: (TxParams & { tag: Tag.SignedTx }) | Uint8Array | Encoded.Transaction,\n ) => Buffer;\n deserialize: (value: Buffer) => TxUnpacked & { tag: Tag.SignedTx };\n recursiveType: true;\n}\n\nconst transactionSignedTx = transaction(Tag.SignedTx) as unknown as TransactionSignedTx;\n\ninterface EntryTreesPoi {\n serialize: (\n value: (EntParams & { tag: EntryTag.TreesPoi }) | Uint8Array | Encoded.Transaction,\n ) => Buffer;\n deserialize: (value: Buffer) => EntUnpacked & { tag: EntryTag.TreesPoi };\n recursiveType: true;\n}\n\nconst entryTreesPoi = entry(EntryTag.TreesPoi) as unknown as EntryTreesPoi;\n\nconst clientTtl = withDefault(60 * 60, shortUInt);\n// https://github.com/aeternity/protocol/blob/fd17982/AENS.md#update\n/**\n * Name ttl represented in number of blocks (Max value is 50000 blocks)\n */\nconst nameTtl = withFormatting((value) => {\n const NAME_TTL = 180000;\n value ??= NAME_TTL;\n if (value >= 1 && value <= NAME_TTL) return value;\n throw new ArgumentError('nameTtl', `a number between 1 and ${NAME_TTL} blocks`, value);\n}, shortUInt);\n\n/**\n * @see {@link https://github.com/aeternity/protocol/blob/c007deeac4a01e401238412801ac7084ac72d60e/serializations.md#accounts-version-1-basic-accounts}\n */\nexport const txSchema = [\n {\n tag: shortUIntConst(Tag.SignedTx),\n version: shortUIntConst(1, true),\n signatures: array(raw), // TODO: use sg_ (Encoding.Signature) instead\n encodedTx: transactionAny,\n },\n {\n tag: shortUIntConst(Tag.SpendTx),\n version: shortUIntConst(1, true),\n senderId: address(Encoding.AccountAddress),\n // TODO: accept also an AENS name\n recipientId: address(Encoding.AccountAddress, Encoding.ContractAddress, Encoding.Name),\n amount: coinAmount,\n fee,\n ttl,\n nonce: nonce('senderId'),\n payload: encoded(Encoding.Bytearray, true),\n },\n {\n tag: shortUIntConst(Tag.NamePreclaimTx),\n version: shortUIntConst(1, true),\n accountId: address(Encoding.AccountAddress),\n nonce: nonce('accountId'),\n commitmentId: address(Encoding.Commitment),\n fee,\n ttl,\n },\n {\n tag: shortUIntConst(Tag.NameClaimTx),\n version: shortUIntConst(2, true),\n accountId: address(Encoding.AccountAddress),\n nonce: nonce('accountId'),\n name,\n nameSalt: withDefault(0, uInt),\n nameFee,\n fee,\n ttl,\n },\n {\n tag: shortUIntConst(Tag.NameUpdateTx),\n version: shortUIntConst(1, true),\n accountId: address(Encoding.AccountAddress),\n nonce: nonce('accountId'),\n nameId,\n nameTtl,\n pointers: pointers(false),\n clientTtl,\n fee,\n ttl,\n },\n {\n tag: shortUIntConst(Tag.NameUpdateTx),\n version: shortUIntConst(2),\n accountId: address(Encoding.AccountAddress),\n nonce: nonce('accountId'),\n nameId,\n nameTtl,\n pointers: pointers(true),\n clientTtl,\n fee,\n ttl,\n },\n {\n tag: shortUIntConst(Tag.NameTransferTx),\n version: shortUIntConst(1, true),\n accountId: address(Encoding.AccountAddress),\n nonce: nonce('accountId'),\n nameId,\n // TODO: accept also an AENS name\n recipientId: address(Encoding.AccountAddress, Encoding.Name),\n fee,\n ttl,\n },\n {\n tag: shortUIntConst(Tag.NameRevokeTx),\n version: shortUIntConst(1, true),\n accountId: address(Encoding.AccountAddress),\n nonce: nonce('accountId'),\n nameId,\n fee,\n ttl,\n },\n {\n tag: shortUIntConst(Tag.ContractCreateTx),\n version: shortUIntConst(1, true),\n ownerId: address(Encoding.AccountAddress),\n nonce: nonce('ownerId'),\n code: encoded(Encoding.ContractBytearray),\n ctVersion,\n fee,\n ttl,\n deposit: withFormatting((value = 0) => {\n if (+value === 0) return value;\n throw new ArgumentError('deposit', 'equal 0 (because is not refundable)', value);\n }, coinAmount),\n amount: coinAmount,\n gasLimit,\n gasPrice,\n callData: encoded(Encoding.ContractBytearray),\n },\n {\n tag: shortUIntConst(Tag.ContractCallTx),\n version: shortUIntConst(1, true),\n callerId: address(Encoding.AccountAddress),\n nonce: nonce('callerId'),\n // TODO: accept also an AENS name\n contractId: address(Encoding.ContractAddress, Encoding.Name),\n abiVersion,\n fee,\n ttl,\n amount: coinAmount,\n gasLimit,\n gasPrice,\n callData: encoded(Encoding.ContractBytearray),\n },\n {\n tag: shortUIntConst(Tag.OracleRegisterTx),\n version: shortUIntConst(1, true),\n accountId: address(Encoding.AccountAddress),\n nonce: nonce('accountId'),\n queryFormat: string,\n responseFormat: string,\n queryFee: coinAmount,\n oracleTtlType: withDefault(ORACLE_TTL_TYPES.delta, enumeration(ORACLE_TTL_TYPES)),\n oracleTtlValue: withDefault(500, shortUInt),\n fee,\n ttl,\n abiVersion,\n },\n {\n tag: shortUIntConst(Tag.OracleExtendTx),\n version: shortUIntConst(1, true),\n // TODO: accept also an AENS name\n oracleId: address(Encoding.OracleAddress, Encoding.Name),\n nonce: nonce('oracleId'),\n oracleTtlType: withDefault(ORACLE_TTL_TYPES.delta, enumeration(ORACLE_TTL_TYPES)),\n oracleTtlValue: withDefault(500, shortUInt),\n fee,\n ttl,\n },\n {\n tag: shortUIntConst(Tag.OracleQueryTx),\n version: shortUIntConst(1, true),\n senderId: address(Encoding.AccountAddress),\n nonce: nonce('senderId'),\n // TODO: accept also an AENS name\n oracleId: address(Encoding.OracleAddress, Encoding.Name),\n query: string,\n queryFee,\n queryTtlType: withDefault(ORACLE_TTL_TYPES.delta, enumeration(ORACLE_TTL_TYPES)),\n queryTtlValue: withDefault(10, shortUInt),\n responseTtlType: withDefault(ORACLE_TTL_TYPES.delta, enumeration(ORACLE_TTL_TYPES)),\n responseTtlValue: withDefault(10, shortUInt),\n fee,\n ttl,\n },\n {\n tag: shortUIntConst(Tag.OracleRespondTx),\n version: shortUIntConst(1, true),\n oracleId: address(Encoding.OracleAddress),\n nonce: nonce('oracleId'),\n queryId: encoded(Encoding.OracleQueryId),\n response: string,\n responseTtlType: withDefault(ORACLE_TTL_TYPES.delta, enumeration(ORACLE_TTL_TYPES)),\n responseTtlValue: withDefault(10, shortUInt),\n fee,\n ttl,\n },\n {\n tag: shortUIntConst(Tag.ChannelCreateTx),\n version: shortUIntConst(2, true),\n initiator: address(Encoding.AccountAddress),\n initiatorAmount: uInt,\n responder: address(Encoding.AccountAddress),\n responderAmount: uInt,\n channelReserve: uInt,\n lockPeriod: uInt,\n ttl,\n fee,\n initiatorDelegateIds: array(address(...idTagToEncoding)),\n responderDelegateIds: array(address(...idTagToEncoding)),\n stateHash: encoded(Encoding.State),\n nonce: nonce('initiator'),\n },\n {\n tag: shortUIntConst(Tag.ChannelCloseMutualTx),\n version: shortUIntConst(1, true),\n channelId: address(Encoding.Channel),\n fromId: address(Encoding.AccountAddress),\n initiatorAmountFinal: uInt,\n responderAmountFinal: uInt,\n ttl,\n fee,\n nonce: nonce('fromId'),\n },\n {\n tag: shortUIntConst(Tag.ChannelCloseSoloTx),\n version: shortUIntConst(1, true),\n channelId: address(Encoding.Channel),\n fromId: address(Encoding.AccountAddress),\n payload: encoded(Encoding.Transaction),\n poi: entryTreesPoi,\n ttl,\n fee,\n nonce: nonce('fromId'),\n },\n {\n tag: shortUIntConst(Tag.ChannelSlashTx),\n version: shortUIntConst(1, true),\n channelId: address(Encoding.Channel),\n fromId: address(Encoding.AccountAddress),\n payload: encoded(Encoding.Transaction),\n poi: entryTreesPoi,\n ttl,\n fee,\n nonce: nonce('fromId'),\n },\n {\n tag: shortUIntConst(Tag.ChannelDepositTx),\n version: shortUIntConst(1, true),\n channelId: address(Encoding.Channel),\n fromId: address(Encoding.AccountAddress),\n amount: uInt,\n ttl,\n fee,\n stateHash: encoded(Encoding.State),\n round: shortUInt,\n nonce: nonce('fromId'),\n },\n {\n tag: shortUIntConst(Tag.ChannelWithdrawTx),\n version: shortUIntConst(1, true),\n channelId: address(Encoding.Channel),\n toId: address(Encoding.AccountAddress),\n amount: uInt,\n ttl,\n fee,\n stateHash: encoded(Encoding.State),\n round: shortUInt,\n nonce: nonce('fromId'),\n },\n {\n tag: shortUIntConst(Tag.ChannelSettleTx),\n version: shortUIntConst(1, true),\n channelId: address(Encoding.Channel),\n fromId: address(Encoding.AccountAddress),\n initiatorAmountFinal: uInt,\n responderAmountFinal: uInt,\n ttl,\n fee,\n nonce: nonce('fromId'),\n },\n {\n tag: shortUIntConst(Tag.ChannelForceProgressTx),\n version: shortUIntConst(1, true),\n channelId: address(Encoding.Channel),\n fromId: address(Encoding.AccountAddress),\n payload: encoded(Encoding.Transaction),\n round: shortUInt,\n update: encoded(Encoding.ContractBytearray),\n stateHash: encoded(Encoding.State),\n offChainTrees: encoded(Encoding.StateTrees),\n ttl,\n fee,\n nonce: nonce('fromId'),\n },\n {\n tag: shortUIntConst(Tag.ChannelOffChainTx),\n version: shortUIntConst(2, true),\n channelId: address(Encoding.Channel),\n round: shortUInt,\n stateHash: encoded(Encoding.State),\n },\n {\n tag: shortUIntConst(Tag.ChannelSnapshotSoloTx),\n version: shortUIntConst(1, true),\n channelId: address(Encoding.Channel),\n fromId: address(Encoding.AccountAddress),\n payload: encoded(Encoding.Transaction),\n ttl,\n fee,\n nonce: nonce('fromId'),\n },\n {\n tag: shortUIntConst(Tag.GaAttachTx),\n version: shortUIntConst(1, true),\n ownerId: address(Encoding.AccountAddress),\n nonce: nonce('ownerId'),\n code: encoded(Encoding.ContractBytearray),\n authFun: raw,\n ctVersion,\n fee,\n ttl,\n gasLimit,\n gasPrice,\n callData: encoded(Encoding.ContractBytearray),\n },\n {\n tag: shortUIntConst(Tag.GaMetaTx),\n version: shortUIntConst(2, true),\n gaId: address(Encoding.AccountAddress),\n authData: encoded(Encoding.ContractBytearray),\n abiVersion,\n fee,\n gasLimit,\n gasPrice,\n tx: transactionSignedTx,\n },\n {\n tag: shortUIntConst(Tag.PayingForTx),\n version: shortUIntConst(1, true),\n payerId: address(Encoding.AccountAddress),\n nonce: nonce('payerId'),\n fee,\n tx: transactionSignedTx,\n },\n] as const;\n\ntype TxSchema = SchemaTypes<typeof txSchema>;\nexport type TxParams = TxSchema['TxParams'];\nexport type TxParamsAsync = TxSchema['TxParamsAsync'];\nexport type TxUnpacked = TxSchema['TxUnpacked'];\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"schema.js","names":["Tag","abiVersion","address","idTagToEncoding","array","coinAmount","ctVersion","encoded","entry","enumeration","fee","gasLimit","gasPrice","name","nameFee","nameId","nonce","pointers","queryFee","raw","shortUInt","shortUIntConst","string","transaction","ttl","uInt","withDefault","withFormatting","serializeAsIsParam","Encoding","ArgumentError","EntryTag","ORACLE_TTL_TYPES","transactionAny","transactionSignedTx","SignedTx","entryTreesPoi","TreesPoi","clientTtl","nameTtl","value","params","NAME_TTL","txSchema","tag","version","signatures","encodedTx","SpendTx","senderId","AccountAddress","recipientId","ContractAddress","Name","amount","payload","Bytearray","NamePreclaimTx","accountId","commitmentId","Commitment","NameClaimTx","nameSalt","NameUpdateTx","NameTransferTx","NameRevokeTx","ContractCreateTx","ownerId","code","ContractBytearray","deposit","callData","ContractCallTx","callerId","contractId","OracleRegisterTx","queryFormat","responseFormat","oracleTtlType","delta","oracleTtlValue","OracleExtendTx","oracleId","OracleAddress","OracleQueryTx","query","queryTtlType","queryTtlValue","responseTtlType","responseTtlValue","OracleRespondTx","queryId","OracleQueryId","response","ChannelCreateTx","initiator","initiatorAmount","responder","responderAmount","channelReserve","lockPeriod","initiatorDelegateIds","responderDelegateIds","stateHash","State","ChannelCloseMutualTx","channelId","Channel","fromId","initiatorAmountFinal","responderAmountFinal","ChannelCloseSoloTx","Transaction","poi","ChannelSlashTx","ChannelDepositTx","round","ChannelWithdrawTx","toId","ChannelSettleTx","ChannelForceProgressTx","update","offChainTrees","StateTrees","ChannelOffChainTx","ChannelSnapshotSoloTx","GaAttachTx","authFun","GaMetaTx","gaId","authData","tx","PayingForTx","payerId"],"sources":["../../../src/tx/builder/schema.ts"],"sourcesContent":["/**\n * Transaction Schema for TxBuilder\n */\n// # RLP version number\n// # https://github.com/aeternity/protocol/blob/master/serializations.md#binary-serialization\n\nimport { Tag } from './constants.js';\nimport SchemaTypes from './SchemaTypes.js';\nimport abiVersion from './field-types/abi-version.js';\nimport address, { idTagToEncoding } from './field-types/address.js';\nimport array from './field-types/array.js';\nimport coinAmount from './field-types/coin-amount.js';\nimport ctVersion from './field-types/ct-version.js';\nimport encoded from './field-types/encoded.js';\nimport entry from './field-types/entry.js';\nimport enumeration from './field-types/enumeration.js';\nimport fee from './field-types/fee.js';\nimport gasLimit from './field-types/gas-limit.js';\nimport gasPrice from './field-types/gas-price.js';\nimport name from './field-types/name.js';\nimport nameFee from './field-types/name-fee.js';\nimport nameId from './field-types/name-id.js';\nimport nonce from './field-types/nonce.js';\nimport pointers from './field-types/pointers.js';\nimport queryFee from './field-types/query-fee.js';\nimport raw from './field-types/raw.js';\nimport shortUInt from './field-types/short-u-int.js';\nimport shortUIntConst from './field-types/short-u-int-const.js';\nimport string from './field-types/string.js';\nimport transaction from './field-types/transaction.js';\nimport ttl from './field-types/ttl.js';\nimport uInt from './field-types/u-int.js';\nimport withDefault from './field-types/with-default.js';\nimport withFormatting from './field-types/with-formatting.js';\nimport { serializeAsIsParam, SerializeAsIsParams } from './field-types/interface.js';\nimport { Encoded, Encoding } from '../../utils/encoder.js';\nimport { ArgumentError } from '../../utils/errors.js';\nimport { EntryTag } from './entry/constants.js';\nimport { EntParams, EntUnpacked } from './entry/schema.generated.js';\n\n/**\n * @category oracle\n */\nexport enum ORACLE_TTL_TYPES {\n delta = 0,\n block = 1,\n}\n\n// TODO: figure out how to omit overriding types of recursive fields\ninterface TransactionAny {\n serialize: (value: TxParams | Uint8Array | Encoded.Transaction) => Buffer;\n deserialize: (value: Buffer) => TxUnpacked;\n recursiveType: true;\n}\n\nconst transactionAny = transaction() as unknown as TransactionAny;\n\ninterface TransactionSignedTx {\n serialize: (\n value: (TxParams & { tag: Tag.SignedTx }) | Uint8Array | Encoded.Transaction,\n ) => Buffer;\n deserialize: (value: Buffer) => TxUnpacked & { tag: Tag.SignedTx };\n recursiveType: true;\n}\n\nconst transactionSignedTx = transaction(Tag.SignedTx) as unknown as TransactionSignedTx;\n\ninterface EntryTreesPoi {\n serialize: (\n value: (EntParams & { tag: EntryTag.TreesPoi }) | Uint8Array | Encoded.Transaction,\n ) => Buffer;\n deserialize: (value: Buffer) => EntUnpacked & { tag: EntryTag.TreesPoi };\n recursiveType: true;\n}\n\nconst entryTreesPoi = entry(EntryTag.TreesPoi) as unknown as EntryTreesPoi;\n\nconst clientTtl = withDefault(60 * 60, shortUInt);\n// https://github.com/aeternity/protocol/blob/fd17982/AENS.md#update\n/**\n * Name ttl represented in number of blocks (Max value is 50000 blocks)\n */\nconst nameTtl = withFormatting((value, params: SerializeAsIsParams) => {\n const NAME_TTL = 180000;\n value ??= NAME_TTL;\n // SDK-release limit, node reports it as `nameClaimMaxExpiration` — skipped on re-serialization,\n // see `serializeAsIsParam`\n if (params[serializeAsIsParam] === true) return value;\n if (value >= 1 && value <= NAME_TTL) return value;\n throw new ArgumentError('nameTtl', `a number between 1 and ${NAME_TTL} blocks`, value);\n}, shortUInt);\n\n/**\n * @see {@link https://github.com/aeternity/protocol/blob/c007deeac4a01e401238412801ac7084ac72d60e/serializations.md#accounts-version-1-basic-accounts}\n */\nexport const txSchema = [\n {\n tag: shortUIntConst(Tag.SignedTx),\n version: shortUIntConst(1, true),\n signatures: array(raw), // TODO: use sg_ (Encoding.Signature) instead\n encodedTx: transactionAny,\n },\n {\n tag: shortUIntConst(Tag.SpendTx),\n version: shortUIntConst(1, true),\n senderId: address(Encoding.AccountAddress),\n // TODO: accept also an AENS name\n recipientId: address(Encoding.AccountAddress, Encoding.ContractAddress, Encoding.Name),\n amount: coinAmount,\n fee,\n ttl,\n nonce: nonce('senderId'),\n payload: encoded(Encoding.Bytearray, true),\n },\n {\n tag: shortUIntConst(Tag.NamePreclaimTx),\n version: shortUIntConst(1, true),\n accountId: address(Encoding.AccountAddress),\n nonce: nonce('accountId'),\n commitmentId: address(Encoding.Commitment),\n fee,\n ttl,\n },\n {\n tag: shortUIntConst(Tag.NameClaimTx),\n version: shortUIntConst(2, true),\n accountId: address(Encoding.AccountAddress),\n nonce: nonce('accountId'),\n name,\n nameSalt: withDefault(0, uInt),\n nameFee,\n fee,\n ttl,\n },\n {\n tag: shortUIntConst(Tag.NameUpdateTx),\n version: shortUIntConst(1, true),\n accountId: address(Encoding.AccountAddress),\n nonce: nonce('accountId'),\n nameId,\n nameTtl,\n pointers: pointers(false),\n clientTtl,\n fee,\n ttl,\n },\n {\n tag: shortUIntConst(Tag.NameUpdateTx),\n version: shortUIntConst(2),\n accountId: address(Encoding.AccountAddress),\n nonce: nonce('accountId'),\n nameId,\n nameTtl,\n pointers: pointers(true),\n clientTtl,\n fee,\n ttl,\n },\n {\n tag: shortUIntConst(Tag.NameTransferTx),\n version: shortUIntConst(1, true),\n accountId: address(Encoding.AccountAddress),\n nonce: nonce('accountId'),\n nameId,\n // TODO: accept also an AENS name\n recipientId: address(Encoding.AccountAddress, Encoding.Name),\n fee,\n ttl,\n },\n {\n tag: shortUIntConst(Tag.NameRevokeTx),\n version: shortUIntConst(1, true),\n accountId: address(Encoding.AccountAddress),\n nonce: nonce('accountId'),\n nameId,\n fee,\n ttl,\n },\n {\n tag: shortUIntConst(Tag.ContractCreateTx),\n version: shortUIntConst(1, true),\n ownerId: address(Encoding.AccountAddress),\n nonce: nonce('ownerId'),\n code: encoded(Encoding.ContractBytearray),\n ctVersion,\n fee,\n ttl,\n deposit: withFormatting((value = 0) => {\n if (+value === 0) return value;\n throw new ArgumentError('deposit', 'equal 0 (because is not refundable)', value);\n }, coinAmount),\n amount: coinAmount,\n gasLimit,\n gasPrice,\n callData: encoded(Encoding.ContractBytearray),\n },\n {\n tag: shortUIntConst(Tag.ContractCallTx),\n version: shortUIntConst(1, true),\n callerId: address(Encoding.AccountAddress),\n nonce: nonce('callerId'),\n // TODO: accept also an AENS name\n contractId: address(Encoding.ContractAddress, Encoding.Name),\n abiVersion,\n fee,\n ttl,\n amount: coinAmount,\n gasLimit,\n gasPrice,\n callData: encoded(Encoding.ContractBytearray),\n },\n {\n tag: shortUIntConst(Tag.OracleRegisterTx),\n version: shortUIntConst(1, true),\n accountId: address(Encoding.AccountAddress),\n nonce: nonce('accountId'),\n queryFormat: string,\n responseFormat: string,\n queryFee: coinAmount,\n oracleTtlType: withDefault(ORACLE_TTL_TYPES.delta, enumeration(ORACLE_TTL_TYPES)),\n oracleTtlValue: withDefault(500, shortUInt),\n fee,\n ttl,\n abiVersion,\n },\n {\n tag: shortUIntConst(Tag.OracleExtendTx),\n version: shortUIntConst(1, true),\n // TODO: accept also an AENS name\n oracleId: address(Encoding.OracleAddress, Encoding.Name),\n nonce: nonce('oracleId'),\n oracleTtlType: withDefault(ORACLE_TTL_TYPES.delta, enumeration(ORACLE_TTL_TYPES)),\n oracleTtlValue: withDefault(500, shortUInt),\n fee,\n ttl,\n },\n {\n tag: shortUIntConst(Tag.OracleQueryTx),\n version: shortUIntConst(1, true),\n senderId: address(Encoding.AccountAddress),\n nonce: nonce('senderId'),\n // TODO: accept also an AENS name\n oracleId: address(Encoding.OracleAddress, Encoding.Name),\n query: string,\n queryFee,\n queryTtlType: withDefault(ORACLE_TTL_TYPES.delta, enumeration(ORACLE_TTL_TYPES)),\n queryTtlValue: withDefault(10, shortUInt),\n responseTtlType: withDefault(ORACLE_TTL_TYPES.delta, enumeration(ORACLE_TTL_TYPES)),\n responseTtlValue: withDefault(10, shortUInt),\n fee,\n ttl,\n },\n {\n tag: shortUIntConst(Tag.OracleRespondTx),\n version: shortUIntConst(1, true),\n oracleId: address(Encoding.OracleAddress),\n nonce: nonce('oracleId'),\n queryId: encoded(Encoding.OracleQueryId),\n response: string,\n responseTtlType: withDefault(ORACLE_TTL_TYPES.delta, enumeration(ORACLE_TTL_TYPES)),\n responseTtlValue: withDefault(10, shortUInt),\n fee,\n ttl,\n },\n {\n tag: shortUIntConst(Tag.ChannelCreateTx),\n version: shortUIntConst(2, true),\n initiator: address(Encoding.AccountAddress),\n initiatorAmount: uInt,\n responder: address(Encoding.AccountAddress),\n responderAmount: uInt,\n channelReserve: uInt,\n lockPeriod: uInt,\n ttl,\n fee,\n initiatorDelegateIds: array(address(...idTagToEncoding)),\n responderDelegateIds: array(address(...idTagToEncoding)),\n stateHash: encoded(Encoding.State),\n nonce: nonce('initiator'),\n },\n {\n tag: shortUIntConst(Tag.ChannelCloseMutualTx),\n version: shortUIntConst(1, true),\n channelId: address(Encoding.Channel),\n fromId: address(Encoding.AccountAddress),\n initiatorAmountFinal: uInt,\n responderAmountFinal: uInt,\n ttl,\n fee,\n nonce: nonce('fromId'),\n },\n {\n tag: shortUIntConst(Tag.ChannelCloseSoloTx),\n version: shortUIntConst(1, true),\n channelId: address(Encoding.Channel),\n fromId: address(Encoding.AccountAddress),\n payload: encoded(Encoding.Transaction),\n poi: entryTreesPoi,\n ttl,\n fee,\n nonce: nonce('fromId'),\n },\n {\n tag: shortUIntConst(Tag.ChannelSlashTx),\n version: shortUIntConst(1, true),\n channelId: address(Encoding.Channel),\n fromId: address(Encoding.AccountAddress),\n payload: encoded(Encoding.Transaction),\n poi: entryTreesPoi,\n ttl,\n fee,\n nonce: nonce('fromId'),\n },\n {\n tag: shortUIntConst(Tag.ChannelDepositTx),\n version: shortUIntConst(1, true),\n channelId: address(Encoding.Channel),\n fromId: address(Encoding.AccountAddress),\n amount: uInt,\n ttl,\n fee,\n stateHash: encoded(Encoding.State),\n round: shortUInt,\n nonce: nonce('fromId'),\n },\n {\n tag: shortUIntConst(Tag.ChannelWithdrawTx),\n version: shortUIntConst(1, true),\n channelId: address(Encoding.Channel),\n toId: address(Encoding.AccountAddress),\n amount: uInt,\n ttl,\n fee,\n stateHash: encoded(Encoding.State),\n round: shortUInt,\n nonce: nonce('fromId'),\n },\n {\n tag: shortUIntConst(Tag.ChannelSettleTx),\n version: shortUIntConst(1, true),\n channelId: address(Encoding.Channel),\n fromId: address(Encoding.AccountAddress),\n initiatorAmountFinal: uInt,\n responderAmountFinal: uInt,\n ttl,\n fee,\n nonce: nonce('fromId'),\n },\n {\n tag: shortUIntConst(Tag.ChannelForceProgressTx),\n version: shortUIntConst(1, true),\n channelId: address(Encoding.Channel),\n fromId: address(Encoding.AccountAddress),\n payload: encoded(Encoding.Transaction),\n round: shortUInt,\n update: encoded(Encoding.ContractBytearray),\n stateHash: encoded(Encoding.State),\n offChainTrees: encoded(Encoding.StateTrees),\n ttl,\n fee,\n nonce: nonce('fromId'),\n },\n {\n tag: shortUIntConst(Tag.ChannelOffChainTx),\n version: shortUIntConst(2, true),\n channelId: address(Encoding.Channel),\n round: shortUInt,\n stateHash: encoded(Encoding.State),\n },\n {\n tag: shortUIntConst(Tag.ChannelSnapshotSoloTx),\n version: shortUIntConst(1, true),\n channelId: address(Encoding.Channel),\n fromId: address(Encoding.AccountAddress),\n payload: encoded(Encoding.Transaction),\n ttl,\n fee,\n nonce: nonce('fromId'),\n },\n {\n tag: shortUIntConst(Tag.GaAttachTx),\n version: shortUIntConst(1, true),\n ownerId: address(Encoding.AccountAddress),\n nonce: nonce('ownerId'),\n code: encoded(Encoding.ContractBytearray),\n authFun: raw,\n ctVersion,\n fee,\n ttl,\n gasLimit,\n gasPrice,\n callData: encoded(Encoding.ContractBytearray),\n },\n {\n tag: shortUIntConst(Tag.GaMetaTx),\n version: shortUIntConst(2, true),\n gaId: address(Encoding.AccountAddress),\n authData: encoded(Encoding.ContractBytearray),\n abiVersion,\n fee,\n gasLimit,\n gasPrice,\n tx: transactionSignedTx,\n },\n {\n tag: shortUIntConst(Tag.PayingForTx),\n version: shortUIntConst(1, true),\n payerId: address(Encoding.AccountAddress),\n nonce: nonce('payerId'),\n fee,\n tx: transactionSignedTx,\n },\n] as const;\n\ntype TxSchema = SchemaTypes<typeof txSchema>;\nexport type TxParams = TxSchema['TxParams'];\nexport type TxParamsAsync = TxSchema['TxParamsAsync'];\nexport type TxUnpacked = TxSchema['TxUnpacked'];\n"],"mappings":"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","ignoreList":[]}
@@ -1,4 +1,4 @@
1
- import { buildTx, buildTxHash, unpackTx } from './builder/index.js';
1
+ import { buildTxHash, rebuildUnpackedTx, unpackTx } from './builder/index.js';
2
2
  import { Tag } from './builder/constants.js';
3
3
  import { verifySignature } from '../utils/crypto.js';
4
4
  import { getBufferToSign } from '../account/Memory.js';
@@ -69,7 +69,7 @@ export function getExecutionCost(transaction, {
69
69
  res += BigInt(params.gasPrice) * BigInt(gasUsed !== null && gasUsed !== void 0 ? gasUsed : params.gasLimit);
70
70
  }
71
71
  if (params.tag === Tag.GaMetaTx || params.tag === Tag.PayingForTx) {
72
- res += getExecutionCost(buildTx(params.tx.encodedTx), params.tag === Tag.PayingForTx ? {
72
+ res += getExecutionCost(rebuildUnpackedTx(params.tx.encodedTx), params.tag === Tag.PayingForTx ? {
73
73
  innerTx: 'fee-payer'
74
74
  } : {});
75
75
  }
@@ -86,13 +86,13 @@ export function getExecutionCost(transaction, {
86
86
  export function getExecutionCostBySignedTx(transaction, networkId, options) {
87
87
  const params = unpackTx(transaction, Tag.SignedTx);
88
88
  if (params.encodedTx.tag === Tag.GaMetaTx) {
89
- return getExecutionCost(buildTx(params.encodedTx), options);
89
+ return getExecutionCost(rebuildUnpackedTx(params.encodedTx), options);
90
90
  }
91
- const tx = buildTx(params.encodedTx);
91
+ const tx = rebuildUnpackedTx(params.encodedTx);
92
92
  const address = getTransactionSignerAddress(tx);
93
93
  const [isInnerTx, isNotInnerTx] = [true, false].map(f => verifySignature(getBufferToSign(tx, networkId, f), params.signatures[0], address));
94
94
  if (!isInnerTx && !isNotInnerTx) throw new TransactionError("Can't verify signature");
95
- return getExecutionCost(buildTx(params.encodedTx), {
95
+ return getExecutionCost(rebuildUnpackedTx(params.encodedTx), {
96
96
  ...(isInnerTx && {
97
97
  innerTx: 'freeloader'
98
98
  }),
@@ -1 +1 @@
1
- {"version":3,"file":"execution-cost.js","names":["buildTx","buildTxHash","unpackTx","Tag","verifySignature","getBufferToSign","IllegalArgumentError","InternalError","TransactionError","getTransactionSignerAddress","getExecutionCost","transaction","innerTx","gasUsed","queryFee","isInitiator","params","tag","SignedTx","res","BigInt","fee","NameClaimTx","nameFee","OracleQueryTx","OracleRespondTx","ChannelSettleTx","initiatorAmountFinal","responderAmountFinal","SpendTx","ContractCreateTx","ContractCallTx","ChannelDepositTx","amount","deposit","GaAttachTx","GaMetaTx","gasPrice","gasLimit","PayingForTx","tx","encodedTx","getExecutionCostBySignedTx","networkId","options","address","isInnerTx","isNotInnerTx","map","f","signatures","getExecutionCostUsingNode","node","isMined","isSignedTx","txHash","includes","callInfo","gaInfo","getTransactionInfoByHash","combinedInfo","getOracleByPubkey","oracleId","toString","initiatorId","getChannelByPubkey","channelId","fromId","getNetworkId"],"sources":["../../src/tx/execution-cost.ts"],"sourcesContent":["import { Encoded } from '../utils/encoder.js';\nimport { buildTx, buildTxHash, unpackTx } from './builder/index.js';\nimport { Tag } from './builder/constants.js';\nimport { verifySignature } from '../utils/crypto.js';\nimport { getBufferToSign } from '../account/Memory.js';\nimport { IllegalArgumentError, InternalError, TransactionError } from '../utils/errors.js';\nimport Node from '../Node.js';\nimport getTransactionSignerAddress from './transaction-signer.js';\n\n/**\n * Calculates the cost of transaction execution\n * Provides an upper cost of contract-call-related transactions because of `gasLimit`.\n * Also assumes that oracle query fee is 0 unless it is provided in options.\n *\n * The idea is that if you need to show transaction details with some accuracy you can define\n * expense fields that you want to show separately. And to show `getExecutionCost` result as a fee,\n * subtracting all fields shown separately.\n *\n * @example\n * ```vue\n * <template>\n * Amount: {{ txUnpacked.amount }}\n * Name fee: {{ txUnpacked.nameFee }}\n * Other fees: {{ getExecutionCost(txEncoded) - txUnpacked.amount - txUnpacked.nameFee }}\n * </template>\n * ```\n *\n * Doing this way you won't worry to show wrong fee for a transaction you may not support. Because\n * the SDK calculates the overall price of any transaction on its side.\n *\n * @param transaction - Transaction to calculate the cost of\n * @param options - Options\n * @param options.innerTx - Should be provided if transaction wrapped with Tag.PayingForTx\n * @param options.gasUsed - Amount of gas actually used to make calculation more accurate\n * @param options.queryFee - Oracle query fee\n * @param options.isInitiator - Is transaction signer an initiator of state channel\n * @category utils\n */\nexport function getExecutionCost(\n transaction: Encoded.Transaction,\n {\n innerTx,\n gasUsed,\n queryFee,\n isInitiator,\n }: {\n innerTx?: 'fee-payer' | 'freeloader';\n gasUsed?: number;\n queryFee?: string;\n isInitiator?: boolean;\n } = {},\n): bigint {\n const params = unpackTx(transaction);\n if (params.tag === Tag.SignedTx) {\n throw new IllegalArgumentError(\n \"Transaction shouldn't be a SignedTx, use `getExecutionCostBySignedTx` instead\",\n );\n }\n\n let res = 0n;\n if ('fee' in params && innerTx !== 'freeloader') {\n res += BigInt(params.fee);\n }\n if (params.tag === Tag.NameClaimTx) {\n res += BigInt(params.nameFee);\n }\n if (params.tag === Tag.OracleQueryTx) {\n res += BigInt(params.queryFee);\n }\n if (params.tag === Tag.OracleRespondTx) {\n res -= BigInt(queryFee ?? 0);\n }\n if (params.tag === Tag.ChannelSettleTx) {\n if (isInitiator === true) res -= BigInt(params.initiatorAmountFinal);\n if (isInitiator === false) res -= BigInt(params.responderAmountFinal);\n }\n if (\n (params.tag === Tag.SpendTx ||\n params.tag === Tag.ContractCreateTx ||\n params.tag === Tag.ContractCallTx ||\n params.tag === Tag.ChannelDepositTx) &&\n innerTx !== 'fee-payer'\n ) {\n res += BigInt(params.amount);\n }\n if (params.tag === Tag.ContractCreateTx) res += BigInt(params.deposit);\n if (\n (params.tag === Tag.ContractCreateTx ||\n params.tag === Tag.ContractCallTx ||\n params.tag === Tag.GaAttachTx ||\n params.tag === Tag.GaMetaTx) &&\n innerTx !== 'freeloader'\n ) {\n res += BigInt(params.gasPrice) * BigInt(gasUsed ?? params.gasLimit);\n }\n if (params.tag === Tag.GaMetaTx || params.tag === Tag.PayingForTx) {\n res += getExecutionCost(\n buildTx(params.tx.encodedTx),\n params.tag === Tag.PayingForTx ? { innerTx: 'fee-payer' } : {},\n );\n }\n return res;\n}\n\n/**\n * Calculates the cost of signed transaction execution\n * @param transaction - Transaction to calculate the cost of\n * @param networkId - Network id used to sign the transaction\n * @param options - Options\n * @category utils\n */\nexport function getExecutionCostBySignedTx(\n transaction: Encoded.Transaction,\n networkId: string,\n options?: Omit<Parameters<typeof getExecutionCost>[1], 'innerTx'>,\n): bigint {\n const params = unpackTx(transaction, Tag.SignedTx);\n if (params.encodedTx.tag === Tag.GaMetaTx) {\n return getExecutionCost(buildTx(params.encodedTx), options);\n }\n\n const tx = buildTx(params.encodedTx);\n const address = getTransactionSignerAddress(tx);\n const [isInnerTx, isNotInnerTx] = [true, false].map((f) =>\n verifySignature(getBufferToSign(tx, networkId, f), params.signatures[0], address),\n );\n if (!isInnerTx && !isNotInnerTx) throw new TransactionError(\"Can't verify signature\");\n return getExecutionCost(buildTx(params.encodedTx), {\n ...(isInnerTx && { innerTx: 'freeloader' }),\n ...options,\n });\n}\n\n/**\n * Calculates the cost of signed and not signed transaction execution using node\n * @param transaction - Transaction to calculate the cost of\n * @param node - Node to use\n * @param options - Options\n * @param options.isMined - Is transaction already mined or not\n * @category utils\n */\nexport async function getExecutionCostUsingNode(\n transaction: Encoded.Transaction,\n node: Node,\n { isMined, ...options }: { isMined?: boolean } & Parameters<typeof getExecutionCost>[1] = {},\n): Promise<bigint> {\n let params = unpackTx(transaction);\n const isSignedTx = params.tag === Tag.SignedTx;\n const txHash = isSignedTx && isMined === true && buildTxHash(transaction);\n if (params.tag === Tag.SignedTx) params = params.encodedTx;\n\n // TODO: set gasUsed for PayingForTx after solving https://github.com/aeternity/aeternity/issues/4087\n if (\n options.gasUsed == null &&\n txHash !== false &&\n [Tag.ContractCreateTx, Tag.ContractCallTx, Tag.GaAttachTx, Tag.GaMetaTx].includes(params.tag)\n ) {\n const { callInfo, gaInfo } = await node.getTransactionInfoByHash(txHash);\n const combinedInfo = callInfo ?? gaInfo;\n if (combinedInfo == null) {\n throw new InternalError(`callInfo and gaInfo is not available for transaction ${txHash}`);\n }\n options.gasUsed = combinedInfo.gasUsed;\n }\n\n if (options.queryFee == null && Tag.OracleRespondTx === params.tag) {\n options.queryFee = (await node.getOracleByPubkey(params.oracleId)).queryFee.toString();\n }\n\n if (options.isInitiator == null && Tag.ChannelSettleTx === params.tag && isMined !== true) {\n const { initiatorId } = await node.getChannelByPubkey(params.channelId);\n options.isInitiator = params.fromId === initiatorId;\n }\n\n return isSignedTx\n ? getExecutionCostBySignedTx(transaction, await node.getNetworkId(), options)\n : getExecutionCost(transaction, options);\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"execution-cost.js","names":["buildTxHash","rebuildUnpackedTx","unpackTx","Tag","verifySignature","getBufferToSign","IllegalArgumentError","InternalError","TransactionError","getTransactionSignerAddress","getExecutionCost","transaction","innerTx","gasUsed","queryFee","isInitiator","params","tag","SignedTx","res","BigInt","fee","NameClaimTx","nameFee","OracleQueryTx","OracleRespondTx","ChannelSettleTx","initiatorAmountFinal","responderAmountFinal","SpendTx","ContractCreateTx","ContractCallTx","ChannelDepositTx","amount","deposit","GaAttachTx","GaMetaTx","gasPrice","gasLimit","PayingForTx","tx","encodedTx","getExecutionCostBySignedTx","networkId","options","address","isInnerTx","isNotInnerTx","map","f","signatures","getExecutionCostUsingNode","node","isMined","isSignedTx","txHash","includes","callInfo","gaInfo","getTransactionInfoByHash","combinedInfo","getOracleByPubkey","oracleId","toString","initiatorId","getChannelByPubkey","channelId","fromId","getNetworkId"],"sources":["../../src/tx/execution-cost.ts"],"sourcesContent":["import { Encoded } from '../utils/encoder.js';\nimport { buildTxHash, rebuildUnpackedTx, unpackTx } from './builder/index.js';\nimport { Tag } from './builder/constants.js';\nimport { verifySignature } from '../utils/crypto.js';\nimport { getBufferToSign } from '../account/Memory.js';\nimport { IllegalArgumentError, InternalError, TransactionError } from '../utils/errors.js';\nimport Node from '../Node.js';\nimport getTransactionSignerAddress from './transaction-signer.js';\n\n/**\n * Calculates the cost of transaction execution\n * Provides an upper cost of contract-call-related transactions because of `gasLimit`.\n * Also assumes that oracle query fee is 0 unless it is provided in options.\n *\n * The idea is that if you need to show transaction details with some accuracy you can define\n * expense fields that you want to show separately. And to show `getExecutionCost` result as a fee,\n * subtracting all fields shown separately.\n *\n * @example\n * ```vue\n * <template>\n * Amount: {{ txUnpacked.amount }}\n * Name fee: {{ txUnpacked.nameFee }}\n * Other fees: {{ getExecutionCost(txEncoded) - txUnpacked.amount - txUnpacked.nameFee }}\n * </template>\n * ```\n *\n * Doing this way you won't worry to show wrong fee for a transaction you may not support. Because\n * the SDK calculates the overall price of any transaction on its side.\n *\n * @param transaction - Transaction to calculate the cost of\n * @param options - Options\n * @param options.innerTx - Should be provided if transaction wrapped with Tag.PayingForTx\n * @param options.gasUsed - Amount of gas actually used to make calculation more accurate\n * @param options.queryFee - Oracle query fee\n * @param options.isInitiator - Is transaction signer an initiator of state channel\n * @category utils\n */\nexport function getExecutionCost(\n transaction: Encoded.Transaction,\n {\n innerTx,\n gasUsed,\n queryFee,\n isInitiator,\n }: {\n innerTx?: 'fee-payer' | 'freeloader';\n gasUsed?: number;\n queryFee?: string;\n isInitiator?: boolean;\n } = {},\n): bigint {\n const params = unpackTx(transaction);\n if (params.tag === Tag.SignedTx) {\n throw new IllegalArgumentError(\n \"Transaction shouldn't be a SignedTx, use `getExecutionCostBySignedTx` instead\",\n );\n }\n\n let res = 0n;\n if ('fee' in params && innerTx !== 'freeloader') {\n res += BigInt(params.fee);\n }\n if (params.tag === Tag.NameClaimTx) {\n res += BigInt(params.nameFee);\n }\n if (params.tag === Tag.OracleQueryTx) {\n res += BigInt(params.queryFee);\n }\n if (params.tag === Tag.OracleRespondTx) {\n res -= BigInt(queryFee ?? 0);\n }\n if (params.tag === Tag.ChannelSettleTx) {\n if (isInitiator === true) res -= BigInt(params.initiatorAmountFinal);\n if (isInitiator === false) res -= BigInt(params.responderAmountFinal);\n }\n if (\n (params.tag === Tag.SpendTx ||\n params.tag === Tag.ContractCreateTx ||\n params.tag === Tag.ContractCallTx ||\n params.tag === Tag.ChannelDepositTx) &&\n innerTx !== 'fee-payer'\n ) {\n res += BigInt(params.amount);\n }\n if (params.tag === Tag.ContractCreateTx) res += BigInt(params.deposit);\n if (\n (params.tag === Tag.ContractCreateTx ||\n params.tag === Tag.ContractCallTx ||\n params.tag === Tag.GaAttachTx ||\n params.tag === Tag.GaMetaTx) &&\n innerTx !== 'freeloader'\n ) {\n res += BigInt(params.gasPrice) * BigInt(gasUsed ?? params.gasLimit);\n }\n if (params.tag === Tag.GaMetaTx || params.tag === Tag.PayingForTx) {\n res += getExecutionCost(\n rebuildUnpackedTx(params.tx.encodedTx),\n params.tag === Tag.PayingForTx ? { innerTx: 'fee-payer' } : {},\n );\n }\n return res;\n}\n\n/**\n * Calculates the cost of signed transaction execution\n * @param transaction - Transaction to calculate the cost of\n * @param networkId - Network id used to sign the transaction\n * @param options - Options\n * @category utils\n */\nexport function getExecutionCostBySignedTx(\n transaction: Encoded.Transaction,\n networkId: string,\n options?: Omit<Parameters<typeof getExecutionCost>[1], 'innerTx'>,\n): bigint {\n const params = unpackTx(transaction, Tag.SignedTx);\n if (params.encodedTx.tag === Tag.GaMetaTx) {\n return getExecutionCost(rebuildUnpackedTx(params.encodedTx), options);\n }\n\n const tx = rebuildUnpackedTx(params.encodedTx);\n const address = getTransactionSignerAddress(tx);\n const [isInnerTx, isNotInnerTx] = [true, false].map((f) =>\n verifySignature(getBufferToSign(tx, networkId, f), params.signatures[0], address),\n );\n if (!isInnerTx && !isNotInnerTx) throw new TransactionError(\"Can't verify signature\");\n return getExecutionCost(rebuildUnpackedTx(params.encodedTx), {\n ...(isInnerTx && { innerTx: 'freeloader' }),\n ...options,\n });\n}\n\n/**\n * Calculates the cost of signed and not signed transaction execution using node\n * @param transaction - Transaction to calculate the cost of\n * @param node - Node to use\n * @param options - Options\n * @param options.isMined - Is transaction already mined or not\n * @category utils\n */\nexport async function getExecutionCostUsingNode(\n transaction: Encoded.Transaction,\n node: Node,\n { isMined, ...options }: { isMined?: boolean } & Parameters<typeof getExecutionCost>[1] = {},\n): Promise<bigint> {\n let params = unpackTx(transaction);\n const isSignedTx = params.tag === Tag.SignedTx;\n const txHash = isSignedTx && isMined === true && buildTxHash(transaction);\n if (params.tag === Tag.SignedTx) params = params.encodedTx;\n\n // TODO: set gasUsed for PayingForTx after solving https://github.com/aeternity/aeternity/issues/4087\n if (\n options.gasUsed == null &&\n txHash !== false &&\n [Tag.ContractCreateTx, Tag.ContractCallTx, Tag.GaAttachTx, Tag.GaMetaTx].includes(params.tag)\n ) {\n const { callInfo, gaInfo } = await node.getTransactionInfoByHash(txHash);\n const combinedInfo = callInfo ?? gaInfo;\n if (combinedInfo == null) {\n throw new InternalError(`callInfo and gaInfo is not available for transaction ${txHash}`);\n }\n options.gasUsed = combinedInfo.gasUsed;\n }\n\n if (options.queryFee == null && Tag.OracleRespondTx === params.tag) {\n options.queryFee = (await node.getOracleByPubkey(params.oracleId)).queryFee.toString();\n }\n\n if (options.isInitiator == null && Tag.ChannelSettleTx === params.tag && isMined !== true) {\n const { initiatorId } = await node.getChannelByPubkey(params.channelId);\n options.isInitiator = params.fromId === initiatorId;\n }\n\n return isSignedTx\n ? getExecutionCostBySignedTx(transaction, await node.getNetworkId(), options)\n : getExecutionCost(transaction, options);\n}\n"],"mappings":"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","ignoreList":[]}
@@ -1,4 +1,4 @@
1
- import { buildTx, getSchema, unpackTx } from './builder/index.js';
1
+ import { getSchema, rebuildUnpackedTx, unpackTx } from './builder/index.js';
2
2
  import { Tag } from './builder/constants.js';
3
3
  import { TransactionError, UnexpectedTsError } from '../utils/errors.js';
4
4
 
@@ -11,7 +11,7 @@ export default function getTransactionSignerAddress(transaction) {
11
11
  const params = unpackTx(transaction);
12
12
  switch (params.tag) {
13
13
  case Tag.SignedTx:
14
- return getTransactionSignerAddress(buildTx(params.encodedTx));
14
+ return getTransactionSignerAddress(rebuildUnpackedTx(params.encodedTx));
15
15
  case Tag.GaMetaTx:
16
16
  return params.gaId;
17
17
  default:
@@ -1 +1 @@
1
- {"version":3,"file":"transaction-signer.js","names":["buildTx","getSchema","unpackTx","Tag","TransactionError","UnexpectedTsError","getTransactionSignerAddress","transaction","params","tag","SignedTx","encodedTx","GaMetaTx","gaId","nonce","version","find","name","address","senderKey","replace"],"sources":["../../src/tx/transaction-signer.ts"],"sourcesContent":["import { Encoded } from '../utils/encoder.js';\nimport { buildTx, getSchema, unpackTx } from './builder/index.js';\nimport { Tag } from './builder/constants.js';\nimport { TransactionError, UnexpectedTsError } from '../utils/errors.js';\n\n/**\n * Returns account address that signed a transaction\n * @param transaction - transaction to get a signer of\n * @category utils\n */\nexport default function getTransactionSignerAddress(\n transaction: Encoded.Transaction,\n): Encoded.AccountAddress {\n const params = unpackTx(transaction);\n switch (params.tag) {\n case Tag.SignedTx:\n return getTransactionSignerAddress(buildTx(params.encodedTx));\n case Tag.GaMetaTx:\n return params.gaId;\n default:\n }\n\n const nonce = getSchema(params.tag, params.version).find(([name]) => name === 'nonce')?.[1];\n if (nonce == null)\n throw new TransactionError(`Transaction doesn't have nonce: ${Tag[params.tag]}`);\n if (!('senderKey' in nonce)) throw new UnexpectedTsError();\n const address = params[nonce.senderKey as keyof typeof params] as unknown as string;\n return address.replace(/^ok_/, 'ak_') as Encoded.AccountAddress;\n}\n"],"mappings":"AACA,SAASA,OAAO,EAAEC,SAAS,EAAEC,QAAQ,QAAQ,oBAAoB;AACjE,SAASC,GAAG,QAAQ,wBAAwB;AAC5C,SAASC,gBAAgB,EAAEC,iBAAiB,QAAQ,oBAAoB;;AAExE;AACA;AACA;AACA;AACA;AACA,eAAe,SAASC,2BAA2BA,CACjDC,WAAgC,EACR;EACxB,MAAMC,MAAM,GAAGN,QAAQ,CAACK,WAAW,CAAC;EACpC,QAAQC,MAAM,CAACC,GAAG;IAChB,KAAKN,GAAG,CAACO,QAAQ;MACf,OAAOJ,2BAA2B,CAACN,OAAO,CAACQ,MAAM,CAACG,SAAS,CAAC,CAAC;IAC/D,KAAKR,GAAG,CAACS,QAAQ;MACf,OAAOJ,MAAM,CAACK,IAAI;IACpB;EACF;EAEA,MAAMC,KAAK,GAAGb,SAAS,CAACO,MAAM,CAACC,GAAG,EAAED,MAAM,CAACO,OAAO,CAAC,CAACC,IAAI,CAAC,CAAC,CAACC,IAAI,CAAC,KAAKA,IAAI,KAAK,OAAO,CAAC,GAAG,CAAC,CAAC;EAC3F,IAAIH,KAAK,IAAI,IAAI,EACf,MAAM,IAAIV,gBAAgB,CAAC,mCAAmCD,GAAG,CAACK,MAAM,CAACC,GAAG,CAAC,EAAE,CAAC;EAClF,IAAI,EAAE,WAAW,IAAIK,KAAK,CAAC,EAAE,MAAM,IAAIT,iBAAiB,CAAC,CAAC;EAC1D,MAAMa,OAAO,GAAGV,MAAM,CAACM,KAAK,CAACK,SAAS,CAA6C;EACnF,OAAOD,OAAO,CAACE,OAAO,CAAC,MAAM,EAAE,KAAK,CAAC;AACvC","ignoreList":[]}
1
+ {"version":3,"file":"transaction-signer.js","names":["getSchema","rebuildUnpackedTx","unpackTx","Tag","TransactionError","UnexpectedTsError","getTransactionSignerAddress","transaction","params","tag","SignedTx","encodedTx","GaMetaTx","gaId","nonce","version","find","name","address","senderKey","replace"],"sources":["../../src/tx/transaction-signer.ts"],"sourcesContent":["import { Encoded } from '../utils/encoder.js';\nimport { getSchema, rebuildUnpackedTx, unpackTx } from './builder/index.js';\nimport { Tag } from './builder/constants.js';\nimport { TransactionError, UnexpectedTsError } from '../utils/errors.js';\n\n/**\n * Returns account address that signed a transaction\n * @param transaction - transaction to get a signer of\n * @category utils\n */\nexport default function getTransactionSignerAddress(\n transaction: Encoded.Transaction,\n): Encoded.AccountAddress {\n const params = unpackTx(transaction);\n switch (params.tag) {\n case Tag.SignedTx:\n return getTransactionSignerAddress(rebuildUnpackedTx(params.encodedTx));\n case Tag.GaMetaTx:\n return params.gaId;\n default:\n }\n\n const nonce = getSchema(params.tag, params.version).find(([name]) => name === 'nonce')?.[1];\n if (nonce == null)\n throw new TransactionError(`Transaction doesn't have nonce: ${Tag[params.tag]}`);\n if (!('senderKey' in nonce)) throw new UnexpectedTsError();\n const address = params[nonce.senderKey as keyof typeof params] as unknown as string;\n return address.replace(/^ok_/, 'ak_') as Encoded.AccountAddress;\n}\n"],"mappings":"AACA,SAASA,SAAS,EAAEC,iBAAiB,EAAEC,QAAQ,QAAQ,oBAAoB;AAC3E,SAASC,GAAG,QAAQ,wBAAwB;AAC5C,SAASC,gBAAgB,EAAEC,iBAAiB,QAAQ,oBAAoB;;AAExE;AACA;AACA;AACA;AACA;AACA,eAAe,SAASC,2BAA2BA,CACjDC,WAAgC,EACR;EACxB,MAAMC,MAAM,GAAGN,QAAQ,CAACK,WAAW,CAAC;EACpC,QAAQC,MAAM,CAACC,GAAG;IAChB,KAAKN,GAAG,CAACO,QAAQ;MACf,OAAOJ,2BAA2B,CAACL,iBAAiB,CAACO,MAAM,CAACG,SAAS,CAAC,CAAC;IACzE,KAAKR,GAAG,CAACS,QAAQ;MACf,OAAOJ,MAAM,CAACK,IAAI;IACpB;EACF;EAEA,MAAMC,KAAK,GAAGd,SAAS,CAACQ,MAAM,CAACC,GAAG,EAAED,MAAM,CAACO,OAAO,CAAC,CAACC,IAAI,CAAC,CAAC,CAACC,IAAI,CAAC,KAAKA,IAAI,KAAK,OAAO,CAAC,GAAG,CAAC,CAAC;EAC3F,IAAIH,KAAK,IAAI,IAAI,EACf,MAAM,IAAIV,gBAAgB,CAAC,mCAAmCD,GAAG,CAACK,MAAM,CAACC,GAAG,CAAC,EAAE,CAAC;EAClF,IAAI,EAAE,WAAW,IAAIK,KAAK,CAAC,EAAE,MAAM,IAAIT,iBAAiB,CAAC,CAAC;EAC1D,MAAMa,OAAO,GAAGV,MAAM,CAACM,KAAK,CAACK,SAAS,CAA6C;EACnF,OAAOD,OAAO,CAACE,OAAO,CAAC,MAAM,EAAE,KAAK,CAAC;AACvC","ignoreList":[]}
@@ -3,7 +3,7 @@ import { RestError } from '@azure/core-rest-pipeline';
3
3
  import { hash, isEncoded, verifySignature } from '../utils/crypto.js';
4
4
  import { ProtocolToVmAbi } from './builder/field-types/ct-version.js';
5
5
  import { Tag } from './builder/constants.js';
6
- import { buildTx, unpackTx } from './builder/index.js';
6
+ import { rebuildUnpackedTx, unpackTx } from './builder/index.js';
7
7
  import { concatBuffers, isAccountNotFoundError } from '../utils/other.js';
8
8
  import { Encoding, decode } from '../utils/encoder.js';
9
9
  import Node from '../Node.js';
@@ -13,7 +13,7 @@ import getTransactionSignerAddress from './transaction-signer.js';
13
13
  import { getExecutionCostUsingNode } from './execution-cost.js';
14
14
  const validators = [];
15
15
  async function verifyTransactionInternal(tx, node, parentTxTypes) {
16
- const address = getTransactionSignerAddress(buildTx(tx));
16
+ const address = getTransactionSignerAddress(rebuildUnpackedTx(tx));
17
17
  const [account, {
18
18
  height
19
19
  }, {
@@ -80,7 +80,7 @@ validators.push((tx, {
80
80
  if ((encodedTx !== null && encodedTx !== void 0 ? encodedTx : signatures) == null) return [];
81
81
  if (signatures.length !== 1) return []; // TODO: Support multisignature like in state channels
82
82
  const prefix = _Buffer.from([nodeNetworkId, ...(parentTxTypes.includes(Tag.PayingForTx) ? ['inner_tx'] : [])].join('-'));
83
- const txBinary = decode(buildTx(encodedTx));
83
+ const txBinary = decode(rebuildUnpackedTx(encodedTx));
84
84
  const txWithNetworkId = concatBuffers([prefix, txBinary]);
85
85
  const txHashWithNetworkId = concatBuffers([prefix, hash(txBinary)]);
86
86
  if (verifySignature(txWithNetworkId, signatures[0], account.id) || verifySignature(txHashWithNetworkId, signatures[0], account.id)) return [];
@@ -114,7 +114,7 @@ validators.push((tx, {
114
114
  node
115
115
  }) => {
116
116
  if (parentTxTypes.length !== 0) return [];
117
- const cost = await getExecutionCostUsingNode(buildTx(tx), node).catch(() => 0n);
117
+ const cost = await getExecutionCostUsingNode(rebuildUnpackedTx(tx), node).catch(() => 0n);
118
118
  if (cost <= account.balance) return [];
119
119
  return [{
120
120
  message: `Account balance ${account.balance} is not enough to execute the transaction that costs ${cost}`,
@@ -1 +1 @@
1
- {"version":3,"file":"validator.js","names":["RestError","hash","isEncoded","verifySignature","ProtocolToVmAbi","Tag","buildTx","unpackTx","concatBuffers","isAccountNotFoundError","Encoding","decode","Node","genAggressiveCacheGetResponsesPolicy","UnexpectedTsError","getTransactionSignerAddress","getExecutionCostUsingNode","validators","verifyTransactionInternal","tx","node","parentTxTypes","address","account","height","consensusProtocolVersion","nodeNetworkId","Promise","all","getAccountByPubkey","catch","error","id","balance","nonce","then","acc","getCurrentKeyBlockHeight","getNodeInfo","map","v","flat","verifyTransaction","transaction","nodeNotCached","pipeline","clone","removePolicy","name","$host","ignoreVersion","additionalPolicies","_getCachedStatus","push","tag","SignedTx","encodedTx","signatures","length","prefix","_Buffer","from","includes","PayingForTx","join","txBinary","txWithNetworkId","txHashWithNetworkId","message","key","checkedKeys","nestedTx","ttl","cost","SpendTx","recipientId","Name","recipient","payable","kind","GaMetaTx","_ref","_ref2","oracleCall","OracleRegisterTx","contractCreate","ContractCreateTx","GaAttachTx","contractCall","ContractCallTx","type","protocol","ctVersion","abiVersion","vmVersion","JSON","stringify","contractId","startsWith","active","getContract","response","bodyAsText","parse","reason"],"sources":["../../src/tx/validator.ts"],"sourcesContent":["import { RestError } from '@azure/core-rest-pipeline';\nimport { hash, isEncoded, verifySignature } from '../utils/crypto.js';\nimport { TxUnpacked } from './builder/schema.generated.js';\nimport { CtVersion, ProtocolToVmAbi } from './builder/field-types/ct-version.js';\nimport { Tag, ConsensusProtocolVersion } from './builder/constants.js';\nimport { buildTx, unpackTx } from './builder/index.js';\nimport { concatBuffers, isAccountNotFoundError } from '../utils/other.js';\nimport { Encoded, Encoding, decode } from '../utils/encoder.js';\nimport Node from '../Node.js';\nimport { Account } from '../apis/node/index.js';\nimport { genAggressiveCacheGetResponsesPolicy } from '../utils/autorest.js';\nimport { UnexpectedTsError } from '../utils/errors.js';\nimport getTransactionSignerAddress from './transaction-signer.js';\nimport { getExecutionCostUsingNode } from './execution-cost.js';\n\nexport interface ValidatorResult {\n message: string;\n key: string;\n checkedKeys: string[];\n}\n\ntype Validator = (\n tx: TxUnpacked,\n options: {\n // TODO: remove after fixing node types\n account: Account & { id: Encoded.AccountAddress };\n nodeNetworkId: string;\n parentTxTypes: Tag[];\n node: Node;\n height: number;\n consensusProtocolVersion: ConsensusProtocolVersion;\n },\n) => ValidatorResult[] | Promise<ValidatorResult[]>;\n\nconst validators: Validator[] = [];\n\nasync function verifyTransactionInternal(\n tx: TxUnpacked,\n node: Node,\n parentTxTypes: Tag[],\n): Promise<ValidatorResult[]> {\n const address = getTransactionSignerAddress(buildTx(tx));\n const [account, { height }, { consensusProtocolVersion, nodeNetworkId }] = await Promise.all([\n node\n .getAccountByPubkey(address)\n .catch((error) => {\n if (!isAccountNotFoundError(error)) throw error;\n return { id: address, balance: 0n, nonce: 0 };\n })\n // TODO: remove after fixing https://github.com/aeternity/aepp-sdk-js/issues/1537\n .then((acc) => ({ ...acc, id: acc.id as Encoded.AccountAddress })),\n node.getCurrentKeyBlockHeight(), // TODO: don't request height on each validation, use caching\n node.getNodeInfo(),\n ]);\n\n return (\n await Promise.all(\n validators.map(async (v) =>\n v(tx, {\n node,\n account,\n height,\n consensusProtocolVersion,\n nodeNetworkId,\n parentTxTypes,\n }),\n ),\n )\n ).flat();\n}\n\n/**\n * Transaction Validator\n * This function validates some transaction properties,\n * to make sure it can be posted it to the chain\n * @category transaction builder\n * @param transaction - Base64Check-encoded transaction\n * @param nodeNotCached - Node to validate transaction against\n * @returns Array with verification errors\n * @example const errors = await verifyTransaction(transaction, node)\n */\nexport default async function verifyTransaction(\n transaction: Parameters<typeof unpackTx>[0],\n nodeNotCached: Node,\n): Promise<ValidatorResult[]> {\n const pipeline = nodeNotCached.pipeline.clone();\n pipeline.removePolicy({ name: 'parse-big-int' });\n const node = new Node(nodeNotCached.$host, {\n ignoreVersion: true,\n pipeline,\n additionalPolicies: [genAggressiveCacheGetResponsesPolicy()],\n });\n node._getCachedStatus = async () => nodeNotCached._getCachedStatus();\n return verifyTransactionInternal(unpackTx(transaction), node, []);\n}\n\nvalidators.push(\n (tx, { account, nodeNetworkId, parentTxTypes }) => {\n if (tx.tag !== Tag.SignedTx) return [];\n const { encodedTx, signatures } = tx;\n if ((encodedTx ?? signatures) == null) return [];\n if (signatures.length !== 1) return []; // TODO: Support multisignature like in state channels\n const prefix = Buffer.from(\n [nodeNetworkId, ...(parentTxTypes.includes(Tag.PayingForTx) ? ['inner_tx'] : [])].join('-'),\n );\n const txBinary = decode(buildTx(encodedTx));\n const txWithNetworkId = concatBuffers([prefix, txBinary]);\n const txHashWithNetworkId = concatBuffers([prefix, hash(txBinary)]);\n if (\n verifySignature(txWithNetworkId, signatures[0], account.id) ||\n verifySignature(txHashWithNetworkId, signatures[0], account.id)\n )\n return [];\n return [\n {\n message:\n 'Signature cannot be verified, please ensure that you transaction have' +\n ' the correct prefix and the correct private key for the sender address',\n key: 'InvalidSignature',\n checkedKeys: ['encodedTx', 'signatures'],\n },\n ];\n },\n async (tx, { node, parentTxTypes }) => {\n let nestedTx;\n if ('encodedTx' in tx) nestedTx = tx.encodedTx;\n if ('tx' in tx) nestedTx = tx.tx;\n if (nestedTx == null) return [];\n return verifyTransactionInternal(nestedTx, node, [...parentTxTypes, tx.tag]);\n },\n (tx, { height }) => {\n if (!('ttl' in tx)) return [];\n if (tx.ttl === 0 || tx.ttl > height) return [];\n return [\n {\n message: `TTL ${tx.ttl} is already expired, current height is ${height}`,\n key: 'ExpiredTTL',\n checkedKeys: ['ttl'],\n },\n ];\n },\n async (tx, { account, parentTxTypes, node }) => {\n if (parentTxTypes.length !== 0) return [];\n const cost = await getExecutionCostUsingNode(buildTx(tx), node).catch(() => 0n);\n if (cost <= account.balance) return [];\n return [\n {\n message: `Account balance ${account.balance} is not enough to execute the transaction that costs ${cost}`,\n key: 'InsufficientBalance',\n checkedKeys: ['amount', 'fee', 'nameFee', 'gasLimit', 'gasPrice'],\n },\n ];\n },\n async (tx, { node }) => {\n if (tx.tag !== Tag.SpendTx || isEncoded(tx.recipientId, Encoding.Name)) return [];\n const recipient = await node.getAccountByPubkey(tx.recipientId).catch((error) => {\n if (!isAccountNotFoundError(error)) throw error;\n return null;\n });\n if (recipient == null || recipient.payable === true) return [];\n return [\n {\n message: 'Recipient account is not payable',\n key: 'RecipientAccountNotPayable',\n checkedKeys: ['recipientId'],\n },\n ];\n },\n (tx, { account }) => {\n let message;\n if (tx.tag === Tag.SignedTx && account.kind === 'generalized' && tx.signatures.length !== 0) {\n message = \"Generalized account can't be used to generate SignedTx with signatures\";\n }\n if (tx.tag === Tag.GaMetaTx && account.kind === 'basic') {\n message = \"Basic account can't be used to generate GaMetaTx\";\n }\n if (message == null) return [];\n return [{ message, key: 'InvalidAccountType', checkedKeys: ['tag'] }];\n },\n // TODO: revert nonce check\n // TODO: ensure nonce valid when paying for own tx\n (tx, { consensusProtocolVersion }) => {\n const oracleCall = Tag.OracleRegisterTx === tx.tag;\n const contractCreate = Tag.ContractCreateTx === tx.tag || Tag.GaAttachTx === tx.tag;\n const contractCall = Tag.ContractCallTx === tx.tag || Tag.GaMetaTx === tx.tag;\n const type =\n (oracleCall ? 'oracle-call' : null) ??\n (contractCreate ? 'contract-create' : null) ??\n (contractCall ? 'contract-call' : null);\n if (type == null) return [];\n const protocol = ProtocolToVmAbi[consensusProtocolVersion][type] as {\n abiVersion: readonly any[];\n vmVersion: readonly any[];\n };\n\n let ctVersion: Partial<CtVersion> | undefined;\n if ('abiVersion' in tx) ctVersion = { abiVersion: tx.abiVersion };\n if ('ctVersion' in tx) ctVersion = tx.ctVersion;\n if (ctVersion == null) throw new UnexpectedTsError();\n if (\n !protocol.abiVersion.includes(ctVersion.abiVersion) ||\n (contractCreate && !protocol.vmVersion.includes(ctVersion.vmVersion))\n ) {\n return [\n {\n message: `ABI/VM version ${JSON.stringify(ctVersion)} is wrong, supported is: ${JSON.stringify(protocol)}`,\n key: 'VmAndAbiVersionMismatch',\n checkedKeys: ['ctVersion', 'abiVersion'],\n },\n ];\n }\n return [];\n },\n async (tx, { node }) => {\n if (Tag.ContractCallTx !== tx.tag) return [];\n // TODO: remove after solving https://github.com/aeternity/aeternity/issues/3669\n if (tx.contractId.startsWith('nm_')) return [];\n try {\n const { active } = await node.getContract(tx.contractId);\n if (active) return [];\n return [\n {\n message: `Contract ${tx.contractId} is not active`,\n key: 'ContractNotActive',\n checkedKeys: ['contractId'],\n },\n ];\n } catch (error) {\n if (!(error instanceof RestError) || error.response?.bodyAsText == null) throw error;\n return [\n {\n message: JSON.parse(error.response.bodyAsText).reason, // TODO: use parsedBody instead\n key: 'ContractNotFound',\n checkedKeys: ['contractId'],\n },\n ];\n }\n },\n);\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"validator.js","names":["RestError","hash","isEncoded","verifySignature","ProtocolToVmAbi","Tag","rebuildUnpackedTx","unpackTx","concatBuffers","isAccountNotFoundError","Encoding","decode","Node","genAggressiveCacheGetResponsesPolicy","UnexpectedTsError","getTransactionSignerAddress","getExecutionCostUsingNode","validators","verifyTransactionInternal","tx","node","parentTxTypes","address","account","height","consensusProtocolVersion","nodeNetworkId","Promise","all","getAccountByPubkey","catch","error","id","balance","nonce","then","acc","getCurrentKeyBlockHeight","getNodeInfo","map","v","flat","verifyTransaction","transaction","nodeNotCached","pipeline","clone","removePolicy","name","$host","ignoreVersion","additionalPolicies","_getCachedStatus","push","tag","SignedTx","encodedTx","signatures","length","prefix","_Buffer","from","includes","PayingForTx","join","txBinary","txWithNetworkId","txHashWithNetworkId","message","key","checkedKeys","nestedTx","ttl","cost","SpendTx","recipientId","Name","recipient","payable","kind","GaMetaTx","_ref","_ref2","oracleCall","OracleRegisterTx","contractCreate","ContractCreateTx","GaAttachTx","contractCall","ContractCallTx","type","protocol","ctVersion","abiVersion","vmVersion","JSON","stringify","contractId","startsWith","active","getContract","response","bodyAsText","parse","reason"],"sources":["../../src/tx/validator.ts"],"sourcesContent":["import { RestError } from '@azure/core-rest-pipeline';\nimport { hash, isEncoded, verifySignature } from '../utils/crypto.js';\nimport { TxUnpacked } from './builder/schema.generated.js';\nimport { CtVersion, ProtocolToVmAbi } from './builder/field-types/ct-version.js';\nimport { Tag, ConsensusProtocolVersion } from './builder/constants.js';\nimport { rebuildUnpackedTx, unpackTx } from './builder/index.js';\nimport { concatBuffers, isAccountNotFoundError } from '../utils/other.js';\nimport { Encoded, Encoding, decode } from '../utils/encoder.js';\nimport Node from '../Node.js';\nimport { Account } from '../apis/node/index.js';\nimport { genAggressiveCacheGetResponsesPolicy } from '../utils/autorest.js';\nimport { UnexpectedTsError } from '../utils/errors.js';\nimport getTransactionSignerAddress from './transaction-signer.js';\nimport { getExecutionCostUsingNode } from './execution-cost.js';\n\nexport interface ValidatorResult {\n message: string;\n key: string;\n checkedKeys: string[];\n}\n\ntype Validator = (\n tx: TxUnpacked,\n options: {\n // TODO: remove after fixing node types\n account: Account & { id: Encoded.AccountAddress };\n nodeNetworkId: string;\n parentTxTypes: Tag[];\n node: Node;\n height: number;\n consensusProtocolVersion: ConsensusProtocolVersion;\n },\n) => ValidatorResult[] | Promise<ValidatorResult[]>;\n\nconst validators: Validator[] = [];\n\nasync function verifyTransactionInternal(\n tx: TxUnpacked,\n node: Node,\n parentTxTypes: Tag[],\n): Promise<ValidatorResult[]> {\n const address = getTransactionSignerAddress(rebuildUnpackedTx(tx));\n const [account, { height }, { consensusProtocolVersion, nodeNetworkId }] = await Promise.all([\n node\n .getAccountByPubkey(address)\n .catch((error) => {\n if (!isAccountNotFoundError(error)) throw error;\n return { id: address, balance: 0n, nonce: 0 };\n })\n // TODO: remove after fixing https://github.com/aeternity/aepp-sdk-js/issues/1537\n .then((acc) => ({ ...acc, id: acc.id as Encoded.AccountAddress })),\n node.getCurrentKeyBlockHeight(), // TODO: don't request height on each validation, use caching\n node.getNodeInfo(),\n ]);\n\n return (\n await Promise.all(\n validators.map(async (v) =>\n v(tx, {\n node,\n account,\n height,\n consensusProtocolVersion,\n nodeNetworkId,\n parentTxTypes,\n }),\n ),\n )\n ).flat();\n}\n\n/**\n * Transaction Validator\n * This function validates some transaction properties,\n * to make sure it can be posted it to the chain\n * @category transaction builder\n * @param transaction - Base64Check-encoded transaction\n * @param nodeNotCached - Node to validate transaction against\n * @returns Array with verification errors\n * @example const errors = await verifyTransaction(transaction, node)\n */\nexport default async function verifyTransaction(\n transaction: Parameters<typeof unpackTx>[0],\n nodeNotCached: Node,\n): Promise<ValidatorResult[]> {\n const pipeline = nodeNotCached.pipeline.clone();\n pipeline.removePolicy({ name: 'parse-big-int' });\n const node = new Node(nodeNotCached.$host, {\n ignoreVersion: true,\n pipeline,\n additionalPolicies: [genAggressiveCacheGetResponsesPolicy()],\n });\n node._getCachedStatus = async () => nodeNotCached._getCachedStatus();\n return verifyTransactionInternal(unpackTx(transaction), node, []);\n}\n\nvalidators.push(\n (tx, { account, nodeNetworkId, parentTxTypes }) => {\n if (tx.tag !== Tag.SignedTx) return [];\n const { encodedTx, signatures } = tx;\n if ((encodedTx ?? signatures) == null) return [];\n if (signatures.length !== 1) return []; // TODO: Support multisignature like in state channels\n const prefix = Buffer.from(\n [nodeNetworkId, ...(parentTxTypes.includes(Tag.PayingForTx) ? ['inner_tx'] : [])].join('-'),\n );\n const txBinary = decode(rebuildUnpackedTx(encodedTx));\n const txWithNetworkId = concatBuffers([prefix, txBinary]);\n const txHashWithNetworkId = concatBuffers([prefix, hash(txBinary)]);\n if (\n verifySignature(txWithNetworkId, signatures[0], account.id) ||\n verifySignature(txHashWithNetworkId, signatures[0], account.id)\n )\n return [];\n return [\n {\n message:\n 'Signature cannot be verified, please ensure that you transaction have' +\n ' the correct prefix and the correct private key for the sender address',\n key: 'InvalidSignature',\n checkedKeys: ['encodedTx', 'signatures'],\n },\n ];\n },\n async (tx, { node, parentTxTypes }) => {\n let nestedTx;\n if ('encodedTx' in tx) nestedTx = tx.encodedTx;\n if ('tx' in tx) nestedTx = tx.tx;\n if (nestedTx == null) return [];\n return verifyTransactionInternal(nestedTx, node, [...parentTxTypes, tx.tag]);\n },\n (tx, { height }) => {\n if (!('ttl' in tx)) return [];\n if (tx.ttl === 0 || tx.ttl > height) return [];\n return [\n {\n message: `TTL ${tx.ttl} is already expired, current height is ${height}`,\n key: 'ExpiredTTL',\n checkedKeys: ['ttl'],\n },\n ];\n },\n async (tx, { account, parentTxTypes, node }) => {\n if (parentTxTypes.length !== 0) return [];\n const cost = await getExecutionCostUsingNode(rebuildUnpackedTx(tx), node).catch(() => 0n);\n if (cost <= account.balance) return [];\n return [\n {\n message: `Account balance ${account.balance} is not enough to execute the transaction that costs ${cost}`,\n key: 'InsufficientBalance',\n checkedKeys: ['amount', 'fee', 'nameFee', 'gasLimit', 'gasPrice'],\n },\n ];\n },\n async (tx, { node }) => {\n if (tx.tag !== Tag.SpendTx || isEncoded(tx.recipientId, Encoding.Name)) return [];\n const recipient = await node.getAccountByPubkey(tx.recipientId).catch((error) => {\n if (!isAccountNotFoundError(error)) throw error;\n return null;\n });\n if (recipient == null || recipient.payable === true) return [];\n return [\n {\n message: 'Recipient account is not payable',\n key: 'RecipientAccountNotPayable',\n checkedKeys: ['recipientId'],\n },\n ];\n },\n (tx, { account }) => {\n let message;\n if (tx.tag === Tag.SignedTx && account.kind === 'generalized' && tx.signatures.length !== 0) {\n message = \"Generalized account can't be used to generate SignedTx with signatures\";\n }\n if (tx.tag === Tag.GaMetaTx && account.kind === 'basic') {\n message = \"Basic account can't be used to generate GaMetaTx\";\n }\n if (message == null) return [];\n return [{ message, key: 'InvalidAccountType', checkedKeys: ['tag'] }];\n },\n // TODO: revert nonce check\n // TODO: ensure nonce valid when paying for own tx\n (tx, { consensusProtocolVersion }) => {\n const oracleCall = Tag.OracleRegisterTx === tx.tag;\n const contractCreate = Tag.ContractCreateTx === tx.tag || Tag.GaAttachTx === tx.tag;\n const contractCall = Tag.ContractCallTx === tx.tag || Tag.GaMetaTx === tx.tag;\n const type =\n (oracleCall ? 'oracle-call' : null) ??\n (contractCreate ? 'contract-create' : null) ??\n (contractCall ? 'contract-call' : null);\n if (type == null) return [];\n const protocol = ProtocolToVmAbi[consensusProtocolVersion][type] as {\n abiVersion: readonly any[];\n vmVersion: readonly any[];\n };\n\n let ctVersion: Partial<CtVersion> | undefined;\n if ('abiVersion' in tx) ctVersion = { abiVersion: tx.abiVersion };\n if ('ctVersion' in tx) ctVersion = tx.ctVersion;\n if (ctVersion == null) throw new UnexpectedTsError();\n if (\n !protocol.abiVersion.includes(ctVersion.abiVersion) ||\n (contractCreate && !protocol.vmVersion.includes(ctVersion.vmVersion))\n ) {\n return [\n {\n message: `ABI/VM version ${JSON.stringify(ctVersion)} is wrong, supported is: ${JSON.stringify(protocol)}`,\n key: 'VmAndAbiVersionMismatch',\n checkedKeys: ['ctVersion', 'abiVersion'],\n },\n ];\n }\n return [];\n },\n async (tx, { node }) => {\n if (Tag.ContractCallTx !== tx.tag) return [];\n // TODO: remove after solving https://github.com/aeternity/aeternity/issues/3669\n if (tx.contractId.startsWith('nm_')) return [];\n try {\n const { active } = await node.getContract(tx.contractId);\n if (active) return [];\n return [\n {\n message: `Contract ${tx.contractId} is not active`,\n key: 'ContractNotActive',\n checkedKeys: ['contractId'],\n },\n ];\n } catch (error) {\n if (!(error instanceof RestError) || error.response?.bodyAsText == null) throw error;\n return [\n {\n message: JSON.parse(error.response.bodyAsText).reason, // TODO: use parsedBody instead\n key: 'ContractNotFound',\n checkedKeys: ['contractId'],\n },\n ];\n }\n },\n);\n"],"mappings":"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","ignoreList":[]}
@@ -1,2 +1,12 @@
1
1
  export declare function wrapWithProxy<Value extends object | undefined>(valueCb: () => Value): NonNullable<Value>;
2
+ /**
3
+ * Returns the value a proxy wraps. Anything keyed by a node must key by this: `onNode` is a proxy
4
+ * created once per sdk instance and its identity doesn't change on `selectNode`, so a cache keyed
5
+ * by the proxy would apply one network's values on another.
6
+ */
2
7
  export declare function unwrapProxy<Value extends object>(value: Value): Value;
8
+ /**
9
+ * The same as {@link unwrapProxy}, but returns `undefined` instead of throwing when the proxy has
10
+ * nothing to unwrap — an sdk instance with no node selected wraps a value that isn't there yet.
11
+ */
12
+ export declare function unwrapProxyIfPossible<Value extends object>(value: Value): Value | undefined;
@@ -8,8 +8,26 @@ export function wrapWithProxy(valueCb) {
8
8
  return typeof res === 'function' && name === 'get' ? res.bind(target) : res;
9
9
  }])));
10
10
  }
11
+
12
+ /**
13
+ * Returns the value a proxy wraps. Anything keyed by a node must key by this: `onNode` is a proxy
14
+ * created once per sdk instance and its identity doesn't change on `selectNode`, so a cache keyed
15
+ * by the proxy would apply one network's values on another.
16
+ */
11
17
  export function unwrapProxy(value) {
12
18
  var _wrappedValue;
13
19
  return (_wrappedValue = value._wrappedValue) !== null && _wrappedValue !== void 0 ? _wrappedValue : value;
14
20
  }
21
+
22
+ /**
23
+ * The same as {@link unwrapProxy}, but returns `undefined` instead of throwing when the proxy has
24
+ * nothing to unwrap — an sdk instance with no node selected wraps a value that isn't there yet.
25
+ */
26
+ export function unwrapProxyIfPossible(value) {
27
+ try {
28
+ return unwrapProxy(value);
29
+ } catch {
30
+ return undefined;
31
+ }
32
+ }
15
33
  //# sourceMappingURL=wrap-proxy.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"wrap-proxy.js","names":["ArgumentError","wrapWithProxy","valueCb","Proxy","Object","fromEntries","map","name","t","args","target","res","Reflect","bind","unwrapProxy","value","_wrappedValue"],"sources":["../../src/utils/wrap-proxy.ts"],"sourcesContent":["import { ArgumentError } from './errors.js';\n\nexport function wrapWithProxy<Value extends object | undefined>(\n valueCb: () => Value,\n): NonNullable<Value> {\n return new Proxy(\n {},\n Object.fromEntries(\n (\n [\n 'apply',\n 'construct',\n 'defineProperty',\n 'deleteProperty',\n 'getOwnPropertyDescriptor',\n 'getPrototypeOf',\n 'isExtensible',\n 'ownKeys',\n 'preventExtensions',\n 'set',\n 'setPrototypeOf',\n 'get',\n 'has',\n ] as const\n ).map((name) => [\n name,\n (t: {}, ...args: unknown[]) => {\n const target = valueCb();\n if (target == null) throw new ArgumentError('wrapped value', 'defined', target);\n if (name === 'get' && args[0] === '_wrappedValue') return target;\n const res = (Reflect[name] as any)(target, ...args);\n return typeof res === 'function' && name === 'get' ? res.bind(target) : res;\n },\n ]),\n ),\n ) as NonNullable<Value>;\n}\n\nexport function unwrapProxy<Value extends object>(value: Value): Value {\n return (value as { _wrappedValue?: Value })._wrappedValue ?? value;\n}\n"],"mappings":"AAAA,SAASA,aAAa,QAAQ,aAAa;AAE3C,OAAO,SAASC,aAAaA,CAC3BC,OAAoB,EACA;EACpB,OAAO,IAAIC,KAAK,CACd,CAAC,CAAC,EACFC,MAAM,CAACC,WAAW,CAEd,CACE,OAAO,EACP,WAAW,EACX,gBAAgB,EAChB,gBAAgB,EAChB,0BAA0B,EAC1B,gBAAgB,EAChB,cAAc,EACd,SAAS,EACT,mBAAmB,EACnB,KAAK,EACL,gBAAgB,EAChB,KAAK,EACL,KAAK,CACN,CACDC,GAAG,CAAEC,IAAI,IAAK,CACdA,IAAI,EACJ,CAACC,CAAK,EAAE,GAAGC,IAAe,KAAK;IAC7B,MAAMC,MAAM,GAAGR,OAAO,CAAC,CAAC;IACxB,IAAIQ,MAAM,IAAI,IAAI,EAAE,MAAM,IAAIV,aAAa,CAAC,eAAe,EAAE,SAAS,EAAEU,MAAM,CAAC;IAC/E,IAAIH,IAAI,KAAK,KAAK,IAAIE,IAAI,CAAC,CAAC,CAAC,KAAK,eAAe,EAAE,OAAOC,MAAM;IAChE,MAAMC,GAAG,GAAIC,OAAO,CAACL,IAAI,CAAC,CAASG,MAAM,EAAE,GAAGD,IAAI,CAAC;IACnD,OAAO,OAAOE,GAAG,KAAK,UAAU,IAAIJ,IAAI,KAAK,KAAK,GAAGI,GAAG,CAACE,IAAI,CAACH,MAAM,CAAC,GAAGC,GAAG;EAC7E,CAAC,CACF,CACH,CACF,CAAC;AACH;AAEA,OAAO,SAASG,WAAWA,CAAuBC,KAAY,EAAS;EAAA,IAAAC,aAAA;EACrE,QAAAA,aAAA,GAAQD,KAAK,CAA+BC,aAAa,cAAAA,aAAA,cAAAA,aAAA,GAAID,KAAK;AACpE","ignoreList":[]}
1
+ {"version":3,"file":"wrap-proxy.js","names":["ArgumentError","wrapWithProxy","valueCb","Proxy","Object","fromEntries","map","name","t","args","target","res","Reflect","bind","unwrapProxy","value","_wrappedValue","unwrapProxyIfPossible","undefined"],"sources":["../../src/utils/wrap-proxy.ts"],"sourcesContent":["import { ArgumentError } from './errors.js';\n\nexport function wrapWithProxy<Value extends object | undefined>(\n valueCb: () => Value,\n): NonNullable<Value> {\n return new Proxy(\n {},\n Object.fromEntries(\n (\n [\n 'apply',\n 'construct',\n 'defineProperty',\n 'deleteProperty',\n 'getOwnPropertyDescriptor',\n 'getPrototypeOf',\n 'isExtensible',\n 'ownKeys',\n 'preventExtensions',\n 'set',\n 'setPrototypeOf',\n 'get',\n 'has',\n ] as const\n ).map((name) => [\n name,\n (t: {}, ...args: unknown[]) => {\n const target = valueCb();\n if (target == null) throw new ArgumentError('wrapped value', 'defined', target);\n if (name === 'get' && args[0] === '_wrappedValue') return target;\n const res = (Reflect[name] as any)(target, ...args);\n return typeof res === 'function' && name === 'get' ? res.bind(target) : res;\n },\n ]),\n ),\n ) as NonNullable<Value>;\n}\n\n/**\n * Returns the value a proxy wraps. Anything keyed by a node must key by this: `onNode` is a proxy\n * created once per sdk instance and its identity doesn't change on `selectNode`, so a cache keyed\n * by the proxy would apply one network's values on another.\n */\nexport function unwrapProxy<Value extends object>(value: Value): Value {\n return (value as { _wrappedValue?: Value })._wrappedValue ?? value;\n}\n\n/**\n * The same as {@link unwrapProxy}, but returns `undefined` instead of throwing when the proxy has\n * nothing to unwrap — an sdk instance with no node selected wraps a value that isn't there yet.\n */\nexport function unwrapProxyIfPossible<Value extends object>(value: Value): Value | undefined {\n try {\n return unwrapProxy(value);\n } catch {\n return undefined;\n }\n}\n"],"mappings":"AAAA,SAASA,aAAa,QAAQ,aAAa;AAE3C,OAAO,SAASC,aAAaA,CAC3BC,OAAoB,EACA;EACpB,OAAO,IAAIC,KAAK,CACd,CAAC,CAAC,EACFC,MAAM,CAACC,WAAW,CAEd,CACE,OAAO,EACP,WAAW,EACX,gBAAgB,EAChB,gBAAgB,EAChB,0BAA0B,EAC1B,gBAAgB,EAChB,cAAc,EACd,SAAS,EACT,mBAAmB,EACnB,KAAK,EACL,gBAAgB,EAChB,KAAK,EACL,KAAK,CACN,CACDC,GAAG,CAAEC,IAAI,IAAK,CACdA,IAAI,EACJ,CAACC,CAAK,EAAE,GAAGC,IAAe,KAAK;IAC7B,MAAMC,MAAM,GAAGR,OAAO,CAAC,CAAC;IACxB,IAAIQ,MAAM,IAAI,IAAI,EAAE,MAAM,IAAIV,aAAa,CAAC,eAAe,EAAE,SAAS,EAAEU,MAAM,CAAC;IAC/E,IAAIH,IAAI,KAAK,KAAK,IAAIE,IAAI,CAAC,CAAC,CAAC,KAAK,eAAe,EAAE,OAAOC,MAAM;IAChE,MAAMC,GAAG,GAAIC,OAAO,CAACL,IAAI,CAAC,CAASG,MAAM,EAAE,GAAGD,IAAI,CAAC;IACnD,OAAO,OAAOE,GAAG,KAAK,UAAU,IAAIJ,IAAI,KAAK,KAAK,GAAGI,GAAG,CAACE,IAAI,CAACH,MAAM,CAAC,GAAGC,GAAG;EAC7E,CAAC,CACF,CACH,CACF,CAAC;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASG,WAAWA,CAAuBC,KAAY,EAAS;EAAA,IAAAC,aAAA;EACrE,QAAAA,aAAA,GAAQD,KAAK,CAA+BC,aAAa,cAAAA,aAAA,cAAAA,aAAA,GAAID,KAAK;AACpE;;AAEA;AACA;AACA;AACA;AACA,OAAO,SAASE,qBAAqBA,CAAuBF,KAAY,EAAqB;EAC3F,IAAI;IACF,OAAOD,WAAW,CAACC,KAAK,CAAC;EAC3B,CAAC,CAAC,MAAM;IACN,OAAOG,SAAS;EAClB;AACF","ignoreList":[]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@aeternity/aepp-sdk",
3
- "version": "14.1.1",
3
+ "version": "15.0.1",
4
4
  "description": "SDK for the æternity blockchain",
5
5
  "homepage": "https://sdk.aeternity.io/",
6
6
  "main": "dist/aepp-sdk.cjs",
@@ -129,7 +129,7 @@
129
129
  "eslint-plugin-tsdoc": "^0.4.0",
130
130
  "extract-zip": "^2.0.1",
131
131
  "html-webpack-plugin": "^5.6.3",
132
- "mocha": "^11.1.0",
132
+ "mocha": "^12.0.0",
133
133
  "npm-run-all2": "^7.0.2",
134
134
  "prettier": "^3.5.3",
135
135
  "puppeteer-core": "^24.7.2",
@@ -174,5 +174,17 @@
174
174
  "Alexander Kahl <ak@sodosopa.io>",
175
175
  "Nazar Duchak <omelko39@gmail.com>",
176
176
  "Denis Davidyuk <denis_davidyuk@hotmail.com>"
177
- ]
177
+ ],
178
+ "allowScripts": {
179
+ "autorest@3.7.2": true,
180
+ "bufferutil@4.0.9": true,
181
+ "core-js@3.41.0": true,
182
+ "core-js-pure@3.41.0": true,
183
+ "es5-ext@0.10.64": true,
184
+ "esbuild@0.28.1": true,
185
+ "fsevents@2.3.3": true,
186
+ "node-hid@2.1.2": true,
187
+ "usb@2.9.0": true,
188
+ "utf-8-validate@5.0.10": true
189
+ }
178
190
  }