Getting Started

To start staking on the SSV network using our DVT Staking API, there are a few essential prerequisites to ensure a smooth and efficient setup:

  • Minimum Stake Requirement: You will need a minimum of 32 ETH for each staking validator you wish to run.
  • SSV Tokens: To operate validators on the SSV network, holding at least 6,15 SSV tokens per validator is recommended to cover yearly operational costs. Get SSV test tokens here.
  • API Key Request: Get an authentication token to start using DVT Staking API.

There are several pathways to engage in DVT staking:

  • Utilize the P2P smart contract for a simplified operation.
  • Directly interact with the Ethereum Deposit Smart Contract.

We also provide convenient request examples using cURL to guide you through the process.

Using the P2P Smart Contract

  1. Prepareid that is an arbitrary UUID. Generate it in one of the following ways:

  2. Set up staking SSV nodes through P2P infrastructure by sending a POST request to /api/v1/eth/staking/ssv/request/create. Use https://api-test-holesky.p2p.org for testing
    or https://api.p2p.org for production.

    Example request:

    curl --request POST \
         --url https://api.p2p.org/api/v1/eth/staking/ssv/request/create \
         --header 'accept: application/json' \
         --header 'authorization: Bearer <token>' \
         --header 'content-type: application/json' \
         --data '
    {
      "id": "3fa85f64-5717-4562-b3fc-2c963f66afa5",
      "validatorsCount": "1",
      "withdrawalAddress": "0x39D02C253dA1d9F85ddbEB3B6Dc30bc1EcBbFA17",
      "feeRecipientAddress": "0x39D02C253dA1d9F85ddbEB3B6Dc30bc1EcBbFA17",
      "ssvOwnerAddress": "0x39D02C253dA1d9F85ddbEB3B6Dc30bc1EcBbFA17",
      "type": "without-encrypt-key",
      "operationPeriodInDays": 30,
      "ecdhPublicKey": null
    }
    '
    
    • id — arbitrary UUID. You can later use that UUID to check the status of the set-up operation.
    • validatorsCount — number of validators. One validator is equal to 32 ETH.
    • withdrawalAddress — 0x01 prefixed withdrawal address for the client. This address is also used as the validator owner's address and must be used to sign the transaction to register the SSV validator at step 6.
    • feeRecipientAddress — Eth1 address that receives priority fees and MEV rewards that are not related to Beacon chain partial withdrawal sweeps.
    • ssvOwnerAddress — address that acts as the owner of the SSV cluster. The cluster owner can register the validator, update the fee recipient address, top-up the cluster balance, and claim SSV incentives rewards.
    • type— type of operation:
      • without-encrypt-key (available) — validator's private key is returned encrypted to the client.
      • with-encrypt-key (not available) — validator private key is instead maintained by P2P to initiate withdrawals when requested by the client. If selected, fill the ecdhPublicKey field.
    • operationPeriodInDays— operation period in days.
    • ecdhPublicKey— your ECDH public key to obtain an encrypted validator private key.

    Example response:

    {
     "error": null,
     "result": true
    }
    
  3. Check the node set-up operation status and retrieve the required transaction data to interact with the SSV smart contract by sending a GET request to /api/v1/eth/staking/ssv/request/status/{id}.

    Example request:

    curl --request GET \
         --url https://api.p2p.org/api/v1/eth/staking/ssv/request/status/3fa85f64-5717-4562-b3fc-2c963f66afa5 \
         --header 'accept: application/json' \
         --header 'authorization: Bearer <token>'
    
    • id — UUID that was specified in the SSV set-up request.

    Example response:

    {
        "error": null,
        "result": {
            "id": "3fa85f64-5717-4562-b3fc-2c963f66afa5",
            "status": "ready",
            "type": "without-encrypt-key",
            "operationPeriodInDays": 30,
            "liquidationPeriodInDays": 30,
            "ecdhPublicKey": null,
            "encryptedShares": [
                {
                    "publicKey": "0xb4b5f251eac53f34eb1da2b6659d35db303e408c4c830156cf090441564474f356abd023a0e679aa97cefeed850abb27",
                    "nonce": 1,
                    "sharesData": "0x971aade51840b84fc5b88fee2ef1ed80ce57c2ea9a8fb610d2fdb3a287589a87c421b845e3f1cb4ef5a84eaba6c31d4c159ead3c818758d6fc988a207ea467ff35fb90ab502805569f8ff94042d870ebedc327ea0778476559c95076a99c7cd1b78b94bb2a5098c10b50000c7419476f295e0d1e94b17c1f985c76adfad8b7897bdf34b58388b6b201104616e179e93888016e92ab60b4bf5d844b1a8fd9fdd97e3dba2cfadbe65f1bc3b66aeed8b1be8407a150ae6a028fe72e50d70121e7eab424e02922422ce66fb45c5878eb0d307fae5b5b0637cee897a119563d18082c33fe5ac017d3cfd3a42e2f5f7d8bece98e679000fb7cfd339fbc1470177963d5cd73b6b4001e77f3dcb348cb07797b25fd3b6811e4dfbafe78a4a9d70861fd27001d88253500347ba8ff907bd647b83aa6b5bf727929ee35ce5360a0b7810b355f8e524426e8a6db75e240af29527b398c2d5a926e4867f04483ec61338d7f413cd419d17bc572a0b3ecd98e04426964a8350d1545493e2fe039828f8e74fb48da7f4ee26166b4c2b2b05fa94bf4721a0b6888a8065062ed45bd23f9d3fcbb80ecf3febfb8c90522b20ae724a94f12fb9de80c95dd7b1762d6b15312c3bbde291224fb7b809384404bde5d78bd36801a67154addc466d20c6e6146eda1e263167a96a9d21a1b4fef6d532957cfca20d3311ac2f5bfd6c4601df0eebec49b5a74adce8c1b7fbf82c5333d25c499f72928d3bfe47fa9c54ec9f55c63586758af8a256683952376b4feef745bbc2280e66bb475e48edc4a90eb128bfb3322b30065f3fedf6dcd3180798375eee05abc20433f79e3d6e73948a84057ca7b72b6ba756f257ca1a11f2fa3b130bcf28d9ef80cb946bf11e6008815ee6c100ab1527f13c064bac2b67a8f832ab70c98d39d77940f975c35c8dea26f2e25a5e706da368fa0dd08958ea11904b1b51ca40aab37e581e58a5c60ea1caa08063461b3319e6c8ff21b75f2ff9358ddccf27abea55e7dbad4f474741ff14fe9e63d9c001eec990531a5bc6b2196269cfa0050beced2e2ce55f9dfea48c0c81f3d1a1f4f6548e29de76b085f83f9399c29b89880a15b80e049de2fa9eef3eab7a1a15cd1d6ae2bc8fdc9837f59baf56c11ed7405bda5d2cd2de6fd80c7b7461abfb757c742b3216ef79d8268501cb3531a5fcf9d46b58e828e6aaea4bef8484cc8945912ac611827463d4a3dabe56f608181dfba8ffc7cb1cfdef5a09a9f107652b44d290fc42b0d5e3e16634342af07f205153b0c7d095e0d418f1d0aef8a7e00d41e5af183ceed36d5832169bdd91810b4ad686b85130ec07aeaccfbc26d440684ac34c8005c12b38caa41d18ecd51167afaba0aae2b605cb0cefcae1b4f64ff220167d1f93b73abd75368dd67c3a6ad48448021c66086daf62419d6de350ee3f25aef4784340c0932362da25cff3f1ed7316afce3034d264f1206322c6510aacddb9315f8b532516a52f2483d0a191caa38a10cb40d00494c43ddcc49b54349fd809409a8d6131746ef7adc57a9f7feea9bb3a4142d418e5b1f89ccde686a1627c9a9d5ac9bc6a06685017b15eb549e9bc2e7cf98720b616d8bea14b5b9194280bb1386154be5fd31dc6f64cfe5bbf80fff95e2a82a2a803e579e302c0db931470b78fb32fb1774840002417b86c4ad621e43ec36d2496a7f6b63d470fae3edb863f909ee0e4ce43ca293770a229cbcbd542c9bd123889298c3a6e32c2e5c5f4861afa640a16d5c5089373d3e6ddfdebc223a2d966c3e37d135f3f8805eb3432ff46befac6c41aff89739b1bab6ccee383fb524ff985b5054091fed2d351bff38ec78800200",
                    "ecdhEncryptedPrivateKey": null
                }
            ],
            "validatorsCount": 1,        
            "withdrawalAddress": "0x9c7d4b4595402ed44167C74f9F7c7720AB5528E0",
          	"ssvOwnerAddress": "0x39D02C253dA1d9F85ddbEB3B6Dc30bc1EcBbFA17",      
            "feeRecipientAddress": "0x9c7d4b4595402ed44167C74f9F7c7720AB5528E0",   
            "validatorRegistrationTxs": [
                {
                    "serializeTx": "0x02f9078605010210830f424094c3cd9a0ae89fff83b71b58b6512d43f8a41f363d80b9076406e8fb9c00000000000000000000000000000000000000000000000000000000000001200000000000000000000000000000000000000000000000000000000000000180000000000000000000000000000000000000000000000000000000000000022000000000000000000000000000000000000000000000000016c7ded605b5c0000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000046f3111b30000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000016c7ded605b5c0000000000000000000000000000000000000000000000000000000000000000030b4b5f251eac53f34eb1da2b6659d35db303e408c4c830156cf090441564474f356abd023a0e679aa97cefeed850abb2700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000520971aade51840b84fc5b88fee2ef1ed80ce57c2ea9a8fb610d2fdb3a287589a87c421b845e3f1cb4ef5a84eaba6c31d4c159ead3c818758d6fc988a207ea467ff35fb90ab502805569f8ff94042d870ebedc327ea0778476559c95076a99c7cd1b78b94bb2a5098c10b50000c7419476f295e0d1e94b17c1f985c76adfad8b7897bdf34b58388b6b201104616e179e93888016e92ab60b4bf5d844b1a8fd9fdd97e3dba2cfadbe65f1bc3b66aeed8b1be8407a150ae6a028fe72e50d70121e7eab424e02922422ce66fb45c5878eb0d307fae5b5b0637cee897a119563d18082c33fe5ac017d3cfd3a42e2f5f7d8bece98e679000fb7cfd339fbc1470177963d5cd73b6b4001e77f3dcb348cb07797b25fd3b6811e4dfbafe78a4a9d70861fd27001d88253500347ba8ff907bd647b83aa6b5bf727929ee35ce5360a0b7810b355f8e524426e8a6db75e240af29527b398c2d5a926e4867f04483ec61338d7f413cd419d17bc572a0b3ecd98e04426964a8350d1545493e2fe039828f8e74fb48da7f4ee26166b4c2b2b05fa94bf4721a0b6888a8065062ed45bd23f9d3fcbb80ecf3febfb8c90522b20ae724a94f12fb9de80c95dd7b1762d6b15312c3bbde291224fb7b809384404bde5d78bd36801a67154addc466d20c6e6146eda1e263167a96a9d21a1b4fef6d532957cfca20d3311ac2f5bfd6c4601df0eebec49b5a74adce8c1b7fbf82c5333d25c499f72928d3bfe47fa9c54ec9f55c63586758af8a256683952376b4feef745bbc2280e66bb475e48edc4a90eb128bfb3322b30065f3fedf6dcd3180798375eee05abc20433f79e3d6e73948a84057ca7b72b6ba756f257ca1a11f2fa3b130bcf28d9ef80cb946bf11e6008815ee6c100ab1527f13c064bac2b67a8f832ab70c98d39d77940f975c35c8dea26f2e25a5e706da368fa0dd08958ea11904b1b51ca40aab37e581e58a5c60ea1caa08063461b3319e6c8ff21b75f2ff9358ddccf27abea55e7dbad4f474741ff14fe9e63d9c001eec990531a5bc6b2196269cfa0050beced2e2ce55f9dfea48c0c81f3d1a1f4f6548e29de76b085f83f9399c29b89880a15b80e049de2fa9eef3eab7a1a15cd1d6ae2bc8fdc9837f59baf56c11ed7405bda5d2cd2de6fd80c7b7461abfb757c742b3216ef79d8268501cb3531a5fcf9d46b58e828e6aaea4bef8484cc8945912ac611827463d4a3dabe56f608181dfba8ffc7cb1cfdef5a09a9f107652b44d290fc42b0d5e3e16634342af07f205153b0c7d095e0d418f1d0aef8a7e00d41e5af183ceed36d5832169bdd91810b4ad686b85130ec07aeaccfbc26d440684ac34c8005c12b38caa41d18ecd51167afaba0aae2b605cb0cefcae1b4f64ff220167d1f93b73abd75368dd67c3a6ad48448021c66086daf62419d6de350ee3f25aef4784340c0932362da25cff3f1ed7316afce3034d264f1206322c6510aacddb9315f8b532516a52f2483d0a191caa38a10cb40d00494c43ddcc49b54349fd809409a8d6131746ef7adc57a9f7feea9bb3a4142d418e5b1f89ccde686a1627c9a9d5ac9bc6a06685017b15eb549e9bc2e7cf98720b616d8bea14b5b9194280bb1386154be5fd31dc6f64cfe5bbf80fff95e2a82a2a803e579e302c0db931470b78fb32fb1774840002417b86c4ad621e43ec36d2496a7f6b63d470fae3edb863f909ee0e4ce43ca293770a229cbcbd542c9bd123889298c3a6e32c2e5c5f4861afa640a16d5c5089373d3e6ddfdebc223a2d966c3e37d135f3f8805eb3432ff46befac6c41aff89739b1bab6ccee383fb524ff985b5054091fed2d351bff38ec78800200c0",
                    "to": "0xC3CD9A0aE89Fff83b71b58b6512D43F8a41f363D",
                    "gasLimit": "0.000000000001",
                    "data": "0x06e8fb9c00000000000000000000000000000000000000000000000000000000000001200000000000000000000000000000000000000000000000000000000000000180000000000000000000000000000000000000000000000000000000000000022000000000000000000000000000000000000000000000000016c7ded605b5c0000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000046f3111b30000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000016c7ded605b5c0000000000000000000000000000000000000000000000000000000000000000030b4b5f251eac53f34eb1da2b6659d35db303e408c4c830156cf090441564474f356abd023a0e679aa97cefeed850abb2700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000520971aade51840b84fc5b88fee2ef1ed80ce57c2ea9a8fb610d2fdb3a287589a87c421b845e3f1cb4ef5a84eaba6c31d4c159ead3c818758d6fc988a207ea467ff35fb90ab502805569f8ff94042d870ebedc327ea0778476559c95076a99c7cd1b78b94bb2a5098c10b50000c7419476f295e0d1e94b17c1f985c76adfad8b7897bdf34b58388b6b201104616e179e93888016e92ab60b4bf5d844b1a8fd9fdd97e3dba2cfadbe65f1bc3b66aeed8b1be8407a150ae6a028fe72e50d70121e7eab424e02922422ce66fb45c5878eb0d307fae5b5b0637cee897a119563d18082c33fe5ac017d3cfd3a42e2f5f7d8bece98e679000fb7cfd339fbc1470177963d5cd73b6b4001e77f3dcb348cb07797b25fd3b6811e4dfbafe78a4a9d70861fd27001d88253500347ba8ff907bd647b83aa6b5bf727929ee35ce5360a0b7810b355f8e524426e8a6db75e240af29527b398c2d5a926e4867f04483ec61338d7f413cd419d17bc572a0b3ecd98e04426964a8350d1545493e2fe039828f8e74fb48da7f4ee26166b4c2b2b05fa94bf4721a0b6888a8065062ed45bd23f9d3fcbb80ecf3febfb8c90522b20ae724a94f12fb9de80c95dd7b1762d6b15312c3bbde291224fb7b809384404bde5d78bd36801a67154addc466d20c6e6146eda1e263167a96a9d21a1b4fef6d532957cfca20d3311ac2f5bfd6c4601df0eebec49b5a74adce8c1b7fbf82c5333d25c499f72928d3bfe47fa9c54ec9f55c63586758af8a256683952376b4feef745bbc2280e66bb475e48edc4a90eb128bfb3322b30065f3fedf6dcd3180798375eee05abc20433f79e3d6e73948a84057ca7b72b6ba756f257ca1a11f2fa3b130bcf28d9ef80cb946bf11e6008815ee6c100ab1527f13c064bac2b67a8f832ab70c98d39d77940f975c35c8dea26f2e25a5e706da368fa0dd08958ea11904b1b51ca40aab37e581e58a5c60ea1caa08063461b3319e6c8ff21b75f2ff9358ddccf27abea55e7dbad4f474741ff14fe9e63d9c001eec990531a5bc6b2196269cfa0050beced2e2ce55f9dfea48c0c81f3d1a1f4f6548e29de76b085f83f9399c29b89880a15b80e049de2fa9eef3eab7a1a15cd1d6ae2bc8fdc9837f59baf56c11ed7405bda5d2cd2de6fd80c7b7461abfb757c742b3216ef79d8268501cb3531a5fcf9d46b58e828e6aaea4bef8484cc8945912ac611827463d4a3dabe56f608181dfba8ffc7cb1cfdef5a09a9f107652b44d290fc42b0d5e3e16634342af07f205153b0c7d095e0d418f1d0aef8a7e00d41e5af183ceed36d5832169bdd91810b4ad686b85130ec07aeaccfbc26d440684ac34c8005c12b38caa41d18ecd51167afaba0aae2b605cb0cefcae1b4f64ff220167d1f93b73abd75368dd67c3a6ad48448021c66086daf62419d6de350ee3f25aef4784340c0932362da25cff3f1ed7316afce3034d264f1206322c6510aacddb9315f8b532516a52f2483d0a191caa38a10cb40d00494c43ddcc49b54349fd809409a8d6131746ef7adc57a9f7feea9bb3a4142d418e5b1f89ccde686a1627c9a9d5ac9bc6a06685017b15eb549e9bc2e7cf98720b616d8bea14b5b9194280bb1386154be5fd31dc6f64cfe5bbf80fff95e2a82a2a803e579e302c0db931470b78fb32fb1774840002417b86c4ad621e43ec36d2496a7f6b63d470fae3edb863f909ee0e4ce43ca293770a229cbcbd542c9bd123889298c3a6e32c2e5c5f4861afa640a16d5c5089373d3e6ddfdebc223a2d966c3e37d135f3f8805eb3432ff46befac6c41aff89739b1bab6ccee383fb524ff985b5054091fed2d351bff38ec78800200",
                    "value": "0.0",
                    "chainId": 5,
                    "type": 2,
                    "maxFeePerGas": "0.000000000000000016",
                    "maxPriorityFeePerGas": "2"
                }
            ],
            "ssvFeeTxs": [
                {
                    "serializeTx": "0x02f901c605800210830186a094c3cd9a0ae89fff83b71b58b6512d43f8a41f363d80b901a4bc26e7e50000000000000000000000009c7d4b4595402ed44167c74f9f7c7720ab5528e0000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000016c7ded605b5c0000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000046f3111b30000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000016c7ded605b5c00000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000004c0",
                    "to": "0xC3CD9A0aE89Fff83b71b58b6512D43F8a41f363D",
                    "gasLimit": "0.0000000000001",
                    "data": "0xbc26e7e50000000000000000000000009c7d4b4595402ed44167c74f9f7c7720ab5528e0000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000016c7ded605b5c0000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000046f3111b30000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000016c7ded605b5c00000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000004",
                    "value": "0.0",
                    "chainId": 5,
                    "type": 2,
                    "maxFeePerGas": "0.000000000000000016",
                    "maxPriorityFeePerGas": "2"
                }
            ],
            "feeRecipientTx": {
                "serializeTx": "0x02f84405800210830186a094c3cd9a0ae89fff83b71b58b6512d43f8a41f363d80a4dbcdc2cc0000000000000000000000009c7d4b4595402ed44167c74f9f7c7720ab5528e0c0",
                "to": "0xC3CD9A0aE89Fff83b71b58b6512D43F8a41f363D",
                "gasLimit": "0.0000000000001",
                "data": "0xdbcdc2cc0000000000000000000000009c7d4b4595402ed44167c74f9f7c7720ab5528e0",
                "value": "0.0",
                "chainId": 5,
                "type": 2,
                "maxFeePerGas": "0.000000000000000016",
                "maxPriorityFeePerGas": "2"
            },
            "approveTx": {
                "serializeTx": "0x02f86505800210830186a0943a9f01091c446bde031e39ea8354647afef091e780b844095ea7b3000000000000000000000000c3cd9a0ae89fff83b71b58b6512d43f8a41f363dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0",
                "to": "0x3a9f01091C446bdE031E39ea8354647AFef091E7",
                "gasLimit": "0.0000000000001",
                "data": "0x095ea7b3000000000000000000000000c3cd9a0ae89fff83b71b58b6512d43f8a41f363dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
                "value": "0.0",
                "chainId": 5,
                "type": 2,
                "maxFeePerGas": "0.000000000000000016",
                "maxPriorityFeePerGas": "2"
            }
        }
    }
    
    • id — UUID that was specified in the SSV set-up request.
    • status — current status of the SSV request:
      • init — request is stored.
      • processing — request in progress, please wait.
      • ready — request is ready.
      • validator-ready — validator is registered on the SSV network and contains the deposit data.
      • validator-error — validator data is not valid.
      • cancel — request canceled due to an error or timeout.
        When ready, the validator data is ready to be used in the validator registration step.
    • type— type of operation:
      • without-encrypt-key (available) — validator's private key is returned encrypted to the client.
      • with-encrypt-key (not available) — validator private key is instead maintained by P2P to initiate withdrawals when requested by the client.
    • operationPeriodInDays— operation period in days.
    • liquidationPeriodInDays— liquidation threshold period in days.
    • ecdhPublicKey — your ECDH public key for getting the encrypted validator private key.
    • encryptedShares:
      • publicKey — validator public key.
      • nonce — validator key owner's nonce used for signature in sharesData.
      • sharesData — the shares (i.e. validator key into a predefined threshold of shares) and the signature, used to prove the validator owner address. Used in the registerValidator Ethereum transaction from the SSV smart contract to create a validator.
      • ecdhEncryptedPrivateKey — encrypted validator private key.
    • validatorsCount — number of validators. One validator is equal to 32 ETH.
    • withdrawalAddress — withdrawal address of the cluster owner.
    • ssvOwnerAddress — address that acts as the owner of the SSV cluster. The cluster owner can register the validator, update the fee recipient address, top-up the cluster balance, and claim SSV incentives rewards.
    • feeRecipientAddress — Eth1 address that receives the fee recipient rewards.
    • validatorRegistrationTxs — transaction data presented in both a serialized and unserialized way to register the validator on the SSV network.
    • ssvFeeTxs — transaction data presented in both a serialized and unserialized way to deposit SSV fees into the cluster balance.
    • feeRecipientTx — transaction data presented in both a serialized and unserialized way to set the fee recipient address.
    • approveTx — transaction data presented in both a serialized and unserialized way to approve the transfer of SSV tokens from the SSV.network smart contract on behalf of the users.

    validatorRegistrationTxs, ssvFeeTxs, feeRecipientTx, and approveTx includes a list of data fields that contain the following data:

    • serializeTx — serialized unsigned transaction.
    • to — recipient address for this transaction.
    • gasLimit — maximum gas limit for this block.
    • data — transaction data.
    • value — amount this transaction is sending in Wei.
    • chainId — chain ID this transaction is authorized on, as specified by EIP-155.
    • typeEIP-2718 type of this transaction envelope.
    • maxFeePerGas — maximum price per unit of gas this transaction will pay for the combined EIP-1559 block's base fee and this transaction's priority fee in Wei.
    • maxPriorityFeePerGas — price per unit of gas in Wei, which is added to the EIP-1559 block's base fee. This added fee is used to incentivize miners to prioritize this transaction.
  4. Sign and broadcast the transaction approveTx either by using the serialized signature in serializeTx or by constructing the signature using the unserialized data inside approveTx.

    Use serializeTx to sign and send the signed transaction to the Ethereum network.

    This step is required only once per account. It enables the SSV smart contract to transfer SSV tokens on your behalf to fund the cluster balance.

  5. Sign and broadcast the transaction feeRecipientTx either by using the serialized signature in serializeTx or by constructing the signature using the unserialized data inside feeRecipientTx.

    Use serializeTx to sign and send the signed transaction to the Ethereum network.

    This step is required only once per account. It sets the fee recipient address for the validator on the SSV network. This address will be the recipient of the execution layer rewards accrued.

  6. Sign and broadcast the transaction validatorRegistrationTxs either by using the serialized signature in serializeTx or by constructing the signature using the unserialized data inside validatorRegistrationTxs.

    Use serializeTx to sign and send the signed transaction to the Ethereum network.

    By broadcasting this transaction, your validator will be registered on the SSV network and simultaneously managed by a pool (i. e., cluster) of four top-performance node operators: Allnodes, Huobi, P2P.org, and Stakeley.

    Check an example on Goerli of a successfully broadcasted transaction using the validatorRegistrationTxs data.

  7. After the transaction validatorRegistrationTxs is correctly broadcasted to the Ethereum network, retrieve the validators' request deposit data by sending a GET request to /api/v1/eth/staking/ssv/request/deposit-data/{id}.

    Note that there is a mandatory 6-minutes delay before the deposit data becomes available. This delay is implemented for security reasons, ensuring that the validator can be correctly verified.

    Example request:

    curl --request GET \
         --url https://api.p2p.org/api/v1/eth/staking/ssv/request/deposit-data/3fa85f64-5717-4562-b3fc-2c963f66afa5 \
         --header 'accept: application/json' \
         --header 'authorization: Bearer <token>'
    
    • id — UUID that was specified in the SSV set-up request.

    Example response:

    {
        "error": null,
        "result": {
            "id": "3fa85f64-5717-4562-b3fc-2c963f66afa5",
            "status": "ready",
            "depositData": [
                {
                    "pubkey": "0xb632ad4ebec8594ec8f2fbacc6df53dec180f8bae6561d70bf74c19520a35beff99cd92513058da6a22a75b9570ab31d",
                    "signature": "0x836e9eebeb29ed1d4b232fa38649e9902ea7d6f9d19e571c4e76cde4da2bcdbca822c8f29d21379325201735fa93925d1597f0c021a147910c165e60bf3308bc827d5fcd545f1c901e7b3102e28b8ea09d6c162c3ffd57e7398f73e5968e05db",
                    "depositDataRoot": "0x16678e6d91a8c3a8f1cdabc037fa32f1d296e629d1665a57f493eda1e6a6964a",
                    "withdrawalCredentials": "0100000000000000000000005cef11327af4104ba0f8a82fbb8628caee7cb1e3",
                    "amount": "32000000000",
                    "depositMessageRoot": "6a572503239cd1f11998af7901c0947fe36eb8efec080f22598d607d3938c1a8",
                    "forkVersion": "00001020",
                    "eth2NetworkName": "goerli",
                    "depositCliVersion": "2.3.0"
                }
            ]      
        }
    }
    
    • id — UUID that was specified in the SSV set-up request.

    • status — current status of the SSV request:

      • init — request is stored.
      • processing — request in progress, please wait.
      • ready — request is ready.
      • validator-ready — validator is registered on the SSV network.
      • validator-error — validator data is not valid.
      • cancel — request canceled due to an error or timeout.
        When ready, the validator data is ready to be used in the validator registration step.
    • depositData:

      • pubkey — validator public key.

      • signature — validator signature.

      • depositDataRoot — SHA-256 hash of the SSZ-encoded DepositData object. They are used as a protection against malformed input.

      • withdrawalCredentials— withdrawal address credentials, passed in the expected format by the Ethereum deposit smart contract.

      • amount — amount of ETH, denominated in gwei, that is being deposited.

      • depositMessageRoot — cryptographic hash of the Merkle tree’s root, ensuring the integrity and authenticity of the deposit data.

      • forkVersion — version of the network fork that the deposit is intended for. It helps in aligning the deposit with a specific version of the protocol.

      • eth2NetworkName — name of the Ethereum 2.0 network where the deposit is made.

      • depositCliVersion — version of the deposit command-line interface (CLI) tool that was used to generate the deposit data.

  8. Create a serialized transaction for depositing the stake amount and send it as a POST request to /api/v1/eth/staking/direct/tx/deposit.

    Example request:

    curl --request POST \
         --url https://api.p2p.org/api/v1/eth/staking/direct/tx/deposit \
         --header 'accept: application/json' \
         --header 'authorization: Bearer <token>' \
         --header 'content-type: application/json' \
         --data '
    {
      "withdrawalAddress": "0x39D02C253dA1d9F85ddbEB3B6Dc30bc1EcBbFA17",
      "depositData": [
        {
          "pubkey": "0xac1e9969d7b87f3102549ab41558136674a7306b85b9f73cfbd7d9fdb7db85724569da3ebd4d7de9689f6ac058d7e2a3",
          "signature": "0xb656f9c771166c82a7891b930e6a920878d9736eb3f9f241753a15ea69d8e2f20a3740dfaf546c70e31bd323e14b341205d04e3227dd4cf2923644a375f6792875ac02c5f256f7a17c96b09bafcbce7e4443e1862356b1e90d78875d78e9a742",
          "depositDataRoot": "0xba013b4950b9aff0c3c19017ec5b6e0ed5b957b36f6ff03a545e5cc5605baff8"
        }
      ]
    }
    '
    
    • withdrawalAddress — withdrawal address for the validators.

    • depositData:

      • pubkey — validator public key.
      • signature — validator signature.
      • depositDataRoot — SHA-256 hash of the SSZ-encoded DepositData object. Used as a protection against malformed input.

    Example response:

    {
        "error": null,
        "result": {
            "serializeTx": "0x02f902cf0580021e830186a094681a1b3441c6bfb12f91651efd9f02c83c0702938901bc16d674ec800000b902a44f498c730000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000012000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000260000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000030b4b5f251eac53f34eb1da2b6659d35db303e408c4c830156cf090441564474f356abd023a0e679aa97cefeed850abb27000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000200100000000000000000000009c7d4b4595402ed44167c74f9f7c7720ab5528e0000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000060a307b2e1661bcc38d482a69603713baf332ad36adf837392e9f20a96b77a03ca415a46261fc62b8f5d4aa69a0d70e2cf0d23e3396bd387cfde18d392a2c7ba822d3f8a60d075366625dcb3c88cd59ebc8f7ab1fc312c6b8b625a57bf7e1b6e6f000000000000000000000000000000000000000000000000000000000000000178ae581ccc8bdf1fde00cff35b2278e1c10a9ed2fc18632373dac118a03cfacdc0",
            "to": "0x681a1b3441c6BFb12f91651EFD9F02c83c070293",
            "gasLimit": "0.0000000000001",
            "data": "0x4f498c730000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000012000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000260000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000030b4b5f251eac53f34eb1da2b6659d35db303e408c4c830156cf090441564474f356abd023a0e679aa97cefeed850abb27000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000200100000000000000000000009c7d4b4595402ed44167c74f9f7c7720ab5528e0000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000060a307b2e1661bcc38d482a69603713baf332ad36adf837392e9f20a96b77a03ca415a46261fc62b8f5d4aa69a0d70e2cf0d23e3396bd387cfde18d392a2c7ba822d3f8a60d075366625dcb3c88cd59ebc8f7ab1fc312c6b8b625a57bf7e1b6e6f000000000000000000000000000000000000000000000000000000000000000178ae581ccc8bdf1fde00cff35b2278e1c10a9ed2fc18632373dac118a03cfacd",
            "value": "32.0",
            "chainId": 5,
            "type": 2,
            "maxFeePerGas": "0.00000000000000003",
            "maxPriorityFeePerGas": "2"
        }
    }
    
    • serializeTx — serialized unsigned transaction.
    • to — recipient address for this transaction.
    • gasLimit — maximum gas limit for this block.
    • data — transaction data.
    • value — amount this transaction is sending in Wei.
    • chainId — chain ID this transaction is authorized on, as specified by EIP-155.
    • typeEIP-2718 type of this transaction envelope.
    • maxFeePerGas — maximum price per unit of gas this transaction will pay for the combined EIP-1559 block's base fee and this transaction's priority fee in Wei.
    • maxPriorityFeePerGas — price per unit of gas in Wei, which is added to the EIP-1559 block's base fee. This added fee is used to incentivize miners to prioritize this transaction.
  9. Use serializeTx from the previous step to sign and send the signed transaction to the Ethereum network.

    By broadcasting this transaction, you are depositing the required stake amount in the Ethereum deposit smart contract by using the P2P smart contract as a proxy.

