mirror of
https://github.com/orionprotocol/sdk.git
synced 2026-03-15 14:42:38 +03:00
mock signOrder hashing
This commit is contained in:
@@ -1,5 +1,5 @@
|
||||
import { BigNumber } from 'bignumber.js';
|
||||
import { ethers } from 'ethers';
|
||||
import { ethers, keccak256 } from 'ethers';
|
||||
import { INTERNAL_PROTOCOL_PRECISION } from '../constants';
|
||||
import ORDER_TYPES from '../constants/orderTypes.js';
|
||||
import type { CrossOrder, Order, SignedOrder, SupportedChainId } from '../types.js';
|
||||
@@ -79,63 +79,74 @@ export const signOrder = async ({
|
||||
// lockOrderExpiration: expiration
|
||||
};
|
||||
|
||||
const limitOrder = {
|
||||
senderAddress,
|
||||
matcherAddress,
|
||||
baseAsset: baseAssetAddress,
|
||||
quoteAsset: quoteAssetAddress,
|
||||
matcherFeeAsset: serviceFeeAssetAddress,
|
||||
amount: normalizeNumber(
|
||||
amount,
|
||||
INTERNAL_PROTOCOL_PRECISION,
|
||||
BigNumber.ROUND_FLOOR,
|
||||
),
|
||||
price: normalizeNumber(
|
||||
price,
|
||||
INTERNAL_PROTOCOL_PRECISION,
|
||||
BigNumber.ROUND_FLOOR,
|
||||
),
|
||||
matcherFee: normalizeNumber(
|
||||
matcherFee,
|
||||
INTERNAL_PROTOCOL_PRECISION,
|
||||
BigNumber.ROUND_CEIL, // ROUND_CEIL because we don't want get "not enough fee" error
|
||||
),
|
||||
nonce: BigInt(nonce),
|
||||
expiration: BigInt(expiration),
|
||||
buySide: side === 'BUY' ? 1 : 0,
|
||||
};
|
||||
// const limitOrder = {
|
||||
// senderAddress,
|
||||
// matcherAddress,
|
||||
// baseAsset: baseAssetAddress,
|
||||
// quoteAsset: quoteAssetAddress,
|
||||
// matcherFeeAsset: serviceFeeAssetAddress,
|
||||
// amount: normalizeNumber(
|
||||
// amount,
|
||||
// INTERNAL_PROTOCOL_PRECISION,
|
||||
// BigNumber.ROUND_FLOOR,
|
||||
// ),
|
||||
// price: normalizeNumber(
|
||||
// price,
|
||||
// INTERNAL_PROTOCOL_PRECISION,
|
||||
// BigNumber.ROUND_FLOOR,
|
||||
// ),
|
||||
// matcherFee: normalizeNumber(
|
||||
// matcherFee,
|
||||
// INTERNAL_PROTOCOL_PRECISION,
|
||||
// BigNumber.ROUND_CEIL, // ROUND_CEIL because we don't want get "not enough fee" error
|
||||
// ),
|
||||
// nonce: BigInt(nonce),
|
||||
// expiration: BigInt(expiration),
|
||||
// buySide: side === 'BUY' ? 1 : 0,
|
||||
// };
|
||||
const mockLimit = {
|
||||
senderAddress: '0xb07f292216d845dce4887777ec44a18566ca0e95',
|
||||
matcherAddress: '0xfbcad2c3a90fbd94c335fbdf8e22573456da7f68',
|
||||
baseAsset: '0xcb2951e90d8dcf16e1fa84ac0c83f48906d6a744',
|
||||
quoteAsset: '0xf223eca06261145b3287a0fefd8cfad371c7eb34',
|
||||
matcherFeeAsset: '0xf223eca06261145b3287a0fefd8cfad371c7eb34',
|
||||
amount: 2000000000,
|
||||
price: 66490000,
|
||||
matcherFee: 49730783,
|
||||
nonce: 1716449740461,
|
||||
expiration: 1718955340461,
|
||||
buySide: 0,
|
||||
}
|
||||
|
||||
// const limitOrderHash = ethers.keccak256(ethers.toUtf8Bytes(JSON.stringify(limitOrder)));
|
||||
// Generate the orderParamsHash
|
||||
const orderParamsHash = ethers.keccak256(ethers.AbiCoder.defaultAbiCoder().encode(
|
||||
const orderParamsHash = keccak256((ethers.AbiCoder.defaultAbiCoder().encode(
|
||||
['address', 'address', 'address', 'address', 'address', 'uint64', 'uint64', 'uint64', 'uint64', 'uint64', 'uint8'],
|
||||
[
|
||||
limitOrder.senderAddress,
|
||||
limitOrder.matcherAddress,
|
||||
limitOrder.baseAsset,
|
||||
limitOrder.quoteAsset,
|
||||
limitOrder.matcherFeeAsset,
|
||||
limitOrder.amount,
|
||||
limitOrder.price,
|
||||
limitOrder.matcherFee,
|
||||
limitOrder.nonce,
|
||||
limitOrder.expiration,
|
||||
limitOrder.buySide
|
||||
mockLimit.senderAddress,
|
||||
mockLimit.matcherAddress,
|
||||
mockLimit.baseAsset,
|
||||
mockLimit.quoteAsset,
|
||||
mockLimit.matcherFeeAsset,
|
||||
mockLimit.amount,
|
||||
mockLimit.price,
|
||||
mockLimit.matcherFee,
|
||||
mockLimit.nonce,
|
||||
mockLimit.expiration,
|
||||
mockLimit.buySide
|
||||
]
|
||||
));
|
||||
)));
|
||||
|
||||
const secret = generateSecret();
|
||||
const secretHash = ethers.keccak256(secret);
|
||||
|
||||
console.log(limitOrder, chainId, secretHash, expiration);
|
||||
|
||||
// Type hash from Solidity contract
|
||||
const CROSS_CHAIN_ORDER_TYPEHASH = ethers.keccak256(ethers.toUtf8Bytes('Order(address senderAddress,address matcherAddress,address baseAsset,address quoteAsset,address matcherFeeAsset,uint64 amount,uint64 price,uint64 matcherFee,uint64 nonce,uint64 expiration,uint8 buySide,uint24 chainId,bytes32 secretHash,uint64 lockOrderExpiration)'))
|
||||
const CROSS_CHAIN_ORDER_TYPEHASH = '0xcb145a2347f48eab4e3341a245f53da2e686e47ef421c89a6b40dde27a063c3f'
|
||||
|
||||
// Generate the full crossChainOrder hash
|
||||
const crossChainOrderHash = ethers.keccak256(ethers.AbiCoder.defaultAbiCoder().encode(
|
||||
['bytes32', 'bytes32', 'uint24', 'bytes32', 'uint64'],
|
||||
[CROSS_CHAIN_ORDER_TYPEHASH, orderParamsHash, Number(chainId), secretHash, BigInt(expiration)]
|
||||
[CROSS_CHAIN_ORDER_TYPEHASH, orderParamsHash, 97, '0x74a00e5cceb68d791486ddb9ea83bb8245eca22f67cb0ea81342f6eff8bf6e51', 1718955340461]
|
||||
));
|
||||
|
||||
const signature = await signer.signTypedData(
|
||||
@@ -144,6 +155,29 @@ export const signOrder = async ({
|
||||
order,
|
||||
);
|
||||
|
||||
const EIP712_DOMAIN_TYPEHASH = '0xa604fff5a27d5951f334ccda7abff3286a8af29caeeb196a6f2b40a1dce7612b';
|
||||
// const EIP712_DOMAIN_TYPEHASH1 = ethers.keccak256(ethers.toUtf8Bytes('EIP712Domain(string name,string version,uint256 chainId,bytes32 salt)'));
|
||||
|
||||
const domainData = getDomainData(chainId);
|
||||
// Generate the full crossChainOrder hash
|
||||
const DOMAIN_SEPARATOR = ethers.keccak256(ethers.AbiCoder.defaultAbiCoder().encode(
|
||||
['bytes32', 'bytes32', 'bytes32', 'uint256', 'bytes32'],
|
||||
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
||||
// @ts-expect-error
|
||||
// eslint-disable-next-line @typescript-eslint/consistent-type-assertions
|
||||
[EIP712_DOMAIN_TYPEHASH, ethers.keccak256(ethers.toUtf8Bytes(domainData?.name as string)), ethers.keccak256(ethers.toUtf8Bytes(domainData?.version as string)), Number(domainData.chainId), domainData.salt]
|
||||
));
|
||||
|
||||
// const digest = ethers.keccak256(ethers.AbiCoder.defaultAbiCoder().encode(
|
||||
// ['bytes', 'bytes32', 'bytes32'], ['\x19\x01', DOMAIN_SEPARATOR, crossChainOrderHash]
|
||||
// ));
|
||||
|
||||
const digest = ethers.solidityPackedKeccak256(
|
||||
['bytes', 'bytes32', 'bytes32'], ['0x1901', DOMAIN_SEPARATOR, crossChainOrderHash]
|
||||
);
|
||||
|
||||
console.log('digest', digest)
|
||||
|
||||
// https://github.com/poap-xyz/poap-fun/pull/62#issue-928290265
|
||||
// "Signature's v was always send as 27 or 28, but from Ledger was 0 or 1"
|
||||
const fixedSignature = ethers.Signature.from(signature).serialized;
|
||||
@@ -154,7 +188,7 @@ export const signOrder = async ({
|
||||
...order,
|
||||
id: hashOrder(order),
|
||||
signature: fixedSignature,
|
||||
...(isCrossChain ? { secret, secretHash: crossChainOrderHash, targetChainId } : {})
|
||||
...(isCrossChain ? { secret: crossChainOrderHash, secretHash, targetChainId } : {})
|
||||
};
|
||||
return signedOrder;
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user