core

package
v0.0.0-...-c305843 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jun 3, 2024 License: MIT Imports: 20 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

View Source
var ErrEntityNotFound = errors.New("entity not found")
View Source
var ErrNotKeyBlock = errors.New("block must be a key block")
View Source
var ErrTooManyEntities = errors.New("too many entities")
View Source
var (
	ErrTraceIsTooLong = errors.New("trace is too long")
)

Functions

func CalculateAPY

func CalculateAPY(roundExpected, roundBorrowed int64, governanceFee int32) float64

func CollectAdditionalInfo

func CollectAdditionalInfo(ctx context.Context, infoSource InformationSource, trace *Trace) error

CollectAdditionalInfo goes over the whole trace and populates trace.TraceAdditionalInfo based on information provided by InformationSource.

func DistinctAccounts

func DistinctAccounts(trace *Trace) []tongo.AccountID

DistinctAccounts returns a list of accounts that are involved in the given trace.

func GetNftMetaData

func GetNftMetaData(nftMetaUrl string) ([]byte, error)

func PrepareLibraries

func PrepareLibraries(ctx context.Context, code *boc.Cell, accountLibraries map[tongo.Bits256]*SimpleLib, resolver LibraryResolver) (string, error)

func SimpleLibMapToCells

func SimpleLibMapToCells(libraries map[string]tlb.SimpleLib) map[tongo.Bits256]*SimpleLib

func StateInitLibraries

func StateInitLibraries(hashmap *tlb.HashmapE[tlb.Bits256, tlb.SimpleLib]) map[tongo.Bits256]*SimpleLib

func Visit

func Visit(trace *Trace, fn func(trace *Trace))

Types

type Account

type Account struct {
	AccountAddress      tongo.AccountID
	Status              tlb.AccountStatus
	TonBalance          int64
	ExtraBalances       map[uint32]decimal.Decimal
	LastTransactionLt   uint64
	LastTransactionHash tongo.Bits256
	Code                []byte
	Data                []byte
	FrozenHash          *tongo.Bits256
	Storage             StorageInfo
	Interfaces          []abi.ContractInterface
	LastActivityTime    int64
	GetMethods          []string
	Libraries           map[tongo.Bits256]*SimpleLib
}

Account holds low-level details about a particular account taken directly from the blockchain.

func ConvertToAccount

func ConvertToAccount(accountId tongo.AccountID, shardAccount tlb.ShardAccount) (*Account, error)

type AccountInfo

type AccountInfo struct {
	Account      Account
	MemoRequired *bool
	Name         *string
	Icon         *string
	IsScam       *bool
}

AccountInfo extends Account type to hold additional human-friendly information about a particular account.

type AttachedAccount

type AttachedAccount struct {
	Name   string
	Symbol string
	Image  string
}

type Auction

type Auction struct {
	Bids   int64
	Date   int64
	Domain string
	Owner  tongo.AccountID
	Price  int64
}

type BlockExtra

type BlockExtra struct {
	RandSeed  tongo.Bits256
	CreatedBy tongo.Bits256
	// InMsgDescrLength is a length of the inbound message queue of a block.
	InMsgDescrLength int
	// OutMsgDescrLength is a length of the outbound message queue of a block.
	OutMsgDescrLength int
}

type BlockHeader

type BlockHeader struct {
	tongo.BlockIDExt
	MasterRef              *tongo.BlockIDExt
	PrevBlocks             []tongo.BlockIDExt
	StartLt                int64
	EndLt                  int64
	GlobalId               int32
	MinRefMcSeqno          int32
	CatchainSeqno          int32
	PrevKeyBlockSeqno      int32
	ValidatorListHashShort int32
	GenUtime               uint32
	Version                uint32
	VertSeqno              uint32
	WantMerge              bool
	WantSplit              bool
	AfterMerge             bool
	AfterSplit             bool
	BeforeSplit            bool
	IsKeyBlock             bool
	// GenSoftware describes software that created this particular block.
	// It is up to the software to include this piece of information.
	GenSoftware *GenSoftware
	BlockExtra  BlockExtra
	ValueFlow   ValueFlow
	// TxQuantity is the number of transactions in this block.
	TxQuantity int
}

