存证应用在FISCOBCOS中的应用

Seven 2022-01-17 11:37:53
Categories: > > Tags:

案例1:仲裁链:基于区块的存证实践!

应用背景

2017年10月,微众银行联合广州仲裁委(即下文“仲裁机构”)、杭州亦笔科技(即下文“存证机构”)三方基于区块链技术搭建了“仲裁链”。“仲裁链”基于区块链多中心化、防篡改、可信任特征,利用分布式数据存储、加密算法等技术对交易数据共识签名后上链,实时保全的数据通过智能合约形成证据链,满足证据真实性、合法性、关联性的要求,实现证据及审判的标准化。

2018年2月,广州仲裁委基于“仲裁链”出具了业内首个裁决书。

截止目前,“仲裁链”已经稳定运行5个多月。

应用价值

“仲裁链”接入仲裁机构,让仲裁机构参与到存证业务过程中来,一起共识、实时见证,为仲裁提供了真实透明可追溯的业务数据源。这对于仲裁机构来说,保证了链上交易信息不被篡改,有助于仲裁机构快速完成证据的核实、解决纠纷,降低仲裁过程中人力物力和时间成本,提升司法效率,降低仲裁成本;对于金融机构来说,”仲裁链”将快速有效解决纠纷,提高运营和风控效率;对于用户来说,”仲裁链”在保障合法权益的同时,能够有效保护隐私,降低解决纠纷的时间和经济成本。

功能

线上仲裁存证主要包括存证、取证,核证三部分:

在发起存证前,需部署存证初始条件智能合约,约定存证生效所需条件(在这里就是微众,仲裁机构,存证机构的签名)。

1)存证:业务数据经微众存证系统签名后发起上链,上链成功后通知存证机构及仲裁机构对数据签名确认。存证机构及仲裁机构收到通知后,取出链上数据进行核实后完成签名,至此整个存证流程完成。在整个存证流程中,由智能合约保证,任何方都不能更改已存证的数据,只能追加存证数据。同时,存证系统准实时异步上链,对正常的业务逻辑无影响。

2) 取证:当有取证需求时,微众银行从”仲裁链”选择数据后,提交仲裁机构。仲裁机构对微众银行提供的数据进行解析,获取到区块链相关地址信息。通过地址调取链上数据。

3) 核证:区块链核证指的是仲裁机构在取证后,调用SDK相关接口,判断存证是否满足存证生效的初始条件。

存证设计(构造函数)
EvidenceSignersData
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
pragma solidity ^0.4.4;
import "Evidence.sol";

contract EvidenceSignersData{
address[] signers;
event newEvidenceEvent(address addr);
function newEvidence(string evi, string info,string id,uint8 v, bytes32 r,bytes32 s)public returns(address)
{
Evidence evidence = new Evidence(evi, info, id, v, r, s, this, msg.sender);
newEvidenceEvent(evidence);
return evidence;
}

function EvidenceSignersData(address[] evidenceSigners)public{
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;
}

}
Evidence
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
pragma solidity ^0.4.4;
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;
string evidenceInfo;
string evidenceId;
uint8[] _v;
bytes32[] _r;
bytes32[] _s;
address[] signers;
address public signersAddr;

event addSignaturesEvent(string evi, string info, string id, uint8 v, bytes32 r, bytes32 s);
event newSignaturesEvent(string evi, string info, string id, uint8 v, bytes32 r, bytes32 s,address addr);
event errorNewSignaturesEvent(string evi, string info, string id, uint8 v, bytes32 r, bytes32 s,address addr);
event errorAddSignaturesEvent(string evi, string info, string id, uint8 v, bytes32 r, bytes32 s,address addr);
event addRepeatSignaturesEvent(string evi, string info, string id, uint8 v, bytes32 r, bytes32 s);
event errorRepeatSignaturesEvent(string evi, string id, uint8 v, bytes32 r, bytes32 s, address addr);

function CallVerify(address addr) public constant returns(bool) {
return EvidenceSignersDataABI(signersAddr).verify(addr);
}

function Evidence(string evi, string info, string id, uint8 v, bytes32 r, bytes32 s, address addr, address sender) public {
signersAddr = addr;
if(CallVerify(sender))
{
evidence = evi;
evidenceInfo = info;
evidenceId = id;
_v.push(v);
_r.push(r);
_s.push(s);
signers.push(sender);
newSignaturesEvent(evi,info,id,v,r,s,addr);
}
else
{
errorNewSignaturesEvent(evi,info,id,v,r,s,addr);
}
}

