Search…
Baseledger
Baseledger core consensus client for running a validator, full or seed node

Overview

For full Baseledger documentation, see here.
Baseledger is a public-permissioned, council-governed blockchain network that fulfills the major requirements of enterprise organizations for participating in Baseline-enabled processes: A unified architecture ensuring service quality, data privacy and integration.
Using a proof-of-stake consensus mechanism, Baseledger enables low, fixed costs, guaranteed high performance, data privacy compliance, multi-chain-coordination and off-chain integration by design.
This code has not been audited and is not ready for use in production. The Baseledger mainnet is scheduled to launch in Q1 2022.
This package depends on a modified version of Tendermint v0.34.11 which requires a Vault for storing private key material. We also compile the Baseledger Application Blockchain Interface (ABCI) and tendermint core dependencies together within a single binary for ease-of-use, cross-platform portability and optimal performance.

Roadmap

Baseledger was created by Unibright and Provide and is under active development.

Testnets

In the spirit of developing a proof of concept implementation to experiment with network validation in tendermint (including staking and delegation), native opcodes and a community block explorer, the team built the "lakewood" testnet. This testnet was created using Cosmos SDK.
The "peachtree" testnet was created from scratch using tendermint for BFT consensus and the Provide stack for subscribing to events emitted by the Baseledger governance and staking contracts, broadcasting baseline proofs to the network and otherwise interacting with the Baseline Protocol. As a result of this design, baseledger-core can be built as a single container and added to existing deployments of the Provide stack for increased security. baseledger-core can also run standalone (i.e., outside the context of a Provide stack). Baseledger nodes running outside the context of a Provide stack are not restricted from operating as validator, full or seed nodes. Organizations implementing the baseline pattern in commercial multiparty workflows benefit from running a local Baseledger node because it provides additional security to the cryptographic commitments (proofs) stored within the Provide stack without sacrificing any privacy guarantees inherent to baselining.

Mainnet

The Baseledger mainnet is currently scheduled to launch in Q1 2022. More information will be made available in Q4 2021 about the governance council and how you can apply to become a validator on the mainnet to earn block rewards in UBT.

Governance

A governance contract architecture is being developed which will, among other things, make the staking and other future contracts upgradable by way of the governance council.

Ethereum Bridge

We have taken a minimalistic approach to the Baseledger node implementation using tendermint. A critical part of the architecture is maintaining a highly fault-tolerant bridge between a configured Ethereum network (e.g., mainnet, ropsten, kovan, etc.) and the Baseledger network (e.g., mainnet or peachtree etc).

Latency

Just as crypto exchanges await a number of block confirmations before making deposited assets available for use, there are a number of block confirmations which must occur on the EVM-based network which hosts the Baseledger governance and staking contracts prior to any bridged changes taking effect on the Baseledger network.
For example, if a staking contract withdraw() transaction affects the withdrawal of 100% of the amount on deposit, the validator will cease to participate in block rewards effective after the number of block confirmations. The number of L1 confirmations required prior to the Baseledger network recognizing any associated updates (e.g., changes to the validator set) is determined based on which EVM-based network is hosting the staking and token contracts:
Network
Block Confirmations
mainnet
30
ropsten
3
rinkeby
not supported at this time
kovan
not supported at this time
goerli
not supported at this time

Staking Contract

A staking contract, initialized with a reference to the UBT token contract address, is deployed on the following Ethereum networks:
Network
Symbol
Token Contract Address
Staking Contract Address
mainnet
UBT
0x8400D94A5cb0fa0D041a3788e395285d61c9ee5e
--
ropsten
UBTR
0xa9a466b8f415bcc5883934eda70016f8b23ea776
0x0B5FC75192F8EE3B4795AB44b3B455aB3d97A6dF
rinkeby
--
--
--
kovan
--
--
--
goerli
--
--
--

Faucet

A faucet is being added to Provide Payments to make it easy to request UBT on supported testnets via the CLI.

Methods

The core purpose of the staking contract is to enable deposits and withdrawals of UBT on the Ethereum mainnet, or "test UBT" (such as UBTR, on the Ropsten testnet).
deposit(address beneficiary, bytes32 validator, uint256 amount) external
Become a depositor to the configured staking contract or increase an existing position.
Prior to making your first deposit into the staking contract from any address, or if a subsequent amount you wish to deposit exceeds the value of the remaining approved tokens, you must call approve(address spender, uint25¸amount) on the token contract to allow it to transfer UBT on your behalf when you call deposit().
The following example contract call to the UBTR token contract (0xa9a466b8f415bcc5883934eda70016f8b23ea776) approves the staking contract (0x0B5FC75192F8EE3B4795AB44b3B455aB3d97A6dF), enabling you to deposit up to 250,000 UBTR:
1
Function: approve(address spender, uint256 amount)
2
3
MethodID: 0x095ea7b3
4
[0]: 0000000000000000000000000b5fc75192f8ee3b4795ab44b3b455ab3d97a6df
5
[1]: 000000000000000000000000000000000000000000000000000016bcc41e9000
Copied!
Call the deposit() method. The following example contract call to the staking contract on the "peachtree" testnet (0x0B5FC75192F8EE3B4795AB44b3B455aB3d97A6dF) results in 25,000 UBTR transferred and placed on deposit for benefit of sender.
1
Function: deposit(address beneficiary, bytes32 validator, uint256 amount) ***
2
3
MethodID: 0xeb2243f8
4
[0]: 000000000000000000000000bee25e36774dc2baeb14342f1e821d5f765e2739
5
[1]: eacbbc154c8373d7cb9134ed2a2fa2a4bdaf8bfef27b91299b8dce4042bd0000
6
[2]: 00000000000000000000000000000000000000000000000000000246139ca800
Copied!
This method emits a Deposit(address addr, address beneficiary, bytes32 validator, uint256 amount) event from the EVM/mainnet contract when a validator deposit succeeds, either by way of governance approval or, in primitive/testnet setups, implicit approval.
Staking contract source can be found here. Example transaction on Ropsten can be found here.
withdraw(uint256 amount) external
Initiate the withdrawal of a portion, or all, of a previously deposited stake from the configured staking contract; the following example contract call to the staking contract on the "peachtree: testnet (0x0B5FC75192F8EE3B4795AB44b3B455aB3d97A6dF) results in 10,000 UBTR being withdrawn from our depositor account on the staking contract and returned.
1
Function: withdraw(uint256 value) ***
2
3
MethodID: 0x2e1a7d4d
4
[0]: 000000000000000000000000000000000000000000000000000000e8d4a51000
Copied!
This method emits a Withdraw(address addr, bytes32 validator, uint256 amount) event from the EVM/mainnet contract when a validator withdrawal succeeds, either by way of governance approval or, in primitive/testnet setups, implicit approval.
Staking contract source can be found here. Example transaction on Ropsten can be found here.

Proxy Staking

An abstract proxy staking mechanism is being developed to add composable delegation functionality to the staking contract (see relevant placeholder in the source code here). Validators will be able to create competitive proxy staking offerings and implementations.
💡 This is a great idea for a hackathon project at the upcoming EthAtlanta hackathon, happening October 1-3.
Additional documentation forthcoming.
Last modified 1mo ago