diff --git a/aggregator/rpc_server.go b/aggregator/rpc_server.go index 96cb191..d710a79 100644 --- a/aggregator/rpc_server.go +++ b/aggregator/rpc_server.go @@ -131,7 +131,7 @@ func (r *RpcServer) CreateTask(ctx context.Context, taskPayload *avsproto.Create }, nil } -func (r *RpcServer) ListTasks(ctx context.Context, _ *avsproto.ListTasksReq) (*avsproto.ListTasksResp, error) { +func (r *RpcServer) ListTasks(ctx context.Context, payload *avsproto.ListTasksReq) (*avsproto.ListTasksResp, error) { user, err := r.verifyAuth(ctx) if err != nil { return nil, status.Errorf(codes.Unauthenticated, "invalid authentication key") @@ -139,8 +139,13 @@ func (r *RpcServer) ListTasks(ctx context.Context, _ *avsproto.ListTasksReq) (*a r.config.Logger.Info("Process List Task", "user", user.Address.String(), + "smart_wallet_address", payload.SmartWalletAddress, ) - tasks, err := r.engine.ListTasksByUser(user) + tasks, err := r.engine.ListTasksByUser(user, payload) + + if err != nil { + return nil, err + } return &avsproto.ListTasksResp{ Tasks: tasks, diff --git a/core/taskengine/engine.go b/core/taskengine/engine.go index 85dd0f4..42fc007 100644 --- a/core/taskengine/engine.go +++ b/core/taskengine/engine.go @@ -205,7 +205,7 @@ func (n *Engine) CreateSmartWallet(user *model.User, payload *avsproto.CreateWal updates := map[string][]byte{} - updates[string(WalletStorageKey(wallet))], err = wallet.ToJSON() + updates[string(WalletStorageKey(user.Address, sender.Hex()))], err = wallet.ToJSON() if err = n.db.BatchWrite(updates); err != nil { return nil, status.Errorf(codes.Code(avsproto.Error_StorageWriteError), "cannot update key to storage") @@ -216,16 +216,19 @@ func (n *Engine) CreateSmartWallet(user *model.User, payload *avsproto.CreateWal }, nil } +// CreateTask records submission data func (n *Engine) CreateTask(user *model.User, taskPayload *avsproto.CreateTaskReq) (*model.Task, error) { var err error - salt := big.NewInt(0) - user.SmartAccountAddress, err = aa.GetSenderAddress(rpcConn, user.Address, salt) + if taskPayload.SmartWalletAddress != "" { + if !ValidWalletAddress(taskPayload.SmartWalletAddress) { + return nil, status.Errorf(codes.InvalidArgument, "invalid smart account address") + } - if err != nil { - return nil, grpcstatus.Errorf(codes.Code(avsproto.Error_SmartWalletRpcError), "cannot get smart wallet address") + if valid, _ := ValidWalletOwner(n.db, user, common.HexToAddress(taskPayload.SmartWalletAddress)); !valid { + return nil, status.Errorf(codes.InvalidArgument, "invalid smart account address") + } } - task, err := model.NewTaskFromProtobuf(user, taskPayload) if err != nil { @@ -343,21 +346,46 @@ func (n *Engine) AggregateChecksResult(address string, ids []string) error { return nil } -func (n *Engine) ListTasksByUser(user *model.User) ([]*avsproto.ListTasksResp_TaskItemResp, error) { - taskIDs, err := n.db.GetByPrefix(UserTaskStoragePrefix(user.Address)) +func (n *Engine) ListTasksByUser(user *model.User, payload *avsproto.ListTasksReq) ([]*avsproto.Task, error) { + // by default show the task from the default smart wallet, if proving we look into that wallet specifically + owner := user.SmartAccountAddress + if payload.SmartWalletAddress != "" { + if !ValidWalletAddress(payload.SmartWalletAddress) { + return nil, status.Errorf(codes.InvalidArgument, "invalid smart account address") + } + + if valid, _ := ValidWalletOwner(n.db, user, common.HexToAddress(payload.SmartWalletAddress)); !valid { + return nil, status.Errorf(codes.InvalidArgument, "invalid smart account address") + } + + smartWallet := common.HexToAddress(payload.SmartWalletAddress) + owner = &smartWallet + } + + taskIDs, err := n.db.GetByPrefix(SmartWalletTaskStoragePrefix(user.Address, *owner)) if err != nil { return nil, grpcstatus.Errorf(codes.Code(avsproto.Error_StorageUnavailable), "storage is not ready") } - tasks := make([]*avsproto.ListTasksResp_TaskItemResp, len(taskIDs)) + tasks := make([]*avsproto.Task, len(taskIDs)) for i, kv := range taskIDs { - status, _ := strconv.Atoi(string(kv.Value)) - tasks[i] = &avsproto.ListTasksResp_TaskItemResp{ - Id: string(model.TaskKeyToId(kv.Key[2:])), - Status: avsproto.TaskStatus(status), + taskID := string(model.TaskKeyToId(kv.Key[2:])) + taskRawByte, err := n.db.GetKey(TaskStorageKey(taskID, avsproto.TaskStatus(status))) + if err != nil { + continue } + + task := &model.Task{ + ID: taskID, + Owner: user.Address.Hex(), + } + if err := task.FromStorageData(taskRawByte); err != nil { + continue + } + + tasks[i], _ = task.ToProtoBuf() } return tasks, nil @@ -376,9 +404,7 @@ func (n *Engine) GetTaskByUser(user *model.User, taskID string) (*model.Task, er } status, _ := strconv.Atoi(string(rawStatus)) - taskRawByte, err := n.db.GetKey([]byte( - TaskStorageKey(taskID, avsproto.TaskStatus(status)), - )) + taskRawByte, err := n.db.GetKey(TaskStorageKey(taskID, avsproto.TaskStatus(status))) if err != nil { taskRawByte, err = n.db.GetKey([]byte( diff --git a/core/taskengine/schema.go b/core/taskengine/schema.go index 5d91d15..ad028ed 100644 --- a/core/taskengine/schema.go +++ b/core/taskengine/schema.go @@ -9,11 +9,14 @@ import ( "github.com/ethereum/go-ethereum/common" ) -// Prefix func UserTaskStoragePrefix(address common.Address) []byte { return []byte(fmt.Sprintf("u:%s", strings.ToLower(address.String()))) } +func SmartWalletTaskStoragePrefix(owner common.Address, smartWalletAddress common.Address) []byte { + return []byte(fmt.Sprintf("u:%s:%s", strings.ToLower(owner.Hex()), strings.ToLower(smartWalletAddress.Hex()))) +} + func TaskByStatusStoragePrefix(status avsproto.TaskStatus) []byte { return []byte(fmt.Sprintf("t:%s:", TaskStatusToStorageKey(status))) } @@ -25,11 +28,11 @@ func WalletByOwnerPrefix(owner common.Address) []byte { )) } -func WalletStorageKey(w *model.SmartWallet) string { +func WalletStorageKey(owner common.Address, smartWalletAddress string) string { return fmt.Sprintf( "w:%s:%s", - strings.ToLower(w.Owner.String()), - strings.ToLower(w.Address.String()), + strings.ToLower(owner.Hex()), + strings.ToLower(smartWalletAddress), ) } @@ -43,7 +46,9 @@ func TaskStorageKey(id string, status avsproto.TaskStatus) []byte { func TaskUserKey(t *model.Task) []byte { return []byte(fmt.Sprintf( - "u:%s", + "u:%s:%s:%s", + strings.ToLower(t.Owner), + strings.ToLower(t.SmartWalletAddress), t.Key(), )) } diff --git a/core/taskengine/validation.go b/core/taskengine/validation.go new file mode 100644 index 0000000..6ea5546 --- /dev/null +++ b/core/taskengine/validation.go @@ -0,0 +1,26 @@ +package taskengine + +import ( + "github.com/AvaProtocol/ap-avs/model" + "github.com/AvaProtocol/ap-avs/storage" + "github.com/ethereum/go-ethereum/common" +) + +func ValidWalletAddress(address string) bool { + return common.IsHexAddress(address) +} + +func ValidWalletOwner(db storage.Storage, u *model.User, smartWalletAddress common.Address) (bool, error) { + // the smart wallet adress is the default one + if u.Address.Hex() == smartWalletAddress.Hex() { + return true, nil + } + + // not default, look up in our storage + exists, err := db.Exist([]byte(WalletStorageKey(u.Address, smartWalletAddress.Hex()))) + if exists { + return true, nil + } + + return false, err +} diff --git a/examples/example.js b/examples/example.js index 480e0da..81e8138 100644 --- a/examples/example.js +++ b/examples/example.js @@ -108,9 +108,11 @@ async function listTask(owner, token) { const metadata = new grpc.Metadata(); metadata.add("authkey", token); - const result = await asyncRPC(client, "ListTasks", {}, metadata); + const result = await asyncRPC(client, "ListTasks", { + smart_wallet_address: process.argv[3] + }, metadata); - console.log("Tasks that has created by", owner, "\n", result); + console.log("Tasks that has created by", process.argv[3], "\n", result); } async function getTask(owner, token, taskId) { @@ -353,6 +355,9 @@ async function scheduleERC20TransferJob(owner, token, taskCondition) { client, 'CreateTask', { + // salt = 0 + //smart_wallet_address: "0x5Df343de7d99fd64b2479189692C1dAb8f46184a", + smart_wallet_address: "0xdD85693fd14b522a819CC669D6bA388B4FCd158d", actions: [{ task_type: TaskType.CONTRACTEXECUTIONTASK, // id need to be unique diff --git a/model/task.go b/model/task.go index 8bd89e7..2a3588c 100644 --- a/model/task.go +++ b/model/task.go @@ -5,7 +5,10 @@ import ( "fmt" "time" + "github.com/ethereum/go-ethereum/common" "github.com/oklog/ulid/v2" + "google.golang.org/grpc/codes" + "google.golang.org/grpc/status" avsproto "github.com/AvaProtocol/ap-avs/protobuf" ) @@ -19,7 +22,7 @@ type Task struct { // The smartwallet that deploy this, it is important to store this because // there are maybe more than one AA per owner - SmartAccountAddress string `json:"smart_account_address"` + SmartWalletAddress string `json:"smart_wallet_address"` // trigger defined whether the task can be executed // trigger can be time based, price based, or contract call based @@ -53,7 +56,14 @@ func NewTaskFromProtobuf(user *User, body *avsproto.CreateTaskReq) (*Task, error } owner := user.Address - aaAddress := user.SmartAccountAddress + aaAddress := *user.SmartAccountAddress + + if body.SmartWalletAddress != "" { + if !common.IsHexAddress(body.SmartWalletAddress) { + return nil, status.Errorf(codes.InvalidArgument, "invalid smart account address") + } + aaAddress = common.HexToAddress(body.SmartWalletAddress) + } taskID := GenerateTaskID() @@ -61,8 +71,8 @@ func NewTaskFromProtobuf(user *User, body *avsproto.CreateTaskReq) (*Task, error ID: taskID, // convert back to string with EIP55-compliant - Owner: owner.Hex(), - SmartAccountAddress: aaAddress.Hex(), + Owner: owner.Hex(), + SmartWalletAddress: aaAddress.Hex(), Trigger: body.Trigger, Nodes: body.Actions, @@ -96,8 +106,8 @@ func (t *Task) Validate() bool { // Convert to protobuf func (t *Task) ToProtoBuf() (*avsproto.Task, error) { protoTask := avsproto.Task{ - Owner: t.Owner, - SmartAccountAddress: t.SmartAccountAddress, + Owner: t.Owner, + SmartWalletAddress: t.SmartWalletAddress, Id: &avsproto.UUID{ Bytes: t.ID, @@ -125,7 +135,7 @@ func (t *Task) FromStorageData(body []byte) error { // Generate a global unique key for the task in our system func (t *Task) Key() []byte { - return []byte(fmt.Sprintf("%s:%s", t.Owner, t.ID)) + return []byte(t.ID) } func (t *Task) SetCompleted() { @@ -158,6 +168,7 @@ func (t *Task) AppendExecution(epoch int64, userOpHash string, err error) { // Given a task key generated from Key(), extract the ID part func TaskKeyToId(key []byte) []byte { + // <43-byte>:<43-byte>: // the first 43 bytes is owner address - return key[43:] + return key[86:] } diff --git a/protobuf/avs.pb.go b/protobuf/avs.pb.go index 66c2e50..387af54 100644 --- a/protobuf/avs.pb.go +++ b/protobuf/avs.pb.go @@ -1487,11 +1487,11 @@ type Task struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Id *UUID `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` - Owner string `protobuf:"bytes,2,opt,name=owner,proto3" json:"owner,omitempty"` - SmartAccountAddress string `protobuf:"bytes,3,opt,name=smart_account_address,json=smartAccountAddress,proto3" json:"smart_account_address,omitempty"` - Trigger *TaskTrigger `protobuf:"bytes,4,opt,name=trigger,proto3" json:"trigger,omitempty"` - Nodes []*TaskAction `protobuf:"bytes,5,rep,name=nodes,proto3" json:"nodes,omitempty"` + Id *UUID `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + Owner string `protobuf:"bytes,2,opt,name=owner,proto3" json:"owner,omitempty"` + SmartWalletAddress string `protobuf:"bytes,3,opt,name=smart_wallet_address,json=smartWalletAddress,proto3" json:"smart_wallet_address,omitempty"` + Trigger *TaskTrigger `protobuf:"bytes,4,opt,name=trigger,proto3" json:"trigger,omitempty"` + Nodes []*TaskAction `protobuf:"bytes,5,rep,name=nodes,proto3" json:"nodes,omitempty"` // task won't be check before this StartAt int64 `protobuf:"varint,6,opt,name=start_at,json=startAt,proto3" json:"start_at,omitempty"` // task won't be run/check after this @@ -1551,9 +1551,9 @@ func (x *Task) GetOwner() string { return "" } -func (x *Task) GetSmartAccountAddress() string { +func (x *Task) GetSmartWalletAddress() string { if x != nil { - return x.SmartAccountAddress + return x.SmartWalletAddress } return "" } @@ -1633,6 +1633,9 @@ type CreateTaskReq struct { Memo string `protobuf:"bytes,5,opt,name=memo,proto3" json:"memo,omitempty"` // A repeatable task will continue to be run Repeatable bool `protobuf:"varint,6,opt,name=repeatable,proto3" json:"repeatable,omitempty"` + // the smart wallet address that will be used to run this task + // When leaving out, we will use the default(salt=0) wallet + SmartWalletAddress string `protobuf:"bytes,7,opt,name=smart_wallet_address,json=smartWalletAddress,proto3" json:"smart_wallet_address,omitempty"` } func (x *CreateTaskReq) Reset() { @@ -1709,6 +1712,13 @@ func (x *CreateTaskReq) GetRepeatable() bool { return false } +func (x *CreateTaskReq) GetSmartWalletAddress() string { + if x != nil { + return x.SmartWalletAddress + } + return "" +} + type CreateTaskResp struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -2021,6 +2031,9 @@ type ListTasksReq struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields + + // Filter out by the smart_wallet_address + SmartWalletAddress string `protobuf:"bytes,1,opt,name=smart_wallet_address,json=smartWalletAddress,proto3" json:"smart_wallet_address,omitempty"` } func (x *ListTasksReq) Reset() { @@ -2055,12 +2068,19 @@ func (*ListTasksReq) Descriptor() ([]byte, []int) { return file_protobuf_avs_proto_rawDescGZIP(), []int{26} } +func (x *ListTasksReq) GetSmartWalletAddress() string { + if x != nil { + return x.SmartWalletAddress + } + return "" +} + type ListTasksResp struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Tasks []*ListTasksResp_TaskItemResp `protobuf:"bytes,1,rep,name=tasks,proto3" json:"tasks,omitempty"` + Tasks []*Task `protobuf:"bytes,1,rep,name=tasks,proto3" json:"tasks,omitempty"` } func (x *ListTasksResp) Reset() { @@ -2095,7 +2115,7 @@ func (*ListTasksResp) Descriptor() ([]byte, []int) { return file_protobuf_avs_proto_rawDescGZIP(), []int{27} } -func (x *ListTasksResp) GetTasks() []*ListTasksResp_TaskItemResp { +func (x *ListTasksResp) GetTasks() []*Task { if x != nil { return x.Tasks } @@ -2488,61 +2508,6 @@ func (x *Checkin_Status) GetLastHeartbeat() *timestamppb.Timestamp { return nil } -type ListTasksResp_TaskItemResp struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` - Status TaskStatus `protobuf:"varint,2,opt,name=status,proto3,enum=aggregator.TaskStatus" json:"status,omitempty"` -} - -func (x *ListTasksResp_TaskItemResp) Reset() { - *x = ListTasksResp_TaskItemResp{} - if protoimpl.UnsafeEnabled { - mi := &file_protobuf_avs_proto_msgTypes[36] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *ListTasksResp_TaskItemResp) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*ListTasksResp_TaskItemResp) ProtoMessage() {} - -func (x *ListTasksResp_TaskItemResp) ProtoReflect() protoreflect.Message { - mi := &file_protobuf_avs_proto_msgTypes[36] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use ListTasksResp_TaskItemResp.ProtoReflect.Descriptor instead. -func (*ListTasksResp_TaskItemResp) Descriptor() ([]byte, []int) { - return file_protobuf_avs_proto_rawDescGZIP(), []int{27, 0} -} - -func (x *ListTasksResp_TaskItemResp) GetId() string { - if x != nil { - return x.Id - } - return "" -} - -func (x *ListTasksResp_TaskItemResp) GetStatus() TaskStatus { - if x != nil { - return x.Status - } - return TaskStatus_Active -} - var File_protobuf_avs_proto protoreflect.FileDescriptor var file_protobuf_avs_proto_rawDesc = []byte{ @@ -2712,50 +2677,53 @@ var file_protobuf_avs_proto_rawDesc = []byte{ 0x75, 0x73, 0x65, 0x72, 0x5f, 0x6f, 0x70, 0x5f, 0x68, 0x61, 0x73, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x75, 0x73, 0x65, 0x72, 0x4f, 0x70, 0x48, 0x61, 0x73, 0x68, 0x12, 0x14, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x65, - 0x72, 0x72, 0x6f, 0x72, 0x22, 0xcb, 0x03, 0x0a, 0x04, 0x54, 0x61, 0x73, 0x6b, 0x12, 0x20, 0x0a, + 0x72, 0x72, 0x6f, 0x72, 0x22, 0xc9, 0x03, 0x0a, 0x04, 0x54, 0x61, 0x73, 0x6b, 0x12, 0x20, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x61, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x2e, 0x55, 0x55, 0x49, 0x44, 0x52, 0x02, 0x69, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, - 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x12, 0x32, 0x0a, 0x15, 0x73, 0x6d, 0x61, 0x72, 0x74, 0x5f, 0x61, - 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x13, 0x73, 0x6d, 0x61, 0x72, 0x74, 0x41, 0x63, 0x63, 0x6f, 0x75, - 0x6e, 0x74, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x31, 0x0a, 0x07, 0x74, 0x72, 0x69, - 0x67, 0x67, 0x65, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x61, 0x67, 0x67, - 0x72, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x2e, 0x54, 0x61, 0x73, 0x6b, 0x54, 0x72, 0x69, 0x67, - 0x67, 0x65, 0x72, 0x52, 0x07, 0x74, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x12, 0x2c, 0x0a, 0x05, - 0x6e, 0x6f, 0x64, 0x65, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x61, 0x67, - 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x2e, 0x54, 0x61, 0x73, 0x6b, 0x41, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x52, 0x05, 0x6e, 0x6f, 0x64, 0x65, 0x73, 0x12, 0x19, 0x0a, 0x08, 0x73, 0x74, - 0x61, 0x72, 0x74, 0x5f, 0x61, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x73, 0x74, - 0x61, 0x72, 0x74, 0x41, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x65, 0x78, 0x70, 0x69, 0x72, 0x65, 0x64, - 0x5f, 0x61, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x65, 0x78, 0x70, 0x69, 0x72, - 0x65, 0x64, 0x41, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6d, 0x65, 0x6d, 0x6f, 0x18, 0x08, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x04, 0x6d, 0x65, 0x6d, 0x6f, 0x12, 0x21, 0x0a, 0x0c, 0x63, 0x6f, 0x6d, 0x70, - 0x6c, 0x65, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x09, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, - 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x2e, 0x0a, 0x06, 0x73, - 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x16, 0x2e, 0x61, 0x67, - 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x2e, 0x54, 0x61, 0x73, 0x6b, 0x53, 0x74, 0x61, - 0x74, 0x75, 0x73, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x1e, 0x0a, 0x0a, 0x72, - 0x65, 0x70, 0x65, 0x61, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x08, 0x52, - 0x0a, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x12, 0x35, 0x0a, 0x0a, 0x65, - 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x0c, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x15, 0x2e, 0x61, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x2e, 0x45, 0x78, 0x65, - 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0a, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, - 0x6e, 0x73, 0x22, 0xe2, 0x01, 0x0a, 0x0d, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x61, 0x73, - 0x6b, 0x52, 0x65, 0x71, 0x12, 0x31, 0x0a, 0x07, 0x74, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x61, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, - 0x6f, 0x72, 0x2e, 0x54, 0x61, 0x73, 0x6b, 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x52, 0x07, - 0x74, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x12, 0x30, 0x0a, 0x07, 0x61, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x61, 0x67, 0x67, 0x72, 0x65, - 0x67, 0x61, 0x74, 0x6f, 0x72, 0x2e, 0x54, 0x61, 0x73, 0x6b, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x52, 0x07, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x19, 0x0a, 0x08, 0x73, 0x74, 0x61, - 0x72, 0x74, 0x5f, 0x61, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x73, 0x74, 0x61, - 0x72, 0x74, 0x41, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x65, 0x78, 0x70, 0x69, 0x72, 0x65, 0x64, 0x5f, - 0x61, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x65, 0x78, 0x70, 0x69, 0x72, 0x65, - 0x64, 0x41, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6d, 0x65, 0x6d, 0x6f, 0x18, 0x05, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x04, 0x6d, 0x65, 0x6d, 0x6f, 0x12, 0x1e, 0x0a, 0x0a, 0x72, 0x65, 0x70, 0x65, 0x61, - 0x74, 0x61, 0x62, 0x6c, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x72, 0x65, 0x70, - 0x65, 0x61, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x22, 0x20, 0x0a, 0x0e, 0x43, 0x72, 0x65, 0x61, 0x74, + 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x12, 0x30, 0x0a, 0x14, 0x73, 0x6d, 0x61, 0x72, 0x74, 0x5f, 0x77, + 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x12, 0x73, 0x6d, 0x61, 0x72, 0x74, 0x57, 0x61, 0x6c, 0x6c, 0x65, 0x74, + 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x31, 0x0a, 0x07, 0x74, 0x72, 0x69, 0x67, 0x67, + 0x65, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x61, 0x67, 0x67, 0x72, 0x65, + 0x67, 0x61, 0x74, 0x6f, 0x72, 0x2e, 0x54, 0x61, 0x73, 0x6b, 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, + 0x72, 0x52, 0x07, 0x74, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x12, 0x2c, 0x0a, 0x05, 0x6e, 0x6f, + 0x64, 0x65, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x61, 0x67, 0x67, 0x72, + 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x2e, 0x54, 0x61, 0x73, 0x6b, 0x41, 0x63, 0x74, 0x69, 0x6f, + 0x6e, 0x52, 0x05, 0x6e, 0x6f, 0x64, 0x65, 0x73, 0x12, 0x19, 0x0a, 0x08, 0x73, 0x74, 0x61, 0x72, + 0x74, 0x5f, 0x61, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x73, 0x74, 0x61, 0x72, + 0x74, 0x41, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x65, 0x78, 0x70, 0x69, 0x72, 0x65, 0x64, 0x5f, 0x61, + 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x65, 0x78, 0x70, 0x69, 0x72, 0x65, 0x64, + 0x41, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6d, 0x65, 0x6d, 0x6f, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x04, 0x6d, 0x65, 0x6d, 0x6f, 0x12, 0x21, 0x0a, 0x0c, 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x65, + 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x09, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x63, 0x6f, + 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x2e, 0x0a, 0x06, 0x73, 0x74, 0x61, + 0x74, 0x75, 0x73, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x16, 0x2e, 0x61, 0x67, 0x67, 0x72, + 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x2e, 0x54, 0x61, 0x73, 0x6b, 0x53, 0x74, 0x61, 0x74, 0x75, + 0x73, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x1e, 0x0a, 0x0a, 0x72, 0x65, 0x70, + 0x65, 0x61, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x72, + 0x65, 0x70, 0x65, 0x61, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x12, 0x35, 0x0a, 0x0a, 0x65, 0x78, 0x65, + 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x0c, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x15, 0x2e, + 0x61, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x2e, 0x45, 0x78, 0x65, 0x63, 0x75, + 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0a, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x73, + 0x22, 0x94, 0x02, 0x0a, 0x0d, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x61, 0x73, 0x6b, 0x52, + 0x65, 0x71, 0x12, 0x31, 0x0a, 0x07, 0x74, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x61, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, + 0x2e, 0x54, 0x61, 0x73, 0x6b, 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x52, 0x07, 0x74, 0x72, + 0x69, 0x67, 0x67, 0x65, 0x72, 0x12, 0x30, 0x0a, 0x07, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, + 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x61, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, + 0x74, 0x6f, 0x72, 0x2e, 0x54, 0x61, 0x73, 0x6b, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x07, + 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x19, 0x0a, 0x08, 0x73, 0x74, 0x61, 0x72, 0x74, + 0x5f, 0x61, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x73, 0x74, 0x61, 0x72, 0x74, + 0x41, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x65, 0x78, 0x70, 0x69, 0x72, 0x65, 0x64, 0x5f, 0x61, 0x74, + 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x65, 0x78, 0x70, 0x69, 0x72, 0x65, 0x64, 0x41, + 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6d, 0x65, 0x6d, 0x6f, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x04, 0x6d, 0x65, 0x6d, 0x6f, 0x12, 0x1e, 0x0a, 0x0a, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x61, + 0x62, 0x6c, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x72, 0x65, 0x70, 0x65, 0x61, + 0x74, 0x61, 0x62, 0x6c, 0x65, 0x12, 0x30, 0x0a, 0x14, 0x73, 0x6d, 0x61, 0x72, 0x74, 0x5f, 0x77, + 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x07, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x12, 0x73, 0x6d, 0x61, 0x72, 0x74, 0x57, 0x61, 0x6c, 0x6c, 0x65, 0x74, + 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x22, 0x20, 0x0a, 0x0e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x61, 0x73, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x22, 0x24, 0x0a, 0x0c, 0x4e, 0x6f, 0x6e, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x6f, 0x77, 0x6e, @@ -2775,129 +2743,126 @@ var file_protobuf_avs_proto_rawDesc = []byte{ 0x72, 0x65, 0x73, 0x73, 0x52, 0x65, 0x73, 0x70, 0x12, 0x31, 0x0a, 0x07, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x61, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x2e, 0x53, 0x6d, 0x61, 0x72, 0x74, 0x57, 0x61, 0x6c, 0x6c, - 0x65, 0x74, 0x52, 0x07, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x73, 0x22, 0x0e, 0x0a, 0x0c, 0x4c, - 0x69, 0x73, 0x74, 0x54, 0x61, 0x73, 0x6b, 0x73, 0x52, 0x65, 0x71, 0x22, 0x9d, 0x01, 0x0a, 0x0d, - 0x4c, 0x69, 0x73, 0x74, 0x54, 0x61, 0x73, 0x6b, 0x73, 0x52, 0x65, 0x73, 0x70, 0x12, 0x3c, 0x0a, - 0x05, 0x74, 0x61, 0x73, 0x6b, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x61, - 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x61, - 0x73, 0x6b, 0x73, 0x52, 0x65, 0x73, 0x70, 0x2e, 0x54, 0x61, 0x73, 0x6b, 0x49, 0x74, 0x65, 0x6d, - 0x52, 0x65, 0x73, 0x70, 0x52, 0x05, 0x74, 0x61, 0x73, 0x6b, 0x73, 0x1a, 0x4e, 0x0a, 0x0c, 0x54, - 0x61, 0x73, 0x6b, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x65, 0x73, 0x70, 0x12, 0x0e, 0x0a, 0x02, 0x69, - 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x2e, 0x0a, 0x06, 0x73, - 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x16, 0x2e, 0x61, 0x67, - 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x2e, 0x54, 0x61, 0x73, 0x6b, 0x53, 0x74, 0x61, - 0x74, 0x75, 0x73, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x5e, 0x0a, 0x09, 0x47, - 0x65, 0x74, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x71, 0x12, 0x14, 0x0a, 0x05, 0x6f, 0x77, 0x6e, 0x65, - 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x12, 0x1d, - 0x0a, 0x0a, 0x65, 0x78, 0x70, 0x69, 0x72, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x03, 0x52, 0x09, 0x65, 0x78, 0x70, 0x69, 0x72, 0x65, 0x64, 0x41, 0x74, 0x12, 0x1c, 0x0a, - 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x22, 0x1b, 0x0a, 0x07, 0x4b, - 0x65, 0x79, 0x52, 0x65, 0x73, 0x70, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x22, 0x59, 0x0a, 0x0f, 0x55, 0x70, 0x64, 0x61, - 0x74, 0x65, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x73, 0x52, 0x65, 0x71, 0x12, 0x18, 0x0a, 0x07, 0x61, - 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x64, - 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x1c, 0x0a, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, - 0x72, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, - 0x75, 0x72, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, - 0x02, 0x69, 0x64, 0x22, 0x4d, 0x0a, 0x10, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x43, 0x68, 0x65, - 0x63, 0x6b, 0x73, 0x52, 0x65, 0x73, 0x70, 0x12, 0x39, 0x0a, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, - 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, - 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, - 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x09, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, - 0x41, 0x74, 0x22, 0x4e, 0x0a, 0x0f, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x57, 0x61, 0x6c, 0x6c, - 0x65, 0x74, 0x52, 0x65, 0x71, 0x12, 0x12, 0x0a, 0x04, 0x73, 0x61, 0x6c, 0x74, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x04, 0x73, 0x61, 0x6c, 0x74, 0x12, 0x27, 0x0a, 0x0f, 0x66, 0x61, 0x63, - 0x74, 0x6f, 0x72, 0x79, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x0e, 0x66, 0x61, 0x63, 0x74, 0x6f, 0x72, 0x79, 0x41, 0x64, 0x64, 0x72, 0x65, - 0x73, 0x73, 0x22, 0x2c, 0x0a, 0x10, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x57, 0x61, 0x6c, 0x6c, - 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x12, 0x18, 0x0a, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, + 0x65, 0x74, 0x52, 0x07, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x73, 0x22, 0x40, 0x0a, 0x0c, 0x4c, + 0x69, 0x73, 0x74, 0x54, 0x61, 0x73, 0x6b, 0x73, 0x52, 0x65, 0x71, 0x12, 0x30, 0x0a, 0x14, 0x73, + 0x6d, 0x61, 0x72, 0x74, 0x5f, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x5f, 0x61, 0x64, 0x64, 0x72, + 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x12, 0x73, 0x6d, 0x61, 0x72, 0x74, + 0x57, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x22, 0x37, 0x0a, + 0x0d, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x61, 0x73, 0x6b, 0x73, 0x52, 0x65, 0x73, 0x70, 0x12, 0x26, + 0x0a, 0x05, 0x74, 0x61, 0x73, 0x6b, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x10, 0x2e, + 0x61, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x2e, 0x54, 0x61, 0x73, 0x6b, 0x52, + 0x05, 0x74, 0x61, 0x73, 0x6b, 0x73, 0x22, 0x5e, 0x0a, 0x09, 0x47, 0x65, 0x74, 0x4b, 0x65, 0x79, + 0x52, 0x65, 0x71, 0x12, 0x14, 0x0a, 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x12, 0x1d, 0x0a, 0x0a, 0x65, 0x78, 0x70, + 0x69, 0x72, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x65, + 0x78, 0x70, 0x69, 0x72, 0x65, 0x64, 0x41, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x73, 0x69, 0x67, 0x6e, + 0x61, 0x74, 0x75, 0x72, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x69, 0x67, + 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x22, 0x1b, 0x0a, 0x07, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x73, + 0x70, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, + 0x6b, 0x65, 0x79, 0x22, 0x59, 0x0a, 0x0f, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x43, 0x68, 0x65, + 0x63, 0x6b, 0x73, 0x52, 0x65, 0x71, 0x12, 0x18, 0x0a, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, - 0x2a, 0x4f, 0x0a, 0x0b, 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x54, 0x79, 0x70, 0x65, 0x12, - 0x0f, 0x0a, 0x0b, 0x54, 0x69, 0x6d, 0x65, 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x10, 0x00, - 0x12, 0x18, 0x0a, 0x14, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x61, 0x63, 0x74, 0x51, 0x75, 0x65, 0x72, - 0x79, 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x10, 0x01, 0x12, 0x15, 0x0a, 0x11, 0x45, 0x78, - 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x10, - 0x02, 0x2a, 0xad, 0x01, 0x0a, 0x05, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x12, 0x0f, 0x0a, 0x0b, 0x55, - 0x6e, 0x6b, 0x6e, 0x6f, 0x77, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x10, 0x00, 0x12, 0x11, 0x0a, 0x0c, - 0x52, 0x70, 0x63, 0x4e, 0x6f, 0x64, 0x65, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x10, 0xe8, 0x07, 0x12, - 0x17, 0x0a, 0x12, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x55, 0x6e, 0x61, 0x76, 0x61, 0x69, - 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x10, 0xd0, 0x0f, 0x12, 0x16, 0x0a, 0x11, 0x53, 0x74, 0x6f, 0x72, - 0x61, 0x67, 0x65, 0x57, 0x72, 0x69, 0x74, 0x65, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x10, 0xd1, 0x0f, - 0x12, 0x18, 0x0a, 0x13, 0x53, 0x6d, 0x61, 0x72, 0x74, 0x57, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x52, - 0x70, 0x63, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x10, 0xf0, 0x2e, 0x12, 0x1d, 0x0a, 0x18, 0x53, 0x6d, - 0x61, 0x72, 0x74, 0x57, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x4e, 0x6f, 0x74, 0x46, 0x6f, 0x75, 0x6e, - 0x64, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x10, 0xf1, 0x2e, 0x12, 0x16, 0x0a, 0x11, 0x54, 0x61, 0x73, - 0x6b, 0x44, 0x61, 0x74, 0x61, 0x43, 0x6f, 0x72, 0x72, 0x75, 0x70, 0x74, 0x65, 0x64, 0x10, 0xd8, - 0x36, 0x2a, 0x93, 0x01, 0x0a, 0x08, 0x54, 0x61, 0x73, 0x6b, 0x54, 0x79, 0x70, 0x65, 0x12, 0x13, - 0x0a, 0x0f, 0x45, 0x54, 0x48, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x65, 0x72, 0x54, 0x61, 0x73, - 0x6b, 0x10, 0x00, 0x12, 0x19, 0x0a, 0x15, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x61, 0x63, 0x74, 0x45, - 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x61, 0x73, 0x6b, 0x10, 0x01, 0x12, 0x18, - 0x0a, 0x14, 0x47, 0x72, 0x61, 0x70, 0x68, 0x51, 0x4c, 0x44, 0x61, 0x74, 0x61, 0x51, 0x75, 0x65, - 0x72, 0x79, 0x54, 0x61, 0x73, 0x6b, 0x10, 0x02, 0x12, 0x13, 0x0a, 0x0f, 0x48, 0x54, 0x54, 0x50, - 0x41, 0x50, 0x49, 0x43, 0x61, 0x6c, 0x6c, 0x54, 0x61, 0x73, 0x6b, 0x10, 0x03, 0x12, 0x12, 0x0a, - 0x0e, 0x43, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x43, 0x6f, 0x64, 0x65, 0x54, 0x61, 0x73, 0x6b, 0x10, - 0x04, 0x12, 0x14, 0x0a, 0x10, 0x42, 0x72, 0x61, 0x6e, 0x63, 0x68, 0x41, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x54, 0x61, 0x73, 0x6b, 0x10, 0x05, 0x2a, 0x50, 0x0a, 0x0a, 0x54, 0x61, 0x73, 0x6b, 0x53, - 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x0a, 0x0a, 0x06, 0x41, 0x63, 0x74, 0x69, 0x76, 0x65, 0x10, - 0x00, 0x12, 0x0d, 0x0a, 0x09, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x10, 0x01, - 0x12, 0x0a, 0x0a, 0x06, 0x46, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x10, 0x02, 0x12, 0x0c, 0x0a, 0x08, - 0x43, 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x65, 0x64, 0x10, 0x03, 0x12, 0x0d, 0x0a, 0x09, 0x45, 0x78, - 0x65, 0x63, 0x75, 0x74, 0x69, 0x6e, 0x67, 0x10, 0x04, 0x2a, 0x20, 0x0a, 0x0e, 0x43, 0x75, 0x73, - 0x74, 0x6f, 0x6d, 0x43, 0x6f, 0x64, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x0e, 0x0a, 0x0a, 0x4a, - 0x61, 0x76, 0x61, 0x53, 0x63, 0x72, 0x69, 0x70, 0x74, 0x10, 0x00, 0x32, 0xa4, 0x06, 0x0a, 0x0a, - 0x41, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x12, 0x36, 0x0a, 0x06, 0x47, 0x65, - 0x74, 0x4b, 0x65, 0x79, 0x12, 0x15, 0x2e, 0x61, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x6f, - 0x72, 0x2e, 0x47, 0x65, 0x74, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x71, 0x1a, 0x13, 0x2e, 0x61, 0x67, - 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x2e, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x73, 0x70, - 0x22, 0x00, 0x12, 0x3d, 0x0a, 0x08, 0x47, 0x65, 0x74, 0x4e, 0x6f, 0x6e, 0x63, 0x65, 0x12, 0x18, - 0x2e, 0x61, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x2e, 0x4e, 0x6f, 0x6e, 0x63, - 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x15, 0x2e, 0x61, 0x67, 0x67, 0x72, 0x65, - 0x67, 0x61, 0x74, 0x6f, 0x72, 0x2e, 0x4e, 0x6f, 0x6e, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x22, - 0x00, 0x12, 0x4f, 0x0a, 0x16, 0x47, 0x65, 0x74, 0x53, 0x6d, 0x61, 0x72, 0x74, 0x41, 0x63, 0x63, - 0x6f, 0x75, 0x6e, 0x74, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x1a, 0x2e, 0x61, 0x67, - 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x2e, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x17, 0x2e, 0x61, 0x67, 0x67, 0x72, 0x65, 0x67, - 0x61, 0x74, 0x6f, 0x72, 0x2e, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x52, 0x65, 0x73, 0x70, - 0x22, 0x00, 0x12, 0x4b, 0x0a, 0x0c, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x57, 0x61, 0x6c, 0x6c, - 0x65, 0x74, 0x12, 0x1b, 0x2e, 0x61, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x2e, - 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x57, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x52, 0x65, 0x71, 0x1a, - 0x1c, 0x2e, 0x61, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x2e, 0x43, 0x72, 0x65, - 0x61, 0x74, 0x65, 0x57, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x22, 0x00, 0x12, - 0x45, 0x0a, 0x0a, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x61, 0x73, 0x6b, 0x12, 0x19, 0x2e, + 0x12, 0x1c, 0x0a, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x12, 0x0e, + 0x0a, 0x02, 0x69, 0x64, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x22, 0x4d, + 0x0a, 0x10, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x73, 0x52, 0x65, + 0x73, 0x70, 0x12, 0x39, 0x0a, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, + 0x6d, 0x70, 0x52, 0x09, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x22, 0x4e, 0x0a, + 0x0f, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x57, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x52, 0x65, 0x71, + 0x12, 0x12, 0x0a, 0x04, 0x73, 0x61, 0x6c, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, + 0x73, 0x61, 0x6c, 0x74, 0x12, 0x27, 0x0a, 0x0f, 0x66, 0x61, 0x63, 0x74, 0x6f, 0x72, 0x79, 0x5f, + 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x66, + 0x61, 0x63, 0x74, 0x6f, 0x72, 0x79, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x22, 0x2c, 0x0a, + 0x10, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x57, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x52, 0x65, 0x73, + 0x70, 0x12, 0x18, 0x0a, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x2a, 0x4f, 0x0a, 0x0b, 0x54, + 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x54, 0x79, 0x70, 0x65, 0x12, 0x0f, 0x0a, 0x0b, 0x54, 0x69, + 0x6d, 0x65, 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x10, 0x00, 0x12, 0x18, 0x0a, 0x14, 0x43, + 0x6f, 0x6e, 0x74, 0x72, 0x61, 0x63, 0x74, 0x51, 0x75, 0x65, 0x72, 0x79, 0x54, 0x72, 0x69, 0x67, + 0x67, 0x65, 0x72, 0x10, 0x01, 0x12, 0x15, 0x0a, 0x11, 0x45, 0x78, 0x70, 0x72, 0x65, 0x73, 0x73, + 0x69, 0x6f, 0x6e, 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x10, 0x02, 0x2a, 0xad, 0x01, 0x0a, + 0x05, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x12, 0x0f, 0x0a, 0x0b, 0x55, 0x6e, 0x6b, 0x6e, 0x6f, 0x77, + 0x45, 0x72, 0x72, 0x6f, 0x72, 0x10, 0x00, 0x12, 0x11, 0x0a, 0x0c, 0x52, 0x70, 0x63, 0x4e, 0x6f, + 0x64, 0x65, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x10, 0xe8, 0x07, 0x12, 0x17, 0x0a, 0x12, 0x53, 0x74, + 0x6f, 0x72, 0x61, 0x67, 0x65, 0x55, 0x6e, 0x61, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, + 0x10, 0xd0, 0x0f, 0x12, 0x16, 0x0a, 0x11, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x57, 0x72, + 0x69, 0x74, 0x65, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x10, 0xd1, 0x0f, 0x12, 0x18, 0x0a, 0x13, 0x53, + 0x6d, 0x61, 0x72, 0x74, 0x57, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x52, 0x70, 0x63, 0x45, 0x72, 0x72, + 0x6f, 0x72, 0x10, 0xf0, 0x2e, 0x12, 0x1d, 0x0a, 0x18, 0x53, 0x6d, 0x61, 0x72, 0x74, 0x57, 0x61, + 0x6c, 0x6c, 0x65, 0x74, 0x4e, 0x6f, 0x74, 0x46, 0x6f, 0x75, 0x6e, 0x64, 0x45, 0x72, 0x72, 0x6f, + 0x72, 0x10, 0xf1, 0x2e, 0x12, 0x16, 0x0a, 0x11, 0x54, 0x61, 0x73, 0x6b, 0x44, 0x61, 0x74, 0x61, + 0x43, 0x6f, 0x72, 0x72, 0x75, 0x70, 0x74, 0x65, 0x64, 0x10, 0xd8, 0x36, 0x2a, 0x93, 0x01, 0x0a, + 0x08, 0x54, 0x61, 0x73, 0x6b, 0x54, 0x79, 0x70, 0x65, 0x12, 0x13, 0x0a, 0x0f, 0x45, 0x54, 0x48, + 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x65, 0x72, 0x54, 0x61, 0x73, 0x6b, 0x10, 0x00, 0x12, 0x19, + 0x0a, 0x15, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x61, 0x63, 0x74, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, + 0x69, 0x6f, 0x6e, 0x54, 0x61, 0x73, 0x6b, 0x10, 0x01, 0x12, 0x18, 0x0a, 0x14, 0x47, 0x72, 0x61, + 0x70, 0x68, 0x51, 0x4c, 0x44, 0x61, 0x74, 0x61, 0x51, 0x75, 0x65, 0x72, 0x79, 0x54, 0x61, 0x73, + 0x6b, 0x10, 0x02, 0x12, 0x13, 0x0a, 0x0f, 0x48, 0x54, 0x54, 0x50, 0x41, 0x50, 0x49, 0x43, 0x61, + 0x6c, 0x6c, 0x54, 0x61, 0x73, 0x6b, 0x10, 0x03, 0x12, 0x12, 0x0a, 0x0e, 0x43, 0x75, 0x73, 0x74, + 0x6f, 0x6d, 0x43, 0x6f, 0x64, 0x65, 0x54, 0x61, 0x73, 0x6b, 0x10, 0x04, 0x12, 0x14, 0x0a, 0x10, + 0x42, 0x72, 0x61, 0x6e, 0x63, 0x68, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x61, 0x73, 0x6b, + 0x10, 0x05, 0x2a, 0x50, 0x0a, 0x0a, 0x54, 0x61, 0x73, 0x6b, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, + 0x12, 0x0a, 0x0a, 0x06, 0x41, 0x63, 0x74, 0x69, 0x76, 0x65, 0x10, 0x00, 0x12, 0x0d, 0x0a, 0x09, + 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x10, 0x01, 0x12, 0x0a, 0x0a, 0x06, 0x46, + 0x61, 0x69, 0x6c, 0x65, 0x64, 0x10, 0x02, 0x12, 0x0c, 0x0a, 0x08, 0x43, 0x61, 0x6e, 0x63, 0x65, + 0x6c, 0x65, 0x64, 0x10, 0x03, 0x12, 0x0d, 0x0a, 0x09, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, + 0x6e, 0x67, 0x10, 0x04, 0x2a, 0x20, 0x0a, 0x0e, 0x43, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x43, 0x6f, + 0x64, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x0e, 0x0a, 0x0a, 0x4a, 0x61, 0x76, 0x61, 0x53, 0x63, + 0x72, 0x69, 0x70, 0x74, 0x10, 0x00, 0x32, 0xa4, 0x06, 0x0a, 0x0a, 0x41, 0x67, 0x67, 0x72, 0x65, + 0x67, 0x61, 0x74, 0x6f, 0x72, 0x12, 0x36, 0x0a, 0x06, 0x47, 0x65, 0x74, 0x4b, 0x65, 0x79, 0x12, + 0x15, 0x2e, 0x61, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x2e, 0x47, 0x65, 0x74, + 0x4b, 0x65, 0x79, 0x52, 0x65, 0x71, 0x1a, 0x13, 0x2e, 0x61, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, + 0x74, 0x6f, 0x72, 0x2e, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x73, 0x70, 0x22, 0x00, 0x12, 0x3d, 0x0a, + 0x08, 0x47, 0x65, 0x74, 0x4e, 0x6f, 0x6e, 0x63, 0x65, 0x12, 0x18, 0x2e, 0x61, 0x67, 0x67, 0x72, + 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x2e, 0x4e, 0x6f, 0x6e, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x15, 0x2e, 0x61, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, + 0x2e, 0x4e, 0x6f, 0x6e, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x22, 0x00, 0x12, 0x4f, 0x0a, 0x16, + 0x47, 0x65, 0x74, 0x53, 0x6d, 0x61, 0x72, 0x74, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x41, + 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x1a, 0x2e, 0x61, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, + 0x74, 0x6f, 0x72, 0x2e, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x1a, 0x17, 0x2e, 0x61, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x2e, + 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x52, 0x65, 0x73, 0x70, 0x22, 0x00, 0x12, 0x4b, 0x0a, + 0x0c, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x57, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x12, 0x1b, 0x2e, 0x61, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, - 0x65, 0x54, 0x61, 0x73, 0x6b, 0x52, 0x65, 0x71, 0x1a, 0x1a, 0x2e, 0x61, 0x67, 0x67, 0x72, 0x65, + 0x65, 0x57, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x52, 0x65, 0x71, 0x1a, 0x1c, 0x2e, 0x61, 0x67, 0x67, + 0x72, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x57, 0x61, + 0x6c, 0x6c, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x22, 0x00, 0x12, 0x45, 0x0a, 0x0a, 0x43, 0x72, + 0x65, 0x61, 0x74, 0x65, 0x54, 0x61, 0x73, 0x6b, 0x12, 0x19, 0x2e, 0x61, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x61, 0x73, 0x6b, - 0x52, 0x65, 0x73, 0x70, 0x22, 0x00, 0x12, 0x42, 0x0a, 0x09, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x61, - 0x73, 0x6b, 0x73, 0x12, 0x18, 0x2e, 0x61, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, - 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x61, 0x73, 0x6b, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x19, 0x2e, - 0x61, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x54, - 0x61, 0x73, 0x6b, 0x73, 0x52, 0x65, 0x73, 0x70, 0x22, 0x00, 0x12, 0x2f, 0x0a, 0x07, 0x47, 0x65, - 0x74, 0x54, 0x61, 0x73, 0x6b, 0x12, 0x10, 0x2e, 0x61, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, - 0x6f, 0x72, 0x2e, 0x55, 0x55, 0x49, 0x44, 0x1a, 0x10, 0x2e, 0x61, 0x67, 0x67, 0x72, 0x65, 0x67, - 0x61, 0x74, 0x6f, 0x72, 0x2e, 0x54, 0x61, 0x73, 0x6b, 0x22, 0x00, 0x12, 0x3c, 0x0a, 0x0a, 0x43, - 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x54, 0x61, 0x73, 0x6b, 0x12, 0x10, 0x2e, 0x61, 0x67, 0x67, 0x72, - 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x2e, 0x55, 0x55, 0x49, 0x44, 0x1a, 0x1a, 0x2e, 0x67, 0x6f, - 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x42, 0x6f, - 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x00, 0x12, 0x3c, 0x0a, 0x0a, 0x44, 0x65, 0x6c, - 0x65, 0x74, 0x65, 0x54, 0x61, 0x73, 0x6b, 0x12, 0x10, 0x2e, 0x61, 0x67, 0x67, 0x72, 0x65, 0x67, - 0x61, 0x74, 0x6f, 0x72, 0x2e, 0x55, 0x55, 0x49, 0x44, 0x1a, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, - 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x42, 0x6f, 0x6f, 0x6c, - 0x56, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x00, 0x12, 0x36, 0x0a, 0x04, 0x50, 0x69, 0x6e, 0x67, 0x12, - 0x13, 0x2e, 0x61, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x2e, 0x43, 0x68, 0x65, - 0x63, 0x6b, 0x69, 0x6e, 0x1a, 0x17, 0x2e, 0x61, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x6f, - 0x72, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x69, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x22, 0x00, 0x12, - 0x44, 0x0a, 0x09, 0x53, 0x79, 0x6e, 0x63, 0x54, 0x61, 0x73, 0x6b, 0x73, 0x12, 0x18, 0x2e, 0x61, - 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x2e, 0x53, 0x79, 0x6e, 0x63, 0x54, 0x61, - 0x73, 0x6b, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x19, 0x2e, 0x61, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, - 0x74, 0x6f, 0x72, 0x2e, 0x53, 0x79, 0x6e, 0x63, 0x54, 0x61, 0x73, 0x6b, 0x73, 0x52, 0x65, 0x73, - 0x70, 0x22, 0x00, 0x30, 0x01, 0x12, 0x4b, 0x0a, 0x0c, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x43, - 0x68, 0x65, 0x63, 0x6b, 0x73, 0x12, 0x1b, 0x2e, 0x61, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, - 0x6f, 0x72, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x73, 0x52, - 0x65, 0x71, 0x1a, 0x1c, 0x2e, 0x61, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x2e, - 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x73, 0x52, 0x65, 0x73, 0x70, - 0x22, 0x00, 0x42, 0x0c, 0x5a, 0x0a, 0x2e, 0x2f, 0x61, 0x76, 0x73, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x52, 0x65, 0x71, 0x1a, 0x1a, 0x2e, 0x61, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, + 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x61, 0x73, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x22, + 0x00, 0x12, 0x42, 0x0a, 0x09, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x61, 0x73, 0x6b, 0x73, 0x12, 0x18, + 0x2e, 0x61, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x2e, 0x4c, 0x69, 0x73, 0x74, + 0x54, 0x61, 0x73, 0x6b, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x19, 0x2e, 0x61, 0x67, 0x67, 0x72, 0x65, + 0x67, 0x61, 0x74, 0x6f, 0x72, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x61, 0x73, 0x6b, 0x73, 0x52, + 0x65, 0x73, 0x70, 0x22, 0x00, 0x12, 0x2f, 0x0a, 0x07, 0x47, 0x65, 0x74, 0x54, 0x61, 0x73, 0x6b, + 0x12, 0x10, 0x2e, 0x61, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x2e, 0x55, 0x55, + 0x49, 0x44, 0x1a, 0x10, 0x2e, 0x61, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x2e, + 0x54, 0x61, 0x73, 0x6b, 0x22, 0x00, 0x12, 0x3c, 0x0a, 0x0a, 0x43, 0x61, 0x6e, 0x63, 0x65, 0x6c, + 0x54, 0x61, 0x73, 0x6b, 0x12, 0x10, 0x2e, 0x61, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x6f, + 0x72, 0x2e, 0x55, 0x55, 0x49, 0x44, 0x1a, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x42, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, + 0x75, 0x65, 0x22, 0x00, 0x12, 0x3c, 0x0a, 0x0a, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, 0x61, + 0x73, 0x6b, 0x12, 0x10, 0x2e, 0x61, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x2e, + 0x55, 0x55, 0x49, 0x44, 0x1a, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x42, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, + 0x22, 0x00, 0x12, 0x36, 0x0a, 0x04, 0x50, 0x69, 0x6e, 0x67, 0x12, 0x13, 0x2e, 0x61, 0x67, 0x67, + 0x72, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x69, 0x6e, 0x1a, + 0x17, 0x2e, 0x61, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x2e, 0x43, 0x68, 0x65, + 0x63, 0x6b, 0x69, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x22, 0x00, 0x12, 0x44, 0x0a, 0x09, 0x53, 0x79, + 0x6e, 0x63, 0x54, 0x61, 0x73, 0x6b, 0x73, 0x12, 0x18, 0x2e, 0x61, 0x67, 0x67, 0x72, 0x65, 0x67, + 0x61, 0x74, 0x6f, 0x72, 0x2e, 0x53, 0x79, 0x6e, 0x63, 0x54, 0x61, 0x73, 0x6b, 0x73, 0x52, 0x65, + 0x71, 0x1a, 0x19, 0x2e, 0x61, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x2e, 0x53, + 0x79, 0x6e, 0x63, 0x54, 0x61, 0x73, 0x6b, 0x73, 0x52, 0x65, 0x73, 0x70, 0x22, 0x00, 0x30, 0x01, + 0x12, 0x4b, 0x0a, 0x0c, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x73, + 0x12, 0x1b, 0x2e, 0x61, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x2e, 0x55, 0x70, + 0x64, 0x61, 0x74, 0x65, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x1c, 0x2e, + 0x61, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, + 0x65, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x73, 0x52, 0x65, 0x73, 0x70, 0x22, 0x00, 0x42, 0x0c, 0x5a, + 0x0a, 0x2e, 0x2f, 0x61, 0x76, 0x73, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x06, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x33, } var ( @@ -2913,56 +2878,55 @@ func file_protobuf_avs_proto_rawDescGZIP() []byte { } var file_protobuf_avs_proto_enumTypes = make([]protoimpl.EnumInfo, 5) -var file_protobuf_avs_proto_msgTypes = make([]protoimpl.MessageInfo, 37) +var file_protobuf_avs_proto_msgTypes = make([]protoimpl.MessageInfo, 36) var file_protobuf_avs_proto_goTypes = []interface{}{ - (TriggerType)(0), // 0: aggregator.TriggerType - (Error)(0), // 1: aggregator.Error - (TaskType)(0), // 2: aggregator.TaskType - (TaskStatus)(0), // 3: aggregator.TaskStatus - (CustomCodeType)(0), // 4: aggregator.CustomCodeType - (*UUID)(nil), // 5: aggregator.UUID - (*Checkin)(nil), // 6: aggregator.Checkin - (*CheckinResp)(nil), // 7: aggregator.CheckinResp - (*SyncTasksReq)(nil), // 8: aggregator.SyncTasksReq - (*TaskTrigger)(nil), // 9: aggregator.TaskTrigger - (*TimeCondition)(nil), // 10: aggregator.TimeCondition - (*ContractQueryCondition)(nil), // 11: aggregator.ContractQueryCondition - (*ExpressionCondition)(nil), // 12: aggregator.ExpressionCondition - (*SyncTasksResp)(nil), // 13: aggregator.SyncTasksResp - (*ETHTransfer)(nil), // 14: aggregator.ETHTransfer - (*ContractExecution)(nil), // 15: aggregator.ContractExecution - (*GraphQLDataQuery)(nil), // 16: aggregator.GraphQLDataQuery - (*HTTPAPICall)(nil), // 17: aggregator.HTTPAPICall - (*CustomCode)(nil), // 18: aggregator.CustomCode - (*ConditionJump)(nil), // 19: aggregator.ConditionJump - (*BranchAction)(nil), // 20: aggregator.BranchAction - (*TaskAction)(nil), // 21: aggregator.TaskAction - (*Execution)(nil), // 22: aggregator.Execution - (*Task)(nil), // 23: aggregator.Task - (*CreateTaskReq)(nil), // 24: aggregator.CreateTaskReq - (*CreateTaskResp)(nil), // 25: aggregator.CreateTaskResp - (*NonceRequest)(nil), // 26: aggregator.NonceRequest - (*NonceResp)(nil), // 27: aggregator.NonceResp - (*AddressRequest)(nil), // 28: aggregator.AddressRequest - (*SmartWallet)(nil), // 29: aggregator.SmartWallet - (*AddressResp)(nil), // 30: aggregator.AddressResp - (*ListTasksReq)(nil), // 31: aggregator.ListTasksReq - (*ListTasksResp)(nil), // 32: aggregator.ListTasksResp - (*GetKeyReq)(nil), // 33: aggregator.GetKeyReq - (*KeyResp)(nil), // 34: aggregator.KeyResp - (*UpdateChecksReq)(nil), // 35: aggregator.UpdateChecksReq - (*UpdateChecksResp)(nil), // 36: aggregator.UpdateChecksResp - (*CreateWalletReq)(nil), // 37: aggregator.CreateWalletReq - (*CreateWalletResp)(nil), // 38: aggregator.CreateWalletResp - (*Checkin_Status)(nil), // 39: aggregator.Checkin.Status - nil, // 40: aggregator.HTTPAPICall.HeadersEntry - (*ListTasksResp_TaskItemResp)(nil), // 41: aggregator.ListTasksResp.TaskItemResp - (*timestamppb.Timestamp)(nil), // 42: google.protobuf.Timestamp - (*wrapperspb.BoolValue)(nil), // 43: google.protobuf.BoolValue + (TriggerType)(0), // 0: aggregator.TriggerType + (Error)(0), // 1: aggregator.Error + (TaskType)(0), // 2: aggregator.TaskType + (TaskStatus)(0), // 3: aggregator.TaskStatus + (CustomCodeType)(0), // 4: aggregator.CustomCodeType + (*UUID)(nil), // 5: aggregator.UUID + (*Checkin)(nil), // 6: aggregator.Checkin + (*CheckinResp)(nil), // 7: aggregator.CheckinResp + (*SyncTasksReq)(nil), // 8: aggregator.SyncTasksReq + (*TaskTrigger)(nil), // 9: aggregator.TaskTrigger + (*TimeCondition)(nil), // 10: aggregator.TimeCondition + (*ContractQueryCondition)(nil), // 11: aggregator.ContractQueryCondition + (*ExpressionCondition)(nil), // 12: aggregator.ExpressionCondition + (*SyncTasksResp)(nil), // 13: aggregator.SyncTasksResp + (*ETHTransfer)(nil), // 14: aggregator.ETHTransfer + (*ContractExecution)(nil), // 15: aggregator.ContractExecution + (*GraphQLDataQuery)(nil), // 16: aggregator.GraphQLDataQuery + (*HTTPAPICall)(nil), // 17: aggregator.HTTPAPICall + (*CustomCode)(nil), // 18: aggregator.CustomCode + (*ConditionJump)(nil), // 19: aggregator.ConditionJump + (*BranchAction)(nil), // 20: aggregator.BranchAction + (*TaskAction)(nil), // 21: aggregator.TaskAction + (*Execution)(nil), // 22: aggregator.Execution + (*Task)(nil), // 23: aggregator.Task + (*CreateTaskReq)(nil), // 24: aggregator.CreateTaskReq + (*CreateTaskResp)(nil), // 25: aggregator.CreateTaskResp + (*NonceRequest)(nil), // 26: aggregator.NonceRequest + (*NonceResp)(nil), // 27: aggregator.NonceResp + (*AddressRequest)(nil), // 28: aggregator.AddressRequest + (*SmartWallet)(nil), // 29: aggregator.SmartWallet + (*AddressResp)(nil), // 30: aggregator.AddressResp + (*ListTasksReq)(nil), // 31: aggregator.ListTasksReq + (*ListTasksResp)(nil), // 32: aggregator.ListTasksResp + (*GetKeyReq)(nil), // 33: aggregator.GetKeyReq + (*KeyResp)(nil), // 34: aggregator.KeyResp + (*UpdateChecksReq)(nil), // 35: aggregator.UpdateChecksReq + (*UpdateChecksResp)(nil), // 36: aggregator.UpdateChecksResp + (*CreateWalletReq)(nil), // 37: aggregator.CreateWalletReq + (*CreateWalletResp)(nil), // 38: aggregator.CreateWalletResp + (*Checkin_Status)(nil), // 39: aggregator.Checkin.Status + nil, // 40: aggregator.HTTPAPICall.HeadersEntry + (*timestamppb.Timestamp)(nil), // 41: google.protobuf.Timestamp + (*wrapperspb.BoolValue)(nil), // 42: google.protobuf.BoolValue } var file_protobuf_avs_proto_depIdxs = []int32{ 39, // 0: aggregator.Checkin.status:type_name -> aggregator.Checkin.Status - 42, // 1: aggregator.CheckinResp.updated_at:type_name -> google.protobuf.Timestamp + 41, // 1: aggregator.CheckinResp.updated_at:type_name -> google.protobuf.Timestamp 0, // 2: aggregator.TaskTrigger.trigger_type:type_name -> aggregator.TriggerType 10, // 3: aggregator.TaskTrigger.schedule:type_name -> aggregator.TimeCondition 11, // 4: aggregator.TaskTrigger.contract_query:type_name -> aggregator.ContractQueryCondition @@ -2988,39 +2952,38 @@ var file_protobuf_avs_proto_depIdxs = []int32{ 9, // 24: aggregator.CreateTaskReq.trigger:type_name -> aggregator.TaskTrigger 21, // 25: aggregator.CreateTaskReq.actions:type_name -> aggregator.TaskAction 29, // 26: aggregator.AddressResp.wallets:type_name -> aggregator.SmartWallet - 41, // 27: aggregator.ListTasksResp.tasks:type_name -> aggregator.ListTasksResp.TaskItemResp - 42, // 28: aggregator.UpdateChecksResp.updated_at:type_name -> google.protobuf.Timestamp - 42, // 29: aggregator.Checkin.Status.last_heartbeat:type_name -> google.protobuf.Timestamp - 3, // 30: aggregator.ListTasksResp.TaskItemResp.status:type_name -> aggregator.TaskStatus - 33, // 31: aggregator.Aggregator.GetKey:input_type -> aggregator.GetKeyReq - 26, // 32: aggregator.Aggregator.GetNonce:input_type -> aggregator.NonceRequest - 28, // 33: aggregator.Aggregator.GetSmartAccountAddress:input_type -> aggregator.AddressRequest - 37, // 34: aggregator.Aggregator.CreateWallet:input_type -> aggregator.CreateWalletReq - 24, // 35: aggregator.Aggregator.CreateTask:input_type -> aggregator.CreateTaskReq - 31, // 36: aggregator.Aggregator.ListTasks:input_type -> aggregator.ListTasksReq - 5, // 37: aggregator.Aggregator.GetTask:input_type -> aggregator.UUID - 5, // 38: aggregator.Aggregator.CancelTask:input_type -> aggregator.UUID - 5, // 39: aggregator.Aggregator.DeleteTask:input_type -> aggregator.UUID - 6, // 40: aggregator.Aggregator.Ping:input_type -> aggregator.Checkin - 8, // 41: aggregator.Aggregator.SyncTasks:input_type -> aggregator.SyncTasksReq - 35, // 42: aggregator.Aggregator.UpdateChecks:input_type -> aggregator.UpdateChecksReq - 34, // 43: aggregator.Aggregator.GetKey:output_type -> aggregator.KeyResp - 27, // 44: aggregator.Aggregator.GetNonce:output_type -> aggregator.NonceResp - 30, // 45: aggregator.Aggregator.GetSmartAccountAddress:output_type -> aggregator.AddressResp - 38, // 46: aggregator.Aggregator.CreateWallet:output_type -> aggregator.CreateWalletResp - 25, // 47: aggregator.Aggregator.CreateTask:output_type -> aggregator.CreateTaskResp - 32, // 48: aggregator.Aggregator.ListTasks:output_type -> aggregator.ListTasksResp - 23, // 49: aggregator.Aggregator.GetTask:output_type -> aggregator.Task - 43, // 50: aggregator.Aggregator.CancelTask:output_type -> google.protobuf.BoolValue - 43, // 51: aggregator.Aggregator.DeleteTask:output_type -> google.protobuf.BoolValue - 7, // 52: aggregator.Aggregator.Ping:output_type -> aggregator.CheckinResp - 13, // 53: aggregator.Aggregator.SyncTasks:output_type -> aggregator.SyncTasksResp - 36, // 54: aggregator.Aggregator.UpdateChecks:output_type -> aggregator.UpdateChecksResp - 43, // [43:55] is the sub-list for method output_type - 31, // [31:43] is the sub-list for method input_type - 31, // [31:31] is the sub-list for extension type_name - 31, // [31:31] is the sub-list for extension extendee - 0, // [0:31] is the sub-list for field type_name + 23, // 27: aggregator.ListTasksResp.tasks:type_name -> aggregator.Task + 41, // 28: aggregator.UpdateChecksResp.updated_at:type_name -> google.protobuf.Timestamp + 41, // 29: aggregator.Checkin.Status.last_heartbeat:type_name -> google.protobuf.Timestamp + 33, // 30: aggregator.Aggregator.GetKey:input_type -> aggregator.GetKeyReq + 26, // 31: aggregator.Aggregator.GetNonce:input_type -> aggregator.NonceRequest + 28, // 32: aggregator.Aggregator.GetSmartAccountAddress:input_type -> aggregator.AddressRequest + 37, // 33: aggregator.Aggregator.CreateWallet:input_type -> aggregator.CreateWalletReq + 24, // 34: aggregator.Aggregator.CreateTask:input_type -> aggregator.CreateTaskReq + 31, // 35: aggregator.Aggregator.ListTasks:input_type -> aggregator.ListTasksReq + 5, // 36: aggregator.Aggregator.GetTask:input_type -> aggregator.UUID + 5, // 37: aggregator.Aggregator.CancelTask:input_type -> aggregator.UUID + 5, // 38: aggregator.Aggregator.DeleteTask:input_type -> aggregator.UUID + 6, // 39: aggregator.Aggregator.Ping:input_type -> aggregator.Checkin + 8, // 40: aggregator.Aggregator.SyncTasks:input_type -> aggregator.SyncTasksReq + 35, // 41: aggregator.Aggregator.UpdateChecks:input_type -> aggregator.UpdateChecksReq + 34, // 42: aggregator.Aggregator.GetKey:output_type -> aggregator.KeyResp + 27, // 43: aggregator.Aggregator.GetNonce:output_type -> aggregator.NonceResp + 30, // 44: aggregator.Aggregator.GetSmartAccountAddress:output_type -> aggregator.AddressResp + 38, // 45: aggregator.Aggregator.CreateWallet:output_type -> aggregator.CreateWalletResp + 25, // 46: aggregator.Aggregator.CreateTask:output_type -> aggregator.CreateTaskResp + 32, // 47: aggregator.Aggregator.ListTasks:output_type -> aggregator.ListTasksResp + 23, // 48: aggregator.Aggregator.GetTask:output_type -> aggregator.Task + 42, // 49: aggregator.Aggregator.CancelTask:output_type -> google.protobuf.BoolValue + 42, // 50: aggregator.Aggregator.DeleteTask:output_type -> google.protobuf.BoolValue + 7, // 51: aggregator.Aggregator.Ping:output_type -> aggregator.CheckinResp + 13, // 52: aggregator.Aggregator.SyncTasks:output_type -> aggregator.SyncTasksResp + 36, // 53: aggregator.Aggregator.UpdateChecks:output_type -> aggregator.UpdateChecksResp + 42, // [42:54] is the sub-list for method output_type + 30, // [30:42] is the sub-list for method input_type + 30, // [30:30] is the sub-list for extension type_name + 30, // [30:30] is the sub-list for extension extendee + 0, // [0:30] is the sub-list for field type_name } func init() { file_protobuf_avs_proto_init() } @@ -3449,18 +3412,6 @@ func file_protobuf_avs_proto_init() { return nil } } - file_protobuf_avs_proto_msgTypes[36].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ListTasksResp_TaskItemResp); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } } type x struct{} out := protoimpl.TypeBuilder{ @@ -3468,7 +3419,7 @@ func file_protobuf_avs_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_protobuf_avs_proto_rawDesc, NumEnums: 5, - NumMessages: 37, + NumMessages: 36, NumExtensions: 0, NumServices: 1, }, diff --git a/protobuf/avs.proto b/protobuf/avs.proto index 6d54df3..9246165 100644 --- a/protobuf/avs.proto +++ b/protobuf/avs.proto @@ -214,7 +214,7 @@ message Execution { message Task { UUID id = 1; string owner = 2; - string smart_account_address = 3; + string smart_wallet_address = 3; TaskTrigger trigger = 4; repeated TaskAction nodes = 5; @@ -232,14 +232,19 @@ message Task { repeated Execution executions = 12; } + message CreateTaskReq { - TaskTrigger trigger = 1; + TaskTrigger trigger = 1; repeated TaskAction actions = 2; - int64 start_at = 3; - int64 expired_at = 4; - string memo = 5; + int64 start_at = 3; + int64 expired_at = 4; + string memo = 5; // A repeatable task will continue to be run - bool repeatable = 6; + bool repeatable = 6; + + // the smart wallet address that will be used to run this task + // When leaving out, we will use the default(salt=0) wallet + string smart_wallet_address = 7; } message CreateTaskResp { @@ -271,15 +276,14 @@ message AddressResp { repeated SmartWallet wallets = 1; } -message ListTasksReq {} -message ListTasksResp { - message TaskItemResp { - string id = 1; - TaskStatus status = 2; - } +message ListTasksReq { + // Filter out by the smart_wallet_address + string smart_wallet_address = 1; +} - repeated TaskItemResp tasks = 1; +message ListTasksResp { + repeated Task tasks = 1; } message GetKeyReq { diff --git a/storage/db.go b/storage/db.go index 9524b11..9ec6277 100644 --- a/storage/db.go +++ b/storage/db.go @@ -22,6 +22,7 @@ type Storage interface { GetSequence(prefix []byte, inflightItem uint64) (Sequence, error) + Exist(key []byte) (bool, error) GetKey(key []byte) ([]byte, error) GetByPrefix(prefix []byte) ([]*KeyValueItem, error) GetKeyHasPrefix(prefix []byte) ([][]byte, error) @@ -163,6 +164,21 @@ func (s *BadgerStorage) GetKeyHasPrefix(prefix []byte) ([][]byte, error) { return result, nil } +func (s *BadgerStorage) Exist(key []byte) (bool, error) { + found := false + err := s.db.View(func(txn *badger.Txn) error { + _, err := txn.Get(key) + if err != nil { + return err + } + + found = true + return nil + }) + + return found, err +} + func (s *BadgerStorage) GetKey(key []byte) ([]byte, error) { var value []byte