@subwallet/extension-base 1.3.22-0 → 1.3.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/background/KoniTypes.d.ts +75 -2
- package/background/KoniTypes.js +2 -0
- package/cjs/background/KoniTypes.js +2 -0
- package/cjs/constants/environment.js +4 -2
- package/cjs/constants/signing.js +6 -2
- package/cjs/core/logic-validation/recipientAddress.js +9 -1
- package/cjs/core/logic-validation/transfer.js +35 -29
- package/cjs/core/types.js +1 -0
- package/cjs/core/utils.js +12 -1
- package/cjs/defaults.js +1 -1
- package/cjs/koni/api/dotsama/crowdloan.js +1 -1
- package/cjs/koni/api/nft/index.js +9 -16
- package/cjs/koni/api/staking/index.js +3 -4
- package/cjs/koni/background/handlers/Extension.js +234 -96
- package/cjs/koni/background/handlers/State.js +15 -0
- package/cjs/packageInfo.js +1 -1
- package/cjs/services/balance-service/helpers/subscribe/cardano/consts.js +11 -0
- package/cjs/services/balance-service/helpers/subscribe/cardano/index.js +63 -0
- package/cjs/services/balance-service/helpers/subscribe/cardano/types.js +1 -0
- package/cjs/services/balance-service/helpers/subscribe/cardano/utils.js +74 -0
- package/cjs/services/balance-service/helpers/subscribe/index.js +21 -7
- package/cjs/services/balance-service/helpers/subscribe/ton/utils.js +2 -2
- package/cjs/services/balance-service/index.js +4 -2
- package/cjs/services/balance-service/transfer/cardano-transfer.js +122 -0
- package/cjs/services/balance-service/transfer/token.js +4 -4
- package/cjs/services/chain-service/handler/CardanoApi.js +176 -0
- package/cjs/services/chain-service/handler/CardanoChainHandler.js +83 -0
- package/cjs/services/chain-service/handler/TonApi.js +2 -5
- package/cjs/services/chain-service/index.js +29 -7
- package/cjs/services/chain-service/utils/index.js +40 -11
- package/cjs/services/chain-service/utils/patch.js +1 -1
- package/cjs/services/earning-service/handlers/liquid-staking/bifrost-manta.js +1 -1
- package/cjs/services/earning-service/handlers/liquid-staking/bifrost.js +1 -1
- package/cjs/services/earning-service/service.js +6 -12
- package/cjs/services/fee-service/service.js +19 -8
- package/cjs/services/history-service/index.js +4 -6
- package/cjs/services/inapp-notification-service/index.js +12 -4
- package/cjs/services/keyring-service/context/account-context.js +17 -2
- package/cjs/services/keyring-service/context/handlers/Derive.js +10 -7
- package/cjs/services/keyring-service/context/handlers/Migration.js +268 -0
- package/cjs/services/keyring-service/context/handlers/Mnemonic.js +2 -2
- package/cjs/services/keyring-service/context/handlers/Secret.js +1 -1
- package/cjs/services/keyring-service/utils.js +18 -0
- package/cjs/services/request-service/handler/CardanoRequestHandler.js +172 -0
- package/cjs/services/request-service/handler/EvmRequestHandler.js +1 -1
- package/cjs/services/request-service/index.js +20 -2
- package/cjs/services/setting-service/constants.js +10 -1
- package/cjs/services/storage-service/DatabaseService.js +3 -0
- package/cjs/services/storage-service/db-stores/InappNotification.js +6 -0
- package/cjs/services/swap-service/handler/asset-hub/handler.js +0 -59
- package/cjs/services/swap-service/handler/chainflip-handler.js +33 -281
- package/cjs/services/swap-service/handler/hydradx-handler.js +23 -190
- package/cjs/services/swap-service/handler/simpleswap-handler.js +1 -222
- package/cjs/services/swap-service/handler/uniswap-handler.js +331 -0
- package/cjs/services/swap-service/index.js +31 -22
- package/cjs/services/swap-service/utils.js +21 -38
- package/cjs/services/transaction-service/helpers/index.js +6 -1
- package/cjs/services/transaction-service/index.js +278 -21
- package/cjs/services/transaction-service/utils.js +5 -1
- package/cjs/types/account/info/keyring.js +12 -1
- package/cjs/types/fee/cardano.js +1 -0
- package/cjs/types/swap/index.js +7 -2
- package/cjs/utils/account/analyze.js +2 -1
- package/cjs/utils/account/common.js +29 -20
- package/cjs/utils/account/derive/info/solo.js +9 -4
- package/cjs/utils/account/derive/validate.js +36 -2
- package/cjs/utils/account/transform.js +38 -13
- package/cjs/utils/fee/transfer.js +40 -7
- package/cjs/utils/index.js +2 -2
- package/cjs/utils/staticData/index.js +7 -2
- package/constants/environment.d.ts +1 -0
- package/constants/environment.js +2 -1
- package/constants/signing.js +6 -2
- package/core/logic-validation/recipientAddress.js +11 -3
- package/core/logic-validation/transfer.js +9 -3
- package/core/substrate/xcm-parser.d.ts +1 -1
- package/core/types.d.ts +1 -0
- package/core/types.js +1 -0
- package/core/utils.d.ts +1 -0
- package/core/utils.js +13 -3
- package/defaults.d.ts +1 -1
- package/defaults.js +1 -1
- package/koni/api/dotsama/crowdloan.js +3 -3
- package/koni/api/nft/index.js +10 -16
- package/koni/api/nft/story_odyssey_nft/index.d.ts +1 -1
- package/koni/api/staking/index.js +4 -5
- package/koni/background/handlers/Extension.d.ts +9 -0
- package/koni/background/handlers/Extension.js +144 -8
- package/koni/background/handlers/State.d.ts +5 -1
- package/koni/background/handlers/State.js +16 -1
- package/package.json +71 -9
- package/packageInfo.js +1 -1
- package/services/balance-service/helpers/subscribe/cardano/consts.d.ts +1 -0
- package/services/balance-service/helpers/subscribe/cardano/consts.js +4 -0
- package/services/balance-service/helpers/subscribe/cardano/index.d.ts +2 -0
- package/services/balance-service/helpers/subscribe/cardano/index.js +57 -0
- package/services/balance-service/helpers/subscribe/cardano/types.d.ts +34 -0
- package/services/balance-service/helpers/subscribe/cardano/types.js +1 -0
- package/services/balance-service/helpers/subscribe/cardano/utils.d.ts +15 -0
- package/services/balance-service/helpers/subscribe/cardano/utils.js +62 -0
- package/services/balance-service/helpers/subscribe/index.d.ts +2 -2
- package/services/balance-service/helpers/subscribe/index.js +23 -9
- package/services/balance-service/helpers/subscribe/ton/utils.d.ts +1 -1
- package/services/balance-service/helpers/subscribe/ton/utils.js +1 -1
- package/services/balance-service/index.js +4 -2
- package/services/balance-service/transfer/cardano-transfer.d.ts +24 -0
- package/services/balance-service/transfer/cardano-transfer.js +114 -0
- package/services/balance-service/transfer/token.d.ts +1 -1
- package/services/balance-service/transfer/token.js +2 -2
- package/services/chain-service/handler/CardanoApi.d.ts +38 -0
- package/services/chain-service/handler/CardanoApi.js +167 -0
- package/services/chain-service/handler/CardanoChainHandler.d.ts +17 -0
- package/services/chain-service/handler/CardanoChainHandler.js +75 -0
- package/services/chain-service/handler/TonApi.js +3 -6
- package/services/chain-service/handler/types.d.ts +1 -0
- package/services/chain-service/index.d.ts +3 -1
- package/services/chain-service/index.js +29 -7
- package/services/chain-service/types.d.ts +9 -1
- package/services/chain-service/utils/index.d.ts +4 -0
- package/services/chain-service/utils/index.js +32 -11
- package/services/chain-service/utils/patch.js +1 -1
- package/services/earning-service/handlers/liquid-staking/bifrost-manta.js +1 -1
- package/services/earning-service/handlers/liquid-staking/bifrost.js +1 -1
- package/services/earning-service/service.js +8 -14
- package/services/fee-service/service.js +19 -8
- package/services/history-service/index.js +6 -8
- package/services/inapp-notification-service/index.d.ts +3 -4
- package/services/inapp-notification-service/index.js +14 -6
- package/services/keyring-service/context/account-context.d.ts +6 -2
- package/services/keyring-service/context/account-context.js +17 -2
- package/services/keyring-service/context/handlers/Derive.d.ts +1 -1
- package/services/keyring-service/context/handlers/Derive.js +10 -8
- package/services/keyring-service/context/handlers/Migration.d.ts +17 -0
- package/services/keyring-service/context/handlers/Migration.js +258 -0
- package/services/keyring-service/context/handlers/Mnemonic.js +2 -2
- package/services/keyring-service/context/handlers/Secret.js +2 -2
- package/services/keyring-service/utils.d.ts +2 -0
- package/services/keyring-service/utils.js +11 -0
- package/services/request-service/handler/CardanoRequestHandler.d.ts +16 -0
- package/services/request-service/handler/CardanoRequestHandler.js +163 -0
- package/services/request-service/handler/EvmRequestHandler.js +1 -1
- package/services/request-service/index.d.ts +6 -3
- package/services/request-service/index.js +19 -5
- package/services/setting-service/constants.d.ts +3 -0
- package/services/setting-service/constants.js +6 -0
- package/services/storage-service/DatabaseService.d.ts +1 -0
- package/services/storage-service/DatabaseService.js +3 -0
- package/services/storage-service/db-stores/InappNotification.d.ts +1 -0
- package/services/storage-service/db-stores/InappNotification.js +6 -0
- package/services/swap-service/handler/asset-hub/handler.d.ts +1 -4
- package/services/swap-service/handler/asset-hub/handler.js +2 -61
- package/services/swap-service/handler/base-handler.d.ts +1 -4
- package/services/swap-service/handler/chainflip-handler.d.ts +2 -9
- package/services/swap-service/handler/chainflip-handler.js +31 -280
- package/services/swap-service/handler/hydradx-handler.d.ts +1 -6
- package/services/swap-service/handler/hydradx-handler.js +13 -180
- package/services/swap-service/handler/simpleswap-handler.d.ts +1 -4
- package/services/swap-service/handler/simpleswap-handler.js +5 -226
- package/services/swap-service/handler/uniswap-handler.d.ts +41 -0
- package/services/swap-service/handler/uniswap-handler.js +323 -0
- package/services/swap-service/index.js +30 -22
- package/services/swap-service/utils.d.ts +1 -5
- package/services/swap-service/utils.js +7 -21
- package/services/transaction-service/helpers/index.d.ts +2 -0
- package/services/transaction-service/helpers/index.js +4 -0
- package/services/transaction-service/index.d.ts +8 -2
- package/services/transaction-service/index.js +263 -10
- package/services/transaction-service/types.d.ts +7 -0
- package/services/transaction-service/utils.js +7 -2
- package/types/account/info/keyring.d.ts +4 -1
- package/types/account/info/keyring.js +9 -0
- package/types/account/info/proxy.d.ts +2 -0
- package/types/balance/index.d.ts +4 -1
- package/types/fee/base.d.ts +1 -1
- package/types/fee/cardano.d.ts +18 -0
- package/types/fee/cardano.js +1 -0
- package/types/fee/subscription.d.ts +4 -3
- package/types/swap/index.d.ts +11 -3
- package/types/swap/index.js +7 -2
- package/utils/account/analyze.js +2 -1
- package/utils/account/common.d.ts +11 -6
- package/utils/account/common.js +28 -19
- package/utils/account/derive/info/solo.js +10 -5
- package/utils/account/derive/validate.d.ts +1 -0
- package/utils/account/derive/validate.js +34 -1
- package/utils/account/transform.d.ts +2 -1
- package/utils/account/transform.js +37 -13
- package/utils/fee/transfer.d.ts +2 -1
- package/utils/fee/transfer.js +44 -11
- package/utils/index.js +4 -4
- package/utils/staticData/index.d.ts +4 -1
- package/utils/staticData/index.js +5 -1
- package/utils/staticData/oldChainPrefix.json +1 -0
|
@@ -0,0 +1,331 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
Object.defineProperty(exports, "__esModule", {
|
|
5
|
+
value: true
|
|
6
|
+
});
|
|
7
|
+
exports.UniswapHandler = void 0;
|
|
8
|
+
var _TransactionError = require("@subwallet/extension-base/background/errors/TransactionError");
|
|
9
|
+
var _KoniTypes = require("@subwallet/extension-base/background/KoniTypes");
|
|
10
|
+
var _logicValidation = require("@subwallet/extension-base/core/logic-validation");
|
|
11
|
+
var _types = require("@subwallet/extension-base/types");
|
|
12
|
+
var _bignumber = _interopRequireDefault(require("bignumber.js"));
|
|
13
|
+
var _utils = require("../../chain-service/utils");
|
|
14
|
+
var _utils2 = require("../../fee-service/utils");
|
|
15
|
+
var _baseHandler = require("./base-handler");
|
|
16
|
+
// Copyright 2019-2022 @subwallet/extension-base
|
|
17
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
18
|
+
|
|
19
|
+
const API_URL = 'https://trade-api.gateway.uniswap.org/v1';
|
|
20
|
+
const headers = {
|
|
21
|
+
'x-api-key': process.env.UNISWAP_API_KEY || ''
|
|
22
|
+
};
|
|
23
|
+
async function fetchCheckApproval(walletAddress, fromAmount, quote) {
|
|
24
|
+
const chainId = quote.chainId;
|
|
25
|
+
const response = await fetch(`${API_URL}/check_approval`, {
|
|
26
|
+
method: 'POST',
|
|
27
|
+
headers: {
|
|
28
|
+
...headers,
|
|
29
|
+
'Content-Type': 'application/json'
|
|
30
|
+
},
|
|
31
|
+
body: JSON.stringify({
|
|
32
|
+
walletAddress,
|
|
33
|
+
amount: (0, _bignumber.default)(fromAmount).multipliedBy(2).toString(),
|
|
34
|
+
token: quote.input.token,
|
|
35
|
+
chainId: chainId,
|
|
36
|
+
tokenOut: quote.output.token,
|
|
37
|
+
tokenOutChainId: chainId
|
|
38
|
+
})
|
|
39
|
+
});
|
|
40
|
+
const data = await response.json();
|
|
41
|
+
return data;
|
|
42
|
+
}
|
|
43
|
+
class UniswapHandler {
|
|
44
|
+
constructor(chainService, balanceService, transactionService, feeService) {
|
|
45
|
+
this.swapBaseHandler = new _baseHandler.SwapBaseHandler({
|
|
46
|
+
chainService,
|
|
47
|
+
balanceService,
|
|
48
|
+
feeService,
|
|
49
|
+
providerName: 'Uniswap',
|
|
50
|
+
providerSlug: _types.SwapProviderId.UNISWAP
|
|
51
|
+
});
|
|
52
|
+
this.transactionService = transactionService;
|
|
53
|
+
this.providerSlug = _types.SwapProviderId.UNISWAP;
|
|
54
|
+
}
|
|
55
|
+
get chainService() {
|
|
56
|
+
return this.swapBaseHandler.chainService;
|
|
57
|
+
}
|
|
58
|
+
get balanceService() {
|
|
59
|
+
return this.swapBaseHandler.balanceService;
|
|
60
|
+
}
|
|
61
|
+
get feeService() {
|
|
62
|
+
return this.swapBaseHandler.feeService;
|
|
63
|
+
}
|
|
64
|
+
get providerInfo() {
|
|
65
|
+
return this.swapBaseHandler.providerInfo;
|
|
66
|
+
}
|
|
67
|
+
generateOptimalProcess(params) {
|
|
68
|
+
return this.swapBaseHandler.generateOptimalProcess(params, [this.getApprovalStep.bind(this), this.getPermitStep.bind(this), this.getSubmitStep.bind(this)]);
|
|
69
|
+
}
|
|
70
|
+
async getApprovalStep(params) {
|
|
71
|
+
if (params.selectedQuote) {
|
|
72
|
+
const walletAddress = params.request.address;
|
|
73
|
+
const fromAmount = params.selectedQuote.fromAmount;
|
|
74
|
+
const inputTokenInfo = this.chainService.getAssetBySlug(params.selectedQuote.pair.from);
|
|
75
|
+
const {
|
|
76
|
+
quote
|
|
77
|
+
} = params.selectedQuote.metadata;
|
|
78
|
+
const checkApprovalResponse = await fetchCheckApproval(walletAddress, fromAmount, quote);
|
|
79
|
+
const approval = checkApprovalResponse.approval;
|
|
80
|
+
if (approval) {
|
|
81
|
+
let spender = '';
|
|
82
|
+
try {
|
|
83
|
+
const valueLength = 40;
|
|
84
|
+
spender = approval.data.slice(-(valueLength * 2), -valueLength);
|
|
85
|
+
} catch (e) {
|
|
86
|
+
// Empty
|
|
87
|
+
}
|
|
88
|
+
const metadata = {
|
|
89
|
+
tokenApprove: inputTokenInfo.slug,
|
|
90
|
+
contractAddress: (0, _utils._getContractAddressOfToken)(inputTokenInfo),
|
|
91
|
+
spenderAddress: spender
|
|
92
|
+
};
|
|
93
|
+
const submitStep = {
|
|
94
|
+
name: 'Approve token',
|
|
95
|
+
type: _types.CommonStepType.TOKEN_APPROVAL,
|
|
96
|
+
metadata: metadata
|
|
97
|
+
};
|
|
98
|
+
return Promise.resolve([submitStep, params.selectedQuote.feeInfo]);
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
return Promise.resolve(undefined);
|
|
102
|
+
}
|
|
103
|
+
async getPermitStep(params) {
|
|
104
|
+
if (params.selectedQuote && params.selectedQuote.metadata.permitData) {
|
|
105
|
+
const submitStep = {
|
|
106
|
+
name: 'Permit Step',
|
|
107
|
+
type: _types.SwapStepType.PERMIT
|
|
108
|
+
};
|
|
109
|
+
// TODO: GET NATIVE TOKEN
|
|
110
|
+
const defaultFeeToken = params.selectedQuote.feeInfo.defaultFeeToken;
|
|
111
|
+
const feeInfo = {
|
|
112
|
+
feeComponent: [{
|
|
113
|
+
amount: '0',
|
|
114
|
+
feeType: _types.SwapFeeType.NETWORK_FEE,
|
|
115
|
+
tokenSlug: defaultFeeToken
|
|
116
|
+
}],
|
|
117
|
+
defaultFeeToken: defaultFeeToken,
|
|
118
|
+
feeOptions: [defaultFeeToken]
|
|
119
|
+
};
|
|
120
|
+
return Promise.resolve([submitStep, feeInfo]);
|
|
121
|
+
}
|
|
122
|
+
return Promise.resolve(undefined);
|
|
123
|
+
}
|
|
124
|
+
async getSubmitStep(params) {
|
|
125
|
+
if (params.selectedQuote) {
|
|
126
|
+
const submitStep = {
|
|
127
|
+
name: 'Swap',
|
|
128
|
+
type: _types.SwapStepType.SWAP
|
|
129
|
+
};
|
|
130
|
+
return Promise.resolve([submitStep, params.selectedQuote.feeInfo]);
|
|
131
|
+
}
|
|
132
|
+
return Promise.resolve(undefined);
|
|
133
|
+
}
|
|
134
|
+
async validateSwapProcess(params) {
|
|
135
|
+
const amount = params.selectedQuote.fromAmount;
|
|
136
|
+
const bnAmount = BigInt(amount);
|
|
137
|
+
if (bnAmount <= BigInt(0)) {
|
|
138
|
+
return Promise.resolve([new _TransactionError.TransactionError(_types.BasicTxErrorType.INVALID_PARAMS, 'Amount must be greater than 0')]);
|
|
139
|
+
}
|
|
140
|
+
let isXcmOk = false;
|
|
141
|
+
for (const [index, step] of params.process.steps.entries()) {
|
|
142
|
+
const getErrors = async () => {
|
|
143
|
+
switch (step.type) {
|
|
144
|
+
case _types.CommonStepType.DEFAULT:
|
|
145
|
+
return Promise.resolve([]);
|
|
146
|
+
case _types.CommonStepType.TOKEN_APPROVAL:
|
|
147
|
+
return Promise.resolve([]);
|
|
148
|
+
default:
|
|
149
|
+
return this.swapBaseHandler.validateSwapStep(params, isXcmOk, index);
|
|
150
|
+
}
|
|
151
|
+
};
|
|
152
|
+
const errors = await getErrors();
|
|
153
|
+
if (errors.length) {
|
|
154
|
+
return errors;
|
|
155
|
+
} else if (step.type === _types.CommonStepType.XCM) {
|
|
156
|
+
isXcmOk = true;
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
return [];
|
|
160
|
+
}
|
|
161
|
+
async handleSwapProcess(params) {
|
|
162
|
+
const {
|
|
163
|
+
currentStep,
|
|
164
|
+
process
|
|
165
|
+
} = params;
|
|
166
|
+
const type = process.steps[currentStep].type;
|
|
167
|
+
switch (type) {
|
|
168
|
+
case _types.CommonStepType.DEFAULT:
|
|
169
|
+
return Promise.reject(new _TransactionError.TransactionError(_types.BasicTxErrorType.UNSUPPORTED));
|
|
170
|
+
case _types.CommonStepType.TOKEN_APPROVAL:
|
|
171
|
+
return this.tokenApproveSpending(params);
|
|
172
|
+
case _types.SwapStepType.SWAP:
|
|
173
|
+
return this.handleSubmitStep(params);
|
|
174
|
+
case _types.SwapStepType.PERMIT:
|
|
175
|
+
return this.handlePermitStep(params);
|
|
176
|
+
default:
|
|
177
|
+
return this.handleSubmitStep(params);
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
async tokenApproveSpending(params) {
|
|
181
|
+
const fromAsset = this.chainService.getAssetBySlug(params.quote.pair.from);
|
|
182
|
+
const walletAddress = params.address;
|
|
183
|
+
const fromAmount = params.quote.fromAmount;
|
|
184
|
+
const {
|
|
185
|
+
quote
|
|
186
|
+
} = params.quote.metadata;
|
|
187
|
+
const checkApprovalResponse = await fetchCheckApproval(walletAddress, fromAmount, quote);
|
|
188
|
+
let transactionConfig = {};
|
|
189
|
+
const approval = checkApprovalResponse.approval;
|
|
190
|
+
if (approval) {
|
|
191
|
+
var _priority$options, _priority$options$Fee, _priority$options2;
|
|
192
|
+
const evmApi = this.chainService.getEvmApi(fromAsset.originChain);
|
|
193
|
+
const priority = await (0, _utils2.calculateGasFeeParams)(evmApi, evmApi.chainSlug);
|
|
194
|
+
transactionConfig = {
|
|
195
|
+
from: approval.from,
|
|
196
|
+
to: approval.to,
|
|
197
|
+
value: approval.value,
|
|
198
|
+
data: approval.data,
|
|
199
|
+
gasPrice: priority.gasPrice,
|
|
200
|
+
maxFeePerGas: (_priority$options = priority.options) === null || _priority$options === void 0 ? void 0 : (_priority$options$Fee = _priority$options[_types.FeeOptionKey.AVERAGE].maxFeePerGas) === null || _priority$options$Fee === void 0 ? void 0 : _priority$options$Fee.toString(),
|
|
201
|
+
maxPriorityFeePerGas: (_priority$options2 = priority.options) === null || _priority$options2 === void 0 ? void 0 : _priority$options2[_types.FeeOptionKey.AVERAGE].maxPriorityFeePerGas.toString()
|
|
202
|
+
};
|
|
203
|
+
const gasLimit = await evmApi.api.eth.estimateGas(transactionConfig).catch(() => 200000);
|
|
204
|
+
transactionConfig.gas = gasLimit.toString();
|
|
205
|
+
}
|
|
206
|
+
const chain = fromAsset.originChain;
|
|
207
|
+
const _data = {
|
|
208
|
+
spenderAddress: quote.output.token,
|
|
209
|
+
contractAddress: quote.input.token,
|
|
210
|
+
amount: params.quote.fromAmount,
|
|
211
|
+
owner: params.address,
|
|
212
|
+
chain: quote.chainId.toString()
|
|
213
|
+
};
|
|
214
|
+
return Promise.resolve({
|
|
215
|
+
txChain: chain,
|
|
216
|
+
extrinsicType: _KoniTypes.ExtrinsicType.TOKEN_SPENDING_APPROVAL,
|
|
217
|
+
extrinsic: transactionConfig,
|
|
218
|
+
txData: _data,
|
|
219
|
+
transferNativeAmount: '0',
|
|
220
|
+
chainType: _KoniTypes.ChainType.EVM
|
|
221
|
+
});
|
|
222
|
+
}
|
|
223
|
+
async handleSubmitStep(params) {
|
|
224
|
+
const fromAsset = this.chainService.getAssetBySlug(params.quote.pair.from);
|
|
225
|
+
const {
|
|
226
|
+
permitData,
|
|
227
|
+
quote,
|
|
228
|
+
routing
|
|
229
|
+
} = params.quote.metadata;
|
|
230
|
+
const processId = params.cacheProcessId;
|
|
231
|
+
let signature;
|
|
232
|
+
if (permitData) {
|
|
233
|
+
signature = this.transactionService.getCacheInfo(processId, _types.SwapStepType.PERMIT);
|
|
234
|
+
}
|
|
235
|
+
let postTransactionResponse;
|
|
236
|
+
let extrinsic;
|
|
237
|
+
if (routing === 'CLASSIC' || routing === 'WRAP' || routing === 'UNWRAP') {
|
|
238
|
+
const body = {
|
|
239
|
+
signature: signature,
|
|
240
|
+
quote: quote
|
|
241
|
+
};
|
|
242
|
+
if (permitData) {
|
|
243
|
+
body.permitData = permitData;
|
|
244
|
+
}
|
|
245
|
+
postTransactionResponse = await fetch(`${API_URL}/swap`, {
|
|
246
|
+
method: 'POST',
|
|
247
|
+
headers: {
|
|
248
|
+
...headers,
|
|
249
|
+
'Content-Type': 'application/json'
|
|
250
|
+
},
|
|
251
|
+
body: JSON.stringify(body)
|
|
252
|
+
});
|
|
253
|
+
const transactionResponse = await postTransactionResponse.json();
|
|
254
|
+
extrinsic = transactionResponse.swap;
|
|
255
|
+
} else if (routing === 'DUTCH_LIMIT' || routing === 'DUTCH_V2') {
|
|
256
|
+
postTransactionResponse = await fetch(`${API_URL}/order`, {
|
|
257
|
+
method: 'POST',
|
|
258
|
+
headers: {
|
|
259
|
+
...headers,
|
|
260
|
+
'Content-Type': 'application/json'
|
|
261
|
+
},
|
|
262
|
+
body: JSON.stringify({
|
|
263
|
+
signature: signature,
|
|
264
|
+
quote: quote
|
|
265
|
+
})
|
|
266
|
+
});
|
|
267
|
+
}
|
|
268
|
+
const txData = {
|
|
269
|
+
address: params.address,
|
|
270
|
+
provider: this.providerInfo,
|
|
271
|
+
quote: params.quote,
|
|
272
|
+
slippage: params.slippage,
|
|
273
|
+
recipient: params.recipient,
|
|
274
|
+
process: params.process
|
|
275
|
+
};
|
|
276
|
+
return {
|
|
277
|
+
txChain: fromAsset.originChain,
|
|
278
|
+
txData,
|
|
279
|
+
extrinsic: extrinsic,
|
|
280
|
+
transferNativeAmount: (0, _utils._isNativeToken)(fromAsset) ? params.quote.fromAmount : '0',
|
|
281
|
+
extrinsicType: _KoniTypes.ExtrinsicType.SWAP,
|
|
282
|
+
chainType: _KoniTypes.ChainType.EVM
|
|
283
|
+
};
|
|
284
|
+
}
|
|
285
|
+
handlePermitStep(params) {
|
|
286
|
+
const fromAsset = this.chainService.getAssetBySlug(params.quote.pair.from);
|
|
287
|
+
const {
|
|
288
|
+
permitData
|
|
289
|
+
} = params.quote.metadata;
|
|
290
|
+
const processId = params.cacheProcessId;
|
|
291
|
+
let validatePayload;
|
|
292
|
+
if (permitData) {
|
|
293
|
+
const payload = {
|
|
294
|
+
types: {
|
|
295
|
+
EIP712Domain: [{
|
|
296
|
+
name: 'name',
|
|
297
|
+
type: 'string'
|
|
298
|
+
}, {
|
|
299
|
+
name: 'chainId',
|
|
300
|
+
type: 'uint256'
|
|
301
|
+
}, {
|
|
302
|
+
name: 'verifyingContract',
|
|
303
|
+
type: 'address'
|
|
304
|
+
}],
|
|
305
|
+
...permitData.types
|
|
306
|
+
},
|
|
307
|
+
domain: permitData.domain,
|
|
308
|
+
primaryType: 'PermitSingle',
|
|
309
|
+
message: permitData.values
|
|
310
|
+
};
|
|
311
|
+
validatePayload = (0, _logicValidation.validateTypedSignMessageDataV3V4)({
|
|
312
|
+
data: payload,
|
|
313
|
+
from: params.address
|
|
314
|
+
});
|
|
315
|
+
}
|
|
316
|
+
const txData = {
|
|
317
|
+
processId,
|
|
318
|
+
step: _types.SwapStepType.PERMIT
|
|
319
|
+
};
|
|
320
|
+
return {
|
|
321
|
+
txChain: fromAsset.originChain,
|
|
322
|
+
txData,
|
|
323
|
+
extrinsic: validatePayload,
|
|
324
|
+
extrinsicType: _KoniTypes.ExtrinsicType.TOKEN_SPENDING_APPROVAL,
|
|
325
|
+
transferNativeAmount: '0',
|
|
326
|
+
chainType: _KoniTypes.ChainType.EVM,
|
|
327
|
+
isPermit: true
|
|
328
|
+
};
|
|
329
|
+
}
|
|
330
|
+
}
|
|
331
|
+
exports.UniswapHandler = UniswapHandler;
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
3
4
|
Object.defineProperty(exports, "__esModule", {
|
|
4
5
|
value: true
|
|
5
6
|
});
|
|
@@ -15,8 +16,10 @@ var _types2 = require("@subwallet/extension-base/types");
|
|
|
15
16
|
var _serviceBase = require("@subwallet/extension-base/types/service-base");
|
|
16
17
|
var _swap = require("@subwallet/extension-base/types/swap");
|
|
17
18
|
var _utils2 = require("@subwallet/extension-base/utils");
|
|
19
|
+
var _subwalletApiSdk = _interopRequireDefault(require("@subwallet/subwallet-api-sdk"));
|
|
18
20
|
var _rxjs = require("rxjs");
|
|
19
21
|
var _simpleswapHandler = require("./handler/simpleswap-handler");
|
|
22
|
+
var _uniswapHandler = require("./handler/uniswap-handler");
|
|
20
23
|
// Copyright 2019-2022 @subwallet/extension-base
|
|
21
24
|
// SPDX-License-Identifier: Apache-2.0
|
|
22
25
|
|
|
@@ -37,31 +40,34 @@ class SwapService {
|
|
|
37
40
|
this.chainService = state.chainService;
|
|
38
41
|
}
|
|
39
42
|
async askProvidersForQuote(request) {
|
|
43
|
+
var _subwalletApiSdk$swap;
|
|
40
44
|
const availableQuotes = [];
|
|
41
|
-
const swappingSrcChain = this.chainService.getAssetBySlug(request.pair.from).originChain;
|
|
42
45
|
await Promise.all(Object.values(this.handlers).map(async handler => {
|
|
43
46
|
// temporary solution to reduce number of requests to providers, will work as long as there's only 1 provider for 1 chain
|
|
44
|
-
|
|
45
|
-
return;
|
|
46
|
-
}
|
|
47
|
+
|
|
47
48
|
if (handler.init && handler.isReady === false) {
|
|
48
49
|
await handler.init();
|
|
49
50
|
}
|
|
50
|
-
const quote = await handler.getSwapQuote(request);
|
|
51
|
-
if (!(quote instanceof _SwapError.SwapError)) {
|
|
52
|
-
// todo: can do better
|
|
53
|
-
availableQuotes.push({
|
|
54
|
-
quote
|
|
55
|
-
});
|
|
56
|
-
} else {
|
|
57
|
-
availableQuotes.push({
|
|
58
|
-
error: quote
|
|
59
|
-
});
|
|
60
|
-
}
|
|
61
51
|
}));
|
|
62
|
-
|
|
52
|
+
const quotes = await ((_subwalletApiSdk$swap = _subwalletApiSdk.default.swapApi) === null || _subwalletApiSdk$swap === void 0 ? void 0 : _subwalletApiSdk$swap.fetchSwapQuoteData(request));
|
|
53
|
+
if (Array.isArray(quotes)) {
|
|
54
|
+
quotes.forEach(quoteData => {
|
|
55
|
+
if (!quoteData.quote || Object.keys(quoteData.quote).length === 0) {
|
|
56
|
+
return;
|
|
57
|
+
}
|
|
58
|
+
if (!('errorClass' in quoteData.quote)) {
|
|
59
|
+
availableQuotes.push({
|
|
60
|
+
quote: quoteData.quote
|
|
61
|
+
});
|
|
62
|
+
} else {
|
|
63
|
+
availableQuotes.push({
|
|
64
|
+
error: new _SwapError.SwapError(quoteData.quote.errorType, quoteData.quote.message)
|
|
65
|
+
});
|
|
66
|
+
}
|
|
67
|
+
});
|
|
68
|
+
}
|
|
69
|
+
return availableQuotes;
|
|
63
70
|
}
|
|
64
|
-
|
|
65
71
|
getDefaultProcess(params) {
|
|
66
72
|
const result = {
|
|
67
73
|
totalFee: [_serviceBase.MOCK_STEP_FEE],
|
|
@@ -83,7 +89,8 @@ class SwapService {
|
|
|
83
89
|
if (!params.selectedQuote) {
|
|
84
90
|
return this.getDefaultProcess(params);
|
|
85
91
|
} else {
|
|
86
|
-
|
|
92
|
+
var _params$request$curre;
|
|
93
|
+
const providerId = ((_params$request$curre = params.request.currentQuote) === null || _params$request$curre === void 0 ? void 0 : _params$request$curre.id) || params.selectedQuote.provider.id;
|
|
87
94
|
const handler = this.handlers[providerId];
|
|
88
95
|
if (handler) {
|
|
89
96
|
return handler.generateOptimalProcess(params);
|
|
@@ -98,7 +105,6 @@ class SwapService {
|
|
|
98
105
|
* 2. Select the best quote
|
|
99
106
|
* 3. Generate optimal process for that quote
|
|
100
107
|
* */
|
|
101
|
-
|
|
102
108
|
const swapQuoteResponse = await this.getLatestQuotes(request);
|
|
103
109
|
const optimalProcess = await this.generateOptimalProcess({
|
|
104
110
|
request,
|
|
@@ -162,15 +168,18 @@ class SwapService {
|
|
|
162
168
|
case _swap.SwapProviderId.KUSAMA_ASSET_HUB:
|
|
163
169
|
this.handlers[providerId] = new _assetHub.AssetHubSwapHandler(this.chainService, this.state.balanceService, this.state.feeService, 'statemine');
|
|
164
170
|
break;
|
|
165
|
-
case
|
|
166
|
-
|
|
167
|
-
|
|
171
|
+
// case SwapProviderId.ROCOCO_ASSET_HUB:
|
|
172
|
+
// this.handlers[providerId] = new AssetHubSwapHandler(this.chainService, this.state.balanceService, this.state.feeService, 'rococo_assethub');
|
|
173
|
+
// break;
|
|
168
174
|
case _swap.SwapProviderId.WESTEND_ASSET_HUB:
|
|
169
175
|
this.handlers[providerId] = new _assetHub.AssetHubSwapHandler(this.chainService, this.state.balanceService, this.state.feeService, 'westend_assethub');
|
|
170
176
|
break;
|
|
171
177
|
case _swap.SwapProviderId.SIMPLE_SWAP:
|
|
172
178
|
this.handlers[providerId] = new _simpleswapHandler.SimpleSwapHandler(this.chainService, this.state.balanceService, this.state.feeService);
|
|
173
179
|
break;
|
|
180
|
+
case _swap.SwapProviderId.UNISWAP:
|
|
181
|
+
this.handlers[providerId] = new _uniswapHandler.UniswapHandler(this.chainService, this.state.balanceService, this.state.transactionService, this.state.feeService);
|
|
182
|
+
break;
|
|
174
183
|
default:
|
|
175
184
|
throw new Error('Unsupported provider');
|
|
176
185
|
}
|
|
@@ -4,18 +4,18 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
|
|
|
4
4
|
Object.defineProperty(exports, "__esModule", {
|
|
5
5
|
value: true
|
|
6
6
|
});
|
|
7
|
-
exports._PROVIDER_TO_SUPPORTED_PAIR_MAP = exports.SWAP_QUOTE_TIMEOUT_MAP = exports.SIMPLE_SWAP_SUPPORTED_TESTNET_ASSET_MAPPING = exports.SIMPLE_SWAP_EXPLORER = exports.CHAIN_FLIP_TESTNET_EXPLORER = exports.
|
|
7
|
+
exports._PROVIDER_TO_SUPPORTED_PAIR_MAP = exports.SWAP_QUOTE_TIMEOUT_MAP = exports.SIMPLE_SWAP_SUPPORTED_TESTNET_ASSET_MAPPING = exports.SIMPLE_SWAP_EXPLORER = exports.CHAIN_FLIP_TESTNET_EXPLORER = exports.CHAIN_FLIP_MAINNET_EXPLORER = void 0;
|
|
8
8
|
exports.calculateSwapRate = calculateSwapRate;
|
|
9
9
|
exports.convertSwapRate = convertSwapRate;
|
|
10
10
|
exports.getChainflipBroker = getChainflipBroker;
|
|
11
11
|
exports.getChainflipOptions = getChainflipOptions;
|
|
12
|
+
exports.getChainflipSwap = getChainflipSwap;
|
|
12
13
|
exports.getSwapAltToken = getSwapAltToken;
|
|
13
14
|
exports.getSwapAlternativeAsset = getSwapAlternativeAsset;
|
|
14
|
-
var _swap = require("@chainflip/sdk/swap");
|
|
15
15
|
var _chainList = require("@subwallet/chain-list");
|
|
16
16
|
var _utils = require("@subwallet/extension-base/services/chain-service/utils");
|
|
17
17
|
var _chainflipHandler = require("@subwallet/extension-base/services/swap-service/handler/chainflip-handler");
|
|
18
|
-
var
|
|
18
|
+
var _swap = require("@subwallet/extension-base/types/swap");
|
|
19
19
|
var _bignumber = _interopRequireDefault(require("bignumber.js"));
|
|
20
20
|
// Copyright 2019-2022 @subwallet/extension-base
|
|
21
21
|
// SPDX-License-Identifier: Apache-2.0
|
|
@@ -26,30 +26,6 @@ const CHAIN_FLIP_MAINNET_EXPLORER = 'https://scan.chainflip.io';
|
|
|
26
26
|
exports.CHAIN_FLIP_MAINNET_EXPLORER = CHAIN_FLIP_MAINNET_EXPLORER;
|
|
27
27
|
const SIMPLE_SWAP_EXPLORER = 'https://simpleswap.io';
|
|
28
28
|
exports.SIMPLE_SWAP_EXPLORER = SIMPLE_SWAP_EXPLORER;
|
|
29
|
-
const CHAIN_FLIP_SUPPORTED_MAINNET_MAPPING = {
|
|
30
|
-
[_chainList.COMMON_CHAIN_SLUGS.POLKADOT]: _swap.Chains.Polkadot,
|
|
31
|
-
[_chainList.COMMON_CHAIN_SLUGS.ETHEREUM]: _swap.Chains.Ethereum,
|
|
32
|
-
[_chainList.COMMON_CHAIN_SLUGS.ARBITRUM]: _swap.Chains.Arbitrum
|
|
33
|
-
};
|
|
34
|
-
exports.CHAIN_FLIP_SUPPORTED_MAINNET_MAPPING = CHAIN_FLIP_SUPPORTED_MAINNET_MAPPING;
|
|
35
|
-
const CHAIN_FLIP_SUPPORTED_TESTNET_MAPPING = {
|
|
36
|
-
[_chainList.COMMON_CHAIN_SLUGS.ETHEREUM_SEPOLIA]: _swap.Chains.Ethereum,
|
|
37
|
-
[_chainList.COMMON_CHAIN_SLUGS.CHAINFLIP_POLKADOT]: _swap.Chains.Polkadot
|
|
38
|
-
};
|
|
39
|
-
exports.CHAIN_FLIP_SUPPORTED_TESTNET_MAPPING = CHAIN_FLIP_SUPPORTED_TESTNET_MAPPING;
|
|
40
|
-
const CHAIN_FLIP_SUPPORTED_MAINNET_ASSET_MAPPING = {
|
|
41
|
-
[_chainList.COMMON_ASSETS.DOT]: _swap.Assets.DOT,
|
|
42
|
-
[_chainList.COMMON_ASSETS.ETH]: _swap.Assets.ETH,
|
|
43
|
-
[_chainList.COMMON_ASSETS.USDC_ETHEREUM]: _swap.Assets.USDC,
|
|
44
|
-
[_chainList.COMMON_ASSETS.USDT_ETHEREUM]: _swap.Assets.USDT
|
|
45
|
-
};
|
|
46
|
-
exports.CHAIN_FLIP_SUPPORTED_MAINNET_ASSET_MAPPING = CHAIN_FLIP_SUPPORTED_MAINNET_ASSET_MAPPING;
|
|
47
|
-
const CHAIN_FLIP_SUPPORTED_TESTNET_ASSET_MAPPING = {
|
|
48
|
-
[_chainList.COMMON_ASSETS.PDOT]: _swap.Assets.DOT,
|
|
49
|
-
[_chainList.COMMON_ASSETS.ETH_SEPOLIA]: _swap.Assets.ETH,
|
|
50
|
-
[_chainList.COMMON_ASSETS.USDC_SEPOLIA]: _swap.Assets.USDC
|
|
51
|
-
};
|
|
52
|
-
exports.CHAIN_FLIP_SUPPORTED_TESTNET_ASSET_MAPPING = CHAIN_FLIP_SUPPORTED_TESTNET_ASSET_MAPPING;
|
|
53
29
|
const SIMPLE_SWAP_SUPPORTED_TESTNET_ASSET_MAPPING = {
|
|
54
30
|
'bittensor-NATIVE-TAO': 'tao',
|
|
55
31
|
[_chainList.COMMON_ASSETS.ETH]: 'eth',
|
|
@@ -61,20 +37,20 @@ exports.SIMPLE_SWAP_SUPPORTED_TESTNET_ASSET_MAPPING = SIMPLE_SWAP_SUPPORTED_TEST
|
|
|
61
37
|
const SWAP_QUOTE_TIMEOUT_MAP = {
|
|
62
38
|
// in milliseconds
|
|
63
39
|
default: 30000,
|
|
64
|
-
[
|
|
65
|
-
[
|
|
40
|
+
[_swap.SwapProviderId.CHAIN_FLIP_TESTNET]: 30000,
|
|
41
|
+
[_swap.SwapProviderId.CHAIN_FLIP_MAINNET]: 30000
|
|
66
42
|
};
|
|
67
43
|
exports.SWAP_QUOTE_TIMEOUT_MAP = SWAP_QUOTE_TIMEOUT_MAP;
|
|
68
44
|
const _PROVIDER_TO_SUPPORTED_PAIR_MAP = {
|
|
69
|
-
[
|
|
70
|
-
[
|
|
71
|
-
[
|
|
72
|
-
[
|
|
73
|
-
[
|
|
74
|
-
[
|
|
75
|
-
[
|
|
76
|
-
[
|
|
77
|
-
[
|
|
45
|
+
[_swap.SwapProviderId.HYDRADX_MAINNET]: [_chainList.COMMON_CHAIN_SLUGS.HYDRADX],
|
|
46
|
+
[_swap.SwapProviderId.HYDRADX_TESTNET]: [_chainList.COMMON_CHAIN_SLUGS.HYDRADX_TESTNET],
|
|
47
|
+
[_swap.SwapProviderId.CHAIN_FLIP_MAINNET]: [_chainList.COMMON_CHAIN_SLUGS.POLKADOT, _chainList.COMMON_CHAIN_SLUGS.ETHEREUM, _chainList.COMMON_CHAIN_SLUGS.ARBITRUM],
|
|
48
|
+
[_swap.SwapProviderId.CHAIN_FLIP_TESTNET]: [_chainList.COMMON_CHAIN_SLUGS.CHAINFLIP_POLKADOT, _chainList.COMMON_CHAIN_SLUGS.ETHEREUM_SEPOLIA],
|
|
49
|
+
[_swap.SwapProviderId.POLKADOT_ASSET_HUB]: [_chainList.COMMON_CHAIN_SLUGS.POLKADOT_ASSET_HUB],
|
|
50
|
+
[_swap.SwapProviderId.KUSAMA_ASSET_HUB]: [_chainList.COMMON_CHAIN_SLUGS.KUSAMA_ASSET_HUB],
|
|
51
|
+
[_swap.SwapProviderId.ROCOCO_ASSET_HUB]: [_chainList.COMMON_CHAIN_SLUGS.ROCOCO_ASSET_HUB],
|
|
52
|
+
[_swap.SwapProviderId.WESTEND_ASSET_HUB]: ['westend_assethub'],
|
|
53
|
+
[_swap.SwapProviderId.SIMPLE_SWAP]: ['bittensor', _chainList.COMMON_CHAIN_SLUGS.ETHEREUM, _chainList.COMMON_CHAIN_SLUGS.POLKADOT]
|
|
78
54
|
};
|
|
79
55
|
exports._PROVIDER_TO_SUPPORTED_PAIR_MAP = _PROVIDER_TO_SUPPORTED_PAIR_MAP;
|
|
80
56
|
function getSwapAlternativeAsset(swapPair) {
|
|
@@ -122,4 +98,11 @@ function getChainflipBroker(isTestnet) {
|
|
|
122
98
|
url: `https://chainflip-broker.io/rpc/${_chainflipHandler.CHAINFLIP_BROKER_API}`
|
|
123
99
|
};
|
|
124
100
|
}
|
|
101
|
+
}
|
|
102
|
+
function getChainflipSwap(isTestnet) {
|
|
103
|
+
if (isTestnet) {
|
|
104
|
+
return `https://perseverance.chainflip-broker.io/swap?apikey=${_chainflipHandler.CHAINFLIP_BROKER_API}`;
|
|
105
|
+
} else {
|
|
106
|
+
return `https://chainflip-broker.io/swap?apikey=${_chainflipHandler.CHAINFLIP_BROKER_API}`;
|
|
107
|
+
}
|
|
125
108
|
}
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
-
exports.isTonTransaction = exports.isSubstrateTransaction = exports.getValidationId = exports.getTransactionId = exports.getBaseTransactionInfo = void 0;
|
|
6
|
+
exports.isTonTransaction = exports.isSubstrateTransaction = exports.isCardanoTransaction = exports.getValidationId = exports.getTransactionId = exports.getBaseTransactionInfo = void 0;
|
|
7
7
|
var _KoniTypes = require("@subwallet/extension-base/background/KoniTypes");
|
|
8
8
|
// Copyright 2019-2022 @subwallet/extension-base authors & contributors
|
|
9
9
|
// SPDX-License-Identifier: Apache-2.0
|
|
@@ -28,6 +28,11 @@ const isTonTransaction = tx => {
|
|
|
28
28
|
return Boolean(tonTransactionConfig.messagePayload) && tonTransactionConfig.seqno >= 0;
|
|
29
29
|
};
|
|
30
30
|
exports.isTonTransaction = isTonTransaction;
|
|
31
|
+
const isCardanoTransaction = tx => {
|
|
32
|
+
const cardanoTransactionConfig = tx;
|
|
33
|
+
return cardanoTransactionConfig.cardanoPayload !== null && cardanoTransactionConfig.cardanoPayload !== undefined;
|
|
34
|
+
};
|
|
35
|
+
exports.isCardanoTransaction = isCardanoTransaction;
|
|
31
36
|
const typeName = type => {
|
|
32
37
|
switch (type) {
|
|
33
38
|
case _KoniTypes.ExtrinsicType.TRANSFER_BALANCE:
|