Development Update on Verge #4

Swen van Zanten
vergecurrency
Published in
4 min readSep 1, 2018

--

It’s that time again! A development update from your favorite Verge developer! 🤨 (Marvin wrote a large part of this 😆) Do you have a comfortable reading spot on the couch or behind your desk? Because this is gonna get so juicy! 🍕

Insight API Clients

We started working on the Insight API Clients, which we need for our upcoming iOS, Android and Desktop wallets. The Insight API created by BitPay under the MIT license will be used to communicate with the hosted Verge node. The blockchain REST API was originally created for Bitcoin. But as Verge, with the new upcoming codebase, will be fully compatible with Bitcoin. We can easily use the Insight software provided by BitPay.

The API clients will be setup as standalone packages in their specific languages. This way anyone can use them for there own projects and we can make a contribution to the open source community. The packages will be provided on our GitHub under the MIT licenses. We will publish three initial packages (TypeScript, Swift & Java) which all share the same API definition (where possible). So when switching between different languages, one doesn’t need to learn a new API.

Let me show you some of the interface we’ve come up with for the TypeScript API version:

export interface IClient extends 
ITransactionMethods,
IBlockMethods,
IAccountMethods
{
/**
* Broadcasts transaction and returns the transaction id
*/
postTransaction: (rawTransaction: string) => Promise<number>;

/**
* All infos in one
*/
getInfo: () => Promise<Info>;
getDifficulty: () => Promise<number>;
getBestBlockHash: () => Promise<number>;
getLastBlockHash: () => Promise<number>;
}

And here the same endpoints written in Swift:

public protocol ClientProtocol: 
AccountProtocol,
BlockProtocol,
TransactionProtocol
{
/**
* Broadcasts transaction and returns the transaction id
*/
func postTransaction(
rawTransaction: String,
completion: @escaping (_ transactionId: String?) -> Void
)

/**
* All infos in one
*/
func getInfo(completion: @escaping (_ info: Info?) -> Void)
func getDifficulty(
completion: @escaping (_ difficulty: String?
) -> Void)
func getBestBlockHash(
completion: @escaping (_ hash: String?) -> Void
)
func getLastBlockHash(
completion: @escaping (_ hash: String?) -> Void
)
}

The Java version of the Insight API client, isn’t created yet. For now there is no need for it right away. But later on we will need it for our Android application.

Codebase update

New step within the codebase development

We are proud to announce that we are taking our final steps of the rebase project. We finally finished rebasing Verge to Bitcoin Core version 0.13. Next, we are going to move towards Bitcoin Core version 0.17. In result that means that Verge will be on the latest Bitcoin Core base code with all the latest features of Bitcoin Core.

Changelogs until version 0.13 can be found over here!

What exactly do we mean by rebasing our code to Bitcoin Core?

Anyone can fork Bitcoin Core, change a few lines of code, and have a new coin. Since Verge has been around for a while, and we have our differences, the challenge has been to merge those differences onto the latest Bitcoin Core. Features like Tor, multi-algorithm, stealth addressing, are the things that make Verge different from Bitcoin Core.

Wallet keys

We have also made our structural way through the creation of wallet keys. The below graphic contains a visual representation of the code:

Source: https://github.com/vergecurrency/vWallet/blob/feature/key-generation/test/Key.test.ts#L19-L38

This would basically cover all the common use cases that we have at the moment regarding handling user funds. We can cover up from generating mnemonic seeds (with a 12 to 18 words combination depending on your seed length) for users to restore their wallets more easily, thus less lost funds. Secondly, we integrated the Hierarchical Structure of wallet keys within our library, which will cover our users with a more manageable structure of their own wallets. In return they’ll have the chance to really distribute their founds into multiple accounts and chains, which could be for example used for separating your daily used account from your saving one.

We will also make sure that your funds are separately handled UI wise, which for example means, that if your fund from your daily used account isn’t sufficient, you won’t be able to transact the money unless you additionally approve that you want to deduct your open transaction value from your saving’s account.

Cats

To finish this update, I’ll show you one of my cats laying in the grass. This way I hope you leave with a happy feeling 😉

--

--

Swen van Zanten
vergecurrency

Full Stack Senior Web developer • Swift developer • Verge Currency Core member