Firewall - Venn
This page describes how to integrate Venn.
Venn Network is an advanced security layer that you can easily add on top of your smart contracts. Learn more at: Venn Site Try it: Venn Playground Code it: Source Code Repo
Instructions
In this challenge, you'll deploy a new Venn Firewall and integrate it into your smart contracts to enhance your project's security.
Once completed, you'll also need to integrate Venn DApp SDK to your DApp's Frontend so that transactions get approved before being sent onchain.
Step 1: In This Repo
Clone the repo and install dependencies: git clone https://github.com/ironblocks/DC7-SEA npm ci
git clone https://github.com/ironblocks/DC7-SEA npm ci
Setup your private key and hardhat network configuration
cp .env.example .env
PRIVATE_KEY=...
RPC_URL=...
Compile
npm run firewall:compile # the warning are a feature, not a bug 😅
Deploy a new Firewall
Venn Firewall is an onchain solution that can surgically prevent malicious transactions from going through, only allowing approved transactions to be executed.
npm run firewall:deploy -- --network
Note the new venn.config.json file that was created with the Firewall address in it. We'll use this later in Step 4.
Step 2: In Your Smart Contracts Repo
Now that the Firewall is deployed, you'll use various Venn SDKs to integrate Venn with your project.
Install the CLI:
npm i -g @vennbuild/cli
Run the CLI to add the Firewall to your smart contracts:
venn fw integ -r -d contracts
Deploy your contracts as you normally would:
hardhat run scripts/deploy.js # your deployment script
Step 3: Back In This Repo
Now that your smart contracts have integration with Venn, you'll need to send a setup transaction to enable the Firewall.
Remember venn.config.json ? time to use it. Open this file and add your contracts addresses:
{
"networks": {
"holesky": {
"firewall": "0x123...",
"contracts": {
"MyContract1": "0x11111...",
"MyContract2": "0x22222..."
}
}
}
}
Run the setup script. This script will send setup transactions from the PRIVATE_KEY you've configured in the .env file to turn on the Firewall on each of your contracts:
npm run firewall:setup -- --network
Step 4: Your Repo Again (last time)
With the Venn Firewall enabled on your smart contracts, transactions need to be approved via Venn Network before they can be submitted on chain.
To do this, you'll add our Venn DApp SDK to your DApp's Frontend.
Install the SDK:
npm i @vennbuild/venn-dapp-sdk
Create a new instance of the SDK Client:
import { VennClient } from '@vennbuild/venn-dapp-sdk';
const vennURL = "https://dc7sea.venn.build/sign";
const vennPolicyAddress = YOUR FIREWALL ADDRESS;
const vennClient = new VennClient(
{
vennURL,
vennPolicyAddress
});
Update your DApp to approve transactions before submitting them onchain:
//You probably have something like this:
const tx = { to, from, data, value };
const receipt = await
wallet.sendTransaction(approvedTransaction);
//But now you need this:
const tx = { to, from, data, value };
const approvedTransaction = await
vennClient.approve(tx);
const receipt = await
wallet.sendTransaction(approvedTransaction);
Step 5: Removing the Firewall Just run this:
npm run firewall:remove -- --network <network>
Happy coding!
Last updated