{"action":"created","comment":{"url":"https://api.github.com/repos/aeternity/epoch/pulls/comments/215869241","pull_request_review_id":153229794,"id":215869241,"node_id":"MDI0OlB1bGxSZXF1ZXN0UmV2aWV3Q29tbWVudDIxNTg2OTI0MQ==","diff_hunk":"@@ -730,6 +750,170 @@ sophia_oracles(_Cfg) ->\n     {some, Answer} = ?call(call_contract, Acc, Ct1, complexOracle, {option, AnswerType}, {Question1, 0}),\n     ok.\n \n+%% Oracle TTL tests\n+\n+%% Tests are checked by a little state machine keeping track of a single oracle\n+%% and query.\n+interpret_ttl(St, Cmds) ->\n+    interpret_ttl(St, 0, Cmds).\n+\n+interpret_ttl(St, _, []) -> St;\n+interpret_ttl(St, H, [{H, Cmd} | Rest]) ->\n+    ?call(perform_pre_transformations, H),\n+    St1 = step_ttl(St, H, Cmd),\n+    interpret_ttl(St1, H + 1, Rest);\n+interpret_ttl(St, H, Cmds) ->\n+    ?call(perform_pre_transformations, H),\n+    interpret_ttl(St, H + 1, Cmds).\n+\n+ttl_height(H, {delta, D}) -> D + H;\n+ttl_height(_, {block, H}) -> H.\n+\n+%% Run a single transaction from an Oracle TTL scenario and check the results.\n+step_ttl(St = #{ account := Acc, contract := Ct }, Height, Cmd) ->\n+    Enc = fun({delta, D}) -> {variant, 0, [D]};\n+             ({block, H}) -> {variant, 1, [H]} end,\n+    QFee = 10,\n+    Error = {error, <<\"out_of_gas\">>},\n+    io:format(\"-- At height ~p --\\nState ~p\\nTransaction: ~p\\n\", [Height, St, Cmd]),\n+    case Cmd of\n+        {create, TTL} ->\n+            Oracle = ?call(call_contract, Acc, Ct, registerOracle, word, {Ct, 0, QFee, Enc(TTL)}, #{ height => Height }),\n+            St#{ oracle => Oracle, oracle_ttl => ttl_height(Height, TTL) };\n+        {extend, TTL} ->\n+            #{ oracle := Oracle, oracle_ttl := TTLo } = St,\n+            Res = ?call(call_contract, Acc, Ct, extendOracle, {tuple, []}, {Oracle, 0, Enc(TTL)}, #{ height => Height }),\n+            case TTLo >= Height of  %% Can't extend after expiry\n+                true  -> St#{ oracle_ttl => ttl_height(TTLo, TTL) }; %% Extend relative to previous expiry\n+                false -> Error = Res, St\n+            end;\n+        {query, TTLq, TTLr} ->\n+            #{ oracle := Oracle, oracle_ttl := TTLo } = St,\n+            Res = ?call(call_contract, Acc, Ct, createQuery, word, {Oracle, <<\"?\">>, QFee, Enc(TTLq), Enc(TTLr)},\n+                                         #{ height => Height, amount => QFee }),\n+            AbsTTLq = ttl_height(Height, TTLq),\n+            AbsTTLr = ttl_height(AbsTTLq, TTLr),\n+            %% Latest possible response expiry must be before oracle expiry and\n+            %% response TTL must be relative.\n+            case TTLo >= AbsTTLr andalso element(1, TTLr) == delta of\n+                true ->\n+                    true = is_integer(Res),\n+                    St#{ query => Res, query_ttl => AbsTTLq, reply_ttl => TTLr };\n+                _ -> Error = Res, St\n+            end;\n+        respond ->\n+            #{ oracle := Oracle, query := Query, query_ttl := TTLq, reply_ttl := TTLr } = St,\n+            Res = ?call(call_contract, Acc, Ct, respond, {tuple, []}, {Oracle, Query, 0, 42}, #{ height => Height }),\n+            case TTLq >= Height of  %% Query must not have expired\n+                true  -> St#{ reply_ttl => ttl_height(Height, TTLr) };\n+                false -> Error = Res, St\n+            end;\n+        getAnswer ->\n+            #{ oracle := Oracle, query := Query, reply_ttl := TTLr } = St,\n+            ExpectedRes = case TTLr >= Height of   %% Response must not have expired,\n+                            true  -> {some, 42};   %% and we only ask after responding.\n+                            false -> none\n+                          end,\n+            ExpectedRes = ?call(call_contract, Acc, Ct, getAnswer, {option, word}, {Oracle, Query}, #{ height => Height }),\n+            St\n+    end.\n+\n+ttls(Now, Ts) ->\n+    [{block, T} || T <- Ts] ++\n+    [{delta, T - Now} || T <- Ts, T > Now].\n+\n+%% Base scenario for setting up and possibly extending an oracle.\n+ttl_scenario_create_and_extend(Start0, Extend0, Stop0) ->\n+    List = fun(X) when is_list(X) -> X; (X) -> [X] end,\n+    [ [ {Start,  {create, TTLo}} ] ++\n+      [ {Extend, {extend, TTLe}} || Extend /= false ]\n+      || Start <- List(Start0), Extend <- List(Extend0), Stop <- List(Stop0),\n+         TTLo <- [ T || Extend == false, T <- ttls(Start, [Stop]) ] ++\n+                 [ T || Extend /= false, T <- ttls(Start, [Extend + 5]) ],\n+         TTLe <- [ 0 || Extend == false ] ++\n+                 [ T || Extend /= false, T <- ttls(ttl_height(Start, TTLo), [Stop]) ] ].\n+\n+%% Base scenario for setting up a query\n+ttl_scenario_create_query(Start0, Extend0, Query0, QTTL0, RTTL0, Stop0) ->\n+    List = fun(X) when is_list(X) -> X; (X) -> [X] end,\n+    [ combine_ttl_scenarios(Setup, [{Query, {query, QTTL, {delta, RTTL}}}])\n+    || Setup <- ttl_scenario_create_and_extend(Start0, Extend0, Stop0),\n+       Query <- List(Query0),\n+       QTTL  <- ttls(Query, List(QTTL0)),\n+       RTTL  <- List(RTTL0) ].\n+\n+%% Extending an oracle must be done before expiry.\n+ttl_scenario_extend_after_expiry() ->\n+    [ [ {10, {create, TTLo}},\n+        {20, {extend, TTLe}} ]\n+    || TTLo <- ttls(10, [15]),\n+       TTLe <- ttls(20, [25]) ].","path":"apps/aecontract/test/aecontract_SUITE.erl","position":198,"original_position":180,"commit_id":"0adce030316d79ce5078ebe8035ff03153752f83","original_commit_id":"a7740e9cc06e47a968cc2fd0713fd2e953949db6","user":{"login":"UlfNorell","id":447950,"node_id":"MDQ6VXNlcjQ0Nzk1MA==","avatar_url":"https://avatars0.githubusercontent.com/u/447950?v=4","gravatar_id":"","url":"https://api.github.com/users/UlfNorell","html_url":"https://github.com/UlfNorell","followers_url":"https://api.github.com/users/UlfNorell/followers","following_url":"https://api.github.com/users/UlfNorell/following{/other_user}","gists_url":"https://api.github.com/users/UlfNorell/gists{/gist_id}","starred_url":"https://api.github.com/users/UlfNorell/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/UlfNorell/subscriptions","organizations_url":"https://api.github.com/users/UlfNorell/orgs","repos_url":"https://api.github.com/users/UlfNorell/repos","events_url":"https://api.github.com/users/UlfNorell/events{/privacy}","received_events_url":"https://api.github.com/users/UlfNorell/received_events","type":"User","site_admin":false},"body":"I've added tests for this (0adce03).","created_at":"2018-09-07T07:29:08Z","updated_at":"2018-09-07T07:29:08Z","html_url":"https://github.com/aeternity/epoch/pull/1493#discussion_r215869241","pull_request_url":"https://api.github.com/repos/aeternity/epoch/pulls/1493","author_association":"CONTRIBUTOR","_links":{"self":{"href":"https://api.github.com/repos/aeternity/epoch/pulls/comments/215869241"},"html":{"href":"https://github.com/aeternity/epoch/pull/1493#discussion_r215869241"},"pull_request":{"href":"https://api.github.com/repos/aeternity/epoch/pulls/1493"}},"in_reply_to_id":213676394},"pull_request":{"url":"https://api.github.com/repos/aeternity/epoch/pulls/1493","id":211101052,"node_id":"MDExOlB1bGxSZXF1ZXN0MjExMTAxMDUy","html_url":"https://github.com/aeternity/epoch/pull/1493","diff_url":"https://github.com/aeternity/epoch/pull/1493.diff","patch_url":"https://github.com/aeternity/epoch/pull/1493.patch","issue_url":"https://api.github.com/repos/aeternity/epoch/issues/1493","number":1493,"state":"open","locked":false,"title":"PT-157931784 Sophia TTL type","user":{"login":"UlfNorell","id":447950,"node_id":"MDQ6VXNlcjQ0Nzk1MA==","avatar_url":"https://avatars0.githubusercontent.com/u/447950?v=4","gravatar_id":"","url":"https://api.github.com/users/UlfNorell","html_url":"https://github.com/UlfNorell","followers_url":"https://api.github.com/users/UlfNorell/followers","following_url":"https://api.github.com/users/UlfNorell/following{/other_user}","gists_url":"https://api.github.com/users/UlfNorell/gists{/gist_id}","starred_url":"https://api.github.com/users/UlfNorell/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/UlfNorell/subscriptions","organizations_url":"https://api.github.com/users/UlfNorell/orgs","repos_url":"https://api.github.com/users/UlfNorell/repos","events_url":"https://api.github.com/users/UlfNorell/events{/privacy}","received_events_url":"https://api.github.com/users/UlfNorell/received_events","type":"User","site_admin":false},"body":"Closes [PT-157931784](https://www.pivotaltracker.com/story/show/157931784).\r\n\r\nAdds a builtin datatype\r\n```\r\ndatatype Chain.ttl = RelativeTTL(int) | FixedTTL(int)\r\n```\r\nand changes the Oracle API to take values of this type instead of plain `int`s.","created_at":"2018-08-27T12:55:44Z","updated_at":"2018-09-07T07:29:08Z","closed_at":null,"merged_at":null,"merge_commit_sha":"d35e9fdc44efc34d999390e8b0dfa0078b3cf94f","assignee":{"login":"UlfNorell","id":447950,"node_id":"MDQ6VXNlcjQ0Nzk1MA==","avatar_url":"https://avatars0.githubusercontent.com/u/447950?v=4","gravatar_id":"","url":"https://api.github.com/users/UlfNorell","html_url":"https://github.com/UlfNorell","followers_url":"https://api.github.com/users/UlfNorell/followers","following_url":"https://api.github.com/users/UlfNorell/following{/other_user}","gists_url":"https://api.github.com/users/UlfNorell/gists{/gist_id}","starred_url":"https://api.github.com/users/UlfNorell/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/UlfNorell/subscriptions","organizations_url":"https://api.github.com/users/UlfNorell/orgs","repos_url":"https://api.github.com/users/UlfNorell/repos","events_url":"https://api.github.com/users/UlfNorell/events{/privacy}","received_events_url":"https://api.github.com/users/UlfNorell/received_events","type":"User","site_admin":false},"assignees":[{"login":"UlfNorell","id":447950,"node_id":"MDQ6VXNlcjQ0Nzk1MA==","avatar_url":"https://avatars0.githubusercontent.com/u/447950?v=4","gravatar_id":"","url":"https://api.github.com/users/UlfNorell","html_url":"https://github.com/UlfNorell","followers_url":"https://api.github.com/users/UlfNorell/followers","following_url":"https://api.github.com/users/UlfNorell/following{/other_user}","gists_url":"https://api.github.com/users/UlfNorell/gists{/gist_id}","starred_url":"https://api.github.com/users/UlfNorell/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/UlfNorell/subscriptions","organizations_url":"https://api.github.com/users/UlfNorell/orgs","repos_url":"https://api.github.com/users/UlfNorell/repos","events_url":"https://api.github.com/users/UlfNorell/events{/privacy}","received_events_url":"https://api.github.com/users/UlfNorell/received_events","type":"User","site_admin":false}],"requested_reviewers":[{"login":"happi","id":158428,"node_id":"MDQ6VXNlcjE1ODQyOA==","avatar_url":"https://avatars2.githubusercontent.com/u/158428?v=4","gravatar_id":"","url":"https://api.github.com/users/happi","html_url":"https://github.com/happi","followers_url":"https://api.github.com/users/happi/followers","following_url":"https://api.github.com/users/happi/following{/other_user}","gists_url":"https://api.github.com/users/happi/gists{/gist_id}","starred_url":"https://api.github.com/users/happi/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/happi/subscriptions","organizations_url":"https://api.github.com/users/happi/orgs","repos_url":"https://api.github.com/users/happi/repos","events_url":"https://api.github.com/users/happi/events{/privacy}","received_events_url":"https://api.github.com/users/happi/received_events","type":"User","site_admin":false}],"requested_teams":[],"labels":[{"id":824064814,"node_id":"MDU6TGFiZWw4MjQwNjQ4MTQ=","url":"https://api.github.com/repos/aeternity/epoch/labels/WIP","name":"WIP","color":"cccccc","default":false}],"milestone":null,"commits_url":"https://api.github.com/repos/aeternity/epoch/pulls/1493/commits","review_comments_url":"https://api.github.com/repos/aeternity/epoch/pulls/1493/comments","review_comment_url":"https://api.github.com/repos/aeternity/epoch/pulls/comments{/number}","comments_url":"https://api.github.com/repos/aeternity/epoch/issues/1493/comments","statuses_url":"https://api.github.com/repos/aeternity/epoch/statuses/0adce030316d79ce5078ebe8035ff03153752f83","head":{"label":"aeternity:PT-157931784-sophia-ttl-type","ref":"PT-157931784-sophia-ttl-type","sha":"0adce030316d79ce5078ebe8035ff03153752f83","user":{"login":"aeternity","id":21989234,"node_id":"MDEyOk9yZ2FuaXphdGlvbjIxOTg5MjM0","avatar_url":"https://avatars1.githubusercontent.com/u/21989234?v=4","gravatar_id":"","url":"https://api.github.com/users/aeternity","html_url":"https://github.com/aeternity","followers_url":"https://api.github.com/users/aeternity/followers","following_url":"https://api.github.com/users/aeternity/following{/other_user}","gists_url":"https://api.github.com/users/aeternity/gists{/gist_id}","starred_url":"https://api.github.com/users/aeternity/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/aeternity/subscriptions","organizations_url":"https://api.github.com/users/aeternity/orgs","repos_url":"https://api.github.com/users/aeternity/repos","events_url":"https://api.github.com/users/aeternity/events{/privacy}","received_events_url":"https://api.github.com/users/aeternity/received_events","type":"Organization","site_admin":false},"repo":{"id":99802036,"node_id":"MDEwOlJlcG9zaXRvcnk5OTgwMjAzNg==","name":"epoch","full_name":"aeternity/epoch","owner":{"login":"aeternity","id":21989234,"node_id":"MDEyOk9yZ2FuaXphdGlvbjIxOTg5MjM0","avatar_url":"https://avatars1.githubusercontent.com/u/21989234?v=4","gravatar_id":"","url":"https://api.github.com/users/aeternity","html_url":"https://github.com/aeternity","followers_url":"https://api.github.com/users/aeternity/followers","following_url":"https://api.github.com/users/aeternity/following{/other_user}","gists_url":"https://api.github.com/users/aeternity/gists{/gist_id}","starred_url":"https://api.github.com/users/aeternity/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/aeternity/subscriptions","organizations_url":"https://api.github.com/users/aeternity/orgs","repos_url":"https://api.github.com/users/aeternity/repos","events_url":"https://api.github.com/users/aeternity/events{/privacy}","received_events_url":"https://api.github.com/users/aeternity/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/aeternity/epoch","description":"æternity testnet: solving scalability problems by making sense of state-channels ","fork":false,"url":"https://api.github.com/repos/aeternity/epoch","forks_url":"https://api.github.com/repos/aeternity/epoch/forks","keys_url":"https://api.github.com/repos/aeternity/epoch/keys{/key_id}","collaborators_url":"https://api.github.com/repos/aeternity/epoch/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/aeternity/epoch/teams","hooks_url":"https://api.github.com/repos/aeternity/epoch/hooks","issue_events_url":"https://api.github.com/repos/aeternity/epoch/issues/events{/number}","events_url":"https://api.github.com/repos/aeternity/epoch/events","assignees_url":"https://api.github.com/repos/aeternity/epoch/assignees{/user}","branches_url":"https://api.github.com/repos/aeternity/epoch/branches{/branch}","tags_url":"https://api.github.com/repos/aeternity/epoch/tags","blobs_url":"https://api.github.com/repos/aeternity/epoch/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/aeternity/epoch/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/aeternity/epoch/git/refs{/sha}","trees_url":"https://api.github.com/repos/aeternity/epoch/git/trees{/sha}","statuses_url":"https://api.github.com/repos/aeternity/epoch/statuses/{sha}","languages_url":"https://api.github.com/repos/aeternity/epoch/languages","stargazers_url":"https://api.github.com/repos/aeternity/epoch/stargazers","contributors_url":"https://api.github.com/repos/aeternity/epoch/contributors","subscribers_url":"https://api.github.com/repos/aeternity/epoch/subscribers","subscription_url":"https://api.github.com/repos/aeternity/epoch/subscription","commits_url":"https://api.github.com/repos/aeternity/epoch/commits{/sha}","git_commits_url":"https://api.github.com/repos/aeternity/epoch/git/commits{/sha}","comments_url":"https://api.github.com/repos/aeternity/epoch/comments{/number}","issue_comment_url":"https://api.github.com/repos/aeternity/epoch/issues/comments{/number}","contents_url":"https://api.github.com/repos/aeternity/epoch/contents/{+path}","compare_url":"https://api.github.com/repos/aeternity/epoch/compare/{base}...{head}","merges_url":"https://api.github.com/repos/aeternity/epoch/merges","archive_url":"https://api.github.com/repos/aeternity/epoch/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/aeternity/epoch/downloads","issues_url":"https://api.github.com/repos/aeternity/epoch/issues{/number}","pulls_url":"https://api.github.com/repos/aeternity/epoch/pulls{/number}","milestones_url":"https://api.github.com/repos/aeternity/epoch/milestones{/number}","notifications_url":"https://api.github.com/repos/aeternity/epoch/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/aeternity/epoch/labels{/name}","releases_url":"https://api.github.com/repos/aeternity/epoch/releases{/id}","deployments_url":"https://api.github.com/repos/aeternity/epoch/deployments","created_at":"2017-08-09T11:44:30Z","updated_at":"2018-09-07T07:22:47Z","pushed_at":"2018-09-07T07:20:30Z","git_url":"git://github.com/aeternity/epoch.git","ssh_url":"git@github.com:aeternity/epoch.git","clone_url":"https://github.com/aeternity/epoch.git","svn_url":"https://github.com/aeternity/epoch","homepage":"http://www.aeternity.com","size":9650,"stargazers_count":653,"watchers_count":653,"language":"Erlang","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":114,"mirror_url":null,"archived":false,"open_issues_count":18,"license":{"key":"isc","name":"ISC License","spdx_id":"ISC","url":"https://api.github.com/licenses/isc","node_id":"MDc6TGljZW5zZTEw"},"forks":114,"open_issues":18,"watchers":653,"default_branch":"master"}},"base":{"label":"aeternity:master","ref":"master","sha":"40bd3dd9cf1293bcf252881b8610b385c85f1c18","user":{"login":"aeternity","id":21989234,"node_id":"MDEyOk9yZ2FuaXphdGlvbjIxOTg5MjM0","avatar_url":"https://avatars1.githubusercontent.com/u/21989234?v=4","gravatar_id":"","url":"https://api.github.com/users/aeternity","html_url":"https://github.com/aeternity","followers_url":"https://api.github.com/users/aeternity/followers","following_url":"https://api.github.com/users/aeternity/following{/other_user}","gists_url":"https://api.github.com/users/aeternity/gists{/gist_id}","starred_url":"https://api.github.com/users/aeternity/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/aeternity/subscriptions","organizations_url":"https://api.github.com/users/aeternity/orgs","repos_url":"https://api.github.com/users/aeternity/repos","events_url":"https://api.github.com/users/aeternity/events{/privacy}","received_events_url":"https://api.github.com/users/aeternity/received_events","type":"Organization","site_admin":false},"repo":{"id":99802036,"node_id":"MDEwOlJlcG9zaXRvcnk5OTgwMjAzNg==","name":"epoch","full_name":"aeternity/epoch","owner":{"login":"aeternity","id":21989234,"node_id":"MDEyOk9yZ2FuaXphdGlvbjIxOTg5MjM0","avatar_url":"https://avatars1.githubusercontent.com/u/21989234?v=4","gravatar_id":"","url":"https://api.github.com/users/aeternity","html_url":"https://github.com/aeternity","followers_url":"https://api.github.com/users/aeternity/followers","following_url":"https://api.github.com/users/aeternity/following{/other_user}","gists_url":"https://api.github.com/users/aeternity/gists{/gist_id}","starred_url":"https://api.github.com/users/aeternity/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/aeternity/subscriptions","organizations_url":"https://api.github.com/users/aeternity/orgs","repos_url":"https://api.github.com/users/aeternity/repos","events_url":"https://api.github.com/users/aeternity/events{/privacy}","received_events_url":"https://api.github.com/users/aeternity/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/aeternity/epoch","description":"æternity testnet: solving scalability problems by making sense of state-channels ","fork":false,"url":"https://api.github.com/repos/aeternity/epoch","forks_url":"https://api.github.com/repos/aeternity/epoch/forks","keys_url":"https://api.github.com/repos/aeternity/epoch/keys{/key_id}","collaborators_url":"https://api.github.com/repos/aeternity/epoch/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/aeternity/epoch/teams","hooks_url":"https://api.github.com/repos/aeternity/epoch/hooks","issue_events_url":"https://api.github.com/repos/aeternity/epoch/issues/events{/number}","events_url":"https://api.github.com/repos/aeternity/epoch/events","assignees_url":"https://api.github.com/repos/aeternity/epoch/assignees{/user}","branches_url":"https://api.github.com/repos/aeternity/epoch/branches{/branch}","tags_url":"https://api.github.com/repos/aeternity/epoch/tags","blobs_url":"https://api.github.com/repos/aeternity/epoch/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/aeternity/epoch/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/aeternity/epoch/git/refs{/sha}","trees_url":"https://api.github.com/repos/aeternity/epoch/git/trees{/sha}","statuses_url":"https://api.github.com/repos/aeternity/epoch/statuses/{sha}","languages_url":"https://api.github.com/repos/aeternity/epoch/languages","stargazers_url":"https://api.github.com/repos/aeternity/epoch/stargazers","contributors_url":"https://api.github.com/repos/aeternity/epoch/contributors","subscribers_url":"https://api.github.com/repos/aeternity/epoch/subscribers","subscription_url":"https://api.github.com/repos/aeternity/epoch/subscription","commits_url":"https://api.github.com/repos/aeternity/epoch/commits{/sha}","git_commits_url":"https://api.github.com/repos/aeternity/epoch/git/commits{/sha}","comments_url":"https://api.github.com/repos/aeternity/epoch/comments{/number}","issue_comment_url":"https://api.github.com/repos/aeternity/epoch/issues/comments{/number}","contents_url":"https://api.github.com/repos/aeternity/epoch/contents/{+path}","compare_url":"https://api.github.com/repos/aeternity/epoch/compare/{base}...{head}","merges_url":"https://api.github.com/repos/aeternity/epoch/merges","archive_url":"https://api.github.com/repos/aeternity/epoch/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/aeternity/epoch/downloads","issues_url":"https://api.github.com/repos/aeternity/epoch/issues{/number}","pulls_url":"https://api.github.com/repos/aeternity/epoch/pulls{/number}","milestones_url":"https://api.github.com/repos/aeternity/epoch/milestones{/number}","notifications_url":"https://api.github.com/repos/aeternity/epoch/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/aeternity/epoch/labels{/name}","releases_url":"https://api.github.com/repos/aeternity/epoch/releases{/id}","deployments_url":"https://api.github.com/repos/aeternity/epoch/deployments","created_at":"2017-08-09T11:44:30Z","updated_at":"2018-09-07T07:22:47Z","pushed_at":"2018-09-07T07:20:30Z","git_url":"git://github.com/aeternity/epoch.git","ssh_url":"git@github.com:aeternity/epoch.git","clone_url":"https://github.com/aeternity/epoch.git","svn_url":"https://github.com/aeternity/epoch","homepage":"http://www.aeternity.com","size":9650,"stargazers_count":653,"watchers_count":653,"language":"Erlang","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":114,"mirror_url":null,"archived":false,"open_issues_count":18,"license":{"key":"isc","name":"ISC License","spdx_id":"ISC","url":"https://api.github.com/licenses/isc","node_id":"MDc6TGljZW5zZTEw"},"forks":114,"open_issues":18,"watchers":653,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/aeternity/epoch/pulls/1493"},"html":{"href":"https://github.com/aeternity/epoch/pull/1493"},"issue":{"href":"https://api.github.com/repos/aeternity/epoch/issues/1493"},"comments":{"href":"https://api.github.com/repos/aeternity/epoch/issues/1493/comments"},"review_comments":{"href":"https://api.github.com/repos/aeternity/epoch/pulls/1493/comments"},"review_comment":{"href":"https://api.github.com/repos/aeternity/epoch/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/aeternity/epoch/pulls/1493/commits"},"statuses":{"href":"https://api.github.com/repos/aeternity/epoch/statuses/0adce030316d79ce5078ebe8035ff03153752f83"}},"author_association":"CONTRIBUTOR"}}
{"actor":{"display_login":"UlfNorell"}}