algosdk 1.24.1 → 2.1.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 (222) hide show
  1. package/README.md +4 -4
  2. package/dist/browser/algosdk.min.js +1 -1
  3. package/dist/browser/algosdk.min.js.LICENSE.txt +0 -18
  4. package/dist/browser/algosdk.min.js.map +1 -1
  5. package/dist/cjs/abi/abi_type.js +6 -5
  6. package/dist/cjs/abi/abi_type.js.map +1 -1
  7. package/dist/cjs/bid.js +6 -5
  8. package/dist/cjs/bid.js.map +1 -1
  9. package/dist/cjs/client/client.js +4 -3
  10. package/dist/cjs/client/client.js.map +1 -1
  11. package/dist/cjs/client/kmd.js +12 -11
  12. package/dist/cjs/client/kmd.js.map +1 -1
  13. package/dist/cjs/client/urlTokenBaseHTTPClient.js +2 -1
  14. package/dist/cjs/client/urlTokenBaseHTTPClient.js.map +1 -1
  15. package/dist/cjs/client/v2/algod/algod.js +17 -1
  16. package/dist/cjs/client/v2/algod/algod.js.map +1 -1
  17. package/dist/cjs/client/v2/algod/compile.js +2 -1
  18. package/dist/cjs/client/v2/algod/compile.js.map +1 -1
  19. package/dist/cjs/client/v2/algod/disassemble.js +46 -0
  20. package/dist/cjs/client/v2/algod/disassemble.js.map +1 -0
  21. package/dist/cjs/client/v2/algod/dryrun.js +2 -1
  22. package/dist/cjs/client/v2/algod/dryrun.js.map +1 -1
  23. package/dist/cjs/client/v2/algod/getApplicationBoxByName.js +2 -1
  24. package/dist/cjs/client/v2/algod/getApplicationBoxByName.js.map +1 -1
  25. package/dist/cjs/client/v2/algod/models/types.js +182 -143
  26. package/dist/cjs/client/v2/algod/models/types.js.map +1 -1
  27. package/dist/cjs/client/v2/algod/sendRawTransaction.js +2 -1
  28. package/dist/cjs/client/v2/algod/sendRawTransaction.js.map +1 -1
  29. package/dist/cjs/client/v2/basemodel.js +3 -2
  30. package/dist/cjs/client/v2/basemodel.js.map +1 -1
  31. package/dist/cjs/client/v2/indexer/lookupAccountTransactions.js +2 -1
  32. package/dist/cjs/client/v2/indexer/lookupAccountTransactions.js.map +1 -1
  33. package/dist/cjs/client/v2/indexer/lookupApplicationBoxByIDandName.js +2 -1
  34. package/dist/cjs/client/v2/indexer/lookupApplicationBoxByIDandName.js.map +1 -1
  35. package/dist/cjs/client/v2/indexer/lookupAssetTransactions.js +0 -7
  36. package/dist/cjs/client/v2/indexer/lookupAssetTransactions.js.map +1 -1
  37. package/dist/cjs/client/v2/indexer/models/types.js +39 -38
  38. package/dist/cjs/client/v2/indexer/models/types.js.map +1 -1
  39. package/dist/cjs/composer.js +7 -6
  40. package/dist/cjs/composer.js.map +1 -1
  41. package/dist/cjs/dryrun.js +22 -12
  42. package/dist/cjs/dryrun.js.map +1 -1
  43. package/dist/cjs/encoding/address.js +2 -1
  44. package/dist/cjs/encoding/address.js.map +1 -1
  45. package/dist/cjs/encoding/bigint.js +2 -1
  46. package/dist/cjs/encoding/bigint.js.map +1 -1
  47. package/dist/cjs/encoding/uint64.js +14 -8
  48. package/dist/cjs/encoding/uint64.js.map +1 -1
  49. package/dist/cjs/group.js +6 -5
  50. package/dist/cjs/group.js.map +1 -1
  51. package/dist/cjs/logicsig.js +24 -21
  52. package/dist/cjs/logicsig.js.map +1 -1
  53. package/dist/cjs/main.js +8 -9
  54. package/dist/cjs/main.js.map +1 -1
  55. package/dist/cjs/makeTxn.js +1 -193
  56. package/dist/cjs/makeTxn.js.map +1 -1
  57. package/dist/cjs/multisig.js +6 -5
  58. package/dist/cjs/multisig.js.map +1 -1
  59. package/dist/cjs/transaction.js +64 -63
  60. package/dist/cjs/transaction.js.map +1 -1
  61. package/dist/cjs/types/transactions/encoded.js +0 -3
  62. package/dist/cjs/types/transactions/encoded.js.map +1 -1
  63. package/dist/cjs/utils/utils.js +5 -1
  64. package/dist/cjs/utils/utils.js.map +1 -1
  65. package/dist/esm/abi/abi_type.js +1 -0
  66. package/dist/esm/abi/abi_type.js.map +1 -1
  67. package/dist/esm/bid.js +1 -0
  68. package/dist/esm/bid.js.map +1 -1
  69. package/dist/esm/client/client.js +1 -0
  70. package/dist/esm/client/client.js.map +1 -1
  71. package/dist/esm/client/kmd.js +1 -0
  72. package/dist/esm/client/kmd.js.map +1 -1
  73. package/dist/esm/client/urlTokenBaseHTTPClient.js +1 -0
  74. package/dist/esm/client/urlTokenBaseHTTPClient.js.map +1 -1
  75. package/dist/esm/client/v2/algod/algod.js +17 -1
  76. package/dist/esm/client/v2/algod/algod.js.map +1 -1
  77. package/dist/esm/client/v2/algod/compile.js +1 -0
  78. package/dist/esm/client/v2/algod/compile.js.map +1 -1
  79. package/dist/esm/client/v2/algod/disassemble.js +38 -0
  80. package/dist/esm/client/v2/algod/disassemble.js.map +1 -0
  81. package/dist/esm/client/v2/algod/dryrun.js +1 -0
  82. package/dist/esm/client/v2/algod/dryrun.js.map +1 -1
  83. package/dist/esm/client/v2/algod/getApplicationBoxByName.js +1 -0
  84. package/dist/esm/client/v2/algod/getApplicationBoxByName.js.map +1 -1
  85. package/dist/esm/client/v2/algod/models/types.js +161 -120
  86. package/dist/esm/client/v2/algod/models/types.js.map +1 -1
  87. package/dist/esm/client/v2/algod/sendRawTransaction.js +1 -0
  88. package/dist/esm/client/v2/algod/sendRawTransaction.js.map +1 -1
  89. package/dist/esm/client/v2/basemodel.js +1 -0
  90. package/dist/esm/client/v2/basemodel.js.map +1 -1
  91. package/dist/esm/client/v2/indexer/lookupAccountTransactions.js +1 -0
  92. package/dist/esm/client/v2/indexer/lookupAccountTransactions.js.map +1 -1
  93. package/dist/esm/client/v2/indexer/lookupApplicationBoxByIDandName.js +1 -0
  94. package/dist/esm/client/v2/indexer/lookupApplicationBoxByIDandName.js.map +1 -1
  95. package/dist/esm/client/v2/indexer/lookupAssetTransactions.js +0 -7
  96. package/dist/esm/client/v2/indexer/lookupAssetTransactions.js.map +1 -1
  97. package/dist/esm/client/v2/indexer/models/types.js +1 -0
  98. package/dist/esm/client/v2/indexer/models/types.js.map +1 -1
  99. package/dist/esm/composer.js +5 -4
  100. package/dist/esm/composer.js.map +1 -1
  101. package/dist/esm/dryrun.js +17 -7
  102. package/dist/esm/dryrun.js.map +1 -1
  103. package/dist/esm/encoding/address.js +1 -0
  104. package/dist/esm/encoding/address.js.map +1 -1
  105. package/dist/esm/encoding/bigint.js +1 -0
  106. package/dist/esm/encoding/bigint.js.map +1 -1
  107. package/dist/esm/encoding/uint64.js +14 -8
  108. package/dist/esm/encoding/uint64.js.map +1 -1
  109. package/dist/esm/group.js +1 -0
  110. package/dist/esm/group.js.map +1 -1
  111. package/dist/esm/logicsig.js +15 -12
  112. package/dist/esm/logicsig.js.map +1 -1
  113. package/dist/esm/main.js +2 -4
  114. package/dist/esm/main.js.map +1 -1
  115. package/dist/esm/makeTxn.js +0 -185
  116. package/dist/esm/makeTxn.js.map +1 -1
  117. package/dist/esm/multisig.js +1 -0
  118. package/dist/esm/multisig.js.map +1 -1
  119. package/dist/esm/transaction.js +1 -0
  120. package/dist/esm/transaction.js.map +1 -1
  121. package/dist/esm/types/transactions/encoded.js +0 -3
  122. package/dist/esm/types/transactions/encoded.js.map +1 -1
  123. package/dist/esm/utils/utils.js +5 -1
  124. package/dist/esm/utils/utils.js.map +1 -1
  125. package/dist/types/client/v2/algod/algod.d.ts +15 -1
  126. package/dist/types/client/v2/algod/disassemble.d.ts +20 -0
  127. package/dist/types/client/v2/algod/models/types.d.ts +122 -67
  128. package/dist/types/client/v2/basemodel.d.ts +0 -3
  129. package/dist/types/client/v2/indexer/lookupAssetTransactions.d.ts +0 -4
  130. package/dist/types/composer.d.ts +7 -1
  131. package/dist/types/logicsig.d.ts +10 -10
  132. package/dist/types/main.d.ts +1 -3
  133. package/dist/types/makeTxn.d.ts +1 -147
  134. package/dist/types/types/transactions/encoded.d.ts +1 -16
  135. package/package.json +2 -3
  136. package/src/abi/abi_type.ts +1 -0
  137. package/src/bid.ts +1 -0
  138. package/src/client/client.ts +1 -0
  139. package/src/client/kmd.ts +1 -0
  140. package/src/client/urlTokenBaseHTTPClient.ts +1 -0
  141. package/src/client/v2/algod/algod.ts +19 -2
  142. package/src/client/v2/algod/compile.ts +1 -0
  143. package/src/client/v2/algod/disassemble.ts +46 -0
  144. package/src/client/v2/algod/dryrun.ts +1 -0
  145. package/src/client/v2/algod/getApplicationBoxByName.ts +1 -0
  146. package/src/client/v2/algod/models/types.ts +319 -249
  147. package/src/client/v2/algod/sendRawTransaction.ts +1 -0
  148. package/src/client/v2/basemodel.ts +2 -0
  149. package/src/client/v2/indexer/lookupAccountTransactions.ts +1 -0
  150. package/src/client/v2/indexer/lookupApplicationBoxByIDandName.ts +1 -0
  151. package/src/client/v2/indexer/lookupAssetTransactions.ts +0 -8
  152. package/src/client/v2/indexer/models/types.ts +1 -0
  153. package/src/composer.ts +16 -3
  154. package/src/dryrun.ts +14 -13
  155. package/src/encoding/address.ts +1 -0
  156. package/src/encoding/bigint.ts +2 -0
  157. package/src/encoding/uint64.ts +16 -10
  158. package/src/group.ts +1 -0
  159. package/src/logicsig.ts +26 -13
  160. package/src/main.ts +3 -5
  161. package/src/makeTxn.ts +0 -421
  162. package/src/multisig.ts +1 -0
  163. package/src/transaction.ts +1 -0
  164. package/src/types/transactions/encoded.ts +2 -17
  165. package/src/utils/utils.ts +3 -0
  166. package/dist/cjs/client/algod.js +0 -295
  167. package/dist/cjs/client/algod.js.map +0 -1
  168. package/dist/cjs/logic/langspec.json +0 -2014
  169. package/dist/cjs/logic/logic.js +0 -262
  170. package/dist/cjs/logic/logic.js.map +0 -1
  171. package/dist/cjs/logicTemplates/dynamicfee.js +0 -192
  172. package/dist/cjs/logicTemplates/dynamicfee.js.map +0 -1
  173. package/dist/cjs/logicTemplates/htlc.js +0 -145
  174. package/dist/cjs/logicTemplates/htlc.js.map +0 -1
  175. package/dist/cjs/logicTemplates/index.js +0 -19
  176. package/dist/cjs/logicTemplates/index.js.map +0 -1
  177. package/dist/cjs/logicTemplates/limitorder.js +0 -167
  178. package/dist/cjs/logicTemplates/limitorder.js.map +0 -1
  179. package/dist/cjs/logicTemplates/periodicpayment.js +0 -163
  180. package/dist/cjs/logicTemplates/periodicpayment.js.map +0 -1
  181. package/dist/cjs/logicTemplates/split.js +0 -154
  182. package/dist/cjs/logicTemplates/split.js.map +0 -1
  183. package/dist/cjs/logicTemplates/templates.js +0 -67
  184. package/dist/cjs/logicTemplates/templates.js.map +0 -1
  185. package/dist/esm/client/algod.js +0 -295
  186. package/dist/esm/client/algod.js.map +0 -1
  187. package/dist/esm/logic/langspec.json +0 -2014
  188. package/dist/esm/logic/logic.js +0 -249
  189. package/dist/esm/logic/logic.js.map +0 -1
  190. package/dist/esm/logicTemplates/dynamicfee.js +0 -192
  191. package/dist/esm/logicTemplates/dynamicfee.js.map +0 -1
  192. package/dist/esm/logicTemplates/htlc.js +0 -145
  193. package/dist/esm/logicTemplates/htlc.js.map +0 -1
  194. package/dist/esm/logicTemplates/index.js +0 -19
  195. package/dist/esm/logicTemplates/index.js.map +0 -1
  196. package/dist/esm/logicTemplates/limitorder.js +0 -167
  197. package/dist/esm/logicTemplates/limitorder.js.map +0 -1
  198. package/dist/esm/logicTemplates/periodicpayment.js +0 -163
  199. package/dist/esm/logicTemplates/periodicpayment.js.map +0 -1
  200. package/dist/esm/logicTemplates/split.js +0 -154
  201. package/dist/esm/logicTemplates/split.js.map +0 -1
  202. package/dist/esm/logicTemplates/templates.js +0 -67
  203. package/dist/esm/logicTemplates/templates.js.map +0 -1
  204. package/dist/types/client/algod.d.ts +0 -162
  205. package/dist/types/logic/logic.d.ts +0 -45
  206. package/dist/types/logicTemplates/dynamicfee.d.ts +0 -59
  207. package/dist/types/logicTemplates/htlc.d.ts +0 -51
  208. package/dist/types/logicTemplates/index.d.ts +0 -16
  209. package/dist/types/logicTemplates/limitorder.d.ts +0 -70
  210. package/dist/types/logicTemplates/periodicpayment.d.ts +0 -58
  211. package/dist/types/logicTemplates/split.d.ts +0 -57
  212. package/dist/types/logicTemplates/templates.d.ts +0 -6
  213. package/src/client/algod.js +0 -365
  214. package/src/logic/langspec.json +0 -2014
  215. package/src/logic/logic.ts +0 -316
  216. package/src/logicTemplates/dynamicfee.js +0 -219
  217. package/src/logicTemplates/htlc.js +0 -165
  218. package/src/logicTemplates/index.js +0 -20
  219. package/src/logicTemplates/limitorder.js +0 -227
  220. package/src/logicTemplates/periodicpayment.js +0 -208
  221. package/src/logicTemplates/split.js +0 -208
  222. package/src/logicTemplates/templates.js +0 -78
