algosdk 3.7.0-beta.1 → 3.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (116) hide show
  1. package/README.md +4 -4
  2. package/dist/browser/algosdk.min.js +1 -1
  3. package/dist/browser/algosdk.min.js.map +1 -1
  4. package/dist/cjs/appAccess.js +4 -0
  5. package/dist/cjs/appAccess.js.map +1 -1
  6. package/dist/cjs/client/v2/algod/getPeers.js +20 -0
  7. package/dist/cjs/client/v2/algod/getPeers.js.map +1 -0
  8. package/dist/cjs/client/v2/algod/models/types.js +153 -5
  9. package/dist/cjs/client/v2/algod/models/types.js.map +1 -1
  10. package/dist/cjs/client/v2/indexer/models/types.js +163 -12
  11. package/dist/cjs/client/v2/indexer/models/types.js.map +1 -1
  12. package/dist/cjs/composer.js +4 -6
  13. package/dist/cjs/composer.js.map +1 -1
  14. package/dist/cjs/ed25519-signer.js +18 -0
  15. package/dist/cjs/ed25519-signer.js.map +1 -1
  16. package/dist/cjs/encoding/address.js +9 -0
  17. package/dist/cjs/encoding/address.js.map +1 -1
  18. package/dist/cjs/falcon-signer.js +16 -0
  19. package/dist/cjs/falcon-signer.js.map +1 -1
  20. package/dist/cjs/heartbeat.js +7 -0
  21. package/dist/cjs/heartbeat.js.map +1 -1
  22. package/dist/cjs/logicsig.js +86 -6
  23. package/dist/cjs/logicsig.js.map +1 -1
  24. package/dist/cjs/makeTxn.js +11 -2
  25. package/dist/cjs/makeTxn.js.map +1 -1
  26. package/dist/cjs/mnemonic/mnemonic.js +2 -0
  27. package/dist/cjs/mnemonic/mnemonic.js.map +1 -1
  28. package/dist/cjs/pq-signer.js +51 -0
  29. package/dist/cjs/pq-signer.js.map +1 -1
  30. package/dist/cjs/signer.js.map +1 -1
  31. package/dist/cjs/signing.js +22 -0
  32. package/dist/cjs/signing.js.map +1 -1
  33. package/dist/cjs/transaction.js +8 -0
  34. package/dist/cjs/transaction.js.map +1 -1
  35. package/dist/cjs/types/block.js +28 -0
  36. package/dist/cjs/types/block.js.map +1 -1
  37. package/dist/cjs/types/statedelta.js +17 -0
  38. package/dist/cjs/types/statedelta.js.map +1 -1
  39. package/dist/cjs/utils/utils.js +14 -1
  40. package/dist/cjs/utils/utils.js.map +1 -1
  41. package/dist/esm/appAccess.js +4 -0
  42. package/dist/esm/appAccess.js.map +1 -1
  43. package/dist/esm/client/v2/algod/getPeers.js +14 -0
  44. package/dist/esm/client/v2/algod/getPeers.js.map +1 -0
  45. package/dist/esm/client/v2/algod/models/types.js +149 -3
  46. package/dist/esm/client/v2/algod/models/types.js.map +1 -1
  47. package/dist/esm/client/v2/indexer/models/types.js +161 -11
  48. package/dist/esm/client/v2/indexer/models/types.js.map +1 -1
  49. package/dist/esm/composer.js +4 -6
  50. package/dist/esm/composer.js.map +1 -1
  51. package/dist/esm/ed25519-signer.js +18 -0
  52. package/dist/esm/ed25519-signer.js.map +1 -1
  53. package/dist/esm/encoding/address.js +9 -0
  54. package/dist/esm/encoding/address.js.map +1 -1
  55. package/dist/esm/falcon-signer.js +16 -0
  56. package/dist/esm/falcon-signer.js.map +1 -1
  57. package/dist/esm/heartbeat.js +8 -1
  58. package/dist/esm/heartbeat.js.map +1 -1
  59. package/dist/esm/logicsig.js +86 -6
  60. package/dist/esm/logicsig.js.map +1 -1
  61. package/dist/esm/makeTxn.js +11 -2
  62. package/dist/esm/makeTxn.js.map +1 -1
  63. package/dist/esm/mnemonic/mnemonic.js +2 -0
  64. package/dist/esm/mnemonic/mnemonic.js.map +1 -1
  65. package/dist/esm/pq-signer.js +51 -0
  66. package/dist/esm/pq-signer.js.map +1 -1
  67. package/dist/esm/signer.js.map +1 -1
  68. package/dist/esm/signing.js +22 -0
  69. package/dist/esm/signing.js.map +1 -1
  70. package/dist/esm/transaction.js +8 -0
  71. package/dist/esm/transaction.js.map +1 -1
  72. package/dist/esm/types/block.js +28 -0
  73. package/dist/esm/types/block.js.map +1 -1
  74. package/dist/esm/types/statedelta.js +17 -0
  75. package/dist/esm/types/statedelta.js.map +1 -1
  76. package/dist/esm/utils/utils.js +12 -0
  77. package/dist/esm/utils/utils.js.map +1 -1
  78. package/dist/types/client/v2/algod/getPeers.d.ts +7 -0
  79. package/dist/types/client/v2/algod/models/types.d.ts +90 -3
  80. package/dist/types/client/v2/indexer/models/types.d.ts +114 -7
  81. package/dist/types/composer.d.ts +3 -3
  82. package/dist/types/ed25519-signer.d.ts +29 -0
  83. package/dist/types/encoding/address.d.ts +9 -0
  84. package/dist/types/falcon-signer.d.ts +29 -2
  85. package/dist/types/heartbeat.d.ts +2 -0
  86. package/dist/types/logicsig.d.ts +91 -6
  87. package/dist/types/makeTxn.d.ts +8 -2
  88. package/dist/types/mnemonic/mnemonic.d.ts +2 -0
  89. package/dist/types/pq-signer.d.ts +39 -2
  90. package/dist/types/signer.d.ts +76 -5
  91. package/dist/types/signing.d.ts +22 -0
  92. package/dist/types/transaction.d.ts +1 -0
  93. package/dist/types/types/block.d.ts +22 -0
  94. package/dist/types/types/statedelta.d.ts +18 -0
  95. package/dist/types/types/transactions/base.d.ts +10 -0
  96. package/dist/types/utils/utils.d.ts +1 -0
  97. package/package.json +2 -2
  98. package/src/appAccess.ts +5 -0
  99. package/src/client/v2/algod/models/types.ts +234 -0
  100. package/src/client/v2/indexer/models/types.ts +280 -8
  101. package/src/composer.ts +7 -11
  102. package/src/ed25519-signer.ts +29 -0
  103. package/src/encoding/address.ts +9 -0
  104. package/src/falcon-signer.ts +31 -1
  105. package/src/heartbeat.ts +11 -0
  106. package/src/logicsig.ts +93 -6
  107. package/src/makeTxn.ts +13 -4
  108. package/src/mnemonic/mnemonic.ts +2 -0
  109. package/src/pq-signer.ts +71 -1
  110. package/src/signer.ts +77 -5
  111. package/src/signing.ts +22 -0
  112. package/src/transaction.ts +10 -0
  113. package/src/types/block.ts +54 -0
  114. package/src/types/statedelta.ts +34 -0
  115. package/src/types/transactions/base.ts +11 -0
  116. package/src/utils/utils.ts +13 -0
