Invoke Lambda method using developer business wallet(Zero-Friction and Gasless)

In this tutorial, we will discuss two groundbreaking features that amplify the Metakeep Lambda capabilities: Business wallets and Atomic batch transactions. We will also take a look at how to make payments(aka value transfer). All this can be easily accomplished without digging into the underlying blockchain complexities like nodes, transaction fees, nonces, and much more.

Invoking contract method using business wallets

In this tutorial, like earlier, we will start with a basic Voting Smart contract from our GitHub repo.

You can find an end-to-end working demo here.

Step 1: Copy the address of the Lambda that you want to invoke.

You should have gotten the Lambda address as the output of the previous tutorial.
If you have lost the address, you can make a request to List Lambdas API to get the list of all deployed Lambdas. Else, you can always deploy a new contract by following the previous tutorial.

Step 2: Make a Post request to the invoke API

To use business wallets, you need to send BUSINESS_WALLET in the using parameter of the lambda invocation.

To call a single lambda contract, use the Invoke Lambda API. Here's what the request looks like:

{
  "lambda": "0x1234.....",
  "function": {
    "name": "function_name",
    // keep it empty in case of no args
    "args": [
      "arg1",
      "arg2"
    ]
  },
  "pay": "0.01",
  "reason": "reason for invocation",
  "using": "BUSINESS_WALLET"
}

On the other hand, if you are looking to make multiple calls and payments, then use the Invoke Lambda (Batch) API. Here's what the request looks like:

{
  "invocations": [
    // First call with payment
    {
      "call": {
        "lambda": "0x1234....",
        "function": {
          "name": "function_name",
          "args": [
            "arg1",
            "arg2"
          ]
        },
        "pay": "0.01",
        "reason": "reason for invocation"
      }
    },
    // Second call with payment
    {
      "call": {
        "lambda": "0xab12....",
        "function": {
          "name": "function_name1",
          "args": [
            "arg3",
            "arg4"
          ]
        },
        "pay": "0.02",
        "reason": "reason for this invocation"
      }
    },
    // Payment to an address
    {
      "pay": {
        "to": {
          "ethAddress": "0xadd...."
        },
        "amount": "1.11"
      }
    }
  ],
  "reason": "high level reason for the batch",
  "using": "BUSINESS_WALLET"
}

Running the Demo

You can find an end-to-end working demo here. Follow these steps to run the Demo:

Step 1: Prerequisite

Before proceeding, you need to complete the first part of the tutorial. Once you have the lambda address, store it somewhere because we would need that in the next step.

Also, make sure that your developer Business Wallet has sufficient tokens for the payment(value transfer).

Step 2: Update the .env file

Update the .env file with the API key, and the Lambda address from the previous step.

Step 3: Run the script

Navigate to the lambda/business-wallet/batch-transactions/scripts directory. Then, run the command:

npm install
npm run registerAndVote

The script will run a batch of size 3(create a proposal, stake, and then vote) using the Invoke Lambda (Batch) API. Note that only 1 transaction will be executed on the blockchain.

Next steps

Voila! You have invoked multiple functions and issued payments using MetaKeep Lambda Business Wallets 🎉🎉.