From 849b1f745ad8b6e30329caad643ba6bafd442c2e Mon Sep 17 00:00:00 2001 From: Assaf Morami Date: Wed, 5 Jul 2023 21:58:37 +0300 Subject: [PATCH] Update protobufs to support callback_sig in MsgMigrateContract & Msg{Update,Clear}Admin --- .../secret/compute/v1beta1/msg.pb.ts | 10 ++ .../secret/compute/v1beta1/types.pb.ts | 10 +- src/protobuf/secret/compute/v1beta1/msg.ts | 118 ++++++++++++- src/protobuf/secret/compute/v1beta1/types.ts | 161 ++++++------------ src/tx/compute.ts | 7 + 5 files changed, 186 insertions(+), 120 deletions(-) diff --git a/src/grpc_gateway/secret/compute/v1beta1/msg.pb.ts b/src/grpc_gateway/secret/compute/v1beta1/msg.pb.ts index bd8f84df..c2693a33 100644 --- a/src/grpc_gateway/secret/compute/v1beta1/msg.pb.ts +++ b/src/grpc_gateway/secret/compute/v1beta1/msg.pb.ts @@ -51,6 +51,8 @@ export type MsgMigrateContract = { contract?: string code_id?: string msg?: Uint8Array + callback_sig?: Uint8Array + callback_code_hash?: string } export type MsgMigrateContractResponse = { @@ -61,6 +63,7 @@ export type MsgUpdateAdmin = { sender?: string new_admin?: string contract?: string + callback_sig?: Uint8Array } export type MsgUpdateAdminResponse = { @@ -69,6 +72,7 @@ export type MsgUpdateAdminResponse = { export type MsgClearAdmin = { sender?: string contract?: string + callback_sig?: Uint8Array } export type MsgClearAdminResponse = { @@ -87,4 +91,10 @@ export class Msg { static MigrateContract(req: MsgMigrateContract, initReq?: fm.InitReq): Promise { return fm.fetchReq(`/secret.compute.v1beta1.Msg/MigrateContract`, {...initReq, method: "POST", body: JSON.stringify(req, fm.replacer)}) } + static UpdateAdmin(req: MsgUpdateAdmin, initReq?: fm.InitReq): Promise { + return fm.fetchReq(`/secret.compute.v1beta1.Msg/UpdateAdmin`, {...initReq, method: "POST", body: JSON.stringify(req, fm.replacer)}) + } + static ClearAdmin(req: MsgClearAdmin, initReq?: fm.InitReq): Promise { + return fm.fetchReq(`/secret.compute.v1beta1.Msg/ClearAdmin`, {...initReq, method: "POST", body: JSON.stringify(req, fm.replacer)}) + } } \ No newline at end of file diff --git a/src/grpc_gateway/secret/compute/v1beta1/types.pb.ts b/src/grpc_gateway/secret/compute/v1beta1/types.pb.ts index e5efa946..e8f1f582 100644 --- a/src/grpc_gateway/secret/compute/v1beta1/types.pb.ts +++ b/src/grpc_gateway/secret/compute/v1beta1/types.pb.ts @@ -35,13 +35,9 @@ export type ContractCustomInfo = { } export type ContractKey = { - key?: Uint8Array - original?: ContractKeyWithProof -} - -export type ContractKeyWithProof = { - key?: Uint8Array - proof?: Uint8Array + og_contract_key?: Uint8Array + current_contract_key?: Uint8Array + current_contract_key_proof?: Uint8Array } export type ContractInfo = { diff --git a/src/protobuf/secret/compute/v1beta1/msg.ts b/src/protobuf/secret/compute/v1beta1/msg.ts index c658fee5..099141b8 100644 --- a/src/protobuf/secret/compute/v1beta1/msg.ts +++ b/src/protobuf/secret/compute/v1beta1/msg.ts @@ -52,6 +52,7 @@ export interface MsgExecuteContract { contract: Uint8Array; /** msg is an encrypted input to pass to the contract on execute */ msg: Uint8Array; + /** used internally for encryption, should always be empty in a signed transaction */ callback_code_hash: string; sent_funds: Coin[]; /** used internally for encryption, should always be empty in a signed transaction */ @@ -74,6 +75,10 @@ export interface MsgMigrateContract { code_id: string; /** msg is an encrypted input to pass to the contract on migration */ msg: Uint8Array; + /** used internally for encryption, should always be empty in a signed transaction */ + callback_sig: Uint8Array; + /** used internally for encryption, should always be empty in a signed transaction */ + callback_code_hash: string; } /** MsgMigrateContractResponse returns contract migration result data. */ @@ -93,6 +98,8 @@ export interface MsgUpdateAdmin { new_admin: string; /** Contract is the address of the smart contract */ contract: string; + /** used internally for encryption, should always be empty in a signed transaction */ + callback_sig: Uint8Array; } /** MsgUpdateAdminResponse returns empty data */ @@ -104,6 +111,8 @@ export interface MsgClearAdmin { sender: string; /** Contract is the address of the smart contract */ contract: string; + /** used internally for encryption, should always be empty in a signed transaction */ + callback_sig: Uint8Array; } /** MsgClearAdminResponse returns empty data */ @@ -694,7 +703,14 @@ export const MsgExecuteContractResponse = { }; function createBaseMsgMigrateContract(): MsgMigrateContract { - return { sender: "", contract: "", code_id: "0", msg: new Uint8Array() }; + return { + sender: "", + contract: "", + code_id: "0", + msg: new Uint8Array(), + callback_sig: new Uint8Array(), + callback_code_hash: "", + }; } export const MsgMigrateContract = { @@ -714,6 +730,12 @@ export const MsgMigrateContract = { if (message.msg.length !== 0) { writer.uint32(34).bytes(message.msg); } + if (message.callback_sig.length !== 0) { + writer.uint32(58).bytes(message.callback_sig); + } + if (message.callback_code_hash !== "") { + writer.uint32(66).string(message.callback_code_hash); + } return writer; }, @@ -736,6 +758,12 @@ export const MsgMigrateContract = { case 4: message.msg = reader.bytes(); break; + case 7: + message.callback_sig = reader.bytes(); + break; + case 8: + message.callback_code_hash = reader.string(); + break; default: reader.skipType(tag & 7); break; @@ -750,6 +778,12 @@ export const MsgMigrateContract = { contract: isSet(object.contract) ? String(object.contract) : "", code_id: isSet(object.code_id) ? String(object.code_id) : "0", msg: isSet(object.msg) ? bytesFromBase64(object.msg) : new Uint8Array(), + callback_sig: isSet(object.callback_sig) + ? bytesFromBase64(object.callback_sig) + : new Uint8Array(), + callback_code_hash: isSet(object.callback_code_hash) + ? String(object.callback_code_hash) + : "", }; }, @@ -762,6 +796,14 @@ export const MsgMigrateContract = { (obj.msg = base64FromBytes( message.msg !== undefined ? message.msg : new Uint8Array(), )); + message.callback_sig !== undefined && + (obj.callback_sig = base64FromBytes( + message.callback_sig !== undefined + ? message.callback_sig + : new Uint8Array(), + )); + message.callback_code_hash !== undefined && + (obj.callback_code_hash = message.callback_code_hash); return obj; }, @@ -773,6 +815,8 @@ export const MsgMigrateContract = { message.contract = object.contract ?? ""; message.code_id = object.code_id ?? "0"; message.msg = object.msg ?? new Uint8Array(); + message.callback_sig = object.callback_sig ?? new Uint8Array(); + message.callback_code_hash = object.callback_code_hash ?? ""; return message; }, }; @@ -840,7 +884,12 @@ export const MsgMigrateContractResponse = { }; function createBaseMsgUpdateAdmin(): MsgUpdateAdmin { - return { sender: "", new_admin: "", contract: "" }; + return { + sender: "", + new_admin: "", + contract: "", + callback_sig: new Uint8Array(), + }; } export const MsgUpdateAdmin = { @@ -857,6 +906,9 @@ export const MsgUpdateAdmin = { if (message.contract !== "") { writer.uint32(26).string(message.contract); } + if (message.callback_sig.length !== 0) { + writer.uint32(58).bytes(message.callback_sig); + } return writer; }, @@ -876,6 +928,9 @@ export const MsgUpdateAdmin = { case 3: message.contract = reader.string(); break; + case 7: + message.callback_sig = reader.bytes(); + break; default: reader.skipType(tag & 7); break; @@ -889,6 +944,9 @@ export const MsgUpdateAdmin = { sender: isSet(object.sender) ? String(object.sender) : "", new_admin: isSet(object.new_admin) ? String(object.new_admin) : "", contract: isSet(object.contract) ? String(object.contract) : "", + callback_sig: isSet(object.callback_sig) + ? bytesFromBase64(object.callback_sig) + : new Uint8Array(), }; }, @@ -897,6 +955,12 @@ export const MsgUpdateAdmin = { message.sender !== undefined && (obj.sender = message.sender); message.new_admin !== undefined && (obj.new_admin = message.new_admin); message.contract !== undefined && (obj.contract = message.contract); + message.callback_sig !== undefined && + (obj.callback_sig = base64FromBytes( + message.callback_sig !== undefined + ? message.callback_sig + : new Uint8Array(), + )); return obj; }, @@ -907,6 +971,7 @@ export const MsgUpdateAdmin = { message.sender = object.sender ?? ""; message.new_admin = object.new_admin ?? ""; message.contract = object.contract ?? ""; + message.callback_sig = object.callback_sig ?? new Uint8Array(); return message; }, }; @@ -959,7 +1024,7 @@ export const MsgUpdateAdminResponse = { }; function createBaseMsgClearAdmin(): MsgClearAdmin { - return { sender: "", contract: "" }; + return { sender: "", contract: "", callback_sig: new Uint8Array() }; } export const MsgClearAdmin = { @@ -973,6 +1038,9 @@ export const MsgClearAdmin = { if (message.contract !== "") { writer.uint32(26).string(message.contract); } + if (message.callback_sig.length !== 0) { + writer.uint32(58).bytes(message.callback_sig); + } return writer; }, @@ -989,6 +1057,9 @@ export const MsgClearAdmin = { case 3: message.contract = reader.string(); break; + case 7: + message.callback_sig = reader.bytes(); + break; default: reader.skipType(tag & 7); break; @@ -1001,6 +1072,9 @@ export const MsgClearAdmin = { return { sender: isSet(object.sender) ? String(object.sender) : "", contract: isSet(object.contract) ? String(object.contract) : "", + callback_sig: isSet(object.callback_sig) + ? bytesFromBase64(object.callback_sig) + : new Uint8Array(), }; }, @@ -1008,6 +1082,12 @@ export const MsgClearAdmin = { const obj: any = {}; message.sender !== undefined && (obj.sender = message.sender); message.contract !== undefined && (obj.contract = message.contract); + message.callback_sig !== undefined && + (obj.callback_sig = base64FromBytes( + message.callback_sig !== undefined + ? message.callback_sig + : new Uint8Array(), + )); return obj; }, @@ -1017,6 +1097,7 @@ export const MsgClearAdmin = { const message = createBaseMsgClearAdmin(); message.sender = object.sender ?? ""; message.contract = object.contract ?? ""; + message.callback_sig = object.callback_sig ?? new Uint8Array(); return message; }, }; @@ -1080,9 +1161,14 @@ export interface Msg { ExecuteContract( request: MsgExecuteContract, ): Promise; + /** Migrate runs a code upgrade/ downgrade for a smart contract */ MigrateContract( request: MsgMigrateContract, ): Promise; + /** UpdateAdmin sets a new admin for a smart contract */ + UpdateAdmin(request: MsgUpdateAdmin): Promise; + /** ClearAdmin removes any admin stored for a smart contract */ + ClearAdmin(request: MsgClearAdmin): Promise; } export class MsgClientImpl implements Msg { @@ -1093,6 +1179,8 @@ export class MsgClientImpl implements Msg { this.InstantiateContract = this.InstantiateContract.bind(this); this.ExecuteContract = this.ExecuteContract.bind(this); this.MigrateContract = this.MigrateContract.bind(this); + this.UpdateAdmin = this.UpdateAdmin.bind(this); + this.ClearAdmin = this.ClearAdmin.bind(this); } StoreCode(request: MsgStoreCode): Promise { const data = MsgStoreCode.encode(request).finish(); @@ -1147,6 +1235,30 @@ export class MsgClientImpl implements Msg { MsgMigrateContractResponse.decode(new _m0.Reader(data)), ); } + + UpdateAdmin(request: MsgUpdateAdmin): Promise { + const data = MsgUpdateAdmin.encode(request).finish(); + const promise = this.rpc.request( + "secret.compute.v1beta1.Msg", + "UpdateAdmin", + data, + ); + return promise.then((data) => + MsgUpdateAdminResponse.decode(new _m0.Reader(data)), + ); + } + + ClearAdmin(request: MsgClearAdmin): Promise { + const data = MsgClearAdmin.encode(request).finish(); + const promise = this.rpc.request( + "secret.compute.v1beta1.Msg", + "ClearAdmin", + data, + ); + return promise.then((data) => + MsgClearAdminResponse.decode(new _m0.Reader(data)), + ); + } } interface Rpc { diff --git a/src/protobuf/secret/compute/v1beta1/types.ts b/src/protobuf/secret/compute/v1beta1/types.ts index da3afe5a..25cc2389 100644 --- a/src/protobuf/secret/compute/v1beta1/types.ts +++ b/src/protobuf/secret/compute/v1beta1/types.ts @@ -119,13 +119,9 @@ export interface ContractCustomInfo { } export interface ContractKey { - key: Uint8Array; - original?: ContractKeyWithProof; -} - -export interface ContractKeyWithProof { - key: Uint8Array; - proof: Uint8Array; + og_contract_key: Uint8Array; + current_contract_key: Uint8Array; + current_contract_key_proof: Uint8Array; } /** ContractInfo stores a WASM contract instance */ @@ -391,7 +387,11 @@ export const ContractCustomInfo = { }; function createBaseContractKey(): ContractKey { - return { key: new Uint8Array(), original: undefined }; + return { + og_contract_key: new Uint8Array(), + current_contract_key: new Uint8Array(), + current_contract_key_proof: new Uint8Array(), + }; } export const ContractKey = { @@ -399,14 +399,14 @@ export const ContractKey = { message: ContractKey, writer: _m0.Writer = _m0.Writer.create(), ): _m0.Writer { - if (message.key.length !== 0) { - writer.uint32(10).bytes(message.key); + if (message.og_contract_key.length !== 0) { + writer.uint32(10).bytes(message.og_contract_key); } - if (message.original !== undefined) { - ContractKeyWithProof.encode( - message.original, - writer.uint32(18).fork(), - ).ldelim(); + if (message.current_contract_key.length !== 0) { + writer.uint32(18).bytes(message.current_contract_key); + } + if (message.current_contract_key_proof.length !== 0) { + writer.uint32(26).bytes(message.current_contract_key_proof); } return writer; }, @@ -419,13 +419,13 @@ export const ContractKey = { const tag = reader.uint32(); switch (tag >>> 3) { case 1: - message.key = reader.bytes(); + message.og_contract_key = reader.bytes(); break; case 2: - message.original = ContractKeyWithProof.decode( - reader, - reader.uint32(), - ); + message.current_contract_key = reader.bytes(); + break; + case 3: + message.current_contract_key_proof = reader.bytes(); break; default: reader.skipType(tag & 7); @@ -437,23 +437,38 @@ export const ContractKey = { fromJSON(object: any): ContractKey { return { - key: isSet(object.key) ? bytesFromBase64(object.key) : new Uint8Array(), - original: isSet(object.original) - ? ContractKeyWithProof.fromJSON(object.original) - : undefined, + og_contract_key: isSet(object.og_contract_key) + ? bytesFromBase64(object.og_contract_key) + : new Uint8Array(), + current_contract_key: isSet(object.current_contract_key) + ? bytesFromBase64(object.current_contract_key) + : new Uint8Array(), + current_contract_key_proof: isSet(object.current_contract_key_proof) + ? bytesFromBase64(object.current_contract_key_proof) + : new Uint8Array(), }; }, toJSON(message: ContractKey): unknown { const obj: any = {}; - message.key !== undefined && - (obj.key = base64FromBytes( - message.key !== undefined ? message.key : new Uint8Array(), + message.og_contract_key !== undefined && + (obj.og_contract_key = base64FromBytes( + message.og_contract_key !== undefined + ? message.og_contract_key + : new Uint8Array(), + )); + message.current_contract_key !== undefined && + (obj.current_contract_key = base64FromBytes( + message.current_contract_key !== undefined + ? message.current_contract_key + : new Uint8Array(), + )); + message.current_contract_key_proof !== undefined && + (obj.current_contract_key_proof = base64FromBytes( + message.current_contract_key_proof !== undefined + ? message.current_contract_key_proof + : new Uint8Array(), )); - message.original !== undefined && - (obj.original = message.original - ? ContractKeyWithProof.toJSON(message.original) - : undefined); return obj; }, @@ -461,85 +476,11 @@ export const ContractKey = { object: I, ): ContractKey { const message = createBaseContractKey(); - message.key = object.key ?? new Uint8Array(); - message.original = - object.original !== undefined && object.original !== null - ? ContractKeyWithProof.fromPartial(object.original) - : undefined; - return message; - }, -}; - -function createBaseContractKeyWithProof(): ContractKeyWithProof { - return { key: new Uint8Array(), proof: new Uint8Array() }; -} - -export const ContractKeyWithProof = { - encode( - message: ContractKeyWithProof, - writer: _m0.Writer = _m0.Writer.create(), - ): _m0.Writer { - if (message.key.length !== 0) { - writer.uint32(10).bytes(message.key); - } - if (message.proof.length !== 0) { - writer.uint32(18).bytes(message.proof); - } - return writer; - }, - - decode( - input: _m0.Reader | Uint8Array, - length?: number, - ): ContractKeyWithProof { - const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input); - let end = length === undefined ? reader.len : reader.pos + length; - const message = createBaseContractKeyWithProof(); - while (reader.pos < end) { - const tag = reader.uint32(); - switch (tag >>> 3) { - case 1: - message.key = reader.bytes(); - break; - case 2: - message.proof = reader.bytes(); - break; - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }, - - fromJSON(object: any): ContractKeyWithProof { - return { - key: isSet(object.key) ? bytesFromBase64(object.key) : new Uint8Array(), - proof: isSet(object.proof) - ? bytesFromBase64(object.proof) - : new Uint8Array(), - }; - }, - - toJSON(message: ContractKeyWithProof): unknown { - const obj: any = {}; - message.key !== undefined && - (obj.key = base64FromBytes( - message.key !== undefined ? message.key : new Uint8Array(), - )); - message.proof !== undefined && - (obj.proof = base64FromBytes( - message.proof !== undefined ? message.proof : new Uint8Array(), - )); - return obj; - }, - - fromPartial, I>>( - object: I, - ): ContractKeyWithProof { - const message = createBaseContractKeyWithProof(); - message.key = object.key ?? new Uint8Array(); - message.proof = object.proof ?? new Uint8Array(); + message.og_contract_key = object.og_contract_key ?? new Uint8Array(); + message.current_contract_key = + object.current_contract_key ?? new Uint8Array(); + message.current_contract_key_proof = + object.current_contract_key_proof ?? new Uint8Array(); return message; }, }; diff --git a/src/tx/compute.ts b/src/tx/compute.ts index 5f921e5f..39723bc9 100644 --- a/src/tx/compute.ts +++ b/src/tx/compute.ts @@ -391,6 +391,9 @@ export class MsgMigrateContract implements Msg { contract: this.contractAddress, msg: this.msgEncrypted, code_id: this.codeId, + // callback_sig & callback_code_hash are internal stuff that doesn't matter here + callback_sig: new Uint8Array(), + callback_code_hash: "", }; return { @@ -450,6 +453,8 @@ export class MsgUpdateAdmin implements Msg { sender: this.params.sender, new_admin: this.params.new_admin, contract: this.params.contract_address, + // callback_sig is internal stuff that doesn't matter here + callback_sig: new Uint8Array(), }).finish(), }; } @@ -487,6 +492,8 @@ export class MsgClearAdmin implements Msg { ).MsgClearAdmin.encode({ sender: this.params.sender, contract: this.params.contract_address, + // callback_sig is internal stuff that doesn't matter here + callback_sig: new Uint8Array(), }).finish(), }; }