Skip to content

Commit efa567b

Browse files
authored
Merge branch 'master' into develop
2 parents ada3a04 + 8023066 commit efa567b

File tree

7 files changed

+202
-141
lines changed

7 files changed

+202
-141
lines changed

doc/ChainSQLDesign.md

Lines changed: 57 additions & 123 deletions
Original file line numberDiff line numberDiff line change
@@ -87,44 +87,41 @@
8787
- **3.9 通过ChainSQL API对表的读操作**
8888
- 表的读操作,直接传入底层读本地的数据库
8989

90-
- **3.10 数据的回滚**
91-
- 可以根据日志表进行数据的回滚,或整个表的重建
92-
93-
- **3.11 事务的支持**
90+
- **3.10 事务的支持**
9491
- 上层API提供事务操作的接口,使用本功能的前提是按照3.5配置好本地数据库,然后按照3.7打开自动同步开关。
9592

96-
- **3.12 Raw字段加密**
93+
- **3.11 Raw字段加密**
9794
- 如果出于保密性考虑,对于某张表的操作不想让其它用户看到,可以选择在操作表时对Raw字段加密,密码在创建表时随机生成,用生成的密码对Raw字段进行对称加密,密码使用公钥加密存放,只有表的创建者与被授权的用户可以用自己的私钥去解密,拿到解密后的密码之后再对Raw字段进行对称解密,才能看到Raw字段的明文。
9895
- 如果需要同步某张使用Raw字段加密的表,需要在节点的配置文件中配置拥有读权限的用户私钥,配置格式参考3.4。
9996
- 需要注意的是,对于先入库功能,需要在配置先入库的节点提前配置用户私钥,对于事务类型的交易,因为交易中会出现查询类型的交易,其中包含加密的raw字段,所以需要在共识节点配置用户私钥才能共识通过。
10097

101-
- **3.13 Strict模式**
98+
- **3.12 Strict模式**
10299
- 在限制模式下,语句共识通过的条件是期望的表的快照HASH与预期一致。
103100
- 第一次建表时,快照HASH=HASH(建表的Raw)。
104101
- 增删改操作时,快照HASH=HASH(上次的快照HASH+操作的Raw)。
105102
- 授权、改表名、删除表时不修改快照HASH。
106103

107-
- **3.14 表的行级控制(P2)**
104+
- **3.13 表的行级控制(P2)**
108105
- 表的增删改查支持行级控制
109106
- 插入表可设置默认填写字段(账户字段、交易哈希字段)
110107
- 插入表可限制单个账户的插入条数
111108
- 更新表可限制允许更新的字段
112109
- 更新、删除、查询表可限制条件,规则参见8.Raw字段详解
113110

114-
- **3.15 表、交易的订阅(P2)**
111+
- **3.14 表、交易的订阅(P2)**
115112
- 通过提供表的创建者账户地址与表名订阅一张表
116113
- 订阅表成功后,与表相关的交易结果(共识或入库)都会通过回调返回
117114
- 通过提供交易哈希订阅单个交易(支持Ripple始交易类型)
118115
- 交易订阅成功后交易的共识结果与入库结果(Chainsql)会通过回调返回
119116
- 取消订阅必需与要取消的订阅在同一个websocket连接中执行
120117

121-
- **3.16 表的重建(P2)**
118+
- **3.15 表的重建(P2)**
122119
- 通过表的重建功能可对区块链进行“瘦身”
123120
- 可通过表的重建功能将表的创建点移到新建区块
124121
- 重建表之前通过dump导出表相关交易
125122
- 表重建后可通过重新发送交易重建表的数据
126123

127-
- **3.17 dump**
124+
- **3.16 dump**
128125
- 将数据库表的操作以文档的形式进行记录,可以分多次对同一张表进行dump。
129126
- 实现方式:通过Commandline方式进行操作。
130127
- 命令形式:chainsqld “para1” “para2”
@@ -133,7 +130,7 @@
133130
- 例:chainsqld t_dump “z9VF7yQPLcKgUoHwMbzmQBjvPsyMy19ubs table1 2000” “/chainsql/table1.dmp”
134131

135132

