All pages
Powered by GitBook
1 of 12

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Functional Specs

btc-refunds

1. Purpose

The purpose of this document is to outline the requirements for a refund process that may be initiated by the user to refund a transaction that has not been completed (not reflected in Primary Wallet).

2. Scope

The design requirement listed in this document will be limited to the refund deposited BTC functionality of the SON – other coins should be handled differently if needed. This will outline the required steps that will be performed to refund the BTC in the Peerplays blockchain. Also outlined here will be the sequence in which the required steps will be performed including:

  • any interactions with the user.

  • validations to ensure complete and accurate information gathering.

3. Background

The Bitcoin Sidechain functionality has been implemented in the Peerplays blockchain but it doesn't take into account, the change of SONs. As per the current implementation of Sidechain, a multisig bitcoin wallet will be created on the bitcoin blockchain to hold the bitcoins that have been deposited into the pBTC accounts of the Peerplays users. Every SON will have a bitcoin transaction signing key for this multisig bitcoin wallet and will be required to sign any withdrawal transaction. When a SONs changes, the transaction signing key of the outgoing SON needs to be removed from the multisig bitcoin wallet and the key of the incoming SON needs to be added. The suggested proposal is to make the Sidechain code available as a plugin and assign the responsibility for running the sidechain code to separate nodes called the Sidechain Operating Nodes (SONs)

4. Process Overview

Process overview below details typical steps in identifying and handling a BTC transaction that does not complete because required number of active SONs check fails. This causes transactions to wait until active SON threshold is met.

Note that this process is transaction agnostic. For details surrounding specific transactions, check BTC Deposit and BTC Withdrawal requirements

Steps involved:

  1. User initiates a BTC transaction (such as deposit or withdrawal)

  2. Listener identifies that a BTC transaction is initiated

  3. Listener passes event data to handler

  4. Handler receives event data and creates an object (normally SON Wallet Object, SON Wallet Deposit Object or SON Wallet Withdraw Object)

Note that while this example process uses insufficient number of active SONs as failure reasons, there may be other reasons why transaction was not processed.

5. Context

Refund scenario is initiated by the user in relation to BTC transactions that fail to process. Failure may be caused by various scenarios, for example when there are less than 5 active SONs, transaction will wait until 5 or more SONs become available and remain unprocessed until minimum active SON condition is met.

Until SONs complete the transaction and it is reflected in Primary Wallet, user may initiate a refund by creating another BTC transaction that uses transaction id of the original transaction (the one user wants to refund).

Note that in all cases, refunds are not issued automatically and must be initiated by the user.

6. Specification

6. 1 Initiating refunds

System does not automatically initiate refunds because when active SONs threshold check fails, transaction is stored with intent to be processed when sufficient number of active SONs is available.

User must initiate the refund themselves by initiating a transaction that includes transaction id of the transaction that needs to be refunded, signs the transaction using a private key that matches the public key they provided in sidechain address mapping. Transaction is then pushed to bitcoin network and user is refunded once transaction is processed

6. 2 Implementation method - One-or-weighted-multisig

One-or-weighted-multisig method of deposit implementation allows to send funds from this address with 2/3 weights of SON votes (like in Primary Wallet) or with single user signature. To create such address we need:

  1. user public key

  2. all SONs public keys

  3. every SON weight

When funds are being sent from this address, system must first check if user signature is correct. When signature is correct, system completes the transaction. Otherwise, when signature is incorrect, system checks for 2/3 weights of SON votes to complete the transaction.

7. Flow Diagram

N/A

Related Documents