@@ -112,6 +112,10 @@ export class TxnCommitments implements Encodable {
112
112
  key: 'txn256', // sha256Commitment
113
113
  valueSchema: new FixedLengthByteArraySchema(32),
114
114
  },
115
+ {
116
+ key: 'txn512', // sha512Commitment
117
+ valueSchema: new FixedLengthByteArraySchema(64),
118
+ },
115
119
  ])
116
120
  );
117
121
 
@@ -126,12 +130,19 @@ export class TxnCommitments implements Encodable {
126
130
  */
127
131
  public sha256Commitment: Uint8Array;
128
132
 
133
+ /**
134
+ * Root of transaction vector commitment merkle tree using SHA512 hash function
135
+ */
136
+ public sha512Commitment: Uint8Array;
137
+
129
138
  constructor(params: {
130
139
  nativeSha512_256Commitment: Uint8Array;
131
140
  sha256Commitment: Uint8Array;
141
+ sha512Commitment?: Uint8Array;
132
142
  }) {
133
143
  this.nativeSha512_256Commitment = params.nativeSha512_256Commitment;
134
144
  this.sha256Commitment = params.sha256Commitment;
145
+ this.sha512Commitment = params.sha512Commitment ?? new Uint8Array(64);
135
146
  }
136
147
 
137
148
  // eslint-disable-next-line class-methods-use-this
@@ -143,6 +154,7 @@ export class TxnCommitments implements Encodable {
143
154
  return new Map<string, unknown>([
144
155
  ['txn', this.nativeSha512_256Commitment],
145
156
  ['txn256', this.sha256Commitment],
157
+ ['txn512', this.sha512Commitment],
146
158
  ]);
147
159
  }
148
160
 
@@ -153,6 +165,7 @@ export class TxnCommitments implements Encodable {
153
165
  return new TxnCommitments({
154
166
  nativeSha512_256Commitment: data.get('txn'),
155
167
  sha256Commitment: data.get('txn256'),
168
+ sha512Commitment: data.get('txn512'),
156
169
  });
157
170
  }
158
171
  }
