DAppKit is a lightweight set of functions that allow mobile DApps to work with the Celo Wallet to sign transactions and access the user's account. This allows for a better user experience: DApps can focus on a great native experience without having to wor
Last updated 10 days ago by jmrossy .
Original npm · Tarball · package.json
$ cnpm install @celo/dappkit 
SYNC missed versions from official npm registry.

Celo DAppKit

DAppKit is a lightweight set of functions that allow mobile DApps to work with the Celo Wallet to sign transactions and access the user's account. This allows for a better user experience: DApps can focus on a great native experience without having to worry about key management. It also provides a simpler development experience, as no state or connection management is necessary.

DAppKit supports the following functionality:

  • Request permission to access account information and phone number from the Celo Wallet
  • Request permission to sign transaction(s) from the Celo Waller
  • Look up phone numbers using the Identity Protocol to find contacts using Celo.

DAppKit is currently built with the excellent Expo framework in mind. In the near future, we will make it more generic to all of React Native and possibly native stacks, but for now you get to take advantage of some awesome features like an incredibly easy setup, hot-reloading, and more.


This section walks you through the main functionalities of DAppKit. You can also find the result of this walkthrough on the expo base template on branch dappkit-usage.

DAppKit uses deeplinks to communicate between your DApp and the Celo Wallet. All "requests" that your DApp makes to the Wallet needs to contain the following meta payload:

  • requestId A string you can pass to DAppKit, that you can use to listen to the response for that request
  • dappName A string that will be displayed to the user, indicating the DApp requesting access/signature.
  • callback The deeplink that the Celo Wallet will use to redirect the user back to the DApp with the appropriate payload. If you want the user to be directed to a particular page in your DApp. With Expo, it's as simple as Linking.makeUrl('/my/path')

Requesting Account Address

One of the first actions you will want to do as a DApp Developer is to get the address of your user's account, to display relevant information to them. It can be done as simply as:

(expo base template commit)

import { requestAccountAddress, waitForAccountAuth } from '@celo/dappkit'
import { Linking } from 'expo'

login = async () => {
  const requestId = 'login'
  const dappName = 'My DappName'
  const callback = Linking.makeUrl('/my/path')


  const dappkitResponse = await waitForAccountAuth(requestId)

  this.setState({ address: dappkitResponse.address, phoneNumber: dappkitResponse.phoneNumber })

Once you have the account address, you can make calls against your own smart contract, or use ContractKit to fetch a user's balance:

(expo base template commit)

  const address = dappkitResponse.address
  this.setState({ address, phoneNumber: dappkitResponse.phoneNumber, isLoadingBalance: true })

  const kit = newKit('https://alfajores-forno.celo-testnet.org')
  kit.defaultAccount = address

  const stableToken = await kit.contracts.getStableToken()

  const [cUSDBalanceBig, cUSDDecimals] = await Promise.all([stableToken.balanceOf(address), stableToken.decimals()])
  const cUSDBalance = this.convertToContractDecimals(cUSDBalanceBig, cUSDDecimals)

  this.setState({ cUSDBalance, isLoadingBalance: false })

Signing Transactions

Let's go from accessing account information to submitting transactions. To alter state on the blockchain, make a transaction object with your smart contract or any of the Celo Core Contracts in ContractKit. All that is left to do is to pass the transaction object to DAppKit.

(expo base template commit)

import {
} from "@celo/dappkit";

// Create the transaction object
const stableToken = await kit.contracts.getStableToken();
const decimals = await stableToken.decimals();
const txObject = stableToken.transfer(
  new BigNumber(10).pow(parseInt(decimals, 10)).toString()

const requestId = "transfer";
const dappName = "My DappName";
const callback = Linking.makeUrl("/my/path");

// Request the TX signature from DAppKit
      tx: txObject,
      from: this.state.address,
      to: stableToken.contract.options.address,
      feeCurrency: FeeCurrency.cUSD
  { requestId, dappName, callback }

const dappkitResponse = await waitForSignedTxs(requestId);
const tx = dappkitResponse.rawTxs[0];

// Send the signed transaction via web3
kit.web3.eth.sendSignedTransaction(tx).on("confirmation", async () => {
  const [cUSDBalanceBig, cUSDDecimals] = await Promise.all([
  const cUSDBalance = this.convertToContractDecimals(

  this.setState({ cUSDBalance, isLoadingBalance: false });

Current Tags

  • 0.10.0                                ...           latest (10 days ago)

44 Versions

  • 0.10.0                                ...           10 days ago
  • 0.0.9                                ...           7 months ago
  • 0.0.8                                ...           a year ago
  • 0.0.8-alpha3                                ...           a year ago
  • 0.0.8-alpha2                                ...           a year ago
  • 0.0.8-alpha1                                ...           a year ago
  • 0.0.8-alpha                                ...           a year ago
  • 0.0.7                                ...           a year ago
  • 0.0.6                                ...           a year ago
  • 0.0.5                                ...           a year ago
  • 0.0.4                                ...           a year ago
  • 0.0.3                                ...           a year ago
  • 0.0.2                                ...           a year ago
  • 0.0.1-ag                                ...           a year ago
  • 0.0.1-af                                ...           a year ago
  • 0.0.1-ae                                ...           a year ago
  • 0.0.1-ad                                ...           a year ago
  • 0.0.1-ac                                ...           a year ago
  • 0.0.1-ab                                ...           a year ago
  • 0.0.1-aa                                ...           a year ago
  • 0.0.1-z                                ...           a year ago
  • 0.0.1-y                                ...           a year ago
  • 0.0.1-w                                ...           a year ago
  • 0.0.1-v                                ...           a year ago
  • 0.0.1-u                                ...           a year ago
  • 0.0.1-t                                ...           a year ago
  • 0.0.1-s                                ...           a year ago
  • 0.0.1-r                                ...           a year ago
  • 0.0.1-q                                ...           a year ago
  • 0.0.1-p                                ...           a year ago
  • 0.0.1-o                                ...           a year ago
  • 0.0.1-n                                ...           a year ago
  • 0.0.1-m                                ...           a year ago
  • 0.0.1-l                                ...           a year ago
  • 0.0.1-k                                ...           a year ago
  • 0.0.1-j                                ...           a year ago
  • 0.0.1-h                                ...           a year ago
  • 0.0.1-g                                ...           a year ago
  • 0.0.1-f                                ...           a year ago
  • 0.0.1-e                                ...           a year ago
  • 0.0.1-d                                ...           a year ago
  • 0.0.1-c                                ...           a year ago
  • 0.0.1-b                                ...           a year ago
  • 0.0.1-a                                ...           a year ago
Today 0
This Week 0
This Month 10
Last Day 0
Last Week 10
Last Month 0
Dependencies (6)
Dev Dependencies (0)
Dependents (0)

Copyright 2014 - 2016 © taobao.org |