136-
- **3.18 审计**
133+
- **3.17 审计**
137134
- 对数据库表的指定条目特定字段进行追根溯源,将所有影响了指定条目特定字段的数据库表操作都记录下来。
138135
- 实现方式:通过Commandline方式进行操作。
139136
- 命令形式:chainsqld “para1” “para2” “para3”
@@ -142,7 +139,7 @@
142139
- Para3 : 数据库表操作保存的目标路径。
143140
- 例:chainsqld t_audit “z9VF7yQPLcKgUoHwMbzmQBjvPsyMy19ubs table1 2000” “select name, salary from table1 where id=1” “/chainsql/table1.dmp”
144141

145-
- **3.19 Chainsql链瘦身操作步骤**<br>
142+
- **3.18 Chainsql链瘦身操作步骤**<br>
146143
前提:节点保存链上的所有表且所有表已经是最新的,并且在清理数据期间没有别的对表的操作。<br>
147144
操作步骤:
148145
1. 用dump命令将表导出至文件存档,以备以后检索
@@ -954,42 +951,26 @@
954951
"tx_json": {
955952
"TransactionType": "TableListSet",
956953
"Account": "rBuLBiHmssAMHWQMnEN7nXQXaVj7vhAv6Q",
957-
"Owner": "rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn",
958954
"Tables": [
959955
{
960956
"Table": {
961-
"TableName": "EName2" //hex形式
957+
"TableName": "EName2", //hex形式
958+
"TableNewName":"tableNewName", //hex形式
962959
}
963960
}
964961
],
965-
"TableNewName": "tableNewName", //hex形式
966-
"PublicKey": "cBP8JEiNXr3a9nnBFDNKKzAoGNezoXzsa1N8kQAoLU5F5HrQbFvs",
967-
"Raw": [
968-
{
969-
"field": "id",
970-
"type": "int",
971-
"length": 11,
972-
"PK": 1,
973-
"NN": 1,
974-
"UQ": 1
975-
},
976-
{
977-
"field": "age",
978-
"type": "int"
979-
}
980-
], //hex形式
981-
"Flags": 65536,
982-
"StrictMode": true,
983-
"OpType": 1
962+
"OpType": 3
984963
}
985964
}
986965
```
987-
备注:
988-
Raw字段、TableName字段以hex形式传入
966+
```
967+
  备注:
968+
       Raw字段、TableName、TableNewName字段以hex形式传入
989969
TransactionType与OpType字段的取值根据实际操作来修改
990-
创建表用到的字段:Secret,TransactionType,Account,Tables,Raw,OpType
991-
授权表用到的字段:Secret,TransactionType,Account,Tables,PublicKey,Flags,Optype
992-
增删改操作的字段:Secret,TransactionType,Account,Tables,Raw,OpType
970+
创建表用到的字段:TransactionType,Account,Tables,Raw,OpType
971+
       授权表用到的字段:TransactionType,Account,Tables,PublicKey,User,Flags,Optype
972+
       增删改操作的字段:TransactionType,Account,Tables,Raw,OpType
