{"action":"closed","number":105,"pull_request":{"url":"https://api.github.com/repos/pipermerriam/populus/pulls/105","id":78062255,"html_url":"https://github.com/pipermerriam/populus/pull/105","diff_url":"https://github.com/pipermerriam/populus/pull/105.diff","patch_url":"https://github.com/pipermerriam/populus/pull/105.patch","issue_url":"https://api.github.com/repos/pipermerriam/populus/issues/105","number":105,"state":"closed","locked":false,"title":"Refactor for initial 1.0.0 stable release","user":{"login":"pipermerriam","id":824194,"avatar_url":"https://avatars.githubusercontent.com/u/824194?v=3","gravatar_id":"","url":"https://api.github.com/users/pipermerriam","html_url":"https://github.com/pipermerriam","followers_url":"https://api.github.com/users/pipermerriam/followers","following_url":"https://api.github.com/users/pipermerriam/following{/other_user}","gists_url":"https://api.github.com/users/pipermerriam/gists{/gist_id}","starred_url":"https://api.github.com/users/pipermerriam/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/pipermerriam/subscriptions","organizations_url":"https://api.github.com/users/pipermerriam/orgs","repos_url":"https://api.github.com/users/pipermerriam/repos","events_url":"https://api.github.com/users/pipermerriam/events{/privacy}","received_events_url":"https://api.github.com/users/pipermerriam/received_events","type":"User","site_admin":false},"body":"### What was wrong?\r\n\r\nPopulus evolved organically during the months of development on the ethereum alarm clock project.  As the codebase matured certain portions of the codebase looked like they would be better served as stand-alone libraries and have since been extracted.\r\n\r\n* Solidity compilation -> https://github.com/pipermerriam/py-solc\r\n* Running Geth -> https://github.com/pipermerriam/py-geth\r\n* Blockchain interactions -> https://github.com/pipermerriam/web3.py\r\n\r\nIt also became clear that some of the features which were hacked in quickly were not going to get the attention they deserved, or were just wrong for populus.\r\n\r\n* `populus attach` attempted to load the user into a python shell similar to `geth attach`.  This command was buggy and was of limited usefulness.\r\n* `populus web` was a response to other Ethereum frameworks that were focusing more on browser based DApp development.  This feature was never taken any further than a hacky initial implementation.\r\n\r\nOther things also arose from working with the library.\r\n\r\n* The separation of `./contracts/` and `./libraries/` was not a good choice.\r\n* The [known contracts](https://github.com/pipermerriam/populus/pull/54) feature wasn't the right abstraction.  I appreciate the contribution by @RCL-Carl but I am now convinced that something like [truffle's migrations](http://truffle.readthedocs.io/en/latest/getting_started/migrations/) is the right way to go.\r\n\r\nGiven the limited resources I have to put towards the project, the *best* way forward seemed to be a massive breaking change to get the codebase to a point where it can move forward again.\r\n\r\n### How was it fixed?\r\n\r\nAt the time of writing, this PR is +2,500 / -15,500 lines of code.  There is a *lot* of deletion included here.  I've refactored the library down to what boils down to the following base functionality.\r\n\r\n* `$ populus compile` for contract compilation.\r\n* `$ populus deploy` for contract deployment.\r\n* `$ populus chain` for running development chains.\r\n* `$ populus init` for basic project initialization.\r\n* The `pytest` fixtures for testing.\r\n\r\n#### Cute Animal Picture\r\n\r\n> put a cute animal picture here.\r\n\r\n![29-tiny-baby-animals-so-cute-they-will-take-your-cares-away-01](https://cloud.githubusercontent.com/assets/824194/17195471/188f5fba-541b-11e6-95ae-0c081f572c42.jpg)\r\n","created_at":"2016-07-19T22:45:32Z","updated_at":"2016-07-28T04:33:41Z","closed_at":"2016-07-28T04:33:40Z","merged_at":"2016-07-28T04:33:40Z","merge_commit_sha":"539d090d989d8103a80ddedeb03869403bfa38bf","assignee":null,"assignees":[],"milestone":null,"commits_url":"https://api.github.com/repos/pipermerriam/populus/pulls/105/commits","review_comments_url":"https://api.github.com/repos/pipermerriam/populus/pulls/105/comments","review_comment_url":"https://api.github.com/repos/pipermerriam/populus/pulls/comments{/number}","comments_url":"https://api.github.com/repos/pipermerriam/populus/issues/105/comments","statuses_url":"https://api.github.com/repos/pipermerriam/populus/statuses/a7c7e911b5de2ba4b35c4cb1d1af95ab3a94dcf6","head":{"label":"pipermerriam:piper/major-refactor-for-initial-stable-release","ref":"piper/major-refactor-for-initial-stable-release","sha":"a7c7e911b5de2ba4b35c4cb1d1af95ab3a94dcf6","user":{"login":"pipermerriam","id":824194,"avatar_url":"https://avatars.githubusercontent.com/u/824194?v=3","gravatar_id":"","url":"https://api.github.com/users/pipermerriam","html_url":"https://github.com/pipermerriam","followers_url":"https://api.github.com/users/pipermerriam/followers","following_url":"https://api.github.com/users/pipermerriam/following{/other_user}","gists_url":"https://api.github.com/users/pipermerriam/gists{/gist_id}","starred_url":"https://api.github.com/users/pipermerriam/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/pipermerriam/subscriptions","organizations_url":"https://api.github.com/users/pipermerriam/orgs","repos_url":"https://api.github.com/users/pipermerriam/repos","events_url":"https://api.github.com/users/pipermerriam/events{/privacy}","received_events_url":"https://api.github.com/users/pipermerriam/received_events","type":"User","site_admin":false},"repo":{"id":41007839,"name":"populus","full_name":"pipermerriam/populus","owner":{"login":"pipermerriam","id":824194,"avatar_url":"https://avatars.githubusercontent.com/u/824194?v=3","gravatar_id":"","url":"https://api.github.com/users/pipermerriam","html_url":"https://github.com/pipermerriam","followers_url":"https://api.github.com/users/pipermerriam/followers","following_url":"https://api.github.com/users/pipermerriam/following{/other_user}","gists_url":"https://api.github.com/users/pipermerriam/gists{/gist_id}","starred_url":"https://api.github.com/users/pipermerriam/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/pipermerriam/subscriptions","organizations_url":"https://api.github.com/users/pipermerriam/orgs","repos_url":"https://api.github.com/users/pipermerriam/repos","events_url":"https://api.github.com/users/pipermerriam/events{/privacy}","received_events_url":"https://api.github.com/users/pipermerriam/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/pipermerriam/populus","description":"Ethereum Contract Development Framework","fork":false,"url":"https://api.github.com/repos/pipermerriam/populus","forks_url":"https://api.github.com/repos/pipermerriam/populus/forks","keys_url":"https://api.github.com/repos/pipermerriam/populus/keys{/key_id}","collaborators_url":"https://api.github.com/repos/pipermerriam/populus/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/pipermerriam/populus/teams","hooks_url":"https://api.github.com/repos/pipermerriam/populus/hooks","issue_events_url":"https://api.github.com/repos/pipermerriam/populus/issues/events{/number}","events_url":"https://api.github.com/repos/pipermerriam/populus/events","assignees_url":"https://api.github.com/repos/pipermerriam/populus/assignees{/user}","branches_url":"https://api.github.com/repos/pipermerriam/populus/branches{/branch}","tags_url":"https://api.github.com/repos/pipermerriam/populus/tags","blobs_url":"https://api.github.com/repos/pipermerriam/populus/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/pipermerriam/populus/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/pipermerriam/populus/git/refs{/sha}","trees_url":"https://api.github.com/repos/pipermerriam/populus/git/trees{/sha}","statuses_url":"https://api.github.com/repos/pipermerriam/populus/statuses/{sha}","languages_url":"https://api.github.com/repos/pipermerriam/populus/languages","stargazers_url":"https://api.github.com/repos/pipermerriam/populus/stargazers","contributors_url":"https://api.github.com/repos/pipermerriam/populus/contributors","subscribers_url":"https://api.github.com/repos/pipermerriam/populus/subscribers","subscription_url":"https://api.github.com/repos/pipermerriam/populus/subscription","commits_url":"https://api.github.com/repos/pipermerriam/populus/commits{/sha}","git_commits_url":"https://api.github.com/repos/pipermerriam/populus/git/commits{/sha}","comments_url":"https://api.github.com/repos/pipermerriam/populus/comments{/number}","issue_comment_url":"https://api.github.com/repos/pipermerriam/populus/issues/comments{/number}","contents_url":"https://api.github.com/repos/pipermerriam/populus/contents/{+path}","compare_url":"https://api.github.com/repos/pipermerriam/populus/compare/{base}...{head}","merges_url":"https://api.github.com/repos/pipermerriam/populus/merges","archive_url":"https://api.github.com/repos/pipermerriam/populus/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/pipermerriam/populus/downloads","issues_url":"https://api.github.com/repos/pipermerriam/populus/issues{/number}","pulls_url":"https://api.github.com/repos/pipermerriam/populus/pulls{/number}","milestones_url":"https://api.github.com/repos/pipermerriam/populus/milestones{/number}","notifications_url":"https://api.github.com/repos/pipermerriam/populus/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/pipermerriam/populus/labels{/name}","releases_url":"https://api.github.com/repos/pipermerriam/populus/releases{/id}","deployments_url":"https://api.github.com/repos/pipermerriam/populus/deployments","created_at":"2015-08-19T02:04:13Z","updated_at":"2016-07-23T07:49:45Z","pushed_at":"2016-07-28T04:33:40Z","git_url":"git://github.com/pipermerriam/populus.git","ssh_url":"git@github.com:pipermerriam/populus.git","clone_url":"https://github.com/pipermerriam/populus.git","svn_url":"https://github.com/pipermerriam/populus","homepage":null,"size":525,"stargazers_count":38,"watchers_count":38,"language":"JavaScript","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":17,"mirror_url":null,"open_issues_count":18,"forks":17,"open_issues":18,"watchers":38,"default_branch":"master"}},"base":{"label":"pipermerriam:master","ref":"master","sha":"49bcc7eeb66b7831da63202d759f6f48a1700774","user":{"login":"pipermerriam","id":824194,"avatar_url":"https://avatars.githubusercontent.com/u/824194?v=3","gravatar_id":"","url":"https://api.github.com/users/pipermerriam","html_url":"https://github.com/pipermerriam","followers_url":"https://api.github.com/users/pipermerriam/followers","following_url":"https://api.github.com/users/pipermerriam/following{/other_user}","gists_url":"https://api.github.com/users/pipermerriam/gists{/gist_id}","starred_url":"https://api.github.com/users/pipermerriam/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/pipermerriam/subscriptions","organizations_url":"https://api.github.com/users/pipermerriam/orgs","repos_url":"https://api.github.com/users/pipermerriam/repos","events_url":"https://api.github.com/users/pipermerriam/events{/privacy}","received_events_url":"https://api.github.com/users/pipermerriam/received_events","type":"User","site_admin":false},"repo":{"id":41007839,"name":"populus","full_name":"pipermerriam/populus","owner":{"login":"pipermerriam","id":824194,"avatar_url":"https://avatars.githubusercontent.com/u/824194?v=3","gravatar_id":"","url":"https://api.github.com/users/pipermerriam","html_url":"https://github.com/pipermerriam","followers_url":"https://api.github.com/users/pipermerriam/followers","following_url":"https://api.github.com/users/pipermerriam/following{/other_user}","gists_url":"https://api.github.com/users/pipermerriam/gists{/gist_id}","starred_url":"https://api.github.com/users/pipermerriam/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/pipermerriam/subscriptions","organizations_url":"https://api.github.com/users/pipermerriam/orgs","repos_url":"https://api.github.com/users/pipermerriam/repos","events_url":"https://api.github.com/users/pipermerriam/events{/privacy}","received_events_url":"https://api.github.com/users/pipermerriam/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/pipermerriam/populus","description":"Ethereum Contract Development Framework","fork":false,"url":"https://api.github.com/repos/pipermerriam/populus","forks_url":"https://api.github.com/repos/pipermerriam/populus/forks","keys_url":"https://api.github.com/repos/pipermerriam/populus/keys{/key_id}","collaborators_url":"https://api.github.com/repos/pipermerriam/populus/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/pipermerriam/populus/teams","hooks_url":"https://api.github.com/repos/pipermerriam/populus/hooks","issue_events_url":"https://api.github.com/repos/pipermerriam/populus/issues/events{/number}","events_url":"https://api.github.com/repos/pipermerriam/populus/events","assignees_url":"https://api.github.com/repos/pipermerriam/populus/assignees{/user}","branches_url":"https://api.github.com/repos/pipermerriam/populus/branches{/branch}","tags_url":"https://api.github.com/repos/pipermerriam/populus/tags","blobs_url":"https://api.github.com/repos/pipermerriam/populus/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/pipermerriam/populus/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/pipermerriam/populus/git/refs{/sha}","trees_url":"https://api.github.com/repos/pipermerriam/populus/git/trees{/sha}","statuses_url":"https://api.github.com/repos/pipermerriam/populus/statuses/{sha}","languages_url":"https://api.github.com/repos/pipermerriam/populus/languages","stargazers_url":"https://api.github.com/repos/pipermerriam/populus/stargazers","contributors_url":"https://api.github.com/repos/pipermerriam/populus/contributors","subscribers_url":"https://api.github.com/repos/pipermerriam/populus/subscribers","subscription_url":"https://api.github.com/repos/pipermerriam/populus/subscription","commits_url":"https://api.github.com/repos/pipermerriam/populus/commits{/sha}","git_commits_url":"https://api.github.com/repos/pipermerriam/populus/git/commits{/sha}","comments_url":"https://api.github.com/repos/pipermerriam/populus/comments{/number}","issue_comment_url":"https://api.github.com/repos/pipermerriam/populus/issues/comments{/number}","contents_url":"https://api.github.com/repos/pipermerriam/populus/contents/{+path}","compare_url":"https://api.github.com/repos/pipermerriam/populus/compare/{base}...{head}","merges_url":"https://api.github.com/repos/pipermerriam/populus/merges","archive_url":"https://api.github.com/repos/pipermerriam/populus/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/pipermerriam/populus/downloads","issues_url":"https://api.github.com/repos/pipermerriam/populus/issues{/number}","pulls_url":"https://api.github.com/repos/pipermerriam/populus/pulls{/number}","milestones_url":"https://api.github.com/repos/pipermerriam/populus/milestones{/number}","notifications_url":"https://api.github.com/repos/pipermerriam/populus/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/pipermerriam/populus/labels{/name}","releases_url":"https://api.github.com/repos/pipermerriam/populus/releases{/id}","deployments_url":"https://api.github.com/repos/pipermerriam/populus/deployments","created_at":"2015-08-19T02:04:13Z","updated_at":"2016-07-23T07:49:45Z","pushed_at":"2016-07-28T04:33:40Z","git_url":"git://github.com/pipermerriam/populus.git","ssh_url":"git@github.com:pipermerriam/populus.git","clone_url":"https://github.com/pipermerriam/populus.git","svn_url":"https://github.com/pipermerriam/populus","homepage":null,"size":525,"stargazers_count":38,"watchers_count":38,"language":"JavaScript","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":17,"mirror_url":null,"open_issues_count":18,"forks":17,"open_issues":18,"watchers":38,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/pipermerriam/populus/pulls/105"},"html":{"href":"https://github.com/pipermerriam/populus/pull/105"},"issue":{"href":"https://api.github.com/repos/pipermerriam/populus/issues/105"},"comments":{"href":"https://api.github.com/repos/pipermerriam/populus/issues/105/comments"},"review_comments":{"href":"https://api.github.com/repos/pipermerriam/populus/pulls/105/comments"},"review_comment":{"href":"https://api.github.com/repos/pipermerriam/populus/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/pipermerriam/populus/pulls/105/commits"},"statuses":{"href":"https://api.github.com/repos/pipermerriam/populus/statuses/a7c7e911b5de2ba4b35c4cb1d1af95ab3a94dcf6"}},"merged":true,"mergeable":null,"mergeable_state":"unknown","merged_by":{"login":"pipermerriam","id":824194,"avatar_url":"https://avatars.githubusercontent.com/u/824194?v=3","gravatar_id":"","url":"https://api.github.com/users/pipermerriam","html_url":"https://github.com/pipermerriam","followers_url":"https://api.github.com/users/pipermerriam/followers","following_url":"https://api.github.com/users/pipermerriam/following{/other_user}","gists_url":"https://api.github.com/users/pipermerriam/gists{/gist_id}","starred_url":"https://api.github.com/users/pipermerriam/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/pipermerriam/subscriptions","organizations_url":"https://api.github.com/users/pipermerriam/orgs","repos_url":"https://api.github.com/users/pipermerriam/repos","events_url":"https://api.github.com/users/pipermerriam/events{/privacy}","received_events_url":"https://api.github.com/users/pipermerriam/received_events","type":"User","site_admin":false},"comments":1,"review_comments":0,"commits":35,"additions":2520,"deletions":15504,"changed_files":142}}
{"actor":{"display_login":"pipermerriam"}}