8

Consider an application that currently uses a combination of license file and/or subscription to verify which features to activate. I can use a smart contract instead of the license file, and potentially the subscription. But today, the subscription check requires an online validation and associated credential check.

With the Ethereum blockchain, is it possible to check state while offline? I'd like to implement a system where people are not required to be online to use the software. I can imagine having contracts that return themselves as valid while offline, but will nodes provide access to data if they are not sync'd up? I'd be ok using out of date data for up to a month or more, but I'd need the local client to respond.

Alternatively, I could create local license files from the node when the node is online, but I could almost as easily email license files. But by using the blockchain, the licenses and other assets could be traded and available should the company fold.

  • Many good questions generate some degree of opinion based on expert experience, but answers to this question will tend to be almost entirely based on opinions, rather than facts, references, or specific expertise. – niksmac Apr 11 '16 at 1:56
  • @NikhilM raises a good point. I could change the question to be more objective. For example, I could delete just about everything and ask about checking state while offline. Approaches to design can be more subjective, and is one reason why I tagged with question with contract-design, rather than contract-development for instance. I'm new to this forum, and want to know how to best engage. I believe questions with objective answers are best, but is there any room for the subjective or should it be taken elsewhere? – Chris Page Apr 11 '16 at 2:22
  • This seems like a legitimate design question of where to cache blockchain information if the current state isn't required by an off-blockchain app. I've been curious about this general issue myself. Perhaps rephrasing the question as "how should I cache blockchain state for offline use" would help? I could see for example geth answering RPC queries whether it's peer connected or not. I don't know what geth's behavior is so I can't answer that... – Paul S Apr 11 '16 at 2:53
  • 2
    I think the question itself is fine, but the title could be more specific/phrased less subjectively – Tjaden Hess Apr 11 '16 at 3:34
  • Good feedback. I will update the title. – Chris Page Apr 11 '16 at 14:11
3

When your app is able to sync with the blockchain (network connection available), the check the blockchain and update your app settings file to allow use for up to e.g. 1 week after the blockchain subscription check. Just tell the user that they have to sync before the period is up.

One extra feature you can add:

  • Your app has a unique public and private Ethereum key embedded in it and has to send a small amount of ethers back to your account on a periodic basis.

  • If you get sent more ether transactions from your app than expected, your customer is running more than one copy of your app.

4

If you want to get up-to-date information from the Ethereum blockchain then you'll need a node somewhere that's synced up. However, in theory you could do this with either a trusted server or a more lightweight proof so you wouldn't necessarily need the whole chain to be downloaded to the client.

If you can tolerate partially out-of-date licensing information then you could certainly cache it locally as you suggest.

Alternatively, I could create local license files from the node when the node is online, but I could almost as easily email license files.

Right, if the goal is just that you want to be able to issue license files based on some information you already have then the Ethereum blockchain probably isn't suitable. Just issue that information on a server of your own and have the client software contact that server.

However, there are a couple of interesting things you get from using Ethereum for something like this. For example, you can make software licenses tradeable by arbitrary exchanges that you don't have to create yourself, and licenses bought in this way will work even if you go out of business.

  • I updated the title and added text to explain the goal. You've identified the motivation for why we would like to use the blockchain. People would like to be able to use the application when there is no Internet, like on an airplane, or traveling to Mars. :) We email files now for some applications, but there are always issues with that approach as it requires the human element. We'd like to automate. – Chris Page Apr 11 '16 at 14:21

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.