radicle-heartwood-lfs/radicle-cli/examples/rad-id.md

5.3 KiB

At some point in the lifetime of a Radicle project you may want to collaborate with someone else allowing them to become a project maintainer. This requires adding them as a delegate and possibly editing the threshold for passing new changes to the identity of the project.

For cases where threshold > 1, it is necessary to gather a quorum of signatures to update the Radicle identity. To do this, we use the rad id command. For now, since we are the only delegate, and treshold is 1, we can update the identity ourselves.

Let's add Bob as a delegate using their DID, did:key:z6MkedTZGJGqgQ2py2b8kGecfxdt2yRdHWF6JpaZC47fovFn, and update the threshold to 2.

$ rad id update --title "Add Bob" --description "Add Bob as a delegate" --delegate did:key:z6MkedTZGJGqgQ2py2b8kGecfxdt2yRdHWF6JpaZC47fovFn --threshold 2
✓ Identity revision d067ffc7bf65d318dd68ca4b8c7adf61a369ea2f created
╭───────────────────────────────────────────────────────────────────╮
│ Title    Add Bob                                                  │
│ Revision d067ffc7bf65d318dd68ca4b8c7adf61a369ea2f                 │
│ Blob     7109c1c201c223dd4e9fdb10f7330dc6f0310258                 │
│ Author   did:key:z6MknSLrJoTcukLrE435hVNQT4JUhbvWLX4kUzqkEStBU8Vi │
│ State    accepted                                                 │
│ Quorum   yes                                                      │
│                                                                   │
│ Add Bob as a delegate                                             │
├───────────────────────────────────────────────────────────────────┤
│ ✓ did:key:z6MknSLrJoTcukLrE435hVNQT4JUhbvWLX4kUzqkEStBU8Vi  (you) │
╰───────────────────────────────────────────────────────────────────╯

@@ -1,13 +1,14 @@
 {
   "payload": {
     "xyz.radicle.project": {
       "defaultBranch": "master",
       "description": "Radicle Heartwood Protocol & Stack",
       "name": "heartwood"
     }
   },
   "delegates": [
-    "did:key:z6MknSLrJoTcukLrE435hVNQT4JUhbvWLX4kUzqkEStBU8Vi"
+    "did:key:z6MknSLrJoTcukLrE435hVNQT4JUhbvWLX4kUzqkEStBU8Vi",
+    "did:key:z6MkedTZGJGqgQ2py2b8kGecfxdt2yRdHWF6JpaZC47fovFn"
   ],
-  "threshold": 1
+  "threshold": 2
 }

Before moving on, let's take a few notes on this output. The first thing we'll notice is that the difference between the current identity document and the proposed changes are shown. Specifically, we changed the delegates and threshold:

  "delegates": [
-   "did:key:z6MknSLrJoTcukLrE435hVNQT4JUhbvWLX4kUzqkEStBU8Vi"
+   "did:key:z6MknSLrJoTcukLrE435hVNQT4JUhbvWLX4kUzqkEStBU8Vi",
+   "did:key:z6MkedTZGJGqgQ2py2b8kGecfxdt2yRdHWF6JpaZC47fovFn"
  ],
...
-  "threshold": 1
+  "threshold": 2

Next we have the number of signatures from delegates, which includes our own:

✓ did:key:z6MknSLrJoTcukLrE435hVNQT4JUhbvWLX4kUzqkEStBU8Vi

Finally, we can see whether the Quorum was reached:

Quorum   yes

Since the threshold was previously 1, this change is now in effect. We can verify that by listing the current identity document:

$ rad inspect --identity
{
  "payload": {
    "xyz.radicle.project": {
      "defaultBranch": "master",
      "description": "Radicle Heartwood Protocol & Stack",
      "name": "heartwood"
    }
  },
  "delegates": [
    "did:key:z6MknSLrJoTcukLrE435hVNQT4JUhbvWLX4kUzqkEStBU8Vi",
    "did:key:z6MkedTZGJGqgQ2py2b8kGecfxdt2yRdHWF6JpaZC47fovFn"
  ],
  "threshold": 2
}

We can also look at the document's COB directly:

$ rad cob show --object 2317f74de0494c489a233ca6f29f2b8bff6d4f15 --type xyz.radicle.id --repo rad:z42hL2jL4XNk6K8oHQaSWfMgCL7ji
commit d067ffc7bf65d318dd68ca4b8c7adf61a369ea2f
parent 2317f74de0494c489a233ca6f29f2b8bff6d4f15
author z6MknSLrJoTcukLrE435hVNQT4JUhbvWLX4kUzqkEStBU8Vi
date   Thu, 15 Dec 2022 17:28:04 +0000

    {
      "blob": "7109c1c201c223dd4e9fdb10f7330dc6f0310258",
      "description": "Add Bob as a delegate",
      "parent": "2317f74de0494c489a233ca6f29f2b8bff6d4f15",
      "signature": "z3sne3sdReZ4AtgxQmn7R1pQnz7E9ZEUoRfCJDJ8ytgnBMFW4DJqRHuBz2h1NK4QdGEy3QCpyVoJKfE95tNoivXwz",
      "title": "Add Bob",
      "type": "revision"
    }

commit 2317f74de0494c489a233ca6f29f2b8bff6d4f15
author z6MknSLrJoTcukLrE435hVNQT4JUhbvWLX4kUzqkEStBU8Vi
date   Thu, 15 Dec 2022 17:28:04 +0000

    {
      "blob": "d96f425412c9f8ad5d9a9a05c9831d0728e2338d",
      "parent": null,
      "signature": "z5nGqUvrmfiSyLjNCHWTWYvVMcPUZcvo9TxPKzEKXYBdSgUzbrqf1cYsmpGgbQvYunnsrLSsubEmxZaRdKM4quqQR",
      "title": "Initial revision",
      "type": "revision"
    }

Note that once a revision is accepted, it can't be edited, redacted or otherwise acted upon:

$ rad id redact d067ffc7bf65d318dd68ca4b8c7adf61a369ea2f
✗ Error: [..]
$ rad id reject d067ffc7bf65d318dd68ca4b8c7adf61a369ea2f
✗ Error: [..]
$ rad id accept d067ffc7bf65d318dd68ca4b8c7adf61a369ea2f
✗ Error: [..]