Documentation
¶
Index ¶
- Constants
- func Initialize(ctx context.Context, config Config, spvChain Chain, btcDiffChain btcdiff.Chain, ...)
- func SubmitDepositSweepProof(transactionHash bitcoin.Hash, requiredConfirmations uint, ...) error
- func SubmitRedemptionProof(transactionHash bitcoin.Hash, requiredConfirmations uint, ...) error
- type Chain
- type Config
Constants ¶
View Source
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 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 values represent:
// - deposit request which is non-nil only when the deposit request was
// found,
// - boolean value which is true if the deposit request was found, false
// otherwise,
// - error which is non-nil only when the function execution failed. It will
// be nil if the deposit request was not found, but the function execution
// succeeded.
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)
// 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
// 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)
}
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.
Click to show internal directories.
Click to hide internal directories.