@gurge/sdk-react-native 0.3.138 → 0.3.150
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
CHANGED
|
@@ -1,3 +1,428 @@
|
|
|
1
|
-
#
|
|
1
|
+
# Hinkal React Native SDK
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
Hinkal is a privacy middleware and smart-contract SDK for public blockchains that enables confidential transactions and settlement flows without changing wallets, custody, or chains.
|
|
4
|
+
|
|
5
|
+
`@hinkal/react-native` is a prebundled build of the Hinkal SDK for React Native and Expo. It includes the polyfills, shims, and worker runtime required on mobile — no custom Metro configuration is needed.
|
|
6
|
+
|
|
7
|
+
The SDK allows mobile wallets, dApps, and payment apps to integrate protocol-level privacy on Ethereum, Solana, Tron, Polygon, Base, Arbitrum, and Optimism.
|
|
8
|
+
|
|
9
|
+
With Hinkal SDK, developers can:
|
|
10
|
+
• Enable private sends between public wallets
|
|
11
|
+
• Perform confidential payouts and settlements
|
|
12
|
+
• Route transactions through Hinkal’s privacy contracts without exposing sender, recipient, or amounts
|
|
13
|
+
• Maintain non-custodial control with optional compliance visibility via viewing keys
|
|
14
|
+
|
|
15
|
+
## Compatibility
|
|
16
|
+
|
|
17
|
+
| Environment | Supported | Notes |
|
|
18
|
+
| ------------ | --------- | -------------------- |
|
|
19
|
+
| React Native | ✅ | v0.74+ |
|
|
20
|
+
| Expo | ✅ | dev client or bare |
|
|
21
|
+
|
|
22
|
+
## Installation
|
|
23
|
+
|
|
24
|
+
```sh
|
|
25
|
+
npm install @hinkal/react-native
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
Or, yarn:
|
|
29
|
+
|
|
30
|
+
```sh
|
|
31
|
+
yarn add @hinkal/react-native
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
## Usage
|
|
35
|
+
|
|
36
|
+
### HinkalProvider
|
|
37
|
+
|
|
38
|
+
Wrap your app with `HinkalProvider` before using any SDK function. It runs the React Native bootstrap and mounts the hidden WebView worker host.
|
|
39
|
+
|
|
40
|
+
```tsx
|
|
41
|
+
import { WagmiProvider } from 'wagmi';
|
|
42
|
+
import { HinkalProvider } from '@hinkal/react-native';
|
|
43
|
+
import { wagmiConfig } from './wagmiConfig';
|
|
44
|
+
|
|
45
|
+
export default function App() {
|
|
46
|
+
return (
|
|
47
|
+
<WagmiProvider config={wagmiConfig}>
|
|
48
|
+
<HinkalProvider>
|
|
49
|
+
<YourApp />
|
|
50
|
+
</HinkalProvider>
|
|
51
|
+
</WagmiProvider>
|
|
52
|
+
);
|
|
53
|
+
}
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
### Initialization
|
|
57
|
+
|
|
58
|
+
After the wallet is connected, initialize a `Hinkal` instance with your preferred provider helper.
|
|
59
|
+
|
|
60
|
+
Initializing the SDK creates a `Hinkal` object that encapsulates:
|
|
61
|
+
|
|
62
|
+
- The user's shielded balances
|
|
63
|
+
- Actions the user can perform, such as shielding (depositing), transfers, and swapping
|
|
64
|
+
- Cryptographic keys for privacy-preserving operations
|
|
65
|
+
|
|
66
|
+
Each provider exposes three prepare helpers:
|
|
67
|
+
|
|
68
|
+
- `prepare*Hinkal` — signs the Hinkal login message and initializes user keys (deterministic signers)
|
|
69
|
+
- `prepare*HinkalWithEnclaveSignIn` — signs in through the secure enclave and stabilizes identity for non-deterministic signers (smart contract wallets, some hardware wallets)
|
|
70
|
+
- `prepare*HinkalFromSignature` — initializes user keys from a previously stored signature
|
|
71
|
+
|
|
72
|
+
**wagmi:**
|
|
73
|
+
|
|
74
|
+
```typescript
|
|
75
|
+
import { prepareWagmiHinkal } from '@hinkal/react-native';
|
|
76
|
+
// connector: wagmi.Connector
|
|
77
|
+
// wagmiConfig: wagmi.Config
|
|
78
|
+
const hinkal = await prepareWagmiHinkal(connector, wagmiConfig, hinkalConfig);
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
**ethers.js:**
|
|
82
|
+
|
|
83
|
+
```typescript
|
|
84
|
+
import { prepareEthersHinkal } from '@hinkal/react-native';
|
|
85
|
+
const hinkal = await prepareEthersHinkal(signer, hinkalConfig);
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
**Solana:**
|
|
89
|
+
|
|
90
|
+
```typescript
|
|
91
|
+
import { prepareSolanaHinkal } from '@hinkal/react-native';
|
|
92
|
+
// connector: SolanaWallet
|
|
93
|
+
// ethereumAddress: optional linked EVM address
|
|
94
|
+
const hinkal = await prepareSolanaHinkal(connector, ethereumAddress, hinkalConfig);
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
**Tron:**
|
|
98
|
+
|
|
99
|
+
```typescript
|
|
100
|
+
import { prepareTronHinkal } from '@hinkal/react-native';
|
|
101
|
+
const hinkal = await prepareTronHinkal(connector, hinkalConfig);
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
The same `WithEnclaveSignIn` and `FromSignature` variants are available for each provider (for example, `prepareWagmiHinkalWithEnclaveSignIn`, `prepareSolanaHinkalFromSignature`).
|
|
105
|
+
|
|
106
|
+
The `hinkalConfig` is defined as follows:
|
|
107
|
+
|
|
108
|
+
```typescript
|
|
109
|
+
type HinkalConfig = {
|
|
110
|
+
/** Disables caching in browser localStorage, storing data only in memory. Front-end only. Defaults to false. */
|
|
111
|
+
disableCaching?: boolean;
|
|
112
|
+
|
|
113
|
+
/** If true, allows caching in a file locally. Node.js only. Defaults to false. */
|
|
114
|
+
useFileCache?: boolean;
|
|
115
|
+
|
|
116
|
+
/**
|
|
117
|
+
* Path to the cache file used for storing temporary data. Node.js only.
|
|
118
|
+
* Defaults to hinkalCache.json in the current working directory.
|
|
119
|
+
*/
|
|
120
|
+
cacheFilePath?: string;
|
|
121
|
+
|
|
122
|
+
/**
|
|
123
|
+
* Indicator controlling whether the proof should be constructed remotely in secure enclave. Defaults to true.
|
|
124
|
+
*/
|
|
125
|
+
generateProofRemotely?: boolean;
|
|
126
|
+
|
|
127
|
+
/** Disables automatic merkle tree updates. Defaults to false. */
|
|
128
|
+
disableMerkleTreeUpdates?: boolean;
|
|
129
|
+
|
|
130
|
+
/** Override which Tron chain this Hinkal instance targets. */
|
|
131
|
+
tronChainOverride?: number;
|
|
132
|
+
};
|
|
133
|
+
```
|
|
134
|
+
|
|
135
|
+
### Identity persistence
|
|
136
|
+
|
|
137
|
+
When a user connects their wallet, they sign a fixed login message to authenticate with Hinkal. That signature defines their Hinkal identity. Their shielded balances, transaction ability, and all private operations depend on it.
|
|
138
|
+
|
|
139
|
+
Most wallets return the same signature every time for the same message. Some do not. Smart contract wallets, certain hardware wallets, and other non-deterministic signers may produce a different signature on each login, even for the same address and message.
|
|
140
|
+
|
|
141
|
+
When that happens, a returning user appears as a new account. Funds deposited in an earlier session remain tied to the original identity and are not accessible from the new one.
|
|
142
|
+
|
|
143
|
+
**Recommended approach:** use `prepare*HinkalWithEnclaveSignIn` instead of `prepare*Hinkal`. It signs the login message, stores the first signature server-side through the secure enclave, and always initializes with the original identity on later sessions. Solana Ledger wallets are handled automatically.
|
|
144
|
+
|
|
145
|
+
**Manual approach:** if you manage identity yourself, call `storeAndGetInitialSignature` and then either `initUserKeysWithSignature` or `prepare*HinkalFromSignature`:
|
|
146
|
+
|
|
147
|
+
```typescript
|
|
148
|
+
function storeAndGetInitialSignature(
|
|
149
|
+
authSignature: string,
|
|
150
|
+
isSolanaLedger?: boolean,
|
|
151
|
+
txMessageForSolanaLedger?: string,
|
|
152
|
+
): Promise<string>;
|
|
153
|
+
```
|
|
154
|
+
|
|
155
|
+
Parameters:
|
|
156
|
+
|
|
157
|
+
- `authSignature` — signature from the current login session
|
|
158
|
+
- `isSolanaLedger` — set to `true` for a Solana Ledger wallet. Defaults to `false`
|
|
159
|
+
- `txMessageForSolanaLedger` — base64-encoded transaction message used for Solana Ledger authentication. Required when `isSolanaLedger` is `true`
|
|
160
|
+
|
|
161
|
+
Typical flow with a stored signature:
|
|
162
|
+
|
|
163
|
+
```typescript
|
|
164
|
+
const initialSignature = await hinkal.storeAndGetInitialSignature(authSignature);
|
|
165
|
+
hinkal.initUserKeysWithSignature(initialSignature);
|
|
166
|
+
```
|
|
167
|
+
|
|
168
|
+
Call this once per session, after wallet connection and before fetching balances or submitting transactions.
|
|
169
|
+
|
|
170
|
+
You do not need enclave sign-in if your wallet produces deterministic signatures for the same login message on every session — in that case, `prepare*Hinkal` is sufficient. It is also not needed if you persist the signature yourself via `prepare*HinkalFromSignature`, or if you use seed-phrase-based login through `initUserKeysFromSeedPhrases`.
|
|
171
|
+
|
|
172
|
+
**Security**
|
|
173
|
+
|
|
174
|
+
The stored signature is protected at every stage. Before leaving the client, the signature is encrypted with hybrid encryption. The payload is encrypted with a symmetric key, and that key is encrypted with the enclave's public key.
|
|
175
|
+
|
|
176
|
+
Inside the secure enclave, Google Cloud KMS decrypts the symmetric key. Only then is the signature decrypted. The plaintext signature never leaves the enclave unprotected.
|
|
177
|
+
|
|
178
|
+
At rest, only the encrypted signature and encrypted key are stored in the database. A caller cannot retrieve a stored signature by wallet address alone. Each request must include any valid signature that proves wallet ownership.
|
|
179
|
+
|
|
180
|
+
Requests that fail this check are rejected. The first signature stored for a given address is never replaced. Later logins only use a fresh signature to authenticate retrieval of the original.
|
|
181
|
+
|
|
182
|
+
### Shielded balance
|
|
183
|
+
|
|
184
|
+
Shielded balances are encrypted token holdings stored within the Hinkal protocol. Unlike regular blockchain balances that are publicly visible, shielded balances are hidden from external observers.
|
|
185
|
+
|
|
186
|
+
After initializing the Hinkal object and calling `initUserKeys` (or a prepare helper), fetch balances for a specific chain:
|
|
187
|
+
|
|
188
|
+
```typescript
|
|
189
|
+
function getTotalBalance(
|
|
190
|
+
chainId: number,
|
|
191
|
+
resetCacheBefore?: boolean,
|
|
192
|
+
updateTokensListBefore?: boolean,
|
|
193
|
+
): Promise<TokenBalance[]>;
|
|
194
|
+
```
|
|
195
|
+
|
|
196
|
+
`TokenBalance` contains `chainId`, `erc20Address`, `balance`, and an optional `timestamp`.
|
|
197
|
+
|
|
198
|
+
For reactive UI updates, subscribe to balance changes with USD values:
|
|
199
|
+
|
|
200
|
+
```typescript
|
|
201
|
+
// Current state keyed by chainId
|
|
202
|
+
hinkal.privateBalancesWithUSD;
|
|
203
|
+
|
|
204
|
+
// Subscribe to updates; returns unsubscribe function
|
|
205
|
+
const unsubscribe = hinkal.onPrivateBalancesWithUSDChange((state) => {
|
|
206
|
+
// state: Record<chainId, TokenBalanceWithUsd[]>
|
|
207
|
+
});
|
|
208
|
+
|
|
209
|
+
// Trigger a refresh after a transaction
|
|
210
|
+
hinkal.refreshBalance({ chainIdToUpdate: chainId, updateType: PrivateBalanceUpdateType.Fresh });
|
|
211
|
+
```
|
|
212
|
+
|
|
213
|
+
### Shielding: depositing funds to the shielded balance
|
|
214
|
+
|
|
215
|
+
Shielding moves tokens from a public blockchain address into a private, encrypted balance. Once shielded, tokens are no longer visible on-chain to external observers.
|
|
216
|
+
|
|
217
|
+
```typescript
|
|
218
|
+
function deposit(
|
|
219
|
+
chainId: number,
|
|
220
|
+
erc20Addresses: string[],
|
|
221
|
+
amountChanges: bigint[],
|
|
222
|
+
preEstimateGas?: boolean,
|
|
223
|
+
returnTxData?: boolean,
|
|
224
|
+
): Promise<
|
|
225
|
+
| ethers.TransactionResponse
|
|
226
|
+
| ethers.TransactionRequest
|
|
227
|
+
| string
|
|
228
|
+
| TronWebTypes.Transaction<TronWebTypes.TriggerSmartContract>
|
|
229
|
+
>;
|
|
230
|
+
```
|
|
231
|
+
|
|
232
|
+
where:
|
|
233
|
+
|
|
234
|
+
- `chainId` — target chain
|
|
235
|
+
- `erc20Addresses` — token contract addresses to deposit
|
|
236
|
+
- `amountChanges` — corresponding deposit amounts in the token's smallest unit
|
|
237
|
+
- `preEstimateGas` — if true (default), gas is estimated before executing the deposit
|
|
238
|
+
- `returnTxData` — if true, returns unsigned transaction data without executing. Defaults to false
|
|
239
|
+
|
|
240
|
+
On Solana, use `depositSolana(chainId, erc20Address, amount)`.
|
|
241
|
+
|
|
242
|
+
To shield funds for another user's private address, use `depositForOther` (EVM/Tron) or `depositSolanaForOther` (Solana) with their `recipientInfo` string from `getRecipientInfo()`.
|
|
243
|
+
|
|
244
|
+
### Private Send to Public Address: withdrawing funds from the shielded balance
|
|
245
|
+
|
|
246
|
+
Private Send to Public Address sends tokens from a shielded balance to any public blockchain address without exposing the sender.
|
|
247
|
+
|
|
248
|
+
```typescript
|
|
249
|
+
function withdraw(
|
|
250
|
+
chainId: number,
|
|
251
|
+
erc20Addresses: string[],
|
|
252
|
+
deltaAmounts: bigint[],
|
|
253
|
+
recipientAddress: string,
|
|
254
|
+
isRelayerOff: boolean,
|
|
255
|
+
feeToken?: string,
|
|
256
|
+
feeStructureOverride?: FeeStructure,
|
|
257
|
+
): Promise<ethers.TransactionResponse | string>;
|
|
258
|
+
```
|
|
259
|
+
|
|
260
|
+
where:
|
|
261
|
+
|
|
262
|
+
- `recipientAddress` — public address that receives the withdrawn funds
|
|
263
|
+
- `isRelayerOff` — when `false`, a relayer handles gas fees; when `true`, the user pays gas directly
|
|
264
|
+
- `feeToken` — optional token address used to pay protocol fees
|
|
265
|
+
- `feeStructureOverride` — optional custom fee structure
|
|
266
|
+
|
|
267
|
+
### Private Send to Private Address: transferring funds from shielded balance
|
|
268
|
+
|
|
269
|
+
Private Send to Private Address enables fully confidential transfers between shielded balances.
|
|
270
|
+
|
|
271
|
+
```typescript
|
|
272
|
+
function transfer(
|
|
273
|
+
chainId: number,
|
|
274
|
+
erc20Addresses: string[],
|
|
275
|
+
amountChanges: bigint[],
|
|
276
|
+
recipientAddress: string,
|
|
277
|
+
feeToken?: string,
|
|
278
|
+
feeStructureOverride?: FeeStructure,
|
|
279
|
+
): Promise<string>;
|
|
280
|
+
```
|
|
281
|
+
|
|
282
|
+
where:
|
|
283
|
+
|
|
284
|
+
- `recipientAddress` — recipient's private address string from `getRecipientInfo()`. Pass it as-is; do not reformat. It is a comma-separated string with five components:
|
|
285
|
+
- `stealthAddress` — recipient's stealth address (hex, `0x` prefix, 64–66 characters)
|
|
286
|
+
- `H0[0]` — first coordinate of the H0 elliptic-curve point
|
|
287
|
+
- `H0[1]` — second coordinate of the H0 elliptic-curve point
|
|
288
|
+
- `H1[1]` — second coordinate of the H1 elliptic-curve point
|
|
289
|
+
- `encryptionKey` — recipient's encryption public key (hex, `0x` prefix, 66 characters)
|
|
290
|
+
|
|
291
|
+
### Private Send from Public to Public addresses
|
|
292
|
+
|
|
293
|
+
Private Send from Public to Public transfers tokens between two public addresses through Hinkal's privacy infrastructure. Tokens are shielded from the sender, then withdrawn to recipient public addresses on a relayer schedule.
|
|
294
|
+
|
|
295
|
+
```typescript
|
|
296
|
+
function depositAndWithdraw(
|
|
297
|
+
chainId: number,
|
|
298
|
+
erc20Address: string,
|
|
299
|
+
recipientAmounts: bigint[],
|
|
300
|
+
recipientAddresses: string[],
|
|
301
|
+
txCompletionTime?: number,
|
|
302
|
+
feeStructureOverride?: FeeStructure,
|
|
303
|
+
preEstimateGas?: boolean,
|
|
304
|
+
): Promise<DepositAndSendExtendedResult>;
|
|
305
|
+
```
|
|
306
|
+
|
|
307
|
+
where:
|
|
308
|
+
|
|
309
|
+
- `erc20Address` — token contract address (single-token transfers only)
|
|
310
|
+
- `recipientAmounts` — amounts to send to each recipient in the token's smallest unit
|
|
311
|
+
- `recipientAddresses` — public addresses that receive the funds
|
|
312
|
+
- `txCompletionTime` — optional Unix timestamp in seconds by which all scheduled withdrawals must complete
|
|
313
|
+
- `feeStructureOverride` — optional custom fee structure
|
|
314
|
+
- `preEstimateGas` — if true (default), gas is estimated before executing the deposit
|
|
315
|
+
|
|
316
|
+
The function returns:
|
|
317
|
+
|
|
318
|
+
```typescript
|
|
319
|
+
type DepositAndSendExtendedResult = {
|
|
320
|
+
depositTxHash: string;
|
|
321
|
+
scheduleId: string;
|
|
322
|
+
};
|
|
323
|
+
```
|
|
324
|
+
|
|
325
|
+
For cross-chain private sends, use `depositAndBridge(chainId, erc20Address, recipientBridges, ...)` with `BridgeRecipient` entries that include bridge quotes and destination addresses.
|
|
326
|
+
|
|
327
|
+
### Checking scheduled send status
|
|
328
|
+
|
|
329
|
+
After `depositAndWithdraw` or `depositAndBridge`, fetch scheduled withdrawal status using the returned `scheduleId`:
|
|
330
|
+
|
|
331
|
+
```typescript
|
|
332
|
+
function checkSendTransactionStatus(scheduleId: string): Promise<ScheduledTransactionByIdResponse>;
|
|
333
|
+
```
|
|
334
|
+
|
|
335
|
+
Possible values for `ScheduledTransactionStatus`:
|
|
336
|
+
|
|
337
|
+
- `pending` — scheduled, waiting for execution time
|
|
338
|
+
- `processing` — relayer is submitting the withdrawal on-chain
|
|
339
|
+
- `waiting_for_relayer` — relayer is busy; withdrawal is queued
|
|
340
|
+
- `sent_on_chain` — submitted on-chain; `txHash` is available
|
|
341
|
+
- `completed` — confirmed on-chain
|
|
342
|
+
- `failed` — withdrawal transaction failed
|
|
343
|
+
|
|
344
|
+
### Swapping tokens from the shielded balance
|
|
345
|
+
|
|
346
|
+
```typescript
|
|
347
|
+
function swap(
|
|
348
|
+
chainId: number,
|
|
349
|
+
erc20Addresses: string[],
|
|
350
|
+
deltaAmounts: bigint[],
|
|
351
|
+
externalActionId: ExternalActionId,
|
|
352
|
+
swapData: string,
|
|
353
|
+
feeToken?: string,
|
|
354
|
+
feeStructureOverride?: FeeStructure,
|
|
355
|
+
): Promise<string>;
|
|
356
|
+
```
|
|
357
|
+
|
|
358
|
+
**Getting swap quotes and calldata:**
|
|
359
|
+
|
|
360
|
+
**EVM chains** — `getEvmSwapPrices(chainId, inSwapAmount, inSwapTokenAddress, outSwapTokenAddress)` returns quotes from Uniswap, Odos, and 1Inch. Pass swap calldata with the matching `externalActionId`:
|
|
361
|
+
|
|
362
|
+
- **Uniswap** — `uniswap.poolFee` with `ExternalActionId.Uniswap`
|
|
363
|
+
- **Odos** — `odos.odosDataValue` with `ExternalActionId.Odos`
|
|
364
|
+
- **1Inch** — `oneInch.oneInchDataValue` with `ExternalActionId.OneInch`
|
|
365
|
+
|
|
366
|
+
**Solana** — `getSolanaSwapPrices(...)` returns an OKX quote. Pass `okx.okxDataValue` to `swap` with `ExternalActionId.Okx`.
|
|
367
|
+
|
|
368
|
+
### Interacting with smart contracts privately
|
|
369
|
+
|
|
370
|
+
```typescript
|
|
371
|
+
function actionPrivateWallet(
|
|
372
|
+
chainId: number,
|
|
373
|
+
erc20Addresses: string[],
|
|
374
|
+
deltaAmounts: bigint[],
|
|
375
|
+
onChainCreation: boolean[],
|
|
376
|
+
ops: string[],
|
|
377
|
+
feeToken?: string,
|
|
378
|
+
feeStructureOverride?: FeeStructure,
|
|
379
|
+
): Promise<string>;
|
|
380
|
+
```
|
|
381
|
+
|
|
382
|
+
Generate user operations with `emporiumOp`:
|
|
383
|
+
|
|
384
|
+
```typescript
|
|
385
|
+
function emporiumOp(
|
|
386
|
+
contract: ethers.Contract | string,
|
|
387
|
+
func?: string,
|
|
388
|
+
args?: unknown[],
|
|
389
|
+
callDataString?: string,
|
|
390
|
+
invokeWallet?: boolean,
|
|
391
|
+
value?: bigint,
|
|
392
|
+
): string;
|
|
393
|
+
```
|
|
394
|
+
|
|
395
|
+
**Stateless interactions** (swaps, simple staking) use default `invokeWallet: false`.
|
|
396
|
+
|
|
397
|
+
**Stateful interactions** (reward tracking, voting power) require `invokeWallet: true` so the call runs from a persistent wallet address.
|
|
398
|
+
|
|
399
|
+
```typescript
|
|
400
|
+
const operations = [
|
|
401
|
+
hinkal.emporiumOp(usdcContractInstance, 'approve', [swapRouterAddress, amountIn]),
|
|
402
|
+
hinkal.emporiumOp(swapRouterContractInstance, 'exactInputSingle', [swapSingleParams]),
|
|
403
|
+
];
|
|
404
|
+
```
|
|
405
|
+
|
|
406
|
+
## Supported Chains
|
|
407
|
+
|
|
408
|
+
| Chain | Chain ID | Status |
|
|
409
|
+
| --------------- | ---------- | ------- |
|
|
410
|
+
| Ethereum | 1 | ✅ Live |
|
|
411
|
+
| Arbitrum | 42161 | ✅ Live |
|
|
412
|
+
| Optimism | 10 | ✅ Live |
|
|
413
|
+
| Polygon | 137 | ✅ Live |
|
|
414
|
+
| Base | 8453 | ✅ Live |
|
|
415
|
+
| Solana | 501 | ✅ Live |
|
|
416
|
+
| Tron | 728126428 | ✅ Live |
|
|
417
|
+
| Tempo | 4217 | ✅ Live |
|
|
418
|
+
| Arc Testnet | 5042002 | ✅ Live |
|
|
419
|
+
| Sepolia Testnet | 11155111 | ✅ Live |
|
|
420
|
+
| Tron Nile | 3448148188 | ✅ Live |
|
|
421
|
+
|
|
422
|
+
## References
|
|
423
|
+
|
|
424
|
+
Wallet: [Hinkal Wallet](https://chromewebstore.google.com/detail/hinkal-wallet/khfjgapjfcdoffmklchibpepboholpbe)
|
|
425
|
+
|
|
426
|
+
Application: [Hinkal Pay](https://pay.hinkal.io)
|
|
427
|
+
|
|
428
|
+
Docs: [Hinkal Documentation](https://hinkal-team.gitbook.io/hinkal)
|
|
@@ -2,9 +2,9 @@
|
|
|
2
2
|
const domain = 'https://storage.googleapis.com/hinkal-workers-staging';
|
|
3
3
|
|
|
4
4
|
const WORKER_CDN_URLS = {
|
|
5
|
-
ZKProof: domain + '/0.3.
|
|
6
|
-
SnarkJS: domain + '/0.3.
|
|
7
|
-
UTXO: domain + '/0.3.
|
|
5
|
+
ZKProof: domain + '/0.3.150/' + 'zkProofWorkerLauncher.js',
|
|
6
|
+
SnarkJS: domain + '/0.3.150/' + 'snarkjsWorkerLauncher.js',
|
|
7
|
+
UTXO: domain + '/0.3.150/' + 'utxoWorkerLauncher.js',
|
|
8
8
|
};
|
|
9
9
|
|
|
10
10
|
// Returns a blob:// URL which points
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@gurge/sdk-react-native",
|
|
3
|
-
"version": "0.3.
|
|
3
|
+
"version": "0.3.150",
|
|
4
4
|
"description": "Prebundled Hinkal SDK for React Native — no Metro config required.",
|
|
5
5
|
"homepage": "hinkal.io",
|
|
6
6
|
"author": {
|
|
@@ -72,14 +72,14 @@
|
|
|
72
72
|
"ua-parser-js": "^1.0.37",
|
|
73
73
|
"uuid": "^9.0.1",
|
|
74
74
|
"node-forge": "^1.3.1",
|
|
75
|
-
"tronweb": "^6.2.0"
|
|
75
|
+
"tronweb": "^6.2.0",
|
|
76
|
+
"react-native-webview": "^13.0.0",
|
|
77
|
+
"react-native-get-random-values": "^1.11.0",
|
|
78
|
+
"@react-native-async-storage/async-storage": "^2.2.0"
|
|
76
79
|
},
|
|
77
80
|
"peerDependencies": {
|
|
78
81
|
"react": ">=18.2.0",
|
|
79
82
|
"react-native": ">=0.74.0",
|
|
80
|
-
"react-native-webview": "^13.0.0",
|
|
81
|
-
"react-native-get-random-values": "^1.11.0",
|
|
82
|
-
"@react-native-async-storage/async-storage": "^2.2.0",
|
|
83
83
|
"wagmi": "2.13.3",
|
|
84
84
|
"@walletconnect/utils": "^2.17.2"
|
|
85
85
|
},
|