After your deposit is successful, your validator will enter the activation queue and soon start performing the validator tasks. You can check the status of your validator on the SSV network explorer.

Interacting directly with the Ethereum Deposit Smart Contract

  1. Prepareid that is an arbitrary UUID. Generate it in one of the following ways:

  2. Set up staking SSV nodes through P2P infrastructure by sending a POST request to /api/v1/eth/staking/ssv/request/create. Use https://api-test-holesky.p2p.org for testing
    or https://api.p2p.org for production.

    Example request:

    curl --request POST \
         --url https://api.p2p.org/api/v1/eth/staking/ssv/request/create \
         --header 'accept: application/json' \
         --header 'authorization: Bearer <token>' \
         --header 'content-type: application/json' \
         --data '
    {
      "id": "3fa85f64-5717-4562-b3fc-2c963f66afa5",
      "validatorsCount": "1",
      "withdrawalAddress": "0x39D02C253dA1d9F85ddbEB3B6Dc30bc1EcBbFA17",
      "feeRecipientAddress": "0x39D02C253dA1d9F85ddbEB3B6Dc30bc1EcBbFA17",
      "ssvOwnerAddress": "0x39D02C253dA1d9F85ddbEB3B6Dc30bc1EcBbFA17",
      "type": "without-encrypt-key",
      "operationPeriodInDays": 30,
      "ecdhPublicKey": null
    }
    '
    
    • id — arbitrary UUID. You can later use that UUID to check the status of the set-up operation.
    • validatorsCount — number of validators. One validator is equal to 32 ETH.
    • withdrawalAddress — withdrawal address for the client. This address is also used as the validator owner's address and must be used to sign the transaction to register the SSV validator at step 6.
    • feeRecipientAddress — Eth1 address that receives the fee recipient rewards.
    • ssvOwnerAddress — address that acts as the owner of the SSV cluster. The cluster owner can register the validator, update the fee recipient address, top-up the cluster balance, and claim SSV incentives rewards.
    • type— type of operation:
      • without-encrypt-key (available) — validator's private key is returned encrypted to the client.
      • with-encrypt-key (not available) — validator private key is instead maintained by P2P to initiate withdrawals when requested by the client. If selected, fill the ecdhPublicKeyfield.
    • operationPeriodInDays— operation period in days.
    • ecdhPublicKey— your ECDH public key to obtain an encrypted validator private key.

    Example response:

    {
     "error": null,
     "result": true
    }
    
  3. Check the node set-up operation status by sending a GET request to /api/v1/eth/staking/ssv/request/status/{id}.

    Example request:

    curl --request GET \
         --url https://api.p2p.org/api/v1/eth/staking/ssv/request/status/3fa85f64-5717-4562-b3fc-2c963f66afa5 \
         --header 'accept: application/json' \
         --header 'authorization: Bearer <token>'
    
    • id — UUID that was specified in the SSV set-up request.

    Example response:

    {
        "error": null,
        "result": {
            "id": "3fa85f64-5717-4562-b3fc-2c963f66afa5",
            "status": "ready",
            "type": "without-encrypt-key",
            "operationPeriodInDays": 30,
            "liquidationPeriodInDays": 30,
            "ecdhPublicKey": null,
            "encryptedShares": [
                {
                    "publicKey": "0xb4b5f251eac53f34eb1da2b6659d35db303e408c4c830156cf090441564474f356abd023a0e679aa97cefeed850abb27",
                    "nonce": 1,
                    "sharesData": "0x971aade51840b84fc5b88fee2ef1ed80ce57c2ea9a8fb610d2fdb3a287589a87c421b845e3f1cb4ef5a84eaba6c31d4c159ead3c818758d6fc988a207ea467ff35fb90ab502805569f8ff94042d870ebedc327ea0778476559c95076a99c7cd1b78b94bb2a5098c10b50000c7419476f295e0d1e94b17c1f985c76adfad8b7897bdf34b58388b6b201104616e179e93888016e92ab60b4bf5d844b1a8fd9fdd97e3dba2cfadbe65f1bc3b66aeed8b1be8407a150ae6a028fe72e50d70121e7eab424e02922422ce66fb45c5878eb0d307fae5b5b0637cee897a119563d18082c33fe5ac017d3cfd3a42e2f5f7d8bece98e679000fb7cfd339fbc1470177963d5cd73b6b4001e77f3dcb348cb07797b25fd3b6811e4dfbafe78a4a9d70861fd27001d88253500347ba8ff907bd647b83aa6b5bf727929ee35ce5360a0b7810b355f8e524426e8a6db75e240af29527b398c2d5a926e4867f04483ec61338d7f413cd419d17bc572a0b3ecd98e04426964a8350d1545493e2fe039828f8e74fb48da7f4ee26166b4c2b2b05fa94bf4721a0b6888a8065062ed45bd23f9d3fcbb80ecf3febfb8c90522b20ae724a94f12fb9de80c95dd7b1762d6b15312c3bbde291224fb7b809384404bde5d78bd36801a67154addc466d20c6e6146eda1e263167a96a9d21a1b4fef6d532957cfca20d3311ac2f5bfd6c4601df0eebec49b5a74adce8c1b7fbf82c5333d25c499f72928d3bfe47fa9c54ec9f55c63586758af8a256683952376b4feef745bbc2280e66bb475e48edc4a90eb128bfb3322b30065f3fedf6dcd3180798375eee05abc20433f79e3d6e73948a84057ca7b72b6ba756f257ca1a11f2fa3b130bcf28d9ef80cb946bf11e6008815ee6c100ab1527f13c064bac2b67a8f832ab70c98d39d77940f975c35c8dea26f2e25a5e706da368fa0dd08958ea11904b1b51ca40aab37e581e58a5c60ea1caa08063461b3319e6c8ff21b75f2ff9358ddccf27abea55e7dbad4f474741ff14fe9e63d9c001eec990531a5bc6b2196269cfa0050beced2e2ce55f9dfea48c0c81f3d1a1f4f6548e29de76b085f83f9399c29b89880a15b80e049de2fa9eef3eab7a1a15cd1d6ae2bc8fdc9837f59baf56c11ed7405bda5d2cd2de6fd80c7b7461abfb757c742b3216ef79d8268501cb3531a5fcf9d46b58e828e6aaea4bef8484cc8945912ac611827463d4a3dabe56f608181dfba8ffc7cb1cfdef5a09a9f107652b44d290fc42b0d5e3e16634342af07f205153b0c7d095e0d418f1d0aef8a7e00d41e5af183ceed36d5832169bdd91810b4ad686b85130ec07aeaccfbc26d440684ac34c8005c12b38caa41d18ecd51167afaba0aae2b605cb0cefcae1b4f64ff220167d1f93b73abd75368dd67c3a6ad48448021c66086daf62419d6de350ee3f25aef4784340c0932362da25cff3f1ed7316afce3034d264f1206322c6510aacddb9315f8b532516a52f2483d0a191caa38a10cb40d00494c43ddcc49b54349fd809409a8d6131746ef7adc57a9f7feea9bb3a4142d418e5b1f89ccde686a1627c9a9d5ac9bc6a06685017b15eb549e9bc2e7cf98720b616d8bea14b5b9194280bb1386154be5fd31dc6f64cfe5bbf80fff95e2a82a2a803e579e302c0db931470b78fb32fb1774840002417b86c4ad621e43ec36d2496a7f6b63d470fae3edb863f909ee0e4ce43ca293770a229cbcbd542c9bd123889298c3a6e32c2e5c5f4861afa640a16d5c5089373d3e6ddfdebc223a2d966c3e37d135f3f8805eb3432ff46befac6c41aff89739b1bab6ccee383fb524ff985b5054091fed2d351bff38ec78800200",
                    "ecdhEncryptedPrivateKey": null
                }
            ],
            "validatorsCount": 1,
            "withdrawalAddress": "0x9c7d4b4595402ed44167C74f9F7c7720AB5528E0",
    				"ssvOwnerAddress": "0x39D02C253dA1d9F85ddbEB3B6Dc30bc1EcBbFA17",      
            "feeRecipientAddress": "0x9c7d4b4595402ed44167C74f9F7c7720AB5528E0",   
            "validatorRegistrationTxs": [
                {
                    "serializeTx": "0x02f9078605010210830f424094c3cd9a0ae89fff83b71b58b6512d43f8a41f363d80b9076406e8fb9c00000000000000000000000000000000000000000000000000000000000001200000000000000000000000000000000000000000000000000000000000000180000000000000000000000000000000000000000000000000000000000000022000000000000000000000000000000000000000000000000016c7ded605b5c0000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000046f3111b30000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000016c7ded605b5c0000000000000000000000000000000000000000000000000000000000000000030b4b5f251eac53f34eb1da2b6659d35db303e408c4c830156cf090441564474f356abd023a0e679aa97cefeed850abb2700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000520971aade51840b84fc5b88fee2ef1ed80ce57c2ea9a8fb610d2fdb3a287589a87c421b845e3f1cb4ef5a84eaba6c31d4c159ead3c818758d6fc988a207ea467ff35fb90ab502805569f8ff94042d870ebedc327ea0778476559c95076a99c7cd1b78b94bb2a5098c10b50000c7419476f295e0d1e94b17c1f985c76adfad8b7897bdf34b58388b6b201104616e179e93888016e92ab60b4bf5d844b1a8fd9fdd97e3dba2cfadbe65f1bc3b66aeed8b1be8407a150ae6a028fe72e50d70121e7eab424e02922422ce66fb45c5878eb0d307fae5b5b0637cee897a119563d18082c33fe5ac017d3cfd3a42e2f5f7d8bece98e679000fb7cfd339fbc1470177963d5cd73b6b4001e77f3dcb348cb07797b25fd3b6811e4dfbafe78a4a9d70861fd27001d88253500347ba8ff907bd647b83aa6b5bf727929ee35ce5360a0b7810b355f8e524426e8a6db75e240af29527b398c2d5a926e4867f04483ec61338d7f413cd419d17bc572a0b3ecd98e04426964a8350d1545493e2fe039828f8e74fb48da7f4ee26166b4c2b2b05fa94bf4721a0b6888a8065062ed45bd23f9d3fcbb80ecf3febfb8c90522b20ae724a94f12fb9de80c95dd7b1762d6b15312c3bbde291224fb7b809384404bde5d78bd36801a67154addc466d20c6e6146eda1e263167a96a9d21a1b4fef6d532957cfca20d3311ac2f5bfd6c4601df0eebec49b5a74adce8c1b7fbf82c5333d25c499f72928d3bfe47fa9c54ec9f55c63586758af8a256683952376b4feef745bbc2280e66bb475e48edc4a90eb128bfb3322b30065f3fedf6dcd3180798375eee05abc20433f79e3d6e73948a84057ca7b72b6ba756f257ca1a11f2fa3b130bcf28d9ef80cb946bf11e6008815ee6c100ab1527f13c064bac2b67a8f832ab70c98d39d77940f975c35c8dea26f2e25a5e706da368fa0dd08958ea11904b1b51ca40aab37e581e58a5c60ea1caa08063461b3319e6c8ff21b75f2ff9358ddccf27abea55e7dbad4f474741ff14fe9e63d9c001eec990531a5bc6b2196269cfa0050beced2e2ce55f9dfea48c0c81f3d1a1f4f6548e29de76b085f83f9399c29b89880a15b80e049de2fa9eef3eab7a1a15cd1d6ae2bc8fdc9837f59baf56c11ed7405bda5d2cd2de6fd80c7b7461abfb757c742b3216ef79d8268501cb3531a5fcf9d46b58e828e6aaea4bef8484cc8945912ac611827463d4a3dabe56f608181dfba8ffc7cb1cfdef5a09a9f107652b44d290fc42b0d5e3e16634342af07f205153b0c7d095e0d418f1d0aef8a7e00d41e5af183ceed36d5832169bdd91810b4ad686b85130ec07aeaccfbc26d440684ac34c8005c12b38caa41d18ecd51167afaba0aae2b605cb0cefcae1b4f64ff220167d1f93b73abd75368dd67c3a6ad48448021c66086daf62419d6de350ee3f25aef4784340c0932362da25cff3f1ed7316afce3034d264f1206322c6510aacddb9315f8b532516a52f2483d0a191caa38a10cb40d00494c43ddcc49b54349fd809409a8d6131746ef7adc57a9f7feea9bb3a4142d418e5b1f89ccde686a1627c9a9d5ac9bc6a06685017b15eb549e9bc2e7cf98720b616d8bea14b5b9194280bb1386154be5fd31dc6f64cfe5bbf80fff95e2a82a2a803e579e302c0db931470b78fb32fb1774840002417b86c4ad621e43ec36d2496a7f6b63d470fae3edb863f909ee0e4ce43ca293770a229cbcbd542c9bd123889298c3a6e32c2e5c5f4861afa640a16d5c5089373d3e6ddfdebc223a2d966c3e37d135f3f8805eb3432ff46befac6c41aff89739b1bab6ccee383fb524ff985b5054091fed2d351bff38ec78800200c0",
                    "to": "0xC3CD9A0aE89Fff83b71b58b6512D43F8a41f363D",
                    "gasLimit": "0.000000000001",
                    "data": "0x06e8fb9c00000000000000000000000000000000000000000000000000000000000001200000000000000000000000000000000000000000000000000000000000000180000000000000000000000000000000000000000000000000000000000000022000000000000000000000000000000000000000000000000016c7ded605b5c0000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000046f3111b30000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000016c7ded605b5c0000000000000000000000000000000000000000000000000000000000000000030b4b5f251eac53f34eb1da2b6659d35db303e408c4c830156cf090441564474f356abd023a0e679aa97cefeed850abb2700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000520971aade51840b84fc5b88fee2ef1ed80ce57c2ea9a8fb610d2fdb3a287589a87c421b845e3f1cb4ef5a84eaba6c31d4c159ead3c818758d6fc988a207ea467ff35fb90ab502805569f8ff94042d870ebedc327ea0778476559c95076a99c7cd1b78b94bb2a5098c10b50000c7419476f295e0d1e94b17c1f985c76adfad8b7897bdf34b58388b6b201104616e179e93888016e92ab60b4bf5d844b1a8fd9fdd97e3dba2cfadbe65f1bc3b66aeed8b1be8407a150ae6a028fe72e50d70121e7eab424e02922422ce66fb45c5878eb0d307fae5b5b0637cee897a119563d18082c33fe5ac017d3cfd3a42e2f5f7d8bece98e679000fb7cfd339fbc1470177963d5cd73b6b4001e77f3dcb348cb07797b25fd3b6811e4dfbafe78a4a9d70861fd27001d88253500347ba8ff907bd647b83aa6b5bf727929ee35ce5360a0b7810b355f8e524426e8a6db75e240af29527b398c2d5a926e4867f04483ec61338d7f413cd419d17bc572a0b3ecd98e04426964a8350d1545493e2fe039828f8e74fb48da7f4ee26166b4c2b2b05fa94bf4721a0b6888a8065062ed45bd23f9d3fcbb80ecf3febfb8c90522b20ae724a94f12fb9de80c95dd7b1762d6b15312c3bbde291224fb7b809384404bde5d78bd36801a67154addc466d20c6e6146eda1e263167a96a9d21a1b4fef6d532957cfca20d3311ac2f5bfd6c4601df0eebec49b5a74adce8c1b7fbf82c5333d25c499f72928d3bfe47fa9c54ec9f55c63586758af8a256683952376b4feef745bbc2280e66bb475e48edc4a90eb128bfb3322b30065f3fedf6dcd3180798375eee05abc20433f79e3d6e73948a84057ca7b72b6ba756f257ca1a11f2fa3b130bcf28d9ef80cb946bf11e6008815ee6c100ab1527f13c064bac2b67a8f832ab70c98d39d77940f975c35c8dea26f2e25a5e706da368fa0dd08958ea11904b1b51ca40aab37e581e58a5c60ea1caa08063461b3319e6c8ff21b75f2ff9358ddccf27abea55e7dbad4f474741ff14fe9e63d9c001eec990531a5bc6b2196269cfa0050beced2e2ce55f9dfea48c0c81f3d1a1f4f6548e29de76b085f83f9399c29b89880a15b80e049de2fa9eef3eab7a1a15cd1d6ae2bc8fdc9837f59baf56c11ed7405bda5d2cd2de6fd80c7b7461abfb757c742b3216ef79d8268501cb3531a5fcf9d46b58e828e6aaea4bef8484cc8945912ac611827463d4a3dabe56f608181dfba8ffc7cb1cfdef5a09a9f107652b44d290fc42b0d5e3e16634342af07f205153b0c7d095e0d418f1d0aef8a7e00d41e5af183ceed36d5832169bdd91810b4ad686b85130ec07aeaccfbc26d440684ac34c8005c12b38caa41d18ecd51167afaba0aae2b605cb0cefcae1b4f64ff220167d1f93b73abd75368dd67c3a6ad48448021c66086daf62419d6de350ee3f25aef4784340c0932362da25cff3f1ed7316afce3034d264f1206322c6510aacddb9315f8b532516a52f2483d0a191caa38a10cb40d00494c43ddcc49b54349fd809409a8d6131746ef7adc57a9f7feea9bb3a4142d418e5b1f89ccde686a1627c9a9d5ac9bc6a06685017b15eb549e9bc2e7cf98720b616d8bea14b5b9194280bb1386154be5fd31dc6f64cfe5bbf80fff95e2a82a2a803e579e302c0db931470b78fb32fb1774840002417b86c4ad621e43ec36d2496a7f6b63d470fae3edb863f909ee0e4ce43ca293770a229cbcbd542c9bd123889298c3a6e32c2e5c5f4861afa640a16d5c5089373d3e6ddfdebc223a2d966c3e37d135f3f8805eb3432ff46befac6c41aff89739b1bab6ccee383fb524ff985b5054091fed2d351bff38ec78800200",
                    "value": "0.0",
                    "chainId": 5,
                    "type": 2,
                    "maxFeePerGas": "0.000000000000000016",
                    "maxPriorityFeePerGas": "2"
                }
            ],
            "ssvFeeTxs": [
                {
                    "serializeTx": "0x02f901c605800210830186a094c3cd9a0ae89fff83b71b58b6512d43f8a41f363d80b901a4bc26e7e50000000000000000000000009c7d4b4595402ed44167c74f9f7c7720ab5528e0000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000016c7ded605b5c0000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000046f3111b30000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000016c7ded605b5c00000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000004c0",
                    "to": "0xC3CD9A0aE89Fff83b71b58b6512D43F8a41f363D",
                    "gasLimit": "0.0000000000001",
                    "data": "0xbc26e7e50000000000000000000000009c7d4b4595402ed44167c74f9f7c7720ab5528e0000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000016c7ded605b5c0000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000046f3111b30000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000016c7ded605b5c00000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000004",
                    "value": "0.0",
                    "chainId": 5,
                    "type": 2,
                    "maxFeePerGas": "0.000000000000000016",
                    "maxPriorityFeePerGas": "2"
                }
            ],
            "feeRecipientTx": {
                "serializeTx": "0x02f84405800210830186a094c3cd9a0ae89fff83b71b58b6512d43f8a41f363d80a4dbcdc2cc0000000000000000000000009c7d4b4595402ed44167c74f9f7c7720ab5528e0c0",
                "to": "0xC3CD9A0aE89Fff83b71b58b6512D43F8a41f363D",
                "gasLimit": "0.0000000000001",
                "data": "0xdbcdc2cc0000000000000000000000009c7d4b4595402ed44167c74f9f7c7720ab5528e0",
                "value": "0.0",
                "chainId": 5,
                "type": 2,
                "maxFeePerGas": "0.000000000000000016",
                "maxPriorityFeePerGas": "2"
            },
            "approveTx": {
                "serializeTx": "0x02f86505800210830186a0943a9f01091c446bde031e39ea8354647afef091e780b844095ea7b3000000000000000000000000c3cd9a0ae89fff83b71b58b6512d43f8a41f363dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0",
                "to": "0x3a9f01091C446bdE031E39ea8354647AFef091E7",
                "gasLimit": "0.0000000000001",
                "data": "0x095ea7b3000000000000000000000000c3cd9a0ae89fff83b71b58b6512d43f8a41f363dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
                "value": "0.0",
                "chainId": 5,
                "type": 2,
                "maxFeePerGas": "0.000000000000000016",
                "maxPriorityFeePerGas": "2"
            }
        }
    }
    
    • id — UUID that was specified in the SSV set-up request.
    • status — current status of the SSV request:
      • init — request is stored.
      • processing — request in progress, please wait.
      • ready — request is ready.
      • validator-ready — validator is registered on the SSV network.
      • validator-error — validator data is not valid.
      • cancel — request canceled due to an error or timeout.
        When ready, the validator data is ready to be used in the validator registration step.
    • type— type of operation:
      • without-encrypt-key (available) — validator's private key is returned encrypted to the client.
      • with-encrypt-key (not available) — validator private key is instead maintained by P2P to initiate withdrawals when requested by the client.
    • operationPeriodInDays— operation period in days.
    • liquidationPeriodInDays— liquidation threshold period in days.
    • ecdhPublicKey — your ECDH public key for getting the encrypted validator private key.
    • encryptedShares:
      • publicKey — validator public key.
      • nonce — validator key owner's nonce used for signature in sharesData.
      • sharesData — the shares (i. e., validator key into a predefined threshold of shares) and the signature, used to prove the validator owner address. Used in the registerValidator Ethereum transaction from the SSV smart contract to create a validator.
      • ecdhEncryptedPrivateKey — encrypted validator private key.
    • validatorsCount — number of validators. One validator is equal to 32 ETH.
    • withdrawalAddress — withdrawal address of the cluster owner.
    • ssvOwnerAddress — address that acts as the owner of the SSV cluster. The cluster owner can register the validator, update the fee recipient address, top-up the cluster balance, and claim SSV incentives rewards.
    • feeRecipientAddress — Eth1 address that receives the fee recipient rewards.
    • validatorRegistrationTxs — transaction data presented in both a serialized and unserialized way to register the validator on SSV network.
    • ssvFeeTxs — transaction data presented in both a serialized and unserialized way to deposit SSV fees into the cluster balance.
    • feeRecipientTx — transaction data presented in both a serialized and unserialized way to set the fee recipient address.
    • approveTx — transaction data presented in both a serialized and unserialized way to approve the transfer of SSV tokens from the SSV.network smart contract on behalf of the users.

    validatorRegistrationTxs, ssvFeeTxs, feeRecipientTx, and approveTx includes a list of data fields that contain the following data:

    • serializeTx — serialized unsigned transaction.
    • to — recipient address for this transaction.
    • gasLimit — maximum gas limit for this block.
    • data — transaction data.
    • value — amount this transaction is sending in Wei.
    • chainId — chain ID this transaction is authorized on, as specified by EIP-155.
    • typeEIP-2718 type of this transaction envelope.
    • maxFeePerGas — maximum price per unit of gas this transaction will pay for the combined EIP-1559 block's base fee and this transaction's priority fee in Wei.
    • maxPriorityFeePerGas — price per unit of gas in Wei, which is added to the EIP-1559 block's base fee. This added fee is used to incentivize miners to prioritize this transaction.
  4. Sign and broadcast the transaction approveTx either by using the serialized signature in serializeTx or by constructing the signature using the unserialized data inside approveTx.

    Use serializeTx to sign and send the signed transaction to the Ethereum network.

    This step is required only once per account. It enables the SSV smart contract to transfer SSV tokens on your behalf to fund the cluster balance.

  5. Sign and broadcast the transaction feeRecipientTx either by using the serialized signature in serializeTx or by constructing the signature using the unserialized data inside feeRecipientTx.

    Use serializeTx to sign and send the signed transaction to the Ethereum network.

    This step is required only once per account. It sets the fee recipient address for the validator on the SSV network. This address will be the recipient of the execution layer rewards accrued.

  6. Sign and broadcast the transaction validatorRegistrationTxs either by using the serialized signature in serializeTx or by constructing the signature using the unserialized data inside validatorRegistrationTxs.

    Use serializeTx to sign and send the signed transaction to the Ethereum network.

    By broadcasting this transaction, your validator will be registered on the SSV network and simultaneously managed by a pool (i. e., cluster) of four top-performance node operators: Allnodes, Huobi, P2P.org, and Stakeley.

    Check an example on Goerli of a successful broadcasted transaction using the validatorRegistrationTxs data.

  7. After the transaction validatorRegistrationTxs is correctly broadcasted to the Ethereum network, retrieve the validators' request deposit data by sending a GET request to /api/v1/eth/staking/ssv/request//deposit-data/{id}.

    Note that there is a mandatory 6-minutes delay before the deposit data becomes available. This delay is implemented for security reasons, ensuring that the validator can be correctly verified.

    Example request:

    curl --request GET \
         --url https://api.p2p.org/api/v1/eth/staking/ssv/request/deposit-data/3fa85f64-5717-4562-b3fc-2c963f66afa5 \
         --header 'accept: application/json' \
         --header 'authorization: Bearer <token>'
    
    • id — UUID that was specified in the SSV set-up request.

    Example response:

    {
        "error": null,
        "result": {
            "id": "3fa85f64-5717-4562-b3fc-2c963f66afa5",
            "status": "ready",
            "depositData": [
                {
                    "pubkey": "0xb632ad4ebec8594ec8f2fbacc6df53dec180f8bae6561d70bf74c19520a35beff99cd92513058da6a22a75b9570ab31d",
                    "signature": "0x836e9eebeb29ed1d4b232fa38649e9902ea7d6f9d19e571c4e76cde4da2bcdbca822c8f29d21379325201735fa93925d1597f0c021a147910c165e60bf3308bc827d5fcd545f1c901e7b3102e28b8ea09d6c162c3ffd57e7398f73e5968e05db",
                    "depositDataRoot": "0x16678e6d91a8c3a8f1cdabc037fa32f1d296e629d1665a57f493eda1e6a6964a",
                    "withdrawalCredentials": "0100000000000000000000005cef11327af4104ba0f8a82fbb8628caee7cb1e3",
                    "amount": "32000000000",
                    "depositMessageRoot": "6a572503239cd1f11998af7901c0947fe36eb8efec080f22598d607d3938c1a8",
                    "forkVersion": "00001020",
                    "eth2NetworkName": "goerli",
                    "depositCliVersion": "2.3.0"
                }
            ]      
        }
    }
    
    • id — UUID that was specified in the SSV set-up request.

    • status — current status of the SSV request:

      • init — request is stored.
      • processing — request in progress, please wait.
      • ready — request is ready.
      • validator-ready — validator is registered on the SSV network.
      • validator-error — validator data is not valid.
      • cancel — request canceled due to an error or timeout.
        When ready, the validator data is ready to be used in the validator registration step.
    • depositData:

      • pubkey — validator public key.

      • signature — validator signature.

      • depositDataRoot — SHA-256 hash of the SSZ-encoded DepositData object. They are used as a protection against malformed input.

      • withdrawalCredentials— withdrawal address credentials, passed in the expected format by the Ethereum deposit smart contract.

      • amount — amount of ETH, denominated in gwei, that is being deposited.

      • depositMessageRoot — cryptographic hash of the Merkle tree’s root, ensuring the integrity and authenticity of the deposit data.

      • forkVersion — version of the network fork that the deposit is intended for. It helps in aligning the deposit with a specific version of the protocol.

      • eth2NetworkName — name of the Ethereum 2.0 network where the deposit is made.

      • depositCliVersion — version of the deposit command-line interface (CLI) tool that was used to generate the deposit data.

📘

Construct a signature yourself

If you prefer to construct a signature yourself to send the deposit amount to the Ethereum deposit smart contract, you can retrieve all the required data from step 3 within the depositData object.

Check an example of how to sign and send a transaction to the Ethereum network.

After your deposit is successful, your validator will enter the activation queue and soon start performing the validator tasks. You can check the status of your validator on the SSV network explorer.

What's Next?