Giter Site home page Giter Site logo

creditscoreblockchain's Introduction

Decentralized Trust with Ethereum (Credit Score Scenario)

This is a readable Ethereum DApp written in Solidity (and Node.js) that is based on a minimalist credit score sharing scenario. It shows how information can be shared between participants of a blockchain.

It is part of the Decentralized Trust example scenario on Azure Architecture Center.

Besides the smart contract, this repository provides all of the code required to compile, deploy and communicate with the smart contract on the blockchain. It can be used as a starting point for your decentralized trust project. The compilation, deployment and various other components can also be used as boilerplate and tools within your own project.

Ethers.js is used throughout this application because I like it more than the more common Web3.js.

Going through this README and the various referred portions of files within this repository, you will get an understanding of smart contracts and how it works within a blockchain to enable trusted exchange and sharing of information.

Requirement

You will need to have an Ethereum blockchain.

You can create a private blockchain on Azure to follow this guide. Please refer to the Decentralized Trust example scenario on Azure Architecture Center for more information.

For development purposes, you can follow along with this guide for starters with Ganache:

$ ganache-cli -i 10101010 -g 0

To run the code within this guide, you'll need Node.js and NPM.

Installation

Just clone this repository, then run npm install:

$ git clone https://github.com/vitoc/creditscoreblockchain.git
$ cd creditscoreblockchain
$ npm install

JSON-RPC endpoint

The first thing to obtain and setup is the JSON-RPC endpoint. This is the mean by which we access the blockchain's API.

If you'd followed the example on Azure architecture center, this information is in the e-mail that's sent to you upon successful deployment:

Place this endpoint within a constants.js file that you'll need to create within the directory where this repository is cloned:

const constants = {
    JSON_RPC_ENDPOINT: 'http://ethzgpjre-dns-reg1.southeastasia.cloudapp.azure.com:8540'
}

module.exports = constants;

Do note that constants.js is not in the cloned repository, you'll need to create one for this purpose.

Chain ID

This is to ensure we're dealing with the right chain!

If you'd followed the example on Azure architecture center, this is the Network ID that you had specified while creating the private blockchain via the Azure Portal.

Place this in the constants.js file as well:

const constants = {
    JSON_RPC_ENDPOINT: 'http://ethzgpjre-dns-reg1.southeastasia.cloudapp.azure.com:8540',
    CHAIN_ID: 10101010// <== YOUR CHAIN ID HERE
}

module.exports = constants;

Compiling

The ABI and bytecode necessary to deploy the smart contract to your Ethereum blockchain is included in this repository. Also included is a tool that you can use to quickly (re)-compile the contract again when you make any changes, etc. This is how to use it:

$ node compile.js contract.sol :contractName

For the scenario, to re-compile, do:

$ node compile.js CreditScore.sol :CreditScore

Wallets

For convenience, this application reads the keys of 3 required wallets from 3 files:

  • bankA.wallet
  • bankB.wallet
  • personA.wallet

For testing purposes, you can generate the above wallet by running:

$ node generate_wallet.js

Of course, you can create these private keys yourself with the tools that you prefer too.

Deploying the contract to the blockchain

With that, we can now deploy the contract to the blockchain:

$ node deploy_contract.js bankA.wallet

Here, we use bank A's wallet to create the transaction for deployment so it is the owner of the contract. Once done, the contract's address will be shown to you. Note this down!

Getting addresses of banks and persons

There's a nifty tool in this repository that'll show an bank or a person's address on the blockchain when given the private key of the entity:

$ node address.js bankB.wallet
Wallet address: 0xa8F782D3dAAAAA1F1452aA9e9628cD9YYYYYAa63

You'll need the addresses that are printed to screen for various reasons in subsequent calls to the blockchain.

Allowing other banks to update credit scores

There is a safety check within the contract to allow only enrolled banks to update scores (we certainly don't want people updating their own scores!).

Currently, bank A is the only entity that's allowed to update credit scores. To allow more bank B to do this as well:

$ node enroll.js [YOUR CONTRACT'S ADDRESS] [BANK B'S ADDRESS]

Creating/Updating the credit score of a person

Here's where we finally create a credit score for a person.

For the sake of example, let's assign a credit score for person A. First, we need to get person A's wallet address:

$ node address.js personA.wallet

Then we assign a score of 80 to person A (as identified by the wallet address):

$ node score.js [YOUR CONTRACT'S ADDRESS] [PERSON A'S WALLET ADDRESS] 80

You can replace 80 with any score you want (has to be a positive integer). A transaction will be created to store the person's latest credit score within the blockchain.

Retrieving the score

If you dig into the code of the command below, you'll see that a wallet is required to view records on the blockchain:

$ node retrieve.js [YOUR CONTRACT'S ADDRESS] [PERSON A'S ADDRESS]
Credit Score: 80

That's it!

The aim here is to give you an end-to-end walkthrough from creating a contract up to the point where the contract can be used to store and share information based on decentralized trust on the blockchain. Have a look at the code within the commands above to see how Ethers.js is used with Node.js to achieve the functionalities of the DApp.

Thank you

If you like this, do consider following me on Twitter.

creditscoreblockchain's People

Contributors

vitoc avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.