# D'CENT WalletConnect

## The Structural Diagram to Know How WalletConnect Works

<figure><img src="/files/u24lCn5bRAMcrt7kB3h2" alt=""><figcaption></figcaption></figure>

#### connector event subscription

```typescript
function on(event : string , callback : (error : Error | null , payload : any | null ) => void ) : void
```

* `event` : connect, disconnect, session\_request, session\_update, call\_request, wc\_sessionRequest, wc\_sessionUpdate

#### create session (session\_request)

```typescript
async function createSession() : Promise<void>;
```

#### kill session (disconnect)

```typescript
function killSession() : void
```

#### example code

```typescript
import WalletConnect from "@dcentwallet/walletconnect-client";
import QRcodeModal from "@dcentwallet/qrcode-modal"


// if connect func exec , modal must be opened
const connect = async () => {
   const qrcodeModalOptions = {};
   const connector = new WalletConnect({ qrcodeModal: QRCodeModal, qrcodeModalOptions });
   // create session
   if(!connector.connected){
        await connector.createSession({chainId : '' }) // in order to open modal, createSession is required
   }
   // subscribe connector event
   subscribeToEvents();
}

// subscribe event function
// callback : (err, payload) => void
const subscribeToEvent = () => {
   connector.on('session_update', async callback )
   connector.on('connect', callback )
   connector.on('disconnect', callback ) // kill session
}

const killSession = async () => {
   if(connector) {
       connector.killSession();
   }
   // attach reset your app state code
}type
```

## sendTransaction, signTransaction

```typescript
async function sendTransaction({
  from : string, // required
  to : string,  // required
  gas : string, // required
  gasPrice : string, //required
  value : string, // required
  data : string, // required
  nonce : string, // required
}) : Promise<string> //required

async function signTransaction({
  from: string, // required
  to: string, // required
  gas: string, // required
  gasPrice: string, // required
  value: string, // required
  data: string, // required
  nonce: string, // required
}): Promise<string>;
```

```typescript
const tx = { from, to, nonce, gasPrice, gasLimit, value, data };
const sendTransactionResult = await connector.sendTransaction(tx) // sendTransactionResult returns transaction hash
const signTransactionResult = await connector.signTransaction(tx) // signTransactionResult returns signed transaction 
// result returns transaction hash 
```

* Other connector methods : `signMessage`, `signPersonalMessage`, `signTypedData`
* For more information, refer to the following:

{% embed url="<https://docs.walletconnect.com/1.0/client-api>" %}

## Get D’CENT Wallet Address

```typescript
connector.on('connect', (err, payload) => {
    const { chainId, accounts }  = payload.params[0];
    const address = accounts[0] // D'CENT Wallet Address
}
```

## Request D’CENT to create accounts

```typescript
const qrcodeModalOptions = {}; // see below more details
const connector = new WalletConnect({ qrcodeModal: QRCodeModal, qrcodeModalOptions})
```

#### `qrcodeModalOptions`

* `qrcodeModalOptions` interface

|   property  |     type     |   required   |
| :---------: | :----------: | :----------: |
| serviceName |    string    |   required   |
|   accounts  | IAccount \[] | not required |

* `IAccount` interface

<table><thead><tr><th width="177" align="center">property</th><th width="83" align="center">type</th><th width="96" align="center">required</th><th>example</th></tr></thead><tbody><tr><td align="center">contractAddress</td><td align="center">string</td><td align="center">required</td><td>0x4c665BBafd28Ec9e5D792345f470ebFcA21E3d15</td></tr><tr><td align="center">networkType</td><td align="center">string</td><td align="center">required</td><td>ETHEREUM / POLYGON / …</td></tr><tr><td align="center">name</td><td align="center">string</td><td align="center">required</td><td>only when networkType supports contract</td></tr><tr><td align="center">symbol</td><td align="center">string</td><td align="center">required</td><td>only when networkType supports contract</td></tr></tbody></table>

#### example

```typescript
const qrcodeModalOptions = {
  serviceName: "insert your dapp name",
  accounts: [
    {
      contractAddress: '',
      networkType: 'XRP'
    },
    {
      contractAddress: '0x2791bca1f2de4661ed88a30c99a7a9449aa84174',
      networkType: 'POLYGON',
      name: 'USD Coin',
      symbol: 'USDC',
    },
    {
      contractAddress: '0xc2132d05d31c914a87c6611c10748aeb04b58e8f',
      networkType: 'POLYGON',
      name: 'Tether',
      symbol: 'USDT'
    }
  ]
};

const connector = new WalletConnect({ qrcodeModal : QRcodeModal, qrcodeModalOptions });
```