@@ -1,167 +0,0 @@
1
- const address = require('../encoding/address');
2
- const makeTxn = require('../makeTxn');
3
- const group = require('../group');
4
- const logic = require('../logic/logic');
5
- const logicSig = require('../logicsig');
6
- const nacl = require('../nacl/naclWrappers');
7
- const templates = require('./templates');
8
- const utils = require('../utils/utils');
9
- class LimitOrder {
10
- /**
11
- * MakeLimitOrder allows a user to exchange some number of assets for some number of algos.
12
- * Fund the contract with some number of Algos to limit the maximum number of
13
- * Algos you're willing to trade for some other asset.
14
- *
15
- * Works on two cases:
16
- * * trading Algos for some other asset
17
- * * closing out Algos back to the originator after a timeout
18
- *
19
- * trade case, a 2 transaction group:
20
- * gtxn[0] (this txn) Algos from Me to Other
21
- * gtxn[1] asset from Other to Me
22
- *
23
- * We want to get _at least_ some amount of the other asset per our Algos
24
- * gtxn[1].AssetAmount / gtxn[0].Amount >= N / D
25
- * ===
26
- * gtxn[1].AssetAmount * D >= gtxn[0].Amount * N
27
- *
28
- * close-out case:
29
- * txn alone, close out value after timeout
30
- *
31
- * @deprecated This class will be removed in v2.
32
- *
33
- * Constructor Parameters:
34
- * @param {string} owner: the address to refund funds to on timeout
35
- * @param {int} assetid: the ID of the transferred asset
36
- * @param {int} ratn: exchange rate (N asset per D Algos, or better)
37
- * @param {int} ratd: exchange rate (N asset per D Algos, or better)
38
- * @param {int} expiryRound: the round at which the account expires
39
- * @param {int} minTrade: the minimum amount (of Algos) to be traded away
40
- * @param {int} maxFee: maximum fee used by the limit order transaction
41
- * @returns {LimitOrder}
42
- */
43
- constructor(owner, assetid, ratn, ratd, expiryRound, minTrade, maxFee) {
44
- // don't need to validate owner - it will be validated by template.insert
45
- if (!Number.isSafeInteger(assetid) || assetid < 0)
46
- throw Error('assetid must be a positive number and smaller than 2^53-1');
47
- if (!Number.isSafeInteger(ratn) || ratn < 0)
48
- throw Error('ratn must be a positive number and smaller than 2^53-1');
49
- if (!Number.isSafeInteger(ratd) || ratd < 0)
50
- throw Error('ratd must be a positive number and smaller than 2^53-1');
51
- if (!Number.isSafeInteger(expiryRound) || expiryRound < 0)
52
- throw Error('expiryRound must be a positive number and smaller than 2^53-1');
53
- if (!Number.isSafeInteger(minTrade) || minTrade < 0)
54
- throw Error('minTrade must be a positive number and smaller than 2^53-1');
55
- if (!Number.isSafeInteger(maxFee) || maxFee < 0)
56
- throw Error('maxFee must be a positive number and smaller than 2^53-1');
57
- const referenceProgramB64 = 'ASAKAAEFAgYEBwgJCiYBIP68oLsUSlpOp7Q4pGgayA5soQW8tgf8VlMlyVaV9qITMRYiEjEQIxIQMQEkDhAyBCMSQABVMgQlEjEIIQQNEDEJMgMSEDMBECEFEhAzAREhBhIQMwEUKBIQMwETMgMSEDMBEiEHHTUCNQExCCEIHTUENQM0ATQDDUAAJDQBNAMSNAI0BA8QQAAWADEJKBIxAiEJDRAxBzIDEhAxCCISEBA=';
58
- const referenceProgramBytes = Buffer.from(referenceProgramB64, 'base64');
59
- const referenceOffsets = [
60
- 5 /* minTrade */,
61
- 7 /* assetID */,
62
- 9 /* ratd */,
63
- 10 /* ratn */,
64
- 11 /* expiryRound */,
65
- 12 /* owner */,
66
- 16,
67
- ];
68
- const injectionVector = [
69
- maxFee,
70
- minTrade,
71
- assetid,
72
- ratd,
73
- ratn,
74
- expiryRound,
75
- owner,
76
- ];
77
- const injectionTypes = [
78
- templates.valTypes.INT,
79
- templates.valTypes.INT,
80
- templates.valTypes.INT,
81
- templates.valTypes.INT,
82
- templates.valTypes.INT,
83
- templates.valTypes.INT,
84
- templates.valTypes.ADDRESS,
85
- ];
86
- const injectedBytes = templates.inject(referenceProgramBytes, referenceOffsets, injectionVector, injectionTypes);
87
- this.programBytes = injectedBytes;
88
- const lsig = new logicSig.LogicSig(injectedBytes, undefined);
89
- this.address = lsig.address();
90
- this.owner = owner;
91
- this.assetid = assetid;
92
- }
93
- /**
94
- * returns the program bytes
95
- * @returns {Uint8Array}
96
- */
97
- getProgram() {
98
- return this.programBytes;
99
- }
100
- /**
101
- * returns the string address of the contract
102
- * @returns {string}
103
- */
104
- getAddress() {
105
- return this.address;
106
- }
107
- }
108
- /**
109
- * returns a group transactions array which transfer funds according to the contract's ratio
110
- *
111
- * @deprecated This feature will be removed in v2.
112
- *
113
- * @param {Uint8Array} contract: byteform of the contract from the payer
114
- * @param {int} assetAmount: the amount of assets to be sent
115
- * @param {int} microAlgoAmount: number of microAlgos to transfer
116
- * @param {Uint8Array} secretKey: secret key for signing transaction
117
- * @param {int} fee: the fee per byte to pay in microAlgos
118
- * @param {int} firstRound: the first round on which these txns will be valid
119
- * @param {int} lastRound: the last round on which these txns will be valid
120
- * @param {string} genesisHash: the b64-encoded genesis hash indicating the network for this transaction
121
- * @returns {Uint8Array}
122
- * the first payment sends money (Algos) from contract to the recipient (we'll call him Buyer), closing the rest of the account to Owner
123
- * the second payment sends money (the asset) from Buyer to the Owner
124
- * these transactions will be rejected if they do not meet the restrictions set by the contract
125
- * @throws error if arguments fail contract validation
126
- */
127
- function getSwapAssetsTransaction(contract, assetAmount, microAlgoAmount, secretKey, fee, firstRound, lastRound, genesisHash) {
128
- const buyerKeyPair = nacl.keyPairFromSecretKey(secretKey);
129
- const buyerAddr = address.encodeAddress(buyerKeyPair.publicKey);
130
- const programOutputs = logic.readProgram(contract, undefined);
131
- const ints = programOutputs[0];
132
- const byteArrays = programOutputs[1];
133
- let noCloseRemainder;
134
- let noAssetRevocationTarget;
135
- const contractAssetID = ints[6];
136
- const contractOwner = address.encodeAddress(byteArrays[0]);
137
- const lsig = logicSig.makeLogicSig(contract, undefined);
138
- const contractAddress = lsig.address();
139
- const algosForAssets = makeTxn.makePaymentTxn(contractAddress, buyerAddr, fee, microAlgoAmount, noCloseRemainder, firstRound, lastRound, undefined, genesisHash, undefined);
140
- const assetsForAlgos = makeTxn.makeAssetTransferTxn(buyerAddr, contractOwner, noCloseRemainder, noAssetRevocationTarget, fee, assetAmount, firstRound, lastRound, undefined, genesisHash, undefined, contractAssetID);
141
- const txns = [algosForAssets, assetsForAlgos];
142
- const txGroup = group.assignGroupID(txns);
143
- const ratd = ints[7];
144
- const ratn = ints[8];
145
- if (assetAmount * ratd < microAlgoAmount * ratn) {
146
- throw new Error(`bad payment ratio, ${assetAmount.toString()}*${ratd.toString()} !>= ${microAlgoAmount.toString()}*${ratn.toString()}`);
147
- }
148
- const minTrade = ints[4];
149
- if (microAlgoAmount < minTrade) {
150
- throw new Error(`payment amount ${microAlgoAmount.toString()} less than minimum trade ${minTrade.toString()}`);
151
- }
152
- const maxFee = ints[2];
153
- if (txGroup[0].fee > maxFee) {
154
- throw new Error(`final fee of payment transaction ${txGroup[0].fee.toString()} greater than transaction max fee ${maxFee.toString()}`);
155
- }
156
- if (txGroup[1].fee > maxFee) {
157
- throw new Error(`final fee of asset transaction ${txGroup[1].fee.toString()} greater than transaction max fee ${maxFee.toString()}`);
158
- }
159
- const algosForAssetsSigned = logicSig.signLogicSigTransactionObject(txGroup[0], lsig);
160
- const assetsForAlgosSigned = txGroup[1].signTxn(secretKey);
161
- return utils.concatArrays(algosForAssetsSigned.blob, assetsForAlgosSigned);
162
- }
163
- module.exports = {
164
- LimitOrder,
165
- getSwapAssetsTransaction,
166
- };
167
- //# sourceMappingURL=limitorder.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"limitorder.js","sourceRoot":"","sources":["../../../src/logicTemplates/limitorder.js"],"names":[],"mappings":"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"}
@@ -1,163 +0,0 @@
1
- const address = require('../encoding/address');
2
- const makeTxn = require('../makeTxn');
3
- const logic = require('../logic/logic');
4
- const logicSig = require('../logicsig');
5
- const nacl = require('../nacl/naclWrappers');
6
- const templates = require('./templates');
7
- class PeriodicPayment {
8
- /**
9
- * MakePeriodicPayment allows some account to execute periodic withdrawal of funds.
10
- * This is a contract account.
11
- *
12
- * This allows receiver to withdraw amount every
13
- * period rounds for withdrawWindow after every multiple
14
- * of period.
15
- *
16
- * After expiryRound, all remaining funds in the escrow
17
- * are available to receiver.
18
- *
19
- * @deprecated This class will be removed in v2.
20
- *
21
- * Constructor Parameters:
22
- * @param {string} receiver: address which is authorized to receive withdrawals
23
- * @param {int} amount: the amount to send each period
24
- * @param {int} withdrawalWindow: the duration of a withdrawal period
25
- * @param {int} period: the time between a pair of withdrawal periods
26
- * @param {int} expiryRound: the round at which the account expires
27
- * @param {int} maxFee: maximum fee used by the withdrawal transaction
28
- * @param {string} lease: b64 representation of lease to use, or leave undefined to generate one
29
- * @returns {PeriodicPayment}
30
- */
31
- constructor(receiver, amount, withdrawalWindow, period, expiryRound, maxFee, lease) {
32
- // don't need to validate receiver or lease, it's validated by template insert
33
- this.receiver = receiver;
34
- if (!Number.isSafeInteger(amount) || amount < 0)
35
- throw Error('amount must be a positive number and smaller than 2^53-1');
36
- this.amount = amount;
37
- if (!Number.isSafeInteger(withdrawalWindow) || withdrawalWindow < 0)
38
- throw Error('withdrawalWindow must be a positive number and smaller than 2^53-1');
39
- this.withdrawalWindow = withdrawalWindow;
40
- if (!Number.isSafeInteger(period) || period < 0)
41
- throw Error('period must be a positive number and smaller than 2^53-1');
42
- this.period = period;
43
- if (!Number.isSafeInteger(expiryRound) || expiryRound < 0)
44
- throw Error('expiryRound must be a positive number and smaller than 2^53-1');
45
- this.expiryRound = expiryRound;
46
- if (!Number.isSafeInteger(maxFee) || maxFee < 0)
47
- throw Error('maxFee must be a positive number and smaller than 2^53-1');
48
- this.maxFee = maxFee;
49
- if (lease === undefined) {
50
- const leaseBytes = nacl.randomBytes(32);
51
- this.lease = Buffer.from(leaseBytes).toString('base64');
52
- }
53
- else {
54
- this.lease = lease;
55
- }
56
- this.programBytes = this.getProgram();
57
- const lsig = new logicSig.LogicSig(this.programBytes, undefined);
58
- this.address = lsig.address();
59
- }
60
- /**
61
- * returns the program bytes
62
- * @returns {Uint8Array}
63
- */
64
- getProgram() {
65
- const referenceProgramB64 = 'ASAHAQYFAAQDByYCIAECAwQFBgcIAQIDBAUGBwgBAgMEBQYHCAECAwQFBgcIIJKvkYTkEzwJf2arzJOxERsSogG9nQzKPkpIoc4TzPTFMRAiEjEBIw4QMQIkGCUSEDEEIQQxAggSEDEGKBIQMQkyAxIxBykSEDEIIQUSEDEJKRIxBzIDEhAxAiEGDRAxCCUSEBEQ';
66
- const referenceProgramBytes = Buffer.from(referenceProgramB64, 'base64');
67
- const referenceOffsets = [
68
- 4 /* period */,
69
- 5 /* withdrawWindow */,
70
- 7 /* amount */,
71
- 8 /* expiryRound */,
72
- 9 /* lease */,
73
- 12 /* receiver */,
74
- 46,
75
- ];
76
- const injectionVector = [
77
- this.maxFee,
78
- this.period,
79
- this.withdrawalWindow,
80
- this.amount,
81
- this.expiryRound,
82
- this.lease,
83
- this.receiver,
84
- ];
85
- const injectionTypes = [
86
- templates.valTypes.INT,
87
- templates.valTypes.INT,
88
- templates.valTypes.INT,
89
- templates.valTypes.INT,
90
- templates.valTypes.INT,
91
- templates.valTypes.BASE64,
92
- templates.valTypes.ADDRESS,
93
- ];
94
- return templates.inject(referenceProgramBytes, referenceOffsets, injectionVector, injectionTypes);
95
- }
96
- /**
97
- * returns the string address of the contract
98
- * @returns {string}
99
- */
100
- getAddress() {
101
- return this.address;
102
- }
103
- }
104
- /**
105
- * getPeriodicPaymentWithdrawalTransaction returns a signed transaction extracting funds form the contract
106
- *
107
- * @deprecated This feature will be removed in v2.
108
- *
109
- * @param {Uint8Array} contract: the bytearray defining the contract, received from the payer
110
- * @param {int} fee: the fee per byte for the transaction
111
- * @param {int} firstValid: the first round on which the txn will be valid
112
- * @param {string} genesisHash: the hash representing the network for the txn
113
- * @returns {Object} Object containing txID and blob representing signed transaction
114
- * @throws error on failure
115
- */
116
- function getPeriodicPaymentWithdrawalTransaction(contract, fee, firstValid, genesisHash) {
117
- const readResult = logic.readProgram(contract, undefined);
118
- const ints = readResult[0];
119
- const byteArrays = readResult[1];
120
- const period = ints[2];
121
- const duration = ints[4];
122
- const amount = ints[5];
123
- if (firstValid % period !== 0) {
124
- throw new Error(`firstValid round ${firstValid.toString()} was not a multiple of contract period ${period.toString()}`);
125
- }
126
- // extract receiver and convert as needed
127
- const receiverBytes = byteArrays[1];
128
- const receiver = address.encodeAddress(receiverBytes);
129
- // extract lease and convert
130
- const leaseBuffer = byteArrays[0];
131
- const lease = new Uint8Array(leaseBuffer);
132
- const lastValid = firstValid + duration;
133
- const to = receiver;
134
- let noCloseRemainder;
135
- let noNote;
136
- const lsig = logicSig.makeLogicSig(contract, undefined);
137
- const from = lsig.address();
138
- const txn = {
139
- from,
140
- to,
141
- fee,
142
- amount,
143
- closeRemainderTo: noCloseRemainder,
144
- firstRound: firstValid,
145
- lastRound: lastValid,
146
- note: noNote,
147
- genesisHash,
148
- genesisID: '',
149
- type: 'pay',
150
- lease,
151
- };
152
- // check fee
153
- const tempTxn = makeTxn.makePaymentTxn(from, to, fee, amount, noCloseRemainder, firstValid, lastValid, noNote, genesisHash, '');
154
- if (tempTxn.fee > ints[1]) {
155
- throw new Error(`final fee of payment transaction${tempTxn.fee.toString()}greater than transaction max fee${ints[1].toString()}`);
156
- }
157
- return logicSig.signLogicSigTransaction(txn, lsig);
158
- }
159
- module.exports = {
160
- PeriodicPayment,
161
- getPeriodicPaymentWithdrawalTransaction,
162
- };
163
- //# sourceMappingURL=periodicpayment.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"periodicpayment.js","sourceRoot":"","sources":["../../../src/logicTemplates/periodicpayment.js"],"names":[],"mappings":"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"}
@@ -1,154 +0,0 @@
1
- const address = require('../encoding/address');
2
- const makeTxn = require('../makeTxn');
3
- const group = require('../group');
4
- const logicsig = require('../logicsig');
5
- const logic = require('../logic/logic');
6
- const templates = require('./templates');
7
- const utils = require('../utils/utils');
8
- class Split {
9
- /**
10
- * Split splits money sent to some account to two recipients at some ratio.
11
- * This is a contract account.
12
- *
13
- * This allows either a two-transaction group, for executing a
14
- * split, or single transaction, for closing the account.
15
- *
16
- * Withdrawals from this account are allowed as a group transaction which
17
- * sends receiverOne and receiverTwo amounts with exactly the specified ratio:
18
- * (rat1*amountForReceiverOne) = (rat2*amountForReceiverTwo)
19
- * At least minPay must be sent to receiverOne.
20
- * (CloseRemainderTo must be zero.)
21
- *
22
- * After expiryRound passes, all funds can be refunded to owner.
23
- *
24
- * @deprecated This feature will be removed in v2.
25
- *
26
- * Constructor Parameters:
27
- * @param {string} owner: the address to refund funds to on timeout
28
- * @param {string} receiverOne: the first recipient in the split account
29
- * @param {string} receiverTwo: the second recipient in the split account
30
- * @param {int} rat1: fraction of money to be paid to the 1st recipient
31
- * @param {int} rat2: fraction of money to be paid to the 2nd recipient
32
- * @param {int} expiryRound: the round at which the account expires
33
- * @param {int} minPay: minimum amount to be paid out of the account
34
- * @param {int} maxFee: half of the maximum fee used by each split forwarding group transaction
35
- * @returns {Split}
36
- */
37
- constructor(owner, receiverOne, receiverTwo, rat1, rat2, expiryRound, minPay, maxFee) {
38
- // don't need to validate owner, receiverone, receivertwo - they'll be validated by template.insert
39
- if (!Number.isSafeInteger(rat2) || rat2 < 0)
40
- throw Error('rat2 must be a positive number and smaller than 2^53-1');
41
- if (!Number.isSafeInteger(rat1) || rat1 < 0)
42
- throw Error('rat1 must be a positive number and smaller than 2^53-1');
43
- if (!Number.isSafeInteger(expiryRound) || expiryRound < 0)
44
- throw Error('expiryRound must be a positive number and smaller than 2^53-1');
45
- if (!Number.isSafeInteger(minPay) || minPay < 0)
46
- throw Error('minPay must be a positive number and smaller than 2^53-1');
47
- if (!Number.isSafeInteger(maxFee) || maxFee < 0)
48
- throw Error('maxFee must be a positive number and smaller than 2^53-1');
49
- const referenceProgramB64 = 'ASAIAQUCAAYHCAkmAyCztwQn0+DycN+vsk+vJWcsoz/b7NDS6i33HOkvTpf+YiC3qUpIgHGWE8/1LPh9SGCalSN7IaITeeWSXbfsS5wsXyC4kBQ38Z8zcwWVAym4S8vpFB/c0XC6R4mnPi9EBADsPDEQIhIxASMMEDIEJBJAABkxCSgSMQcyAxIQMQglEhAxAiEEDRAiQAAuMwAAMwEAEjEJMgMSEDMABykSEDMBByoSEDMACCEFCzMBCCEGCxIQMwAIIQcPEBA=';
50
- const referenceProgramBytes = Buffer.from(referenceProgramB64, 'base64');
51
- const referenceOffsets = [
52
- 4 /* timeout */,
53
- 7 /* rat2 */,
54
- 8 /* rat1 */,
55
- 9 /* minPay */,
56
- 10 /* owner */,
57
- 14 /* receiver1 */,
58
- 47 /* receiver2 */,
59
- 80,
60
- ];
61
- const injectionVector = [
62
- maxFee,
63
- expiryRound,
64
- rat2,
65
- rat1,
66
- minPay,
67
- owner,
68
- receiverOne,
69
- receiverTwo,
70
- ];
71
- const injectionTypes = [
72
- templates.valTypes.INT,
73
- templates.valTypes.INT,
74
- templates.valTypes.INT,
75
- templates.valTypes.INT,
76
- templates.valTypes.INT,
77
- templates.valTypes.ADDRESS,
78
- templates.valTypes.ADDRESS,
79
- templates.valTypes.ADDRESS,
80
- ];
81
- const injectedBytes = templates.inject(referenceProgramBytes, referenceOffsets, injectionVector, injectionTypes);
82
- this.programBytes = injectedBytes;
83
- const lsig = logicsig.makeLogicSig(injectedBytes, undefined);
84
- this.address = lsig.address();
85
- }
86
- /**
87
- * returns the program bytes
88
- * @returns {Uint8Array}
89
- */
90
- getProgram() {
91
- return this.programBytes;
92
- }
93
- /**
94
- * returns the string address of the contract
95
- * @returns {string}
96
- */
97
- getAddress() {
98
- return this.address;
99
- }
100
- }
101
- /**
102
- * returns a group transactions array which transfer funds according to the contract's ratio
103
- *
104
- * @deprecated This feature will be removed in v2.
105
- *
106
- * @param {Uint8Array} contract: bytes representing the contract in question
107
- * @param {int} amount: the amount to be transferred
108
- * @param {int} firstRound: the first round on which the transaction group will be valid
109
- * @param {int} lastRound: the last round on which the transaction group will be valid
110
- * @param {int} fee: the fee to pay in microAlgos
111
- * @param {string} genesisHash: the b64-encoded genesis hash indicating the network for this transaction
112
- * @returns {Uint8Array}
113
- */
114
- function getSplitFundsTransaction(contract, amount, firstRound, lastRound, fee, genesisHash) {
115
- const programOutputs = logic.readProgram(contract, undefined);
116
- const ints = programOutputs[0];
117
- const byteArrays = programOutputs[1];
118
- let rat2 = ints[6];
119
- let rat1 = ints[5];
120
- let amountForReceiverOne = 0;
121
- // reduce fractions
122
- const gcdFn = (a, b) => {
123
- if (typeof a !== 'number' || typeof b !== 'number')
124
- throw new Error('gcd operates only on positive integers');
125
- if (!b) {
126
- return a;
127
- }
128
- return gcdFn(b, a % b);
129
- };
130
- const gcd = gcdFn(rat2, rat1);
131
- rat2 = Math.floor(rat2 / gcd);
132
- rat1 = Math.floor(rat1 / gcd);
133
- const ratio = rat1 / rat2;
134
- amountForReceiverOne = Math.round(amount / (1 + ratio));
135
- const amountForReceiverTwo = amount - amountForReceiverOne;
136
- if (rat1 * amountForReceiverOne !== rat2 * amountForReceiverTwo) {
137
- throw Error('could not split funds in a way that satisfied the contract ratio');
138
- }
139
- const logicSig = logicsig.makeLogicSig(contract, undefined); // no args
140
- const from = logicSig.address();
141
- const receiverOne = address.encodeAddress(byteArrays[1]);
142
- const receiverTwo = address.encodeAddress(byteArrays[2]);
143
- const tx1 = makeTxn.makePaymentTxn(from, receiverOne, fee, amountForReceiverOne, undefined, firstRound, lastRound, undefined, genesisHash);
144
- const tx2 = makeTxn.makePaymentTxn(from, receiverTwo, fee, amountForReceiverTwo, undefined, firstRound, lastRound, undefined, genesisHash);
145
- const txns = [tx1, tx2];
146
- const txGroup = group.assignGroupID(txns);
147
- const signedTxns = txGroup.map((txn) => logicsig.signLogicSigTransactionObject(txn, logicsig).blob);
148
- return utils.concatArrays(signedTxns[0], signedTxns[1]);
149
- }
150
- module.exports = {
151
- Split,
152
- getSplitFundsTransaction,
153
- };
154
- //# sourceMappingURL=split.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"split.js","sourceRoot":"","sources":["../../../src/logicTemplates/split.js"],"names":[],"mappings":"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"}
@@ -1,67 +0,0 @@
1
- /* eslint-disable no-bitwise */
2
- const address = require('../encoding/address');
3
- function putUvarint(buf, x) {
4
- let i = 0;
5
- while (x > 0x80) {
6
- buf.push((x & 0xff) | 0x80);
7
- // eslint-disable-next-line no-param-reassign
8
- x >>= 7;
9
- i += 1;
10
- }
11
- buf.push(x & 0xff);
12
- return i + 1;
13
- }
14
- const valTypes = {
15
- INT: 1,
16
- ADDRESS: 2,
17
- BASE64: 3,
18
- };
19
- function inject(orig, offsets, values, valueTypes) {
20
- if (offsets.length !== values.length ||
21
- offsets.length !== valueTypes.length) {
22
- throw new Error('Lengths do not match');
23
- }
24
- let res = orig;
25
- function replace(arr, newVal, offset, placeholderLength) {
26
- const beforeReplacement = arr.slice(0, offset);
27
- const afterReplacement = arr.slice(offset + placeholderLength, arr.length);
28
- const chunks = [beforeReplacement, Buffer.from(newVal), afterReplacement];
29
- return Buffer.concat(chunks);
30
- }
31
- for (let i = 0; i < offsets.length; i++) {
32
- let decodedLength = 0;
33
- let val = values[i];
34
- const valType = valueTypes[i];
35
- switch (valType) {
36
- case valTypes.INT:
37
- // eslint-disable-next-line no-case-declarations
38
- const intBuf = [];
39
- decodedLength = putUvarint(intBuf, val);
40
- res = replace(res, intBuf, offsets[i], 1);
41
- break;
42
- case valTypes.ADDRESS:
43
- val = address.decodeAddress(val);
44
- res = replace(res, val.publicKey, offsets[i], 32);
45
- break;
46
- case valTypes.BASE64:
47
- // eslint-disable-next-line no-case-declarations
48
- const lenBuf = [];
49
- val = Buffer.from(val, 'base64');
50
- putUvarint(lenBuf, val.length);
51
- val = Buffer.concat([Buffer.from(lenBuf), val]);
52
- res = replace(res, val, offsets[i], 33);
53
- break;
54
- default:
55
- throw new Error('unrecognized value type');
56
- }
57
- if (decodedLength !== 0) {
58
- for (let o = 0; o < offsets.length; o++) {
59
- // eslint-disable-next-line no-param-reassign
60
- offsets[o] += decodedLength - 1;
61
- }
62
- }
63
- }
64
- return res;
65
- }
66
- module.exports = { inject, valTypes };
67
- //# sourceMappingURL=templates.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"templates.js","sourceRoot":"","sources":["../../../src/logicTemplates/templates.js"],"names":[],"mappings":"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"}