BlockHeader contains information extracted from a block.

func ConvertToBlockHeader

func ConvertToBlockHeader(id tongo.BlockIDExt, block *tlb.Block) (*BlockHeader, error)

type BouncePhaseType

type BouncePhaseType string
const (
	BounceNegFunds BouncePhaseType = "TrPhaseBounceNegfunds"
	BounceNoFunds  BouncePhaseType = "TrPhaseBounceNofunds "
	BounceOk       BouncePhaseType = "TrPhaseBounceOk"
)

type Contract

type Contract struct {
	Status            tlb.AccountStatus
	Balance           int64
	Code              []byte
	Data              []byte
	Libraries         map[tongo.Bits256]*SimpleLib
	LastTransactionLt uint64
}

Contract represents an account but contains a few fields that are only relevant for smart contracts.

type Currency

type Currency struct {
	ID    int64
	Value string
}

type CurrencyCollection

type CurrencyCollection struct {
	Grams uint64
	Other []Currency
}

func ConvertToCurrencyCollection

func ConvertToCurrencyCollection(collection tlb.CurrencyCollection) CurrencyCollection

type DecodedMessageBody

type DecodedMessageBody struct {
	Operation string
	Value     any
}

DecodedMessageBody contains a message body decoded by tongo.abi package.

type DnsExpiring

type DnsExpiring struct {
	ExpiringAt int64
	Name       string
	DnsItem    *NftItem
}

type DomainBid

type DomainBid struct {
	Bidder  tongo.AccountID
	Success bool
	TxTime  int64
	Value   uint64
	TxHash  tongo.Bits256
}

type EmulatedTeleitemNFT

type EmulatedTeleitemNFT struct {
	Index             decimal.Decimal
	CollectionAddress *tongo.AccountID
	Verified          bool
}

type ExternalAddress

type ExternalAddress = boc.BitString

ExternalAddress represents either the source or destination address of external inbound(ExtInMsg) or external outbound(ExtOutMsg) message correspondingly.

type Filter

type Filter[T any] struct {
	Value  T
	IsZero bool
}

type GenSoftware

type GenSoftware struct {
	Version      uint32
	Capabilities uint64
}

GenSoftware describes version and capabilities of software that created a blockchain block.

type InformationSource

type InformationSource interface {
	JettonMastersForWallets(ctx context.Context, wallets []tongo.AccountID) (map[tongo.AccountID]tongo.AccountID, error)
	NftSaleContracts(ctx context.Context, contracts []tongo.AccountID) (map[tongo.AccountID]NftSaleContract, error)
	STONfiPools(ctx context.Context, poolIDs []tongo.AccountID) (map[tongo.AccountID]STONfiPool, error)
}

InformationSource provides methods to construct TraceAdditionalInfo.

type InscriptionBalance

type InscriptionBalance struct {
	Account ton.AccountID
	Amount  decimal.Decimal
	Ticker  string
}

type InscriptionMessage

type InscriptionMessage struct {
	// Hash of the TON blockchain message.
	Hash      ton.Bits256
	Success   bool
	Operation string
	Ticker    string
	Amount    uint64
	Source    ton.AccountID
	Dest      *ton.AccountID
}

InscriptionMessage describes a message according to the TON-20 specification: https://docs.tonano.io/introduction/overview#indexer.

type JettonHolder

type JettonHolder struct {
	JettonAddress tongo.AccountID
	Address       tongo.AccountID
	Owner         tongo.AccountID
	Balance       decimal.Decimal
}

type JettonMaster

