搭建第一个Dapp应用(3)——Solidity防伪溯源存证签证合约

  • 一丶配置:
    • 1.运行环境:FISCO BCOS联盟链中间件——WeBASE-Front
    • 2.合约语言:solidity 0.4.25版本
  • 二丶合约代码
    • Evidence.sol
    • EvidenceFactory
  • 三丶效果展示
    • 1.部署合约,初始化传入2个用户地址
    • 2.查看合法签名者地址
    • 3.查看是否为合法地址
    • 4.创建签证合约(只有合法签名者才能成功创建)
    • 5.查看签证信息
    • 6.合法签名者签名签证合约
    • 7.再次查看签证信息
  • 四丶上一篇文章:搭建第一个Dapp应用(2)——搭建WeBase-Front中间件
  • 五丶下一篇文章:搭建第一个Dapp应用(4)——搭建SmartDev-Scaffold

一丶配置:

1.运行环境:FISCO BCOS联盟链中间件——WeBASE-Front

2.合约语言:solidity 0.4.25版本

二丶合约代码

Evidence.sol

pragma solidity ^0.4.25;contract EvidenceSignersDataABI
{//验证是否是合法地址function verify(address addr)public constant returns(bool){}//根据索引值返回签名者地址function getSigner(uint index)public constant returns(address){} //返回签名人数function getSignersSize() public constant returns(uint){}
}contract Evidence{string evidence; //存证信息address[] signers;//储存合法签名者地址address public factoryAddr;//工厂合约地址//返回事件信息,查看log->判断正确或错误的信息event addSignaturesEvent(string evi);event newSignaturesEvent(string evi, address addr);event errorNewSignaturesEvent(string evi, address addr);event errorAddSignaturesEvent(string evi, address addr);event addRepeatSignaturesEvent(string evi);event errorRepeatSignaturesEvent(string evi, address addr);//查看此地址是否为合法签名者地址function CallVerify(address addr) public constant returns(bool) {return EvidenceSignersDataABI(factoryAddr).verify(addr);}//初始化,创建存证合约constructor(string evi, address addr)  {factoryAddr = addr;//tx.origin =>启动交易的原始地址(其实就是部署者的地址)//如果是外部调用,在此可以理解为函数调用者地址if(CallVerify(tx.origin)){evidence = evi;signers.push(tx.origin);newSignaturesEvent(evi,addr);}else{errorNewSignaturesEvent(evi,addr);}}//返回签名信息,合约签名者地址,当前签名者地址function getEvidence() public constant returns(string,address[],address[]){uint length = EvidenceSignersDataABI(factoryAddr).getSignersSize();address[] memory signerList = new address[](length);for(uint i= 0 ;i<length ;i++){signerList[i] = (EvidenceSignersDataABI(factoryAddr).getSigner(i));}return(evidence,signerList,signers);}//添加签名者地址(此地址必须为合约签名者地址)function addSignatures() public returns(bool) {for(uint i= 0 ;i<signers.length ;i++){//此时的tx.orgin为当前调用此方法的调用者地址if(tx.origin == signers[i]){addRepeatSignaturesEvent(evidence);return true;}}if(CallVerify(tx.origin)){signers.push(tx.origin);addSignaturesEvent(evidence);return true;}else{errorAddSignaturesEvent(evidence,tx.origin);return false;}}//返回所有的合约签名者地址function getSigners()public constant returns(address[]){uint length = EvidenceSignersDataABI(factoryAddr).getSignersSize();address[] memory signerList = new address[](length);for(uint i= 0 ;i<length ;i++){signerList[i] = (EvidenceSignersDataABI(factoryAddr).getSigner(i));}return signerList;}
}

EvidenceFactory

