Proposal for Android client for NuBits
|Total Developments||22,500 NBT|
|Custodial Fee||500 NBT|
|Donations||-/- 1,260 NBT|
Date granted: | xx-xxx-2015
This document represents a proposal to act as a custodian in support of the Nu decentralized network. The terms outlined in this document represent actions that will be taken if Nu Shareholder consensus is achieved by casting votes for the unique pairing of the Custodian's NuBits grant address and requested amount, B6tBUhTuetuZezgoJCwwqkJNXNQXPCiand | 27,840.
This proposal will be confirmed by the Nu Shareholders if this voting pair is written within the majority of blocks:
- solved during a 10,000 block span;
- and that majority of blocks solved also represents a majority of the coin age destroyed during the same blockspan.
Once the 5001 valid vote is cast, and the coin age requirement has been met, the network will automatically generate and deposit value NuBits (NBT) into the custodial grant address. This is a wallet address under control of the Custodian.
The Custodian enters into a commercial contract with the designated developer in order to deliver enhancements to the official Android client for NuBits. The main purpose of this contract is to:
enhance the wallet in order to add security features,
enable the ability to virtually pay everywhere they accept cryptocoins like e.g. Bitcoins, Peercoins or Litecoins.
improve decentralization and robustness of backend
Further developments on the roadmap may occur later, but are not part of this proposal.
The contract will have a clause that in case of delays in each release part of this development due to the developer's inability, performance rebates on the agreed contractual amount will be enacted.
Given the size of this investment it is considered to be more likely to be effective to accompany it with a marketing campaign. The objective of the marketing campaign is to:
expose the NuBits brand (always a dollar) to a wider audience in general
emphasize the usability of the NuBits mobile wallet for payments with foreign coins.
This proposal is a standard custodial grant for development of the NuNet ecosystem. The key objective is to increase demand and usage of NBT.
This proposal will satisfy the following goals:
- Increase the demand and usage of NuBits
With the proposed enhancements regarding release 1 the security of the wallet is increased. This is likely to improve the trust and with that the number of coins in the wallet.
With the proposed enhancements regarding release 2 it is expected that the demand and usage for NuBits would increase as the wallet can be used for mobile payments at Point of Sale where only e.g. Bitcoin, Peercoin or Litecoin are accepted. The wallet will hold NuBits, however foreign cryptocoin payments are possible seamlessly.
With the proposed enhancement in release 3 the reliability of the back-end is increased.
- Marketing, showing that the NuBits ecosystem is actively being developed
Many people will gauge a new currency on the availability of tools and applications beyond the standard wallet. This proposal shows that the community is actively investing in its infrastructure.
This proposal intends to contract a developer for a series of releases. The benefit is that we don't have to wait for volunteers or someone picking up a bounty. There is also more certainty about the delivery and duration.
Developer fee (22,500 NBT) for 3 releases. This appears to be reasonable given the amount of time and skills required. The contract between developer and custodian is a fixed price contract.
Custodian's fee (500 NBT) is a contribution to the Custodian costs for contracting developer, arranging payments, providing progress reports and attending to discussions and responding to questions about Development on public forum.
Marketing fee (6,100 NBT) broken down as follows:
- 100 NBT giveaway Reddit
- 6,000 NBT contribution to costs of 3 months advertising on CMC and the creation of a banner.
The functionality in release 2 is expected to attract some attention. For the first time an user would be able to pay at merchants accepting the volatile Bitcoins while holding the stable value NuBits. This combination creates basically the first practical and relatively user-friendly crypto currency wallet. No sign-ups, no complex exchanges, no hassle!
It is considered worthwhile to support the momentum of the launch with some targetted marketing. It is proposed to:
Run a Reddit campaign. Giveaway 1 NBT for every user with a week old account on Reddit who can prove they downloadeded the wallet and can provide a NBT address or QR-code. Total 100 NBT.
Create a separate page on NuBits.com which will also serve as a landing page for the ad (see item 3) with all the right marketing talk and as a quickstart in starting with the wallet (this will be developed together with NuBits Marketing)
Advertise on a high-traffic site Coinmarketcap.com or other site with marketing teaser about the stable value wallet which can be used to pay merchants only accepting Bitcoin. This cost includes advertising for 3 months on CMC and the creation of a (moving) banner or multiple banners. Total 6,000 NBT.
Contract start The Contract starts:
- After custodial grant approval and,
- Contract sign-off and,
- Transfer of 50% of the agreed sum for release 1 to the Developer.
Development time The Development has been split up in 3 releases:
Release 1 Pincode Lock will take up to 3 weeks (1,300 NBT)
Release 2 Shapeshift API will take up to 12 weeks (14,000 NBT)
Release 3 Server Config will take up to 8 weeks (7,200 NBT)
Total development time in this contract is up to 23 weeks. Total cost for the 3 releases are 22,500 NBT. Releases may be delivered faster discretion Developer.
Testing and handover Once a Release of the Development is finished and tested by the Developer a beta version will be released on Google App Market for testing by the community during 2 weeks. During that time the community has the ability to test and provide feedback and bug reports to Developer. Developer will solve all bugs impacting the normal expected functionality related to the conversion to NuBits before releasing a final version to Google App Market. Release of the final version of the Release triggers the related payment (50% of agreed sum for that release minus performance rebates if applicable) to the Developer
The transfer of the custodian and Marketing Fees will take place after the delivery of release 2 in order to advertise for the unique functionality this will provide. The Custodian will make backups of each release besides hosting it on their own GitHub repository. All releases will be open sourced.
Unexpected termination of contract and remaining funds Any remaining NuBits will be transferred to an address for core NuNet development. When this proposal is approved and the contract between Custodian and Developer is prematurely terminated for reasons beyond control of the Custodian all the NuBits including the Custodian's fee will be transferred to an address for other NuNet development instead. To determine the receiver of those funds a motion may be raised.
Commitment to Transparency
The grant will be transferred into an account in control by the custodian. The contractual payments to the developer will be published in a public thread on discuss.nubits.com. The current state of the grant can be verified at all times through the blockchain.
Progress on development will occur at least on a fortnighlty bases, either by the developer or by the custodian in a public thread on discuss.nubits.com. This may include screenshots or early experiences with alpha versions.
All releases will be hosted under the same conditions as the previous contract which delivered the App itself including hosting facilities. When the is a steep increase in demand the server may be scaled up or a second server may be brought to life at cost. This would require a separate custodial grant.
This proposal, when passed by the Nu Shareholders will be considered binding and the Custodian will proceed with the execution of the proposal as described. If at any point during the operation Nu Shareholders deem the elected custodian to be conducting actions that they feel differ from what is described here, a fully certified motion (majority of votes cast) will be required to make amendments.
The following key risks has been identified:
- Developer does not finish the job due to unavailability, unability or unwillingness.
Mitigation: A contract between Custodian and Developer will exist describing the terms of disengagement. Contractual payments will be split in twice for each release, 50% in advance and 50% on successful delivery after 14 days of community testing. Contract breach will damage Developer's reputation in cryptocoin community.
- Developer is not able to finish the product due to external circumstances, e.g. unavailability of Shapeshift API.
Mitigation: Custodian has established relations with Shapeshift staff. They support the Development and have proven to be responsive when issues occur.
If the Custodian determines that the Grant can't meet the intended objectives for a release, the Custodian will provide public notification of the issue on the Custodian's reporting site. Should that be required, the Custodian reserves the right to propose a motion to adjust the terms to maximize the Grant's usefulness to the Nu Shareholders.
Although the Custodian will do everything in their control to deliver to the objectives, the Custodian will not be held liable for claims of lost profits related to delays in the delivery, non-delivery or as a result of the operations of the Development.
- Uptake exceeds expectations and affects service levels of App in next 18 months
Mitigation: Custodian will monitor relevant server data and respond to users facing issues with reliability or availability. When it appears that these are caused by the underlying infrastructure, the Custodian will propose changes in a motion (if no further costs) or a custodial grant covering any additional costs to improve the infrastructure. The Custodian will try to keep the service levels up on a best effort bases, until an additional grant or motion to sustain acceptable service levels going forward has been passed to address any issues and risks occuring or being raised.
BitMessage Address: BM-NB6Fs5U3Rvi6WEnCZ6F2WehUBjkxD7bz
Nu Community ID: Cybnate
This is the second Nu custodial grant proposal submitted by Cybnate.
Cybnate has built a trustworthy reputation in the Peercoin and NuBits community. Examples are running the fundraising for the Peercoin video and reporting the payment to the creator in creative and transparent ways to the community and donators.
More recently Cybnate has set up and prepared a charter for the Peercoin Marketing Fund with River333 and successfully convinced donators to fund this. Several proposals have successfully requested grants via a voting mechanism and delivered real value to the Peercoin community. This is still on-going and Cybnaet has committed to a second 6 months term.
Cybnate has successfully delivered the first custodial grant which brought the Schildbach Android client to the NuBits ecosystem. This Development was in collaboration with the same Developer as proposed for this Custodial Grant.
Cybnate has been working and gaining experience with cryptocoins since October 2013 and is a long-term Peercoin investor and NuShares holder.
The details presented in this document should be used to gauge the perceived ability to meet the terms presented in this proposal, and voting-eligible members of the Nu community are encouraged to raise any questions, concerns, or recommendations for improvement prior to reaching their own personal decision.
Product description / scope
The Development is based on the open source NBT Android client based on the Schildbach architecture. The source code of the current Android client and the supporting backend can be found here: https://github.com/Cybnate/NuBits-Android-wallet https://github.com/Cybnate/NuBitsj https://github.com/Cybnate/NuBits-Abe-explorer
Screenshots can be found here: https://play.google.com/store/apps/details?id=com.matthewmitchell.nubits_android_wallet
Preview on release 1 is available in the latest Peercoin Android App.
NuBits (NBT) is a cryptocurrency based on a Peershares blockchain which is based on the Peercoin blockchain. One NuBit is always a dollar. This makes it very attractive as a really useful crypto currency for day-to-day transactions.
With exception of the Abe explorer API used for block hash validation, no registration, web service or cloud will be needed for end user. The wallet is de-centralized and peer to peer.
The Shapeshift API doesn't require any registration. This saves the hassle of registrations and allow users to use the application without needing to login or logout one or more services. Shapeshift fees are included in the spread of their exchanges. The advertised exchange rate in the Android App will include their fee and the 'miner' or network fee. No surprises on charges afterwards. Please check their website when you start using their service. They can be found here: www.shapeshift.io.
There will be no advertisements or tracking in the App and therefore the App doesn't request access to phone or Android services it doesn't need for its core purpose.
The following functionality will be included in release 1:
This release fixes some known time-out issues with older and slower devices and adds password functionality to the app. All functionality is listed:
- Deterministic wallets (BIP0032)
- Encrypt wallet with PIN code, required to send coins.
- Displaying local currency in App widget
- User Interface improvements
- Any bug fixes and performance enhancements
Release 2 will include:
This release adds Shapeshift API integration. This enables seamless payments in supported foreign coin addresses from within the App without the use of external plugins by either merchant or customer.
- Have the App recognise foreign coin addresses (e.g. in QR codes) for payments
- Failed payments are returned to an address generated by the application.
- Support for Nubits payments to Bitcoin, Litecoin, Peercoin, Darkcoin, Dogecoin, Namecoin, Feathercoin, Blackcoin, BitcoinDark, Quark and Reddcoin, providing that all coins follow the standard bitcoin URI format.
- The code that communicates with the shapeshift API will be provided exclusively as a separate Java class, providing methods that hide (ie. abstraction/encapsulation) the communications code and data, such that, if shapeshift was to go offline, another API (if an adequate API exists) could be utilised to implement the methods, within this new Java class, or additional new Java classes, used solely to support this new functionality.
- The API communication will handled asynchronously and results will be provided using a callback interface. Public methods of new classes and interface methods will be documented, with the java doc format, consistent with the existing code.
- The shapeshift functionality is not to used for existing Nubits only payments.
The payment process:
- Handle payment request from coin URI, following Bitcoin format: https://github.com/bitcoin/bips/blob/master/bip-0021.mediawiki or accept manual address entry. Also handle standalone address format.
- Present user with payment activity. A new heading will be displayed with the coin name followed by “Amount”, ie. “Bitcoin Amount”. Underneath this heading will be the amount as requested in the QR code with a symbol to represent the foreign currency. Another new heading will be displayed named “Rate”. This will contain the Nubits price for the foreign coin, and will be uneditable. The “Amount to pay” amounts will display the actual amount of Nubits to be paid and a local currency estimation as usual.
- A foreign payment amount may already be set by the QR code, otherwise the amounts will default to zero.
- A user can change the foreign or nubits amounts at any time. If the foreign amount has been set the app will make a sendamount shapeshift request with this amount, the foreign address and a generated return address.
- A new sendamount request will be made 5 minutes before transaction expiry (roughly every 5 minutes it will refresh).
- The rate will be displayed as according to the response of the API method.
- An error will be displayed if sendamount presents an error with the deposit amounts, or if trading is disabled for the currency pair or some other error occurs.
- When the user presses send, the payment will be made as according to the Nubits amount and the address returned by sendamount.
- When the NuBits price has been set, the application will calculate the foreign price using the rate API method every minute.
- When the user presses send, an API call to limit will determine if the API will accept the Nubits amount and fail if not.
- If the amount is acceptable the application will make a call to shift to obtain the deposit address and make the payment as according to the Nubits amount. The generated return address will be included in the API call.
- If any shapeshift calls fail, an error will be indicated and nothing shall take place.
Here is an use scenario to illustrate the functionality supported:
- Alice want to pay merchant Bob. Bob only accepts Bitcoin. Alice scans the Bitcoin QR code and the App recognises a foreign coin. The App queries the shapeshift API for the payment details. The app presents the required NBT amount to Alice. Alice approves the amount and the rate and sends the NBT. The App shapeshifts the NBT into BTC and sends the coins to the designated BTC address of the merchant. The value of the NBT transaction will be visible in her App. The merchant will get the usual confirmation(s) in his Bitcoin wallet and won't even know Alice paid from a non-Bitcoin wallet.
This release adds the ability for the user to configure a list of servers that implement a method for retrieving valid NuBits block hashes as according to the API method located at https://svr1.nubitsexplorer.nu/q/getvalidhashes There are two main use cases:
- It allows to add two or more servers in case the primary server is not available. This provides redundancy when a secondary server is available (not part of this custodial grant).
- It enables an user to assign their own back-end server and with that creating a completely trustless solution.
Further details of the implementation: A new Android UI Activity will be located under the “Settings” menu between “Settings” and “Diagnostics” named “Trusted Servers”. This Activity will contain a list of rows. Each row will contain a priority number and a server name.
Long-clicking a server name will bring up a dialog box. This dialog will have options for the server name to be displayed in the list, the URL for the server method, and a checkbox which will give the server equal priority to the one above it if selected. This dialog will have three buttons, one that deletes the server after a secondary confirmation (“Are you sure you wish to delete server SomeName?”), another that cancels the dialog, and another that saves the new server details.
The server list will be prioritised with high priority servers being listed first. The app will automatically assign priority numbers depending on the server order. If a server has the same priority as the one above it, it will share the same priority number. The lower the priority number, the higher the priority, ie. Servers with priority 1 will be accessed first. Priority numbers will start at 1 and increment by 1, ie. 1,2,3,4,5,6....
Users will be able to reorder servers by touching an icon to the left by using code located at https://github.com/bauerca/drag-sort-listview demonstrated with the following app: https://play.google.com/store/apps/details?id=com.mobeta.android.demodslv
The action bar will contain a button for creating a new server item, with the same dialog as editing a server but without the delete button. The menu will contain a help screen, describing how to use the Activity, and the ability to restore the server list to the defaults.
The app will download valid hashes by communicating with a random server with priority 1 first. If this server cannot be used, it will try all other priority 1 servers, and then move onto priority 2 and so on. The server list will be stored in a private SQLite database.
There won't be any specific NuBits/NuNet features e.g.:
- Use of NuShares or related functionality
Use of email receipt with Shapeshift payments
Receiving foreign coins
Given the complexity and resulting cost and duration above functionality is excluded for the 3 releases in this contract.
The Developer will not be required to fix known issues as stated above or deliver included functionality beyond the above as part of this Agreement.
The Custodian intends to continue to work with Developer and/or others to improve the product over time. Any addition of functionality or fixing of known issues, or strengthening of the App can be scoped into a new grant proposal when desired.
###License The license is GPLv3 for the Android client and AGPLv3 for the back-end (ABE explorer). This cannot be changed. The new releases will therefore sit under the same licenses. Custodian will add a copy to their GitHub to secure the final code.
My apologies for the number of revisions today. I also hit a copy/paste bug in Github which cut off the bottom half of the gist. The changes are relatively minor and discussed in the forum thread.