Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions .vitepress/config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -413,6 +413,10 @@ export default {
text: 'Tron',
link: '/developers/mobile-tron',
},
{
text: 'Cardano',
link: '/developers/mobile-cardano',
},
],
},
{
Expand Down
213 changes: 213 additions & 0 deletions developers/mobile-cardano.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,213 @@
# Mobile Wallet Cardano Integration

This document provides details on integrating Cardano with the mobile wallet application. The integration supports various functionalities such as retrieving account information, signing transactions, and signing data based on the [CIP-30 specification](https://cips.cardano.org/cip/CIP-30).

## Installation & Setup

### Install dependencies

The document uses the appkit of Reown to deploy. Please refer to the documentation at [here](https://docs.reown.io/appkit/overview).

```bash
npm install @reown/appkit
```

### Initialize the appkit

```javascript
import { createAppKit } from '@reown/appkit/core'
import { defineChain } from '@reown/appkit/networks'

const cardano = defineChain({
id: 'cardano-mainnet',
caipNetworkId: 'cip34:1-764824073',
chainNamespace: 'cip34',
name: 'Cardano Mainnet',
nativeCurrency: {
name: 'Cardano',
symbol: 'ADA',
decimals: 6
},
rpcUrls: {
default: { http: ['https://rpc.walletconnect.org/v1'] }
},
blockExplorerUrls: {
default: { name: 'Cardanoscan', url: 'https://cardanoscan.io' }
}
})

// Instantiate AppKit
const modal = createAppKit({
adapters: [],
networks: [cardano],
projectId,
themeMode: 'light',
features: {
analytics: true
},
metadata: {
name: 'AppKit HTML Example',
description: 'AppKit HTML Example',
url: 'https://reown.com/appkit',
icons: []
}
})

// Subscribe to state changes
modal.subscribeProviders(state => {
provider = state['cip34']
})
```

## Methods

### cardano_getBalance
This method returns the total balance available of the wallet

#### Example
```javascript
const result = await provider.request({
method: 'cardano_getBalance',
params: {}
});
```

#### Returns
- The total balance as CBOR-encoded value.

### cardano_getNetworkId
This method returns the network ID of the currently connected network.

#### Example
```javascript
const result = await provider.request({
method: 'cardano_getNetworkId',
params: {}
});
```

#### Returns
- Network identifier (0 for testnet, 1 for mainnet).

### cardano_getUtxos
This method returns a list of all UTXOs (unspent transaction outputs) controlled by the wallet.

#### Example
```javascript
const result = await provider.request({
method: 'cardano_getUtxos',
params: [
`cbor<value>_encoded`
{ page: 0, limit: 50 } // Optional: pagination
]
});
```

#### Parameters
- `amount`: (Optional) Minimum ADA and token value to filter UTXO.
- `paginate`: (Optional) Pagination object with page and limit.

#### Returns
- Array of CBOR-encoded TransactionUnspentOutput objects or null.

### cardano_getCollateral
This method returns UTXOs that are suitable for use as collateral inputs for transactions with Plutus script witnesses.

#### Example
```javascript
const result = await provider.request({
method: 'cardano_getCollateral',
params: {}
});
```

#### Returns
- Array of CBOR-encoded TransactionUnspentOutput objects suitable for collateral.

### cardano_getUsedAddresses
This method returns a list of all used addresses controlled by the wallet.

#### Example
```javascript
const result = await provider.request({
method: 'cardano_getUsedAddresses',
params: [
{ page: 0, limit: 50 } // Optional: pagination
]
});
```

#### Parameters
- `paginate`: (Optional) Pagination object with page and limit.

#### Returns
- Array of hex-encoded address bytes.

### cardano_getUnusedAddresses
This method returns a list of unused addresses controlled by the wallet.

#### Example
```javascript
const result = await provider.request({
method: 'cardano_getUnusedAddresses',
params: []
});
```

#### Returns
- Array of hex-encoded unused address bytes.

### cardano_getChangeAddress
This method returns an address owned by the wallet that should be used as a change address.

#### Example
```javascript
const result = await provider.request({
method: 'cardano_getChangeAddress',
params: []
});
```

#### Returns
- Hex-encoded change address bytes.

### cardano_signTx
This method requests that a user sign the unsigned portions of the supplied transaction.

#### Example
```javascript
const result = await provider.request({
method: 'cardano_signTx',
params: [
'cbor_encoded_transaction', // CBOR-encoded transaction
false // Optional: whether to allow partial signing
]
});
```

#### Parameters
- `tx`: CBOR-encoded transaction to be signed.
- `partialSign`: (Optional) Boolean indicating if partial signing is allowed.

#### Returns
- CBOR-encoded transaction witness set containing the signatures.

### cardano_submitTx
This method requests that a transaction be submitted to the Cardano network.

#### Example
```javascript
const result = await provider.request({
method: 'cardano_submitTx',
params: [
'cbor_encoded_signed_transaction' // CBOR-encoded signed transaction
]});
```

#### Parameters
- `tx`: CBOR-encoded signed transaction to be submitted.

#### Returns
- Transaction hash (32-byte hex string) for tracking the transaction.

For more details, refer to the [CIP-30 Cardano dApp-Wallet Web Bridge](https://cips.cardano.org/cip/CIP-30).
1 change: 1 addition & 0 deletions developers/mobile-wallet.md
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@ Reown (aka WalletConnect) is an open protocol for connecting desktop DApps to mo
| Solana | ✅ | ✅ |
| Cosmos | ✅ | ✅ |
| Tron | ✅ | ✅ |
| Cardano | ✅ | ✅ |

## Testing Wallet

Expand Down