mirror of
				https://source.quilibrium.com/quilibrium/ceremonyclient.git
				synced 2025-11-04 00:37:28 +00:00 
			
		
		
		
	[PROTO-54] – Token Supply Info gRPC
This commit is contained in:
		
							parent
							
								
									2fe0f7180a
								
							
						
					
					
						commit
						8c73302d27
					
				@ -7,6 +7,7 @@ import (
 | 
				
			|||||||
	"source.quilibrium.com/quilibrium/monorepo/node/consensus"
 | 
						"source.quilibrium.com/quilibrium/monorepo/node/consensus"
 | 
				
			||||||
	"source.quilibrium.com/quilibrium/monorepo/node/execution"
 | 
						"source.quilibrium.com/quilibrium/monorepo/node/execution"
 | 
				
			||||||
	"source.quilibrium.com/quilibrium/monorepo/node/execution/ceremony"
 | 
						"source.quilibrium.com/quilibrium/monorepo/node/execution/ceremony"
 | 
				
			||||||
 | 
						"source.quilibrium.com/quilibrium/monorepo/node/keys"
 | 
				
			||||||
	"source.quilibrium.com/quilibrium/monorepo/node/p2p"
 | 
						"source.quilibrium.com/quilibrium/monorepo/node/p2p"
 | 
				
			||||||
	"source.quilibrium.com/quilibrium/monorepo/node/store"
 | 
						"source.quilibrium.com/quilibrium/monorepo/node/store"
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
@ -14,6 +15,7 @@ import (
 | 
				
			|||||||
type Node struct {
 | 
					type Node struct {
 | 
				
			||||||
	logger      *zap.Logger
 | 
						logger      *zap.Logger
 | 
				
			||||||
	clockStore  store.ClockStore
 | 
						clockStore  store.ClockStore
 | 
				
			||||||
 | 
						keyManager  keys.KeyManager
 | 
				
			||||||
	pubSub      p2p.PubSub
 | 
						pubSub      p2p.PubSub
 | 
				
			||||||
	execEngines map[string]execution.ExecutionEngine
 | 
						execEngines map[string]execution.ExecutionEngine
 | 
				
			||||||
	engine      consensus.ConsensusEngine
 | 
						engine      consensus.ConsensusEngine
 | 
				
			||||||
@ -22,6 +24,7 @@ type Node struct {
 | 
				
			|||||||
func newNode(
 | 
					func newNode(
 | 
				
			||||||
	logger *zap.Logger,
 | 
						logger *zap.Logger,
 | 
				
			||||||
	clockStore store.ClockStore,
 | 
						clockStore store.ClockStore,
 | 
				
			||||||
 | 
						keyManager keys.KeyManager,
 | 
				
			||||||
	pubSub p2p.PubSub,
 | 
						pubSub p2p.PubSub,
 | 
				
			||||||
	ceremonyExecutionEngine *ceremony.CeremonyExecutionEngine,
 | 
						ceremonyExecutionEngine *ceremony.CeremonyExecutionEngine,
 | 
				
			||||||
	engine consensus.ConsensusEngine,
 | 
						engine consensus.ConsensusEngine,
 | 
				
			||||||
@ -38,6 +41,7 @@ func newNode(
 | 
				
			|||||||
	return &Node{
 | 
						return &Node{
 | 
				
			||||||
		logger,
 | 
							logger,
 | 
				
			||||||
		clockStore,
 | 
							clockStore,
 | 
				
			||||||
 | 
							keyManager,
 | 
				
			||||||
		pubSub,
 | 
							pubSub,
 | 
				
			||||||
		execEngines,
 | 
							execEngines,
 | 
				
			||||||
		engine,
 | 
							engine,
 | 
				
			||||||
@ -71,6 +75,10 @@ func (n *Node) GetClockStore() store.ClockStore {
 | 
				
			|||||||
	return n.clockStore
 | 
						return n.clockStore
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func (n *Node) GetKeyManager() keys.KeyManager {
 | 
				
			||||||
 | 
						return n.keyManager
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func (n *Node) GetPubSub() p2p.PubSub {
 | 
					func (n *Node) GetPubSub() p2p.PubSub {
 | 
				
			||||||
	return n.pubSub
 | 
						return n.pubSub
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
@ -26,16 +26,16 @@ func NewNode(configConfig *config.Config) (*Node, error) {
 | 
				
			|||||||
	dbConfig := configConfig.DB
 | 
						dbConfig := configConfig.DB
 | 
				
			||||||
	db := store.NewPebbleDB(dbConfig)
 | 
						db := store.NewPebbleDB(dbConfig)
 | 
				
			||||||
	pebbleClockStore := store.NewPebbleClockStore(db, zapLogger)
 | 
						pebbleClockStore := store.NewPebbleClockStore(db, zapLogger)
 | 
				
			||||||
 | 
						keyConfig := configConfig.Key
 | 
				
			||||||
 | 
						fileKeyManager := keys.NewFileKeyManager(keyConfig, zapLogger)
 | 
				
			||||||
	p2PConfig := configConfig.P2P
 | 
						p2PConfig := configConfig.P2P
 | 
				
			||||||
	blossomSub := p2p.NewBlossomSub(p2PConfig, zapLogger)
 | 
						blossomSub := p2p.NewBlossomSub(p2PConfig, zapLogger)
 | 
				
			||||||
	engineConfig := configConfig.Engine
 | 
						engineConfig := configConfig.Engine
 | 
				
			||||||
	keyConfig := configConfig.Key
 | 
					 | 
				
			||||||
	fileKeyManager := keys.NewFileKeyManager(keyConfig, zapLogger)
 | 
					 | 
				
			||||||
	pebbleKeyStore := store.NewPebbleKeyStore(db, zapLogger)
 | 
						pebbleKeyStore := store.NewPebbleKeyStore(db, zapLogger)
 | 
				
			||||||
	ceremonyDataClockConsensusEngine := ceremony.NewCeremonyDataClockConsensusEngine(engineConfig, zapLogger, fileKeyManager, pebbleClockStore, pebbleKeyStore, blossomSub)
 | 
						ceremonyDataClockConsensusEngine := ceremony.NewCeremonyDataClockConsensusEngine(engineConfig, zapLogger, fileKeyManager, pebbleClockStore, pebbleKeyStore, blossomSub)
 | 
				
			||||||
	ceremonyExecutionEngine := ceremony2.NewCeremonyExecutionEngine(zapLogger, ceremonyDataClockConsensusEngine, engineConfig, fileKeyManager, blossomSub, pebbleClockStore, pebbleKeyStore)
 | 
						ceremonyExecutionEngine := ceremony2.NewCeremonyExecutionEngine(zapLogger, ceremonyDataClockConsensusEngine, engineConfig, fileKeyManager, blossomSub, pebbleClockStore, pebbleKeyStore)
 | 
				
			||||||
	masterClockConsensusEngine := master.NewMasterClockConsensusEngine(engineConfig, zapLogger, pebbleClockStore, fileKeyManager, blossomSub)
 | 
						masterClockConsensusEngine := master.NewMasterClockConsensusEngine(engineConfig, zapLogger, pebbleClockStore, fileKeyManager, blossomSub)
 | 
				
			||||||
	node, err := newNode(zapLogger, pebbleClockStore, blossomSub, ceremonyExecutionEngine, masterClockConsensusEngine)
 | 
						node, err := newNode(zapLogger, pebbleClockStore, fileKeyManager, blossomSub, ceremonyExecutionEngine, masterClockConsensusEngine)
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		return nil, err
 | 
							return nil, err
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
				
			|||||||
@ -92,6 +92,7 @@ func main() {
 | 
				
			|||||||
			nodeConfig.ListenRestMultiaddr,
 | 
								nodeConfig.ListenRestMultiaddr,
 | 
				
			||||||
			node.GetLogger(),
 | 
								node.GetLogger(),
 | 
				
			||||||
			node.GetClockStore(),
 | 
								node.GetClockStore(),
 | 
				
			||||||
 | 
								node.GetKeyManager(),
 | 
				
			||||||
			node.GetPubSub(),
 | 
								node.GetPubSub(),
 | 
				
			||||||
			node.GetExecutionEngines(),
 | 
								node.GetExecutionEngines(),
 | 
				
			||||||
		)
 | 
							)
 | 
				
			||||||
 | 
				
			|||||||
@ -560,6 +560,113 @@ func (x *NetworkInfoResponse) GetNetworkInfo() []*NetworkInfo {
 | 
				
			|||||||
	return nil
 | 
						return nil
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					type GetTokenInfoRequest struct {
 | 
				
			||||||
 | 
						state         protoimpl.MessageState
 | 
				
			||||||
 | 
						sizeCache     protoimpl.SizeCache
 | 
				
			||||||
 | 
						unknownFields protoimpl.UnknownFields
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func (x *GetTokenInfoRequest) Reset() {
 | 
				
			||||||
 | 
						*x = GetTokenInfoRequest{}
 | 
				
			||||||
 | 
						if protoimpl.UnsafeEnabled {
 | 
				
			||||||
 | 
							mi := &file_node_proto_msgTypes[10]
 | 
				
			||||||
 | 
							ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 | 
				
			||||||
 | 
							ms.StoreMessageInfo(mi)
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func (x *GetTokenInfoRequest) String() string {
 | 
				
			||||||
 | 
						return protoimpl.X.MessageStringOf(x)
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func (*GetTokenInfoRequest) ProtoMessage() {}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func (x *GetTokenInfoRequest) ProtoReflect() protoreflect.Message {
 | 
				
			||||||
 | 
						mi := &file_node_proto_msgTypes[10]
 | 
				
			||||||
 | 
						if protoimpl.UnsafeEnabled && x != nil {
 | 
				
			||||||
 | 
							ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 | 
				
			||||||
 | 
							if ms.LoadMessageInfo() == nil {
 | 
				
			||||||
 | 
								ms.StoreMessageInfo(mi)
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							return ms
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						return mi.MessageOf(x)
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Deprecated: Use GetTokenInfoRequest.ProtoReflect.Descriptor instead.
 | 
				
			||||||
 | 
					func (*GetTokenInfoRequest) Descriptor() ([]byte, []int) {
 | 
				
			||||||
 | 
						return file_node_proto_rawDescGZIP(), []int{10}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					type TokenInfoResponse struct {
 | 
				
			||||||
 | 
						state         protoimpl.MessageState
 | 
				
			||||||
 | 
						sizeCache     protoimpl.SizeCache
 | 
				
			||||||
 | 
						unknownFields protoimpl.UnknownFields
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// Total active token supply, as a 256 bit integer representing maximum
 | 
				
			||||||
 | 
						// divisble units. 1 QUIL = 8000000000 units, 50 QUIL would be represented by
 | 
				
			||||||
 | 
						// 0x0000000000000000000000000000000000000000000000000000005D21DBA000
 | 
				
			||||||
 | 
						ConfirmedTokenSupply []byte `protobuf:"bytes,1,opt,name=confirmed_token_supply,json=confirmedTokenSupply,proto3" json:"confirmed_token_supply,omitempty"`
 | 
				
			||||||
 | 
						// Total token supply, including unconfirmed frame data, as a 256 bit integer.
 | 
				
			||||||
 | 
						UnconfirmedTokenSupply []byte `protobuf:"bytes,2,opt,name=unconfirmed_token_supply,json=unconfirmedTokenSupply,proto3" json:"unconfirmed_token_supply,omitempty"`
 | 
				
			||||||
 | 
						// The total number of tokens owned by the prover address associated with the
 | 
				
			||||||
 | 
						// node.
 | 
				
			||||||
 | 
						OwnedTokens []byte `protobuf:"bytes,3,opt,name=owned_tokens,json=ownedTokens,proto3" json:"owned_tokens,omitempty"`
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func (x *TokenInfoResponse) Reset() {
 | 
				
			||||||
 | 
						*x = TokenInfoResponse{}
 | 
				
			||||||
 | 
						if protoimpl.UnsafeEnabled {
 | 
				
			||||||
 | 
							mi := &file_node_proto_msgTypes[11]
 | 
				
			||||||
 | 
							ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 | 
				
			||||||
 | 
							ms.StoreMessageInfo(mi)
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func (x *TokenInfoResponse) String() string {
 | 
				
			||||||
 | 
						return protoimpl.X.MessageStringOf(x)
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func (*TokenInfoResponse) ProtoMessage() {}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func (x *TokenInfoResponse) ProtoReflect() protoreflect.Message {
 | 
				
			||||||
 | 
						mi := &file_node_proto_msgTypes[11]
 | 
				
			||||||
 | 
						if protoimpl.UnsafeEnabled && x != nil {
 | 
				
			||||||
 | 
							ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 | 
				
			||||||
 | 
							if ms.LoadMessageInfo() == nil {
 | 
				
			||||||
 | 
								ms.StoreMessageInfo(mi)
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							return ms
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						return mi.MessageOf(x)
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Deprecated: Use TokenInfoResponse.ProtoReflect.Descriptor instead.
 | 
				
			||||||
 | 
					func (*TokenInfoResponse) Descriptor() ([]byte, []int) {
 | 
				
			||||||
 | 
						return file_node_proto_rawDescGZIP(), []int{11}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func (x *TokenInfoResponse) GetConfirmedTokenSupply() []byte {
 | 
				
			||||||
 | 
						if x != nil {
 | 
				
			||||||
 | 
							return x.ConfirmedTokenSupply
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						return nil
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func (x *TokenInfoResponse) GetUnconfirmedTokenSupply() []byte {
 | 
				
			||||||
 | 
						if x != nil {
 | 
				
			||||||
 | 
							return x.UnconfirmedTokenSupply
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						return nil
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func (x *TokenInfoResponse) GetOwnedTokens() []byte {
 | 
				
			||||||
 | 
						if x != nil {
 | 
				
			||||||
 | 
							return x.OwnedTokens
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						return nil
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
var File_node_proto protoreflect.FileDescriptor
 | 
					var File_node_proto protoreflect.FileDescriptor
 | 
				
			||||||
 | 
					
 | 
				
			||||||
var file_node_proto_rawDesc = []byte{
 | 
					var file_node_proto_rawDesc = []byte{
 | 
				
			||||||
@ -631,7 +738,19 @@ var file_node_proto_rawDesc = []byte{
 | 
				
			|||||||
	0x71, 0x75, 0x69, 0x6c, 0x69, 0x62, 0x72, 0x69, 0x75, 0x6d, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e,
 | 
						0x71, 0x75, 0x69, 0x6c, 0x69, 0x62, 0x72, 0x69, 0x75, 0x6d, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e,
 | 
				
			||||||
	0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x70, 0x62, 0x2e, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x49,
 | 
						0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x70, 0x62, 0x2e, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x49,
 | 
				
			||||||
	0x6e, 0x66, 0x6f, 0x52, 0x0b, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x49, 0x6e, 0x66, 0x6f,
 | 
						0x6e, 0x66, 0x6f, 0x52, 0x0b, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x49, 0x6e, 0x66, 0x6f,
 | 
				
			||||||
	0x32, 0xaf, 0x03, 0x0a, 0x0b, 0x4e, 0x6f, 0x64, 0x65, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65,
 | 
						0x22, 0x15, 0x0a, 0x13, 0x47, 0x65, 0x74, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x49, 0x6e, 0x66, 0x6f,
 | 
				
			||||||
 | 
						0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0xa6, 0x01, 0x0a, 0x11, 0x54, 0x6f, 0x6b, 0x65,
 | 
				
			||||||
 | 
						0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x34, 0x0a,
 | 
				
			||||||
 | 
						0x16, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x65, 0x64, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e,
 | 
				
			||||||
 | 
						0x5f, 0x73, 0x75, 0x70, 0x70, 0x6c, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x14, 0x63,
 | 
				
			||||||
 | 
						0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x65, 0x64, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x53, 0x75, 0x70,
 | 
				
			||||||
 | 
						0x70, 0x6c, 0x79, 0x12, 0x38, 0x0a, 0x18, 0x75, 0x6e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d,
 | 
				
			||||||
 | 
						0x65, 0x64, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x5f, 0x73, 0x75, 0x70, 0x70, 0x6c, 0x79, 0x18,
 | 
				
			||||||
 | 
						0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x16, 0x75, 0x6e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d,
 | 
				
			||||||
 | 
						0x65, 0x64, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x53, 0x75, 0x70, 0x70, 0x6c, 0x79, 0x12, 0x21, 0x0a,
 | 
				
			||||||
 | 
						0x0c, 0x6f, 0x77, 0x6e, 0x65, 0x64, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x73, 0x18, 0x03, 0x20,
 | 
				
			||||||
 | 
						0x01, 0x28, 0x0c, 0x52, 0x0b, 0x6f, 0x77, 0x6e, 0x65, 0x64, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x73,
 | 
				
			||||||
 | 
						0x32, 0x99, 0x04, 0x0a, 0x0b, 0x4e, 0x6f, 0x64, 0x65, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65,
 | 
				
			||||||
	0x12, 0x5f, 0x0a, 0x09, 0x47, 0x65, 0x74, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x73, 0x12, 0x29, 0x2e,
 | 
						0x12, 0x5f, 0x0a, 0x09, 0x47, 0x65, 0x74, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x73, 0x12, 0x29, 0x2e,
 | 
				
			||||||
	0x71, 0x75, 0x69, 0x6c, 0x69, 0x62, 0x72, 0x69, 0x75, 0x6d, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e,
 | 
						0x71, 0x75, 0x69, 0x6c, 0x69, 0x62, 0x72, 0x69, 0x75, 0x6d, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e,
 | 
				
			||||||
	0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x70, 0x62, 0x2e, 0x47, 0x65, 0x74, 0x46, 0x72, 0x61, 0x6d, 0x65,
 | 
						0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x70, 0x62, 0x2e, 0x47, 0x65, 0x74, 0x46, 0x72, 0x61, 0x6d, 0x65,
 | 
				
			||||||
@ -658,11 +777,17 @@ var file_node_proto_rawDesc = []byte{
 | 
				
			|||||||
	0x75, 0x65, 0x73, 0x74, 0x1a, 0x2c, 0x2e, 0x71, 0x75, 0x69, 0x6c, 0x69, 0x62, 0x72, 0x69, 0x75,
 | 
						0x75, 0x65, 0x73, 0x74, 0x1a, 0x2c, 0x2e, 0x71, 0x75, 0x69, 0x6c, 0x69, 0x62, 0x72, 0x69, 0x75,
 | 
				
			||||||
	0x6d, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x70, 0x62, 0x2e, 0x4e,
 | 
						0x6d, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x70, 0x62, 0x2e, 0x4e,
 | 
				
			||||||
	0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e,
 | 
						0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e,
 | 
				
			||||||
	0x73, 0x65, 0x42, 0x3a, 0x5a, 0x38, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2e, 0x71, 0x75, 0x69,
 | 
						0x73, 0x65, 0x12, 0x68, 0x0a, 0x0c, 0x47, 0x65, 0x74, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x49, 0x6e,
 | 
				
			||||||
	0x6c, 0x69, 0x62, 0x72, 0x69, 0x75, 0x6d, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x71, 0x75, 0x69, 0x6c,
 | 
						0x66, 0x6f, 0x12, 0x2c, 0x2e, 0x71, 0x75, 0x69, 0x6c, 0x69, 0x62, 0x72, 0x69, 0x75, 0x6d, 0x2e,
 | 
				
			||||||
	0x69, 0x62, 0x72, 0x69, 0x75, 0x6d, 0x2f, 0x6d, 0x6f, 0x6e, 0x6f, 0x72, 0x65, 0x70, 0x6f, 0x2f,
 | 
						0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x70, 0x62, 0x2e, 0x47, 0x65, 0x74,
 | 
				
			||||||
	0x6e, 0x6f, 0x64, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x73, 0x62, 0x06,
 | 
						0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
 | 
				
			||||||
	0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
 | 
						0x1a, 0x2a, 0x2e, 0x71, 0x75, 0x69, 0x6c, 0x69, 0x62, 0x72, 0x69, 0x75, 0x6d, 0x2e, 0x6e, 0x6f,
 | 
				
			||||||
 | 
						0x64, 0x65, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x70, 0x62, 0x2e, 0x54, 0x6f, 0x6b, 0x65, 0x6e,
 | 
				
			||||||
 | 
						0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x3a, 0x5a, 0x38,
 | 
				
			||||||
 | 
						0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2e, 0x71, 0x75, 0x69, 0x6c, 0x69, 0x62, 0x72, 0x69, 0x75,
 | 
				
			||||||
 | 
						0x6d, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x71, 0x75, 0x69, 0x6c, 0x69, 0x62, 0x72, 0x69, 0x75, 0x6d,
 | 
				
			||||||
 | 
						0x2f, 0x6d, 0x6f, 0x6e, 0x6f, 0x72, 0x65, 0x70, 0x6f, 0x2f, 0x6e, 0x6f, 0x64, 0x65, 0x2f, 0x70,
 | 
				
			||||||
 | 
						0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x73, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
var (
 | 
					var (
 | 
				
			||||||
@ -677,7 +802,7 @@ func file_node_proto_rawDescGZIP() []byte {
 | 
				
			|||||||
	return file_node_proto_rawDescData
 | 
						return file_node_proto_rawDescData
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
var file_node_proto_msgTypes = make([]protoimpl.MessageInfo, 10)
 | 
					var file_node_proto_msgTypes = make([]protoimpl.MessageInfo, 12)
 | 
				
			||||||
var file_node_proto_goTypes = []interface{}{
 | 
					var file_node_proto_goTypes = []interface{}{
 | 
				
			||||||
	(*GetFramesRequest)(nil),      // 0: quilibrium.node.node.pb.GetFramesRequest
 | 
						(*GetFramesRequest)(nil),      // 0: quilibrium.node.node.pb.GetFramesRequest
 | 
				
			||||||
	(*GetFrameInfoRequest)(nil),   // 1: quilibrium.node.node.pb.GetFrameInfoRequest
 | 
						(*GetFrameInfoRequest)(nil),   // 1: quilibrium.node.node.pb.GetFrameInfoRequest
 | 
				
			||||||
@ -689,11 +814,13 @@ var file_node_proto_goTypes = []interface{}{
 | 
				
			|||||||
	(*PeerInfoResponse)(nil),      // 7: quilibrium.node.node.pb.PeerInfoResponse
 | 
						(*PeerInfoResponse)(nil),      // 7: quilibrium.node.node.pb.PeerInfoResponse
 | 
				
			||||||
	(*NetworkInfo)(nil),           // 8: quilibrium.node.node.pb.NetworkInfo
 | 
						(*NetworkInfo)(nil),           // 8: quilibrium.node.node.pb.NetworkInfo
 | 
				
			||||||
	(*NetworkInfoResponse)(nil),   // 9: quilibrium.node.node.pb.NetworkInfoResponse
 | 
						(*NetworkInfoResponse)(nil),   // 9: quilibrium.node.node.pb.NetworkInfoResponse
 | 
				
			||||||
	(*ClockFrame)(nil),            // 10: quilibrium.node.clock.pb.ClockFrame
 | 
						(*GetTokenInfoRequest)(nil),   // 10: quilibrium.node.node.pb.GetTokenInfoRequest
 | 
				
			||||||
 | 
						(*TokenInfoResponse)(nil),     // 11: quilibrium.node.node.pb.TokenInfoResponse
 | 
				
			||||||
 | 
						(*ClockFrame)(nil),            // 12: quilibrium.node.clock.pb.ClockFrame
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
var file_node_proto_depIdxs = []int32{
 | 
					var file_node_proto_depIdxs = []int32{
 | 
				
			||||||
	10, // 0: quilibrium.node.node.pb.FramesResponse.truncated_clock_frames:type_name -> quilibrium.node.clock.pb.ClockFrame
 | 
						12, // 0: quilibrium.node.node.pb.FramesResponse.truncated_clock_frames:type_name -> quilibrium.node.clock.pb.ClockFrame
 | 
				
			||||||
	10, // 1: quilibrium.node.node.pb.FrameInfoResponse.clock_frame:type_name -> quilibrium.node.clock.pb.ClockFrame
 | 
						12, // 1: quilibrium.node.node.pb.FrameInfoResponse.clock_frame:type_name -> quilibrium.node.clock.pb.ClockFrame
 | 
				
			||||||
	6,  // 2: quilibrium.node.node.pb.PeerInfoResponse.peer_info:type_name -> quilibrium.node.node.pb.PeerInfo
 | 
						6,  // 2: quilibrium.node.node.pb.PeerInfoResponse.peer_info:type_name -> quilibrium.node.node.pb.PeerInfo
 | 
				
			||||||
	6,  // 3: quilibrium.node.node.pb.PeerInfoResponse.uncooperative_peer_info:type_name -> quilibrium.node.node.pb.PeerInfo
 | 
						6,  // 3: quilibrium.node.node.pb.PeerInfoResponse.uncooperative_peer_info:type_name -> quilibrium.node.node.pb.PeerInfo
 | 
				
			||||||
	8,  // 4: quilibrium.node.node.pb.NetworkInfoResponse.network_info:type_name -> quilibrium.node.node.pb.NetworkInfo
 | 
						8,  // 4: quilibrium.node.node.pb.NetworkInfoResponse.network_info:type_name -> quilibrium.node.node.pb.NetworkInfo
 | 
				
			||||||
@ -701,12 +828,14 @@ var file_node_proto_depIdxs = []int32{
 | 
				
			|||||||
	1,  // 6: quilibrium.node.node.pb.NodeService.GetFrameInfo:input_type -> quilibrium.node.node.pb.GetFrameInfoRequest
 | 
						1,  // 6: quilibrium.node.node.pb.NodeService.GetFrameInfo:input_type -> quilibrium.node.node.pb.GetFrameInfoRequest
 | 
				
			||||||
	2,  // 7: quilibrium.node.node.pb.NodeService.GetPeerInfo:input_type -> quilibrium.node.node.pb.GetPeerInfoRequest
 | 
						2,  // 7: quilibrium.node.node.pb.NodeService.GetPeerInfo:input_type -> quilibrium.node.node.pb.GetPeerInfoRequest
 | 
				
			||||||
	3,  // 8: quilibrium.node.node.pb.NodeService.GetNetworkInfo:input_type -> quilibrium.node.node.pb.GetNetworkInfoRequest
 | 
						3,  // 8: quilibrium.node.node.pb.NodeService.GetNetworkInfo:input_type -> quilibrium.node.node.pb.GetNetworkInfoRequest
 | 
				
			||||||
	4,  // 9: quilibrium.node.node.pb.NodeService.GetFrames:output_type -> quilibrium.node.node.pb.FramesResponse
 | 
						10, // 9: quilibrium.node.node.pb.NodeService.GetTokenInfo:input_type -> quilibrium.node.node.pb.GetTokenInfoRequest
 | 
				
			||||||
	5,  // 10: quilibrium.node.node.pb.NodeService.GetFrameInfo:output_type -> quilibrium.node.node.pb.FrameInfoResponse
 | 
						4,  // 10: quilibrium.node.node.pb.NodeService.GetFrames:output_type -> quilibrium.node.node.pb.FramesResponse
 | 
				
			||||||
	7,  // 11: quilibrium.node.node.pb.NodeService.GetPeerInfo:output_type -> quilibrium.node.node.pb.PeerInfoResponse
 | 
						5,  // 11: quilibrium.node.node.pb.NodeService.GetFrameInfo:output_type -> quilibrium.node.node.pb.FrameInfoResponse
 | 
				
			||||||
	9,  // 12: quilibrium.node.node.pb.NodeService.GetNetworkInfo:output_type -> quilibrium.node.node.pb.NetworkInfoResponse
 | 
						7,  // 12: quilibrium.node.node.pb.NodeService.GetPeerInfo:output_type -> quilibrium.node.node.pb.PeerInfoResponse
 | 
				
			||||||
	9,  // [9:13] is the sub-list for method output_type
 | 
						9,  // 13: quilibrium.node.node.pb.NodeService.GetNetworkInfo:output_type -> quilibrium.node.node.pb.NetworkInfoResponse
 | 
				
			||||||
	5,  // [5:9] is the sub-list for method input_type
 | 
						11, // 14: quilibrium.node.node.pb.NodeService.GetTokenInfo:output_type -> quilibrium.node.node.pb.TokenInfoResponse
 | 
				
			||||||
 | 
						10, // [10:15] is the sub-list for method output_type
 | 
				
			||||||
 | 
						5,  // [5:10] is the sub-list for method input_type
 | 
				
			||||||
	5,  // [5:5] is the sub-list for extension type_name
 | 
						5,  // [5:5] is the sub-list for extension type_name
 | 
				
			||||||
	5,  // [5:5] is the sub-list for extension extendee
 | 
						5,  // [5:5] is the sub-list for extension extendee
 | 
				
			||||||
	0,  // [0:5] is the sub-list for field type_name
 | 
						0,  // [0:5] is the sub-list for field type_name
 | 
				
			||||||
@ -839,6 +968,30 @@ func file_node_proto_init() {
 | 
				
			|||||||
				return nil
 | 
									return nil
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
							file_node_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} {
 | 
				
			||||||
 | 
								switch v := v.(*GetTokenInfoRequest); i {
 | 
				
			||||||
 | 
								case 0:
 | 
				
			||||||
 | 
									return &v.state
 | 
				
			||||||
 | 
								case 1:
 | 
				
			||||||
 | 
									return &v.sizeCache
 | 
				
			||||||
 | 
								case 2:
 | 
				
			||||||
 | 
									return &v.unknownFields
 | 
				
			||||||
 | 
								default:
 | 
				
			||||||
 | 
									return nil
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							file_node_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} {
 | 
				
			||||||
 | 
								switch v := v.(*TokenInfoResponse); i {
 | 
				
			||||||
 | 
								case 0:
 | 
				
			||||||
 | 
									return &v.state
 | 
				
			||||||
 | 
								case 1:
 | 
				
			||||||
 | 
									return &v.sizeCache
 | 
				
			||||||
 | 
								case 2:
 | 
				
			||||||
 | 
									return &v.unknownFields
 | 
				
			||||||
 | 
								default:
 | 
				
			||||||
 | 
									return nil
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	type x struct{}
 | 
						type x struct{}
 | 
				
			||||||
	out := protoimpl.TypeBuilder{
 | 
						out := protoimpl.TypeBuilder{
 | 
				
			||||||
@ -846,7 +999,7 @@ func file_node_proto_init() {
 | 
				
			|||||||
			GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
 | 
								GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
 | 
				
			||||||
			RawDescriptor: file_node_proto_rawDesc,
 | 
								RawDescriptor: file_node_proto_rawDesc,
 | 
				
			||||||
			NumEnums:      0,
 | 
								NumEnums:      0,
 | 
				
			||||||
			NumMessages:   10,
 | 
								NumMessages:   12,
 | 
				
			||||||
			NumExtensions: 0,
 | 
								NumExtensions: 0,
 | 
				
			||||||
			NumServices:   1,
 | 
								NumServices:   1,
 | 
				
			||||||
		},
 | 
							},
 | 
				
			||||||
 | 
				
			|||||||
@ -167,6 +167,40 @@ func local_request_NodeService_GetNetworkInfo_0(ctx context.Context, marshaler r
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func request_NodeService_GetTokenInfo_0(ctx context.Context, marshaler runtime.Marshaler, client NodeServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
 | 
				
			||||||
 | 
						var protoReq GetTokenInfoRequest
 | 
				
			||||||
 | 
						var metadata runtime.ServerMetadata
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						newReader, berr := utilities.IOReaderFactory(req.Body)
 | 
				
			||||||
 | 
						if berr != nil {
 | 
				
			||||||
 | 
							return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr)
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF {
 | 
				
			||||||
 | 
							return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						msg, err := client.GetTokenInfo(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))
 | 
				
			||||||
 | 
						return msg, metadata, err
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func local_request_NodeService_GetTokenInfo_0(ctx context.Context, marshaler runtime.Marshaler, server NodeServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
 | 
				
			||||||
 | 
						var protoReq GetTokenInfoRequest
 | 
				
			||||||
 | 
						var metadata runtime.ServerMetadata
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						newReader, berr := utilities.IOReaderFactory(req.Body)
 | 
				
			||||||
 | 
						if berr != nil {
 | 
				
			||||||
 | 
							return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr)
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF {
 | 
				
			||||||
 | 
							return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						msg, err := server.GetTokenInfo(ctx, &protoReq)
 | 
				
			||||||
 | 
						return msg, metadata, err
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// RegisterNodeServiceHandlerServer registers the http handlers for service NodeService to "mux".
 | 
					// RegisterNodeServiceHandlerServer registers the http handlers for service NodeService to "mux".
 | 
				
			||||||
// UnaryRPC     :call NodeServiceServer directly.
 | 
					// UnaryRPC     :call NodeServiceServer directly.
 | 
				
			||||||
// StreamingRPC :currently unsupported pending https://github.com/grpc/grpc-go/issues/906.
 | 
					// StreamingRPC :currently unsupported pending https://github.com/grpc/grpc-go/issues/906.
 | 
				
			||||||
@ -273,6 +307,31 @@ func RegisterNodeServiceHandlerServer(ctx context.Context, mux *runtime.ServeMux
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	})
 | 
						})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						mux.Handle("POST", pattern_NodeService_GetTokenInfo_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
 | 
				
			||||||
 | 
							ctx, cancel := context.WithCancel(req.Context())
 | 
				
			||||||
 | 
							defer cancel()
 | 
				
			||||||
 | 
							var stream runtime.ServerTransportStream
 | 
				
			||||||
 | 
							ctx = grpc.NewContextWithServerTransportStream(ctx, &stream)
 | 
				
			||||||
 | 
							inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
 | 
				
			||||||
 | 
							var err error
 | 
				
			||||||
 | 
							var annotatedContext context.Context
 | 
				
			||||||
 | 
							annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/quilibrium.node.node.pb.NodeService/GetTokenInfo", runtime.WithHTTPPathPattern("/quilibrium.node.node.pb.NodeService/GetTokenInfo"))
 | 
				
			||||||
 | 
							if err != nil {
 | 
				
			||||||
 | 
								runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
 | 
				
			||||||
 | 
								return
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							resp, md, err := local_request_NodeService_GetTokenInfo_0(annotatedContext, inboundMarshaler, server, req, pathParams)
 | 
				
			||||||
 | 
							md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer())
 | 
				
			||||||
 | 
							annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)
 | 
				
			||||||
 | 
							if err != nil {
 | 
				
			||||||
 | 
								runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)
 | 
				
			||||||
 | 
								return
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							forward_NodeService_GetTokenInfo_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	return nil
 | 
						return nil
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -402,6 +461,28 @@ func RegisterNodeServiceHandlerClient(ctx context.Context, mux *runtime.ServeMux
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	})
 | 
						})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						mux.Handle("POST", pattern_NodeService_GetTokenInfo_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
 | 
				
			||||||
 | 
							ctx, cancel := context.WithCancel(req.Context())
 | 
				
			||||||
 | 
							defer cancel()
 | 
				
			||||||
 | 
							inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
 | 
				
			||||||
 | 
							var err error
 | 
				
			||||||
 | 
							var annotatedContext context.Context
 | 
				
			||||||
 | 
							annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/quilibrium.node.node.pb.NodeService/GetTokenInfo", runtime.WithHTTPPathPattern("/quilibrium.node.node.pb.NodeService/GetTokenInfo"))
 | 
				
			||||||
 | 
							if err != nil {
 | 
				
			||||||
 | 
								runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
 | 
				
			||||||
 | 
								return
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							resp, md, err := request_NodeService_GetTokenInfo_0(annotatedContext, inboundMarshaler, client, req, pathParams)
 | 
				
			||||||
 | 
							annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)
 | 
				
			||||||
 | 
							if err != nil {
 | 
				
			||||||
 | 
								runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)
 | 
				
			||||||
 | 
								return
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							forward_NodeService_GetTokenInfo_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	return nil
 | 
						return nil
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -413,6 +494,8 @@ var (
 | 
				
			|||||||
	pattern_NodeService_GetPeerInfo_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1}, []string{"quilibrium.node.node.pb.NodeService", "GetPeerInfo"}, ""))
 | 
						pattern_NodeService_GetPeerInfo_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1}, []string{"quilibrium.node.node.pb.NodeService", "GetPeerInfo"}, ""))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	pattern_NodeService_GetNetworkInfo_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1}, []string{"quilibrium.node.node.pb.NodeService", "GetNetworkInfo"}, ""))
 | 
						pattern_NodeService_GetNetworkInfo_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1}, []string{"quilibrium.node.node.pb.NodeService", "GetNetworkInfo"}, ""))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						pattern_NodeService_GetTokenInfo_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1}, []string{"quilibrium.node.node.pb.NodeService", "GetTokenInfo"}, ""))
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
var (
 | 
					var (
 | 
				
			||||||
@ -423,4 +506,6 @@ var (
 | 
				
			|||||||
	forward_NodeService_GetPeerInfo_0 = runtime.ForwardResponseMessage
 | 
						forward_NodeService_GetPeerInfo_0 = runtime.ForwardResponseMessage
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	forward_NodeService_GetNetworkInfo_0 = runtime.ForwardResponseMessage
 | 
						forward_NodeService_GetNetworkInfo_0 = runtime.ForwardResponseMessage
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						forward_NodeService_GetTokenInfo_0 = runtime.ForwardResponseMessage
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
				
			|||||||
@ -53,9 +53,24 @@ message NetworkInfoResponse {
 | 
				
			|||||||
  repeated NetworkInfo network_info = 1;
 | 
					  repeated NetworkInfo network_info = 1;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					message GetTokenInfoRequest {}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					message TokenInfoResponse {
 | 
				
			||||||
 | 
					  // Total active token supply, as a 256 bit integer representing maximum
 | 
				
			||||||
 | 
					  // divisble units. 1 QUIL = 8000000000 units, 50 QUIL would be represented by
 | 
				
			||||||
 | 
					  // 0x0000000000000000000000000000000000000000000000000000005D21DBA000
 | 
				
			||||||
 | 
					  bytes confirmed_token_supply = 1;
 | 
				
			||||||
 | 
					  // Total token supply, including unconfirmed frame data, as a 256 bit integer.
 | 
				
			||||||
 | 
					  bytes unconfirmed_token_supply = 2;
 | 
				
			||||||
 | 
					  // The total number of tokens owned by the prover address associated with the
 | 
				
			||||||
 | 
					  // node.
 | 
				
			||||||
 | 
					  bytes owned_tokens = 3;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
service NodeService {
 | 
					service NodeService {
 | 
				
			||||||
  rpc GetFrames(GetFramesRequest) returns (FramesResponse);
 | 
					  rpc GetFrames(GetFramesRequest) returns (FramesResponse);
 | 
				
			||||||
  rpc GetFrameInfo(GetFrameInfoRequest) returns (FrameInfoResponse);
 | 
					  rpc GetFrameInfo(GetFrameInfoRequest) returns (FrameInfoResponse);
 | 
				
			||||||
  rpc GetPeerInfo(GetPeerInfoRequest) returns (PeerInfoResponse);
 | 
					  rpc GetPeerInfo(GetPeerInfoRequest) returns (PeerInfoResponse);
 | 
				
			||||||
  rpc GetNetworkInfo(GetNetworkInfoRequest) returns (NetworkInfoResponse);
 | 
					  rpc GetNetworkInfo(GetNetworkInfoRequest) returns (NetworkInfoResponse);
 | 
				
			||||||
 | 
					  rpc GetTokenInfo(GetTokenInfoRequest) returns (TokenInfoResponse);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@ -23,6 +23,7 @@ const (
 | 
				
			|||||||
	NodeService_GetFrameInfo_FullMethodName   = "/quilibrium.node.node.pb.NodeService/GetFrameInfo"
 | 
						NodeService_GetFrameInfo_FullMethodName   = "/quilibrium.node.node.pb.NodeService/GetFrameInfo"
 | 
				
			||||||
	NodeService_GetPeerInfo_FullMethodName    = "/quilibrium.node.node.pb.NodeService/GetPeerInfo"
 | 
						NodeService_GetPeerInfo_FullMethodName    = "/quilibrium.node.node.pb.NodeService/GetPeerInfo"
 | 
				
			||||||
	NodeService_GetNetworkInfo_FullMethodName = "/quilibrium.node.node.pb.NodeService/GetNetworkInfo"
 | 
						NodeService_GetNetworkInfo_FullMethodName = "/quilibrium.node.node.pb.NodeService/GetNetworkInfo"
 | 
				
			||||||
 | 
						NodeService_GetTokenInfo_FullMethodName   = "/quilibrium.node.node.pb.NodeService/GetTokenInfo"
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// NodeServiceClient is the client API for NodeService service.
 | 
					// NodeServiceClient is the client API for NodeService service.
 | 
				
			||||||
@ -33,6 +34,7 @@ type NodeServiceClient interface {
 | 
				
			|||||||
	GetFrameInfo(ctx context.Context, in *GetFrameInfoRequest, opts ...grpc.CallOption) (*FrameInfoResponse, error)
 | 
						GetFrameInfo(ctx context.Context, in *GetFrameInfoRequest, opts ...grpc.CallOption) (*FrameInfoResponse, error)
 | 
				
			||||||
	GetPeerInfo(ctx context.Context, in *GetPeerInfoRequest, opts ...grpc.CallOption) (*PeerInfoResponse, error)
 | 
						GetPeerInfo(ctx context.Context, in *GetPeerInfoRequest, opts ...grpc.CallOption) (*PeerInfoResponse, error)
 | 
				
			||||||
	GetNetworkInfo(ctx context.Context, in *GetNetworkInfoRequest, opts ...grpc.CallOption) (*NetworkInfoResponse, error)
 | 
						GetNetworkInfo(ctx context.Context, in *GetNetworkInfoRequest, opts ...grpc.CallOption) (*NetworkInfoResponse, error)
 | 
				
			||||||
 | 
						GetTokenInfo(ctx context.Context, in *GetTokenInfoRequest, opts ...grpc.CallOption) (*TokenInfoResponse, error)
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
type nodeServiceClient struct {
 | 
					type nodeServiceClient struct {
 | 
				
			||||||
@ -79,6 +81,15 @@ func (c *nodeServiceClient) GetNetworkInfo(ctx context.Context, in *GetNetworkIn
 | 
				
			|||||||
	return out, nil
 | 
						return out, nil
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func (c *nodeServiceClient) GetTokenInfo(ctx context.Context, in *GetTokenInfoRequest, opts ...grpc.CallOption) (*TokenInfoResponse, error) {
 | 
				
			||||||
 | 
						out := new(TokenInfoResponse)
 | 
				
			||||||
 | 
						err := c.cc.Invoke(ctx, NodeService_GetTokenInfo_FullMethodName, in, out, opts...)
 | 
				
			||||||
 | 
						if err != nil {
 | 
				
			||||||
 | 
							return nil, err
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						return out, nil
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// NodeServiceServer is the server API for NodeService service.
 | 
					// NodeServiceServer is the server API for NodeService service.
 | 
				
			||||||
// All implementations must embed UnimplementedNodeServiceServer
 | 
					// All implementations must embed UnimplementedNodeServiceServer
 | 
				
			||||||
// for forward compatibility
 | 
					// for forward compatibility
 | 
				
			||||||
@ -87,6 +98,7 @@ type NodeServiceServer interface {
 | 
				
			|||||||
	GetFrameInfo(context.Context, *GetFrameInfoRequest) (*FrameInfoResponse, error)
 | 
						GetFrameInfo(context.Context, *GetFrameInfoRequest) (*FrameInfoResponse, error)
 | 
				
			||||||
	GetPeerInfo(context.Context, *GetPeerInfoRequest) (*PeerInfoResponse, error)
 | 
						GetPeerInfo(context.Context, *GetPeerInfoRequest) (*PeerInfoResponse, error)
 | 
				
			||||||
	GetNetworkInfo(context.Context, *GetNetworkInfoRequest) (*NetworkInfoResponse, error)
 | 
						GetNetworkInfo(context.Context, *GetNetworkInfoRequest) (*NetworkInfoResponse, error)
 | 
				
			||||||
 | 
						GetTokenInfo(context.Context, *GetTokenInfoRequest) (*TokenInfoResponse, error)
 | 
				
			||||||
	mustEmbedUnimplementedNodeServiceServer()
 | 
						mustEmbedUnimplementedNodeServiceServer()
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -106,6 +118,9 @@ func (UnimplementedNodeServiceServer) GetPeerInfo(context.Context, *GetPeerInfoR
 | 
				
			|||||||
func (UnimplementedNodeServiceServer) GetNetworkInfo(context.Context, *GetNetworkInfoRequest) (*NetworkInfoResponse, error) {
 | 
					func (UnimplementedNodeServiceServer) GetNetworkInfo(context.Context, *GetNetworkInfoRequest) (*NetworkInfoResponse, error) {
 | 
				
			||||||
	return nil, status.Errorf(codes.Unimplemented, "method GetNetworkInfo not implemented")
 | 
						return nil, status.Errorf(codes.Unimplemented, "method GetNetworkInfo not implemented")
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					func (UnimplementedNodeServiceServer) GetTokenInfo(context.Context, *GetTokenInfoRequest) (*TokenInfoResponse, error) {
 | 
				
			||||||
 | 
						return nil, status.Errorf(codes.Unimplemented, "method GetTokenInfo not implemented")
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
func (UnimplementedNodeServiceServer) mustEmbedUnimplementedNodeServiceServer() {}
 | 
					func (UnimplementedNodeServiceServer) mustEmbedUnimplementedNodeServiceServer() {}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// UnsafeNodeServiceServer may be embedded to opt out of forward compatibility for this service.
 | 
					// UnsafeNodeServiceServer may be embedded to opt out of forward compatibility for this service.
 | 
				
			||||||
@ -191,6 +206,24 @@ func _NodeService_GetNetworkInfo_Handler(srv interface{}, ctx context.Context, d
 | 
				
			|||||||
	return interceptor(ctx, in, info, handler)
 | 
						return interceptor(ctx, in, info, handler)
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func _NodeService_GetTokenInfo_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
 | 
				
			||||||
 | 
						in := new(GetTokenInfoRequest)
 | 
				
			||||||
 | 
						if err := dec(in); err != nil {
 | 
				
			||||||
 | 
							return nil, err
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						if interceptor == nil {
 | 
				
			||||||
 | 
							return srv.(NodeServiceServer).GetTokenInfo(ctx, in)
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						info := &grpc.UnaryServerInfo{
 | 
				
			||||||
 | 
							Server:     srv,
 | 
				
			||||||
 | 
							FullMethod: NodeService_GetTokenInfo_FullMethodName,
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						handler := func(ctx context.Context, req interface{}) (interface{}, error) {
 | 
				
			||||||
 | 
							return srv.(NodeServiceServer).GetTokenInfo(ctx, req.(*GetTokenInfoRequest))
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						return interceptor(ctx, in, info, handler)
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// NodeService_ServiceDesc is the grpc.ServiceDesc for NodeService service.
 | 
					// NodeService_ServiceDesc is the grpc.ServiceDesc for NodeService service.
 | 
				
			||||||
// It's only intended for direct use with grpc.RegisterService,
 | 
					// It's only intended for direct use with grpc.RegisterService,
 | 
				
			||||||
// and not to be introspected or modified (even as a copy)
 | 
					// and not to be introspected or modified (even as a copy)
 | 
				
			||||||
@ -214,6 +247,10 @@ var NodeService_ServiceDesc = grpc.ServiceDesc{
 | 
				
			|||||||
			MethodName: "GetNetworkInfo",
 | 
								MethodName: "GetNetworkInfo",
 | 
				
			||||||
			Handler:    _NodeService_GetNetworkInfo_Handler,
 | 
								Handler:    _NodeService_GetNetworkInfo_Handler,
 | 
				
			||||||
		},
 | 
							},
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								MethodName: "GetTokenInfo",
 | 
				
			||||||
 | 
								Handler:    _NodeService_GetTokenInfo_Handler,
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
	},
 | 
						},
 | 
				
			||||||
	Streams:  []grpc.StreamDesc{},
 | 
						Streams:  []grpc.StreamDesc{},
 | 
				
			||||||
	Metadata: "node.proto",
 | 
						Metadata: "node.proto",
 | 
				
			||||||
 | 
				
			|||||||
@ -3,9 +3,11 @@ package rpc
 | 
				
			|||||||
import (
 | 
					import (
 | 
				
			||||||
	"bytes"
 | 
						"bytes"
 | 
				
			||||||
	"context"
 | 
						"context"
 | 
				
			||||||
 | 
						"math/big"
 | 
				
			||||||
	"net/http"
 | 
						"net/http"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	"github.com/grpc-ecosystem/grpc-gateway/v2/runtime"
 | 
						"github.com/grpc-ecosystem/grpc-gateway/v2/runtime"
 | 
				
			||||||
 | 
						"github.com/iden3/go-iden3-crypto/poseidon"
 | 
				
			||||||
	"github.com/multiformats/go-multiaddr"
 | 
						"github.com/multiformats/go-multiaddr"
 | 
				
			||||||
	mn "github.com/multiformats/go-multiaddr/net"
 | 
						mn "github.com/multiformats/go-multiaddr/net"
 | 
				
			||||||
	"github.com/pkg/errors"
 | 
						"github.com/pkg/errors"
 | 
				
			||||||
@ -14,9 +16,12 @@ import (
 | 
				
			|||||||
	"google.golang.org/grpc/credentials/insecure"
 | 
						"google.golang.org/grpc/credentials/insecure"
 | 
				
			||||||
	"google.golang.org/grpc/reflection"
 | 
						"google.golang.org/grpc/reflection"
 | 
				
			||||||
	"source.quilibrium.com/quilibrium/monorepo/node/execution"
 | 
						"source.quilibrium.com/quilibrium/monorepo/node/execution"
 | 
				
			||||||
 | 
						"source.quilibrium.com/quilibrium/monorepo/node/execution/ceremony/application"
 | 
				
			||||||
 | 
						"source.quilibrium.com/quilibrium/monorepo/node/keys"
 | 
				
			||||||
	"source.quilibrium.com/quilibrium/monorepo/node/p2p"
 | 
						"source.quilibrium.com/quilibrium/monorepo/node/p2p"
 | 
				
			||||||
	"source.quilibrium.com/quilibrium/monorepo/node/protobufs"
 | 
						"source.quilibrium.com/quilibrium/monorepo/node/protobufs"
 | 
				
			||||||
	"source.quilibrium.com/quilibrium/monorepo/node/store"
 | 
						"source.quilibrium.com/quilibrium/monorepo/node/store"
 | 
				
			||||||
 | 
						"source.quilibrium.com/quilibrium/monorepo/node/tries"
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
type RPCServer struct {
 | 
					type RPCServer struct {
 | 
				
			||||||
@ -25,6 +30,7 @@ type RPCServer struct {
 | 
				
			|||||||
	listenAddrHTTP   string
 | 
						listenAddrHTTP   string
 | 
				
			||||||
	logger           *zap.Logger
 | 
						logger           *zap.Logger
 | 
				
			||||||
	clockStore       store.ClockStore
 | 
						clockStore       store.ClockStore
 | 
				
			||||||
 | 
						keyManager       keys.KeyManager
 | 
				
			||||||
	pubSub           p2p.PubSub
 | 
						pubSub           p2p.PubSub
 | 
				
			||||||
	executionEngines []execution.ExecutionEngine
 | 
						executionEngines []execution.ExecutionEngine
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@ -209,11 +215,162 @@ func (r *RPCServer) GetPeerInfo(
 | 
				
			|||||||
	return resp, nil
 | 
						return resp, nil
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func (r *RPCServer) GetTokenInfo(
 | 
				
			||||||
 | 
						ctx context.Context,
 | 
				
			||||||
 | 
						req *protobufs.GetTokenInfoRequest,
 | 
				
			||||||
 | 
					) (*protobufs.TokenInfoResponse, error) {
 | 
				
			||||||
 | 
						provingKey, err := r.keyManager.GetRawKey(
 | 
				
			||||||
 | 
							"default-proving-key",
 | 
				
			||||||
 | 
						)
 | 
				
			||||||
 | 
						if err != nil {
 | 
				
			||||||
 | 
							return nil, errors.Wrap(err, "get token info")
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						addr, err := poseidon.HashBytes(provingKey.PublicKey)
 | 
				
			||||||
 | 
						if err != nil {
 | 
				
			||||||
 | 
							panic(err)
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						addrBytes := addr.Bytes()
 | 
				
			||||||
 | 
						addrBytes = append(make([]byte, 32-len(addrBytes)), addrBytes...)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						frame, err := r.clockStore.GetLatestDataClockFrame(
 | 
				
			||||||
 | 
							application.CEREMONY_ADDRESS,
 | 
				
			||||||
 | 
							nil,
 | 
				
			||||||
 | 
						)
 | 
				
			||||||
 | 
						if err != nil {
 | 
				
			||||||
 | 
							return nil, errors.Wrap(err, "get token info")
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						confirmed, err := application.MaterializeApplicationFromFrame(frame)
 | 
				
			||||||
 | 
						if err != nil {
 | 
				
			||||||
 | 
							return nil, errors.Wrap(err, "get token info")
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						confirmedTotal := new(big.Int)
 | 
				
			||||||
 | 
						unconfirmedTotal := new(big.Int)
 | 
				
			||||||
 | 
						ownedTotal := new(big.Int)
 | 
				
			||||||
 | 
						if confirmed.RewardTrie.Root == nil ||
 | 
				
			||||||
 | 
							(confirmed.RewardTrie.Root.External == nil &&
 | 
				
			||||||
 | 
								confirmed.RewardTrie.Root.Internal == nil) {
 | 
				
			||||||
 | 
							return &protobufs.TokenInfoResponse{
 | 
				
			||||||
 | 
								ConfirmedTokenSupply:   confirmedTotal.FillBytes(make([]byte, 32)),
 | 
				
			||||||
 | 
								UnconfirmedTokenSupply: unconfirmedTotal.FillBytes(make([]byte, 32)),
 | 
				
			||||||
 | 
								OwnedTokens:            ownedTotal.FillBytes(make([]byte, 32)),
 | 
				
			||||||
 | 
							}, nil
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						limbs := []*tries.RewardInternalNode{}
 | 
				
			||||||
 | 
						if confirmed.RewardTrie.Root.Internal != nil {
 | 
				
			||||||
 | 
							limbs = append(limbs, confirmed.RewardTrie.Root.Internal)
 | 
				
			||||||
 | 
						} else {
 | 
				
			||||||
 | 
							confirmedTotal = confirmedTotal.Add(
 | 
				
			||||||
 | 
								confirmedTotal,
 | 
				
			||||||
 | 
								new(big.Int).SetUint64(confirmed.RewardTrie.Root.External.Total),
 | 
				
			||||||
 | 
							)
 | 
				
			||||||
 | 
							if bytes.Equal(
 | 
				
			||||||
 | 
								confirmed.RewardTrie.Root.External.Key,
 | 
				
			||||||
 | 
								addrBytes,
 | 
				
			||||||
 | 
							) {
 | 
				
			||||||
 | 
								ownedTotal = ownedTotal.Add(
 | 
				
			||||||
 | 
									ownedTotal,
 | 
				
			||||||
 | 
									new(big.Int).SetUint64(confirmed.RewardTrie.Root.External.Total),
 | 
				
			||||||
 | 
								)
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						for len(limbs) != 0 {
 | 
				
			||||||
 | 
							nextLimbs := []*tries.RewardInternalNode{}
 | 
				
			||||||
 | 
							for _, limb := range limbs {
 | 
				
			||||||
 | 
								for _, child := range limb.Child {
 | 
				
			||||||
 | 
									child := child
 | 
				
			||||||
 | 
									if child.Internal != nil {
 | 
				
			||||||
 | 
										nextLimbs = append(nextLimbs, child.Internal)
 | 
				
			||||||
 | 
									} else {
 | 
				
			||||||
 | 
										confirmedTotal = confirmedTotal.Add(
 | 
				
			||||||
 | 
											confirmedTotal,
 | 
				
			||||||
 | 
											new(big.Int).SetUint64(child.External.Total),
 | 
				
			||||||
 | 
										)
 | 
				
			||||||
 | 
										if bytes.Equal(
 | 
				
			||||||
 | 
											child.External.Key,
 | 
				
			||||||
 | 
											addrBytes,
 | 
				
			||||||
 | 
										) {
 | 
				
			||||||
 | 
											ownedTotal = ownedTotal.Add(
 | 
				
			||||||
 | 
												ownedTotal,
 | 
				
			||||||
 | 
												new(big.Int).SetUint64(child.External.Total),
 | 
				
			||||||
 | 
											)
 | 
				
			||||||
 | 
										}
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							limbs = nextLimbs
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						candidateFrame, err := r.clockStore.GetHighestCandidateDataClockFrame(
 | 
				
			||||||
 | 
							application.CEREMONY_ADDRESS,
 | 
				
			||||||
 | 
						)
 | 
				
			||||||
 | 
						if err != nil {
 | 
				
			||||||
 | 
							return nil, errors.Wrap(err, "get token info")
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						unconfirmed, err := application.MaterializeApplicationFromFrame(
 | 
				
			||||||
 | 
							candidateFrame,
 | 
				
			||||||
 | 
						)
 | 
				
			||||||
 | 
						if err != nil {
 | 
				
			||||||
 | 
							return nil, errors.Wrap(err, "get token info")
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						limbs = []*tries.RewardInternalNode{}
 | 
				
			||||||
 | 
						if unconfirmed.RewardTrie.Root.Internal != nil {
 | 
				
			||||||
 | 
							limbs = append(limbs, unconfirmed.RewardTrie.Root.Internal)
 | 
				
			||||||
 | 
						} else {
 | 
				
			||||||
 | 
							unconfirmedTotal = unconfirmedTotal.Add(
 | 
				
			||||||
 | 
								unconfirmedTotal,
 | 
				
			||||||
 | 
								new(big.Int).SetUint64(unconfirmed.RewardTrie.Root.External.Total),
 | 
				
			||||||
 | 
							)
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						for len(limbs) != 0 {
 | 
				
			||||||
 | 
							nextLimbs := []*tries.RewardInternalNode{}
 | 
				
			||||||
 | 
							for _, limb := range limbs {
 | 
				
			||||||
 | 
								for _, child := range limb.Child {
 | 
				
			||||||
 | 
									child := child
 | 
				
			||||||
 | 
									if child.Internal != nil {
 | 
				
			||||||
 | 
										nextLimbs = append(nextLimbs, child.Internal)
 | 
				
			||||||
 | 
									} else {
 | 
				
			||||||
 | 
										unconfirmedTotal = unconfirmedTotal.Add(
 | 
				
			||||||
 | 
											unconfirmedTotal,
 | 
				
			||||||
 | 
											new(big.Int).SetUint64(child.External.Total),
 | 
				
			||||||
 | 
										)
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							limbs = nextLimbs
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// 1 QUIL = 0x1DCD65000 units
 | 
				
			||||||
 | 
						conversionFactor, ok := new(big.Int).SetString("1DCD65000", 16)
 | 
				
			||||||
 | 
						if !ok {
 | 
				
			||||||
 | 
							return nil, errors.Wrap(err, "get token info")
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						confirmedTotal = confirmedTotal.Mul(confirmedTotal, conversionFactor)
 | 
				
			||||||
 | 
						unconfirmedTotal = unconfirmedTotal.Mul(unconfirmedTotal, conversionFactor)
 | 
				
			||||||
 | 
						ownedTotal = ownedTotal.Mul(ownedTotal, conversionFactor)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						return &protobufs.TokenInfoResponse{
 | 
				
			||||||
 | 
							ConfirmedTokenSupply:   confirmedTotal.FillBytes(make([]byte, 32)),
 | 
				
			||||||
 | 
							UnconfirmedTokenSupply: unconfirmedTotal.FillBytes(make([]byte, 32)),
 | 
				
			||||||
 | 
							OwnedTokens:            ownedTotal.FillBytes(make([]byte, 32)),
 | 
				
			||||||
 | 
						}, nil
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func NewRPCServer(
 | 
					func NewRPCServer(
 | 
				
			||||||
	listenAddrGRPC string,
 | 
						listenAddrGRPC string,
 | 
				
			||||||
	listenAddrHTTP string,
 | 
						listenAddrHTTP string,
 | 
				
			||||||
	logger *zap.Logger,
 | 
						logger *zap.Logger,
 | 
				
			||||||
	clockStore store.ClockStore,
 | 
						clockStore store.ClockStore,
 | 
				
			||||||
 | 
						keyManager keys.KeyManager,
 | 
				
			||||||
	pubSub p2p.PubSub,
 | 
						pubSub p2p.PubSub,
 | 
				
			||||||
	executionEngines []execution.ExecutionEngine,
 | 
						executionEngines []execution.ExecutionEngine,
 | 
				
			||||||
) (*RPCServer, error) {
 | 
					) (*RPCServer, error) {
 | 
				
			||||||
@ -222,6 +379,7 @@ func NewRPCServer(
 | 
				
			|||||||
		listenAddrHTTP:   listenAddrHTTP,
 | 
							listenAddrHTTP:   listenAddrHTTP,
 | 
				
			||||||
		logger:           logger,
 | 
							logger:           logger,
 | 
				
			||||||
		clockStore:       clockStore,
 | 
							clockStore:       clockStore,
 | 
				
			||||||
 | 
							keyManager:       keyManager,
 | 
				
			||||||
		pubSub:           pubSub,
 | 
							pubSub:           pubSub,
 | 
				
			||||||
		executionEngines: executionEngines,
 | 
							executionEngines: executionEngines,
 | 
				
			||||||
	}, nil
 | 
						}, nil
 | 
				
			||||||
 | 
				
			|||||||
@ -90,6 +90,9 @@ type ClockStore interface {
 | 
				
			|||||||
		fromFrameNumber uint64,
 | 
							fromFrameNumber uint64,
 | 
				
			||||||
		toFrameNumber uint64,
 | 
							toFrameNumber uint64,
 | 
				
			||||||
	) error
 | 
						) error
 | 
				
			||||||
 | 
						GetHighestCandidateDataClockFrame(
 | 
				
			||||||
 | 
							filter []byte,
 | 
				
			||||||
 | 
						) (*protobufs.ClockFrame, error)
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
type PebbleClockStore struct {
 | 
					type PebbleClockStore struct {
 | 
				
			||||||
@ -1648,3 +1651,72 @@ func (p *PebbleClockStore) DeleteCandidateDataClockFrameRange(
 | 
				
			|||||||
	)
 | 
						)
 | 
				
			||||||
	return errors.Wrap(err, "delete candidate data clock frame range")
 | 
						return errors.Wrap(err, "delete candidate data clock frame range")
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func (p *PebbleClockStore) GetHighestCandidateDataClockFrame(
 | 
				
			||||||
 | 
						filter []byte,
 | 
				
			||||||
 | 
					) (*protobufs.ClockFrame, error) {
 | 
				
			||||||
 | 
						frame, err := p.GetLatestDataClockFrame(filter, nil)
 | 
				
			||||||
 | 
						if err != nil {
 | 
				
			||||||
 | 
							return nil, errors.Wrap(err, "get highest candidate data clock frame")
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						from := clockDataCandidateFrameKey(
 | 
				
			||||||
 | 
							filter,
 | 
				
			||||||
 | 
							frame.FrameNumber,
 | 
				
			||||||
 | 
							[]byte{
 | 
				
			||||||
 | 
								0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 | 
				
			||||||
 | 
								0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 | 
				
			||||||
 | 
								0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 | 
				
			||||||
 | 
								0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
 | 
							[]byte{
 | 
				
			||||||
 | 
								0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 | 
				
			||||||
 | 
								0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 | 
				
			||||||
 | 
								0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 | 
				
			||||||
 | 
								0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
 | 
						)
 | 
				
			||||||
 | 
						to := clockDataCandidateFrameKey(
 | 
				
			||||||
 | 
							filter,
 | 
				
			||||||
 | 
							// We could be deeply out of sync and searching for consensus
 | 
				
			||||||
 | 
							frame.FrameNumber+20000,
 | 
				
			||||||
 | 
							[]byte{
 | 
				
			||||||
 | 
								0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
 | 
				
			||||||
 | 
								0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
 | 
				
			||||||
 | 
								0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
 | 
				
			||||||
 | 
								0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
 | 
							[]byte{
 | 
				
			||||||
 | 
								0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
 | 
				
			||||||
 | 
								0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
 | 
				
			||||||
 | 
								0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
 | 
				
			||||||
 | 
								0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
 | 
						)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						iter := p.db.NewIter(&pebble.IterOptions{
 | 
				
			||||||
 | 
							LowerBound: from,
 | 
				
			||||||
 | 
							UpperBound: to,
 | 
				
			||||||
 | 
						})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						found := iter.SeekLT(to)
 | 
				
			||||||
 | 
						if found {
 | 
				
			||||||
 | 
							value := iter.Value()
 | 
				
			||||||
 | 
							frame = &protobufs.ClockFrame{}
 | 
				
			||||||
 | 
							if err := proto.Unmarshal(value, frame); err != nil {
 | 
				
			||||||
 | 
								return nil, errors.Wrap(
 | 
				
			||||||
 | 
									errors.Wrap(err, ErrInvalidData.Error()),
 | 
				
			||||||
 | 
									"get highest candidate data clock frame",
 | 
				
			||||||
 | 
								)
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							if err := p.fillAggregateProofs(frame); err != nil {
 | 
				
			||||||
 | 
								return nil, errors.Wrap(
 | 
				
			||||||
 | 
									errors.Wrap(err, ErrInvalidData.Error()),
 | 
				
			||||||
 | 
									"get highest candidate data clock frame",
 | 
				
			||||||
 | 
								)
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						return frame, nil
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
		Reference in New Issue
	
	Block a user