Getting started with Ethereum Wallet

Well, Cryptocurrencies have consumed my attention for the past 5 months. I first learned about Etherum back in May when I was attending a Bachelor party. Since then, I have been a relatively hands off investor, but it is time to actually start contributing and learning about the development platform.

To start, we need to install the Etherum Wallet, which also downloads the entire Etherum chain, which as of this post is over 4.3 million blocks long. The unfortunate part of this process is that it takes a lot of disk space, and if you are like me, you have a SSD for your OS and installed programs, and an HDD for storage. 4.3 million blocks is supposed to be around 70+ GB of files, which I certainly do not want on my SSD.

Etherum Wallet does not currently let you choose where to store these files, so by default they go to:

C:\Users\<username>\AppData\Roaming\Ethereum

So how can we move these files to our HDD?

Using Symbolic Links (Symlinks)!

Let’s do it!

I want to store all these files on my HDD at this folder path:

D:\Cryptocoins\Ethereum

Before I install Etherum Wallet, I should set up the symlink as so:

> Run CMD as an Administrator

mklink /j "C:\Users\<username>\AppData\Roaming\Ethereum" "D:\Cryptocoins\Ethereum"

If successful, you will get the following message:

Junction created for C:\Users\<username>\AppData\Roaming\Ethereum <<===>> D:\Cryptocoins\Ethereum

This will create a Directory Junction which basically makes the first folder path point to the second folder path. Then when I install and run Etherum Wallet, it will start to download all of the blocks into this alternate directory!

And in my HDD:

What if I migrate an existing installation?

Let’s say you already installed and downloaded the Ethereum Chain but you want to do this. Well that is also pretty easy. First copy all the contents from

C:\Users\<username>\AppData\Roaming\Ethereum

to your new location. It should be pretty large, so it may take a while. Be extra careful to make a backup of your keystore folder. Once the files have been copied over, you must delete the entire original Ethereum directory, including the Ethereum folder. Then you can run the same mklink in CMD as an Administrator.

mklink /j "C:\Users\<username>\AppData\Roaming\Ethereum" "D:\Cryptocoins\Ethereum"

If you forgot to delete the Ethereum folder, you will get this error:

Cannot create a file when that file already exists.

I hope this helps someone! It certainly helped me as I was getting started.

Adding AAD Service Principal to the Company Administrator Role using the AAD PowerShell Module

When creating a new Azure Active Directory application, developers may run into a a problem when calling the AAD Graph API where they lack the correct permissions to call the APIs they want when calling in the App Only Flow (Client Credentials Flow).

Is this message familiar to you?

"odata.error":{
    "code":"Authorization_RequestDenied",
    "message":{
        "lang":"en","value":"Insufficient privileges to complete the operation."
    }
}

The correct thing to do would be to try and investigate the permissions you have granted to your application, but there are some APIs which are not even supported through the permissions publicly exposed by the AAD Graph API. Maybe you just want to overcome this error for the time being and continue testing your end to end experience.

Using the AAD PowerShell Module, you can:

  • Give your application full access to the Graph API in the context of my tenant.

or

  • Grant your application permissions to my tenant which are not currently supported with the permissions exposed by the AAD Graph API.

“How?” you might ask. Well, you can elevate the level of access an Application has in your tenant by adding the service principal of that application to the Company Administrator Directory Role. This will give the Application the same level of permissions as the Company Administrator, who can do anything. You can follow these same instructions for any type of Directory Role depending on the level of access you want to give to this application.

Note that this will only affect the access your app has in your tenant.
Also you must already be a Company Administrator of the tenant to follow these instructions.

 

In order to make the change, you will need to install the Azure Active Directory PowerShell Module.

Once you have the module installed, authenticate to your tenant with your Administrator Account:

Connect-MSOLService

Then we need to get the Object ID of both the Service Principal we want to elevate, and the Company Administrator Role for your tenant.

Search for Service Principal by App ID GUID:

$sp = Get-MsolServicePrincipal -AppPrincipalId <App ID GUID>

Search for Directory Role by Name

$role = Get-MsolRole -RoleName "Company Administrator"

Now we can use the Add-MsolRoleMember command to add this role to the service principal.

Add-MsolRoleMember -RoleObjectId $role.ObjectId -RoleMemberType ServicePrincipal -RoleMemberObjectId $sp.ObjectId

To check everything is working, lets get back all the members of the Company Administrator role:

Get-MsolRoleMember -RoleObjectId $role.ObjectId

You should see your application in that list, where RoleMemberType is ServicePrincipal and DisplayName is the name of your application.

Now your application should be able to perform any Graph API calls that the Company Administrator could do, all without a user signed-in, using the Client Credential Flow.

Let me know if this helps!