/PSYdoc

A decentralised alternative to DocuSign on Ethereum network.

Primary LanguageJavaScriptGNU General Public License v3.0GPL-3.0

Logo

PSYdoc

A privacy-preserving electronic-signature protocol on Ethereum

Launch App . Video Demo · Report Bug · Request Feature

Table of Contents
  1. About The Project
  2. Getting Started
  3. Usage
  4. Smart Contracts
  5. Contributing
  6. Sponsorships
  7. License

About The Project

Donate : Paypal | ko-fi
Video Demo : YouTube Link

PSYdoc What is PSYdoc?

PSYdocs allows for pseudonymous signing of documents on the Ethereum network. You no longer have to worry about your confidential documents with personal details being stored forever on a central server! With PSYdoc the document doesn't leave your device!

How does it work?

Each document is hashed locally on your browser and the resulting hash is sent to the PSYdoc's smart-contract, where it is minted as an NFT. It has all the features of ERC-721 standard, which means that it can change hands just like any other NFT.

The person who mints the NFT becomes the owner of it and their address is automatically added to the list of signees. They in turn can invite other addresses to sign the document/ NFT by inviting them through the smart-contract. After an address is invited, they can easily sign the document.

What problems does it solve?

  1. If the document is tampered with, the hash of the file changes. So, this allows for checking for any foul play on the side of the issuer.
  2. The document/NFT remains on the blockchain forever, unless it is burnt.
  3. As mentioned above, your file won't be hosted on some central server.

Is it legal binding?

Since the user mints/signs the document under their own volition, it can be argued in a court of law that the signature is legally binding. (Not a legal advise)


Built With


Getting Started

To get a local copy up and running follow these steps. Or if you just want to get a demo of the site, click here

Prerequisites

This project requires npm, node & truffle installed.

  • npm
    npm install npm@latest -g
  • truffle
    npm install truffle -g
    

Installation

a) Compiling and Deploying the contracts


  1. Get Infura API for deploying to the testnets

  2. Install the required npm packages

cd contracts && npm install
  1. Create a .env file in /contracts folder
touch .env
  1. Put the mnemonic of you wallet and the above mentioned Infura API to the .env file
mnemonic='input your mnemonic here'
urlRopsten='https://ropsten.infura.io/v3/yourAPI'
urlKovan='https://kovan.infura.io/v3/yourAPI'
urlRinkeby='https://rinkeby.infura.io/v3/yourAPI'
urlGorli='https://goerli.infura.io/v3/yourAPI'
urlMumbai='https://polygon-mumbai.infura.io/v3/yourAPI'
  1. Migrate the contracts to testnets, one by one.
truffle migrate --network gorli
truffle migrate --network rinkeby
truffle migrate --network ropsten
truffle migrate --network kovan
truffle migrate --network mumbai


b) Running the React app

  1. Install the required npm packages
cd client && npm install
  1. Run the React app
npm start

Usage

Video Demo: Youtube Link

1. Minting a document as NFT.

  • Select the file
  • Click on submit
  • After it's minted, you can invite people to sign your document by clicking on 'invite' button. (See 3.)

P.S The minter is by default a signee on the NFT

PSYdoc


2. Signing a document

  • Select the TokenID.
  • Select the file which you want to sign. (This step is to verify that you are signing the right document)
  • Click on 'verify' to see if the hashes match.
  • If it's a match, you can go ahead and sign the document.

PSYdoc


3. Invite signees

  • Select one of the NFT you have minted.
  • Enter the address of the person.
  • Click on invite.

PSYdoc

Contracts

So far, the smart-contracts have been deployed to

  1. Ropsten Network: 0x5c007a1d8051dfda60b3692008b9e10731b67fde

  2. Rinkeby Network: 0x6d5556285e263e3375Cf91cD53C0cc6534a74d1F

  3. Gorli Network: 0xf2944e8a6CB7EEeF75F67765f6f0DcE609870C6F

Contributing

Contributions are what make the open source community such an amazing place to be learn, inspire, and create. Any contributions you make are greatly appreciated.

  1. Fork the Project
  2. Create your Feature Branch (git checkout -b feature/AmazingFeature)
  3. Commit your Changes (git commit -m 'Add some AmazingFeature')
  4. Push to the Branch (git push origin feature/AmazingFeature)
  5. Open a Pull Request

Sponsorship

Even though this project will remain open-sourced, you can request new features by sponsoring it. :)

License

Distributed under the GPL License (aka GNU General Public License v3.0). See LICENSE for more information.