2018Y30W01-用IPFS存储区块链上的文件(D3)

缘起

  • 本周(2010年30周)具体而言想用go实现3件事(20180723-20180727)
    • [ ] 用ipfs存储通过链的方式上传的文本、图片
    • [ ] 用simhash的go代码对比两个文本的产生的hash值,然后提示重复率
    • [ ] 自己链码的实现

内容

ipfs相关

  • 一、ipfs怎么搭网上教程很多,我就写下我遇到的坑:
    • 1、ipfs.io官方打不开,用梯子也打不开
      • win下在C:\Windows\System32\drivers\etc里追加"217.182.195.23 ipfs.io"
      • Ubuntu下在/etc/hosts里追加"217.182.195.23 ipfs.io",否则编译执行时也无法下载相关包
    • 2、使用go get命令没法下载ipfs包,于是手动下载解压,再传到ubuntu上。这是个坏习惯
      • 所有压缩包直接传到linux上,然后再用tarunzip来解压,不然原来执行文件的可执行属性都没了。
    • 3、执行ipfs执行需要依赖go的1.10环境,我本机环境是1.09,需要升级。错误的升级方法会带来后面环境配置导致的坑
      • 正确做法是rm -rf /usr/local/go,然后再tar xvzf * -C /usr/local/go指定路径解压比较OK
    • 4、执行make install时报“go tool: no such tool "compile"”和“cmd/ipfs/Rules.mk:37: recipe for target 'cmd/ipfs-install' failed \n make: [cmd/ipfs-install] Error 2”
      • go 编译报错go tool: no such tool compile 这个链接里有个敏感词
      • 先google后面的错,提示:同样的问题已经关闭,源码修改也给出了,修改代码再make install也不好使
      • 百度看了一下,go env执行后 GOTOOLDIR的路径不对,这是由第3步的坑导致的。
    • 5、终端输入$ ipfs help能打印各种用法,表示安装OK。
  • 二、ipfs使用
    • 1、初步使用
      • (1) $ ipfs init,在本地建立一个IPFS节点,同时会在根目录(~)下生成.ipfs文件夹
      • (2) $ ipfs id,能查看到节点id信息
      • (3) $ ipfs daemon启动节点服务器,同时可以通过http://ip:5001/webui 通过页面来查看和配置相关信息
        • 如果通过http://ip:5001/webui 访问不了,临时的解决方案是修改~/ipfs/config里的127.0.0.1为真实配置的IP地址
        • 如果没看到节点信息,只是个页面框架,说明第(4)步没做。
      • (4) 这个时候在页面访问是看不了"NODE INFO"信息的,需要对跨域资源共享( CORS )进行配置
        • ipfs config --json API.HTTPHeaders.Access-Control-Allow-Methods '["PUT","GET", "POST", "OPTIONS"]'
        • ipfs config --json API.HTTPHeaders.Access-Control-Allow-Origin '["*"]'
        • 必须在ipfs daemon启动的情况下执行以上命令,如果ctrl+C取消ipfs的情况下会报“Error: api not running”
    • 2、添加并同步相应文件到 http://ipfs.io/ipfs/hash
      • (1) ipfs add filename 生成相应hash值,ipfs cathash值,里面能显示filename文本的数据
      • (2) 跟git一样,第(1)步完成的只是add,如果要同步到ipfs.io/ipfs 上,需要停止ipfs,然后再执行ipfs daemon cp不会改变hash,但mv会改变hash寻址
      • (3) ipfs add -r可以上传一整个目录,访问目录里的文本有多少方式
      • (4) ipfs name publish更新网站时,将网站发布到IPNS.
      • (5) ipfs name resolve ,然后通过https://ipfs.io/ipns/hash值 访问。
      • 搭建个人博客的源码
  • 三、ipfs-api的安装与使用
    • 1、依赖node.js,如果环境没有,需要装一个
    • 2、ubuntu下通过npm install ipfs-api进行安装,安装好后在~/node_modules里会有相应的文件
    • 3、测试代码
    • 参考IPFS环境搭建和用ipfs-api访问ipfs网络

Simhash相关

  • 使用simhash
    • 参考simhash算法原理及实现以及给的github例子,能跑起个例子,但怎么调用,还没有看。

链码相关

  • 参考别人的接口,设计了部分表和接口

流程

  • 1、上传并上链:把版权作品提交到ipfs保存,同时ipfs会返回一个hash值,把这些基本信息写成一个表,然后上链。
    • 问题(1):原本链上对于上链成功的文章查询后能直接阅读,如果通过ipfs保存的,能不能点到文章本来的链接。
      • 从测试情况看,只要ipfs add后,再同步一下,应该是可以全网查看的,只需要考虑一下如何跳转的问题。
  • 2、重复率检测:
    • (1)用爬虫检测,这个可以做到提交时就检测,但只限于对让你爬的全网数据,但对于没有开放的数据库怎么办?
      • 进行语义分析,超过50%重复认为疑似侵权,同时会把原文发给后提交的作者,作tsa(Time Stamp Authority)认证 你服务器上的时间并不一定可信,需要官方的时间认证
    • (2)用hash匹配重复,这个只能对于自己网的,可以用户先提交,系统隔一段时间再生成版权证明(等全链查完了)。
      • 这里计算hash距离,一般两个hash值的距离在3以上,认为疑似侵权

结束

  • 20180723主要就是跑了个Simhash的例子;设计链码里的表和接口;ipfs的安装与了解。 从结果来看,成果输出不多啊,需要优化和提高
  • 20180724继续完善链码相关,虽然不太有思路,同时一边折腾环境的时候,听了一下go的视频。ipfs的使用,以及ipfs-api装好后,通过test.js去测试上传文件。

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

你可能感兴趣的:(2018Y30W01-用IPFS存储区块链上的文件(D3))