973+
```
993974

994975
&emsp;   Response Format:
995976

@@ -999,42 +980,22 @@
999980
"status": "success",
1000981
"tx_json": {
1001982
"Account": "zHb9CJAWyB4zj91VRWn96DkukG4bwdtyTh",
1002-
"Flags": 65536,
1003-
"OpType": 1,
1004-
"Owner": "zHb9CJAWyB4zj91VRWn96DkukG4bwdtyTh",
1005-
"PublicKey": "cBP8JEiNXr3a9nnBFDNKKzAoGNezoXzsa1N8kQAoLU5F5HrQbFvs",
1006-
"Raw": [
1007-
{
1008-
"NN": 1,
1009-
"PK": 1,
1010-
"UQ": 1,
1011-
"field": "id",
1012-
"length": 11,
1013-
"type": "int"
1014-
},
1015-
{
1016-
"field": "age",
1017-
"type": "int"
1018-
}
1019-
], //hex形式
1020-
"TableNewName": "tableNewName", //hex形式
983+
"OpType": 3,
1021984
"Tables": [
1022985
{
1023986
"Table": {
1024987
"NameInDB": "4728A301542B8CE647D41A8D000F35900AEB3E09",
1025-
"TableName": "EName2" //hex形式
988+
"TableName":"EName2", //hex形式
989+
"TableNewName":"tableNewName", //hex形式
1026990
}
1027991
}
1028992
],
1029-
"TransactionType": "TableListSet",
1030-
"TxCheckHash": "9336DE2AB6C901312CF23957462FA8596F546B4F76191F0578F80EC6C8CB1C79"
993+
"TransactionType": "TableListSet"
1031994
}
1032995
}
1033996
}
1034997
```
1035-
备注:
1036-
Token:创建表与操作授权表操作会添加
1037-
Raw:所有提供Raw字段的操作(创建表/增删改),Raw字段会被加密
998+
1038999
10391000
- **7.4 g_userToken**
10401001
- 得到用户对应某张表的token,得到token后,需用用户自己的私钥去解密,得到密码明文,然后用密码明文对raw字段进行AES对称加密<br>
@@ -1072,7 +1033,7 @@
10721033
```json
10731034

10741035
{
1075-
"TransactionType": " TableListSet",
1036+
"TransactionType": "TableListSet",
10761037
"Account": "rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn",
10771038
"Tables": [
10781039
{
@@ -1131,9 +1092,7 @@
11311092
}
11321093
}
11331094
],
1134-
"OpType": 2,
1135-
"Fee": 12,
1136-
"Sequence": 2
1095+
"OpType": 2
11371096
}
11381097

11391098
```
@@ -1154,9 +1113,7 @@
11541113
}
11551114
}
11561115
],
1157-
"OpType": 3,
1158-
"Fee": 12,
1159-
"Sequence": 2
1116+
"OpType": 3
11601117
}
11611118

11621119
```
@@ -1168,7 +1125,7 @@
11681125
```json
11691126
{
11701127
"TransactionType": "TableListSet",
1171-
" Account ": "zf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn",
1128+
"Account ": "zf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn",
11721129
"Tables": [
11731130
{
11741131
"Table": {
@@ -1189,8 +1146,13 @@
11891146
]
11901147
}
11911148
```
1192-
备注:
1193-
Token字段是可选的,加密方式创建的表在授权操作中需要提供用用户公钥加密过的密码的密文
1149+
```
1150+
备注:
1151+
  User: 被授权账户地址
1152+
PublicKey: 给加密表授权时才用到,被授权用户公钥
1153+
       Token: 加密方式创建的表在授权操作中需要提供用用户公钥加密过的密码的密文
1154+
```
1155+
11941156
&emsp;   Response Format 同上
11951157

11961158
- **7.9 t_recreate**
@@ -1247,14 +1209,9 @@
12471209
"name": "hello"
12481210
}
12491211
],
1250-
"AutoFillField": "TRACE_NO",
1251-
"StrictMode": true, //可选字段: 不设置表示不使用strictMode
1252-
"TxCheckHash": "xxxxx", //可选字段: 由g_prepare根据StrictMode的指示自动计算并插入
1253-
"OpType": 6,
1254-
"User": "zBGagHrWQ44SX3YE7eYehiDA8iNPdBssFY",
1255-
"Flags": 65536,
1256-
"Fee": 12,
1257-
"Sequence": 6
1212+
"StrictMode": true, //可选字段:不设置表示不使用strictMode
1213+
"TxCheckHash": "xxxxx", //可选字段:由t_prepare根据StrictMode的指示自动计算并插入
1214+
"OpType": 6
12581215
}
12591216

12601217
```
@@ -1277,21 +1234,13 @@
12771234
}
12781235
}
12791236
],
1280-
"StrictMode": true, //可选字段: 不设置表示不使用strictMode
1281-
"TxCheckHash": "xxxx", //可选字段: 由g_prepare根据StrictMode的指示自动计算并插入
1237+
"StrictMode": true, //可选字段:不设置表示不使用strictMode
1238+
"TxCheckHash": "xxxx", //可选字段:由g_prepare根据StrictMode的指示自动计算并插入
12821239
"Raw": [
1283-
{
1284-
"id": 1,
1285-
"name": "test"
1286-
},
1287-
{
1288-
"id": 2,
1289-
"name": "hello"
1290-
}
1240+
{"age": "11","name":"abc"},
1241+
{"id":1}
12911242
],
1292-
"OpType": 8,
1293-
"Fee": 12,
1294-
"Sequence": 7
1243+
"OpType": 8
12951244
}
12961245

