This publication was first published in Medium.
We have created an intelligent contract that works in a similar way to the hashrate deposit mechanism in the Bitcoin Drivchain proposal. However, instead of requiring a substantial protocol update such as BIP300, it takes advantage of the general functionality of the smart contract to establish a side chain pact using OP_CAT.
Drivchain
Drivechain in Bitcoin is a mechanism to implement lateral technologies, which are independent blockchains linked to Bitcoin. They allow users to transfer BTC between Bitcoin Mainchain and Sidechains, allowing new characteristics or experimental technologies without altering the main chain. Drivechain Use a bidirectional peg system and trust Bitcoin miners to enforce transfers.
PEG-IN: Transfer to a side chain
Users start a transaction that blocks their bitcoins in a special output in the main bitcoin chain. This action generates an equivalent amount of tokens in the chosen side chain, which allows users to make transactions under the different rules and characteristics of Sidechain.
PEG-OUT: Returning to the main chain
To retreat the assets, users execute a transaction in the side chain that effectively burns lateral tokens. Then there is a request for retirement corresponding to the Mainchain, to be voted by the miners as detailed below.
BIP300: Hashrate Deposit
Drivechain’s proposal for Bitcoin is encapsulates in two proposals to improve Bitcoin: BIP300 for Hashrate and BIP301 deposits for blind fussed mining. We focus on the first, since it implies a change of operation code.
In the proposal of Drivechain BIP300, the vote of miners is a critical mechanism that governs the approval of the retreats (pegs) from the side chain to the main bitcoin block chain. Transactions are not signed using cryptographic keys. Instead, they are “signed/voted” for the power of collective hash over time: warranty deposit. This process works as a great multisignura disposition, which requires something similar to 1500 of 3000 “signatures”, with each mining block that represents a firm.
This is how Opera Mine Voting in our hashrate deposit contract:
1. creation of retirement applications
A user in the side chain burns his side chain tokens to start a request for retirement to the main bitcoin chain.
2. Miners voting period
The withdrawal application is submitted to Bitcoin miners, who vote on their validity. This voting process generally covers 3 to 6 months, which allows enough time for miners to evaluate the application.
3. Voting process
Miners include a signal in the blocks they extract, either approving or rejecting the withdrawal application. The signals are integrated into block headers or auxiliary data fields, which makes them visible in the Bitcoin block chain.
4. Consensus threshold
To approve a withdrawal, most miners (generally defined as a percentage of the total hashrate, such as 51%) must vote in favor of the application during the voting period. If the required threshold is not fulfilled, the withdrawal is denied.
General description
Our hashrate deposit of the driverchain implementation characteristics:
Operator Control: Using M-De-N firms of trusted operators. Minero vote: Decentralized consensus for retreats. Dynamic state updates: The smart contract contains state data that contain values such as voting votes and time brands for voting periods.
The contract includes four main methods: blocking, Iniththrawal, votes and goal purposes.
Operator controlled state management
A group of operators (M-OF-N configuration) administers state transitions. Operators are responsible for initializing retirement proposals. Their actions are validated through a Multisig, ensuring that no part can unilaterally control the funds.
Miners
Miners vote on retirement proposals through coinbase transactions. The vote is based on a two -third majority rule, ensuring a wide participation of miners and a decentralized decision making.
Dynamic contract status
The intelligent contract contains state data that contain values such as voting votes and time brands for voting periods. Each state transition is stored and stored in a non -amazing op_return output. The introspection of the transaction allows us to read this value in the transaction that follows.
The contract operates through the following phases:
BLOCK: The funds join the transmission chain. Initwithdrawal: Operators propose withdrawals. Voting: Miners vote to approve or reject proposals. Finishdrawal: Approved withdrawals are executed or the State is restored for proposals not approved.


Implementation
State representation
The contract status includes:
Startperiod: Block height of the last update. Votecnt: Mine votes for current retirement. Payotamt: BTC monitor to remove. Payotspk: scriptpubkey of the retreat output.
These values are questioned and applied to be stored within an op_return output not scared by the contract, using recursive agreements.
Block additional funds
The valid block and BTC bridge method to the pact. It ensures that the bridge amount exceeds 10,000 Satoshis and verifies the consistency of the State.
Initializing a retirement
The operators propose withdrawals providing signatures and specifying payment details. The contract validates these signatures, guarantees that enough time has passed since the last proposal and updated the State.
Voting in retirement
Miners vote using a coinbase transaction. Their votes affect the vote in a positive or negative way, and the contract enforces the votes of a single use.
Finish a retreat
Once the voting period ends, the withdrawals are finished if the VODECNT reaches the threshold. The amount of payment is sent and the State is restored for future proposals.
The complete smart contract code can be found in Github.
Recognition
Our implementation is inspired by the Sha-Gate contract designed for Bitcoin Cash. Our work adapts the mechanics of the Sha-Gate contract to BTC with rehabilitated op_cat.
Look: Scrypt Hackathon students realize that there is more in blockchain
https://www.youtube.com/watch?v=ma1jxiwbojs Title = “YouTube Video Player” FRAMBORDER = “0” allowed = “accelerometer; autoplay; clipboard-write; encryption-media; gyroscope; photo image; origin” prefinillecreen>