2018Y33W01:33周工作小记

  • 33W(8月13-8月19日)

本周工作

周一(8.13)

  • 当日目标
    • 1、完成department相关的页面的功能(增、改、查)
    • 2、了解清楚entity的相关的需求,entity的页面开始
    • 3、请教一下,同时配置一下,调试使用Fabric Node SDK进行Invoke和Query这个代码的环境,最好在自己这也能跑起来。
    • 4、看代码中新的知识点,标记到上周(32W02)的文档里。
  • 当日工作
    • 1、目标(1,2,4)完成。
    • 2、16点完成目标(1,4)后,花了近2小时调查和下载了关于 多线程数据结构&算法方面的电子书,以及学习一下这两个主题的学习曲线是啥。但并没有啥结果呢,倒是有个文章不错,与我有共鸣。【当然,在这两个主题上要花 笨功夫。】
    • 3、19点后,测试环境上部署好entity相关的链码。

周二(8.14)

  • 当日目标
    • 1、entity相关的(增、改、查)完成。
    • 2、自己理一下de相关的需求,在entity里面进行相应的逻辑处理。这地方有些坑,需要再问一下
    • 3、Node SDK的Invoke和Query跑通,并拆分成2个函数。
  • 当日工作
    • 目标(1,2,3)完成。
    • 看了一下现有代码里的Invoke和Query本来就是OK的,只是把Event相关的重新再写个函数,然后调试一下。这个怎么关联业务,还是调试和请教一下。
    • 一些小的tips:
      • 1、再度复习一下HyperLedger Fabric ChainCode开发——shim.ChaincodeStubInterface用法,*以前只是粗略的看看,现在运行一遍后,再次看看文档。
        • (1)function, args := stub.GetFunctionAndParameters()将字符串数组的参数分为两部分,数组第一个字是Function,剩下的都是Parameter
        • (2)在对数据库进行操作时GetState(key)用到了json相关的处理 没想到这个知识点提到的知识还是蛮多的
        • (3)复合键的处理项目中没用过
        • (4)获得当前用户项目中也没用到
        • (5)高级查询
          • resultsIterator, _ := stub.GetHistoryForKey(entity.Key)
        • (6)调用另外的链上代码项目中也没用到
        • (7)获得提案对象Proposal属性项目中也没用到
        • (8)事件设置SetEvent
          • 这个正在实践中
      • 2、webstorm快捷键一览
        • ctrl+shift+/块注释
        • 写代码时tab键的妙用,在vs2013里也有,相当于按Enter
        • ctrl+shift+alt+N通过一个字符快速查找位置
        • alt+up/down文件中上一个/下一个方法,这个不像VS提供了方法预览,或者我没找到
        • ctrl+shift+F,在项目中查找
      • 3、find命令中的size参数,当然exec参数没看

周三(8.15)

  • 当日目标
    • 1、将DE相关的业务,融合到entity里面去。
      • 阻碍在如何取得DEEkey上。
    • 2、调试一下event相关的流程
  • 当日工作
    • 目标(1,2)都没有很好的完成
    • 1、之前查询所有值是,是通过department.go结构体里的Table查询的,而entity.go里不想用Table来标注的话,查询条件为空,能否查出所有值,这样可以直接Query后显示出来。
      • (1)搭建的couchDB的环境里,执行{ "selector": { "_id": { "$gt": null } } } 是可以查询到的。
    • 2、由于链码中的Get实现与之前的不同,必须要有Key这样的参数才行,如果想实现一开始就加载,就得用之前的方法显示所有,然后取到相应的Key才行。
    • 3、chaincode上重新写了一个EntityQuery(),但node.js和前端方面只是改了一下没调呢。
  • 当日短板
    • couchDB这种非关系型数据库,如何进行操作,命令行,代码传参的方式。
    • asyncawait了解一下

