@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.
- package/lib/account/formatters.d.ts.map +1 -1
- package/lib/account/formatters.js +1 -0
- package/lib/account/formatters.js.map +1 -1
- package/lib/account/support.d.ts.map +1 -1
- package/lib/account/support.js +1 -0
- package/lib/account/support.js.map +1 -1
- package/lib/data/icons/react/sol.js +4 -2
- package/lib/data/icons/react/sol.js.map +1 -1
- package/lib/data/icons/reactNative/sol.js +4 -2
- package/lib/data/icons/reactNative/sol.js.map +1 -1
- package/lib/derivation.d.ts.map +1 -1
- package/lib/derivation.js +0 -3
- package/lib/derivation.js.map +1 -1
- package/lib/env.d.ts +5 -10
- package/lib/env.d.ts.map +1 -1
- package/lib/env.js +0 -5
- package/lib/env.js.map +1 -1
- package/lib/env.react.d.ts +1 -1
- package/lib/env.react.d.ts.map +1 -1
- package/lib/families/algorand/account.d.ts.map +1 -1
- package/lib/families/algorand/account.js +0 -4
- package/lib/families/algorand/account.js.map +1 -1
- package/lib/families/algorand/api/algodv2.d.ts +5 -0
- package/lib/families/algorand/api/algodv2.d.ts.map +1 -0
- package/lib/families/algorand/api/algodv2.js +118 -0
- package/lib/families/algorand/api/algodv2.js.map +1 -0
- package/lib/families/algorand/api/algodv2.types.d.ts +24 -0
- package/lib/families/algorand/api/algodv2.types.d.ts.map +1 -0
- package/lib/families/algorand/api/algodv2.types.js +3 -0
- package/lib/families/algorand/api/algodv2.types.js.map +1 -0
- package/lib/families/algorand/api/index.d.ts +5 -0
- package/lib/families/algorand/api/index.d.ts.map +1 -0
- package/lib/families/algorand/api/index.js +17 -0
- package/lib/families/algorand/api/index.js.map +1 -0
- package/lib/families/algorand/api/indexer.d.ts +3 -0
- package/lib/families/algorand/api/indexer.d.ts.map +1 -0
- package/lib/families/algorand/api/indexer.js +134 -0
- package/lib/families/algorand/api/indexer.js.map +1 -0
- package/lib/families/algorand/api/indexer.types.d.ts +35 -0
- package/lib/families/algorand/api/indexer.types.d.ts.map +1 -0
- package/lib/families/algorand/api/indexer.types.js +10 -0
- package/lib/families/algorand/api/indexer.types.js.map +1 -0
- package/lib/families/algorand/bridge/js.d.ts +8 -0
- package/lib/families/algorand/bridge/js.d.ts.map +1 -0
- package/lib/families/algorand/bridge/js.js +85 -0
- package/lib/families/algorand/bridge/js.js.map +1 -0
- package/lib/families/algorand/bridge/libcore.d.ts +3 -3
- package/lib/families/algorand/bridge/libcore.d.ts.map +1 -1
- package/lib/families/algorand/bridge/libcore.js.map +1 -1
- package/lib/families/algorand/bridge/mock.d.ts +2 -2
- package/lib/families/algorand/bridge/mock.d.ts.map +1 -1
- package/lib/families/algorand/bridge/mock.js.map +1 -1
- package/lib/families/algorand/buildTransaction.d.ts +8 -0
- package/lib/families/algorand/buildTransaction.d.ts.map +1 -0
- package/lib/families/algorand/buildTransaction.js +101 -0
- package/lib/families/algorand/buildTransaction.js.map +1 -0
- package/lib/families/algorand/cli-transaction.js +1 -1
- package/lib/families/algorand/cli-transaction.js.map +1 -1
- package/lib/families/algorand/deviceTransactionConfig.d.ts +2 -2
- package/lib/families/algorand/deviceTransactionConfig.d.ts.map +1 -1
- package/lib/families/algorand/deviceTransactionConfig.js +0 -13
- package/lib/families/algorand/deviceTransactionConfig.js.map +1 -1
- package/lib/families/algorand/hw-getAddress.d.ts.map +1 -1
- package/lib/families/algorand/hw-getAddress.js +2 -24
- package/lib/families/algorand/hw-getAddress.js.map +1 -1
- package/lib/families/algorand/js-broadcast.d.ts +9 -0
- package/lib/families/algorand/js-broadcast.d.ts.map +1 -0
- package/lib/families/algorand/js-broadcast.js +63 -0
- package/lib/families/algorand/js-broadcast.js.map +1 -0
- package/lib/families/algorand/js-estimateMaxSpendable.d.ts +9 -0
- package/lib/families/algorand/js-estimateMaxSpendable.d.ts.map +1 -0
- package/lib/families/algorand/js-estimateMaxSpendable.js +89 -0
- package/lib/families/algorand/js-estimateMaxSpendable.js.map +1 -0
- package/lib/families/algorand/js-getFeesForTransaction.d.ts +5 -0
- package/lib/families/algorand/js-getFeesForTransaction.d.ts.map +1 -0
- package/lib/families/algorand/js-getFeesForTransaction.js +69 -0
- package/lib/families/algorand/js-getFeesForTransaction.js.map +1 -0
- package/lib/families/algorand/js-getTransactionStatus.d.ts +11 -0
- package/lib/families/algorand/js-getTransactionStatus.d.ts.map +1 -0
- package/lib/families/algorand/js-getTransactionStatus.js +201 -0
- package/lib/families/algorand/js-getTransactionStatus.js.map +1 -0
- package/lib/families/algorand/js-prepareTransaction.d.ts +5 -0
- package/lib/families/algorand/js-prepareTransaction.d.ts.map +1 -0
- package/lib/families/algorand/js-prepareTransaction.js +101 -0
- package/lib/families/algorand/js-prepareTransaction.js.map +1 -0
- package/lib/families/algorand/js-signOperation.d.ts +10 -0
- package/lib/families/algorand/js-signOperation.d.ts.map +1 -0
- package/lib/families/algorand/js-signOperation.js +164 -0
- package/lib/families/algorand/js-signOperation.js.map +1 -0
- package/lib/families/algorand/js-synchronization.d.ts +10 -0
- package/lib/families/algorand/js-synchronization.d.ts.map +1 -0
- package/lib/families/algorand/js-synchronization.js +411 -0
- package/lib/families/algorand/js-synchronization.js.map +1 -0
- package/lib/families/algorand/libcore-buildTransaction.d.ts +2 -2
- package/lib/families/algorand/libcore-buildTransaction.d.ts.map +1 -1
- package/lib/families/algorand/libcore-getFeesForTransaction.d.ts +4 -4
- package/lib/families/algorand/libcore-getFeesForTransaction.d.ts.map +1 -1
- package/lib/families/algorand/libcore-getFeesForTransaction.js +2 -2
- package/lib/families/algorand/libcore-getFeesForTransaction.js.map +1 -1
- package/lib/families/algorand/libcore-postBuildAccount.d.ts.map +1 -1
- package/lib/families/algorand/libcore-postBuildAccount.js +5 -11
- package/lib/families/algorand/libcore-postBuildAccount.js.map +1 -1
- package/lib/families/algorand/libcore-signOperation.d.ts +2 -2
- package/lib/families/algorand/libcore-signOperation.d.ts.map +1 -1
- package/lib/families/algorand/libcore-signOperation.js.map +1 -1
- package/lib/families/algorand/logic.d.ts +10 -0
- package/lib/families/algorand/logic.d.ts.map +1 -1
- package/lib/families/algorand/logic.js +79 -1
- package/lib/families/algorand/logic.js.map +1 -1
- package/lib/families/algorand/mock.d.ts.map +1 -1
- package/lib/families/algorand/mock.js +4 -11
- package/lib/families/algorand/mock.js.map +1 -1
- package/lib/families/algorand/serialization.js +4 -4
- package/lib/families/algorand/serialization.js.map +1 -1
- package/lib/families/algorand/specs.d.ts +2 -2
- package/lib/families/algorand/specs.d.ts.map +1 -1
- package/lib/families/algorand/specs.js +8 -16
- package/lib/families/algorand/specs.js.map +1 -1
- package/lib/families/algorand/speculos-deviceActions.d.ts +2 -2
- package/lib/families/algorand/speculos-deviceActions.d.ts.map +1 -1
- package/lib/families/algorand/speculos-deviceActions.js +4 -0
- package/lib/families/algorand/speculos-deviceActions.js.map +1 -1
- package/lib/families/algorand/test-dataset.d.ts +2 -2
- package/lib/families/algorand/test-dataset.d.ts.map +1 -1
- package/lib/families/algorand/test-dataset.js +1 -2
- package/lib/families/algorand/test-dataset.js.map +1 -1
- package/lib/families/algorand/tokens.d.ts.map +1 -1
- package/lib/families/algorand/tokens.js.map +1 -1
- package/lib/families/algorand/transaction.d.ts +5 -5
- package/lib/families/algorand/transaction.d.ts.map +1 -1
- package/lib/families/algorand/transaction.js.map +1 -1
- package/lib/families/algorand/types.d.ts +7 -5
- package/lib/families/algorand/types.d.ts.map +1 -1
- package/lib/families/algorand/types.js.map +1 -1
- package/lib/families/bitcoin/js-prepareTransaction.d.ts.map +1 -1
- package/lib/families/bitcoin/js-prepareTransaction.js +3 -2
- package/lib/families/bitcoin/js-prepareTransaction.js.map +1 -1
- package/lib/families/bitcoin/js-synchronisation.d.ts.map +1 -1
- package/lib/families/bitcoin/js-synchronisation.js +3 -2
- package/lib/families/bitcoin/js-synchronisation.js.map +1 -1
- package/lib/families/bitcoin/wallet-btc/crypto/decred.d.ts.map +1 -1
- package/lib/families/bitcoin/wallet-btc/crypto/decred.js +3 -4
- package/lib/families/bitcoin/wallet-btc/crypto/decred.js.map +1 -1
- package/lib/generated/bridge/js.d.ts +4 -0
- package/lib/generated/bridge/js.d.ts.map +1 -1
- package/lib/generated/bridge/js.js +26 -24
- package/lib/generated/bridge/js.js.map +1 -1
- package/lib/generated/bridge/libcore.d.ts +1 -1
- package/lib/generated/bridge/mock.d.ts +1 -1
- package/lib/generated/specs.d.ts +1 -1
- package/lib/generated/speculos-deviceActions.d.ts +1 -1
- package/lib/generated/test-dataset.d.ts +1 -1
- package/lib/generated/transaction.d.ts +3 -3
- package/lib/libcore/buildAccount/index.d.ts.map +1 -1
- package/lib/libcore/buildAccount/index.js +0 -1
- package/lib/libcore/buildAccount/index.js.map +1 -1
- package/lib/mock/account.js +21 -21
- package/lib/mock/account.js.map +1 -1
- package/lib/types/operation.d.ts +1 -1
- package/lib/types/operation.d.ts.map +1 -1
- package/package.json +4 -3
- package/src/__tests__/__snapshots__/all.libcore.ts.snap +0 -107
- package/src/account/formatters.ts +1 -0
- package/src/account/support.ts +1 -0
- package/src/data/icons/react/sol.tsx +1 -1
- package/src/data/icons/reactNative/sol.tsx +1 -1
- package/src/data/icons/svg/SOL.svg +1 -3
- package/src/derivation.ts +0 -2
- package/src/env.ts +0 -5
- package/src/families/algorand/account.ts +0 -9
- package/src/families/algorand/api/algodv2.ts +68 -0
- package/src/families/algorand/api/algodv2.types.ts +27 -0
- package/src/families/algorand/api/index.ts +4 -0
- package/src/families/algorand/api/indexer.ts +99 -0
- package/src/families/algorand/api/indexer.types.ts +41 -0
- package/src/families/algorand/bridge/js.ts +46 -0
- package/src/families/algorand/bridge/libcore.ts +4 -4
- package/src/families/algorand/bridge/mock.ts +3 -3
- package/src/families/algorand/buildTransaction.ts +100 -0
- package/src/families/algorand/cli-transaction.ts +1 -1
- package/src/families/algorand/deviceTransactionConfig.ts +2 -16
- package/src/families/algorand/hw-getAddress.ts +1 -10
- package/src/families/algorand/js-broadcast.ts +17 -0
- package/src/families/algorand/js-estimateMaxSpendable.ts +51 -0
- package/src/families/algorand/js-getFeesForTransaction.ts +25 -0
- package/src/families/algorand/js-getTransactionStatus.ts +178 -0
- package/src/families/algorand/js-prepareTransaction.ts +42 -0
- package/src/families/algorand/js-signOperation.ts +145 -0
- package/src/families/algorand/js-synchronization.ts +433 -0
- package/src/families/algorand/libcore-buildTransaction.ts +2 -2
- package/src/families/algorand/libcore-getFeesForTransaction.ts +4 -4
- package/src/families/algorand/libcore-postBuildAccount.ts +2 -7
- package/src/families/algorand/libcore-signOperation.ts +2 -2
- package/src/families/algorand/logic.ts +47 -0
- package/src/families/algorand/mock.ts +2 -12
- package/src/families/algorand/serialization.ts +4 -4
- package/src/families/algorand/specs.ts +16 -22
- package/src/families/algorand/speculos-deviceActions.ts +87 -82
- package/src/families/algorand/test-dataset.ts +5 -6
- package/src/families/algorand/tokens.ts +1 -0
- package/src/families/algorand/transaction.ts +13 -4
- package/src/families/algorand/types.ts +10 -5
- package/src/families/bitcoin/js-prepareTransaction.ts +3 -2
- package/src/families/bitcoin/js-synchronisation.ts +3 -2
- package/src/families/bitcoin/wallet-btc/crypto/decred.ts +3 -4
- package/src/generated/bridge/js.ts +3 -0
- package/src/libcore/buildAccount/index.ts +1 -2
- package/src/mock/account.ts +27 -27
- 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",
|
package/src/account/support.ts
CHANGED
|
@@ -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"
|
|
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"
|
|
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"
|
|
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,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,
|
|
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:
|
|
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 = ():
|
|
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<
|
|
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 {
|
|
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 = ():
|
|
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<
|
|
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
|
+
};
|