如何在基于Bytom开发过程中集成IPFS

  先在我们已经搭建好了IPFS的节点,并且开启API网络监听。现在我们来写个测试demo(go语言版本),往网络上传文件。
  
  package main
  
  import (
  
  "fmt"
  
  "os"
  
  "strings"
  
  shell "github.com/ipfs/go-ipfs-api"
  
  )
  
  func main() {
  
  // Where your local node is running on localhost:5001
  
  sh := shell.NewShell("localhost:5001")
  
  cid, err := sh.Add(strings.NewReader("hello world!"))
  
  if err != nil {
  
  fmt.Fprintf(os.Stderr, "error: %s", err)
  
  os.Exit(1)
  
  }
  
  fmt.Println("added %s", cid)
  
  err = sh.Get("QmdFhFwGHy54T3e8cf1ZmovWbZ2yW4yNhNKsu5dSfcgh6H", "/Users/huangxinglong/Desktop")
  
  if err != nil {
  
   fmt.Fprintf(os.Stderr, "error: %s", err)
  
   os.Exit(1)
  
  }
  
  }
  
  我们运行以后发现返回Hash,然后我们可以通过Hash把上传的文件获取到 "/Users/huangxinglong/Desktop"目录现在我们就可以进行开发了。
  
  step3: 准备开发
  
  搭建好比原节点和IPFS节点以后我们就可以根据自己选择的开发语言选择具体的插件。 IPFS的插件有如下几种语言的API插件:
  
  比原链的API插件主要有:
  
  如果选择的开发语言不是java,PHP,Node.js。需要我们自己去根据比原的开发文档,然后去集成。
  
  step4: 具体案例
  
  目的:根据比原上的交易将信息存储在IPFS中
  
  首先根据自己选择的开发语言去选择对应的API插件,我选择的是go语言,IPFS有go语言的API插件:https://github.com/ipfs/go-ipfs-api。我们在开发过程中直接根据比原的开发文档去开发,开发文档地址:https://docs.bytom.io/
  
  首先我们去下载IPFS的go语言API插件放到自己的项目中,然后放到自己的项目vender目录下面:
  
  然后我们在项目中连接IPFS节点,同时上传一个文件。然后我们会发现返回Hash。 然后我们调用比原create-key接口和create_account接口。创建key和account,然后用给自己的地址充值BTM。通过api请求3个接口,先 build → sign → submit,分别对应的api是 build-transaction、sign-transaction、submit-transaction。 然后我们就可以创建一笔交易。
  
  存到IPFS上返回的hash是:QmP4UDViHc78un4SyHZV2ooHkSon2EttpamqPqXQ9WHcaV,将返回的hash放在arbitrary对应的字段,如下:
  
  build-transaction:
  
  {
  
  "base_transaction": null,
  
  "actions": [{
  
  "account_id": "0KTCS3R5G0A02",
  
  "amount": 10000000,
  
  "asset_id": "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
  
  "type": "spend_account"
  
  }, {
  
  "account_id": "0KTCS3R5G0A02",
  
  "amount": 100,
  
  "asset_id": "608037f96e8d1613d900c67a0730cc90e2a03311fb7d091588f7eb551a6103cd",
  
  "type": "spend_account"
  
  }, {
  
  "account_id": "0KTCS3R5G0A02",
  
  "amount": 100,
  
  "asset_id": "608037f96e8d1613d900c67a0730cc90e2a03311fb7d091588f7eb551a6103cd",
  
  "arbitrary": "QmP4UDViHc78un4SyHZV2ooHkSon2EttpamqPqXQ9WHcaV",
  
  "type": "retire"
  
  }],
  
  "ttl": 0,
  
  "time_range": 1521625823
  
  }
  
  然后依次调用sign-transaction和submit-transaction接口,就可以在交易过程中将信息存储在IPFS上,如果我们还需要做更复杂的操作,再根据比原开发文档去做相应的操作。
  
  现在我们就可以根据比原上的交易hash,找到对应的IPFS存储Hash。获取到在IPFS上存储的文件。sql根据日期查询,本周,本月,本年,今日相关统计
  
  昨天
  
  select * from tb where datediff(day, 时间字段 ,getdate()) = 1
  
  今天
  
  select * from tb where datediff(day, 时间字段 ,getdate()) = 0
  
  本周
  
  select * from tb where datediff(week, 时间字段 ,getdate()) = 0
  
  上周
  
  select * from tb where datediff(week, 时间字段 ,getdate()) = 1
  
  下周
  
  select * from tb where datediff(week, 时间字段 ,getdate()) = -1
  
  上月
  
  Select * From TableName Where DateDiff(month, DateTimCol, GetDate()) = 1
  
  本月
  
  Select * From TableName Where DateDiff(month, DateTimCol, GetDate()) = 0
  
  下月
  
  Select * From TableName www.gxgjpt1.com Where DateDiff(month, GetDate(), DateTimCol ) = -1
  
  本年
  
  Select * From TableName Where DateDiff(year, GetDate(), DateTimCol ) = 0
  
  昨天:dateadd(day,-1,getdate())
  
  明天:dateadd(day,1,getdate())
  
  上月:month(dateadd(month, -1, getdate()))
  
  本月:month(getdate(www.michenggw.com))
  
  下月:month(dateadd(month, 1, getdate()))
  
  昨天
  
  Select * From TableName Where DateDiff(dd, DateTimCol, GetDate()) = 1
  
  明天
  
  Select * From TableName Where DateDiff(dd, GetDate(), DateTimCol) = -1
  
  最近七天
  
  Select * From TableName Where DateDiff(dd, DateTimCol, GetDate()) <= 7
  
  随后七天
  
  当前年
  
  select 提出日期, datepart(year,getdate()) as 当前年 from 供方资料表
  
  前一年
  
  select 提出日期, datepart(year,getdate())-1 as 当前年 from 供方资料表
  
  后一年
  
  select 提出日期, datepart(year,getdate(www.gcyL157.com))+1 as 当前年 from 供方资料表
  
  SQL 日期函数
  
  1. 当前系统日期、时间
  
  select getdate()
  
  2. dateadd 在向指定日期加上一段时间的基础上,返回新的 datetime 值
  
  例如:向日期加上2天
  
  select dateadd(day,2,'2004-10-15′) –返回:2004-10-17 00:00:00.000
  
  3. datediff 返回跨两个指定日期的日期和时间边界数。
  
  select datediff(day,'2004-09-01′,'2004-09-18′) –返回:17
  
  4. datepart 返回代表指定日期的指定日期部分的整数。
  
  SELECT DATEPART(month, '2004-10-15′) –返回 10
  
  5. datename 返回代表指定日期的指定日期部分的字符串
  
  SELECT datename(weekday, '2004-10-15′) –返回:星期五
  
  6. day(), month(),year() –可以与datepart对照一下
  
  select 当前日期=convert(varchar(10),getdate(),120)
  
  ,当前时间=convert(varchar(8),getdate(),114)
  
  select datename(dw,'2004-10-15′)
  
  select 本年第多少周=datename(week,'2004-10-15′)
  
  ,今天是周几=datename(weekday,'2004-10-15′)
  
  举例:
  
  1.GetDate() 用于sql server www.078881.cn :select GetDate()
  
  2.DateDiff('s','2005-07-20′,'2005-7-25 22:56:32′)返回值为 514592 秒
  
  DateDiff('d','2005-07-20′,'2005-7-25 22:56:32′)返回值为 5 天
  
  3.DatePart('w','2005-7-25 22:56:32′)返回值为 2 即星期一(周日为1,周六为7)
  
  DatePart('d','2005-7-25 22:56:32′)返回值为 25即25号
  
  DatePart('y','2005-7-25 22:56:32′)返回值为 206即这一年中第206天
  
  DatePart('yyyy','2005-7-25 22:56:32′)返回值为 2005即2005年

猜你喜欢

转载自www.cnblogs.com/qwangxiao/p/10286164.html