## NetworkType List

> Network types where you can create accounts. (Main Account & Token Account Support)

<table><thead><tr><th width="387" align="center">networkType</th><th align="center">support contract</th></tr></thead><tbody><tr><td align="center">BITCOIN</td><td align="center">X</td></tr><tr><td align="center">BTC-SEGWIT</td><td align="center">X</td></tr><tr><td align="center">ETHEREUM</td><td align="center">O</td></tr><tr><td align="center">RSK</td><td align="center">O</td></tr><tr><td align="center">XRP</td><td align="center">O</td></tr><tr><td align="center">MONACOIN</td><td align="center">X</td></tr><tr><td align="center">KLAYTN</td><td align="center">O</td></tr><tr><td align="center">BITCOINCASH</td><td align="center">X</td></tr><tr><td align="center">BCH-ABC</td><td align="center">X</td></tr><tr><td align="center">ECASH</td><td align="center">X</td></tr><tr><td align="center">ZCASH</td><td align="center">X</td></tr><tr><td align="center">LITECOIN</td><td align="center">X</td></tr><tr><td align="center">LTC-SEGWIT</td><td align="center">X</td></tr><tr><td align="center">BITCOIN-GOLD</td><td align="center">X</td></tr><tr><td align="center">DASH</td><td align="center">X</td></tr><tr><td align="center">DIGIBYTE</td><td align="center">X</td></tr><tr><td align="center">DGB-SEGWIT</td><td align="center">X</td></tr><tr><td align="center">RAVENCOIN</td><td align="center">X</td></tr><tr><td align="center">BINANCE</td><td align="center">O</td></tr><tr><td align="center">STELLAR</td><td align="center">O</td></tr><tr><td align="center">ETH-CLASSIC</td><td align="center">X</td></tr><tr><td align="center">BITCOIN-SV</td><td align="center">X</td></tr><tr><td align="center">TRON</td><td align="center">O</td></tr><tr><td align="center">DOGECOIN</td><td align="center">X</td></tr><tr><td align="center">LUNIVERSE</td><td align="center">O</td></tr><tr><td align="center">PALM</td><td align="center">X</td></tr><tr><td align="center">FLARE</td><td align="center">X</td></tr><tr><td align="center">XINFIN</td><td align="center">O</td></tr><tr><td align="center">CARDANO</td><td align="center">X</td></tr><tr><td align="center">BSC</td><td align="center">O</td></tr><tr><td align="center">POLYGON</td><td align="center">O</td></tr><tr><td align="center">HORIZEN</td><td align="center">X</td></tr><tr><td align="center">HEDERA</td><td align="center">O</td></tr><tr><td align="center">STACKS</td><td align="center">O</td></tr><tr><td align="center">SOLANA</td><td align="center">O</td></tr><tr><td align="center">POLKADOT</td><td align="center">X</td></tr><tr><td align="center">CONFLUX</td><td align="center">O</td></tr><tr><td align="center">HECO</td><td align="center">O</td></tr><tr><td align="center">XDAI</td><td align="center">O</td></tr><tr><td align="center">FANTOM</td><td align="center">O</td></tr><tr><td align="center">CELO</td><td align="center">O</td></tr><tr><td align="center">METADIUM</td><td align="center">O</td></tr><tr><td align="center">KUCOIN</td><td align="center">O</td></tr><tr><td align="center">SONGBIRD</td><td align="center">O</td></tr><tr><td align="center">AVALANCHE</td><td align="center">O</td></tr><tr><td align="center">EWT</td><td align="center">O</td></tr><tr><td align="center">ARBITRUM</td><td align="center">O</td></tr><tr><td align="center">BODA</td><td align="center">O</td></tr><tr><td align="center">OEC</td><td align="center">O</td></tr><tr><td align="center">HARMONY</td><td align="center">O</td></tr><tr><td align="center">ORBITCHAIN</td><td align="center">O</td></tr><tr><td align="center">OPENCOIN</td><td align="center">O</td></tr><tr><td align="center">CRONOS</td><td align="center">O</td></tr></tbody></table>


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://dev-docs.dcentwallet.com/dwc/dwc.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
