Skip to content

xdlianrong/lr-maskbid

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

MaskBid使用手册

部署智能合约

依赖:gitfisco-bcos v2.7.2fisco-bcos console

克隆MaskBid项目的git仓库,执行:

git clone [email protected]:xdlianrong/lr-maskbid.git

智能合约文件MaskBid.sol位于MaskBid/Contract文件夹中,将其复制到区块链控制台的智能合约文件夹。本合约依赖接口合约文件Table.sol

部署合约时,在区块链控制台中执行:

[group:1]> deploy MaskBid MaskBid_Reg
transaction hash: 0xbb43d6ef4e9b66310c34bba1de542ea265d474a2fd5893c0767a923bbf139b77
contract address: 0x2bb5a1058eb68051ca8849cad2d9cde3ce55f0d3
currentAccount: 0xe7e46d5e4ae6696251f76c58aa662c51d67e7585

其中MaskBid_Reg为主表地址,此项可自定义。部署完成后控制台会返回包括合约地址contract address在内的多个值。在首次进入系统时,需要填入主表地址MaskBid_Reg与合约地址contract address,因此这两个值应妥善保管。

至此智能合约部署完成。

部署服务

依赖:Docker Engine,安装步骤可见官方教程

拉取 Docker 镜像

使用 Docker 命令行执行:

docker pull qing98/maskbid:latest

部署一个服务

docker container run --rm \
    --name MaskBid \
    -p ${bind_ip}:8080 \
    -v ${dir_conf}:/app/conf \
    -d qing98/maskbid:latest

参数

  • bind_ip - 用于访问服务的端口
  • dir_conf - 存放SDK证书以及配置文件sdkConfig.toml的文件夹的路径

注意:配置文件需命名为sdkConfig.toml,否则无法读取。

批量部署服务

依赖:Docker Compose,安装步骤可见官方教程

以批量部署一个招标方,两个投标者的服务为例。

创建docker-compose.yml文件,写入以下内容:

version: "3.9"
services:
    tender:
        image: qing98/maskbid:latest
        ports:
            - "8080:8080"
            # "访问端口:8080"
        volumes:
            - "/home/qqy/MaskBid/conf:/app/conf"
            # "conf文件夹:/app/conf"
        container_name: tender
        # 为容器命名,方便辨认
    bidder1:
        image: qing98/maskbid:latest
        ports:
            - "8081:8080"
        volumes:
            - "/home/qqy/MaskBid/conf:/app/conf"
        container_name: bidder1
    bidder2:
        image: qing98/maskbid:latest
        ports:
            - "8082:8080"
        volumes:
            - "/home/qqy/MaskBid/conf:/app/conf"
        container_name: bidder2

请确保访问端口未被占用,然后执行docker-compose up -d即可批量部署服务,执行docker-compose down可将已部署的服务关闭。

部署完成后可以在${ip_address}:8080访问招标方服务,在${ip_address}:8081访问投标者1服务,在${ip_address}:8082访问投标者2服务。${ip_address}为宿主机的ip地址。

进入系统

初次运行

部署服务后初次访问会自动弹出区块链设置框,请在其中填入正确的合约地址和主表地址。

初次运行

合约地址形如0x2bb5a1058eb68051ca8849cad2d9cde3ce55f0d3,主表地址形如MaskBid_Reg

填写完毕后点击修改,保存设置。

登陆页面

访问服务时首先看到的是登陆界面。登陆界面左半部分为登录账户功能区,右半部分为注册账户功能区。

登陆页面

注册账户

还未拥有账户时,需要先注册新的账户。根据您的身份,选择招标方投标方,并输入账户名称。点击注册按钮,若账户名称合法即可完成注册,并自动登入系统。

登入系统后,会自动下载一个存有登录信息的加密文件*.mbk,后续登录需要用到这个文件。请妥善保管该文件,一旦丢失便无法找回,账户也无法再次登录。

注意:招标方账户名称不允许重复;投标方账户名称可以重复,但账户公钥不会重复。

登录账户

点击登录按钮,在弹出来的文件选择框中,选择注册时下载的*.mbk文件,并确认上传。上传成功后便可登入系统。登陆时无需选择身份。

