Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 2 additions & 8 deletions tasks/ccip-token-transfer-batch.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,7 @@

import { task } from "hardhat/config";
import { TaskArguments } from "hardhat/types";
import { getPrivateKey, getProviderRpcUrl, getRouterConfig, getPayFeesIn } from "./utils";
import { Wallet, providers } from "ethers";
import { getRouterConfig, getPayFeesIn, getSignerAndProvider } from "./utils";
import { IRouterClient, IRouterClient__factory, IERC20, IERC20__factory } from "../typechain-types";
import { TokenAmounts } from "./constants";
import { BasicTokenSender } from "../typechain-types/artifacts/contracts/BasicTokenSender";
Expand All @@ -23,12 +22,7 @@ task(`ccip-token-transfer-batch`, `Transfers tokens from one blockchain to anoth
const { sourceBlockchain, basicTokenSenderAddress, destinationBlockchain, receiver, tokenAmounts, payFeesIn } = taskArguments;
const tokensToSendDetails: TokenAmounts[] = JSON.parse(tokenAmounts);

const privateKey = getPrivateKey();
const sourceRpcProviderUrl = getProviderRpcUrl(sourceBlockchain);

const provider = new providers.JsonRpcProvider(sourceRpcProviderUrl);
const wallet = new Wallet(privateKey);
const signer = wallet.connect(provider);
const { signer, provider } = getSignerAndProvider(sourceBlockchain);

const routerAddress = taskArguments.router ? taskArguments.router : getRouterConfig(sourceBlockchain).address;
const targetChainSelector = getRouterConfig(destinationBlockchain).chainSelector;
Expand Down
13 changes: 4 additions & 9 deletions tasks/ccip-token-transfer.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import { task } from "hardhat/config";
import { HardhatRuntimeEnvironment, TaskArguments } from "hardhat/types";
import { getPrivateKey, getProviderRpcUrl, getRouterConfig } from "./utils";
import { Wallet, providers, utils, constants } from "ethers";
import { TaskArguments } from "hardhat/types";
import { getRouterConfig, getSignerAndProvider } from "./utils";
import { utils, constants } from "ethers";
import { IRouterClient, IRouterClient__factory, IERC20, IERC20__factory } from "../typechain-types";
import { Spinner } from "../utils/spinner";
import { getCcipMessageId } from "./helpers";
Expand All @@ -18,12 +18,7 @@ task(`ccip-token-transfer`, `Transfers tokens from one blockchain to another usi
.setAction(async (taskArguments: TaskArguments) => {
const { sourceBlockchain, destinationBlockchain, receiver, tokenAddress, amount, feeTokenAddress, gasLimit } = taskArguments;

const privateKey = getPrivateKey();
const sourceRpcProviderUrl = getProviderRpcUrl(sourceBlockchain);

const provider = new providers.JsonRpcProvider(sourceRpcProviderUrl);
const wallet = new Wallet(privateKey);
const signer = wallet.connect(provider);
const { signer, provider } = getSignerAndProvider(sourceBlockchain);

const spinner: Spinner = new Spinner();

Expand Down
50 changes: 18 additions & 32 deletions tasks/cross-chain-nft-minter.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
import { task } from "hardhat/config";
import { HardhatRuntimeEnvironment, TaskArguments } from "hardhat/types";
import { getPayFeesIn, getPrivateKey, getProviderRpcUrl, getRouterConfig } from "./utils";
import { Wallet, providers } from "ethers";
import { getPayFeesIn, getRouterConfig, getSigner, getSignerAndProvider, getProvider } from "./utils";
import { DestinationMinter, DestinationMinter__factory, MyNFT, MyNFT__factory, SourceMinter, SourceMinter__factory } from "../typechain-types";
import { Spinner } from "../utils/spinner";
import { LINK_ADDRESSES } from "./constants";
Expand All @@ -10,36 +9,32 @@ import { getCcipMessageId } from "./helpers";
task(`deploy-destination-cross-chain-nft-minter`, `Deploys MyNFT.sol and DestinationMinter.sol smart contracts`)
.addOptionalParam(`router`, `The address of the Router contract on the destination blockchain`)
.setAction(async (taskArguments: TaskArguments, hre: HardhatRuntimeEnvironment) => {
const routerAddress = taskArguments.router ? taskArguments.router : getRouterConfig(hre.network.name).address;
const blockchainNetwork = hre.network.name;
const routerAddress = taskArguments.router ? taskArguments.router : getRouterConfig(blockchainNetwork).address;

const privateKey = getPrivateKey();
const rpcProviderUrl = getProviderRpcUrl(hre.network.name);

const provider = new providers.JsonRpcProvider(rpcProviderUrl);
const wallet = new Wallet(privateKey);
const deployer = wallet.connect(provider);
const signer = getSigner(blockchainNetwork);

const spinner: Spinner = new Spinner();

console.log(`ℹ️ Attempting to deploy MyNFT smart contract on the ${hre.network.name} blockchain using ${deployer.address} address`);
console.log(`ℹ️ Attempting to deploy MyNFT smart contract on the ${blockchainNetwork} blockchain using ${signer.address} address`);
spinner.start();

const myNftFactory: MyNFT__factory = await hre.ethers.getContractFactory('MyNFT') as MyNFT__factory;
const myNft: MyNFT = await myNftFactory.deploy();
await myNft.deployed();

spinner.stop();
console.log(`✅ MyNFT contract deployed at address ${myNft.address} on the ${hre.network.name} blockchain`)
console.log(`✅ MyNFT contract deployed at address ${myNft.address} on the ${blockchainNetwork} blockchain`)

console.log(`ℹ️ Attempting to deploy DestinationMinter smart contract on the ${hre.network.name} blockchain using ${deployer.address} address, with the Router address ${routerAddress} provided as constructor argument`);
console.log(`ℹ️ Attempting to deploy DestinationMinter smart contract on the ${blockchainNetwork} blockchain using ${signer.address} address, with the Router address ${routerAddress} provided as constructor argument`);
spinner.start();

const destinationMinterFactory: DestinationMinter__factory = await hre.ethers.getContractFactory('DestinationMinter') as DestinationMinter__factory;
const destinationMinter: DestinationMinter = await destinationMinterFactory.deploy(routerAddress, myNft.address);
await destinationMinter.deployed();

spinner.stop();
console.log(`✅ DestinationMinter contract deployed at address ${destinationMinter.address} on the ${hre.network.name} blockchain`);
console.log(`✅ DestinationMinter contract deployed at address ${destinationMinter.address} on the ${blockchainNetwork} blockchain`);

console.log(`ℹ️ Attempting to grant the minter role to the DestinationMinter smart contract`);
spinner.start();
Expand All @@ -54,27 +49,23 @@ task(`deploy-destination-cross-chain-nft-minter`, `Deploys MyNFT.sol and Destina
task(`deploy-source-cross-chain-nft-minter`, `Deploys SourceMinter.sol smart contract`)
.addOptionalParam(`router`, `The address of the Router contract on the source blockchain`)
.setAction(async (taskArguments: TaskArguments, hre: HardhatRuntimeEnvironment) => {
const routerAddress = taskArguments.router ? taskArguments.router : getRouterConfig(hre.network.name).address;
const linkAddress = taskArguments.link ? taskArguments.link : LINK_ADDRESSES[hre.network.name]

const privateKey = getPrivateKey();
const rpcProviderUrl = getProviderRpcUrl(hre.network.name);
const blockchainNetwork = hre.network.name;
const routerAddress = taskArguments.router ? taskArguments.router : getRouterConfig(blockchainNetwork).address;
const linkAddress = taskArguments.link ? taskArguments.link : LINK_ADDRESSES[blockchainNetwork]

const provider = new providers.JsonRpcProvider(rpcProviderUrl);
const wallet = new Wallet(privateKey);
const deployer = wallet.connect(provider);
const signer = getSigner(blockchainNetwork);

const spinner: Spinner = new Spinner();

console.log(`ℹ️ Attempting to deploy SourceMinter smart contract on the ${hre.network.name} blockchain using ${deployer.address} address, with the Router address ${routerAddress} and LINK address ${linkAddress} provided as constructor arguments`);
console.log(`ℹ️ Attempting to deploy SourceMinter smart contract on the ${blockchainNetwork} blockchain using ${signer.address} address, with the Router address ${routerAddress} and LINK address ${linkAddress} provided as constructor arguments`);
spinner.start();

const sourceMinterFactory: SourceMinter__factory = await hre.ethers.getContractFactory('SourceMinter') as SourceMinter__factory;
const sourceMinter: SourceMinter = await sourceMinterFactory.deploy(routerAddress, linkAddress);
await sourceMinter.deployed();

spinner.stop();
console.log(`✅ SourceMinter contract deployed at address ${sourceMinter.address} on the ${hre.network.name} blockchain`);
console.log(`✅ SourceMinter contract deployed at address ${sourceMinter.address} on the ${blockchainNetwork} blockchain`);
})

task(`cross-chain-mint`, `Mints the new NFT by sending the Cross-Chain Message`)
Expand All @@ -86,12 +77,7 @@ task(`cross-chain-mint`, `Mints the new NFT by sending the Cross-Chain Message`)
.setAction(async (taskArguments: TaskArguments) => {
const { sourceBlockchain, sourceMinter, destinationBlockchain, destinationMinter, payFeesIn } = taskArguments;

const privateKey = getPrivateKey();
const sourceRpcProviderUrl = getProviderRpcUrl(sourceBlockchain);

const sourceProvider = new providers.JsonRpcProvider(sourceRpcProviderUrl);
const wallet = new Wallet(privateKey);
const signer = wallet.connect(sourceProvider);
const { signer, provider } = getSignerAndProvider(sourceBlockchain);

const spinner: Spinner = new Spinner();

Expand All @@ -114,7 +100,7 @@ task(`cross-chain-mint`, `Mints the new NFT by sending the Cross-Chain Message`)
spinner.stop();
console.log(`✅ Mint request sent, transaction hash: ${tx.hash}`);

await getCcipMessageId(tx, receipt, sourceProvider);
await getCcipMessageId(tx, receipt, provider);

console.log(`✅ Task cross-chain-mint finished with the execution`);
})
Expand All @@ -124,8 +110,8 @@ task('cross-chain-mint-balance-of', 'Gets the balance of MyNFTs for provided add
.addParam(`blockchain`, `The blockchain where the MyNFT smart contract was deployed`)
.addParam(`owner`, `The address to check the balance of MyNFTs`)
.setAction(async (taskArguments: TaskArguments) => {
const rpcProviderUrl = getProviderRpcUrl(taskArguments.blockchain);
const provider = new providers.JsonRpcProvider(rpcProviderUrl);

const provider = getProvider(taskArguments.blockchain);

const spinner: Spinner = new Spinner();

Expand Down
24 changes: 9 additions & 15 deletions tasks/deploy-basic-message-receiver.ts
Original file line number Diff line number Diff line change
@@ -1,31 +1,25 @@
import { task } from "hardhat/config";
import { HardhatRuntimeEnvironment, TaskArguments } from "hardhat/types";
import { getPrivateKey, getProviderRpcUrl, getRouterConfig } from "./utils";
import { Wallet, providers } from "ethers";
import { BasicMessageReceiver__factory, BasicMessageReceiver } from "../typechain-types";
import { getRouterConfig, getSigner } from "./utils";
import { Spinner } from "../utils/spinner";

task(`deploy-basic-message-receiver`, `Deploys the BasicMessageReceiver smart contract`)
.addOptionalParam(`router`, `The address of the Router contract`)
.setAction(async (taskArguments: TaskArguments, hre: HardhatRuntimeEnvironment) => {
const routerAddress = taskArguments.router ? taskArguments.router : getRouterConfig(hre.network.name).address;

const privateKey = getPrivateKey();
const rpcProviderUrl = getProviderRpcUrl(hre.network.name);

const provider = new providers.JsonRpcProvider(rpcProviderUrl);
const wallet = new Wallet(privateKey);
const deployer = wallet.connect(provider);
const blockchainNetwork = hre.network.name;
const routerAddress = taskArguments.router ? taskArguments.router : getRouterConfig(blockchainNetwork).address;

const signer = getSigner(blockchainNetwork);

const spinner: Spinner = new Spinner();

console.log(`ℹ️ Attempting to deploy BasicMessageReceiver on the ${hre.network.name} blockchain using ${deployer.address} address, with the Router address ${routerAddress} provided as constructor argument`);
console.log(`ℹ️ Attempting to deploy BasicMessageReceiver on the ${blockchainNetwork} blockchain using ${signer.address} address, with the Router address ${routerAddress} provided as constructor argument`);
spinner.start();

const basicMessageReceiverFactory: BasicMessageReceiver__factory = await hre.ethers.getContractFactory('BasicMessageReceiver') as BasicMessageReceiver__factory;
const basicMessageReceiver: BasicMessageReceiver = await basicMessageReceiverFactory.deploy(routerAddress);
const basicMessageReceiverFactory = await hre.ethers.getContractFactory('BasicMessageReceiver');
const basicMessageReceiver = await basicMessageReceiverFactory.deploy(routerAddress);
await basicMessageReceiver.deployed();

spinner.stop();
console.log(`✅ Basic Message Receiver deployed at address ${basicMessageReceiver.address} on ${hre.network.name} blockchain`)
console.log(`✅ Basic Message Receiver deployed at address ${basicMessageReceiver.address} on ${blockchainNetwork} blockchain`)
});
24 changes: 9 additions & 15 deletions tasks/deploy-basic-message-sender.ts
Original file line number Diff line number Diff line change
@@ -1,34 +1,28 @@
import { task } from "hardhat/config";
import { HardhatRuntimeEnvironment, TaskArguments } from "hardhat/types";
import { getPrivateKey, getProviderRpcUrl, getRouterConfig } from "./utils";
import { Wallet, providers } from "ethers";
import { getRouterConfig, getSigner } from "./utils";
import { Spinner } from "../utils/spinner";
import { LINK_ADDRESSES } from "./constants";
import { BasicMessageSender, BasicMessageSender__factory } from "../typechain-types";

task(`deploy-basic-message-sender`, `Deploys the BasicMessageSender smart contract`)
.addOptionalParam(`router`, `The address of the Router contract`)
.addOptionalParam(`link`, `The address of the LINK token`)
.setAction(async (taskArguments: TaskArguments, hre: HardhatRuntimeEnvironment) => {
const routerAddress = taskArguments.router ? taskArguments.router : getRouterConfig(hre.network.name).address;
const linkAddress = taskArguments.link ? taskArguments.link : LINK_ADDRESSES[hre.network.name]
const blockchainNetwork = hre.network.name;
const routerAddress = taskArguments.router ? taskArguments.router : getRouterConfig(blockchainNetwork).address;
const linkAddress = taskArguments.link ? taskArguments.link : LINK_ADDRESSES[blockchainNetwork]

const privateKey = getPrivateKey();
const rpcProviderUrl = getProviderRpcUrl(hre.network.name);

const provider = new providers.JsonRpcProvider(rpcProviderUrl);
const wallet = new Wallet(privateKey);
const deployer = wallet.connect(provider);
const signer = getSigner(blockchainNetwork);

const spinner: Spinner = new Spinner();

console.log(`ℹ️ Attempting to deploy BasicMessageSender on the ${hre.network.name} blockchain using ${deployer.address} address, with the Router address ${routerAddress} and LINK address ${linkAddress} provided as constructor arguments`);
console.log(`ℹ️ Attempting to deploy BasicMessageSender on the ${blockchainNetwork} blockchain using ${signer.address} address, with the Router address ${routerAddress} and LINK address ${linkAddress} provided as constructor arguments`);
spinner.start();

const basicMessageSenderFactory: BasicMessageSender__factory = await hre.ethers.getContractFactory('BasicMessageSender') as BasicMessageSender__factory;
const basicMessageSender: BasicMessageSender = await basicMessageSenderFactory.deploy(routerAddress, linkAddress);
const basicMessageSenderFactory = await hre.ethers.getContractFactory('BasicMessageSender');
const basicMessageSender = await basicMessageSenderFactory.deploy(routerAddress, linkAddress);
await basicMessageSender.deployed();

spinner.stop();
console.log(`✅ BasicMessageSender deployed at address ${basicMessageSender.address} on ${hre.network.name} blockchain`)
console.log(`✅ BasicMessageSender deployed at address ${basicMessageSender.address} on ${blockchainNetwork} blockchain`)
});
20 changes: 7 additions & 13 deletions tasks/deploy-basic-token-sender.ts
Original file line number Diff line number Diff line change
@@ -1,33 +1,27 @@
import { task } from "hardhat/config";
import { HardhatRuntimeEnvironment, TaskArguments } from "hardhat/types";
import { getPrivateKey, getProviderRpcUrl, getRouterConfig } from "./utils";
import { Wallet, providers } from "ethers";
import { getRouterConfig, getSigner } from "./utils";
import { Spinner } from "../utils/spinner";
import { LINK_ADDRESSES } from "./constants";

task(`deploy-basic-token-sender`, `Deploys the BasicTokenSender smart contract`)
.addOptionalParam(`router`, `The address of the Router contract`)
.addOptionalParam(`link`, `The address of the LINK token`)
.setAction(async (taskArguments: TaskArguments, hre: HardhatRuntimeEnvironment) => {
const routerAddress = taskArguments.router ? taskArguments.router : getRouterConfig(hre.network.name).address;
const linkAddress = taskArguments.link ? taskArguments.link : LINK_ADDRESSES[hre.network.name]

const privateKey = getPrivateKey();
const rpcProviderUrl = getProviderRpcUrl(hre.network.name);

const provider = new providers.JsonRpcProvider(rpcProviderUrl);
const wallet = new Wallet(privateKey);
const deployer = wallet.connect(provider);
const blockchainNetwork = hre.network.name;
const routerAddress = taskArguments.router ? taskArguments.router : getRouterConfig(blockchainNetwork).address;
const linkAddress = taskArguments.link ? taskArguments.link : LINK_ADDRESSES[blockchainNetwork]

const signer = getSigner(blockchainNetwork);
const spinner: Spinner = new Spinner();

console.log(`ℹ️ Attempting to deploy BasicTokenSender on the ${hre.network.name} blockchain using ${deployer.address} address, with the Router address ${routerAddress} and LINK address ${linkAddress} provided as constructor arguments`);
console.log(`ℹ️ Attempting to deploy BasicTokenSender on the ${blockchainNetwork} blockchain using ${signer.address} address, with the Router address ${routerAddress} and LINK address ${linkAddress} provided as constructor arguments`);
spinner.start();

const basicTokenSenderFactory = await hre.ethers.getContractFactory('BasicTokenSender');
const basicTokenSender = await basicTokenSenderFactory.deploy(routerAddress, linkAddress);
await basicTokenSender.deployed();

spinner.stop();
console.log(`✅ Basic Token Sender deployed at address ${basicTokenSender.address} on the ${hre.network.name} blockchain`)
console.log(`✅ Basic Token Sender deployed at address ${basicTokenSender.address} on the ${blockchainNetwork} blockchain`)
});
Loading