票交所区块链POC api

说明

{
  "jsonrpc": "2.0",
  "method": "{method}",
  "params": {
      "type": 1,
      "chaincodeID":{
          "name":"{chaincodeId}"
      },
      "ctorMsg": {
         "function":"{function}",
         "args":["{参数1}","{参数2}","{参数3}"...]
      }
  },
  "id":{id}
}

{method} query/invoke
{chaincodeId} 测试前提供
{function} 实际操作,见具体API
{args} 调用参数,见具体API
返回格式

{
  "jsonrpc": "2.0",
  "result": {
    "status": "{status}",
    "message": "{body}"
  },
  "id":{id}
}
  • 所有invoke方法调用都是异步提交方式,返回结果只有事务TXID。
    status ok不代表执行成功,执行结果无法直接查看,只能通过查看world state状态查看调用结果
{
  "jsonrpc": "2.0",
  "result": {
    "status": "OK",
    "message": "{TXID}"
  },
  "id":{id}
}

{id}:数字,序号,暂无意义,下同

  • 目前fabric无法查询到返回结果,demo阶段将执行结果放入world state供查询。

    request

{
  "jsonrpc": "2.0",
  "method": "query",
  "params": {
      "type": 1,
      "chaincodeID":{
          "name":"{chaincodeId}"
      },
      "ctorMsg": {
         "function":"result",
         "args":["{TXID}"]
      }
  },
  "id":{id}
}

response

{
  "jsonrpc": "2.0",
  "result": {
    "status": "OK",
    "message": "{\"message\":\"OK\",\"result\":{json}/"{string}",\"status\":\"20000000\",\"success\":true}"
  },
  "id":{id}
}

{status}="20000000"或者{success}=true为成功

result为结果json

api

1.交易所

字段

  • marketId 交易所id,demo阶段只需要创建一个票交所,所有交易都在一个票交所交易
  • address 地址
  • name 名称
  • priKey 私钥。签名使用,demo不做数字签名,只简单比较私钥。值为pri-{marketId}
  • pubKey 公钥。值为pub-{marketId}

1.1创建交易所

request

{
  "jsonrpc": "2.0",
  "method": "invoke",
  "params": {
      "type": 1,
      "chaincodeID":{
          "name":"{chaincodeId}"
      },
      "ctorMsg": {
         "function":"market.create",
         "args":["{\"marketId\":\"{marketId}\",\"address\":\"{地址}\",\"name\":\"{name}\"}"]
      }
  },
  "id":{id}
}

response

{
  "jsonrpc": "2.0",
  "result": {
    "status": "OK",
    "message": "{TXID}"
  },
  "id":{id}
}

该返回并不代表创建成功,见说明

1.2查询交易所

request

{
  "jsonrpc": "2.0",
  "method": "query",
  "params": {
      "type": 1,
      "chaincodeID":{
          "name":"{chaincodeId}"
      },
      "ctorMsg": {
         "function":"market",
         "args":["{marketId}"]
      }
  },
  "id":{id}
}

response

{
  "jsonrpc": "2.0",
  "result": {
    "status": "OK",
    "message": "{\"message\":\"OK\",\"result\":\"{\"address\":\"{address}\",\"marketId\":\"{market}\",\"name\":\"{name}\",\"priKey\":\"{priKey}\",\"pubKey\":\"{pubKey}\"}\",\"status\":\"20000000\",\"success\":true}"
  },
  "id": 0
}
  • demo ok
{
  "jsonrpc": "2.0",
  "result": {
    "status": "OK",
    "message": "{\"message\":\"OK\",\"result\":\"{\"address\":\"beijing\",\"marketId\":\"qianbao\",\"name\":\"qianbao\",\"priKey\":\"pri-qianbao\",\"pubKey\":\"pub-qianbao\"}\",\"status\":\"20000000\",\"success\":true}"
  },
  "id": 0
}
  • demo-not found
{
  "jsonrpc": "2.0",
  "result": {
    "status": "OK",
    "message": "{\"message\":\"market not found!\",\"status\":\"40400000\",\"success\":false}"
  },
  "id": 0
}

2.用户

  • userId 为公司或组织业务ID
  • marketId 所属票交所
  • type 1:spv,可以做资产打包合约;2:普通票据持有者
  • market-priKey 必须为票交所对应priKey,用户创建只能通过票交所上链,通过该字段检查来模拟票交所签名
  • address 地址
  • businessLicense 营业执照
  • organizationCodeCertificate 税务登记证
  • taxRegistrationCertificate 组织机构代码证
  • priKey 用户私钥。demo不做数字签名,只简单比较私钥。值为pri-{userId}
  • pubKey 用户公钥。值为pub-{userId}

2.1用户上链

request

{
  "jsonrpc": "2.0",
  "method": "invoke",
  "params": {
      "type": 1,
      "chaincodeID":{
          "name":"{chaincodeId}"
      },
      "ctorMsg": {
         "function":"user.create",
         "args":["{\"name\":\"{name}\",\"address\":\"{address}\",\"marketId\":\"{marketId}\",\"type\":{type},\"userId\":\"{userId}\",\"businessLicense\":\"{businessLicense}\",\"organizationCodeCertificate\":\"{organizationCodeCertificate}\",\"taxRegistrationCertificate\":\"{organizationCodeCertificate}\"}","{market-priKey"]
      }
  },
  "id":{id}
}

response

{
  "jsonrpc": "2.0",
  "result": {
    "status": "OK",
    "message": "{TXID}"
  },
  "id":{id}
}

该返回并不代表创建成功,见说明

2.2查询用户

request

{
  "jsonrpc": "2.0",
  "method": "query",
  "params": {
      "type": 1,
      "chaincodeID":{
          "name":"{chaincodeId}"
      },
      "ctorMsg": {
         "function":"user",
         "args":["userId"]
      }
  },
  "id":{id}
}

response demo

  • ok
{
  "jsonrpc": "2.0",
  "result": {
    "status": "OK",
    "message": "{\"message\":\"OK\",\"result\":\"{\"address\":\"beijing\",\"businessLicense\":\"xxxxx\",\"marketId\":\"qianbao\",\"name\":\"zhangzheng\",\"organizationCodeCertificate\":\"xxxxxx\",\"priKey\":\"pri-zz\",\"pubKey\":\"pub-zz\",\"taxRegistrationCertificate\":\"xxxxxx\",\"type\":1,\"userId\":\"zz\"}\",\"status\":\"20000000\",\"success\":true}"
  },
  "id": 0
}
  • not found
{
  "jsonrpc": "2.0",
  "result": {
    "status": "OK",
    "message": "{\"message\":\"user not found!\",\"status\":\"40400000\",\"success\":false}"
  },
  "id": 0
}

3.票据

  • userId 用户id
  • marketId 所属票交所
  • billId 票据id
  • type 1:纸银;2:纸商
  • status 10.持有,20.交易中,30.资产,40.已承兑。允许状态转换:持有->交易中;交易中->资产;持有->已承兑;交易中->持有;资产->已承兑
  • amount 面值
  • startDate yyyyMMdd
  • endDate yyyyMMdd
  • bank 银行
  • bankAddress 银行地址
  • billPackage 资产包。资产打包后改字段有值
  • transactions 历史交易id。字符串数组

3.1 票据上链

request

{
  "jsonrpc": "2.0",
  "method": "invoke",
  "params": {
      "type": 1,
      "chaincodeID":{
          "name":"{chaincodeId}"
      },
      "ctorMsg": {
         "function":"bill.create",
         "args":["{\"billId\":\"{billId}\",\"type\":{type},\"marketId\":\"{marketId}\",\"userId\":\"{userId}\",\"amount\":{amout},\"startDate\":\"{startDate}\",\"endDate\":\"{endDate}\",\"bank\":\"{bank}\",\"bankAddress\":\"{bankAddress}\"}","market-priKey","user-priKey"]
      }
  },
  "id":{id}
}

response

{
  "jsonrpc": "2.0",
  "result": {
    "status": "OK",
    "message": "{TXID}"
  },
  "id":{id}
}

该返回并不代表创建成功,见说明

3.2 票据查询

request

{
  "jsonrpc": "2.0",
  "method": "query",
  "params": {
      "type": 1,
      "chaincodeID":{
          "name":"{chaincodeId}"
      },
      "ctorMsg": {
         "function":"bill",
         "args":["{billId}"]
      }
  },
  "id":{id}
}

response demo

  • ok
{
  "jsonrpc": "2.0",
  "result": {
    "status": "OK",
    "message": "{\"message\":\"OK\",\"result\":\"{\"amount\":1000000,\"billId\":\"bill002\",\"endDate\":\"20180107\",\"startDate\":\"20180107\",\"bank\":\"ccbc\",\"bankAddress\":\"beijing\",\"marketId\":\"qianbao\",\"startDate\":\"20170107\",\"status\":10,\"transactions\":[\"5fe73654-dd53-433b-993f-62435ed3eeb4\",\"39a06dc2-f6a3-45d1-80c8-e42e5105afad\"],\"type\":1,\"userId\":\"gaoxiang\"}\",\"status\":\"20000000\",\"success\":true}"
  },
  "id": 0
}
  • not found
{
  "jsonrpc": "2.0",
  "result": {
    "status": "OK",
    "message": "{\"message\":\"bill not found!\",\"status\":\"40400000\",\"success\":false}"
  },
  "id": 0
}

4.交易

  • transactionId 交易ID,使用交易创建返回的区块链TXID作为交易ID。
  • billId 票据Id
  • buyer 买方Id
  • buyerMarket 买方票交所Id
  • seller 卖方Id
  • sellerMarket 卖方票交所Id
  • buyerStatus 买方状态,只能买方修改。0,交易中;1,完成;2,取消
  • sellerStatus 卖方状态,只能卖方修改。0,交易中;1,完成;2,取消
  • status 交易状态。0,交易中;1,完成(交易双方状态都是完成);2,取消(交易双方状态都是取消)
  • createTime 交易创建时间

4.1交易创建

request

{
  "jsonrpc": "2.0",
  "method": "invoke",
  "params": {
      "type": 1,
      "chaincodeID":{
          "name":"{chaincodeId}"
      },
      "ctorMsg": {
         "function":"transaction.create",
         "args":["{\"billId\":\"{billId}\",\"sellerMarket\":\"{sellerMarket}\",\"seller\":\"{seller}\",\"buyerMarket\":\"{buyerMarket}\",\"buyer\":\"{buyer}\",\"price\":{price},\"createTime\":{createTime}}","{sellerMarket-priKey}","{seller-priKey}"]
      }
  },
  "id":{id}
}

response

{
  "jsonrpc": "2.0",
  "result": {
    "status": "OK",
    "message": "{TXID}"
  },
  "id":{id}
}

返回消息中的TXID直接作为票据交易的transactionId,该返回并不代表交易创建成功,见说明。

交易创建成功,票据状态变更为交易中(20)。

4.2买方确认

request

{
  "jsonrpc": "2.0",
  "method": "invoke",
  "params": {
      "type": 1,
      "chaincodeID":{
          "name":"{chaincodeId}"
      },
      "ctorMsg": {
         "function":"transaction.buyer.confirm",
         "args":["transactionId","{buyerMarket-priKey}","{buyer-priKey}"]
      }
  },
  "id":{id}
}

response

{
  "jsonrpc": "2.0",
  "result": {
    "status": "OK",
    "message": "{TXID}"
  },
  "id":{id}
}

该返回并不代表交易确认成功,见说明。
买方确认成功时,买方状态变更为完成(1)。若卖方状态为完成(1)。则交易状态变更为完成(1),同时修改票据所有人,及票据状态(10)。

4.3卖方确认

request

{
  "jsonrpc": "2.0",
  "method": "invoke",
  "params": {
      "type": 1,
      "chaincodeID":{
          "name":"{chaincodeId}"
      },
      "ctorMsg": {
         "function":"transaction.seller.confirm",
         "args":["transactionId","{sellerMarket-priKey}","{seller-priKey}"]
      }
  },
  "id":{id}
}

response

{
  "jsonrpc": "2.0",
  "result": {
    "status": "OK",
    "message": "{TXID}"
  },
  "id":{id}
}

该返回并不代表交易确认成功,见说明。

卖方确认成功时,卖方状态变更为完成(1)。若买方状态为完成(1)。则交易状态变更为完成(1),同时修改票据所有人,及票据状态(10)。

4.4买方取消

request

{
  "jsonrpc": "2.0",
  "method": "invoke",
  "params": {
      "type": 1,
      "chaincodeID":{
          "name":"{chaincodeId}"
      },
      "ctorMsg": {
         "function":"transaction.buyer.cancle",
         "args":["transactionId","{buyerMarket-priKey}","{buyer-priKey}"]
      }
  },
  "id":{id}
}

response

{
  "jsonrpc": "2.0",
  "result": {
    "status": "OK",
    "message": "{TXID}"
  },
  "id":{id}
}

该返回并不代表交易取消成功,见说明。

买方取消成功时,买方状态变更为取消(2)。若卖方状态为取消(2)。则交易状态变更为取消(2),同时修改票据状态(10)。

4.5卖方取消

request

{
  "jsonrpc": "2.0",
  "method": "invoke",
  "params": {
      "type": 1,
      "chaincodeID":{
          "name":"{chaincodeId}"
      },
      "ctorMsg": {
         "function":"transaction.seller.cancle",
         "args":["transactionId","{sellerMarket-priKey}","{seller-priKey}"]
      }
  },
  "id":{id}
}

response

{
  "jsonrpc": "2.0",
  "result": {
    "status": "OK",
    "message": "{TXID}"
  },
  "id":{id}
}

该返回并不代表交易取消成功,见说明。

卖方取消成功时,卖方状态变更为取消(2)。若买状态为取消(2)。则交易状态变更为取消(2),同时修改票据状态(10)。

4.5交易查询

request

{
  "jsonrpc": "2.0",
  "method": "query",
  "params": {
      "type": 1,
      "chaincodeID":{
          "name":"{chaincodeId}"
      },
      "ctorMsg": {
         "function":"transaction",
         "args":["{transactionId}"]
      }
  },
  "id":{id}
}

5.资产

  • packageId 资产ID,使用资产上链返回的区块链TXID作为资产ID。
  • marketId 票交所
  • userId 资产所有人,只有SPV才能打包资产
  • name 资产名称
  • endDate 资产到期日yyyyMMdd
  • status 资产状态。10,资产;20,兑付中;30,已兑付
  • startDate yyyyMMdd
  • price 资产价格,double
  • billIds 票据id。字符串数组

5.1资产打包上链

request

{
  "jsonrpc": "2.0",
  "method": "invoke",
  "params": {
      "type": 1,
      "chaincodeID":{
          "name":"{chaincodeId}"
      },
      "ctorMsg": {
         "function":"package.create",
         "args":["{\"userId\":\"{userId}\",\"marketId\":\"{marketId}\",\"name\":\"{name}\",\"endDate\":\"{endDate}\",\"price\":{price},\"billIds\":[\"{billId}",\"{billId}\"]}","{market-priKey}","{user-priKey}"]
      }
  },
  "id":{id}
}

response

{
  "jsonrpc": "2.0",
  "result": {
    "status": "OK",
    "message": "{TXID}"
  },
  "id":{id}
}

返回消息中的TXID直接作为资产的packageId,该返回并不代表资产创建成功,见说明。

资产打包会检查票据持有人及priKey。

资产创建成功,票据状态变更为资产(30)。

5.2资产状态更新

request

{
  "jsonrpc": "2.0",
  "method": "invoke",
  "params": {
      "type": 1,
      "chaincodeID":{
          "name":"{chaincodeId}"
      },
      "ctorMsg": {
         "function":"package.create",
         "args":["{package}","{market-priKey}","{user-priKey}","{status}"]
      }
  },
  "id":{id}
}

{status}只能为"20"或者"30"

response

{
  "jsonrpc": "2.0",
  "result": {
    "status": "OK",
    "message": "{TXID}"
  },
  "id":{id}
}

该返回并不代表资产状态更新成功,见说明。

资产状态更新为已兑付(30)时,票据状态变更为已兑付(40)。

5.3资产查询

request

{
  "jsonrpc": "2.0",
  "method": "query",
  "params": {
      "type": 1,
      "chaincodeID":{
          "name":"{chaincodeId}"
      },
      "ctorMsg": {
         "function":"package",
         "args":["{package}"]
      }
  },
  "id":{id}
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,937评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,503评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,712评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,668评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,677评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,601评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,975评论 3 396
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,637评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,881评论 1 298
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,621评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,710评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,387评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,971评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,947评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,189评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,805评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,449评论 2 342

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,591评论 18 139
  • 国家电网公司企业标准(Q/GDW)- 面向对象的用电信息数据交换协议 - 报批稿:20170802 前言: 排版 ...
    庭说阅读 10,857评论 6 13
  • 3.6税收 通常而言,在股权交易情况下,目标实体的所有历史税务风险都会继续存在。因此,非常有必要对目标公司进行全面...
    李怡然阅读 2,823评论 1 4
  • 今天出门我掉到了没有井盖的下水道去了,满满滴地沟油啊,我坚强的钻出来后,然后找了条小溪,游过一群鸭,快来数一数24...
    铭钥阅读 1,050评论 0 2
  • 【R】 阅读原文 【I】如何运用沉没成本指导决策 【what】 我们热衷于根据过去的投入,而不是未来价值来做决定。...
    艾米125阅读 373评论 0 1