Skip to content
ipfs-http-clientやっと解決
sand-box
2021-11-04

悩みになやんだipfsのmultiformats変更の件 ようやくなんとか動いた。。。 動いたけどかなり力業だった。。。 とりあえず全体を単純なcid v0のテキストからmultiformatsのCIDに書き換え。

typescript
//  import追加と置き換え
import { CID } from 'multiformats/cid'
import {PBLink} from "@ipld/dag-pb";
import * as dagPB from '@ipld/dag-pb'

//  記事ノードを作る
const imgDirNode = dagPB.createNode(new Uint8Array(), imgList)
const imdDirCid = await this.client.dag.put(imgDirNode)
const imgDirLink = dagPB.createLink("images", 0, imdDirCid)
const indexNode = dagPB.createNode(new TextEncoder().encode(mdBody))
const indexCid = await this.client.dag.put(indexNode)
const indexLink = dagPB.createLink("index.md", 0, indexCid)
const list = [indexLink, imgDirLink]
const postNode = dagPB.createNode(new TextEncoder().encode(slug), list);

// 既存の記事リンクを取ってくる
const originalChildren = await this.client.dag.get(CID.parse(rootCid));
const nextChildList: PBLink[] = originalChildren.value.Links

// 記事リンクを追加する
const addLink = dagPB.createLink(addName, 0, CID.parse(addCid));
nextChildList.push(addLink)

// 新しいrootを追加する
const root = await this.client.dag.put({Data:new Uint8Array(), Links: nextChildList}, {
  // @ts-ignore
  "store-codec":'dag-pb',
  "input-codec": 'dag-pb',
  format: 'dag-pb',
  pin: true
});
//  import追加と置き換え
import { CID } from 'multiformats/cid'
import {PBLink} from "@ipld/dag-pb";
import * as dagPB from '@ipld/dag-pb'

//  記事ノードを作る
const imgDirNode = dagPB.createNode(new Uint8Array(), imgList)
const imdDirCid = await this.client.dag.put(imgDirNode)
const imgDirLink = dagPB.createLink("images", 0, imdDirCid)
const indexNode = dagPB.createNode(new TextEncoder().encode(mdBody))
const indexCid = await this.client.dag.put(indexNode)
const indexLink = dagPB.createLink("index.md", 0, indexCid)
const list = [indexLink, imgDirLink]
const postNode = dagPB.createNode(new TextEncoder().encode(slug), list);

// 既存の記事リンクを取ってくる
const originalChildren = await this.client.dag.get(CID.parse(rootCid));
const nextChildList: PBLink[] = originalChildren.value.Links

// 記事リンクを追加する
const addLink = dagPB.createLink(addName, 0, CID.parse(addCid));
nextChildList.push(addLink)

// 新しいrootを追加する
const root = await this.client.dag.put({Data:new Uint8Array(), Links: nextChildList}, {
  // @ts-ignore
  "store-codec":'dag-pb',
  "input-codec": 'dag-pb',
  format: 'dag-pb',
  pin: true
});

大半は問題が見つかってから半日くらいで書けてたんだけど、最後のthis.client.dag.put()の書き方がわからずにあーでもないこうでもない状態であった。。。
これで落ち着けばよいのだが。