How to connect Dapp UI to Venom

Project Setup

Make sure you have:

1. The Venom wallet extension 2. Node.js and NPM Downloaded and Installed

Install Dependencies

Open a terminal inside the base directory of your project. Inside the folder, follow the command

npm i everscale-inpage-provider --save

Connecting to the Venom Wallet

The first thing we need to do is make sure that the wallet is installed in a browser

import { ProviderRpcClient } from 'everscale-inpage-provider';

const ever = new ProviderRpcClient();

async function myApp() {
  if (!(await ever.hasProvider())) {
  /**
    * Handle this case by showing the user a link to the Venom extension
    */
    throw new Error('Extension is not installed');
  }

  //...
}

and check if it is connected

//...

const ever = new ProviderRpcClient({
/**
  * Fallback function which will be called if injected provider was not found.
  */
  fallback: () => {}
});


async function myApp() {
  //...

 /**
   * Waits until provider API will be available.
   * Calls `fallback` if no provider was found
   * @throws ProviderNotFoundException when no provider is found
   */
  await ever.ensureInitialized();

  //...
}

Next, we need to request permission to get account info and interaction with it

//...

const { accountInteraction } = await ever.requestPermissions({
  permissions: ['basic', 'accountInteraction'],
});

if (accountInteraction == null) {
  throw new Error('Insufficient permissions');
}

We've connected to Venom wallet, and now we can interact with blockchain: transfer funds, call contract methods, and read their state.

How to call smart contracts from code

First, you need to initialize an instance of a contract by its ABI, and address

//...

const DePoolAbi = {...}
const dePoolAddress = new Address('0:bb...e9');

const dePool = new ever.Contract(DePoolAbi, dePoolAddress);

Contract is an abstraction that makes it easy to interact with smart contracts on the Venom network.

const transaction = await dePool
    .methods
    .addOrdinaryStake({
      stake: '10000000000',
    }).send({
      from: selectedAddress,
      amount: '10500000000',
      bounce: true,
    });

  console.log(transaction);

  try {
    const output = await dePool
      .methods
      .getParticipantInfo({
        addr: selectedAddress,
      })
      .call();
    console.log(output);
  } catch (e) {
    if (e instanceof TvmException) {
      console.error(e.code);
    }
  }

Last updated