Skip to content

Instantly share code, notes, and snippets.

@maxkerp
Last active June 4, 2018 13:55
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save maxkerp/8edcb16e0fa86697f338a502a549b5b6 to your computer and use it in GitHub Desktop.
Save maxkerp/8edcb16e0fa86697f338a502a549b5b6 to your computer and use it in GitHub Desktop.
Gist to easily replicate the orbit-db replication bug #376
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Replication BUG</title>
<!-- <script src="https://cdnjs.cloudflare.com/ajax/libs/ipfs/0.29.1/index.js"></script> -->
<!-- <script src="https://cdnjs.cloudflare.com/ajax/libs/ipfs/0.29.2/index.js"></script> -->
<script src="https://cdnjs.cloudflare.com/ajax/libs/ipfs/0.29.3/index.js"></script>
<!-- <script src="https://cdn.jsdelivr.net/npm/orbit-db@0.19.6/dist/dist/orbitdb.js"></script> -->
<!-- <script src="https://cdn.jsdelivr.net/npm/orbit-db@0.19.7/dist/dist/orbitdb.js"></script> -->
<script src="https://cdn.jsdelivr.net/npm/orbit-db@0.19.8/dist/dist/orbitdb.js"></script>
<script>
window.LOG = 'debug'
const ipfsConfig = {
repo: './ipfs',
config: {
Addresses: {
Swarm: [
// IPFS dev signal server
// Prefer websocket over webrtc
//
// Websocket:
// '/dns4/ws-star-signal-2.servep2p.com/tcp/443//wss/p2p-websocket-star',
'/dns4/ws-star.discovery.libp2p.io/tcp/443/wss/p2p-websocket-star',
//
// local signal server
// '/ip4/127.0.0.1/tcp/4711/ws/p2p-websocket-star'
//
// WebRTC:
// '/dns4/star-signal.cloud.ipfs.team/wss/p2p-webrtc-star',
// local signal server
// '/ip4/127.0.0.1/tcp/1337/ws/p2p-webrtc-star'
]
}
},
EXPERIMENTAL: {
pubsub: true
}
};
let orbitdb = null
// Create IPFS instance
const ipfs = new Ipfs(ipfsConfig)
ipfs.on('error', (e) => console.error(e))
ipfs.on('ready', async () => {
orbitdb = new OrbitDB(ipfs)
window.ipfs = ipfs
window.orbitdb = orbitdb
})
async function createDB1(){
window.db1 = await orbitdb.docs('DOCS1', { write: ["*"]})
await db1.put({_id: 'db1-1', entry: 1})
await db1.put({_id: 'db1-2', entry: 2})
}
async function replicateDB1(){
window.db1 = await orbitdb.docs('DOCS1', { write: ["*"]})
}
function showDB1(){
console.log(db1.address.toString())
console.log(db1.all)
}
async function createDB2(){
window.db2 = await orbitdb.docs('DOCS2', { write: ["*"]})
await db2.put({_id: 'db2-1', entry: 1})
await db2.put({_id: 'db2-2', entry: 2})
}
async function replicateDB2(){
window.db2 = await orbitdb.docs('DOCS2', { write: ["*"]})
}
function showDB2(){
console.log(db2.address.toString())
console.log(db2.all)
}
async function WindowA() {
await createDB1()
await createDB2()
showDB1()
showDB2()
}
async function WindowB() {
await replicateDB1()
await replicateDB2()
// Replication on dev signal server takes some time
setTimeout(function(){
showDB1()
showDB2()
}, 5000)
}
</script>
</head>
<body>
</body>
</html>
@haadcode
Copy link

haadcode commented Jun 4, 2018

Solution as per orbitdb/orbitdb#376

<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <title>Replication BUG</title>

  <!-- <script src="https://cdnjs.cloudflare.com/ajax/libs/ipfs/0.29.1/index.js"></script> -->
  <!-- <script src="https://cdnjs.cloudflare.com/ajax/libs/ipfs/0.29.2/index.js"></script> -->
  <script src="https://cdnjs.cloudflare.com/ajax/libs/ipfs/0.29.3/index.js"></script>

  <!-- <script src="https://cdn.jsdelivr.net/npm/orbit-db@0.19.6/dist/dist/orbitdb.js"></script> -->
  <!-- <script src="https://cdn.jsdelivr.net/npm/orbit-db@0.19.7/dist/dist/orbitdb.js"></script> -->
  <script src="https://cdn.jsdelivr.net/npm/orbit-db@0.19.8/dist/dist/orbitdb.js"></script>

  <script>
    window.LOG = 'debug'

    const ipfsConfig = {
      repo: './ipasdfs2',
      config: {
        Addresses: {
          Swarm: [
            // IPFS dev signal server
            // Prefer websocket over webrtc
            //
            // Websocket:
            // '/dns4/ws-star-signal-2.servep2p.com/tcp/443//wss/p2p-websocket-star',
            '/dns4/ws-star.discovery.libp2p.io/tcp/443/wss/p2p-websocket-star',
            //
            // local signal server
            // '/ip4/127.0.0.1/tcp/4711/ws/p2p-websocket-star'
            //
            // WebRTC:
            // '/dns4/star-signal.cloud.ipfs.team/wss/p2p-webrtc-star',
            // local signal server
            // '/ip4/127.0.0.1/tcp/1337/ws/p2p-webrtc-star'
          ]
        }
      },
      EXPERIMENTAL: {
        pubsub: true
      }
    };

    let orbitdb = null

    // Create IPFS instance
    const ipfs = new Ipfs(ipfsConfig)

    ipfs.on('error', (e) => console.error(e))

    ipfs.on('ready', async () => {
      orbitdb = new OrbitDB(ipfs, './tm24241p2')

      window.ipfs = ipfs
      window.orbitdb = orbitdb
      await WindowA()
      await WindowB()
    })

    async function createDB1(){
      window.db1 = await orbitdb.docs('DOCS1', { write: ["*"]})
      await db1.put({_id: 'db1-1', entry: 1})
      await db1.put({_id: 'db1-2', entry: 2})
    }

    async function replicateDB1(){
      window.db1 = await orbitdb.docs('DOCS1', { write: ["*"]})
      await window.db1.load()
    }

    function showDB1(){
      console.log("DB1")
      console.log(db1.address.toString())
      console.log(db1.all)
    }

    async function createDB2(){
      window.db2 = await orbitdb.docs('DOCS2', { write: ["*"]})
      await db2.put({_id: 'db2-1', entry: 1})
      await db2.put({_id: 'db2-2', entry: 2})
    }

    async function replicateDB2(){
      window.db2 = await orbitdb.docs('DOCS2', { write: ["*"]})
      await window.db2.load()
    }

    function showDB2(){
      console.log("DB2")
      console.log(db2.address.toString())
      console.log(db2.all)
    }

    async function WindowA() {
      await createDB1()
      await createDB2()

      showDB1()
      showDB2()
    }

    async function WindowB() {
      await replicateDB1()
      await replicateDB2()

      // Replication on dev signal server takes some time
      setTimeout(function(){

        showDB1()
        showDB2()
      }, 5000)
    }
  </script>
</head>
<body>
</body>
</html>

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment