Evolve Contract

Database contracts are upgradable with evolve function, if set so.

Get Evolve Stats

To get the stats related to evolve, use getEvolve.

await db.getEvolve()
// { canEvolve, history, evolve, isEvolving }

Make DB Contract Upgradable

When deploying the WeaveDB contract, canEvolve should be set true, and evolve should be set null in the initial state.

{
  "canEvolve": true,
  "evolve": null,
  "secure": true,
  "version": "0.7.0",
  "data": {},
  "nonces": {},
  "ids": {},
  "indexes": {},
  "auth":{
    "algorithms": ["secp256k1", "secp256k1-2", "ed25519", "rsa256", "poseidon"],
    "name": "weavedb",
    "version": "1",
    "links": {}
  },
  "crons": {
    "lastExecuted": 0,
    "crons":{}
  },
  "contracts":{}
}

Switch Upgradability

Upgradability can be switched by setCanEvolve. Only contract owners can execute the function.

await db.setCanEvolve(false, { ar: arweave_wallet })

Upgrade / Evolve DB Contract

DB contracts can be upgraded to a new version with evolve if canEvolve is set true.

The new version has to be deployed first, and pass the contractTxId of the new contract to the evolve function.

await db.evolve(contractTxId, { ar: arweave_wallet })

After evolving you need execute migrate. The write operations will be blocked before the migration.

await db.migrate(newVersion, { ar: arweave_wallet })