This tutorial covers digital certificate installation for Solidity smart contracts.
Pre-requisite
Before you can install your digital certificate on your smart contract, you need to perform the activation process where we will issue you the certificate after activation. Once you receive your digital certificate, you may begin the installation process as below.
TL;DR
Below is a video tutorial that explains it all.
#1. You Need To Activate Your Certificate
To activate your certificate, go to your account page, and click on the Order menu. Then, click on the View button to view your order.
After clicking on the View button, you will be able to see the activation form. Fill in the form with your details and your smart contract information.
Please ensure that you enter the same smart contract name that you will be using when deploying your contract as well as the same wallet address that you will use to deploy.
Once you have filled in the activation form, we shall verify your information and issue your certificate. You will be notified via email once your certificate is ready.
#2. Download Your Certificate
Once your smart certificate is ready, go to your account page and click on the Certificates menu. You will be able to see a Download Certificate button. Click on the button to download your public digital certificate. Here’s a sample of a certificate in PEM format.
#3. Copy Your Digital Certificate ASCII Text
Your certificate file should be a .pem file containing Base64 ASCII text. It is a PEM encoded certificate. You may open the file using any typical text editor, such as Notepad (Windows) or TextEdit (Mac).
In the file, you should copy the ASCII text that represents your certificate. It looks something like below.
-----BEGIN CERTIFICATE-----
MIIFhzCCBG+gAwIBAgIIFNTFi4cf6ogwDQYJKoZIhvcNAQELBQAwfDEYMBYGA1UE
CgwPWnRhbXAgUHRlLiBMdGQuMRkwFwYDVQQKDBBodHRwczovL3p0YW1wLmlvMRkw
FwYDVQQDDBBadGFtcCBJc3N1aW5nIENBMR0wGwYJKoZIhvcNAQkBFg5oZWxsb0B6
dGFtcC5pbzELMAkGA1UEBhMCU0cwHhcNMjMwOTIzMDEwMjQzWhcNMjQwOTIyMDEw
MjQzWjCB3zEUMBIGA1UECgwLaVRva2VuIEluYy4xDzANBgNVBAMMBmlUb2tlbjEe
MBwGCSqGSIb3DQEJARYPam9obkBpdG9rZW4uY29tMRQwEgYDVQQHDAtMb3MgQW5n
ZWxlczETMBEGA1UECAwKQ2FsaWZvcm5pYTELMAkGA1UEBhMCVVMxOjA4BgorBgEE
AYPbTQMCDCoweEY4MkI0ZTU1ZDk2MWY3NUFBOUE3MzAwRjQ1MmU2ZkI2RURmMUU4
ODYxIjAgBgorBgEEAYPbTQMBDBJodHRwczovL2l0b2tlbi5jb20wggEiMA0GCSqG
SIb3DQEBAQUAA4IBDwAwggEKAoIBAQCryCDaVNyR5w29I1zHB+4FG1oV7Z7cOldw
KHjdMVMWIBF4HRKfkp0j0fSaFJsAaQ3F/xQIduod1v092qcSUPwib0NgWb2L9zyR
iut45nY2Xu3vg8qq38pww60BzZszLsuKUrI61YAn3vQxwFFYuidYrKm3XYl5Shdm
YepYAu+Q+nDxQyknbquMtbYK76X8D7gDWogCTjTSU+duopg0ffHQoQh2WJ5Nqdlv
WfVl7kvczGzGiVHiQwx2jD+PrM6rL1AbIxsgXv0dU4UAQ6OLnHRUhWYo+9dYH2v3
EI3QbUaBj1qtKGrphRVu6V4TMXbWLJjiJHiPTWZUT6c43NEQelDnAgMBAAGjggGn
MIIBozAJBgNVHRMEAjAAMA4GA1UdDwEB/wQEAwIHgDAWBgNVHSUBAf8EDDAKBggr
BgEFBQcDAzAdBgNVHQ4EFgQU5Eic7fmA4XdpblBp4tkQmjptn18wHwYDVR0jBBgw
FoAUAK2tZoc0HL4ZoxcAEJi09hp1/F4wLwYIKwYBBQUHAQEEIzAhMB8GCCsGAQUF
BzAChhNodHRwczovL3p0YW1wLmlvL2NhMDMGA1UdHwQsMCowKKAmoCSGImh0dHBz
Oi8venRhbXAuaW8vY2EvaXNzdWluZy1jYS5jcmwwgccGA1UdIASBvzCBvDBzBgor
BgEEAYPbTQEBMGUwIwYIKwYBBQUHAgEWF2h0dHBzOi8venRhbXAuaW8vY2EvY3Bz
MD4GCCsGAQUFBwICMDIaMFp0YW1wIFB0ZS4gTHRkLiBDZXJ0aWZpY2F0aW9uIFBy
YWN0aWNlIFN0YXRlbWVudDBFBgorBgEEAYPbTQIBMDcwNQYIKwYBBQUHAgIwKRon
WnRhbXAgU21hcnQgQ29udHJhY3QgQ2VydGlmaWNhdGUgUG9saWN5MA0GCSqGSIb3
DQEBCwUAA4IBAQBPxrgMZAIsAfiysOuVTtGUmSJXTTxRj4+6kRfzBEmtHgCdH8mF
HhDqTpVwQLe3Bqli4V+qRcQyXOpnY+QnPeYh3gJzVpHinn+DyBjmH9GwpditWKJ3
sFC2k53cJJDbGo90Dvw4758yle0GxSSXTUW970NB6XwqeVPePCvfUXs9q5vT29g7
VJpl2fd0R9ZzaDnsRLg9mV3Mmet/PWgwncM5uKKIR+zqJRgO9tEncN/YPmrs8dbP
XrgW1czjogb9hStBvI1G6Ap8fCEY8VWzQikcXkRAXFv/nmEi1y+gvsliuEr2allN
cD1jUZ0fkD9NCQEjdI1U3lAWQF3YAeZuXZtv
-----END CERTIFICATE-----
IMPORTANT: Please ensure you copy the-----BEGIN CERTIFICATE-----
and -----END CERTIFICATE-----
as well.
#4. Format Your Digital Certificate
Your smart contract certificate is essentially an X.509 certificate. The funny thing about this digital certificate format is that it comes with line breaks at every 64th character. You need to replace the line breaks with \n
.
To do this, you can use the search and replace function on Coding Tools website. Below are the steps.
- Paste your certificate ASCII code.
- Enter
\n
in the “regular expression” input field and\n
in the “replace to” input field. - Press the “Regex Replace” button.
- Then, press “Copy Result” button to copy the new certificate ASCII text.
View the screenshot below. Once done, your certificate ASCII text should appear as one single line.
#5. Include Your Certificate in Your Smart Contract, Then Compile and Deploy
Let’s move to your smart contract. In your Solidity contract code, you need to have a public variable called certificate
with string datatype. Then, assign your digital certificate one-line ASCII code to this variable. Below is an example of using an ERC721 NFT smart contract code that is also available on our GitHub.
// SPDX-License-Identifier: MIT pragma solidity ^0.8.9; import "@openzeppelin/contracts/token/ERC721/ERC721.sol"; import "@openzeppelin/contracts/access/Ownable.sol"; contract MyNFT is ERC721, Ownable { string public certificate; // String public variable for certificate constructor() ERC721("MyNFT", "MNFT") { // Assign certificate variable with your certificate ASCII code in one line certificate = "-----BEGIN CERTIFICATE-----\nMIIFhzCCBG+gAwIBAgIIFNTFi4cf6ogwDQYJKoZIhvcNAQELBQAwfDEYMBYGA1UE\nCgwPWnRhbXAgUHRlLiBMdGQuMRkwFwYDVQQKDBBodHRwczovL3p0YW1wLmlvMRkw\nFwYDVQQDDBBadGFtcCBJc3N1aW5nIENBMR0wGwYJKoZIhvcNAQkBFg5oZWxsb0B6\ndGFtcC5pbzELMAkGA1UEBhMCU0cwHhcNMjMwOTIzMDEwMjQzWhcNMjQwOTIyMDEw\nMjQzWjCB3zEUMBIGA1UECgwLaVRva2VuIEluYy4xDzANBgNVBAMMBmlUb2tlbjEe\nMBwGCSqGSIb3DQEJARYPam9obkBpdG9rZW4uY29tMRQwEgYDVQQHDAtMb3MgQW5n\nZWxlczETMBEGA1UECAwKQ2FsaWZvcm5pYTELMAkGA1UEBhMCVVMxOjA4BgorBgEE\nAYPbTQMCDCoweEY4MkI0ZTU1ZDk2MWY3NUFBOUE3MzAwRjQ1MmU2ZkI2RURmMUU4\nODYxIjAgBgorBgEEAYPbTQMBDBJodHRwczovL2l0b2tlbi5jb20wggEiMA0GCSqG\nSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCryCDaVNyR5w29I1zHB+4FG1oV7Z7cOldw\nKHjdMVMWIBF4HRKfkp0j0fSaFJsAaQ3F/xQIduod1v092qcSUPwib0NgWb2L9zyR\niut45nY2Xu3vg8qq38pww60BzZszLsuKUrI61YAn3vQxwFFYuidYrKm3XYl5Shdm\nYepYAu+Q+nDxQyknbquMtbYK76X8D7gDWogCTjTSU+duopg0ffHQoQh2WJ5Nqdlv\nWfVl7kvczGzGiVHiQwx2jD+PrM6rL1AbIxsgXv0dU4UAQ6OLnHRUhWYo+9dYH2v3\nEI3QbUaBj1qtKGrphRVu6V4TMXbWLJjiJHiPTWZUT6c43NEQelDnAgMBAAGjggGn\nMIIBozAJBgNVHRMEAjAAMA4GA1UdDwEB/wQEAwIHgDAWBgNVHSUBAf8EDDAKBggr\nBgEFBQcDAzAdBgNVHQ4EFgQU5Eic7fmA4XdpblBp4tkQmjptn18wHwYDVR0jBBgw\nFoAUAK2tZoc0HL4ZoxcAEJi09hp1/F4wLwYIKwYBBQUHAQEEIzAhMB8GCCsGAQUF\nBzAChhNodHRwczovL3p0YW1wLmlvL2NhMDMGA1UdHwQsMCowKKAmoCSGImh0dHBz\nOi8venRhbXAuaW8vY2EvaXNzdWluZy1jYS5jcmwwgccGA1UdIASBvzCBvDBzBgor\nBgEEAYPbTQEBMGUwIwYIKwYBBQUHAgEWF2h0dHBzOi8venRhbXAuaW8vY2EvY3Bz\nMD4GCCsGAQUFBwICMDIaMFp0YW1wIFB0ZS4gTHRkLiBDZXJ0aWZpY2F0aW9uIFBy\nYWN0aWNlIFN0YXRlbWVudDBFBgorBgEEAYPbTQIBMDcwNQYIKwYBBQUHAgIwKRon\nWnRhbXAgU21hcnQgQ29udHJhY3QgQ2VydGlmaWNhdGUgUG9saWN5MA0GCSqGSIb3\nDQEBCwUAA4IBAQBPxrgMZAIsAfiysOuVTtGUmSJXTTxRj4+6kRfzBEmtHgCdH8mF\nHhDqTpVwQLe3Bqli4V+qRcQyXOpnY+QnPeYh3gJzVpHinn+DyBjmH9GwpditWKJ3\nsFC2k53cJJDbGo90Dvw4758yle0GxSSXTUW970NB6XwqeVPePCvfUXs9q5vT29g7\nVJpl2fd0R9ZzaDnsRLg9mV3Mmet/PWgwncM5uKKIR+zqJRgO9tEncN/YPmrs8dbP\nXrgW1czjogb9hStBvI1G6Ap8fCEY8VWzQikcXkRAXFv/nmEi1y+gvsliuEr2allN\ncD1jUZ0fkD9NCQEjdI1U3lAWQF3YAeZuXZtv\n-----END CERTIFICATE-----"; } function updateCert(string memory cert) public onlyOwner { certificate = cert; } }
Do not forget to include the updateCert
function to allow you to change your certificate in the future. Once done, you may compile and deploy your smart contract on the blockchain.
#6. Read The Digital Certificate of Your Smart Contract
To ensure everything runs smoothly, go ahead and read the certificate
variable to ensure it returns the certificate ASCII code. If yes, your smart contract is now certified with your ownership!
Now, supported block explorers and wallets shall be able to read your smart contract certificate.