Requirements for Uplink PHP Library Bounty
Proposed Bounty: $7,500 in STORJ
We’ve gotten some great interest in building integrations with platforms built in PHP. Native Nextcloud integration would be excellent and definitely help people who want more of an app experience than a developer tool but to get there fast, we need an Uplink library in PHP. This is where you come in!
Have you got awesome PHP chops? Do you want to help drive adoption of the Storj project? We’re looking for one member of the community to build a set of software bindings for PHP.
If you’re interested, the process we’re going to follow is:
Workflow for Bounty Hunters
- Express interest by sending an email to firstname.lastname@example.org
- Please include your experience with PHP and a link to any relevant GitHub repositories with code samples of your work
- If you’re selected, you’ll be assigned the project. We’ll jointly agree upon an expected timeframe to deliver (if you aren’t able to meet the deadline, the issue may be assigned to someone else)
- Please don’t start work until you have approval.
- We’ll also need to do a little paperwork for the project.
- Create your solution (Don’t worry, we’ll have open communication channels and regular check-ins)
- Open a Pull Request to get your code reviewed
- Incorporate any feedback from us
- PR is reviewed, approved, and merged by us
- Submit your invoice with a compatible wallet address that can receive STORJ token
- Get paid!
The purpose of this document is to describe the requirements for the development of an Uplink library in PHP. It is expected that the library will be based on the Uplink C library available at:
Uplink C library. Contribute to storj/uplink-c development by creating an account on GitHub.
The Uplink library contains all the logic for efficient and secure communication with the satellites and storage nodes; encrypting, encoding, and sharding the data before uploading it, as well as decoding and decrypting the data after downloading it back from the storage nodes. We don’t want to reimplement and maintain all this logic in pure PHP, but rather build a PHP wrapper on top of the Uplink C library.
This bounty provides for the Uplink PHP library and documentation that enable developers to build 3rd party applications to store data on, retrieve data from or otherwise interact with the Storj network.
The library and associated documentation should be substantially similar in function to the other programming languages supported by the uplink library, including:
Documentation provided should be written in markdown and include code samples for all of the functions exposed in the library. Documentation should be hosted as Github Pages on the Github repository of the library.
The documentation should give detailed instructions of how to use the library in PHP applications.
The API of the PHP library should follow the structure of the Go and C libraries while reflecting the idiomatic best practices of the PHP programming language.
We use semantic versioning for the uplink library. Once the API is declared as v1.0, we plan to support it backward-compatible for the foreseeable future. Hence, the API should be carefully crafted.
An API review will be conducted by the Engineering Team of Storj Labs before declaring v1.0.
Tests and continuous integration
The Github repository should follow best practices for implementing CI quality pipeline for Pull Requests. This CI should use the Jenkins server of Storj Labs, similar to the Uplink libraries for other programming languages.
Unit and integration tests should be implemented to ensure that the PHP library won’t break if the underlying Uplink C library is updated to a newer version. One possible way to implement integration tests is through the Storj Test Network: https://github.com/storj/storj/wiki/Test-network.
Making a new release on the Github repository should be automated as much as possible. For example, if the library is delivered as a Composer package (see below), the release should be automatically published on Packagist. If the delivery is a PHP extension, the binaries should be attached to the Github release.
Successful completion of the library should include a demo application that demonstrates the basic operations of the library, including: listing buckets and files, uploading and downloading files, sharing access, etc.
Ideally, the Uplink PHP library should be available as a Composer package. However, we acknowledge the added complexity of having the dependency to the native Uplink C library. If this makes it technically impossible to have it as a Composer package, the fallback is to make it available as a PHP extension.
Large files transfer
The Uplink PHP library should be capable of uploading and downloading large files with size of tens and hundreds of GBs, if not more. Ideally, this should be possible without modifying the max_execution_time directive. If this is not possible, possible alternatives should be discussed with the Engineering Team of Storj Labs as soon as possible.
(workflow for bounty hunters inspired by the work of Open Collective)