Blockchain for 3D Designs

As 3D printing becomes more mainstream, many 3D designers can struggle to protect their work.  One way to look at how to do this can be via blockchain.  

Today, it is possible to create a 3D design using software ranging from Tinkercad to professional design packages such as Solidworks.  Once the design is created, it is saved in a standard file format such as .STL, .OBJ, .3MF.  The file format 3MF is the newer of the three and offers support to store attributes such as the designer’s name within the file format.  As with many file formats, these attributes though can be overwritten.

Could blockchain provide a permanent record of the designer’s work?  The answer is yes.  My proposal would be to store data about the design file, including design authorship onto the blockchain.  In this case, I would propose an Ethereum blockchain solution in order to ensure that designers have access to write the information to the blockchain and also to enable the general public to know that the design belongs to a particular designer.

Whilst storing the design on the blockchain would be prohibitive, off chain solutions are available.  One other simpler solution can be to store the hash of the design file on the blockchain directly.

One problem still to be resolved would be how to confirm that the original designer is really the owner.  One option can be if when the original design is created and stored in 3MF format, the digital signature is attached to the file.  

In terms of writing the data to the blockchain, below is a first version of a solidity program for the Ethereum blockchain to store the details about the author and hash.

Other ways to improve the functionality (and to be explored at a later date) include:

1. The ability to ensure that only the owner or a group of owners can modify the ownership of the file on the blockchain

2. Return the email address of the owner if you have the hash

3. The ability to sell the design (or copies of the design) to another person via the blockchain and receive payment in ETH

First version of Solidity code:

// SPDX-License-Identifier: GPL-3.0

pragma solidity >=0.6.0;
contract StoreDesign {

    struct Design {
        string designerName;
        string companyName;
        string designHash;
        string eMail;

    mapping(address => Design) public designDetail;

    function setDesign(string memory _dName, string memory _cName, string memory _dHash, string memory _email) public {
        designDetail[msg.sender].designerName= _dName;
        designDetail[msg.sender].companyName= _cName;
        designDetail[msg.sender].designHash= _dHash;
        designDetail[msg.sender].eMail= _email;

Leave a Comment

This site uses Akismet to reduce spam. Learn how your comment data is processed.