Skip to content

Commit

Permalink
fix: using just the ethers library
Browse files Browse the repository at this point in the history
  • Loading branch information
freemanzMrojo committed Nov 7, 2024
1 parent 32420c5 commit 2b18d56
Show file tree
Hide file tree
Showing 21 changed files with 111 additions and 178 deletions.
28 changes: 11 additions & 17 deletions packages/aws-kms-adapter/src/KMSVeChainSigner.ts
Original file line number Diff line number Diff line change
@@ -1,14 +1,7 @@
import { bytesToHex, concatBytes } from '@noble/curves/abstract/utils';
import { type SignatureType } from '@noble/curves/abstract/weierstrass';
import { secp256k1 } from '@noble/curves/secp256k1';
import {
Address,
Hex,
Keccak256,
Transaction,
Txt,
vechain_sdk_core_ethers
} from '@vechain/sdk-core';
import { Address, Hex, Keccak256, Transaction, Txt } from '@vechain/sdk-core';
import { JSONRPCInvalidParams, SignerMethodError } from '@vechain/sdk-errors';
import {
type AvailableVeChainProviders,
Expand All @@ -18,6 +11,11 @@ import {
VeChainAbstractSigner
} from '@vechain/sdk-network';
import { BitString, ObjectIdentifier, Sequence, verifySchema } from 'asn1js';
import {
type TypedDataDomain,
TypedDataEncoder,
type TypedDataField
} from 'ethers';
import { recoverPublicKey, toHex } from 'viem';
import { KMSVeChainProvider } from './KMSVeChainProvider';

Expand Down Expand Up @@ -383,23 +381,19 @@ class KMSVeChainSigner extends VeChainAbstractSigner {

/**
* Signs a typed data returning the VeChain signature in hexadecimal format.
* @param {vechain_sdk_core_ethers.TypedDataDomain} domain to hash as typed data.
* @param {Record<string, vechain_sdk_core_ethers.TypedDataField[]>} types to hash as typed data.
* @param {TypedDataDomain} domain to hash as typed data.
* @param {Record<string, TypedDataField[]>} types to hash as typed data.
* @param {Record<string, unknown>} value to hash as typed data.
* @returns {string} The VeChain signature in hexadecimal format.
*/
public async signTypedData(
domain: vechain_sdk_core_ethers.TypedDataDomain,
types: Record<string, vechain_sdk_core_ethers.TypedDataField[]>,
domain: TypedDataDomain,
types: Record<string, TypedDataField[]>,
value: Record<string, unknown>
): Promise<string> {
try {
const payload = Hex.of(
vechain_sdk_core_ethers.TypedDataEncoder.hash(
domain,
types,
value
)
TypedDataEncoder.hash(domain, types, value)
).bytes;

return await this.signPayload(payload);
Expand Down
10 changes: 4 additions & 6 deletions packages/aws-kms-adapter/tests/KMSVeChainSigner.unit.test.ts
Original file line number Diff line number Diff line change
@@ -1,10 +1,11 @@
import { Hex, Txt, type vechain_sdk_core_ethers } from '@vechain/sdk-core';
import { Hex, Txt } from '@vechain/sdk-core';
import { JSONRPCInvalidParams, SignerMethodError } from '@vechain/sdk-errors';
import {
VeChainProvider,
type ThorClient,
type TransactionRequestInput
} from '@vechain/sdk-network';
import { type TypedDataDomain, type TypedDataField } from 'ethers';
import { KMSVeChainProvider, KMSVeChainSigner } from '../src';
import { EIP712_CONTRACT, EIP712_FROM, EIP712_TO } from './fixture';
jest.mock('asn1js', () => ({
Expand Down Expand Up @@ -157,11 +158,8 @@ describe('KMSVeChainSigner', () => {
const signer = new KMSVeChainSigner(provider);
await expect(
signer.signTypedData(
{} as unknown as vechain_sdk_core_ethers.TypedDataDomain,
{} as unknown as Record<
string,
vechain_sdk_core_ethers.TypedDataField[]
>,
{} as unknown as TypedDataDomain,
{} as unknown as Record<string, TypedDataField[]>,
{} as unknown as Record<string, unknown>
)
).rejects.toThrow(SignerMethodError);
Expand Down
5 changes: 0 additions & 5 deletions packages/core/src/core.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,3 @@
import { ethers } from 'ethers';

// Our core library
export * from './certificate';
export * from './hdkey';
Expand All @@ -8,6 +6,3 @@ export * from './secp256k1';
export * from './transaction';
export * from './utils';
export * from './vcdm';

// Other libraries
export { ethers as vechain_sdk_core_ethers };
15 changes: 0 additions & 15 deletions packages/core/tests/modules/export.unit.test.ts

This file was deleted.

6 changes: 3 additions & 3 deletions packages/ethers-adapter/src/adapters/contract-adapter.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import { type vechain_sdk_core_ethers } from '@vechain/sdk-core';
import { type HardhatVeChainProvider } from '@vechain/sdk-network';
import { type Contract } from 'ethers';
import { helpers } from './helpers';

/**
Expand All @@ -10,9 +10,9 @@ import { helpers } from './helpers';
* @returns The adapted contract
*/
const contractAdapter = (
contract: vechain_sdk_core_ethers.Contract,
contract: Contract,
hardhatVeChainProvider: HardhatVeChainProvider
): vechain_sdk_core_ethers.Contract => {
): Contract => {
contract.getAddress = async function getAddress(): Promise<string> {
return await helpers.getContractAddress(
contract.deploymentTransaction()?.hash ?? '',
Expand Down
14 changes: 6 additions & 8 deletions packages/ethers-adapter/src/adapters/factory-adapter.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import type { HardhatVeChainProvider } from '@vechain/sdk-network';
import { vechain_sdk_core_ethers } from '@vechain/sdk-core';
import { UnsupportedOperation } from '@vechain/sdk-errors';
import type { HardhatVeChainProvider } from '@vechain/sdk-network';
import type { BaseContract, ContractFactory, ContractMethodArgs } from 'ethers';

/**
* Factory adapter for the VeChain hardhat plugin
Expand All @@ -11,12 +11,10 @@ import { UnsupportedOperation } from '@vechain/sdk-errors';
* @throws {UnsupportedOperation}
*/
function factoryAdapter<A extends unknown[], I>(
contractFactory: vechain_sdk_core_ethers.ContractFactory<A, I>,
contractFactory: ContractFactory<A, I>,
hardhatVeChainProvider: HardhatVeChainProvider
): vechain_sdk_core_ethers.ContractFactory<A, I> {
contractFactory.deploy = async function (
...args: vechain_sdk_core_ethers.ContractMethodArgs<A>
) {
): ContractFactory<A, I> {
contractFactory.deploy = async function (...args: ContractMethodArgs<A>) {
const tx = await this.getDeployTransaction(...args);

if (
Expand All @@ -41,7 +39,7 @@ function factoryAdapter<A extends unknown[], I>(

// @ts-expect-error this return type is required by the contract factory deploy method
// eslint-disable-next-line @typescript-eslint/no-unsafe-return, sonarjs/new-operator-misuse
return new (vechain_sdk_core_ethers.BaseContract as unknown)(
return new (BaseContract as unknown)(
receipt?.outputs[0].contractAddress ?? '',
this.interface,
this.runner,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,15 +3,15 @@
*
* @group integration/providers/vechain-provider-solo
*/
import { beforeEach, describe, expect, jest, test } from '@jest/globals';
import {
HardhatVeChainProvider,
ProviderInternalBaseWallet,
THOR_SOLO_URL,
ThorClient
} from '@vechain/sdk-network';
import { Contract } from 'ethers';
import { contractAdapter, helpers } from '../../src';
import { beforeEach, describe, expect, jest, test } from '@jest/globals';
import { vechain_sdk_core_ethers } from '@vechain/sdk-core';

/**
*VeChain adapters tests - Solo Network
Expand Down Expand Up @@ -39,14 +39,14 @@ describe('Hardhat contract adapter tests', () => {
});

test('Should create a contract adapter', () => {
const contract = new vechain_sdk_core_ethers.Contract('0x', []);
const contract = new Contract('0x', []);
// Create a contract adapter
const adapter = contractAdapter(contract, provider);
expect(adapter).toBeDefined();
});

test('Should get the address of a contract', () => {
const contract = new vechain_sdk_core_ethers.Contract('0x', []);
const contract = new Contract('0x', []);
helpers.getContractAddress = jest.fn(
async () => await Promise.resolve('0x')
);
Expand Down
26 changes: 14 additions & 12 deletions packages/ethers-adapter/tests/adapters/factory-adapter.solo.test.ts
Original file line number Diff line number Diff line change
@@ -1,15 +1,21 @@
import { beforeEach, describe, expect, jest, test } from '@jest/globals';
import { ERC20_ABI } from '@vechain/sdk-core';
import { UnsupportedOperation } from '@vechain/sdk-errors';
import {
HardhatVeChainProvider,
ProviderInternalBaseWallet,
THOR_SOLO_URL,
ThorClient,
type WaitForTransactionOptions
} from '@vechain/sdk-network';
import { erc20ContractBytecode } from '../fixture';
import {
ContractFactory,
type Signer,
type TransactionResponse,
VoidSigner
} from 'ethers';
import { factoryAdapter } from '../../src';
import { beforeEach, describe, expect, jest, test } from '@jest/globals';
import { ERC20_ABI, vechain_sdk_core_ethers } from '@vechain/sdk-core';
import { UnsupportedOperation } from '@vechain/sdk-errors';
import { erc20ContractBytecode } from '../fixture';

/**
*VeChain adapters tests - Solo Network
Expand Down Expand Up @@ -43,19 +49,18 @@ describe('Hardhat factory adapter tests', () => {
});

test('Should create a factory adapter and deploy', async () => {
const signer: vechain_sdk_core_ethers.Signer =
new vechain_sdk_core_ethers.VoidSigner('0x');
const signer: Signer = new VoidSigner('0x');

signer.sendTransaction = jest.fn(async (_tx) => {
// eslint-disable-next-line @typescript-eslint/no-unsafe-return
return await ({} as unknown as Promise<vechain_sdk_core_ethers.TransactionResponse>);
return await ({} as unknown as Promise<TransactionResponse>);
});

signer.resolveName = jest.fn(async (_name: string) => {
return await Promise.resolve('mock');
});

const contract = new vechain_sdk_core_ethers.ContractFactory(
const contract = new ContractFactory(
ERC20_ABI,
erc20ContractBytecode,
signer
Expand All @@ -68,10 +73,7 @@ describe('Hardhat factory adapter tests', () => {
});

test('Should fail to deploy with a factory adapter', async () => {
const contract = new vechain_sdk_core_ethers.ContractFactory(
ERC20_ABI,
erc20ContractBytecode
);
const contract = new ContractFactory(ERC20_ABI, erc20ContractBytecode);

// Create a contract adapter
const adapter = factoryAdapter(contract, provider);
Expand Down
2 changes: 1 addition & 1 deletion packages/hardhat-plugin/src/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ import { HardhatVeChainProvider } from '@vechain/sdk-network';
import { VeChainSDKLogger } from '@vechain/sdk-logging';

// Import needed to customize ethers functionality
import { vechain_sdk_core_ethers as ethers } from '@vechain/sdk-core';
import { ethers } from 'ethers';

// Import needed to extend the hardhat environment
import './type-extensions';
Expand Down
4 changes: 2 additions & 2 deletions packages/hardhat-plugin/src/type-extensions.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,12 +4,12 @@ import {
} from '@vechain/sdk-network';

// Ethers types
import { type vechain_sdk_core_ethers as ethers } from '@vechain/sdk-core';
import { type ethers } from 'ethers';

// To extend one of Hardhat's types, you need to import the module where it has been defined, and redeclare it.
import { type HardhatEthersHelpers } from '@nomicfoundation/hardhat-ethers/types';
import 'hardhat/types/config';
import 'hardhat/types/runtime';
import { type HardhatEthersHelpers } from '@nomicfoundation/hardhat-ethers/types';

/**
* Hardhat runtime environment extension
Expand Down
Loading

0 comments on commit 2b18d56

Please sign in to comment.