function getEvidenceInfo() public constant returns(string){
return evidenceInfo;
}

function getEvidence() public constant returns(string,string,string,uint8[],bytes32[],bytes32[],address[]){
uint length = EvidenceSignersDataABI(signersAddr).getSignersSize();
address[] memory signerList = new address[](length);
for(uint i= 0 ;i<length ;i++)
{
signerList[i] = (EvidenceSignersDataABI(signersAddr).getSigner(i));
}
return(evidence,evidenceInfo,evidenceId,_v,_r,_s,signerList);
}

function addSignatures(uint8 v, bytes32 r, bytes32 s) public returns(bool) {
for(uint i= 0 ;i<signers.length ;i++)
{
if(msg.sender == signers[i])
{
if( _v[i] == v && _r[i] == r && _s[i] == s)
{
addRepeatSignaturesEvent(evidence,evidenceInfo,evidenceId,v,r,s);
return true;
}
else
{
errorRepeatSignaturesEvent(evidence,evidenceId,v,r,s,msg.sender);
return false;
}
}
}
if(CallVerify(msg.sender))
{
_v.push(v);
_r.push(r);
_s.push(s);
signers.push(msg.sender);
addSignaturesEvent(evidence,evidenceInfo,evidenceId,v,r,s);
return true;
}
else
{
errorAddSignaturesEvent(evidence,evidenceInfo,evidenceId,v,r,s,msg.sender);
return false;
}
}

function getSigners()public constant returns(address[])
{
uint length = EvidenceSignersDataABI(signersAddr).getSignersSize();
address[] memory signerList = new address[](length);
for(uint i= 0 ;i<length ;i++)
{
signerList[i] = (EvidenceSignersDataABI(signersAddr).getSigner(i));
}
return signerList;
}
}

案例2:武汉链动时代科技有限公司(inBC)研发的“inBC区块链存证服务系统”

应用背景

电子证据尽管已经被广泛应用于各行各业,但此前一项研究指出,电子证据被司法机构有效认可,并被明确做出采信判断的是少数,仅占比7.2%。电子证据的真实性如何衡量和判定,一直是行业难题。

应用价值

电子证据容易被篡改,存储证据的相关设备管理、调用同步性差,相关主体及业务的数据格式、内容缺乏统一化认证,这些都是电子证据难以被大面积采用的关键因素。

区块链技术特点有助于较好地解决上述问题,因此被快速的应用于存证业务中,利用其分布式存储、不可篡改、智能合约、共同维护等技术性质,电子存证真正实现了多中心监督、数据全程透明、业务主体责任精准关联、信任共识。因此,不少产业均构建了针对自身业务的区块链系统,业务主体行为、相关业务电子存证均以区块形式存储于链上,有效发挥其取证价值。

特点

然而,仅仅有相应的区块链系统还远远不够。存证数据上链过程中,原有主体业务系统容易被改变、存证数据上传慢、IT系统对接过程繁琐、应用接口扩展性差、场景应用单一等问题,使得“区块链+存证”在实施过程中缺乏关键性的工具类产品、服务支撑。

存证设计

inBC技术方案的核心,就是能够让开发者用最熟悉的调用API的方式进行开发,有效串联业务系统、区块链前置模块/数据库、BSN网络,实现数据库与链的联接

img

这样一来,一个“管理-业务-查询-扩展”的前后功能逻辑就在链上正式展开,并且实现了数据统一化、模板化等一体操作。

不同的业务系统接入到区块链上时,由于每个业务系统定义的数据字段并不相同,容易形成多链化数据,上链之后各业务系统的数据交互体验将非常差。inBC通过将异构数据统一为标准数据,推动数据管理元模板化、标准化,大大提高了效率,实现了对链上数据的格式化协同。

基于此,inBC既可以成为“插件式”服务,与原业务系统高度融合、关联;也可以成为原业务系统的“伴生产品”,独立于原业务系统之外,实现系统化耦合,满足更加定制化、特殊化的区块链存证需求。无论采用哪种方式,inBC都能够保证对原有业务系统的改动降低到最小水平。

场景1:区块链+存证的权限合约编写

应用背景

电子数据存证是记录“用户身份验证-数据创建-存储-传输”全过程的方式,应用一系列安全技术全方位确保电子数据的真实性、完整性、安全性,在司法上具备完整的法律效力。

存证设计(构造函数)

../../../../_images/IMG_5413.PNG

引用链接