区块链设置

点击右下角的齿轮图标,在弹出来的设置框中,可以更改合约地址和主表地址。

招标方主页

招标方主页分为三个大的功能区,分别为标的管理标的审计区块链概览。招标方主要操作区域为标的管理区。在这里招标方可以发布新的标的,查看正在进行中的标的以及查看已经结束的标的。

招标方标的管理发布标的

标的管理区

当招标方准备发布新的标的时,只需在标的管理区的发布标的界面填写新标的的信息,包括标的名称发起时间持续时间标的描述,然后点击发布标的即可完成新标的的发布。

招标方标的管理发布标的填写内容

标的描述为可选内容,其余项为必填内容;发起时间为投标者可以开始发起投标的时间,可选范围限制在操作当日至未来三十天内;持续时间是指在发起时间后投标者可以进行投标的时间段的长度,即处于可报价阶段的时间长度。可选时间单位为分钟小时。当处于可报价阶段结束后,投标方之间会自动进行加密竞标。

标的成功发布后会自动跳转到进行中的页面,该页面展示了已经发布,且处于可报价阶段的标的。

列表内容为标的名称标的编号竞标开始时间,以及详细信息按钮。

招标方标的管理进行中的

点击详细信息按钮可以看到该标的的详细信息。点击后弹出来的展示框中展示了该标的的详细信息,以及已投标的投标方信息。此时暂无投标方进行投标。

招标方标的管理进行中的标的信息

若已有投标方进行投标,则会展示投标方的编号投标机构名称投标机构公钥以及投标结果。因为报价状态仍然在进行中,还未进行竞标,所以投标结果均为等待竞标

招标方标的管理进行中的标的信息有人投标

当可报价阶段结束后,投标方之间会自动进行加密竞标。此时我们可以到已结束的界面查看已经处于结束阶段的标的。该界面展示了已结束标的的标的名称标的编号投标人数,以及详细信息审计按钮。

招标方标的管理已结束的标的

点击详细信息按钮可以看到该已结束标的的详细信息。点击后弹出来的展示框中展示了该标的的详细信息,以及投标方的信息;投标方列表会展示投标方的编号投标机构名称投标机构公钥以及投标结果。若该投标方中标,则投标结果中标,反之为失败。该界面还会展示中标方的中标金额,但不会泄露未中标方的金额。

招标方标的管理已结束的标的详细信息

点击审计按钮可以直接跳转到标的审计区的审计结果页面。该页面展示了此次投标的简略信息以及审计结果。

招标方标的审计检索结果

标的审计区

标的审计区可以对某个特定的标的进行审计操作。当招标方准备进行审计时,便可以在标的检索界面的招标方名称输入框内输入某个招标方的名称,然后点击检索按钮。

招标方标的审计检索页

招标方名称可以是任何真实存在的招标方的名称,包括本账号的。如果要对本账号的标的进行审计,更方便的方法是到标的管理区的已结束的页面选择标的进行审计。

点击检索按钮后,会列出该招标方已结束的标的。列表展示了已结束标的的标的名称标的编号投标人数,以及审计按钮。

招标方标的审计检索页内容

选定某个标的后,点击审计按钮会跳转到审计结果页面,该页面展示了此次投标的简略信息以及审计结果。审计结果列表会展示每个投标方的审计结果,以及整个标的的审计结果。审计过程框会简要输出审计的流程。

招标方标的审计检索结果

区块链概览区

区块链概览区可以直观的展示系统当前所处的区块链的详细信息。

概览栏显示了当前区块链的区块高度,总交易数总节点数

概览栏下方的动态图表每五秒刷新一次,以更加直观的方式展示了总交易数的动态变化。图表中的蓝色折线为总交易数的变化,而绿色竖条为某个五秒时间段内新增的交易数。图表采用了动态坐标轴,因此不会出现总交易数变得很大之后看不到曲线的变化的情况。

招标方区块链概览

再下方是最新生成的区块和交易信息。

区块信息展示了区块编号,区块生成时间以及区块中包含的交易数量。

