{"action":"created","comment":{"url":"https://api.github.com/repos/amitkot/dutchx-market-maker/pulls/comments/242979268","pull_request_review_id":186092541,"id":242979268,"node_id":"MDI0OlB1bGxSZXF1ZXN0UmV2aWV3Q29tbWVudDI0Mjk3OTI2OA==","diff_hunk":"@@ -0,0 +1,501 @@\n+pragma solidity ^0.4.23;\n+\n+import \"./ERC20Interface.sol\";\n+import \"./Withdrawable.sol\";\n+import \"@gnosis.pm/dx-contracts/contracts/DutchExchange.sol\";\n+import \"@gnosis.pm/util-contracts/contracts/EtherToken.sol\";\n+\n+\n+interface KyberNetworkProxy {\n+    function getExpectedRate(ERC20 src, ERC20 dest, uint srcQty)\n+        public\n+        view\n+        returns (uint expectedRate, uint slippageRate);\n+}\n+\n+\n+interface DxPriceOracleInterface {\n+    function getUSDETHPrice() public view returns (uint256);\n+}\n+\n+\n+// TODO: add events for logging calculations and decisions\n+// TODO: add fail texts to require calls\n+// TODO: add support to token -> token\n+contract DxMarketMaker is Withdrawable {\n+    // This is the representation of ETH as an ERC20 Token for Kyber Network.\n+    ERC20 constant internal KYBER_ETH_TOKEN = ERC20(\n+        0x00eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee\n+    );\n+\n+    // Declared in DutchExchange contract but not public.\n+    uint public constant DX_AUCTION_START_WAITING_FOR_FUNDING = 1;\n+\n+    enum AuctionState {\n+        NO_AUCTION_TRIGGERED,\n+        AUCTION_TRIGGERED_WAITING,\n+        AUCTION_IN_PROGRESS\n+    }\n+\n+    AuctionState constant public NO_AUCTION_TRIGGERED = AuctionState.NO_AUCTION_TRIGGERED;\n+    AuctionState constant public AUCTION_TRIGGERED_WAITING = AuctionState.AUCTION_TRIGGERED_WAITING;\n+    AuctionState constant public AUCTION_IN_PROGRESS = AuctionState.AUCTION_IN_PROGRESS;\n+\n+    DutchExchange public dx;\n+    EtherToken public weth;\n+    KyberNetworkProxy public kyberNetworkProxy;\n+\n+    // Token => Token => auctionIndex\n+    mapping (address => mapping (address => uint)) public lastClaimedAuction;\n+\n+    constructor(address _dx, address _kyberNetworkProxy) public {\n+        require(address(_dx) != address(0));\n+        require(address(_kyberNetworkProxy) != address(0));\n+\n+        dx = DutchExchange(_dx);\n+        weth = EtherToken(dx.ethToken());\n+        kyberNetworkProxy = KyberNetworkProxy(_kyberNetworkProxy);\n+    }\n+\n+    // TODO: emit event\n+    function depositToDx(address token, uint amount)\n+        public\n+        onlyAdmin\n+        returns (uint)\n+    {\n+        ERC20(token).approve(dx, amount);\n+        return dx.deposit(token, amount);\n+    }\n+\n+    // TODO: emit event\n+    function withdrawFromDx(address token, uint amount)\n+        public\n+        onlyAdmin\n+        returns (uint)\n+    {\n+        return dx.withdraw(token, amount);\n+    }\n+\n+    // TODO: consider adding a \"safety margin\" to compensate for accuracy issues.\n+    function thresholdNewAuctionToken(address token)\n+        public\n+        view\n+        returns (uint num)\n+    {\n+        uint priceTokenNum;\n+        uint priceTokenDen;\n+        (priceTokenNum, priceTokenDen) = dx.getPriceOfTokenInLastAuction(token);\n+\n+        DxPriceOracleInterface priceOracle = DxPriceOracleInterface(\n+            dx.ethUSDOracle()\n+        );\n+\n+        // Rounding up to make sure we pass the threshold\n+        return 1 + div(\n+            // mul() takes care of overflows\n+            mul(\n+                dx.thresholdNewAuction(),\n+                priceTokenDen\n+            ),\n+            mul(\n+                priceOracle.getUSDETHPrice(),\n+                priceTokenNum\n+            )\n+        );\n+    }\n+\n+    function calculateMissingTokenForAuctionStart(\n+        address sellToken,\n+        address buyToken\n+    )\n+        public\n+        view\n+        returns (uint)\n+    {\n+        uint currentAuctionSellVolume = dx.sellVolumesCurrent(sellToken, buyToken);\n+        uint thresholdTokenWei = thresholdNewAuctionToken(sellToken);\n+\n+        if (thresholdTokenWei > currentAuctionSellVolume) {\n+            return thresholdTokenWei - currentAuctionSellVolume;\n+        }\n+\n+        return 0;\n+    }\n+\n+    function addFee(uint amount) public view returns (uint) {\n+        uint num;\n+        uint den;\n+        (num, den) = dx.getFeeRatio(msg.sender);\n+\n+        // amount / (1 - num / den)\n+        return div(\n+            mul(amount, den),\n+            (den - num)\n+        );\n+    }\n+\n+    function getAuctionState(\n+        address sellToken,\n+        address buyToken\n+    )\n+        public\n+        view\n+        returns (AuctionState)\n+    {\n+        uint auctionStart = dx.getAuctionStart(sellToken, buyToken);\n+        if (auctionStart > DX_AUCTION_START_WAITING_FOR_FUNDING) {\n+            // DutchExchange logic uses auction start time.\n+            /* solhint-disable not-rely-on-time */\n+            if (auctionStart > now) {\n+                return AuctionState.AUCTION_TRIGGERED_WAITING;\n+            } else {\n+                return AuctionState.AUCTION_IN_PROGRESS;\n+            }\n+        }\n+        return AuctionState.NO_AUCTION_TRIGGERED;\n+    }\n+\n+    // TODO: support token -> token\n+    function getKyberRate(address _sellToken, address _buyToken, uint amount)\n+        public\n+        view\n+        returns (uint num, uint den)\n+    {\n+        ERC20 sellToken = _sellToken == address(weth) ? KYBER_ETH_TOKEN : ERC20(sellToken);\n+        ERC20 buyToken = _buyToken == address(weth) ? KYBER_ETH_TOKEN : ERC20(buyToken);\n+        uint rate;\n+        (rate, ) = kyberNetworkProxy.getExpectedRate(\n+            sellToken,\n+            buyToken,\n+            amount\n+        );\n+\n+        // KyberNetworkProxy.getExpectedRate() always returns a result that is\n+        // rate / 10**18.\n+        return (rate, 10 ** 18);\n+    }\n+\n+    function tokensSoldInCurrentAuction(\n+        address sellToken,\n+        address buyToken,\n+        uint auctionIndex,\n+        address account\n+    )\n+        public\n+        view\n+        returns (uint)\n+    {\n+        return dx.sellerBalances(sellToken, buyToken, auctionIndex, account);\n+    }\n+\n+    // The amount of tokens that matches the amount sold by provided account in\n+    // specified auction index, deducting the amount that was already bought.\n+    function calculateAuctionBuyTokens(\n+        address sellToken,\n+        address buyToken,\n+        uint auctionIndex,\n+        address account\n+    )\n+        public\n+        view\n+        returns (uint)\n+    {\n+        uint sellVolume = tokensSoldInCurrentAuction(\n+            sellToken,\n+            buyToken,\n+            auctionIndex,\n+            account\n+        );\n+        uint buyVolume = dx.buyVolumes(sellToken, buyToken);\n+\n+        uint num;\n+        uint den;\n+        (num, den) = dx.getCurrentAuctionPrice(\n+            sellToken,\n+            buyToken,\n+            auctionIndex\n+        );\n+\n+        // No price for this auction, it is a future one.\n+        if (den == 0) return 0;\n+\n+        return mul(sellVolume, num) / den - buyVolume;\n+    }\n+\n+    event ClaimedAuctionTokens(\n+        address sellToken,\n+        address buyToken,\n+        uint previousLastCompletedAuction,\n+        uint newLastCompletedAuction,\n+        uint sellerFunds,\n+        uint buyerFunds\n+    );\n+\n+    function claimAuctionTokens(\n+        address sellToken,\n+        address buyToken\n+    )\n+        public\n+        returns (uint sellerFunds, uint buyerFunds)\n+    {\n+        uint initialLastClaimed = lastClaimedAuction[sellToken][buyToken];\n+\n+        uint lastCompletedAuction = dx.getAuctionIndex(sellToken, buyToken) - 1;\n+        if (lastCompletedAuction <= initialLastClaimed) return;\n+\n+        uint amount;\n+        for (uint i = lastClaimedAuction[sellToken][buyToken] + 1; i <= lastCompletedAuction; i++) {\n+            if (dx.sellerBalances(sellToken, buyToken, i, address(this)) > 0) {\n+                (amount, ) = dx.claimSellerFunds(sellToken, buyToken, address(this), i);\n+                sellerFunds += amount;\n+            }\n+            if (dx.buyerBalances(sellToken, buyToken, i, address(this)) > 0) {\n+                (amount, ) = dx.claimBuyerFunds(sellToken, buyToken, address(this), i);\n+                buyerFunds += amount;\n+            }\n+        }\n+\n+        lastClaimedAuction[sellToken][buyToken] = lastCompletedAuction;\n+        emit ClaimedAuctionTokens(\n+            sellToken,\n+            buyToken,\n+            initialLastClaimed,\n+            lastCompletedAuction,\n+            sellerFunds,\n+            buyerFunds\n+        );\n+    }\n+\n+    event AuctionTriggered(\n+        address sellToken,\n+        address buyToken,\n+        uint auctionIndex,\n+        uint sellTokenAmount,\n+        uint sellTokenAmountWithFee\n+    );\n+\n+    // TODO: maybe verify that pair is listed in dutchx\n+    function triggerAuction(\n+        address sellToken,\n+        address buyToken\n+    )\n+        public\n+        returns (bool triggered)\n+    {\n+        uint missingTokens = calculateMissingTokenForAuctionStart(\n+            sellToken,\n+            buyToken\n+        );\n+        uint missingTokensWithFee = addFee(missingTokens);\n+        if (missingTokensWithFee == 0) return false;\n+\n+        uint balance = dx.balances(sellToken, address(this));\n+        require(\n+            balance >= missingTokensWithFee,\n+            \"Not enough tokens to trigger auction\"\n+        );\n+\n+        uint auctionIndex = dx.getAuctionIndex(sellToken, buyToken);\n+        dx.postSellOrder(sellToken, buyToken, auctionIndex, missingTokensWithFee);\n+\n+        emit AuctionTriggered(\n+            sellToken,\n+            buyToken,\n+            auctionIndex,\n+            missingTokens,\n+            missingTokensWithFee\n+        );\n+        return true;\n+    }\n+\n+    // TODO: emit event\n+    // TODO: check for all the requirements of dutchx\n+    event BoughtInAuction(\n+        address sellToken,\n+        address buyToken,\n+        uint auctionIndex,\n+        uint buyTokenAmount,\n+        bool clearedAuction\n+    );\n+\n+    function buyInAuction(\n+        address sellToken,\n+        address buyToken\n+    )\n+        public\n+        returns (bool bought)\n+    {\n+        require(\n+            getAuctionState(sellToken, buyToken) == AuctionState.AUCTION_IN_PROGRESS,\n+            \"No auction in progress\"\n+        );\n+\n+        uint auctionIndex = dx.getAuctionIndex(sellToken, buyToken);\n+        uint buyTokenAmount = calculateAuctionBuyTokens(\n+            sellToken,\n+            buyToken,\n+            auctionIndex,\n+            address(this)\n+        );\n+        if (buyTokenAmount == 0) return false;\n+\n+        bool willClearAuction = willAmountClearAuction(\n+            sellToken,\n+            buyToken,\n+            auctionIndex,\n+            buyTokenAmount\n+        );\n+        if (!willClearAuction) {\n+            buyTokenAmount = addFee(buyTokenAmount);\n+        }\n+\n+        require(\n+            dx.balances(buyToken, address(this)) >= buyTokenAmount,\n+            \"Not enough buy token to buy required amount\"\n+        );\n+        dx.postBuyOrder(sellToken, buyToken, auctionIndex, buyTokenAmount);\n+        emit BoughtInAuction(\n+            sellToken,\n+            buyToken,\n+            auctionIndex,\n+            buyTokenAmount,\n+            willClearAuction\n+        );\n+        return true;\n+    }\n+\n+    function willAmountClearAuction(\n+        address sellToken,\n+        address buyToken,\n+        uint auctionIndex,\n+        uint amount\n+    )\n+        public\n+        view\n+        returns (bool)\n+    {\n+        // TODO: add similar requires here and in other places?\n+        // R1: auction must not have cleared\n+        // require(closingPrices[sellToken][buyToken][auctionIndex].den == 0);\n+\n+        // uint auctionStart = getAuctionStart(sellToken, buyToken);\n+\n+        // R2\n+        // require(auctionStart <= now);\n+\n+        // R4\n+        // require(auctionIndex == getAuctionIndex(sellToken, buyToken));\n+\n+        // R5: auction must not be in waiting period\n+        // require(auctionStart > AUCTION_START_WAITING_FOR_FUNDING);\n+\n+        uint buyVolume = dx.buyVolumes(sellToken, buyToken);\n+\n+        // R7\n+        // require(add(buyVolume, amount) < 10 ** 30);\n+\n+        // Overbuy is when a part of a buy order clears an auction\n+        // In that case we only process the part before the overbuy\n+        // To calculate overbuy, we first get current price\n+        uint sellVolume = dx.sellVolumesCurrent(sellToken, buyToken);\n+\n+        uint num;\n+        uint den;\n+        (num, den) = dx.getCurrentAuctionPrice(sellToken, buyToken, auctionIndex);\n+        // 10^30 * 10^37 = 10^67\n+        uint outstandingVolume = atleastZero(int(mul(sellVolume, num) / den - buyVolume));","path":"contracts/DxMarketMaker.sol","position":406,"original_position":406,"commit_id":"508df2da8ddf36f02d9b952278baba66690f8858","original_commit_id":"508df2da8ddf36f02d9b952278baba66690f8858","user":{"login":"yaronvel","id":19823963,"node_id":"MDQ6VXNlcjE5ODIzOTYz","avatar_url":"https://avatars1.githubusercontent.com/u/19823963?v=4","gravatar_id":"","url":"https://api.github.com/users/yaronvel","html_url":"https://github.com/yaronvel","followers_url":"https://api.github.com/users/yaronvel/followers","following_url":"https://api.github.com/users/yaronvel/following{/other_user}","gists_url":"https://api.github.com/users/yaronvel/gists{/gist_id}","starred_url":"https://api.github.com/users/yaronvel/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/yaronvel/subscriptions","organizations_url":"https://api.github.com/users/yaronvel/orgs","repos_url":"https://api.github.com/users/yaronvel/repos","events_url":"https://api.github.com/users/yaronvel/events{/privacy}","received_events_url":"https://api.github.com/users/yaronvel/received_events","type":"User","site_admin":false},"body":"`mul`,`/`,`-`, you are not consistent.","created_at":"2018-12-19T16:16:19Z","updated_at":"2018-12-19T16:21:12Z","html_url":"https://github.com/amitkot/dutchx-market-maker/pull/2#discussion_r242979268","pull_request_url":"https://api.github.com/repos/amitkot/dutchx-market-maker/pulls/2","author_association":"NONE","_links":{"self":{"href":"https://api.github.com/repos/amitkot/dutchx-market-maker/pulls/comments/242979268"},"html":{"href":"https://github.com/amitkot/dutchx-market-maker/pull/2#discussion_r242979268"},"pull_request":{"href":"https://api.github.com/repos/amitkot/dutchx-market-maker/pulls/2"}}},"pull_request":{"url":"https://api.github.com/repos/amitkot/dutchx-market-maker/pulls/2","id":239474549,"node_id":"MDExOlB1bGxSZXF1ZXN0MjM5NDc0NTQ5","html_url":"https://github.com/amitkot/dutchx-market-maker/pull/2","diff_url":"https://github.com/amitkot/dutchx-market-maker/pull/2.diff","patch_url":"https://github.com/amitkot/dutchx-market-maker/pull/2.patch","issue_url":"https://api.github.com/repos/amitkot/dutchx-market-maker/issues/2","number":2,"state":"open","locked":false,"title":"For review","user":{"login":"amitkot","id":654041,"node_id":"MDQ6VXNlcjY1NDA0MQ==","avatar_url":"https://avatars3.githubusercontent.com/u/654041?v=4","gravatar_id":"","url":"https://api.github.com/users/amitkot","html_url":"https://github.com/amitkot","followers_url":"https://api.github.com/users/amitkot/followers","following_url":"https://api.github.com/users/amitkot/following{/other_user}","gists_url":"https://api.github.com/users/amitkot/gists{/gist_id}","starred_url":"https://api.github.com/users/amitkot/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/amitkot/subscriptions","organizations_url":"https://api.github.com/users/amitkot/orgs","repos_url":"https://api.github.com/users/amitkot/repos","events_url":"https://api.github.com/users/amitkot/events{/privacy}","received_events_url":"https://api.github.com/users/amitkot/received_events","type":"User","site_admin":false},"body":"@yaronvel please review","created_at":"2018-12-18T12:39:00Z","updated_at":"2018-12-19T16:21:10Z","closed_at":null,"merged_at":null,"merge_commit_sha":"198fcc2f72c9dfbb9324a190b80cb449a98cf07c","assignee":null,"assignees":[],"requested_reviewers":[],"requested_teams":[],"labels":[],"milestone":null,"commits_url":"https://api.github.com/repos/amitkot/dutchx-market-maker/pulls/2/commits","review_comments_url":"https://api.github.com/repos/amitkot/dutchx-market-maker/pulls/2/comments","review_comment_url":"https://api.github.com/repos/amitkot/dutchx-market-maker/pulls/comments{/number}","comments_url":"https://api.github.com/repos/amitkot/dutchx-market-maker/issues/2/comments","statuses_url":"https://api.github.com/repos/amitkot/dutchx-market-maker/statuses/508df2da8ddf36f02d9b952278baba66690f8858","head":{"label":"amitkot:truffle5","ref":"truffle5","sha":"508df2da8ddf36f02d9b952278baba66690f8858","user":{"login":"amitkot","id":654041,"node_id":"MDQ6VXNlcjY1NDA0MQ==","avatar_url":"https://avatars3.githubusercontent.com/u/654041?v=4","gravatar_id":"","url":"https://api.github.com/users/amitkot","html_url":"https://github.com/amitkot","followers_url":"https://api.github.com/users/amitkot/followers","following_url":"https://api.github.com/users/amitkot/following{/other_user}","gists_url":"https://api.github.com/users/amitkot/gists{/gist_id}","starred_url":"https://api.github.com/users/amitkot/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/amitkot/subscriptions","organizations_url":"https://api.github.com/users/amitkot/orgs","repos_url":"https://api.github.com/users/amitkot/repos","events_url":"https://api.github.com/users/amitkot/events{/privacy}","received_events_url":"https://api.github.com/users/amitkot/received_events","type":"User","site_admin":false},"repo":{"id":157552675,"node_id":"MDEwOlJlcG9zaXRvcnkxNTc1NTI2NzU=","name":"dutchx-market-maker","full_name":"amitkot/dutchx-market-maker","private":false,"owner":{"login":"amitkot","id":654041,"node_id":"MDQ6VXNlcjY1NDA0MQ==","avatar_url":"https://avatars3.githubusercontent.com/u/654041?v=4","gravatar_id":"","url":"https://api.github.com/users/amitkot","html_url":"https://github.com/amitkot","followers_url":"https://api.github.com/users/amitkot/followers","following_url":"https://api.github.com/users/amitkot/following{/other_user}","gists_url":"https://api.github.com/users/amitkot/gists{/gist_id}","starred_url":"https://api.github.com/users/amitkot/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/amitkot/subscriptions","organizations_url":"https://api.github.com/users/amitkot/orgs","repos_url":"https://api.github.com/users/amitkot/repos","events_url":"https://api.github.com/users/amitkot/events{/privacy}","received_events_url":"https://api.github.com/users/amitkot/received_events","type":"User","site_admin":false},"html_url":"https://github.com/amitkot/dutchx-market-maker","description":null,"fork":false,"url":"https://api.github.com/repos/amitkot/dutchx-market-maker","forks_url":"https://api.github.com/repos/amitkot/dutchx-market-maker/forks","keys_url":"https://api.github.com/repos/amitkot/dutchx-market-maker/keys{/key_id}","collaborators_url":"https://api.github.com/repos/amitkot/dutchx-market-maker/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/amitkot/dutchx-market-maker/teams","hooks_url":"https://api.github.com/repos/amitkot/dutchx-market-maker/hooks","issue_events_url":"https://api.github.com/repos/amitkot/dutchx-market-maker/issues/events{/number}","events_url":"https://api.github.com/repos/amitkot/dutchx-market-maker/events","assignees_url":"https://api.github.com/repos/amitkot/dutchx-market-maker/assignees{/user}","branches_url":"https://api.github.com/repos/amitkot/dutchx-market-maker/branches{/branch}","tags_url":"https://api.github.com/repos/amitkot/dutchx-market-maker/tags","blobs_url":"https://api.github.com/repos/amitkot/dutchx-market-maker/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/amitkot/dutchx-market-maker/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/amitkot/dutchx-market-maker/git/refs{/sha}","trees_url":"https://api.github.com/repos/amitkot/dutchx-market-maker/git/trees{/sha}","statuses_url":"https://api.github.com/repos/amitkot/dutchx-market-maker/statuses/{sha}","languages_url":"https://api.github.com/repos/amitkot/dutchx-market-maker/languages","stargazers_url":"https://api.github.com/repos/amitkot/dutchx-market-maker/stargazers","contributors_url":"https://api.github.com/repos/amitkot/dutchx-market-maker/contributors","subscribers_url":"https://api.github.com/repos/amitkot/dutchx-market-maker/subscribers","subscription_url":"https://api.github.com/repos/amitkot/dutchx-market-maker/subscription","commits_url":"https://api.github.com/repos/amitkot/dutchx-market-maker/commits{/sha}","git_commits_url":"https://api.github.com/repos/amitkot/dutchx-market-maker/git/commits{/sha}","comments_url":"https://api.github.com/repos/amitkot/dutchx-market-maker/comments{/number}","issue_comment_url":"https://api.github.com/repos/amitkot/dutchx-market-maker/issues/comments{/number}","contents_url":"https://api.github.com/repos/amitkot/dutchx-market-maker/contents/{+path}","compare_url":"https://api.github.com/repos/amitkot/dutchx-market-maker/compare/{base}...{head}","merges_url":"https://api.github.com/repos/amitkot/dutchx-market-maker/merges","archive_url":"https://api.github.com/repos/amitkot/dutchx-market-maker/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/amitkot/dutchx-market-maker/downloads","issues_url":"https://api.github.com/repos/amitkot/dutchx-market-maker/issues{/number}","pulls_url":"https://api.github.com/repos/amitkot/dutchx-market-maker/pulls{/number}","milestones_url":"https://api.github.com/repos/amitkot/dutchx-market-maker/milestones{/number}","notifications_url":"https://api.github.com/repos/amitkot/dutchx-market-maker/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/amitkot/dutchx-market-maker/labels{/name}","releases_url":"https://api.github.com/repos/amitkot/dutchx-market-maker/releases{/id}","deployments_url":"https://api.github.com/repos/amitkot/dutchx-market-maker/deployments","created_at":"2018-11-14T13:26:39Z","updated_at":"2018-12-18T11:48:46Z","pushed_at":"2018-12-18T12:39:00Z","git_url":"git://github.com/amitkot/dutchx-market-maker.git","ssh_url":"git@github.com:amitkot/dutchx-market-maker.git","clone_url":"https://github.com/amitkot/dutchx-market-maker.git","svn_url":"https://github.com/amitkot/dutchx-market-maker","homepage":null,"size":176,"stargazers_count":1,"watchers_count":1,"language":"JavaScript","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":0,"mirror_url":null,"archived":false,"open_issues_count":1,"license":null,"forks":0,"open_issues":1,"watchers":1,"default_branch":"master"}},"base":{"label":"amitkot:review","ref":"review","sha":"2f3c6670ab0f5438b9c605779d1386acb79b710e","user":{"login":"amitkot","id":654041,"node_id":"MDQ6VXNlcjY1NDA0MQ==","avatar_url":"https://avatars3.githubusercontent.com/u/654041?v=4","gravatar_id":"","url":"https://api.github.com/users/amitkot","html_url":"https://github.com/amitkot","followers_url":"https://api.github.com/users/amitkot/followers","following_url":"https://api.github.com/users/amitkot/following{/other_user}","gists_url":"https://api.github.com/users/amitkot/gists{/gist_id}","starred_url":"https://api.github.com/users/amitkot/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/amitkot/subscriptions","organizations_url":"https://api.github.com/users/amitkot/orgs","repos_url":"https://api.github.com/users/amitkot/repos","events_url":"https://api.github.com/users/amitkot/events{/privacy}","received_events_url":"https://api.github.com/users/amitkot/received_events","type":"User","site_admin":false},"repo":{"id":157552675,"node_id":"MDEwOlJlcG9zaXRvcnkxNTc1NTI2NzU=","name":"dutchx-market-maker","full_name":"amitkot/dutchx-market-maker","private":false,"owner":{"login":"amitkot","id":654041,"node_id":"MDQ6VXNlcjY1NDA0MQ==","avatar_url":"https://avatars3.githubusercontent.com/u/654041?v=4","gravatar_id":"","url":"https://api.github.com/users/amitkot","html_url":"https://github.com/amitkot","followers_url":"https://api.github.com/users/amitkot/followers","following_url":"https://api.github.com/users/amitkot/following{/other_user}","gists_url":"https://api.github.com/users/amitkot/gists{/gist_id}","starred_url":"https://api.github.com/users/amitkot/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/amitkot/subscriptions","organizations_url":"https://api.github.com/users/amitkot/orgs","repos_url":"https://api.github.com/users/amitkot/repos","events_url":"https://api.github.com/users/amitkot/events{/privacy}","received_events_url":"https://api.github.com/users/amitkot/received_events","type":"User","site_admin":false},"html_url":"https://github.com/amitkot/dutchx-market-maker","description":null,"fork":false,"url":"https://api.github.com/repos/amitkot/dutchx-market-maker","forks_url":"https://api.github.com/repos/amitkot/dutchx-market-maker/forks","keys_url":"https://api.github.com/repos/amitkot/dutchx-market-maker/keys{/key_id}","collaborators_url":"https://api.github.com/repos/amitkot/dutchx-market-maker/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/amitkot/dutchx-market-maker/teams","hooks_url":"https://api.github.com/repos/amitkot/dutchx-market-maker/hooks","issue_events_url":"https://api.github.com/repos/amitkot/dutchx-market-maker/issues/events{/number}","events_url":"https://api.github.com/repos/amitkot/dutchx-market-maker/events","assignees_url":"https://api.github.com/repos/amitkot/dutchx-market-maker/assignees{/user}","branches_url":"https://api.github.com/repos/amitkot/dutchx-market-maker/branches{/branch}","tags_url":"https://api.github.com/repos/amitkot/dutchx-market-maker/tags","blobs_url":"https://api.github.com/repos/amitkot/dutchx-market-maker/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/amitkot/dutchx-market-maker/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/amitkot/dutchx-market-maker/git/refs{/sha}","trees_url":"https://api.github.com/repos/amitkot/dutchx-market-maker/git/trees{/sha}","statuses_url":"https://api.github.com/repos/amitkot/dutchx-market-maker/statuses/{sha}","languages_url":"https://api.github.com/repos/amitkot/dutchx-market-maker/languages","stargazers_url":"https://api.github.com/repos/amitkot/dutchx-market-maker/stargazers","contributors_url":"https://api.github.com/repos/amitkot/dutchx-market-maker/contributors","subscribers_url":"https://api.github.com/repos/amitkot/dutchx-market-maker/subscribers","subscription_url":"https://api.github.com/repos/amitkot/dutchx-market-maker/subscription","commits_url":"https://api.github.com/repos/amitkot/dutchx-market-maker/commits{/sha}","git_commits_url":"https://api.github.com/repos/amitkot/dutchx-market-maker/git/commits{/sha}","comments_url":"https://api.github.com/repos/amitkot/dutchx-market-maker/comments{/number}","issue_comment_url":"https://api.github.com/repos/amitkot/dutchx-market-maker/issues/comments{/number}","contents_url":"https://api.github.com/repos/amitkot/dutchx-market-maker/contents/{+path}","compare_url":"https://api.github.com/repos/amitkot/dutchx-market-maker/compare/{base}...{head}","merges_url":"https://api.github.com/repos/amitkot/dutchx-market-maker/merges","archive_url":"https://api.github.com/repos/amitkot/dutchx-market-maker/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/amitkot/dutchx-market-maker/downloads","issues_url":"https://api.github.com/repos/amitkot/dutchx-market-maker/issues{/number}","pulls_url":"https://api.github.com/repos/amitkot/dutchx-market-maker/pulls{/number}","milestones_url":"https://api.github.com/repos/amitkot/dutchx-market-maker/milestones{/number}","notifications_url":"https://api.github.com/repos/amitkot/dutchx-market-maker/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/amitkot/dutchx-market-maker/labels{/name}","releases_url":"https://api.github.com/repos/amitkot/dutchx-market-maker/releases{/id}","deployments_url":"https://api.github.com/repos/amitkot/dutchx-market-maker/deployments","created_at":"2018-11-14T13:26:39Z","updated_at":"2018-12-18T11:48:46Z","pushed_at":"2018-12-18T12:39:00Z","git_url":"git://github.com/amitkot/dutchx-market-maker.git","ssh_url":"git@github.com:amitkot/dutchx-market-maker.git","clone_url":"https://github.com/amitkot/dutchx-market-maker.git","svn_url":"https://github.com/amitkot/dutchx-market-maker","homepage":null,"size":176,"stargazers_count":1,"watchers_count":1,"language":"JavaScript","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":0,"mirror_url":null,"archived":false,"open_issues_count":1,"license":null,"forks":0,"open_issues":1,"watchers":1,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/amitkot/dutchx-market-maker/pulls/2"},"html":{"href":"https://github.com/amitkot/dutchx-market-maker/pull/2"},"issue":{"href":"https://api.github.com/repos/amitkot/dutchx-market-maker/issues/2"},"comments":{"href":"https://api.github.com/repos/amitkot/dutchx-market-maker/issues/2/comments"},"review_comments":{"href":"https://api.github.com/repos/amitkot/dutchx-market-maker/pulls/2/comments"},"review_comment":{"href":"https://api.github.com/repos/amitkot/dutchx-market-maker/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/amitkot/dutchx-market-maker/pulls/2/commits"},"statuses":{"href":"https://api.github.com/repos/amitkot/dutchx-market-maker/statuses/508df2da8ddf36f02d9b952278baba66690f8858"}},"author_association":"OWNER"}}
{"actor":{"display_login":"yaronvel"}}