@ledgerhq/live-common 21.22.1 → 21.23.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 (209) hide show
  1. package/lib/account/formatters.d.ts.map +1 -1
  2. package/lib/account/formatters.js +1 -0
  3. package/lib/account/formatters.js.map +1 -1
  4. package/lib/account/support.d.ts.map +1 -1
  5. package/lib/account/support.js +1 -0
  6. package/lib/account/support.js.map +1 -1
  7. package/lib/data/icons/react/sol.js +4 -2
  8. package/lib/data/icons/react/sol.js.map +1 -1
  9. package/lib/data/icons/reactNative/sol.js +4 -2
  10. package/lib/data/icons/reactNative/sol.js.map +1 -1
  11. package/lib/derivation.d.ts.map +1 -1
  12. package/lib/derivation.js +0 -3
  13. package/lib/derivation.js.map +1 -1
  14. package/lib/env.d.ts +5 -10
  15. package/lib/env.d.ts.map +1 -1
  16. package/lib/env.js +0 -5
  17. package/lib/env.js.map +1 -1
  18. package/lib/env.react.d.ts +1 -1
  19. package/lib/env.react.d.ts.map +1 -1
  20. package/lib/families/algorand/account.d.ts.map +1 -1
  21. package/lib/families/algorand/account.js +0 -4
  22. package/lib/families/algorand/account.js.map +1 -1
  23. package/lib/families/algorand/api/algodv2.d.ts +5 -0
  24. package/lib/families/algorand/api/algodv2.d.ts.map +1 -0
  25. package/lib/families/algorand/api/algodv2.js +118 -0
  26. package/lib/families/algorand/api/algodv2.js.map +1 -0
  27. package/lib/families/algorand/api/algodv2.types.d.ts +24 -0
  28. package/lib/families/algorand/api/algodv2.types.d.ts.map +1 -0
  29. package/lib/families/algorand/api/algodv2.types.js +3 -0
  30. package/lib/families/algorand/api/algodv2.types.js.map +1 -0
  31. package/lib/families/algorand/api/index.d.ts +5 -0
  32. package/lib/families/algorand/api/index.d.ts.map +1 -0
  33. package/lib/families/algorand/api/index.js +17 -0
  34. package/lib/families/algorand/api/index.js.map +1 -0
  35. package/lib/families/algorand/api/indexer.d.ts +3 -0
  36. package/lib/families/algorand/api/indexer.d.ts.map +1 -0
  37. package/lib/families/algorand/api/indexer.js +134 -0
  38. package/lib/families/algorand/api/indexer.js.map +1 -0
  39. package/lib/families/algorand/api/indexer.types.d.ts +35 -0
  40. package/lib/families/algorand/api/indexer.types.d.ts.map +1 -0
  41. package/lib/families/algorand/api/indexer.types.js +10 -0
  42. package/lib/families/algorand/api/indexer.types.js.map +1 -0
  43. package/lib/families/algorand/bridge/js.d.ts +8 -0
  44. package/lib/families/algorand/bridge/js.d.ts.map +1 -0
  45. package/lib/families/algorand/bridge/js.js +85 -0
  46. package/lib/families/algorand/bridge/js.js.map +1 -0
  47. package/lib/families/algorand/bridge/libcore.d.ts +3 -3
  48. package/lib/families/algorand/bridge/libcore.d.ts.map +1 -1
  49. package/lib/families/algorand/bridge/libcore.js.map +1 -1
  50. package/lib/families/algorand/bridge/mock.d.ts +2 -2
  51. package/lib/families/algorand/bridge/mock.d.ts.map +1 -1
  52. package/lib/families/algorand/bridge/mock.js.map +1 -1
  53. package/lib/families/algorand/buildTransaction.d.ts +8 -0
  54. package/lib/families/algorand/buildTransaction.d.ts.map +1 -0
  55. package/lib/families/algorand/buildTransaction.js +101 -0
  56. package/lib/families/algorand/buildTransaction.js.map +1 -0
  57. package/lib/families/algorand/cli-transaction.js +1 -1
  58. package/lib/families/algorand/cli-transaction.js.map +1 -1
  59. package/lib/families/algorand/deviceTransactionConfig.d.ts +2 -2
  60. package/lib/families/algorand/deviceTransactionConfig.d.ts.map +1 -1
  61. package/lib/families/algorand/deviceTransactionConfig.js +0 -13
  62. package/lib/families/algorand/deviceTransactionConfig.js.map +1 -1
  63. package/lib/families/algorand/hw-getAddress.d.ts.map +1 -1
  64. package/lib/families/algorand/hw-getAddress.js +2 -24
  65. package/lib/families/algorand/hw-getAddress.js.map +1 -1
  66. package/lib/families/algorand/js-broadcast.d.ts +9 -0
  67. package/lib/families/algorand/js-broadcast.d.ts.map +1 -0
  68. package/lib/families/algorand/js-broadcast.js +63 -0
  69. package/lib/families/algorand/js-broadcast.js.map +1 -0
  70. package/lib/families/algorand/js-estimateMaxSpendable.d.ts +9 -0
  71. package/lib/families/algorand/js-estimateMaxSpendable.d.ts.map +1 -0
  72. package/lib/families/algorand/js-estimateMaxSpendable.js +89 -0
  73. package/lib/families/algorand/js-estimateMaxSpendable.js.map +1 -0
  74. package/lib/families/algorand/js-getFeesForTransaction.d.ts +5 -0
  75. package/lib/families/algorand/js-getFeesForTransaction.d.ts.map +1 -0
  76. package/lib/families/algorand/js-getFeesForTransaction.js +69 -0
  77. package/lib/families/algorand/js-getFeesForTransaction.js.map +1 -0
  78. package/lib/families/algorand/js-getTransactionStatus.d.ts +11 -0
  79. package/lib/families/algorand/js-getTransactionStatus.d.ts.map +1 -0
  80. package/lib/families/algorand/js-getTransactionStatus.js +201 -0
  81. package/lib/families/algorand/js-getTransactionStatus.js.map +1 -0
  82. package/lib/families/algorand/js-prepareTransaction.d.ts +5 -0
  83. package/lib/families/algorand/js-prepareTransaction.d.ts.map +1 -0
  84. package/lib/families/algorand/js-prepareTransaction.js +101 -0
  85. package/lib/families/algorand/js-prepareTransaction.js.map +1 -0
  86. package/lib/families/algorand/js-signOperation.d.ts +10 -0
  87. package/lib/families/algorand/js-signOperation.d.ts.map +1 -0
  88. package/lib/families/algorand/js-signOperation.js +164 -0
  89. package/lib/families/algorand/js-signOperation.js.map +1 -0
  90. package/lib/families/algorand/js-synchronization.d.ts +10 -0
  91. package/lib/families/algorand/js-synchronization.d.ts.map +1 -0
  92. package/lib/families/algorand/js-synchronization.js +411 -0
  93. package/lib/families/algorand/js-synchronization.js.map +1 -0
  94. package/lib/families/algorand/libcore-buildTransaction.d.ts +2 -2
  95. package/lib/families/algorand/libcore-buildTransaction.d.ts.map +1 -1
  96. package/lib/families/algorand/libcore-getFeesForTransaction.d.ts +4 -4
  97. package/lib/families/algorand/libcore-getFeesForTransaction.d.ts.map +1 -1
  98. package/lib/families/algorand/libcore-getFeesForTransaction.js +2 -2
  99. package/lib/families/algorand/libcore-getFeesForTransaction.js.map +1 -1
  100. package/lib/families/algorand/libcore-postBuildAccount.d.ts.map +1 -1
  101. package/lib/families/algorand/libcore-postBuildAccount.js +5 -11
  102. package/lib/families/algorand/libcore-postBuildAccount.js.map +1 -1
  103. package/lib/families/algorand/libcore-signOperation.d.ts +2 -2
  104. package/lib/families/algorand/libcore-signOperation.d.ts.map +1 -1
  105. package/lib/families/algorand/libcore-signOperation.js.map +1 -1
  106. package/lib/families/algorand/logic.d.ts +10 -0
  107. package/lib/families/algorand/logic.d.ts.map +1 -1
  108. package/lib/families/algorand/logic.js +79 -1
  109. package/lib/families/algorand/logic.js.map +1 -1
  110. package/lib/families/algorand/mock.d.ts.map +1 -1
  111. package/lib/families/algorand/mock.js +4 -11
  112. package/lib/families/algorand/mock.js.map +1 -1
  113. package/lib/families/algorand/serialization.js +4 -4
  114. package/lib/families/algorand/serialization.js.map +1 -1
  115. package/lib/families/algorand/specs.d.ts +2 -2
  116. package/lib/families/algorand/specs.d.ts.map +1 -1
  117. package/lib/families/algorand/specs.js +8 -16
  118. package/lib/families/algorand/specs.js.map +1 -1
  119. package/lib/families/algorand/speculos-deviceActions.d.ts +2 -2
  120. package/lib/families/algorand/speculos-deviceActions.d.ts.map +1 -1
  121. package/lib/families/algorand/speculos-deviceActions.js +4 -0
  122. package/lib/families/algorand/speculos-deviceActions.js.map +1 -1
  123. package/lib/families/algorand/test-dataset.d.ts +2 -2
  124. package/lib/families/algorand/test-dataset.d.ts.map +1 -1
  125. package/lib/families/algorand/test-dataset.js +1 -2
  126. package/lib/families/algorand/test-dataset.js.map +1 -1
  127. package/lib/families/algorand/tokens.d.ts.map +1 -1
  128. package/lib/families/algorand/tokens.js.map +1 -1
  129. package/lib/families/algorand/transaction.d.ts +5 -5
  130. package/lib/families/algorand/transaction.d.ts.map +1 -1
  131. package/lib/families/algorand/transaction.js.map +1 -1
  132. package/lib/families/algorand/types.d.ts +7 -5
  133. package/lib/families/algorand/types.d.ts.map +1 -1
  134. package/lib/families/algorand/types.js.map +1 -1
  135. package/lib/families/bitcoin/js-prepareTransaction.d.ts.map +1 -1
  136. package/lib/families/bitcoin/js-prepareTransaction.js +3 -2
  137. package/lib/families/bitcoin/js-prepareTransaction.js.map +1 -1
  138. package/lib/families/bitcoin/js-synchronisation.d.ts.map +1 -1
  139. package/lib/families/bitcoin/js-synchronisation.js +3 -2
  140. package/lib/families/bitcoin/js-synchronisation.js.map +1 -1
  141. package/lib/families/bitcoin/wallet-btc/crypto/decred.d.ts.map +1 -1
  142. package/lib/families/bitcoin/wallet-btc/crypto/decred.js +3 -4
  143. package/lib/families/bitcoin/wallet-btc/crypto/decred.js.map +1 -1
  144. package/lib/generated/bridge/js.d.ts +4 -0
  145. package/lib/generated/bridge/js.d.ts.map +1 -1
  146. package/lib/generated/bridge/js.js +26 -24
  147. package/lib/generated/bridge/js.js.map +1 -1
  148. package/lib/generated/bridge/libcore.d.ts +1 -1
  149. package/lib/generated/bridge/mock.d.ts +1 -1
  150. package/lib/generated/specs.d.ts +1 -1
  151. package/lib/generated/speculos-deviceActions.d.ts +1 -1
  152. package/lib/generated/test-dataset.d.ts +1 -1
  153. package/lib/generated/transaction.d.ts +3 -3
  154. package/lib/libcore/buildAccount/index.d.ts.map +1 -1
  155. package/lib/libcore/buildAccount/index.js +0 -1
  156. package/lib/libcore/buildAccount/index.js.map +1 -1
  157. package/lib/mock/account.js +21 -21
  158. package/lib/mock/account.js.map +1 -1
  159. package/lib/types/operation.d.ts +1 -1
  160. package/lib/types/operation.d.ts.map +1 -1
  161. package/package.json +4 -3
  162. package/src/__tests__/__snapshots__/all.libcore.ts.snap +0 -107
  163. package/src/account/formatters.ts +1 -0
  164. package/src/account/support.ts +1 -0
  165. package/src/data/icons/react/sol.tsx +1 -1
  166. package/src/data/icons/reactNative/sol.tsx +1 -1
  167. package/src/data/icons/svg/SOL.svg +1 -3
  168. package/src/derivation.ts +0 -2
  169. package/src/env.ts +0 -5
  170. package/src/families/algorand/account.ts +0 -9
  171. package/src/families/algorand/api/algodv2.ts +68 -0
  172. package/src/families/algorand/api/algodv2.types.ts +27 -0
  173. package/src/families/algorand/api/index.ts +4 -0
  174. package/src/families/algorand/api/indexer.ts +99 -0
  175. package/src/families/algorand/api/indexer.types.ts +41 -0
  176. package/src/families/algorand/bridge/js.ts +46 -0
  177. package/src/families/algorand/bridge/libcore.ts +4 -4
  178. package/src/families/algorand/bridge/mock.ts +3 -3
  179. package/src/families/algorand/buildTransaction.ts +100 -0
  180. package/src/families/algorand/cli-transaction.ts +1 -1
  181. package/src/families/algorand/deviceTransactionConfig.ts +2 -16
  182. package/src/families/algorand/hw-getAddress.ts +1 -10
  183. package/src/families/algorand/js-broadcast.ts +17 -0
  184. package/src/families/algorand/js-estimateMaxSpendable.ts +51 -0
  185. package/src/families/algorand/js-getFeesForTransaction.ts +25 -0
  186. package/src/families/algorand/js-getTransactionStatus.ts +178 -0
  187. package/src/families/algorand/js-prepareTransaction.ts +42 -0
  188. package/src/families/algorand/js-signOperation.ts +145 -0
  189. package/src/families/algorand/js-synchronization.ts +433 -0
  190. package/src/families/algorand/libcore-buildTransaction.ts +2 -2
  191. package/src/families/algorand/libcore-getFeesForTransaction.ts +4 -4
  192. package/src/families/algorand/libcore-postBuildAccount.ts +2 -7
  193. package/src/families/algorand/libcore-signOperation.ts +2 -2
  194. package/src/families/algorand/logic.ts +47 -0
  195. package/src/families/algorand/mock.ts +2 -12
  196. package/src/families/algorand/serialization.ts +4 -4
  197. package/src/families/algorand/specs.ts +16 -22
  198. package/src/families/algorand/speculos-deviceActions.ts +87 -82
  199. package/src/families/algorand/test-dataset.ts +5 -6
  200. package/src/families/algorand/tokens.ts +1 -0
  201. package/src/families/algorand/transaction.ts +13 -4
  202. package/src/families/algorand/types.ts +10 -5
  203. package/src/families/bitcoin/js-prepareTransaction.ts +3 -2
  204. package/src/families/bitcoin/js-synchronisation.ts +3 -2
  205. package/src/families/bitcoin/wallet-btc/crypto/decred.ts +3 -4
  206. package/src/generated/bridge/js.ts +3 -0
  207. package/src/libcore/buildAccount/index.ts +1 -2
  208. package/src/mock/account.ts +27 -27
  209. package/src/types/operation.ts +9 -4