交易信息展示了交易hash,交易生成时间,以及交易发起方和接收方的地址。

新生成的区块和交易信息会出现在列表最上方,旧的区块和交易信息在一定时间后会取消显示,最后只会保留最新的一些区块和交易信息。这样既保证了区块和交易信息有足够的时间展示,又保证了页面不会随时间变得越来越长。

招标方区块链概览详细

账户信息

界面右上角会显示当前账户的名称。当鼠标悬浮在账户名称上时会显示一个菜单,内容为账户信息,系统帮助退出登录。点击退出登录后可以更换账户。

点击账户信息后会弹出账户信息页面,该页面展示了账户名称,账户身份,账户地址账户公钥四项信息。

招标方用户信息

投标方主页

投标方主页相较于招标方主页有所简化,分为两个大的功能区,即为投标审计。投标方主要操作区域为投标区。在这里投标方可以检索指定招标方的标的,查看等待竞标的标的和已经结束竞标的标的。

投标方标的检索

投标区

当投标方准备投标时,便可以在标的检索界面的招标方名称输入框内输入某个招标方的名称,然后点击检索按钮。

点击检索按钮后,会列出该招标方所有处于报价状态的标的。列表展示了标的名称标的编号竞标开始时间,以及投标按钮。

投标方标的检索加载标的

选择一个标的,点击投标按钮后,会弹出投标中心界面。该界面展示了这个标的的招标机构标的名称标的编号开始时间结束时间标的内容,以及投标金额输入框。

当确认要进行投标时,在投标金额输入框中输入投标金额,然后点击提交投标按钮,便可发布投标。

投标方标的检索加载标的详细信息

注意:

  1. 投标一旦发布便不可撤销。
  2. 当竞标开始时间到来之时,系统会自动与其他投标者进行加密竞标,该过程根据投标者人数的不同会耗费几秒到数十秒不等的时间。
  3. 在竞标尚未结束前请勿退出账号的登陆状态,否则会出现难以预料的后果。

成功发布投标后,会自动跳转到等待中的页面。该页面展示了已经投标但还未进行竞标的标的。列表内容为招标机构标的名称标的编号竞标开始时间投标金额,以及详细信息按钮。

投标方等待中的投标

点击详细信息按钮后弹出来的展示框中展示了该标的的详细信息。

投标方等待中的投标详细信息

已结束的界面展示了已经竞标结束的标的。列表内容为招标机构标的名称标的编号投标金额竞标结果,以及详细信息审计按钮。在竞标结果一栏会展示该标的的竞标结果。

投标方已结束的投标

此时点击详细信息按钮,在弹出来的展示框中展示了该标的的详细信息,并且包含此标的最后的中标金额。

投标方已结束的投标详细信息

点击审计按钮可以直接跳转到审计区的审计结果页面。该页面展示了此次投标的简略信息以及审计结果。

投标方标的审计检索结果

审计区

审计区可以对某个特定的标的进行审计操作。基本操作与招标方审计一致。

投标方标的审计检索页内容

选定某个标的后,点击审计按钮会跳转到审计结果页面,该页面展示了此次投标的简略信息以及审计结果。审计过程框会简要输出审计的流程。与招标方审计结果页不同的地方在于,投标方审计结果页不显示具体投标方的信息。

投标方标的审计检索结果

生成 Docker 镜像

若修改了源代码需要重新生成 Docker 镜像,只需将重新编译好的MaskBidClient-1.0.jar文件替换MaskBid/MaskBidApp文件夹中原有的,然后在MaskBid/MaskBidApp文件夹下运行:

docker image build -t maskbid .

运行结束后便会生成新的maskbid镜像。

前端源文件位置

前端页面的源文件位于MaskBid/Client/src/main/resources/static文件夹中。

git仓库主要模块简介

  • Client模块为java编写的系统客户端后台程序,负责前端界面的后台任务,并与区块链进行交互。前端源文件也位于该模块之中。

  • Contract模块为智能合约。

  • Core模块为C++编写的密码学核心,负责进行加密竞标。依赖gmpntl模块。

  • MaskBidApp模块负责 Docker 镜像的生成。