Skip to content

feat: witness rpc endpoints#1746

Merged
kamuikatsurgi merged 7 commits intodevelopfrom
kamui/witness-rpc-endpoints
Sep 13, 2025
Merged

feat: witness rpc endpoints#1746
kamuikatsurgi merged 7 commits intodevelopfrom
kamui/witness-rpc-endpoints

Conversation

@kamuikatsurgi
Copy link
Copy Markdown
Member

Description

Added 3 new RPC endpoints under the bor namespace:

  • bor_getWitnessByNumber
  • bor_getWitnessByHash
  • bor_getWitnessByBlockNumberOrHash

Copy link
Copy Markdown
Contributor

@lucca30 lucca30 left a comment

Choose a reason for hiding this comment

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

The witness itself is a map. I'm just not sure if we should retrieve it decoded or if we should retrieve it in the raw format (rlp encoded). So it's a client task decode it on their side.

@kamuikatsurgi
Copy link
Copy Markdown
Member Author

The witness itself is a map. I'm just not sure if we should retrieve it decoded or if we should retrieve it in the raw format (rlp encoded). So it's a client task decode it on their side.

I have added the RPCMarshalWitness approach because returning raw encoded *stateless.Witness structs directly from GetWitnessByNumber, GetWitnessByHash, and GetWitnessByBlockNumberOrHash would fail JSON serialisation due to private fields (context, chain, lock) and complex map types (map[string]struct{}). This approach is similar to RPCMarshalBlock and RPCMarshalHeader, which convert the internal witness struct into a map[string]interface{}.

Copy link
Copy Markdown
Contributor

@lucca30 lucca30 left a comment

Choose a reason for hiding this comment

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

lgtm

@kamuikatsurgi
Copy link
Copy Markdown
Member Author

Here is a sample response from the RPC call:

