feat: new keygen and importkeys for protocol upgrade

This commit is contained in:
Trinity 2025-10-24 10:32:44 +07:00
parent 9e29f96dbd
commit 2bc1991c09
12 changed files with 1524 additions and 562 deletions

View File

@ -191,13 +191,12 @@ func BigIntToT8(data big.Int) [8]uint64 {
res := rip(data) res := rip(data)
return [8]uint64(res) return [8]uint64(res)
} }
func SerializeExtend(chainCode []byte, key []byte, keyType KeyType) []byte { func SerializeExtend(chainCode []byte, key []byte, ver int, keyType KeyType) []byte {
data := []byte{} data := []byte{}
// dep: depth in chain // dep: depth in chain
// idx: index at depth // idx: index at depth
// pf: parent fingerprint // pf: parent fingerprint
// ver: version // ver: version
ver := 0
depth := 0 depth := 0
idx := []byte{0, 0, 0, 0} idx := []byte{0, 0, 0, 0}
pf := []byte{0, 0, 0, 0} pf := []byte{0, 0, 0, 0}

709
nockchain/nockapp.pb.go Normal file
View File

@ -0,0 +1,709 @@
// nockchain/private/v1/nockapp.proto
// Code generated by protoc-gen-go. DO NOT EDIT.
// versions:
// protoc-gen-go v1.36.9
// protoc v3.20.3
// source: nockapp.proto
package nockchain
import (
protoreflect "google.golang.org/protobuf/reflect/protoreflect"
protoimpl "google.golang.org/protobuf/runtime/protoimpl"
reflect "reflect"
sync "sync"
unsafe "unsafe"
)
const (
// Verify that this generated code is sufficiently up-to-date.
_ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion)
// Verify that runtime/protoimpl is sufficiently up-to-date.
_ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)
)
type AppErrorCode int32
const (
AppErrorCode_ERROR_CODE_UNSPECIFIED AppErrorCode = 0
AppErrorCode_ERROR_CODE_INVALID_REQUEST AppErrorCode = 1
AppErrorCode_ERROR_CODE_PEEK_FAILED AppErrorCode = 2
AppErrorCode_ERROR_CODE_PEEK_RETURNED_NO_DATA AppErrorCode = 3
AppErrorCode_ERROR_CODE_POKE_FAILED AppErrorCode = 4
AppErrorCode_ERROR_CODE_NACKAPP_ERROR AppErrorCode = 5
AppErrorCode_ERROR_CODE_TIMEOUT AppErrorCode = 6
AppErrorCode_ERROR_CODE_INTERNAL_ERROR AppErrorCode = 7
AppErrorCode_ERROR_CODE_NOT_FOUND AppErrorCode = 8
AppErrorCode_ERROR_CODE_PERMISSION_DENIED AppErrorCode = 9
AppErrorCode_ERROR_CODE_INVALID_WIRE AppErrorCode = 10
AppErrorCode_ERROR_CODE_KERNEL_ERROR AppErrorCode = 11
)
// Enum value maps for AppErrorCode.
var (
AppErrorCode_name = map[int32]string{
0: "ERROR_CODE_UNSPECIFIED",
1: "ERROR_CODE_INVALID_REQUEST",
2: "ERROR_CODE_PEEK_FAILED",
3: "ERROR_CODE_PEEK_RETURNED_NO_DATA",
4: "ERROR_CODE_POKE_FAILED",
5: "ERROR_CODE_NACKAPP_ERROR",
6: "ERROR_CODE_TIMEOUT",
7: "ERROR_CODE_INTERNAL_ERROR",
8: "ERROR_CODE_NOT_FOUND",
9: "ERROR_CODE_PERMISSION_DENIED",
10: "ERROR_CODE_INVALID_WIRE",
11: "ERROR_CODE_KERNEL_ERROR",
}
AppErrorCode_value = map[string]int32{
"ERROR_CODE_UNSPECIFIED": 0,
"ERROR_CODE_INVALID_REQUEST": 1,
"ERROR_CODE_PEEK_FAILED": 2,
"ERROR_CODE_PEEK_RETURNED_NO_DATA": 3,
"ERROR_CODE_POKE_FAILED": 4,
"ERROR_CODE_NACKAPP_ERROR": 5,
"ERROR_CODE_TIMEOUT": 6,
"ERROR_CODE_INTERNAL_ERROR": 7,
"ERROR_CODE_NOT_FOUND": 8,
"ERROR_CODE_PERMISSION_DENIED": 9,
"ERROR_CODE_INVALID_WIRE": 10,
"ERROR_CODE_KERNEL_ERROR": 11,
}
)
func (x AppErrorCode) Enum() *AppErrorCode {
p := new(AppErrorCode)
*p = x
return p
}
func (x AppErrorCode) String() string {
return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
}
func (AppErrorCode) Descriptor() protoreflect.EnumDescriptor {
return file_nockapp_proto_enumTypes[0].Descriptor()
}
func (AppErrorCode) Type() protoreflect.EnumType {
return &file_nockapp_proto_enumTypes[0]
}
func (x AppErrorCode) Number() protoreflect.EnumNumber {
return protoreflect.EnumNumber(x)
}
// Deprecated: Use AppErrorCode.Descriptor instead.
func (AppErrorCode) EnumDescriptor() ([]byte, []int) {
return file_nockapp_proto_rawDescGZIP(), []int{0}
}
type PeekRequest struct {
state protoimpl.MessageState `protogen:"open.v1"`
Pid int32 `protobuf:"varint,1,opt,name=pid,proto3" json:"pid,omitempty"` // process ID for tracking
Path []byte `protobuf:"bytes,2,opt,name=path,proto3" json:"path,omitempty"` // JAM-encoded nock peek path
unknownFields protoimpl.UnknownFields
sizeCache protoimpl.SizeCache
}
func (x *PeekRequest) Reset() {
*x = PeekRequest{}
mi := &file_nockapp_proto_msgTypes[0]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
func (x *PeekRequest) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*PeekRequest) ProtoMessage() {}
func (x *PeekRequest) ProtoReflect() protoreflect.Message {
mi := &file_nockapp_proto_msgTypes[0]
if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use PeekRequest.ProtoReflect.Descriptor instead.
func (*PeekRequest) Descriptor() ([]byte, []int) {
return file_nockapp_proto_rawDescGZIP(), []int{0}
}
func (x *PeekRequest) GetPid() int32 {
if x != nil {
return x.Pid
}
return 0
}
func (x *PeekRequest) GetPath() []byte {
if x != nil {
return x.Path
}
return nil
}
type PeekResponse struct {
state protoimpl.MessageState `protogen:"open.v1"`
// Types that are valid to be assigned to Result:
//
// *PeekResponse_Data
// *PeekResponse_Error
Result isPeekResponse_Result `protobuf_oneof:"result"`
unknownFields protoimpl.UnknownFields
sizeCache protoimpl.SizeCache
}
func (x *PeekResponse) Reset() {
*x = PeekResponse{}
mi := &file_nockapp_proto_msgTypes[1]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
func (x *PeekResponse) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*PeekResponse) ProtoMessage() {}
func (x *PeekResponse) ProtoReflect() protoreflect.Message {
mi := &file_nockapp_proto_msgTypes[1]
if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use PeekResponse.ProtoReflect.Descriptor instead.
func (*PeekResponse) Descriptor() ([]byte, []int) {
return file_nockapp_proto_rawDescGZIP(), []int{1}
}
func (x *PeekResponse) GetResult() isPeekResponse_Result {
if x != nil {
return x.Result
}
return nil
}
func (x *PeekResponse) GetData() []byte {
if x != nil {
if x, ok := x.Result.(*PeekResponse_Data); ok {
return x.Data
}
}
return nil
}
func (x *PeekResponse) GetError() *AppErrorStatus {
if x != nil {
if x, ok := x.Result.(*PeekResponse_Error); ok {
return x.Error
}
}
return nil
}
type isPeekResponse_Result interface {
isPeekResponse_Result()
}
type PeekResponse_Data struct {
Data []byte `protobuf:"bytes,1,opt,name=data,proto3,oneof"` // JAM-encoded nock data (success case)
}
type PeekResponse_Error struct {
Error *AppErrorStatus `protobuf:"bytes,2,opt,name=error,proto3,oneof"`
}
func (*PeekResponse_Data) isPeekResponse_Result() {}
func (*PeekResponse_Error) isPeekResponse_Result() {}
type PokeRequest struct {
state protoimpl.MessageState `protogen:"open.v1"`
Pid int32 `protobuf:"varint,1,opt,name=pid,proto3" json:"pid,omitempty"` // process ID for tracking
Wire *Wire `protobuf:"bytes,2,opt,name=wire,proto3" json:"wire,omitempty"` // wire routing information
Payload []byte `protobuf:"bytes,3,opt,name=payload,proto3" json:"payload,omitempty"` // JAM-encoded nock data
unknownFields protoimpl.UnknownFields
sizeCache protoimpl.SizeCache
}
func (x *PokeRequest) Reset() {
*x = PokeRequest{}
mi := &file_nockapp_proto_msgTypes[2]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
func (x *PokeRequest) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*PokeRequest) ProtoMessage() {}
func (x *PokeRequest) ProtoReflect() protoreflect.Message {
mi := &file_nockapp_proto_msgTypes[2]
if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use PokeRequest.ProtoReflect.Descriptor instead.
func (*PokeRequest) Descriptor() ([]byte, []int) {
return file_nockapp_proto_rawDescGZIP(), []int{2}
}
func (x *PokeRequest) GetPid() int32 {
if x != nil {
return x.Pid
}
return 0
}
func (x *PokeRequest) GetWire() *Wire {
if x != nil {
return x.Wire
}
return nil
}
func (x *PokeRequest) GetPayload() []byte {
if x != nil {
return x.Payload
}
return nil
}
type PokeResponse struct {
state protoimpl.MessageState `protogen:"open.v1"`
// Types that are valid to be assigned to Result:
//
// *PokeResponse_Acknowledged
// *PokeResponse_Error
Result isPokeResponse_Result `protobuf_oneof:"result"`
unknownFields protoimpl.UnknownFields
sizeCache protoimpl.SizeCache
}
func (x *PokeResponse) Reset() {
*x = PokeResponse{}
mi := &file_nockapp_proto_msgTypes[3]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
func (x *PokeResponse) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*PokeResponse) ProtoMessage() {}
func (x *PokeResponse) ProtoReflect() protoreflect.Message {
mi := &file_nockapp_proto_msgTypes[3]
if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use PokeResponse.ProtoReflect.Descriptor instead.
func (*PokeResponse) Descriptor() ([]byte, []int) {
return file_nockapp_proto_rawDescGZIP(), []int{3}
}
func (x *PokeResponse) GetResult() isPokeResponse_Result {
if x != nil {
return x.Result
}
return nil
}
func (x *PokeResponse) GetAcknowledged() bool {
if x != nil {
if x, ok := x.Result.(*PokeResponse_Acknowledged); ok {
return x.Acknowledged
}
}
return false
}
func (x *PokeResponse) GetError() *AppErrorStatus {
if x != nil {
if x, ok := x.Result.(*PokeResponse_Error); ok {
return x.Error
}
}
return nil
}
type isPokeResponse_Result interface {
isPokeResponse_Result()
}
type PokeResponse_Acknowledged struct {
Acknowledged bool `protobuf:"varint,1,opt,name=acknowledged,proto3,oneof"` // true if successful
}
type PokeResponse_Error struct {
Error *AppErrorStatus `protobuf:"bytes,2,opt,name=error,proto3,oneof"`
}
func (*PokeResponse_Acknowledged) isPokeResponse_Result() {}
func (*PokeResponse_Error) isPokeResponse_Result() {}
type AppErrorStatus struct {
state protoimpl.MessageState `protogen:"open.v1"`
Code AppErrorCode `protobuf:"varint,1,opt,name=code,proto3,enum=nockchain.private.v1.AppErrorCode" json:"code,omitempty"`
Message string `protobuf:"bytes,2,opt,name=message,proto3" json:"message,omitempty"`
Details *string `protobuf:"bytes,3,opt,name=details,proto3,oneof" json:"details,omitempty"` // additional error context
unknownFields protoimpl.UnknownFields
sizeCache protoimpl.SizeCache
}
func (x *AppErrorStatus) Reset() {
*x = AppErrorStatus{}
mi := &file_nockapp_proto_msgTypes[4]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
func (x *AppErrorStatus) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*AppErrorStatus) ProtoMessage() {}
func (x *AppErrorStatus) ProtoReflect() protoreflect.Message {
mi := &file_nockapp_proto_msgTypes[4]
if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use AppErrorStatus.ProtoReflect.Descriptor instead.
func (*AppErrorStatus) Descriptor() ([]byte, []int) {
return file_nockapp_proto_rawDescGZIP(), []int{4}
}
func (x *AppErrorStatus) GetCode() AppErrorCode {
if x != nil {
return x.Code
}
return AppErrorCode_ERROR_CODE_UNSPECIFIED
}
func (x *AppErrorStatus) GetMessage() string {
if x != nil {
return x.Message
}
return ""
}
func (x *AppErrorStatus) GetDetails() string {
if x != nil && x.Details != nil {
return *x.Details
}
return ""
}
type Wire struct {
state protoimpl.MessageState `protogen:"open.v1"`
Source string `protobuf:"bytes,1,opt,name=source,proto3" json:"source,omitempty"` // e.g., "http", "file", "wallet", "grpc"
Version uint64 `protobuf:"varint,2,opt,name=version,proto3" json:"version,omitempty"` // wire format version
Tags []*WireTag `protobuf:"bytes,3,rep,name=tags,proto3" json:"tags,omitempty"` // operation-specific tags
unknownFields protoimpl.UnknownFields
sizeCache protoimpl.SizeCache
}
func (x *Wire) Reset() {
*x = Wire{}
mi := &file_nockapp_proto_msgTypes[5]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
func (x *Wire) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*Wire) ProtoMessage() {}
func (x *Wire) ProtoReflect() protoreflect.Message {
mi := &file_nockapp_proto_msgTypes[5]
if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use Wire.ProtoReflect.Descriptor instead.
func (*Wire) Descriptor() ([]byte, []int) {
return file_nockapp_proto_rawDescGZIP(), []int{5}
}
func (x *Wire) GetSource() string {
if x != nil {
return x.Source
}
return ""
}
func (x *Wire) GetVersion() uint64 {
if x != nil {
return x.Version
}
return 0
}
func (x *Wire) GetTags() []*WireTag {
if x != nil {
return x.Tags
}
return nil
}
type WireTag struct {
state protoimpl.MessageState `protogen:"open.v1"`
// Types that are valid to be assigned to Value:
//
// *WireTag_Text
// *WireTag_Number
Value isWireTag_Value `protobuf_oneof:"value"`
unknownFields protoimpl.UnknownFields
sizeCache protoimpl.SizeCache
}
func (x *WireTag) Reset() {
*x = WireTag{}
mi := &file_nockapp_proto_msgTypes[6]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
func (x *WireTag) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*WireTag) ProtoMessage() {}
func (x *WireTag) ProtoReflect() protoreflect.Message {
mi := &file_nockapp_proto_msgTypes[6]
if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use WireTag.ProtoReflect.Descriptor instead.
func (*WireTag) Descriptor() ([]byte, []int) {
return file_nockapp_proto_rawDescGZIP(), []int{6}
}
func (x *WireTag) GetValue() isWireTag_Value {
if x != nil {
return x.Value
}
return nil
}
func (x *WireTag) GetText() string {
if x != nil {
if x, ok := x.Value.(*WireTag_Text); ok {
return x.Text
}
}
return ""
}
func (x *WireTag) GetNumber() uint64 {
if x != nil {
if x, ok := x.Value.(*WireTag_Number); ok {
return x.Number
}
}
return 0
}
type isWireTag_Value interface {
isWireTag_Value()
}
type WireTag_Text struct {
Text string `protobuf:"bytes,1,opt,name=text,proto3,oneof"`
}
type WireTag_Number struct {
Number uint64 `protobuf:"varint,2,opt,name=number,proto3,oneof"`
}
func (*WireTag_Text) isWireTag_Value() {}
func (*WireTag_Number) isWireTag_Value() {}
var File_nockapp_proto protoreflect.FileDescriptor
const file_nockapp_proto_rawDesc = "" +
"\n" +
"\rnockapp.proto\x12\x14nockchain.private.v1\"3\n" +
"\vPeekRequest\x12\x10\n" +
"\x03pid\x18\x01 \x01(\x05R\x03pid\x12\x12\n" +
"\x04path\x18\x02 \x01(\fR\x04path\"l\n" +
"\fPeekResponse\x12\x14\n" +
"\x04data\x18\x01 \x01(\fH\x00R\x04data\x12<\n" +
"\x05error\x18\x02 \x01(\v2$.nockchain.private.v1.AppErrorStatusH\x00R\x05errorB\b\n" +
"\x06result\"i\n" +
"\vPokeRequest\x12\x10\n" +
"\x03pid\x18\x01 \x01(\x05R\x03pid\x12.\n" +
"\x04wire\x18\x02 \x01(\v2\x1a.nockchain.private.v1.WireR\x04wire\x12\x18\n" +
"\apayload\x18\x03 \x01(\fR\apayload\"|\n" +
"\fPokeResponse\x12$\n" +
"\facknowledged\x18\x01 \x01(\bH\x00R\facknowledged\x12<\n" +
"\x05error\x18\x02 \x01(\v2$.nockchain.private.v1.AppErrorStatusH\x00R\x05errorB\b\n" +
"\x06result\"\x8d\x01\n" +
"\x0eAppErrorStatus\x126\n" +
"\x04code\x18\x01 \x01(\x0e2\".nockchain.private.v1.AppErrorCodeR\x04code\x12\x18\n" +
"\amessage\x18\x02 \x01(\tR\amessage\x12\x1d\n" +
"\adetails\x18\x03 \x01(\tH\x00R\adetails\x88\x01\x01B\n" +
"\n" +
"\b_details\"k\n" +
"\x04Wire\x12\x16\n" +
"\x06source\x18\x01 \x01(\tR\x06source\x12\x18\n" +
"\aversion\x18\x02 \x01(\x04R\aversion\x121\n" +
"\x04tags\x18\x03 \x03(\v2\x1d.nockchain.private.v1.WireTagR\x04tags\"B\n" +
"\aWireTag\x12\x14\n" +
"\x04text\x18\x01 \x01(\tH\x00R\x04text\x12\x18\n" +
"\x06number\x18\x02 \x01(\x04H\x00R\x06numberB\a\n" +
"\x05value*\xf3\x02\n" +
"\fAppErrorCode\x12\x1a\n" +
"\x16ERROR_CODE_UNSPECIFIED\x10\x00\x12\x1e\n" +
"\x1aERROR_CODE_INVALID_REQUEST\x10\x01\x12\x1a\n" +
"\x16ERROR_CODE_PEEK_FAILED\x10\x02\x12$\n" +
" ERROR_CODE_PEEK_RETURNED_NO_DATA\x10\x03\x12\x1a\n" +
"\x16ERROR_CODE_POKE_FAILED\x10\x04\x12\x1c\n" +
"\x18ERROR_CODE_NACKAPP_ERROR\x10\x05\x12\x16\n" +
"\x12ERROR_CODE_TIMEOUT\x10\x06\x12\x1d\n" +
"\x19ERROR_CODE_INTERNAL_ERROR\x10\a\x12\x18\n" +
"\x14ERROR_CODE_NOT_FOUND\x10\b\x12 \n" +
"\x1cERROR_CODE_PERMISSION_DENIED\x10\t\x12\x1b\n" +
"\x17ERROR_CODE_INVALID_WIRE\x10\n" +
"\x12\x1b\n" +
"\x17ERROR_CODE_KERNEL_ERROR\x10\v2\xae\x01\n" +
"\x0eNockAppService\x12M\n" +
"\x04Peek\x12!.nockchain.private.v1.PeekRequest\x1a\".nockchain.private.v1.PeekResponse\x12M\n" +
"\x04Poke\x12!.nockchain.private.v1.PokeRequest\x1a\".nockchain.private.v1.PokeResponseB\x0eZ\f./;nockchainb\x06proto3"
var (
file_nockapp_proto_rawDescOnce sync.Once
file_nockapp_proto_rawDescData []byte
)
func file_nockapp_proto_rawDescGZIP() []byte {
file_nockapp_proto_rawDescOnce.Do(func() {
file_nockapp_proto_rawDescData = protoimpl.X.CompressGZIP(unsafe.Slice(unsafe.StringData(file_nockapp_proto_rawDesc), len(file_nockapp_proto_rawDesc)))
})
return file_nockapp_proto_rawDescData
}
var file_nockapp_proto_enumTypes = make([]protoimpl.EnumInfo, 1)
var file_nockapp_proto_msgTypes = make([]protoimpl.MessageInfo, 7)
var file_nockapp_proto_goTypes = []any{
(AppErrorCode)(0), // 0: nockchain.private.v1.AppErrorCode
(*PeekRequest)(nil), // 1: nockchain.private.v1.PeekRequest
(*PeekResponse)(nil), // 2: nockchain.private.v1.PeekResponse
(*PokeRequest)(nil), // 3: nockchain.private.v1.PokeRequest
(*PokeResponse)(nil), // 4: nockchain.private.v1.PokeResponse
(*AppErrorStatus)(nil), // 5: nockchain.private.v1.AppErrorStatus
(*Wire)(nil), // 6: nockchain.private.v1.Wire
(*WireTag)(nil), // 7: nockchain.private.v1.WireTag
}
var file_nockapp_proto_depIdxs = []int32{
5, // 0: nockchain.private.v1.PeekResponse.error:type_name -> nockchain.private.v1.AppErrorStatus
6, // 1: nockchain.private.v1.PokeRequest.wire:type_name -> nockchain.private.v1.Wire
5, // 2: nockchain.private.v1.PokeResponse.error:type_name -> nockchain.private.v1.AppErrorStatus
0, // 3: nockchain.private.v1.AppErrorStatus.code:type_name -> nockchain.private.v1.AppErrorCode
7, // 4: nockchain.private.v1.Wire.tags:type_name -> nockchain.private.v1.WireTag
1, // 5: nockchain.private.v1.NockAppService.Peek:input_type -> nockchain.private.v1.PeekRequest
3, // 6: nockchain.private.v1.NockAppService.Poke:input_type -> nockchain.private.v1.PokeRequest
2, // 7: nockchain.private.v1.NockAppService.Peek:output_type -> nockchain.private.v1.PeekResponse
4, // 8: nockchain.private.v1.NockAppService.Poke:output_type -> nockchain.private.v1.PokeResponse
7, // [7:9] is the sub-list for method output_type
5, // [5:7] 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 extendee
0, // [0:5] is the sub-list for field type_name
}
func init() { file_nockapp_proto_init() }
func file_nockapp_proto_init() {
if File_nockapp_proto != nil {
return
}
file_nockapp_proto_msgTypes[1].OneofWrappers = []any{
(*PeekResponse_Data)(nil),
(*PeekResponse_Error)(nil),
}
file_nockapp_proto_msgTypes[3].OneofWrappers = []any{
(*PokeResponse_Acknowledged)(nil),
(*PokeResponse_Error)(nil),
}
file_nockapp_proto_msgTypes[4].OneofWrappers = []any{}
file_nockapp_proto_msgTypes[6].OneofWrappers = []any{
(*WireTag_Text)(nil),
(*WireTag_Number)(nil),
}
type x struct{}
out := protoimpl.TypeBuilder{
File: protoimpl.DescBuilder{
GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
RawDescriptor: unsafe.Slice(unsafe.StringData(file_nockapp_proto_rawDesc), len(file_nockapp_proto_rawDesc)),
NumEnums: 1,
NumMessages: 7,
NumExtensions: 0,
NumServices: 1,
},
GoTypes: file_nockapp_proto_goTypes,
DependencyIndexes: file_nockapp_proto_depIdxs,
EnumInfos: file_nockapp_proto_enumTypes,
MessageInfos: file_nockapp_proto_msgTypes,
}.Build()
File_nockapp_proto = out.File
file_nockapp_proto_goTypes = nil
file_nockapp_proto_depIdxs = nil
}

View File

@ -0,0 +1,161 @@
// nockchain/private/v1/nockapp.proto
// Code generated by protoc-gen-go-grpc. DO NOT EDIT.
// versions:
// - protoc-gen-go-grpc v1.5.1
// - protoc v3.20.3
// source: nockapp.proto
package nockchain
import (
context "context"
grpc "google.golang.org/grpc"
codes "google.golang.org/grpc/codes"
status "google.golang.org/grpc/status"
)
// This is a compile-time assertion to ensure that this generated file
// is compatible with the grpc package it is being compiled against.
// Requires gRPC-Go v1.64.0 or later.
const _ = grpc.SupportPackageIsVersion9
const (
NockAppService_Peek_FullMethodName = "/nockchain.private.v1.NockAppService/Peek"
NockAppService_Poke_FullMethodName = "/nockchain.private.v1.NockAppService/Poke"
)
// NockAppServiceClient is the client API for NockAppService service.
//
// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://pkg.go.dev/google.golang.org/grpc/?tab=doc#ClientConn.NewStream.
type NockAppServiceClient interface {
Peek(ctx context.Context, in *PeekRequest, opts ...grpc.CallOption) (*PeekResponse, error)
Poke(ctx context.Context, in *PokeRequest, opts ...grpc.CallOption) (*PokeResponse, error)
}
type nockAppServiceClient struct {
cc grpc.ClientConnInterface
}
func NewNockAppServiceClient(cc grpc.ClientConnInterface) NockAppServiceClient {
return &nockAppServiceClient{cc}
}
func (c *nockAppServiceClient) Peek(ctx context.Context, in *PeekRequest, opts ...grpc.CallOption) (*PeekResponse, error) {
cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...)
out := new(PeekResponse)
err := c.cc.Invoke(ctx, NockAppService_Peek_FullMethodName, in, out, cOpts...)
if err != nil {
return nil, err
}
return out, nil
}
func (c *nockAppServiceClient) Poke(ctx context.Context, in *PokeRequest, opts ...grpc.CallOption) (*PokeResponse, error) {
cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...)
out := new(PokeResponse)
err := c.cc.Invoke(ctx, NockAppService_Poke_FullMethodName, in, out, cOpts...)
if err != nil {
return nil, err
}
return out, nil
}
// NockAppServiceServer is the server API for NockAppService service.
// All implementations must embed UnimplementedNockAppServiceServer
// for forward compatibility.
type NockAppServiceServer interface {
Peek(context.Context, *PeekRequest) (*PeekResponse, error)
Poke(context.Context, *PokeRequest) (*PokeResponse, error)
mustEmbedUnimplementedNockAppServiceServer()
}
// UnimplementedNockAppServiceServer must be embedded to have
// forward compatible implementations.
//
// NOTE: this should be embedded by value instead of pointer to avoid a nil
// pointer dereference when methods are called.
type UnimplementedNockAppServiceServer struct{}
func (UnimplementedNockAppServiceServer) Peek(context.Context, *PeekRequest) (*PeekResponse, error) {
return nil, status.Errorf(codes.Unimplemented, "method Peek not implemented")
}
func (UnimplementedNockAppServiceServer) Poke(context.Context, *PokeRequest) (*PokeResponse, error) {
return nil, status.Errorf(codes.Unimplemented, "method Poke not implemented")
}
func (UnimplementedNockAppServiceServer) mustEmbedUnimplementedNockAppServiceServer() {}
func (UnimplementedNockAppServiceServer) testEmbeddedByValue() {}
// UnsafeNockAppServiceServer may be embedded to opt out of forward compatibility for this service.
// Use of this interface is not recommended, as added methods to NockAppServiceServer will
// result in compilation errors.
type UnsafeNockAppServiceServer interface {
mustEmbedUnimplementedNockAppServiceServer()
}
func RegisterNockAppServiceServer(s grpc.ServiceRegistrar, srv NockAppServiceServer) {
// If the following call pancis, it indicates UnimplementedNockAppServiceServer was
// embedded by pointer and is nil. This will cause panics if an
// unimplemented method is ever invoked, so we test this at initialization
// time to prevent it from happening at runtime later due to I/O.
if t, ok := srv.(interface{ testEmbeddedByValue() }); ok {
t.testEmbeddedByValue()
}
s.RegisterService(&NockAppService_ServiceDesc, srv)
}
func _NockAppService_Peek_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
in := new(PeekRequest)
if err := dec(in); err != nil {
return nil, err
}
if interceptor == nil {
return srv.(NockAppServiceServer).Peek(ctx, in)
}
info := &grpc.UnaryServerInfo{
Server: srv,
FullMethod: NockAppService_Peek_FullMethodName,
}
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
return srv.(NockAppServiceServer).Peek(ctx, req.(*PeekRequest))
}
return interceptor(ctx, in, info, handler)
}
func _NockAppService_Poke_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
in := new(PokeRequest)
if err := dec(in); err != nil {
return nil, err
}
if interceptor == nil {
return srv.(NockAppServiceServer).Poke(ctx, in)
}
info := &grpc.UnaryServerInfo{
Server: srv,
FullMethod: NockAppService_Poke_FullMethodName,
}
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
return srv.(NockAppServiceServer).Poke(ctx, req.(*PokeRequest))
}
return interceptor(ctx, in, info, handler)
}
// NockAppService_ServiceDesc is the grpc.ServiceDesc for NockAppService service.
// It's only intended for direct use with grpc.RegisterService,
// and not to be introspected or modified (even as a copy)
var NockAppService_ServiceDesc = grpc.ServiceDesc{
ServiceName: "nockchain.private.v1.NockAppService",
HandlerType: (*NockAppServiceServer)(nil),
Methods: []grpc.MethodDesc{
{
MethodName: "Peek",
Handler: _NockAppService_Peek_Handler,
},
{
MethodName: "Poke",
Handler: _NockAppService_Poke_Handler,
},
},
Streams: []grpc.StreamDesc{},
Metadata: "nockapp.proto",
}

View File

@ -195,148 +195,6 @@ func (*Acknowledged) Descriptor() ([]byte, []int) {
return file_primitives_proto_rawDescGZIP(), []int{1} return file_primitives_proto_rawDescGZIP(), []int{1}
} }
type Wire struct {
state protoimpl.MessageState `protogen:"open.v1"`
Source string `protobuf:"bytes,1,opt,name=source,proto3" json:"source,omitempty"` // e.g., "http", "file", "wallet", "grpc"
Version uint64 `protobuf:"varint,2,opt,name=version,proto3" json:"version,omitempty"` // wire format version
Tags []*WireTag `protobuf:"bytes,3,rep,name=tags,proto3" json:"tags,omitempty"` // operation-specific tags
unknownFields protoimpl.UnknownFields
sizeCache protoimpl.SizeCache
}
func (x *Wire) Reset() {
*x = Wire{}
mi := &file_primitives_proto_msgTypes[2]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
func (x *Wire) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*Wire) ProtoMessage() {}
func (x *Wire) ProtoReflect() protoreflect.Message {
mi := &file_primitives_proto_msgTypes[2]
if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use Wire.ProtoReflect.Descriptor instead.
func (*Wire) Descriptor() ([]byte, []int) {
return file_primitives_proto_rawDescGZIP(), []int{2}
}
func (x *Wire) GetSource() string {
if x != nil {
return x.Source
}
return ""
}
func (x *Wire) GetVersion() uint64 {
if x != nil {
return x.Version
}
return 0
}
func (x *Wire) GetTags() []*WireTag {
if x != nil {
return x.Tags
}
return nil
}
type WireTag struct {
state protoimpl.MessageState `protogen:"open.v1"`
// Types that are valid to be assigned to Value:
//
// *WireTag_Text
// *WireTag_Number
Value isWireTag_Value `protobuf_oneof:"value"`
unknownFields protoimpl.UnknownFields
sizeCache protoimpl.SizeCache
}
func (x *WireTag) Reset() {
*x = WireTag{}
mi := &file_primitives_proto_msgTypes[3]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
func (x *WireTag) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*WireTag) ProtoMessage() {}
func (x *WireTag) ProtoReflect() protoreflect.Message {
mi := &file_primitives_proto_msgTypes[3]
if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use WireTag.ProtoReflect.Descriptor instead.
func (*WireTag) Descriptor() ([]byte, []int) {
return file_primitives_proto_rawDescGZIP(), []int{3}
}
func (x *WireTag) GetValue() isWireTag_Value {
if x != nil {
return x.Value
}
return nil
}
func (x *WireTag) GetText() string {
if x != nil {
if x, ok := x.Value.(*WireTag_Text); ok {
return x.Text
}
}
return ""
}
func (x *WireTag) GetNumber() uint64 {
if x != nil {
if x, ok := x.Value.(*WireTag_Number); ok {
return x.Number
}
}
return 0
}
type isWireTag_Value interface {
isWireTag_Value()
}
type WireTag_Text struct {
Text string `protobuf:"bytes,1,opt,name=text,proto3,oneof"`
}
type WireTag_Number struct {
Number uint64 `protobuf:"varint,2,opt,name=number,proto3,oneof"`
}
func (*WireTag_Text) isWireTag_Value() {}
func (*WireTag_Number) isWireTag_Value() {}
// Note: prefer using raw numeric fields in messages // Note: prefer using raw numeric fields in messages
// instead of these wrappers to simplify conversions. // instead of these wrappers to simplify conversions.
// These remain defined for potential future use. // These remain defined for potential future use.
@ -349,7 +207,7 @@ type NoteVersion struct {
func (x *NoteVersion) Reset() { func (x *NoteVersion) Reset() {
*x = NoteVersion{} *x = NoteVersion{}
mi := &file_primitives_proto_msgTypes[4] mi := &file_primitives_proto_msgTypes[2]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi) ms.StoreMessageInfo(mi)
} }
@ -361,7 +219,7 @@ func (x *NoteVersion) String() string {
func (*NoteVersion) ProtoMessage() {} func (*NoteVersion) ProtoMessage() {}
func (x *NoteVersion) ProtoReflect() protoreflect.Message { func (x *NoteVersion) ProtoReflect() protoreflect.Message {
mi := &file_primitives_proto_msgTypes[4] mi := &file_primitives_proto_msgTypes[2]
if x != nil { if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil { if ms.LoadMessageInfo() == nil {
@ -374,7 +232,7 @@ func (x *NoteVersion) ProtoReflect() protoreflect.Message {
// Deprecated: Use NoteVersion.ProtoReflect.Descriptor instead. // Deprecated: Use NoteVersion.ProtoReflect.Descriptor instead.
func (*NoteVersion) Descriptor() ([]byte, []int) { func (*NoteVersion) Descriptor() ([]byte, []int) {
return file_primitives_proto_rawDescGZIP(), []int{4} return file_primitives_proto_rawDescGZIP(), []int{2}
} }
func (x *NoteVersion) GetValue() uint32 { func (x *NoteVersion) GetValue() uint32 {
@ -393,7 +251,7 @@ type BlockHeight struct {
func (x *BlockHeight) Reset() { func (x *BlockHeight) Reset() {
*x = BlockHeight{} *x = BlockHeight{}
mi := &file_primitives_proto_msgTypes[5] mi := &file_primitives_proto_msgTypes[3]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi) ms.StoreMessageInfo(mi)
} }
@ -405,7 +263,7 @@ func (x *BlockHeight) String() string {
func (*BlockHeight) ProtoMessage() {} func (*BlockHeight) ProtoMessage() {}
func (x *BlockHeight) ProtoReflect() protoreflect.Message { func (x *BlockHeight) ProtoReflect() protoreflect.Message {
mi := &file_primitives_proto_msgTypes[5] mi := &file_primitives_proto_msgTypes[3]
if x != nil { if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil { if ms.LoadMessageInfo() == nil {
@ -418,7 +276,7 @@ func (x *BlockHeight) ProtoReflect() protoreflect.Message {
// Deprecated: Use BlockHeight.ProtoReflect.Descriptor instead. // Deprecated: Use BlockHeight.ProtoReflect.Descriptor instead.
func (*BlockHeight) Descriptor() ([]byte, []int) { func (*BlockHeight) Descriptor() ([]byte, []int) {
return file_primitives_proto_rawDescGZIP(), []int{5} return file_primitives_proto_rawDescGZIP(), []int{3}
} }
func (x *BlockHeight) GetValue() uint64 { func (x *BlockHeight) GetValue() uint64 {
@ -437,7 +295,7 @@ type BlockHeightDelta struct {
func (x *BlockHeightDelta) Reset() { func (x *BlockHeightDelta) Reset() {
*x = BlockHeightDelta{} *x = BlockHeightDelta{}
mi := &file_primitives_proto_msgTypes[6] mi := &file_primitives_proto_msgTypes[4]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi) ms.StoreMessageInfo(mi)
} }
@ -449,7 +307,7 @@ func (x *BlockHeightDelta) String() string {
func (*BlockHeightDelta) ProtoMessage() {} func (*BlockHeightDelta) ProtoMessage() {}
func (x *BlockHeightDelta) ProtoReflect() protoreflect.Message { func (x *BlockHeightDelta) ProtoReflect() protoreflect.Message {
mi := &file_primitives_proto_msgTypes[6] mi := &file_primitives_proto_msgTypes[4]
if x != nil { if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil { if ms.LoadMessageInfo() == nil {
@ -462,7 +320,7 @@ func (x *BlockHeightDelta) ProtoReflect() protoreflect.Message {
// Deprecated: Use BlockHeightDelta.ProtoReflect.Descriptor instead. // Deprecated: Use BlockHeightDelta.ProtoReflect.Descriptor instead.
func (*BlockHeightDelta) Descriptor() ([]byte, []int) { func (*BlockHeightDelta) Descriptor() ([]byte, []int) {
return file_primitives_proto_rawDescGZIP(), []int{6} return file_primitives_proto_rawDescGZIP(), []int{4}
} }
func (x *BlockHeightDelta) GetValue() uint64 { func (x *BlockHeightDelta) GetValue() uint64 {
@ -481,7 +339,7 @@ type Nicks struct {
func (x *Nicks) Reset() { func (x *Nicks) Reset() {
*x = Nicks{} *x = Nicks{}
mi := &file_primitives_proto_msgTypes[7] mi := &file_primitives_proto_msgTypes[5]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi) ms.StoreMessageInfo(mi)
} }
@ -493,7 +351,7 @@ func (x *Nicks) String() string {
func (*Nicks) ProtoMessage() {} func (*Nicks) ProtoMessage() {}
func (x *Nicks) ProtoReflect() protoreflect.Message { func (x *Nicks) ProtoReflect() protoreflect.Message {
mi := &file_primitives_proto_msgTypes[7] mi := &file_primitives_proto_msgTypes[5]
if x != nil { if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil { if ms.LoadMessageInfo() == nil {
@ -506,7 +364,7 @@ func (x *Nicks) ProtoReflect() protoreflect.Message {
// Deprecated: Use Nicks.ProtoReflect.Descriptor instead. // Deprecated: Use Nicks.ProtoReflect.Descriptor instead.
func (*Nicks) Descriptor() ([]byte, []int) { func (*Nicks) Descriptor() ([]byte, []int) {
return file_primitives_proto_rawDescGZIP(), []int{7} return file_primitives_proto_rawDescGZIP(), []int{5}
} }
func (x *Nicks) GetValue() uint64 { func (x *Nicks) GetValue() uint64 {
@ -534,7 +392,7 @@ type EightBelt struct {
func (x *EightBelt) Reset() { func (x *EightBelt) Reset() {
*x = EightBelt{} *x = EightBelt{}
mi := &file_primitives_proto_msgTypes[8] mi := &file_primitives_proto_msgTypes[6]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi) ms.StoreMessageInfo(mi)
} }
@ -546,7 +404,7 @@ func (x *EightBelt) String() string {
func (*EightBelt) ProtoMessage() {} func (*EightBelt) ProtoMessage() {}
func (x *EightBelt) ProtoReflect() protoreflect.Message { func (x *EightBelt) ProtoReflect() protoreflect.Message {
mi := &file_primitives_proto_msgTypes[8] mi := &file_primitives_proto_msgTypes[6]
if x != nil { if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil { if ms.LoadMessageInfo() == nil {
@ -559,7 +417,7 @@ func (x *EightBelt) ProtoReflect() protoreflect.Message {
// Deprecated: Use EightBelt.ProtoReflect.Descriptor instead. // Deprecated: Use EightBelt.ProtoReflect.Descriptor instead.
func (*EightBelt) Descriptor() ([]byte, []int) { func (*EightBelt) Descriptor() ([]byte, []int) {
return file_primitives_proto_rawDescGZIP(), []int{8} return file_primitives_proto_rawDescGZIP(), []int{6}
} }
func (x *EightBelt) GetBelt_1() *Belt { func (x *EightBelt) GetBelt_1() *Belt {
@ -633,7 +491,7 @@ type Hash struct {
func (x *Hash) Reset() { func (x *Hash) Reset() {
*x = Hash{} *x = Hash{}
mi := &file_primitives_proto_msgTypes[9] mi := &file_primitives_proto_msgTypes[7]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi) ms.StoreMessageInfo(mi)
} }
@ -645,7 +503,7 @@ func (x *Hash) String() string {
func (*Hash) ProtoMessage() {} func (*Hash) ProtoMessage() {}
func (x *Hash) ProtoReflect() protoreflect.Message { func (x *Hash) ProtoReflect() protoreflect.Message {
mi := &file_primitives_proto_msgTypes[9] mi := &file_primitives_proto_msgTypes[7]
if x != nil { if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil { if ms.LoadMessageInfo() == nil {
@ -658,7 +516,7 @@ func (x *Hash) ProtoReflect() protoreflect.Message {
// Deprecated: Use Hash.ProtoReflect.Descriptor instead. // Deprecated: Use Hash.ProtoReflect.Descriptor instead.
func (*Hash) Descriptor() ([]byte, []int) { func (*Hash) Descriptor() ([]byte, []int) {
return file_primitives_proto_rawDescGZIP(), []int{9} return file_primitives_proto_rawDescGZIP(), []int{7}
} }
func (x *Hash) GetBelt_1() *Belt { func (x *Hash) GetBelt_1() *Belt {
@ -705,7 +563,7 @@ type Base58Hash struct {
func (x *Base58Hash) Reset() { func (x *Base58Hash) Reset() {
*x = Base58Hash{} *x = Base58Hash{}
mi := &file_primitives_proto_msgTypes[10] mi := &file_primitives_proto_msgTypes[8]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi) ms.StoreMessageInfo(mi)
} }
@ -717,7 +575,7 @@ func (x *Base58Hash) String() string {
func (*Base58Hash) ProtoMessage() {} func (*Base58Hash) ProtoMessage() {}
func (x *Base58Hash) ProtoReflect() protoreflect.Message { func (x *Base58Hash) ProtoReflect() protoreflect.Message {
mi := &file_primitives_proto_msgTypes[10] mi := &file_primitives_proto_msgTypes[8]
if x != nil { if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil { if ms.LoadMessageInfo() == nil {
@ -730,7 +588,7 @@ func (x *Base58Hash) ProtoReflect() protoreflect.Message {
// Deprecated: Use Base58Hash.ProtoReflect.Descriptor instead. // Deprecated: Use Base58Hash.ProtoReflect.Descriptor instead.
func (*Base58Hash) Descriptor() ([]byte, []int) { func (*Base58Hash) Descriptor() ([]byte, []int) {
return file_primitives_proto_rawDescGZIP(), []int{10} return file_primitives_proto_rawDescGZIP(), []int{8}
} }
func (x *Base58Hash) GetHash() string { func (x *Base58Hash) GetHash() string {
@ -750,7 +608,7 @@ type SchnorrPubkey struct {
func (x *SchnorrPubkey) Reset() { func (x *SchnorrPubkey) Reset() {
*x = SchnorrPubkey{} *x = SchnorrPubkey{}
mi := &file_primitives_proto_msgTypes[11] mi := &file_primitives_proto_msgTypes[9]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi) ms.StoreMessageInfo(mi)
} }
@ -762,7 +620,7 @@ func (x *SchnorrPubkey) String() string {
func (*SchnorrPubkey) ProtoMessage() {} func (*SchnorrPubkey) ProtoMessage() {}
func (x *SchnorrPubkey) ProtoReflect() protoreflect.Message { func (x *SchnorrPubkey) ProtoReflect() protoreflect.Message {
mi := &file_primitives_proto_msgTypes[11] mi := &file_primitives_proto_msgTypes[9]
if x != nil { if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil { if ms.LoadMessageInfo() == nil {
@ -775,7 +633,7 @@ func (x *SchnorrPubkey) ProtoReflect() protoreflect.Message {
// Deprecated: Use SchnorrPubkey.ProtoReflect.Descriptor instead. // Deprecated: Use SchnorrPubkey.ProtoReflect.Descriptor instead.
func (*SchnorrPubkey) Descriptor() ([]byte, []int) { func (*SchnorrPubkey) Descriptor() ([]byte, []int) {
return file_primitives_proto_rawDescGZIP(), []int{11} return file_primitives_proto_rawDescGZIP(), []int{9}
} }
func (x *SchnorrPubkey) GetValue() *CheetahPoint { func (x *SchnorrPubkey) GetValue() *CheetahPoint {
@ -801,7 +659,7 @@ type CheetahPoint struct {
func (x *CheetahPoint) Reset() { func (x *CheetahPoint) Reset() {
*x = CheetahPoint{} *x = CheetahPoint{}
mi := &file_primitives_proto_msgTypes[12] mi := &file_primitives_proto_msgTypes[10]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi) ms.StoreMessageInfo(mi)
} }
@ -813,7 +671,7 @@ func (x *CheetahPoint) String() string {
func (*CheetahPoint) ProtoMessage() {} func (*CheetahPoint) ProtoMessage() {}
func (x *CheetahPoint) ProtoReflect() protoreflect.Message { func (x *CheetahPoint) ProtoReflect() protoreflect.Message {
mi := &file_primitives_proto_msgTypes[12] mi := &file_primitives_proto_msgTypes[10]
if x != nil { if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil { if ms.LoadMessageInfo() == nil {
@ -826,7 +684,7 @@ func (x *CheetahPoint) ProtoReflect() protoreflect.Message {
// Deprecated: Use CheetahPoint.ProtoReflect.Descriptor instead. // Deprecated: Use CheetahPoint.ProtoReflect.Descriptor instead.
func (*CheetahPoint) Descriptor() ([]byte, []int) { func (*CheetahPoint) Descriptor() ([]byte, []int) {
return file_primitives_proto_rawDescGZIP(), []int{12} return file_primitives_proto_rawDescGZIP(), []int{10}
} }
func (x *CheetahPoint) GetX() *SixBelt { func (x *CheetahPoint) GetX() *SixBelt {
@ -865,7 +723,7 @@ type SixBelt struct {
func (x *SixBelt) Reset() { func (x *SixBelt) Reset() {
*x = SixBelt{} *x = SixBelt{}
mi := &file_primitives_proto_msgTypes[13] mi := &file_primitives_proto_msgTypes[11]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi) ms.StoreMessageInfo(mi)
} }
@ -877,7 +735,7 @@ func (x *SixBelt) String() string {
func (*SixBelt) ProtoMessage() {} func (*SixBelt) ProtoMessage() {}
func (x *SixBelt) ProtoReflect() protoreflect.Message { func (x *SixBelt) ProtoReflect() protoreflect.Message {
mi := &file_primitives_proto_msgTypes[13] mi := &file_primitives_proto_msgTypes[11]
if x != nil { if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil { if ms.LoadMessageInfo() == nil {
@ -890,7 +748,7 @@ func (x *SixBelt) ProtoReflect() protoreflect.Message {
// Deprecated: Use SixBelt.ProtoReflect.Descriptor instead. // Deprecated: Use SixBelt.ProtoReflect.Descriptor instead.
func (*SixBelt) Descriptor() ([]byte, []int) { func (*SixBelt) Descriptor() ([]byte, []int) {
return file_primitives_proto_rawDescGZIP(), []int{13} return file_primitives_proto_rawDescGZIP(), []int{11}
} }
func (x *SixBelt) GetBelt_1() *Belt { func (x *SixBelt) GetBelt_1() *Belt {
@ -945,7 +803,7 @@ type Belt struct {
func (x *Belt) Reset() { func (x *Belt) Reset() {
*x = Belt{} *x = Belt{}
mi := &file_primitives_proto_msgTypes[14] mi := &file_primitives_proto_msgTypes[12]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi) ms.StoreMessageInfo(mi)
} }
@ -957,7 +815,7 @@ func (x *Belt) String() string {
func (*Belt) ProtoMessage() {} func (*Belt) ProtoMessage() {}
func (x *Belt) ProtoReflect() protoreflect.Message { func (x *Belt) ProtoReflect() protoreflect.Message {
mi := &file_primitives_proto_msgTypes[14] mi := &file_primitives_proto_msgTypes[12]
if x != nil { if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil { if ms.LoadMessageInfo() == nil {
@ -970,7 +828,7 @@ func (x *Belt) ProtoReflect() protoreflect.Message {
// Deprecated: Use Belt.ProtoReflect.Descriptor instead. // Deprecated: Use Belt.ProtoReflect.Descriptor instead.
func (*Belt) Descriptor() ([]byte, []int) { func (*Belt) Descriptor() ([]byte, []int) {
return file_primitives_proto_rawDescGZIP(), []int{14} return file_primitives_proto_rawDescGZIP(), []int{12}
} }
func (x *Belt) GetValue() uint64 { func (x *Belt) GetValue() uint64 {
@ -991,15 +849,7 @@ const file_primitives_proto_rawDesc = "" +
"\adetails\x18\x03 \x01(\tH\x00R\adetails\x88\x01\x01B\n" + "\adetails\x18\x03 \x01(\tH\x00R\adetails\x88\x01\x01B\n" +
"\n" + "\n" +
"\b_details\"\x0e\n" + "\b_details\"\x0e\n" +
"\fAcknowledged\"j\n" + "\fAcknowledged\"#\n" +
"\x04Wire\x12\x16\n" +
"\x06source\x18\x01 \x01(\tR\x06source\x12\x18\n" +
"\aversion\x18\x02 \x01(\x04R\aversion\x120\n" +
"\x04tags\x18\x03 \x03(\v2\x1c.nockchain.public.v1.WireTagR\x04tags\"B\n" +
"\aWireTag\x12\x14\n" +
"\x04text\x18\x01 \x01(\tH\x00R\x04text\x12\x18\n" +
"\x06number\x18\x02 \x01(\x04H\x00R\x06numberB\a\n" +
"\x05value\"#\n" +
"\vNoteVersion\x12\x14\n" + "\vNoteVersion\x12\x14\n" +
"\x05value\x18\x01 \x01(\rR\x05value\"#\n" + "\x05value\x18\x01 \x01(\rR\x05value\"#\n" +
"\vBlockHeight\x12\x14\n" + "\vBlockHeight\x12\x14\n" +
@ -1069,55 +919,52 @@ func file_primitives_proto_rawDescGZIP() []byte {
} }
var file_primitives_proto_enumTypes = make([]protoimpl.EnumInfo, 1) var file_primitives_proto_enumTypes = make([]protoimpl.EnumInfo, 1)
var file_primitives_proto_msgTypes = make([]protoimpl.MessageInfo, 15) var file_primitives_proto_msgTypes = make([]protoimpl.MessageInfo, 13)
var file_primitives_proto_goTypes = []any{ var file_primitives_proto_goTypes = []any{
(ErrorCode)(0), // 0: nockchain.public.v1.ErrorCode (ErrorCode)(0), // 0: nockchain.public.v1.ErrorCode
(*ErrorStatus)(nil), // 1: nockchain.public.v1.ErrorStatus (*ErrorStatus)(nil), // 1: nockchain.public.v1.ErrorStatus
(*Acknowledged)(nil), // 2: nockchain.public.v1.Acknowledged (*Acknowledged)(nil), // 2: nockchain.public.v1.Acknowledged
(*Wire)(nil), // 3: nockchain.public.v1.Wire (*NoteVersion)(nil), // 3: nockchain.public.v1.NoteVersion
(*WireTag)(nil), // 4: nockchain.public.v1.WireTag (*BlockHeight)(nil), // 4: nockchain.public.v1.BlockHeight
(*NoteVersion)(nil), // 5: nockchain.public.v1.NoteVersion (*BlockHeightDelta)(nil), // 5: nockchain.public.v1.BlockHeightDelta
(*BlockHeight)(nil), // 6: nockchain.public.v1.BlockHeight (*Nicks)(nil), // 6: nockchain.public.v1.Nicks
(*BlockHeightDelta)(nil), // 7: nockchain.public.v1.BlockHeightDelta (*EightBelt)(nil), // 7: nockchain.public.v1.EightBelt
(*Nicks)(nil), // 8: nockchain.public.v1.Nicks (*Hash)(nil), // 8: nockchain.public.v1.Hash
(*EightBelt)(nil), // 9: nockchain.public.v1.EightBelt (*Base58Hash)(nil), // 9: nockchain.public.v1.Base58Hash
(*Hash)(nil), // 10: nockchain.public.v1.Hash (*SchnorrPubkey)(nil), // 10: nockchain.public.v1.SchnorrPubkey
(*Base58Hash)(nil), // 11: nockchain.public.v1.Base58Hash (*CheetahPoint)(nil), // 11: nockchain.public.v1.CheetahPoint
(*SchnorrPubkey)(nil), // 12: nockchain.public.v1.SchnorrPubkey (*SixBelt)(nil), // 12: nockchain.public.v1.SixBelt
(*CheetahPoint)(nil), // 13: nockchain.public.v1.CheetahPoint (*Belt)(nil), // 13: nockchain.public.v1.Belt
(*SixBelt)(nil), // 14: nockchain.public.v1.SixBelt
(*Belt)(nil), // 15: nockchain.public.v1.Belt
} }
var file_primitives_proto_depIdxs = []int32{ var file_primitives_proto_depIdxs = []int32{
0, // 0: nockchain.public.v1.ErrorStatus.code:type_name -> nockchain.public.v1.ErrorCode 0, // 0: nockchain.public.v1.ErrorStatus.code:type_name -> nockchain.public.v1.ErrorCode
4, // 1: nockchain.public.v1.Wire.tags:type_name -> nockchain.public.v1.WireTag 13, // 1: nockchain.public.v1.EightBelt.belt_1:type_name -> nockchain.public.v1.Belt
15, // 2: nockchain.public.v1.EightBelt.belt_1:type_name -> nockchain.public.v1.Belt 13, // 2: nockchain.public.v1.EightBelt.belt_2:type_name -> nockchain.public.v1.Belt
15, // 3: nockchain.public.v1.EightBelt.belt_2:type_name -> nockchain.public.v1.Belt 13, // 3: nockchain.public.v1.EightBelt.belt_3:type_name -> nockchain.public.v1.Belt
15, // 4: nockchain.public.v1.EightBelt.belt_3:type_name -> nockchain.public.v1.Belt 13, // 4: nockchain.public.v1.EightBelt.belt_4:type_name -> nockchain.public.v1.Belt
15, // 5: nockchain.public.v1.EightBelt.belt_4:type_name -> nockchain.public.v1.Belt 13, // 5: nockchain.public.v1.EightBelt.belt_5:type_name -> nockchain.public.v1.Belt
15, // 6: nockchain.public.v1.EightBelt.belt_5:type_name -> nockchain.public.v1.Belt 13, // 6: nockchain.public.v1.EightBelt.belt_6:type_name -> nockchain.public.v1.Belt
15, // 7: nockchain.public.v1.EightBelt.belt_6:type_name -> nockchain.public.v1.Belt 13, // 7: nockchain.public.v1.EightBelt.belt_7:type_name -> nockchain.public.v1.Belt
15, // 8: nockchain.public.v1.EightBelt.belt_7:type_name -> nockchain.public.v1.Belt 13, // 8: nockchain.public.v1.EightBelt.belt_8:type_name -> nockchain.public.v1.Belt
15, // 9: nockchain.public.v1.EightBelt.belt_8:type_name -> nockchain.public.v1.Belt 13, // 9: nockchain.public.v1.Hash.belt_1:type_name -> nockchain.public.v1.Belt
15, // 10: nockchain.public.v1.Hash.belt_1:type_name -> nockchain.public.v1.Belt 13, // 10: nockchain.public.v1.Hash.belt_2:type_name -> nockchain.public.v1.Belt
15, // 11: nockchain.public.v1.Hash.belt_2:type_name -> nockchain.public.v1.Belt 13, // 11: nockchain.public.v1.Hash.belt_3:type_name -> nockchain.public.v1.Belt
15, // 12: nockchain.public.v1.Hash.belt_3:type_name -> nockchain.public.v1.Belt 13, // 12: nockchain.public.v1.Hash.belt_4:type_name -> nockchain.public.v1.Belt
15, // 13: nockchain.public.v1.Hash.belt_4:type_name -> nockchain.public.v1.Belt 13, // 13: nockchain.public.v1.Hash.belt_5:type_name -> nockchain.public.v1.Belt
15, // 14: nockchain.public.v1.Hash.belt_5:type_name -> nockchain.public.v1.Belt 11, // 14: nockchain.public.v1.SchnorrPubkey.value:type_name -> nockchain.public.v1.CheetahPoint
13, // 15: nockchain.public.v1.SchnorrPubkey.value:type_name -> nockchain.public.v1.CheetahPoint 12, // 15: nockchain.public.v1.CheetahPoint.x:type_name -> nockchain.public.v1.SixBelt
14, // 16: nockchain.public.v1.CheetahPoint.x:type_name -> nockchain.public.v1.SixBelt 12, // 16: nockchain.public.v1.CheetahPoint.y:type_name -> nockchain.public.v1.SixBelt
14, // 17: nockchain.public.v1.CheetahPoint.y:type_name -> nockchain.public.v1.SixBelt 13, // 17: nockchain.public.v1.SixBelt.belt_1:type_name -> nockchain.public.v1.Belt
15, // 18: nockchain.public.v1.SixBelt.belt_1:type_name -> nockchain.public.v1.Belt 13, // 18: nockchain.public.v1.SixBelt.belt_2:type_name -> nockchain.public.v1.Belt
15, // 19: nockchain.public.v1.SixBelt.belt_2:type_name -> nockchain.public.v1.Belt 13, // 19: nockchain.public.v1.SixBelt.belt_3:type_name -> nockchain.public.v1.Belt
15, // 20: nockchain.public.v1.SixBelt.belt_3:type_name -> nockchain.public.v1.Belt 13, // 20: nockchain.public.v1.SixBelt.belt_4:type_name -> nockchain.public.v1.Belt
15, // 21: nockchain.public.v1.SixBelt.belt_4:type_name -> nockchain.public.v1.Belt 13, // 21: nockchain.public.v1.SixBelt.belt_5:type_name -> nockchain.public.v1.Belt
15, // 22: nockchain.public.v1.SixBelt.belt_5:type_name -> nockchain.public.v1.Belt 13, // 22: nockchain.public.v1.SixBelt.belt_6:type_name -> nockchain.public.v1.Belt
15, // 23: nockchain.public.v1.SixBelt.belt_6:type_name -> nockchain.public.v1.Belt 23, // [23:23] is the sub-list for method output_type
24, // [24:24] is the sub-list for method output_type 23, // [23:23] is the sub-list for method input_type
24, // [24:24] is the sub-list for method input_type 23, // [23:23] is the sub-list for extension type_name
24, // [24:24] is the sub-list for extension type_name 23, // [23:23] is the sub-list for extension extendee
24, // [24:24] is the sub-list for extension extendee 0, // [0:23] is the sub-list for field type_name
0, // [0:24] is the sub-list for field type_name
} }
func init() { file_primitives_proto_init() } func init() { file_primitives_proto_init() }
@ -1126,17 +973,13 @@ func file_primitives_proto_init() {
return return
} }
file_primitives_proto_msgTypes[0].OneofWrappers = []any{} file_primitives_proto_msgTypes[0].OneofWrappers = []any{}
file_primitives_proto_msgTypes[3].OneofWrappers = []any{
(*WireTag_Text)(nil),
(*WireTag_Number)(nil),
}
type x struct{} type x struct{}
out := protoimpl.TypeBuilder{ out := protoimpl.TypeBuilder{
File: protoimpl.DescBuilder{ File: protoimpl.DescBuilder{
GoPackagePath: reflect.TypeOf(x{}).PkgPath(), GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
RawDescriptor: unsafe.Slice(unsafe.StringData(file_primitives_proto_rawDesc), len(file_primitives_proto_rawDesc)), RawDescriptor: unsafe.Slice(unsafe.StringData(file_primitives_proto_rawDesc), len(file_primitives_proto_rawDesc)),
NumEnums: 1, NumEnums: 1,
NumMessages: 15, NumMessages: 13,
NumExtensions: 0, NumExtensions: 0,
NumServices: 0, NumServices: 0,
}, },

View File

@ -23,6 +23,7 @@ const (
type KeygenRequest struct { type KeygenRequest struct {
state protoimpl.MessageState `protogen:"open.v1"` state protoimpl.MessageState `protogen:"open.v1"`
Version uint64 `protobuf:"varint,1,opt,name=version,proto3" json:"version,omitempty"`
unknownFields protoimpl.UnknownFields unknownFields protoimpl.UnknownFields
sizeCache protoimpl.SizeCache sizeCache protoimpl.SizeCache
} }
@ -57,14 +58,22 @@ func (*KeygenRequest) Descriptor() ([]byte, []int) {
return file_service_proto_rawDescGZIP(), []int{0} return file_service_proto_rawDescGZIP(), []int{0}
} }
func (x *KeygenRequest) GetVersion() uint64 {
if x != nil {
return x.Version
}
return 0
}
type KeygenResponse struct { type KeygenResponse struct {
state protoimpl.MessageState `protogen:"open.v1"` state protoimpl.MessageState `protogen:"open.v1"`
PublicKey string `protobuf:"bytes,1,opt,name=public_key,json=publicKey,proto3" json:"public_key,omitempty"` Address string `protobuf:"bytes,1,opt,name=address,proto3" json:"address,omitempty"`
PrivateKey string `protobuf:"bytes,2,opt,name=private_key,json=privateKey,proto3" json:"private_key,omitempty"` PrivateKey string `protobuf:"bytes,2,opt,name=private_key,json=privateKey,proto3" json:"private_key,omitempty"`
Seed string `protobuf:"bytes,3,opt,name=seed,proto3" json:"seed,omitempty"` Seed string `protobuf:"bytes,3,opt,name=seed,proto3" json:"seed,omitempty"`
ChainCode string `protobuf:"bytes,4,opt,name=chain_code,json=chainCode,proto3" json:"chain_code,omitempty"` ChainCode string `protobuf:"bytes,4,opt,name=chain_code,json=chainCode,proto3" json:"chain_code,omitempty"`
ImportPrivateKey string `protobuf:"bytes,5,opt,name=import_private_key,json=importPrivateKey,proto3" json:"import_private_key,omitempty"` ImportPrivateKey string `protobuf:"bytes,5,opt,name=import_private_key,json=importPrivateKey,proto3" json:"import_private_key,omitempty"`
ImportPublicKey string `protobuf:"bytes,6,opt,name=import_public_key,json=importPublicKey,proto3" json:"import_public_key,omitempty"` ImportPublicKey string `protobuf:"bytes,6,opt,name=import_public_key,json=importPublicKey,proto3" json:"import_public_key,omitempty"`
Version uint64 `protobuf:"varint,7,opt,name=version,proto3" json:"version,omitempty"`
unknownFields protoimpl.UnknownFields unknownFields protoimpl.UnknownFields
sizeCache protoimpl.SizeCache sizeCache protoimpl.SizeCache
} }
@ -99,9 +108,9 @@ func (*KeygenResponse) Descriptor() ([]byte, []int) {
return file_service_proto_rawDescGZIP(), []int{1} return file_service_proto_rawDescGZIP(), []int{1}
} }
func (x *KeygenResponse) GetPublicKey() string { func (x *KeygenResponse) GetAddress() string {
if x != nil { if x != nil {
return x.PublicKey return x.Address
} }
return "" return ""
} }
@ -141,10 +150,18 @@ func (x *KeygenResponse) GetImportPublicKey() string {
return "" return ""
} }
func (x *KeygenResponse) GetVersion() uint64 {
if x != nil {
return x.Version
}
return 0
}
type ImportKeysRequest struct { type ImportKeysRequest struct {
state protoimpl.MessageState `protogen:"open.v1"` state protoimpl.MessageState `protogen:"open.v1"`
Key string `protobuf:"bytes,1,opt,name=key,proto3" json:"key,omitempty"` Key string `protobuf:"bytes,1,opt,name=key,proto3" json:"key,omitempty"`
ImportType ImportType `protobuf:"varint,2,opt,name=import_type,json=importType,proto3,enum=nockchain.public.v1.ImportType" json:"import_type,omitempty"` Version uint64 `protobuf:"varint,2,opt,name=version,proto3" json:"version,omitempty"`
ImportType ImportType `protobuf:"varint,3,opt,name=import_type,json=importType,proto3,enum=nockchain.public.v1.ImportType" json:"import_type,omitempty"`
unknownFields protoimpl.UnknownFields unknownFields protoimpl.UnknownFields
sizeCache protoimpl.SizeCache sizeCache protoimpl.SizeCache
} }
@ -186,6 +203,13 @@ func (x *ImportKeysRequest) GetKey() string {
return "" return ""
} }
func (x *ImportKeysRequest) GetVersion() uint64 {
if x != nil {
return x.Version
}
return 0
}
func (x *ImportKeysRequest) GetImportType() ImportType { func (x *ImportKeysRequest) GetImportType() ImportType {
if x != nil { if x != nil {
return x.ImportType return x.ImportType
@ -195,12 +219,13 @@ func (x *ImportKeysRequest) GetImportType() ImportType {
type ImportKeysResponse struct { type ImportKeysResponse struct {
state protoimpl.MessageState `protogen:"open.v1"` state protoimpl.MessageState `protogen:"open.v1"`
PublicKey string `protobuf:"bytes,1,opt,name=public_key,json=publicKey,proto3" json:"public_key,omitempty"` Address string `protobuf:"bytes,1,opt,name=address,proto3" json:"address,omitempty"`
PrivateKey string `protobuf:"bytes,2,opt,name=private_key,json=privateKey,proto3" json:"private_key,omitempty"` PrivateKey string `protobuf:"bytes,2,opt,name=private_key,json=privateKey,proto3" json:"private_key,omitempty"`
Seed string `protobuf:"bytes,3,opt,name=seed,proto3" json:"seed,omitempty"` Seed string `protobuf:"bytes,3,opt,name=seed,proto3" json:"seed,omitempty"`
ChainCode string `protobuf:"bytes,4,opt,name=chain_code,json=chainCode,proto3" json:"chain_code,omitempty"` ChainCode string `protobuf:"bytes,4,opt,name=chain_code,json=chainCode,proto3" json:"chain_code,omitempty"`
ImportPrivateKey string `protobuf:"bytes,5,opt,name=import_private_key,json=importPrivateKey,proto3" json:"import_private_key,omitempty"` ImportPrivateKey string `protobuf:"bytes,5,opt,name=import_private_key,json=importPrivateKey,proto3" json:"import_private_key,omitempty"`
ImportPublicKey string `protobuf:"bytes,6,opt,name=import_public_key,json=importPublicKey,proto3" json:"import_public_key,omitempty"` ImportPublicKey string `protobuf:"bytes,6,opt,name=import_public_key,json=importPublicKey,proto3" json:"import_public_key,omitempty"`
Version uint64 `protobuf:"varint,7,opt,name=version,proto3" json:"version,omitempty"`
unknownFields protoimpl.UnknownFields unknownFields protoimpl.UnknownFields
sizeCache protoimpl.SizeCache sizeCache protoimpl.SizeCache
} }
@ -235,9 +260,9 @@ func (*ImportKeysResponse) Descriptor() ([]byte, []int) {
return file_service_proto_rawDescGZIP(), []int{3} return file_service_proto_rawDescGZIP(), []int{3}
} }
func (x *ImportKeysResponse) GetPublicKey() string { func (x *ImportKeysResponse) GetAddress() string {
if x != nil { if x != nil {
return x.PublicKey return x.Address
} }
return "" return ""
} }
@ -277,11 +302,19 @@ func (x *ImportKeysResponse) GetImportPublicKey() string {
return "" return ""
} }
func (x *ImportKeysResponse) GetVersion() uint64 {
if x != nil {
return x.Version
}
return 0
}
type DeriveChildRequest struct { type DeriveChildRequest struct {
state protoimpl.MessageState `protogen:"open.v1"` state protoimpl.MessageState `protogen:"open.v1"`
ImportedKey string `protobuf:"bytes,1,opt,name=imported_key,json=importedKey,proto3" json:"imported_key,omitempty"` ImportedKey string `protobuf:"bytes,1,opt,name=imported_key,json=importedKey,proto3" json:"imported_key,omitempty"`
Index uint64 `protobuf:"varint,2,opt,name=index,proto3" json:"index,omitempty"` Index uint64 `protobuf:"varint,2,opt,name=index,proto3" json:"index,omitempty"`
Hardened bool `protobuf:"varint,3,opt,name=hardened,proto3" json:"hardened,omitempty"` Hardened bool `protobuf:"varint,3,opt,name=hardened,proto3" json:"hardened,omitempty"`
Version uint64 `protobuf:"varint,4,opt,name=version,proto3" json:"version,omitempty"`
unknownFields protoimpl.UnknownFields unknownFields protoimpl.UnknownFields
sizeCache protoimpl.SizeCache sizeCache protoimpl.SizeCache
} }
@ -337,11 +370,19 @@ func (x *DeriveChildRequest) GetHardened() bool {
return false return false
} }
func (x *DeriveChildRequest) GetVersion() uint64 {
if x != nil {
return x.Version
}
return 0
}
type DeriveChildResponse struct { type DeriveChildResponse struct {
state protoimpl.MessageState `protogen:"open.v1"` state protoimpl.MessageState `protogen:"open.v1"`
PublicKey string `protobuf:"bytes,1,opt,name=public_key,json=publicKey,proto3" json:"public_key,omitempty"` Address string `protobuf:"bytes,1,opt,name=address,proto3" json:"address,omitempty"`
PrivateKey string `protobuf:"bytes,2,opt,name=private_key,json=privateKey,proto3" json:"private_key,omitempty"` PrivateKey string `protobuf:"bytes,2,opt,name=private_key,json=privateKey,proto3" json:"private_key,omitempty"`
ChainCode string `protobuf:"bytes,3,opt,name=chain_code,json=chainCode,proto3" json:"chain_code,omitempty"` ChainCode string `protobuf:"bytes,3,opt,name=chain_code,json=chainCode,proto3" json:"chain_code,omitempty"`
Version uint64 `protobuf:"varint,4,opt,name=version,proto3" json:"version,omitempty"`
unknownFields protoimpl.UnknownFields unknownFields protoimpl.UnknownFields
sizeCache protoimpl.SizeCache sizeCache protoimpl.SizeCache
} }
@ -376,9 +417,9 @@ func (*DeriveChildResponse) Descriptor() ([]byte, []int) {
return file_service_proto_rawDescGZIP(), []int{5} return file_service_proto_rawDescGZIP(), []int{5}
} }
func (x *DeriveChildResponse) GetPublicKey() string { func (x *DeriveChildResponse) GetAddress() string {
if x != nil { if x != nil {
return x.PublicKey return x.Address
} }
return "" return ""
} }
@ -397,6 +438,13 @@ func (x *DeriveChildResponse) GetChainCode() string {
return "" return ""
} }
func (x *DeriveChildResponse) GetVersion() uint64 {
if x != nil {
return x.Version
}
return 0
}
type CreateTxRequest struct { type CreateTxRequest struct {
state protoimpl.MessageState `protogen:"open.v1"` state protoimpl.MessageState `protogen:"open.v1"`
Names string `protobuf:"bytes,1,opt,name=names,proto3" json:"names,omitempty"` Names string `protobuf:"bytes,1,opt,name=names,proto3" json:"names,omitempty"`
@ -408,7 +456,8 @@ type CreateTxRequest struct {
ChainCode string `protobuf:"bytes,7,opt,name=chain_code,json=chainCode,proto3" json:"chain_code,omitempty"` ChainCode string `protobuf:"bytes,7,opt,name=chain_code,json=chainCode,proto3" json:"chain_code,omitempty"`
Index uint64 `protobuf:"varint,8,opt,name=index,proto3" json:"index,omitempty"` Index uint64 `protobuf:"varint,8,opt,name=index,proto3" json:"index,omitempty"`
Hardened bool `protobuf:"varint,9,opt,name=hardened,proto3" json:"hardened,omitempty"` Hardened bool `protobuf:"varint,9,opt,name=hardened,proto3" json:"hardened,omitempty"`
TimelockIntent *TimelockIntent `protobuf:"bytes,10,opt,name=timelock_intent,json=timelockIntent,proto3" json:"timelock_intent,omitempty"` Version uint64 `protobuf:"varint,10,opt,name=version,proto3" json:"version,omitempty"`
TimelockIntent *TimelockIntent `protobuf:"bytes,11,opt,name=timelock_intent,json=timelockIntent,proto3" json:"timelock_intent,omitempty"`
unknownFields protoimpl.UnknownFields unknownFields protoimpl.UnknownFields
sizeCache protoimpl.SizeCache sizeCache protoimpl.SizeCache
} }
@ -506,6 +555,13 @@ func (x *CreateTxRequest) GetHardened() bool {
return false return false
} }
func (x *CreateTxRequest) GetVersion() uint64 {
if x != nil {
return x.Version
}
return 0
}
func (x *CreateTxRequest) GetTimelockIntent() *TimelockIntent { func (x *CreateTxRequest) GetTimelockIntent() *TimelockIntent {
if x != nil { if x != nil {
return x.TimelockIntent return x.TimelockIntent
@ -557,118 +613,6 @@ func (x *CreateTxResponse) GetRawTx() *RawTx {
return nil return nil
} }
type SignTxRequest struct {
state protoimpl.MessageState `protogen:"open.v1"`
UnsignedTx string `protobuf:"bytes,1,opt,name=unsigned_tx,json=unsignedTx,proto3" json:"unsigned_tx,omitempty"`
Index uint64 `protobuf:"varint,2,opt,name=index,proto3" json:"index,omitempty"`
Hardened bool `protobuf:"varint,3,opt,name=hardened,proto3" json:"hardened,omitempty"`
unknownFields protoimpl.UnknownFields
sizeCache protoimpl.SizeCache
}
func (x *SignTxRequest) Reset() {
*x = SignTxRequest{}
mi := &file_service_proto_msgTypes[8]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
func (x *SignTxRequest) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*SignTxRequest) ProtoMessage() {}
func (x *SignTxRequest) ProtoReflect() protoreflect.Message {
mi := &file_service_proto_msgTypes[8]
if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use SignTxRequest.ProtoReflect.Descriptor instead.
func (*SignTxRequest) Descriptor() ([]byte, []int) {
return file_service_proto_rawDescGZIP(), []int{8}
}
func (x *SignTxRequest) GetUnsignedTx() string {
if x != nil {
return x.UnsignedTx
}
return ""
}
func (x *SignTxRequest) GetIndex() uint64 {
if x != nil {
return x.Index
}
return 0
}
func (x *SignTxRequest) GetHardened() bool {
if x != nil {
return x.Hardened
}
return false
}
type SignTxResponse struct {
state protoimpl.MessageState `protogen:"open.v1"`
SignedTx string `protobuf:"bytes,1,opt,name=signed_tx,json=signedTx,proto3" json:"signed_tx,omitempty"`
Error string `protobuf:"bytes,2,opt,name=error,proto3" json:"error,omitempty"`
unknownFields protoimpl.UnknownFields
sizeCache protoimpl.SizeCache
}
func (x *SignTxResponse) Reset() {
*x = SignTxResponse{}
mi := &file_service_proto_msgTypes[9]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
func (x *SignTxResponse) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*SignTxResponse) ProtoMessage() {}
func (x *SignTxResponse) ProtoReflect() protoreflect.Message {
mi := &file_service_proto_msgTypes[9]
if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use SignTxResponse.ProtoReflect.Descriptor instead.
func (*SignTxResponse) Descriptor() ([]byte, []int) {
return file_service_proto_rawDescGZIP(), []int{9}
}
func (x *SignTxResponse) GetSignedTx() string {
if x != nil {
return x.SignedTx
}
return ""
}
func (x *SignTxResponse) GetError() string {
if x != nil {
return x.Error
}
return ""
}
type ScanRequest struct { type ScanRequest struct {
state protoimpl.MessageState `protogen:"open.v1"` state protoimpl.MessageState `protogen:"open.v1"`
MasterPubkey string `protobuf:"bytes,1,opt,name=master_pubkey,json=masterPubkey,proto3" json:"master_pubkey,omitempty"` MasterPubkey string `protobuf:"bytes,1,opt,name=master_pubkey,json=masterPubkey,proto3" json:"master_pubkey,omitempty"`
@ -682,7 +626,7 @@ type ScanRequest struct {
func (x *ScanRequest) Reset() { func (x *ScanRequest) Reset() {
*x = ScanRequest{} *x = ScanRequest{}
mi := &file_service_proto_msgTypes[10] mi := &file_service_proto_msgTypes[8]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi) ms.StoreMessageInfo(mi)
} }
@ -694,7 +638,7 @@ func (x *ScanRequest) String() string {
func (*ScanRequest) ProtoMessage() {} func (*ScanRequest) ProtoMessage() {}
func (x *ScanRequest) ProtoReflect() protoreflect.Message { func (x *ScanRequest) ProtoReflect() protoreflect.Message {
mi := &file_service_proto_msgTypes[10] mi := &file_service_proto_msgTypes[8]
if x != nil { if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil { if ms.LoadMessageInfo() == nil {
@ -707,7 +651,7 @@ func (x *ScanRequest) ProtoReflect() protoreflect.Message {
// Deprecated: Use ScanRequest.ProtoReflect.Descriptor instead. // Deprecated: Use ScanRequest.ProtoReflect.Descriptor instead.
func (*ScanRequest) Descriptor() ([]byte, []int) { func (*ScanRequest) Descriptor() ([]byte, []int) {
return file_service_proto_rawDescGZIP(), []int{10} return file_service_proto_rawDescGZIP(), []int{8}
} }
func (x *ScanRequest) GetMasterPubkey() string { func (x *ScanRequest) GetMasterPubkey() string {
@ -754,7 +698,7 @@ type ScanResponse struct {
func (x *ScanResponse) Reset() { func (x *ScanResponse) Reset() {
*x = ScanResponse{} *x = ScanResponse{}
mi := &file_service_proto_msgTypes[11] mi := &file_service_proto_msgTypes[9]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi) ms.StoreMessageInfo(mi)
} }
@ -766,7 +710,7 @@ func (x *ScanResponse) String() string {
func (*ScanResponse) ProtoMessage() {} func (*ScanResponse) ProtoMessage() {}
func (x *ScanResponse) ProtoReflect() protoreflect.Message { func (x *ScanResponse) ProtoReflect() protoreflect.Message {
mi := &file_service_proto_msgTypes[11] mi := &file_service_proto_msgTypes[9]
if x != nil { if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil { if ms.LoadMessageInfo() == nil {
@ -779,7 +723,7 @@ func (x *ScanResponse) ProtoReflect() protoreflect.Message {
// Deprecated: Use ScanResponse.ProtoReflect.Descriptor instead. // Deprecated: Use ScanResponse.ProtoReflect.Descriptor instead.
func (*ScanResponse) Descriptor() ([]byte, []int) { func (*ScanResponse) Descriptor() ([]byte, []int) {
return file_service_proto_rawDescGZIP(), []int{11} return file_service_proto_rawDescGZIP(), []int{9}
} }
func (x *ScanResponse) GetScanData() []*ScanData { func (x *ScanResponse) GetScanData() []*ScanData {
@ -798,7 +742,7 @@ type GetBalanceRequest struct {
func (x *GetBalanceRequest) Reset() { func (x *GetBalanceRequest) Reset() {
*x = GetBalanceRequest{} *x = GetBalanceRequest{}
mi := &file_service_proto_msgTypes[12] mi := &file_service_proto_msgTypes[10]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi) ms.StoreMessageInfo(mi)
} }
@ -810,7 +754,7 @@ func (x *GetBalanceRequest) String() string {
func (*GetBalanceRequest) ProtoMessage() {} func (*GetBalanceRequest) ProtoMessage() {}
func (x *GetBalanceRequest) ProtoReflect() protoreflect.Message { func (x *GetBalanceRequest) ProtoReflect() protoreflect.Message {
mi := &file_service_proto_msgTypes[12] mi := &file_service_proto_msgTypes[10]
if x != nil { if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil { if ms.LoadMessageInfo() == nil {
@ -823,7 +767,7 @@ func (x *GetBalanceRequest) ProtoReflect() protoreflect.Message {
// Deprecated: Use GetBalanceRequest.ProtoReflect.Descriptor instead. // Deprecated: Use GetBalanceRequest.ProtoReflect.Descriptor instead.
func (*GetBalanceRequest) Descriptor() ([]byte, []int) { func (*GetBalanceRequest) Descriptor() ([]byte, []int) {
return file_service_proto_rawDescGZIP(), []int{12} return file_service_proto_rawDescGZIP(), []int{10}
} }
func (x *GetBalanceRequest) GetAddress() string { func (x *GetBalanceRequest) GetAddress() string {
@ -842,7 +786,7 @@ type GetBalanceResponse struct {
func (x *GetBalanceResponse) Reset() { func (x *GetBalanceResponse) Reset() {
*x = GetBalanceResponse{} *x = GetBalanceResponse{}
mi := &file_service_proto_msgTypes[13] mi := &file_service_proto_msgTypes[11]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi) ms.StoreMessageInfo(mi)
} }
@ -854,7 +798,7 @@ func (x *GetBalanceResponse) String() string {
func (*GetBalanceResponse) ProtoMessage() {} func (*GetBalanceResponse) ProtoMessage() {}
func (x *GetBalanceResponse) ProtoReflect() protoreflect.Message { func (x *GetBalanceResponse) ProtoReflect() protoreflect.Message {
mi := &file_service_proto_msgTypes[13] mi := &file_service_proto_msgTypes[11]
if x != nil { if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil { if ms.LoadMessageInfo() == nil {
@ -867,7 +811,7 @@ func (x *GetBalanceResponse) ProtoReflect() protoreflect.Message {
// Deprecated: Use GetBalanceResponse.ProtoReflect.Descriptor instead. // Deprecated: Use GetBalanceResponse.ProtoReflect.Descriptor instead.
func (*GetBalanceResponse) Descriptor() ([]byte, []int) { func (*GetBalanceResponse) Descriptor() ([]byte, []int) {
return file_service_proto_rawDescGZIP(), []int{13} return file_service_proto_rawDescGZIP(), []int{11}
} }
func (x *GetBalanceResponse) GetData() *WalletBalanceData { func (x *GetBalanceResponse) GetData() *WalletBalanceData {
@ -886,7 +830,7 @@ type SendTransactionRequest struct {
func (x *SendTransactionRequest) Reset() { func (x *SendTransactionRequest) Reset() {
*x = SendTransactionRequest{} *x = SendTransactionRequest{}
mi := &file_service_proto_msgTypes[14] mi := &file_service_proto_msgTypes[12]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi) ms.StoreMessageInfo(mi)
} }
@ -898,7 +842,7 @@ func (x *SendTransactionRequest) String() string {
func (*SendTransactionRequest) ProtoMessage() {} func (*SendTransactionRequest) ProtoMessage() {}
func (x *SendTransactionRequest) ProtoReflect() protoreflect.Message { func (x *SendTransactionRequest) ProtoReflect() protoreflect.Message {
mi := &file_service_proto_msgTypes[14] mi := &file_service_proto_msgTypes[12]
if x != nil { if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil { if ms.LoadMessageInfo() == nil {
@ -911,7 +855,7 @@ func (x *SendTransactionRequest) ProtoReflect() protoreflect.Message {
// Deprecated: Use SendTransactionRequest.ProtoReflect.Descriptor instead. // Deprecated: Use SendTransactionRequest.ProtoReflect.Descriptor instead.
func (*SendTransactionRequest) Descriptor() ([]byte, []int) { func (*SendTransactionRequest) Descriptor() ([]byte, []int) {
return file_service_proto_rawDescGZIP(), []int{14} return file_service_proto_rawDescGZIP(), []int{12}
} }
func (x *SendTransactionRequest) GetRawTx() *RawTx { func (x *SendTransactionRequest) GetRawTx() *RawTx {
@ -930,7 +874,7 @@ type SendTransactionResponse struct {
func (x *SendTransactionResponse) Reset() { func (x *SendTransactionResponse) Reset() {
*x = SendTransactionResponse{} *x = SendTransactionResponse{}
mi := &file_service_proto_msgTypes[15] mi := &file_service_proto_msgTypes[13]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi) ms.StoreMessageInfo(mi)
} }
@ -942,7 +886,7 @@ func (x *SendTransactionResponse) String() string {
func (*SendTransactionResponse) ProtoMessage() {} func (*SendTransactionResponse) ProtoMessage() {}
func (x *SendTransactionResponse) ProtoReflect() protoreflect.Message { func (x *SendTransactionResponse) ProtoReflect() protoreflect.Message {
mi := &file_service_proto_msgTypes[15] mi := &file_service_proto_msgTypes[13]
if x != nil { if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil { if ms.LoadMessageInfo() == nil {
@ -955,7 +899,7 @@ func (x *SendTransactionResponse) ProtoReflect() protoreflect.Message {
// Deprecated: Use SendTransactionResponse.ProtoReflect.Descriptor instead. // Deprecated: Use SendTransactionResponse.ProtoReflect.Descriptor instead.
func (*SendTransactionResponse) Descriptor() ([]byte, []int) { func (*SendTransactionResponse) Descriptor() ([]byte, []int) {
return file_service_proto_rawDescGZIP(), []int{15} return file_service_proto_rawDescGZIP(), []int{13}
} }
func (x *SendTransactionResponse) GetResponse() *WalletSendTransactionResponse { func (x *SendTransactionResponse) GetResponse() *WalletSendTransactionResponse {
@ -969,43 +913,46 @@ var File_service_proto protoreflect.FileDescriptor
const file_service_proto_rawDesc = "" + const file_service_proto_rawDesc = "" +
"\n" + "\n" +
"\rservice.proto\x12\x13nockchain.public.v1\x1a\vtypes.proto\x1a\x10blockchain.proto\x1a\x0fnockchain.proto\"\x0f\n" + "\rservice.proto\x12\x13nockchain.public.v1\x1a\vtypes.proto\x1a\x10blockchain.proto\x1a\x0fnockchain.proto\")\n" +
"\rKeygenRequest\"\xdd\x01\n" + "\rKeygenRequest\x12\x18\n" +
"\x0eKeygenResponse\x12\x1d\n" + "\aversion\x18\x01 \x01(\x04R\aversion\"\xf2\x01\n" +
"\n" + "\x0eKeygenResponse\x12\x18\n" +
"public_key\x18\x01 \x01(\tR\tpublicKey\x12\x1f\n" + "\aaddress\x18\x01 \x01(\tR\aaddress\x12\x1f\n" +
"\vprivate_key\x18\x02 \x01(\tR\n" + "\vprivate_key\x18\x02 \x01(\tR\n" +
"privateKey\x12\x12\n" + "privateKey\x12\x12\n" +
"\x04seed\x18\x03 \x01(\tR\x04seed\x12\x1d\n" + "\x04seed\x18\x03 \x01(\tR\x04seed\x12\x1d\n" +
"\n" + "\n" +
"chain_code\x18\x04 \x01(\tR\tchainCode\x12,\n" + "chain_code\x18\x04 \x01(\tR\tchainCode\x12,\n" +
"\x12import_private_key\x18\x05 \x01(\tR\x10importPrivateKey\x12*\n" + "\x12import_private_key\x18\x05 \x01(\tR\x10importPrivateKey\x12*\n" +
"\x11import_public_key\x18\x06 \x01(\tR\x0fimportPublicKey\"g\n" + "\x11import_public_key\x18\x06 \x01(\tR\x0fimportPublicKey\x12\x18\n" +
"\aversion\x18\a \x01(\x04R\aversion\"\x81\x01\n" +
"\x11ImportKeysRequest\x12\x10\n" + "\x11ImportKeysRequest\x12\x10\n" +
"\x03key\x18\x01 \x01(\tR\x03key\x12@\n" + "\x03key\x18\x01 \x01(\tR\x03key\x12\x18\n" +
"\vimport_type\x18\x02 \x01(\x0e2\x1f.nockchain.public.v1.ImportTypeR\n" + "\aversion\x18\x02 \x01(\x04R\aversion\x12@\n" +
"importType\"\xe1\x01\n" + "\vimport_type\x18\x03 \x01(\x0e2\x1f.nockchain.public.v1.ImportTypeR\n" +
"\x12ImportKeysResponse\x12\x1d\n" + "importType\"\xf6\x01\n" +
"\n" + "\x12ImportKeysResponse\x12\x18\n" +
"public_key\x18\x01 \x01(\tR\tpublicKey\x12\x1f\n" + "\aaddress\x18\x01 \x01(\tR\aaddress\x12\x1f\n" +
"\vprivate_key\x18\x02 \x01(\tR\n" + "\vprivate_key\x18\x02 \x01(\tR\n" +
"privateKey\x12\x12\n" + "privateKey\x12\x12\n" +
"\x04seed\x18\x03 \x01(\tR\x04seed\x12\x1d\n" + "\x04seed\x18\x03 \x01(\tR\x04seed\x12\x1d\n" +
"\n" + "\n" +
"chain_code\x18\x04 \x01(\tR\tchainCode\x12,\n" + "chain_code\x18\x04 \x01(\tR\tchainCode\x12,\n" +
"\x12import_private_key\x18\x05 \x01(\tR\x10importPrivateKey\x12*\n" + "\x12import_private_key\x18\x05 \x01(\tR\x10importPrivateKey\x12*\n" +
"\x11import_public_key\x18\x06 \x01(\tR\x0fimportPublicKey\"i\n" + "\x11import_public_key\x18\x06 \x01(\tR\x0fimportPublicKey\x12\x18\n" +
"\aversion\x18\a \x01(\x04R\aversion\"\x83\x01\n" +
"\x12DeriveChildRequest\x12!\n" + "\x12DeriveChildRequest\x12!\n" +
"\fimported_key\x18\x01 \x01(\tR\vimportedKey\x12\x14\n" + "\fimported_key\x18\x01 \x01(\tR\vimportedKey\x12\x14\n" +
"\x05index\x18\x02 \x01(\x04R\x05index\x12\x1a\n" + "\x05index\x18\x02 \x01(\x04R\x05index\x12\x1a\n" +
"\bhardened\x18\x03 \x01(\bR\bhardened\"t\n" + "\bhardened\x18\x03 \x01(\bR\bhardened\x12\x18\n" +
"\x13DeriveChildResponse\x12\x1d\n" + "\aversion\x18\x04 \x01(\x04R\aversion\"\x89\x01\n" +
"\n" + "\x13DeriveChildResponse\x12\x18\n" +
"public_key\x18\x01 \x01(\tR\tpublicKey\x12\x1f\n" + "\aaddress\x18\x01 \x01(\tR\aaddress\x12\x1f\n" +
"\vprivate_key\x18\x02 \x01(\tR\n" + "\vprivate_key\x18\x02 \x01(\tR\n" +
"privateKey\x12\x1d\n" + "privateKey\x12\x1d\n" +
"\n" + "\n" +
"chain_code\x18\x03 \x01(\tR\tchainCode\"\xc4\x02\n" + "chain_code\x18\x03 \x01(\tR\tchainCode\x12\x18\n" +
"\aversion\x18\x04 \x01(\x04R\aversion\"\xde\x02\n" +
"\x0fCreateTxRequest\x12\x14\n" + "\x0fCreateTxRequest\x12\x14\n" +
"\x05names\x18\x01 \x01(\tR\x05names\x12\x1e\n" + "\x05names\x18\x01 \x01(\tR\x05names\x12\x1e\n" +
"\n" + "\n" +
@ -1018,19 +965,12 @@ const file_service_proto_rawDesc = "" +
"\n" + "\n" +
"chain_code\x18\a \x01(\tR\tchainCode\x12\x14\n" + "chain_code\x18\a \x01(\tR\tchainCode\x12\x14\n" +
"\x05index\x18\b \x01(\x04R\x05index\x12\x1a\n" + "\x05index\x18\b \x01(\x04R\x05index\x12\x1a\n" +
"\bhardened\x18\t \x01(\bR\bhardened\x12L\n" + "\bhardened\x18\t \x01(\bR\bhardened\x12\x18\n" +
"\x0ftimelock_intent\x18\n" + "\aversion\x18\n" +
" \x01(\v2#.nockchain.public.v1.TimelockIntentR\x0etimelockIntent\"D\n" + " \x01(\x04R\aversion\x12L\n" +
"\x0ftimelock_intent\x18\v \x01(\v2#.nockchain.public.v1.TimelockIntentR\x0etimelockIntent\"D\n" +
"\x10CreateTxResponse\x120\n" + "\x10CreateTxResponse\x120\n" +
"\x05rawTx\x18\x01 \x01(\v2\x1a.nockchain.public.v1.RawTxR\x05rawTx\"b\n" + "\x05rawTx\x18\x01 \x01(\v2\x1a.nockchain.public.v1.RawTxR\x05rawTx\"\xcc\x01\n" +
"\rSignTxRequest\x12\x1f\n" +
"\vunsigned_tx\x18\x01 \x01(\tR\n" +
"unsignedTx\x12\x14\n" +
"\x05index\x18\x02 \x01(\x04R\x05index\x12\x1a\n" +
"\bhardened\x18\x03 \x01(\bR\bhardened\"C\n" +
"\x0eSignTxResponse\x12\x1b\n" +
"\tsigned_tx\x18\x01 \x01(\tR\bsignedTx\x12\x14\n" +
"\x05error\x18\x02 \x01(\tR\x05error\"\xcc\x01\n" +
"\vScanRequest\x12#\n" + "\vScanRequest\x12#\n" +
"\rmaster_pubkey\x18\x01 \x01(\tR\fmasterPubkey\x12\x1d\n" + "\rmaster_pubkey\x18\x01 \x01(\tR\fmasterPubkey\x12\x1d\n" +
"\n" + "\n" +
@ -1047,14 +987,13 @@ const file_service_proto_rawDesc = "" +
"\x16SendTransactionRequest\x121\n" + "\x16SendTransactionRequest\x121\n" +
"\x06raw_tx\x18\x01 \x01(\v2\x1a.nockchain.public.v1.RawTxR\x05rawTx\"i\n" + "\x06raw_tx\x18\x01 \x01(\v2\x1a.nockchain.public.v1.RawTxR\x05rawTx\"i\n" +
"\x17SendTransactionResponse\x12N\n" + "\x17SendTransactionResponse\x12N\n" +
"\bresponse\x18\x01 \x01(\v22.nockchain.public.v1.WalletSendTransactionResponseR\bresponse2\xef\x06\n" + "\bresponse\x18\x01 \x01(\v22.nockchain.public.v1.WalletSendTransactionResponseR\bresponse2\x9c\x06\n" +
"\rWalletService\x12Q\n" + "\rWalletService\x12Q\n" +
"\x06Keygen\x12\".nockchain.public.v1.KeygenRequest\x1a#.nockchain.public.v1.KeygenResponse\x12]\n" + "\x06Keygen\x12\".nockchain.public.v1.KeygenRequest\x1a#.nockchain.public.v1.KeygenResponse\x12]\n" +
"\n" + "\n" +
"ImportKeys\x12&.nockchain.public.v1.ImportKeysRequest\x1a'.nockchain.public.v1.ImportKeysResponse\x12`\n" + "ImportKeys\x12&.nockchain.public.v1.ImportKeysRequest\x1a'.nockchain.public.v1.ImportKeysResponse\x12`\n" +
"\vDeriveChild\x12'.nockchain.public.v1.DeriveChildRequest\x1a(.nockchain.public.v1.DeriveChildResponse\x12W\n" + "\vDeriveChild\x12'.nockchain.public.v1.DeriveChildRequest\x1a(.nockchain.public.v1.DeriveChildResponse\x12W\n" +
"\bCreateTx\x12$.nockchain.public.v1.CreateTxRequest\x1a%.nockchain.public.v1.CreateTxResponse\x12Q\n" + "\bCreateTx\x12$.nockchain.public.v1.CreateTxRequest\x1a%.nockchain.public.v1.CreateTxResponse\x12K\n" +
"\x06SignTx\x12\".nockchain.public.v1.SignTxRequest\x1a#.nockchain.public.v1.SignTxResponse\x12K\n" +
"\x04Scan\x12 .nockchain.public.v1.ScanRequest\x1a!.nockchain.public.v1.ScanResponse\x12c\n" + "\x04Scan\x12 .nockchain.public.v1.ScanRequest\x1a!.nockchain.public.v1.ScanResponse\x12c\n" +
"\x10WalletGetBalance\x12&.nockchain.public.v1.GetBalanceRequest\x1a'.nockchain.public.v1.GetBalanceResponse\x12r\n" + "\x10WalletGetBalance\x12&.nockchain.public.v1.GetBalanceRequest\x1a'.nockchain.public.v1.GetBalanceResponse\x12r\n" +
"\x15WalletSendTransaction\x12+.nockchain.public.v1.SendTransactionRequest\x1a,.nockchain.public.v1.SendTransactionResponse\x12x\n" + "\x15WalletSendTransaction\x12+.nockchain.public.v1.SendTransactionRequest\x1a,.nockchain.public.v1.SendTransactionResponse\x12x\n" +
@ -1072,7 +1011,7 @@ func file_service_proto_rawDescGZIP() []byte {
return file_service_proto_rawDescData return file_service_proto_rawDescData
} }
var file_service_proto_msgTypes = make([]protoimpl.MessageInfo, 16) var file_service_proto_msgTypes = make([]protoimpl.MessageInfo, 14)
var file_service_proto_goTypes = []any{ var file_service_proto_goTypes = []any{
(*KeygenRequest)(nil), // 0: nockchain.public.v1.KeygenRequest (*KeygenRequest)(nil), // 0: nockchain.public.v1.KeygenRequest
(*KeygenResponse)(nil), // 1: nockchain.public.v1.KeygenResponse (*KeygenResponse)(nil), // 1: nockchain.public.v1.KeygenResponse
@ -1082,51 +1021,47 @@ var file_service_proto_goTypes = []any{
(*DeriveChildResponse)(nil), // 5: nockchain.public.v1.DeriveChildResponse (*DeriveChildResponse)(nil), // 5: nockchain.public.v1.DeriveChildResponse
(*CreateTxRequest)(nil), // 6: nockchain.public.v1.CreateTxRequest (*CreateTxRequest)(nil), // 6: nockchain.public.v1.CreateTxRequest
(*CreateTxResponse)(nil), // 7: nockchain.public.v1.CreateTxResponse (*CreateTxResponse)(nil), // 7: nockchain.public.v1.CreateTxResponse
(*SignTxRequest)(nil), // 8: nockchain.public.v1.SignTxRequest (*ScanRequest)(nil), // 8: nockchain.public.v1.ScanRequest
(*SignTxResponse)(nil), // 9: nockchain.public.v1.SignTxResponse (*ScanResponse)(nil), // 9: nockchain.public.v1.ScanResponse
(*ScanRequest)(nil), // 10: nockchain.public.v1.ScanRequest (*GetBalanceRequest)(nil), // 10: nockchain.public.v1.GetBalanceRequest
(*ScanResponse)(nil), // 11: nockchain.public.v1.ScanResponse (*GetBalanceResponse)(nil), // 11: nockchain.public.v1.GetBalanceResponse
(*GetBalanceRequest)(nil), // 12: nockchain.public.v1.GetBalanceRequest (*SendTransactionRequest)(nil), // 12: nockchain.public.v1.SendTransactionRequest
(*GetBalanceResponse)(nil), // 13: nockchain.public.v1.GetBalanceResponse (*SendTransactionResponse)(nil), // 13: nockchain.public.v1.SendTransactionResponse
(*SendTransactionRequest)(nil), // 14: nockchain.public.v1.SendTransactionRequest (ImportType)(0), // 14: nockchain.public.v1.ImportType
(*SendTransactionResponse)(nil), // 15: nockchain.public.v1.SendTransactionResponse (*TimelockIntent)(nil), // 15: nockchain.public.v1.TimelockIntent
(ImportType)(0), // 16: nockchain.public.v1.ImportType (*RawTx)(nil), // 16: nockchain.public.v1.RawTx
(*TimelockIntent)(nil), // 17: nockchain.public.v1.TimelockIntent (*ScanData)(nil), // 17: nockchain.public.v1.ScanData
(*RawTx)(nil), // 18: nockchain.public.v1.RawTx (*WalletBalanceData)(nil), // 18: nockchain.public.v1.WalletBalanceData
(*ScanData)(nil), // 19: nockchain.public.v1.ScanData (*WalletSendTransactionResponse)(nil), // 19: nockchain.public.v1.WalletSendTransactionResponse
(*WalletBalanceData)(nil), // 20: nockchain.public.v1.WalletBalanceData (*TransactionAcceptedRequest)(nil), // 20: nockchain.public.v1.TransactionAcceptedRequest
(*WalletSendTransactionResponse)(nil), // 21: nockchain.public.v1.WalletSendTransactionResponse (*TransactionAcceptedResponse)(nil), // 21: nockchain.public.v1.TransactionAcceptedResponse
(*TransactionAcceptedRequest)(nil), // 22: nockchain.public.v1.TransactionAcceptedRequest
(*TransactionAcceptedResponse)(nil), // 23: nockchain.public.v1.TransactionAcceptedResponse
} }
var file_service_proto_depIdxs = []int32{ var file_service_proto_depIdxs = []int32{
16, // 0: nockchain.public.v1.ImportKeysRequest.import_type:type_name -> nockchain.public.v1.ImportType 14, // 0: nockchain.public.v1.ImportKeysRequest.import_type:type_name -> nockchain.public.v1.ImportType
17, // 1: nockchain.public.v1.CreateTxRequest.timelock_intent:type_name -> nockchain.public.v1.TimelockIntent 15, // 1: nockchain.public.v1.CreateTxRequest.timelock_intent:type_name -> nockchain.public.v1.TimelockIntent
18, // 2: nockchain.public.v1.CreateTxResponse.rawTx:type_name -> nockchain.public.v1.RawTx 16, // 2: nockchain.public.v1.CreateTxResponse.rawTx:type_name -> nockchain.public.v1.RawTx
19, // 3: nockchain.public.v1.ScanResponse.scan_data:type_name -> nockchain.public.v1.ScanData 17, // 3: nockchain.public.v1.ScanResponse.scan_data:type_name -> nockchain.public.v1.ScanData
20, // 4: nockchain.public.v1.GetBalanceResponse.data:type_name -> nockchain.public.v1.WalletBalanceData 18, // 4: nockchain.public.v1.GetBalanceResponse.data:type_name -> nockchain.public.v1.WalletBalanceData
18, // 5: nockchain.public.v1.SendTransactionRequest.raw_tx:type_name -> nockchain.public.v1.RawTx 16, // 5: nockchain.public.v1.SendTransactionRequest.raw_tx:type_name -> nockchain.public.v1.RawTx
21, // 6: nockchain.public.v1.SendTransactionResponse.response:type_name -> nockchain.public.v1.WalletSendTransactionResponse 19, // 6: nockchain.public.v1.SendTransactionResponse.response:type_name -> nockchain.public.v1.WalletSendTransactionResponse
0, // 7: nockchain.public.v1.WalletService.Keygen:input_type -> nockchain.public.v1.KeygenRequest 0, // 7: nockchain.public.v1.WalletService.Keygen:input_type -> nockchain.public.v1.KeygenRequest
2, // 8: nockchain.public.v1.WalletService.ImportKeys:input_type -> nockchain.public.v1.ImportKeysRequest 2, // 8: nockchain.public.v1.WalletService.ImportKeys:input_type -> nockchain.public.v1.ImportKeysRequest
4, // 9: nockchain.public.v1.WalletService.DeriveChild:input_type -> nockchain.public.v1.DeriveChildRequest 4, // 9: nockchain.public.v1.WalletService.DeriveChild:input_type -> nockchain.public.v1.DeriveChildRequest
6, // 10: nockchain.public.v1.WalletService.CreateTx:input_type -> nockchain.public.v1.CreateTxRequest 6, // 10: nockchain.public.v1.WalletService.CreateTx:input_type -> nockchain.public.v1.CreateTxRequest
8, // 11: nockchain.public.v1.WalletService.SignTx:input_type -> nockchain.public.v1.SignTxRequest 8, // 11: nockchain.public.v1.WalletService.Scan:input_type -> nockchain.public.v1.ScanRequest
10, // 12: nockchain.public.v1.WalletService.Scan:input_type -> nockchain.public.v1.ScanRequest 10, // 12: nockchain.public.v1.WalletService.WalletGetBalance:input_type -> nockchain.public.v1.GetBalanceRequest
12, // 13: nockchain.public.v1.WalletService.WalletGetBalance:input_type -> nockchain.public.v1.GetBalanceRequest 12, // 13: nockchain.public.v1.WalletService.WalletSendTransaction:input_type -> nockchain.public.v1.SendTransactionRequest
14, // 14: nockchain.public.v1.WalletService.WalletSendTransaction:input_type -> nockchain.public.v1.SendTransactionRequest 20, // 14: nockchain.public.v1.WalletService.TransactionAccepted:input_type -> nockchain.public.v1.TransactionAcceptedRequest
22, // 15: nockchain.public.v1.WalletService.TransactionAccepted:input_type -> nockchain.public.v1.TransactionAcceptedRequest 1, // 15: nockchain.public.v1.WalletService.Keygen:output_type -> nockchain.public.v1.KeygenResponse
1, // 16: nockchain.public.v1.WalletService.Keygen:output_type -> nockchain.public.v1.KeygenResponse 3, // 16: nockchain.public.v1.WalletService.ImportKeys:output_type -> nockchain.public.v1.ImportKeysResponse
3, // 17: nockchain.public.v1.WalletService.ImportKeys:output_type -> nockchain.public.v1.ImportKeysResponse 5, // 17: nockchain.public.v1.WalletService.DeriveChild:output_type -> nockchain.public.v1.DeriveChildResponse
5, // 18: nockchain.public.v1.WalletService.DeriveChild:output_type -> nockchain.public.v1.DeriveChildResponse 7, // 18: nockchain.public.v1.WalletService.CreateTx:output_type -> nockchain.public.v1.CreateTxResponse
7, // 19: nockchain.public.v1.WalletService.CreateTx:output_type -> nockchain.public.v1.CreateTxResponse 9, // 19: nockchain.public.v1.WalletService.Scan:output_type -> nockchain.public.v1.ScanResponse
9, // 20: nockchain.public.v1.WalletService.SignTx:output_type -> nockchain.public.v1.SignTxResponse 11, // 20: nockchain.public.v1.WalletService.WalletGetBalance:output_type -> nockchain.public.v1.GetBalanceResponse
11, // 21: nockchain.public.v1.WalletService.Scan:output_type -> nockchain.public.v1.ScanResponse 13, // 21: nockchain.public.v1.WalletService.WalletSendTransaction:output_type -> nockchain.public.v1.SendTransactionResponse
13, // 22: nockchain.public.v1.WalletService.WalletGetBalance:output_type -> nockchain.public.v1.GetBalanceResponse 21, // 22: nockchain.public.v1.WalletService.TransactionAccepted:output_type -> nockchain.public.v1.TransactionAcceptedResponse
15, // 23: nockchain.public.v1.WalletService.WalletSendTransaction:output_type -> nockchain.public.v1.SendTransactionResponse 15, // [15:23] is the sub-list for method output_type
23, // 24: nockchain.public.v1.WalletService.TransactionAccepted:output_type -> nockchain.public.v1.TransactionAcceptedResponse 7, // [7:15] is the sub-list for method input_type
16, // [16:25] is the sub-list for method output_type
7, // [7:16] is the sub-list for method input_type
7, // [7:7] is the sub-list for extension type_name 7, // [7:7] is the sub-list for extension type_name
7, // [7:7] is the sub-list for extension extendee 7, // [7:7] is the sub-list for extension extendee
0, // [0:7] is the sub-list for field type_name 0, // [0:7] is the sub-list for field type_name
@ -1146,7 +1081,7 @@ func file_service_proto_init() {
GoPackagePath: reflect.TypeOf(x{}).PkgPath(), GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
RawDescriptor: unsafe.Slice(unsafe.StringData(file_service_proto_rawDesc), len(file_service_proto_rawDesc)), RawDescriptor: unsafe.Slice(unsafe.StringData(file_service_proto_rawDesc), len(file_service_proto_rawDesc)),
NumEnums: 0, NumEnums: 0,
NumMessages: 16, NumMessages: 14,
NumExtensions: 0, NumExtensions: 0,
NumServices: 1, NumServices: 1,
}, },

View File

@ -23,7 +23,6 @@ const (
WalletService_ImportKeys_FullMethodName = "/nockchain.public.v1.WalletService/ImportKeys" WalletService_ImportKeys_FullMethodName = "/nockchain.public.v1.WalletService/ImportKeys"
WalletService_DeriveChild_FullMethodName = "/nockchain.public.v1.WalletService/DeriveChild" WalletService_DeriveChild_FullMethodName = "/nockchain.public.v1.WalletService/DeriveChild"
WalletService_CreateTx_FullMethodName = "/nockchain.public.v1.WalletService/CreateTx" WalletService_CreateTx_FullMethodName = "/nockchain.public.v1.WalletService/CreateTx"
WalletService_SignTx_FullMethodName = "/nockchain.public.v1.WalletService/SignTx"
WalletService_Scan_FullMethodName = "/nockchain.public.v1.WalletService/Scan" WalletService_Scan_FullMethodName = "/nockchain.public.v1.WalletService/Scan"
WalletService_WalletGetBalance_FullMethodName = "/nockchain.public.v1.WalletService/WalletGetBalance" WalletService_WalletGetBalance_FullMethodName = "/nockchain.public.v1.WalletService/WalletGetBalance"
WalletService_WalletSendTransaction_FullMethodName = "/nockchain.public.v1.WalletService/WalletSendTransaction" WalletService_WalletSendTransaction_FullMethodName = "/nockchain.public.v1.WalletService/WalletSendTransaction"
@ -38,7 +37,7 @@ type WalletServiceClient interface {
ImportKeys(ctx context.Context, in *ImportKeysRequest, opts ...grpc.CallOption) (*ImportKeysResponse, error) ImportKeys(ctx context.Context, in *ImportKeysRequest, opts ...grpc.CallOption) (*ImportKeysResponse, error)
DeriveChild(ctx context.Context, in *DeriveChildRequest, opts ...grpc.CallOption) (*DeriveChildResponse, error) DeriveChild(ctx context.Context, in *DeriveChildRequest, opts ...grpc.CallOption) (*DeriveChildResponse, error)
CreateTx(ctx context.Context, in *CreateTxRequest, opts ...grpc.CallOption) (*CreateTxResponse, error) CreateTx(ctx context.Context, in *CreateTxRequest, opts ...grpc.CallOption) (*CreateTxResponse, error)
SignTx(ctx context.Context, in *SignTxRequest, opts ...grpc.CallOption) (*SignTxResponse, error) // rpc SignTx(SignTxRequest) returns (SignTxResponse);
Scan(ctx context.Context, in *ScanRequest, opts ...grpc.CallOption) (*ScanResponse, error) Scan(ctx context.Context, in *ScanRequest, opts ...grpc.CallOption) (*ScanResponse, error)
WalletGetBalance(ctx context.Context, in *GetBalanceRequest, opts ...grpc.CallOption) (*GetBalanceResponse, error) WalletGetBalance(ctx context.Context, in *GetBalanceRequest, opts ...grpc.CallOption) (*GetBalanceResponse, error)
WalletSendTransaction(ctx context.Context, in *SendTransactionRequest, opts ...grpc.CallOption) (*SendTransactionResponse, error) WalletSendTransaction(ctx context.Context, in *SendTransactionRequest, opts ...grpc.CallOption) (*SendTransactionResponse, error)
@ -93,16 +92,6 @@ func (c *walletServiceClient) CreateTx(ctx context.Context, in *CreateTxRequest,
return out, nil return out, nil
} }
func (c *walletServiceClient) SignTx(ctx context.Context, in *SignTxRequest, opts ...grpc.CallOption) (*SignTxResponse, error) {
cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...)
out := new(SignTxResponse)
err := c.cc.Invoke(ctx, WalletService_SignTx_FullMethodName, in, out, cOpts...)
if err != nil {
return nil, err
}
return out, nil
}
func (c *walletServiceClient) Scan(ctx context.Context, in *ScanRequest, opts ...grpc.CallOption) (*ScanResponse, error) { func (c *walletServiceClient) Scan(ctx context.Context, in *ScanRequest, opts ...grpc.CallOption) (*ScanResponse, error) {
cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...)
out := new(ScanResponse) out := new(ScanResponse)
@ -151,7 +140,7 @@ type WalletServiceServer interface {
ImportKeys(context.Context, *ImportKeysRequest) (*ImportKeysResponse, error) ImportKeys(context.Context, *ImportKeysRequest) (*ImportKeysResponse, error)
DeriveChild(context.Context, *DeriveChildRequest) (*DeriveChildResponse, error) DeriveChild(context.Context, *DeriveChildRequest) (*DeriveChildResponse, error)
CreateTx(context.Context, *CreateTxRequest) (*CreateTxResponse, error) CreateTx(context.Context, *CreateTxRequest) (*CreateTxResponse, error)
SignTx(context.Context, *SignTxRequest) (*SignTxResponse, error) // rpc SignTx(SignTxRequest) returns (SignTxResponse);
Scan(context.Context, *ScanRequest) (*ScanResponse, error) Scan(context.Context, *ScanRequest) (*ScanResponse, error)
WalletGetBalance(context.Context, *GetBalanceRequest) (*GetBalanceResponse, error) WalletGetBalance(context.Context, *GetBalanceRequest) (*GetBalanceResponse, error)
WalletSendTransaction(context.Context, *SendTransactionRequest) (*SendTransactionResponse, error) WalletSendTransaction(context.Context, *SendTransactionRequest) (*SendTransactionResponse, error)
@ -178,9 +167,6 @@ func (UnimplementedWalletServiceServer) DeriveChild(context.Context, *DeriveChil
func (UnimplementedWalletServiceServer) CreateTx(context.Context, *CreateTxRequest) (*CreateTxResponse, error) { func (UnimplementedWalletServiceServer) CreateTx(context.Context, *CreateTxRequest) (*CreateTxResponse, error) {
return nil, status.Errorf(codes.Unimplemented, "method CreateTx not implemented") return nil, status.Errorf(codes.Unimplemented, "method CreateTx not implemented")
} }
func (UnimplementedWalletServiceServer) SignTx(context.Context, *SignTxRequest) (*SignTxResponse, error) {
return nil, status.Errorf(codes.Unimplemented, "method SignTx not implemented")
}
func (UnimplementedWalletServiceServer) Scan(context.Context, *ScanRequest) (*ScanResponse, error) { func (UnimplementedWalletServiceServer) Scan(context.Context, *ScanRequest) (*ScanResponse, error) {
return nil, status.Errorf(codes.Unimplemented, "method Scan not implemented") return nil, status.Errorf(codes.Unimplemented, "method Scan not implemented")
} }
@ -286,24 +272,6 @@ func _WalletService_CreateTx_Handler(srv interface{}, ctx context.Context, dec f
return interceptor(ctx, in, info, handler) return interceptor(ctx, in, info, handler)
} }
func _WalletService_SignTx_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
in := new(SignTxRequest)
if err := dec(in); err != nil {
return nil, err
}
if interceptor == nil {
return srv.(WalletServiceServer).SignTx(ctx, in)
}
info := &grpc.UnaryServerInfo{
Server: srv,
FullMethod: WalletService_SignTx_FullMethodName,
}
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
return srv.(WalletServiceServer).SignTx(ctx, req.(*SignTxRequest))
}
return interceptor(ctx, in, info, handler)
}
func _WalletService_Scan_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { func _WalletService_Scan_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
in := new(ScanRequest) in := new(ScanRequest)
if err := dec(in); err != nil { if err := dec(in); err != nil {
@ -399,10 +367,6 @@ var WalletService_ServiceDesc = grpc.ServiceDesc{
MethodName: "CreateTx", MethodName: "CreateTx",
Handler: _WalletService_CreateTx_Handler, Handler: _WalletService_CreateTx_Handler,
}, },
{
MethodName: "SignTx",
Handler: _WalletService_SignTx_Handler,
},
{ {
MethodName: "Scan", MethodName: "Scan",
Handler: _WalletService_Scan_Handler, Handler: _WalletService_Scan_Handler,

75
proto/nockapp.proto Normal file
View File

@ -0,0 +1,75 @@
// nockchain/private/v1/nockapp.proto
syntax = "proto3";
package nockchain.private.v1;
option go_package = "./;nockchain";
service NockAppService {
rpc Peek(PeekRequest) returns (PeekResponse);
rpc Poke(PokeRequest) returns (PokeResponse);
}
message PeekRequest {
int32 pid = 1; // process ID for tracking
bytes path = 2; // JAM-encoded nock peek path
}
message PeekResponse {
oneof result {
bytes data = 1; // JAM-encoded nock data (success case)
AppErrorStatus error = 2;
}
}
message PokeRequest {
int32 pid = 1; // process ID for tracking
Wire wire = 2; // wire routing information
bytes payload = 3; // JAM-encoded nock data
}
message PokeResponse {
oneof result {
bool acknowledged = 1; // true if successful
AppErrorStatus error = 2;
}
}
message AppErrorStatus {
AppErrorCode code = 1;
string message = 2;
optional string details = 3; // additional error context
}
enum AppErrorCode {
ERROR_CODE_UNSPECIFIED = 0;
ERROR_CODE_INVALID_REQUEST = 1;
ERROR_CODE_PEEK_FAILED = 2;
ERROR_CODE_PEEK_RETURNED_NO_DATA = 3;
ERROR_CODE_POKE_FAILED = 4;
ERROR_CODE_NACKAPP_ERROR = 5;
ERROR_CODE_TIMEOUT = 6;
ERROR_CODE_INTERNAL_ERROR = 7;
ERROR_CODE_NOT_FOUND = 8;
ERROR_CODE_PERMISSION_DENIED = 9;
ERROR_CODE_INVALID_WIRE = 10;
ERROR_CODE_KERNEL_ERROR = 11;
}
// ===================================================================
// Wire types for NockApp pokes
// ===================================================================
message Wire {
string source = 1; // e.g., "http", "file", "wallet", "grpc"
uint64 version = 2; // wire format version
repeated WireTag tags = 3; // operation-specific tags
}
message WireTag {
oneof value {
string text = 1;
uint64 number = 2;
}
}

View File

@ -28,23 +28,6 @@ enum ErrorCode {
ERROR_CODE_KERNEL_ERROR = 11; ERROR_CODE_KERNEL_ERROR = 11;
} }
// ===================================================================
// Wire types for NockApp pokes
// ===================================================================
message Wire {
string source = 1; // e.g., "http", "file", "wallet", "grpc"
uint64 version = 2; // wire format version
repeated WireTag tags = 3; // operation-specific tags
}
message WireTag {
oneof value {
string text = 1;
uint64 number = 2;
}
}
// Note: prefer using raw numeric fields in messages // Note: prefer using raw numeric fields in messages
// instead of these wrappers to simplify conversions. // instead of these wrappers to simplify conversions.
// These remain defined for potential future use. // These remain defined for potential future use.

View File

@ -11,7 +11,7 @@ service WalletService {
rpc ImportKeys(ImportKeysRequest) returns (ImportKeysResponse); rpc ImportKeys(ImportKeysRequest) returns (ImportKeysResponse);
rpc DeriveChild(DeriveChildRequest) returns (DeriveChildResponse); rpc DeriveChild(DeriveChildRequest) returns (DeriveChildResponse);
rpc CreateTx(CreateTxRequest) returns (CreateTxResponse); rpc CreateTx(CreateTxRequest) returns (CreateTxResponse);
rpc SignTx(SignTxRequest) returns (SignTxResponse); // rpc SignTx(SignTxRequest) returns (SignTxResponse);
rpc Scan(ScanRequest) returns (ScanResponse); rpc Scan(ScanRequest) returns (ScanResponse);
rpc WalletGetBalance(GetBalanceRequest) rpc WalletGetBalance(GetBalanceRequest)
returns (GetBalanceResponse); returns (GetBalanceResponse);
@ -21,41 +21,48 @@ service WalletService {
returns (TransactionAcceptedResponse); returns (TransactionAcceptedResponse);
} }
message KeygenRequest {} message KeygenRequest {
uint64 version = 1;
}
message KeygenResponse { message KeygenResponse {
string public_key = 1; string address = 1;
string private_key = 2; string private_key = 2;
string seed = 3; string seed = 3;
string chain_code = 4; string chain_code = 4;
string import_private_key = 5; string import_private_key = 5;
string import_public_key = 6; string import_public_key = 6;
uint64 version = 7;
} }
message ImportKeysRequest { message ImportKeysRequest {
string key = 1; string key = 1;
ImportType import_type = 2; uint64 version = 2;
ImportType import_type = 3;
} }
message ImportKeysResponse { message ImportKeysResponse {
string public_key = 1; string address = 1;
string private_key = 2; string private_key = 2;
string seed = 3; string seed = 3;
string chain_code = 4; string chain_code = 4;
string import_private_key = 5; string import_private_key = 5;
string import_public_key = 6; string import_public_key = 6;
uint64 version = 7;
} }
message DeriveChildRequest { message DeriveChildRequest {
string imported_key = 1; string imported_key = 1;
uint64 index = 2; uint64 index = 2;
bool hardened = 3; bool hardened = 3;
uint64 version = 4;
} }
message DeriveChildResponse { message DeriveChildResponse {
string public_key = 1; string address = 1;
string private_key = 2; string private_key = 2;
string chain_code = 3; string chain_code = 3;
uint64 version = 4;
} }
message CreateTxRequest { message CreateTxRequest {
@ -68,23 +75,24 @@ message CreateTxRequest {
string chain_code = 7; string chain_code = 7;
uint64 index = 8; uint64 index = 8;
bool hardened = 9; bool hardened = 9;
TimelockIntent timelock_intent = 10; uint64 version = 10;
TimelockIntent timelock_intent = 11;
} }
message CreateTxResponse { message CreateTxResponse {
RawTx rawTx = 1; RawTx rawTx = 1;
} }
message SignTxRequest { // message SignTxRequest {
string unsigned_tx = 1; // string unsigned_tx = 1;
uint64 index = 2; // uint64 index = 2;
bool hardened = 3; // bool hardened = 3;
} // }
message SignTxResponse { // message SignTxResponse {
string signed_tx = 1; // string signed_tx = 1;
string error = 2; // string error = 2;
} // }
message ScanRequest { message ScanRequest {
string master_pubkey = 1; string master_pubkey = 1;

View File

@ -10,8 +10,9 @@ import (
) )
type NockchainClient struct { type NockchainClient struct {
conn *grpc.ClientConn conn *grpc.ClientConn
client nockchain.NockchainServiceClient client nockchain.NockchainServiceClient
appClient nockchain.NockAppServiceClient
} }
// NewNockchainClient creates a new gRPC client connection // NewNockchainClient creates a new gRPC client connection
@ -27,10 +28,12 @@ func NewNockchainClient(address string) (*NockchainClient, error) {
} }
client := nockchain.NewNockchainServiceClient(conn) client := nockchain.NewNockchainServiceClient(conn)
appClient := nockchain.NewNockAppServiceClient(conn)
return &NockchainClient{ return &NockchainClient{
conn: conn, conn: conn,
client: client, client: client,
appClient: appClient,
}, nil }, nil
} }
@ -150,3 +153,44 @@ func (nc *NockchainClient) WalletSendTransaction(tx *nockchain.RawTx) (*nockchai
return nil, fmt.Errorf("invalid result type") return nil, fmt.Errorf("invalid result type")
} }
} }
func (nc *NockchainClient) Peek(pid int32, path []byte) ([]byte, error) {
req := nockchain.PeekRequest{
Pid: pid,
Path: path,
}
resp, err := nc.appClient.Peek(context.Background(), &req)
if err != nil {
return nil, err
}
switch resp.Result.(type) {
case *nockchain.PeekResponse_Data:
return resp.GetData(), nil
case *nockchain.PeekResponse_Error:
return nil, fmt.Errorf("error: %s", resp.GetError().Message)
default:
return nil, fmt.Errorf("invalid result type")
}
}
func (nc *NockchainClient) Poke(pid int32, wire *nockchain.Wire, payload []byte) (bool, error) {
req := nockchain.PokeRequest{
Pid: pid,
Wire: wire,
Payload: payload,
}
resp, err := nc.appClient.Poke(context.Background(), &req)
if err != nil {
return false, err
}
switch resp.Result.(type) {
case *nockchain.PokeResponse_Acknowledged:
return resp.GetAcknowledged(), nil
case *nockchain.PokeResponse_Error:
return false, fmt.Errorf("error: %s", resp.GetError().Message)
default:
return false, fmt.Errorf("invalid result type")
}
}

View File

@ -49,13 +49,26 @@ func (h *GprcHandler) Keygen(ctx context.Context, req *nockchain.KeygenRequest)
return nil, err return nil, err
} }
privBytes := append([]byte{0x00}, masterKey.PrivateKey...) privBytes := append([]byte{0x00}, masterKey.PrivateKey...)
address := ""
if req.Version == 0 {
address = base58.Encode(masterKey.PublicKey)
} else {
pkPoint, err := crypto.CheetaPointFromBytes(masterKey.PublicKey)
if err != nil {
return nil, err
}
pkHash := HashPubkey(pkPoint)
address = crypto.Tip5HashToBase58(pkHash)
}
return &nockchain.KeygenResponse{ return &nockchain.KeygenResponse{
Seed: mnemonic, Seed: mnemonic,
PrivateKey: base58.Encode(masterKey.PrivateKey), PrivateKey: base58.Encode(masterKey.PrivateKey),
PublicKey: base58.Encode(masterKey.PublicKey), Address: address,
ChainCode: base58.Encode(masterKey.ChainCode), ChainCode: base58.Encode(masterKey.ChainCode),
ImportPrivateKey: base58.Encode(crypto.SerializeExtend(masterKey.ChainCode, privBytes, crypto.KeyType_PRIVATE)), ImportPrivateKey: base58.Encode(crypto.SerializeExtend(masterKey.ChainCode, privBytes, 0, crypto.KeyType_PRIVATE)),
ImportPublicKey: base58.Encode(crypto.SerializeExtend(masterKey.ChainCode, masterKey.PublicKey, crypto.KeyType_PUBLIC)), ImportPublicKey: base58.Encode(crypto.SerializeExtend(masterKey.ChainCode, masterKey.PublicKey, 0, crypto.KeyType_PUBLIC)),
Version: req.Version,
}, nil }, nil
} }
@ -88,13 +101,26 @@ func (h *GprcHandler) ImportKeys(ctx context.Context, req *nockchain.ImportKeysR
return nil, err return nil, err
} }
privBytes := append([]byte{0x00}, masterKey.PrivateKey...) privBytes := append([]byte{0x00}, masterKey.PrivateKey...)
address := ""
if req.Version == 0 {
address = base58.Encode(masterKey.PublicKey)
} else {
pkPoint, err := crypto.CheetaPointFromBytes(masterKey.PublicKey)
if err != nil {
return nil, err
}
pkHash := HashPubkey(pkPoint)
address = crypto.Tip5HashToBase58(pkHash)
}
return &nockchain.ImportKeysResponse{ return &nockchain.ImportKeysResponse{
Seed: "", Seed: "",
PrivateKey: base58.Encode(masterKey.PrivateKey), PrivateKey: base58.Encode(masterKey.PrivateKey),
PublicKey: base58.Encode(masterKey.PublicKey), Address: address,
ChainCode: base58.Encode(masterKey.ChainCode), ChainCode: base58.Encode(masterKey.ChainCode),
ImportPrivateKey: base58.Encode(crypto.SerializeExtend(masterKey.ChainCode, privBytes, crypto.KeyType_PRIVATE)), ImportPrivateKey: base58.Encode(crypto.SerializeExtend(masterKey.ChainCode, privBytes, 0, crypto.KeyType_PRIVATE)),
ImportPublicKey: base58.Encode(crypto.SerializeExtend(masterKey.ChainCode, masterKey.PublicKey, crypto.KeyType_PUBLIC)), ImportPublicKey: base58.Encode(crypto.SerializeExtend(masterKey.ChainCode, masterKey.PublicKey, 0, crypto.KeyType_PUBLIC)),
Version: req.Version,
}, nil }, nil
case strings.HasPrefix(req.Key, "zpub"): case strings.HasPrefix(req.Key, "zpub"):
if len(data) != 147 { if len(data) != 147 {
@ -111,13 +137,26 @@ func (h *GprcHandler) ImportKeys(ctx context.Context, req *nockchain.ImportKeysR
copy(chainCode, data[14:46]) copy(chainCode, data[14:46])
publicKey := make([]byte, 97) publicKey := make([]byte, 97)
copy(publicKey, data[46:143]) copy(publicKey, data[46:143])
address := ""
if req.Version == 0 {
address = base58.Encode(publicKey)
} else {
pkPoint, err := crypto.CheetaPointFromBytes(publicKey)
if err != nil {
return nil, err
}
pkHash := HashPubkey(pkPoint)
address = crypto.Tip5HashToBase58(pkHash)
}
return &nockchain.ImportKeysResponse{ return &nockchain.ImportKeysResponse{
Seed: "", Seed: "",
PrivateKey: "", PrivateKey: "",
PublicKey: base58.Encode(publicKey), Address: address,
ChainCode: base58.Encode(chainCode), ChainCode: base58.Encode(chainCode),
ImportPrivateKey: "", ImportPrivateKey: "",
ImportPublicKey: base58.Encode(crypto.SerializeExtend(chainCode, publicKey, crypto.KeyType_PUBLIC)), ImportPublicKey: base58.Encode(crypto.SerializeExtend(chainCode, publicKey, 0, crypto.KeyType_PUBLIC)),
Version: req.Version,
}, nil }, nil
default: default:
return nil, fmt.Errorf("invalid extended key") return nil, fmt.Errorf("invalid extended key")
@ -140,13 +179,26 @@ func (h *GprcHandler) ImportKeys(ctx context.Context, req *nockchain.ImportKeysR
return nil, err return nil, err
} }
privBytes := append([]byte{0x00}, masterKey.PrivateKey...) privBytes := append([]byte{0x00}, masterKey.PrivateKey...)
address := ""
if req.Version == 0 {
address = base58.Encode(masterKey.PublicKey)
} else {
pkPoint, err := crypto.CheetaPointFromBytes(masterKey.PublicKey)
if err != nil {
return nil, err
}
pkHash := HashPubkey(pkPoint)
address = crypto.Tip5HashToBase58(pkHash)
}
return &nockchain.ImportKeysResponse{ return &nockchain.ImportKeysResponse{
Seed: "", Seed: "",
PrivateKey: base58.Encode(masterKey.PrivateKey), PrivateKey: base58.Encode(masterKey.PrivateKey),
PublicKey: base58.Encode(masterKey.PublicKey), Address: address,
ChainCode: base58.Encode(masterKey.ChainCode), ChainCode: base58.Encode(masterKey.ChainCode),
ImportPrivateKey: base58.Encode(crypto.SerializeExtend(masterKey.ChainCode, privBytes, crypto.KeyType_PRIVATE)), ImportPrivateKey: base58.Encode(crypto.SerializeExtend(masterKey.ChainCode, privBytes, 0, crypto.KeyType_PRIVATE)),
ImportPublicKey: base58.Encode(crypto.SerializeExtend(masterKey.ChainCode, masterKey.PublicKey, crypto.KeyType_PUBLIC)), ImportPublicKey: base58.Encode(crypto.SerializeExtend(masterKey.ChainCode, masterKey.PublicKey, 0, crypto.KeyType_PUBLIC)),
Version: req.Version,
}, nil }, nil
case nockchain.ImportType_SEEDPHRASE: case nockchain.ImportType_SEEDPHRASE:
masterKey, err := crypto.MasterKeyFromSeed(req.Key) masterKey, err := crypto.MasterKeyFromSeed(req.Key)
@ -154,23 +206,49 @@ func (h *GprcHandler) ImportKeys(ctx context.Context, req *nockchain.ImportKeysR
return nil, err return nil, err
} }
privBytes := append([]byte{0x00}, masterKey.PrivateKey...) privBytes := append([]byte{0x00}, masterKey.PrivateKey...)
address := ""
if req.Version == 0 {
address = base58.Encode(masterKey.PublicKey)
} else {
pkPoint, err := crypto.CheetaPointFromBytes(masterKey.PublicKey)
if err != nil {
return nil, err
}
pkHash := HashPubkey(pkPoint)
address = crypto.Tip5HashToBase58(pkHash)
}
return &nockchain.ImportKeysResponse{ return &nockchain.ImportKeysResponse{
Seed: "", Seed: "",
PrivateKey: base58.Encode(masterKey.PrivateKey), PrivateKey: base58.Encode(masterKey.PrivateKey),
PublicKey: base58.Encode(masterKey.PublicKey), Address: address,
ChainCode: base58.Encode(masterKey.ChainCode), ChainCode: base58.Encode(masterKey.ChainCode),
ImportPrivateKey: base58.Encode(crypto.SerializeExtend(masterKey.ChainCode, privBytes, crypto.KeyType_PRIVATE)), ImportPrivateKey: base58.Encode(crypto.SerializeExtend(masterKey.ChainCode, privBytes, 0, crypto.KeyType_PRIVATE)),
ImportPublicKey: base58.Encode(crypto.SerializeExtend(masterKey.ChainCode, masterKey.PublicKey, crypto.KeyType_PUBLIC)), ImportPublicKey: base58.Encode(crypto.SerializeExtend(masterKey.ChainCode, masterKey.PublicKey, 0, crypto.KeyType_PUBLIC)),
Version: req.Version,
}, nil }, nil
case nockchain.ImportType_WATCH_ONLY: case nockchain.ImportType_WATCH_ONLY:
pubKey := base58.Decode(req.Key) pubkey := base58.Decode(req.Key)
address := ""
if req.Version == 0 {
address = base58.Encode(pubkey)
} else {
pkPoint, err := crypto.CheetaPointFromBytes(pubkey)
if err != nil {
return nil, err
}
pkHash := HashPubkey(pkPoint)
address = crypto.Tip5HashToBase58(pkHash)
}
return &nockchain.ImportKeysResponse{ return &nockchain.ImportKeysResponse{
Seed: "", Seed: "",
PrivateKey: "", PrivateKey: "",
PublicKey: base58.Encode(pubKey), Address: address,
ChainCode: "", ChainCode: "",
ImportPrivateKey: "", ImportPrivateKey: "",
ImportPublicKey: "", ImportPublicKey: "",
Version: req.Version,
}, nil }, nil
default: default:
return nil, fmt.Errorf("invalid import type") return nil, fmt.Errorf("invalid import type")
@ -212,10 +290,23 @@ func (h *GprcHandler) DeriveChild(ctx context.Context, req *nockchain.DeriveChil
if err != nil { if err != nil {
return nil, err return nil, err
} }
address := ""
if req.Version == 0 {
address = base58.Encode(childKey.PublicKey)
} else {
pkPoint, err := crypto.CheetaPointFromBytes(childKey.PublicKey)
if err != nil {
return nil, err
}
pkHash := HashPubkey(pkPoint)
address = crypto.Tip5HashToBase58(pkHash)
}
return &nockchain.DeriveChildResponse{ return &nockchain.DeriveChildResponse{
PublicKey: base58.Encode(childKey.PublicKey), Address: address,
PrivateKey: base58.Encode(childKey.PrivateKey), PrivateKey: base58.Encode(childKey.PrivateKey),
ChainCode: base58.Encode(childKey.ChainCode), ChainCode: base58.Encode(childKey.ChainCode),
Version: req.Version,
}, nil }, nil
case strings.HasPrefix(req.ImportedKey, "zpub"): case strings.HasPrefix(req.ImportedKey, "zpub"):
@ -243,10 +334,23 @@ func (h *GprcHandler) DeriveChild(ctx context.Context, req *nockchain.DeriveChil
if err != nil { if err != nil {
return nil, err return nil, err
} }
address := ""
if req.Version == 0 {
address = base58.Encode(childKey.PublicKey)
} else {
pkPoint, err := crypto.CheetaPointFromBytes(childKey.PublicKey)
if err != nil {
return nil, err
}
pkHash := HashPubkey(pkPoint)
address = crypto.Tip5HashToBase58(pkHash)
}
return &nockchain.DeriveChildResponse{ return &nockchain.DeriveChildResponse{
PublicKey: base58.Encode(childKey.PublicKey), Address: address,
PrivateKey: "", PrivateKey: "",
ChainCode: base58.Encode(childKey.ChainCode), ChainCode: base58.Encode(childKey.ChainCode),
Version: req.Version,
}, nil }, nil
default: default:
return nil, fmt.Errorf("invalid extended key") return nil, fmt.Errorf("invalid extended key")
@ -590,7 +694,3 @@ func (h *GprcHandler) WalletSendTransaction(_ context.Context, req *nockchain.Se
func (h *GprcHandler) TransactionAccepted(_ context.Context, req *nockchain.TransactionAcceptedRequest) (*nockchain.TransactionAcceptedResponse, error) { func (h *GprcHandler) TransactionAccepted(_ context.Context, req *nockchain.TransactionAcceptedRequest) (*nockchain.TransactionAcceptedResponse, error) {
return h.client.TxAccepted(req.TxId.Hash) return h.client.TxAccepted(req.TxId.Hash)
} }
func (h *GprcHandler) SignTx(context.Context, *nockchain.SignTxRequest) (*nockchain.SignTxResponse, error) {
return nil, nil
}

View File

@ -16,7 +16,7 @@ import (
) )
// The entropy, salt and result is taken from "nockchain-wallet keygen" command // The entropy, salt and result is taken from "nockchain-wallet keygen" command
func TestKeyGen(t *testing.T) { func TestKeyGenV0(t *testing.T) {
entropyBigInt, isOk := new(big.Int).SetString("37133536588676344913489312523941366110857274548479981512263368615793750653450", 10) entropyBigInt, isOk := new(big.Int).SetString("37133536588676344913489312523941366110857274548479981512263368615793750653450", 10)
assert.True(t, isOk) assert.True(t, isOk)
@ -38,6 +38,10 @@ func TestKeyGen(t *testing.T) {
masterKey, err := crypto.MasterKeyFromSeed(mnemonic) masterKey, err := crypto.MasterKeyFromSeed(mnemonic)
assert.NoError(t, err) assert.NoError(t, err)
pkPoint, err := crypto.CheetaPointFromBytes(masterKey.PublicKey)
assert.NoError(t, err)
fmt.Println(crypto.Tip5HashToBase58(wallet.HashPubkey(pkPoint)))
assert.Equal(t, assert.Equal(t,
base58.Encode(masterKey.PublicKey), base58.Encode(masterKey.PublicKey),
"34VqjU7ojQXWiFZz7kvXe1xfxhbdimmqqUAgp21XGESLqJSXxHkqrcquWirFcCPPj1pmSL4pRc8GndZoiiK8ijeYjgcJ3QR7fb2s4b2WdJhDao4Dx7gw3NRSt4RjXawqUQw6", "34VqjU7ojQXWiFZz7kvXe1xfxhbdimmqqUAgp21XGESLqJSXxHkqrcquWirFcCPPj1pmSL4pRc8GndZoiiK8ijeYjgcJ3QR7fb2s4b2WdJhDao4Dx7gw3NRSt4RjXawqUQw6",
@ -53,9 +57,9 @@ func TestKeyGen(t *testing.T) {
// assert import priv/pubkey // assert import priv/pubkey
privBytes := append([]byte{0x00}, masterKey.PrivateKey...) privBytes := append([]byte{0x00}, masterKey.PrivateKey...)
importPrivKey := crypto.SerializeExtend(masterKey.ChainCode, privBytes, crypto.KeyType_PRIVATE) importPrivKey := crypto.SerializeExtend(masterKey.ChainCode, privBytes, 0, crypto.KeyType_PRIVATE)
assert.Len(t, importPrivKey, 83) assert.Len(t, importPrivKey, 83)
importPubKey := crypto.SerializeExtend(masterKey.ChainCode, masterKey.PublicKey, crypto.KeyType_PUBLIC) importPubKey := crypto.SerializeExtend(masterKey.ChainCode, masterKey.PublicKey, 0, crypto.KeyType_PUBLIC)
assert.Len(t, importPubKey, 147) assert.Len(t, importPubKey, 147)
assert.Equal(t, assert.Equal(t,
@ -68,6 +72,51 @@ func TestKeyGen(t *testing.T) {
) )
} }
func TestKeyGenV1(t *testing.T) {
entropyBigInt, isOk := new(big.Int).SetString("90486886833626125109893864286343887304289963452245361030406651820586141463911", 10)
assert.True(t, isOk)
entropy := entropyBigInt.Bytes()
assert.Len(t, entropy, 32)
saltBigInt, isOk := new(big.Int).SetString("200764822674693794811396222039518854030", 10)
assert.True(t, isOk)
salt := saltBigInt.Bytes()
assert.Len(t, salt, 16)
argonBytes := crypto.DeriveKey(0, entropy[:], salt[:], nil, nil, 6, 786432, 4, 32)
slices.Reverse(argonBytes)
mnemonic, err := bip39.NewMnemonic(argonBytes)
assert.NoError(t, err)
assert.Equal(t, mnemonic, "holiday wage fan orange humble erode thought across boring cereal brass believe window drill until dry dish basket mean all banana tribe antenna engage")
masterKey, err := crypto.MasterKeyFromSeed(mnemonic)
assert.NoError(t, err)
pkPoint, err := crypto.CheetaPointFromBytes(masterKey.PublicKey)
assert.NoError(t, err)
assert.Equal(t,
crypto.Tip5HashToBase58(wallet.HashPubkey(pkPoint)),
"6DGFW4qAgCDx1AnP9fkhENwaPUeVWHEDB5WuJPiN1bZBjW2igMgU7N8",
)
// assert import priv/pubkey
privBytes := append([]byte{0x00}, masterKey.PrivateKey...)
importPrivKey := crypto.SerializeExtend(masterKey.ChainCode, privBytes, 0, crypto.KeyType_PRIVATE)
assert.Len(t, importPrivKey, 83)
importPubKey := crypto.SerializeExtend(masterKey.ChainCode, masterKey.PublicKey, 0, crypto.KeyType_PUBLIC)
assert.Len(t, importPubKey, 147)
assert.Equal(t,
base58.Encode(importPrivKey),
"zprvLpf3WSvYWmHRd4ifBMKZTDRa4s5sNBZo7cLx7PhFsYvdCEwv6WdHnDFYHFFvd4sKy1DcSpU4xAohfutPqVpsKGsyCdwLgZDpVH7sHSM382d6",
)
assert.Equal(t,
base58.Encode(importPubKey),
"zpub2jgndknkQprVYB9YTkv6VAteaXtW1rQcGMVtNEsuKUJay8MkBm5VW5LyFLYhpQyE1hChW2ZkCiN6BCcTF2wBNiVeCzu7sFP4kaV5DVHZDY3BsdYXimDjQ8GCw6o1qWH8w6kTZrMwkA8o7BSLZ6vk1BHHASi6P2qNSeDBw2No6fAHAr5xvEnUY7Xqa63m4jXYcgFD",
)
}
func TestImportKey(t *testing.T) { func TestImportKey(t *testing.T) {
type Input struct { type Input struct {
req *nockchain.ImportKeysRequest req *nockchain.ImportKeysRequest
@ -90,27 +139,47 @@ func TestImportKey(t *testing.T) {
copy(invalidImportPubkeyChecksum[:], correctImportPubkey) copy(invalidImportPubkeyChecksum[:], correctImportPubkey)
copy(invalidImportPubkeyChecksum[143:], []byte{1, 2, 3, 4}) copy(invalidImportPubkeyChecksum[143:], []byte{1, 2, 3, 4})
response := &nockchain.ImportKeysResponse{ responseV0 := &nockchain.ImportKeysResponse{
PublicKey: "34VqjU7ojQXWiFZz7kvXe1xfxhbdimmqqUAgp21XGESLqJSXxHkqrcquWirFcCPPj1pmSL4pRc8GndZoiiK8ijeYjgcJ3QR7fb2s4b2WdJhDao4Dx7gw3NRSt4RjXawqUQw6", Address: "34VqjU7ojQXWiFZz7kvXe1xfxhbdimmqqUAgp21XGESLqJSXxHkqrcquWirFcCPPj1pmSL4pRc8GndZoiiK8ijeYjgcJ3QR7fb2s4b2WdJhDao4Dx7gw3NRSt4RjXawqUQw6",
PrivateKey: "3B8Q5ZTHH63h9DT6WSwNZhea5zvtueuKpxk3qwZJEjsg", PrivateKey: "3B8Q5ZTHH63h9DT6WSwNZhea5zvtueuKpxk3qwZJEjsg",
ChainCode: "2ztGPxS8xYzMXoAHf3HMbMuyh4siew8X4Kz4KuTXvqX8", ChainCode: "2ztGPxS8xYzMXoAHf3HMbMuyh4siew8X4Kz4KuTXvqX8",
ImportPrivateKey: base58.Encode(correctImportPrivKey), ImportPrivateKey: base58.Encode(correctImportPrivKey),
ImportPublicKey: base58.Encode(correctImportPubkey), ImportPublicKey: base58.Encode(correctImportPubkey),
Version: 0,
}
responseV1 := &nockchain.ImportKeysResponse{
Address: "BAmYAxgpVrJeFqqPnKAZHVZZdmVfzrgu7bBqcRBNca8HpxQofzUZG8Q",
PrivateKey: "3B8Q5ZTHH63h9DT6WSwNZhea5zvtueuKpxk3qwZJEjsg",
ChainCode: "2ztGPxS8xYzMXoAHf3HMbMuyh4siew8X4Kz4KuTXvqX8",
ImportPrivateKey: base58.Encode(correctImportPrivKey),
ImportPublicKey: base58.Encode(correctImportPubkey),
Version: 1,
} }
responseReadOnly := &nockchain.ImportKeysResponse{ responseV0ReadOnly := &nockchain.ImportKeysResponse{
PublicKey: "34VqjU7ojQXWiFZz7kvXe1xfxhbdimmqqUAgp21XGESLqJSXxHkqrcquWirFcCPPj1pmSL4pRc8GndZoiiK8ijeYjgcJ3QR7fb2s4b2WdJhDao4Dx7gw3NRSt4RjXawqUQw6", Address: "34VqjU7ojQXWiFZz7kvXe1xfxhbdimmqqUAgp21XGESLqJSXxHkqrcquWirFcCPPj1pmSL4pRc8GndZoiiK8ijeYjgcJ3QR7fb2s4b2WdJhDao4Dx7gw3NRSt4RjXawqUQw6",
PrivateKey: "", PrivateKey: "",
ChainCode: "2ztGPxS8xYzMXoAHf3HMbMuyh4siew8X4Kz4KuTXvqX8", ChainCode: "2ztGPxS8xYzMXoAHf3HMbMuyh4siew8X4Kz4KuTXvqX8",
ImportPrivateKey: "", ImportPrivateKey: "",
ImportPublicKey: base58.Encode(correctImportPubkey), ImportPublicKey: base58.Encode(correctImportPubkey),
Version: 0,
} }
responseV1ReadOnly := &nockchain.ImportKeysResponse{
Address: "BAmYAxgpVrJeFqqPnKAZHVZZdmVfzrgu7bBqcRBNca8HpxQofzUZG8Q",
PrivateKey: "",
ChainCode: "2ztGPxS8xYzMXoAHf3HMbMuyh4siew8X4Kz4KuTXvqX8",
ImportPrivateKey: "",
ImportPublicKey: base58.Encode(correctImportPubkey),
Version: 1,
}
inputs := []Input{ inputs := []Input{
// case invalid type // case invalid type
{ {
req: &nockchain.ImportKeysRequest{ req: &nockchain.ImportKeysRequest{
Key: "", Key: "",
ImportType: nockchain.ImportType_UNDEFINED, ImportType: nockchain.ImportType_UNDEFINED,
Version: 0,
}, },
expectResp: nil, expectResp: nil,
isErr: true, isErr: true,
@ -121,6 +190,7 @@ func TestImportKey(t *testing.T) {
req: &nockchain.ImportKeysRequest{ req: &nockchain.ImportKeysRequest{
Key: "some wrong string", Key: "some wrong string",
ImportType: nockchain.ImportType_EXTENDED_KEY, ImportType: nockchain.ImportType_EXTENDED_KEY,
Version: 0,
}, },
expectResp: nil, expectResp: nil,
isErr: true, isErr: true,
@ -130,6 +200,7 @@ func TestImportKey(t *testing.T) {
req: &nockchain.ImportKeysRequest{ req: &nockchain.ImportKeysRequest{
Key: "zprv wrong priv import key length", Key: "zprv wrong priv import key length",
ImportType: nockchain.ImportType_EXTENDED_KEY, ImportType: nockchain.ImportType_EXTENDED_KEY,
Version: 0,
}, },
expectResp: nil, expectResp: nil,
isErr: true, isErr: true,
@ -139,6 +210,7 @@ func TestImportKey(t *testing.T) {
req: &nockchain.ImportKeysRequest{ req: &nockchain.ImportKeysRequest{
Key: base58.Encode(invalidImportPrivKeyPrefix), Key: base58.Encode(invalidImportPrivKeyPrefix),
ImportType: nockchain.ImportType_EXTENDED_KEY, ImportType: nockchain.ImportType_EXTENDED_KEY,
Version: 0,
}, },
expectResp: nil, expectResp: nil,
isErr: true, isErr: true,
@ -153,13 +225,25 @@ func TestImportKey(t *testing.T) {
isErr: true, isErr: true,
errStr: "invalid checksum", errStr: "invalid checksum",
}, },
// case success import priv key // case success import priv key v0
{ {
req: &nockchain.ImportKeysRequest{ req: &nockchain.ImportKeysRequest{
Key: base58.Encode(correctImportPrivKey), Key: base58.Encode(correctImportPrivKey),
ImportType: nockchain.ImportType_EXTENDED_KEY, ImportType: nockchain.ImportType_EXTENDED_KEY,
Version: 0,
}, },
expectResp: response, expectResp: responseV0,
isErr: false,
errStr: "",
},
// case success import priv key v1
{
req: &nockchain.ImportKeysRequest{
Key: base58.Encode(correctImportPrivKey),
ImportType: nockchain.ImportType_EXTENDED_KEY,
Version: 1,
},
expectResp: responseV1,
isErr: false, isErr: false,
errStr: "", errStr: "",
}, },
@ -168,6 +252,7 @@ func TestImportKey(t *testing.T) {
req: &nockchain.ImportKeysRequest{ req: &nockchain.ImportKeysRequest{
Key: "zpub wrong public import key length", Key: "zpub wrong public import key length",
ImportType: nockchain.ImportType_EXTENDED_KEY, ImportType: nockchain.ImportType_EXTENDED_KEY,
Version: 0,
}, },
expectResp: nil, expectResp: nil,
isErr: true, isErr: true,
@ -177,18 +262,31 @@ func TestImportKey(t *testing.T) {
req: &nockchain.ImportKeysRequest{ req: &nockchain.ImportKeysRequest{
Key: base58.Encode(invalidImportPubkeyChecksum), Key: base58.Encode(invalidImportPubkeyChecksum),
ImportType: nockchain.ImportType_EXTENDED_KEY, ImportType: nockchain.ImportType_EXTENDED_KEY,
Version: 0,
}, },
expectResp: nil, expectResp: nil,
isErr: true, isErr: true,
errStr: "invalid checksum", errStr: "invalid checksum",
}, },
// case success import pub key // case success import pub key v0
{ {
req: &nockchain.ImportKeysRequest{ req: &nockchain.ImportKeysRequest{
Key: base58.Encode(correctImportPubkey), Key: base58.Encode(correctImportPubkey),
ImportType: nockchain.ImportType_EXTENDED_KEY, ImportType: nockchain.ImportType_EXTENDED_KEY,
Version: 0,
}, },
expectResp: responseReadOnly, expectResp: responseV0ReadOnly,
isErr: false,
errStr: "",
},
// case success import pub key v1
{
req: &nockchain.ImportKeysRequest{
Key: base58.Encode(correctImportPubkey),
ImportType: nockchain.ImportType_EXTENDED_KEY,
Version: 1,
},
expectResp: responseV1ReadOnly,
isErr: false, isErr: false,
errStr: "", errStr: "",
}, },
@ -197,6 +295,7 @@ func TestImportKey(t *testing.T) {
req: &nockchain.ImportKeysRequest{ req: &nockchain.ImportKeysRequest{
Key: "3B8Q5ZTHH63h9DT6WSwNZhea5zvtueuKpxk3qwZJEjsg", Key: "3B8Q5ZTHH63h9DT6WSwNZhea5zvtueuKpxk3qwZJEjsg",
ImportType: nockchain.ImportType_MASTER_PRIVKEY, ImportType: nockchain.ImportType_MASTER_PRIVKEY,
Version: 0,
}, },
expectResp: nil, expectResp: nil,
isErr: true, isErr: true,
@ -207,6 +306,7 @@ func TestImportKey(t *testing.T) {
req: &nockchain.ImportKeysRequest{ req: &nockchain.ImportKeysRequest{
Key: "abcdxyz,3B8Q5ZTHH63h9DT6WSwNZhea5zvtueuKpxk3qwZJEjsg", Key: "abcdxyz,3B8Q5ZTHH63h9DT6WSwNZhea5zvtueuKpxk3qwZJEjsg",
ImportType: nockchain.ImportType_MASTER_PRIVKEY, ImportType: nockchain.ImportType_MASTER_PRIVKEY,
Version: 0,
}, },
expectResp: nil, expectResp: nil,
isErr: true, isErr: true,
@ -216,39 +316,80 @@ func TestImportKey(t *testing.T) {
req: &nockchain.ImportKeysRequest{ req: &nockchain.ImportKeysRequest{
Key: "2ztGPxS8xYzMXoAHf3HMbMuyh4siew8X4Kz4KuTXvqX8,abcdxyz", Key: "2ztGPxS8xYzMXoAHf3HMbMuyh4siew8X4Kz4KuTXvqX8,abcdxyz",
ImportType: nockchain.ImportType_MASTER_PRIVKEY, ImportType: nockchain.ImportType_MASTER_PRIVKEY,
Version: 0,
}, },
expectResp: nil, expectResp: nil,
isErr: true, isErr: true,
errStr: "invalid priv key length", errStr: "invalid priv key length",
}, },
// case success import master privkey // case success import master privkey v0
{ {
req: &nockchain.ImportKeysRequest{ req: &nockchain.ImportKeysRequest{
Key: "2ztGPxS8xYzMXoAHf3HMbMuyh4siew8X4Kz4KuTXvqX8,3B8Q5ZTHH63h9DT6WSwNZhea5zvtueuKpxk3qwZJEjsg", Key: "2ztGPxS8xYzMXoAHf3HMbMuyh4siew8X4Kz4KuTXvqX8,3B8Q5ZTHH63h9DT6WSwNZhea5zvtueuKpxk3qwZJEjsg",
ImportType: nockchain.ImportType_MASTER_PRIVKEY, ImportType: nockchain.ImportType_MASTER_PRIVKEY,
Version: 0,
}, },
expectResp: response, expectResp: responseV0,
isErr: false, isErr: false,
errStr: "", errStr: "",
}, },
// case success import seed // case success import master privkey v1
{
req: &nockchain.ImportKeysRequest{
Key: "2ztGPxS8xYzMXoAHf3HMbMuyh4siew8X4Kz4KuTXvqX8,3B8Q5ZTHH63h9DT6WSwNZhea5zvtueuKpxk3qwZJEjsg",
ImportType: nockchain.ImportType_MASTER_PRIVKEY,
Version: 1,
},
expectResp: responseV1,
isErr: false,
errStr: "",
},
// case success import seed v0
{ {
req: &nockchain.ImportKeysRequest{ req: &nockchain.ImportKeysRequest{
Key: "include lounge salad chicken trumpet embrace grace mercy pulp submit alter weapon plastic welcome funny female palm satoshi open file knock sun fade match", Key: "include lounge salad chicken trumpet embrace grace mercy pulp submit alter weapon plastic welcome funny female palm satoshi open file knock sun fade match",
ImportType: nockchain.ImportType_SEEDPHRASE, ImportType: nockchain.ImportType_SEEDPHRASE,
Version: 0,
}, },
expectResp: response, expectResp: responseV0,
isErr: false, isErr: false,
errStr: "", errStr: "",
}, },
// case sucess import pubkey // case success import seed v1
{
req: &nockchain.ImportKeysRequest{
Key: "include lounge salad chicken trumpet embrace grace mercy pulp submit alter weapon plastic welcome funny female palm satoshi open file knock sun fade match",
ImportType: nockchain.ImportType_SEEDPHRASE,
Version: 1,
},
expectResp: responseV1,
isErr: false,
errStr: "",
},
// case sucess import pubkey v0
{ {
req: &nockchain.ImportKeysRequest{ req: &nockchain.ImportKeysRequest{
Key: "34VqjU7ojQXWiFZz7kvXe1xfxhbdimmqqUAgp21XGESLqJSXxHkqrcquWirFcCPPj1pmSL4pRc8GndZoiiK8ijeYjgcJ3QR7fb2s4b2WdJhDao4Dx7gw3NRSt4RjXawqUQw6", Key: "34VqjU7ojQXWiFZz7kvXe1xfxhbdimmqqUAgp21XGESLqJSXxHkqrcquWirFcCPPj1pmSL4pRc8GndZoiiK8ijeYjgcJ3QR7fb2s4b2WdJhDao4Dx7gw3NRSt4RjXawqUQw6",
ImportType: nockchain.ImportType_WATCH_ONLY, ImportType: nockchain.ImportType_WATCH_ONLY,
Version: 0,
}, },
expectResp: &nockchain.ImportKeysResponse{ expectResp: &nockchain.ImportKeysResponse{
PublicKey: "34VqjU7ojQXWiFZz7kvXe1xfxhbdimmqqUAgp21XGESLqJSXxHkqrcquWirFcCPPj1pmSL4pRc8GndZoiiK8ijeYjgcJ3QR7fb2s4b2WdJhDao4Dx7gw3NRSt4RjXawqUQw6", Address: "34VqjU7ojQXWiFZz7kvXe1xfxhbdimmqqUAgp21XGESLqJSXxHkqrcquWirFcCPPj1pmSL4pRc8GndZoiiK8ijeYjgcJ3QR7fb2s4b2WdJhDao4Dx7gw3NRSt4RjXawqUQw6",
Version: 0,
},
isErr: false,
errStr: "",
},
// case sucess import pubkey v1
{
req: &nockchain.ImportKeysRequest{
Key: "34VqjU7ojQXWiFZz7kvXe1xfxhbdimmqqUAgp21XGESLqJSXxHkqrcquWirFcCPPj1pmSL4pRc8GndZoiiK8ijeYjgcJ3QR7fb2s4b2WdJhDao4Dx7gw3NRSt4RjXawqUQw6",
ImportType: nockchain.ImportType_WATCH_ONLY,
Version: 1,
},
expectResp: &nockchain.ImportKeysResponse{
Address: "BAmYAxgpVrJeFqqPnKAZHVZZdmVfzrgu7bBqcRBNca8HpxQofzUZG8Q",
Version: 1,
}, },
isErr: false, isErr: false,
errStr: "", errStr: "",