@@ -509,6 +522,10 @@ export class BlockHeader implements Encodable {
509
522
  key: 'prev', // branch
510
523
  valueSchema: new BlockHashSchema(),
511
524
  },
525
+ {
526
+ key: 'prev512', // branch512
527
+ valueSchema: new FixedLengthByteArraySchema(64),
528
+ },
512
529
  {
513
530
  key: 'seed', // seed
514
531
  valueSchema: new ByteArraySchema(),
@@ -574,6 +591,14 @@ export class BlockHeader implements Encodable {
574
591
  valueSchema: ParticipationUpdates.encodingSchema,
575
592
  embedded: true,
576
593
  },
594
+ {
595
+ key: 'ld', // load
596
+ valueSchema: new Uint64Schema(),
597
+ },
598
+ {
599
+ key: 'ct', // congestionTax
600
+ valueSchema: new Uint64Schema(),
601
+ },
577
602
  ])
578
603
  );
579
604
 
@@ -587,6 +612,11 @@ export class BlockHeader implements Encodable {
587
612
  */
588
613
  public branch: Uint8Array;
589
614
 
615
+ /**
616
+ * Previous block hash, using SHA-512
617
+ */
618
+ public branch512: Uint8Array;
619
+
590
620
  /**
591
621
  * Sortition seed
592
622
  */
@@ -655,9 +685,22 @@ export class BlockHeader implements Encodable {
655
685
 
656
686
  public participationUpdates: ParticipationUpdates;
657
687
 
688
+ /**
689
+ * Load is the degree to which a block is full. Currently, it is based on the number of bytes in
690
+ * the final block, compared to the maximum allowed. It is expressed as a fixed-point integer with
691
+ * 6 digits of precision. So, 1,000,000 is a completely full block.
692
+ */
693
+ public load: bigint;
694
+
695
+ /**
696
+ * CongestionTax is the fee required, beyond the MinFee, for "normal" transactions in this block.
697
+ */
698
+ public congestionTax: bigint;
699
+
658
700
  public constructor(params: {
659
701
  round: bigint;
660
702
  branch: Uint8Array;
703
+ branch512?: Uint8Array;
661
704
  seed: Uint8Array;
662
705
  txnCommitments: TxnCommitments;
663
706
  timestamp: bigint;
@@ -673,9 +716,12 @@ export class BlockHeader implements Encodable {
673
716
  txnCounter: bigint;
674
717
  stateproofTracking: Map<number, StateProofTrackingData>;
675
718
  participationUpdates: ParticipationUpdates;
719
+ load?: bigint;
720
+ congestionTax?: bigint;
676
721
  }) {
677
722
  this.round = params.round;
678
723
  this.branch = params.branch;
724
+ this.branch512 = params.branch512 ?? new Uint8Array(64);
679
725
  this.seed = params.seed;
680
726
  this.txnCommitments = params.txnCommitments;
681
727
  this.timestamp = params.timestamp;
@@ -691,6 +737,8 @@ export class BlockHeader implements Encodable {
691
737
  this.txnCounter = params.txnCounter;
692
738
  this.stateproofTracking = params.stateproofTracking;
693
739
  this.participationUpdates = params.participationUpdates;
740
+ this.load = params.load ?? BigInt(0);
741
+ this.congestionTax = params.congestionTax ?? BigInt(0);
694
742
  }
695
743
 
696
744
  // eslint-disable-next-line class-methods-use-this
@@ -702,6 +750,7 @@ export class BlockHeader implements Encodable {
702
750
  const data = new Map<string, unknown>([
703
751
  ['rnd', this.round],
704
752
  ['prev', this.branch],
753
+ ['prev512', this.branch512],
705
754
  ['seed', this.seed],
706
755
  ['ts', this.timestamp],
707
756
  ['gen', this.genesisID],
@@ -711,6 +760,8 @@ export class BlockHeader implements Encodable {
711
760
  ['bi', this.bonus],
712
761
  ['pp', this.proposerPayout],
713
762
  ['tc', this.txnCounter],
763
+ ['ld', this.load],
764
+ ['ct', this.congestionTax],
714
765
  [
715
766
  'spt',
716
767
  convertMap(this.stateproofTracking, (key, value) => [
@@ -736,6 +787,7 @@ export class BlockHeader implements Encodable {
736
787
  return new BlockHeader({
737
788
  round: data.get('rnd'),
738
789
  branch: data.get('prev'),
790
+ branch512: data.get('prev512'),
739
791
  seed: data.get('seed'),
740
792
  txnCommitments: TxnCommitments.fromEncodingData(data),
741
793
  timestamp: data.get('ts'),
@@ -757,6 +809,8 @@ export class BlockHeader implements Encodable {
757
809
  ]
758
810
  ),
759
811
  participationUpdates: ParticipationUpdates.fromEncodingData(data),
812
+ load: data.get('ld'),
813
+ congestionTax: data.get('ct'),
760
814
  });
761
815
  }
762
816
  }
@@ -139,6 +139,10 @@ export class AppParams implements Encodable {
139
139
  { key: 'lsch', valueSchema: StateSchema.encodingSchema }, // localStateSchema
140
140
  { key: 'gsch', valueSchema: StateSchema.encodingSchema }, // globalStateSchema
141
141
  { key: 'epp', valueSchema: new Uint64Schema() }, // extraProgramPages
142
+ { key: 'v', valueSchema: new Uint64Schema() }, // version
143
+ { key: 'ss', valueSchema: new AddressSchema() }, // sizeSponsor
144
+ { key: 'fbr', valueSchema: new BooleanSchema() }, // foreignBoxReads
145
+ { key: 'fba', valueSchema: new BooleanSchema() }, // familyBoxAccess
142
146
  ])
143
147
  );
144
148
 
@@ -148,6 +152,20 @@ export class AppParams implements Encodable {
148
152
  public localStateSchema: StateSchema;
149
153
  public globalStateSchema: StateSchema;
150
154
  public extraProgramPages: number;
155
+ public version: bigint;
156
+ /**
157
+ * If non-zero, the account that must hold MBR for extra program pages and the
158
+ * global schema.
159
+ */
160
+ public sizeSponsor: Address;
161
+ /**
162
+ * When true, any app may read this app's boxes.
163
+ */
164
+ public foreignBoxReads: boolean;
165
+ /**
166
+ * When true, apps with the same creator may read and write this app's boxes.
167
+ */
168
+ public familyBoxAccess: boolean;
151
169
 
152
170
  constructor(params: {
153
171
  approvalProgram: Uint8Array;
@@ -156,6 +174,10 @@ export class AppParams implements Encodable {
156
174
  localStateSchema: StateSchema;
157
175
  globalStateSchema: StateSchema;
158
176
  extraProgramPages: number;
177
+ version?: bigint;
178
+ sizeSponsor?: Address;
179
+ foreignBoxReads?: boolean;
180
+ familyBoxAccess?: boolean;
159
181
  }) {
160
182
  this.approvalProgram = params.approvalProgram;
161
183
  this.clearStateProgram = params.clearStateProgram;
@@ -163,6 +185,10 @@ export class AppParams implements Encodable {
163
185
  this.localStateSchema = params.localStateSchema;
164
186
  this.globalStateSchema = params.globalStateSchema;
165
187
  this.extraProgramPages = params.extraProgramPages;
188
+ this.version = params.version ?? BigInt(0);
189
+ this.sizeSponsor = params.sizeSponsor ?? Address.zeroAddress();
190
+ this.foreignBoxReads = params.foreignBoxReads ?? false;
191
+ this.familyBoxAccess = params.familyBoxAccess ?? false;
166
192
  }
167
193
 
168
194
  // eslint-disable-next-line class-methods-use-this
@@ -178,6 +204,10 @@ export class AppParams implements Encodable {
178
204
  ['lsch', this.localStateSchema.toEncodingData()],
179
205
  ['gsch', this.globalStateSchema.toEncodingData()],
180
206
  ['epp', this.extraProgramPages],
207
+ ['v', this.version],
208
+ ['ss', this.sizeSponsor],
209
+ ['fbr', this.foreignBoxReads],
210
+ ['fba', this.familyBoxAccess],
181
211
  ]);
182
212
  }
183
213
 
@@ -195,6 +225,10 @@ export class AppParams implements Encodable {
195
225
  localStateSchema: StateSchema.fromEncodingData(data.get('lsch')),
196
226
  globalStateSchema: StateSchema.fromEncodingData(data.get('gsch')),
197
227
  extraProgramPages: Number(data.get('epp')),
228
+ version: data.get('v'),
229
+ sizeSponsor: data.get('ss'),
230
+ foreignBoxReads: data.get('fbr'),
231
+ familyBoxAccess: data.get('fba'),
198
232
  });
199
233
  }
200
234
  }
@@ -592,6 +592,17 @@ export interface HeartbeatTransactionParams {
592
592
  * Must match hbAddress account's current KeyDilution.
593
593
  */
594
594
  keyDilution: bigint;
595
+
596
+ /**
597
+ * Requests the challenge fee discount: when set, the required fee is reduced
598
+ * by one min fee. The network verifies that hbAddress is actually under
599
+ * challenge before granting it, and a heartbeat claiming the discount may not
600
+ * carry any extra fields (note, lease, group, etc.).
601
+ *
602
+ * Only allowed once transaction size pricing is enabled. Before that, the
603
+ * discount was inferred from an underpaid singleton heartbeat instead.
604
+ */
605
+ challengeDiscount?: boolean;
595
606
  }
596
607
 
597
608
  /**
@@ -205,3 +205,16 @@ export function ensureUint64(value: unknown): bigint {
205
205
  }
206
206
  return bigIntValue;
207
207
  }
208
+
209
+ export function isEmptyObject(obj: any) {
210
+ if (!obj || typeof obj !== 'object') return false;
211
+
212
+ for (const key in obj) {
213
+ if (Object.prototype.hasOwnProperty.call(obj, key)) {
214
+ if (obj[key] !== undefined) {
215
+ return false;
216
+ }
217
+ }
218
+ }
219
+ return true;
220
+ }