Document signatures backed by NFTs — A new standard for digital agreements in Web3

Digital agreements can now be verified through cryptographic Proofs-of-Signature minted as NFTS by all parties involved.

WalliD
3 min readMay 27, 2022

WalliD ETH signatures for DocuSign empower DAOs and Web 3 users to back their agreements with Ethereum wallet signatures and to mint an NFT with that Proof-of-Signature. Know all about this service in our overview article here.

What is a Proof-of-Signature?

A Proof-of-Signature is the metadata that cryptographically ensures the content embedded in a specific file was signed by an identifiable entity (e.g. wallet address or ENS domain). In the Web2 this proof is typically achieved through RSA signatures from widely accepted digital certificates rooted in “trusted” Certificate Authorities that end up being embedded in the PDFs and can only be verified by whoever possesses the original file.

A proof such as this is generated within WalliD and DocuSign backend after all recipients sign the envelope and its output is an hash containing:

Document ID + Document content + Digital certificate signed by wallet pvt.keys

Why do we mint NFTs as Proof-of-Signature?

The hashes containing the Proofs-of-Signature are typically stored in centralised databases owned by traditional service providers. By turning them into NFTs, WalliD and DocuSign have decentralised that source of trust, making the cryptographic proof publicly available and verifiable on-chain, not only by the holders of the original file but by everyone who desires.

Thats why we built an ERC-1155 smart contract on Polygon network that mints and hosts these NFTs with the Proofs-of-Signature from all signing parties. Adopting this standard ensures that:

  • Proof-of-Signature is tokenised and publicly verifiable or exchangeable;
  • Proof-of-Signature is fractioned and minted by all document signers;
  • Document content and Proof-of-signature metadata is added together under the same smart contract item (NFT ID).
  • Proof-of-Signature is automatically available on-chain and browsable on NFT marketplaces;

How is the Proof-of-Signature generated?

The Proof-of-Signature smart contract is owned by WalliD’s multi-sig wallet and is connected to a relayer within WalliD and DocuSign backend as well as to the Proof-of-Signature smart contract. The relayer is triggered when the last recipient signs the document in order to:

  • Get document content from Docusign’s backend;
  • Get Proof-of-Signature hash from DocuSign’s backend;
  • Store the PDF file in a decentralised database
  • Generate a new NFT ID within the smart contract;
  • Add url from decentralised database to the NFT metadata
  • Mint a unique token for each signer within that NFT ID;

What’s in the smart contract?

The Proof-of-Signature smart contract is an ERC-1155 contract that acts as dynamic database and issues a new NFT for each new signed document and mints a new token for each signer. The smart contract is live on Polygon test network and open to testing here.

The smart contract parameters are the following:

  • ID: a unique identifier of a signed document within the contract
  • Amount: tokens minted by each signer involved
  • Token holders: the wallet addresses of the current NFT owner. By default, minting is done by the original signers

Then, each NFT will contain the following metadata:

  • URL: Link to the original PDF file stored in a decentralised database
  • Document hash: The final proof-of-signature hash generated within WalliD and DocuSign’s integration backend
  • Document name: the text field used to identify the PDF file
  • Signer wallet addresses: List of all the signers wallet addresses

Apply for beta

Private beta is now open for 100 users that wish to help us fine tune the product before public launch. Of course we have some surprises in store for our early supporters so apply here and secure your spot.

--

--

WalliD

Building the ultimate onboarding experience across the web2 and web3 through a Digital ID aggregator toolkit. Join us in our Discord: discord.gg/3vnsN7zVpT