EQUIVA JOURNAL Journal of Mathematics & Information Technology Volume 01 Ae Nomor 01 Ae Year 2023 Ae Pages: 49-67 IMPLEMENTATION OF BLOCKCHAIN AND NON FUNGIBLE TOKEN (NFT) TO VALIDATE THE AUTHENTICITY AND OWNERSHIP OF OFFICIAL DOCUMENTS Nur Fajri Azhar1, . Muhammad NasaAoi Kairupan2, . Ahmad Rusdianto Andarina Syakbani3, . Ansar Fadillah4, . 1,2,3,4 Department of Mathematics and Information Technology. Informatics. Kalimantan Institute of Technology. Balikpapan. Indonesia Penulis korespondensi: fajri@lecturer. 11201065@student. 11211005@student. 11201012@student. Abstract Data security and authenticity of ownership of private documents such as land certificates and identity cards or KTP are critical aspects of IndonesiaAos development process. Database system that has been imple- mented by the government to secure citizenAos personal information is still susceptible to 6 major risk factors, namely, data breaches and theft, damaged data due to virus attacks, limited data storage space, data loss due to system damage, data can be accessed without certain access rights, as well as a lack of system certainty when security threats occur. The rampant cases of data counterfeiting and selling of KTP and land certificates have been a problem for the Indonesian government and have claimed lives for a long time. Based on the problem of public service management, this proposal suggests the development of a public service application for KTP and land certificates based on blockchain titled NFT Document Inspector to help mitigate risks contained in the Indonesian governmentAos database system as well as ensuring the authenticity of KTP and land certificates. The results of this research will provide insights for policy makers, practitioners and researchers regarding the adoption of blockchain mechanisms to secure citizenAos private data in order to accelerate the digital transformation of public services for Indonesia to recover faster and rise stronger, which in this case is KTP and land certificate. It is possible to create system information application of KTP and land certificates as public service with blockchain as a database Blockchain provides semi-immutable data storage, hashed data, and log activities that improves data transparency, data security, and data reliability, still it is a daunting task to implement it in real-life due to blockchainAos scalability and infrastructure problems. INTRODUCTION Data security and authenticity of ownership of private documents such as land certificates and identity cards or KTP are critical aspects of IndonesiaAos development process . The Indonesian government is trying to pro- vide the best service for Indonesian citizens in ensuring the security of their personal data and the authenticity of their personal documents . in protecting their property rights . Database system that has been implemented by the government to secure citizenAos personal information is still susceptible to 6 major risk factors, namely, data breaches and theft, damaged data due to virus attacks, limited data storage space, data loss due to system damage, data can be accessed without certain access rights, as well as a lack EQUIVA JOURNAL: Vol. 01 Ae No. 01 Ae Yr. Ao23 of system certainty when security threats occur . The rampant cases of data counterfeiting and selling of KTP . and land certificates . have been a problem for the Indonesian government and have claimed lives for a long time. Based on the problem of citizenAos private documents in Indonesia, a solution is needed to ensure the security and authenticity of KTP data and land certificates stored in the government database system, in which case we propose the concept of a information system management application using blockchain technology. Blockchain is a distributed ledger that uses public-key encryption and consensus protocol verifying the authenticity to record data on nodes called blocks in a secure, transparent, decentralized, cost-effective, and time-efficient manner . Every node in the blockchain network that participates in computing has a copy of the data and all parties validate every new block added to the blockchain through a consensus validation . It can be perceived as a group of people sharing data using no intermediary agents, where trust between all the involved parties can still be built since all parties can see all the occurring transactions in the blockchain network . Blockchain also has a high level of security because of its own nature such as the use of an eternal ledger, a chain of blocks that are interrelated with the hash value of each previous data block so that if you change the data of a random block it will affect the entire blockchain making it have highly sensitive data and information, and decentralized in nature so that every node in the network must have the same data ledger according to consensus or the data block will be rejected. This makes the blockchain protected from fraudulent transactions from hackers . Previous studies . argue that blockchain has enormous potential in public services, because it can overcome problems such as human error, data privacy, and security. Studies on the implementation of blockchain technology in public services model . and citizenAos private data security systems . along with land certificates . have been carried out, however the implementation of a public service management in- formation system as an application that uses blockchain technology still does not exist. Based on the problem of public service management, this proposal suggests the development of a public service application for KTP and land certificates based on blockchain titled NFT Document Inspector to help mitigate risks contained in the Indonesian governmentAos database system as well as ensuring the authenticity of KTP and land certificates. The results of this research will provide insights for policy makers, practitioners and researchers regarding the adop- tion of blockchain mechanisms to secure citizenAos private data in order to accelerate the digital transformation of public services for Indonesia to recover faster and rise stronger, which in this case is KTP and land certificate. RESEARCH METHOD Research method of NFT Document Inspector application development consists of requirements analysis, system design, application development, system testing and analysis. Requirements analysis is carried out first to find specifications that are needed to create blockchain-based information system software needs and man- agement of KTP and land certificates by conducting an analysis of relevant national or international journals, also by looking for Indonesian laws and regulations related to KTP and land certificates. System design is carried out after the application requirements analysis process is finished by choosing an effective and efficient applicationAos architecture system and applicationAos user interface design that suits blockchain-based information system software for KTP and land certificates management. Application development is carried out by devel- oping blockchain-based information system software for KTP and land certificates management applications that match system design that has been created before. The application is web based because blockchain is web related (Web. and also for ease of development. System testing and analysis is carried out after the application development process is finished by matching the development result with the requirements analysis and system design that has been done before. System testing serves as a benchmark for the suitability of application devel- opment with research objectives. RESULT & ANALYSIS The NFT Document Inspector application creates and stores KTP and land certificate data as NonFungible Token (NFT) on the blockchain through a smart contract which is created using the Solidity EQUIVA JOURNAL: Vol. 01 Ae No. 01 Ae Yr. Ao23 programming language. Smart contracts are program code stored in the blockchain and executed when specified conditions are met. Smart contracts are used to automate the execution of a contract or agreement so that all participants can immediately be sure of the outcome without the need for a third party or wasted Smart contracts can be used to automate a workflow to trigger further actions when conditions are met . Non-Fungible Token (NFT) is a digital asset on the blockchain that has a unique identification address and metadata as a characteristic that differentiates it from others. NFT can represent physical objects from the real world whose process is called tokenization. NFT assets cannot be exchanged and cannot be replicated due to the unique characteristics of the token assets. NFTs are technically smart contracts in that they are programmable and cannot be modified once launched . Figure 1: Transaction attempt to save a KTP photo with a size of 247 KB. The blockchain network used to create and store NFT KTP smart contracts and land certificates is Ethereum. Ethereum itself is a blockchain network that can create decentralized applications, store asset data, carry out transactions and communicate without third party authority. Ethereum has its own cryptocurrency, namely Ether. Ether is used to pay AytaxesAy for certain transactions . , which are related to the data management process in the NFT Document Inspector application, such as doing create, update, and delete operation on data that is stored in Ethereum blockchain. It is necessary to store data on the application form for making a KTP using a traditional database, which in this case we use PostgreSQL. Photos of KTPs registered in smart contracts also need to be stored in traditional databases because storing images in JPG/PNG format on the blockchain is very computationally expensive, which results in very expensive transaction fees on public blockchains, such as Ethereum. This is because Ethereum uses the concept of gas as the required fee to run a transaction, which in this EQUIVA JOURNAL: Vol. 01 Ae No. 01 Ae Yr. Ao23 case is a transaction for registering KTP data and photos into the blockchain. The fee to pay for gas in ethereum is called gas fee, which can change in value. The concept of gas in Ethereum can be analogous to gasoline which is used by cars and motorbikes to run. The gas fee in gasoline is like the cost of 1 liter of gasoline which price can change at any time depending on the governmentAos decision, even though the amount of gasoline remains the same, which is 1 liter. Based on figure 1, the transaction fee for storing one data along with a photo of a KTP is worth around 750 ETH or if converted to Rupiah becomes Rp. 15,151,217,107. his price is the result of converting Ethereum to Rupiah when the document is made, prices can chang. This cost is very expensive and impossible to implement in the real world, however, this can be prevented by the government creating its own blockchain network or private blockchain to store KTP and land certificate because there is no need for a gas concept to replace computational costs during Researchers in this case use PostgreSQL to store KTP and land certificates registered on the Blockchain as a temporary alternative solution because creating a private blockchain for the government requires further research. Data Model of Application Form for Generating KTP Table in PostgreSQL Property Name address Wallet kotaLahir provinsiKotaLahir tanggalLahir jenisKelamin statusPerkawinan golonganDarah berlakuHingga rukunTetangga rukunWarga kotaKtpDibuat provinsiKtpDibuat statusValidasi namaFile tipeMime Data Type String String String String Date Enum Enum Enum Enum String Enum Enum String String String String String String String String String String Integer Is Primary Key Yes Is Unique Yes Table 1: Data Property for KTP. Table 1 is the property for form KTP, namely the primary key in the form of an addressWallet to store the address of the MetaMask wallet for which to create a KTP so that it is registered in the blockchain, personal data . uch as name, city of birth, etc. ), validation status as a parameter for an application for if a KTP is approved or not, filename, mimetype, and photo size to store information related to KTP photo, createdAt and updatedAt which are created automatically as a determinant of the date when data was created and changed. KTP photos are stored in the assets folder and stored according to the type of document (KTP or land certificat. with the photo file name based on the addressWallet stored in the table. Stored data can be accessed using an API that has been built with Node. js by the researcher. EQUIVA JOURNAL: Vol. 01 Ae No. 01 Ae Yr. Ao23 Router. get("/", async . eq, res, nex. => { const ktpData = await FormKtp. findAll(). return res. tpDat. } catch . { next. }). Figure 2: API Route to Get All KTP Data Figure 2 is the API for returning all KTP data that is registered in blockchain. The code attempts to fetch all the information stored in the AyFormKtpAy database table by utilizing the AyFormKtp. findAll()Ay The retrieved data is then assigned to a constant variable named AyktpDataAy, when the client sends a request, the Ayres. tpDat. Ay function sends the data stored in AyktpDataAy. The Aynext. Ay function directs the error to the subsequent middleware within the Express. js error handling sequence if any error Router. get("/:walletAddress", async . eq, res, nex. => { const ktpData = await FormKtp. findByPk. addressWalle. if (!ktpDat. { return res. end(). return res. tpDat. } catch . { next. }). Figure 3: API Route to Find KTP Data by OwnerAos Wallet Address Figure 3 is the API for returning a KTP data that you want to register into the blockchain according to the requested MetaMask wallet address. The code listens to the Ay/:walletAddressAy endpoint, when a request is made with a specific wallet address as a parameter, it retrieves the related data from the AyFormKtpAy database using AyFormKtp. findByPkAy and the Ayreq. addressWalletAy value. The router returns a 404 error and ends the response if the data is not found, but, if the data exists, the data is sent back to the client as a JSON response. Router. post("/", ktpImgStorage. single("file"), async . eq, res, nex. => { const { filename, mimetype, size } = req. const statusValidasi = "DIPROSES". const newKtp = await FormKtp. statusValidasi, namaFile: filename, tipeMime: mimetype, ukuran: size, }). return res. ewKt. } catch . { next. }). EQUIVA JOURNAL: Vol. 01 Ae No. 01 Ae Yr. Ao23 Figure 4: API Route to Create New KTP Data Router. delete("/:walletAddress", async . eq, res, nex. => { const ktpData = await FormKtp. findByPk. addressWalle. if (!ktpDat. { return res. end(). await ktpData. destroy(). return res. end(). } catch . { next. }). Figure 5: API Route to Delete KTP Data by OwnerAos Wallet Address Figure 4 the API for registering data along with KTP selfies into the PostgreSQL database. The new KTPAos status will be set AuDIPROSESAy by default and stored on the database before the KTP can be The server creates new KTP data using AuFormKTP. createAy with values from req body and req file when the request is made with a certain request body and request file. The server will return new KTP data after successfully saving the new KTP. The Aynext. Ay function directs the error to the subsequent middleware within the Express. js error handling sequence if any error occurs during this process. Figure 5 is the API for deleting KTP data registered in the database based on the MetaMask wallet address. The code deletes KTP data by listening to the Ay/:walletAddressAy using the AudeleteAy HTTP method. The method retrieves the related data from the AyFormKtpAy database using AyFormKtp. findByPkAy and the Ayreq. addressWalletAy value when a request is made with a specific wallet address as a parameter. The method returns a 404 error and ends the response if the data is not found, meanwhile the data will be deleted from the database using the Aude- stroyAy method if the data is found. The Aynext. Ay function directs the error to the subsequent middleware within the Express. js error handling sequence if any error occurs during this process. Router. put("/:walletAddress", async . eq, res, nex. => { const ktpData = await FormKtp. findByPk. addressWalle. if (!ktpDat. { return res. end(). const keys = Object. forEach(. ey, inde. => { ktpData. = req. }). await ktpData. save(). return res. tpDat. } catch . { next. }). Figure 6: API Route to Edit KTP Data by OwnerAos Wallet Address EQUIVA JOURNAL: Vol. 01 Ae No. 01 Ae Yr. Ao23 Figure 6 is the API for changing KTP data registered in the database based on the MetaMask wallet The data that is changed is in accordance with the request with the limitation that the data that is changed in the column is in accordance with the model that has been made. Model Property of KTP Photo Table in PostgreSQL addressWallet: { type: DataTypes. STRING, primaryKey: true, unique: true, allowNull: false, imgString: { type: DataTypes. STRING. allowNull: false. Figure 7: Model for KTP Photo Figure 7 is the property of the KTP photo. KTP photo table consists of 4 data columns, namely the primary key in the form of addressWallet to store the MetaMask wallet address whose KTP is registered in the blockchain, imgString to store KTP photos in base64 string form, createdAt and updatedAt which are gener- ated automatically as date determinants when data is created and changed. Data stored in these tables can be accessed using an API that has been created with Node. js by the researcher. Router. get("/", async . eq, res, nex. => { const ktpData = await FotoKtp. findAll(). return res. tpDat. } catch . { next. }). Figure 8: API Route to Get All KTP Photo Figure 8 is the API for returning all data in the KTP photo table, in the form of addressWallet and imgString. The code attempts to fetch all data that is stored in the AyFotoKtpAy database table by utilizing the AyFotoKtp. findAll()Ay method. The retrieved data is then assigned to a constant named AyktpDataAy. The Ayres. tpDat. Ay function sends the data stored in AyktpDataAy when the client sends a request. The Aynext. Ay function directs the er- ror to the subsequent middleware within the Express. js error handling sequence if any error occurs during this process. Figure 9 is an API for returning data based on the MetaMask wallet address registered in the blockchain, in the form of addressWallet and imgString according to the request. The code listens to the Ay/:walletAddressAy endpoint. The method retrieves the requested data from the AyFormKtpAy database using AyFotoKtp. findByPkAy and the Ayreq. addressWalletAy value when a request is made with a specific wallet address as a parameter. The method will return a 404 error and end the response if the data is not The data will be sent to the client as a JSON response if the data is found. EQUIVA JOURNAL: Vol. 01 Ae No. 01 Ae Yr. Ao23 Router. get("/:walletAddress", async . eq, res, nex. => { const ktpData = await FotoKtp. findByPk. addressWalle. if (!ktpDat. { return res. end(). return res. tpDat. } catch . { next. }). Figure 9: API Route to Find KTP Photo by OwnerAos Wallet Address Router. post("/", async . eq, res, nex. => { const { addressWallet, imgString } = req. if (!. ddressWallet && imgStrin. ) { return res. json({ error: "Masukkan address wallet dan string base64 dari fotonya!" }). const fotoKtp = await FotoKtp. create({ . body }). return res. otoKt. } catch . { next. }). Figure 10: API Route to Create New KTP Photo Figure 10 is the API for adding KTP photos registered in the Blockchain into the KTP photo table. The input data is in the form of Wallet address and imgString registered in the blockchain and sent in JSON The Aynext. Ay function directs the error to the subsequent middleware within the Express. js error handling sequence if any error occurs during this process. Router. delete("/:walletAddress", async . eq, res, nex. => { const fotoKtp= await FotoKtp. findByPk. addressWalle. if (!fotoKt. { return res. end(). await fotoKtp. destroy(). return res. end(). } catch . { next. }}). Figure 11: API Route to Delete KTP Photo EQUIVA JOURNAL: Vol. 01 Ae No. 01 Ae Yr. Ao23 Figure 11 is an API for deleting KTP photos in the KTP photo table based on the MetaMask wallet address registered in the blockchain network. The method retrieves the requested data from the AyFotoKtpAy database using AyFotoKtp. findByPkAy and the Ayreq. addressWalletAy value when a request is made with a specific wallet address as a parameter. It will return a 404 Not Found error and end the response if the data is not found. The data will be deleted from the database using the AudestroyAy method if the data is found. The Aynext. Ay function directs the error to the subsequent middleware within the Express. js error handling sequence if any error occurs during this process. The API for changing KTP photo data is not created because there are only two data fields, so itAos enough to delete and re-create the data when it wants to be updated. Figure 12: KTP Smart Contract Class Diagram Smart Contract Design The development of this application uses smart contracts as program instructions for data storage in the blockchain so an appropriate smart contract design is needed to create and store KTP data safely. Authorize contract contains user accounts as a struct and maps it with the userAos wallet address. Account struct contains two properties which are isValid, for the account validity, and role, for account access authoriza- tion to the smart contract. isValid property can also act as soft-deletion when the value is set to false. There are also some contract methods to support contract functionality. Some contract methods need to only be accessed by certain authorized users for example like admin or superadmin. Admin can interact with every contract method except contract methods relating to the right of authority while super admin can interact with every contract method like admin including right of authority. Method addUser is used for adding a new account as an user, this method can only be interacted with by admin and super admin because it requires certain regula- tions in adding new users. Method addAdmin is used for adding user accounts as an admin and can only be called by super admin because admin can call crucial smart contractAos method that holds userAos private data, therefore super admin is needed as the highest role for authorization to control userAos application access rights, especially when adding a new admin. Method deactivateUser can be interacted with by admin and super admin for deactivating users and can be called by super admin, method deactivateUser can be used when there is a malicious user in the application. Method deactivateAdmin for deactivating admin and can be called only by super admin,method deactivateAdmin can be used when there is a malicious admin in the application. Method isSuperAdmin for checking EQUIVA JOURNAL: Vol. 01 Ae No. 01 Ae Yr. Ao23 superadmin status of a registered user. Method isAdmin for checking admin status of a registered user. Method isUser for checking validation status of a registered user. KtpNFT contract contains the name of the NFT, symbol of the NFT, owners mapping by token id, and NFT balances mapping by owners. There are also some methods to support contract functionality. Method tokenURI to get token data by Id. Method balanceOf for checking ownerAos NFT balance. Method ownerOf for checking owner of NFT by Id,and Method safeMint can be interacted with by admin and super admin to create new KTP NFT because only authorized users can make KTP which are super admin and admin. Figure 13: KTP Smart Contract Class Diagram KTPInspector contract contains NIK count for generating NIK for new KTP. KTP owner counter stores all owners wallet addresses, and Ktp data struct and maps it with every userAos wallet address. KTP data struct has properties Valid for the KTP data validity. NIK or id of KTP, address of KTP NFT, and KTP data. There are also some methods to support contract functionality. Method findKtp to get KTP data by ownerAos Method editKTP is used for editing KTP data and can only be called by admin and super admin. Method editKTP cannot edit NIK because the NIK must be unique to every person and it will never change in the entire lifetime of the user. Method removeKtp is used for removing a KTP data by ownerAos address wallet and can be called only by admin and super admin because only authorized users can remove KTP data which are super admin and admin. Method getNIKCount for count KTP that have the same first 12 digits of NIK and can only be called by admin and super admin. Method addKtp for adding new KTP data to blockchain and can be interacted with by admin and super admin because data KTP contains sensitive information so only certain authorized users can add new KTP data into the blockchain network. Method addKtp generates new NIK for users by getting the NIK code count from blockchain and concat it to the NIK code. Every time method AddKTP is called, the counter of NIK code will be incremented. Figure 13 contains a smart contract class diagram for Land Certificate. The smart contract is divided into two contracts which are Authorize and LandOwnerShipInspector. Authorize contract is used as an authorization setting for smart contract access rights by managing users role to interact with the smart LandOwn- erShipInspector contract is used to store mapping of land ownership data as well as ownership history of each land ownership document and as an interface between the users and the blockchain in validating and searching stored Land Ownership data. Authorize contract contains user accounts as a struct and maps it with the userAos wallet address. Account struct contains two properties which are isValid, for the account validity, and role, for account access authoriza- tion to the smart contract. isValid property can also act as soft-deletion when itsAo value is set to false. There are also some contract methods to support contract functionality. Some contract methods need to only be accessed by certain authorized users for example like admin or superadmin. Admin can EQUIVA JOURNAL: Vol. 01 Ae No. 01 Ae Yr. Ao23 interact with every contract method except contract methods relating to the right of authority while super admin can interact with every contract method like admin including right of authority. Method addUser is used for adding a new account as an user, this method can only be interacted with by admin and super admin because it requires certain regula- tions in adding new users. Method addAdmin is used for adding user accounts as an admin and can only be called by super admin because admin can call crucial smart contractAos method that holds userAos private data, therefore super admin is needed as the highest role for authorization to control userAos application access rights, especially when adding a new admin. Method deactivateUser can be interacted with by admin and super admin for deactivating users and can be called by super admin, method deactivateUser can be used when there is a malicious user in the application. Method deactivateAdmin for deactivating admin and can be called only by super admin,method deactivateAdmin can be used when there is a malicious admin in the application. Method isSuperAdmin for checking superadmin status of a registered user. Method isAdmin for checking admin status of a registered user. Method isUser for checking validation status of a registered user. LandOwnerShipInspector contract contains ownership history of each land ownership document which is an array of wallet addresses mapping by land ownership document id and land ownership document struct map- ping by string id of document. Land OwnerShip Document struct has properties valid for the document validity, current ownerAos wallet address, and Land OwnerShip Document data. There are also some methods to support contract functionality. Method findLandOwnerShipDocument to get land certificate document by id. Method findAlandOwnerShipDocumentByOwner is used to get every land certificate document that is owned by a certain ownerAos wallet address. Method getLandOwnerShipHistory is used to get ownership history for land certificate and can be called only by the current owner, admin, and Method addLandOwnerShip- Document is used for adding new land certificates into the blockchain network and can be called only by admin and super admin to prevent malicious user to accessing this method. Method moveOwnerLandOwnerShipDoc- ument is used for moving ownership of land certificate and can only be called by admin and super admin to prevent malicious user accessing this Method editLandOwnerShipDocument is used for editing land certificate can be called only by admin and super admin. Method editLandOwnerShipDocument needs cer- tain regulation logic and only authorized users which are admin and super admin can edit ownership of land certificates. Method removeLandOwnerShipDocument used for removing land certificates. Method removeLandOwnerShipDocument can be called only by authorized users which are admin and super admin. Figure 14: Remix IDE Before Deploying Smart Contract Figure 15: Remix IDE After Smart Contract Deployed EQUIVA JOURNAL: Vol. 01 Ae No. 01 Ae Yr. Ao23 Figure 16: Function for Check Access Rights Figure 17: Testing Unregistered Wallet Figure 18: Testing Adding Admin Wallet Access Right with Random Wallet Figure 19: Reverted Transaction Messages EQUIVA JOURNAL: Vol. 01 Ae No. 01 Ae Yr. Ao23 Smart Contract Testing Based on figure 14, there's an option for selecting which account to launch the smart contract to blockchain and also the amount of test ethereum. Smart contract testing is necessary because once a smart contract is deployed, it canAot be edited because the nature of blockchain itself is immutable. Figure 15 shows the Remix IDE after smart contract deployed where there are many buttons for smart contract The smart contract interface in figure 16 is used for testing access rights of the smart contract deployer as a super admin to manage the entire smart contract including access rights of another user, then thereAos access rights as an admin that can manage KTP data that are stored in the blockchain. Access rights as a user is limited to register itAos KTP and see itAos KTP once registered. Figure 17 shows the testing process for unregistered wallet addresses so they donAot have any access rights to the smart contract. Figure 18 and figure 19 show the process of testing of adding admin access rights for an account that does not have the rights for it. The contractAos transaction is reverted by blockchain because the requirement is not fulfilled. Figure 20 hows the testing for add new admin, the user input new wallet address to AuaddAdminAy method with superadmin account. Figure 21 shows the role of the wallet address after calling method AuaddAdminAy by calling isAdmin method which is now the returned value is true. Figure 22 shows the testing process to add a new KTP. The parameters for this contract interaction are the contract ownerAos address wallet. NIK, and encrypted KTP data. Figure 23 shows the testing process to find an existing KTP, where only super admin, admin, and the owner of the KTP itself can access it as shown in figure 24. Figure 20: Testing Adding Admin Wallet Access Right with Superadmin EQUIVA JOURNAL: Vol. 01 Ae No. 01 Ae Yr. Ao23 Figure 21: Testing Access Right New Admin Figure 23: Messages After Contract Transaction Figure 22: Testing Adding New KTP Figure 24: Messages After Contract Transaction Figure 25: Remix IDE After Deploying Land Certificate Inspector Smart Contract Figure 26: Adding New land certificate Figure 27: Testing Find New land certificate EQUIVA JOURNAL: Vol. 01 Ae No. 01 Ae Yr. Ao23 Based on figure 25. Remix IDE shows many buttons for contract interaction to test the smart contract. Figure 26 and 27 shows the testing process for adding a new land certificate document. The parameters for this function are id land certificate document, owner address wallet, and NFT URI of the certificate. The land certificate document data will be available in blockchain after the transaction completes. This can be proven by using the function to find a land certificate document by id which will return the land certificate Figure 28: Adding New land Certificate on Same User Figure 29: Testing Find Land Certifacate by User Figure 28 and figure 29 shows users can have multiple land certificate documents. Those certificates are stored in blockchain and the data can be searched by using the find All function by OwnerAos address wallet after adding the new land certificate with a different id and the same owner. Figure 30: Moving The Ownership of A Land Certificate to Another Account Figure 30 shows smart contract ability to edit the owner of a land certificate document by moving the The moveOwnerLandOwnerShipDocument requires new owner address and id of land ownership document. Figure 31 and figure 32 shows the land certificate document owned by each user after successfully moving the ownership of the land certificate document. Each of the owners now have one land ownership certificate meaning the move ownership of the document is successful. Figure 33 shows the testing process for removing a land certificate from blockchain by Id, then the land certificate document will not be able to be searched as shown in figure 34 and figure 35. Figure 31: Check Land Certificate Data from Previous User Figure 32: User Check Land Certificate Data from New EQUIVA JOURNAL: Vol. 01 Ae No. 01 Ae Yr. Ao23 Figure 33: Remove Land Certificate by Id Figure 34: Check Owner of Removed Land Certificate Figure 35: Message After Check Owner of Removed Land Certificate Figure 36: Home page view Figure 37: Validator Dashboard View EQUIVA JOURNAL: Vol. 01 Ae No. 01 Ae Yr. Ao23 Figure 38: KTP form view Figure 39: KTP search result User Interface Home page contains a navbar, the application title, and a search bar. Users can access KTP forms, land certificate forms, and validator forms via the buttons on the navbar. The search bar is used to search for KTP or land certificates registered in the application and the blockchain network. Validator dashboard is a page made specifically for admins and super admins from NFT Document Inspector. Admins and super admins can approve or reject applications for KTPs and land certificates from users so that they will or wonAot be registered into the blockchain network. KTP form page contains a list of user personal data that must be filled in to create a digital KTP in the form of a Non-Fungible Token (NFT) which will be registered into the blockchain network. The results of approval/rejection of requests from users will be notified by the application. KTP or land certificates that have been registered in the application will be displayed for the super admin/admin of NFT Document Inspector or the owner of the document when searched based on their wallet EQUIVA JOURNAL: Vol. 01 Ae No. 01 Ae Yr. Ao23 Conclusion Based on the results of research that has been done, it is possible to create system information application of KTP and land certificate as public service with blockchain as a database system. Blockchain provides semiimmutable data storage, hashed data, and log activities that improves data transparency, data security, and data reliability, still it has some drawbacks if it is compared with existing technology used by the government now, which is cloud database system. Blockchain is a distributed ledger system so every node in a blockchain network is required to have the same The more nodes are created, the longer the transaction will take because each node needs to validate new data that will be registered into the blockchain, this makes blockchain storage system difficult to implement in Indonesia, which has a large area, therefore it is required to provide an effective and efficient model storage with existing infrastructure. It is also very important for Indonesia government to create a private network if it wants to implement blockchain as database to store citizenAos important assets, such as KTP and land certificate, because private network can ignore gas concept as fee transaction, which is used in public blockchain network, to increases scalability of the system, especially for storing files and images that are related to governmentAos private assets. References