Documentation
¶
Index ¶
- Constants
- Variables
- func InstructionIDToName(id int32) string
- func PeekAccount(data []byte) uint32
- type AccountHeader
- type AttrsMap
- func (a AttrsMap) BinaryLen() (size int)
- func (a AttrsMap) KVs() map[string]string
- func (a AttrsMap) MarshalBinary() ([]byte, error)
- func (a *AttrsMap) MarshalJSON() ([]byte, error)
- func (a AttrsMap) Sort()
- func (a *AttrsMap) UnmarshalBinary(data []byte) (err error)
- func (a *AttrsMap) UnmarshalJSON(data []byte) (err error)
- type CallbackHandle
- type Client
- func (c *Client) GetAllPriceAccounts(ctx context.Context, commitment rpc.CommitmentType) ([]PriceAccountEntry, error)
- func (c *Client) GetAllProductAccounts(ctx context.Context, commitment rpc.CommitmentType) ([]ProductAccountEntry, error)
- func (c *Client) GetAllProductKeys(ctx context.Context, commitment rpc.CommitmentType) ([]solana.PublicKey, error)
- func (c *Client) GetMappingAccount(ctx context.Context, mappingKey solana.PublicKey, ...) (MappingAccountEntry, error)
- func (c *Client) GetPriceAccount(ctx context.Context, priceKey solana.PublicKey, commitment rpc.CommitmentType) (PriceAccountEntry, error)
- func (c *Client) GetPriceAccountsRecursive(ctx context.Context, commitment rpc.CommitmentType, ...) ([]PriceAccountEntry, error)
- func (c *Client) GetProductAccount(ctx context.Context, productKey solana.PublicKey, ...) (ProductAccountEntry, error)
- func (c *Client) StreamPriceAccounts() *PriceAccountStream
- type CommandAddPrice
- type CommandAddPublisher
- type CommandDelPublisher
- type CommandHeader
- type CommandInitPrice
- type CommandSetMinPub
- type CommandUpdPrice
- type CommandUpdProduct
- type CommandUpdTest
- type Ema
- type Env
- type Instruction
- type InstructionBuilder
- func (i *InstructionBuilder) AddMapping(fundingKey solana.PublicKey, tailMappingKey solana.PublicKey, ...) *Instruction
- func (i *InstructionBuilder) AddPrice(fundingKey solana.PublicKey, productKey solana.PublicKey, ...) *Instruction
- func (i *InstructionBuilder) AddProduct(fundingKey solana.PublicKey, mappingKey solana.PublicKey, ...) *Instruction
- func (i *InstructionBuilder) AddPublisher(fundingKey solana.PublicKey, priceKey solana.PublicKey, ...) *Instruction
- func (i *InstructionBuilder) AggPrice(fundingKey solana.PublicKey, priceKey solana.PublicKey) *Instruction
- func (i *InstructionBuilder) DelPublisher(fundingKey solana.PublicKey, priceKey solana.PublicKey, ...) *Instruction
- func (i *InstructionBuilder) InitMapping(fundingKey solana.PublicKey, mappingKey solana.PublicKey) *Instruction
- func (i *InstructionBuilder) InitPrice(fundingKey solana.PublicKey, priceKey solana.PublicKey, ...) *Instruction
- func (i *InstructionBuilder) InitTest(fundingKey solana.PublicKey, testKey solana.PublicKey) *Instruction
- func (i *InstructionBuilder) SetMinPub(fundingKey solana.PublicKey, priceKey solana.PublicKey, ...) *Instruction
- func (i *InstructionBuilder) UpdPrice(fundingKey solana.PublicKey, priceKey solana.PublicKey, ...) *Instruction
- func (i *InstructionBuilder) UpdPriceNoFailOnError(fundingKey solana.PublicKey, priceKey solana.PublicKey, ...) *Instruction
- func (i *InstructionBuilder) UpdProduct(fundingKey solana.PublicKey, productKey solana.PublicKey, ...) *Instruction
- func (i *InstructionBuilder) UpdTest(fundingKey solana.PublicKey, testKey solana.PublicKey, payload CommandUpdTest) *Instruction
- type MappingAccount
- type MappingAccountEntry
- type PriceAccount
- type PriceAccountEntry
- type PriceAccountStream
- type PriceComp
- type PriceEventHandler
- type PriceInfo
- type PriceUpdate
- type ProductAccount
- type ProductAccountEntry
- type ProductAccountHeader
- type RawProductAccount
Examples ¶
Constants ¶
const ( AccountTypeUnknown = uint32(iota) AccountTypeMapping AccountTypeProduct AccountTypePrice )
Account类型枚举标识每个Pyth账户存储的内容
const ( PriceStatusUnknown = uint32(iota) PriceStatusTrading PriceStatusHalted PriceStatusAuction )
Price status.
const ( Instruction_InitMapping = int32(iota) Instruction_AddMapping Instruction_AddProduct Instruction_UpdProduct Instruction_AddPrice Instruction_AddPublisher Instruction_DelPublisher Instruction_UpdPrice Instruction_AggPrice Instruction_InitPrice Instruction_InitTest Instruction_UpdTest Instruction_SetMinPub Instruction_UpdPriceNoFailOnError )
Pyth程序指令
const Magic = uint32(0xa1b2c3d4)
Magic 是每个账户前缀的32位数字
const ProductAccountHeaderLen = 48
ProductAccountHeaderLen 是RawProductAccount中AttrsData字段的二进制偏移量
const V2 = uint32(2)
V2 标识账户中存储的版本2数据格式
Variables ¶
var Devnet = Env{
Program: solana.MustPublicKeyFromBase58("gSbePebfvPy7tRqimPoVecS2UsBvYv46ynrzWocc92s"),
Mapping: solana.MustPublicKeyFromBase58("BmA9Z6FjioHJPpjT39QazZyhDRUdZy2ezwx4GiDdE2u2"),
}
Devnet 是Solana devnet集群上的Pyth程序
var Mainnet = Env{
Program: solana.MustPublicKeyFromBase58("FsJ3A3u2vn5cTVofAjvy6y5kwABJAqYWpe4975bi2epH"),
Mapping: solana.MustPublicKeyFromBase58("AHtgzX45WTKfkPG53L6WYhGEXwQkN1BVknET3sVsLL8J"),
}
Mainnet 是Solana主网集群上的Pyth程序
var Testnet = Env{
Program: solana.MustPublicKeyFromBase58("8tfDNiaEyrV6Q1U4DEXrEigs9DoDtkugzFbybENEbCDz"),
Mapping: solana.MustPublicKeyFromBase58("AFmdnt9ng1uVxqCmqwQJDAYC5cKTkw8gJKSM5PnzuF6z"),
}
Testnet 是Solana testnet集群上的Pyth程序
Functions ¶
func InstructionIDToName ¶
InstructionIDToName 返回Pyth指令类型的人类可读名称
Types ¶
type AccountHeader ¶
type AccountHeader struct { Magic uint32 // set exactly to 0xa1b2c3d4 Version uint32 // currently V2 AccountType uint32 // account type following the header Size uint32 // size of the account including the header }
AccountHeader 是每个账户类型开头的16字节头部
type AttrsMap ¶
type AttrsMap struct {
Pairs [][2]string
}
AttrsMap 是一个具有稳定顺序的字符串键值对列表
func ReadAttrsMapFromBinary ¶
ReadAttrsMapFromBinary 从二进制读取器消耗所有字节, 返回一个AttrsMap和读取的字节数
func (AttrsMap) MarshalBinary ¶
MarshalBinary 将AttrsMap编码为其链上格式
func (*AttrsMap) MarshalJSON ¶
MarshalJSON 返回JSON字符串映射
func (*AttrsMap) UnmarshalJSON ¶
UnmarshalJSON 加载JSON字符串映射
type CallbackHandle ¶
type CallbackHandle struct {
// contains filtered or unexported fields
}
CallbackHandle 跟踪回调注册的生命周期
func (CallbackHandle) Unsubscribe ¶
func (c CallbackHandle) Unsubscribe()
Unsubscribe 从处理器中注销回调
调用Unsubscribe是可选的 当底层流关闭时处理器会自动调用它
type Client ¶
type Client struct { Env Env RPC *rpc.Client WSClient *ws.Client Log *zap.Logger AccountsBatchSize int // number of accounts to get with getMultipleAccounts() }
Client 通过Solana的JSON-RPC API与Pyth交互
不要直接实例化Client,请使用NewClient代替
func (*Client) GetAllPriceAccounts ¶
func (c *Client) GetAllPriceAccounts(ctx context.Context, commitment rpc.CommitmentType) ([]PriceAccountEntry, error)
GetAllPriceAccounts 返回所有价格账户
如果获取任何产品账户失败,则中止并返回错误
func (*Client) GetAllProductAccounts ¶
func (c *Client) GetAllProductAccounts(ctx context.Context, commitment rpc.CommitmentType) ([]ProductAccountEntry, error)
GetAllProductAccounts 返回所有产品账户
如果获取任何产品账户失败,则中止并返回错误
Example ¶
ctx, cancel := context.WithCancel(context.Background()) defer cancel() wallet, err := gosolana.NewWallet(ctx, gosolana.Option{ RpcUrl: rpc.DevNet_RPC, WsUrl: rpc.DevNet_WS, }) if err != nil { log.Fatalf("Failed to create wallet: %v", err) } // 连接到Solana devnet上的Pyth client := NewClient(Devnet, wallet.GetClient(), wallet.GetWsClient()) products, _ := client.GetAllProductAccounts(context.TODO(), rpc.CommitmentProcessed) // Print first product as JSON. products[0].Slot = 1234 jsonData, _ := json.MarshalIndent(&products[0], "", " ") fmt.Println(string(jsonData))
Output: { "first_price": "4EQrNZYk5KR1RnjyzbaaRbHsv8VqZWzSUtvx58wLsZbj", "attrs": { "asset_type": "Crypto", "base": "BCH", "description": "BCH/USD", "generic_symbol": "BCHUSD", "quote_currency": "USD", "symbol": "Crypto.BCH/USD" }, "pubkey": "89GseEmvNkzAMMEXcW9oTYzqRPXTsJ3BmNerXmgA1osV", "slot": 1234 }
func (*Client) GetAllProductKeys ¶
func (c *Client) GetAllProductKeys(ctx context.Context, commitment rpc.CommitmentType) ([]solana.PublicKey, error)
GetAllProductKeys 列出所有产品账户公钥的映射账户
Example ¶
ctx, cancel := context.WithCancel(context.Background()) defer cancel() wallet, err := gosolana.NewWallet(ctx, gosolana.Option{ RpcUrl: rpc.DevNet_RPC, WsUrl: rpc.DevNet_WS, }) if err != nil { log.Fatalf("Failed to create wallet: %v", err) } // 连接到Solana devnet上的Pyth client := NewClient(Devnet, wallet.GetClient(), wallet.GetWsClient()) products, _ := client.GetAllProductKeys(context.TODO(), rpc.CommitmentProcessed) // Print first 5 product account pubkeys. for _, key := range products[:5] { fmt.Println(key) }
Output: 89GseEmvNkzAMMEXcW9oTYzqRPXTsJ3BmNerXmgA1osV JCnD5WiurZfoeVPEi2AXVgacg73Wd2iRDDjZDbSwdr9D G89jkM5wFLpmnbvRbeePUumxsJyzoXaRfgBVjyx2CPzQ GaBJpKtnyUbyKe34XuyegR7W98a9PT5cg985G974NY8R Fwosgw2ikRvdzgKcQJwMacyczk3nXgoW3AtVtyVvXSAb
func (*Client) GetMappingAccount ¶
func (c *Client) GetMappingAccount(ctx context.Context, mappingKey solana.PublicKey, commitment rpc.CommitmentType) (MappingAccountEntry, error)
GetMappingAccount 从区块链获取单个映射账户
func (*Client) GetPriceAccount ¶
func (c *Client) GetPriceAccount(ctx context.Context, priceKey solana.PublicKey, commitment rpc.CommitmentType) (PriceAccountEntry, error)
GetPriceAccount 从区块链获取价格账户
func (*Client) GetPriceAccountsRecursive ¶
func (c *Client) GetPriceAccountsRecursive(ctx context.Context, commitment rpc.CommitmentType, priceKeys ...solana.PublicKey) ([]PriceAccountEntry, error)
GetPriceAccountsRecursive 递归获取给定公钥的价格账户
如果这些价格账户有后继者,也会递归获取它们的内容 当使用ProductAccountHeader.FirstPrice调用时,将获取产品的所有价格账户
func (*Client) GetProductAccount ¶
func (c *Client) GetProductAccount(ctx context.Context, productKey solana.PublicKey, commitment rpc.CommitmentType) (ProductAccountEntry, error)
GetProductAccount 从区块链获取产品账户
Example ¶
ctx, cancel := context.WithCancel(context.Background()) defer cancel() wallet, err := gosolana.NewWallet(ctx, gosolana.Option{ RpcUrl: rpc.DevNet_RPC, WsUrl: rpc.DevNet_WS, }) if err != nil { log.Fatalf("Failed to create wallet: %v", err) } // 连接到Solana devnet上的Pyth client := NewClient(Devnet, wallet.GetClient(), wallet.GetWsClient()) productPubkey := solana.MustPublicKeyFromBase58("EWxGfxoPQSNA2744AYdAKmsQZ8F9o9M7oKkvL3VM1dko") product, _ := client.GetProductAccount(context.TODO(), productPubkey, rpc.CommitmentProcessed) product.Slot = 1234 // Print first product as JSON. jsonData, _ := json.MarshalIndent(product, "", " ") fmt.Println(string(jsonData))
Output: { "first_price": "E36MyBbavhYKHVLWR79GiReNNnBDiHj6nWA7htbkNZbh", "attrs": { "asset_type": "FX", "base": "EUR", "description": "EUR/USD", "generic_symbol": "EURUSD", "quote_currency": "USD", "symbol": "FX.EUR/USD", "tenor": "Spot" }, "pubkey": "EWxGfxoPQSNA2744AYdAKmsQZ8F9o9M7oKkvL3VM1dko", "slot": 1234 }
func (*Client) StreamPriceAccounts ¶
func (c *Client) StreamPriceAccounts() *PriceAccountStream
StreamPriceAccounts 创建价格账户更新的新流
如果WebSocket连接中断或停滞,它将自动重新连接
Example ¶
ctx, cancel := context.WithCancel(context.Background()) defer cancel() wallet, err := gosolana.NewWallet(ctx, gosolana.Option{ RpcUrl: rpc.DevNet_RPC, WsUrl: rpc.DevNet_WS, }) if err != nil { log.Fatalf("Failed to create wallet: %v", err) } // 连接到Solana devnet上的Pyth client := NewClient(Devnet, wallet.GetClient(), wallet.GetWsClient()) stream := client.StreamPriceAccounts() // Close stream after a while. go func() { <-time.After(3 * time.Second) stream.Close() }() // Print updates. for update := range stream.Updates() { fmt.Println(update.Agg.Price) }
Output:
type CommandAddPrice ¶
CommandAddPrice 是Instruction_AddPrice的负载
type CommandAddPublisher ¶
type CommandAddPublisher struct {
Publisher solana.PublicKey
}
CommandAddPublisher 是Instruction_AddPublisher的负载
type CommandDelPublisher ¶
type CommandDelPublisher struct {
Publisher solana.PublicKey
}
CommandDelPublisher 是Instruction_DelPublisher的负载
type CommandHeader ¶
CommandHeader 是任何指令数据开头的8字节头部
type CommandInitPrice ¶
CommandInitPrice 是Instruction_InitPrice的负载
type CommandSetMinPub ¶
CommandSetMinPub 是Instruction_SetMinPub的负载
type CommandUpdPrice ¶
CommandUpdPrice 是Instruction_UpdPrice或Instruction_UpdPriceNoFailOnError的负载
type CommandUpdProduct ¶
type CommandUpdProduct struct {
AttrsMap
}
CommandUpdProduct 是Instruction_UpdProduct的负载
type CommandUpdTest ¶
CommandUpdTest 是Instruction_UpdTest的负载
type Env ¶
type Env struct { Program solana.PublicKey // Program ID Mapping solana.PublicKey // Root mapping key }
Env 标识Pyth链上程序的部署环境
type Instruction ¶
type Instruction struct { Header CommandHeader Payload interface{} // contains filtered or unexported fields }
func DecodeInstruction ¶
func DecodeInstruction( programKey solana.PublicKey, accounts []*solana.AccountMeta, data []byte, ) (*Instruction, error)
DecodeInstruction 尝试从链上指令重建Pyth命令
安全性说明
请注意,此函数的行为可能与Pyth链上程序不同。 特别是边缘情况和无效输入的处理是基于"尽力而为"原则。
此函数也不执行账户所有权或权限检查。
最好仅在程序执行成功时使用此指令。
func (*Instruction) Accounts ¶
func (inst *Instruction) Accounts() []*solana.AccountMeta
func (*Instruction) Data ¶
func (inst *Instruction) Data() ([]byte, error)
func (*Instruction) ProgramID ¶
func (inst *Instruction) ProgramID() solana.PublicKey
type InstructionBuilder ¶
type InstructionBuilder struct {
// contains filtered or unexported fields
}
InstructionBuilder 创建与Pyth链上程序交互的新指令
func NewInstructionBuilder ¶
func NewInstructionBuilder(programKey solana.PublicKey) *InstructionBuilder
NewInstructionBuilder 创建一个新的InstructionBuilder,针对给定的Pyth程序
func (*InstructionBuilder) AddMapping ¶
func (i *InstructionBuilder) AddMapping( fundingKey solana.PublicKey, tailMappingKey solana.PublicKey, newMappingKey solana.PublicKey, ) *Instruction
AddMapping 初始化并添加新的映射账户到列表
func (*InstructionBuilder) AddPrice ¶
func (i *InstructionBuilder) AddPrice( fundingKey solana.PublicKey, productKey solana.PublicKey, priceKey solana.PublicKey, payload CommandAddPrice, ) *Instruction
AddPrice 向产品账户添加新的价格账户
func (*InstructionBuilder) AddProduct ¶
func (i *InstructionBuilder) AddProduct( fundingKey solana.PublicKey, mappingKey solana.PublicKey, productKey solana.PublicKey, ) *Instruction
AddProduct 初始化并添加新的产品参考数据账户
func (*InstructionBuilder) AddPublisher ¶
func (i *InstructionBuilder) AddPublisher( fundingKey solana.PublicKey, priceKey solana.PublicKey, payload CommandAddPublisher, ) *Instruction
AddPublisher 向价格账户添加发布者
func (*InstructionBuilder) AggPrice ¶
func (i *InstructionBuilder) AggPrice( fundingKey solana.PublicKey, priceKey solana.PublicKey, ) *Instruction
AggPrice 计算产品账户的聚合价格
func (*InstructionBuilder) DelPublisher ¶
func (i *InstructionBuilder) DelPublisher( fundingKey solana.PublicKey, priceKey solana.PublicKey, payload CommandDelPublisher, ) *Instruction
DelPublisher 从价格账户删除发布者
func (*InstructionBuilder) InitMapping ¶
func (i *InstructionBuilder) InitMapping( fundingKey solana.PublicKey, mappingKey solana.PublicKey, ) *Instruction
InitMapping 初始化第一个映射列表账户
func (*InstructionBuilder) InitPrice ¶
func (i *InstructionBuilder) InitPrice( fundingKey solana.PublicKey, priceKey solana.PublicKey, payload CommandInitPrice, ) *Instruction
InitPrice (重新)初始化价格账户
func (*InstructionBuilder) InitTest ¶
func (i *InstructionBuilder) InitTest( fundingKey solana.PublicKey, testKey solana.PublicKey, ) *Instruction
InitTest 初始化测试账户
func (*InstructionBuilder) SetMinPub ¶
func (i *InstructionBuilder) SetMinPub( fundingKey solana.PublicKey, priceKey solana.PublicKey, payload CommandSetMinPub, ) *Instruction
SetMinPub 设置价格账户的最小发布者数量
func (*InstructionBuilder) UpdPrice ¶
func (i *InstructionBuilder) UpdPrice( fundingKey solana.PublicKey, priceKey solana.PublicKey, payload CommandUpdPrice, ) *Instruction
UpdPrice 向价格账户发布新的组件价格
func (*InstructionBuilder) UpdPriceNoFailOnError ¶
func (i *InstructionBuilder) UpdPriceNoFailOnError( fundingKey solana.PublicKey, priceKey solana.PublicKey, payload CommandUpdPrice, ) *Instruction
UpdPriceNoFailOnError 向价格账户发布新的组件价格,忽略错误
func (*InstructionBuilder) UpdProduct ¶
func (i *InstructionBuilder) UpdProduct( fundingKey solana.PublicKey, productKey solana.PublicKey, payload CommandUpdProduct, ) *Instruction
UpdProduct 更新产品账户
func (*InstructionBuilder) UpdTest ¶
func (i *InstructionBuilder) UpdTest( fundingKey solana.PublicKey, testKey solana.PublicKey, payload CommandUpdTest, ) *Instruction
UpdTest 运行聚合价格测试
type MappingAccount ¶
type MappingAccount struct { AccountHeader Num uint32 // number of keys Pad1 uint32 // reserved field Next solana.PublicKey // pubkey of next mapping account Products [640]solana.PublicKey }
MappingAccount 是Pyth上所有产品的单向链表的一部分
func (*MappingAccount) ProductKeys ¶
func (m *MappingAccount) ProductKeys() []solana.PublicKey
ProductKeys 返回此映射引用的产品密钥切片,不包括空条目
func (*MappingAccount) UnmarshalBinary ¶
func (m *MappingAccount) UnmarshalBinary(buf []byte) error
UnmarshalBinary 从链上格式解码映射账户
type MappingAccountEntry ¶
type MappingAccountEntry struct { *MappingAccount Pubkey solana.PublicKey `json:"pubkey"` Slot uint64 `json:"slot"` }
MappingAccountEntry is a versioned mapping account and its pubkey.
type PriceAccount ¶
type PriceAccount struct { AccountHeader PriceType uint32 // price or calculation type Exponent int32 // price exponent Num uint32 // number of component prices NumQt uint32 // number of quoters that make up aggregate LastSlot uint64 // slot of last valid (not unknown) aggregate price ValidSlot uint64 // valid slot of aggregate price Twap Ema // exponential moving average price Twac Ema // exponential moving confidence interval Drv1, Drv2 int64 // reserved for future use Product solana.PublicKey // ProductAccount key Next solana.PublicKey // next PriceAccount key in linked list PrevSlot uint64 // valid slot of previous update PrevPrice int64 // aggregate price of previous update PrevConf uint64 // confidence interval of previous update Drv3 int64 // reserved for future use Agg PriceInfo // aggregate price info Components [32]PriceComp // price components for each quoter }
PriceAccount 表示产品的持续更新价格源
func (*PriceAccount) GetComponent ¶
func (p *PriceAccount) GetComponent(publisher *solana.PublicKey) *PriceComp
GetComponent 返回具有给定发布者密钥的第一个价格组件。可能返回nil
func (*PriceAccount) UnmarshalBinary ¶
func (p *PriceAccount) UnmarshalBinary(buf []byte) error
UnmarshalBinary 从链上格式解码价格账户
type PriceAccountEntry ¶
type PriceAccountEntry struct { *PriceAccount Pubkey solana.PublicKey `json:"pubkey"` Slot uint64 `json:"slot"` }
PriceAccountEntry is a versioned price account and its pubkey.
type PriceAccountStream ¶
type PriceAccountStream struct {
// contains filtered or unexported fields
}
PriceAccountStream 是链上价格账户更新的持续流
func (*PriceAccountStream) Err ¶
func (p *PriceAccountStream) Err() error
Err 返回价格账户流关闭的原因 会阻塞直到流实际关闭 如果关闭是预期的则返回nil
func (*PriceAccountStream) Updates ¶
func (p *PriceAccountStream) Updates() <-chan PriceAccountEntry
Updates 返回包含新价格账户更新的通道
type PriceComp ¶
type PriceComp struct { Publisher solana.PublicKey // key of contributing publisher Agg PriceInfo // price used to compute the current aggregate price Latest PriceInfo // latest price of publisher }
PriceComp 包含特定发布者贡献的价格和置信度
type PriceEventHandler ¶
type PriceEventHandler struct {
// contains filtered or unexported fields
}
PriceEventHandler 提供Pyth更新的回调式接口
Example ¶
ctx, cancel := context.WithCancel(context.Background()) defer cancel() wallet, err := gosolana.NewWallet(ctx, gosolana.Option{ RpcUrl: rpc.DevNet_RPC, WsUrl: rpc.DevNet_WS, }) if err != nil { log.Fatalf("Failed to create wallet: %v", err) } // 连接到Solana devnet上的Pyth client := NewClient(Devnet, wallet.GetClient(), wallet.GetWsClient()) // 打开新的事件流 stream := client.StreamPriceAccounts() handler := NewPriceEventHandler(stream) // 订阅价格账户变更 priceKey := solana.MustPublicKeyFromBase58("J83w4HKfqxwcq3BEMMkPFSppX3gqekLyLJBexebFVkix") handler.OnPriceChange(priceKey, func(info PriceUpdate) { price, conf, ok := info.Current() if ok { log.Printf("Price change: $%s ± $%s", price, conf) } }) // 一段时间后关闭流 <-time.After(10 * time.Second) stream.Close()
Output:
func NewPriceEventHandler ¶
func NewPriceEventHandler(stream *PriceAccountStream) *PriceEventHandler
NewPriceEventHandler 创建一个新的流事件处理器
注意:不能在事件处理器之间重用同一个流
func (*PriceEventHandler) Err ¶
func (p *PriceEventHandler) Err() error
Err 返回底层价格账户流关闭的原因
会阻塞直到流实际关闭 如果关闭是预期的则返回nil
此函数返回后事件处理器将不再发送任何回调 可以用此函数作为与回调相关的清理任务的屏障
func (*PriceEventHandler) OnComponentChange ¶
func (p *PriceEventHandler) OnComponentChange(priceKey solana.PublicKey, publisher solana.PublicKey, callback func(PriceUpdate)) CallbackHandle
OnComponentChange 注册一个回调函数,当给定(价格账户,发布者账户)对的价格组件变化时调用
func (*PriceEventHandler) OnPriceChange ¶
func (p *PriceEventHandler) OnPriceChange(priceKey solana.PublicKey, callback func(PriceUpdate)) CallbackHandle
OnPriceChange 注册一个回调函数,当指定价格账户的聚合价格变化时调用
type PriceInfo ¶
type PriceInfo struct { Price int64 // current price Conf uint64 // confidence interval around the price Status uint32 // status of price CorpAct uint32 PubSlot uint64 // valid publishing slot }
PriceInfo 包含特定slot的价格和置信度
此结构可以表示发布者的贡献或价格聚合的结果
func (*PriceInfo) HasChanged ¶
HasChanged 返回此价格信息与另一个价格信息之间是否有变化
type PriceUpdate ¶
type PriceUpdate struct { Account *PriceAccount PreviousInfo *PriceInfo CurrentInfo *PriceInfo }
PriceUpdate 当聚合价格或组件价格更新时返回给回调函数
type ProductAccount ¶
type ProductAccount struct { ProductAccountHeader Attrs AttrsMap `json:"attrs"` // key-value string pairs of additional data }
ProductAccount 包含单个产品的元数据, 例如其符号和基础/报价货币
func (*ProductAccount) UnmarshalBinary ¶
func (p *ProductAccount) UnmarshalBinary(buf []byte) error
UnmarshalBinary 从链上格式解码产品账户
func (*ProductAccount) UnmarshalJSON ¶
func (p *ProductAccount) UnmarshalJSON(buf []byte) error
UnmarshalJSON 从JSON解码产品账户内容
type ProductAccountEntry ¶
type ProductAccountEntry struct { *ProductAccount Pubkey solana.PublicKey `json:"pubkey"` Slot uint64 `json:"slot"` }
ProductAccountEntry is a versioned product account and its pubkey.
type ProductAccountHeader ¶
type ProductAccountHeader struct { AccountHeader `json:"-"` FirstPrice solana.PublicKey `json:"first_price"` // first price account in list }
type RawProductAccount ¶
type RawProductAccount struct { ProductAccountHeader AttrsData [464]byte }