Smart Contract untuk Sertifikat Event berbasis Ethereum

Septiyan Andika I
3 min readOct 26, 2020

Biasanya dalam event online maupun offline, sertifikat diperlukan untuk menujukkan kehadiran peserta, dan biasanya ada sertifikat yang dipalsukan. Untuk menangani pemalsuan serifikat teresebut salah satu caranya bisa di masukkan ke dalam blockchain, karena data di dalam blokchain immutable. Dalam tulisan kali ini kita akan memabahas bagaiman membuat smart contract untuk sertifikat event di dalam Ethereum network berbasis solidity.

Smart contract akan memiliki beberapa fungsi, yakni :

  • Menyimpan pemilik event
  • Menyimpan nama event, dan tanggal event
  • Menambah peserta dalam event tersebut
  • Menampilkan dan data peserta
  • Mengunci sertifikat tersebut sehingga tidak bisa menambah peserta lagi

Let’s get started. buka Remix IDE, bikin file Certificate.sol :

pragma solidity >=0.4.22 <0.7.0;contract Certificate {

constructor() public {
}
}

Menyimpan data pemilik event, nama event dan tanggal event
Wallet dan smart contract dalam etherum memiliki address, address tersebut di buat sebagai identifier. di dalam smart contract ini kita menggunakan address dari yang mempublish smart contract sebagai owner, dan hanya dia yang bisa melakukan penyimpanan data ke smart contract.

contract Certificate {

address public owner;
string public name;
uint256 public date;
bool public locked;

constructor(string memory _name, uint256 _date) public {
owner = msg.sender;
name = _name;
date = _date;
locked = false;
}
...
...
...

karene di solidity tidak ada type data date, disini kita menggunakan type data uint256. nanti yang disimpan adalah tanggal dalam satuan detik. untuk type data lebih lengkapnya bisa di check di dokumentasi solidty https://solidity.readthedocs.io/en/v0.7.4/types.html#

Menambah peserta dalam event tersebut
Data informasi peserta disimpan dalam type struct, dan data tesrebut akan di mapping ke unik Id dalam type data address sebagai identifier.

struct Participant {
string name;
string org;
}
mapping(address => Participant) public participants;

Sebelum membuat fungsi untuk menambah peserta, terlebih dahulu membikin fungsi untuk merestrict hanya onwer yang bisa nembahkan data. kita bisa membuat fungsi modifier , agar bisa di reuse oleh fungsi lain. Dalam funsi addParticipant akan ada pengecekan apakah sertifikat itu sudah di lock atau belum, jika sudah di lock tidak akan bisa menmbahkan peserta lagi. kita memerlukan unik id sebagai identier peserta di dalam serifikat tersebut, untuk membuat unik id kita bisa mengunakan cara membuat address dari kombinasi sender address dan waktu fungsi tersebut di eksuksi.

address(bytes20(keccak256(abi.encodePacked(msg.sender,now))));

Berikut potongan kode untuk fungsi addParticipant

// Reusable modifier function
modifier onlyOwner() {
require(msg.sender == owner);
_;
}

function addParticipant(
string memory _name,
string memory _org) public onlyOwner returns( address) {
require(locked == false, "must not locked");

address uniqueId = address(bytes20(keccak256(abi.encodePacked(msg.sender,now))));
participants[uniqueId] = Participant(_name, _org);
return uniqueId;
}

Menampilkan dan data peserta
nenampikan data peserta yang sudah di simpan di smart contract, dan fungsi tersebut bisa di access secare publik.

function getParticipant(address _id) public view returns(string memory, string memory) {
Participant memory temp = participants[_id];
return (temp.name, temp.org);
}

Mengunci Sertikat
Sertifikat dikunci agar owner tidak bsia menambahkan pserta lagi jika sudah selesai, sehingga tidak bisa di modifikasi lagi datanya.

function finish() public onlyOwner {
locked = true;
}

Kita sudah membikin smart contract untuk sertifikat event, kode lengkapnya bisa di lihat di repo blockchain-not-only-about-cryptocurrency, Kalian bisa mencobanya di remix. Untuk step selanjutnya kita akan membuat decentralized applications atau yang biasa disebut dapps untuk berinteraksi dengan smart contract tesersebut.

--

--

Septiyan Andika I

Shut up and do the best. You'll never know where it will bring you