入门指南
要开始使用我们的DVT Staking API在SSV网络上进行质押,有一些基本先决条件需要确保顺利高效地设置:
- 最低质押要求:您需要每个要运行的质押验证器的最低32个ETH。
- Pectra升级:已支持0x02类型的validator的创建和合并
- SSV代币:为了在SSV网络上运行验证者,建议每个验证器持有至少2.37个SSV代币,以覆盖年度运营成本。
- API密钥请求:获取认证令牌开始使用DVT Staking API。
步骤
1. 准备一个请求ID
这是UUID,可以使用uuid npm包生成。
2. 创建一个订单以通过Ebunker基础设施设置质押SSV节点
通过向API发送POST请求。
示例请求
curl --request POST \
--url https://api.hoodi.estake.ebunker.io/api/v1/eth/staking/ssv/order \
--header 'accept: application/json' \
--header 'authorization: Bearer <token>' \
--header 'content-type: application/json' \
--data '
{
"id": "3fa85f64-5717-4562-b3fc-2c963f66afa5",
"validatorsCount": 1,
"amount": 2048,
"credentialsType": "0x02",
"withdrawalAddress": "0x39D02C253dA1d9F85ddbEB3B6Dc30bc1EcBbFA17",
"feeRecipientAddress": "0x39D02C253dA1d9F85ddbEB3B6Dc30bc1EcBbFA17",
"ssvOwnerAddress": "0x39D02C253dA1d9F85ddbEB3B6Dc30bc1EcBbFA17",
"operationPeriodInDays": 30
}
参数
- id — 任意的UUID。您稍后可以使用该UUID来检查设置操作的状态。
- validatorsCount — 验证者数量。一个验证者等于32~2048个ETH。
- amount — 每个validator的质押数量, 单位为ETH。
- credentialsType — 订单的Validator类型,0x01或者0x02。
- withdrawalAddress — 客户的提款地址。该地址也用作验证者所有者的地址,必须用于签署注册SSV验证者的交易。
- feeRecipientAddress — 收取费用的Eth1地址。此参数仅生成更新fee地址的交易,需执行对应交易后才能生效。
- ssvOwnerAddress — 作为SSV集群所有者的地址。集群所有者可以注册验证者、更新收费地址、为集群余额充值并索取SSV激励奖励。
- operationPeriodInDays— 运行时长(天)。
示例响应
{
"code": 200,
"message": "success"
}
3. 检查节点设置订单的状态
通过向API发送POST请求。
示例请求:
curl -X 'GET' \
'https://api.hoodi.estake.ebunker.io/api/v1/eth/staking/ssv/order?id=123' \
-H 'accept: application/json'
- id — 在SSV设置请求中指定的UUID。
示例响应:
{
"code": 200,
"message": "Success",
"result": {
"id": "3fa85f64-5717-4562-b3fc-2c963f66afa5"
"status": "ready",
"type": "without-encrypt-key",
"amount": 33,
"credentialsType": "0x02",
"operationPeriodInDays": 150,
"liquidationPeriodInDays": 30,
"ecdhPublicKey": "",
"encryptedShares": [
{
"publicKey": "0x8d8fe7ca46fe98384eb5120b99525d61559fd6ec47b566331f7881fb76357aa97d5d1f4247ee0e7930de2017c62d27bc",
"nonce": 20,
"sharesData": "0x8c3845ab84aa6753c7821e37dd2f545c083364a917d6754df55c0377dc4a52519289d04e40c8b7573cdd53c28b17e30611da7c72c41679bd58024d3d6fc1e8f00ba8f60e2efb59997b7aed3eef13f6e4a6f10c5071c8a52c8fea7c3b2c06561cafeaad949fe418806a4a3c9923ceecf84eeba7f931ffc02e0054c3e028baf7b32d062c04b7ebdb6eb5ed17af27080bd0b7972484c2af8dacee0f481462099493774855adc6417fd0aedf0fac28762c3e674b235a8715bdc47e8aede848e3632eb48b1f1c645a267a259eedb15cc37781989d6da9221d4adcc2fa901dd00031c649600bb4a05e5f72632492865bf11aefad1d0598c418d2d2040a1fa2658da0bc9b8390a0779c22b75716c09ccb93147050f65e83aff3f9ea297b17bc8d830edc8877b3c2ea45f74bfd0f4e1da02ea0d99139b15235111d79264c41e948fc3a1a702fd9ac9a9501364aaba148b0535be6132bfb2a532742012df7240d0540ccd3b2fa8ded09d92af5c7397c62b175776f8dea59d8029d73ed05d9c521aff2a6e3c749669b36e567d7b1e6825cb58c00da061797140ecd11099bdbae87996b2c14e1f89035b26bc00f9d91ce241f2dda6ddcaee9a6c641faf194cf992d2ece03c7fc8fa96973ea0a65474a82cf8ae48e455ecb55adfe3b392396b990339e0e6b24e568a15e8ca4973f48ce967f50ff7b2897bba0d6372f45c76ded138e3187c3876ffb09e8dc2e15b24a538322fb35a051dab39b2f318dea88249c34341acefccd175d4321e4c6f715303897a65750e8279102d6f6cfa5e8f9d19c85ac87d62cf188fbc188ff10ec74f675d444a092c45b062010a6ecf4aca0ee18c10a085da11729a6ab18d116babb8aeb6f83c9e13613b11022091555a6d89ca4ba629e7206deb9a9ade6a7385a4a1f6eac0cb3ddc4feb6fd52739a6ad7c58c8475369ebba4b9af8aec9e9e452759d70f6e9c1c58a988de65554e3c60e631f18d8d0c02080e5ba1bafbc8f61982a362caa3d725d8f0cc4cb5ec4857fdcbda6385a5650fc8478cd9431626e4f5a58f8d583ad05016125f68e59d6e06840f3c41858bd79fae8549e76381548f518e6f76548624b3f4115cbe9ac529928a3122c0cf5704404db56f44f1203a65fee8ddd4ee78f61e1bcde9d5e511c7a5cd0e872735e286866c8bf9aa3752fc044a61352813a69f41a3416e3f72b70b24acbbdf3e675f1962017a27754fb2d5776283b8fe9ccfa28676adfcd33205b0480895d0675d14b65ec22c8adbf318fe819bf1aba79e4e6cd45dc51d68c8e3b92a3f1fbcdce8ad97e130855d2e4d025b1639da55d2beae72462f786d2e527f9b95b745add9a87b6aa86c740cdd6ec335cb4d8a6626df5b58404f62f57a5cdf377c430d78f13012175977a47cc8abe100ce112a9877a803fcd97f3332a220e8f8988b25762d641d590bc59f56478c2de654988bd479887e4ae9149f2de5de58ce253d9ad2a83e4d6512f083526b9ad548ebf12c9bff4de8b90011fb2ae22de5c8393a1c96d0f8f14d1d09c58dbcd06525c85b305c6c56d64a30719bc39d81d374e768b867bfac633ea12163f5d70a44cbde7dd370a8064159a76edfa5b05c495465eed343bf3070043c107dd8136a95e4d3b141d0ba5d1985030aca12587837f723cc31347719dd09e523ec8d8d958a40b248eeac8f9cd81f8e3326c240c7a2d99d1a579fa9abe4ed8995b72bbbfd509141cea9cbf6823b8a42496540ea7cc4419e51840aea964a15efe5ba032153a032ffde05b683e22e9dd5c057f96b1e6b2f7ecb426293b0f8ed9b46d442888fa1cc51c4f47539fb14f9136eee9532cc1760a5aa32a4489859d1b038f2b4",
"ecdhEncryptedPrivateKey": null
}
],
"validatorsCount": 1,
"withdrawalAddress": "0xaC8583143bD6dCE71D15d26833CaF638A4b925b5",
"ssvOwnerAddress": "0xaC8583143bD6dCE71D15d26833CaF638A4b925b5",
"feeRecipientAddress": "0x9E8f8190fc5242AA48DB9eA363edE0f5FEd8a15D",
"depositData": [
{
"publicKey": "0x8d8fe7ca46fe98384eb5120b99525d61559fd6ec47b566331f7881fb76357aa97d5d1f4247ee0e7930de2017c62d27bc",
"signature": "0x96f23ee730affd35a535a054defbd6fd10a7d11119e126a2508f8b0a4b6c100808a5e195533e257d2a9e72c22708abc2116381ded292e5badebc0edfc78fbe7627057687b2b37f933d0d8f8330fd212c1e0d3f599c29787b774d00f3de5d398a",
"depositDataRoot": "0x5813d3358b05c29998e7635de3be2a2c14a01a42d7032e13043ad3e46fb41433",
"withdrawalCredentials": "020000000000000000000000ac8583143bd6dce71d15d26833caf638a4b925b5",
"amount": "33000000000",
"depositMessageRoot": "5fb1c594a3fc1908fe250102489d909b0cc83cd05349180e29de1a63c8b3fcc8",
"forkVersion": "10000910",
"eth2NetworkName": "hoodi",
"depositCliVersion": "2.3.0"
}
],
"bulkValidatorRegistrationTxs": {
"to": "0x58410Bef803ECd7E63B23664C586A6DB72DAf59c",
"gasLimit": "505404",
"data": "0x22f18bf5000000000000000000000000000000000000000000000000000000000000012000000000000000000000000000000000000000000000000000000000000001c000000000000000000000000000000000000000000000000000000000000002600000000000000000000000000000000000000000000000004b4816bcf5b980000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000045c0b246e000000000000000000000000000000000000000000000000000000356ad1b8080000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000007a74ea0d0f945ca000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000308d8fe7ca46fe98384eb5120b99525d61559fd6ec47b566331f7881fb76357aa97d5d1f4247ee0e7930de2017c62d27bc00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000050000000000000000000000000000000...",
"value": "0",
"chainId": 560048,
"type": 2,
"maxFeePerGas": "1880367142",
"maxPriorityFeePerGas": "97930826",
"serializeTx": "0x02f9081183088bb0808405d64e4a84701420268307b63c9458410bef803ecd7e63b23664c586a6db72daf59c80b907e422f18bf5000000000000000000000000000000000000000000000000000000000000012000000000000000000000000000000000000000000000000000000000000001c000000000000000000000000000000000000000000000000000000000000002600000000000000000000000000000000000000000000000004b4816bcf5b980000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000045c0b246e000000000000000000000000000000000000000000000000000000356ad1b8080000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000007a74ea0d0f945ca000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000308d8fe7ca46fe98384eb5120b99525d61559fd6ec47b566331f7881fb76357aa97d5d1f4247ee0e7930de2017c62d27bc00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000050000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000700000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000005208c3845ab84aa6753c7821e37dd2f545c083364a917d6754df55c0377dc4a52519289d04e40c8b7573cdd53."
},
"ssvFeeTxs": [
{
"to": "0x58410Bef803ECd7E63B23664C586A6DB72DAf59c",
"gasLimit": "179628",
"data": "0xbc26e7e5000000000000000000000000ac8583143bd6dce71d15d26833caf638a4b925b500000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000004b4816bcf5b980000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000045c0b246e000000000000000000000000000000000000000000000000000000356ad1b8080000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000007a74ea0d0f945ca0000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000005000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000070000000000000000000000000000000000000000000000000000000000000008",
"value": "0",
"chainId": 560048,
"type": 2,
"maxFeePerGas": "1880367142",
"maxPriorityFeePerGas": "97930826",
"serializeTx": "0x02f901d183088bb0808405d64e4a84701420268302bdac9458410bef803ecd7e63b23664c586a6db72daf59c80b901a4bc26e7e5000000000000000000000000ac8583143bd6dce71d15d26833caf638a4b925b500000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000004b4816bcf5b980000000000000000000000000000000000..."
}
],
"feeRecipientTx": {
"to": "0x58410Bef803ECd7E63B23664C586A6DB72DAf59c",
"gasLimit": "42693",
"data": "0xdbcdc2cc0000000000000000000000009e8f8190fc5242aa48db9ea363ede0f5fed8a15d",
"value": "0",
"chainId": 560048,
"type": 2,
"maxFeePerGas": "1880367142",
"maxPriorityFeePerGas": "97930826",
"serializeTx": "0x02f84e83088bb0808405d64e4a847014202682a6c59458410bef803ecd7e63b23664c586a6db72daf59c80a4dbcdc2cc0000000000000000000000009e8f8190fc5242aa48db9ea363ede0f5fed8a15dc0"
},
"approveTx": {
"to": "0x9F5d4Ec84fC4785788aB44F9de973cF34F7A038e",
"gasLimit": "70988",
"data": "0x095ea7b300000000000000000000000058410bef803ecd7e63b23664c586a6db72daf59c00000000000000000000000000000000000000000000043c33c1937564800000",
"value": "0",
"chainId": 560048,
"type": 2,
"maxFeePerGas": "1880367142",
"maxPriorityFeePerGas": "97930826",
"serializeTx": "0x02f87083088bb0808405d64e4a84701420268301154c949f5d4ec84fc4785788ab44f9de973cf34f7a038e80b844095ea7b300000000000000000000000058410bef803ecd7e63b23664c586a6db72daf59c00000000000000000000000000000000000000000000043c33c1937564800000c0"
}
}
}
id — 在SSV设置请求中指定的UUID。
status — SSV请求的当前状态:
- init — 请求被存储。
- processing — 请求正在进行中,请稍等。
- ready — 请求已准备好。准备好后,验证器数据就可以在验证器注册步骤中使用了。
- cancel — 由于错误或超时,请求被取消。
type — 操作方式:
- without-encrypt-key (可用的) — 验证器私钥由Ebunker维护,以便在客户端请求时发起取款。
- with-encrypt-key (不可用的) — 将验证器的私钥加密后返回给客户端。
credentialsType — 订单validator的类型,0x01 | 0x02
operationPeriodInDays — 操作周期,单位为天。
liquidationPeriodInDays — 清算阈值周期,单位为天。
ecdhPublicKey — 用于获取加密验证器私钥的ECDH公钥。
encryptedShares:
- publicKey — 验证器公钥。
- nonce — sharesData中用于签名的验证器密钥所有者的nonce。
- sharesData — 共享(即将验证器密钥转换为预定义的共享阈值)和签名,用于证明验证器所有者地址。使用registerValidator在以太坊交易中从SSV智能合约中创建一个验证器。
- ecdhEncryptedPrivateKey — 加密验证器私钥。
validatorsCount — 加密验证器私钥。验证器的数量。一个验证器等于32个ETH。
withdrawalAddress — 提现地址。
ssvOwnerAddress — 作为SSV集群所有者的地址。集群所有者可以注册验证者,更新费用接收方地址,充值集群余额,并申请SSV奖励奖励。
feeRecipientAddress — 接收接收者奖励的Eth1地址。
depositData:
- pubkey — 验证器公钥。
- signature — 验证签名。
- depositDataRoot — ssz编码的DepositData对象的SHA-256哈希。用作防止畸形输入的保护。
- withdrawalCredentials— ssz编码的DepositData对象的SHA-256哈希。用作防止畸形输入的保护。提现地址凭证,由以太坊存款智能合约以预期格式传递。
- amount — 正在存入的以太币金额,以gwei计价。
- depositMessageRoot — 加密哈希,确保存款数据的完整性和真实性。
- forkVersion — 存款打算用于的网络分叉版本。它有助于使存款与协议的特定版本保持一致。
- eth2NetworkName — 进行存款的以太坊2.0网络的名称。
- depositCliVersion — 用于生成存款数据的存款命令行接口(CLI)工具的版本。
validatorRegistrationTxs — 以序列化和非序列化方式呈现的事务数据,以便在SSV网络上注册验证器。
ssvFeeTxs — 以序列化和非序列化方式呈现的交易数据将SSV费用存入集群余额。
feeRecipientTx — 交易数据以序列化和非序列化的方式呈现,以设置收款人地址。
approveTx — 以序列化和非序列化方式呈现的交易数据,代表用户从SSV.网络智能合约中批准SSV令牌的转移。
validatorRegistrationTxs, ssvFeeTxs, feeRecipientTx, 和 approveTx 包含以下数据字段列表:
- serializeTx — 序列化的未签名事务。
- to — 此交易的接收地址。
- gasLimit — 此区块的最大燃气限制。
- data — 事务数据。
- value — 这笔交易以 wei 单位发送的金额。
- chainId — 此事务授权的链ID,由EIP-155指定。
- type — 此交易的EIP-2718类型。
- maxFeePerGas — 这笔交易将支付EIP-1559区块的基础费和这笔交易在Wei的优先费。
- maxPriorityFeePerGas — 每单位gass的价格将被添加到EIP-1559区块的基本费用中。这笔额外的费用用于激励矿工优先处理这笔交易。
4. 签名并广播交易 approveTx
- 使用serializeTx中的序列化签名
- 使用内部未序列化的数据构造签名 approveTx.
使用serializeTx来 签名和发送 将签名的交易发送到以太坊网络。
在您执行SSV相关交易前请先执行Approve操作,以便在SSV上注册validator。它使SSV智能合约能够代表您转移SSV令牌来为集群余额提供资金。
5. 签名并广播交易 feeRecipientTx
- 使用serializeTx中的序列化签名
- 使用内部未序列化的数据构造签名 feeRecipientTx.
使用serializeTx来 签名和发送 将签名的交易发送到以太坊网络。
如果您的EL Fee接收地址和SSV owner地址不是同一个,请执行此操作。每一个SSV owner对应一个Fee address,您不需要每个订单都发送交易设置它的Fee address,一个owner address只需要设置1次Fee address即可。它是SSV网络上的验证者设置爆块地址,此地址将是执行层奖励累积的接收者。
6. 签名并广播交易bulkValidatorRegistrationTxs
- 使用serializeTx中的序列化签名
- 使用内部未序列化的数据构造签名bulkValidatorRegistrationTxs.
使用serializeTx来 签名和发送 将签名的交易发送到以太坊网络。
通过广播此交易,您的验证器将在SSV网络上批量注册,并同时由四个顶级节点运营商(AntAlpha, Ebunker)组成的池(即集群)管理。
请把ssv注册收进来 ssv 网址
7. 签署和广播 以太坊智能合约
- 使用内部未序列化的数据构造签名 depositData.
使用 签名和发送 将签名的交易发送到以太坊网络。
最后,请等待。