* update abi-gen with new method interfaces * wip: get all packages to build * wip: get all packages to build * Fix two contract wrapper calls * Export necessary types part of the contract wrapper public interfaces * Revive and fix wrapper_unit_tests * Remove duplicate type * Fix lib_exchange_rich_error_decoder tests * Fix remaining test failures in contracts-* packages * Prettier fixes * remove transactionHelper * lint and update changelogs * Fix prettier * Revert changes to reference docs * Add back changelog already published and add revert changelog entry * Add missing CHANGELOG entries * Add missing comma * Update mesh-rpc-client dep * Update Mesh RPC logic in @0x/orderbook to v6.0.1-beta * Align package versions
255 lines
11 KiB
TypeScript
255 lines
11 KiB
TypeScript
import { blockchainTests } from '@0x/contracts-test-utils';
|
|
import { BigNumber } from '@0x/utils';
|
|
|
|
import { artifacts } from './artifacts';
|
|
import { TestProtocolFeesContract, TestProtocolFeesReceiverContract } from './wrappers';
|
|
|
|
// The contents of this test suite does not inform the reader about the assertions made in these
|
|
// tests. For more information and a more accurate view of the tests, check out
|
|
// "contracts/test/TestProtocolFeesReceiver.sol".
|
|
blockchainTests('Protocol Fee Payments', env => {
|
|
let testProtocolFees: TestProtocolFeesContract;
|
|
let testProtocolFeesReceiver: TestProtocolFeesReceiverContract;
|
|
|
|
const DEFAULT_GAS_PRICE = new BigNumber(20000);
|
|
const DEFAULT_PROTOCOL_FEE_MULTIPLIER = new BigNumber(150);
|
|
const DEFAULT_PROTOCOL_FEE = DEFAULT_GAS_PRICE.times(DEFAULT_PROTOCOL_FEE_MULTIPLIER);
|
|
|
|
before(async () => {
|
|
testProtocolFees = await TestProtocolFeesContract.deployFrom0xArtifactAsync(
|
|
artifacts.TestProtocolFees,
|
|
env.provider,
|
|
env.txDefaults,
|
|
{},
|
|
);
|
|
testProtocolFeesReceiver = await TestProtocolFeesReceiverContract.deployFrom0xArtifactAsync(
|
|
artifacts.TestProtocolFeesReceiver,
|
|
env.provider,
|
|
env.txDefaults,
|
|
{},
|
|
);
|
|
});
|
|
|
|
blockchainTests.resets('fillOrder Protocol Fees', () => {
|
|
it('should not pay protocol fee when there is no registered protocol fee collector', async () => {
|
|
await testProtocolFeesReceiver
|
|
.testFillOrderProtocolFees(testProtocolFees.address, DEFAULT_PROTOCOL_FEE_MULTIPLIER, false)
|
|
.awaitTransactionSuccessAsync({
|
|
gasPrice: DEFAULT_GAS_PRICE,
|
|
value: DEFAULT_PROTOCOL_FEE,
|
|
});
|
|
});
|
|
|
|
it('should not forward ETH when too little value is sent', async () => {
|
|
await testProtocolFeesReceiver
|
|
.testFillOrderProtocolFees(testProtocolFees.address, DEFAULT_PROTOCOL_FEE_MULTIPLIER, true)
|
|
.awaitTransactionSuccessAsync({
|
|
gasPrice: DEFAULT_GAS_PRICE,
|
|
value: DEFAULT_PROTOCOL_FEE.minus(10),
|
|
});
|
|
});
|
|
|
|
it('should pay protocol fee in ETH when the correct value is sent', async () => {
|
|
await testProtocolFeesReceiver
|
|
.testFillOrderProtocolFees(testProtocolFees.address, DEFAULT_PROTOCOL_FEE_MULTIPLIER, true)
|
|
.awaitTransactionSuccessAsync({
|
|
gasPrice: DEFAULT_GAS_PRICE,
|
|
value: DEFAULT_PROTOCOL_FEE,
|
|
});
|
|
});
|
|
|
|
it('should pay protocol fee in ETH when extra value is sent', async () => {
|
|
await testProtocolFeesReceiver
|
|
.testFillOrderProtocolFees(testProtocolFees.address, DEFAULT_PROTOCOL_FEE_MULTIPLIER, true)
|
|
.awaitTransactionSuccessAsync({
|
|
gasPrice: DEFAULT_GAS_PRICE,
|
|
value: DEFAULT_PROTOCOL_FEE.plus(10),
|
|
});
|
|
});
|
|
});
|
|
|
|
blockchainTests.resets('matchOrders Protocol Fees', () => {
|
|
it('should not pay protocol fee when there is no registered protocol fee collector', async () => {
|
|
await testProtocolFeesReceiver
|
|
.testMatchOrdersProtocolFees(testProtocolFees.address, DEFAULT_PROTOCOL_FEE_MULTIPLIER, false)
|
|
.awaitTransactionSuccessAsync({
|
|
gasPrice: DEFAULT_GAS_PRICE,
|
|
value: DEFAULT_PROTOCOL_FEE,
|
|
});
|
|
});
|
|
|
|
it('should not forward ETH twice when too little value is sent', async () => {
|
|
await testProtocolFeesReceiver
|
|
.testMatchOrdersProtocolFees(testProtocolFees.address, DEFAULT_PROTOCOL_FEE_MULTIPLIER, true)
|
|
.awaitTransactionSuccessAsync({
|
|
gasPrice: DEFAULT_GAS_PRICE,
|
|
value: DEFAULT_PROTOCOL_FEE.minus(10),
|
|
});
|
|
});
|
|
|
|
it('should pay protocol fee in ETH and then not forward ETH when exactly one protocol fee is sent', async () => {
|
|
await testProtocolFeesReceiver
|
|
.testMatchOrdersProtocolFees(testProtocolFees.address, DEFAULT_PROTOCOL_FEE_MULTIPLIER, true)
|
|
.awaitTransactionSuccessAsync({
|
|
gasPrice: DEFAULT_GAS_PRICE,
|
|
value: DEFAULT_PROTOCOL_FEE,
|
|
});
|
|
});
|
|
|
|
it('should pay protocol fee in ETH and then not forward ETH when a bit more than one protocol fee is sent', async () => {
|
|
await testProtocolFeesReceiver
|
|
.testMatchOrdersProtocolFees(testProtocolFees.address, DEFAULT_PROTOCOL_FEE_MULTIPLIER, true)
|
|
.awaitTransactionSuccessAsync({
|
|
gasPrice: DEFAULT_GAS_PRICE,
|
|
value: DEFAULT_PROTOCOL_FEE.plus(10),
|
|
});
|
|
});
|
|
|
|
it('should pay protocol fee in ETH when exactly double the protocol fee is sent', async () => {
|
|
await testProtocolFeesReceiver
|
|
.testMatchOrdersProtocolFees(testProtocolFees.address, DEFAULT_PROTOCOL_FEE_MULTIPLIER, true)
|
|
.awaitTransactionSuccessAsync({
|
|
gasPrice: DEFAULT_GAS_PRICE,
|
|
value: DEFAULT_PROTOCOL_FEE.times(2),
|
|
});
|
|
});
|
|
|
|
it('should pay protocol fee in ETH when more than double the protocol fee is sent', async () => {
|
|
await testProtocolFeesReceiver
|
|
.testMatchOrdersProtocolFees(testProtocolFees.address, DEFAULT_PROTOCOL_FEE_MULTIPLIER, true)
|
|
.awaitTransactionSuccessAsync({
|
|
gasPrice: DEFAULT_GAS_PRICE,
|
|
value: DEFAULT_PROTOCOL_FEE.times(2).plus(10),
|
|
});
|
|
});
|
|
});
|
|
|
|
blockchainTests.resets('batchFillOrder ProtocolFees', () => {
|
|
it('should not pay protocol fees when there is not a protocolFeeCollector registered', async () => {
|
|
await testProtocolFeesReceiver
|
|
.testBatchFillOrdersProtocolFees(
|
|
testProtocolFees.address,
|
|
DEFAULT_PROTOCOL_FEE_MULTIPLIER,
|
|
new BigNumber(2), // If successful, create a `batchFillOrders` with 2 orders.
|
|
false,
|
|
)
|
|
.awaitTransactionSuccessAsync({
|
|
gasPrice: DEFAULT_GAS_PRICE,
|
|
value: DEFAULT_PROTOCOL_FEE,
|
|
});
|
|
});
|
|
|
|
it('should not forward ETH when less than one protocol fee is sent and only one order is in the batch', async () => {
|
|
await testProtocolFeesReceiver
|
|
.testBatchFillOrdersProtocolFees(
|
|
testProtocolFees.address,
|
|
DEFAULT_PROTOCOL_FEE_MULTIPLIER,
|
|
new BigNumber(1),
|
|
true,
|
|
)
|
|
.awaitTransactionSuccessAsync({
|
|
gasPrice: DEFAULT_GAS_PRICE,
|
|
value: DEFAULT_PROTOCOL_FEE.minus(10),
|
|
});
|
|
});
|
|
|
|
it('should pay one protocol fee in ETH when the exact protocol fee is sent and only one order is in the batch', async () => {
|
|
await testProtocolFeesReceiver
|
|
.testBatchFillOrdersProtocolFees(
|
|
testProtocolFees.address,
|
|
DEFAULT_PROTOCOL_FEE_MULTIPLIER,
|
|
new BigNumber(1),
|
|
true,
|
|
)
|
|
.awaitTransactionSuccessAsync({
|
|
gasPrice: DEFAULT_GAS_PRICE,
|
|
value: DEFAULT_PROTOCOL_FEE,
|
|
});
|
|
});
|
|
|
|
it('should pay one protocol fee in ETH when more than the exact protocol fee is sent and only one order is in the batch', async () => {
|
|
await testProtocolFeesReceiver
|
|
.testBatchFillOrdersProtocolFees(
|
|
testProtocolFees.address,
|
|
DEFAULT_PROTOCOL_FEE_MULTIPLIER,
|
|
new BigNumber(1),
|
|
true,
|
|
)
|
|
.awaitTransactionSuccessAsync({
|
|
gasPrice: DEFAULT_GAS_PRICE,
|
|
value: DEFAULT_PROTOCOL_FEE.plus(10),
|
|
});
|
|
});
|
|
|
|
it('should not forward ETH twice when an insuffiecent amount of ETH for one protocol fee is sent', async () => {
|
|
await testProtocolFeesReceiver
|
|
.testBatchFillOrdersProtocolFees(
|
|
testProtocolFees.address,
|
|
DEFAULT_PROTOCOL_FEE_MULTIPLIER,
|
|
new BigNumber(2),
|
|
true,
|
|
)
|
|
.awaitTransactionSuccessAsync({
|
|
gasPrice: DEFAULT_GAS_PRICE,
|
|
value: DEFAULT_PROTOCOL_FEE.minus(10),
|
|
});
|
|
});
|
|
|
|
it('should pay a protocol in ETH and not forward ETH for the second when exactly one protocol fee in ETH is sent', async () => {
|
|
await testProtocolFeesReceiver
|
|
.testBatchFillOrdersProtocolFees(
|
|
testProtocolFees.address,
|
|
DEFAULT_PROTOCOL_FEE_MULTIPLIER,
|
|
new BigNumber(2),
|
|
true,
|
|
)
|
|
.awaitTransactionSuccessAsync({
|
|
gasPrice: DEFAULT_GAS_PRICE,
|
|
value: DEFAULT_PROTOCOL_FEE,
|
|
});
|
|
});
|
|
|
|
it('should pay both protocol fees in ETH when exactly two protocol fees in ETH is sent', async () => {
|
|
await testProtocolFeesReceiver
|
|
.testBatchFillOrdersProtocolFees(
|
|
testProtocolFees.address,
|
|
DEFAULT_PROTOCOL_FEE_MULTIPLIER,
|
|
new BigNumber(2),
|
|
true,
|
|
)
|
|
.awaitTransactionSuccessAsync({
|
|
gasPrice: DEFAULT_GAS_PRICE,
|
|
value: DEFAULT_PROTOCOL_FEE.times(2),
|
|
});
|
|
});
|
|
|
|
it('should pay two protocol fees in ETH and then not forward ETH for a third when exactly two protocol fees in ETH is sent', async () => {
|
|
await testProtocolFeesReceiver
|
|
.testBatchFillOrdersProtocolFees(
|
|
testProtocolFees.address,
|
|
DEFAULT_PROTOCOL_FEE_MULTIPLIER,
|
|
new BigNumber(3),
|
|
true,
|
|
)
|
|
.awaitTransactionSuccessAsync({
|
|
gasPrice: DEFAULT_GAS_PRICE,
|
|
value: DEFAULT_PROTOCOL_FEE.times(2),
|
|
});
|
|
});
|
|
|
|
it('should pay three protocol fees in ETH when more than three protocol fees in ETH is sent', async () => {
|
|
await testProtocolFeesReceiver
|
|
.testBatchFillOrdersProtocolFees(
|
|
testProtocolFees.address,
|
|
DEFAULT_PROTOCOL_FEE_MULTIPLIER,
|
|
new BigNumber(3),
|
|
true,
|
|
)
|
|
.awaitTransactionSuccessAsync({
|
|
gasPrice: DEFAULT_GAS_PRICE,
|
|
value: DEFAULT_PROTOCOL_FEE.times(3).plus(10),
|
|
});
|
|
});
|
|
});
|
|
});
|