@ledgerhq/live-common 25.2.0-nightly.2 → 26.0.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/README.md +1 -1
- package/lib/__tests__/test-helpers/setup.js +2 -0
- package/lib/__tests__/test-helpers/setup.js.map +1 -1
- package/lib/account/helpers.d.ts.map +1 -1
- package/lib/account/helpers.js +1 -0
- package/lib/account/helpers.js.map +1 -1
- package/lib/account/serialization.d.ts.map +1 -1
- package/lib/account/serialization.js +4 -0
- package/lib/account/serialization.js.map +1 -1
- package/lib/data/icons/react/index.d.ts +1 -0
- package/lib/data/icons/react/index.d.ts.map +1 -1
- package/lib/data/icons/react/index.js +7 -5
- package/lib/data/icons/react/index.js.map +1 -1
- package/lib/data/icons/react/osmo.d.ts +8 -0
- package/lib/data/icons/react/osmo.d.ts.map +1 -0
- package/lib/data/icons/react/osmo.js +39 -0
- package/lib/data/icons/react/osmo.js.map +1 -0
- package/lib/data/icons/reactNative/index.d.ts +1 -0
- package/lib/data/icons/reactNative/index.d.ts.map +1 -1
- package/lib/data/icons/reactNative/index.js +7 -5
- package/lib/data/icons/reactNative/index.js.map +1 -1
- package/lib/data/icons/reactNative/osmo.d.ts +8 -0
- package/lib/data/icons/reactNative/osmo.d.ts.map +1 -0
- package/lib/data/icons/reactNative/osmo.js +40 -0
- package/lib/data/icons/reactNative/osmo.js.map +1 -0
- package/lib/env.d.ts +15 -5
- package/lib/env.d.ts.map +1 -1
- package/lib/env.js +10 -0
- 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/cosmos/CosmosValidatorsManager.d.ts +26 -0
- package/lib/families/cosmos/CosmosValidatorsManager.d.ts.map +1 -0
- package/lib/families/cosmos/CosmosValidatorsManager.js +365 -0
- package/lib/families/cosmos/CosmosValidatorsManager.js.map +1 -0
- package/lib/families/cosmos/account.d.ts +2 -2
- package/lib/families/cosmos/account.d.ts.map +1 -1
- package/lib/families/cosmos/account.js +19 -6
- package/lib/families/cosmos/account.js.map +1 -1
- package/lib/families/cosmos/api/Cosmos.d.ts +27 -15
- package/lib/families/cosmos/api/Cosmos.d.ts.map +1 -1
- package/lib/families/cosmos/api/Cosmos.js +418 -410
- package/lib/families/cosmos/api/Cosmos.js.map +1 -1
- package/lib/families/cosmos/bridge/js.d.ts.map +1 -1
- package/lib/families/cosmos/bridge/js.js +5 -5
- package/lib/families/cosmos/bridge/js.js.map +1 -1
- package/lib/families/cosmos/bridge/mock.js +1 -1
- package/lib/families/cosmos/bridge/mock.js.map +1 -1
- package/lib/families/cosmos/bridge.integration.test.js +5 -5
- package/lib/families/cosmos/bridge.integration.test.js.map +1 -1
- package/lib/families/cosmos/cli-transaction.d.ts +3 -3
- package/lib/families/cosmos/cli-transaction.d.ts.map +1 -1
- package/lib/families/cosmos/cli-transaction.js +4 -5
- package/lib/families/cosmos/cli-transaction.js.map +1 -1
- package/lib/families/cosmos/js-buildTransaction.js +3 -3
- package/lib/families/cosmos/js-buildTransaction.js.map +1 -1
- package/lib/families/cosmos/js-createTransaction.js +1 -1
- package/lib/families/cosmos/js-createTransaction.js.map +1 -1
- package/lib/families/cosmos/js-getTransactionStatus.d.ts +17 -3
- package/lib/families/cosmos/js-getTransactionStatus.d.ts.map +1 -1
- package/lib/families/cosmos/js-getTransactionStatus.js +224 -176
- package/lib/families/cosmos/js-getTransactionStatus.js.map +1 -1
- package/lib/families/cosmos/js-prepareTransaction.js +2 -2
- package/lib/families/cosmos/js-prepareTransaction.js.map +1 -1
- package/lib/families/cosmos/js-signOperation.js +3 -3
- package/lib/families/cosmos/js-signOperation.js.map +1 -1
- package/lib/families/cosmos/js-synchronisation.js +2 -2
- package/lib/families/cosmos/js-synchronisation.js.map +1 -1
- package/lib/families/cosmos/logic.js +1 -1
- package/lib/families/cosmos/logic.js.map +1 -1
- package/lib/families/cosmos/mock.js +1 -1
- package/lib/families/cosmos/mock.js.map +1 -1
- package/lib/families/cosmos/react.d.ts +4 -4
- package/lib/families/cosmos/react.d.ts.map +1 -1
- package/lib/families/cosmos/react.js +59 -26
- package/lib/families/cosmos/react.js.map +1 -1
- package/lib/families/cosmos/react.test.js +17 -15
- package/lib/families/cosmos/react.test.js.map +1 -1
- package/lib/families/cosmos/specs.js +4 -4
- package/lib/families/cosmos/specs.js.map +1 -1
- package/lib/families/cosmos/speculos-deviceActions.d.ts.map +1 -1
- package/lib/families/cosmos/speculos-deviceActions.js +1 -1
- package/lib/families/cosmos/speculos-deviceActions.js.map +1 -1
- package/lib/families/cosmos/transaction.d.ts +2 -2
- package/lib/families/cosmos/transaction.d.ts.map +1 -1
- package/lib/families/cosmos/transaction.js +4 -4
- package/lib/families/cosmos/transaction.js.map +1 -1
- package/lib/families/cosmos/types.d.ts +31 -13
- package/lib/families/cosmos/types.d.ts.map +1 -1
- package/lib/families/cosmos/utils.d.ts +1 -0
- package/lib/families/cosmos/utils.d.ts.map +1 -1
- package/lib/families/cosmos/utils.js +7 -1
- package/lib/families/cosmos/utils.js.map +1 -1
- package/lib/families/cosmos/validators.d.ts +3 -5
- package/lib/families/cosmos/validators.d.ts.map +1 -1
- package/lib/families/cosmos/validators.js +4 -317
- package/lib/families/cosmos/validators.js.map +1 -1
- package/lib/families/elrond/specs.js +1 -1
- package/lib/families/elrond/specs.js.map +1 -1
- package/lib/families/filecoin/bridge/account.d.ts.map +1 -1
- package/lib/families/filecoin/bridge/account.js +11 -5
- package/lib/families/filecoin/bridge/account.js.map +1 -1
- package/lib/families/osmosis/OsmosisSupplyTypes.d.ts +48 -0
- package/lib/families/osmosis/OsmosisSupplyTypes.d.ts.map +1 -0
- package/lib/families/osmosis/OsmosisSupplyTypes.js +3 -0
- package/lib/families/osmosis/OsmosisSupplyTypes.js.map +1 -0
- package/lib/families/osmosis/account.d.ts +14 -0
- package/lib/families/osmosis/account.d.ts.map +1 -0
- package/lib/families/osmosis/account.js +60 -0
- package/lib/families/osmosis/account.js.map +1 -0
- package/lib/families/osmosis/api/sdk.d.ts +35 -0
- package/lib/families/osmosis/api/sdk.d.ts.map +1 -0
- package/lib/families/osmosis/api/sdk.js +478 -0
- package/lib/families/osmosis/api/sdk.js.map +1 -0
- package/lib/families/osmosis/api/sdk.types.d.ts +57 -0
- package/lib/families/osmosis/api/sdk.types.d.ts.map +1 -0
- package/lib/families/osmosis/api/sdk.types.js +15 -0
- package/lib/families/osmosis/api/sdk.types.js.map +1 -0
- package/lib/families/osmosis/api/sdk.unit.test.d.ts +2 -0
- package/lib/families/osmosis/api/sdk.unit.test.d.ts.map +1 -0
- package/lib/families/osmosis/api/sdk.unit.test.js +50 -0
- package/lib/families/osmosis/api/sdk.unit.test.js.map +1 -0
- package/lib/families/osmosis/bridge/js.d.ts +8 -0
- package/lib/families/osmosis/bridge/js.d.ts.map +1 -0
- package/lib/families/osmosis/bridge/js.js +98 -0
- package/lib/families/osmosis/bridge/js.js.map +1 -0
- package/lib/families/osmosis/bridge.integration.test.d.ts +2 -0
- package/lib/families/osmosis/bridge.integration.test.d.ts.map +1 -0
- package/lib/families/osmosis/bridge.integration.test.js +383 -0
- package/lib/families/osmosis/bridge.integration.test.js.map +1 -0
- package/lib/families/osmosis/cli-transaction.d.ts +38 -0
- package/lib/families/osmosis/cli-transaction.d.ts.map +1 -0
- package/lib/families/osmosis/cli-transaction.js +119 -0
- package/lib/families/osmosis/cli-transaction.js.map +1 -0
- package/lib/families/osmosis/deviceTransactionConfig.d.ts +25 -0
- package/lib/families/osmosis/deviceTransactionConfig.d.ts.map +1 -0
- package/lib/families/osmosis/deviceTransactionConfig.js +132 -0
- package/lib/families/osmosis/deviceTransactionConfig.js.map +1 -0
- package/lib/families/osmosis/errors.d.ts +4 -0
- package/lib/families/osmosis/errors.d.ts.map +1 -0
- package/lib/families/osmosis/errors.js +8 -0
- package/lib/families/osmosis/errors.js.map +1 -0
- package/lib/families/osmosis/hw-getAddress.d.ts +4 -0
- package/lib/families/osmosis/hw-getAddress.d.ts.map +1 -0
- package/lib/families/osmosis/hw-getAddress.js +64 -0
- package/lib/families/osmosis/hw-getAddress.js.map +1 -0
- package/lib/families/osmosis/js-buildTransaction.d.ts +14 -0
- package/lib/families/osmosis/js-buildTransaction.d.ts.map +1 -0
- package/lib/families/osmosis/js-buildTransaction.js +303 -0
- package/lib/families/osmosis/js-buildTransaction.js.map +1 -0
- package/lib/families/osmosis/js-estimateMaxSpendable.d.ts +15 -0
- package/lib/families/osmosis/js-estimateMaxSpendable.d.ts.map +1 -0
- package/lib/families/osmosis/js-estimateMaxSpendable.js +67 -0
- package/lib/families/osmosis/js-estimateMaxSpendable.js.map +1 -0
- package/lib/families/osmosis/js-getFeesForTransaction.d.ts +15 -0
- package/lib/families/osmosis/js-getFeesForTransaction.d.ts.map +1 -0
- package/lib/families/osmosis/js-getFeesForTransaction.js +85 -0
- package/lib/families/osmosis/js-getFeesForTransaction.js.map +1 -0
- package/lib/families/osmosis/js-getTransactionStatus.d.ts +3 -0
- package/lib/families/osmosis/js-getTransactionStatus.d.ts.map +1 -0
- package/lib/families/osmosis/js-getTransactionStatus.js +10 -0
- package/lib/families/osmosis/js-getTransactionStatus.js.map +1 -0
- package/lib/families/osmosis/js-signOperation.d.ts +10 -0
- package/lib/families/osmosis/js-signOperation.d.ts.map +1 -0
- package/lib/families/osmosis/js-signOperation.js +211 -0
- package/lib/families/osmosis/js-signOperation.js.map +1 -0
- package/lib/families/osmosis/js-synchronization.d.ts +9 -0
- package/lib/families/osmosis/js-synchronization.d.ts.map +1 -0
- package/lib/families/osmosis/js-synchronization.js +176 -0
- package/lib/families/osmosis/js-synchronization.js.map +1 -0
- package/lib/families/osmosis/js-transaction.d.ts +23 -0
- package/lib/families/osmosis/js-transaction.d.ts.map +1 -0
- package/lib/families/osmosis/js-transaction.js +177 -0
- package/lib/families/osmosis/js-transaction.js.map +1 -0
- package/lib/families/osmosis/logic.d.ts +5 -0
- package/lib/families/osmosis/logic.d.ts.map +1 -0
- package/lib/families/osmosis/logic.js +22 -0
- package/lib/families/osmosis/logic.js.map +1 -0
- package/lib/families/osmosis/preloadedData.d.ts +9 -0
- package/lib/families/osmosis/preloadedData.d.ts.map +1 -0
- package/lib/families/osmosis/preloadedData.js +32 -0
- package/lib/families/osmosis/preloadedData.js.map +1 -0
- package/lib/families/osmosis/serialization.d.ts +7 -0
- package/lib/families/osmosis/serialization.d.ts.map +1 -0
- package/lib/families/osmosis/serialization.js +5 -0
- package/lib/families/osmosis/serialization.js.map +1 -0
- package/lib/families/osmosis/specs.d.ts +7 -0
- package/lib/families/osmosis/specs.d.ts.map +1 -0
- package/lib/families/osmosis/specs.js +402 -0
- package/lib/families/osmosis/specs.js.map +1 -0
- package/lib/families/osmosis/speculos-deviceActions.d.ts +7 -0
- package/lib/families/osmosis/speculos-deviceActions.d.ts.map +1 -0
- package/lib/families/osmosis/speculos-deviceActions.js +120 -0
- package/lib/families/osmosis/speculos-deviceActions.js.map +1 -0
- package/lib/families/osmosis/transaction.d.ts +10 -0
- package/lib/families/osmosis/transaction.d.ts.map +1 -0
- package/lib/families/osmosis/transaction.js +13 -0
- package/lib/families/osmosis/transaction.js.map +1 -0
- package/lib/families/osmosis/types.d.ts +38 -0
- package/lib/families/osmosis/types.d.ts.map +1 -0
- package/lib/families/osmosis/types.js +3 -0
- package/lib/families/osmosis/types.js.map +1 -0
- package/lib/families/osmosis/utils.d.ts +8 -0
- package/lib/families/osmosis/utils.d.ts.map +1 -0
- package/lib/families/osmosis/utils.js +28 -0
- package/lib/families/osmosis/utils.js.map +1 -0
- package/lib/families/osmosis/validators.d.ts +4 -0
- package/lib/families/osmosis/validators.d.ts.map +1 -0
- package/lib/families/osmosis/validators.js +131 -0
- package/lib/families/osmosis/validators.js.map +1 -0
- package/lib/families/polkadot/specs.d.ts.map +1 -1
- package/lib/families/polkadot/specs.js +3 -4
- package/lib/families/polkadot/specs.js.map +1 -1
- package/lib/featureFlags/defaultFeatures.d.ts.map +1 -1
- package/lib/featureFlags/defaultFeatures.js +3 -0
- package/lib/featureFlags/defaultFeatures.js.map +1 -1
- package/lib/featureFlags/provider.d.ts +1 -5
- package/lib/featureFlags/provider.d.ts.map +1 -1
- package/lib/featureFlags/provider.js +4 -6
- package/lib/featureFlags/provider.js.map +1 -1
- package/lib/featureFlags/useFeature.d.ts.map +1 -1
- package/lib/featureFlags/useFeature.js +1 -3
- package/lib/featureFlags/useFeature.js.map +1 -1
- package/lib/generated/account.d.ts +7 -1
- package/lib/generated/account.d.ts.map +1 -1
- package/lib/generated/account.js +4 -2
- package/lib/generated/account.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 +14 -12
- package/lib/generated/bridge/js.js.map +1 -1
- package/lib/generated/bridge/mock.d.ts.map +1 -1
- package/lib/generated/bridge/mock.js.map +1 -1
- package/lib/generated/cli-transaction.d.ts +33 -2
- package/lib/generated/cli-transaction.d.ts.map +1 -1
- package/lib/generated/cli-transaction.js +14 -12
- package/lib/generated/cli-transaction.js.map +1 -1
- package/lib/generated/deviceTransactionConfig.d.ts +4 -1
- package/lib/generated/deviceTransactionConfig.d.ts.map +1 -1
- package/lib/generated/deviceTransactionConfig.js +14 -12
- package/lib/generated/deviceTransactionConfig.js.map +1 -1
- package/lib/generated/exchange.d.ts.map +1 -1
- package/lib/generated/exchange.js.map +1 -1
- package/lib/generated/hw-getAddress.d.ts +1 -0
- package/lib/generated/hw-getAddress.d.ts.map +1 -1
- package/lib/generated/hw-getAddress.js +14 -12
- package/lib/generated/hw-getAddress.js.map +1 -1
- package/lib/generated/hw-signMessage.d.ts.map +1 -1
- package/lib/generated/hw-signMessage.js.map +1 -1
- package/lib/generated/mock.d.ts.map +1 -1
- package/lib/generated/mock.js.map +1 -1
- package/lib/generated/platformAdapter.d.ts.map +1 -1
- package/lib/generated/platformAdapter.js.map +1 -1
- package/lib/generated/presync.d.ts.map +1 -1
- package/lib/generated/presync.js.map +1 -1
- package/lib/generated/specs.d.ts +3 -0
- package/lib/generated/specs.d.ts.map +1 -1
- package/lib/generated/specs.js +14 -12
- package/lib/generated/specs.js.map +1 -1
- package/lib/generated/speculos-deviceActions.d.ts +3 -0
- package/lib/generated/speculos-deviceActions.d.ts.map +1 -1
- package/lib/generated/speculos-deviceActions.js +14 -12
- package/lib/generated/speculos-deviceActions.js.map +1 -1
- package/lib/generated/transaction.d.ts +9 -1
- package/lib/generated/transaction.d.ts.map +1 -1
- package/lib/generated/transaction.js +14 -12
- package/lib/generated/transaction.js.map +1 -1
- package/lib/generated/types.d.ts +8 -4
- package/lib/generated/types.d.ts.map +1 -1
- package/lib/platform/react.d.ts.map +1 -1
- package/lib/platform/react.js +3 -6
- package/lib/platform/react.js.map +1 -1
- package/lib/reconciliation.d.ts.map +1 -1
- package/lib/reconciliation.js +9 -0
- package/lib/reconciliation.js.map +1 -1
- package/package.json +14 -9
- package/src/__tests__/test-helpers/setup.ts +2 -0
- package/src/account/helpers.ts +1 -0
- package/src/account/serialization.ts +6 -0
- package/src/currencies/__snapshots__/sortByMarketcap.test.ts.snap +36 -1
- package/src/data/icons/react/index.tsx +1 -0
- package/src/data/icons/react/osmo.tsx +14 -0
- package/src/data/icons/reactNative/index.tsx +1 -0
- package/src/data/icons/reactNative/osmo.tsx +15 -0
- package/src/data/icons/svg/OSMO.svg +7 -0
- package/src/env.ts +10 -0
- package/src/families/cosmos/CosmosValidatorsManager.ts +420 -0
- package/src/families/cosmos/account.ts +29 -10
- package/src/families/cosmos/api/Cosmos.ts +267 -257
- package/src/families/cosmos/bridge/js.ts +6 -7
- package/src/families/cosmos/bridge/mock.ts +1 -1
- package/src/families/cosmos/bridge.integration.test.ts +5 -5
- package/src/families/cosmos/cli-transaction.ts +7 -8
- package/src/families/cosmos/js-buildTransaction.ts +4 -4
- package/src/families/cosmos/js-createTransaction.ts +1 -1
- package/src/families/cosmos/js-getTransactionStatus.ts +276 -226
- package/src/families/cosmos/js-prepareTransaction.ts +3 -3
- package/src/families/cosmos/js-signOperation.ts +4 -4
- package/src/families/cosmos/js-synchronisation.ts +3 -3
- package/src/families/cosmos/logic.ts +1 -1
- package/src/families/cosmos/mock.ts +1 -1
- package/src/families/cosmos/react.test.ts +25 -14
- package/src/families/cosmos/react.ts +73 -21
- package/src/families/cosmos/specs.ts +4 -4
- package/src/families/cosmos/speculos-deviceActions.ts +1 -2
- package/src/families/cosmos/transaction.ts +4 -6
- package/src/families/cosmos/types.ts +41 -13
- package/src/families/cosmos/utils.ts +8 -0
- package/src/families/cosmos/validators.ts +5 -363
- package/src/families/elrond/specs.ts +1 -1
- package/src/families/filecoin/bridge/account.ts +12 -5
- package/src/families/osmosis/OsmosisSupplyTypes.ts +53 -0
- package/src/families/osmosis/__snapshots__/bridge.integration.test.ts.snap +852 -0
- package/src/families/osmosis/account.ts +65 -0
- package/src/families/osmosis/api/sdk.ts +530 -0
- package/src/families/osmosis/api/sdk.types.ts +65 -0
- package/src/families/osmosis/api/sdk.unit.test.ts +70 -0
- package/src/families/osmosis/bridge/js.ts +64 -0
- package/src/families/osmosis/bridge.integration.test.ts +467 -0
- package/src/families/osmosis/cli-transaction.ts +145 -0
- package/src/families/osmosis/deviceTransactionConfig.ts +174 -0
- package/src/families/osmosis/errors.ts +13 -0
- package/src/families/osmosis/hw-getAddress.ts +14 -0
- package/src/families/osmosis/js-buildTransaction.ts +306 -0
- package/src/families/osmosis/js-estimateMaxSpendable.ts +26 -0
- package/src/families/osmosis/js-getFeesForTransaction.ts +44 -0
- package/src/families/osmosis/js-getTransactionStatus.ts +9 -0
- package/src/families/osmosis/js-signOperation.ts +172 -0
- package/src/families/osmosis/js-synchronization.ts +122 -0
- package/src/families/osmosis/js-transaction.ts +96 -0
- package/src/families/osmosis/logic.ts +26 -0
- package/src/families/osmosis/preloadedData.ts +32 -0
- package/src/families/osmosis/serialization.ts +6 -0
- package/src/families/osmosis/specs.ts +393 -0
- package/src/families/osmosis/speculos-deviceActions.ts +94 -0
- package/src/families/osmosis/transaction.ts +20 -0
- package/src/families/osmosis/types.ts +48 -0
- package/src/families/osmosis/utils.ts +31 -0
- package/src/families/osmosis/validators.ts +79 -0
- package/src/families/polkadot/specs.ts +3 -4
- package/src/featureFlags/defaultFeatures.ts +3 -0
- package/src/featureFlags/provider.tsx +1 -11
- package/src/featureFlags/useFeature.ts +2 -6
- package/src/generated/account.ts +10 -0
- package/src/generated/bridge/js.ts +20 -0
- package/src/generated/bridge/mock.ts +8 -0
- package/src/generated/cli-transaction.ts +19 -0
- package/src/generated/deviceTransactionConfig.ts +33 -13
- package/src/generated/exchange.ts +5 -0
- package/src/generated/hw-getAddress.ts +20 -0
- package/src/generated/hw-signMessage.ts +3 -0
- package/src/generated/mock.ts +3 -0
- package/src/generated/platformAdapter.ts +4 -0
- package/src/generated/presync.ts +1 -0
- package/src/generated/specs.ts +19 -0
- package/src/generated/speculos-deviceActions.ts +19 -0
- package/src/generated/transaction.ts +20 -0
- package/src/generated/types.ts +12 -7
- package/src/platform/react.ts +3 -7
- package/src/reconciliation.ts +16 -0
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { BigNumber } from "bignumber.js";
|
|
2
|
+
import { CosmosOperationMode } from "../cosmos/types";
|
|
3
|
+
|
|
4
|
+
const gasForTransaction: {
|
|
5
|
+
[Key in CosmosOperationMode]: number;
|
|
6
|
+
} = {
|
|
7
|
+
send: 100000,
|
|
8
|
+
delegate: 300000,
|
|
9
|
+
undelegate: 350000,
|
|
10
|
+
redelegate: 550000,
|
|
11
|
+
claimReward: 300000,
|
|
12
|
+
claimRewardCompound: 400000,
|
|
13
|
+
};
|
|
14
|
+
|
|
15
|
+
// Default fees in uosmo
|
|
16
|
+
// Dear future developer working on this file, if fees become non-zero
|
|
17
|
+
// make sure to flip estimatedFees.isZero() to !estimatedFees.isZero() in
|
|
18
|
+
// './deviceTransactionConfig.ts'.
|
|
19
|
+
export const DEFAULT_FEES = 0;
|
|
20
|
+
export const MIN_GAS_FEE = 0.0025; // Min gas fee in uosmo (https://commonwealth.im/osmosis/discussion/6298-draft-minimum-gas-fee)
|
|
21
|
+
export const DEFAULT_GAS = 100000;
|
|
22
|
+
|
|
23
|
+
/**
|
|
24
|
+
* Fetch the transaction fees for a transaction
|
|
25
|
+
*/
|
|
26
|
+
const getEstimatedFees = async (mode: string): Promise<BigNumber> => {
|
|
27
|
+
const gas = await getEstimatedGas(mode as CosmosOperationMode);
|
|
28
|
+
return gas.times(MIN_GAS_FEE);
|
|
29
|
+
};
|
|
30
|
+
|
|
31
|
+
/**
|
|
32
|
+
* Fetch the gas for a transaction
|
|
33
|
+
*/
|
|
34
|
+
export const getEstimatedGas = async (
|
|
35
|
+
mode: CosmosOperationMode
|
|
36
|
+
): Promise<BigNumber> => {
|
|
37
|
+
const estimatedGas = gasForTransaction[mode];
|
|
38
|
+
if (!estimatedGas) {
|
|
39
|
+
return new BigNumber(DEFAULT_GAS);
|
|
40
|
+
}
|
|
41
|
+
return new BigNumber(estimatedGas);
|
|
42
|
+
};
|
|
43
|
+
|
|
44
|
+
export default getEstimatedFees;
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { CosmosTransactionStatusManager } from "../cosmos/js-getTransactionStatus";
|
|
2
|
+
import { osmosisAPI } from "./api/sdk";
|
|
3
|
+
|
|
4
|
+
const osmosisTransactionStatusManager = new CosmosTransactionStatusManager({
|
|
5
|
+
api: osmosisAPI,
|
|
6
|
+
validatorOperatorAddressPrefix: "osmovaloper",
|
|
7
|
+
});
|
|
8
|
+
|
|
9
|
+
export default osmosisTransactionStatusManager.getTransactionStatus;
|
|
@@ -0,0 +1,172 @@
|
|
|
1
|
+
import type {
|
|
2
|
+
Account,
|
|
3
|
+
DeviceId,
|
|
4
|
+
Operation,
|
|
5
|
+
OperationType,
|
|
6
|
+
SignOperationEvent,
|
|
7
|
+
} from "@ledgerhq/types-live";
|
|
8
|
+
import type { Transaction } from "./types";
|
|
9
|
+
import { osmosisAPI } from "./api/sdk";
|
|
10
|
+
import { Observable } from "rxjs";
|
|
11
|
+
import { withDevice } from "../../hw/deviceAccess";
|
|
12
|
+
import { encodeOperationId } from "../../operation";
|
|
13
|
+
import { LedgerSigner } from "@cosmjs/ledger-amino";
|
|
14
|
+
import { HdPath, stringToPath } from "@cosmjs/crypto";
|
|
15
|
+
import { buildTransaction, postBuildTransaction } from "./js-buildTransaction";
|
|
16
|
+
import BigNumber from "bignumber.js";
|
|
17
|
+
import { makeSignDoc } from "@cosmjs/launchpad";
|
|
18
|
+
import getEstimatedFees, {
|
|
19
|
+
DEFAULT_FEES,
|
|
20
|
+
getEstimatedGas,
|
|
21
|
+
} from "./js-getFeesForTransaction";
|
|
22
|
+
|
|
23
|
+
const signOperation = ({
|
|
24
|
+
account,
|
|
25
|
+
deviceId,
|
|
26
|
+
transaction,
|
|
27
|
+
}: {
|
|
28
|
+
account: Account;
|
|
29
|
+
deviceId: DeviceId;
|
|
30
|
+
transaction: Transaction;
|
|
31
|
+
}): Observable<SignOperationEvent> =>
|
|
32
|
+
withDevice(deviceId)((transport) =>
|
|
33
|
+
Observable.create((o) => {
|
|
34
|
+
let cancelled;
|
|
35
|
+
|
|
36
|
+
async function main() {
|
|
37
|
+
const { accountNumber, sequence } = await osmosisAPI.getAccount(
|
|
38
|
+
account.freshAddress
|
|
39
|
+
);
|
|
40
|
+
const chainId = await osmosisAPI.getChainId();
|
|
41
|
+
const hdPaths: HdPath = stringToPath("m/" + account.freshAddressPath);
|
|
42
|
+
const ledgerSigner = new LedgerSigner(transport, {
|
|
43
|
+
hdPaths: [hdPaths],
|
|
44
|
+
prefix: account.currency.id,
|
|
45
|
+
});
|
|
46
|
+
o.next({ type: "device-signature-requested" });
|
|
47
|
+
|
|
48
|
+
const { aminoMsgs, protoMsgs } = await buildTransaction(
|
|
49
|
+
account,
|
|
50
|
+
transaction
|
|
51
|
+
);
|
|
52
|
+
|
|
53
|
+
if (aminoMsgs.length === 0 || protoMsgs.length === 0) {
|
|
54
|
+
return;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
const feeToEncode = {
|
|
58
|
+
amount: [
|
|
59
|
+
{
|
|
60
|
+
denom: account.currency.units[1].code,
|
|
61
|
+
amount: transaction.fees
|
|
62
|
+
? (transaction.fees.toNumber().toString() as string)
|
|
63
|
+
: (String(await getEstimatedFees(transaction.mode)) as string),
|
|
64
|
+
},
|
|
65
|
+
],
|
|
66
|
+
gas: transaction.gas
|
|
67
|
+
? (transaction.gas.toString() as string)
|
|
68
|
+
: (String(await getEstimatedGas(transaction.mode)) as string),
|
|
69
|
+
};
|
|
70
|
+
|
|
71
|
+
const signDoc = makeSignDoc(
|
|
72
|
+
aminoMsgs,
|
|
73
|
+
feeToEncode,
|
|
74
|
+
chainId,
|
|
75
|
+
transaction.memo || "",
|
|
76
|
+
accountNumber.toString(),
|
|
77
|
+
sequence.toString()
|
|
78
|
+
);
|
|
79
|
+
|
|
80
|
+
const signResponse = await ledgerSigner.signAmino(
|
|
81
|
+
account.freshAddress,
|
|
82
|
+
signDoc
|
|
83
|
+
);
|
|
84
|
+
|
|
85
|
+
const signed_tx_bytes = await postBuildTransaction(
|
|
86
|
+
signResponse,
|
|
87
|
+
protoMsgs
|
|
88
|
+
);
|
|
89
|
+
|
|
90
|
+
const signature = Buffer.from(signed_tx_bytes).toString("hex");
|
|
91
|
+
|
|
92
|
+
if (cancelled) {
|
|
93
|
+
return;
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
o.next({ type: "device-signature-granted" });
|
|
97
|
+
|
|
98
|
+
const hash = ""; // resolved at broadcast time
|
|
99
|
+
const accountId = account.id;
|
|
100
|
+
|
|
101
|
+
const fee = transaction.fees || new BigNumber(DEFAULT_FEES);
|
|
102
|
+
const extra = { memo: transaction.memo || {} };
|
|
103
|
+
const type: OperationType =
|
|
104
|
+
transaction.mode === "undelegate"
|
|
105
|
+
? "UNDELEGATE"
|
|
106
|
+
: transaction.mode === "delegate"
|
|
107
|
+
? "DELEGATE"
|
|
108
|
+
: transaction.mode === "redelegate"
|
|
109
|
+
? "REDELEGATE"
|
|
110
|
+
: ["claimReward", "claimRewardCompound"].includes(transaction.mode)
|
|
111
|
+
? "REWARD"
|
|
112
|
+
: "OUT";
|
|
113
|
+
|
|
114
|
+
const senders: string[] = [];
|
|
115
|
+
const recipients: string[] = [];
|
|
116
|
+
|
|
117
|
+
if (transaction.mode === "send") {
|
|
118
|
+
senders.push(account.freshAddress);
|
|
119
|
+
recipients.push(transaction.recipient);
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
if (transaction.mode === "redelegate") {
|
|
123
|
+
Object.assign(extra, {
|
|
124
|
+
sourceValidator: transaction.sourceValidator,
|
|
125
|
+
});
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
if (transaction.mode !== "send") {
|
|
129
|
+
Object.assign(extra, {
|
|
130
|
+
validators: transaction.validators,
|
|
131
|
+
});
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
// build optimistic operation
|
|
135
|
+
const operation: Operation = {
|
|
136
|
+
id: encodeOperationId(accountId, hash, type),
|
|
137
|
+
hash,
|
|
138
|
+
type,
|
|
139
|
+
value: transaction.amount, // Note: prepareTransaction already takes care of setting the correct tx amount (w/ fees) if useAllAmount is selected
|
|
140
|
+
fee,
|
|
141
|
+
extra,
|
|
142
|
+
blockHash: null,
|
|
143
|
+
blockHeight: null,
|
|
144
|
+
senders,
|
|
145
|
+
recipients,
|
|
146
|
+
accountId,
|
|
147
|
+
date: new Date(),
|
|
148
|
+
transactionSequenceNumber: sequence,
|
|
149
|
+
};
|
|
150
|
+
|
|
151
|
+
o.next({
|
|
152
|
+
type: "signed",
|
|
153
|
+
signedOperation: {
|
|
154
|
+
operation,
|
|
155
|
+
signature,
|
|
156
|
+
expirationDate: null,
|
|
157
|
+
},
|
|
158
|
+
});
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
main().then(
|
|
162
|
+
() => o.complete(),
|
|
163
|
+
(e) => o.error(e)
|
|
164
|
+
);
|
|
165
|
+
|
|
166
|
+
return () => {
|
|
167
|
+
cancelled = true;
|
|
168
|
+
};
|
|
169
|
+
})
|
|
170
|
+
);
|
|
171
|
+
|
|
172
|
+
export default signOperation;
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
import { pubkeyToAddress, decodeBech32Pubkey } from "@cosmjs/amino";
|
|
2
|
+
import { BigNumber } from "bignumber.js";
|
|
3
|
+
import { encodeAccountId } from "../../account";
|
|
4
|
+
import {
|
|
5
|
+
makeSync,
|
|
6
|
+
makeScanAccounts,
|
|
7
|
+
GetAccountShape,
|
|
8
|
+
mergeOps,
|
|
9
|
+
} from "../../bridge/jsHelpers";
|
|
10
|
+
import { osmosisAPI } from "./api/sdk";
|
|
11
|
+
|
|
12
|
+
const accountPubPrefix = "osmopub";
|
|
13
|
+
const accountAddressPrefix = "osmo";
|
|
14
|
+
|
|
15
|
+
const getAccountShape: GetAccountShape = async (info) => {
|
|
16
|
+
const { address, currency, derivationMode, initialAccount } = info;
|
|
17
|
+
let xpubOrAddress = address;
|
|
18
|
+
|
|
19
|
+
if (address.match(accountPubPrefix)) {
|
|
20
|
+
const pubkey = decodeBech32Pubkey(address);
|
|
21
|
+
xpubOrAddress = pubkeyToAddress(pubkey as any, accountAddressPrefix);
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
const accountId = encodeAccountId({
|
|
25
|
+
type: "js",
|
|
26
|
+
version: "2",
|
|
27
|
+
currencyId: currency.id,
|
|
28
|
+
xpubOrAddress,
|
|
29
|
+
derivationMode,
|
|
30
|
+
});
|
|
31
|
+
|
|
32
|
+
const {
|
|
33
|
+
balances,
|
|
34
|
+
blockHeight,
|
|
35
|
+
delegations,
|
|
36
|
+
redelegations,
|
|
37
|
+
unbondings,
|
|
38
|
+
withdrawAddress,
|
|
39
|
+
} = await osmosisAPI.getAccountInfo(xpubOrAddress, currency);
|
|
40
|
+
|
|
41
|
+
const oldOperations = initialAccount?.operations || [];
|
|
42
|
+
|
|
43
|
+
let operations = oldOperations;
|
|
44
|
+
|
|
45
|
+
// For indexer efficiency reasons, only fetch new operations starting from the datetime
|
|
46
|
+
// of the last operation previously fetched
|
|
47
|
+
let lastOperationDate: Date | null = null;
|
|
48
|
+
if (operations.length > 0) {
|
|
49
|
+
operations.forEach((o) => {
|
|
50
|
+
if (o.date != null) {
|
|
51
|
+
if (lastOperationDate !== null) {
|
|
52
|
+
if (o.date.valueOf() > lastOperationDate.valueOf()) {
|
|
53
|
+
lastOperationDate = o.date;
|
|
54
|
+
}
|
|
55
|
+
} else {
|
|
56
|
+
lastOperationDate = o.date;
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
});
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
const newOperations = await osmosisAPI.getOperations(
|
|
63
|
+
accountId,
|
|
64
|
+
address,
|
|
65
|
+
lastOperationDate
|
|
66
|
+
);
|
|
67
|
+
|
|
68
|
+
// Merge new operations with the previously synced ones
|
|
69
|
+
operations = mergeOps(operations, newOperations);
|
|
70
|
+
|
|
71
|
+
let balance = balances;
|
|
72
|
+
let delegatedBalance = new BigNumber(0);
|
|
73
|
+
let pendingRewardsBalance = new BigNumber(0);
|
|
74
|
+
let unbondingBalance = new BigNumber(0);
|
|
75
|
+
|
|
76
|
+
for (const delegation of delegations) {
|
|
77
|
+
delegatedBalance = delegatedBalance.plus(delegation.amount);
|
|
78
|
+
balance = balance.plus(delegation.amount);
|
|
79
|
+
|
|
80
|
+
pendingRewardsBalance = pendingRewardsBalance.plus(
|
|
81
|
+
delegation.pendingRewards
|
|
82
|
+
);
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
for (const unbonding of unbondings) {
|
|
86
|
+
unbondingBalance = unbondingBalance.plus(unbonding.amount);
|
|
87
|
+
balance = balance.plus(unbonding.amount);
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
let spendableBalance = balance.minus(unbondingBalance.plus(delegatedBalance));
|
|
91
|
+
|
|
92
|
+
if (spendableBalance.lt(0)) {
|
|
93
|
+
spendableBalance = new BigNumber(0);
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
const shape = {
|
|
97
|
+
id: accountId,
|
|
98
|
+
xpub: xpubOrAddress,
|
|
99
|
+
balance: balance,
|
|
100
|
+
spendableBalance,
|
|
101
|
+
operationsCount: operations.length,
|
|
102
|
+
blockHeight,
|
|
103
|
+
cosmosResources: {
|
|
104
|
+
delegations,
|
|
105
|
+
redelegations,
|
|
106
|
+
unbondings,
|
|
107
|
+
delegatedBalance,
|
|
108
|
+
pendingRewardsBalance,
|
|
109
|
+
unbondingBalance,
|
|
110
|
+
withdrawAddress,
|
|
111
|
+
},
|
|
112
|
+
};
|
|
113
|
+
|
|
114
|
+
if (shape.spendableBalance && shape.spendableBalance.lt(0)) {
|
|
115
|
+
shape.spendableBalance = new BigNumber(0);
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
return { ...shape, operations };
|
|
119
|
+
};
|
|
120
|
+
|
|
121
|
+
export const scanAccounts = makeScanAccounts({ getAccountShape });
|
|
122
|
+
export const sync = makeSync({ getAccountShape });
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
import { BigNumber } from "bignumber.js";
|
|
2
|
+
import type { Account } from "@ledgerhq/types-live";
|
|
3
|
+
import type { Transaction } from "./types";
|
|
4
|
+
import getEstimatedFees, { getEstimatedGas } from "./js-getFeesForTransaction";
|
|
5
|
+
import estimateMaxSpendable from "./js-estimateMaxSpendable";
|
|
6
|
+
import { CosmosDelegationInfo } from "../cosmos/types";
|
|
7
|
+
|
|
8
|
+
const sameFees = (a, b) => (!a || !b ? a === b : a.eq(b));
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* Create an empty transaction
|
|
12
|
+
*
|
|
13
|
+
* @returns {Transaction}
|
|
14
|
+
*/
|
|
15
|
+
export const createTransaction = (): Transaction => ({
|
|
16
|
+
family: "osmosis",
|
|
17
|
+
mode: "send",
|
|
18
|
+
amount: new BigNumber(0),
|
|
19
|
+
recipient: "",
|
|
20
|
+
useAllAmount: false,
|
|
21
|
+
fees: null,
|
|
22
|
+
gas: null,
|
|
23
|
+
memo: null,
|
|
24
|
+
validators: [] as CosmosDelegationInfo[],
|
|
25
|
+
sourceValidator: null,
|
|
26
|
+
networkInfo: {
|
|
27
|
+
family: "osmosis",
|
|
28
|
+
fees: new BigNumber(0),
|
|
29
|
+
},
|
|
30
|
+
});
|
|
31
|
+
|
|
32
|
+
/**
|
|
33
|
+
* Apply patch to transaction
|
|
34
|
+
*
|
|
35
|
+
* @param {*} t
|
|
36
|
+
* @param {*} patch
|
|
37
|
+
*/
|
|
38
|
+
export const updateTransaction = (
|
|
39
|
+
t: Transaction,
|
|
40
|
+
patch: Partial<Transaction>
|
|
41
|
+
): Transaction => {
|
|
42
|
+
if ("mode" in patch && patch.mode !== t.mode) {
|
|
43
|
+
return { ...t, ...patch, gas: null, fees: null };
|
|
44
|
+
}
|
|
45
|
+
if (
|
|
46
|
+
"validators" in patch &&
|
|
47
|
+
patch.validators?.length !== t.validators.length
|
|
48
|
+
) {
|
|
49
|
+
return { ...t, ...patch, gas: null, fees: null };
|
|
50
|
+
}
|
|
51
|
+
return { ...t, ...patch };
|
|
52
|
+
};
|
|
53
|
+
|
|
54
|
+
/**
|
|
55
|
+
* Prepare transaction before checking status
|
|
56
|
+
*
|
|
57
|
+
* @param {Account} a
|
|
58
|
+
* @param {Transaction} t
|
|
59
|
+
*/
|
|
60
|
+
export const prepareTransaction = async (account: Account, t: Transaction) => {
|
|
61
|
+
let { fees, memo, gas, amount } = t;
|
|
62
|
+
const { mode } = t;
|
|
63
|
+
|
|
64
|
+
fees = await getEstimatedFees(mode);
|
|
65
|
+
gas = await getEstimatedGas(mode);
|
|
66
|
+
|
|
67
|
+
if (mode === "send") {
|
|
68
|
+
t.amount = t.useAllAmount
|
|
69
|
+
? await estimateMaxSpendable({ account, parentAccount: null, mode })
|
|
70
|
+
: amount;
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
if (mode !== "send" && !memo) {
|
|
74
|
+
memo = "Ledger Live";
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
if (t.useAllAmount) {
|
|
78
|
+
amount = await estimateMaxSpendable({ account, parentAccount: null, mode });
|
|
79
|
+
t = { ...t, amount, fees, gas };
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
if ((mode === "delegate" || mode === "claimRewardCompound") && amount.eq(0)) {
|
|
83
|
+
const validatorAmount = t.validators.reduce(
|
|
84
|
+
(old, current) => old.plus(current.amount),
|
|
85
|
+
new BigNumber(0)
|
|
86
|
+
);
|
|
87
|
+
amount = validatorAmount;
|
|
88
|
+
t = { ...t, amount, fees, gas };
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
if (t.memo !== memo || !sameFees(t.fees, fees)) {
|
|
92
|
+
return { ...t, memo, fees, gas };
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
return t;
|
|
96
|
+
};
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import type { Account } from "@ledgerhq/types-live";
|
|
2
|
+
import { BigNumber } from "bignumber.js";
|
|
3
|
+
import { COSMOS_MAX_DELEGATIONS } from "../cosmos/logic";
|
|
4
|
+
import { DEFAULT_GAS, MIN_GAS_FEE } from "./js-getFeesForTransaction";
|
|
5
|
+
|
|
6
|
+
const OSMOSIS_MIN_SAFE = new BigNumber(10000); // 10000 uosmo, setting a reasonable floor
|
|
7
|
+
const OSMOSIS_MIN_FEES = new BigNumber(MIN_GAS_FEE * DEFAULT_GAS);
|
|
8
|
+
|
|
9
|
+
export function canDelegate(account: Account): boolean {
|
|
10
|
+
const maxSpendableBalance = getMaxDelegationAvailable(account, 1);
|
|
11
|
+
return maxSpendableBalance.gt(0);
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
export function getMaxDelegationAvailable(
|
|
15
|
+
account: Account,
|
|
16
|
+
validatorsLength: number
|
|
17
|
+
): BigNumber {
|
|
18
|
+
const numberOfDelegations = Math.min(
|
|
19
|
+
COSMOS_MAX_DELEGATIONS,
|
|
20
|
+
validatorsLength || 1
|
|
21
|
+
);
|
|
22
|
+
const { spendableBalance } = account;
|
|
23
|
+
return spendableBalance
|
|
24
|
+
.minus(OSMOSIS_MIN_FEES.multipliedBy(numberOfDelegations))
|
|
25
|
+
.minus(OSMOSIS_MIN_SAFE);
|
|
26
|
+
}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { Observable, Subject } from "rxjs";
|
|
2
|
+
import type { CosmosPreloadData, CosmosValidatorItem } from "../cosmos/types";
|
|
3
|
+
import { asSafeCosmosPreloadData } from "../cosmos/preloadedData";
|
|
4
|
+
|
|
5
|
+
// this module holds the cached state of preload()
|
|
6
|
+
// eslint-disable-next-line no-unused-vars
|
|
7
|
+
let currentOsmosisPreloadedData: CosmosPreloadData = {
|
|
8
|
+
// NB initial state because UI need to work even if it's currently "loading", typically after clear cache
|
|
9
|
+
validators: [],
|
|
10
|
+
};
|
|
11
|
+
|
|
12
|
+
const updates = new Subject<CosmosPreloadData>();
|
|
13
|
+
|
|
14
|
+
export function setOsmosisPreloadData(data: CosmosPreloadData): void {
|
|
15
|
+
if (data === currentOsmosisPreloadedData) return;
|
|
16
|
+
currentOsmosisPreloadedData = data;
|
|
17
|
+
updates.next(data);
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
export function getCurrentOsmosisPreloadData(): CosmosPreloadData {
|
|
21
|
+
return currentOsmosisPreloadedData;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
export function getOsmosisPreloadDataUpdates(): Observable<CosmosPreloadData> {
|
|
25
|
+
return updates.asObservable();
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
export function asSafeOsmosisPreloadData(data?: {
|
|
29
|
+
validators?: CosmosValidatorItem[];
|
|
30
|
+
}): CosmosPreloadData {
|
|
31
|
+
return asSafeCosmosPreloadData(data);
|
|
32
|
+
}
|