Object is checked by by all active SONs to compare object data from the chain against data generated by each SON.

  1. If data does not match, transaction is terminated

  2. If data matches, object is deemed ‘Confirmed'. Proceed to next step

  • Handler checks the number of active SONs

    1. If active SONs are > 5, proceed to next step

    2. If active SONs are < 5, store transaction for processing until required number of active SONs is available (this step will be repeated until SON availability requirement is met)

  • User becomes aware that transaction didn't complete by checking balance, then they copy transaction id of the transaction that's stored for processing (transaction that is going to be refunded). Transactions are refundable until sons move funds inside the Primary Wallet.

  • User creates another transaction using transaction id of transaction they want to refund to move funds to their own address

  • User signs the transaction using a private key that matches the public key they provided in sidechain address mapping

  • Transaction is pushed to bitcoin network and user is refunded once transaction is processed

  • https://app.gitbook.com/@peerplays/s/community-project-docs/son/functional-pecs/functional-specification-bitcoin-deposit-handling
    https://app.gitbook.com/@peerplays/s/community-project-docs/son/functional-pecs/functional-specifications-bitcoin-withdrawal
    https://app.gitbook.com/@peerplays/s/community-project-docs/son/functional-pecs/functional-specifications-btc-transaction-signing
    https://app.gitbook.com/@peerplays/s/community-project-docs/son/functional-pecs/son-multisig-bitcoin
    https://app.gitbook.com/@peerplays/s/community-project-docs/son/functional-pecs/son-multisig-bitcoin

    voting-and-consensus

    Purpose

    The purpose of this document is to outline the steps required by a user to vote for an SON in the Peerplays blockchain and the consensus mechanism for SONs.

    Scope

    The functional requirement listed in this document will be limited to the voting and consensus portion of the SON. This will outline the required steps that will be performed by a user to vote for an SON in the Peerplays blockchain and their selection as active SONs. Also outlined here will be the sequence in which the required steps will be performed including:

    • any interactions with the user.

    • validations to ensure complete and accurate information gathering.

    Background

    The Bitcoin Sidechain functionality has been implemented in the Peerplays blockchain but it doesn't take into account, the change of SONs. As per the current implementation of Sidechain, a multisig bitcoin wallet will be created on the bitcoin blockchain to hold the bitcoins that have been deposited into the pBTC accounts of the Peerplays users. Every SON will have a bitcoin transaction signing key for this multisig bitcoin wallet and will be required to sign any withdrawal transaction. When a SONs changes, the transaction signing key of the outgoing SON needs to be removed from the multisig bitcoin wallet and the key of the incoming SON needs to be added. The suggested proposal is to make the Sidechain code available as a plugin and assign the responsibility for running the sidechain code to separate nodes called the Sidechain Operating Nodes (SONs).

    Process Overview

    Described here is the process to vote for SONs in the Peerplays Blockchain.

    Context

    The Peerplays blockchain will allow the users to vote for the SON enabled node operators. The Peerplays blockchain should have a minimum of 15 active SON nodes. The user should be able to see a list of the SON enabled nodes and vote for up to 15 nodes. An SON enabled node will be able to operate as an active SON only when it receives the votes required to become one of the top 15 SONs. The number of active SON Nodes can be increased by the witnesses/advisor by making a change to the chain parameters. The active SONs will have corresponding bitcoin transaction signing keys in order to sign transactions for the Peerplays bitcoin multisig address on the bitcoin blockchain. When the active SONs change on the Peerplays blockchain, their corresponding bitcoin transaction signing keys are changed in the Peerplays bitcoin multisig address on the bitcoin blockchain.

    Each SON when processing inter blockchain communications (IBC) will carry a percentage of weight in the signing based on the votes they have received. Every IBC request will require signed consensus by at least ⅔ of the Active Casted Weighted (ACW) Votes for the SONs. Active Casted Weighted votes means the votes casted to active SONs by users who have staked some PPY weighted by their staked PPY.

    If an SON enabled node's downtime exceeds 12 continuous hours, it should be automatically deregistered in the Peerplays blockchain as an SON enabled node and all the votes casted for me should be reverted.

    If an SON decides to stop operating the node by disabling the SON plugin, any votes casted to him will be removed and another SON will take his place.

    Flow Diagram

    SON Voting Command

    The below command from the CLI wallet will be used to vote for SONs: vote_for_son <voting_account> <son> <approve> <broadcast>

    • voting_account_id: the name or id of the account who is voting with their shares

    • son: the name or id of the son's owner account

    • approve: true if you wish to vote in favor of that son, false to remove your vote in favor of that son

    • broadcast: true if you wish to broadcast the transaction

    SON Multisig Bitcoin Wallet

    Purpose

    The purpose of this document is to outline the steps required to create and change the multisig bitcoin wallet for Peerplays bitcoin sidechain.

    Scope

    The functional requirement listed in this document will be limited to the Multisig Bitcoin Wallet (Primary Wallet) portion of the SON. This will outline the required steps that will be performed by the Peerplays blockchain to create a multisig bitcoin wallet using the bitcoin signatures of the SONs and changing the signatures in the multisig wallet when required. Also outlined here will be the sequence in which the required steps will be performed including:

    • any interactions with the user.

    • validations to ensure complete and accurate information gathering.

    Background

    The Bitcoin Sidechain functionality has been implemented in the Peerplays blockchain but it doesn't take into account, the change of SONs. As per the current implementation of Sidechain, a multisig bitcoin wallet will be created on the bitcoin blockchain to hold the bitcoins that have been deposited into the pBTC accounts of the Peerplays users. Every Peerplays witnesses will have a bitcoin transaction signing key for this multisig bitcoin wallet and will be required to sign any withdrawal transaction. When a SONs changes, the transaction signing key of the outgoing witness needs to be removed from the multisig bitcoin wallet and the key of the incoming witness needs to be added. The suggested proposal is to make the Sidechain code available as a plugin and assign the responsibility for running the sidechain code to separate nodes called the Sidechain Operating Nodes (SONs). The SONs will be independent of the witnesses and don't need to be changed much often.

    Process Overview

    Described here is the process to create the mutlisig bitcoin wallet with the SONs signatures and changing the signatures when required.

    Context

    In the sidechain implementation, at the beginning of the sidechain fork, a multisig bitcoin wallet called the Primary Wallet is created on the bitcoin blockchain to store the funds transferred by the users to their pBTC accounts. This multisig bitcoin wallet should be created by using the bitcoin public keys of the SONs in the active SONs list We will also have to use the Hash Time Locked Contracts (HTLC) for this address so that if a user transfers the funds to their pBTC accounts and due to some error/downtime, the funds will enter a pending status and wait until more active SONs are available to process and sign the transaction

    1. SON Change: The SONs may change at any maintenance interval when the votes are tallied and the existing SONs are voted out. Since, the bitcoin public keys of the SONs will be used to create the multisig bitcoin wallet, whenever SONs in the active lists change, this changes the set of keys associated with multisig bitcoin wallet. This when active SON's change a new multisig bitcoin wallet must be created because the multisig bitcoin wallet address is dependent on the public keys. Once a new wallet has been created, system must transfer the funds from the old wallet to the new wallet every time an SON changes which will incur bitcoin transaction fees.

      Once, 1/3rd of the initial SONs change, we will create a new multisig bitcoin wallet with the public keys of the current SONs and transfer the funds from the previous wallet to the newly created multisig bitcoin wallet.

    2. SON Downtime: The SONs might stop functioning or go into maintenance. We should provide a mechanism to the SONs to announce any planned maintenance so that the community knows about it. In any case, the maximum continuous downtime allowed for an SON will be 12 hours (This should be a chain parameter). If the downtime exceed 12 hours, the SON will be deregistered. During the downtime, the SON will not be able to sign any transactions. If more than 1/3rd SONs are not able to sign the bitcoin transactions, the pending transaction go into wait mode as described in BTC Transaction Processing & Signing. Once the required number of active SONs reaches required threshold, queued transactions will be signed and processed.

    heartbeat-monitoring

    1. Purpose

    The purpose of this document is to outline requirements for status monitoring of Sidechain Operation Nodes for purpose of determining whether SONs are active and able to participate in blockchain transactions.

    2. Scope

    Similarly, if 2/3rdsmore SONs are down, the incoming bitcoin transactions can't be published on the Peerplays blockchain and the funds cannot be accepted. In this scenario, transactions will also enter a pending state in which they will await the required number of active SONs.

  • SON Communication Problem: In case of a communication problem between the all SONs and the witnesses which might be caused due to a DOS attack or for any other reason, the sidechain functionality might come to a standstill for a period of time. In this scenario, any incoming funds into the multisig bitcoin wallet will enter a queued pending state until the minimum number of active SONs is available. Transactions will be signed and processed once required number of active SONs is available.

  • The functional requirement listed in this document will be limited to the configuration portion of the SON. This will outline the required steps that will be performed by the Peerplays node operator to enable/disable Sidechain plugin in the Peerplays blockchain from the command line. Also outlined here will be the sequence in which the required steps will be performed including:
    • SON heartbeats

    • SON maintenance mode actions

    • SON de-registration

    3. Background

    The Bitcoin Sidechain functionality has been implemented in the Peerplays blockchain but it doesn't take into account, the change of SONs. As per the current implementation of Sidechain, a multisig bitcoin wallet will be created on the bitcoin blockchain to hold the bitcoins that have been deposited into the pBTC accounts of the Peerplays users. Every SON will have a bitcoin transaction signing key for this multisig bitcoin wallet and will be required to sign any withdrawal transaction. When a SONs changes, the transaction signing key of the outgoing SON needs to be removed from the multisig bitcoin wallet and the key of the incoming SON needs to be added. The suggested proposal is to make the Sidechain code available as a plugin and assign the responsibility for running the sidechain code to separate nodes called the Sidechain Operating Nodes (SONs).

    4. Process Overview

    Described here is the process of SON status reporting (heartbeat) and maintenance mode activities.

    1. System sends heartbeat to registered SONs based on specified frequency

    2. Process responses:

      1. Active and Request Maintenance SONs will respond to heartbeat

        1. Update statistics with last active timestamp and transactions signed updates

      2. In maintenance and inactive SONs will not respond to heartbeat

        1. not responding

          1. check if last active timestamp exceeds heartbeat frequency by factor of 2

    5. Context

    The Peerplays blockchain will allow the node operators to enable/disable the Sidechain functionality on their node. They will have to stake PPY 50 to be able to register as an SON. As soon as the Sidechain functionality is enabled/disabled and the user vests 50 PPY, the Peerplays blockchain will add the node to its list of Sidechain enabled nodes and make the node operator available for SON voting. An SON enabled node will be able to operate as an SON only when it receives the votes required to become one of the top 15 SONs.

    6. Flow Diagram

    7. Requirements

    SON monitoring is required because only active SONs can participate in blockchain transactions.

    Note that new SON's start in inactive status then become active during first maintenance block and begin send

    7.1. SON Status monitoring and statistics (Heartbeat)

    System must include an automated heartbeat check that monitors status of registered SONs per each 180 second interval (heartbeat interval). This interval must be configurable via chain_parameters in extensions.son_heartbeat_frequency, and set to 180 seconds by default. (Other configuration may be possible via genesis.json). Note that this interval may be different in production, but for testing purposes it should be within 3 minutes.

    Heartbeats must be sent by SONs who are in active, or request_maintenance status. All sent heartbeat activity must be logged. SONs in inactive status must not send heartbeat.

    The following other statistics must be tracked and logged as part of heartbeat monitoring:

    • number of transactions signed - number of transactions signed by SON. This value must be updated each time a transaction is signed. This counter is reset during SON rewards

    • total downtime - compounded time that SON was down represented in HH:MM:SS format. This value must be updated to compound all current interval downtime values.

    • current interval downtime - Time since last transition to in_maintenance

    • last down timestamp - timestamp of last transition to in_maintenance status

    • last active timestamp - timestamp of last transition to active status, or last heartbeat where status is active or request_maintenance.

    SONs in active or request_maintenance must be treated as active for the purpose of transaction signing.

    SONs in in_maintenance or inactive status must not participate in transaction signing.

    Statistics for active SONs must be updated after every heartbeat where SON is active, request maintenance.

    7.2. Requesting maintenance

    System must include a wallet command which requests SON to be placed in maintenance mode. Requesting SON maintenance must be available to SONs in active status. Once request SON maintenance is initiated, target SON must be set to in_maintenance at the upcoming chain maintenance interval.

    SONs in maintenance modes can be changed to active or inactive mode via sending a heartbeat.

    System must allow cancelling of maintenance request via cancel_request_son_maintenance command. System must restrict this command to SONs in request_maintenance status.

    After successful execution of cancel maintenance request, SON must be placed into active status.7.3

    7.3. Reporting unavailable SONs

    SON monitoring process must track SONs which miss a heartbeat and declare an SON inactive if an SON misses two consecutive heartbeats. Tracking missed heartbeats must reset for each SON where a heartbeat is received after a missed heartbeat.

    7.4 SON De-registration Operation

    System must de-register SONs that have been in maintenance state for longer than allowed. Allowed maintenance threshold must be a configurable parameter extensions.son_deregister_time, with 12 hours being the default value. Alternatively, deregister threshold may be specified in genesis.json

    Once system identifies an SON that has been in maintence state for longer than specified threshold, system must create a proposal with son delete operation raised by one of schedules SONs.

    son-rewards

    1. Purpose

    The purpose of this document is to outline the steps required to pay the SONs for their contribution to the Peerplays network.

    2. Scope

    The functional requirement listed in this document will be limited to the payment portion of the SON. This will outline the required steps to pay the SONs for the functions performed by them on the Peerplays blockchain. Also outlined here will be the sequence in which the required steps will be performed including:

    • any interactions with the user.

    • validations to ensure complete and accurate information gathering.

    3. Background

    The Bitcoin Sidechain functionality has been implemented in the Peerplays blockchain but it doesn't take into account, the change of SONs. As per the current implementation of Sidechain, a multisig bitcoin wallet will be created on the bitcoin blockchain to hold the bitcoins that have been deposited into the pBTC accounts of the Peerplays users. Every SON will have a bitcoin transaction signing key for this multisig bitcoin wallet and will be required to sign any withdrawal transaction. When a SONs changes, the transaction signing key of the outgoing SON needs to be removed from the multisig bitcoin wallet and the key of the incoming SON needs to be added. The suggested proposal is to make the Sidechain code available as a plugin and assign the responsibility for running the sidechain code to separate nodes called the Sidechain Operating Nodes (SONs).

    4. Process Overview

    Described here is the process to pay the SONs on the Peerplays Blockchain.

    5. Flow Diagram

    N/A

    6. Context

    The SON operators will be paid in PPY from the payment pool set up specifically for payments to SONs. This pool will be replenished by depositing a percentage of all the transaction on the Peerplays network. This percentage should be a chain parameter so that it can be changed. The fee will be distributed at the Maintenance intervals based on transactions signed and weight of voting for each SON. Recommended SON payment is 200 PPY daily (this limit is controlled by `SONS_DAILY_MAX_REWARD`).

    7. Requirements

    7.1 Supported Transaction Types

    All operations performed by SONs must be tallied and paid according to budget and defined payout procedure (as described in sections below).

    System must include a library (global parameters) of configurable fee amounts fee amounts associated with each operation. Library must track each operation, its type, fee amount and currency in which fee is charged (PPY by default). Fees are set and amendable by committee members in accordance with committee member procedures to update global parameters.

    Operations commonly performed by SONs are as follows:

    • asset_issue_operation

    • asset_reserve_operation

    • proposal_create_operation

    • proposal_update_operation

    See Risks section for considerations regarding fee amounts and their implications on financial viability of SON.

    7.2 Collecting Fees

    All operations require a fee to be collected and paid to the network

    Fee collection is determined by transaction type:

    1. Core asset transaction fees are deducted from payer's account

    2. UIA (pBTC) transaction fees are converted to core asset using base exchange rate (note: bBTC to BTC is 1:1)fee mus

    In a scenario where user has 0 PPY, fee must be collected from fee_pool.

    7.3 Determining payout

    Payout must be determined by the number of transactions verified by a node. Higher availability nodes participate in more transactions and therefore receive higher payout.

    SONs are paid based on % ratio between total_transactons_per_day and SONS_DAILY_MAX_REWARD, where SON's % share of daily transactions determines what % of SONS_DAILY_MAX_REWARD is paid.

    Payout happens only during SON maintenance interval, therefore payout is configurable based on the payment interval and can be configured to happen once every x maintenance intervals.

    7.4 Payment Pool

    Payments to SONs are stored inside son_budget which functions similarly to witness_budget. Specifically, son_budget accumulates transaction fees collected by peerplays network. As described above, payout happens during the maintenance interval .

    SONS_DAILY_MAX_REWARD must initially be set to 200 PPY. We may to have to change this as per market realities etc. Currently BTC is the only supported cryptocurrency.

    son-configuration

    1. Purpose

    The purpose of this document is to outline the steps required by a Peerplays node operator to enable/disable Sidechain plugin in the Peerplays blockchain.

    2. Scope

    The functional requirement listed in this document will be limited to the configuration portion of the SON. This will outline the required steps that will be performed by the Peerplays node operator to enable/disable Sidechain plugin in the Peerplays blockchain from the command line. Also outlined here will be the sequence in which the required steps will be performed including:

    • any interactions with the user.

    • validations to ensure complete and accurate information gathering.

    3. Background

    The Bitcoin Sidechain functionality has been implemented in the Peerplays blockchain but it doesn't take into account, the change of SONs. As per the current implementation of Sidechain, a multisig bitcoin wallet will be created on the bitcoin blockchain to hold the bitcoins that have been deposited into the pBTC accounts of the Peerplays users. Every SON will have a bitcoin transaction signing key for this multisig bitcoin wallet and will be required to sign any withdrawal transaction. When a SONs changes, the transaction signing key of the outgoing SON needs to be removed from the multisig bitcoin wallet and the key of the incoming SON needs to be added. The suggested proposal is to make the Sidechain code available as a plugin and assign the responsibility for running the sidechain code to separate nodes called the Sidechain Operating Nodes (SONs).

    4. Process Overview

    Described here is the process to configure the SON plugin in the Peerplays blockchain.

    5. Context

    The Peerplays blockchain will allow the node operators to enable/disable the Sidechain functionality on their node. They will have to stake PPY 50 to be able to register as an SON. As soon as the Sidechain functionality is enabled/disabled and the user vests 50 PPY, the Peerplays blockchain will add the node to its list of Sidechain enabled nodes and make the node operator available for SON voting. An SON enabled node will be able to operate as an SON only when it receives the votes required to become one of the top 15 SONs.

    6. Flow Diagram

    7. SON Commands

    Any Peerplays node can become a SON irrespective of it is a witness or not. It can connect to a local or remote Bitcoin node and verify the transactions.

    7.1 Enable SON

    ./programs/witness_node/witness_node --resync --replay --son-enable

    This command will enable the SON functionality in the Peerplays node. The node will be registered in the peerplays blockchain as an SON enabled node. Peerplays users will be able to vote for this user to be an active SON. The node will be able to listen to the changes on the Bitcoin blockchain. An active SON can perform all the functionality of the sidechain once it has been voted into the top 15 SONs.

    7.1.1. Pre-Conditions & Errors

    The error messages are to be displayed in GUI wallet or cli_wallet or other programatic means.

    1. The SON node should not be enabled and active for the same Peerplays account

    2. Trying to enable an already in enabled SON node will give the error message "SON is already enabled for the account_name."

    3. The account trying to enable SON should have a minimum balance of 50 PPY which has to be VESTED to become SON

    4. If the account is not having the minimum required balance, an error message "Minimum VESTING Balance for SON node activation is not available. Make sure that the account is funded with MINIMUM_VESTING_BALANCE"

    7.2. Disable SON

    This section talks about permanently disabling SON.

    ./programs/witness_node/witness_node --resync --replay --son-disable

    This command will disable the SON functionality in the Peerplays node and deregister the node in the peerplays blockchain as an SON enabled node. Any votes casted to the user to be an active SON will be reverted. The user will be able to claim their vested PPY after 2 days of deregistering their node.

    7.1.2. Pre-Conditions & Errors

    The error messages are to be displayed in GUI wallet or cli_wallet or other programatic means.

    1. Only a SON node which is in "enabled state" can be disabled

    2. Trying to de-activate/disable a Peerplays node with SON not enabled will give the error message "SON is not enabled for account_name"

    3. If a SON is disabled and trying to move the VESTED funds before 2 days duration via any means should be prevented

    API Requirements

    All the v1 Sidechain APIs should work as it is. Except for those, an API to provide the list of SON enabled users will be required. The API should return the list in the following format:

    Expand source

    [

    {

    serial_num: 1,

    id: 1.20.1,

    user: memphis123,

    rank: 1,

    about_url: www.memphis-node.com,

    sidechain_url: http://www.memphis-node.com/sidechain,

    is_active: true,

    votes: 23223245

    },

    {

    ....

    },

    ....

    ]

    CLI Wallet Command Requirements

    These are new options to be added.

    1. list_sons: We need a command in the CLI Wallet similar to list_witnesses to get the list of SONs.

    2. list_active_sons: This command should provide a list of active SONs on the Peerplays blockchain.

    son-proposals

    1. Purpose

    The purpose of this document is to outline how SONs create and manage proposals that are created with various transactions

    2. Scope

    if yes - set state to inactive
  • if no, do nothing

  • in maintenance flow

    1. check current interval downtime

      1. if less than 12 hrs, do nothing

      2. if more than or equal to 12 hrs - deregister SON

  • proposal_delete_operation

  • son_create_operation

  • son_update_operation

  • son_delete_operation

  • son_heartbeat_operation

  • son_report_down_operation

  • son_maintenance_operation

  • son_wallet_recreate_operation

  • son_wallet_update_operation

  • son_wallet_deposit_create_operation

  • son_wallet_deposit_process_operation

  • son_wallet_withdraw_create_operation

  • son_wallet_withdraw_process_operation

  • If a previous VESTED balance is available, it will not be considered to be the minimum VESTING BALANCE. This is to avoid accounts spamming the blockchain with SON-activate commands.

  • The functional requirements listed in this document cover the following proposals:
    • son_report_down

    • son_report_down_operation

    • son_wallet_update_operation

    • son_wallet_deposit_create_operation

    • son_wallet_deposit_process_operation

    • son_wallet_withdraw_create_operation

    • son_wallet_withdraw_process_operation

    • sidechain_transaction_create_operation

    3. Background

    When certain types of transactions are performed by SONs, proposals are created to seek approval for these transactions. Proposals are created using create operation, and must be approved or rejected following proposal creation. Approved proposals fulfill their associated transaction (for example deposit), rejected proposals cancel the transaction.

    4. Process Overview

    N/A

    5. Context

    Each proposal contains a list of operations. These operations are the way to change anything in the blockchain, including performing transfers, modifying chain parameters, creating and modifying accounts, assets, and also proposals.

    In addition to a list of operations, a proposal also has a defined review period and expiration time.

    6. Flow Diagram

    N/A

    7. Proposals

    7.1 Proposal Lifetime

    A proposal must when proposal_create_operation operation is executed. This operation defines the review period and expiration time, as well as the list of operations proposed.

    The proposal then must require approval via proposal_update_operation. This operation must include functions to add or remove active approvals, owner approvals, or key approvals.

    Ability to delete (which is effectively a veto on the proposal) a proposal must exist via proposal_delete_operation. Execution of this operation must be restricted to accounts who are required authorities on this proposal, alternatively, the same effect would be achieved by simply not adding one's approval to the proposal.

    7.2 Approving Proposals

    A proposal must be accepted when it reaches the required approvals through the proposal_update_operation. There is no specific step or operation to accept a proposal, instead authority must be checked on the proposal_update_operation, and upon successful verification, the proposed operations must be applied.

    The list of authorities required for accepting a proposal must depend on the list of proposed operations. The proposal itself must not carry any extra authorities or requirements.

    Specifically, the proposal-related operations must require the following authorities:

    • the proposal_create_operation requires only the authority of the submitter

    • the proposal_update_operation which adds an approval requires the authority of the approver

    • the proposal_delete_operation requires the authority of the veto-giver, which must be a required authority on at least one operation of the affected proposal.

    Other operations have different authority requirements.

    7.2 Types of Approvals

    There are three kinds of approvals that must be tracked for each operation: owner approvals, active approvals, and key approvals. Each operation must specify its required approvals of each kind separately.

    7.3 Fees

    Fees must be associated with operations, not proposals. However, the operations to create or update a proposal must carry their own fees, for which the payer must be chosen when creating the operation. Each of these transactions must carry a 20 unit fee plus a price per kilobyte.

    The fees for the operations inside the proposal must be determined by operation. For Peerplays-related ones, like creating a sport, the fee is fixed to 1 unit (equal to GRAPHENE_BLOCKCHAIN_PRECISION) and must be paid by the witness account.

    7.4 Operations requiring proposals

    List of operations and their associated proposals:

    • SON report down (son_report_down) must be checked for timestamps stored in SON statistics object to confirm that SON is down (missed two heartbeats)

    • SON De-register (son_delete_operation) must be checked for total downtime stored in SON statistics objects to confirm that SON has been in maintenance for too long and must be de-registered/deleted

    • SON wallet update (son_wallet_update_operation) must be checked against active SONs to find matching transaction data. 2/3rds of active sons must confirm a match for a successful check

    • Deposit (son_wallet_deposit_create_operation) must not required proposal for object creation, but must be checked to verify that parameters are correct (same as in existing object), an active SON is creating the object, and only the expected son is confirming the transaction.

    • Process Deposit (son_wallet_deposit_process_operation) +asset_issue_operation - check critical values from son_wallet_deposit_object are identical to critical values from sidechain transaction. Minimum mandatory checks are: check sender and amount. Depending on sidechain, checks of other values may be warranted (Bitcoin - vout and number of transaction confirmations, Peerplays - exchange rate)

    • Transfer (transfer_operation) - TBD

    • Withdrawal (son_wallet_withdraw_create_operation) must not require a proposal for object creation, however, must be checked to verify that parameters are correct (same as in existing object), an active SON is creating the object, and only the expected son is confirming the transaction

    • Process Withdrawal (son_wallet_withdraw_process_operation) + asset_reserve_operation - check critical values from son_wallet_withdraw_object are identical to critical values from sidechain transaction. Minimum mandatory checks are: check sender and amount. Depending on sidechain, checks of other values may be warranted (Bitcoin - vout and number of transaction confirmations, Peerplays - exchange rate)

    • Sidechain transaction creation (sidechain_transaction_create_operation) must be checked to verify that given object id is already created

    8 Reference

    List of Graphene operations

    https://github.com/peerplays-network/peerplays/blob/master/libraries/chain/include/graphene/chain/protocol/operations.hpp#L55

    son-switchover

    1. Purpose

    The purpose of this document is to outline various scenarios in which SONs will be switched from the top 2/3rd and also among the top 15 minimum ACTIVE SONs.

    1. Scope

    The functional requirement listed in this document will be limited to the multi-sig key change scenarios only.

    3. Background

    The Bitcoin Sidechain functionality has been implemented in the Peerplays blockchain but it doesn't take into account, the change of SONs. As per the current implementation of Sidechain, a multisig bitcoin wallet will be created on the bitcoin blockchain to hold the bitcoins that have been deposited into the pBTC accounts of the Peerplays users. Every SON will have a bitcoin transaction signing key for this multisig bitcoin wallet and will be required to sign any withdrawal transaction. When a SONs changes, the transaction signing key of the outgoing SON needs to be removed from the multisig bitcoin wallet and the key of the incoming SON needs to be added. The suggested proposal is to make the Sidechain code available as a plugin and assign the responsibility for running the sidechain code to separate nodes called the Sidechain Operating Nodes (SONs).

    4. Process Overview

    Various scenarios are outlined in the Scenarios section

    5. Context

    The SONs has a ranking & grouping. The ranking is depending on the total effective stake of the votes received. We can have infinitely many SONs and rankings. The top 15 nodes aka ACTIVE nodes are the ones which are mandated by the SON implementation. ie at any point of time, there has to be 15 nodes for the SON feature to be operational. Apart from the ACTIVE group of top 15, we also have a 2/3rd top ranked SONs interms of votes which signs the transactions.

    Any time there is a change to active SON list, a change to primary wallet scripts will be triggered. Therefore any change to active SONs list must result in creation of new primary wallet using public keys of SONs that remain active after the change. The reason for this is that primary wallet is created based on public keys of all active sons, when the composition of active SON list changes, it affects what keys are associated with the primary wallet.

    At each maintenance intervals, list of candidates for active SONs is compared to list of current active SONs, if lists are different, list of current active SONs is understood to change and thus a new primary wallet must be generated.

    6. Scenarios

    Scenarios below are examples of changes that may impact active SONs list and thus trigger re-creation of primary wallet using public keys of SONs on active SONs list.

    6.1 Ranking change within the top 2/3rd SONs

    In this scenario the SONs will change their ranking and order but the top 2/3rd SONs will remain the same. This means, if there are 15 SONs and the 2/3rd is 10 SONs, the rank of the 10 SONs will be changed. But it will not have any impact on the multi-sig wallet. On using the list_sons will provide the new order.

    During design, if possible its recommended to have invoke the immediate ranking change only in the case of a change involving the multi-signature key change. ie, this particular scenario can be ignored until the first deposit transaction happens. This will induce a slight delay in the display of ranking of the SONs for the reporting purposes.

    6.2 Ranking Change due new votes resulting in the change of multi-wallet key

    This scenario addresses the normal case where one or more of the top 2/3rd SONs loses votes and they moves out of the top 2/3rd.

    An example scenario is with 15 ACTIVE SONs where the top 10 are forming the 2/3rd quorum. When one of them loses votes, an ACTIVE node or a node outside of TOP 15 ACTIVE nodes replaces its position.

    This scenario would trigger:

    • creation of a new Bitcoin address

    • move the Bitcoin (BTC) balances to the new address which is controlled by the new set of top SONs

    • The deposit and transfer APIs of the SON should return new multi-signature wallet address

    6.3 Ranking change - ACTIVE SON change

    If an ACTIVE SON receives or loses votes, its effective stake can change. This can trigger the ranking change. The change will be executed at the next son_maintanance_interval` , ie 24 hours or during the next deposit/withdraw operation whichever comes first.

    Ranking changes in the list of SONs must result in creation of new multi-signature wallet using public keys of new SONs. Balances are then transferred to the new address.

    Note that any changes to list of SONs must result in new wallet being generated and balances transferred to new wallet address.

    6.4 Ranking Change - Disabling an ACTIVE SON

    If an ACTIVE SON disables its node, another node has to replace it.

    This can trigger the ranking change. The change will be executed at the next son_maintanance_interval` , ie 24 hours or during the next deposit/withdraw operation whichever comes first.

    Ranking changes in the list of SONs must result in creation of new multi-signature wallet using public keys of new SONs. Balances are then transferred to the new address.

    6.5 Ranking change - an ACTIVE SON goes offline

    In this scenario, an ACTIVE SON but not in the top 2/3rd in terms of cumulative votes received goes down.

    • SON goes down/offline

    • The SON network records this

    • Upon completion of 12 hours after the SON going down/offline event is recorded, the ranking change is triggered

    • The Ranking change will be executed on the first deposit transaction or once in 24 hours whichever comes first.

    Ranking changes in the list of SONs must result in creation of new multi-signature wallet using public keys of new SONs. Balances are then transferred to the new address.

    6.6. A top 2/3rd SON goes offline

    A high stake SON or a group of SONs goes offline without notice. This scenario or slowness is often observed during large scale internet routing attacks involving BGP poisoning or a data center maintenance where a group of servers becomes unreachable. (This often happens when certain German data center performs an upgrade or maintenance).

    • If we have ACTIVE SONs, and if need to perform a key change before the on the maintenance interval or before the next deposit transaction is requested, we can proceed with the change of keys

    • Upon such a change the funds has to be transferred to the new wallet created

    • The fund transfer will be possible if the remaining SONs who originally signed the transaction has enough authority (weight) to perform the withdraw operation on the old wallet

    If change of keys occurs for any SONs, this event must must result in creation of new multi-signature wallet using new SON keys. Balances are then transferred to the new address.

    6.7 A top SON goes into maintenance - with key change

    If a SON part of the multi-signature wallet creation with a large stake enough to trigger change in the keys, the maintenance mode should trigger a change in the ranking of the SONs & also a change in the keys.

    To avoid frequent key changes, the key change can be handled upon the first deposit or withdrawal. The deposit and withdrawal operations to the SON should be made via calling respective APIs to make this possible.

    IMPORTANT: The time taken for the wallet change operation should be captured and we need to take this account for fine tuning the strategy for key changes. This is something that we can't easily predict right now, but needs to test and verify.

    This scenario must trigger creation of new wallet using SON public keys, and transfer of balance to new wallet address due to change in SON composition and public keys.

    This approach is done at the cost of status change at the front-end, but to avoid un-necessary operations in the chain

    If the remaining SONs doesn't have enough control / weight to operate the multi-signature wallet, the funds will locked in the previous wallet until the necessary SONs becomes active. There seems to no way to address this. But, new deposits to the address will not be entrained as the deposit API will return new Bitcoin address.

    Bitcoin Deposit Handling

    1. Purpose

    The purpose of this document is to outline functional specifications for monitoring bitcoin network and handling deposits. Result of a deposit is conversion of Bitcoin (BTC) to Peerplays assets (pBTC).

    2. Scope

    Sidechain operating node will monitor Bitcoin network for events of interest, namely transfer of assets to a Peerplays address. When transfer happens, sidechain will process it, in order to pick up information needed to handle it. Handling deposits will create certain amount of tokens on a Peerplays network. This amount will match the amount of assets on target sidechain by predefined exchange rate.

    Specific functions covered include:

    • monitor transactions to a designated sidechain user address

    • handle deposit via creation of sidechain event data

    • create & confirm object proposals

    • conversion of BTC to pBTC based on defined exchange rate, with applicable fees

    3. Background

    NOTE: Deposit handling requirements are not final.

    Deposit handling will consist of two parts, a BTC Event Listener and a BTC Event Handler. Listener can identify and report new block, a transaction, or filtered single event (like specific operation involving specific address). We have identified three (3) distinct scenarios describing how deposits and withdrawals may be implemented. Scenarios are outlined in this article:

    Requirements below are describing functional specifications based on Scenario 1 - Multi-signature primary wallet controlled by SON network, holding all the funds. All transfers are made to and from this multi-signature wallet.

    4. Process Overview

    Described here is the process of monitoring deposit address and processing transactions that occur in relation to target address.

    pBTC token issue is initiated by Sidechain Listener identifying a Bitcoin deposit, passing information to Sidechain Handler .

    Note that steps 2 through 14 are described in detail in BTC Transaction Signing functional specification.

    Steps involved:

    1. User initiates deposit to convert BTC to pBTC

    2. Listener identifies that a BTC transaction is initiated

    3. Listener passes event data to handler

    4. Handler receives event data and creates an object (normally SON Wallet Object, SON Wallet Deposit Object or SON Wallet Withdraw Object)

    5. Context

    To facilitate conversion of bitcoin in to peerplays tokens, SON must include an event listener and an event handler mechanism to identify specific types of transactions and handle them accordingly. Proposed approach uses multi-signature Primary Wallet controlled by SON network, holding all the funds. All transfers are made to and from this multi-signature wallet.

    6. Flow Diagram

    7. Requirements

    7.1 Wallet information

    Current deposit address implementation is Timelocked-one-or-weighted-multisig

    SON must be able to create/update Peerplays multisig account, and create/re-create Bitcoin multisig address controlled by active SONs.

    The SONs may change at any maintenance interval when the votes are tallied and the existing SONs are voted out. Since, the bitcoin public keys of the SONs will be used to create the multisig bitcoin wallet, their public keys will have to be changed in order to operate the multisig bitcoin wallet. System must transfer the funds from the old wallet to the new wallet every time an SON changes and incur associated bitcoin transaction fees.

    To reduce this additional cost, an m-of-n multisig bitcoin wallet will be created with signatures of 2/3rd SONs required for a bitcoin transaction. Change of public key for the SON in the multisig bitcoin wallet is not needed until 1/3rd of the SONs changes. Once, 1/3rd of the initial SONs changes, we must create a new multisig bitcoin wallet with the public keys of the current SONs and transfer the funds from the previous wallet to the newly created multisig bitcoin wallet.

    Requirements below assume use of multi-signature primary wallet controlled by SON network, holding all the funds. All transfers are made to and from this multi-signature wallet.

    SON must be able to keep the history records of active primary wallets, duration of activity period, and the SONs who control the wall at the time of creation.

    7.2 Listener

    SON must include a Bitcoin event listener which monitors a designated Bitcoin address registered as a sidechain user address for deposits. Specifically, listener uses Bitcoin node interface for monitoring changes in the blockchain

    Listener must be able to recognize a change that signifies a deposit event and capture the following data associated with each transaction of this type:

    • Transaction unique identifier

    • Transfer operation’s source address

    • Transfer operation’s target address

    • Transfer amount

    Following identifying a deposit transaction, Listener must check the number of active SONs to verify that a minimum of 5 SONs are active. If minimum is not met, deposit transaction must be stored for processing until minimum number of active SONs becomes available.

    7.3 Handler

    Detailed end-to-end functional specifications for handling and signing BTC transactions are posted in the Functional Specifications - BTC Transaction Processing & Signing spec. In summary, this occurs as follows:

    SON must include a Bitcoin event handler which uses information supplied by the Listener to perform a specific operation that’s based on transaction type submitted by listener. When handler receives notification of Deposit transaction from the Listener, sidechain_event_data must be received and passed to sidechain_event_data_received.

    System must then create a SON Wallet Deposit Object, which upon creation will be processed by all available SONs to verify its data. To verify object, system must check local data of each SON against object data on the side chain. Object must be deemed valid when its data is confirmed, and rejected when its data cannot be confirmed. Transaction terminates if object data is not confirmed during this check.

    Successful object verification results in issuance of transaction create proposal that is based on confirmed object and includes some of its data (specifically, a reference to the object). Created sidechain transaction object must contain reference to the sidechain where it should be processed, reference to the object it is created for, sidechain transaction body, list of expected signers, list of received signatures, and the helper fields for calculating signature weights.

    This proposal must be verified by SONs, which is performed by verifying referred object against locally re-created transaction data. If data does not match, proposal will be deleted from proposal list and transaction won’t be completed. If data matches, system must approve the proposal. Approved proposals must result in object being published on the chain.

    When the object is published on the chain, SONs specified on the list of expected signers must begin processing it in parallel. Note that SONs specified as signers must sign the transaction as long as they are online, disregarding their status (thus SON in any status must sign the transaction). Once enough signatures hve been collected, transaction is marked as ‘Completed’.

    When scheduled SON detects that a sidechain transaction object has been completed, it must collect all data from the sidechain transaction object, compile it, convert to a format that is ready for transmission to Bitcoin network, and send this transaction to the Bitcoin network.

    SON must start conversion of deposit amount from bitcoin into peerplay tokens following deposit confirmation. Conversion operation must calculate btc to ppy conversion using 1:1 rate. Conversion is completed by sending funds from bitcoin address (sidechain user address for deposits) to primary wallet (bitcoin multisig address).

    User will receive peerplays core assets matching the amount of deposited bitcoin.

    7.4 Refund Scenario

    In some cases a transaction will not be processed by SONs (such as when active SONs threshold is not met), which will cause funds to wait until required number of active SONs become available. System must allow users to initiate refunds of their transactions.

    Refund scenario must adhere to same rules as regular bitcoin transaction:

    1. User needs transaction id for the transaction they wish to refund

    2. User creates another transaction using transaction id of transaction they want to refund to move funds to their own address

    3. User signs the transaction using a private key that matches the public key he provided in sidechain address mapping

    4. Transaction is pushed to bitcoin network and user is refunded once transaction is processed

    7.5 Current Deposit Address Implementation - One-or-weighted-multisig

    This deposit address implementation type allows to send funds from this address with 2/3 weights of SON votes (like in Primary Wallet) or with single user signature. To create such address we need:

    1) user public key

    2) all SONs public keys

    3) every SON weight

    Note: This is the current implementation of the Deposit address.

    This address type is implemented by btc_one_or_weighted_multisig_address class.

    8. Glossary

    pBTC​ is a peerplay Blockchain Asset, which represents users’ balances in Bitcoin on Peerplays blockchain. Having a balance of 1 pBTC would mean having it backed by the same amount of Bitcoin on a Witness-controlled Multisig Wallet. New pBTC are NOT ISSUED by OWNER with ​issue ​operation. New pBTC are issued strictly in relation with ​Deposit​ operations.

    PW (Primary Wallet) ​is the main Multisig Bitcoin Wallet.

    Multi-signature (multisig) refers to requiring more than one key to authorize a Bitcoin transaction. It is generally used to divide up responsibility for possession of bitcoins.

    Related Documentation

    Bitcoin Withdrawal Handling

    1. Purpose

    The purpose of this document is to outline functional specifications for monitoring bitcoin network and handling withdrawals. Result of a withdrawal is conversion of peerplay assets (pBTC) to Bitcoin (BTC) using 1:1 ratio.

    2. Scope

    sign transactions

  • withdraw bitcoin for conversion into Peerplays tokens

  • Object is checked by by all active SONs to compare object data from the chain against data generated by each SON.

    1. If data does not match, transaction is terminated

    2. If data matches, object is deemed ‘Confirmed'. Proceed to next step

  • Handler checks the number of active SONs

    1. If active SONs are > 5, proceed to next step

    2. If active SONs are < 5, store transaction for processing until required number of active SONs is available (this step will be repeated until SON availability requirement is met)

  • Issue proposal for for sidechain transaction create operation

  • Active SONs create local copies of transaction data to be verified against proposal

  • Proposal is verified by active sons by comparing local copies of transaction data to proposal

    1. If data does not match, proposal is not approved and will eventually expire thus terminating the transaction

    2. If data matches, proposal is approved. Proceed to next step

  • Transaction object containing a list of SONs expected to sign is created and published to the sidechain. List of SONs will be created based on list of active SONs

  • Expected SON signers initiate parallel processing of transaction. Offline SONs will not participate in signing and only the online SONs (regardless of status) will sign the transaction

  • Sign transaction

    1. Each signing SON adds its signature

    2. Each signing SON is added to list or received signatures

    3. Operation evaluator checks signatures to determine if latest signature is the last signature required to complete transaction signing

      1. If no, repeat this step after each SON’s signature

      2. If yes, mark transaction object as ‘Completed’ (helper field complete = true)

  • Scheduled SON detects completed transaction object

  • Transaction is converted to a readable format and sent to Bitcoin network

  • User receives pBTC amount

  • Deposit is marked as processed

  • Transaction fee (for transfer operation)

    Comparison between scenarios for handling deposits and withdrawals
    SON status overview 2020-03-11
    Comparison between scenarios for handling deposits and withdrawals
    Functional Specifications - BTC Transaction Processing & Signing
    Sidechain operating node will monitor Bitcoin network for events of interest, namely transfer of assets to a Peerplays address. When transfer happens, sidechain will process it, in order to pick up information needed to handle it. Handling withdrawals will create certain amount of tokens on a Peerplays network. This amount will match the amount of assets on target sidechain by predefined exchange rate.

    Specific functions covered include:

    • monitor transactions to a designated sidechain user address

    • handle withdrawal via creation of sidechain event data

    • create & confirm object proposals

    • conversion of pBTC to BTC using 1:1 ratio

    • sign transactions

    • withdraw bitcoin for conversion into peerplay tokens

    3. Background

    Withdrawal handling will consist of listener and handler functionality. Listener can identify and report new block, a transaction, or filtered single event (like specific operation involving specific address). Handlers will process the event identified by listener.

    We have identified three (3) distinct scenarios describing how deposits and withdrawals may be implemented. Scenarios are outlined in this article:

    Comparison between scenarios for handling deposits and withdrawals

    Requirements below are describing functional specifications based on Scenario 1 - Multisignature primary wallet controlled by SON network, holding all the funds. All transfers are made to and from this multisignature wallet.

    4. Process Overview

    Described here is the process of monitoring withdrawal address and processing transactions that occur in relation to target address.

    pBTC token issue is initiated by Sidechain Listener identifying a Bitcoin withdrawal, passing information to Sidechain Handler .

    Steps involved:

    1. User initiates withdrawal to convert pBTC to BTC

    2. Listener identifies withdrawal type change in the block chain

    3. Listener passes event data to handler

    4. Handler receives event data and creates an object (normally SON Wallet Object, SON Wallet Deposit Object or SON Wallet Withdraw Object)

    5. Object is checked by by all active SONs to compare object data from the chain against data generated by each SON.

      1. If data does not match, transaction is terminated

      2. If data matches, object is deemed ‘Confirmed'. Proceed to next step

    6. Handler checks the number of active SONs

      1. If active SONs are > 5, proceed to next step

      2. If active SONs are < 5, store transaction for processing until required number of active SONs is available (this step will be repeated until SON availability requirement is met)

    7. Issue proposal for for sidechain transaction create operation

    8. Active SONs create local copies of transaction data to be verified against proposal

    9. Proposal is verified by active sons by comparing local copies of transaction data to proposal

      1. If data does not match, proposal is not approved and will eventually expire thus terminating the transaction

      2. If data matches, proposal is approved. Proceed to next step

    10. Transaction object containing a list of SONs expected to sign is created and published to the sidechain. List of SONs will be created based on list of active SONs

    11. Expected SON signers initiate parallel processing of transaction. Offline SONs will not participate in signing and only the online SONs (regardless of status) will sign the transaction

    12. Sign transaction

      1. Each signing SON adds its signature

      2. Each signing SON is added to list or received signatures

      3. Operation evaluator checks signatures to determine if latest signature is the last signature required to complete transaction signing

    13. Scheduled SON detects completed transaction object

    14. Transaction is converted to a readable format and sent to Bitcoin network

    15. User receives BTC amount

    16. Withdrawal is marked as processed

    5. Context

    To facilitate conversion of peerplays tokens into bitcoin, SON must include an event listener and an event handler mechanisms to identify specific types of transactions and handle them accordingly. Proposed approach uses multisignature Primary Wallet controlled by SON network, holding all the funds. All transfers are made to and from this multisignature wallet.

    6. Flow Diagram

    7. Requirements

    Refer to Functional Specification - Bitcoin Deposit Handling for wallet information

    Current deposit address implementation is Timelocked-one-or-weighted-multisig

    7.1 Listener

    SON must include a Bitcoin event listener which monitors a designated Bitcoin address registered as a sidechain user address for withdrawals Specifically, listener uses Bitcoin node interface for monitoring changes in the block changes.

    Listener must be able to recognize a change that signifies a withdrawal event and capture the following data associated with each transaction of this type:

    • Transaction unique identifier

    • Transfer operation’s source address

    • Transfer operation’s target address

    • Transfer amount

    Following identifying a withdrawal transaction, Listener must check the number of active SONs to verify that a minimum of 5 SONs are active. If minimum is not met, withdrawal transaction must be stored for processing until minimum number of active SONs becomes available.

    7.3 Handler

    SON must include a Bitcoin event handler which uses information supplied by the Listener to perform a specific operation that’s based on transaction type submitted by listener. When handler receives notification of Withdrawal transaction from the Listener, sidechain_event_data must be received and passed to sidechain_event_data_received. Received sidechain event data must then be used to create proposal for a withdrawal descriptor object son_wallet_withdrawal_object.

    System must then create a SON Wallet Withdrawal Object, which upon creation will be processed by all available SONs to verify its data. To verify object, system must check local data of each SON against object data on the side chain. Object must be deemed valid when its data is confirmed, and rejected when its data cannot be confirmed. Transaction terminates if object data is not confirmed during this check.

    Successful object verification results in issuance of transaction create proposal that is based on confirmed object and includes some of its data (specifically, a reference to the object). Created sidechain transaction object must contain reference to the sidechain where it should be processed, reference to the object it is created for, sidechain transaction body, list of expected signers, list of received signatures, and the helper fields for calculating signature weights.

    This proposal must be verified by SONs, which is performed by verifying referred object against locally re-created transaction data. If data does not match, proposal will be deleted from proposal list and transaction won’t be completed. If data matches, system must approve the proposal. Approved proposals must result in object being published on the chain.

    When the object is published on the chain, SONs specified on the list of expected signers must begin processing it in parallel. Note that SONs specified as signers must sign the transaction as long as they are online, disregarding their status (thus SON in any status must sign the transaction). Once enough signatures hve been collected, transaction is marked as ‘Completed’.

    When scheduled SON detects that a sidechain transaction object has been completed, it must collect all data from the sidechain transaction object, compile it, convert to a format that is ready for transmission to Bitcoin network, and send this transaction to the Bitcoin network.

    SON must start conversion of withdrawal amount from peerplay tokens into Bitcoin following withdrawal confirmation. Conversion operation must calculate pBTC to BTC conversion using 1:1 rate. Conversion is completed by sending funds from bitcoin address (sidechain user address for withdrawals) to primary wallet (bitcoin multisig address).

    User will receive bitcoin corresponding to amount of converted pBTC. Lastly, scheduled SON must mark son_wallet_withdrawal_object as processed

    7.4 Refund Scenario

    In some cases a transaction will not be processed by SONs (such as when active SONs threshold is not met), which will cause funds to wait until required number of active SONs become available. System must allow users to initiate refunds of their transactions.

    Refund scenario must adhere to same rules as regular bitcoin transaction:

    1. User needs transaction id for the transaction they wish to refund

    2. User creates another transaction using transaction id of transaction they want to refund to move funds to their own address

    3. User signs the transaction using a private key that matches the public key he provided in sidechain address mapping

    4. Transaction is pushed to bitcoin network and user is refunded once transaction is processed

    Current Deposit Address Implementation - One-or-weighted-multisig

    This deposit address implementation type allows to send funds from this address with 2/3 weights of SON votes (like in Primary Wallet) or with single user signature. To create such address we need:

    1. user public key

    2. all SONs public keys

    3. every SON weight

    Note: This is the current implementation of the Deposit address.

    This address type is implemented by btc_one_or_weighted_multisig_address class.

    8. Glossary

    pBTC​ is a peerplay Blockchain Asset, which represents users’ balances in Bitcoin on PeerPlays blockchain. Having a balance of 1 pBTC would mean having it backed by the same amount of Bitcoin on a Witness-controlled Multisig Wallet. New pBTC are NOT ISSUED by OWNER with ​issue ​operation. New pBTC are issued strictly in relation with ​Deposit​ operations.

    PW (Primary Wallet) ​is the main Multisig Bitcoin Wallet.

    Multisignature (multisig) refers to requiring more than one key to authorize a Bitcoin transaction. It is generally used to divide up responsibility for possession of bitcoins.

    Related Documentation

    SON status overview 2020-03-11

    Comparison between scenarios for handling deposits and withdrawals

    Bitcoin Withdrawal Handling LLD

    Functional Specifications - BTC Transaction Processing & Signing

  • If no, repeat this step after each SON’s signature

  • If yes, mark transaction object as ‘Completed’ (helper field complete = true)

  • BTC Transaction Processing & Signing

    1. Purpose

    The purpose of this document is to outline functional specifications for signing of any BTC transaction that occurs on the sidechain network.

    2. Scope

    Sidechain operating node will monitor Bitcoin network for events of interest, namely transfer of assets to a Peerplays address. When transfer happens, sidechain will process it, in order to pick up information needed to handle it. Handling of BTC transaction involves creation of various objects, proposals, verification and signing of the transaction before it is recorded on Bitcoin network.

    3. Background

    SONs will handle BTC Deposits (conversion of BTC to pBTC) and withdrawals (conversion of pBTC to BTC).

    We have identified three (3) distinct scenarios describing how deposits and withdrawals may be implemented. Scenarios are outlined in this article:

    Requirements below are describing functional specifications based on Scenario 1 - Multisignature primary wallet controlled by SON network, holding all the funds. All transfers are made to and from this multisignature wallet.

    This document outlines in detail how BTC transactions are handled by the sidechain network, regardless of transaction type.

    4. Process Overview

    Process overview below details typical steps in identifying and handling a BTC transaction.

    Note that this process is transaction agnostic. For details surrounding specific transactions, check BTC Deposit and BTC Withdrawal requirements

    Steps involved:

    1. Listener identifies that a BTC transaction is initiated

    2. Listener passes event data to handler

    3. Handler receives event data and creates an object (normally SON Wallet Object, SON Wallet Deposit Object or SON Wallet Withdraw Object)

    4. Object is checked by by all active SONs to compare object data from the chain against data generated by each SON.

    5. Flow Diagram

    6. Context

    All bitcoin transactions must undergo verification checks and signing by at least 5 active SONs before transaction is signed and sent to Bitcoin network.

    7. Requirements

    7.1 Event Listener

    SON must include a Bitcoin event listener which monitors a designated Bitcoin addresses reserved for deposits and withdrawals . Specifically, listener uses Bitcoin node interface for monitoring changes in the blockchain.

    Listener must be able to recognize a change that signifies a bitcoin transaction and capture the following data associated with each transaction of this type:

    • Transaction unique identifier

    • Transfer operation’s source address

    • Transfer operation’s target address

    • Transaction amount

    Following identifying a transaction, Listener must check the number of active SONs to verify that a minimum of 5 SONs are active. If minimum is not met, deposit transaction must be stored for processing until minimum number of active SONs becomes available.

    7.2 Event Handler

    SON must include a Bitcoin event handler which uses information supplied by the Listener to perform a specific operation that’s based on transaction type submitted by listener. Event handler’s purpose is to perform a series of actions such as operation creation, verification checks, transaction signing leading up to packing of transaction data and sending it to bitcoin network.

    Receiving data from Listener

    When handler receives transaction notification from listener from the Listener, sidechain_event_data must be received and passed to sidechain_event_data_received.

    Object creation

    System must then create an object based on the transaction type. Possible objects are:

    • Son Wallet Object - recreated on new set of SON voted into list of active SONs.

    • Son Wallet Deposit Object - created when deposit is detected.

    • Son Wallet Withdraw Object - created when withdraw is detected.

    Following creation of any object, all available SONs must begin processing the object to verify that its data is correct. To verify object, system must check local data of each SON against object data on the side chain. Object must be deemed valid when its data is confirmed, and rejected when its data cannot be confirmed. Transaction terminates if object data is not confirmed during this check.

    Proposal

    Next, system must issue a proposal for sidechain transaction create operation based on confirmed object. Created sidechain transaction object must contain reference to the sidechain where it should be processed, reference to the object it is created for, sidechain transaction body, list of expected signers, list of received signatures, and the helper fields for calculating signature weights.

    SONs must then verify the proposal by locally re-creating transaction data (inputs, outputs, transfer value, sender, receiver) from the referred object, and comparing this copy to proposal. If data does not match, proposal will be deleted from proposal list and transaction won’t be completed. If data matches, system must approve the proposal. Approved proposals must result in object being published on the chain.

    Signing

    When the object is published on the chain, SONs specified on the list of expected signers must begin processing it in parallel. Note that SONs specified as signers must sign the transaction as long as they are online, disregarding their status (thus SON in any status must sign the transaction).

    Each SON that signs a transaction must sign with its own key and add its signature to the list o received signatures, pair with its son_id. SON weight will be added to the current_weight helper field.

    When adding each signature, sidechain transaction sign operation evaluator must check whether or not this signature is the last one required to complete sidechain transaction signing. If it’s not the last required signature, check is performed again when next signature is processed. If it is the last expected signature, system must mark sidechain transaction object as completed (set helper field complete to true). Note that transactions in ‘Completed’ state will not accept any more signatures, and it is possible that some SONs will continue sending signatures which will not be accepted (because enough signatures have been recorded). This is because SONs work and send their signatures in parallel and are unaware of incoming signatures from other SONs.

    Lastly, when scheduled SON detects that a sidechain transaction object has been completed, it must collect all data from the sidechain transaction object, compile it, convert to a format that is ready for transmission to Bitcoin network, and send this transaction to the Bitcoin network.

    7.3 Refund Scenario

    In some cases a transaction will not be processed by SONs (such as when active SONs threshold is not met), which will cause funds to wait until required number of active SONs become available. System must allow users to initiate refunds of their transactions.

    Refund scenario must adhere to same rules as regular bitcoin transaction:

    1. User needs transaction id for the transaction they wish to refund

    2. User creates another transaction using transaction id of transaction they want to refund to move funds to their own address

    3. User signs the transaction using a private key that matches the public key he provided in sidechain address mapping

    4. Transaction is pushed to bitcoin network and user is refunded once transaction is processed

    7.4 Deposit Implementation Options

    One-or-m-of-n

    This deposit address implementation type allows to send funds with m-of-n SONs signatures or with single user signature. To create such address, system needs:

    1. user public key

    2. n represented by active SONs public keys

    3. m represented by minimal required SONs signatures number.

    When funds are being sent from this address, system must first check signature and complete transaction if signature check is successful. Otherwise system uses public keys of active SONs until minimum number of signature has been collected.

    This address type is implemented by btc_one_or_m_of_n_multisig_address class.

    7.4 Current Deposit Address Implementation - One-or-weighted-multisig

    This deposit address implementation type allows to send funds from this address with 2/3 weights of SON votes (like in Primary Wallet) or with single user signature. To create such address we need:

    1. user public key

    2. all SONs public keys

    3. every SON weight

    When funds are being sent from this address, system must first check if user signature is correct. When signature is correct, system completes the transaction. Otherwise, when signature is incorrect, system checks for 2/3 weights of SON votes to complete the transaction.

    Note: This is the current implementation of the Deposit address.

    This address type is implemented by btc_one_or_weighted_multisig_address class.

    7.1.3 Timelocked-one-or-weighted-multisig

    This deposit address implementation type allows to send funds from this address with 2/3 weights of SON votes (like in Primary Wallet) or with single user signature after some latency. To create such address system needs:

    1. user public key,

    2. used latency

    3. all SONs public keys

    4. every SON weight

    When funds are being sent from this address, system must first check if user signature is correct. When signature is correct, system waits until latency is passed to complete the transaction. This differentiates this implementation option from simply one-or-weighted-multisig type. Otherwise, when signature is incorrect, system checks for 2/3 weights of SON votes to complete the transaction.

    note: nSquence must be greater than or equal to latency

    This address type is implemented by btc_timelocked_one_or_weighted_multisig_address class.

    8 Examples

    Transaction object

    signed transaction

    1. If data does not match, transaction is terminated

    2. If data matches, object is deemed ‘Confirmed'. Proceed to next step

  • Handler checks the number of active SONs

    1. If active SONs are > 5, proceed to next step

    2. If active SONs are < 5, store transaction for processing until required number of active SONs is available (this step will be repeated until SON availability requirement is met)

  • Issue proposal for for sidechain transaction create operation

  • Active SONs create local copies of transaction data to be verified against proposal

  • Proposal is verified by active sons by comparing local copies of transaction data to proposal

    1. If data does not match, proposal is not approved and will eventually expire thus terminating the transaction

    2. If data matches, proposal is approved. Proceed to next step

  • Transaction object containing a list of SONs expected to sign is created and published to the sidechain. List of SONs will be created based on list of active SONs

  • Expected SON signers initiate parallel processing of transaction. Offline SONs will not participate in signing and only the online SONs (regardless of status) will sign the transaction

  • Sign transaction

    1. Each signing SON adds its signature

    2. Each signing SON is added to list or received signatures

    3. Operation evaluator checks signatures to determine if latest signature is the last signature required to complete transaction signing

      1. If no, repeat this step after each SON’s signature

      2. If yes, mark transaction object as ‘Completed’ (helper field complete = true)

  • Scheduled SON detects completed transaction object

  • Transaction is converted to a readable format and sent to Bitcoin network

  • Transaction fee (for transfer operation)

    Comparison between scenarios for handling deposits and withdrawals
    class sidechain_transaction_object : public abstract_object<sidechain_transaction_object>
       {
          public:
             static const uint8_t space_id = protocol_ids;
             static const uint8_t type_id  = sidechain_transaction_object_type;
    
             sidechain_type sidechain;
             object_id_type object_id;
             std::string transaction;
             std::vector<son_info> signers;
             std::vector<std::pair<son_id_type, std::string>> signatures;
             std::string sidechain_transaction;
    
             uint32_t total_weight = 0;
             uint32_t current_weight = 0;
             uint32_t threshold = 0;
             bool valid = false;
             bool complete = false;
             bool sent = false;
       };
    [{
        "id": "1.33.1",
        "sidechain": "bitcoin",
        "object_id": "1.29.0",
        "transaction": "cHNidP8BAPcCAAAABTIvR/hoINpwrdMHX+E+8mD2VHUH6FNo3dSM6Zj/LDCVAAAAAAD/////cpDO5vkpGaDoVxqr34U4mMSOisJPKOKRmZzs0TtG5R8AAAAAAP////+CeCertGFFkLqCsLxmnsixdfaamoWkf+gon/zI4PRQqAAAAAAA/////6yLpx5Cs9XLFZlBGLpPbIJysTbWSbgHrLcAXw2egiVWAAAAAAD/////x3YsKjM4FYBOsAaEo54okcwYH8NSbEjpflPw3owJwwIAAAAAAP////8BQDRf9AAAAAAXqRRxjBH9wxXffPW/rhZpsGYZorm0IIcAAAAAAAAAAAAAAA==",
        "signers": [{
            "son_id": "1.27.0",
            "weight": 1,
            "signing_key": "TEST8TCQFzyYDp3DPgWZ24261fMPSCzXxVyoF3miWeTj6JTi2DZdrL",
            "sidechain_public_keys": [[
                "bitcoin",
                "03456772301e221026269d3095ab5cb623fc239835b583ae4632f99a15107ef275"
              ]
            ]
          },{
            "son_id": "1.27.1",
            "weight": 1,
            "signing_key": "TEST82qv1LKFvwVKD9pg5JQf6qqwLcoeqUniQjWJ3wKTodyWa7gHUs",
            "sidechain_public_keys": [[
                "bitcoin",
                "02d67c26cf20153fe7625ca1454222d3b3aeb53b122d8a0f7d32a3dd4b2c2016f4"
              ]
            ]
          },{
            "son_id": "1.27.2",
            "weight": 1,
            "signing_key": "TEST6xdp7MrEPnaNK9GuF3KTeTizgGN6JC5nPmxx81higFepSZ8N7r",
            "sidechain_public_keys": [[
                "bitcoin",
                "025f7cfda933516fd590c5a34ad4a68e3143b6f4155a64b3aab2c55fb851150f61"
              ]
            ]
          },{
            "son_id": "1.27.3",
            "weight": 1,
            "signing_key": "TEST55j32Up75gHCxJBPN18vEytL9anDgEVFtsaCii38keGQG71X22",
            "sidechain_public_keys": [[
                "bitcoin",
                "0228155bb1ddcd11c7f14a2752565178023aa963f84ea6b6a052bddebad6fe9866"
              ]
            ]
          },{
            "son_id": "1.27.4",
            "weight": 1,
            "signing_key": "TEST68bX5bB16GkEAig6w2WTh9NbM9nHa66CemnDRx2njRY9bbWXhU",
            "sidechain_public_keys": [[
                "bitcoin",
                "037500441cfb4484da377073459511823b344f1ef0d46bac1efd4c7c466746f666"
              ]
            ]
          },{
            "son_id": "1.27.5",
            "weight": 1,
            "signing_key": "TEST7mtTyM2rD18xDTtLTxWhq6W6zFgAgPFu9KHSFNsfWJXZNT8Wc8",
            "sidechain_public_keys": [[
                "bitcoin",
                "02ef0d79bfdb99ab0be674b1d5d06c24debd74bffdc28d466633d6668cc281cccf"
              ]
            ]
          },{
            "son_id": "1.27.6",
            "weight": 1,
            "signing_key": "TEST7RMDnipLkFaQ4vtDyVvgyCedRoxyT9JWpAoM9mrE7rwVSyezoB",
            "sidechain_public_keys": [[
                "bitcoin",
                "0317941e4219548682fb8d8e172f0a8ce4d83ce21272435c85d598558c8e060b7f"
              ]
            ]
          },{
            "son_id": "1.27.7",
            "weight": 1,
            "signing_key": "TEST51nSJ2q1C9htnYWfTv73JxEc4nBWPNxJtUGPGpD4XwxeLzAd8t",
            "sidechain_public_keys": [[
                "bitcoin",
                "0266065b27f7e3d3ad45b471b1cd4e02de73fc4737dc2679915a45e293c5adcf84"
              ]
            ]
          },{
            "son_id": "1.27.8",
            "weight": 1,
            "signing_key": "TEST8EmMMvQdAPzcnxymRUpbYdg8fArUY473QosCQpuPtWXxXtoNp4",
            "sidechain_public_keys": [[
                "bitcoin",
                "023821cc3da7be9e8cdceb8f146e9ddd78a9519875ecc5b42fe645af690544bccf"
              ]
            ]
          },{
            "son_id": "1.27.9",
            "weight": 1,
            "signing_key": "TEST5815xbKy73Bx1LJWW1jg7GshWSEFWub3uoiEFP7FtP6z4YZtkU",
            "sidechain_public_keys": [[
                "bitcoin",
                "0229ff2b2106b76c27c393e82d71c20eec32bcf1f0cf1a9aca8a237269a67ff3e5"
              ]
            ]
          },{
            "son_id": "1.27.10",
            "weight": 1,
            "signing_key": "TEST61qgG2v6JArygFiQCKypymxhBqg1wKmmbdkHeNkXhYDvkZmBtY",
            "sidechain_public_keys": [[
                "bitcoin",
                "024d113381cc09deb8a6da62e0470644d1a06de82be2725b5052668c8845a4a8da"
              ]
            ]
          },{
            "son_id": "1.27.11",
            "weight": 1,
            "signing_key": "TEST6z33kHxQxyGvFWfpAnL3X3MvLtPEBknkNeFFJyk63PvRtaN1Xo",
            "sidechain_public_keys": [[
                "bitcoin",
                "03df2462a5a2f681a3896f61964a65566ff77448be9a55a6da18506fd9c6c051c1"
              ]
            ]
          },{
            "son_id": "1.27.12",
            "weight": 1,
            "signing_key": "TEST55eCWenoKmZct5YvUYv7aphMmSVkroZTJZWFHGTVj8r8bKEPMd",
            "sidechain_public_keys": [[
                "bitcoin",
                "02bafba3096f546cc5831ce1e49ba7142478a659f2d689bbc70ed37235255172a8"
              ]
            ]
          },{
            "son_id": "1.27.13",
            "weight": 1,
            "signing_key": "TEST5e4HXhA4yBEGzaXVyjuVabKhG1qGghi6rypvq5fLxAmU9XLRHT",
            "sidechain_public_keys": [[
                "bitcoin",
                "0287bcbd4f5d357f89a86979b386402445d7e9a5dccfd16146d1d2ab0dc2c32ae8"
              ]
            ]
          },{
            "son_id": "1.27.14",
            "weight": 1,
            "signing_key": "TEST89qMuZejYeeGvjr3bMEcGyvhD4dyUchmxbLNUBFbPodqJKJPZc",
            "sidechain_public_keys": [[
                "bitcoin",
                "02053859d76aa375d6f343a60e3678e906c008015e32fe4712b1fd2b26473bdd73"
              ]
            ]
          }
        ],
        "signatures": [[
            "1.27.0",
            "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"
          ],[
            "1.27.1",
            ""
          ],[
            "1.27.2",
            "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"
          ],[
            "1.27.3",
            ""
          ],[
            "1.27.4",
            "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"
          ],[
            "1.27.5",
            "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"
          ],[
            "1.27.6",
            "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"
          ],[
            "1.27.7",
            "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"
          ],[
            "1.27.8",
            "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"
          ],[
            "1.27.9",
            "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"
          ],[
            "1.27.10",
            "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"
          ],[
            "1.27.11",
            "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"
          ],[
            "1.27.12",
            "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"
          ],[
            "1.27.13",
            "cHNidP8BAPcCAAAABTIvR/hoINpwrdMHX+E+8mD2VHUH6FNo3dSM6Zj/LDCVAAAAAAD/////cpDO5vkpGaDoVxqr34U4mMSOisJPKOKRmZzs0TtG5R8AAAAAAP////+CeCertGFFkLqCsLxmnsixdfaamoWkf+gon/zI4PRQqAAAAAAA/////6yLpx5Cs9XLFZlBGLpPbIJysTbWSbgHrLcAXw2egiVWAAAAAAD/////x3YsKjM4FYBOsAaEo54okcwYH8NSbEjpflPw3owJwwIAAAAAAP////8BQDRf9AAAAAAXqRRxjBH9wxXffPW/rhZpsGYZorm0IIcAAAAAAAEBIOB7mjsAAAAAF6kUu2OAlgSLheHVdDVz4c9KRZPNfS6HIgICh7y9T101f4moaXmzhkAkRdfppdzP0WFG0dKrDcLDKuhHMEQCIE2oCPTISY4ewMbOjuarfnVcC4m9G0OuaV2suXN8kkovAiBvAXgzyOsHvTnA9fVDzGEgkEZp6IPQ47uBBFbL4iov+QEBBCIAIF/NzjxitHdVO43JV6k1rdqDBcvUekCPB9LLhn1YgnnrAQX9AQJbIQNFZ3IwHiIQJiadMJWrXLYj/COYNbWDrkYy+ZoVEH7ydSEC1nwmzyAVP+diXKFFQiLTs661OxItig99MqPdSywgFvQhAl98/akzUW/VkMWjStSmjjFDtvQVWmSzqrLFX7hRFQ9hIQIoFVux3c0Rx/FKJ1JWUXgCOqlj+E6mtqBSvd661v6YZiEDdQBEHPtEhNo3cHNFlRGCOzRPHvDUa6we/Ux8RmdG9mYhAu8Neb/bmasL5nSx1dBsJN69dL/9wo1GZjPWZozCgczPIQMXlB5CGVSGgvuNjhcvCozk2DziEnJDXIXVmFWMjgYLfyECZgZbJ/fj061FtHGxzU4C3nP8RzfcJnmRWkXik8Wtz4QhAjghzD2nvp6M3OuPFG6d3XipUZh17MW0L+ZFr2kFRLzPIQIp/yshBrdsJ8OT6C1xwg7sMrzx8M8amsqKI3Jppn/z5SECTREzgcwJ3rim2mLgRwZE0aBt6CvicltQUmaMiEWkqNohA98kYqWi9oGjiW9hlkplVm/3dEi+mlWm2hhQb9nGwFHBIQK6+6MJb1RsxYMc4eSbpxQkeKZZ8taJu8cO03I1JVFyqCECh7y9T101f4moaXmzhkAkRdfppdzP0WFG0dKrDcLDKughAgU4Wddqo3XW80OmDjZ46QbACAFeMv5HErH9KyZHO91zX64AAQEg4HuaOwAAAAAXqRS7Y4CWBIuF4dV0NXPhz0pFk819LociAgKHvL1PXTV/iahpebOGQCRF1+ml3M/RYUbR0qsNwsMq6EcwRAIgMx/aUZFxRtME2jipIgOywXBxlf57pS7HkV+EVnvpy8MCIAodCFzk4Bt/U+TaP2Ym9NuxlC5cgcRdqMdQJNRdXRYfAQEEIgAgX83OPGK0d1U7jclXqTWt2oMFy9R6QI8H0suGfViCeesBBf0BAlshA0VncjAeIhAmJp0wlatctiP8I5g1tYOuRjL5mhUQfvJ1IQLWfCbPIBU/52JcoUVCItOzrrU7Ei2KD30yo91LLCAW9CECX3z9qTNRb9WQxaNK1KaOMUO29BVaZLOqssVfuFEVD2EhAigVW7HdzRHH8UonUlZReAI6qWP4Tqa2oFK93rrW/phmIQN1AEQc+0SE2jdwc0WVEYI7NE8e8NRrrB79THxGZ0b2ZiEC7w15v9uZqwvmdLHV0Gwk3r10v/3CjUZmM9ZmjMKBzM8hAxeUHkIZVIaC+42OFy8KjOTYPOISckNchdWYVYyOBgt/IQJmBlsn9+PTrUW0cbHNTgLec/xHN9wmeZFaReKTxa3PhCECOCHMPae+nozc648Ubp3deKlRmHXsxbQv5kWvaQVEvM8hAin/KyEGt2wnw5PoLXHCDuwyvPHwzxqayoojcmmmf/PlIQJNETOBzAneuKbaYuBHBkTRoG3oK+JyW1BSZoyIRaSo2iED3yRipaL2gaOJb2GWSmVWb/d0SL6aVabaGFBv2cbAUcEhArr7owlvVGzFgxzh5JunFCR4plny1om7xw7TcjUlUXKoIQKHvL1PXTV/iahpebOGQCRF1+ml3M/RYUbR0qsNwsMq6CECBThZ12qjddbzQ6YONnjpBsAIAV4y/kcSsf0rJkc73XNfrgABASDgFs0dAAAAABepFLtjgJYEi4Xh1XQ1c+HPSkWTzX0uhyICAoe8vU9dNX+JqGl5s4ZAJEXX6aXcz9FhRtHSqw3CwyroRzBEAiA2DDugiuEheUc+pW3yqLYPCdDsyhrUfvj0aHG+lhBmzgIgdYamIyCKP7Tt6OFmHF4OC0t/2HVSkNJxNENsbj8LAxwBAQQiACBfzc48YrR3VTuNyVepNa3agwXL1HpAjwfSy4Z9WIJ56wEF/QECWyEDRWdyMB4iECYmnTCVq1y2I/wjmDW1g65GMvmaFRB+8nUhAtZ8Js8gFT/nYlyhRUIi07OutTsSLYoPfTKj3UssIBb0IQJffP2pM1Fv1ZDFo0rUpo4xQ7b0FVpks6qyxV+4URUPYSECKBVbsd3NEcfxSidSVlF4AjqpY/hOpragUr3eutb+mGYhA3UARBz7RITaN3BzRZURgjs0Tx7w1GusHv1MfEZnRvZmIQLvDXm/25mrC+Z0sdXQbCTevXS//cKNRmYz1maMwoHMzyEDF5QeQhlUhoL7jY4XLwqM5Ng84hJyQ1yF1ZhVjI4GC38hAmYGWyf349OtRbRxsc1OAt5z/Ec33CZ5kVpF4pPFrc+EIQI4Icw9p76ejNzrjxRund14qVGYdezFtC/mRa9pBUS8zyECKf8rIQa3bCfDk+gtccIO7DK88fDPGprKiiNyaaZ/8+UhAk0RM4HMCd64ptpi4EcGRNGgbegr4nJbUFJmjIhFpKjaIQPfJGKlovaBo4lvYZZKZVZv93RIvppVptoYUG/ZxsBRwSECuvujCW9UbMWDHOHkm6cUJHimWfLWibvHDtNyNSVRcqghAoe8vU9dNX+JqGl5s4ZAJEXX6aXcz9FhRtHSqw3CwyroIQIFOFnXaqN11vNDpg42eOkGwAgBXjL+RxKx/SsmRzvdc1+uAAEBIOAWzR0AAAAAF6kUu2OAlgSLheHVdDVz4c9KRZPNfS6HIgICh7y9T101f4moaXmzhkAkRdfppdzP0WFG0dKrDcLDKuhHMEQCIBPN4/s98aGd7Uql0vpHXfXJ2vvd35R/4HVzQaGv7NtzAiBAJc5JJOp8ns5EJCUnvz3K+sMMbwhtbDUnEKXy+fz/PQEBBCIAIF/NzjxitHdVO43JV6k1rdqDBcvUekCPB9LLhn1YgnnrAQX9AQJbIQNFZ3IwHiIQJiadMJWrXLYj/COYNbWDrkYy+ZoVEH7ydSEC1nwmzyAVP+diXKFFQiLTs661OxItig99MqPdSywgFvQhAl98/akzUW/VkMWjStSmjjFDtvQVWmSzqrLFX7hRFQ9hIQIoFVux3c0Rx/FKJ1JWUXgCOqlj+E6mtqBSvd661v6YZiEDdQBEHPtEhNo3cHNFlRGCOzRPHvDUa6we/Ux8RmdG9mYhAu8Neb/bmasL5nSx1dBsJN69dL/9wo1GZjPWZozCgczPIQMXlB5CGVSGgvuNjhcvCozk2DziEnJDXIXVmFWMjgYLfyECZgZbJ/fj061FtHGxzU4C3nP8RzfcJnmRWkXik8Wtz4QhAjghzD2nvp6M3OuPFG6d3XipUZh17MW0L+ZFr2kFRLzPIQIp/yshBrdsJ8OT6C1xwg7sMrzx8M8amsqKI3Jppn/z5SECTREzgcwJ3rim2mLgRwZE0aBt6CvicltQUmaMiEWkqNohA98kYqWi9oGjiW9hlkplVm/3dEi+mlWm2hhQb9nGwFHBIQK6+6MJb1RsxYMc4eSbpxQkeKZZ8taJu8cO03I1JVFyqCECh7y9T101f4moaXmzhkAkRdfppdzP0WFG0dKrDcLDKughAgU4Wddqo3XW80OmDjZ46QbACAFeMv5HErH9KyZHO91zX64AAQEg4FyQQQAAAAAXqRS7Y4CWBIuF4dV0NXPhz0pFk819LociAgKHvL1PXTV/iahpebOGQCRF1+ml3M/RYUbR0qsNwsMq6EcwRAIgV+s0NoLJ++j64n+ya8BagJucZFdhixKXB4HZ9RyKiXoCIF9OtFMsc1+RWMY5Kn8RGCf0aIBWAltlc93glBP7BX4/AQEEIgAgX83OPGK0d1U7jclXqTWt2oMFy9R6QI8H0suGfViCeesBBf0BAlshA0VncjAeIhAmJp0wlatctiP8I5g1tYOuRjL5mhUQfvJ1IQLWfCbPIBU/52JcoUVCItOzrrU7Ei2KD30yo91LLCAW9CECX3z9qTNRb9WQxaNK1KaOMUO29BVaZLOqssVfuFEVD2EhAigVW7HdzRHH8UonUlZReAI6qWP4Tqa2oFK93rrW/phmIQN1AEQc+0SE2jdwc0WVEYI7NE8e8NRrrB79THxGZ0b2ZiEC7w15v9uZqwvmdLHV0Gwk3r10v/3CjUZmM9ZmjMKBzM8hAxeUHkIZVIaC+42OFy8KjOTYPOISckNchdWYVYyOBgt/IQJmBlsn9+PTrUW0cbHNTgLec/xHN9wmeZFaReKTxa3PhCECOCHMPae+nozc648Ubp3deKlRmHXsxbQv5kWvaQVEvM8hAin/KyEGt2wnw5PoLXHCDuwyvPHwzxqayoojcmmmf/PlIQJNETOBzAneuKbaYuBHBkTRoG3oK+JyW1BSZoyIRaSo2iED3yRipaL2gaOJb2GWSmVWb/d0SL6aVabaGFBv2cbAUcEhArr7owlvVGzFgxzh5JunFCR4plny1om7xw7TcjUlUXKoIQKHvL1PXTV/iahpebOGQCRF1+ml3M/RYUbR0qsNwsMq6CECBThZ12qjddbzQ6YONnjpBsAIAV4y/kcSsf0rJkc73XNfrgAA"
          ],[
            "1.27.14",
            "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"
          ]
        ],
        "sidechain_transaction": "",
        "total_weight": 15,
        "current_weight": 13,
        "threshold": 11,
        "valid": true,
        "complete": true,
        "sent": true
      }
    ]