From 94a27cbc937be7efac195e7f207f13de4bdedf45 Mon Sep 17 00:00:00 2001 From: v1rtl Date: Fri, 19 Jul 2024 14:03:07 +0300 Subject: [PATCH] remove ethers completely --- bun.lockb | Bin 236271 -> 236287 bytes package.json | 1 - tasks/accounts.cts | 8 +- tasks/seed.ts | 218 +++++++++++++++++++++------------------------ 4 files changed, 108 insertions(+), 119 deletions(-) diff --git a/bun.lockb b/bun.lockb index f30d2c8a8238b54709161b3418b39e79c2d9b297..82538e01ad0f8883993d171cb52b573b60937f94 100755 GIT binary patch delta 12637 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 diff --git a/package.json b/package.json index 33c9bebc..a6bcd10e 100644 --- a/package.json +++ b/package.json @@ -37,7 +37,6 @@ "abitype": "^1.0.2", "chai": "^5.1.1", "dotenv": "^16.4.5", - "ethers": "^5.6.1", "hardhat": "^2.22.2", "hardhat-abi-exporter": "^2.9.0", "hardhat-contract-sizer": "^2.6.1", diff --git a/tasks/accounts.cts b/tasks/accounts.cts index 4d0b4761..5e26cf20 100644 --- a/tasks/accounts.cts +++ b/tasks/accounts.cts @@ -1,9 +1,9 @@ -import config = require('hardhat/config') +import { task } from 'hardhat/config.js' -config.task('accounts', 'Prints the list of accounts', async (_, hre) => { - const accounts = await hre.ethers.getSigners() +task('accounts', 'Prints the list of accounts', async (_, hre) => { + const accounts = await hre.viem.getWalletClients() - for (const account of accounts) { + for (const { account } of accounts) { console.log(account.address) } }) diff --git a/tasks/seed.ts b/tasks/seed.ts index f9ec4a29..d87e68b9 100644 --- a/tasks/seed.ts +++ b/tasks/seed.ts @@ -1,37 +1,35 @@ -import { namehash } from 'viem/ens' +import { labelhash, namehash } from 'viem/ens' import * as dotenv from 'dotenv' -import { task } from 'hardhat/config' +import { task } from 'hardhat/config.js' +import { Address, Hex, hexToBigInt } from 'viem' -const labelhash = (utils: any, label: string) => - utils.keccak256(utils.toUtf8Bytes(label)) - -function getOpenSeaUrl(ethers: any, contract: string, namehashedname: string) { - const tokenId = ethers.BigNumber.from(namehashedname).toString() +function getOpenSeaUrl(contract: Address, namehashedname: Hex) { + const tokenId = hexToBigInt(namehashedname).toString() return `https://testnets.opensea.io/assets/${contract}/${tokenId}` } task('seed', 'Creates test subbdomains and wraps them with Namewrapper') .addPositionalParam('name', 'The ENS label to seed subdomains') - .setAction(async ({ name }, hre) => { + .setAction(async ({ name }: { name: string }, hre) => { const { parsed: parsedFile, error } = dotenv.config({ path: './.env', encoding: 'utf8', }) if (error) throw error + if (!parsedFile) throw new Error('Failed to parse .env') - const ethers = hre.ethers - const [deployer] = await ethers.getSigners() + const [deployer] = await hre.viem.getWalletClients() const CAN_DO_EVERYTHING = 0 const CANNOT_UNWRAP = 1 const CANNOT_SET_RESOLVER = 8 - const firstAddress = deployer.address + const firstAddress = deployer.account.address const { REGISTRY_ADDRESS: registryAddress, REGISTRAR_ADDRESS: registrarAddress, WRAPPER_ADDRESS: wrapperAddress, RESOLVER_ADDRESS: resolverAddress, - } = parsedFile + } = parsedFile as Record if ( !( registryAddress && @@ -42,7 +40,11 @@ task('seed', 'Creates test subbdomains and wraps them with Namewrapper') ) { throw 'Set addresses on .env' } - console.log('Account balance:', (await deployer.getBalance()).toString()) + const publicClient = await hre.viem.getPublicClient() + console.log( + 'Account balance:', + publicClient.getBalance({ address: deployer.account.address }), + ) console.log({ registryAddress, registrarAddress, @@ -51,137 +53,125 @@ task('seed', 'Creates test subbdomains and wraps them with Namewrapper') firstAddress, name, }) - const EnsRegistry = await ( - await ethers.getContractFactory('ENSRegistry') - ).attach(registryAddress) - const BaseRegistrar = await ( - await ethers.getContractFactory('BaseRegistrarImplementation') - ).attach(registrarAddress) - const NameWrapper = await ( - await ethers.getContractFactory('NameWrapper') - ).attach(wrapperAddress) - const Resolver = await ( - await ethers.getContractFactory('PublicResolver') - ).attach(resolverAddress) + const EnsRegistry = await hre.viem.getContractAt( + 'ENSRegistry', + registryAddress, + ) + + const BaseRegistrar = await hre.viem.getContractAt( + 'BaseRegistrarImplementation', + registrarAddress, + ) + + const NameWrapper = await hre.viem.getContractAt( + 'NameWrapper', + wrapperAddress, + ) + + const Resolver = await hre.viem.getContractAt( + 'PublicResolver', + resolverAddress, + ) + const domain = `${name}.eth` const namehashedname = namehash(domain) - await ( - await BaseRegistrar.setApprovalForAll(NameWrapper.address, true) - ).wait() + await BaseRegistrar.write.setApprovalForAll([NameWrapper.address, true]) + console.log('BaseRegistrar setApprovalForAll successful') - await ( - await EnsRegistry.setApprovalForAll(NameWrapper.address, true) - ).wait() - console.log('EnsRegistry setApprovalForAll successful') - - await ( - await NameWrapper.wrapETH2LD( - name, - firstAddress, - CAN_DO_EVERYTHING, - 0, - resolverAddress, - { - gasLimit: 10000000, - }, - ) - ).wait() + await EnsRegistry.write.setApprovalForAll([NameWrapper.address, true]) + + await NameWrapper.write.wrapETH2LD( + [name, firstAddress, CAN_DO_EVERYTHING, resolverAddress], + { + gas: 10000000n, + }, + ) + console.log( `Wrapped NFT for ${domain} is available at ${getOpenSeaUrl( - ethers, NameWrapper.address, namehashedname, )}`, ) - await ( - await NameWrapper.setSubnodeOwner( - namehash(`${name}.eth`), - 'sub1', - firstAddress, - CAN_DO_EVERYTHING, - 0, - ) - ).wait() + await NameWrapper.write.setSubnodeOwner([ + namehash(`${name}.eth`), + 'sub1', + firstAddress, + CAN_DO_EVERYTHING, + 0n, + ]) + console.log('NameWrapper setSubnodeOwner successful for sub1') - await ( - await NameWrapper.setSubnodeOwner( - namehash(`${name}.eth`), - 'sub2', - firstAddress, - CAN_DO_EVERYTHING, - 0, - ) - ).wait() + await NameWrapper.write.setSubnodeOwner([ + namehash(`${name}.eth`), + 'sub2', + firstAddress, + CAN_DO_EVERYTHING, + 0n, + ]) + console.log('NameWrapper setSubnodeOwner successful for sub2') - await ( - await NameWrapper.setResolver( - namehash(`sub2.${name}.eth`), - resolverAddress, - ) - ).wait() + await NameWrapper.write.setResolver([ + namehash(`sub2.${name}.eth`), + resolverAddress, + ]) + console.log('NameWrapper setResolver successful for sub2') - await ( - await Resolver.setText( - namehash(`sub2.${name}.eth`), - 'domains.ens.nft.image', - '', - ) - ).wait() - await ( - await Resolver.setText( - namehash(`sub2.${name}.eth`), - 'avatar', - 'https://i.imgur.com/1JbxP0P.png', - ) - ).wait() + await Resolver.write.setText([ + namehash(`sub2.${name}.eth`), + 'domains.ens.nft.image', + '', + ]) + + await Resolver.write.setText([ + namehash(`sub2.${name}.eth`), + 'avatar', + 'https://i.imgur.com/1JbxP0P.png', + ]) + console.log( `Wrapped NFT for sub2.${name}.eth is available at ${getOpenSeaUrl( - ethers, NameWrapper.address, namehash(`sub2.${name}.eth`), )}`, ) - await ( - await NameWrapper.setFuses(namehash(`${name}.eth`), CANNOT_UNWRAP, { - gasLimit: 10000000, - }) - ).wait() + await NameWrapper.write.setFuses([namehash(`${name}.eth`), CANNOT_UNWRAP], { + gas: 10000000n, + }) + console.log('NameWrapper set CANNOT_UNWRAP fuse successful for sub2') - await ( - await NameWrapper.setFuses(namehash(`sub2.${name}.eth`), CANNOT_UNWRAP, { - gasLimit: 10000000, - }) - ).wait() + await NameWrapper.write.setFuses( + [namehash(`sub2.${name}.eth`), CANNOT_UNWRAP], + { + gas: 10000000n, + }, + ) + console.log('NameWrapper set CANNOT_UNWRAP fuse successful for sub2') - await ( - await NameWrapper.setFuses( - namehash(`sub2.${name}.eth`), - CANNOT_SET_RESOLVER, - { - gasLimit: 10000000, - }, - ) - ).wait() + await NameWrapper.write.setFuses( + [namehash(`sub2.${name}.eth`), CANNOT_SET_RESOLVER], + { + gas: 10000000n, + }, + ) + console.log('NameWrapper set CANNOT_SET_RESOLVER fuse successful for sub2') - await ( - await NameWrapper.unwrap( - namehash(`${name}.eth`), - labelhash(ethers.utils, 'sub1'), - firstAddress, - { - gasLimit: 10000000, - }, - ) - ).wait() + await NameWrapper.write.unwrap( + [namehash(`${name}.eth`), labelhash('sub1'), firstAddress], + { + gas: 10000000n, + }, + ) + console.log(`NameWrapper unwrap successful for ${name}`) })