{"action":"created","comment":{"url":"https://api.github.com/repos/aragonlabs/curation/pulls/comments/207190161","pull_request_review_id":142466413,"id":207190161,"node_id":"MDI0OlB1bGxSZXF1ZXN0UmV2aWV3Q29tbWVudDIwNzE5MDE2MQ==","diff_hunk":"@@ -0,0 +1,529 @@\n+pragma solidity 0.4.18;\n+\n+import \"@aragon/os/contracts/apps/AragonApp.sol\";\n+import \"@aragon/os/contracts/lib/misc/Migrations.sol\";\n+import \"@aragon/os/contracts/lib/zeppelin/math/SafeMath.sol\";\n+import \"@aragon/os/contracts/lib/zeppelin/math/SafeMath64.sol\";\n+\n+import \"@aragon/apps-staking/contracts/interfaces/IStaking.sol\";\n+import \"@aragon/apps-registry/contracts/interfaces/IRegistry.sol\";\n+import \"./interfaces/IVoting.sol\";\n+\n+\n+contract Curation is AragonApp {\n+    using SafeMath for uint256;\n+    using SafeMath64 for uint64;\n+\n+    uint64 constant public MAX_UINT64 = uint64(-1);\n+    uint256 constant public PCT_BASE = 10 ** 18; // 0% = 0; 1% = 10^16; 100% = 10^18\n+    bytes32 constant public MIN_DEPOSIT_PARAM = keccak256(\"MIN_DEPOSIT_PARAM\");\n+    bytes32 constant public APPLY_STAGE_LEN_PARAM = keccak256(\"APPLY_STAGE_LEN_PARAM\");\n+    bytes32 constant public DISPENSATION_PCT_PARAM = keccak256(\"DISPENSATION_PCT_PARAM\");\n+\n+    IRegistry public registry;\n+    IStaking public staking;\n+    IVoting public voting;\n+    uint256 public minDeposit;\n+    uint64 public applyStageLen;\n+    uint256 public dispensationPct;\n+\n+    bytes32 constant public CHANGE_PARAMS_ROLE = keccak256(\"CHANGE_PARAMS_ROLE\");\n+    bytes32 constant public CHANGE_VOTING_APP_ROLE = keccak256(\"CHANGE_VOTING_APP_ROLE\");\n+\n+    // TODO!!!\n+    enum TimeUnit { Blocks, Seconds }\n+\n+    struct Application {\n+        address applicant;\n+        uint64 date;\n+        bool registered;\n+        bytes data;\n+        uint256 amount;\n+        uint256 lockId;\n+    }\n+\n+    struct Challenge {\n+        address challenger;\n+        uint64 date;\n+        uint256 amount;\n+        uint256 lockId;\n+        uint256 voteId;\n+        uint256 dispensationPct;\n+    }\n+\n+    struct Vote {\n+        bool closed;\n+        bool result;\n+        uint256 votersRewardPool;\n+        uint256 totalWinningStake;\n+        mapping(address => bool) claims; // participants who already claimed their reward\n+    }\n+\n+    mapping(bytes32 => Application) applications;\n+    mapping(bytes32 => Challenge) challenges;\n+    mapping(uint256 => Vote) votes;\n+    mapping(address => mapping(uint256 => bool)) usedLocks;\n+\n+    event NewApplication(bytes32 indexed entryId, address applicant);\n+    event NewChallenge(bytes32 indexed entryId, address challenger);\n+    event ResolvedChallenge(bytes32 indexed entryId, bool result);\n+\n+    /**\n+     * @notice Initializes Curation app with\n+     * @param _registry Registry app to be used for registering accepted entries\n+     * @param _staking Staking app to be used for staking and locking tokens\n+     * @param _voting Voting app to be used for Challenges\n+     * @param _minDeposit Minimum amount of tokens needed for Applications and Challenges\n+     * @param _applyStageLen Duration after which an application gets registered if it doesn't receive any challenge\n+     * @param _dispensationPct Percentage of deposited tokens awarded to the winning party (applicant or challenger). The rest will be distributed among voters\n+     */\n+    function initialize(\n+        IRegistry _registry,\n+        IStaking _staking,\n+        IVoting _voting,\n+        uint256 _minDeposit,\n+        uint64 _applyStageLen,\n+        uint256 _dispensationPct\n+    )\n+        onlyInit\n+        external\n+    {\n+        initialized();\n+\n+        require(isContract(_registry));\n+        require(isContract(_staking));\n+\n+        registry = _registry;\n+        staking = _staking;\n+        _setVotingApp(_voting);\n+\n+        _setMinDeposit(_minDeposit);\n+        _setApplyStageLen(_applyStageLen);\n+        _setDispensationPct(_dispensationPct);\n+    }\n+\n+    /**\n+     * @notice Submit new application for \"`data`\" using lock `lockId`\n+     * @param data Content of the application\n+     * @param lockId Id of the lock from Staking app used for the application\n+     * @return Id of the new entry\n+     */\n+    function newApplication(bytes data, uint256 lockId) isInitialized public returns (bytes32 entryId) {\n+        entryId = keccak256(data);\n+\n+        require(data.length != 0);\n+        // check data doesn't have an ongoing application\n+        require(!applicationExists(entryId));\n+        // check data doesn't exist in Registry\n+        require(!registry.exists(entryId));\n+\n+        // check locked tokens\n+        uint256 amount = _checkLock(msg.sender, lockId, getTimestamp(), MAX_UINT64);\n+\n+        applications[entryId] = Application({\n+            applicant: msg.sender,\n+            date: getTimestamp(),\n+            registered: false,\n+            data: data,\n+            amount: amount,\n+            lockId: lockId\n+        });\n+\n+        // register used lock\n+        NewApplication(entryId, msg.sender);\n+    }\n+\n+    /**\n+     * @notice Challenge application for entry with id `entryId` using lock wiht id `lockId`\n+     * @param entryId Id of the application being challenged\n+     * @param lockId Id of the lock from Staking app used for the application\n+     * @return Id of the Challenge, which is the same as the Application one\n+     */\n+    function challengeApplication(bytes32 entryId, uint256 lockId) isInitialized public returns(bytes32) {\n+        // check application doesn't have an ongoing challenge\n+        require(!challengeExists(entryId));\n+\n+        // touch-and-remove case\n+        Application memory application = applications[entryId];\n+        if (application.amount < minDeposit) {\n+            staking.unlock(application.applicant, application.lockId);\n+            delete(applications[entryId]);\n+            registry.remove(entryId);\n+            return 0;\n+        }\n+\n+        // check locked tokens\n+        uint256 amount = _checkLock(msg.sender, lockId, getTimestamp(), getTimestamp().add(applyStageLen));\n+\n+        // create vote\n+        // TODO: metadata\n+        // script to call `resolveChallenge(entryId)`\n+        uint256 scriptLength = 64; // 4 (spec) + 20 (address) + 4 (calldataLength) + 4 (signature) + 32 (input)\n+        bytes4 spec = bytes4(0x01);\n+        bytes4 calldataLength = bytes4(0x24); // 4 + 32\n+        bytes4 signature = this.resolveChallenge.selector;\n+        bytes memory executionScript = new bytes(scriptLength);\n+        // concatenate spec + address(this) + calldataLength + calldata\n+        // TODO: should we put this somewhere in aragonOS to be able to reuse it? (if it's not already there)\n+        assembly {\n+            mstore(add(executionScript, 0x20), spec)\n+            mstore(add(executionScript, 0x24), mul(address, exp(2,96)))\n+            mstore(add(executionScript, 0x38), calldataLength)\n+            mstore(add(executionScript, 0x3C), signature)\n+            mstore(add(executionScript, 0x40), entryId)\n+        }\n+\n+        uint256 voteId = voting.newVote(executionScript, \"\");\n+\n+        challenges[entryId] = Challenge({\n+            challenger: msg.sender,\n+            date: getTimestamp(),\n+            amount: amount,\n+            lockId: lockId,\n+            voteId: voteId,\n+            dispensationPct: dispensationPct\n+        });\n+\n+        votes[voteId] = Vote({\n+            closed: false,\n+            result: false,\n+            totalWinningStake: 0,\n+            votersRewardPool: 0\n+        });\n+\n+        NewChallenge(entryId, msg.sender);\n+\n+        return entryId;\n+    }\n+\n+    /**\n+     * @notice Resolve Challenge for entry with id `entryId`\n+     * @param entryId Id of the Application/Challenge\n+     */\n+    function resolveChallenge(bytes32 entryId) isInitialized public {\n+        require(challengeExists(entryId));\n+        Challenge storage challenge = challenges[entryId];\n+        Application storage application = applications[entryId];\n+        Vote storage vote = votes[challenge.voteId];\n+\n+        require(voting.isClosed(challenge.voteId));\n+        vote.closed = true;\n+        (vote.result, vote.totalWinningStake,) = voting.getVoteResult(challenge.voteId);\n+\n+        address winner;\n+        address loser;\n+        uint256 loserLockId;\n+        uint256 amount;\n+        if (vote.result == false) { // challenge not accepted (application remains)\n+            winner = application.applicant;\n+            loser = challenge.challenger;\n+            loserLockId = challenge.lockId;\n+            amount = challenge.amount;\n+\n+            // it's still in application phase (not registered yet)\n+            if (!application.registered) {\n+                application.registered = true;\n+                // insert in Registry app\n+                registry.add(application.data);\n+            }\n+        } else { // challenge accepted (application rejected)\n+            winner = challenge.challenger;\n+            loser = application.applicant;\n+            loserLockId = application.lockId;\n+            amount = application.amount;\n+\n+            // Remove from Registry app\n+            application.registered = false;\n+            registry.remove(entryId);\n+        }\n+        // compute rewards\n+        uint256 reward = amount.mul(dispensationPct) / PCT_BASE;\n+        vote.votersRewardPool = amount - reward;\n+\n+        // unlock tokens from Staking app\n+        staking.unlock(application.applicant, application.lockId);\n+        staking.unlock(challenge.challenger, challenge.lockId);\n+\n+        // redistribute tokens\n+        staking.moveTokens(loser, winner, reward);\n+        staking.moveTokens(loser, address(this), vote.votersRewardPool);\n+\n+        // Remove used locks\n+        delete(usedLocks[application.applicant][application.lockId]);\n+        delete(usedLocks[challenge.challenger][challenge.lockId]);\n+\n+        // Remove challenge, and application if needed\n+        if (vote.result == true) {\n+            delete(applications[entryId]);\n+        }\n+        delete(challenges[entryId]);\n+\n+        ResolvedChallenge(entryId, vote.result);\n+    }\n+\n+    /**\n+     * @notice Claim reward for a Challenge as a voter for vote with id `voteId`\n+     * @param voteId Id of the Vote\n+     */\n+    function claimReward(uint256 voteId) isInitialized public {\n+        require(votes[voteId].closed);\n+\n+        Vote storage vote = votes[voteId];\n+\n+        // avoid claiming twice\n+        require(!vote.claims[msg.sender]);\n+\n+        // register claim to avoid claiming it again\n+        vote.claims[msg.sender] = true;\n+\n+        // reward as a voter\n+        uint256 voterWinningStake = voting.getVoterWinningStake(voteId, msg.sender);\n+        require(voterWinningStake > 0);\n+        // rewardPool * (voter / total)\n+        uint256 reward = vote.votersRewardPool.mul(voterWinningStake) / vote.totalWinningStake;\n+        // Redistribute tokens\n+        staking.moveTokens(address(this), msg.sender, reward);","path":"contracts/Curation.sol","position":285,"original_position":285,"commit_id":"db8d13f281552fa76cafe6dd220279d0e28edf5e","original_commit_id":"db8d13f281552fa76cafe6dd220279d0e28edf5e","user":{"login":"izqui","id":447328,"node_id":"MDQ6VXNlcjQ0NzMyOA==","avatar_url":"https://avatars3.githubusercontent.com/u/447328?v=4","gravatar_id":"","url":"https://api.github.com/users/izqui","html_url":"https://github.com/izqui","followers_url":"https://api.github.com/users/izqui/followers","following_url":"https://api.github.com/users/izqui/following{/other_user}","gists_url":"https://api.github.com/users/izqui/gists{/gist_id}","starred_url":"https://api.github.com/users/izqui/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/izqui/subscriptions","organizations_url":"https://api.github.com/users/izqui/orgs","repos_url":"https://api.github.com/users/izqui/repos","events_url":"https://api.github.com/users/izqui/events{/privacy}","received_events_url":"https://api.github.com/users/izqui/received_events","type":"User","site_admin":false},"body":"Should emit an event as PLCR does when tokens are claimed","created_at":"2018-08-02T11:22:15Z","updated_at":"2018-08-02T11:36:45Z","html_url":"https://github.com/aragonlabs/curation/pull/13#discussion_r207190161","pull_request_url":"https://api.github.com/repos/aragonlabs/curation/pulls/13","author_association":"MEMBER","_links":{"self":{"href":"https://api.github.com/repos/aragonlabs/curation/pulls/comments/207190161"},"html":{"href":"https://github.com/aragonlabs/curation/pull/13#discussion_r207190161"},"pull_request":{"href":"https://api.github.com/repos/aragonlabs/curation/pulls/13"}}},"pull_request":{"url":"https://api.github.com/repos/aragonlabs/curation/pulls/13","id":196401282,"node_id":"MDExOlB1bGxSZXF1ZXN0MTk2NDAxMjgy","html_url":"https://github.com/aragonlabs/curation/pull/13","diff_url":"https://github.com/aragonlabs/curation/pull/13.diff","patch_url":"https://github.com/aragonlabs/curation/pull/13.patch","issue_url":"https://api.github.com/repos/aragonlabs/curation/issues/13","number":13,"state":"open","locked":false,"title":"Contracts first version","user":{"login":"bingen","id":701095,"node_id":"MDQ6VXNlcjcwMTA5NQ==","avatar_url":"https://avatars0.githubusercontent.com/u/701095?v=4","gravatar_id":"","url":"https://api.github.com/users/bingen","html_url":"https://github.com/bingen","followers_url":"https://api.github.com/users/bingen/followers","following_url":"https://api.github.com/users/bingen/following{/other_user}","gists_url":"https://api.github.com/users/bingen/gists{/gist_id}","starred_url":"https://api.github.com/users/bingen/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/bingen/subscriptions","organizations_url":"https://api.github.com/users/bingen/orgs","repos_url":"https://api.github.com/users/bingen/repos","events_url":"https://api.github.com/users/bingen/events{/privacy}","received_events_url":"https://api.github.com/users/bingen/received_events","type":"User","site_admin":false},"body":"First version of contracts and tests.\r\nFixes #1 ","created_at":"2018-06-21T10:10:34Z","updated_at":"2018-08-02T11:36:45Z","closed_at":null,"merged_at":null,"merge_commit_sha":"7f9d720fb0555ea9d7c723cc170067793665b3de","assignee":{"login":"bingen","id":701095,"node_id":"MDQ6VXNlcjcwMTA5NQ==","avatar_url":"https://avatars0.githubusercontent.com/u/701095?v=4","gravatar_id":"","url":"https://api.github.com/users/bingen","html_url":"https://github.com/bingen","followers_url":"https://api.github.com/users/bingen/followers","following_url":"https://api.github.com/users/bingen/following{/other_user}","gists_url":"https://api.github.com/users/bingen/gists{/gist_id}","starred_url":"https://api.github.com/users/bingen/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/bingen/subscriptions","organizations_url":"https://api.github.com/users/bingen/orgs","repos_url":"https://api.github.com/users/bingen/repos","events_url":"https://api.github.com/users/bingen/events{/privacy}","received_events_url":"https://api.github.com/users/bingen/received_events","type":"User","site_admin":false},"assignees":[{"login":"bingen","id":701095,"node_id":"MDQ6VXNlcjcwMTA5NQ==","avatar_url":"https://avatars0.githubusercontent.com/u/701095?v=4","gravatar_id":"","url":"https://api.github.com/users/bingen","html_url":"https://github.com/bingen","followers_url":"https://api.github.com/users/bingen/followers","following_url":"https://api.github.com/users/bingen/following{/other_user}","gists_url":"https://api.github.com/users/bingen/gists{/gist_id}","starred_url":"https://api.github.com/users/bingen/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/bingen/subscriptions","organizations_url":"https://api.github.com/users/bingen/orgs","repos_url":"https://api.github.com/users/bingen/repos","events_url":"https://api.github.com/users/bingen/events{/privacy}","received_events_url":"https://api.github.com/users/bingen/received_events","type":"User","site_admin":false}],"requested_reviewers":[{"login":"sohkai","id":4166642,"node_id":"MDQ6VXNlcjQxNjY2NDI=","avatar_url":"https://avatars2.githubusercontent.com/u/4166642?v=4","gravatar_id":"","url":"https://api.github.com/users/sohkai","html_url":"https://github.com/sohkai","followers_url":"https://api.github.com/users/sohkai/followers","following_url":"https://api.github.com/users/sohkai/following{/other_user}","gists_url":"https://api.github.com/users/sohkai/gists{/gist_id}","starred_url":"https://api.github.com/users/sohkai/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/sohkai/subscriptions","organizations_url":"https://api.github.com/users/sohkai/orgs","repos_url":"https://api.github.com/users/sohkai/repos","events_url":"https://api.github.com/users/sohkai/events{/privacy}","received_events_url":"https://api.github.com/users/sohkai/received_events","type":"User","site_admin":false}],"requested_teams":[],"labels":[{"id":965065131,"node_id":"MDU6TGFiZWw5NjUwNjUxMzE=","url":"https://api.github.com/repos/aragonlabs/curation/labels/component:%20contracts","name":"component: contracts","color":"f210f2","default":false},{"id":961486494,"node_id":"MDU6TGFiZWw5NjE0ODY0OTQ=","url":"https://api.github.com/repos/aragonlabs/curation/labels/epic:%20tcr","name":"epic: tcr","color":"d4bdf9","default":false},{"id":965065594,"node_id":"MDU6TGFiZWw5NjUwNjU1OTQ=","url":"https://api.github.com/repos/aragonlabs/curation/labels/new-app","name":"new-app","color":"fc716f","default":false},{"id":961486339,"node_id":"MDU6TGFiZWw5NjE0ODYzMzk=","url":"https://api.github.com/repos/aragonlabs/curation/labels/sprint:%200.5.2","name":"sprint: 0.5.2","color":"8aead7","default":false},{"id":965066057,"node_id":"MDU6TGFiZWw5NjUwNjYwNTc=","url":"https://api.github.com/repos/aragonlabs/curation/labels/status:%20needs%20review","name":"status: needs review","color":"c5def5","default":false}],"milestone":null,"commits_url":"https://api.github.com/repos/aragonlabs/curation/pulls/13/commits","review_comments_url":"https://api.github.com/repos/aragonlabs/curation/pulls/13/comments","review_comment_url":"https://api.github.com/repos/aragonlabs/curation/pulls/comments{/number}","comments_url":"https://api.github.com/repos/aragonlabs/curation/issues/13/comments","statuses_url":"https://api.github.com/repos/aragonlabs/curation/statuses/db8d13f281552fa76cafe6dd220279d0e28edf5e","head":{"label":"aragonlabs:contracts_first_version","ref":"contracts_first_version","sha":"db8d13f281552fa76cafe6dd220279d0e28edf5e","user":{"login":"aragonlabs","id":35189704,"node_id":"MDEyOk9yZ2FuaXphdGlvbjM1MTg5NzA0","avatar_url":"https://avatars1.githubusercontent.com/u/35189704?v=4","gravatar_id":"","url":"https://api.github.com/users/aragonlabs","html_url":"https://github.com/aragonlabs","followers_url":"https://api.github.com/users/aragonlabs/followers","following_url":"https://api.github.com/users/aragonlabs/following{/other_user}","gists_url":"https://api.github.com/users/aragonlabs/gists{/gist_id}","starred_url":"https://api.github.com/users/aragonlabs/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/aragonlabs/subscriptions","organizations_url":"https://api.github.com/users/aragonlabs/orgs","repos_url":"https://api.github.com/users/aragonlabs/repos","events_url":"https://api.github.com/users/aragonlabs/events{/privacy}","received_events_url":"https://api.github.com/users/aragonlabs/received_events","type":"Organization","site_admin":false},"repo":{"id":136951290,"node_id":"MDEwOlJlcG9zaXRvcnkxMzY5NTEyOTA=","name":"curation","full_name":"aragonlabs/curation","owner":{"login":"aragonlabs","id":35189704,"node_id":"MDEyOk9yZ2FuaXphdGlvbjM1MTg5NzA0","avatar_url":"https://avatars1.githubusercontent.com/u/35189704?v=4","gravatar_id":"","url":"https://api.github.com/users/aragonlabs","html_url":"https://github.com/aragonlabs","followers_url":"https://api.github.com/users/aragonlabs/followers","following_url":"https://api.github.com/users/aragonlabs/following{/other_user}","gists_url":"https://api.github.com/users/aragonlabs/gists{/gist_id}","starred_url":"https://api.github.com/users/aragonlabs/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/aragonlabs/subscriptions","organizations_url":"https://api.github.com/users/aragonlabs/orgs","repos_url":"https://api.github.com/users/aragonlabs/repos","events_url":"https://api.github.com/users/aragonlabs/events{/privacy}","received_events_url":"https://api.github.com/users/aragonlabs/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/aragonlabs/curation","description":"A curation app for TCRs","fork":false,"url":"https://api.github.com/repos/aragonlabs/curation","forks_url":"https://api.github.com/repos/aragonlabs/curation/forks","keys_url":"https://api.github.com/repos/aragonlabs/curation/keys{/key_id}","collaborators_url":"https://api.github.com/repos/aragonlabs/curation/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/aragonlabs/curation/teams","hooks_url":"https://api.github.com/repos/aragonlabs/curation/hooks","issue_events_url":"https://api.github.com/repos/aragonlabs/curation/issues/events{/number}","events_url":"https://api.github.com/repos/aragonlabs/curation/events","assignees_url":"https://api.github.com/repos/aragonlabs/curation/assignees{/user}","branches_url":"https://api.github.com/repos/aragonlabs/curation/branches{/branch}","tags_url":"https://api.github.com/repos/aragonlabs/curation/tags","blobs_url":"https://api.github.com/repos/aragonlabs/curation/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/aragonlabs/curation/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/aragonlabs/curation/git/refs{/sha}","trees_url":"https://api.github.com/repos/aragonlabs/curation/git/trees{/sha}","statuses_url":"https://api.github.com/repos/aragonlabs/curation/statuses/{sha}","languages_url":"https://api.github.com/repos/aragonlabs/curation/languages","stargazers_url":"https://api.github.com/repos/aragonlabs/curation/stargazers","contributors_url":"https://api.github.com/repos/aragonlabs/curation/contributors","subscribers_url":"https://api.github.com/repos/aragonlabs/curation/subscribers","subscription_url":"https://api.github.com/repos/aragonlabs/curation/subscription","commits_url":"https://api.github.com/repos/aragonlabs/curation/commits{/sha}","git_commits_url":"https://api.github.com/repos/aragonlabs/curation/git/commits{/sha}","comments_url":"https://api.github.com/repos/aragonlabs/curation/comments{/number}","issue_comment_url":"https://api.github.com/repos/aragonlabs/curation/issues/comments{/number}","contents_url":"https://api.github.com/repos/aragonlabs/curation/contents/{+path}","compare_url":"https://api.github.com/repos/aragonlabs/curation/compare/{base}...{head}","merges_url":"https://api.github.com/repos/aragonlabs/curation/merges","archive_url":"https://api.github.com/repos/aragonlabs/curation/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/aragonlabs/curation/downloads","issues_url":"https://api.github.com/repos/aragonlabs/curation/issues{/number}","pulls_url":"https://api.github.com/repos/aragonlabs/curation/pulls{/number}","milestones_url":"https://api.github.com/repos/aragonlabs/curation/milestones{/number}","notifications_url":"https://api.github.com/repos/aragonlabs/curation/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/aragonlabs/curation/labels{/name}","releases_url":"https://api.github.com/repos/aragonlabs/curation/releases{/id}","deployments_url":"https://api.github.com/repos/aragonlabs/curation/deployments","created_at":"2018-06-11T16:16:45Z","updated_at":"2018-06-12T13:59:11Z","pushed_at":"2018-07-24T16:55:45Z","git_url":"git://github.com/aragonlabs/curation.git","ssh_url":"git@github.com:aragonlabs/curation.git","clone_url":"https://github.com/aragonlabs/curation.git","svn_url":"https://github.com/aragonlabs/curation","homepage":null,"size":164,"stargazers_count":1,"watchers_count":1,"language":null,"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":7,"license":{"key":"agpl-3.0","name":"GNU Affero General Public License v3.0","spdx_id":"AGPL-3.0","url":"https://api.github.com/licenses/agpl-3.0","node_id":"MDc6TGljZW5zZTE="},"forks":0,"open_issues":7,"watchers":1,"default_branch":"master"}},"base":{"label":"aragonlabs:master","ref":"master","sha":"ba68059d34b10e5d02c999f6f8dab2d0fdde8075","user":{"login":"aragonlabs","id":35189704,"node_id":"MDEyOk9yZ2FuaXphdGlvbjM1MTg5NzA0","avatar_url":"https://avatars1.githubusercontent.com/u/35189704?v=4","gravatar_id":"","url":"https://api.github.com/users/aragonlabs","html_url":"https://github.com/aragonlabs","followers_url":"https://api.github.com/users/aragonlabs/followers","following_url":"https://api.github.com/users/aragonlabs/following{/other_user}","gists_url":"https://api.github.com/users/aragonlabs/gists{/gist_id}","starred_url":"https://api.github.com/users/aragonlabs/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/aragonlabs/subscriptions","organizations_url":"https://api.github.com/users/aragonlabs/orgs","repos_url":"https://api.github.com/users/aragonlabs/repos","events_url":"https://api.github.com/users/aragonlabs/events{/privacy}","received_events_url":"https://api.github.com/users/aragonlabs/received_events","type":"Organization","site_admin":false},"repo":{"id":136951290,"node_id":"MDEwOlJlcG9zaXRvcnkxMzY5NTEyOTA=","name":"curation","full_name":"aragonlabs/curation","owner":{"login":"aragonlabs","id":35189704,"node_id":"MDEyOk9yZ2FuaXphdGlvbjM1MTg5NzA0","avatar_url":"https://avatars1.githubusercontent.com/u/35189704?v=4","gravatar_id":"","url":"https://api.github.com/users/aragonlabs","html_url":"https://github.com/aragonlabs","followers_url":"https://api.github.com/users/aragonlabs/followers","following_url":"https://api.github.com/users/aragonlabs/following{/other_user}","gists_url":"https://api.github.com/users/aragonlabs/gists{/gist_id}","starred_url":"https://api.github.com/users/aragonlabs/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/aragonlabs/subscriptions","organizations_url":"https://api.github.com/users/aragonlabs/orgs","repos_url":"https://api.github.com/users/aragonlabs/repos","events_url":"https://api.github.com/users/aragonlabs/events{/privacy}","received_events_url":"https://api.github.com/users/aragonlabs/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/aragonlabs/curation","description":"A curation app for TCRs","fork":false,"url":"https://api.github.com/repos/aragonlabs/curation","forks_url":"https://api.github.com/repos/aragonlabs/curation/forks","keys_url":"https://api.github.com/repos/aragonlabs/curation/keys{/key_id}","collaborators_url":"https://api.github.com/repos/aragonlabs/curation/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/aragonlabs/curation/teams","hooks_url":"https://api.github.com/repos/aragonlabs/curation/hooks","issue_events_url":"https://api.github.com/repos/aragonlabs/curation/issues/events{/number}","events_url":"https://api.github.com/repos/aragonlabs/curation/events","assignees_url":"https://api.github.com/repos/aragonlabs/curation/assignees{/user}","branches_url":"https://api.github.com/repos/aragonlabs/curation/branches{/branch}","tags_url":"https://api.github.com/repos/aragonlabs/curation/tags","blobs_url":"https://api.github.com/repos/aragonlabs/curation/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/aragonlabs/curation/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/aragonlabs/curation/git/refs{/sha}","trees_url":"https://api.github.com/repos/aragonlabs/curation/git/trees{/sha}","statuses_url":"https://api.github.com/repos/aragonlabs/curation/statuses/{sha}","languages_url":"https://api.github.com/repos/aragonlabs/curation/languages","stargazers_url":"https://api.github.com/repos/aragonlabs/curation/stargazers","contributors_url":"https://api.github.com/repos/aragonlabs/curation/contributors","subscribers_url":"https://api.github.com/repos/aragonlabs/curation/subscribers","subscription_url":"https://api.github.com/repos/aragonlabs/curation/subscription","commits_url":"https://api.github.com/repos/aragonlabs/curation/commits{/sha}","git_commits_url":"https://api.github.com/repos/aragonlabs/curation/git/commits{/sha}","comments_url":"https://api.github.com/repos/aragonlabs/curation/comments{/number}","issue_comment_url":"https://api.github.com/repos/aragonlabs/curation/issues/comments{/number}","contents_url":"https://api.github.com/repos/aragonlabs/curation/contents/{+path}","compare_url":"https://api.github.com/repos/aragonlabs/curation/compare/{base}...{head}","merges_url":"https://api.github.com/repos/aragonlabs/curation/merges","archive_url":"https://api.github.com/repos/aragonlabs/curation/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/aragonlabs/curation/downloads","issues_url":"https://api.github.com/repos/aragonlabs/curation/issues{/number}","pulls_url":"https://api.github.com/repos/aragonlabs/curation/pulls{/number}","milestones_url":"https://api.github.com/repos/aragonlabs/curation/milestones{/number}","notifications_url":"https://api.github.com/repos/aragonlabs/curation/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/aragonlabs/curation/labels{/name}","releases_url":"https://api.github.com/repos/aragonlabs/curation/releases{/id}","deployments_url":"https://api.github.com/repos/aragonlabs/curation/deployments","created_at":"2018-06-11T16:16:45Z","updated_at":"2018-06-12T13:59:11Z","pushed_at":"2018-07-24T16:55:45Z","git_url":"git://github.com/aragonlabs/curation.git","ssh_url":"git@github.com:aragonlabs/curation.git","clone_url":"https://github.com/aragonlabs/curation.git","svn_url":"https://github.com/aragonlabs/curation","homepage":null,"size":164,"stargazers_count":1,"watchers_count":1,"language":null,"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":7,"license":{"key":"agpl-3.0","name":"GNU Affero General Public License v3.0","spdx_id":"AGPL-3.0","url":"https://api.github.com/licenses/agpl-3.0","node_id":"MDc6TGljZW5zZTE="},"forks":0,"open_issues":7,"watchers":1,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/aragonlabs/curation/pulls/13"},"html":{"href":"https://github.com/aragonlabs/curation/pull/13"},"issue":{"href":"https://api.github.com/repos/aragonlabs/curation/issues/13"},"comments":{"href":"https://api.github.com/repos/aragonlabs/curation/issues/13/comments"},"review_comments":{"href":"https://api.github.com/repos/aragonlabs/curation/pulls/13/comments"},"review_comment":{"href":"https://api.github.com/repos/aragonlabs/curation/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/aragonlabs/curation/pulls/13/commits"},"statuses":{"href":"https://api.github.com/repos/aragonlabs/curation/statuses/db8d13f281552fa76cafe6dd220279d0e28edf5e"}},"author_association":"COLLABORATOR"}}
{"actor":{"display_login":"izqui"}}