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.