type JettonMaster struct {
	// Address of a jetton master.
	Address     tongo.AccountID
	TotalSupply big.Int
	Mintable    bool
	Admin       *tongo.AccountID
}

type JettonWallet

type JettonWallet struct {
	// Address of a jetton wallet.
	Address      tongo.AccountID
	Balance      decimal.Decimal
	OwnerAddress *tongo.AccountID
	// JettonAddress of a jetton master.
	JettonAddress tongo.AccountID
	Code          []byte
	Lock          *JettonWalletLockData
}

type JettonWalletLockData

type JettonWalletLockData struct {
	FullBalance decimal.Decimal
	UnlockTime  int64
}

type LibraryResolver

type LibraryResolver interface {
	GetLibraries(ctx context.Context, libraries []tongo.Bits256) (map[tongo.Bits256]*boc.Cell, error)
}

LibraryResolver provides a method to resolve libraries by their hashes.

type LiquidPool

type LiquidPool struct {
	Name            string
	Address         tongo.AccountID
	TotalAmount     int64
	VerifiedSources bool
	TotalStakers    int
	JettonMaster    tongo.AccountID
	APY             float64
}

type Message

type Message struct {
	MessageID
	MsgType           MsgType
	SourceExtern      *ExternalAddress
	DestinationExtern *ExternalAddress
	IhrDisabled       bool
	Bounce            bool
	Bounced           bool
	Value             int64
	FwdFee            int64
	IhrFee            int64
	ImportFee         int64
	Init              []byte
	InitInterfaces    []abi.ContractInterface
	Body              []byte
	CreatedAt         uint32
	// OpCode is the first 32 bits of a message body indicating a possible operation.
	OpCode      *uint32
	DecodedBody *DecodedMessageBody
}

func ConvertMessage

func ConvertMessage(message tlb.Message, txLT uint64) (Message, error)

func (Message) IsEmission

func (m Message) IsEmission() bool

type MessageID

type MessageID struct {
	CreatedLt   uint64
	Source      *tongo.AccountID
	Destination *tongo.AccountID
}

func (MessageID) IsExternal

func (m MessageID) IsExternal() bool

func (MessageID) String

func (m MessageID) String() string

type MsgType

type MsgType string
const (
	IntMsg    MsgType = "IntMsg"
	ExtInMsg  MsgType = "ExtInMsg"
	ExtOutMsg MsgType = "ExtOutMsg"
)

type NftCollection

type NftCollection struct {
	Address           tongo.AccountID
	NextItemIndex     uint64
	OwnerAddress      *tongo.AccountID
	ContentLayout     int
	CollectionContent []byte
	InWhitelist       bool
	Metadata          map[string]interface{}
}

type NftItem

type NftItem struct {
	Address           tongo.AccountID
	Index             decimal.Decimal
	CollectionAddress *tongo.AccountID
	OwnerAddress      *tongo.AccountID
	Verified          bool
	Transferable      bool
	DNS               *string
	Sale              *NftSaleInfo
	Metadata          map[string]interface{}
}

type NftSaleContract

type NftSaleContract struct {
	NftPrice int64
	// Owner of an NFT according to a getgems/basic contract.
	Owner *tongo.AccountID
	Item  tongo.AccountID
}

NftSaleContract holds partial results of get_sale_data method.

type NftSaleInfo

type NftSaleInfo struct {
	Contract    tongo.AccountID
	Marketplace tongo.AccountID
	Nft         tongo.AccountID
	Seller      *tongo.AccountID
	Price       struct {
		Token  *tongo.AccountID
		Amount uint64
	}
	MarketplaceFee uint64
	RoyaltyAddress *tongo.AccountID
	RoyaltyAmount  uint64
}

type Nominator

type Nominator struct {
	Pool                  tongo.AccountID
	Member                tongo.AccountID
	MemberBalance         int64
	MemberPendingDeposit  int64
	MemberPendingWithdraw int64
	MemberWithdraw        int64
}

