Documentation
¶
Index ¶
- Constants
- func Initialize(ctx context.Context, config Config, spvChain Chain, btcDiffChain btcdiff.Chain, ...)
- func SubmitDepositSweepProof(transactionHash bitcoin.Hash, requiredConfirmations uint, ...) error
- func SubmitMovedFundsSweepProof(transactionHash bitcoin.Hash, requiredConfirmations uint, ...) error
- func SubmitMovingFundsProof(transactionHash bitcoin.Hash, requiredConfirmations uint, ...) error
- func SubmitRedemptionProof(transactionHash bitcoin.Hash, requiredConfirmations uint, ...) error
- type Chain
- type Config
Constants ¶
const ( // DefaultHistoryDepth is the default value for history depth which is the // number of blocks to look back from the current block when searching for // past wallet-related events. The value is the approximate number of // Ethereum blocks in a week, assuming one block is 12s. DefaultHistoryDepth = 50400 // DefaultTransactionLimit is the default value for the limit of // transactions returned for a given wallet public key hash. The value is // based on the frequency of how often wallet transactions will happen. // For example, deposit sweep transactions are assumed to happen every 48h. // Redemption transactions are assumed to happen every 3h. The wallet should // refuse any proposals from the coordinator if the previously executed // Bitcoin transaction was not proved to the Bridge yet so in theory, the // value of 1 should be enough. We make it a bit higher - better to be // safe than sorry. DefaultTransactionLimit = 20 // DefaultRestartBackoffTime is the default value for restart back-off time. DefaultRestartBackoffTime = 30 * time.Minute // DefaultIdleBackOffTime is the default value for idle back-off time. DefaultIdleBackOffTime = 10 * time.Minute )
Variables ¶
This section is empty.
Functions ¶
func Initialize ¶
func SubmitDepositSweepProof ¶
func SubmitDepositSweepProof( transactionHash bitcoin.Hash, requiredConfirmations uint, btcChain bitcoin.Chain, spvChain Chain, ) error
SubmitDepositSweepProof prepares deposit sweep proof for the given transaction and submits it to the on-chain contract. If the number of required confirmations is `0`, an error is returned.
func SubmitMovedFundsSweepProof ¶
func SubmitMovedFundsSweepProof( transactionHash bitcoin.Hash, requiredConfirmations uint, btcChain bitcoin.Chain, spvChain Chain, ) error
SubmitMovedFundsSweepProof prepares moved funds sweep proof for the given transaction and submits it to the on-chain contract. If the number of required confirmations is `0`, an error is returned.
func SubmitMovingFundsProof ¶
func SubmitMovingFundsProof( transactionHash bitcoin.Hash, requiredConfirmations uint, btcChain bitcoin.Chain, spvChain Chain, ) error
SubmitMovingFundsProof prepares moving funds proof for the given transaction and submits it to the on-chain contract. If the number of required confirmations is `0`, an error is returned.
func SubmitRedemptionProof ¶
func SubmitRedemptionProof( transactionHash bitcoin.Hash, requiredConfirmations uint, btcChain bitcoin.Chain, spvChain Chain, ) error
SubmitRedemptionProof prepares redemption proof for the given transaction and submits it to the on-chain contract. If the number of required confirmations is `0`, an error is returned.
Types ¶
type Chain ¶
type Chain interface { // SubmitDepositSweepProofWithReimbursement submits the deposit sweep proof // via MaintainerProxy. It is used to prove the deposit sweep Bitcoin // transaction and update depositors' balances. The caller is reimbursed. SubmitDepositSweepProofWithReimbursement( transaction *bitcoin.Transaction, proof *bitcoin.SpvProof, mainUTXO bitcoin.UnspentTransactionOutput, vault common.Address, ) error // GetDepositRequest gets the on-chain deposit request for the given // funding transaction hash and output index. The returned bool value // indicates whether the request was found or not. GetDepositRequest( fundingTxHash bitcoin.Hash, fundingOutputIndex uint32, ) (*tbtc.DepositChainRequest, bool, error) GetWallet( walletPublicKeyHash [20]byte, ) (*tbtc.WalletChainData, error) // ComputeMainUtxoHash computes the hash of the provided main UTXO // according to the on-chain Bridge rules. ComputeMainUtxoHash(mainUtxo *bitcoin.UnspentTransactionOutput) [32]byte // TxProofDifficultyFactor returns the number of confirmations on the // Bitcoin chain required to successfully evaluate an SPV proof. TxProofDifficultyFactor() (*big.Int, error) // BlockCounter returns the chain's block counter. BlockCounter() (chain.BlockCounter, error) // GetPendingRedemptionRequest gets the on-chain pending redemption request // for the given wallet public key hash and redeemer output script. // The returned bool value indicates whether the request was found or not. GetPendingRedemptionRequest( walletPublicKeyHash [20]byte, redeemerOutputScript bitcoin.Script, ) (*tbtc.RedemptionRequest, bool, error) // GetMovedFundsSweepRequest gets the on-chain moved funds sweep request for // the given moving funds transaction hash and output index. // The returned bool value indicates whether the request was found or not. GetMovedFundsSweepRequest( movingFundsTxHash bitcoin.Hash, movingFundsTxOutpointIndex uint32, ) (*tbtc.MovedFundsSweepRequest, bool, error) // SubmitRedemptionProofWithReimbursement submits the redemption proof // via MaintainerProxy. The caller is reimbursed. SubmitRedemptionProofWithReimbursement( transaction *bitcoin.Transaction, proof *bitcoin.SpvProof, mainUTXO bitcoin.UnspentTransactionOutput, walletPublicKeyHash [20]byte, ) error // SubmitMovingFundsProofWithReimbursement submits the moving funds proof // via MaintainerProxy. The caller is reimbursed. SubmitMovingFundsProofWithReimbursement( transaction *bitcoin.Transaction, proof *bitcoin.SpvProof, mainUTXO bitcoin.UnspentTransactionOutput, walletPublicKeyHash [20]byte, ) error // SubmitMovedFundsSweepProofWithReimbursement submits the moved funds sweep // proof via MaintainerProxy. The caller is reimbursed. SubmitMovedFundsSweepProofWithReimbursement( transaction *bitcoin.Transaction, proof *bitcoin.SpvProof, mainUTXO bitcoin.UnspentTransactionOutput, ) error // PastDepositRevealedEvents fetches past deposit reveal events according // to the provided filter or unfiltered if the filter is nil. Returned // events are sorted by the block number in the ascending order, i.e. the // latest event is at the end of the slice. PastDepositRevealedEvents( filter *tbtc.DepositRevealedEventFilter, ) ([]*tbtc.DepositRevealedEvent, error) // PastRedemptionRequestedEvents fetches past redemption requested events according // to the provided filter or unfiltered if the filter is nil. Returned // events are sorted by the block number in the ascending order, i.e. the // latest event is at the end of the slice. PastRedemptionRequestedEvents( filter *tbtc.RedemptionRequestedEventFilter, ) ([]*tbtc.RedemptionRequestedEvent, error) // PastMovingFundsCommitmentSubmittedEvents fetches past moving funds // commitment submitted events according to the provided filter or // unfiltered if the filter is nil. Returned events are sorted by the block // number in the ascending order, i.e. the latest event is at the end of the // slice. PastMovingFundsCommitmentSubmittedEvents( filter *tbtc.MovingFundsCommitmentSubmittedEventFilter, ) ([]*tbtc.MovingFundsCommitmentSubmittedEvent, error) }
type Config ¶
type Config struct { // Enabled indicates whether the SPV maintainer should be started. Enabled bool // HistoryDepth is the number of blocks to look back from the current block // when searching for past wallet-related events. To find Bitcoin transactions // for which the SPV proof should be submitted, the maintainer first inspects // the appropriate type of wallet-related events. This depth determines how // far into the past the system will consider events for processing. This // value must not be too high so that the event lookup is efficient. At the // same time, this value can not be too low to make sure all performed and // not yet proven transactions can be found. HistoryDepth uint64 // TransactionLimit sets the maximum number of confirmed transactions // returned when getting transactions for a public key hash. Once the // maintainer establishes the list of wallets, it needs to check Bitcoin // transactions executed by each wallet. Then, it tries to find the // transactions matching the given proposal type. For example, if set // to `20`, only the latest twenty transactions will be returned. This // value must not be too high so that the transaction lookup is efficient. // At the same time, this value can not be too low to make sure the // performed proposal's transaction can be found in case the wallet decided // to execute some other Bitcoin transaction after the yet-not-proven // transaction. TransactionLimit int // RestartBackoffTime is a restart backoff which should be applied when the // SPV maintainer is restarted. It helps to avoid being flooded with error // logs in case of a permanent error in the SPV maintainer. RestartBackoffTime time.Duration // IdleBackoffTime is a wait time which should be applied when there are no // more transaction proofs to submit. IdleBackoffTime time.Duration }
Config holds configurable properties.