import { expect } from 'chai'; import { Wallet } from 'ethers'; import { getTypedDataDomain, signWithdrawTypedData, signSecondMarketOrderTypedData, signAuctionBorrowTypedData, signAuctionLendTypedData, signCancelOrderTypedData, signRedeemTypedData, signSecondLimitOrderTypedData, signAuthenticationTypedData, verifyTypedDataDispatcher, } from '../src/'; import { signTypedDataTestCaseData } from './data/signTypedData.testcase'; describe(`signTypedData test`, function () { const { chainId, verifyingContract } = signTypedDataTestCaseData['expectedDomain']; const ethereumSigner = new Wallet(signTypedDataTestCaseData['signerPrivKey']); it('domain data object is correct', function () { const domain = getTypedDataDomain(chainId, verifyingContract); expect(domain).deep.equal(signTypedDataTestCaseData['expectedDomain']); }); it('signAuthenticationTypedData', async function () { const { expectedSignature } = signTypedDataTestCaseData['signAuthenticationTypedData']; const signature = await signAuthenticationTypedData(chainId, verifyingContract, ethereumSigner); expectSignatureAreSame(signature, expectedSignature); }); it('signWithdrawTypedData', async function () { const { input, expectedSignature } = signTypedDataTestCaseData['signWithdrawTypedData']; const signature = await signWithdrawTypedData(chainId, verifyingContract, ethereumSigner, input); expectSignatureAreSame(signature, expectedSignature); const isValid = verifyTypedDataDispatcher(chainId, verifyingContract, ethereumSigner.address, input, signature); expect(isValid).to.be.true; }); it('signAuctionLendTypedData', async function () { const { input, expectedSignature } = signTypedDataTestCaseData['signAuctionLendTypedData']; const signature = await signAuctionLendTypedData(chainId, verifyingContract, ethereumSigner, input); expectSignatureAreSame(signature, expectedSignature); const isValid = verifyTypedDataDispatcher(chainId, verifyingContract, ethereumSigner.address, input, signature); expect(isValid).to.be.true; }); it('signAuctionBorrowTypedData', async function () { const { input, expectedSignature } = signTypedDataTestCaseData['signAuctionBorrowTypedData']; const signature = await signAuctionBorrowTypedData(chainId, verifyingContract, ethereumSigner, input); expectSignatureAreSame(signature, expectedSignature); const isValid = verifyTypedDataDispatcher(chainId, verifyingContract, ethereumSigner.address, input, signature); expect(isValid).to.be.true; }); it('signCancelOrderTypedData', async function () { const { input, expectedSignature } = signTypedDataTestCaseData['signCancelOrderTypedData']; const signature = await signCancelOrderTypedData(chainId, verifyingContract, ethereumSigner, input); expectSignatureAreSame(signature, expectedSignature); const isValid = verifyTypedDataDispatcher(chainId, verifyingContract, ethereumSigner.address, input, signature); expect(isValid).to.be.true; }); it('signSecondLimitOrderTypedData', async function () { const { input, expectedSignature } = signTypedDataTestCaseData['signSecondLimitOrderTypedData']; const signature = await signSecondLimitOrderTypedData(chainId, verifyingContract, ethereumSigner, input); expectSignatureAreSame(signature, expectedSignature); const isValid = verifyTypedDataDispatcher(chainId, verifyingContract, ethereumSigner.address, input, signature); expect(isValid).to.be.true; }); it('signSecondMarketOrderTypedData', async function () { const { input, expectedSignature } = signTypedDataTestCaseData['signSecondMarketOrderTypedData']; const signature = await signSecondMarketOrderTypedData(chainId, verifyingContract, ethereumSigner, input); expectSignatureAreSame(signature, expectedSignature); const isValid = verifyTypedDataDispatcher(chainId, verifyingContract, ethereumSigner.address, input, signature); expect(isValid).to.be.true; }); it('signRedeemTypedData', async function () { const { input, expectedSignature } = signTypedDataTestCaseData['signRedeemTypedData']; const signature = await signRedeemTypedData(chainId, verifyingContract, ethereumSigner, input); expectSignatureAreSame(signature, expectedSignature); const isValid = verifyTypedDataDispatcher(chainId, verifyingContract, ethereumSigner.address, input, signature); expect(isValid).to.be.true; }); }); function expectSignatureAreSame(inputTypeDataValue: string, expectedSignature: string) { expect(inputTypeDataValue.toLowerCase()).equal(expectedSignature.toLowerCase()); }