Skip to content

Commit

Permalink
Merge pull request #49 from psychiller/feat/signature-checker-tests
Browse files Browse the repository at this point in the history
Feat: added tests for signature checker functions
  • Loading branch information
0xandee authored Jan 23, 2024
2 parents 11384d6 + ff5467f commit dc93f5a
Show file tree
Hide file tree
Showing 4 changed files with 113 additions and 14 deletions.
4 changes: 3 additions & 1 deletion flex_marketplace/src/marketplace/signature_checker2.cairo
Original file line number Diff line number Diff line change
Expand Up @@ -65,8 +65,10 @@ mod SignatureChecker2 {
order_signature: Array<felt252>
) {
let hash = self.compute_maker_order_hash(hash_domain, order);
ISRC6CamelOnlyDispatcher { contract_address: order.signer }
let result = ISRC6CamelOnlyDispatcher { contract_address: order.signer }
.isValidSignature(hash, order_signature);

assert!(result == starknet::VALIDATED, "SignatureChecker: Invalid signature");
}
}
}
32 changes: 28 additions & 4 deletions flex_marketplace/tests/marketplace_test.cairo
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,13 @@ use tests::utils::{
setup, initialize_test, deploy_mock_nft, ACCOUNT1, ACCOUNT2, OWNER, ZERO_ADDRESS, RELAYER,
deploy_mock_execution_strategy, deploy_mock_account, deploy_mock_erc20, E18
};
use snforge_std::signature::stark_curve::{StarkCurveKeyPairImpl, StarkCurveSignerImpl};
use flex::marketplace::execution_manager::{
IExecutionManagerDispatcher, IExecutionManagerDispatcherTrait
};
use flex::marketplace::signature_checker2::{
ISignatureChecker2Dispatcher, ISignatureChecker2DispatcherTrait
};
use flex::marketplace::marketplace::{IMarketPlaceDispatcher, IMarketPlaceDispatcherTrait};
use flex::marketplace::utils::order_types::{MakerOrder, TakerOrder};
use flex::DefaultContractAddress;
Expand Down Expand Up @@ -58,7 +62,6 @@ fn test_carcel_maker_order_fails_wrong_min_nonce() {
fn test_match_ask_with_taker_bid_success() {
let dsp = setup();
let mocks = initialize_test(dsp);
let (r, s) = mocks.maker_signature;

let mut maker_order: MakerOrder = Default::default();
maker_order.is_order_ask = true;
Expand All @@ -68,6 +71,12 @@ fn test_match_ask_with_taker_bid_success() {
maker_order.strategy = mocks.strategy;
maker_order.currency = mocks.erc20;

let maker_order_hash = dsp
.signature_checker
.compute_maker_order_hash(dsp.marketplace.get_hash_domain(), maker_order);

let (r, s): (felt252, felt252) = mocks.key_pair.sign(maker_order_hash);

let mut taker_bid: TakerOrder = Default::default();
taker_bid.price = 1000000;
taker_bid.taker = ACCOUNT1();
Expand Down Expand Up @@ -122,7 +131,6 @@ fn test_match_ask_with_taker_bid_fails_taker_bid_is_ask_order() {
fn test_match_bid_with_taker_ask_success() {
let dsp = setup();
let mocks = initialize_test(dsp);
let (r, s) = mocks.maker_signature;

let mut maker_bid: MakerOrder = Default::default();
maker_bid.collection = mocks.erc721;
Expand All @@ -131,6 +139,12 @@ fn test_match_bid_with_taker_ask_success() {
maker_bid.strategy = mocks.strategy;
maker_bid.currency = mocks.erc20;

let maker_order_hash = dsp
.signature_checker
.compute_maker_order_hash(dsp.marketplace.get_hash_domain(), maker_bid);

let (r, s): (felt252, felt252) = mocks.key_pair.sign(maker_order_hash);

let mut taker_ask: TakerOrder = Default::default();
taker_ask.is_order_ask = true;
taker_ask.price = 1000000;
Expand Down Expand Up @@ -188,8 +202,6 @@ fn test_match_bid_with_taker_ask_fails_taker_ask_is_not_an_ask_order() {
fn test_execute_auction_sale_success() {
let dsp = setup();
let mocks = initialize_test(dsp);
let (r1, s1) = mocks.maker_signature;
let (r2, s2) = mocks.taker_signature;

let mut maker_ask: MakerOrder = Default::default();
maker_ask.is_order_ask = true;
Expand All @@ -199,13 +211,25 @@ fn test_execute_auction_sale_success() {
maker_ask.collection = mocks.erc721;
maker_ask.currency = mocks.erc20;

let maker_ask_hash = dsp
.signature_checker
.compute_maker_order_hash(dsp.marketplace.get_hash_domain(), maker_ask);

let (r1, s1): (felt252, felt252) = mocks.key_pair.sign(maker_ask_hash);

let mut maker_bid: MakerOrder = Default::default();
maker_bid.signer = mocks.account;
maker_bid.strategy = mocks.strategy;
maker_bid.price = 1_000_000;
maker_bid.amount = 1;
maker_bid.currency = mocks.erc20;

let maker_bid_hash = dsp
.signature_checker
.compute_maker_order_hash(dsp.marketplace.get_hash_domain(), maker_bid);

let (r2, s2): (felt252, felt252) = mocks.key_pair.sign(maker_bid_hash);

start_prank(CheatTarget::One(dsp.marketplace.contract_address), RELAYER());
dsp.marketplace.execute_auction_sale(maker_ask, array![r1, s1], maker_bid, array![r2, s2]);
}
Expand Down
81 changes: 76 additions & 5 deletions flex_marketplace/tests/signature_checker2_test.cairo
Original file line number Diff line number Diff line change
@@ -1,15 +1,86 @@
use tests::utils::{setup, initialize_test};
use poseidon::poseidon_hash_span;

use snforge_std::signature::stark_curve::{StarkCurveKeyPairImpl, StarkCurveSignerImpl};
use flex::marketplace::signature_checker2::{
ISignatureChecker2Dispatcher, ISignatureChecker2DispatcherTrait, STARKNET_MESSAGE,
HASH_MESSAGE_SELECTOR
};
use flex::marketplace::utils::order_types::MakerOrder;

#[test]
fn test_compute_maker_order_hash_success() {
fn test_compute_maker_order_hash_success(hash_domain: felt252) {
let dsp = setup();
initialize_test(dsp);
// TODO

let maker_order: MakerOrder = Default::default();

let hash_message_params = array![
HASH_MESSAGE_SELECTOR,
maker_order.is_order_ask.into(),
maker_order.signer.into(),
maker_order.collection.into(),
maker_order.price.into(),
maker_order.token_id.try_into().unwrap(),
maker_order.amount.into(),
maker_order.strategy.into(),
maker_order.currency.into(),
maker_order.nonce.into(),
maker_order.start_time.into(),
maker_order.end_time.into(),
maker_order.min_percentage_to_ask.into(),
maker_order.params,
14
];

let hash_message = poseidon_hash_span(hash_message_params.span());

let hash_params = array![
STARKNET_MESSAGE, hash_domain, maker_order.signer.into(), hash_message, 4
];

let order_hash = poseidon_hash_span(hash_params.span());

assert(
order_hash == dsp.signature_checker.compute_maker_order_hash(hash_domain, maker_order),
'Failed hash computation'
);
}

#[test]
fn test_verify_maker_order_signature_success() {
fn test_verify_maker_order_signature_success(hash_domain: felt252) {
let dsp = setup();
initialize_test(dsp);
// TODO
let mocks = initialize_test(dsp);

let mut maker_order: MakerOrder = Default::default();

maker_order.signer = mocks.account;

let hash_message_params = array![
HASH_MESSAGE_SELECTOR,
maker_order.is_order_ask.into(),
maker_order.signer.into(),
maker_order.collection.into(),
maker_order.price.into(),
maker_order.token_id.try_into().unwrap(),
maker_order.amount.into(),
maker_order.strategy.into(),
maker_order.currency.into(),
maker_order.nonce.into(),
maker_order.start_time.into(),
maker_order.end_time.into(),
maker_order.min_percentage_to_ask.into(),
maker_order.params,
14
];

let hash_message = poseidon_hash_span(hash_message_params.span());

let hash_params = array![
STARKNET_MESSAGE, hash_domain, maker_order.signer.into(), hash_message, 4
];

let order_hash = poseidon_hash_span(hash_params.span());
let (r, s): (felt252, felt252) = mocks.key_pair.sign(order_hash);
dsp.signature_checker.verify_maker_order_signature(hash_domain, maker_order, array![r, s]);
}
10 changes: 6 additions & 4 deletions flex_marketplace/tests/utils.cairo
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ use starknet::{
use snforge_std::{
PrintTrait, declare, ContractClassTrait, start_warp, start_prank, stop_prank, CheatTarget
};
use snforge_std::signature::KeyPairTrait;
use snforge_std::signature::{KeyPairTrait, KeyPair};
use snforge_std::signature::stark_curve::{
StarkCurveKeyPairImpl, StarkCurveSignerImpl, StarkCurveVerifierImpl
};
Expand Down Expand Up @@ -137,15 +137,16 @@ fn setup() -> Dispatchers {
}
}

#[derive(Copy, Drop, Serde)]
#[derive(Copy, Drop)]
struct Mocks {
account: ContractAddress,
erc20: ContractAddress,
erc721: ContractAddress,
erc1155: ContractAddress,
strategy: ContractAddress,
maker_signature: (felt252, felt252),
taker_signature: (felt252, felt252)
taker_signature: (felt252, felt252),
key_pair: KeyPair<felt252, felt252>,
}

fn initialize_test(dsp: Dispatchers) -> Mocks {
Expand Down Expand Up @@ -234,7 +235,8 @@ fn initialize_test(dsp: Dispatchers) -> Mocks {
erc1155,
strategy,
maker_signature: (r1, s1),
taker_signature: (r2, s2)
taker_signature: (r2, s2),
key_pair
}
}

Expand Down

0 comments on commit dc93f5a

Please sign in to comment.