12971246
```
@@ -1313,29 +1262,21 @@
13131262
}
13141263
}
13151264
],
1316-
"StrictMode": true, //可选字段: 不设置表示不使用strictMode
1317-
"TxCheckHash": "xxx", //可选字段: 由g_prepare根据StrictMode的指示自动计算并插入
1265+
"StrictMode": true, //可选字段:不设置表示不使用strictMode
1266+
"TxCheckHash": "xxx", //可选字段:由g_prepare根据StrictMode的指示自动计算并插入
13181267
"Raw": [
1319-
{
1320-
"id": 1,
1321-
"name": "test"
1322-
},
1323-
{
1324-
"id": 2,
1325-
"name": "hello"
1326-
}
1268+
{"id":1}
13271269
],
1328-
"OpType": 9,
1329-
"Fee": 12,
1330-
"Sequence": 8
1270+
"OpType": 9
13311271
}
13321272

13331273
```
13341274

13351275
&emsp;   Response Format 同上
13361276

13371277
- **7.13 t_sqlTxs 事务操作**
1338-
- 对应SQLTransaction请求,用帐户对应的私钥将下面JSON语句本地签名后,然后再调用7.15中的submit接口将交易发往全网共识<br>
1278+
- 对应SQLTransaction请求,用帐户对应的私钥将下面JSON语句本地签名后,然后再调用7.15中的submit接口将交易发往全网共识
1279+
- 签名前,需要先将Statements中每个元素中的Raw,TableName转16进制,然后将整个Statements作为字符串转为16进制字符串,与插入中Raw字段的处理方法类似<br>
13391280
Request Format:<br>
13401281
```json
13411282
{
@@ -1346,8 +1287,7 @@
13461287
"Tables": [
13471288
{
13481289
"Table": {
1349-
"TableName": "EName1",
1350-
"NameInDB": "48C80D2CF136054DB6F0116D4833D4DAD1D4CED5"
1290+
"TableName": "EName1"
13511291
}
13521292
}
13531293
],
@@ -1368,8 +1308,7 @@
13681308
"Tables": [
13691309
{
13701310
"Table": {
1371-
"TableName": "EName1",
1372-
"NameInDB": "48C80D2CF136054DB6F0116D4833D4DAD1D4CED5"
1311+
"TableName": "EName1"
13731312
}
13741313
}
13751314
],
@@ -1385,8 +1324,7 @@
13851324
"Tables": [
13861325
{
13871326
"Table": {
1388-
"TableName": "EName1",
1389-
"NameInDB": "48C80D2CF136054DB6F0116D4833D4DAD1D4CED5"
1327+
"TableName": "EName1"
13901328
}
13911329
}
13921330
],
@@ -1409,8 +1347,7 @@
14091347
"Tables": [
14101348
{
14111349
"Table": {
1412-
"TableName": "EName1",
1413-
"NameInDB": "48C80D2CF136054DB6F0116D4833D4DAD1D4CED5"
1350+
"TableName": "EName1"
14141351
}
14151352
}
14161353
],
@@ -1453,21 +1390,17 @@
14531390
"id",
14541391
"name"
14551392
],
1456-
{
1457-
"id": 1,
1458-
"name": "test"
1459-
},
14601393
{
14611394
"id": 2
14621395
}
14631396
],
1464-
"OpType": 7,
1465-
"TableFlags": 65536
1397+
"OpType": 7
14661398
}
14671399
}
14681400
```
14691401
备注:
1470-
支持多表联合查询, 参考6.9节
1402+
支持多表联合查询, 参考6.9节<br>
1403+
Raw中第一个[]中的内容是要查询的字段名,后面是查询条件
14711404
&emsp;   Response Format:
14721405
```json
14731406
{
@@ -1565,6 +1498,7 @@
15651498
&emsp;   返回值与表的订阅返回类似
15661499

15671500
### 8. CommandLine 接口
1501+
> 说明:Dump、审计功能,表名只支持英文
15681502
- **8.1 t_dump 开始dump表**
15691503
- 开始dump一张表,参数1同3.4节的设置,参数2为存储路径<br>
15701504
Request Format:<br>

0 commit comments

Comments
 (0)