Documentation ¶
Index ¶
- Constants
- type CalculationType
- type Emission
- type EthereumAnnouncement
- type EthereumAppFees
- type EthereumApplicationEvent
- type EthereumApplicationTransfer
- type EthereumBlockLog
- type EthereumDecoratedTransaction
- type EthereumDecoratedTransfer
- type EthereumHintedBlock
- type EthereumReward
- type EthereumSpooledLpRewards
- type EthereumSpooledRewards
- type EthereumWinnerAnnouncement
- type EthereumWorkerDecorator
- type FeeSwitch
- type Payout
- type SolanaAppFees
- type SolanaApplicationTransaction
- type SolanaBufferedApplicationTransactions
- type SolanaBufferedParsedTransactions
- type SolanaBufferedTransfers
- type SolanaDecoratedTransfer
- type SolanaParsedTransaction
- type SolanaWinnerAnnouncement
- type SolanaWork
- type SolanaWorkerDecorator
- type SpecialPoolOptions
- type SuiAppFees
- type SuiWorkerDecorator
- type TransferWithFee
- type TrfMode
- type UtilityVars
- type WorkerConfigEthereum
- type WorkerConfigSolana
- type WorkerConfigSui
Constants ¶
const ( // FeeSwitchReasonDatabase when a fee switch is found in the database FeeSwitchReasonDatabase = "database" // FeeSwitchReasonAmm when a fee switch happens because the recipient is the AMM FeeSwitchReasonAmm = "amm" )
Variables ¶
This section is empty.
Functions ¶
This section is empty.
Types ¶
type CalculationType ¶
type CalculationType string
CalculationType to determine how payouts are calculated
const ( // CalculationTypeNormal to indicate the calculation type that the // fluid token and tokens like it use (normal trf operation) CalculationTypeNormal CalculationType = "" // CalculationTypeWorkerOverrides to indicate the calculation type used for // tokens that don't use the optimistic solution and may have workerconfig overrides CalculationTypeWorkerOverrides CalculationType = "worker config overrides" )
type Emission ¶
type Emission struct { LastUpdated time.Time `json:"last_updated"` Network string `json:"network"` TokenDetails token_details.TokenDetails `json:"token_details"` TransactionHash string `json:"transaction_hash"` RecipientAddress string `json:"recipient_address"` SenderAddress string `json:"sender_address"` EthereumBlockNumber misc.BigInt `json:"ethereum_block_number"` SolanaSlotNumber misc.BigInt `json:"solana_slot_number"` SuiCheckpointNumber misc.BigInt `json:"sui_checkpoint_number"` AverageTransfersInBlock float64 `json:"average_transfers_in_block"` AtxBufferSize int `json:"atx_buffer_size"` TransfersInBlock int `json:"transfers_in_block"` TransfersPast string `json:"transfers_past"` SecondsSinceLastBlock uint64 `json:"seconds_since_last_block"` GasLimit misc.BigInt `json:"gas_limit"` GasPrice misc.BigInt `json:"gas_price"` GasTipCap misc.BigInt `json:"gas_tip_cap"` GasLimitNormal float64 `json:"gas_limit_normal"` GasTipCapNormal float64 `json:"gas_tip_cap_normal"` GasUsed misc.BigInt `json:"gas_used"` GasUsedNormal float64 `json:"gas_used_normal"` TransferFeeNormal float64 `json:"transfer_fee_normal"` BlockBaseFee misc.BigInt `json:"block_base_fee"` BlockBaseFeeNormal float64 `json:"block_base_fee_normal"` MaxPriorityFeePerGas misc.BigInt `json:"max_priority_fee_per_gas"` MaxPriorityFeePerGasNormal float64 `json:"max_priority_fee_per_gas_normal"` MaxFeePerGas misc.BigInt `json:"max_fee_per_gas"` MaxFeePerGasNormal float64 `json:"max_fee_per_gas_normal"` EffectiveGasPriceNormal float64 `json:"effective_gas_price_normal"` Payout struct { Winnings float64 `json:"winnings"` // Winnings P float64 `json:"p"` // Probability A float64 `json:"a"` M int64 `json:"m"` // Winning classes / divisions G float64 `json:"g"` // Gas fee B int64 `json:"b"` // Balls in a single ticket Delta float64 `json:"delta"` ApyPlusDelta float64 `json:"apy+delta"` Atx float64 `json:"atx"` // Annual number fluid transactions Apy float64 `json:"apy"` // Annual percentage yield BpyForStakedUsd float64 `json:"bpy_for_staked_usd"` // Yield for USD BlockTime uint64 `json:"block_time"` // Block time RewardPool float64 `json:"reward_pool"` } `json:"payout"` // app fees for solana transactions SolanaAppFees SolanaAppFees `json:"solana_fees"` // app fees for eth transactions EthereumAppFees EthereumAppFees `json:"ethereum_fees"` // app fees for sui transactions SuiAppFees SuiAppFees `json:"sui_fees"` // calculate n function CalculateN struct { ProbabilityM float64 `json:"probability_m"` Factorial float64 `json:"factorial"` Atx float64 `json:"atx"` N int64 `json:"n"` } `json:"calculate_n"` NaiveIsWinning struct { TestingBalls []uint32 `json:"testing_balls"` IsWinning bool `json:"is_winning"` MatchedBalls int `json:"matched_balls"` } `json:"naive_is_winning"` CalculateBpy struct { BlockTimeInSeconds uint64 `json:"block_time_in_seconds"` CompSupplyApy float64 `json:"comp_supply_apy"` BlockTimeInSecondsMultipliedByCompSupplyApy float64 `json:"block_time_in_seconds_multiplied_by_comp_supply_apy"` } `json:"calculate_bpy"` AaveGetTokenApy struct { DepositApr float64 `json:"deposit_apr"` APRPerDay float64 `json:"apr_per_day"` OnePlusAprPerDay float64 `json:"one_plus_apr_per_day"` CompoundedApr float64 `json:"compounded_apr"` DepositApy float64 `json:"deposit_apy"` } `json:"aave_get_token_apy"` CompoundGetTokenApy struct { BlocksPerDay uint64 `json:"blocks_per_day"` SupplyRatePerBlockDivEthMantissa float64 `json:"supply_rate_per_block_div_eth_mantissa"` SupplyRatePerBlockMulBlocksPerDay float64 `json:"supply_rate_per_block_mul_blocks_per_day"` PowLeftSide float64 `json:"pow_left_side"` PowLeftSideDaysPerYear float64 `json:"pow_left_side_days_per_year"` SupplyApy float64 `json:"supply_apy"` } `json:"compound_get_token_apy"` WinningChances struct { AtxAtEnd float64 `json:"atx_at_end"` Payout1 float64 `json:"payout_1"` Payout2 float64 `json:"payout_2"` Payout3 float64 `json:"payout_3"` Payout4 float64 `json:"payout_4"` Payout5 float64 `json:"payout_5"` Probability1 float64 `json:"probability_1"` Probability2 float64 `json:"probability_2"` Probability3 float64 `json:"probability_3"` Probability4 float64 `json:"probability_4"` Probability5 float64 `json:"probability_5"` TotalBpy float64 `json:"total_bpy"` DistributionPools string `json:"distribution_pools"` } `json:"winning_chances"` // FeeSwitchSender if enabled and their custom arguments FeeSwitchSender struct { OriginalAddress string `json:"original_address"` NewAddress string `json:"new_address"` Reason string `json:"fee_switch_reason"` } `json:"fee_switch_sender"` // FeeSwitchRecipient if enabled and their custom arguments FeeSwitchRecipient struct { OriginalAddress string `json:"original_address"` NewAddress string `json:"new_address"` Reason string `json:"fee_switch_reason"` } `json:"fee_switch_recipient"` // SpecialPoolOptions enabled by enabling the utility mining feature SpecialPoolOptions struct { PayoutFreqOverride float64 `json:"payout_freq_override"` DeltaWeightOverride float64 `json:"delta_weight_override"` WinningClassesOverride float64 `json:"winning_classes_override"` } `json:"special_pool_options"` }
Emission contains information on the modelling information that led up to the rewarding of the user
func NewEthereumEmission ¶
func NewEthereumEmission() *Emission
func NewSolanaEmission ¶
func NewSolanaEmission() *Emission
func NewSuiEmission ¶
func NewSuiEmission() *Emission
type EthereumAnnouncement ¶
type EthereumAnnouncement struct { TransactionHash ethereum.Hash `json:"transaction_hash"` BlockNumber *misc.BigInt `json:"block_number"` LogIndex *misc.BigInt `json:"log_index"` FromAddress ethereum.Address `json:"from_address"` ToAddress ethereum.Address `json:"to_address"` RandomSource []uint32 `json:"random_source"` RandomPayouts map[applications.UtilityName][]Payout `json:"random_payouts"` TokenDetails token_details.TokenDetails `json:"token_details"` Emissions Emission `json:"emissions"` Application applications.Application `json:"application"` Decorator *EthereumWorkerDecorator `json:"decorator"` }
EthereumAnnouncement contains the data to call the reward function of the contract with
type EthereumAppFees ¶
type EthereumAppFees struct { UniswapV3 float64 `json:"uniswap_v3",` UniswapV2 float64 `json:"uniswap_v2"` BalancerV2 float64 `json:"balancer_v2"` OneInchV2 float64 `json:"oneinch_v2"` OneInchV1 float64 `json:"oneinch_v1"` Mooniswap float64 `json:"mooniswap"` OneInchFixedRate float64 `json:"oneinch_fixedrate"` DodoV2 float64 `json:"dodo_v2"` Curve float64 `json:"curve"` // Multichain is no longer used, but is kept here to be consistent with the database. Multichain float64 `json:"multichain"` XyFinance float64 `json:"xyfinance"` Apeswap float64 `json:"apeswap"` Saddle float64 `json:"saddle"` GTradeV6_1 float64 `json:"gtrade_v6_1"` Meson float64 `json:"meson"` Camelot float64 `json:"camelot"` CamelotV3 float64 `json:"camelot_v3"` Chronos float64 `json:"chronos"` Sushiswap float64 `json:"sushiswap"` KyberClassic float64 `json:"kyber_classic"` Wombat float64 `json:"wombat"` SeawaterAmm float64 `json:"seawater_amm"` TraderJoe float64 `json:"trader_joe"` Lifi float64 `json:"lifi"` Odos float64 `json:"odos"` BetSwirl float64 `json:"betswirl"` Paraswap float64 `json:"paraswap"` Pancakeswap float64 `json:"pancakeswap"` }
app fees for ethereum transactions
type EthereumApplicationEvent ¶
type EthereumApplicationEvent struct { ApplicationTransfers []EthereumApplicationTransfer `json:"application_transfers"` BlockLog EthereumBlockLog `json:"block_log"` }
An event the worker server sends for processing when it finds a log of interest
type EthereumApplicationTransfer ¶
type EthereumApplicationTransfer struct { TransactionHash ethereum.Hash `json:"transaction"` // the log classified as an application transfer // to be processed by the application server Log ethereum.Log `json:"log"` // an enum representing the application this // transfer is produced by Application applications.Application `json:"application"` }
An individual log included in an application event
type EthereumBlockLog ¶
type EthereumBlockLog struct { BlockHash ethereum.Hash `json:"block_hash"` BlockBaseFee misc.BigInt `json:"block_base_fee"` BlockTime uint64 `json:"block_time"` BaseFee misc.BigInt `json:"base_fee"` Logs []ethereum.Log `json:"logs"` Transactions []ethereum.Transaction `json:"transactions"` BlockNumber misc.BigInt `json:"block_number"` }
type EthereumDecoratedTransaction ¶
type EthereumDecoratedTransaction struct { Transaction ethereum.Transaction `json:"transaction"` Receipt ethereum.Receipt `json:"receipt"` Transfers []EthereumDecoratedTransfer `json:"transfers"` }
EthereumDecoratedTransaction is a transaction, its receipt, and any associated transfers
type EthereumDecoratedTransfer ¶
type EthereumDecoratedTransfer struct { TransactionHash ethereum.Hash `json:"transaction_hash"` // Parties involved in the swap, where sender recieves the majority // of a potential reward, and one party could be a smart contract SenderAddress ethereum.Address `json:"sender_address"` RecipientAddress ethereum.Address `json:"recipient_address"` LogIndex *misc.BigInt `json:"log_index"` Decorator *EthereumWorkerDecorator `json:"decorator"` AppEmissions EthereumAppFees `json:"app_emissions"` }
Transfer with application information attached
type EthereumHintedBlock ¶
type EthereumHintedBlock struct { BlockHash ethereum.Hash `json:"block_hash"` BlockBaseFee misc.BigInt `json:"block_base_fee"` BlockTime uint64 `json:"block_time"` BlockNumber misc.BigInt `json:"block_number"` DecoratedTransactions map[ethereum.Hash]EthereumDecoratedTransaction `json:"decorated_transfers"` }
Hinted block sent from the application server
type EthereumReward ¶
type EthereumReward struct { Category string `json:"category"` Winner ethereum.Address `json:"winner"` WinAmount *misc.BigInt `json:"amount"` Utilityname applications.UtilityName `json:"utility"` TransactionHash ethereum.Hash `json:"transaction_hash"` BlockNumber *misc.BigInt `json:"block_number"` TokenDetails token_details.TokenDetails `json:"token_details"` Network network.BlockchainNetwork `json:"network"` }
type EthereumSpooledLpRewards ¶
type EthereumSpooledLpRewards struct { Rewards map[applications.UtilityName]misc.BigInt `json:"rewards"` Address ethereum.Address `json:"address"` }
type EthereumSpooledRewards ¶
type EthereumSpooledRewards struct { Network network.BlockchainNetwork `json:"network"` Token token_details.TokenDetails `json:"token_details"` FirstBlock *misc.BigInt `json:"first_block"` LastBlock *misc.BigInt `json:"last_block"` Rewards map[applications.UtilityName]map[ethereum.Address]misc.BigInt `json:"rewards"` }
type EthereumWinnerAnnouncement ¶
type EthereumWinnerAnnouncement struct { Network network.BlockchainNetwork `json:"network"` TransactionHash ethereum.Hash `json:"transaction_hash"` LogIndex *misc.BigInt `json:"log_index"` BlockNumber *misc.BigInt `json:"block_number"` FromAddress ethereum.Address `json:"from_address"` ToAddress ethereum.Address `json:"to_address"` FromWinAmount map[applications.UtilityName]Payout `json:"from_win_amount"` ToWinAmount map[applications.UtilityName]Payout `json:"to_win_amount"` TokenDetails token_details.TokenDetails `json:"token_details"` Application applications.Application `json:"application"` Decorator *EthereumWorkerDecorator `json:"decorator"` RewardTier int `json:"reward_tier"` }
type EthereumWorkerDecorator ¶
type EthereumWorkerDecorator struct { // Enum corresponding to the application Application applications.Application `json:"application"` // optional utility corresponding to the application UtilityName applications.UtilityName `json:"utility_name"` // Application fee in USD ApplicationFee *big.Rat `json:"application_fee"` Volume *big.Int `json:"volume"` ApplicationData applications.ApplicationData `json:"application_data"` }
Decorator attached to a transfer, able to be expanded to include application data as needed
type Payout ¶
type Payout struct { // amount in native tokens, can be passed to chain Native misc.BigInt // amount normalised to usd (native/1e(decimals)*exchangeRate) for the spooler // this is a float and might be imprecise! Usd float64 }
Payout to store details on payouts in different token units
type SolanaAppFees ¶
type SolanaAppFees struct { Saber float64 `json:"saber"` Orca float64 `json:"orca"` Raydium float64 `json:"raydium"` AldrinV1 float64 `json:"aldrin_v1"` AldrinV2 float64 `json:"aldrin_v2"` Lifinity float64 `json:"lifinity"` }
app fees for solana transactions
type SolanaApplicationTransaction ¶
type SolanaApplicationTransaction struct { Signature string `json:"signature"` Result solana.TransactionResult `json:"result"` AdjustedFee *big.Rat `json:"adjusted_fee"` Applications []applications.Application `json:"applications"` }
SolanaApplicationTransaction is a solana transaction that is relevant to fluidity with some added metadata
type SolanaBufferedApplicationTransactions ¶
type SolanaBufferedApplicationTransactions struct { Transactions []SolanaApplicationTransaction `json:"transactions"` Slot uint64 `json:"slot"` }
type SolanaBufferedParsedTransactions ¶
type SolanaBufferedParsedTransactions struct { Transactions []SolanaParsedTransaction `json:"transactions"` Slot uint64 `json:"slot"` }
SolanaBufferedParsedTransactions is several SolanaParsedTransaction objects, buffered by slot
type SolanaBufferedTransfers ¶
type SolanaBufferedTransfers struct { Transfers []SolanaDecoratedTransfer `json:"transfers"` SecondsSinceLastSlot uint64 `json:"seconds_since_last_slot"` }
SolanaBufferedTransfers buffers decorated transfers by slot
type SolanaDecoratedTransfer ¶
type SolanaDecoratedTransfer struct { // Transaction containing the event Transaction SolanaApplicationTransaction `json:"transaction"` Token token_details.TokenDetails `json:"token_details"` // SPL accounts of the parties involved in the swap, // where sender recieves the majority of a potential reward, // and one party could be a smart contract SenderSplAddress string `json:"sender_spl_address"` RecipientSplAddress string `json:"recipient_spl_address"` // addresses of the accounts that own the SPL accounts SenderOwnerAddress string `json:"sender_owner_address"` RecipientOwnerAddress string `json:"recipient_owner_address"` Decorator *SolanaWorkerDecorator `json:"decorator"` AppEmissions SolanaAppFees `json:"app_emissions"` }
SolanaDecoratedTransfer contains a solana transfer, and optionally, an adjusted app fee
type SolanaParsedTransaction ¶
type SolanaParsedTransaction struct { Transaction SolanaApplicationTransaction `json:"transaction"` Transfers []user_actions.UserAction `json:"transfers"` }
SolanaParsedTransaction is a solana transaction with spl user actions
type SolanaWinnerAnnouncement ¶
type SolanaWinnerAnnouncement struct { WinningTransactionHash string `json:"transaction_winning"` SenderAddress string `json:"sender_address"` RecipientAddress string `json:"receiver_address"` WinningAmount uint64 `json:"winning_amount"` TokenName string `json:"token_name"` FluidMintPubkey string `json:"fluid_mint_pubkey"` Emissions Emission `json:"emissions"` }
SolanaWinnerAnnouncement to use to report a winner and its randomness
type SolanaWork ¶
type SolanaWork struct { BufferedTransfers SolanaBufferedTransfers `json:"buffered_transfers"` Tvl uint64 `json:"tvl"` MintSupply uint64 `json:"mint_supply"` }
SolanaWork augments SolanaBufferedTransfers with tvl and mint details
type SolanaWorkerDecorator ¶
SolanaWorkerDecorator contains an adjusted application fee (able to be expanded with more specific app details)
type SpecialPoolOptions ¶
type SuiWorkerDecorator ¶
type SuiWorkerDecorator struct { // SuiAppFees for emissions SuiAppFees SuiAppFees `json:"sui_app_fees"` // optional utility corresponding to the application UtilityName applications.UtilityName `json:"utility_name"` // Application fee in USD ApplicationFee *big.Rat `json:"application_fee"` Volume *big.Rat `json:"volume"` }
type TransferWithFee ¶
type TransferWithFee struct { UserAction user_actions.UserAction Event *models.SuiEventResponse Checkpoint misc.BigInt Decorator *SuiWorkerDecorator }
type UtilityVars ¶
type UtilityVars struct { // Name is the unique onchain id for this utility Name applications.UtilityName `json:"utility_name"` // PoolSizeNative is the amount of token to distribute in native tokens PoolSizeNative *big.Rat `json:"pool_size"` // TokenDecimalsScale is 1e(decimals) TokenDecimalsScale *big.Rat `json:"token_decimals"` // ExchangeRate is the number for which (usd value)/(exchange rate)*(decimal scale) = (native amount) ExchangeRate *big.Rat `json:"exchange_rate"` // DeltaWeight is the frequency with which to distribute tokens // For normal tokens, this is the number of seconds in a year (31536000) DeltaWeight *big.Rat `json:"delta_weight"` CalculationType CalculationType `json:"calculation_method"` }
UtilityVars to store the amount of token and its distribution rate, for payout calculations
func (UtilityVars) DebugString ¶
func (v UtilityVars) DebugString() string
DebugString the UtilityVars, returning "name:pool size:token decimals scale:exchange rate:delta weight" for logging purposes
type WorkerConfigEthereum ¶
type WorkerConfigEthereum struct { Network network.BlockchainNetwork `json:"network"` CompoundBlocksPerDay int `json:"compound_blocks_per_day"` DefaultSecondsSinceLastBlock float64 `json:"default_seconds_since_last_block"` CurrentAtxTransactionMargin int64 `json:"current_atx_transaction_margin"` DefaultTransfersInBlock int `json:"default_transfers_in_block"` AtxBufferSize int `json:"atx_buffer_size"` EpochBlocks int `json:"epoch_blocks"` YieldToStakers bool `json:"yield_to_stakers"` SpoolerInstantRewardThreshold float64 `json:"spooler_instant_reward_threshold"` SpoolerBatchedRewardThreshold float64 `json:"spooler_batched_reward_threshold"` }
WorkerConfigEthereum to be used with any EVM chains to store config that was previously hardcoded
type WorkerConfigSolana ¶
type WorkerConfigSolana struct { SolanaBlockTime uint64 `json:"solana_block_time"` TransferCompute int `json:"transfer_compute"` AtxBufferSize int `json:"atx_buffer_size"` }
WorkerConfigSolana that was previously hardcoded for Solana only
type WorkerConfigSui ¶
type WorkerConfigSui struct { SuiBlockTime uint64 `json:"sui_block_time"` SpoolerInstantRewardThreshold float64 `json:"spooler_instant_reward_threshold"` SpoolerBatchedRewardThreshold float64 `json:"spooler_batched_reward_threshold"` }
WorkerConfigSui that was previously hardcoded for Sui only