type STONfiPool

type STONfiPool struct {
	Token0 tongo.AccountID
	Token1 tongo.AccountID
}

STONfiPool holds partial results of execution of STONfi's "get_pool_data" method.

type SimpleLib

type SimpleLib struct {
	Public bool
	Root   *boc.Cell
}

type StakingImplementation

type StakingImplementation string
const (
	StakingImplementationTF       StakingImplementation = "tf"
	StakingImplementationLiquidTF StakingImplementation = "liquidTF"
	StakingImplementationWhales   StakingImplementation = "whales"
)

type StateUpdate

type StateUpdate struct {
	OldHash tongo.Bits256
	NewHash tongo.Bits256
}

type StorageInfo

type StorageInfo struct {
	UsedCells       big.Int
	UsedBits        big.Int
	UsedPublicCells big.Int
	LastPaid        uint32
	DuePayment      int64
}

StorageInfo is taken from TLB storage_stat:StorageInfo.

type StorageProvider

type StorageProvider struct {
	Address            tongo.AccountID
	AcceptNewContracts bool
	//  RatePerMbDay specifies the cost of storage in nanoTON per megabyte per day.
	RatePerMbDay int64
	// MaxSpan specifies how often the provider provides proofs of Bag storage.
	MaxSpan int64
	// MinimalFileSize specifies min Bag size in bytes.
	MinimalFileSize int64
	// MaximalFileSize specifies max Bag size in bytes.
	MaximalFileSize int64
}

StorageProvider is a smart contract that accepts storage requests and manages payments from clients.

type Subscription

type Subscription struct {
	AccountID            tongo.AccountID
	WalletAccountID      tongo.AccountID
	BeneficiaryAccountID tongo.AccountID
	Amount               int64
	Period               int64
	StartTime            int64
	Timeout              int64
	LastPaymentTime      int64
	LastRequestTime      int64
	FailedAttempts       int32
	SubscriptionID       int64
	IndexerLastUpdateLt  int64
}

type TFPool

type TFPool struct {
	Address         tongo.AccountID
	ValidatorStake  int64
	NominatorsStake int64
	// TotalAmount = ValidatorStake + NominatorsStake
	TotalAmount       int64
	MinNominatorStake int64
	ValidatorShare    uint32
	StakeAt           uint32
	Nominators        int
	MaxNominators     int
	VerifiedSources   bool
}

type Trace

type Trace struct {
	// Transaction is slightly modified.
	// For example, we have kept only external outbound messages in OutMsgs.
	Transaction
	AccountInterfaces []abi.ContractInterface
	Children          []*Trace
	// contains filtered or unexported fields
}

func (*Trace) AdditionalInfo

func (t *Trace) AdditionalInfo() *TraceAdditionalInfo

func (*Trace) InProgress

func (t *Trace) InProgress() bool

func (*Trace) SetAdditionalInfo

func (t *Trace) SetAdditionalInfo(info *TraceAdditionalInfo)

type TraceAdditionalInfo

type TraceAdditionalInfo struct {
	// JettonMasters maps jetton wallets to their masters.
	JettonMasters map[tongo.AccountID]tongo.AccountID
	// NftSaleContract is set, if a transaction's account implements "get_sale_data" method.
	NftSaleContract *NftSaleContract
	// STONfiPool is set, if a transaction's account implements "get_pool_data" method and abi.StonfiPool interface.
	STONfiPool *STONfiPool

	// EmulatedTeleitemNFT is set, if this trace is a result of emulation.
	// This field is required because when a new NFT is created during emulation,
	// there is no way to get it from the blockchain, and we have to store it somewhere.
	EmulatedTeleitemNFT *EmulatedTeleitemNFT
}

TraceAdditionalInfo holds information about a trace but not directly extracted from it or a corresponding transaction.

func (*TraceAdditionalInfo) JettonMaster

