VeBetterDAO Docs
  • VeBetterDAO
    • VeBetterDAO
    • B3TR & VOT3 Tokens
    • B3TR Emissions
    • Treasury
    • X2Earn Allocations
    • X2Earn Apps
    • Governance
    • Voter Rewards
    • Smart Contracts
    • Roles And Permissions
    • Trust Assumptions
    • Verify contract
  • Developer Guides
    • Get Started
    • Test Environment
    • Testnet B3TR tokens
    • Reward Distribution
      • JavaScript
      • Solidity
      • Manage distributors funds
    • Sustainability Proof and Impacts
    • Reward Metadata
    • Security Considerations
    • Submit Your App
    • X2Earn Creators NFT
    • Resources
  • VePassport
    • VePassport
    • Checks
      • Personhood Check
      • Proof of Participation
      • Proof of investment
      • Bot Signaling
      • Blacklisting and Whitelisting
    • Passport Delegation
    • Accounts Linking
    • Roles
  • Vechain Node Holders Guides
    • Endorsement Guide for VeChain Node Holders
    • Node Management
    • Vechain Nodes X GM NFTs: Maximizing Benefits within VeBetter DAO
Powered by GitBook
On this page

Was this helpful?

Export as PDF
  1. Developer Guides
  2. Reward Distribution

JavaScript

PreviousReward DistributionNextSolidity

Last updated 7 days ago

Was this helpful?

Setup a lambda function or an endpoint that will send the B3TR tokens to the user, providing also a proof and impacts of the rewarding action.

We will use and to interact with VeBetterDAO's X2EarnRewardsPool contract to distribute the rewards.

Run the following command to install the packages:

yarn add @vechain/sdk-network @vechain/vebetterdao-contracts

To distribute the rewards you will need 2 information:

  • Node URL

TESTNET: https://testnet.vechain.org
MAINNET: https://mainnet.vechain.org
  • Your APP_ID on VeBetterDAO: create app to obtain the APP_ID.

Now you can distribute the reward like this:

import {
  ProviderInternalHDWallet,
  ThorClient,
  VeChainProvider,
  VeChainSigner,
} from "@vechain/sdk-network";
import { X2EarnRewardsPool } from "@vechain/vebetterdao-contracts";

function rewardUser() {
    // To transfer B3TR we first need to connect to the blockchain with
    // a wallet capable of signing and broadcastisting transactions
    const thor = ThorClient.at(process.env.NODE_URL || "");
    const provider = new VeChainProvider(
      thor,
      new ProviderInternalHDWallet(
        process.env.REWARD_SENDER_MNEMONIC?.split(" ") || []
      )
    );
    const rootSigner = await provider.getSigner();

    // Call the VeBetterDAO smart contract
    const x2EarnRewardsPoolContract = thor.contracts.load(
      process.env.X2EARN_REWARDS_POOL_ADDRESS || "",
      X2EarnRewardsPool.abi,
      rootSigner as VeChainSigner
    );
    
    const tx =
      await x2EarnRewardsPoolContract.transact.distributeRewardDeprecated(
        process.env.VEBETTERDAO_APP_ID || "",
        10,
        address,
        JSON.stringify({
          version: 2,
          description: "User refilled water from a sustainable source",
          proof: {
            image: "https://image.png",
            link: "https://twitter.com/tweet/1",
          },
          impact: {
             carbon: 100,
             water: 200
          }
        })
      );

    await tx.wait();
}

import {
  ProviderInternalHDWallet,
  ThorClient,
  VeChainProvider,
  VeChainSigner,
} from "@vechain/sdk-network";
import { X2EarnRewardsPool } from "@vechain/vebetterdao-contracts";

const PRIVATE_KEY = ""
const ACCOUNT_ADDRESS_OF_PK = ""

function rewardUser() {
    // To transfer B3TR we first need to connect to the blockchain with
    // a wallet capable of signing and broadcastisting transactions
    const thor = ThorClient.at(process.env.NODE_URL || "");
    const wallet = new ProviderInternalBaseWallet(
        [
            {
                privateKey: Buffer.from(
                    PRIVATE_KEY.slice(2),
                    'hex',
                ),
                address: ACCOUNT_ADDRESS_OF_PK,
            },
        ],
    );
    const provider = new VeChainProvider(
        thor,
        wallet,
        false,
    );
    const signer = await provider.getSigner(
        ACCOUNT_ADDRESS_OF_PK,
    );

    // Call the VeBetterDAO smart contract
    const x2EarnRewardsPoolContract = thor.contracts.load(
      process.env.X2EARN_REWARDS_POOL_ADDRESS || "",
      X2EarnRewardsPool.abi,
      rootSigner as VeChainSigner
    );
    
    const tx =
      await x2EarnRewardsPoolContract.transact.distributeRewardDeprecated(
        process.env.VEBETTERDAO_APP_ID || "",
        10,
        address,
        JSON.stringify({
          version: 2,
          description: "User refilled water from a sustainable source",
          proof: {
            image: "https://image.png",
            link: "https://twitter.com/tweet/1",
          },
          impact: {
             carbon: 100,
             water: 200
          }
        })
      );

    await tx.wait();
}

Sustainability Proof

To be able to distribute the rewards you will need to add the PUBLIC ADDRESS of the wallet calling the distributeRewards function as a Reward Distributor of your app. To do so, you need to:

1) Connect with your app's admin wallet to the governance dapp

2) Go to your app's page

3) Click the cogs button to enter the settings page

4) Scroll down to the "Reward Distributors" section, and add the public address as a reward distributor

5) Save changes

Read more about the proof standard and how we expect you to provide it in the section.

@vechain/sdk-network
@vechain/vebetterdao-contracts
here
Sustainability Proofs and Impacts