pragma solidity ^0.4.25;
import "Evidence.sol";contract EvidenceFactory{address[] signers;  //存储签名者地址event newEvidenceEvent(address addr); //新签证事件,返回地址//传入签名内容 string类型,创建合约Evidence并初始化function newEvidence(string evi)public returns(address){//this:代表当前工厂合约的地址Evidence evidence = new Evidence(evi, this);newEvidenceEvent(evidence);return evidence;}//获得签证信息function getEvidence(address addr) public constant returns(string,address[],address[]){return Evidence(addr).getEvidence();}function addSignatures(address addr) public returns(bool) {return Evidence(addr).addSignatures();}//初始化合约,导入签名者们的地址(数组传参)为合法签名者地址//只有合法签名者才有资格进行签证constructor(address[] evidenceSigners){for(uint i=0; i<evidenceSigners.length; ++i) {signers.push(evidenceSigners[i]);}}// 验证身份是否为合法签名者地址function verify(address addr)public constant returns(bool){for(uint i=0; i<signers.length; ++i) {if (addr == signers[i]){return true;}}return false;}//根据索引值返回合约签名者地址function getSigner(uint index)public constant returns(address){uint listSize = signers.length;//判断索引值是否越界if(index < listSize){return signers[index];}else{return 0;}}//获取当前合约签名者人数function getSignersSize() public constant returns(uint){return signers.length;}//返回所有合约签名者的地址function getSigners() public constant returns(address[]){return signers;}}

三丶效果展示

1.部署合约,初始化传入2个用户地址

  • 0x76c4e6e1d093092135d79677b724ae3470cdd6e3
  • 0xad6110c4f698ec996667fd5e2da0cdf5f1ee78e8

2.查看合法签名者地址

3.查看是否为合法地址


4.创建签证合约(只有合法签名者才能成功创建)


5.查看签证信息


6.合法签名者签名签证合约


7.再次查看签证信息

四丶上一篇文章:搭建第一个Dapp应用(2)——搭建WeBase-Front中间件

搭建第一个Dapp应用(2)——搭建WeBase-Front中间件

五丶下一篇文章:搭建第一个Dapp应用(4)——搭建SmartDev-Scaffold

搭建第一个Dapp应用(4)——搭建SmartDev-Scaffold

搭建第一个Dapp应用(3)——Solidity防伪溯源存证签证合约——2021.5.3相关推荐

  1. 搭建第一个Dapp应用——存证签证(DAPP开发)——2021.5.4

    搭建第一个Dapp应用(1)--搭建FISCO BCOS联盟链 搭建第一个Dapp应用(2)--搭建WeBase-Front中间件 搭建第一个Dapp应用(3)--Solidity防伪溯源存证签证合约 ...

  2. 什么是Dapp?带你从零开始搭建一个Dapp

    什么是Dapp?零基础带你搭建一个Dapp 前言:Dapp就是去中心化应用,它和我们平时使用的App(微信,支付宝等)只差了一个去中心化,如何理解这一去中心化?从体验层面来说:Dapp中并没有管理者, ...

  3. 蚂蚁区块链第13课 如何搭建一个DAPP应用(以姓名年龄为例)

    1,摘要 本文介绍如何使用Cloud IDE完成name-age智能合约的编译,获取其ABI和二进制码信息. 接着,本文介绍基于EXPRESS框架搭建的前端页面,完成已部署智能合约的调用,完成了相关功 ...

  4. 技术员如何开发一个DAPP区块链应用(以宠物商店为例)

    1. 文章摘要 [本文目标] 通过逐步的指导和截图举证,一步步带领一个技术新手完成一个宠物商店DAPP应用的开发和部署. [环境前置条件] 参考<第一课 如何在WINDOWS环境下搭建以太坊开发 ...

  5. 第七课 技术小白如何开发一个DAPP区块链应用(以宠物商店为例)

    1. 文章摘要 [本文目标] 通过逐步的指导和截图举证,一步步带领一个技术小白完成一个宠物商店DAPP应用的开发和部署. [环境前置条件] 参考<第一课 如何在WINDOWS环境下搭建以太坊开发 ...

  6. 创建一个DAPP的全流程

    写在前面 对以太坊.智能合约有所了解. 有一些编程基础,看得懂简单的代码逻辑和HTML. 环境安装 首先,我们要安装项目代码的运行环境 1.Node 安装 进入Node官网:Download | No ...

  7. 以太坊宠物商店 - 记录第一个Dapp

    背景 记录以前练习的第一个Dapp宠物商店,使用以太坊作为处理宠物收养的方式.该商店在特定时间可容纳16只宠物,并且他们已经拥有宠物数据库.所以我们做一个将以太坊地址与宠物相关联的dapp,官方提供了 ...

  8. (四)以太坊——运用truffle框架部署第一个DAPP ---- Pet-Shop

    内容大纲: 本项目是在以太坊上开的一个宠物领养的DAPP,借助了truffle框架和ganache进行合约部署.同时实现web端与区块链的交互. 1.设置开发环境 2.使用 Truffle Box 创 ...

  9. Pandownload 下线了,我花了 30 分钟自己搭建了一个网盘

    点击上方视学算法,选择设为星标 加个"星标★",每日好文必达! 文末包邮送3本技术书! 来源:码匠笔记 阅读文本大概需要 5 分钟 点击「阅读原文」查看pk哥原创精品视频. Pan ...

最新文章

  1. Go 性能优化技巧 8/10
  2. Python常用模块之time模块
  3. lua检测表中是否有某个值,如何检查表是否包含Lua中的元素?
  4. docker安装gamit_科学网—Ubuntu系统GAMIT/GLOBK程序安装 - 陈超的博文
  5. 【codecombat】 试玩全攻略 第十四关 已知敌人
  6. JavaOne 2012覆盖率
  7. ArcGIS Server 10 for java 注册SOE出现的问题
  8. SignalR循序渐进(三)简易的集群通讯组件
  9. 使用Visio 2003 + Oracle 11g创建ERD,反向工程师失败了吗?
  10. matlab实现双线性插值,使用双线性插值法放大图像(matlab实现)
  11. 无线信道的特征——衰落通识介绍
  12. IPv6实验NDP地址解析和DAD
  13. 蓝桥杯,历届试题,九宫重排
  14. 如何理解论文中常见的Top-1错误率和Top-5错误率?
  15. 清华大学用6个无线传感器搞定全身动作捕捉,可跑可跳可打滚
  16. 电商大数据——用数据驱动电商和商业案例解析
  17. 5天学Python(1)——语言基础
  18. 魔方内存盘的使用体验
  19. 计算机专业毕业论文java毕业设计开题报告基于SpringBoot的阳光线上交友系统
  20. strtok切割字符串,

热门文章

  1. 计算机辅助仿真模拟的英文缩写,全国计算机等级考试一级B模拟题.doc
  2. 第二届2011年国信蓝点杯软件设计大赛预赛的试题6
  3. eclipse导出jar包方法(详细说明)
  4. centos java 时间差8个小时_解决Centos7本机时间与实际时间相差8小时
  5. springboot中药知识分享网站设计 毕业设计-附源码201818
  6. Android记录22-关于开发中账号绑定的逻辑处理
  7. 2021十大关键显示科技趋势
  8. 免安装绿色软件共享 傻瓜gif制作 flash CS3 动画 影片制作
  9. 流媒体调研:云端视频监控与可视化对讲
  10. 人物志 | 知道创宇赵伟:一个核武器的自白