@@ -5566,16 +5566,6 @@ Array [
5566
5566
  "operator": undefined,
5567
5567
  "recipients": Array [
5568
5568
  "3P4ZNTpZH81H8z5rzsZPYRAHdbCeepy24S",
5569
- "39dN3Yh3JoKKYHBE125V3oseNxqEazrZNT",
5570
- "361eHKcTxvCRyFntqULCU3T3uq5BB5F7SA",
5571
- "36GF7JNYDG5YxK3tVcsF1rvxLEGZfoCVqJ",
5572
- "3P8dNFWTbcK9k3qFaTqjLB3ApiRLjXueRs",
5573
- "1JA74bnt3rhkH1ZbzVaxHiKz4CNqUqqBsc",
5574
- "16cb8FaMs1vge2fAsg8CuSE5SEnmDqzynt",
5575
- "19VZfg47ADTauA6cktMuQNiDkbHGLuRDYE",
5576
- "19FBokKEYLSthbk9Tg6A9JGcD3p7Ygx889",
5577
- "16GCAeS8oZ1oRQLdz29ckQfjMp6Qa7mPVY",
5578
- "3GEzxpE35ajZThSpMBu8LLEB3S8QkLRYiF",
5579
5569
  ],
5580
5570
  "senders": Array [
5581
5571
  "1GHiAwwxX5RR6MFTtDnD1e9Q2DssDut7Bh",
@@ -8169,103 +8159,7 @@ Array [
8169
8159
  "id": "js:2:bitcoin:xpub6CKb86o7RHSD1tDBFKwPgEZ5Q83gnRPG7Bs5HzBRUxcm4dvLEPnSTWP8C7c4P71GgMCk1Fw6xS6Ki4XC6bGAQcxE8gc9KJHXzQnErDtwTa6:segwit-efe8d2fd21349d7b2827b058c3d863538eae1ad2685516d6bdb6b80fca85af30-IN",
8170
8160
  "operator": undefined,
8171
8161
  "recipients": Array [
8172
- "3Jc2AiR82JJdZ91CpcJH9TQMPm2NFstFp1",
8173
- "bc1qaq0sdjddu666zm9rr58l2nx008nf002am9qx83",
8174
- "bc1qdpvgd8rdc9gmtmcqupdahaxxlfkahprkte6kn0",
8175
- "bc1qvy650pv32mlwlggl45n7sphsrwsk7u3vkcjg7s",
8176
- "3FGHK3ZPfFSD5Jffx5ZCMUegFJdMEZp6F6",
8177
- "1E8JvjXBV7rg1GErmWKt9ZuyeLCcYc9hyi",
8178
- "38SHEZQAAsBpMDEDS5GuRu7edvjxXAt2hk",
8179
- "1EgWPd5VA57zY3VyZ7XHJHNTyj7nHpvmia",
8180
- "bc1qh8z7hauj8kyacw0zngtuxpsnt4vmte6ld75gdu",
8181
- "3A5PCMt2e6QNqd2dHNjBqPZLaDuVDgWSzV",
8182
- "3NieCQwhFb99b4Le1JhDB8r7LLyRVMHyhG",
8183
- "3QkKLy6rGQtAMjJuRdKijhCVjusDcqY66d",
8184
- "3F2Fi6HwLad68oi4QGYpFbDNDjiHoa2crf",
8185
- "bc1q4yu4sx8swc6tgps9lvud78jfz87jpw24e0upjr",
8186
- "36vbV47FkSUpeGPasDhB36CbrbfbC4ca7Q",
8187
- "3KAq1EcHmb54qTKAQpyy7o1sheAStq8ddf",
8188
- "bc1q935erkg0xkfmlazexzkkq24z84d9nu86edfn7y",
8189
- "3ExsrSjXcSYhfaABAx3SnqvTtF7o9dng7p",
8190
- "3F17UvsvDDazG8F795P6QjTTGFXsFZahRH",
8191
- "3PRwk5nfYPWSsbr8LcNtj33qYtcGFrTHPw",
8192
- "39zHVK98pRiZW17HhgbBgbe7g9DoDv1C9H",
8193
- "bc1qduaughynrt4rrr3xdu4sszxdpn8ur7n5hg2n0z",
8194
- "3QvTF3fzJtBieb3spx2KaGZKe5QkqCzgDP",
8195
- "3ELrydVs6B4zhDQiLEWAKDyN7pt6K4GM1F",
8196
- "38XFHuFfWhg77n59xwhwLbgtretho2WUZG",
8197
- "35odLH5jc89dneJGxr5s4vrprqL5EBysqF",
8198
- "39XvDCp5eTEfbyUVTmqzAYJ66xPhgWtjEw",
8199
- "373ZFgRmpXTbimg7xK3iLDXMCEKCGwu7BY",
8200
- "3AUAKeFfwkz7gLRasvEfjrZd5pPiKZNSzA",
8201
- "33uoRcKdtVKUQjNhE74f2BQwqPWgKpc8VJ",
8202
8162
  "3G4ViRo3PUMH6G61S8gBvaABAAgHD5a7ZM",
8203
- "33iik7ZT9i1KfGtQ62ex1bwxuESAYTFjpe",
8204
- "3GhTQ42UamN8Br56pskasZdmSNFo5NkwF8",
8205
- "3GhXBXYNxJjGLsesSvorWQTJiGr5twkrn4",
8206
- "bc1qhnx0w2jx2kgclvl2k70gph3vjvzgxyd7q0g8k4",
8207
- "bc1q38f2339wtahx3lcylpudnfcv3yyk836r0pdr40",
8208
- "3PNjvVmptgCNrhGMDrU6XWW1Y1Bcee6oT2",
8209
- "3CDg7eYgptT8v3jccFFpZEGZRNZTJW2VNA",
8210
- "38xoEaT1NR178iqXQwwguVzob9YzbFbRvG",
8211
- "3PzfoNsoJPefhpLtgdhdV5rnU4wmp5SkoL",
8212
- "bc1qmfnly0eawda5r24acldj0zlvd574qwdgf94jwe",
8213
- "3H3r5DCUdLRPnYETg9SQtag3Gz94hYqvF8",
8214
- "3J6oUiNhkxM3Lz1TZ1sCjjw6GCT6cCi5we",
8215
- "bc1qrwjxw7hhv728a7hukwy4lgarypju623ldl3f05",
8216
- "3E1CQMn3aC6oP7k5LYcXZ96QnmeRL7WgUb",
8217
- "3JKPxCdSbSKkz4jsL2f6qXFNwLsH1uez2q",
8218
- "bc1q3953pvmdtacclgvxpl6aqa8r6p4xyqhr8gsdgk",
8219
- "3MgkgeUf1YmZ9HLLUEYMJ2hm3cQ3CKBYmJ",
8220
- "bc1qkypmfj9jr7v7e95t6khw853rtfp62sk8s0qjef",
8221
- "354B8dgNGeKFqDZJcpVX4C6WUu2s3hRF7H",
8222
- "35bxt1NyamKCRhGJRLaBw61oKXkGpMnWuF",
8223
- "13pgMz1vDjAArY26id2jjpBTdHLo2DTXgz",
8224
- "3A76vCh5a4MA1eVZumTNm3bKmSo5fBGGPT",
8225
- "37QCGyCmp849Av4HSrByATrJQLs4VJNt5C",
8226
- "34TgtAXt1DUKJG2YAqKp1nt5zUsR4uYN4w",
8227
- "bc1q55vkq2weafgqwzwdvel46hj6xgsfnz8vzz68gp",
8228
- "3MXmnuhoixnCrET7QTZ21z857t8s2qWkHh",
8229
- "bc1q042sm59em2z2ruprynymp5mgf888pvdnza74wm",
8230
- "1N86q7JYb6HxM1TjrK4gha9aQNVge2TTnR",
8231
- "3LoDZAghtN2QeMf4xgCQTDgo9ibnUPHUkY",
8232
- "33byPkR5v5G94yBKCHS4c7RXXCX3Nvi7N6",
8233
- "3Ho6Y8bt1g1BopzjcGTLMQ7DtxZuZpuPcw",
8234
- "bc1q83sf9uvjmr92mwy3y5j9rxmd2q7h28hshn2ejq",
8235
- "3D3pY5YjYXsijimv3G1H5bVnpNqL5Fod7n",
8236
- "3HZbWxTC3MihJb8LryiiWetdhg7WHBwDZY",
8237
- "1M9ciK5F9mWjoXgNdYf9eLi4PhXwkSm4ht",
8238
- "bc1qcrtxgwt92zr4xr5g3h78adz4xn492y93703kn2",
8239
- "39ZWjHTrNgfmYCsqGsPxmNmTV97Uigy22k",
8240
- "3MavZxQSTH6JAGybD7Ca5ZFbYF6Ph59g5u",
8241
- "33xeESivakwS6rMoZvtmwi4RDDmZ7YqYML",
8242
- "3Pp7C6F5VHdJDMdQfpnvTEzMVsmafVJpxX",
8243
- "3AZK7qSKAwx7Rnbf22TDGJdEWsRGf7RXpk",
8244
- "bc1q0kg67ap0syeyy3k0gseucz29y7kxq8clf79egy",
8245
- "3MHj8t455ZYovDribvzAjvUERKWPwJvMJu",
8246
- "37GS3GGFrtzS5nZNMh9Fd1i2Gzn2ra5TeM",
8247
- "bc1qsr7ea4tl2csdcga00jzx3yj8pt60gx3r7mhhzp",
8248
- "bc1qxnxuerl0pm35d9wxuvh4a2ujg6f4au9zexg2xv",
8249
- "3QmSEZsiZafsUSGXNafNcwmtrgYzHhbYi3",
8250
- "3CjLiSWHJs4VuXneSxE51fSkTFr8rHKHWf",
8251
- "36aAMuCVkQ9EZQ6vW17kbpAKn38FmZxF8g",
8252
- "bc1qze42xwwxmn7rumaj3wjhykwhpaazzexfr27k2t",
8253
- "1FcmjYLAjaYofoWzADoDyfu52af2Jne5jd",
8254
- "34YSKaSekucu4gR4kcVJCKF2aYnuapcy2g",
8255
- "3Qs9Td6w3UUMHaYwJjVSDfrTSq8bqqj7EA",
8256
- "32dCda5w5HRmvYHBoVNZUvCgPmwcCv8MQc",
8257
- "3Di64LBBeBp328J5wVyeuMYDevD653xiTE",
8258
- "38NXg2iAQUQD29UeckCQLDabsH8f13BY2d",
8259
- "18gCFC3FShPo5Vw51zxQ6rqwREriHDZtLF",
8260
- "39V2KVFz7i9JCa63oSpa7TYZtLr7WGXCDT",
8261
- "3JyahsGAmMb3uNcyJdRkzhx5Jxa6xcVe4X",
8262
- "3MS3C44UtBwtTN7f59kRX6oaUWisTDdj9y",
8263
- "3JLm7gMtkpPDuCxfiFxXu6C6tiQFdNSJTz",
8264
- "bc1q56e64r7hpuhma4nkapesy43pyf9u9rzf2nr78z",
8265
- "3EKy9DZMoATcSvWvpF2PawjbhLeaiWPf9R",
8266
- "bc1qk7c904l8tklxyr2n6xx0tnx0sqg3ze3yvn9a8u",
8267
- "bc1qskeepvre8zut4ja3p3eyfq7p68u29ywuvjv0ls",
8268
- "3Jzuj9ZfahdFFMuCDi8EXikZSc6aBjqrRp",
8269
8163
  ],
8270
8164
  "senders": Array [
8271
8165
  "32U9FSutLUAJ2XvpArnRYYwCQ9dCdxNbEQ",
@@ -14785,7 +14679,6 @@ Array [
14785
14679
  "operator": undefined,
14786
14680
  "recipients": Array [
14787
14681
  "DPjGymoyCoctCcSmBtL6NtAFUW9mURi5ZA",
14788
- "DPo316Hrotqkhz9xELTxLSAXd3MvTzKsJk",
14789
14682
  ],
14790
14683
  "senders": Array [
14791
14684
  "D9GqmkGCpgtnXP7xMD78v9xfqeDkqBZBMT",
@@ -111,6 +111,7 @@ const cliFormat = (account, level?: string) => {
111
111
 
112
112
  if (family && family.formatAccountSpecifics) {
113
113
  str += family.formatAccountSpecifics(account);
114
+ str += "\n";
114
115
  }
115
116
 
116
117
  const subAccounts = account.subAccounts || [];
@@ -21,6 +21,7 @@ import { getAccountBridge } from "../bridge";
21
21
  import jsBridges from "../generated/bridge/js";
22
22
 
23
23
  const experimentalIntegrations = [
24
+ "algorand",
24
25
  "bitcoin",
25
26
  "bsc",
26
27
  "bitcoin_cash",
@@ -6,7 +6,7 @@ interface Props {
6
6
  };
7
7
 
8
8
  function sol({size, color = "currentColor"}: Props) {
9
- return <svg width={size} height={size} viewBox="0 0 24 24" fill="none"><path d="M9.925 18.687a.59.59 0 01.415-.17h14.366a.29.29 0 01.207.497l-2.838 2.815a.59.59 0 01-.415.171H7.294a.291.291 0 01-.207-.498l2.838-2.815zm0-10.517A.59.59 0 0110.34 8h14.366c.261 0 .392.314.207.498l-2.838 2.815a.59.59 0 01-.415.17H7.294a.291.291 0 01-.207-.497L9.925 8.17zm12.15 5.225a.59.59 0 00-.415-.17H7.294a.291.291 0 00-.207.498l2.838 2.815c.11.109.26.17.415.17h14.366a.291.291 0 00.207-.498l-2.838-2.815z" fill={color} fillRule="nonzero" /></svg>;
9
+ return <svg width={size} height={size} viewBox="0 0 24 24"><path d="M2.41,7.77H18.09a.51.51,0,0,0,.37-.16l3.43-3.67a.4.4,0,0,0-.3-.67H5.91a.51.51,0,0,0-.37.16L2.11,7.1A.4.4,0,0,0,2.41,7.77Z" /><path d="M2.41,20.77H18.09a.51.51,0,0,0,.37-.16l3.43-3.67a.4.4,0,0,0-.3-.67H5.91a.51.51,0,0,0-.37.16L2.11,20.1A.4.4,0,0,0,2.41,20.77Z" /><path d="M21.59,14.27H5.91a.51.51,0,0,1-.37-.16L2.11,10.44a.4.4,0,0,1,.3-.67H18.09a.51.51,0,0,1,.37.16l3.43,3.67A.4.4,0,0,1,21.59,14.27Z" /></svg>;
10
10
  }
11
11
 
12
12
  export default sol;
@@ -7,7 +7,7 @@ interface Props {
7
7
  };
8
8
 
9
9
  function sol({ size, color }: Props) {
10
- return <Svg width={size} height={size} viewBox="0 0 24 24" fill="none"><Path d="M9.925 18.687a.59.59 0 01.415-.17h14.366a.29.29 0 01.207.497l-2.838 2.815a.59.59 0 01-.415.171H7.294a.291.291 0 01-.207-.498l2.838-2.815zm0-10.517A.59.59 0 0110.34 8h14.366c.261 0 .392.314.207.498l-2.838 2.815a.59.59 0 01-.415.17H7.294a.291.291 0 01-.207-.497L9.925 8.17zm12.15 5.225a.59.59 0 00-.415-.17H7.294a.291.291 0 00-.207.498l2.838 2.815c.11.109.26.17.415.17h14.366a.291.291 0 00.207-.498l-2.838-2.815z" fill={color} fillRule="nonzero" /></Svg>;
10
+ return <Svg width={size} height={size} viewBox="0 0 24 24"><Path d="M2.41,7.77H18.09a.51.51,0,0,0,.37-.16l3.43-3.67a.4.4,0,0,0-.3-.67H5.91a.51.51,0,0,0-.37.16L2.11,7.1A.4.4,0,0,0,2.41,7.77Z" /><Path d="M2.41,20.77H18.09a.51.51,0,0,0,.37-.16l3.43-3.67a.4.4,0,0,0-.3-.67H5.91a.51.51,0,0,0-.37.16L2.11,20.1A.4.4,0,0,0,2.41,20.77Z" /><Path d="M21.59,14.27H5.91a.51.51,0,0,1-.37-.16L2.11,10.44a.4.4,0,0,1,.3-.67H18.09a.51.51,0,0,1,.37.16l3.43,3.67A.4.4,0,0,1,21.59,14.27Z" /></Svg>;
11
11
  }
12
12
 
13
13
  export default sol;
@@ -1,3 +1 @@
1
- <svg width="24" height="24" viewBox="0 0 24 24" fill="none">
2
- <path d="M9.925 18.687a.59.59 0 01.415-.17h14.366a.29.29 0 01.207.497l-2.838 2.815a.59.59 0 01-.415.171H7.294a.291.291 0 01-.207-.498l2.838-2.815zm0-10.517A.59.59 0 0110.34 8h14.366c.261 0 .392.314.207.498l-2.838 2.815a.59.59 0 01-.415.17H7.294a.291.291 0 01-.207-.497L9.925 8.17zm12.15 5.225a.59.59 0 00-.415-.17H7.294a.291.291 0 00-.207.498l2.838 2.815c.11.109.26.17.415.17h14.366a.291.291 0 00.207-.498l-2.838-2.815z" fill="#FFF" fill-rule="nonzero"/>
3
- </svg>
1
+ <svg width="24" height="24" viewBox="0 0 24 24"><path d="M2.41,7.77H18.09a.51.51,0,0,0,.37-.16l3.43-3.67a.4.4,0,0,0-.3-.67H5.91a.51.51,0,0,0-.37.16L2.11,7.1A.4.4,0,0,0,2.41,7.77Z"/><path d="M2.41,20.77H18.09a.51.51,0,0,0,.37-.16l3.43-3.67a.4.4,0,0,0-.3-.67H5.91a.51.51,0,0,0-.37.16L2.11,20.1A.4.4,0,0,0,2.41,20.77Z"/><path d="M21.59,14.27H5.91a.51.51,0,0,1-.37-.16L2.11,10.44a.4.4,0,0,1,.3-.67H18.09a.51.51,0,0,1,.37.16l3.43,3.67A.4.4,0,0,1,21.59,14.27Z"/></svg>
package/src/derivation.ts CHANGED
@@ -59,8 +59,6 @@ const extraConfigPerCurrency: Record<string, LibcoreConfig> = {
59
59
  algorand: {
60
60
  BLOCKCHAIN_EXPLORER_API_ENDPOINT: () =>
61
61
  getEnv("API_ALGORAND_BLOCKCHAIN_EXPLORER_API_ENDPOINT"),
62
- BLOCKCHAIN_EXPLORER_API_KEY: () =>
63
- getEnv("API_ALGORAND_BLOCKCHAIN_EXPLORER_API_KEY"),
64
62
  },
65
63
  };
66
64
  const modes = Object.freeze({
package/src/env.ts CHANGED
@@ -40,11 +40,6 @@ const envDefinitions = {
40
40
  parser: stringParser,
41
41
  desc: "Node API endpoint for algorand",
42
42
  },
43
- API_ALGORAND_BLOCKCHAIN_EXPLORER_API_KEY: {
44
- def: "",
45
- parser: stringParser,
46
- desc: "Node API key for algorand",
47
- },
48
43
  API_COSMOS_BLOCKCHAIN_EXPLORER_API_ENDPOINT: {
49
44
  def: "https://cosmoshub4.coin.ledger.com/",
50
45
  parser: stringParser,
@@ -46,15 +46,6 @@ function formatAccountSpecifics(account: Account): string {
46
46
  ) + " rewards. ";
47
47
  }
48
48
 
49
- if ((algorandResources as AlgorandResources).rewardsAccumulated.gt(0)) {
50
- str +=
51
- formatCurrencyUnit(
52
- unit,
53
- (algorandResources as AlgorandResources).rewardsAccumulated,
54
- formatConfig
55
- ) + " rewardsAccumulated. ";
56
- }
57
-
58
49
  return str;
59
50
  }
60
51
 
@@ -0,0 +1,68 @@
1
+ import { BigNumber } from "bignumber.js";
2
+ import { getEnv } from "../../../env";
3
+ import network from "../../../network";
4
+ import {
5
+ AlgoAccount,
6
+ AlgoAsset,
7
+ AlgoTransactionParams,
8
+ AlgoTransactionBroadcastResponse,
9
+ } from "./algodv2.types";
10
+
11
+ const BASE_URL = getEnv("API_ALGORAND_BLOCKCHAIN_EXPLORER_API_ENDPOINT");
12
+ const NODE_URL = `${BASE_URL}/ps2/v2`;
13
+
14
+ const fullUrl = (route: string): string => `${NODE_URL}${route}`;
15
+
16
+ export const getAccount = async (address: string): Promise<AlgoAccount> => {
17
+ const { data } = await network({
18
+ method: "GET",
19
+ url: fullUrl(`/accounts/${address}`),
20
+ });
21
+
22
+ const assets: AlgoAsset[] = data.assets
23
+ ? data.assets.map((a): AlgoAsset => {
24
+ return {
25
+ assetId: a["asset-id"].toString(),
26
+ balance: new BigNumber(a.amount),
27
+ };
28
+ })
29
+ : [];
30
+
31
+ return {
32
+ round: data.round,
33
+ address: data.address,
34
+ balance: new BigNumber(data.amount),
35
+ pendingRewards: new BigNumber(data["pending-rewards"]),
36
+ assets,
37
+ };
38
+ };
39
+
40
+ // TODO Cache
41
+ export const getTransactionParams =
42
+ async (): Promise<AlgoTransactionParams> => {
43
+ const { data } = await network({
44
+ method: "GET",
45
+ url: fullUrl(`/transactions/params`),
46
+ });
47
+
48
+ return {
49
+ fee: data["fee"],
50
+ minFee: data["min-fee"],
51
+ firstRound: data["first-round"] ?? 0,
52
+ lastRound: data["last-round"],
53
+ genesisID: data["genesis-id"],
54
+ genesisHash: data["genesis-hash"],
55
+ };
56
+ };
57
+
58
+ export const broadcastTransaction = async (
59
+ payload: string
60
+ ): Promise<string> => {
61
+ const { data }: { data: AlgoTransactionBroadcastResponse } = await network({
62
+ method: "POST",
63
+ url: fullUrl(`/transactions`),
64
+ data: payload,
65
+ });
66
+
67
+ return data.txId;
68
+ };
@@ -0,0 +1,27 @@
1
+ import { BigNumber } from "bignumber.js";
2
+
3
+ export interface AlgoAccount {
4
+ round: number;
5
+ address: string;
6
+ balance: BigNumber;
7
+ pendingRewards: BigNumber;
8
+ assets: AlgoAsset[];
9
+ }
10
+
11
+ export interface AlgoAsset {
12
+ assetId: string;
13
+ balance: BigNumber;
14
+ }
15
+
16
+ export interface AlgoTransactionParams {
17
+ fee: number;
18
+ minFee: number;
19
+ firstRound: number;
20
+ lastRound: number;
21
+ genesisHash: string;
22
+ genesisID: string;
23
+ }
24
+
25
+ export interface AlgoTransactionBroadcastResponse {
26
+ txId: string;
27
+ }
@@ -0,0 +1,4 @@
1
+ export * from "./algodv2.types";
2
+ export * from "./algodv2";
3
+ export * from "./indexer.types";
4
+ export * from "./indexer";
@@ -0,0 +1,99 @@
1
+ import { BigNumber } from "bignumber.js";
2
+ import { getEnv } from "../../../env";
3
+ import network from "../../../network";
4
+ import {
5
+ AlgoTransaction,
6
+ AlgoTransactionDetails,
7
+ AlgoPaymentInfo,
8
+ AlgoAssetTransferInfo,
9
+ } from "./indexer.types";
10
+
11
+ const LIMIT = 100; // Max nb of transactions per request
12
+
13
+ const BASE_URL = getEnv("API_ALGORAND_BLOCKCHAIN_EXPLORER_API_ENDPOINT");
14
+ const INDEXER_URL = `${BASE_URL}/idx2/v2`;
15
+
16
+ const fullUrl = (route: string): string =>
17
+ `${INDEXER_URL}${route}?limit=${LIMIT}`;
18
+
19
+ export const getAccountTransactions = async (
20
+ address: string,
21
+ startAt?: number
22
+ ): Promise<AlgoTransaction[]> => {
23
+ const url = fullUrl(`/accounts/${address}/transactions`);
24
+
25
+ let nextToken: string | undefined;
26
+ let newRawTxs: any[] = [];
27
+ const mergedTxs: AlgoTransaction[] = [];
28
+ do {
29
+ let nextUrl: string = url;
30
+ if (startAt) {
31
+ nextUrl = nextUrl.concat(`&min-round=${startAt}`);
32
+ }
33
+ if (nextToken) {
34
+ nextUrl = nextUrl.concat(`&next=${nextToken}`);
35
+ }
36
+ const { data }: { data: { transactions: any[] } } = await network({
37
+ method: "GET",
38
+ url: nextUrl,
39
+ });
40
+ nextToken = data["next-token"];
41
+ newRawTxs = data.transactions;
42
+ newRawTxs.map(parseRawTransaction).forEach((tx) => mergedTxs.push(tx));
43
+ } while (newRawTxs.length >= LIMIT);
44
+
45
+ return mergedTxs;
46
+ };
47
+
48
+ const parseRawTransaction = (tx: any): AlgoTransaction => {
49
+ let details: AlgoTransactionDetails | undefined = undefined;
50
+ if (tx["tx-type"] === "pay") {
51
+ const info = tx["payment-transaction"];
52
+ const paymentInfo: AlgoPaymentInfo = {
53
+ amount: new BigNumber(info.amount),
54
+ recipientAddress: info.receiver,
55
+ closeAmount:
56
+ info["close-amount"] === undefined
57
+ ? undefined
58
+ : new BigNumber(info["close-amount"]),
59
+ closeToAddress: info["close-remainder-to"],
60
+ };
61
+ details = paymentInfo;
62
+ } else if (tx["tx-type"] === "axfer") {
63
+ const info = tx["asset-transfer-transaction"];
64
+ const assetTransferInfo: AlgoAssetTransferInfo = {
65
+ assetAmount: new BigNumber(info.amount),
66
+ assetId: info["asset-id"],
67
+ assetRecipientAddress: info.receiver,
68
+ assetSenderAddress: info.sender,
69
+ assetCloseAmount:
70
+ info["close-amount"] === undefined
71
+ ? undefined
72
+ : new BigNumber(info["close-amount"]),
73
+ assetCloseToAddress: tx["close-to"],
74
+ };
75
+ details = assetTransferInfo;
76
+ }
77
+
78
+ return {
79
+ id: tx.id,
80
+ timestamp: tx["round-time"],
81
+ round: tx["confirmed-round"],
82
+ senderAddress: tx.sender,
83
+ senderRewards: new BigNumber(tx["sender-rewards"]),
84
+ recipientRewards: new BigNumber(tx["receiver-rewards"]),
85
+ closeRewards:
86
+ tx["close-rewards"] === undefined
87
+ ? undefined
88
+ : new BigNumber(tx["close-rewards"]),
89
+ closeAmount:
90
+ tx["closing-amount"] === undefined
91
+ ? undefined
92
+ : new BigNumber(tx["closing-amount"]),
93
+ fee: new BigNumber(tx.fee),
94
+ note: tx.note,
95
+
96
+ type: tx["tx-type"],
97
+ details,
98
+ };
99
+ };
@@ -0,0 +1,41 @@
1
+ import { BigNumber } from "bignumber.js";
2
+
3
+ export type AlgoTransactionDetails = AlgoPaymentInfo | AlgoAssetTransferInfo;
4
+
5
+ // Define only types we explicitely support
6
+ export enum AlgoTransactionType {
7
+ PAYMENT = "pay",
8
+ ASSET_TRANSFER = "axfer",
9
+ }
10
+
11
+ export interface AlgoTransaction {
12
+ id: string;
13
+ timestamp: string; // 'round-time': 1597933539,
14
+ round: number; // 'confirmed-round': 8575676,
15
+ senderAddress: string; // sender: 'RGX5XA7DWZOZ5SLG4WQSNIFKIG4CNX4VOH23YCEX56523DQEAL3QL56XZM',
16
+ senderRewards: BigNumber; // 'sender-rewards': 0,
17
+ recipientRewards: BigNumber; //'receiver-rewards': 0,
18
+ closeRewards?: BigNumber; // 'close-rewards': 0,
19
+ closeAmount?: BigNumber; //'closing-amount': 0,
20
+ fee: BigNumber;
21
+ note: string;
22
+
23
+ type: string; // 'tx-type': 'pay'
24
+ details?: AlgoTransactionDetails;
25
+ }
26
+
27
+ export interface AlgoPaymentInfo {
28
+ amount: BigNumber;
29
+ recipientAddress: string; // receiver
30
+ closeAmount?: BigNumber; // close-amount
31
+ closeToAddress?: string; // close-remainder-to
32
+ }
33
+
34
+ export interface AlgoAssetTransferInfo {
35
+ assetId: string; // asset-id
36
+ assetAmount: BigNumber; // amount
37
+ assetRecipientAddress: string; // receiver
38
+ assetSenderAddress?: string; // sender
39
+ assetCloseAmount?: BigNumber; // close-amount
40
+ assetCloseToAddress?: string; // close-to
41
+ }
@@ -0,0 +1,46 @@
1
+ import type { AccountBridge, CurrencyBridge } from "../../../types";
2
+ import { makeAccountBridgeReceive } from "../../../bridge/jsHelpers";
3
+
4
+ import type { AlgorandTransaction } from "../types";
5
+ import { sync, scanAccounts } from "../js-synchronization";
6
+ import {
7
+ createTransaction,
8
+ prepareTransaction,
9
+ } from "../js-prepareTransaction";
10
+ import { estimateMaxSpendable } from "../js-estimateMaxSpendable";
11
+ import { getTransactionStatus } from "../js-getTransactionStatus";
12
+ import { signOperation } from "../js-signOperation";
13
+ import { broadcast } from "../js-broadcast";
14
+
15
+ const receive = makeAccountBridgeReceive();
16
+
17
+ const updateTransaction = (t, patch) => {
18
+ return { ...t, ...patch };
19
+ };
20
+
21
+ const preload = async () => Promise.resolve({});
22
+
23
+ const hydrate = () => {};
24
+
25
+ const currencyBridge: CurrencyBridge = {
26
+ preload,
27
+ hydrate,
28
+ scanAccounts,
29
+ };
30
+
31
+ const accountBridge: AccountBridge<AlgorandTransaction> = {
32
+ createTransaction,
33
+ updateTransaction,
34
+ prepareTransaction,
35
+ getTransactionStatus,
36
+ sync,
37
+ receive,
38
+ signOperation,
39
+ broadcast,
40
+ estimateMaxSpendable,
41
+ };
42
+
43
+ export default {
44
+ currencyBridge,
45
+ accountBridge,
46
+ };
@@ -13,7 +13,7 @@ import {
13
13
  import { AlgorandASANotOptInInRecipient } from "../../../errors";
14
14
  import { validateRecipient } from "../../../bridge/shared";
15
15
  import type { AccountBridge, CurrencyBridge, Account } from "../../../types";
16
- import type { AlgorandResources, Transaction } from "../types";
16
+ import type { AlgorandResources, AlgorandTransaction } from "../types";
17
17
  import { AlgorandOperationTypeEnum } from "../types";
18
18
  import { scanAccounts } from "../../../libcore/scanAccounts";
19
19
  import { sync } from "../../../libcore/syncAccount";
@@ -34,7 +34,7 @@ const receive = makeAccountBridgeReceive();
34
34
  export const calculateFees: CacheRes<
35
35
  Array<{
36
36
  a: Account;
37
- t: Transaction;
37
+ t: AlgorandTransaction;
38
38
  }>,
39
39
  {
40
40
  estimatedFees: BigNumber;
@@ -72,7 +72,7 @@ const getSpendableMaxForOptIn = async (account) =>
72
72
  return spendableBalance;
73
73
  });
74
74
 
75
- const createTransaction = (): Transaction => ({
75
+ const createTransaction = (): AlgorandTransaction => ({
76
76
  family: "algorand",
77
77
  amount: new BigNumber(0),
78
78
  fees: null,
@@ -328,7 +328,7 @@ const currencyBridge: CurrencyBridge = {
328
328
  hydrate,
329
329
  scanAccounts,
330
330
  };
331
- const accountBridge: AccountBridge<Transaction> = {
331
+ const accountBridge: AccountBridge<AlgorandTransaction> = {
332
332
  createTransaction,
333
333
  updateTransaction,
334
334
  prepareTransaction,
@@ -5,7 +5,7 @@ import {
5
5
  InvalidAddress,
6
6
  FeeTooHigh,
7
7
  } from "@ledgerhq/errors";
8
- import type { Transaction } from "../types";
8
+ import type { AlgorandTransaction } from "../types";
9
9
  import type { AccountBridge, CurrencyBridge } from "../../../types";
10
10
  import {
11
11
  scanAccounts,
@@ -20,7 +20,7 @@ const receive = makeAccountBridgeReceive();
20
20
 
21
21
  const defaultGetFees = (a, t) => t.fees || new BigNumber(0);
22
22
 
23
- const createTransaction = (): Transaction => ({
23
+ const createTransaction = (): AlgorandTransaction => ({
24
24
  family: "algorand",
25
25
  mode: "send",
26
26
  amount: new BigNumber(0),
@@ -88,7 +88,7 @@ const prepareTransaction = async (a, t) => {
88
88
  return t;
89
89
  };
90
90
 
91
- const accountBridge: AccountBridge<Transaction> = {
91
+ const accountBridge: AccountBridge<AlgorandTransaction> = {
92
92
  estimateMaxSpendable,
93
93
  createTransaction,
94
94
  updateTransaction,
@@ -0,0 +1,100 @@
1
+ import { encode as msgpackEncode } from "algo-msgpack-with-bigint";
2
+ import type {
3
+ SuggestedParams as AlgoSuggestedParams,
4
+ Transaction as AlgoTransaction,
5
+ EncodedTransaction as AlgoTransactionPayload,
6
+ EncodedSignedTransaction as AlgoSignedTransactionPayload,
7
+ } from "algosdk";
8
+ import {
9
+ makePaymentTxnWithSuggestedParams,
10
+ makeAssetTransferTxnWithSuggestedParams,
11
+ } from "algosdk";
12
+
13
+ import type { Account } from "../../types";
14
+ import type { Transaction } from "./types";
15
+
16
+ import { extractTokenId } from "./tokens";
17
+ import { getTransactionParams } from "./api";
18
+
19
+ export const buildTransactionPayload = async (
20
+ account: Account,
21
+ transaction: Transaction
22
+ ): Promise<AlgoTransactionPayload> => {
23
+ const { amount, recipient, mode, memo, assetId, subAccountId } = transaction;
24
+ const subAccount = subAccountId
25
+ ? account.subAccounts &&
26
+ account.subAccounts.find((t) => t.id === subAccountId)
27
+ : null;
28
+
29
+ const note = memo ? new TextEncoder().encode(memo) : undefined;
30
+
31
+ // Minor hack: cast the result as a algosdk.SuggestedParams, while it's actually a TransactionParametersResponse
32
+ const params = (await getTransactionParams()) as AlgoSuggestedParams;
33
+
34
+ let algoTxn: AlgoTransaction;
35
+ if (subAccount || (assetId && mode === "optIn")) {
36
+ const targetAssetId =
37
+ subAccount && subAccount.type === "TokenAccount"
38
+ ? extractTokenId(subAccount.token.id)
39
+ : assetId
40
+ ? extractTokenId(assetId)
41
+ : "";
42
+
43
+ if (!targetAssetId) {
44
+ throw new Error("Token Asset Id not found");
45
+ }
46
+
47
+ algoTxn = makeAssetTransferTxnWithSuggestedParams(
48
+ account.freshAddress,
49
+ recipient,
50
+ undefined,
51
+ undefined,
52
+ amount.toNumber(),
53
+ note,
54
+ Number(targetAssetId),
55
+ params,
56
+ undefined
57
+ );
58
+ } else {
59
+ algoTxn = makePaymentTxnWithSuggestedParams(
60
+ account.freshAddress,
61
+ recipient,
62
+ amount.toNumber(),
63
+ undefined,
64
+ note,
65
+ params
66
+ );
67
+ }
68
+
69
+ // Bit of safety: set tx validity to the next 1000 blocks
70
+ algoTxn.firstRound = params.lastRound;
71
+ algoTxn.lastRound = params.lastRound + 1000;
72
+
73
+ // Flaw in the SDK: payload isn't sorted, but it needs to be for msgPack encoding
74
+ const sorted = Object.fromEntries(
75
+ Object.entries(algoTxn.get_obj_for_encoding()).sort()
76
+ ) as AlgoTransactionPayload;
77
+
78
+ return sorted;
79
+ };
80
+
81
+ export const encodeToSign = async (
82
+ payload: AlgoTransactionPayload
83
+ ): Promise<string> => {
84
+ const msgPackEncoded = msgpackEncode(payload);
85
+
86
+ return Buffer.from(msgPackEncoded).toString("hex");
87
+ };
88
+
89
+ export const encodeToBroadcast = async (
90
+ payload: AlgoTransactionPayload,
91
+ signature: Buffer
92
+ ): Promise<Buffer> => {
93
+ const signedPayload: AlgoSignedTransactionPayload = {
94
+ sig: signature,
95
+ txn: payload,
96
+ };
97
+ const msgPackEncoded = msgpackEncode(signedPayload);
98
+
99
+ return Buffer.from(msgPackEncoded);
100
+ };