搭建第一个Dapp应用(3)——Solidity防伪溯源存证签证合约——2021.5.3
搭建第一个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相关推荐
- 搭建第一个Dapp应用——存证签证(DAPP开发)——2021.5.4
搭建第一个Dapp应用(1)--搭建FISCO BCOS联盟链 搭建第一个Dapp应用(2)--搭建WeBase-Front中间件 搭建第一个Dapp应用(3)--Solidity防伪溯源存证签证合约 ...
- 什么是Dapp?带你从零开始搭建一个Dapp
什么是Dapp?零基础带你搭建一个Dapp 前言:Dapp就是去中心化应用,它和我们平时使用的App(微信,支付宝等)只差了一个去中心化,如何理解这一去中心化?从体验层面来说:Dapp中并没有管理者, ...
- 蚂蚁区块链第13课 如何搭建一个DAPP应用(以姓名年龄为例)
1,摘要 本文介绍如何使用Cloud IDE完成name-age智能合约的编译,获取其ABI和二进制码信息. 接着,本文介绍基于EXPRESS框架搭建的前端页面,完成已部署智能合约的调用,完成了相关功 ...
- 技术员如何开发一个DAPP区块链应用(以宠物商店为例)
1. 文章摘要 [本文目标] 通过逐步的指导和截图举证,一步步带领一个技术新手完成一个宠物商店DAPP应用的开发和部署. [环境前置条件] 参考<第一课 如何在WINDOWS环境下搭建以太坊开发 ...
- 第七课 技术小白如何开发一个DAPP区块链应用(以宠物商店为例)
1. 文章摘要 [本文目标] 通过逐步的指导和截图举证,一步步带领一个技术小白完成一个宠物商店DAPP应用的开发和部署. [环境前置条件] 参考<第一课 如何在WINDOWS环境下搭建以太坊开发 ...
- 创建一个DAPP的全流程
写在前面 对以太坊.智能合约有所了解. 有一些编程基础,看得懂简单的代码逻辑和HTML. 环境安装 首先,我们要安装项目代码的运行环境 1.Node 安装 进入Node官网:Download | No ...
- 以太坊宠物商店 - 记录第一个Dapp
背景 记录以前练习的第一个Dapp宠物商店,使用以太坊作为处理宠物收养的方式.该商店在特定时间可容纳16只宠物,并且他们已经拥有宠物数据库.所以我们做一个将以太坊地址与宠物相关联的dapp,官方提供了 ...
- (四)以太坊——运用truffle框架部署第一个DAPP ---- Pet-Shop
内容大纲: 本项目是在以太坊上开的一个宠物领养的DAPP,借助了truffle框架和ganache进行合约部署.同时实现web端与区块链的交互. 1.设置开发环境 2.使用 Truffle Box 创 ...
- Pandownload 下线了,我花了 30 分钟自己搭建了一个网盘
点击上方视学算法,选择设为星标 加个"星标★",每日好文必达! 文末包邮送3本技术书! 来源:码匠笔记 阅读文本大概需要 5 分钟 点击「阅读原文」查看pk哥原创精品视频. Pan ...
最新文章
- Go 性能优化技巧 8/10
- Python常用模块之time模块
- lua检测表中是否有某个值,如何检查表是否包含Lua中的元素?
- docker安装gamit_科学网—Ubuntu系统GAMIT/GLOBK程序安装 - 陈超的博文
- 【codecombat】 试玩全攻略 第十四关 已知敌人
- JavaOne 2012覆盖率
- ArcGIS Server 10 for java 注册SOE出现的问题
- SignalR循序渐进(三)简易的集群通讯组件
- 使用Visio 2003 + Oracle 11g创建ERD,反向工程师失败了吗?
- matlab实现双线性插值,使用双线性插值法放大图像(matlab实现)
- 无线信道的特征——衰落通识介绍
- IPv6实验NDP地址解析和DAD
- 蓝桥杯,历届试题,九宫重排
- 如何理解论文中常见的Top-1错误率和Top-5错误率?
- 清华大学用6个无线传感器搞定全身动作捕捉,可跑可跳可打滚
- 电商大数据——用数据驱动电商和商业案例解析
- 5天学Python(1)——语言基础
- 魔方内存盘的使用体验
- 计算机专业毕业论文java毕业设计开题报告基于SpringBoot的阳光线上交友系统
- strtok切割字符串,
热门文章
- 计算机辅助仿真模拟的英文缩写,全国计算机等级考试一级B模拟题.doc
- 第二届2011年国信蓝点杯软件设计大赛预赛的试题6
- eclipse导出jar包方法(详细说明)
- centos java 时间差8个小时_解决Centos7本机时间与实际时间相差8小时
- springboot中药知识分享网站设计 毕业设计-附源码201818
- Android记录22-关于开发中账号绑定的逻辑处理
- 2021十大关键显示科技趋势
- 免安装绿色软件共享 傻瓜gif制作 flash CS3 动画 影片制作
- 流媒体调研:云端视频监控与可视化对讲
- 人物志 | 知道创宇赵伟:一个核武器的自白