Deploy Web3 Action via CLI
In this guide, you’ll learn how to deploy Web3 Actions via the Tenderly CLI that watches for blocks as they’re mined and simply outputs the block number.
Prerequisites
You need to have npm and the Tenderly CLI installed and properly configured on your local machine. Check out the Web3 Actions CLI Cheatsheet for installation instructions.
Initializing a Web3 Actions Project
Navigate to the folder on your system where you want to place your Web3 Action code and the following command to initialize a new Web3 Actions project:
tenderly actions init
By default, the project will be configured to use TypeScript. If you prefer plain JavaScript, add the language flag and specify javascript:
tenderly actions init --language javascript
When prompted, select an existing Tenderly project from your account or create a new one.
Next, input the name of the root directory where your code will be stored. If you want to leave the default actions, press Enter, or input a custom directory name.
The folder structure of your project should look like this:
/actions
|--- example.ts
|--- package.json
|--- package-lock.json
|--- tsconfig.json
|--- /node_modules
|--- @tenderly
|--- /typescript
tenderly.yaml
Building and deploying the Web3 Action
These are the steps we need to take to build and deploy a Web3 Action:
- Create the action function
- Configure the block trigger to run the function
- Deploy the code to Tenderly using the CLI
Creating an action function
Copy the following code into the example.ts file:
import { ActionFn, Context, Event, BlockEvent } from '@tenderly/actions';
export const blockHelloWorldFn: ActionFn = async (context: Context, event: Event) => {
let blockEvent = event as BlockEvent;
console.log('Block number is: ', blockEvent.blockNumber);
};
This defines and exports an action function. In the next step, we’ll configure it to run after 10 blocks are mined.
Notes:
Notice that the function is asynchronous and accepts two arguments - a Context
object and an Event
object.
Context
object enables access to Storage and Secrets. You can read more about it here.- The and the
event
argument is an object containing information about the external (on-chain) event that triggered the action. Because we want to run this action on a block-related event, theevent
argument will be of typeBlockEvent
. TheBlockEvent
object contains information about the block that was mined, such as the block number, the block hash, and the block timestamp.
Configuring the trigger in tenderly.yaml for a new action
Step 1: Replace the content of the tenderly.yaml
file with the following:
account_id: ''
project_slug: ''
actions:
username/project-slug:
runtime: v1
sources: actions
specs:
block-number-printer:
description: Example Web3 Action that logs block number once it is mined.
function: example:blockHelloWorldFn
trigger:
type: block
block:
network:
- 1
blocks: 10
Step 2: Replace the username
and project-slug
with your username and the slug of your project.
Check out this guide to learn how to find the organization name, username, and project slug.
Notes:
The tenderly.yaml file contains specifications of triggers for each action in the project and links the trigger to an action function. Here, we’re creating an action called block-number-printer
.
- The
function
property is referencing theblockHelloWorldFn
function from the example.ts file. - This action will be triggered on each 10th block mined on network 1, as per the
trigger
property.
Learn more about External Events and Trigger types.
Building and deploying actions
Go back to terminal and run the following command to deploy all Web3 Actions you defined. After successful deployment, you will be able to see the actions in the Tenderly UI.
tenderly actions deploy
Zero downtime upgrade of Web3 Actions\ To upgrade a Web3 Action, just edit the source code
and/or tenderly.yaml and run tenderly actions deploy.
Before you go
Keep in mind:
- You must run the
deploy
command from the folder containing tenderly.yaml file. - If you initialize actions for multiple Tenderly projects in the same directory, upon running
deploy
you will be asked to select a project. Only actions belonging to the selected project will be deployed. - All actions belonging to one project are deployed simultaneously.
- Any file referenced from the JavaScript/TypeScript must be in the actions root. Do not reference files outside of this folder.
Resources
- Learn more about Web3 Actions Functions, Events, and Triggers.
- Learn more about Context, Storage, and Secrets.
- Learn more about Project Structure and tenderly.yaml configuration.