diff --git a/.gitbook.yaml b/.gitbook.yaml new file mode 100644 index 0000000000..f34989df65 --- /dev/null +++ b/.gitbook.yaml @@ -0,0 +1,4 @@ +root: ./ + +​structure: + readme: README.md \ No newline at end of file diff --git a/docs/README.md b/docs/README.md new file mode 100644 index 0000000000..1bcfa0dc3d --- /dev/null +++ b/docs/README.md @@ -0,0 +1,2 @@ +# sdk + diff --git a/docs/SUMMARY.md b/docs/SUMMARY.md new file mode 100644 index 0000000000..6cf49ae824 --- /dev/null +++ b/docs/SUMMARY.md @@ -0,0 +1,89 @@ +# Table of contents + +* [sdk](README.md) + * [index](sdk/index.md) + * [classes](sdk/classes/README.md) + * [Client](sdk/classes/Client.md) + * [enumerations](sdk/enumerations/README.md) + * [FORK\_MAPPING](sdk/enumerations/FORK_MAPPING.md) + * [functions](sdk/functions/README.md) + * [validateClusterLock](sdk/functions/validateClusterLock.md) + * [interfaces](sdk/interfaces/README.md) + * [ClusterDefinition](sdk/interfaces/ClusterDefinition.md) + * [RewardsSplitPayload](sdk/interfaces/RewardsSplitPayload.md) + * [type-aliases](sdk/type-aliases/README.md) + * [BuilderRegistration](sdk/type-aliases/BuilderRegistration.md) + * [BuilderRegistrationMessage](sdk/type-aliases/BuilderRegistrationMessage.md) + * [ClusterCreator](sdk/type-aliases/ClusterCreator.md) + * [ClusterLock](sdk/type-aliases/ClusterLock.md) + * [ClusterOperator](sdk/type-aliases/ClusterOperator.md) + * [ClusterPayload](sdk/type-aliases/ClusterPayload.md) + * [ClusterValidator](sdk/type-aliases/ClusterValidator.md) + * [DepositData](sdk/type-aliases/DepositData.md) + * [DistributedValidator](sdk/type-aliases/DistributedValidator.md) + * [ETH\_ADDRESS](sdk/type-aliases/ETH_ADDRESS.md) + * [OperatorPayload](sdk/type-aliases/OperatorPayload.md) + * [SplitRecipient](sdk/type-aliases/SplitRecipient.md) + * [TotalSplitPayload](sdk/type-aliases/TotalSplitPayload.md) +* [adv](adv/README.md) + * [advanced](adv/advanced/README.md) + * [Advanced Docker Configs](adv/advanced/adv-docker-configs.md) + * [Combine DV Private Key Shares](adv/advanced/quickstart-combine.md) + * [Migrate an Existing Validator](adv/advanced/quickstart-split.md) + * [Self-Host a Relay](adv/advanced/self-relay.md) + * [security](adv/security/README.md) + * [Obol Bug Bounty Program](adv/security/bug-bounty.md) + * [Contacts](adv/security/contact.md) + * [ev-assessment](adv/security/ev-assessment.md) + * [Overview](adv/security/overview.md) + * [Centralization Risks and Mitigation](adv/security/risks.md) + * [Charon Threat Model](adv/security/threat_model.md) + * [troubleshooting](adv/troubleshooting/README.md) + * [Client Configuration](adv/troubleshooting/client_configurations.md) + * [Handling DKG Failure](adv/troubleshooting/dkg_failure.md) + * [Test Commands](adv/troubleshooting/test_command.md) +* [gov](gov/README.md) + * [community](gov/community/README.md) + * [Obol Contributions Program](gov/community/contributions.md) + * [Staking Mastery Program](gov/community/staking-masters.md) + * [Techne](gov/community/techne.md) + * [contribution](gov/contribution/README.md) + * [Filing a Bug Report](gov/contribution/bug-report.md) + * [docs](gov/contribution/docs.md) + * [Feedback](gov/contribution/feedback.md) + * [governance](gov/governance/README.md) + * [Collective Overview](gov/governance/collective.md) + * [Delegate Guide](gov/governance/delegate-guide.md) + * [The OBOL Token](gov/governance/obol-token.md) + * [The RAF](gov/governance/raf.md) + * [The Token House](gov/governance/token-house.md) +* [guides](guides/README.md) + * [walkthroughs](guides/walkthroughs/README.md) + * [Walkthrough Guides](guides/walkthroughs/walkthrough-guides.md) +* [learn](learn/README.md) + * [charon](learn/charon/README.md) + * [CLI Reference](learn/charon/charon-cli-reference.md) + * [Cluster Configuration](learn/charon/cluster-configuration.md) + * [Distributed Key Generation](learn/charon/dkg.md) + * [Introduction to Charon](learn/charon/intro.md) + * [futher-reading](learn/futher-reading/README.md) + * [Ethereum and Its Relationship With DVT](learn/futher-reading/ethereum_and_dvt.md) + * [Peer Score](learn/futher-reading/peer_score.md) + * [Useful Links](learn/futher-reading/resources.md) + * [testnet](learn/futher-reading/testnet.md) + * [intro](learn/intro/README.md) + * [Key Staking Concepts](learn/intro/key-concepts.md) + * [DV Launchpad](learn/intro/launchpad.md) + * [Obol Collective](learn/intro/obol-collective.md) + * [Obol vs Other DV Implementations](learn/intro/obol-vs-others.md) +* [run](run/README.md) + * [integrations](run/integrations/README.md) + * [Create a Lido CSM DV](run/integrations/lido-csm.md) + * [prepare](run/prepare/README.md) + * [Deployment Best Practices](run/prepare/deployment-best-practices.md) + * [How and Where To Run DVs](run/prepare/how_where_DVs.md) + * [running](run/running/README.md) + * [Monitoring Your Node](run/running/monitoring.md) + * [start](run/start/README.md) + * [obol-monitoring](run/start/obol-monitoring.md) + * [Quickstart Overview](run/start/quickstart_overview.md) diff --git a/docs/adv/README.md b/docs/adv/README.md new file mode 100644 index 0000000000..96aa488ef7 --- /dev/null +++ b/docs/adv/README.md @@ -0,0 +1,2 @@ +# adv + diff --git a/docs/adv/advanced/README.md b/docs/adv/advanced/README.md new file mode 100644 index 0000000000..965416d689 --- /dev/null +++ b/docs/adv/advanced/README.md @@ -0,0 +1,2 @@ +# advanced + diff --git a/docs/adv/security/README.md b/docs/adv/security/README.md new file mode 100644 index 0000000000..d9e4c5cf27 --- /dev/null +++ b/docs/adv/security/README.md @@ -0,0 +1,2 @@ +# security + diff --git a/docs/adv/troubleshooting/README.md b/docs/adv/troubleshooting/README.md new file mode 100644 index 0000000000..9d6859be97 --- /dev/null +++ b/docs/adv/troubleshooting/README.md @@ -0,0 +1,2 @@ +# troubleshooting + diff --git a/docs/gov/README.md b/docs/gov/README.md new file mode 100644 index 0000000000..01709f3317 --- /dev/null +++ b/docs/gov/README.md @@ -0,0 +1,2 @@ +# gov + diff --git a/docs/gov/community/README.md b/docs/gov/community/README.md new file mode 100644 index 0000000000..ec9e76b02c --- /dev/null +++ b/docs/gov/community/README.md @@ -0,0 +1,2 @@ +# community + diff --git a/docs/gov/community/contributions.md b/docs/gov/community/contributions.md index de06315b2b..8447275c46 100644 --- a/docs/gov/community/contributions.md +++ b/docs/gov/community/contributions.md @@ -5,24 +5,23 @@ description: Earning Obol Contributions # Obol Contributions Program -*Our aim is to encourage continuous participation and sustained support for Ethereum’s consensus. The Obol Contributions program is therefore designed to be fair and transparent, without arbitrary gimmicks promoting short-term interest at the cost of long-term participation. Obol Contributions are meant to acknowledge all of the actors in the staking stack for their contribution to Ethereum’s decentralisation.* +_Our aim is to encourage continuous participation and sustained support for Ethereum’s consensus. The Obol Contributions program is therefore designed to be fair and transparent, without arbitrary gimmicks promoting short-term interest at the cost of long-term participation. Obol Contributions are meant to acknowledge all of the actors in the staking stack for their contribution to Ethereum’s decentralisation. test test_ -*Each Obol DV contributes 1% of the total staking reward it earns to the Obol Collective. This economic stream is the basis for recognized Contributions. By basing Contributions on staking rewards accumulated by validators (pubkeys), performance is factored in (i.e. effectiveness, uptime, etc.)* +_Each Obol DV contributes 1% of the total staking reward it earns to the Obol Collective. This economic stream is the basis for recognized Contributions. By basing Contributions on staking rewards accumulated by validators (pubkeys), performance is factored in (i.e. effectiveness, uptime, etc.)_ -*Contributions are tracked in a centralised database off-chain, not on the blockchain as transferable or non-transferable tokens. Our [API endpoints](https://docs.obol.tech/api#tag/Address/operation/AddressController_getAddressContributions) enable users and protocols to query how much they have contributed. These endpoints are used to show individuals’ Contributions within the [Obol DV Launchpad](https://launchpad.obol.org) and partners’ staking platforms.* +_Contributions are tracked in a centralised database off-chain, not on the blockchain as transferable or non-transferable tokens. Our_ [_API endpoints_](https://docs.obol.tech/api#tag/Address/operation/AddressController_getAddressContributions) _enable users and protocols to query how much they have contributed. These endpoints are used to show individuals’ Contributions within the_ [_Obol DV Launchpad_](https://launchpad.obol.org) _and partners’ staking platforms._ ## What is the Obol Contributions Program? -- An opportunity for every staker to participate in and get recognised for scaling and decentralising Ethereum by staking on Obol Distributed Validators (DVs). -- Stake deployed on Obol DVs will contribute 1% of staking rewards to the Obol Collective’s retroactive funding mechanism. -- Those contributions will be tracked and recognised, and serve as the basis for future governance and ownership in the Obol Collective. +* An opportunity for every staker to participate in and get recognised for scaling and decentralising Ethereum by staking on Obol Distributed Validators (DVs). +* Stake deployed on Obol DVs will contribute 1% of staking rewards to the Obol Collective’s retroactive funding mechanism. +* Those contributions will be tracked and recognised, and serve as the basis for future governance and ownership in the Obol Collective. ## How do I participate in the Obol Contributions Program? You can participate in the Obol Contributions Program by: 1. **Running your own DV Cluster**: You can create and manage your own DV cluster using our [DV Launchpad](https://launchpad.obol.org), for example using a [DappNode](https://dappnode.com/). This allows you to directly participate in the network's decentralisation efforts and earn contributions. You can also visit our [Squad Staking](https://squadstaking.com) page for inspiration and to find squad members. - 2. **Staking through Staking Partners**: By participating in staking through our partners, your staking rewards will also contribute to the Obol Collective. For the current list of staking partners, please visit [obol.org/contributions](https://obol.org/contributions). ## How can I track my contributions? @@ -37,7 +36,7 @@ Contributions will serve as the basis for future ownership and governance of the Contributions are based on 1% of validator rewards, which are contributed to the Obol Collective’s “1% for Decentralization” retroactive fund. (retroactivefunding.obol.eth) Contributions are calculated daily and tracked off-chain. This means that the higher the effectiveness and uptime of your validators, the more rewards (and thus contributions) you will generate. -If the total rewards \( R \) for a validator are split among operators with percentages \( p_1, p_2, ..., p_n \), the contributions \( C \) for each operator can be calculated as: +If the total rewards ( R ) for a validator are split among operators with percentages ( p\_1, p\_2, ..., p\_n ), the contributions ( C ) for each operator can be calculated as: Cᵢ = R × pᵢ × 0.01 × 1.01 @@ -53,7 +52,7 @@ Obol Contributions are not a promise or indication of any future plans for an Ob ## What is the 1% for Decentralization retroactive funding program? -Users of Obol distributed validator (DV) clusters contribute 1% of their staking rewards to a retroactive funding program. These funds will reward projects and innovations which add value and drive impact towards Ethereum’s decentralisation. Read more on our blog or on obol.org/governance. +Users of Obol distributed validator (DV) clusters contribute 1% of their staking rewards to a retroactive funding program. These funds will reward projects and innovations which add value and drive impact towards Ethereum’s decentralisation. Read more on our blog or on obol.org/governance. ## Do I need to run my own validator to participate? @@ -61,7 +60,7 @@ No, you can stake on DVs and track your contributions through the partners liste ## Can I withdraw my staked ETH at any time? -There is no penalty for exiting your validator. You simply stop accruing Contributions. The specific withdrawal policy will depend on the staking protocol used. +There is no penalty for exiting your validator. You simply stop accruing Contributions. The specific withdrawal policy will depend on the staking protocol used. ## What is the minimum amount of ETH needed to stake? @@ -89,4 +88,4 @@ Distributed validators increase the security, resiliency, and decentralisation o ## How can I get support if I have issues? -Support is available through Obol’s [Discord](https://discord.gg/obol) and partners’ support channels. \ No newline at end of file +Support is available through Obol’s [Discord](https://discord.gg/obol) and partners’ support channels. diff --git a/docs/gov/contribution/README.md b/docs/gov/contribution/README.md new file mode 100644 index 0000000000..d3b7086dca --- /dev/null +++ b/docs/gov/contribution/README.md @@ -0,0 +1,2 @@ +# contribution + diff --git a/docs/gov/governance/README.md b/docs/gov/governance/README.md new file mode 100644 index 0000000000..69b53e29a2 --- /dev/null +++ b/docs/gov/governance/README.md @@ -0,0 +1,2 @@ +# governance + diff --git a/docs/guides/README.md b/docs/guides/README.md new file mode 100644 index 0000000000..6ae1da70fd --- /dev/null +++ b/docs/guides/README.md @@ -0,0 +1,2 @@ +# guides + diff --git a/docs/guides/walkthroughs/README.md b/docs/guides/walkthroughs/README.md new file mode 100644 index 0000000000..bd3e136f14 --- /dev/null +++ b/docs/guides/walkthroughs/README.md @@ -0,0 +1,2 @@ +# walkthroughs + diff --git a/docs/learn/README.md b/docs/learn/README.md new file mode 100644 index 0000000000..c849343236 --- /dev/null +++ b/docs/learn/README.md @@ -0,0 +1,2 @@ +# learn + diff --git a/docs/learn/charon/README.md b/docs/learn/charon/README.md new file mode 100644 index 0000000000..44b46f1797 --- /dev/null +++ b/docs/learn/charon/README.md @@ -0,0 +1,2 @@ +# charon + diff --git a/docs/learn/futher-reading/README.md b/docs/learn/futher-reading/README.md new file mode 100644 index 0000000000..848c24f4df --- /dev/null +++ b/docs/learn/futher-reading/README.md @@ -0,0 +1,2 @@ +# futher-reading + diff --git a/docs/learn/intro/README.md b/docs/learn/intro/README.md new file mode 100644 index 0000000000..170d20a2ef --- /dev/null +++ b/docs/learn/intro/README.md @@ -0,0 +1,2 @@ +# intro + diff --git a/docs/learn/intro/obol-collective.md b/docs/learn/intro/obol-collective.md index 9b46261d8f..ccde02d45f 100644 --- a/docs/learn/intro/obol-collective.md +++ b/docs/learn/intro/obol-collective.md @@ -2,7 +2,7 @@ sidebar_position: 1 description: The Obol Collective --- - + # Obol Collective ## What is the Obol Collective? diff --git a/docs/learn/intro/obol-vs-others.md b/docs/learn/intro/obol-vs-others.md index f9dde57760..5c7d132272 100644 --- a/docs/learn/intro/obol-vs-others.md +++ b/docs/learn/intro/obol-vs-others.md @@ -7,7 +7,7 @@ description: Some of the key terms in the field of Distributed Validator Technol This page outlines the unique features of Obol's DV implemenation, constrasting with other DV implementations. We built Obol’s DVT as a middleware to keep Ethereum secure, resilient, and composable. See also the blog article [Why We Built Charon as a Middleware](https://blog.obol.org/why-we-built-charon-as-a-middleware/). -![Obol vs others table](/img/ObolvsOthers.png) +![Obol vs others table](../../../img/ObolvsOthers.png) ## No private keys put on chain @@ -17,44 +17,34 @@ An alternative approach to doing this is to split it into shares, encrypt each s ## Cluster independance: Clusters can upgrade independently -In an Obol DV cluster, nodes use LibP2P to communicate directly with each other, and communications are end-to-end encrypted with TLS. Clusters are independent from one another, can run different versions of Charon, and don't need to upgrade together. This means that when a new version of Obol’s Charon is released, Obol DV clusters can upgrade on their own time, individually from other DV clusters. Charon will NEVER require a hard fork or simultaneous updates across clusters for any upgrades. +In an Obol DV cluster, nodes use LibP2P to communicate directly with each other, and communications are end-to-end encrypted with TLS. Clusters are independent from one another, can run different versions of Charon, and don't need to upgrade together. This means that when a new version of Obol’s Charon is released, Obol DV clusters can upgrade on their own time, individually from other DV clusters. Charon will NEVER require a hard fork or simultaneous updates across clusters for any upgrades. -![Cluster Independence](/img/ClusterIndependence.png) - -## Cluster independance: No reliance on a common P2P gossip network - -In an Obol DV cluster, nodes use LibP2P to communicate directly with each other, and communications are end-to-end encrypted with TSL. This direct communication of nodes within a cluster improves latency, and makes cluster communications harder to attack with a denial of service (DOS) attack. It also allows an Obol DV cluster to be run within a private network. This may allow cost savings on data egress costs, for operators running cluster nodes across multiple locations of a single cloud provider, for example. - -![Gossip Network](/img/GossipNetwork.png) +![Cluster Independence](../../../img/ClusterIndependence.png) ## Works with existing validator clients and PKI -We built Obol’s DV implementation as a secure and trust-minimised middleware architecture. Our middleware client, Charon, doesn’t replace anything in the client stack, instead it sits between the consensus and validator clients. Node operators integrating the Charon DVT middleware into their stack can continue to use the same clients and private key infrastructure as before, albeit with a different key generation method. +We built Obol’s DV implementation as a secure and trust-minimised middleware architecture. Our middleware client, Charon, doesn’t replace anything in the client stack, instead it sits between the consensus and validator clients. Node operators integrating the Charon DVT middleware into their stack can continue to use the same clients and private key infrastructure as before, albeit with a different key generation method. -The alternative approach to DV design is to replace the validator client with a DV-native client, which has custody of the private keys and the capability to sign arbitrary data. However, in our opinion a full validator client capable of signing and exfiltrating arbitrary data without the oversight of a second software implementation has much higher risk of causing correlated slashing. +The alternative approach to DV design is to replace the validator client with a DV-native client, which has custody of the private keys and the capability to sign arbitrary data. However, in our opinion a full validator client capable of signing and exfiltrating arbitrary data without the oversight of a second software implementation has much higher risk of causing correlated slashing. -![Standard VC](/img/StandardVC.png) +![Standard VC](../../../img/StandardVC.png) -This gives the benefit of having both Charon and the existing validator client as failsafes, greatly reducing the odds of unintended slashing. Even in the worst case scenario where Charon is compromised by a supply chain attack or a remote code execution attack, or the Obol team become bad actors and push a malicious release, Charon cannot do a lot of damage as a middleware. If a compromised Charon client proposes a potential double vote or surround vote for a validator to sign, the validator client will check its anti-slashing database, see that it has already signed something conflicting, and simply refuse to return a signature. Charon could propose that a validator should sign an invalid block, but the chain would reject this and simply consider the proposal missed - a much better outcome than slashing. +This gives the benefit of having both Charon and the existing validator client as failsafes, greatly reducing the odds of unintended slashing. Even in the worst case scenario where Charon is compromised by a supply chain attack or a remote code execution attack, or the Obol team become bad actors and push a malicious release, Charon cannot do a lot of damage as a middleware. If a compromised Charon client proposes a potential double vote or surround vote for a validator to sign, the validator client will check its anti-slashing database, see that it has already signed something conflicting, and simply refuse to return a signature. Charon could propose that a validator should sign an invalid block, but the chain would reject this and simply consider the proposal missed - a much better outcome than slashing. ## No non-ETH token risk -Obol makes no changes to Ethereum’s standard bonding and reward mechanism, and does not require nodes to post any bonds additional to the 32 ETH required for a validator. To pay out rewards to operators, splitter contracts like [Obol Splits](../intro/obol-splits.mdx) can be used to withdraw and share rewards on a continuous basis. This allows products like liquid staking protocols to be built on top of Obol, implementing a bond or unique token into their protocol, should they choose to do so. +Obol makes no changes to Ethereum’s standard bonding and reward mechanism, and does not require nodes to post any bonds additional to the 32 ETH required for a validator. To pay out rewards to operators, splitter contracts like [Obol Splits](obol-splits.mdx) can be used to withdraw and share rewards on a continuous basis. This allows products like liquid staking protocols to be built on top of Obol, implementing a bond or unique token into their protocol, should they choose to do so. -![ETH only](/img/ETHonly.png) +![ETH only](../../../img/ETHonly.png) The alternative approach is to create a token and require stakers to pay operators in that token. This would require stakers to keep a balance of the network token ready for fee paying, in order to continue using the staking service. This mechanism would be informed by oracles, which decide when to post rewards and punish operators. This alternative model has some drawbacks. Namely, the varying price of the network’s unique token will change relative to the price of ETH: operators are not able to determine their commission as a percentage of ETH staked, and stakers likewise must consider the additional initial cost of purchasing the token to determine their long-term rate of return on their staked ETH. -![ETH and Fee Token](/img/ETHandFee.png) - +![ETH and Fee Token](../../../img/ETHandFee.png) ## Non-custodial reward splits -(see also the [docs page on Splits](../../learn/intro/obol-splits.mdx), and the [Splits.org blog article](https://splits.org/blog/obol-ethereum-resilience/).) +(see also the [docs page on Splits](obol-splits.mdx), and the [Splits.org blog article](https://splits.org/blog/obol-ethereum-resilience/).) -To pay out rewards to operators, splitter contracts like Obol Splits can be used to withdraw and share rewards on a continuous basis. Two key goals of validator reward management are: - 1. To be able to differentiate reward ether from principal ether such that node operators can be paid a percentage of the *reward* they accrue for the principal provider, rather than a percentage of *principal and reward*. - 2. To be able to withdraw the rewards in an ongoing manner without exiting the validator. -This allows products like liquid staking protocols to be built on top of Obol, implementing a bond or unique token into their protocol, should they choose to do so. +To pay out rewards to operators, splitter contracts like Obol Splits can be used to withdraw and share rewards on a continuous basis. Two key goals of validator reward management are: 1. To be able to differentiate reward ether from principal ether such that node operators can be paid a percentage of the _reward_ they accrue for the principal provider, rather than a percentage of _principal and reward_. 2. To be able to withdraw the rewards in an ongoing manner without exiting the validator. This allows products like liquid staking protocols to be built on top of Obol, implementing a bond or unique token into their protocol, should they choose to do so. -![Splits OWR](/img/ObolSplits.png) +![Splits OWR](../../../img/ObolSplits.png) diff --git a/docs/run/README.md b/docs/run/README.md new file mode 100644 index 0000000000..621d88a0f2 --- /dev/null +++ b/docs/run/README.md @@ -0,0 +1,2 @@ +# run + diff --git a/docs/run/integrations/README.md b/docs/run/integrations/README.md new file mode 100644 index 0000000000..692a3da860 --- /dev/null +++ b/docs/run/integrations/README.md @@ -0,0 +1,2 @@ +# integrations + diff --git a/docs/run/prepare/README.md b/docs/run/prepare/README.md new file mode 100644 index 0000000000..ca18926f44 --- /dev/null +++ b/docs/run/prepare/README.md @@ -0,0 +1,2 @@ +# prepare + diff --git a/docs/run/running/README.md b/docs/run/running/README.md new file mode 100644 index 0000000000..d5604e87b7 --- /dev/null +++ b/docs/run/running/README.md @@ -0,0 +1,2 @@ +# running + diff --git a/docs/run/start/README.md b/docs/run/start/README.md new file mode 100644 index 0000000000..9952b96485 --- /dev/null +++ b/docs/run/start/README.md @@ -0,0 +1,2 @@ +# start + diff --git a/docs/sdk/classes/README.md b/docs/sdk/classes/README.md new file mode 100644 index 0000000000..46d80f843a --- /dev/null +++ b/docs/sdk/classes/README.md @@ -0,0 +1,2 @@ +# classes + diff --git a/docs/sdk/enumerations/README.md b/docs/sdk/enumerations/README.md new file mode 100644 index 0000000000..ec74a1ba13 --- /dev/null +++ b/docs/sdk/enumerations/README.md @@ -0,0 +1,2 @@ +# enumerations + diff --git a/docs/sdk/functions/README.md b/docs/sdk/functions/README.md new file mode 100644 index 0000000000..35b3fffdd7 --- /dev/null +++ b/docs/sdk/functions/README.md @@ -0,0 +1,2 @@ +# functions + diff --git a/docs/sdk/interfaces/README.md b/docs/sdk/interfaces/README.md new file mode 100644 index 0000000000..95109455d3 --- /dev/null +++ b/docs/sdk/interfaces/README.md @@ -0,0 +1,2 @@ +# interfaces + diff --git a/docs/sdk/type-aliases/README.md b/docs/sdk/type-aliases/README.md new file mode 100644 index 0000000000..ef07201c1b --- /dev/null +++ b/docs/sdk/type-aliases/README.md @@ -0,0 +1,2 @@ +# type-aliases +