如何在泰岳区块链上--开发证书上链合约
写合约分为一下几步:
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就可以开始测试。
整个过程非常方便。