func (info *TraceAdditionalInfo) JettonMaster(jettonWallet tongo.AccountID) (tongo.AccountID, bool)

func (*TraceAdditionalInfo) SetJettonMaster

func (info *TraceAdditionalInfo) SetJettonMaster(jettonWallet tongo.AccountID, jettonMaster tongo.AccountID)

type TraceID

type TraceID struct {
	Hash  tongo.Bits256
	Lt    uint64
	UTime int64
}

TraceID identifies a trace by a hash of the transaction which created it and the logical time of the transaction.

type Transaction

type Transaction struct {
	TransactionID
	Type       TransactionType
	Success    bool
	Utime      int64
	InMsg      *Message
	OutMsgs    []Message
	BlockID    tongo.BlockID
	OrigStatus tlb.AccountStatus
	EndStatus  tlb.AccountStatus

	EndBalance int64

	PrevTransHash tongo.Bits256
	PrevTransLt   uint64

	StateHashUpdate tlb.HashUpdate
	ComputePhase    *TxComputePhase
	StoragePhase    *TxStoragePhase
	CreditPhase     *TxCreditPhase
	ActionPhase     *TxActionPhase
	BouncePhase     *TxBouncePhase

	Aborted   bool
	Destroyed bool

	// StorageFee collected during the Storage Phase.
	StorageFee int64
	// TotalFee is the original total_fee of a transaction directly from the blockchain.
	TotalFee int64
}

func ConvertTransaction

func ConvertTransaction(workchain int32, tx tongo.Transaction) (*Transaction, error)

func ExtractTransactions

func ExtractTransactions(id tongo.BlockIDExt, block *tlb.Block) ([]*Transaction, error)

type TransactionID

type TransactionID struct {
	Hash    tongo.Bits256
	Lt      uint64
	Account tongo.AccountID
}

type TransactionType

type TransactionType string

TransactionType stands for transaction kind from [4.2.4] from the TON whitepaper.

const (
	OrdinaryTx     TransactionType = "TransOrd"
	TickTockTx     TransactionType = "TransTickTock"
	SplitPrepareTx TransactionType = "TransSplitPrepare"
	SplitInstallTx TransactionType = "TransSplitInstall"
	MergePrepareTx TransactionType = "TransMergePrepare"
	MergeInstallTx TransactionType = "TransMergeInstall"
	StorageTx      TransactionType = "TransStorage"
)

type TxAccStatusChange

type TxAccStatusChange = tlb.AccStatusChange

type TxActionPhase

type TxActionPhase struct {
	Success        bool
	ResultCode     int32
	TotalActions   uint16
	SkippedActions uint16
	FwdFees        uint64
	TotalFees      uint64
}

type TxBouncePhase

type TxBouncePhase struct {
	Type BouncePhaseType
}

type TxComputePhase

type TxComputePhase struct {
	Skipped    bool
	SkipReason TxComputeSkipReason
	Success    bool
	GasFees    uint64
	GasUsed    big.Int
	VmSteps    uint32
	ExitCode   int32
}

type TxComputeSkipReason

type TxComputeSkipReason = tlb.ComputeSkipReason

type TxCreditPhase

type TxCreditPhase struct {
	DueFeesCollected uint64
	CreditGrams      uint64
}

type TxStoragePhase

type TxStoragePhase struct {
	StorageFeesCollected uint64
	StorageFeesDue       *uint64
	StatusChange         TxAccStatusChange
}

type ValueFlow

type ValueFlow struct {
	FromPrevBlk   CurrencyCollection
	ToNextBlk     CurrencyCollection
	Imported      CurrencyCollection
	Exported      CurrencyCollection
	FeesCollected CurrencyCollection
	Burned        *CurrencyCollection
	FeesImported  CurrencyCollection
	Recovered     CurrencyCollection
	Created       CurrencyCollection
	Minted        CurrencyCollection
}

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL