diff --git a/index.ts b/index.ts index e80f765..978473e 100644 --- a/index.ts +++ b/index.ts @@ -3,6 +3,7 @@ export * from "./src/context"; export * from "./src/ensure"; export * from "./src/exchange_deserializer"; export * from "./src/expectThrow"; +export * from "./src/logs"; export * from "./src/mining"; export * from "./src/multihash"; export * from "./src/order"; diff --git a/package-lock.json b/package-lock.json index a5c2bad..10d0368 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "protocol2-js", - "version": "0.1.17", + "version": "0.2.0", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/package.json b/package.json index 92db6a4..73e57d6 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "protocol2-js", - "version": "0.1.24", + "version": "0.1.25", "description": "loopring protocol simulator core lib", "main": "index.ts", "repository": { diff --git a/src/bitstream.ts b/src/bitstream.ts index b7a34b0..467df0f 100644 --- a/src/bitstream.ts +++ b/src/bitstream.ts @@ -59,7 +59,7 @@ export class Bitstream { public addRawBytes(bs: string, forceAppend = true) { const bsHex = web3.toHex(bs); - // console.log("bsHex:", bsHex); + // logDebug("bsHex:", bsHex); return this.insert(bsHex.slice(2), forceAppend); } @@ -117,7 +117,7 @@ export class Bitstream { start = this.data.indexOf(x, start); if (start !== -1) { if ((start % 2) === 0) { - // console.log("++ Reused " + x + " at location " + start / 2); + // logDebug("++ Reused " + x + " at location " + start / 2); return start / 2; } else { start++; diff --git a/src/ensure.ts b/src/ensure.ts index 7dd6df7..0477953 100644 --- a/src/ensure.ts +++ b/src/ensure.ts @@ -1,7 +1,8 @@ +import { logDebug } from "./logs"; export function ensure(valid: boolean, description: string) { if (!valid) { - console.log(description); + logDebug(description); } return valid; } diff --git a/src/logs.ts b/src/logs.ts new file mode 100644 index 0000000..5452b6e --- /dev/null +++ b/src/logs.ts @@ -0,0 +1,12 @@ + +export function logInfo(...args: any[]) { + if (process.argv.indexOf("-i") > -1) { + console.log(...args); + } +} + +export function logDebug(...args: any[]) { + if (process.argv.indexOf("-x") > -1) { + console.log(...args); + } +} diff --git a/src/main.ts b/src/main.ts index 921ee5d..809aa52 100644 --- a/src/main.ts +++ b/src/main.ts @@ -1,4 +1,5 @@ import fs = require("fs"); +import { logDebug } from "./logs"; import { ProtocolSimulator } from "./protocol_simulator"; import { RingsInfo } from "./types"; @@ -20,7 +21,7 @@ function parseArgs(): [boolean, string] { } } else if (args[0] === "-b") { const binData = args[1]; - console.log(binData); + logDebug(binData); } else { if (args[0].startsWith("-")) { throw new Error("error: invalid argument:" + args[0]); @@ -38,17 +39,17 @@ async function main() { const protocolSimulator = new ProtocolSimulator(undefined); if (isBinData) { - console.log("receive binary data, deserializing..."); + logDebug("receive binary data, deserializing..."); ringsInfo = protocolSimulator.deserialize(data, ""); - console.log("deserialize result:", ringsInfo); + logDebug("deserialize result:", ringsInfo); } else { ringsInfo = JSON.parse(data); - console.log("receive ringsInfo data:", ringsInfo); + logDebug("receive ringsInfo data:", ringsInfo); } - console.log("run simulator and report:"); + logDebug("run simulator and report:"); const report = await protocolSimulator.simulateAndReport(ringsInfo); - console.log(report); + logDebug(report); } main(); diff --git a/src/multihash.ts b/src/multihash.ts index 0289ca3..13b2120 100644 --- a/src/multihash.ts +++ b/src/multihash.ts @@ -5,6 +5,7 @@ import ABI = require("ethereumjs-abi"); import ethUtil = require("ethereumjs-util"); import Web3 = require("web3"); import { Bitstream } from "./bitstream"; +import { logDebug } from "./logs"; import { OrderInfo, RingsInfo, SignAlgorithm } from "./types"; export class MultiHashUtil { @@ -19,7 +20,7 @@ export class MultiHashUtil { this.web3Instance = new Web3(new Web3.providers.HttpProvider("http://localhost:8545")); } } catch (err) { - console.log("get web3 instance in Order class failed. err:", err); + logDebug("get web3 instance in Order class failed. err:", err); } } @@ -103,7 +104,7 @@ export class MultiHashUtil { // method: "eth_signTypedData", // params: [msgParams, order.owner], // from: order.owner, - // }, (err?: Error, result?: Web3.JSONRPCResponsePayload) => { console.log("Hashing: " + result.result); }); + // }, (err?: Error, result?: Web3.JSONRPCResponsePayload) => { logDebug("Hashing: " + result.result); }); sig.addNumber(1 + 32 + 32, 1); sig.addNumber(v, 1); diff --git a/src/protocol_validator.ts b/src/protocol_validator.ts index d072bb6..9063595 100644 --- a/src/protocol_validator.ts +++ b/src/protocol_validator.ts @@ -1,5 +1,6 @@ import { BigNumber } from "bignumber.js"; import { Context } from "./context"; +import { logDebug } from "./logs"; import { OrderUtil } from "./order"; import { OrderExpectation, OrderInfo, RingsInfo, SimulatorReport } from "./types"; @@ -95,6 +96,7 @@ export class ProtocolValidator { feePayments); // Balances + const totalS = orderSettlement.amountS.minus(orderSettlement.rebateS); const totalB = orderSettlement.amountB.minus(orderSettlement.amountFeeB).plus(orderSettlement.rebateB); const totalFee = orderSettlement.amountFee.minus(orderSettlement.rebateFee); @@ -128,6 +130,7 @@ export class ProtocolValidator { for (const owner of Object.keys(expectedBalances[token])) { // const ownerName = addressBook[owner]; // const tokenSymbol = this.testContext.tokenAddrSymbolMap.get(token); + // console.log("[Sim]" + ownerName + ": " + // report.balancesAfter[token][owner].toNumber() / 1e18 + " " + tokenSymbol); // console.log("[Exp]" + ownerName + ": " + @@ -146,6 +149,7 @@ export class ProtocolValidator { for (const owner of Object.keys(expectedFeeBalances[token])) { // const ownerName = addressBook[owner]; // const tokenSymbol = this.testContext.tokenAddrSymbolMap.get(token); + // console.log("[Sim]" + ownerName + ": " + report.feeBalancesAfter[token][owner] / 1e18 + " " + tokenSymbol); // console.log("[Exp]" + ownerName + ": " + expectedFeeBalances[token][owner] / 1e18 + " " + tokenSymbol); this.assertAlmostEqual(report.feeBalancesAfter[token][owner].toNumber(), diff --git a/src/ring.ts b/src/ring.ts index ea7d079..5d448b8 100644 --- a/src/ring.ts +++ b/src/ring.ts @@ -3,6 +3,7 @@ import ABI = require("ethereumjs-abi"); import { Bitstream } from "./bitstream"; import { Context } from "./context"; import { ensure } from "./ensure"; +import { logDebug } from "./logs"; import { Mining } from "./mining"; import { OrderUtil } from "./order"; import { DetailedTokenTransfer, OrderInfo, OrderPayments, Participation, RingPayments, TransferItem } from "./types"; @@ -530,29 +531,30 @@ export class Ring { const p = this.participations[i]; const prevP = this.participations[prevIndex]; - console.log("p.spendableS: " + p.ringSpendableS.toNumber() / 1e18); - console.log("p.spendableFee: " + p.ringSpendableFee.toNumber() / 1e18); - console.log("order.amountS: " + p.order.amountS / 1e18); - console.log("order.amountB: " + p.order.amountB / 1e18); - console.log("order.feeAmount: " + p.order.feeAmount / 1e18); - console.log("order expected rate: " + p.order.amountS / p.order.amountB); - console.log("p.fillAmountS: " + p.fillAmountS.toNumber() / 1e18); - console.log("p.fillAmountB: " + p.fillAmountB.toNumber() / 1e18); - console.log("p.splitS: " + p.splitS.toNumber() / 1e18); - console.log("order actual rate: " + p.fillAmountS.plus(p.splitS).div(p.fillAmountB).toNumber()); - console.log("p.feeAmount: " + p.feeAmount.toNumber() / 1e18); - console.log("p.feeAmountS: " + p.feeAmountS.toNumber() / 1e18); - console.log("p.feeAmountB: " + p.feeAmountB.toNumber() / 1e18); - console.log("p.rebateFee: " + p.rebateFee.toNumber() / 1e18); - console.log("p.rebateS: " + p.rebateS.toNumber() / 1e18); - console.log("p.rebateB: " + p.rebateB.toNumber() / 1e18); - console.log("tokenS percentage: " + (p.order.P2P ? p.order.tokenSFeePercentage : 0) / + + logDebug("p.spendableS: " + p.ringSpendableS.toNumber() / 1e18); + logDebug("p.spendableFee: " + p.ringSpendableFee.toNumber() / 1e18); + logDebug("order.amountS: " + p.order.amountS / 1e18); + logDebug("order.amountB: " + p.order.amountB / 1e18); + logDebug("order.feeAmount: " + p.order.feeAmount / 1e18); + logDebug("order expected rate: " + p.order.amountS / p.order.amountB); + logDebug("p.fillAmountS: " + p.fillAmountS.toNumber() / 1e18); + logDebug("p.fillAmountB: " + p.fillAmountB.toNumber() / 1e18); + logDebug("p.splitS: " + p.splitS.toNumber() / 1e18); + logDebug("order actual rate: " + p.fillAmountS.plus(p.splitS).div(p.fillAmountB).toNumber()); + logDebug("p.feeAmount: " + p.feeAmount.toNumber() / 1e18); + logDebug("p.feeAmountS: " + p.feeAmountS.toNumber() / 1e18); + logDebug("p.feeAmountB: " + p.feeAmountB.toNumber() / 1e18); + logDebug("p.rebateFee: " + p.rebateFee.toNumber() / 1e18); + logDebug("p.rebateS: " + p.rebateS.toNumber() / 1e18); + logDebug("p.rebateB: " + p.rebateB.toNumber() / 1e18); + logDebug("tokenS percentage: " + (p.order.P2P ? p.order.tokenSFeePercentage : 0) / this.context.feePercentageBase); - console.log("tokenS real percentage: " + p.feeAmountS.toNumber() / p.order.amountS); - console.log("tokenB percentage: " + + logDebug("tokenS real percentage: " + p.feeAmountS.toNumber() / p.order.amountS); + logDebug("tokenB percentage: " + (p.order.P2P ? p.order.tokenBFeePercentage : p.order.feePercentage) / this.context.feePercentageBase); - console.log("tokenB real percentage: " + p.feeAmountB.toNumber() / p.fillAmountB.toNumber()); - console.log("----------------------------------------------"); + logDebug("tokenB real percentage: " + p.feeAmountB.toNumber() / p.fillAmountB.toNumber()); + logDebug("----------------------------------------------"); // Sanity checks assert(p.fillAmountS.gte(0), "fillAmountS should be positive"); diff --git a/src/rings_generator.ts b/src/rings_generator.ts index 341772f..ea1abf6 100644 --- a/src/rings_generator.ts +++ b/src/rings_generator.ts @@ -6,6 +6,7 @@ import ethUtil = require("ethereumjs-util"); import Web3 = require("web3"); import { Bitstream } from "./bitstream"; import { Context } from "./context"; +import { logDebug } from "./logs"; import { MultiHashUtil } from "./multihash"; import { OrderUtil } from "./order"; import { Ring } from "./ring"; @@ -164,10 +165,10 @@ export class RingsGenerator { param.ringSpecs = ringsInfo.rings; ringsInfo.orders.map((o) => this.createOrderTable(o, param)); - // console.log("transactionOrigin: " + ringsInfo.transactionOrigin); - // console.log("feeRecipient: " + ringsInfo.feeRecipient); - // console.log("miner: " + ringsInfo.miner); - ringsInfo.orders.forEach((o) => console.log(o)); + // logDebug("transactionOrigin: " + ringsInfo.transactionOrigin); + // logDebug("feeRecipient: " + ringsInfo.feeRecipient); + // logDebug("miner: " + ringsInfo.miner); + ringsInfo.orders.forEach((o) => logDebug(o)); return param; }