周四(8.16)

  • 当日目标
    • 1、调试好EntityQuery,并调试出能够在add后返回刚生成的key,chaincode中EntityQuery里返回出key的,EntityQuery是没用这个字段拼出来,所以前台console.log()时的值是[]
    • 2、EntityAdd时之前是能存到couchDB的,只是由于EntityGet方法无法显示到页面上,测试添加时,再console.log(key)看下是不是当前生成的key。*如果可以的话,根据这个key,再调用链码中DE的部分。
  • 当日工作
    • 1、完成了Entity的增、查、Update还在调试。如何取得Key,目前没找到解决方案。
    • 2、工作tips:
      • (1)、调试过程
        • http://localhost:5000/entity显示不错,根据日志,定位到routers/manager.js的问题,顺便读了一下这个文件。
        • http://localhost:5000/entity/query还是报错,这个有请求,没有返回值,到chaincode的日志去查看,报“2018-08-16 02:09:11.584 UTC [shim] handleGetQueryResult -> ERRO 001 [d1989283]Received ERROR”,定位一下。
          • dockers logs -f docker进程号,这个是显示链码里的日志
          • peer设备上也会显示相应的日志,可以两者结合看。
          • 对比了代码,没发现啥,决定用peer脚本执行一下。
        • 定位到了问题,但没有解决呢。由于在Struct Entity{}里定义了[]string的类型,而在后面的代码中Unmarshal()时可能需要转换。
      • (2)、json串的marshal()中存在[]string时怎么转?
      • (3)、报错:“Error: Error endorsing query: rpc error: code = Unknown desc = chaincode error (status: 500, message: invalid character 'e' looking for beginning of value) - <nil>”,是在执行./test.sh chaincode query -C mychannel2 -n entity -c '{"Args":["EntityQuery","entity"]}'时报的。
        • 大概率是把"entity"拆成了e,n,这样的单个字符了。【这个自己假设错了,是链码写的有点问题。参见“当日请教后”】
      • (4)、要加上err.Error()才能定位到错误的原因
        • if err != nil { return shim.Error("Detail func error:" + err.Error()) }
  • 当日请教后get到的点 串起来一些知识
    • 1、couchDB中这样的格式{ "selector": { "Table": "entity" } }表示的是富查询。所以代码中 type MangoEntity struct { SelectorEntity Entity json:"selector" },这里面json的值必须是selector,大小写也得一样,不然不认识。
    • 2、因为代码中写的是err := json.Unmarshal([]byte(args[0]), &o),所以执行脚本时的参数需要改变一下格式./test.sh chaincode query -C mychannel2 -n entity -c '{"Args":["EntityQuery","{\"Table\":\"entity\"}"]}'
      • args[0]是指第一个参数,如:"{\"Table\":\"entity\"}"
    • 3、定位到chaincode的报错“Incorrect parameters,please check your parameters”,之前的代码也是用Unmarshal()转的,对比了半天没想到问题,这是我args的值“ [ '{"EntityName":"JSON","DepartmentKey":"1584189241","Number":"200","Table":"entity"}' ]”,把相应逻辑一说,人家直接说Number是int型。
      • 于是前端用parseInt()转了一下condition.Number = parseInt(ctx.request.body.Number);这个才是真实的int值。
      • condition.Number = parseInt("ctx.request.body.Number");这个时候值是null也成功插入到couchDB里了。

本周随想

新技术学习

  • 周二想到的
    • C++里面的关键字得用代码测试一下。目前想做的&,sizeof()typedef,当时只是搜了一下,并没有调试以及内化为自己的知识。
  • 周三想到的
    • 1、couchDB这种,如何查询,用命令行、参数、页面查询。
    • 2、用自己的电脑搭建一个Solidity 官方文档中文版,自己写一个helloworld,看看是啥流程。
    • 3、Docker方面的书,还是得好好看看,具体是啥思路,其实并不是太懂。晚上回去翻了下,但没啥思路
  • 周四想到的

转载于:https://my.oschina.net/u/673310/blog/1927912

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值