寫合約分爲一下幾步:
1、需求分析:
把證書上鍊,證書的關鍵信息是:姓名、身份ID, 地址、簽發時間、證書號,證書ID。
證書操作的幾個步驟:1、創建,2、查詢
2、代碼編寫:
根據需求,
a 、需要定義結構體:如下:Cert,裏面就包含了所有字段。
b、定義存儲變量:mapp 類型的certList,主要是通過證書唯一ID索引到證書詳細信息。
c、書寫創建函數:createElectronicCert,再有就是查詢。checkCert
pragma solidity ^0.5.7;
// SPDX-License-Identifier: MIT
contract ElectronicCert{
address public owner;
address public manager;
constructor() public{
owner = msg.sender;
}
struct Cert{
address d_owner;
string d_name; // name
string d_ProvinceID; //Province ID
string d_certId;
uint256 d_certType;
uint256 d_createTime;
}
mapping(string => Cert) public certList; //certID -> Deposit
mapping(string => address) public certID;
function createElectronicCert(
address ply_,
string memory name_,
string memory prID_,
string memory certID_,
uint256 Type_
) public {
require(msg.sender == manager,"not manager") ;
require(certID[certID_]==address(0),"");
Cert memory plyCert = Cert(ply_,name_,prID_,certID_,Type_,now);
certID[certID_] = ply_;
certList[certID_] = plyCert;
}
function getCertInfo(string memory cID_) view public returns(
address ply_,
string memory name_,
string memory prID_,
string memory certID_,
uint256 Type_,
uint256 cTime_
){
ply_ = certList[cID_].d_owner;
name_ = certList[cID_].d_name;
prID_ = certList[cID_].d_ProvinceID;
certID_ = certList[cID_].d_certId;
Type_ = certList[cID_].d_certType;
cTime_ = certList[cID_].d_createTime;
}
function checkCert(string memory prID_,string memory certID_) view public returns(bool){
return keccak256(abi.encodePacked(certList[certID_].d_ProvinceID)) == keccak256(abi.encodePacked(prID_));
}
function setManager(address _mAddr) public{
require(msg.sender == owner,"");
require(_mAddr != address(0),"");
manager = _mAddr ;
}
}
3、代碼發佈
代碼上鍊:選擇https://publicstellar.taiyuechain.com/#/
需要申請測試幣:可以去官網申請。
合約部署:
部署結束:合約地址在日誌中查看:
0x4cA31e16E04Df2333Cd4152869fD39F0c78A2143
4、測試:
可以進入合約調用進行測試:
需要填寫合約地址,和Json就可以開始測試。
整個過程非常方便。