Skip to content
This repository was archived by the owner on Feb 12, 2024. It is now read-only.
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 8 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -295,6 +295,14 @@ Configure remote preload nodes. The remote will preload content added on this no
- `enabled` (boolean): Enable content preloading (Default: `true`)
- `addresses` (array): Multiaddr API addresses of nodes that should preload content. **NOTE:** nodes specified here should also be added to your node's bootstrap address list at [`config.Boostrap`](#optionsconfig).

##### `options.ipld`

| Type | Default |
|------|---------|
| object | `{ blockService: ...}` |

Pass options into [IPLD](https://github.com/ipld/js-ipld). It can be used to pass in [IPLD formats](https://github.com/ipld/interface-ipld-format) that are not the default ones [`dag-cbor`](https://github.com/ipld/js-ipld-dag-cbor) and [`dag-pb`](https://github.com/ipld/js-ipld-dag-pb). For more information see the [js-ipld readmel](https://github.com/ipld/js-ipld#readme).

##### `options.EXPERIMENTAL`

| Type | Default |
Expand Down
2 changes: 1 addition & 1 deletion examples/traverse-ipld-graphs/get-path-accross-formats.js
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ createNode((err, ipfs) => {
const myData = {
name: 'David',
likes: ['js-ipfs', 'icecream', 'steak'],
hobbies: [{ '/': cidPBNode.toBaseEncodedString() }]
hobbies: [cidPBNode]
}

ipfs.dag.put(myData, { format: 'dag-cbor', hashAlg: 'sha3-512' }, (err, cid) => {
Expand Down
9 changes: 7 additions & 2 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -71,7 +71,7 @@
"expose-loader": "~0.7.5",
"form-data": "^2.3.2",
"hat": "0.0.3",
"interface-ipfs-core": "~0.78.0",
"interface-ipfs-core": "~0.79.0",
"ipfsd-ctl": "~0.39.3",
"mocha": "^5.2.0",
"ncp": "^2.0.0",
Expand Down Expand Up @@ -117,9 +117,14 @@
"ipfs-repo": "~0.24.0",
"ipfs-unixfs": "~0.1.15",
"ipfs-unixfs-engine": "~0.32.3",
"ipld": "~0.17.3",
"ipld": "~0.19.0",
"ipld-bitcoin": "~0.1.8",
"ipld-dag-cbor": "~0.12.1",
"ipld-dag-pb": "~0.14.6",
"ipld-ethereum": "^2.0.1",
"ipld-git": "~0.2.2",
"ipld-raw": "^2.0.1",
"ipld-zcash": "~0.1.6",
"ipns": "~0.2.0",
"is-ipfs": "~0.4.2",
"is-pull-stream": "~0.0.0",
Expand Down
22 changes: 22 additions & 0 deletions src/cli/utils.js
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,21 @@ const Progress = require('progress')
const byteman = require('byteman')
const promisify = require('promisify-es6')

// All known IPLD formats
const ipldBitcoin = require('ipld-bitcoin')
const ipldDagCbor = require('ipld-dag-cbor')
const ipldDagPb = require('ipld-dag-pb')
const ipldEthAccountSnapshot = require('ipld-ethereum').ethAccountSnapshot
const ipldEthBlock = require('ipld-ethereum').ethBlock
const ipldEthBlockList = require('ipld-ethereum').ethBlockList
const ipldEthStateTrie = require('ipld-ethereum').ethStateTrie
const ipldEthStorageTrie = require('ipld-ethereum').ethStorageTrie
const ipldEthTrie = require('ipld-ethereum').ethTxTrie
const ipldEthTx = require('ipld-ethereum').ethTx
const ipldGit = require('ipld-git')
const ipldRaw = require('ipld-raw')
const ipldZcash = require('ipld-zcash')

exports = module.exports

exports.isDaemonOn = isDaemonOn
Expand Down Expand Up @@ -53,6 +68,13 @@ exports.getIPFS = (argv, callback) => {
pass: argv.pass,
EXPERIMENTAL: {
pubsub: true
},
ipld: {
formats: [
ipldBitcoin, ipldDagCbor, ipldDagPb, ipldEthAccountSnapshot,
ipldEthBlock, ipldEthBlockList, ipldEthStateTrie, ipldEthStorageTrie,
ipldEthTrie, ipldEthTx, ipldGit, ipldRaw, ipldZcash
]
}
})

Expand Down
13 changes: 12 additions & 1 deletion src/core/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -86,7 +86,18 @@ class IPFS extends EventEmitter {
this._libp2pNode = undefined
this._bitswap = undefined
this._blockService = new BlockService(this._repo)
this._ipld = new Ipld(this._blockService)

// Make sure IPLD has the correct BlockService
const ipldDefaults = {
blockService: this._blockService
}
if (this._options.ipld === undefined) {
this._options.ipld = ipldDefaults
} else if (this._options.ipld.blockService === undefined) {
this._options.ipld.blockService = ipldDefaults.blockService
}
this._ipld = new Ipld(this._options.ipld)
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Does this look better ?

    this._ipld = new Ipld(Object.assign({}, { formats: [ipldDagPb] }, this._options.ipld, { blockService: this._blockService }  ))

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I've put your code in a file:

'use strict'

const ipldDagPb = 'ipldDagPb'
const _options = {ipld: {blockService: 'passed in block service'}}
const _blockService = 'blockService'

const result = Object.assign(
  {},
  { formats: [ipldDagPb] },
  _options.ipld,
  { blockService: _blockService }
)

console.log(result)

The out put is { formats: [ 'ipldDagPb' ], blockService: 'blockService' }, but I would expect it to be
{ formats: [ 'ipldDagPb' ], blockService: 'passed in block service' }

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

this is correct for js-ipfs! we need to force the already instantiated blockservice or we will need to deal with the repo instantiation.

ipld blockservice option is an instance and not a reference, and blockservice needs a repo, but ipfs already creates a repo in the instantiation/init/start lifecycle. This will get complex very fast lol :)

i think we should force blockservice and maybe in a future PR handle all the blockservice/repo instances sync with ipld config


this._preload = preload(this)
this._mfsPreload = mfsPreload(this)
this._ipns = new IPNS(null, this)
Expand Down