curl -X POST -H "Content-Type: application/json" --data '{"jsonrpc":"2.0","method":"bor_getWitnessByNumber","params":["0x760"],"id":1}' http://localhost:52490 | jq
{
  "jsonrpc": "2.0",
  "id": 1,
  "result": {
    "codesCount": 0,
    "context": {
      "baseFeePerGas": "0x3f",
      "difficulty": "0x1",
      "extraData": "0x0000000000000000000000000000000000000000000000000000000000000000c380c1c052ef89a701faac27a18ca3fca97c52d3f917dbf90104e22602482b64faeea96c607c8298ee34a0d57361e9c6cfe649bd6c35881c2c89a75c8c745a2b0c7c71e601",
      "gasLimit": "0x2aea540",
      "gasUsed": "0xb712",
      "hash": "0x1bc1aaf296ac6324e31ec0d7fb7e318bf6a8a046f4f7d7d0b064543e5ac51223",
      "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000008000000000000000000000200000000000000000000000200000000000800000000200000000000100000000000202000000000000000000000000000000000000000000000080080000000000200000000000000000000000000000000000000000000000000000000000000000220000000000000000000000000000000000010000000000000000000000004000000000000000000001000000080000000000000000000000100000000000000010000000000000000000000000000000000000000000000000000000100000",
      "miner": "0x0000000000000000000000000000000000000000",
      "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000",
      "nonce": "0x0000000000000000",
      "number": "0x760",
      "parentHash": "0x05dcee03cef09665daf7ab33b2b6562389a291723abca1246f00b0c14d0fd50e",
      "receiptsRoot": "0x5477cbb1f7dd74809b897de062f2c6dc40b0f1cc14e5481613ed5a2b80f89c27",
      "sha3Uncles": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347",
      "stateRoot": "0x0d65aa91995984ee7afa0445e74f78154c07f37e9ec363f9fb45f81a8f27c7c1",
      "timestamp": "0x68bfcf01",
      "transactionsRoot": "0x559d254028838b98dd63cbe8d9134bfba45d8992f3a2ae11d3c42b2733e77fdc"
    },
    "headers": [
      {
        "baseFeePerGas": "0x3f",
        "difficulty": "0x1",
        "extraData": "0x0000000000000000000000000000000000000000000000000000000000000000c280c07f44321f2a1aae6b6e40b6e3a9718361a6e49bba5e631adee73e1c2d0bd2aae401be98df81c7da043f8a94932aab2a3a45694e2e4b23bd0d36ce90254d1dd87500",
        "gasLimit": "0x2aea540",
        "gasUsed": "0x0",
        "hash": "0x05dcee03cef09665daf7ab33b2b6562389a291723abca1246f00b0c14d0fd50e",
        "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
        "miner": "0x0000000000000000000000000000000000000000",
        "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000",
        "nonce": "0x0000000000000000",
        "number": "0x75f",
        "parentHash": "0x62bdcce517bc78a5ce74e1b9252f5668c062ff85b49351119448abb7804b92e4",
        "receiptsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
        "sha3Uncles": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347",
        "stateRoot": "0x1753fedc980dfcc9cfd86ac6dab4b25b7f32e8db2f45495d63996f892a0867c6",
        "timestamp": "0x68bfcf00",
        "transactionsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421"
      }
    ],
    "preStateRoot": "0x1753fedc980dfcc9cfd86ac6dab4b25b7f32e8db2f45495d63996f892a0867c6",
    "state": [
      "0xf869a02001ec339268f9037733766d821985caf4cf1f1e62a133f790a648482ceb1175b846f8440180a05f65bc3d1a9053ca8dea875dcef86949e25363d8683a4ff83e69e7bf778b09f0a0e2c039c132dce9e4f437c8786a89af793adf48dad3cfd0d461a5ae4dbb77471d",
      "0xf90211a04e01d54d16676046a9f50c3be530df4554c8011646ba2ddb30e6723dc17b5b24a079d036a6eecd272178363e70c41dc26530f30ee91702fbb229122f05d974ee14a0ca13fa391da12b57aa0a5fa6097dd098cd5fce851f4d64e98277676db3f50bfba091c7c4560f7f16c87dd5532de6db3fc48d6aa3eb9d2ee5437434efac7ba20393a039fcad73fac77ab462b571d486c2059a2611a339d50108507c7a0b2930608a67a0ea11b701d14ce85346852855bc793eced37e7761f5aa28b3a925b5b6235fc626a07e24a4652d266198961a8895ffa8c3e91f8a64e149db6f11c8bf1b82ee29ef2fa04b0223c78f831008fba4ba5c267a452c674d26eb0e40f7c507bf61ba057ea623a0653486c5b25aa78654fc435ae7993390d39d9d77e2d892d2675a3fdf96133236a08fada4edbc125f22e2bdc7cfe94a1f0e243269e026131d92ec13f3bbc78008dda0dac1d52c61f77f634820178dbb05803b432061f52a865b8555dab549f05aae26a0b0ddfc22b32b5ff063ba8b5a19ec1bb516f0760d5d27613809b2f2f554ac972da024f0893937d7106c84b226b284d868e05d0906d17e88ec83272ef55525f0d6bfa0fdfc8ef0512ca0f3421457f310861dd8dacc5598c43633b38a447077200cf1aca0d47bfffda8b734da4feb59980442b4766f09ac733d86504679b269a2aa083c0da0cef9c9819af2e1fdb3e85bf89dfb092e273d2704191694c15f150fa0d0679adf80",
      "0xf8518080808080a0137f1d6c7ea16bcfca4e9074b1122f8ea6e4d4cf017fef5ac85c472659faa9c4808080808080808080a04754f20f810b2171d82e2b4c96284b193c1adf9fda7491f5d82cdc68684502b580",
      "0xf891a03b8972572677b86025b5c383e9ec7436b2b71bd75e84af3e09942ed0d008549a808080a0085dfb0db51106a3b3deb2084107de5860d7cd74dac0d589291295574a0c90d2808080a07d078e568df4bd3846879b395364ebe57ae3ccc7aedfcbf8209c7ff154053c5a808080a03bc29b6a274647236a2e5ada69a1b89224a0482a0b2a640dbf73e76ced76743280808080",
      "0xf87180808080a0f98ad0ffbcda2ec749a1df02c8f7a8617a4cd5b05da5414dfdd64c7bc5000f07808080808080a0c407942e8fa783dfb9270c5ffc54eb5bb78dbf1574b9eafea86a18facf3dc61d8080a0cd3b9317e808335a1d57e12a898ef81092c1470be1da34402c28d27f047d1b678080",
      "0xe3a120290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e56303",
      "0xf869a020bcbed9964f09cf739fa70d7adb88c28fe4fbf10fd9bd33b4c6c984f504251ab846f8448080a0db913528a1ccbc4403ae18eb823863b107a1c01c008f0ebccbd896e03c5f9792a0711fcc513789ac293328fe475046f990a1eaf865e4647015c32e829878be2876",
      "0xf85180808080a06db3b858afdb2be652fefedd0dd25780e4e7f4ae3741fe9688bad20bce22c3e78080808080a0515f79c9d576ca6d3a380f33e86b466691644dcc356d2de562026fe54a0c9e4d808080808080",
      "0xf870a03e87802413d7ef2c0aca6eaaa9d44d0c79ccf07d8808832e4f05d1441a4f7af8b84df84b8087239e310354220ea056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a0c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
      "0xf873a02070bb96dcb08419ae2f03c39cb3bb9d2801718a9ffaf83b7d6a9b50f6864519b850f84e118a021e1c8726e5bd5af43ca056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a0c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470"
    ],
    "stateNodesCount": 10
  }
}

@kamuikatsurgi kamuikatsurgi requested a review from cffls September 11, 2025 15:02
@kamuikatsurgi kamuikatsurgi requested a review from cffls September 12, 2025 13:03
@sonarqubecloud
Copy link
Copy Markdown

Copy link
Copy Markdown
Contributor

@cffls cffls left a comment

Choose a reason for hiding this comment

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

lgtm, thanks!

@kamuikatsurgi kamuikatsurgi merged commit cb7c45d into develop Sep 13, 2025
12 checks passed
@kamuikatsurgi kamuikatsurgi deleted the kamui/witness-rpc-endpoints branch September 13, 2025 04:42
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants