diff --git a/api/gen/csharp/Gnonativetypes.cs b/api/gen/csharp/Gnonativetypes.cs
index c96f7ba..bcd657d 100644
--- a/api/gen/csharp/Gnonativetypes.cs
+++ b/api/gen/csharp/Gnonativetypes.cs
@@ -129,36 +129,42 @@ static GnonativetypesReflection() {
"c29uEhgKB2FkZHJlc3MYAiABKAxSB2FkZHJlc3MSJQoOYWNjb3VudF9udW1i",
"ZXIYAyABKARSDWFjY291bnROdW1iZXISJwoPc2VxdWVuY2VfbnVtYmVyGAQg",
"ASgEUg5zZXF1ZW5jZU51bWJlciIxCg5TaWduVHhSZXNwb25zZRIfCg5zaWdu",
- "ZWRfdHhfanNvbhgBIAEoCVIHdHhfanNvbiLdAQoSRXN0aW1hdGVHYXNSZXF1",
+ "ZWRfdHhfanNvbhgBIAEoCVIHdHhfanNvbiKNAQoSRXN0aW1hdGVHYXNSZXF1",
"ZXN0EhcKB3R4X2pzb24YASABKAlSBnR4SnNvbhIYCgdhZGRyZXNzGAIgASgM",
"UgdhZGRyZXNzEicKD3NlY3VyaXR5X21hcmdpbhgDIAEoDVIOc2VjdXJpdHlN",
- "YXJnaW4SGwoJdXBkYXRlX3R4GAQgASgIUgh1cGRhdGVUeBIlCg5hY2NvdW50",
- "X251bWJlchgFIAEoBFINYWNjb3VudE51bWJlchInCg9zZXF1ZW5jZV9udW1i",
- "ZXIYBiABKARSDnNlcXVlbmNlTnVtYmVyIk0KE0VzdGltYXRlR2FzUmVzcG9u",
- "c2USFwoHdHhfanNvbhgBIAEoCVIGdHhKc29uEh0KCmdhc193YW50ZWQYAiAB",
- "KBJSCWdhc1dhbnRlZCI7ChhCcm9hZGNhc3RUeENvbW1pdFJlcXVlc3QSHwoO",
- "c2lnbmVkX3R4X2pzb24YASABKAlSB3R4X2pzb24iXwoZQnJvYWRjYXN0VHhD",
- "b21taXRSZXNwb25zZRIWCgZyZXN1bHQYASABKAxSBnJlc3VsdBISCgRoYXNo",
- "GAIgASgMUgRoYXNoEhYKBmhlaWdodBgDIAEoElIGaGVpZ2h0IjIKFkFkZHJl",
- "c3NUb0JlY2gzMlJlcXVlc3QSGAoHYWRkcmVzcxgBIAEoDFIHYWRkcmVzcyJA",
- "ChdBZGRyZXNzVG9CZWNoMzJSZXNwb25zZRIlCg5iZWNoMzJfYWRkcmVzcxgB",
- "IAEoCVINYmVjaDMyQWRkcmVzcyJBChhBZGRyZXNzRnJvbUJlY2gzMlJlcXVl",
- "c3QSJQoOYmVjaDMyX2FkZHJlc3MYASABKAlSDWJlY2gzMkFkZHJlc3MiNQoZ",
- "QWRkcmVzc0Zyb21CZWNoMzJSZXNwb25zZRIYCgdhZGRyZXNzGAEgASgMUgdh",
- "ZGRyZXNzIjgKGkFkZHJlc3NGcm9tTW5lbW9uaWNSZXF1ZXN0EhoKCG1uZW1v",
- "bmljGAEgASgJUghtbmVtb25pYyI3ChtBZGRyZXNzRnJvbU1uZW1vbmljUmVz",
- "cG9uc2USGAoHYWRkcmVzcxgBIAEoDFIHYWRkcmVzcyIxChtWYWxpZGF0ZU1u",
- "ZW1vbmljV29yZFJlcXVlc3QSEgoEd29yZBgBIAEoCVIEd29yZCI0ChxWYWxp",
- "ZGF0ZU1uZW1vbmljV29yZFJlc3BvbnNlEhQKBXZhbGlkGAEgASgIUgV2YWxp",
- "ZCI3Ch1WYWxpZGF0ZU1uZW1vbmljUGhyYXNlUmVxdWVzdBIWCgZwaHJhc2UY",
- "ASABKAlSBnBocmFzZSI2Ch5WYWxpZGF0ZU1uZW1vbmljUGhyYXNlUmVzcG9u",
- "c2USFAoFdmFsaWQYASABKAhSBXZhbGlkIiIKDEhlbGxvUmVxdWVzdBISCgRu",
- "YW1lGAEgASgJUgROYW1lIisKDUhlbGxvUmVzcG9uc2USGgoIZ3JlZXRpbmcY",
- "ASABKAlSCEdyZWV0aW5nIigKEkhlbGxvU3RyZWFtUmVxdWVzdBISCgRuYW1l",
- "GAEgASgJUgROYW1lIjEKE0hlbGxvU3RyZWFtUmVzcG9uc2USGgoIZ3JlZXRp",
- "bmcYASABKAlSCEdyZWV0aW5nIjAKGEdOT05BVElWRVRZUEVTX0J5dGVzTGlz",
- "dBIUCgVWYWx1ZRgBIAMoDFIFVmFsdWVCLFoqZ2l0aHViLmNvbS9nbm9sYW5n",
- "L2dub25hdGl2ZS92NC9hcGkvZ2VuL2dvYgZwcm90bzM="));
+ "YXJnaW4SGwoJdXBkYXRlX3R4GAQgASgIUgh1cGRhdGVUeCJNChNFc3RpbWF0",
+ "ZUdhc1Jlc3BvbnNlEhcKB3R4X2pzb24YASABKAlSBnR4SnNvbhIdCgpnYXNf",
+ "d2FudGVkGAIgASgSUglnYXNXYW50ZWQiywEKFUVzdGltYXRlR2FzRmVlUmVx",
+ "dWVzdBIXCgd0eF9qc29uGAEgASgJUgZ0eEpzb24SGAoHYWRkcmVzcxgCIAEo",
+ "DFIHYWRkcmVzcxIuChNnYXNfc2VjdXJpdHlfbWFyZ2luGAMgASgNUhFnYXNT",
+ "ZWN1cml0eU1hcmdpbhIyChVwcmljZV9zZWN1cml0eV9tYXJnaW4YBCABKA1S",
+ "E3ByaWNlU2VjdXJpdHlNYXJnaW4SGwoJdXBkYXRlX3R4GAUgASgIUgh1cGRh",
+ "dGVUeCJ/ChZFc3RpbWF0ZUdhc0ZlZVJlc3BvbnNlEhcKB3R4X2pzb24YASAB",
+ "KAlSBnR4SnNvbhIdCgpnYXNfd2FudGVkGAIgASgSUglnYXNXYW50ZWQSLQoD",
+ "ZmVlGAMgASgLMhsubGFuZC5nbm8uZ25vbmF0aXZlLnYxLkNvaW5SA2ZlZSI7",
+ "ChhCcm9hZGNhc3RUeENvbW1pdFJlcXVlc3QSHwoOc2lnbmVkX3R4X2pzb24Y",
+ "ASABKAlSB3R4X2pzb24iXwoZQnJvYWRjYXN0VHhDb21taXRSZXNwb25zZRIW",
+ "CgZyZXN1bHQYASABKAxSBnJlc3VsdBISCgRoYXNoGAIgASgMUgRoYXNoEhYK",
+ "BmhlaWdodBgDIAEoElIGaGVpZ2h0IjIKFkFkZHJlc3NUb0JlY2gzMlJlcXVl",
+ "c3QSGAoHYWRkcmVzcxgBIAEoDFIHYWRkcmVzcyJAChdBZGRyZXNzVG9CZWNo",
+ "MzJSZXNwb25zZRIlCg5iZWNoMzJfYWRkcmVzcxgBIAEoCVINYmVjaDMyQWRk",
+ "cmVzcyJBChhBZGRyZXNzRnJvbUJlY2gzMlJlcXVlc3QSJQoOYmVjaDMyX2Fk",
+ "ZHJlc3MYASABKAlSDWJlY2gzMkFkZHJlc3MiNQoZQWRkcmVzc0Zyb21CZWNo",
+ "MzJSZXNwb25zZRIYCgdhZGRyZXNzGAEgASgMUgdhZGRyZXNzIjgKGkFkZHJl",
+ "c3NGcm9tTW5lbW9uaWNSZXF1ZXN0EhoKCG1uZW1vbmljGAEgASgJUghtbmVt",
+ "b25pYyI3ChtBZGRyZXNzRnJvbU1uZW1vbmljUmVzcG9uc2USGAoHYWRkcmVz",
+ "cxgBIAEoDFIHYWRkcmVzcyIxChtWYWxpZGF0ZU1uZW1vbmljV29yZFJlcXVl",
+ "c3QSEgoEd29yZBgBIAEoCVIEd29yZCI0ChxWYWxpZGF0ZU1uZW1vbmljV29y",
+ "ZFJlc3BvbnNlEhQKBXZhbGlkGAEgASgIUgV2YWxpZCI3Ch1WYWxpZGF0ZU1u",
+ "ZW1vbmljUGhyYXNlUmVxdWVzdBIWCgZwaHJhc2UYASABKAlSBnBocmFzZSI2",
+ "Ch5WYWxpZGF0ZU1uZW1vbmljUGhyYXNlUmVzcG9uc2USFAoFdmFsaWQYASAB",
+ "KAhSBXZhbGlkIiIKDEhlbGxvUmVxdWVzdBISCgRuYW1lGAEgASgJUgROYW1l",
+ "IisKDUhlbGxvUmVzcG9uc2USGgoIZ3JlZXRpbmcYASABKAlSCEdyZWV0aW5n",
+ "IigKEkhlbGxvU3RyZWFtUmVxdWVzdBISCgRuYW1lGAEgASgJUgROYW1lIjEK",
+ "E0hlbGxvU3RyZWFtUmVzcG9uc2USGgoIZ3JlZXRpbmcYASABKAlSCEdyZWV0",
+ "aW5nIjAKGEdOT05BVElWRVRZUEVTX0J5dGVzTGlzdBIUCgVWYWx1ZRgBIAMo",
+ "DFIFVmFsdWVCLFoqZ2l0aHViLmNvbS9nbm9sYW5nL2dub25hdGl2ZS92NC9h",
+ "cGkvZ2VuL2dvYgZwcm90bzM="));
descriptor = pbr::FileDescriptor.FromGeneratedCode(descriptorData,
new pbr::FileDescriptor[] { },
new pbr::GeneratedClrTypeInfo(null, null, new pbr::GeneratedClrTypeInfo[] {
@@ -223,8 +229,10 @@ static GnonativetypesReflection() {
new pbr::GeneratedClrTypeInfo(typeof(global::Land.Gno.Gnonative.V1.MakeTxResponse), global::Land.Gno.Gnonative.V1.MakeTxResponse.Parser, new[]{ "TxJson" }, null, null, null, null),
new pbr::GeneratedClrTypeInfo(typeof(global::Land.Gno.Gnonative.V1.SignTxRequest), global::Land.Gno.Gnonative.V1.SignTxRequest.Parser, new[]{ "TxJson", "Address", "AccountNumber", "SequenceNumber" }, null, null, null, null),
new pbr::GeneratedClrTypeInfo(typeof(global::Land.Gno.Gnonative.V1.SignTxResponse), global::Land.Gno.Gnonative.V1.SignTxResponse.Parser, new[]{ "SignedTxJson" }, null, null, null, null),
- new pbr::GeneratedClrTypeInfo(typeof(global::Land.Gno.Gnonative.V1.EstimateGasRequest), global::Land.Gno.Gnonative.V1.EstimateGasRequest.Parser, new[]{ "TxJson", "Address", "SecurityMargin", "UpdateTx", "AccountNumber", "SequenceNumber" }, null, null, null, null),
+ new pbr::GeneratedClrTypeInfo(typeof(global::Land.Gno.Gnonative.V1.EstimateGasRequest), global::Land.Gno.Gnonative.V1.EstimateGasRequest.Parser, new[]{ "TxJson", "Address", "SecurityMargin", "UpdateTx" }, null, null, null, null),
new pbr::GeneratedClrTypeInfo(typeof(global::Land.Gno.Gnonative.V1.EstimateGasResponse), global::Land.Gno.Gnonative.V1.EstimateGasResponse.Parser, new[]{ "TxJson", "GasWanted" }, null, null, null, null),
+ new pbr::GeneratedClrTypeInfo(typeof(global::Land.Gno.Gnonative.V1.EstimateGasFeeRequest), global::Land.Gno.Gnonative.V1.EstimateGasFeeRequest.Parser, new[]{ "TxJson", "Address", "GasSecurityMargin", "PriceSecurityMargin", "UpdateTx" }, null, null, null, null),
+ new pbr::GeneratedClrTypeInfo(typeof(global::Land.Gno.Gnonative.V1.EstimateGasFeeResponse), global::Land.Gno.Gnonative.V1.EstimateGasFeeResponse.Parser, new[]{ "TxJson", "GasWanted", "Fee" }, null, null, null, null),
new pbr::GeneratedClrTypeInfo(typeof(global::Land.Gno.Gnonative.V1.BroadcastTxCommitRequest), global::Land.Gno.Gnonative.V1.BroadcastTxCommitRequest.Parser, new[]{ "SignedTxJson" }, null, null, null, null),
new pbr::GeneratedClrTypeInfo(typeof(global::Land.Gno.Gnonative.V1.BroadcastTxCommitResponse), global::Land.Gno.Gnonative.V1.BroadcastTxCommitResponse.Parser, new[]{ "Result", "Hash", "Height" }, null, null, null, null),
new pbr::GeneratedClrTypeInfo(typeof(global::Land.Gno.Gnonative.V1.AddressToBech32Request), global::Land.Gno.Gnonative.V1.AddressToBech32Request.Parser, new[]{ "Address" }, null, null, null, null),
@@ -14084,15 +14092,578 @@ public EstimateGasRequest(EstimateGasRequest other) : this() {
address_ = other.address_;
securityMargin_ = other.securityMargin_;
updateTx_ = other.updateTx_;
- accountNumber_ = other.accountNumber_;
- sequenceNumber_ = other.sequenceNumber_;
_unknownFields = pb::UnknownFieldSet.Clone(other._unknownFields);
}
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
[global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
- public EstimateGasRequest Clone() {
- return new EstimateGasRequest(this);
+ public EstimateGasRequest Clone() {
+ return new EstimateGasRequest(this);
+ }
+
+ /// Field number for the "tx_json" field.
+ public const int TxJsonFieldNumber = 1;
+ private string txJson_ = "";
+ ///
+ /// The JSON encoding of the unsigned transaction (from MakeCallTx, etc.)
+ ///
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
+ public string TxJson {
+ get { return txJson_; }
+ set {
+ txJson_ = pb::ProtoPreconditions.CheckNotNull(value, "value");
+ }
+ }
+
+ /// Field number for the "address" field.
+ public const int AddressFieldNumber = 2;
+ private pb::ByteString address_ = pb::ByteString.Empty;
+ ///
+ /// The address of the account to sign the transaction
+ ///
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
+ public pb::ByteString Address {
+ get { return address_; }
+ set {
+ address_ = pb::ProtoPreconditions.CheckNotNull(value, "value");
+ }
+ }
+
+ /// Field number for the "security_margin" field.
+ public const int SecurityMarginFieldNumber = 3;
+ private uint securityMargin_;
+ ///
+ /// The security margin to apply to the estimated gas amount.
+ /// This number represents a decimal numeral value with two decimals precision, without the decimal separator. E.g. 1 means 0.01 and 10000 means 100.00.
+ /// It will be multiplied by the estimated gas amount.
+ ///
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
+ public uint SecurityMargin {
+ get { return securityMargin_; }
+ set {
+ securityMargin_ = value;
+ }
+ }
+
+ /// Field number for the "update_tx" field.
+ public const int UpdateTxFieldNumber = 4;
+ private bool updateTx_;
+ ///
+ /// The update boolean to update the gas wanted field in the transaction if true.
+ ///
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
+ public bool UpdateTx {
+ get { return updateTx_; }
+ set {
+ updateTx_ = value;
+ }
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
+ public override bool Equals(object other) {
+ return Equals(other as EstimateGasRequest);
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
+ public bool Equals(EstimateGasRequest other) {
+ if (ReferenceEquals(other, null)) {
+ return false;
+ }
+ if (ReferenceEquals(other, this)) {
+ return true;
+ }
+ if (TxJson != other.TxJson) return false;
+ if (Address != other.Address) return false;
+ if (SecurityMargin != other.SecurityMargin) return false;
+ if (UpdateTx != other.UpdateTx) return false;
+ return Equals(_unknownFields, other._unknownFields);
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
+ public override int GetHashCode() {
+ int hash = 1;
+ if (TxJson.Length != 0) hash ^= TxJson.GetHashCode();
+ if (Address.Length != 0) hash ^= Address.GetHashCode();
+ if (SecurityMargin != 0) hash ^= SecurityMargin.GetHashCode();
+ if (UpdateTx != false) hash ^= UpdateTx.GetHashCode();
+ if (_unknownFields != null) {
+ hash ^= _unknownFields.GetHashCode();
+ }
+ return hash;
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
+ public override string ToString() {
+ return pb::JsonFormatter.ToDiagnosticString(this);
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
+ public void WriteTo(pb::CodedOutputStream output) {
+ #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE
+ output.WriteRawMessage(this);
+ #else
+ if (TxJson.Length != 0) {
+ output.WriteRawTag(10);
+ output.WriteString(TxJson);
+ }
+ if (Address.Length != 0) {
+ output.WriteRawTag(18);
+ output.WriteBytes(Address);
+ }
+ if (SecurityMargin != 0) {
+ output.WriteRawTag(24);
+ output.WriteUInt32(SecurityMargin);
+ }
+ if (UpdateTx != false) {
+ output.WriteRawTag(32);
+ output.WriteBool(UpdateTx);
+ }
+ if (_unknownFields != null) {
+ _unknownFields.WriteTo(output);
+ }
+ #endif
+ }
+
+ #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
+ void pb::IBufferMessage.InternalWriteTo(ref pb::WriteContext output) {
+ if (TxJson.Length != 0) {
+ output.WriteRawTag(10);
+ output.WriteString(TxJson);
+ }
+ if (Address.Length != 0) {
+ output.WriteRawTag(18);
+ output.WriteBytes(Address);
+ }
+ if (SecurityMargin != 0) {
+ output.WriteRawTag(24);
+ output.WriteUInt32(SecurityMargin);
+ }
+ if (UpdateTx != false) {
+ output.WriteRawTag(32);
+ output.WriteBool(UpdateTx);
+ }
+ if (_unknownFields != null) {
+ _unknownFields.WriteTo(ref output);
+ }
+ }
+ #endif
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
+ public int CalculateSize() {
+ int size = 0;
+ if (TxJson.Length != 0) {
+ size += 1 + pb::CodedOutputStream.ComputeStringSize(TxJson);
+ }
+ if (Address.Length != 0) {
+ size += 1 + pb::CodedOutputStream.ComputeBytesSize(Address);
+ }
+ if (SecurityMargin != 0) {
+ size += 1 + pb::CodedOutputStream.ComputeUInt32Size(SecurityMargin);
+ }
+ if (UpdateTx != false) {
+ size += 1 + 1;
+ }
+ if (_unknownFields != null) {
+ size += _unknownFields.CalculateSize();
+ }
+ return size;
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
+ public void MergeFrom(EstimateGasRequest other) {
+ if (other == null) {
+ return;
+ }
+ if (other.TxJson.Length != 0) {
+ TxJson = other.TxJson;
+ }
+ if (other.Address.Length != 0) {
+ Address = other.Address;
+ }
+ if (other.SecurityMargin != 0) {
+ SecurityMargin = other.SecurityMargin;
+ }
+ if (other.UpdateTx != false) {
+ UpdateTx = other.UpdateTx;
+ }
+ _unknownFields = pb::UnknownFieldSet.MergeFrom(_unknownFields, other._unknownFields);
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
+ public void MergeFrom(pb::CodedInputStream input) {
+ #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE
+ input.ReadRawMessage(this);
+ #else
+ uint tag;
+ while ((tag = input.ReadTag()) != 0) {
+ if ((tag & 7) == 4) {
+ // Abort on any end group tag.
+ return;
+ }
+ switch(tag) {
+ default:
+ _unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, input);
+ break;
+ case 10: {
+ TxJson = input.ReadString();
+ break;
+ }
+ case 18: {
+ Address = input.ReadBytes();
+ break;
+ }
+ case 24: {
+ SecurityMargin = input.ReadUInt32();
+ break;
+ }
+ case 32: {
+ UpdateTx = input.ReadBool();
+ break;
+ }
+ }
+ }
+ #endif
+ }
+
+ #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
+ void pb::IBufferMessage.InternalMergeFrom(ref pb::ParseContext input) {
+ uint tag;
+ while ((tag = input.ReadTag()) != 0) {
+ if ((tag & 7) == 4) {
+ // Abort on any end group tag.
+ return;
+ }
+ switch(tag) {
+ default:
+ _unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, ref input);
+ break;
+ case 10: {
+ TxJson = input.ReadString();
+ break;
+ }
+ case 18: {
+ Address = input.ReadBytes();
+ break;
+ }
+ case 24: {
+ SecurityMargin = input.ReadUInt32();
+ break;
+ }
+ case 32: {
+ UpdateTx = input.ReadBool();
+ break;
+ }
+ }
+ }
+ }
+ #endif
+
+ }
+
+ [global::System.Diagnostics.DebuggerDisplayAttribute("{ToString(),nq}")]
+ public sealed partial class EstimateGasResponse : pb::IMessage
+ #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE
+ , pb::IBufferMessage
+ #endif
+ {
+ private static readonly pb::MessageParser _parser = new pb::MessageParser(() => new EstimateGasResponse());
+ private pb::UnknownFieldSet _unknownFields;
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
+ public static pb::MessageParser Parser { get { return _parser; } }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
+ public static pbr::MessageDescriptor Descriptor {
+ get { return global::Land.Gno.Gnonative.V1.GnonativetypesReflection.Descriptor.MessageTypes[62]; }
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
+ pbr::MessageDescriptor pb::IMessage.Descriptor {
+ get { return Descriptor; }
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
+ public EstimateGasResponse() {
+ OnConstruction();
+ }
+
+ partial void OnConstruction();
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
+ public EstimateGasResponse(EstimateGasResponse other) : this() {
+ txJson_ = other.txJson_;
+ gasWanted_ = other.gasWanted_;
+ _unknownFields = pb::UnknownFieldSet.Clone(other._unknownFields);
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
+ public EstimateGasResponse Clone() {
+ return new EstimateGasResponse(this);
+ }
+
+ /// Field number for the "tx_json" field.
+ public const int TxJsonFieldNumber = 1;
+ private string txJson_ = "";
+ ///
+ /// The JSON encoding of the unsigned transaction
+ ///
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
+ public string TxJson {
+ get { return txJson_; }
+ set {
+ txJson_ = pb::ProtoPreconditions.CheckNotNull(value, "value");
+ }
+ }
+
+ /// Field number for the "gas_wanted" field.
+ public const int GasWantedFieldNumber = 2;
+ private long gasWanted_;
+ ///
+ /// The estimated gas wanted for the transaction
+ ///
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
+ public long GasWanted {
+ get { return gasWanted_; }
+ set {
+ gasWanted_ = value;
+ }
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
+ public override bool Equals(object other) {
+ return Equals(other as EstimateGasResponse);
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
+ public bool Equals(EstimateGasResponse other) {
+ if (ReferenceEquals(other, null)) {
+ return false;
+ }
+ if (ReferenceEquals(other, this)) {
+ return true;
+ }
+ if (TxJson != other.TxJson) return false;
+ if (GasWanted != other.GasWanted) return false;
+ return Equals(_unknownFields, other._unknownFields);
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
+ public override int GetHashCode() {
+ int hash = 1;
+ if (TxJson.Length != 0) hash ^= TxJson.GetHashCode();
+ if (GasWanted != 0L) hash ^= GasWanted.GetHashCode();
+ if (_unknownFields != null) {
+ hash ^= _unknownFields.GetHashCode();
+ }
+ return hash;
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
+ public override string ToString() {
+ return pb::JsonFormatter.ToDiagnosticString(this);
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
+ public void WriteTo(pb::CodedOutputStream output) {
+ #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE
+ output.WriteRawMessage(this);
+ #else
+ if (TxJson.Length != 0) {
+ output.WriteRawTag(10);
+ output.WriteString(TxJson);
+ }
+ if (GasWanted != 0L) {
+ output.WriteRawTag(16);
+ output.WriteSInt64(GasWanted);
+ }
+ if (_unknownFields != null) {
+ _unknownFields.WriteTo(output);
+ }
+ #endif
+ }
+
+ #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
+ void pb::IBufferMessage.InternalWriteTo(ref pb::WriteContext output) {
+ if (TxJson.Length != 0) {
+ output.WriteRawTag(10);
+ output.WriteString(TxJson);
+ }
+ if (GasWanted != 0L) {
+ output.WriteRawTag(16);
+ output.WriteSInt64(GasWanted);
+ }
+ if (_unknownFields != null) {
+ _unknownFields.WriteTo(ref output);
+ }
+ }
+ #endif
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
+ public int CalculateSize() {
+ int size = 0;
+ if (TxJson.Length != 0) {
+ size += 1 + pb::CodedOutputStream.ComputeStringSize(TxJson);
+ }
+ if (GasWanted != 0L) {
+ size += 1 + pb::CodedOutputStream.ComputeSInt64Size(GasWanted);
+ }
+ if (_unknownFields != null) {
+ size += _unknownFields.CalculateSize();
+ }
+ return size;
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
+ public void MergeFrom(EstimateGasResponse other) {
+ if (other == null) {
+ return;
+ }
+ if (other.TxJson.Length != 0) {
+ TxJson = other.TxJson;
+ }
+ if (other.GasWanted != 0L) {
+ GasWanted = other.GasWanted;
+ }
+ _unknownFields = pb::UnknownFieldSet.MergeFrom(_unknownFields, other._unknownFields);
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
+ public void MergeFrom(pb::CodedInputStream input) {
+ #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE
+ input.ReadRawMessage(this);
+ #else
+ uint tag;
+ while ((tag = input.ReadTag()) != 0) {
+ if ((tag & 7) == 4) {
+ // Abort on any end group tag.
+ return;
+ }
+ switch(tag) {
+ default:
+ _unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, input);
+ break;
+ case 10: {
+ TxJson = input.ReadString();
+ break;
+ }
+ case 16: {
+ GasWanted = input.ReadSInt64();
+ break;
+ }
+ }
+ }
+ #endif
+ }
+
+ #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
+ void pb::IBufferMessage.InternalMergeFrom(ref pb::ParseContext input) {
+ uint tag;
+ while ((tag = input.ReadTag()) != 0) {
+ if ((tag & 7) == 4) {
+ // Abort on any end group tag.
+ return;
+ }
+ switch(tag) {
+ default:
+ _unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, ref input);
+ break;
+ case 10: {
+ TxJson = input.ReadString();
+ break;
+ }
+ case 16: {
+ GasWanted = input.ReadSInt64();
+ break;
+ }
+ }
+ }
+ }
+ #endif
+
+ }
+
+ [global::System.Diagnostics.DebuggerDisplayAttribute("{ToString(),nq}")]
+ public sealed partial class EstimateGasFeeRequest : pb::IMessage
+ #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE
+ , pb::IBufferMessage
+ #endif
+ {
+ private static readonly pb::MessageParser _parser = new pb::MessageParser(() => new EstimateGasFeeRequest());
+ private pb::UnknownFieldSet _unknownFields;
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
+ public static pb::MessageParser Parser { get { return _parser; } }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
+ public static pbr::MessageDescriptor Descriptor {
+ get { return global::Land.Gno.Gnonative.V1.GnonativetypesReflection.Descriptor.MessageTypes[63]; }
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
+ pbr::MessageDescriptor pb::IMessage.Descriptor {
+ get { return Descriptor; }
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
+ public EstimateGasFeeRequest() {
+ OnConstruction();
+ }
+
+ partial void OnConstruction();
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
+ public EstimateGasFeeRequest(EstimateGasFeeRequest other) : this() {
+ txJson_ = other.txJson_;
+ address_ = other.address_;
+ gasSecurityMargin_ = other.gasSecurityMargin_;
+ priceSecurityMargin_ = other.priceSecurityMargin_;
+ updateTx_ = other.updateTx_;
+ _unknownFields = pb::UnknownFieldSet.Clone(other._unknownFields);
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
+ public EstimateGasFeeRequest Clone() {
+ return new EstimateGasFeeRequest(this);
}
/// Field number for the "tx_json" field.
@@ -14125,9 +14696,9 @@ public string TxJson {
}
}
- /// Field number for the "security_margin" field.
- public const int SecurityMarginFieldNumber = 3;
- private uint securityMargin_;
+ /// Field number for the "gas_security_margin" field.
+ public const int GasSecurityMarginFieldNumber = 3;
+ private uint gasSecurityMargin_;
///
/// The security margin to apply to the estimated gas amount.
/// This number represents a decimal numeral value with two decimals precision, without the decimal separator. E.g. 1 means 0.01 and 10000 means 100.00.
@@ -14135,67 +14706,54 @@ public string TxJson {
///
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
[global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
- public uint SecurityMargin {
- get { return securityMargin_; }
- set {
- securityMargin_ = value;
- }
- }
-
- /// Field number for the "update_tx" field.
- public const int UpdateTxFieldNumber = 4;
- private bool updateTx_;
- ///
- /// The update boolean to update the gas wanted field in the transaction if true.
- ///
- [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
- [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
- public bool UpdateTx {
- get { return updateTx_; }
+ public uint GasSecurityMargin {
+ get { return gasSecurityMargin_; }
set {
- updateTx_ = value;
+ gasSecurityMargin_ = value;
}
}
- /// Field number for the "account_number" field.
- public const int AccountNumberFieldNumber = 5;
- private ulong accountNumber_;
+ /// Field number for the "price_security_margin" field.
+ public const int PriceSecurityMarginFieldNumber = 4;
+ private uint priceSecurityMargin_;
///
- /// The signer's account number on the blockchain. If 0 then query the blockchain for the value.
+ /// The security margin to apply to the gas price.
+ /// This number represents a decimal numeral value with two decimals precision, without the decimal separator. E.g. 1 means 0.01 and 10000 means 100.00.
+ /// It will be multiplied by the fetched gas price.
///
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
[global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
- public ulong AccountNumber {
- get { return accountNumber_; }
+ public uint PriceSecurityMargin {
+ get { return priceSecurityMargin_; }
set {
- accountNumber_ = value;
+ priceSecurityMargin_ = value;
}
}
- /// Field number for the "sequence_number" field.
- public const int SequenceNumberFieldNumber = 6;
- private ulong sequenceNumber_;
+ /// Field number for the "update_tx" field.
+ public const int UpdateTxFieldNumber = 5;
+ private bool updateTx_;
///
- /// The sequence number of the signer's transactions on the blockchain. If 0 then query the blockchain for the value.
+ /// The update boolean to update the gas wanted field in the transaction if true.
///
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
[global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
- public ulong SequenceNumber {
- get { return sequenceNumber_; }
+ public bool UpdateTx {
+ get { return updateTx_; }
set {
- sequenceNumber_ = value;
+ updateTx_ = value;
}
}
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
[global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
public override bool Equals(object other) {
- return Equals(other as EstimateGasRequest);
+ return Equals(other as EstimateGasFeeRequest);
}
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
[global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
- public bool Equals(EstimateGasRequest other) {
+ public bool Equals(EstimateGasFeeRequest other) {
if (ReferenceEquals(other, null)) {
return false;
}
@@ -14204,10 +14762,9 @@ public bool Equals(EstimateGasRequest other) {
}
if (TxJson != other.TxJson) return false;
if (Address != other.Address) return false;
- if (SecurityMargin != other.SecurityMargin) return false;
+ if (GasSecurityMargin != other.GasSecurityMargin) return false;
+ if (PriceSecurityMargin != other.PriceSecurityMargin) return false;
if (UpdateTx != other.UpdateTx) return false;
- if (AccountNumber != other.AccountNumber) return false;
- if (SequenceNumber != other.SequenceNumber) return false;
return Equals(_unknownFields, other._unknownFields);
}
@@ -14217,10 +14774,9 @@ public override int GetHashCode() {
int hash = 1;
if (TxJson.Length != 0) hash ^= TxJson.GetHashCode();
if (Address.Length != 0) hash ^= Address.GetHashCode();
- if (SecurityMargin != 0) hash ^= SecurityMargin.GetHashCode();
+ if (GasSecurityMargin != 0) hash ^= GasSecurityMargin.GetHashCode();
+ if (PriceSecurityMargin != 0) hash ^= PriceSecurityMargin.GetHashCode();
if (UpdateTx != false) hash ^= UpdateTx.GetHashCode();
- if (AccountNumber != 0UL) hash ^= AccountNumber.GetHashCode();
- if (SequenceNumber != 0UL) hash ^= SequenceNumber.GetHashCode();
if (_unknownFields != null) {
hash ^= _unknownFields.GetHashCode();
}
@@ -14247,21 +14803,17 @@ public void WriteTo(pb::CodedOutputStream output) {
output.WriteRawTag(18);
output.WriteBytes(Address);
}
- if (SecurityMargin != 0) {
+ if (GasSecurityMargin != 0) {
output.WriteRawTag(24);
- output.WriteUInt32(SecurityMargin);
+ output.WriteUInt32(GasSecurityMargin);
}
- if (UpdateTx != false) {
+ if (PriceSecurityMargin != 0) {
output.WriteRawTag(32);
- output.WriteBool(UpdateTx);
+ output.WriteUInt32(PriceSecurityMargin);
}
- if (AccountNumber != 0UL) {
+ if (UpdateTx != false) {
output.WriteRawTag(40);
- output.WriteUInt64(AccountNumber);
- }
- if (SequenceNumber != 0UL) {
- output.WriteRawTag(48);
- output.WriteUInt64(SequenceNumber);
+ output.WriteBool(UpdateTx);
}
if (_unknownFields != null) {
_unknownFields.WriteTo(output);
@@ -14281,21 +14833,17 @@ public void WriteTo(pb::CodedOutputStream output) {
output.WriteRawTag(18);
output.WriteBytes(Address);
}
- if (SecurityMargin != 0) {
+ if (GasSecurityMargin != 0) {
output.WriteRawTag(24);
- output.WriteUInt32(SecurityMargin);
+ output.WriteUInt32(GasSecurityMargin);
}
- if (UpdateTx != false) {
+ if (PriceSecurityMargin != 0) {
output.WriteRawTag(32);
- output.WriteBool(UpdateTx);
+ output.WriteUInt32(PriceSecurityMargin);
}
- if (AccountNumber != 0UL) {
+ if (UpdateTx != false) {
output.WriteRawTag(40);
- output.WriteUInt64(AccountNumber);
- }
- if (SequenceNumber != 0UL) {
- output.WriteRawTag(48);
- output.WriteUInt64(SequenceNumber);
+ output.WriteBool(UpdateTx);
}
if (_unknownFields != null) {
_unknownFields.WriteTo(ref output);
@@ -14313,18 +14861,15 @@ public int CalculateSize() {
if (Address.Length != 0) {
size += 1 + pb::CodedOutputStream.ComputeBytesSize(Address);
}
- if (SecurityMargin != 0) {
- size += 1 + pb::CodedOutputStream.ComputeUInt32Size(SecurityMargin);
+ if (GasSecurityMargin != 0) {
+ size += 1 + pb::CodedOutputStream.ComputeUInt32Size(GasSecurityMargin);
+ }
+ if (PriceSecurityMargin != 0) {
+ size += 1 + pb::CodedOutputStream.ComputeUInt32Size(PriceSecurityMargin);
}
if (UpdateTx != false) {
size += 1 + 1;
}
- if (AccountNumber != 0UL) {
- size += 1 + pb::CodedOutputStream.ComputeUInt64Size(AccountNumber);
- }
- if (SequenceNumber != 0UL) {
- size += 1 + pb::CodedOutputStream.ComputeUInt64Size(SequenceNumber);
- }
if (_unknownFields != null) {
size += _unknownFields.CalculateSize();
}
@@ -14333,7 +14878,7 @@ public int CalculateSize() {
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
[global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
- public void MergeFrom(EstimateGasRequest other) {
+ public void MergeFrom(EstimateGasFeeRequest other) {
if (other == null) {
return;
}
@@ -14343,18 +14888,15 @@ public void MergeFrom(EstimateGasRequest other) {
if (other.Address.Length != 0) {
Address = other.Address;
}
- if (other.SecurityMargin != 0) {
- SecurityMargin = other.SecurityMargin;
+ if (other.GasSecurityMargin != 0) {
+ GasSecurityMargin = other.GasSecurityMargin;
+ }
+ if (other.PriceSecurityMargin != 0) {
+ PriceSecurityMargin = other.PriceSecurityMargin;
}
if (other.UpdateTx != false) {
UpdateTx = other.UpdateTx;
}
- if (other.AccountNumber != 0UL) {
- AccountNumber = other.AccountNumber;
- }
- if (other.SequenceNumber != 0UL) {
- SequenceNumber = other.SequenceNumber;
- }
_unknownFields = pb::UnknownFieldSet.MergeFrom(_unknownFields, other._unknownFields);
}
@@ -14383,19 +14925,15 @@ public void MergeFrom(pb::CodedInputStream input) {
break;
}
case 24: {
- SecurityMargin = input.ReadUInt32();
+ GasSecurityMargin = input.ReadUInt32();
break;
}
case 32: {
- UpdateTx = input.ReadBool();
+ PriceSecurityMargin = input.ReadUInt32();
break;
}
case 40: {
- AccountNumber = input.ReadUInt64();
- break;
- }
- case 48: {
- SequenceNumber = input.ReadUInt64();
+ UpdateTx = input.ReadBool();
break;
}
}
@@ -14426,19 +14964,15 @@ public void MergeFrom(pb::CodedInputStream input) {
break;
}
case 24: {
- SecurityMargin = input.ReadUInt32();
+ GasSecurityMargin = input.ReadUInt32();
break;
}
case 32: {
- UpdateTx = input.ReadBool();
+ PriceSecurityMargin = input.ReadUInt32();
break;
}
case 40: {
- AccountNumber = input.ReadUInt64();
- break;
- }
- case 48: {
- SequenceNumber = input.ReadUInt64();
+ UpdateTx = input.ReadBool();
break;
}
}
@@ -14449,21 +14983,21 @@ public void MergeFrom(pb::CodedInputStream input) {
}
[global::System.Diagnostics.DebuggerDisplayAttribute("{ToString(),nq}")]
- public sealed partial class EstimateGasResponse : pb::IMessage
+ public sealed partial class EstimateGasFeeResponse : pb::IMessage
#if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE
, pb::IBufferMessage
#endif
{
- private static readonly pb::MessageParser _parser = new pb::MessageParser(() => new EstimateGasResponse());
+ private static readonly pb::MessageParser _parser = new pb::MessageParser(() => new EstimateGasFeeResponse());
private pb::UnknownFieldSet _unknownFields;
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
[global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
- public static pb::MessageParser Parser { get { return _parser; } }
+ public static pb::MessageParser Parser { get { return _parser; } }
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
[global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
public static pbr::MessageDescriptor Descriptor {
- get { return global::Land.Gno.Gnonative.V1.GnonativetypesReflection.Descriptor.MessageTypes[62]; }
+ get { return global::Land.Gno.Gnonative.V1.GnonativetypesReflection.Descriptor.MessageTypes[64]; }
}
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
@@ -14474,7 +15008,7 @@ public sealed partial class EstimateGasResponse : pb::IMessageField number for the "tx_json" field.
@@ -14524,15 +15059,30 @@ public long GasWanted {
}
}
+ /// Field number for the "fee" field.
+ public const int FeeFieldNumber = 3;
+ private global::Land.Gno.Gnonative.V1.Coin fee_;
+ ///
+ /// The estimated fee for the transaction
+ ///
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
+ public global::Land.Gno.Gnonative.V1.Coin Fee {
+ get { return fee_; }
+ set {
+ fee_ = value;
+ }
+ }
+
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
[global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
public override bool Equals(object other) {
- return Equals(other as EstimateGasResponse);
+ return Equals(other as EstimateGasFeeResponse);
}
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
[global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
- public bool Equals(EstimateGasResponse other) {
+ public bool Equals(EstimateGasFeeResponse other) {
if (ReferenceEquals(other, null)) {
return false;
}
@@ -14541,6 +15091,7 @@ public bool Equals(EstimateGasResponse other) {
}
if (TxJson != other.TxJson) return false;
if (GasWanted != other.GasWanted) return false;
+ if (!object.Equals(Fee, other.Fee)) return false;
return Equals(_unknownFields, other._unknownFields);
}
@@ -14550,6 +15101,7 @@ public override int GetHashCode() {
int hash = 1;
if (TxJson.Length != 0) hash ^= TxJson.GetHashCode();
if (GasWanted != 0L) hash ^= GasWanted.GetHashCode();
+ if (fee_ != null) hash ^= Fee.GetHashCode();
if (_unknownFields != null) {
hash ^= _unknownFields.GetHashCode();
}
@@ -14576,6 +15128,10 @@ public void WriteTo(pb::CodedOutputStream output) {
output.WriteRawTag(16);
output.WriteSInt64(GasWanted);
}
+ if (fee_ != null) {
+ output.WriteRawTag(26);
+ output.WriteMessage(Fee);
+ }
if (_unknownFields != null) {
_unknownFields.WriteTo(output);
}
@@ -14594,6 +15150,10 @@ public void WriteTo(pb::CodedOutputStream output) {
output.WriteRawTag(16);
output.WriteSInt64(GasWanted);
}
+ if (fee_ != null) {
+ output.WriteRawTag(26);
+ output.WriteMessage(Fee);
+ }
if (_unknownFields != null) {
_unknownFields.WriteTo(ref output);
}
@@ -14610,6 +15170,9 @@ public int CalculateSize() {
if (GasWanted != 0L) {
size += 1 + pb::CodedOutputStream.ComputeSInt64Size(GasWanted);
}
+ if (fee_ != null) {
+ size += 1 + pb::CodedOutputStream.ComputeMessageSize(Fee);
+ }
if (_unknownFields != null) {
size += _unknownFields.CalculateSize();
}
@@ -14618,7 +15181,7 @@ public int CalculateSize() {
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
[global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
- public void MergeFrom(EstimateGasResponse other) {
+ public void MergeFrom(EstimateGasFeeResponse other) {
if (other == null) {
return;
}
@@ -14628,6 +15191,12 @@ public void MergeFrom(EstimateGasResponse other) {
if (other.GasWanted != 0L) {
GasWanted = other.GasWanted;
}
+ if (other.fee_ != null) {
+ if (fee_ == null) {
+ Fee = new global::Land.Gno.Gnonative.V1.Coin();
+ }
+ Fee.MergeFrom(other.Fee);
+ }
_unknownFields = pb::UnknownFieldSet.MergeFrom(_unknownFields, other._unknownFields);
}
@@ -14655,6 +15224,13 @@ public void MergeFrom(pb::CodedInputStream input) {
GasWanted = input.ReadSInt64();
break;
}
+ case 26: {
+ if (fee_ == null) {
+ Fee = new global::Land.Gno.Gnonative.V1.Coin();
+ }
+ input.ReadMessage(Fee);
+ break;
+ }
}
}
#endif
@@ -14682,6 +15258,13 @@ public void MergeFrom(pb::CodedInputStream input) {
GasWanted = input.ReadSInt64();
break;
}
+ case 26: {
+ if (fee_ == null) {
+ Fee = new global::Land.Gno.Gnonative.V1.Coin();
+ }
+ input.ReadMessage(Fee);
+ break;
+ }
}
}
}
@@ -14704,7 +15287,7 @@ public sealed partial class BroadcastTxCommitRequest : pb::IMessage
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
[global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
public static pbr::MessageDescriptor Descriptor {
- get { return global::Land.Gno.Gnonative.V1.GnonativetypesReflection.Descriptor.MessageTypes[75]; }
+ get { return global::Land.Gno.Gnonative.V1.GnonativetypesReflection.Descriptor.MessageTypes[77]; }
}
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
@@ -17361,7 +17944,7 @@ public sealed partial class HelloResponse : pb::IMessage
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
[global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
public static pbr::MessageDescriptor Descriptor {
- get { return global::Land.Gno.Gnonative.V1.GnonativetypesReflection.Descriptor.MessageTypes[76]; }
+ get { return global::Land.Gno.Gnonative.V1.GnonativetypesReflection.Descriptor.MessageTypes[78]; }
}
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
@@ -17559,7 +18142,7 @@ public sealed partial class HelloStreamRequest : pb::IMessage(grpc::DeserializationContext context, gl
[global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
static readonly grpc::Marshaller __Marshaller_land_gno_gnonative_v1_EstimateGasResponse = grpc::Marshallers.Create(__Helper_SerializeMessage, context => __Helper_DeserializeMessage(context, global::Land.Gno.Gnonative.V1.EstimateGasResponse.Parser));
[global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
+ static readonly grpc::Marshaller __Marshaller_land_gno_gnonative_v1_EstimateGasFeeRequest = grpc::Marshallers.Create(__Helper_SerializeMessage, context => __Helper_DeserializeMessage(context, global::Land.Gno.Gnonative.V1.EstimateGasFeeRequest.Parser));
+ [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
+ static readonly grpc::Marshaller __Marshaller_land_gno_gnonative_v1_EstimateGasFeeResponse = grpc::Marshallers.Create(__Helper_SerializeMessage, context => __Helper_DeserializeMessage(context, global::Land.Gno.Gnonative.V1.EstimateGasFeeResponse.Parser));
+ [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
static readonly grpc::Marshaller __Marshaller_land_gno_gnonative_v1_SignTxRequest = grpc::Marshallers.Create(__Helper_SerializeMessage, context => __Helper_DeserializeMessage(context, global::Land.Gno.Gnonative.V1.SignTxRequest.Parser));
[global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
static readonly grpc::Marshaller __Marshaller_land_gno_gnonative_v1_SignTxResponse = grpc::Marshallers.Create(__Helper_SerializeMessage, context => __Helper_DeserializeMessage(context, global::Land.Gno.Gnonative.V1.SignTxResponse.Parser));
@@ -435,6 +439,14 @@ static T __Helper_DeserializeMessage(grpc::DeserializationContext context, gl
__Marshaller_land_gno_gnonative_v1_EstimateGasRequest,
__Marshaller_land_gno_gnonative_v1_EstimateGasResponse);
+ [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
+ static readonly grpc::Method __Method_EstimateGasFee = new grpc::Method(
+ grpc::MethodType.Unary,
+ __ServiceName,
+ "EstimateGasFee",
+ __Marshaller_land_gno_gnonative_v1_EstimateGasFeeRequest,
+ __Marshaller_land_gno_gnonative_v1_EstimateGasFeeResponse);
+
[global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
static readonly grpc::Method __Method_SignTx = new grpc::Method(
grpc::MethodType.Unary,
@@ -927,6 +939,7 @@ public abstract partial class GnoNativeServiceBase
///
/// EstimateGas estimates the least amount of gas required for the transaction to go through on the chain (minimum gas wanted), with a security margin.
/// If UpdateTx is true, then update the transaction with the gasWanted amount.
+ /// This uses the remote node determined by SetRemote.
///
/// The request received from the client.
/// The context of the server-side call handler being invoked.
@@ -937,6 +950,21 @@ public abstract partial class GnoNativeServiceBase
throw new grpc::RpcException(new grpc::Status(grpc::StatusCode.Unimplemented, ""));
}
+ ///
+ /// EstimateGasFee estimates the fee for the transaction to go through on the chain (minimum gas wanted times the gas price), with a security margin.
+ /// If UpdateTx is true, then update the transaction with the gasWanted amount.
+ /// This uses the remote node determined by SetRemote.
+ /// This is similar to EstimateGas but also fetches the gas price from the remote node.
+ ///
+ /// The request received from the client.
+ /// The context of the server-side call handler being invoked.
+ /// The response to send back to the client (wrapped by a task).
+ [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
+ public virtual global::System.Threading.Tasks.Task EstimateGasFee(global::Land.Gno.Gnonative.V1.EstimateGasFeeRequest request, grpc::ServerCallContext context)
+ {
+ throw new grpc::RpcException(new grpc::Status(grpc::StatusCode.Unimplemented, ""));
+ }
+
///
/// Sign the transaction using the account with the given address.
/// If there is no activated account with the given address, return [ErrCode](#land.gno.gnonative.v1.ErrCode).ErrNoActiveAccount.
@@ -2611,6 +2639,7 @@ protected GnoNativeServiceClient(ClientBaseConfiguration configuration) : base(c
///
/// EstimateGas estimates the least amount of gas required for the transaction to go through on the chain (minimum gas wanted), with a security margin.
/// If UpdateTx is true, then update the transaction with the gasWanted amount.
+ /// This uses the remote node determined by SetRemote.
///
/// The request to send to the server.
/// The initial metadata to send with the call. This parameter is optional.
@@ -2625,6 +2654,7 @@ protected GnoNativeServiceClient(ClientBaseConfiguration configuration) : base(c
///
/// EstimateGas estimates the least amount of gas required for the transaction to go through on the chain (minimum gas wanted), with a security margin.
/// If UpdateTx is true, then update the transaction with the gasWanted amount.
+ /// This uses the remote node determined by SetRemote.
///
/// The request to send to the server.
/// The options for the call.
@@ -2637,6 +2667,7 @@ protected GnoNativeServiceClient(ClientBaseConfiguration configuration) : base(c
///
/// EstimateGas estimates the least amount of gas required for the transaction to go through on the chain (minimum gas wanted), with a security margin.
/// If UpdateTx is true, then update the transaction with the gasWanted amount.
+ /// This uses the remote node determined by SetRemote.
///
/// The request to send to the server.
/// The initial metadata to send with the call. This parameter is optional.
@@ -2651,6 +2682,7 @@ protected GnoNativeServiceClient(ClientBaseConfiguration configuration) : base(c
///
/// EstimateGas estimates the least amount of gas required for the transaction to go through on the chain (minimum gas wanted), with a security margin.
/// If UpdateTx is true, then update the transaction with the gasWanted amount.
+ /// This uses the remote node determined by SetRemote.
///
/// The request to send to the server.
/// The options for the call.
@@ -2661,6 +2693,66 @@ protected GnoNativeServiceClient(ClientBaseConfiguration configuration) : base(c
return CallInvoker.AsyncUnaryCall(__Method_EstimateGas, null, options, request);
}
///
+ /// EstimateGasFee estimates the fee for the transaction to go through on the chain (minimum gas wanted times the gas price), with a security margin.
+ /// If UpdateTx is true, then update the transaction with the gasWanted amount.
+ /// This uses the remote node determined by SetRemote.
+ /// This is similar to EstimateGas but also fetches the gas price from the remote node.
+ ///
+ /// The request to send to the server.
+ /// The initial metadata to send with the call. This parameter is optional.
+ /// An optional deadline for the call. The call will be cancelled if deadline is hit.
+ /// An optional token for canceling the call.
+ /// The response received from the server.
+ [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
+ public virtual global::Land.Gno.Gnonative.V1.EstimateGasFeeResponse EstimateGasFee(global::Land.Gno.Gnonative.V1.EstimateGasFeeRequest request, grpc::Metadata headers = null, global::System.DateTime? deadline = null, global::System.Threading.CancellationToken cancellationToken = default(global::System.Threading.CancellationToken))
+ {
+ return EstimateGasFee(request, new grpc::CallOptions(headers, deadline, cancellationToken));
+ }
+ ///
+ /// EstimateGasFee estimates the fee for the transaction to go through on the chain (minimum gas wanted times the gas price), with a security margin.
+ /// If UpdateTx is true, then update the transaction with the gasWanted amount.
+ /// This uses the remote node determined by SetRemote.
+ /// This is similar to EstimateGas but also fetches the gas price from the remote node.
+ ///
+ /// The request to send to the server.
+ /// The options for the call.
+ /// The response received from the server.
+ [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
+ public virtual global::Land.Gno.Gnonative.V1.EstimateGasFeeResponse EstimateGasFee(global::Land.Gno.Gnonative.V1.EstimateGasFeeRequest request, grpc::CallOptions options)
+ {
+ return CallInvoker.BlockingUnaryCall(__Method_EstimateGasFee, null, options, request);
+ }
+ ///
+ /// EstimateGasFee estimates the fee for the transaction to go through on the chain (minimum gas wanted times the gas price), with a security margin.
+ /// If UpdateTx is true, then update the transaction with the gasWanted amount.
+ /// This uses the remote node determined by SetRemote.
+ /// This is similar to EstimateGas but also fetches the gas price from the remote node.
+ ///
+ /// The request to send to the server.
+ /// The initial metadata to send with the call. This parameter is optional.
+ /// An optional deadline for the call. The call will be cancelled if deadline is hit.
+ /// An optional token for canceling the call.
+ /// The call object.
+ [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
+ public virtual grpc::AsyncUnaryCall EstimateGasFeeAsync(global::Land.Gno.Gnonative.V1.EstimateGasFeeRequest request, grpc::Metadata headers = null, global::System.DateTime? deadline = null, global::System.Threading.CancellationToken cancellationToken = default(global::System.Threading.CancellationToken))
+ {
+ return EstimateGasFeeAsync(request, new grpc::CallOptions(headers, deadline, cancellationToken));
+ }
+ ///
+ /// EstimateGasFee estimates the fee for the transaction to go through on the chain (minimum gas wanted times the gas price), with a security margin.
+ /// If UpdateTx is true, then update the transaction with the gasWanted amount.
+ /// This uses the remote node determined by SetRemote.
+ /// This is similar to EstimateGas but also fetches the gas price from the remote node.
+ ///
+ /// The request to send to the server.
+ /// The options for the call.
+ /// The call object.
+ [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)]
+ public virtual grpc::AsyncUnaryCall EstimateGasFeeAsync(global::Land.Gno.Gnonative.V1.EstimateGasFeeRequest request, grpc::CallOptions options)
+ {
+ return CallInvoker.AsyncUnaryCall(__Method_EstimateGasFee, null, options, request);
+ }
+ ///
/// Sign the transaction using the account with the given address.
/// If there is no activated account with the given address, return [ErrCode](#land.gno.gnonative.v1.ErrCode).ErrNoActiveAccount.
/// If the password is wrong, return [ErrCode](#land.gno.gnonative.v1.ErrCode).ErrDecryptionFailed.
@@ -3104,6 +3196,7 @@ protected override GnoNativeServiceClient NewInstance(ClientBaseConfiguration co
.AddMethod(__Method_MakeSendTx, serviceImpl.MakeSendTx)
.AddMethod(__Method_MakeRunTx, serviceImpl.MakeRunTx)
.AddMethod(__Method_EstimateGas, serviceImpl.EstimateGas)
+ .AddMethod(__Method_EstimateGasFee, serviceImpl.EstimateGasFee)
.AddMethod(__Method_SignTx, serviceImpl.SignTx)
.AddMethod(__Method_BroadcastTxCommit, serviceImpl.BroadcastTxCommit)
.AddMethod(__Method_AddressToBech32, serviceImpl.AddressToBech32)
@@ -3152,6 +3245,7 @@ public static void BindService(grpc::ServiceBinderBase serviceBinder, GnoNativeS
serviceBinder.AddMethod(__Method_MakeSendTx, serviceImpl == null ? null : new grpc::UnaryServerMethod(serviceImpl.MakeSendTx));
serviceBinder.AddMethod(__Method_MakeRunTx, serviceImpl == null ? null : new grpc::UnaryServerMethod(serviceImpl.MakeRunTx));
serviceBinder.AddMethod(__Method_EstimateGas, serviceImpl == null ? null : new grpc::UnaryServerMethod(serviceImpl.EstimateGas));
+ serviceBinder.AddMethod(__Method_EstimateGasFee, serviceImpl == null ? null : new grpc::UnaryServerMethod(serviceImpl.EstimateGasFee));
serviceBinder.AddMethod(__Method_SignTx, serviceImpl == null ? null : new grpc::UnaryServerMethod(serviceImpl.SignTx));
serviceBinder.AddMethod(__Method_BroadcastTxCommit, serviceImpl == null ? null : new grpc::ServerStreamingServerMethod(serviceImpl.BroadcastTxCommit));
serviceBinder.AddMethod(__Method_AddressToBech32, serviceImpl == null ? null : new grpc::UnaryServerMethod(serviceImpl.AddressToBech32));
diff --git a/api/gen/es/gnonativetypes_pb.ts b/api/gen/es/gnonativetypes_pb.ts
index e54c26b..1e003ac 100644
--- a/api/gen/es/gnonativetypes_pb.ts
+++ b/api/gen/es/gnonativetypes_pb.ts
@@ -10,7 +10,7 @@ import type { Message } from "@bufbuild/protobuf";
* Describes the file gnonativetypes.proto.
*/
export const file_gnonativetypes: GenFile = /*@__PURE__*/
- fileDesc("ChRnbm9uYXRpdmV0eXBlcy5wcm90bxIVbGFuZC5nbm8uZ25vbmF0aXZlLnYxIiIKEFNldFJlbW90ZVJlcXVlc3QSDgoGcmVtb3RlGAEgASgJIhMKEVNldFJlbW90ZVJlc3BvbnNlIhIKEEdldFJlbW90ZVJlcXVlc3QiIwoRR2V0UmVtb3RlUmVzcG9uc2USDgoGcmVtb3RlGAEgASgJIiUKEVNldENoYWluSURSZXF1ZXN0EhAKCGNoYWluX2lkGAEgASgJIhQKElNldENoYWluSURSZXNwb25zZSITChFHZXRDaGFpbklEUmVxdWVzdCImChJHZXRDaGFpbklEUmVzcG9uc2USEAoIY2hhaW5faWQYASABKAkiNwoSU2V0UGFzc3dvcmRSZXF1ZXN0EhAKCHBhc3N3b3JkGAEgASgJEg8KB2FkZHJlc3MYAiABKAwiFQoTU2V0UGFzc3dvcmRSZXNwb25zZSJAChVSb3RhdGVQYXNzd29yZFJlcXVlc3QSFAoMbmV3X3Bhc3N3b3JkGAEgASgJEhEKCWFkZHJlc3NlcxgCIAMoDCIYChZSb3RhdGVQYXNzd29yZFJlc3BvbnNlIh8KHUdlbmVyYXRlUmVjb3ZlcnlQaHJhc2VSZXF1ZXN0IjAKHkdlbmVyYXRlUmVjb3ZlcnlQaHJhc2VSZXNwb25zZRIOCgZwaHJhc2UYASABKAkiRwoHS2V5SW5mbxIMCgR0eXBlGAEgASgNEgwKBG5hbWUYAiABKAkSDwoHcHViX2tleRgDIAEoDBIPCgdhZGRyZXNzGAQgASgMIiUKBENvaW4SDQoFZGVub20YASABKAkSDgoGYW1vdW50GAIgASgSIoUBCgtCYXNlQWNjb3VudBIPCgdhZGRyZXNzGAEgASgMEioKBWNvaW5zGAIgAygLMhsubGFuZC5nbm8uZ25vbmF0aXZlLnYxLkNvaW4SDwoHcHViX2tleRgDIAEoDBIWCg5hY2NvdW50X251bWJlchgEIAEoBBIQCghzZXF1ZW5jZRgFIAEoBCIUChJMaXN0S2V5SW5mb1JlcXVlc3QiTQoTTGlzdEtleUluZm9SZXNwb25zZRI2CgRrZXlzGAEgAygLMh4ubGFuZC5nbm8uZ25vbmF0aXZlLnYxLktleUluZm9SCGtleV9pbmZvIiMKE0hhc0tleUJ5TmFtZVJlcXVlc3QSDAoEbmFtZRgBIAEoCSIjChRIYXNLZXlCeU5hbWVSZXNwb25zZRILCgNoYXMYASABKAgiKQoWSGFzS2V5QnlBZGRyZXNzUmVxdWVzdBIPCgdhZGRyZXNzGAEgASgMIiYKF0hhc0tleUJ5QWRkcmVzc1Jlc3BvbnNlEgsKA2hhcxgBIAEoCCI2ChxIYXNLZXlCeU5hbWVPckFkZHJlc3NSZXF1ZXN0EhYKDm5hbWVfb3JfYmVjaDMyGAEgASgJIiwKHUhhc0tleUJ5TmFtZU9yQWRkcmVzc1Jlc3BvbnNlEgsKA2hhcxgBIAEoCCInChdHZXRLZXlJbmZvQnlOYW1lUmVxdWVzdBIMCgRuYW1lGAEgASgJIlEKGEdldEtleUluZm9CeU5hbWVSZXNwb25zZRI1CgNrZXkYASABKAsyHi5sYW5kLmduby5nbm9uYXRpdmUudjEuS2V5SW5mb1IIa2V5X2luZm8iLQoaR2V0S2V5SW5mb0J5QWRkcmVzc1JlcXVlc3QSDwoHYWRkcmVzcxgBIAEoDCJUChtHZXRLZXlJbmZvQnlBZGRyZXNzUmVzcG9uc2USNQoDa2V5GAEgASgLMh4ubGFuZC5nbm8uZ25vbmF0aXZlLnYxLktleUluZm9SCGtleV9pbmZvIjoKIEdldEtleUluZm9CeU5hbWVPckFkZHJlc3NSZXF1ZXN0EhYKDm5hbWVfb3JfYmVjaDMyGAEgASgJIloKIUdldEtleUluZm9CeU5hbWVPckFkZHJlc3NSZXNwb25zZRI1CgNrZXkYASABKAsyHi5sYW5kLmduby5nbm9uYXRpdmUudjEuS2V5SW5mb1IIa2V5X2luZm8iiAEKFENyZWF0ZUFjY291bnRSZXF1ZXN0EhYKDm5hbWVfb3JfYmVjaDMyGAEgASgJEhAKCG1uZW1vbmljGAIgASgJEhQKDGJpcDM5X3Bhc3N3ZBgDIAEoCRIQCghwYXNzd29yZBgEIAEoCRIPCgdhY2NvdW50GAUgASgNEg0KBWluZGV4GAYgASgNIk4KFUNyZWF0ZUFjY291bnRSZXNwb25zZRI1CgNrZXkYASABKAsyHi5sYW5kLmduby5nbm9uYXRpdmUudjEuS2V5SW5mb1IIa2V5X2luZm8iYwoTQ3JlYXRlTGVkZ2VyUmVxdWVzdBIMCgRuYW1lGAEgASgJEhEKCWFsZ29yaXRobRgCIAEoCRILCgNocnAYAyABKAkSDwoHYWNjb3VudBgEIAEoDRINCgVpbmRleBgFIAEoDSJNChRDcmVhdGVMZWRnZXJSZXNwb25zZRI1CgNrZXkYASABKAsyHi5sYW5kLmduby5nbm9uYXRpdmUudjEuS2V5SW5mb1IIa2V5X2luZm8iMAoWQWN0aXZhdGVBY2NvdW50UmVxdWVzdBIWCg5uYW1lX29yX2JlY2gzMhgBIAEoCSJmChdBY3RpdmF0ZUFjY291bnRSZXNwb25zZRI1CgNrZXkYASABKAsyHi5sYW5kLmduby5nbm9uYXRpdmUudjEuS2V5SW5mb1IIa2V5X2luZm8SFAoMaGFzX3Bhc3N3b3JkGAIgASgIIi0KGkdldEFjdGl2YXRlZEFjY291bnRSZXF1ZXN0Eg8KB2FkZHJlc3MYASABKAwiagobR2V0QWN0aXZhdGVkQWNjb3VudFJlc3BvbnNlEjUKA2tleRgBIAEoCzIeLmxhbmQuZ25vLmdub25hdGl2ZS52MS5LZXlJbmZvUghrZXlfaW5mbxIUCgxoYXNfcGFzc3dvcmQYAiABKAgiJgoTUXVlcnlBY2NvdW50UmVxdWVzdBIPCgdhZGRyZXNzGAEgASgMIlAKFFF1ZXJ5QWNjb3VudFJlc3BvbnNlEjgKDGFjY291bnRfaW5mbxgBIAEoCzIiLmxhbmQuZ25vLmdub25hdGl2ZS52MS5CYXNlQWNjb3VudCJXChREZWxldGVBY2NvdW50UmVxdWVzdBIWCg5uYW1lX29yX2JlY2gzMhgBIAEoCRIQCghwYXNzd29yZBgCIAEoCRIVCg1za2lwX3Bhc3N3b3JkGAMgASgIIhcKFURlbGV0ZUFjY291bnRSZXNwb25zZSIqCgxRdWVyeVJlcXVlc3QSDAoEcGF0aBgBIAEoCRIMCgRkYXRhGAIgASgMIh8KDVF1ZXJ5UmVzcG9uc2USDgoGcmVzdWx0GAEgASgMIjMKDVJlbmRlclJlcXVlc3QSFAoMcGFja2FnZV9wYXRoGAEgASgJEgwKBGFyZ3MYAiABKAkiIAoOUmVuZGVyUmVzcG9uc2USDgoGcmVzdWx0GAEgASgJIjgKDFFFdmFsUmVxdWVzdBIUCgxwYWNrYWdlX3BhdGgYASABKAkSEgoKZXhwcmVzc2lvbhgCIAEoCSIfCg1RRXZhbFJlc3BvbnNlEg4KBnJlc3VsdBgBIAEoCSKXAQoHTXNnQ2FsbBIUCgxwYWNrYWdlX3BhdGgYASABKAkSCwoDZm5jGAIgASgJEgwKBGFyZ3MYAyADKAkSKQoEc2VuZBgEIAMoCzIbLmxhbmQuZ25vLmdub25hdGl2ZS52MS5Db2luEjAKC21heF9kZXBvc2l0GAUgAygLMhsubGFuZC5nbm8uZ25vbmF0aXZlLnYxLkNvaW4ijAEKC0NhbGxSZXF1ZXN0Eg8KB2dhc19mZWUYASABKAkSEgoKZ2FzX3dhbnRlZBgCIAEoEhIMCgRtZW1vGAMgASgJEhYKDmNhbGxlcl9hZGRyZXNzGAQgASgMEjIKBG1zZ3MYBSADKAsyHi5sYW5kLmduby5nbm9uYXRpdmUudjEuTXNnQ2FsbFIETXNncyI8CgxDYWxsUmVzcG9uc2USDgoGcmVzdWx0GAEgASgMEgwKBGhhc2gYAiABKAwSDgoGaGVpZ2h0GAMgASgSIkoKB01zZ1NlbmQSEgoKdG9fYWRkcmVzcxgBIAEoDBIrCgZhbW91bnQYAiADKAsyGy5sYW5kLmduby5nbm9uYXRpdmUudjEuQ29pbiKMAQoLU2VuZFJlcXVlc3QSDwoHZ2FzX2ZlZRgBIAEoCRISCgpnYXNfd2FudGVkGAIgASgSEgwKBG1lbW8YAyABKAkSFgoOY2FsbGVyX2FkZHJlc3MYBCABKAwSMgoEbXNncxgFIAMoCzIeLmxhbmQuZ25vLmdub25hdGl2ZS52MS5Nc2dTZW5kUgRNc2dzIiwKDFNlbmRSZXNwb25zZRIMCgRoYXNoGAEgASgMEg4KBmhlaWdodBgCIAEoEiJ2CgZNc2dSdW4SDwoHcGFja2FnZRgBIAEoCRIpCgRzZW5kGAIgAygLMhsubGFuZC5nbm8uZ25vbmF0aXZlLnYxLkNvaW4SMAoLbWF4X2RlcG9zaXQYAyADKAsyGy5sYW5kLmduby5nbm9uYXRpdmUudjEuQ29pbiKKAQoKUnVuUmVxdWVzdBIPCgdnYXNfZmVlGAEgASgJEhIKCmdhc193YW50ZWQYAiABKBISDAoEbWVtbxgDIAEoCRIWCg5jYWxsZXJfYWRkcmVzcxgEIAEoDBIxCgRtc2dzGAUgAygLMh0ubGFuZC5nbm8uZ25vbmF0aXZlLnYxLk1zZ1J1blIETXNncyI7CgtSdW5SZXNwb25zZRIOCgZyZXN1bHQYASABKAkSDAoEaGFzaBgCIAEoDBIOCgZoZWlnaHQYAyABKBIiIQoOTWFrZVR4UmVzcG9uc2USDwoHdHhfanNvbhgBIAEoCSJiCg1TaWduVHhSZXF1ZXN0Eg8KB3R4X2pzb24YASABKAkSDwoHYWRkcmVzcxgCIAEoDBIWCg5hY2NvdW50X251bWJlchgDIAEoBBIXCg9zZXF1ZW5jZV9udW1iZXIYBCABKAQiMQoOU2lnblR4UmVzcG9uc2USHwoOc2lnbmVkX3R4X2pzb24YASABKAlSB3R4X2pzb24ikwEKEkVzdGltYXRlR2FzUmVxdWVzdBIPCgd0eF9qc29uGAEgASgJEg8KB2FkZHJlc3MYAiABKAwSFwoPc2VjdXJpdHlfbWFyZ2luGAMgASgNEhEKCXVwZGF0ZV90eBgEIAEoCBIWCg5hY2NvdW50X251bWJlchgFIAEoBBIXCg9zZXF1ZW5jZV9udW1iZXIYBiABKAQiOgoTRXN0aW1hdGVHYXNSZXNwb25zZRIPCgd0eF9qc29uGAEgASgJEhIKCmdhc193YW50ZWQYAiABKBIiOwoYQnJvYWRjYXN0VHhDb21taXRSZXF1ZXN0Eh8KDnNpZ25lZF90eF9qc29uGAEgASgJUgd0eF9qc29uIkkKGUJyb2FkY2FzdFR4Q29tbWl0UmVzcG9uc2USDgoGcmVzdWx0GAEgASgMEgwKBGhhc2gYAiABKAwSDgoGaGVpZ2h0GAMgASgSIikKFkFkZHJlc3NUb0JlY2gzMlJlcXVlc3QSDwoHYWRkcmVzcxgBIAEoDCIxChdBZGRyZXNzVG9CZWNoMzJSZXNwb25zZRIWCg5iZWNoMzJfYWRkcmVzcxgBIAEoCSIyChhBZGRyZXNzRnJvbUJlY2gzMlJlcXVlc3QSFgoOYmVjaDMyX2FkZHJlc3MYASABKAkiLAoZQWRkcmVzc0Zyb21CZWNoMzJSZXNwb25zZRIPCgdhZGRyZXNzGAEgASgMIi4KGkFkZHJlc3NGcm9tTW5lbW9uaWNSZXF1ZXN0EhAKCG1uZW1vbmljGAEgASgJIi4KG0FkZHJlc3NGcm9tTW5lbW9uaWNSZXNwb25zZRIPCgdhZGRyZXNzGAEgASgMIisKG1ZhbGlkYXRlTW5lbW9uaWNXb3JkUmVxdWVzdBIMCgR3b3JkGAEgASgJIi0KHFZhbGlkYXRlTW5lbW9uaWNXb3JkUmVzcG9uc2USDQoFdmFsaWQYASABKAgiLwodVmFsaWRhdGVNbmVtb25pY1BocmFzZVJlcXVlc3QSDgoGcGhyYXNlGAEgASgJIi8KHlZhbGlkYXRlTW5lbW9uaWNQaHJhc2VSZXNwb25zZRINCgV2YWxpZBgBIAEoCCIiCgxIZWxsb1JlcXVlc3QSEgoEbmFtZRgBIAEoCVIETmFtZSIrCg1IZWxsb1Jlc3BvbnNlEhoKCGdyZWV0aW5nGAEgASgJUghHcmVldGluZyIoChJIZWxsb1N0cmVhbVJlcXVlc3QSEgoEbmFtZRgBIAEoCVIETmFtZSIxChNIZWxsb1N0cmVhbVJlc3BvbnNlEhoKCGdyZWV0aW5nGAEgASgJUghHcmVldGluZyIpChhHTk9OQVRJVkVUWVBFU19CeXRlc0xpc3QSDQoFVmFsdWUYASADKAxCLFoqZ2l0aHViLmNvbS9nbm9sYW5nL2dub25hdGl2ZS92NC9hcGkvZ2VuL2dvYgZwcm90bzM");
+ fileDesc("ChRnbm9uYXRpdmV0eXBlcy5wcm90bxIVbGFuZC5nbm8uZ25vbmF0aXZlLnYxIiIKEFNldFJlbW90ZVJlcXVlc3QSDgoGcmVtb3RlGAEgASgJIhMKEVNldFJlbW90ZVJlc3BvbnNlIhIKEEdldFJlbW90ZVJlcXVlc3QiIwoRR2V0UmVtb3RlUmVzcG9uc2USDgoGcmVtb3RlGAEgASgJIiUKEVNldENoYWluSURSZXF1ZXN0EhAKCGNoYWluX2lkGAEgASgJIhQKElNldENoYWluSURSZXNwb25zZSITChFHZXRDaGFpbklEUmVxdWVzdCImChJHZXRDaGFpbklEUmVzcG9uc2USEAoIY2hhaW5faWQYASABKAkiNwoSU2V0UGFzc3dvcmRSZXF1ZXN0EhAKCHBhc3N3b3JkGAEgASgJEg8KB2FkZHJlc3MYAiABKAwiFQoTU2V0UGFzc3dvcmRSZXNwb25zZSJAChVSb3RhdGVQYXNzd29yZFJlcXVlc3QSFAoMbmV3X3Bhc3N3b3JkGAEgASgJEhEKCWFkZHJlc3NlcxgCIAMoDCIYChZSb3RhdGVQYXNzd29yZFJlc3BvbnNlIh8KHUdlbmVyYXRlUmVjb3ZlcnlQaHJhc2VSZXF1ZXN0IjAKHkdlbmVyYXRlUmVjb3ZlcnlQaHJhc2VSZXNwb25zZRIOCgZwaHJhc2UYASABKAkiRwoHS2V5SW5mbxIMCgR0eXBlGAEgASgNEgwKBG5hbWUYAiABKAkSDwoHcHViX2tleRgDIAEoDBIPCgdhZGRyZXNzGAQgASgMIiUKBENvaW4SDQoFZGVub20YASABKAkSDgoGYW1vdW50GAIgASgSIoUBCgtCYXNlQWNjb3VudBIPCgdhZGRyZXNzGAEgASgMEioKBWNvaW5zGAIgAygLMhsubGFuZC5nbm8uZ25vbmF0aXZlLnYxLkNvaW4SDwoHcHViX2tleRgDIAEoDBIWCg5hY2NvdW50X251bWJlchgEIAEoBBIQCghzZXF1ZW5jZRgFIAEoBCIUChJMaXN0S2V5SW5mb1JlcXVlc3QiTQoTTGlzdEtleUluZm9SZXNwb25zZRI2CgRrZXlzGAEgAygLMh4ubGFuZC5nbm8uZ25vbmF0aXZlLnYxLktleUluZm9SCGtleV9pbmZvIiMKE0hhc0tleUJ5TmFtZVJlcXVlc3QSDAoEbmFtZRgBIAEoCSIjChRIYXNLZXlCeU5hbWVSZXNwb25zZRILCgNoYXMYASABKAgiKQoWSGFzS2V5QnlBZGRyZXNzUmVxdWVzdBIPCgdhZGRyZXNzGAEgASgMIiYKF0hhc0tleUJ5QWRkcmVzc1Jlc3BvbnNlEgsKA2hhcxgBIAEoCCI2ChxIYXNLZXlCeU5hbWVPckFkZHJlc3NSZXF1ZXN0EhYKDm5hbWVfb3JfYmVjaDMyGAEgASgJIiwKHUhhc0tleUJ5TmFtZU9yQWRkcmVzc1Jlc3BvbnNlEgsKA2hhcxgBIAEoCCInChdHZXRLZXlJbmZvQnlOYW1lUmVxdWVzdBIMCgRuYW1lGAEgASgJIlEKGEdldEtleUluZm9CeU5hbWVSZXNwb25zZRI1CgNrZXkYASABKAsyHi5sYW5kLmduby5nbm9uYXRpdmUudjEuS2V5SW5mb1IIa2V5X2luZm8iLQoaR2V0S2V5SW5mb0J5QWRkcmVzc1JlcXVlc3QSDwoHYWRkcmVzcxgBIAEoDCJUChtHZXRLZXlJbmZvQnlBZGRyZXNzUmVzcG9uc2USNQoDa2V5GAEgASgLMh4ubGFuZC5nbm8uZ25vbmF0aXZlLnYxLktleUluZm9SCGtleV9pbmZvIjoKIEdldEtleUluZm9CeU5hbWVPckFkZHJlc3NSZXF1ZXN0EhYKDm5hbWVfb3JfYmVjaDMyGAEgASgJIloKIUdldEtleUluZm9CeU5hbWVPckFkZHJlc3NSZXNwb25zZRI1CgNrZXkYASABKAsyHi5sYW5kLmduby5nbm9uYXRpdmUudjEuS2V5SW5mb1IIa2V5X2luZm8iiAEKFENyZWF0ZUFjY291bnRSZXF1ZXN0EhYKDm5hbWVfb3JfYmVjaDMyGAEgASgJEhAKCG1uZW1vbmljGAIgASgJEhQKDGJpcDM5X3Bhc3N3ZBgDIAEoCRIQCghwYXNzd29yZBgEIAEoCRIPCgdhY2NvdW50GAUgASgNEg0KBWluZGV4GAYgASgNIk4KFUNyZWF0ZUFjY291bnRSZXNwb25zZRI1CgNrZXkYASABKAsyHi5sYW5kLmduby5nbm9uYXRpdmUudjEuS2V5SW5mb1IIa2V5X2luZm8iYwoTQ3JlYXRlTGVkZ2VyUmVxdWVzdBIMCgRuYW1lGAEgASgJEhEKCWFsZ29yaXRobRgCIAEoCRILCgNocnAYAyABKAkSDwoHYWNjb3VudBgEIAEoDRINCgVpbmRleBgFIAEoDSJNChRDcmVhdGVMZWRnZXJSZXNwb25zZRI1CgNrZXkYASABKAsyHi5sYW5kLmduby5nbm9uYXRpdmUudjEuS2V5SW5mb1IIa2V5X2luZm8iMAoWQWN0aXZhdGVBY2NvdW50UmVxdWVzdBIWCg5uYW1lX29yX2JlY2gzMhgBIAEoCSJmChdBY3RpdmF0ZUFjY291bnRSZXNwb25zZRI1CgNrZXkYASABKAsyHi5sYW5kLmduby5nbm9uYXRpdmUudjEuS2V5SW5mb1IIa2V5X2luZm8SFAoMaGFzX3Bhc3N3b3JkGAIgASgIIi0KGkdldEFjdGl2YXRlZEFjY291bnRSZXF1ZXN0Eg8KB2FkZHJlc3MYASABKAwiagobR2V0QWN0aXZhdGVkQWNjb3VudFJlc3BvbnNlEjUKA2tleRgBIAEoCzIeLmxhbmQuZ25vLmdub25hdGl2ZS52MS5LZXlJbmZvUghrZXlfaW5mbxIUCgxoYXNfcGFzc3dvcmQYAiABKAgiJgoTUXVlcnlBY2NvdW50UmVxdWVzdBIPCgdhZGRyZXNzGAEgASgMIlAKFFF1ZXJ5QWNjb3VudFJlc3BvbnNlEjgKDGFjY291bnRfaW5mbxgBIAEoCzIiLmxhbmQuZ25vLmdub25hdGl2ZS52MS5CYXNlQWNjb3VudCJXChREZWxldGVBY2NvdW50UmVxdWVzdBIWCg5uYW1lX29yX2JlY2gzMhgBIAEoCRIQCghwYXNzd29yZBgCIAEoCRIVCg1za2lwX3Bhc3N3b3JkGAMgASgIIhcKFURlbGV0ZUFjY291bnRSZXNwb25zZSIqCgxRdWVyeVJlcXVlc3QSDAoEcGF0aBgBIAEoCRIMCgRkYXRhGAIgASgMIh8KDVF1ZXJ5UmVzcG9uc2USDgoGcmVzdWx0GAEgASgMIjMKDVJlbmRlclJlcXVlc3QSFAoMcGFja2FnZV9wYXRoGAEgASgJEgwKBGFyZ3MYAiABKAkiIAoOUmVuZGVyUmVzcG9uc2USDgoGcmVzdWx0GAEgASgJIjgKDFFFdmFsUmVxdWVzdBIUCgxwYWNrYWdlX3BhdGgYASABKAkSEgoKZXhwcmVzc2lvbhgCIAEoCSIfCg1RRXZhbFJlc3BvbnNlEg4KBnJlc3VsdBgBIAEoCSKXAQoHTXNnQ2FsbBIUCgxwYWNrYWdlX3BhdGgYASABKAkSCwoDZm5jGAIgASgJEgwKBGFyZ3MYAyADKAkSKQoEc2VuZBgEIAMoCzIbLmxhbmQuZ25vLmdub25hdGl2ZS52MS5Db2luEjAKC21heF9kZXBvc2l0GAUgAygLMhsubGFuZC5nbm8uZ25vbmF0aXZlLnYxLkNvaW4ijAEKC0NhbGxSZXF1ZXN0Eg8KB2dhc19mZWUYASABKAkSEgoKZ2FzX3dhbnRlZBgCIAEoEhIMCgRtZW1vGAMgASgJEhYKDmNhbGxlcl9hZGRyZXNzGAQgASgMEjIKBG1zZ3MYBSADKAsyHi5sYW5kLmduby5nbm9uYXRpdmUudjEuTXNnQ2FsbFIETXNncyI8CgxDYWxsUmVzcG9uc2USDgoGcmVzdWx0GAEgASgMEgwKBGhhc2gYAiABKAwSDgoGaGVpZ2h0GAMgASgSIkoKB01zZ1NlbmQSEgoKdG9fYWRkcmVzcxgBIAEoDBIrCgZhbW91bnQYAiADKAsyGy5sYW5kLmduby5nbm9uYXRpdmUudjEuQ29pbiKMAQoLU2VuZFJlcXVlc3QSDwoHZ2FzX2ZlZRgBIAEoCRISCgpnYXNfd2FudGVkGAIgASgSEgwKBG1lbW8YAyABKAkSFgoOY2FsbGVyX2FkZHJlc3MYBCABKAwSMgoEbXNncxgFIAMoCzIeLmxhbmQuZ25vLmdub25hdGl2ZS52MS5Nc2dTZW5kUgRNc2dzIiwKDFNlbmRSZXNwb25zZRIMCgRoYXNoGAEgASgMEg4KBmhlaWdodBgCIAEoEiJ2CgZNc2dSdW4SDwoHcGFja2FnZRgBIAEoCRIpCgRzZW5kGAIgAygLMhsubGFuZC5nbm8uZ25vbmF0aXZlLnYxLkNvaW4SMAoLbWF4X2RlcG9zaXQYAyADKAsyGy5sYW5kLmduby5nbm9uYXRpdmUudjEuQ29pbiKKAQoKUnVuUmVxdWVzdBIPCgdnYXNfZmVlGAEgASgJEhIKCmdhc193YW50ZWQYAiABKBISDAoEbWVtbxgDIAEoCRIWCg5jYWxsZXJfYWRkcmVzcxgEIAEoDBIxCgRtc2dzGAUgAygLMh0ubGFuZC5nbm8uZ25vbmF0aXZlLnYxLk1zZ1J1blIETXNncyI7CgtSdW5SZXNwb25zZRIOCgZyZXN1bHQYASABKAkSDAoEaGFzaBgCIAEoDBIOCgZoZWlnaHQYAyABKBIiIQoOTWFrZVR4UmVzcG9uc2USDwoHdHhfanNvbhgBIAEoCSJiCg1TaWduVHhSZXF1ZXN0Eg8KB3R4X2pzb24YASABKAkSDwoHYWRkcmVzcxgCIAEoDBIWCg5hY2NvdW50X251bWJlchgDIAEoBBIXCg9zZXF1ZW5jZV9udW1iZXIYBCABKAQiMQoOU2lnblR4UmVzcG9uc2USHwoOc2lnbmVkX3R4X2pzb24YASABKAlSB3R4X2pzb24iYgoSRXN0aW1hdGVHYXNSZXF1ZXN0Eg8KB3R4X2pzb24YASABKAkSDwoHYWRkcmVzcxgCIAEoDBIXCg9zZWN1cml0eV9tYXJnaW4YAyABKA0SEQoJdXBkYXRlX3R4GAQgASgIIjoKE0VzdGltYXRlR2FzUmVzcG9uc2USDwoHdHhfanNvbhgBIAEoCRISCgpnYXNfd2FudGVkGAIgASgSIogBChVFc3RpbWF0ZUdhc0ZlZVJlcXVlc3QSDwoHdHhfanNvbhgBIAEoCRIPCgdhZGRyZXNzGAIgASgMEhsKE2dhc19zZWN1cml0eV9tYXJnaW4YAyABKA0SHQoVcHJpY2Vfc2VjdXJpdHlfbWFyZ2luGAQgASgNEhEKCXVwZGF0ZV90eBgFIAEoCCJnChZFc3RpbWF0ZUdhc0ZlZVJlc3BvbnNlEg8KB3R4X2pzb24YASABKAkSEgoKZ2FzX3dhbnRlZBgCIAEoEhIoCgNmZWUYAyABKAsyGy5sYW5kLmduby5nbm9uYXRpdmUudjEuQ29pbiI7ChhCcm9hZGNhc3RUeENvbW1pdFJlcXVlc3QSHwoOc2lnbmVkX3R4X2pzb24YASABKAlSB3R4X2pzb24iSQoZQnJvYWRjYXN0VHhDb21taXRSZXNwb25zZRIOCgZyZXN1bHQYASABKAwSDAoEaGFzaBgCIAEoDBIOCgZoZWlnaHQYAyABKBIiKQoWQWRkcmVzc1RvQmVjaDMyUmVxdWVzdBIPCgdhZGRyZXNzGAEgASgMIjEKF0FkZHJlc3NUb0JlY2gzMlJlc3BvbnNlEhYKDmJlY2gzMl9hZGRyZXNzGAEgASgJIjIKGEFkZHJlc3NGcm9tQmVjaDMyUmVxdWVzdBIWCg5iZWNoMzJfYWRkcmVzcxgBIAEoCSIsChlBZGRyZXNzRnJvbUJlY2gzMlJlc3BvbnNlEg8KB2FkZHJlc3MYASABKAwiLgoaQWRkcmVzc0Zyb21NbmVtb25pY1JlcXVlc3QSEAoIbW5lbW9uaWMYASABKAkiLgobQWRkcmVzc0Zyb21NbmVtb25pY1Jlc3BvbnNlEg8KB2FkZHJlc3MYASABKAwiKwobVmFsaWRhdGVNbmVtb25pY1dvcmRSZXF1ZXN0EgwKBHdvcmQYASABKAkiLQocVmFsaWRhdGVNbmVtb25pY1dvcmRSZXNwb25zZRINCgV2YWxpZBgBIAEoCCIvCh1WYWxpZGF0ZU1uZW1vbmljUGhyYXNlUmVxdWVzdBIOCgZwaHJhc2UYASABKAkiLwoeVmFsaWRhdGVNbmVtb25pY1BocmFzZVJlc3BvbnNlEg0KBXZhbGlkGAEgASgIIiIKDEhlbGxvUmVxdWVzdBISCgRuYW1lGAEgASgJUgROYW1lIisKDUhlbGxvUmVzcG9uc2USGgoIZ3JlZXRpbmcYASABKAlSCEdyZWV0aW5nIigKEkhlbGxvU3RyZWFtUmVxdWVzdBISCgRuYW1lGAEgASgJUgROYW1lIjEKE0hlbGxvU3RyZWFtUmVzcG9uc2USGgoIZ3JlZXRpbmcYASABKAlSCEdyZWV0aW5nIikKGEdOT05BVElWRVRZUEVTX0J5dGVzTGlzdBINCgVWYWx1ZRgBIAMoDEIsWipnaXRodWIuY29tL2dub2xhbmcvZ25vbmF0aXZlL3Y0L2FwaS9nZW4vZ29iBnByb3RvMw");
/**
* messages
@@ -1413,20 +1413,6 @@ export type EstimateGasRequest = Message<"land.gno.gnonative.v1.EstimateGasReque
* @generated from field: bool update_tx = 4;
*/
updateTx: boolean;
-
- /**
- * The signer's account number on the blockchain. If 0 then query the blockchain for the value.
- *
- * @generated from field: uint64 account_number = 5;
- */
- accountNumber: bigint;
-
- /**
- * The sequence number of the signer's transactions on the blockchain. If 0 then query the blockchain for the value.
- *
- * @generated from field: uint64 sequence_number = 6;
- */
- sequenceNumber: bigint;
};
/**
@@ -1462,6 +1448,90 @@ export type EstimateGasResponse = Message<"land.gno.gnonative.v1.EstimateGasResp
export const EstimateGasResponseSchema: GenMessage = /*@__PURE__*/
messageDesc(file_gnonativetypes, 62);
+/**
+ * @generated from message land.gno.gnonative.v1.EstimateGasFeeRequest
+ */
+export type EstimateGasFeeRequest = Message<"land.gno.gnonative.v1.EstimateGasFeeRequest"> & {
+ /**
+ * The JSON encoding of the unsigned transaction (from MakeCallTx, etc.)
+ *
+ * @generated from field: string tx_json = 1;
+ */
+ txJson: string;
+
+ /**
+ * The address of the account to sign the transaction
+ *
+ * @generated from field: bytes address = 2;
+ */
+ address: Uint8Array;
+
+ /**
+ * The security margin to apply to the estimated gas amount.
+ * This number represents a decimal numeral value with two decimals precision, without the decimal separator. E.g. 1 means 0.01 and 10000 means 100.00.
+ * It will be multiplied by the estimated gas amount.
+ *
+ * @generated from field: uint32 gas_security_margin = 3;
+ */
+ gasSecurityMargin: number;
+
+ /**
+ * The security margin to apply to the gas price.
+ * This number represents a decimal numeral value with two decimals precision, without the decimal separator. E.g. 1 means 0.01 and 10000 means 100.00.
+ * It will be multiplied by the fetched gas price.
+ *
+ * @generated from field: uint32 price_security_margin = 4;
+ */
+ priceSecurityMargin: number;
+
+ /**
+ * The update boolean to update the gas wanted field in the transaction if true.
+ *
+ * @generated from field: bool update_tx = 5;
+ */
+ updateTx: boolean;
+};
+
+/**
+ * Describes the message land.gno.gnonative.v1.EstimateGasFeeRequest.
+ * Use `create(EstimateGasFeeRequestSchema)` to create a new message.
+ */
+export const EstimateGasFeeRequestSchema: GenMessage = /*@__PURE__*/
+ messageDesc(file_gnonativetypes, 63);
+
+/**
+ * @generated from message land.gno.gnonative.v1.EstimateGasFeeResponse
+ */
+export type EstimateGasFeeResponse = Message<"land.gno.gnonative.v1.EstimateGasFeeResponse"> & {
+ /**
+ * The JSON encoding of the unsigned transaction
+ *
+ * @generated from field: string tx_json = 1;
+ */
+ txJson: string;
+
+ /**
+ * The estimated gas wanted for the transaction
+ *
+ * @generated from field: sint64 gas_wanted = 2;
+ */
+ gasWanted: bigint;
+
+ /**
+ * The estimated fee for the transaction
+ *
+ * @generated from field: land.gno.gnonative.v1.Coin fee = 3;
+ */
+ fee?: Coin;
+};
+
+/**
+ * Describes the message land.gno.gnonative.v1.EstimateGasFeeResponse.
+ * Use `create(EstimateGasFeeResponseSchema)` to create a new message.
+ */
+export const EstimateGasFeeResponseSchema: GenMessage = /*@__PURE__*/
+ messageDesc(file_gnonativetypes, 64);
+
/**
* @generated from message land.gno.gnonative.v1.BroadcastTxCommitRequest
*/
@@ -1479,7 +1549,7 @@ export type BroadcastTxCommitRequest = Message<"land.gno.gnonative.v1.BroadcastT
* Use `create(BroadcastTxCommitRequestSchema)` to create a new message.
*/
export const BroadcastTxCommitRequestSchema: GenMessage = /*@__PURE__*/
- messageDesc(file_gnonativetypes, 63);
+ messageDesc(file_gnonativetypes, 65);
/**
* @generated from message land.gno.gnonative.v1.BroadcastTxCommitResponse
@@ -1510,7 +1580,7 @@ export type BroadcastTxCommitResponse = Message<"land.gno.gnonative.v1.Broadcast
* Use `create(BroadcastTxCommitResponseSchema)` to create a new message.
*/
export const BroadcastTxCommitResponseSchema: GenMessage = /*@__PURE__*/
- messageDesc(file_gnonativetypes, 64);
+ messageDesc(file_gnonativetypes, 66);
/**
* @generated from message land.gno.gnonative.v1.AddressToBech32Request
@@ -1527,7 +1597,7 @@ export type AddressToBech32Request = Message<"land.gno.gnonative.v1.AddressToBec
* Use `create(AddressToBech32RequestSchema)` to create a new message.
*/
export const AddressToBech32RequestSchema: GenMessage = /*@__PURE__*/
- messageDesc(file_gnonativetypes, 65);
+ messageDesc(file_gnonativetypes, 67);
/**
* @generated from message land.gno.gnonative.v1.AddressToBech32Response
@@ -1544,7 +1614,7 @@ export type AddressToBech32Response = Message<"land.gno.gnonative.v1.AddressToBe
* Use `create(AddressToBech32ResponseSchema)` to create a new message.
*/
export const AddressToBech32ResponseSchema: GenMessage = /*@__PURE__*/
- messageDesc(file_gnonativetypes, 66);
+ messageDesc(file_gnonativetypes, 68);
/**
* @generated from message land.gno.gnonative.v1.AddressFromBech32Request
@@ -1561,7 +1631,7 @@ export type AddressFromBech32Request = Message<"land.gno.gnonative.v1.AddressFro
* Use `create(AddressFromBech32RequestSchema)` to create a new message.
*/
export const AddressFromBech32RequestSchema: GenMessage = /*@__PURE__*/
- messageDesc(file_gnonativetypes, 67);
+ messageDesc(file_gnonativetypes, 69);
/**
* @generated from message land.gno.gnonative.v1.AddressFromBech32Response
@@ -1578,7 +1648,7 @@ export type AddressFromBech32Response = Message<"land.gno.gnonative.v1.AddressFr
* Use `create(AddressFromBech32ResponseSchema)` to create a new message.
*/
export const AddressFromBech32ResponseSchema: GenMessage = /*@__PURE__*/
- messageDesc(file_gnonativetypes, 68);
+ messageDesc(file_gnonativetypes, 70);
/**
* @generated from message land.gno.gnonative.v1.AddressFromMnemonicRequest
@@ -1595,7 +1665,7 @@ export type AddressFromMnemonicRequest = Message<"land.gno.gnonative.v1.AddressF
* Use `create(AddressFromMnemonicRequestSchema)` to create a new message.
*/
export const AddressFromMnemonicRequestSchema: GenMessage = /*@__PURE__*/
- messageDesc(file_gnonativetypes, 69);
+ messageDesc(file_gnonativetypes, 71);
/**
* @generated from message land.gno.gnonative.v1.AddressFromMnemonicResponse
@@ -1612,7 +1682,7 @@ export type AddressFromMnemonicResponse = Message<"land.gno.gnonative.v1.Address
* Use `create(AddressFromMnemonicResponseSchema)` to create a new message.
*/
export const AddressFromMnemonicResponseSchema: GenMessage = /*@__PURE__*/
- messageDesc(file_gnonativetypes, 70);
+ messageDesc(file_gnonativetypes, 72);
/**
* @generated from message land.gno.gnonative.v1.ValidateMnemonicWordRequest
@@ -1629,7 +1699,7 @@ export type ValidateMnemonicWordRequest = Message<"land.gno.gnonative.v1.Validat
* Use `create(ValidateMnemonicWordRequestSchema)` to create a new message.
*/
export const ValidateMnemonicWordRequestSchema: GenMessage = /*@__PURE__*/
- messageDesc(file_gnonativetypes, 71);
+ messageDesc(file_gnonativetypes, 73);
/**
* @generated from message land.gno.gnonative.v1.ValidateMnemonicWordResponse
@@ -1646,7 +1716,7 @@ export type ValidateMnemonicWordResponse = Message<"land.gno.gnonative.v1.Valida
* Use `create(ValidateMnemonicWordResponseSchema)` to create a new message.
*/
export const ValidateMnemonicWordResponseSchema: GenMessage = /*@__PURE__*/
- messageDesc(file_gnonativetypes, 72);
+ messageDesc(file_gnonativetypes, 74);
/**
* @generated from message land.gno.gnonative.v1.ValidateMnemonicPhraseRequest
@@ -1663,7 +1733,7 @@ export type ValidateMnemonicPhraseRequest = Message<"land.gno.gnonative.v1.Valid
* Use `create(ValidateMnemonicPhraseRequestSchema)` to create a new message.
*/
export const ValidateMnemonicPhraseRequestSchema: GenMessage = /*@__PURE__*/
- messageDesc(file_gnonativetypes, 73);
+ messageDesc(file_gnonativetypes, 75);
/**
* @generated from message land.gno.gnonative.v1.ValidateMnemonicPhraseResponse
@@ -1680,7 +1750,7 @@ export type ValidateMnemonicPhraseResponse = Message<"land.gno.gnonative.v1.Vali
* Use `create(ValidateMnemonicPhraseResponseSchema)` to create a new message.
*/
export const ValidateMnemonicPhraseResponseSchema: GenMessage = /*@__PURE__*/
- messageDesc(file_gnonativetypes, 74);
+ messageDesc(file_gnonativetypes, 76);
/**
* @generated from message land.gno.gnonative.v1.HelloRequest
@@ -1697,7 +1767,7 @@ export type HelloRequest = Message<"land.gno.gnonative.v1.HelloRequest"> & {
* Use `create(HelloRequestSchema)` to create a new message.
*/
export const HelloRequestSchema: GenMessage = /*@__PURE__*/
- messageDesc(file_gnonativetypes, 75);
+ messageDesc(file_gnonativetypes, 77);
/**
* @generated from message land.gno.gnonative.v1.HelloResponse
@@ -1714,7 +1784,7 @@ export type HelloResponse = Message<"land.gno.gnonative.v1.HelloResponse"> & {
* Use `create(HelloResponseSchema)` to create a new message.
*/
export const HelloResponseSchema: GenMessage = /*@__PURE__*/
- messageDesc(file_gnonativetypes, 76);
+ messageDesc(file_gnonativetypes, 78);
/**
* @generated from message land.gno.gnonative.v1.HelloStreamRequest
@@ -1731,7 +1801,7 @@ export type HelloStreamRequest = Message<"land.gno.gnonative.v1.HelloStreamReque
* Use `create(HelloStreamRequestSchema)` to create a new message.
*/
export const HelloStreamRequestSchema: GenMessage = /*@__PURE__*/
- messageDesc(file_gnonativetypes, 77);
+ messageDesc(file_gnonativetypes, 79);
/**
* @generated from message land.gno.gnonative.v1.HelloStreamResponse
@@ -1748,7 +1818,7 @@ export type HelloStreamResponse = Message<"land.gno.gnonative.v1.HelloStreamResp
* Use `create(HelloStreamResponseSchema)` to create a new message.
*/
export const HelloStreamResponseSchema: GenMessage = /*@__PURE__*/
- messageDesc(file_gnonativetypes, 78);
+ messageDesc(file_gnonativetypes, 80);
/**
* @generated from message land.gno.gnonative.v1.GNONATIVETYPES_BytesList
@@ -1765,5 +1835,5 @@ export type GNONATIVETYPES_BytesList = Message<"land.gno.gnonative.v1.GNONATIVET
* Use `create(GNONATIVETYPES_BytesListSchema)` to create a new message.
*/
export const GNONATIVETYPES_BytesListSchema: GenMessage = /*@__PURE__*/
- messageDesc(file_gnonativetypes, 79);
+ messageDesc(file_gnonativetypes, 81);
diff --git a/api/gen/es/rpc_pb.ts b/api/gen/es/rpc_pb.ts
index 8f15f15..e91a29a 100644
--- a/api/gen/es/rpc_pb.ts
+++ b/api/gen/es/rpc_pb.ts
@@ -4,7 +4,7 @@
import type { GenEnum, GenFile, GenMessage, GenService } from "@bufbuild/protobuf/codegenv2";
import { enumDesc, fileDesc, messageDesc, serviceDesc } from "@bufbuild/protobuf/codegenv2";
-import type { ActivateAccountRequestSchema, ActivateAccountResponseSchema, AddressFromBech32RequestSchema, AddressFromBech32ResponseSchema, AddressFromMnemonicRequestSchema, AddressFromMnemonicResponseSchema, AddressToBech32RequestSchema, AddressToBech32ResponseSchema, BroadcastTxCommitRequestSchema, BroadcastTxCommitResponseSchema, CallRequestSchema, CallResponseSchema, CreateAccountRequestSchema, CreateAccountResponseSchema, CreateLedgerRequestSchema, CreateLedgerResponseSchema, DeleteAccountRequestSchema, DeleteAccountResponseSchema, EstimateGasRequestSchema, EstimateGasResponseSchema, GenerateRecoveryPhraseRequestSchema, GenerateRecoveryPhraseResponseSchema, GetActivatedAccountRequestSchema, GetActivatedAccountResponseSchema, GetChainIDRequestSchema, GetChainIDResponseSchema, GetKeyInfoByAddressRequestSchema, GetKeyInfoByAddressResponseSchema, GetKeyInfoByNameOrAddressRequestSchema, GetKeyInfoByNameOrAddressResponseSchema, GetKeyInfoByNameRequestSchema, GetKeyInfoByNameResponseSchema, GetRemoteRequestSchema, GetRemoteResponseSchema, HasKeyByAddressRequestSchema, HasKeyByAddressResponseSchema, HasKeyByNameOrAddressRequestSchema, HasKeyByNameOrAddressResponseSchema, HasKeyByNameRequestSchema, HasKeyByNameResponseSchema, HelloRequestSchema, HelloResponseSchema, HelloStreamRequestSchema, HelloStreamResponseSchema, ListKeyInfoRequestSchema, ListKeyInfoResponseSchema, MakeTxResponseSchema, QEvalRequestSchema, QEvalResponseSchema, QueryAccountRequestSchema, QueryAccountResponseSchema, QueryRequestSchema, QueryResponseSchema, RenderRequestSchema, RenderResponseSchema, RotatePasswordRequestSchema, RotatePasswordResponseSchema, RunRequestSchema, RunResponseSchema, SendRequestSchema, SendResponseSchema, SetChainIDRequestSchema, SetChainIDResponseSchema, SetPasswordRequestSchema, SetPasswordResponseSchema, SetRemoteRequestSchema, SetRemoteResponseSchema, SignTxRequestSchema, SignTxResponseSchema, ValidateMnemonicPhraseRequestSchema, ValidateMnemonicPhraseResponseSchema, ValidateMnemonicWordRequestSchema, ValidateMnemonicWordResponseSchema } from "./gnonativetypes_pb";
+import type { ActivateAccountRequestSchema, ActivateAccountResponseSchema, AddressFromBech32RequestSchema, AddressFromBech32ResponseSchema, AddressFromMnemonicRequestSchema, AddressFromMnemonicResponseSchema, AddressToBech32RequestSchema, AddressToBech32ResponseSchema, BroadcastTxCommitRequestSchema, BroadcastTxCommitResponseSchema, CallRequestSchema, CallResponseSchema, CreateAccountRequestSchema, CreateAccountResponseSchema, CreateLedgerRequestSchema, CreateLedgerResponseSchema, DeleteAccountRequestSchema, DeleteAccountResponseSchema, EstimateGasFeeRequestSchema, EstimateGasFeeResponseSchema, EstimateGasRequestSchema, EstimateGasResponseSchema, GenerateRecoveryPhraseRequestSchema, GenerateRecoveryPhraseResponseSchema, GetActivatedAccountRequestSchema, GetActivatedAccountResponseSchema, GetChainIDRequestSchema, GetChainIDResponseSchema, GetKeyInfoByAddressRequestSchema, GetKeyInfoByAddressResponseSchema, GetKeyInfoByNameOrAddressRequestSchema, GetKeyInfoByNameOrAddressResponseSchema, GetKeyInfoByNameRequestSchema, GetKeyInfoByNameResponseSchema, GetRemoteRequestSchema, GetRemoteResponseSchema, HasKeyByAddressRequestSchema, HasKeyByAddressResponseSchema, HasKeyByNameOrAddressRequestSchema, HasKeyByNameOrAddressResponseSchema, HasKeyByNameRequestSchema, HasKeyByNameResponseSchema, HelloRequestSchema, HelloResponseSchema, HelloStreamRequestSchema, HelloStreamResponseSchema, ListKeyInfoRequestSchema, ListKeyInfoResponseSchema, MakeTxResponseSchema, QEvalRequestSchema, QEvalResponseSchema, QueryAccountRequestSchema, QueryAccountResponseSchema, QueryRequestSchema, QueryResponseSchema, RenderRequestSchema, RenderResponseSchema, RotatePasswordRequestSchema, RotatePasswordResponseSchema, RunRequestSchema, RunResponseSchema, SendRequestSchema, SendResponseSchema, SetChainIDRequestSchema, SetChainIDResponseSchema, SetPasswordRequestSchema, SetPasswordResponseSchema, SetRemoteRequestSchema, SetRemoteResponseSchema, SignTxRequestSchema, SignTxResponseSchema, ValidateMnemonicPhraseRequestSchema, ValidateMnemonicPhraseResponseSchema, ValidateMnemonicWordRequestSchema, ValidateMnemonicWordResponseSchema } from "./gnonativetypes_pb";
import { file_gnonativetypes } from "./gnonativetypes_pb";
import type { Message } from "@bufbuild/protobuf";
@@ -12,7 +12,7 @@ import type { Message } from "@bufbuild/protobuf";
* Describes the file rpc.proto.
*/
export const file_rpc: GenFile = /*@__PURE__*/
- fileDesc("CglycGMucHJvdG8SFWxhbmQuZ25vLmdub25hdGl2ZS52MSI7CgpFcnJEZXRhaWxzEi0KBWNvZGVzGAEgAygOMh4ubGFuZC5nbm8uZ25vbmF0aXZlLnYxLkVyckNvZGUqtAYKB0VyckNvZGUSDQoJVW5kZWZpbmVkEAASCAoEVE9ETxABEhUKEUVyck5vdEltcGxlbWVudGVkEAISDwoLRXJySW50ZXJuYWwQAxITCg9FcnJJbnZhbGlkSW5wdXQQZBIYChRFcnJCcmlkZ2VJbnRlcnJ1cHRlZBBlEhMKD0Vyck1pc3NpbmdJbnB1dBBmEhQKEEVyclNlcmlhbGl6YXRpb24QZxIWChJFcnJEZXNlcmlhbGl6YXRpb24QaBISCg5FcnJJbml0U2VydmljZRBpEhAKDEVyclNldFJlbW90ZRBqEhwKF0VyckNyeXB0b0tleVR5cGVVbmtub3duEJYBEhkKFEVyckNyeXB0b0tleU5vdEZvdW5kEJcBEhcKEkVyck5vQWN0aXZlQWNjb3VudBCYARIVChBFcnJSdW5HUlBDU2VydmVyEJkBEhgKE0VyckRlY3J5cHRpb25GYWlsZWQQmgESEAoLRXJyVHhEZWNvZGUQyAESFwoSRXJySW52YWxpZFNlcXVlbmNlEMkBEhQKD0VyclVuYXV0aG9yaXplZBDKARIZChRFcnJJbnN1ZmZpY2llbnRGdW5kcxDLARIWChFFcnJVbmtub3duUmVxdWVzdBDMARIWChFFcnJJbnZhbGlkQWRkcmVzcxDNARIWChFFcnJVbmtub3duQWRkcmVzcxDOARIVChBFcnJJbnZhbGlkUHViS2V5EM8BEhkKFEVyckluc3VmZmljaWVudENvaW5zENABEhQKD0VyckludmFsaWRDb2lucxDRARIYChNFcnJJbnZhbGlkR2FzV2FudGVkENIBEhAKC0Vyck91dE9mR2FzENMBEhQKD0Vyck1lbW9Ub29MYXJnZRDUARIXChJFcnJJbnN1ZmZpY2llbnRGZWUQ1QESGQoURXJyVG9vTWFueVNpZ25hdHVyZXMQ1gESFAoPRXJyTm9TaWduYXR1cmVzENcBEhMKDkVyckdhc092ZXJmbG93ENgBEhYKEUVyckludmFsaWRQa2dQYXRoENkBEhMKDkVyckludmFsaWRTdG10ENoBEhMKDkVyckludmFsaWRFeHByENsBMrsgChBHbm9OYXRpdmVTZXJ2aWNlEl4KCVNldFJlbW90ZRInLmxhbmQuZ25vLmdub25hdGl2ZS52MS5TZXRSZW1vdGVSZXF1ZXN0GigubGFuZC5nbm8uZ25vbmF0aXZlLnYxLlNldFJlbW90ZVJlc3BvbnNlEl4KCUdldFJlbW90ZRInLmxhbmQuZ25vLmdub25hdGl2ZS52MS5HZXRSZW1vdGVSZXF1ZXN0GigubGFuZC5nbm8uZ25vbmF0aXZlLnYxLkdldFJlbW90ZVJlc3BvbnNlEmEKClNldENoYWluSUQSKC5sYW5kLmduby5nbm9uYXRpdmUudjEuU2V0Q2hhaW5JRFJlcXVlc3QaKS5sYW5kLmduby5nbm9uYXRpdmUudjEuU2V0Q2hhaW5JRFJlc3BvbnNlEmEKCkdldENoYWluSUQSKC5sYW5kLmduby5nbm9uYXRpdmUudjEuR2V0Q2hhaW5JRFJlcXVlc3QaKS5sYW5kLmduby5nbm9uYXRpdmUudjEuR2V0Q2hhaW5JRFJlc3BvbnNlEoUBChZHZW5lcmF0ZVJlY292ZXJ5UGhyYXNlEjQubGFuZC5nbm8uZ25vbmF0aXZlLnYxLkdlbmVyYXRlUmVjb3ZlcnlQaHJhc2VSZXF1ZXN0GjUubGFuZC5nbm8uZ25vbmF0aXZlLnYxLkdlbmVyYXRlUmVjb3ZlcnlQaHJhc2VSZXNwb25zZRJkCgtMaXN0S2V5SW5mbxIpLmxhbmQuZ25vLmdub25hdGl2ZS52MS5MaXN0S2V5SW5mb1JlcXVlc3QaKi5sYW5kLmduby5nbm9uYXRpdmUudjEuTGlzdEtleUluZm9SZXNwb25zZRJnCgxIYXNLZXlCeU5hbWUSKi5sYW5kLmduby5nbm9uYXRpdmUudjEuSGFzS2V5QnlOYW1lUmVxdWVzdBorLmxhbmQuZ25vLmdub25hdGl2ZS52MS5IYXNLZXlCeU5hbWVSZXNwb25zZRJwCg9IYXNLZXlCeUFkZHJlc3MSLS5sYW5kLmduby5nbm9uYXRpdmUudjEuSGFzS2V5QnlBZGRyZXNzUmVxdWVzdBouLmxhbmQuZ25vLmdub25hdGl2ZS52MS5IYXNLZXlCeUFkZHJlc3NSZXNwb25zZRKCAQoVSGFzS2V5QnlOYW1lT3JBZGRyZXNzEjMubGFuZC5nbm8uZ25vbmF0aXZlLnYxLkhhc0tleUJ5TmFtZU9yQWRkcmVzc1JlcXVlc3QaNC5sYW5kLmduby5nbm9uYXRpdmUudjEuSGFzS2V5QnlOYW1lT3JBZGRyZXNzUmVzcG9uc2UScwoQR2V0S2V5SW5mb0J5TmFtZRIuLmxhbmQuZ25vLmdub25hdGl2ZS52MS5HZXRLZXlJbmZvQnlOYW1lUmVxdWVzdBovLmxhbmQuZ25vLmdub25hdGl2ZS52MS5HZXRLZXlJbmZvQnlOYW1lUmVzcG9uc2USfAoTR2V0S2V5SW5mb0J5QWRkcmVzcxIxLmxhbmQuZ25vLmdub25hdGl2ZS52MS5HZXRLZXlJbmZvQnlBZGRyZXNzUmVxdWVzdBoyLmxhbmQuZ25vLmdub25hdGl2ZS52MS5HZXRLZXlJbmZvQnlBZGRyZXNzUmVzcG9uc2USjgEKGUdldEtleUluZm9CeU5hbWVPckFkZHJlc3MSNy5sYW5kLmduby5nbm9uYXRpdmUudjEuR2V0S2V5SW5mb0J5TmFtZU9yQWRkcmVzc1JlcXVlc3QaOC5sYW5kLmduby5nbm9uYXRpdmUudjEuR2V0S2V5SW5mb0J5TmFtZU9yQWRkcmVzc1Jlc3BvbnNlEmoKDUNyZWF0ZUFjY291bnQSKy5sYW5kLmduby5nbm9uYXRpdmUudjEuQ3JlYXRlQWNjb3VudFJlcXVlc3QaLC5sYW5kLmduby5nbm9uYXRpdmUudjEuQ3JlYXRlQWNjb3VudFJlc3BvbnNlEmcKDENyZWF0ZUxlZGdlchIqLmxhbmQuZ25vLmdub25hdGl2ZS52MS5DcmVhdGVMZWRnZXJSZXF1ZXN0GisubGFuZC5nbm8uZ25vbmF0aXZlLnYxLkNyZWF0ZUxlZGdlclJlc3BvbnNlEnAKD0FjdGl2YXRlQWNjb3VudBItLmxhbmQuZ25vLmdub25hdGl2ZS52MS5BY3RpdmF0ZUFjY291bnRSZXF1ZXN0Gi4ubGFuZC5nbm8uZ25vbmF0aXZlLnYxLkFjdGl2YXRlQWNjb3VudFJlc3BvbnNlEmQKC1NldFBhc3N3b3JkEikubGFuZC5nbm8uZ25vbmF0aXZlLnYxLlNldFBhc3N3b3JkUmVxdWVzdBoqLmxhbmQuZ25vLmdub25hdGl2ZS52MS5TZXRQYXNzd29yZFJlc3BvbnNlEm0KDlJvdGF0ZVBhc3N3b3JkEiwubGFuZC5nbm8uZ25vbmF0aXZlLnYxLlJvdGF0ZVBhc3N3b3JkUmVxdWVzdBotLmxhbmQuZ25vLmdub25hdGl2ZS52MS5Sb3RhdGVQYXNzd29yZFJlc3BvbnNlEnwKE0dldEFjdGl2YXRlZEFjY291bnQSMS5sYW5kLmduby5nbm9uYXRpdmUudjEuR2V0QWN0aXZhdGVkQWNjb3VudFJlcXVlc3QaMi5sYW5kLmduby5nbm9uYXRpdmUudjEuR2V0QWN0aXZhdGVkQWNjb3VudFJlc3BvbnNlEmcKDFF1ZXJ5QWNjb3VudBIqLmxhbmQuZ25vLmdub25hdGl2ZS52MS5RdWVyeUFjY291bnRSZXF1ZXN0GisubGFuZC5nbm8uZ25vbmF0aXZlLnYxLlF1ZXJ5QWNjb3VudFJlc3BvbnNlEmoKDURlbGV0ZUFjY291bnQSKy5sYW5kLmduby5nbm9uYXRpdmUudjEuRGVsZXRlQWNjb3VudFJlcXVlc3QaLC5sYW5kLmduby5nbm9uYXRpdmUudjEuRGVsZXRlQWNjb3VudFJlc3BvbnNlElIKBVF1ZXJ5EiMubGFuZC5nbm8uZ25vbmF0aXZlLnYxLlF1ZXJ5UmVxdWVzdBokLmxhbmQuZ25vLmdub25hdGl2ZS52MS5RdWVyeVJlc3BvbnNlElUKBlJlbmRlchIkLmxhbmQuZ25vLmdub25hdGl2ZS52MS5SZW5kZXJSZXF1ZXN0GiUubGFuZC5nbm8uZ25vbmF0aXZlLnYxLlJlbmRlclJlc3BvbnNlElIKBVFFdmFsEiMubGFuZC5nbm8uZ25vbmF0aXZlLnYxLlFFdmFsUmVxdWVzdBokLmxhbmQuZ25vLmdub25hdGl2ZS52MS5RRXZhbFJlc3BvbnNlElEKBENhbGwSIi5sYW5kLmduby5nbm9uYXRpdmUudjEuQ2FsbFJlcXVlc3QaIy5sYW5kLmduby5nbm9uYXRpdmUudjEuQ2FsbFJlc3BvbnNlMAESUQoEU2VuZBIiLmxhbmQuZ25vLmdub25hdGl2ZS52MS5TZW5kUmVxdWVzdBojLmxhbmQuZ25vLmdub25hdGl2ZS52MS5TZW5kUmVzcG9uc2UwARJOCgNSdW4SIS5sYW5kLmduby5nbm9uYXRpdmUudjEuUnVuUmVxdWVzdBoiLmxhbmQuZ25vLmdub25hdGl2ZS52MS5SdW5SZXNwb25zZTABElcKCk1ha2VDYWxsVHgSIi5sYW5kLmduby5nbm9uYXRpdmUudjEuQ2FsbFJlcXVlc3QaJS5sYW5kLmduby5nbm9uYXRpdmUudjEuTWFrZVR4UmVzcG9uc2USVwoKTWFrZVNlbmRUeBIiLmxhbmQuZ25vLmdub25hdGl2ZS52MS5TZW5kUmVxdWVzdBolLmxhbmQuZ25vLmdub25hdGl2ZS52MS5NYWtlVHhSZXNwb25zZRJVCglNYWtlUnVuVHgSIS5sYW5kLmduby5nbm9uYXRpdmUudjEuUnVuUmVxdWVzdBolLmxhbmQuZ25vLmdub25hdGl2ZS52MS5NYWtlVHhSZXNwb25zZRJkCgtFc3RpbWF0ZUdhcxIpLmxhbmQuZ25vLmdub25hdGl2ZS52MS5Fc3RpbWF0ZUdhc1JlcXVlc3QaKi5sYW5kLmduby5nbm9uYXRpdmUudjEuRXN0aW1hdGVHYXNSZXNwb25zZRJVCgZTaWduVHgSJC5sYW5kLmduby5nbm9uYXRpdmUudjEuU2lnblR4UmVxdWVzdBolLmxhbmQuZ25vLmdub25hdGl2ZS52MS5TaWduVHhSZXNwb25zZRJ4ChFCcm9hZGNhc3RUeENvbW1pdBIvLmxhbmQuZ25vLmdub25hdGl2ZS52MS5Ccm9hZGNhc3RUeENvbW1pdFJlcXVlc3QaMC5sYW5kLmduby5nbm9uYXRpdmUudjEuQnJvYWRjYXN0VHhDb21taXRSZXNwb25zZTABEnAKD0FkZHJlc3NUb0JlY2gzMhItLmxhbmQuZ25vLmdub25hdGl2ZS52MS5BZGRyZXNzVG9CZWNoMzJSZXF1ZXN0Gi4ubGFuZC5nbm8uZ25vbmF0aXZlLnYxLkFkZHJlc3NUb0JlY2gzMlJlc3BvbnNlEnYKEUFkZHJlc3NGcm9tQmVjaDMyEi8ubGFuZC5nbm8uZ25vbmF0aXZlLnYxLkFkZHJlc3NGcm9tQmVjaDMyUmVxdWVzdBowLmxhbmQuZ25vLmdub25hdGl2ZS52MS5BZGRyZXNzRnJvbUJlY2gzMlJlc3BvbnNlEnwKE0FkZHJlc3NGcm9tTW5lbW9uaWMSMS5sYW5kLmduby5nbm9uYXRpdmUudjEuQWRkcmVzc0Zyb21NbmVtb25pY1JlcXVlc3QaMi5sYW5kLmduby5nbm9uYXRpdmUudjEuQWRkcmVzc0Zyb21NbmVtb25pY1Jlc3BvbnNlEn8KFFZhbGlkYXRlTW5lbW9uaWNXb3JkEjIubGFuZC5nbm8uZ25vbmF0aXZlLnYxLlZhbGlkYXRlTW5lbW9uaWNXb3JkUmVxdWVzdBozLmxhbmQuZ25vLmdub25hdGl2ZS52MS5WYWxpZGF0ZU1uZW1vbmljV29yZFJlc3BvbnNlEoUBChZWYWxpZGF0ZU1uZW1vbmljUGhyYXNlEjQubGFuZC5nbm8uZ25vbmF0aXZlLnYxLlZhbGlkYXRlTW5lbW9uaWNQaHJhc2VSZXF1ZXN0GjUubGFuZC5nbm8uZ25vbmF0aXZlLnYxLlZhbGlkYXRlTW5lbW9uaWNQaHJhc2VSZXNwb25zZRJSCgVIZWxsbxIjLmxhbmQuZ25vLmdub25hdGl2ZS52MS5IZWxsb1JlcXVlc3QaJC5sYW5kLmduby5nbm9uYXRpdmUudjEuSGVsbG9SZXNwb25zZRJmCgtIZWxsb1N0cmVhbRIpLmxhbmQuZ25vLmdub25hdGl2ZS52MS5IZWxsb1N0cmVhbVJlcXVlc3QaKi5sYW5kLmduby5nbm9uYXRpdmUudjEuSGVsbG9TdHJlYW1SZXNwb25zZTABQjJaKmdpdGh1Yi5jb20vZ25vbGFuZy9nbm9uYXRpdmUvdjQvYXBpL2dlbi9nb6ICA1JUR2IGcHJvdG8z", [file_gnonativetypes]);
+ fileDesc("CglycGMucHJvdG8SFWxhbmQuZ25vLmdub25hdGl2ZS52MSI7CgpFcnJEZXRhaWxzEi0KBWNvZGVzGAEgAygOMh4ubGFuZC5nbm8uZ25vbmF0aXZlLnYxLkVyckNvZGUqtAYKB0VyckNvZGUSDQoJVW5kZWZpbmVkEAASCAoEVE9ETxABEhUKEUVyck5vdEltcGxlbWVudGVkEAISDwoLRXJySW50ZXJuYWwQAxITCg9FcnJJbnZhbGlkSW5wdXQQZBIYChRFcnJCcmlkZ2VJbnRlcnJ1cHRlZBBlEhMKD0Vyck1pc3NpbmdJbnB1dBBmEhQKEEVyclNlcmlhbGl6YXRpb24QZxIWChJFcnJEZXNlcmlhbGl6YXRpb24QaBISCg5FcnJJbml0U2VydmljZRBpEhAKDEVyclNldFJlbW90ZRBqEhwKF0VyckNyeXB0b0tleVR5cGVVbmtub3duEJYBEhkKFEVyckNyeXB0b0tleU5vdEZvdW5kEJcBEhcKEkVyck5vQWN0aXZlQWNjb3VudBCYARIVChBFcnJSdW5HUlBDU2VydmVyEJkBEhgKE0VyckRlY3J5cHRpb25GYWlsZWQQmgESEAoLRXJyVHhEZWNvZGUQyAESFwoSRXJySW52YWxpZFNlcXVlbmNlEMkBEhQKD0VyclVuYXV0aG9yaXplZBDKARIZChRFcnJJbnN1ZmZpY2llbnRGdW5kcxDLARIWChFFcnJVbmtub3duUmVxdWVzdBDMARIWChFFcnJJbnZhbGlkQWRkcmVzcxDNARIWChFFcnJVbmtub3duQWRkcmVzcxDOARIVChBFcnJJbnZhbGlkUHViS2V5EM8BEhkKFEVyckluc3VmZmljaWVudENvaW5zENABEhQKD0VyckludmFsaWRDb2lucxDRARIYChNFcnJJbnZhbGlkR2FzV2FudGVkENIBEhAKC0Vyck91dE9mR2FzENMBEhQKD0Vyck1lbW9Ub29MYXJnZRDUARIXChJFcnJJbnN1ZmZpY2llbnRGZWUQ1QESGQoURXJyVG9vTWFueVNpZ25hdHVyZXMQ1gESFAoPRXJyTm9TaWduYXR1cmVzENcBEhMKDkVyckdhc092ZXJmbG93ENgBEhYKEUVyckludmFsaWRQa2dQYXRoENkBEhMKDkVyckludmFsaWRTdG10ENoBEhMKDkVyckludmFsaWRFeHByENsBMqohChBHbm9OYXRpdmVTZXJ2aWNlEl4KCVNldFJlbW90ZRInLmxhbmQuZ25vLmdub25hdGl2ZS52MS5TZXRSZW1vdGVSZXF1ZXN0GigubGFuZC5nbm8uZ25vbmF0aXZlLnYxLlNldFJlbW90ZVJlc3BvbnNlEl4KCUdldFJlbW90ZRInLmxhbmQuZ25vLmdub25hdGl2ZS52MS5HZXRSZW1vdGVSZXF1ZXN0GigubGFuZC5nbm8uZ25vbmF0aXZlLnYxLkdldFJlbW90ZVJlc3BvbnNlEmEKClNldENoYWluSUQSKC5sYW5kLmduby5nbm9uYXRpdmUudjEuU2V0Q2hhaW5JRFJlcXVlc3QaKS5sYW5kLmduby5nbm9uYXRpdmUudjEuU2V0Q2hhaW5JRFJlc3BvbnNlEmEKCkdldENoYWluSUQSKC5sYW5kLmduby5nbm9uYXRpdmUudjEuR2V0Q2hhaW5JRFJlcXVlc3QaKS5sYW5kLmduby5nbm9uYXRpdmUudjEuR2V0Q2hhaW5JRFJlc3BvbnNlEoUBChZHZW5lcmF0ZVJlY292ZXJ5UGhyYXNlEjQubGFuZC5nbm8uZ25vbmF0aXZlLnYxLkdlbmVyYXRlUmVjb3ZlcnlQaHJhc2VSZXF1ZXN0GjUubGFuZC5nbm8uZ25vbmF0aXZlLnYxLkdlbmVyYXRlUmVjb3ZlcnlQaHJhc2VSZXNwb25zZRJkCgtMaXN0S2V5SW5mbxIpLmxhbmQuZ25vLmdub25hdGl2ZS52MS5MaXN0S2V5SW5mb1JlcXVlc3QaKi5sYW5kLmduby5nbm9uYXRpdmUudjEuTGlzdEtleUluZm9SZXNwb25zZRJnCgxIYXNLZXlCeU5hbWUSKi5sYW5kLmduby5nbm9uYXRpdmUudjEuSGFzS2V5QnlOYW1lUmVxdWVzdBorLmxhbmQuZ25vLmdub25hdGl2ZS52MS5IYXNLZXlCeU5hbWVSZXNwb25zZRJwCg9IYXNLZXlCeUFkZHJlc3MSLS5sYW5kLmduby5nbm9uYXRpdmUudjEuSGFzS2V5QnlBZGRyZXNzUmVxdWVzdBouLmxhbmQuZ25vLmdub25hdGl2ZS52MS5IYXNLZXlCeUFkZHJlc3NSZXNwb25zZRKCAQoVSGFzS2V5QnlOYW1lT3JBZGRyZXNzEjMubGFuZC5nbm8uZ25vbmF0aXZlLnYxLkhhc0tleUJ5TmFtZU9yQWRkcmVzc1JlcXVlc3QaNC5sYW5kLmduby5nbm9uYXRpdmUudjEuSGFzS2V5QnlOYW1lT3JBZGRyZXNzUmVzcG9uc2UScwoQR2V0S2V5SW5mb0J5TmFtZRIuLmxhbmQuZ25vLmdub25hdGl2ZS52MS5HZXRLZXlJbmZvQnlOYW1lUmVxdWVzdBovLmxhbmQuZ25vLmdub25hdGl2ZS52MS5HZXRLZXlJbmZvQnlOYW1lUmVzcG9uc2USfAoTR2V0S2V5SW5mb0J5QWRkcmVzcxIxLmxhbmQuZ25vLmdub25hdGl2ZS52MS5HZXRLZXlJbmZvQnlBZGRyZXNzUmVxdWVzdBoyLmxhbmQuZ25vLmdub25hdGl2ZS52MS5HZXRLZXlJbmZvQnlBZGRyZXNzUmVzcG9uc2USjgEKGUdldEtleUluZm9CeU5hbWVPckFkZHJlc3MSNy5sYW5kLmduby5nbm9uYXRpdmUudjEuR2V0S2V5SW5mb0J5TmFtZU9yQWRkcmVzc1JlcXVlc3QaOC5sYW5kLmduby5nbm9uYXRpdmUudjEuR2V0S2V5SW5mb0J5TmFtZU9yQWRkcmVzc1Jlc3BvbnNlEmoKDUNyZWF0ZUFjY291bnQSKy5sYW5kLmduby5nbm9uYXRpdmUudjEuQ3JlYXRlQWNjb3VudFJlcXVlc3QaLC5sYW5kLmduby5nbm9uYXRpdmUudjEuQ3JlYXRlQWNjb3VudFJlc3BvbnNlEmcKDENyZWF0ZUxlZGdlchIqLmxhbmQuZ25vLmdub25hdGl2ZS52MS5DcmVhdGVMZWRnZXJSZXF1ZXN0GisubGFuZC5nbm8uZ25vbmF0aXZlLnYxLkNyZWF0ZUxlZGdlclJlc3BvbnNlEnAKD0FjdGl2YXRlQWNjb3VudBItLmxhbmQuZ25vLmdub25hdGl2ZS52MS5BY3RpdmF0ZUFjY291bnRSZXF1ZXN0Gi4ubGFuZC5nbm8uZ25vbmF0aXZlLnYxLkFjdGl2YXRlQWNjb3VudFJlc3BvbnNlEmQKC1NldFBhc3N3b3JkEikubGFuZC5nbm8uZ25vbmF0aXZlLnYxLlNldFBhc3N3b3JkUmVxdWVzdBoqLmxhbmQuZ25vLmdub25hdGl2ZS52MS5TZXRQYXNzd29yZFJlc3BvbnNlEm0KDlJvdGF0ZVBhc3N3b3JkEiwubGFuZC5nbm8uZ25vbmF0aXZlLnYxLlJvdGF0ZVBhc3N3b3JkUmVxdWVzdBotLmxhbmQuZ25vLmdub25hdGl2ZS52MS5Sb3RhdGVQYXNzd29yZFJlc3BvbnNlEnwKE0dldEFjdGl2YXRlZEFjY291bnQSMS5sYW5kLmduby5nbm9uYXRpdmUudjEuR2V0QWN0aXZhdGVkQWNjb3VudFJlcXVlc3QaMi5sYW5kLmduby5nbm9uYXRpdmUudjEuR2V0QWN0aXZhdGVkQWNjb3VudFJlc3BvbnNlEmcKDFF1ZXJ5QWNjb3VudBIqLmxhbmQuZ25vLmdub25hdGl2ZS52MS5RdWVyeUFjY291bnRSZXF1ZXN0GisubGFuZC5nbm8uZ25vbmF0aXZlLnYxLlF1ZXJ5QWNjb3VudFJlc3BvbnNlEmoKDURlbGV0ZUFjY291bnQSKy5sYW5kLmduby5nbm9uYXRpdmUudjEuRGVsZXRlQWNjb3VudFJlcXVlc3QaLC5sYW5kLmduby5nbm9uYXRpdmUudjEuRGVsZXRlQWNjb3VudFJlc3BvbnNlElIKBVF1ZXJ5EiMubGFuZC5nbm8uZ25vbmF0aXZlLnYxLlF1ZXJ5UmVxdWVzdBokLmxhbmQuZ25vLmdub25hdGl2ZS52MS5RdWVyeVJlc3BvbnNlElUKBlJlbmRlchIkLmxhbmQuZ25vLmdub25hdGl2ZS52MS5SZW5kZXJSZXF1ZXN0GiUubGFuZC5nbm8uZ25vbmF0aXZlLnYxLlJlbmRlclJlc3BvbnNlElIKBVFFdmFsEiMubGFuZC5nbm8uZ25vbmF0aXZlLnYxLlFFdmFsUmVxdWVzdBokLmxhbmQuZ25vLmdub25hdGl2ZS52MS5RRXZhbFJlc3BvbnNlElEKBENhbGwSIi5sYW5kLmduby5nbm9uYXRpdmUudjEuQ2FsbFJlcXVlc3QaIy5sYW5kLmduby5nbm9uYXRpdmUudjEuQ2FsbFJlc3BvbnNlMAESUQoEU2VuZBIiLmxhbmQuZ25vLmdub25hdGl2ZS52MS5TZW5kUmVxdWVzdBojLmxhbmQuZ25vLmdub25hdGl2ZS52MS5TZW5kUmVzcG9uc2UwARJOCgNSdW4SIS5sYW5kLmduby5nbm9uYXRpdmUudjEuUnVuUmVxdWVzdBoiLmxhbmQuZ25vLmdub25hdGl2ZS52MS5SdW5SZXNwb25zZTABElcKCk1ha2VDYWxsVHgSIi5sYW5kLmduby5nbm9uYXRpdmUudjEuQ2FsbFJlcXVlc3QaJS5sYW5kLmduby5nbm9uYXRpdmUudjEuTWFrZVR4UmVzcG9uc2USVwoKTWFrZVNlbmRUeBIiLmxhbmQuZ25vLmdub25hdGl2ZS52MS5TZW5kUmVxdWVzdBolLmxhbmQuZ25vLmdub25hdGl2ZS52MS5NYWtlVHhSZXNwb25zZRJVCglNYWtlUnVuVHgSIS5sYW5kLmduby5nbm9uYXRpdmUudjEuUnVuUmVxdWVzdBolLmxhbmQuZ25vLmdub25hdGl2ZS52MS5NYWtlVHhSZXNwb25zZRJkCgtFc3RpbWF0ZUdhcxIpLmxhbmQuZ25vLmdub25hdGl2ZS52MS5Fc3RpbWF0ZUdhc1JlcXVlc3QaKi5sYW5kLmduby5nbm9uYXRpdmUudjEuRXN0aW1hdGVHYXNSZXNwb25zZRJtCg5Fc3RpbWF0ZUdhc0ZlZRIsLmxhbmQuZ25vLmdub25hdGl2ZS52MS5Fc3RpbWF0ZUdhc0ZlZVJlcXVlc3QaLS5sYW5kLmduby5nbm9uYXRpdmUudjEuRXN0aW1hdGVHYXNGZWVSZXNwb25zZRJVCgZTaWduVHgSJC5sYW5kLmduby5nbm9uYXRpdmUudjEuU2lnblR4UmVxdWVzdBolLmxhbmQuZ25vLmdub25hdGl2ZS52MS5TaWduVHhSZXNwb25zZRJ4ChFCcm9hZGNhc3RUeENvbW1pdBIvLmxhbmQuZ25vLmdub25hdGl2ZS52MS5Ccm9hZGNhc3RUeENvbW1pdFJlcXVlc3QaMC5sYW5kLmduby5nbm9uYXRpdmUudjEuQnJvYWRjYXN0VHhDb21taXRSZXNwb25zZTABEnAKD0FkZHJlc3NUb0JlY2gzMhItLmxhbmQuZ25vLmdub25hdGl2ZS52MS5BZGRyZXNzVG9CZWNoMzJSZXF1ZXN0Gi4ubGFuZC5nbm8uZ25vbmF0aXZlLnYxLkFkZHJlc3NUb0JlY2gzMlJlc3BvbnNlEnYKEUFkZHJlc3NGcm9tQmVjaDMyEi8ubGFuZC5nbm8uZ25vbmF0aXZlLnYxLkFkZHJlc3NGcm9tQmVjaDMyUmVxdWVzdBowLmxhbmQuZ25vLmdub25hdGl2ZS52MS5BZGRyZXNzRnJvbUJlY2gzMlJlc3BvbnNlEnwKE0FkZHJlc3NGcm9tTW5lbW9uaWMSMS5sYW5kLmduby5nbm9uYXRpdmUudjEuQWRkcmVzc0Zyb21NbmVtb25pY1JlcXVlc3QaMi5sYW5kLmduby5nbm9uYXRpdmUudjEuQWRkcmVzc0Zyb21NbmVtb25pY1Jlc3BvbnNlEn8KFFZhbGlkYXRlTW5lbW9uaWNXb3JkEjIubGFuZC5nbm8uZ25vbmF0aXZlLnYxLlZhbGlkYXRlTW5lbW9uaWNXb3JkUmVxdWVzdBozLmxhbmQuZ25vLmdub25hdGl2ZS52MS5WYWxpZGF0ZU1uZW1vbmljV29yZFJlc3BvbnNlEoUBChZWYWxpZGF0ZU1uZW1vbmljUGhyYXNlEjQubGFuZC5nbm8uZ25vbmF0aXZlLnYxLlZhbGlkYXRlTW5lbW9uaWNQaHJhc2VSZXF1ZXN0GjUubGFuZC5nbm8uZ25vbmF0aXZlLnYxLlZhbGlkYXRlTW5lbW9uaWNQaHJhc2VSZXNwb25zZRJSCgVIZWxsbxIjLmxhbmQuZ25vLmdub25hdGl2ZS52MS5IZWxsb1JlcXVlc3QaJC5sYW5kLmduby5nbm9uYXRpdmUudjEuSGVsbG9SZXNwb25zZRJmCgtIZWxsb1N0cmVhbRIpLmxhbmQuZ25vLmdub25hdGl2ZS52MS5IZWxsb1N0cmVhbVJlcXVlc3QaKi5sYW5kLmduby5nbm9uYXRpdmUudjEuSGVsbG9TdHJlYW1SZXNwb25zZTABQjJaKmdpdGh1Yi5jb20vZ25vbGFuZy9nbm9uYXRpdmUvdjQvYXBpL2dlbi9nb6ICA1JUR2IGcHJvdG8z", [file_gnonativetypes]);
/**
* @generated from message land.gno.gnonative.v1.ErrDetails
@@ -629,6 +629,7 @@ export const GnoNativeService: GenService<{
/**
* EstimateGas estimates the least amount of gas required for the transaction to go through on the chain (minimum gas wanted), with a security margin.
* If UpdateTx is true, then update the transaction with the gasWanted amount.
+ * This uses the remote node determined by SetRemote.
*
* @generated from rpc land.gno.gnonative.v1.GnoNativeService.EstimateGas
*/
@@ -637,6 +638,19 @@ export const GnoNativeService: GenService<{
input: typeof EstimateGasRequestSchema;
output: typeof EstimateGasResponseSchema;
},
+ /**
+ * EstimateGasFee estimates the fee for the transaction to go through on the chain (minimum gas wanted times the gas price), with a security margin.
+ * If UpdateTx is true, then update the transaction with the gasWanted amount.
+ * This uses the remote node determined by SetRemote.
+ * This is similar to EstimateGas but also fetches the gas price from the remote node.
+ *
+ * @generated from rpc land.gno.gnonative.v1.GnoNativeService.EstimateGasFee
+ */
+ estimateGasFee: {
+ methodKind: "unary";
+ input: typeof EstimateGasFeeRequestSchema;
+ output: typeof EstimateGasFeeResponseSchema;
+ },
/**
* Sign the transaction using the account with the given address.
* If there is no activated account with the given address, return [ErrCode](#land.gno.gnonative.v1.ErrCode).ErrNoActiveAccount.
diff --git a/api/gen/go/_goconnect/rpc.connect.go b/api/gen/go/_goconnect/rpc.connect.go
index 6806dab..236c423 100644
--- a/api/gen/go/_goconnect/rpc.connect.go
+++ b/api/gen/go/_goconnect/rpc.connect.go
@@ -117,6 +117,9 @@ const (
// GnoNativeServiceEstimateGasProcedure is the fully-qualified name of the GnoNativeService's
// EstimateGas RPC.
GnoNativeServiceEstimateGasProcedure = "/land.gno.gnonative.v1.GnoNativeService/EstimateGas"
+ // GnoNativeServiceEstimateGasFeeProcedure is the fully-qualified name of the GnoNativeService's
+ // EstimateGasFee RPC.
+ GnoNativeServiceEstimateGasFeeProcedure = "/land.gno.gnonative.v1.GnoNativeService/EstimateGasFee"
// GnoNativeServiceSignTxProcedure is the fully-qualified name of the GnoNativeService's SignTx RPC.
GnoNativeServiceSignTxProcedure = "/land.gno.gnonative.v1.GnoNativeService/SignTx"
// GnoNativeServiceBroadcastTxCommitProcedure is the fully-qualified name of the GnoNativeService's
@@ -262,7 +265,13 @@ type GnoNativeServiceClient interface {
MakeRunTx(context.Context, *connect.Request[_go.RunRequest]) (*connect.Response[_go.MakeTxResponse], error)
// EstimateGas estimates the least amount of gas required for the transaction to go through on the chain (minimum gas wanted), with a security margin.
// If UpdateTx is true, then update the transaction with the gasWanted amount.
+ // This uses the remote node determined by SetRemote.
EstimateGas(context.Context, *connect.Request[_go.EstimateGasRequest]) (*connect.Response[_go.EstimateGasResponse], error)
+ // EstimateGasFee estimates the fee for the transaction to go through on the chain (minimum gas wanted times the gas price), with a security margin.
+ // If UpdateTx is true, then update the transaction with the gasWanted amount.
+ // This uses the remote node determined by SetRemote.
+ // This is similar to EstimateGas but also fetches the gas price from the remote node.
+ EstimateGasFee(context.Context, *connect.Request[_go.EstimateGasFeeRequest]) (*connect.Response[_go.EstimateGasFeeResponse], error)
// Sign the transaction using the account with the given address.
// If there is no activated account with the given address, return [ErrCode](#land.gno.gnonative.v1.ErrCode).ErrNoActiveAccount.
// If the password is wrong, return [ErrCode](#land.gno.gnonative.v1.ErrCode).ErrDecryptionFailed.
@@ -478,6 +487,12 @@ func NewGnoNativeServiceClient(httpClient connect.HTTPClient, baseURL string, op
connect.WithSchema(gnoNativeServiceMethods.ByName("EstimateGas")),
connect.WithClientOptions(opts...),
),
+ estimateGasFee: connect.NewClient[_go.EstimateGasFeeRequest, _go.EstimateGasFeeResponse](
+ httpClient,
+ baseURL+GnoNativeServiceEstimateGasFeeProcedure,
+ connect.WithSchema(gnoNativeServiceMethods.ByName("EstimateGasFee")),
+ connect.WithClientOptions(opts...),
+ ),
signTx: connect.NewClient[_go.SignTxRequest, _go.SignTxResponse](
httpClient,
baseURL+GnoNativeServiceSignTxProcedure,
@@ -567,6 +582,7 @@ type gnoNativeServiceClient struct {
makeSendTx *connect.Client[_go.SendRequest, _go.MakeTxResponse]
makeRunTx *connect.Client[_go.RunRequest, _go.MakeTxResponse]
estimateGas *connect.Client[_go.EstimateGasRequest, _go.EstimateGasResponse]
+ estimateGasFee *connect.Client[_go.EstimateGasFeeRequest, _go.EstimateGasFeeResponse]
signTx *connect.Client[_go.SignTxRequest, _go.SignTxResponse]
broadcastTxCommit *connect.Client[_go.BroadcastTxCommitRequest, _go.BroadcastTxCommitResponse]
addressToBech32 *connect.Client[_go.AddressToBech32Request, _go.AddressToBech32Response]
@@ -728,6 +744,11 @@ func (c *gnoNativeServiceClient) EstimateGas(ctx context.Context, req *connect.R
return c.estimateGas.CallUnary(ctx, req)
}
+// EstimateGasFee calls land.gno.gnonative.v1.GnoNativeService.EstimateGasFee.
+func (c *gnoNativeServiceClient) EstimateGasFee(ctx context.Context, req *connect.Request[_go.EstimateGasFeeRequest]) (*connect.Response[_go.EstimateGasFeeResponse], error) {
+ return c.estimateGasFee.CallUnary(ctx, req)
+}
+
// SignTx calls land.gno.gnonative.v1.GnoNativeService.SignTx.
func (c *gnoNativeServiceClient) SignTx(ctx context.Context, req *connect.Request[_go.SignTxRequest]) (*connect.Response[_go.SignTxResponse], error) {
return c.signTx.CallUnary(ctx, req)
@@ -892,7 +913,13 @@ type GnoNativeServiceHandler interface {
MakeRunTx(context.Context, *connect.Request[_go.RunRequest]) (*connect.Response[_go.MakeTxResponse], error)
// EstimateGas estimates the least amount of gas required for the transaction to go through on the chain (minimum gas wanted), with a security margin.
// If UpdateTx is true, then update the transaction with the gasWanted amount.
+ // This uses the remote node determined by SetRemote.
EstimateGas(context.Context, *connect.Request[_go.EstimateGasRequest]) (*connect.Response[_go.EstimateGasResponse], error)
+ // EstimateGasFee estimates the fee for the transaction to go through on the chain (minimum gas wanted times the gas price), with a security margin.
+ // If UpdateTx is true, then update the transaction with the gasWanted amount.
+ // This uses the remote node determined by SetRemote.
+ // This is similar to EstimateGas but also fetches the gas price from the remote node.
+ EstimateGasFee(context.Context, *connect.Request[_go.EstimateGasFeeRequest]) (*connect.Response[_go.EstimateGasFeeResponse], error)
// Sign the transaction using the account with the given address.
// If there is no activated account with the given address, return [ErrCode](#land.gno.gnonative.v1.ErrCode).ErrNoActiveAccount.
// If the password is wrong, return [ErrCode](#land.gno.gnonative.v1.ErrCode).ErrDecryptionFailed.
@@ -1104,6 +1131,12 @@ func NewGnoNativeServiceHandler(svc GnoNativeServiceHandler, opts ...connect.Han
connect.WithSchema(gnoNativeServiceMethods.ByName("EstimateGas")),
connect.WithHandlerOptions(opts...),
)
+ gnoNativeServiceEstimateGasFeeHandler := connect.NewUnaryHandler(
+ GnoNativeServiceEstimateGasFeeProcedure,
+ svc.EstimateGasFee,
+ connect.WithSchema(gnoNativeServiceMethods.ByName("EstimateGasFee")),
+ connect.WithHandlerOptions(opts...),
+ )
gnoNativeServiceSignTxHandler := connect.NewUnaryHandler(
GnoNativeServiceSignTxProcedure,
svc.SignTx,
@@ -1220,6 +1253,8 @@ func NewGnoNativeServiceHandler(svc GnoNativeServiceHandler, opts ...connect.Han
gnoNativeServiceMakeRunTxHandler.ServeHTTP(w, r)
case GnoNativeServiceEstimateGasProcedure:
gnoNativeServiceEstimateGasHandler.ServeHTTP(w, r)
+ case GnoNativeServiceEstimateGasFeeProcedure:
+ gnoNativeServiceEstimateGasFeeHandler.ServeHTTP(w, r)
case GnoNativeServiceSignTxProcedure:
gnoNativeServiceSignTxHandler.ServeHTTP(w, r)
case GnoNativeServiceBroadcastTxCommitProcedure:
@@ -1367,6 +1402,10 @@ func (UnimplementedGnoNativeServiceHandler) EstimateGas(context.Context, *connec
return nil, connect.NewError(connect.CodeUnimplemented, errors.New("land.gno.gnonative.v1.GnoNativeService.EstimateGas is not implemented"))
}
+func (UnimplementedGnoNativeServiceHandler) EstimateGasFee(context.Context, *connect.Request[_go.EstimateGasFeeRequest]) (*connect.Response[_go.EstimateGasFeeResponse], error) {
+ return nil, connect.NewError(connect.CodeUnimplemented, errors.New("land.gno.gnonative.v1.GnoNativeService.EstimateGasFee is not implemented"))
+}
+
func (UnimplementedGnoNativeServiceHandler) SignTx(context.Context, *connect.Request[_go.SignTxRequest]) (*connect.Response[_go.SignTxResponse], error) {
return nil, connect.NewError(connect.CodeUnimplemented, errors.New("land.gno.gnonative.v1.GnoNativeService.SignTx is not implemented"))
}
diff --git a/api/gen/go/gnonativetypes.pb.go b/api/gen/go/gnonativetypes.pb.go
index e4da8a0..5450dfa 100644
--- a/api/gen/go/gnonativetypes.pb.go
+++ b/api/gen/go/gnonativetypes.pb.go
@@ -3121,13 +3121,9 @@ type EstimateGasRequest struct {
// It will be multiplied by the estimated gas amount.
SecurityMargin uint32 `protobuf:"varint,3,opt,name=security_margin,json=securityMargin,proto3" json:"security_margin,omitempty"`
// The update boolean to update the gas wanted field in the transaction if true.
- UpdateTx bool `protobuf:"varint,4,opt,name=update_tx,json=updateTx,proto3" json:"update_tx,omitempty"`
- // The signer's account number on the blockchain. If 0 then query the blockchain for the value.
- AccountNumber uint64 `protobuf:"varint,5,opt,name=account_number,json=accountNumber,proto3" json:"account_number,omitempty"`
- // The sequence number of the signer's transactions on the blockchain. If 0 then query the blockchain for the value.
- SequenceNumber uint64 `protobuf:"varint,6,opt,name=sequence_number,json=sequenceNumber,proto3" json:"sequence_number,omitempty"`
- unknownFields protoimpl.UnknownFields
- sizeCache protoimpl.SizeCache
+ UpdateTx bool `protobuf:"varint,4,opt,name=update_tx,json=updateTx,proto3" json:"update_tx,omitempty"`
+ unknownFields protoimpl.UnknownFields
+ sizeCache protoimpl.SizeCache
}
func (x *EstimateGasRequest) Reset() {
@@ -3188,20 +3184,6 @@ func (x *EstimateGasRequest) GetUpdateTx() bool {
return false
}
-func (x *EstimateGasRequest) GetAccountNumber() uint64 {
- if x != nil {
- return x.AccountNumber
- }
- return 0
-}
-
-func (x *EstimateGasRequest) GetSequenceNumber() uint64 {
- if x != nil {
- return x.SequenceNumber
- }
- return 0
-}
-
type EstimateGasResponse struct {
state protoimpl.MessageState `protogen:"open.v1"`
// The JSON encoding of the unsigned transaction
@@ -3256,6 +3238,154 @@ func (x *EstimateGasResponse) GetGasWanted() int64 {
return 0
}
+type EstimateGasFeeRequest struct {
+ state protoimpl.MessageState `protogen:"open.v1"`
+ // The JSON encoding of the unsigned transaction (from MakeCallTx, etc.)
+ TxJson string `protobuf:"bytes,1,opt,name=tx_json,json=txJson,proto3" json:"tx_json,omitempty"`
+ // The address of the account to sign the transaction
+ Address []byte `protobuf:"bytes,2,opt,name=address,proto3" json:"address,omitempty"`
+ // The security margin to apply to the estimated gas amount.
+ // This number represents a decimal numeral value with two decimals precision, without the decimal separator. E.g. 1 means 0.01 and 10000 means 100.00.
+ // It will be multiplied by the estimated gas amount.
+ GasSecurityMargin uint32 `protobuf:"varint,3,opt,name=gas_security_margin,json=gasSecurityMargin,proto3" json:"gas_security_margin,omitempty"`
+ // The security margin to apply to the gas price.
+ // This number represents a decimal numeral value with two decimals precision, without the decimal separator. E.g. 1 means 0.01 and 10000 means 100.00.
+ // It will be multiplied by the fetched gas price.
+ PriceSecurityMargin uint32 `protobuf:"varint,4,opt,name=price_security_margin,json=priceSecurityMargin,proto3" json:"price_security_margin,omitempty"`
+ // The update boolean to update the gas wanted field in the transaction if true.
+ UpdateTx bool `protobuf:"varint,5,opt,name=update_tx,json=updateTx,proto3" json:"update_tx,omitempty"`
+ unknownFields protoimpl.UnknownFields
+ sizeCache protoimpl.SizeCache
+}
+
+func (x *EstimateGasFeeRequest) Reset() {
+ *x = EstimateGasFeeRequest{}
+ mi := &file_gnonativetypes_proto_msgTypes[63]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+}
+
+func (x *EstimateGasFeeRequest) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*EstimateGasFeeRequest) ProtoMessage() {}
+
+func (x *EstimateGasFeeRequest) ProtoReflect() protoreflect.Message {
+ mi := &file_gnonativetypes_proto_msgTypes[63]
+ 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 EstimateGasFeeRequest.ProtoReflect.Descriptor instead.
+func (*EstimateGasFeeRequest) Descriptor() ([]byte, []int) {
+ return file_gnonativetypes_proto_rawDescGZIP(), []int{63}
+}
+
+func (x *EstimateGasFeeRequest) GetTxJson() string {
+ if x != nil {
+ return x.TxJson
+ }
+ return ""
+}
+
+func (x *EstimateGasFeeRequest) GetAddress() []byte {
+ if x != nil {
+ return x.Address
+ }
+ return nil
+}
+
+func (x *EstimateGasFeeRequest) GetGasSecurityMargin() uint32 {
+ if x != nil {
+ return x.GasSecurityMargin
+ }
+ return 0
+}
+
+func (x *EstimateGasFeeRequest) GetPriceSecurityMargin() uint32 {
+ if x != nil {
+ return x.PriceSecurityMargin
+ }
+ return 0
+}
+
+func (x *EstimateGasFeeRequest) GetUpdateTx() bool {
+ if x != nil {
+ return x.UpdateTx
+ }
+ return false
+}
+
+type EstimateGasFeeResponse struct {
+ state protoimpl.MessageState `protogen:"open.v1"`
+ // The JSON encoding of the unsigned transaction
+ TxJson string `protobuf:"bytes,1,opt,name=tx_json,json=txJson,proto3" json:"tx_json,omitempty"`
+ // The estimated gas wanted for the transaction
+ GasWanted int64 `protobuf:"zigzag64,2,opt,name=gas_wanted,json=gasWanted,proto3" json:"gas_wanted,omitempty"`
+ // The estimated fee for the transaction
+ Fee *Coin `protobuf:"bytes,3,opt,name=fee,proto3" json:"fee,omitempty"`
+ unknownFields protoimpl.UnknownFields
+ sizeCache protoimpl.SizeCache
+}
+
+func (x *EstimateGasFeeResponse) Reset() {
+ *x = EstimateGasFeeResponse{}
+ mi := &file_gnonativetypes_proto_msgTypes[64]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+}
+
+func (x *EstimateGasFeeResponse) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*EstimateGasFeeResponse) ProtoMessage() {}
+
+func (x *EstimateGasFeeResponse) ProtoReflect() protoreflect.Message {
+ mi := &file_gnonativetypes_proto_msgTypes[64]
+ 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 EstimateGasFeeResponse.ProtoReflect.Descriptor instead.
+func (*EstimateGasFeeResponse) Descriptor() ([]byte, []int) {
+ return file_gnonativetypes_proto_rawDescGZIP(), []int{64}
+}
+
+func (x *EstimateGasFeeResponse) GetTxJson() string {
+ if x != nil {
+ return x.TxJson
+ }
+ return ""
+}
+
+func (x *EstimateGasFeeResponse) GetGasWanted() int64 {
+ if x != nil {
+ return x.GasWanted
+ }
+ return 0
+}
+
+func (x *EstimateGasFeeResponse) GetFee() *Coin {
+ if x != nil {
+ return x.Fee
+ }
+ return nil
+}
+
type BroadcastTxCommitRequest struct {
state protoimpl.MessageState `protogen:"open.v1"`
// The JSON encoding of the signed transaction (from SignTx)
@@ -3266,7 +3396,7 @@ type BroadcastTxCommitRequest struct {
func (x *BroadcastTxCommitRequest) Reset() {
*x = BroadcastTxCommitRequest{}
- mi := &file_gnonativetypes_proto_msgTypes[63]
+ mi := &file_gnonativetypes_proto_msgTypes[65]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
@@ -3278,7 +3408,7 @@ func (x *BroadcastTxCommitRequest) String() string {
func (*BroadcastTxCommitRequest) ProtoMessage() {}
func (x *BroadcastTxCommitRequest) ProtoReflect() protoreflect.Message {
- mi := &file_gnonativetypes_proto_msgTypes[63]
+ mi := &file_gnonativetypes_proto_msgTypes[65]
if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@@ -3291,7 +3421,7 @@ func (x *BroadcastTxCommitRequest) ProtoReflect() protoreflect.Message {
// Deprecated: Use BroadcastTxCommitRequest.ProtoReflect.Descriptor instead.
func (*BroadcastTxCommitRequest) Descriptor() ([]byte, []int) {
- return file_gnonativetypes_proto_rawDescGZIP(), []int{63}
+ return file_gnonativetypes_proto_rawDescGZIP(), []int{65}
}
func (x *BroadcastTxCommitRequest) GetSignedTxJson() string {
@@ -3314,7 +3444,7 @@ type BroadcastTxCommitResponse struct {
func (x *BroadcastTxCommitResponse) Reset() {
*x = BroadcastTxCommitResponse{}
- mi := &file_gnonativetypes_proto_msgTypes[64]
+ mi := &file_gnonativetypes_proto_msgTypes[66]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
@@ -3326,7 +3456,7 @@ func (x *BroadcastTxCommitResponse) String() string {
func (*BroadcastTxCommitResponse) ProtoMessage() {}
func (x *BroadcastTxCommitResponse) ProtoReflect() protoreflect.Message {
- mi := &file_gnonativetypes_proto_msgTypes[64]
+ mi := &file_gnonativetypes_proto_msgTypes[66]
if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@@ -3339,7 +3469,7 @@ func (x *BroadcastTxCommitResponse) ProtoReflect() protoreflect.Message {
// Deprecated: Use BroadcastTxCommitResponse.ProtoReflect.Descriptor instead.
func (*BroadcastTxCommitResponse) Descriptor() ([]byte, []int) {
- return file_gnonativetypes_proto_rawDescGZIP(), []int{64}
+ return file_gnonativetypes_proto_rawDescGZIP(), []int{66}
}
func (x *BroadcastTxCommitResponse) GetResult() []byte {
@@ -3372,7 +3502,7 @@ type AddressToBech32Request struct {
func (x *AddressToBech32Request) Reset() {
*x = AddressToBech32Request{}
- mi := &file_gnonativetypes_proto_msgTypes[65]
+ mi := &file_gnonativetypes_proto_msgTypes[67]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
@@ -3384,7 +3514,7 @@ func (x *AddressToBech32Request) String() string {
func (*AddressToBech32Request) ProtoMessage() {}
func (x *AddressToBech32Request) ProtoReflect() protoreflect.Message {
- mi := &file_gnonativetypes_proto_msgTypes[65]
+ mi := &file_gnonativetypes_proto_msgTypes[67]
if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@@ -3397,7 +3527,7 @@ func (x *AddressToBech32Request) ProtoReflect() protoreflect.Message {
// Deprecated: Use AddressToBech32Request.ProtoReflect.Descriptor instead.
func (*AddressToBech32Request) Descriptor() ([]byte, []int) {
- return file_gnonativetypes_proto_rawDescGZIP(), []int{65}
+ return file_gnonativetypes_proto_rawDescGZIP(), []int{67}
}
func (x *AddressToBech32Request) GetAddress() []byte {
@@ -3416,7 +3546,7 @@ type AddressToBech32Response struct {
func (x *AddressToBech32Response) Reset() {
*x = AddressToBech32Response{}
- mi := &file_gnonativetypes_proto_msgTypes[66]
+ mi := &file_gnonativetypes_proto_msgTypes[68]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
@@ -3428,7 +3558,7 @@ func (x *AddressToBech32Response) String() string {
func (*AddressToBech32Response) ProtoMessage() {}
func (x *AddressToBech32Response) ProtoReflect() protoreflect.Message {
- mi := &file_gnonativetypes_proto_msgTypes[66]
+ mi := &file_gnonativetypes_proto_msgTypes[68]
if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@@ -3441,7 +3571,7 @@ func (x *AddressToBech32Response) ProtoReflect() protoreflect.Message {
// Deprecated: Use AddressToBech32Response.ProtoReflect.Descriptor instead.
func (*AddressToBech32Response) Descriptor() ([]byte, []int) {
- return file_gnonativetypes_proto_rawDescGZIP(), []int{66}
+ return file_gnonativetypes_proto_rawDescGZIP(), []int{68}
}
func (x *AddressToBech32Response) GetBech32Address() string {
@@ -3460,7 +3590,7 @@ type AddressFromBech32Request struct {
func (x *AddressFromBech32Request) Reset() {
*x = AddressFromBech32Request{}
- mi := &file_gnonativetypes_proto_msgTypes[67]
+ mi := &file_gnonativetypes_proto_msgTypes[69]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
@@ -3472,7 +3602,7 @@ func (x *AddressFromBech32Request) String() string {
func (*AddressFromBech32Request) ProtoMessage() {}
func (x *AddressFromBech32Request) ProtoReflect() protoreflect.Message {
- mi := &file_gnonativetypes_proto_msgTypes[67]
+ mi := &file_gnonativetypes_proto_msgTypes[69]
if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@@ -3485,7 +3615,7 @@ func (x *AddressFromBech32Request) ProtoReflect() protoreflect.Message {
// Deprecated: Use AddressFromBech32Request.ProtoReflect.Descriptor instead.
func (*AddressFromBech32Request) Descriptor() ([]byte, []int) {
- return file_gnonativetypes_proto_rawDescGZIP(), []int{67}
+ return file_gnonativetypes_proto_rawDescGZIP(), []int{69}
}
func (x *AddressFromBech32Request) GetBech32Address() string {
@@ -3504,7 +3634,7 @@ type AddressFromBech32Response struct {
func (x *AddressFromBech32Response) Reset() {
*x = AddressFromBech32Response{}
- mi := &file_gnonativetypes_proto_msgTypes[68]
+ mi := &file_gnonativetypes_proto_msgTypes[70]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
@@ -3516,7 +3646,7 @@ func (x *AddressFromBech32Response) String() string {
func (*AddressFromBech32Response) ProtoMessage() {}
func (x *AddressFromBech32Response) ProtoReflect() protoreflect.Message {
- mi := &file_gnonativetypes_proto_msgTypes[68]
+ mi := &file_gnonativetypes_proto_msgTypes[70]
if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@@ -3529,7 +3659,7 @@ func (x *AddressFromBech32Response) ProtoReflect() protoreflect.Message {
// Deprecated: Use AddressFromBech32Response.ProtoReflect.Descriptor instead.
func (*AddressFromBech32Response) Descriptor() ([]byte, []int) {
- return file_gnonativetypes_proto_rawDescGZIP(), []int{68}
+ return file_gnonativetypes_proto_rawDescGZIP(), []int{70}
}
func (x *AddressFromBech32Response) GetAddress() []byte {
@@ -3548,7 +3678,7 @@ type AddressFromMnemonicRequest struct {
func (x *AddressFromMnemonicRequest) Reset() {
*x = AddressFromMnemonicRequest{}
- mi := &file_gnonativetypes_proto_msgTypes[69]
+ mi := &file_gnonativetypes_proto_msgTypes[71]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
@@ -3560,7 +3690,7 @@ func (x *AddressFromMnemonicRequest) String() string {
func (*AddressFromMnemonicRequest) ProtoMessage() {}
func (x *AddressFromMnemonicRequest) ProtoReflect() protoreflect.Message {
- mi := &file_gnonativetypes_proto_msgTypes[69]
+ mi := &file_gnonativetypes_proto_msgTypes[71]
if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@@ -3573,7 +3703,7 @@ func (x *AddressFromMnemonicRequest) ProtoReflect() protoreflect.Message {
// Deprecated: Use AddressFromMnemonicRequest.ProtoReflect.Descriptor instead.
func (*AddressFromMnemonicRequest) Descriptor() ([]byte, []int) {
- return file_gnonativetypes_proto_rawDescGZIP(), []int{69}
+ return file_gnonativetypes_proto_rawDescGZIP(), []int{71}
}
func (x *AddressFromMnemonicRequest) GetMnemonic() string {
@@ -3592,7 +3722,7 @@ type AddressFromMnemonicResponse struct {
func (x *AddressFromMnemonicResponse) Reset() {
*x = AddressFromMnemonicResponse{}
- mi := &file_gnonativetypes_proto_msgTypes[70]
+ mi := &file_gnonativetypes_proto_msgTypes[72]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
@@ -3604,7 +3734,7 @@ func (x *AddressFromMnemonicResponse) String() string {
func (*AddressFromMnemonicResponse) ProtoMessage() {}
func (x *AddressFromMnemonicResponse) ProtoReflect() protoreflect.Message {
- mi := &file_gnonativetypes_proto_msgTypes[70]
+ mi := &file_gnonativetypes_proto_msgTypes[72]
if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@@ -3617,7 +3747,7 @@ func (x *AddressFromMnemonicResponse) ProtoReflect() protoreflect.Message {
// Deprecated: Use AddressFromMnemonicResponse.ProtoReflect.Descriptor instead.
func (*AddressFromMnemonicResponse) Descriptor() ([]byte, []int) {
- return file_gnonativetypes_proto_rawDescGZIP(), []int{70}
+ return file_gnonativetypes_proto_rawDescGZIP(), []int{72}
}
func (x *AddressFromMnemonicResponse) GetAddress() []byte {
@@ -3636,7 +3766,7 @@ type ValidateMnemonicWordRequest struct {
func (x *ValidateMnemonicWordRequest) Reset() {
*x = ValidateMnemonicWordRequest{}
- mi := &file_gnonativetypes_proto_msgTypes[71]
+ mi := &file_gnonativetypes_proto_msgTypes[73]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
@@ -3648,7 +3778,7 @@ func (x *ValidateMnemonicWordRequest) String() string {
func (*ValidateMnemonicWordRequest) ProtoMessage() {}
func (x *ValidateMnemonicWordRequest) ProtoReflect() protoreflect.Message {
- mi := &file_gnonativetypes_proto_msgTypes[71]
+ mi := &file_gnonativetypes_proto_msgTypes[73]
if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@@ -3661,7 +3791,7 @@ func (x *ValidateMnemonicWordRequest) ProtoReflect() protoreflect.Message {
// Deprecated: Use ValidateMnemonicWordRequest.ProtoReflect.Descriptor instead.
func (*ValidateMnemonicWordRequest) Descriptor() ([]byte, []int) {
- return file_gnonativetypes_proto_rawDescGZIP(), []int{71}
+ return file_gnonativetypes_proto_rawDescGZIP(), []int{73}
}
func (x *ValidateMnemonicWordRequest) GetWord() string {
@@ -3680,7 +3810,7 @@ type ValidateMnemonicWordResponse struct {
func (x *ValidateMnemonicWordResponse) Reset() {
*x = ValidateMnemonicWordResponse{}
- mi := &file_gnonativetypes_proto_msgTypes[72]
+ mi := &file_gnonativetypes_proto_msgTypes[74]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
@@ -3692,7 +3822,7 @@ func (x *ValidateMnemonicWordResponse) String() string {
func (*ValidateMnemonicWordResponse) ProtoMessage() {}
func (x *ValidateMnemonicWordResponse) ProtoReflect() protoreflect.Message {
- mi := &file_gnonativetypes_proto_msgTypes[72]
+ mi := &file_gnonativetypes_proto_msgTypes[74]
if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@@ -3705,7 +3835,7 @@ func (x *ValidateMnemonicWordResponse) ProtoReflect() protoreflect.Message {
// Deprecated: Use ValidateMnemonicWordResponse.ProtoReflect.Descriptor instead.
func (*ValidateMnemonicWordResponse) Descriptor() ([]byte, []int) {
- return file_gnonativetypes_proto_rawDescGZIP(), []int{72}
+ return file_gnonativetypes_proto_rawDescGZIP(), []int{74}
}
func (x *ValidateMnemonicWordResponse) GetValid() bool {
@@ -3724,7 +3854,7 @@ type ValidateMnemonicPhraseRequest struct {
func (x *ValidateMnemonicPhraseRequest) Reset() {
*x = ValidateMnemonicPhraseRequest{}
- mi := &file_gnonativetypes_proto_msgTypes[73]
+ mi := &file_gnonativetypes_proto_msgTypes[75]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
@@ -3736,7 +3866,7 @@ func (x *ValidateMnemonicPhraseRequest) String() string {
func (*ValidateMnemonicPhraseRequest) ProtoMessage() {}
func (x *ValidateMnemonicPhraseRequest) ProtoReflect() protoreflect.Message {
- mi := &file_gnonativetypes_proto_msgTypes[73]
+ mi := &file_gnonativetypes_proto_msgTypes[75]
if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@@ -3749,7 +3879,7 @@ func (x *ValidateMnemonicPhraseRequest) ProtoReflect() protoreflect.Message {
// Deprecated: Use ValidateMnemonicPhraseRequest.ProtoReflect.Descriptor instead.
func (*ValidateMnemonicPhraseRequest) Descriptor() ([]byte, []int) {
- return file_gnonativetypes_proto_rawDescGZIP(), []int{73}
+ return file_gnonativetypes_proto_rawDescGZIP(), []int{75}
}
func (x *ValidateMnemonicPhraseRequest) GetPhrase() string {
@@ -3768,7 +3898,7 @@ type ValidateMnemonicPhraseResponse struct {
func (x *ValidateMnemonicPhraseResponse) Reset() {
*x = ValidateMnemonicPhraseResponse{}
- mi := &file_gnonativetypes_proto_msgTypes[74]
+ mi := &file_gnonativetypes_proto_msgTypes[76]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
@@ -3780,7 +3910,7 @@ func (x *ValidateMnemonicPhraseResponse) String() string {
func (*ValidateMnemonicPhraseResponse) ProtoMessage() {}
func (x *ValidateMnemonicPhraseResponse) ProtoReflect() protoreflect.Message {
- mi := &file_gnonativetypes_proto_msgTypes[74]
+ mi := &file_gnonativetypes_proto_msgTypes[76]
if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@@ -3793,7 +3923,7 @@ func (x *ValidateMnemonicPhraseResponse) ProtoReflect() protoreflect.Message {
// Deprecated: Use ValidateMnemonicPhraseResponse.ProtoReflect.Descriptor instead.
func (*ValidateMnemonicPhraseResponse) Descriptor() ([]byte, []int) {
- return file_gnonativetypes_proto_rawDescGZIP(), []int{74}
+ return file_gnonativetypes_proto_rawDescGZIP(), []int{76}
}
func (x *ValidateMnemonicPhraseResponse) GetValid() bool {
@@ -3812,7 +3942,7 @@ type HelloRequest struct {
func (x *HelloRequest) Reset() {
*x = HelloRequest{}
- mi := &file_gnonativetypes_proto_msgTypes[75]
+ mi := &file_gnonativetypes_proto_msgTypes[77]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
@@ -3824,7 +3954,7 @@ func (x *HelloRequest) String() string {
func (*HelloRequest) ProtoMessage() {}
func (x *HelloRequest) ProtoReflect() protoreflect.Message {
- mi := &file_gnonativetypes_proto_msgTypes[75]
+ mi := &file_gnonativetypes_proto_msgTypes[77]
if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@@ -3837,7 +3967,7 @@ func (x *HelloRequest) ProtoReflect() protoreflect.Message {
// Deprecated: Use HelloRequest.ProtoReflect.Descriptor instead.
func (*HelloRequest) Descriptor() ([]byte, []int) {
- return file_gnonativetypes_proto_rawDescGZIP(), []int{75}
+ return file_gnonativetypes_proto_rawDescGZIP(), []int{77}
}
func (x *HelloRequest) GetName() string {
@@ -3856,7 +3986,7 @@ type HelloResponse struct {
func (x *HelloResponse) Reset() {
*x = HelloResponse{}
- mi := &file_gnonativetypes_proto_msgTypes[76]
+ mi := &file_gnonativetypes_proto_msgTypes[78]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
@@ -3868,7 +3998,7 @@ func (x *HelloResponse) String() string {
func (*HelloResponse) ProtoMessage() {}
func (x *HelloResponse) ProtoReflect() protoreflect.Message {
- mi := &file_gnonativetypes_proto_msgTypes[76]
+ mi := &file_gnonativetypes_proto_msgTypes[78]
if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@@ -3881,7 +4011,7 @@ func (x *HelloResponse) ProtoReflect() protoreflect.Message {
// Deprecated: Use HelloResponse.ProtoReflect.Descriptor instead.
func (*HelloResponse) Descriptor() ([]byte, []int) {
- return file_gnonativetypes_proto_rawDescGZIP(), []int{76}
+ return file_gnonativetypes_proto_rawDescGZIP(), []int{78}
}
func (x *HelloResponse) GetGreeting() string {
@@ -3900,7 +4030,7 @@ type HelloStreamRequest struct {
func (x *HelloStreamRequest) Reset() {
*x = HelloStreamRequest{}
- mi := &file_gnonativetypes_proto_msgTypes[77]
+ mi := &file_gnonativetypes_proto_msgTypes[79]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
@@ -3912,7 +4042,7 @@ func (x *HelloStreamRequest) String() string {
func (*HelloStreamRequest) ProtoMessage() {}
func (x *HelloStreamRequest) ProtoReflect() protoreflect.Message {
- mi := &file_gnonativetypes_proto_msgTypes[77]
+ mi := &file_gnonativetypes_proto_msgTypes[79]
if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@@ -3925,7 +4055,7 @@ func (x *HelloStreamRequest) ProtoReflect() protoreflect.Message {
// Deprecated: Use HelloStreamRequest.ProtoReflect.Descriptor instead.
func (*HelloStreamRequest) Descriptor() ([]byte, []int) {
- return file_gnonativetypes_proto_rawDescGZIP(), []int{77}
+ return file_gnonativetypes_proto_rawDescGZIP(), []int{79}
}
func (x *HelloStreamRequest) GetName() string {
@@ -3944,7 +4074,7 @@ type HelloStreamResponse struct {
func (x *HelloStreamResponse) Reset() {
*x = HelloStreamResponse{}
- mi := &file_gnonativetypes_proto_msgTypes[78]
+ mi := &file_gnonativetypes_proto_msgTypes[80]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
@@ -3956,7 +4086,7 @@ func (x *HelloStreamResponse) String() string {
func (*HelloStreamResponse) ProtoMessage() {}
func (x *HelloStreamResponse) ProtoReflect() protoreflect.Message {
- mi := &file_gnonativetypes_proto_msgTypes[78]
+ mi := &file_gnonativetypes_proto_msgTypes[80]
if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@@ -3969,7 +4099,7 @@ func (x *HelloStreamResponse) ProtoReflect() protoreflect.Message {
// Deprecated: Use HelloStreamResponse.ProtoReflect.Descriptor instead.
func (*HelloStreamResponse) Descriptor() ([]byte, []int) {
- return file_gnonativetypes_proto_rawDescGZIP(), []int{78}
+ return file_gnonativetypes_proto_rawDescGZIP(), []int{80}
}
func (x *HelloStreamResponse) GetGreeting() string {
@@ -3988,7 +4118,7 @@ type GNONATIVETYPES_BytesList struct {
func (x *GNONATIVETYPES_BytesList) Reset() {
*x = GNONATIVETYPES_BytesList{}
- mi := &file_gnonativetypes_proto_msgTypes[79]
+ mi := &file_gnonativetypes_proto_msgTypes[81]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
@@ -4000,7 +4130,7 @@ func (x *GNONATIVETYPES_BytesList) String() string {
func (*GNONATIVETYPES_BytesList) ProtoMessage() {}
func (x *GNONATIVETYPES_BytesList) ProtoReflect() protoreflect.Message {
- mi := &file_gnonativetypes_proto_msgTypes[79]
+ mi := &file_gnonativetypes_proto_msgTypes[81]
if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@@ -4013,7 +4143,7 @@ func (x *GNONATIVETYPES_BytesList) ProtoReflect() protoreflect.Message {
// Deprecated: Use GNONATIVETYPES_BytesList.ProtoReflect.Descriptor instead.
func (*GNONATIVETYPES_BytesList) Descriptor() ([]byte, []int) {
- return file_gnonativetypes_proto_rawDescGZIP(), []int{79}
+ return file_gnonativetypes_proto_rawDescGZIP(), []int{81}
}
func (x *GNONATIVETYPES_BytesList) GetValue() [][]byte {
@@ -4202,18 +4332,27 @@ const file_gnonativetypes_proto_rawDesc = "" +
"\x0eaccount_number\x18\x03 \x01(\x04R\raccountNumber\x12'\n" +
"\x0fsequence_number\x18\x04 \x01(\x04R\x0esequenceNumber\"1\n" +
"\x0eSignTxResponse\x12\x1f\n" +
- "\x0esigned_tx_json\x18\x01 \x01(\tR\atx_json\"\xdd\x01\n" +
+ "\x0esigned_tx_json\x18\x01 \x01(\tR\atx_json\"\x8d\x01\n" +
"\x12EstimateGasRequest\x12\x17\n" +
"\atx_json\x18\x01 \x01(\tR\x06txJson\x12\x18\n" +
"\aaddress\x18\x02 \x01(\fR\aaddress\x12'\n" +
"\x0fsecurity_margin\x18\x03 \x01(\rR\x0esecurityMargin\x12\x1b\n" +
- "\tupdate_tx\x18\x04 \x01(\bR\bupdateTx\x12%\n" +
- "\x0eaccount_number\x18\x05 \x01(\x04R\raccountNumber\x12'\n" +
- "\x0fsequence_number\x18\x06 \x01(\x04R\x0esequenceNumber\"M\n" +
+ "\tupdate_tx\x18\x04 \x01(\bR\bupdateTx\"M\n" +
"\x13EstimateGasResponse\x12\x17\n" +
"\atx_json\x18\x01 \x01(\tR\x06txJson\x12\x1d\n" +
"\n" +
- "gas_wanted\x18\x02 \x01(\x12R\tgasWanted\";\n" +
+ "gas_wanted\x18\x02 \x01(\x12R\tgasWanted\"\xcb\x01\n" +
+ "\x15EstimateGasFeeRequest\x12\x17\n" +
+ "\atx_json\x18\x01 \x01(\tR\x06txJson\x12\x18\n" +
+ "\aaddress\x18\x02 \x01(\fR\aaddress\x12.\n" +
+ "\x13gas_security_margin\x18\x03 \x01(\rR\x11gasSecurityMargin\x122\n" +
+ "\x15price_security_margin\x18\x04 \x01(\rR\x13priceSecurityMargin\x12\x1b\n" +
+ "\tupdate_tx\x18\x05 \x01(\bR\bupdateTx\"\x7f\n" +
+ "\x16EstimateGasFeeResponse\x12\x17\n" +
+ "\atx_json\x18\x01 \x01(\tR\x06txJson\x12\x1d\n" +
+ "\n" +
+ "gas_wanted\x18\x02 \x01(\x12R\tgasWanted\x12-\n" +
+ "\x03fee\x18\x03 \x01(\v2\x1b.land.gno.gnonative.v1.CoinR\x03fee\";\n" +
"\x18BroadcastTxCommitRequest\x12\x1f\n" +
"\x0esigned_tx_json\x18\x01 \x01(\tR\atx_json\"_\n" +
"\x19BroadcastTxCommitResponse\x12\x16\n" +
@@ -4263,7 +4402,7 @@ func file_gnonativetypes_proto_rawDescGZIP() []byte {
return file_gnonativetypes_proto_rawDescData
}
-var file_gnonativetypes_proto_msgTypes = make([]protoimpl.MessageInfo, 80)
+var file_gnonativetypes_proto_msgTypes = make([]protoimpl.MessageInfo, 82)
var file_gnonativetypes_proto_goTypes = []any{
(*SetRemoteRequest)(nil), // 0: land.gno.gnonative.v1.SetRemoteRequest
(*SetRemoteResponse)(nil), // 1: land.gno.gnonative.v1.SetRemoteResponse
@@ -4328,23 +4467,25 @@ var file_gnonativetypes_proto_goTypes = []any{
(*SignTxResponse)(nil), // 60: land.gno.gnonative.v1.SignTxResponse
(*EstimateGasRequest)(nil), // 61: land.gno.gnonative.v1.EstimateGasRequest
(*EstimateGasResponse)(nil), // 62: land.gno.gnonative.v1.EstimateGasResponse
- (*BroadcastTxCommitRequest)(nil), // 63: land.gno.gnonative.v1.BroadcastTxCommitRequest
- (*BroadcastTxCommitResponse)(nil), // 64: land.gno.gnonative.v1.BroadcastTxCommitResponse
- (*AddressToBech32Request)(nil), // 65: land.gno.gnonative.v1.AddressToBech32Request
- (*AddressToBech32Response)(nil), // 66: land.gno.gnonative.v1.AddressToBech32Response
- (*AddressFromBech32Request)(nil), // 67: land.gno.gnonative.v1.AddressFromBech32Request
- (*AddressFromBech32Response)(nil), // 68: land.gno.gnonative.v1.AddressFromBech32Response
- (*AddressFromMnemonicRequest)(nil), // 69: land.gno.gnonative.v1.AddressFromMnemonicRequest
- (*AddressFromMnemonicResponse)(nil), // 70: land.gno.gnonative.v1.AddressFromMnemonicResponse
- (*ValidateMnemonicWordRequest)(nil), // 71: land.gno.gnonative.v1.ValidateMnemonicWordRequest
- (*ValidateMnemonicWordResponse)(nil), // 72: land.gno.gnonative.v1.ValidateMnemonicWordResponse
- (*ValidateMnemonicPhraseRequest)(nil), // 73: land.gno.gnonative.v1.ValidateMnemonicPhraseRequest
- (*ValidateMnemonicPhraseResponse)(nil), // 74: land.gno.gnonative.v1.ValidateMnemonicPhraseResponse
- (*HelloRequest)(nil), // 75: land.gno.gnonative.v1.HelloRequest
- (*HelloResponse)(nil), // 76: land.gno.gnonative.v1.HelloResponse
- (*HelloStreamRequest)(nil), // 77: land.gno.gnonative.v1.HelloStreamRequest
- (*HelloStreamResponse)(nil), // 78: land.gno.gnonative.v1.HelloStreamResponse
- (*GNONATIVETYPES_BytesList)(nil), // 79: land.gno.gnonative.v1.GNONATIVETYPES_BytesList
+ (*EstimateGasFeeRequest)(nil), // 63: land.gno.gnonative.v1.EstimateGasFeeRequest
+ (*EstimateGasFeeResponse)(nil), // 64: land.gno.gnonative.v1.EstimateGasFeeResponse
+ (*BroadcastTxCommitRequest)(nil), // 65: land.gno.gnonative.v1.BroadcastTxCommitRequest
+ (*BroadcastTxCommitResponse)(nil), // 66: land.gno.gnonative.v1.BroadcastTxCommitResponse
+ (*AddressToBech32Request)(nil), // 67: land.gno.gnonative.v1.AddressToBech32Request
+ (*AddressToBech32Response)(nil), // 68: land.gno.gnonative.v1.AddressToBech32Response
+ (*AddressFromBech32Request)(nil), // 69: land.gno.gnonative.v1.AddressFromBech32Request
+ (*AddressFromBech32Response)(nil), // 70: land.gno.gnonative.v1.AddressFromBech32Response
+ (*AddressFromMnemonicRequest)(nil), // 71: land.gno.gnonative.v1.AddressFromMnemonicRequest
+ (*AddressFromMnemonicResponse)(nil), // 72: land.gno.gnonative.v1.AddressFromMnemonicResponse
+ (*ValidateMnemonicWordRequest)(nil), // 73: land.gno.gnonative.v1.ValidateMnemonicWordRequest
+ (*ValidateMnemonicWordResponse)(nil), // 74: land.gno.gnonative.v1.ValidateMnemonicWordResponse
+ (*ValidateMnemonicPhraseRequest)(nil), // 75: land.gno.gnonative.v1.ValidateMnemonicPhraseRequest
+ (*ValidateMnemonicPhraseResponse)(nil), // 76: land.gno.gnonative.v1.ValidateMnemonicPhraseResponse
+ (*HelloRequest)(nil), // 77: land.gno.gnonative.v1.HelloRequest
+ (*HelloResponse)(nil), // 78: land.gno.gnonative.v1.HelloResponse
+ (*HelloStreamRequest)(nil), // 79: land.gno.gnonative.v1.HelloStreamRequest
+ (*HelloStreamResponse)(nil), // 80: land.gno.gnonative.v1.HelloStreamResponse
+ (*GNONATIVETYPES_BytesList)(nil), // 81: land.gno.gnonative.v1.GNONATIVETYPES_BytesList
}
var file_gnonativetypes_proto_depIdxs = []int32{
15, // 0: land.gno.gnonative.v1.BaseAccount.coins:type_name -> land.gno.gnonative.v1.Coin
@@ -4365,11 +4506,12 @@ var file_gnonativetypes_proto_depIdxs = []int32{
15, // 15: land.gno.gnonative.v1.MsgRun.send:type_name -> land.gno.gnonative.v1.Coin
15, // 16: land.gno.gnonative.v1.MsgRun.max_deposit:type_name -> land.gno.gnonative.v1.Coin
55, // 17: land.gno.gnonative.v1.RunRequest.msgs:type_name -> land.gno.gnonative.v1.MsgRun
- 18, // [18:18] is the sub-list for method output_type
- 18, // [18:18] is the sub-list for method input_type
- 18, // [18:18] is the sub-list for extension type_name
- 18, // [18:18] is the sub-list for extension extendee
- 0, // [0:18] is the sub-list for field type_name
+ 15, // 18: land.gno.gnonative.v1.EstimateGasFeeResponse.fee:type_name -> land.gno.gnonative.v1.Coin
+ 19, // [19:19] is the sub-list for method output_type
+ 19, // [19:19] is the sub-list for method input_type
+ 19, // [19:19] is the sub-list for extension type_name
+ 19, // [19:19] is the sub-list for extension extendee
+ 0, // [0:19] is the sub-list for field type_name
}
func init() { file_gnonativetypes_proto_init() }
@@ -4383,7 +4525,7 @@ func file_gnonativetypes_proto_init() {
GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
RawDescriptor: unsafe.Slice(unsafe.StringData(file_gnonativetypes_proto_rawDesc), len(file_gnonativetypes_proto_rawDesc)),
NumEnums: 0,
- NumMessages: 80,
+ NumMessages: 82,
NumExtensions: 0,
NumServices: 0,
},
diff --git a/api/gen/go/rpc.pb.go b/api/gen/go/rpc.pb.go
index fe35686..509a0e8 100644
--- a/api/gen/go/rpc.pb.go
+++ b/api/gen/go/rpc.pb.go
@@ -282,7 +282,7 @@ const file_rpc_proto_rawDesc = "" +
"\x0eErrGasOverflow\x10\xd8\x01\x12\x16\n" +
"\x11ErrInvalidPkgPath\x10\xd9\x01\x12\x13\n" +
"\x0eErrInvalidStmt\x10\xda\x01\x12\x13\n" +
- "\x0eErrInvalidExpr\x10\xdb\x012\xbb \n" +
+ "\x0eErrInvalidExpr\x10\xdb\x012\xaa!\n" +
"\x10GnoNativeService\x12^\n" +
"\tSetRemote\x12'.land.gno.gnonative.v1.SetRemoteRequest\x1a(.land.gno.gnonative.v1.SetRemoteResponse\x12^\n" +
"\tGetRemote\x12'.land.gno.gnonative.v1.GetRemoteRequest\x1a(.land.gno.gnonative.v1.GetRemoteResponse\x12a\n" +
@@ -317,7 +317,8 @@ const file_rpc_proto_rawDesc = "" +
"\n" +
"MakeSendTx\x12\".land.gno.gnonative.v1.SendRequest\x1a%.land.gno.gnonative.v1.MakeTxResponse\x12U\n" +
"\tMakeRunTx\x12!.land.gno.gnonative.v1.RunRequest\x1a%.land.gno.gnonative.v1.MakeTxResponse\x12d\n" +
- "\vEstimateGas\x12).land.gno.gnonative.v1.EstimateGasRequest\x1a*.land.gno.gnonative.v1.EstimateGasResponse\x12U\n" +
+ "\vEstimateGas\x12).land.gno.gnonative.v1.EstimateGasRequest\x1a*.land.gno.gnonative.v1.EstimateGasResponse\x12m\n" +
+ "\x0eEstimateGasFee\x12,.land.gno.gnonative.v1.EstimateGasFeeRequest\x1a-.land.gno.gnonative.v1.EstimateGasFeeResponse\x12U\n" +
"\x06SignTx\x12$.land.gno.gnonative.v1.SignTxRequest\x1a%.land.gno.gnonative.v1.SignTxResponse\x12x\n" +
"\x11BroadcastTxCommit\x12/.land.gno.gnonative.v1.BroadcastTxCommitRequest\x1a0.land.gno.gnonative.v1.BroadcastTxCommitResponse0\x01\x12p\n" +
"\x0fAddressToBech32\x12-.land.gno.gnonative.v1.AddressToBech32Request\x1a..land.gno.gnonative.v1.AddressToBech32Response\x12v\n" +
@@ -372,52 +373,54 @@ var file_rpc_proto_goTypes = []any{
(*SendRequest)(nil), // 26: land.gno.gnonative.v1.SendRequest
(*RunRequest)(nil), // 27: land.gno.gnonative.v1.RunRequest
(*EstimateGasRequest)(nil), // 28: land.gno.gnonative.v1.EstimateGasRequest
- (*SignTxRequest)(nil), // 29: land.gno.gnonative.v1.SignTxRequest
- (*BroadcastTxCommitRequest)(nil), // 30: land.gno.gnonative.v1.BroadcastTxCommitRequest
- (*AddressToBech32Request)(nil), // 31: land.gno.gnonative.v1.AddressToBech32Request
- (*AddressFromBech32Request)(nil), // 32: land.gno.gnonative.v1.AddressFromBech32Request
- (*AddressFromMnemonicRequest)(nil), // 33: land.gno.gnonative.v1.AddressFromMnemonicRequest
- (*ValidateMnemonicWordRequest)(nil), // 34: land.gno.gnonative.v1.ValidateMnemonicWordRequest
- (*ValidateMnemonicPhraseRequest)(nil), // 35: land.gno.gnonative.v1.ValidateMnemonicPhraseRequest
- (*HelloRequest)(nil), // 36: land.gno.gnonative.v1.HelloRequest
- (*HelloStreamRequest)(nil), // 37: land.gno.gnonative.v1.HelloStreamRequest
- (*SetRemoteResponse)(nil), // 38: land.gno.gnonative.v1.SetRemoteResponse
- (*GetRemoteResponse)(nil), // 39: land.gno.gnonative.v1.GetRemoteResponse
- (*SetChainIDResponse)(nil), // 40: land.gno.gnonative.v1.SetChainIDResponse
- (*GetChainIDResponse)(nil), // 41: land.gno.gnonative.v1.GetChainIDResponse
- (*GenerateRecoveryPhraseResponse)(nil), // 42: land.gno.gnonative.v1.GenerateRecoveryPhraseResponse
- (*ListKeyInfoResponse)(nil), // 43: land.gno.gnonative.v1.ListKeyInfoResponse
- (*HasKeyByNameResponse)(nil), // 44: land.gno.gnonative.v1.HasKeyByNameResponse
- (*HasKeyByAddressResponse)(nil), // 45: land.gno.gnonative.v1.HasKeyByAddressResponse
- (*HasKeyByNameOrAddressResponse)(nil), // 46: land.gno.gnonative.v1.HasKeyByNameOrAddressResponse
- (*GetKeyInfoByNameResponse)(nil), // 47: land.gno.gnonative.v1.GetKeyInfoByNameResponse
- (*GetKeyInfoByAddressResponse)(nil), // 48: land.gno.gnonative.v1.GetKeyInfoByAddressResponse
- (*GetKeyInfoByNameOrAddressResponse)(nil), // 49: land.gno.gnonative.v1.GetKeyInfoByNameOrAddressResponse
- (*CreateAccountResponse)(nil), // 50: land.gno.gnonative.v1.CreateAccountResponse
- (*CreateLedgerResponse)(nil), // 51: land.gno.gnonative.v1.CreateLedgerResponse
- (*ActivateAccountResponse)(nil), // 52: land.gno.gnonative.v1.ActivateAccountResponse
- (*SetPasswordResponse)(nil), // 53: land.gno.gnonative.v1.SetPasswordResponse
- (*RotatePasswordResponse)(nil), // 54: land.gno.gnonative.v1.RotatePasswordResponse
- (*GetActivatedAccountResponse)(nil), // 55: land.gno.gnonative.v1.GetActivatedAccountResponse
- (*QueryAccountResponse)(nil), // 56: land.gno.gnonative.v1.QueryAccountResponse
- (*DeleteAccountResponse)(nil), // 57: land.gno.gnonative.v1.DeleteAccountResponse
- (*QueryResponse)(nil), // 58: land.gno.gnonative.v1.QueryResponse
- (*RenderResponse)(nil), // 59: land.gno.gnonative.v1.RenderResponse
- (*QEvalResponse)(nil), // 60: land.gno.gnonative.v1.QEvalResponse
- (*CallResponse)(nil), // 61: land.gno.gnonative.v1.CallResponse
- (*SendResponse)(nil), // 62: land.gno.gnonative.v1.SendResponse
- (*RunResponse)(nil), // 63: land.gno.gnonative.v1.RunResponse
- (*MakeTxResponse)(nil), // 64: land.gno.gnonative.v1.MakeTxResponse
- (*EstimateGasResponse)(nil), // 65: land.gno.gnonative.v1.EstimateGasResponse
- (*SignTxResponse)(nil), // 66: land.gno.gnonative.v1.SignTxResponse
- (*BroadcastTxCommitResponse)(nil), // 67: land.gno.gnonative.v1.BroadcastTxCommitResponse
- (*AddressToBech32Response)(nil), // 68: land.gno.gnonative.v1.AddressToBech32Response
- (*AddressFromBech32Response)(nil), // 69: land.gno.gnonative.v1.AddressFromBech32Response
- (*AddressFromMnemonicResponse)(nil), // 70: land.gno.gnonative.v1.AddressFromMnemonicResponse
- (*ValidateMnemonicWordResponse)(nil), // 71: land.gno.gnonative.v1.ValidateMnemonicWordResponse
- (*ValidateMnemonicPhraseResponse)(nil), // 72: land.gno.gnonative.v1.ValidateMnemonicPhraseResponse
- (*HelloResponse)(nil), // 73: land.gno.gnonative.v1.HelloResponse
- (*HelloStreamResponse)(nil), // 74: land.gno.gnonative.v1.HelloStreamResponse
+ (*EstimateGasFeeRequest)(nil), // 29: land.gno.gnonative.v1.EstimateGasFeeRequest
+ (*SignTxRequest)(nil), // 30: land.gno.gnonative.v1.SignTxRequest
+ (*BroadcastTxCommitRequest)(nil), // 31: land.gno.gnonative.v1.BroadcastTxCommitRequest
+ (*AddressToBech32Request)(nil), // 32: land.gno.gnonative.v1.AddressToBech32Request
+ (*AddressFromBech32Request)(nil), // 33: land.gno.gnonative.v1.AddressFromBech32Request
+ (*AddressFromMnemonicRequest)(nil), // 34: land.gno.gnonative.v1.AddressFromMnemonicRequest
+ (*ValidateMnemonicWordRequest)(nil), // 35: land.gno.gnonative.v1.ValidateMnemonicWordRequest
+ (*ValidateMnemonicPhraseRequest)(nil), // 36: land.gno.gnonative.v1.ValidateMnemonicPhraseRequest
+ (*HelloRequest)(nil), // 37: land.gno.gnonative.v1.HelloRequest
+ (*HelloStreamRequest)(nil), // 38: land.gno.gnonative.v1.HelloStreamRequest
+ (*SetRemoteResponse)(nil), // 39: land.gno.gnonative.v1.SetRemoteResponse
+ (*GetRemoteResponse)(nil), // 40: land.gno.gnonative.v1.GetRemoteResponse
+ (*SetChainIDResponse)(nil), // 41: land.gno.gnonative.v1.SetChainIDResponse
+ (*GetChainIDResponse)(nil), // 42: land.gno.gnonative.v1.GetChainIDResponse
+ (*GenerateRecoveryPhraseResponse)(nil), // 43: land.gno.gnonative.v1.GenerateRecoveryPhraseResponse
+ (*ListKeyInfoResponse)(nil), // 44: land.gno.gnonative.v1.ListKeyInfoResponse
+ (*HasKeyByNameResponse)(nil), // 45: land.gno.gnonative.v1.HasKeyByNameResponse
+ (*HasKeyByAddressResponse)(nil), // 46: land.gno.gnonative.v1.HasKeyByAddressResponse
+ (*HasKeyByNameOrAddressResponse)(nil), // 47: land.gno.gnonative.v1.HasKeyByNameOrAddressResponse
+ (*GetKeyInfoByNameResponse)(nil), // 48: land.gno.gnonative.v1.GetKeyInfoByNameResponse
+ (*GetKeyInfoByAddressResponse)(nil), // 49: land.gno.gnonative.v1.GetKeyInfoByAddressResponse
+ (*GetKeyInfoByNameOrAddressResponse)(nil), // 50: land.gno.gnonative.v1.GetKeyInfoByNameOrAddressResponse
+ (*CreateAccountResponse)(nil), // 51: land.gno.gnonative.v1.CreateAccountResponse
+ (*CreateLedgerResponse)(nil), // 52: land.gno.gnonative.v1.CreateLedgerResponse
+ (*ActivateAccountResponse)(nil), // 53: land.gno.gnonative.v1.ActivateAccountResponse
+ (*SetPasswordResponse)(nil), // 54: land.gno.gnonative.v1.SetPasswordResponse
+ (*RotatePasswordResponse)(nil), // 55: land.gno.gnonative.v1.RotatePasswordResponse
+ (*GetActivatedAccountResponse)(nil), // 56: land.gno.gnonative.v1.GetActivatedAccountResponse
+ (*QueryAccountResponse)(nil), // 57: land.gno.gnonative.v1.QueryAccountResponse
+ (*DeleteAccountResponse)(nil), // 58: land.gno.gnonative.v1.DeleteAccountResponse
+ (*QueryResponse)(nil), // 59: land.gno.gnonative.v1.QueryResponse
+ (*RenderResponse)(nil), // 60: land.gno.gnonative.v1.RenderResponse
+ (*QEvalResponse)(nil), // 61: land.gno.gnonative.v1.QEvalResponse
+ (*CallResponse)(nil), // 62: land.gno.gnonative.v1.CallResponse
+ (*SendResponse)(nil), // 63: land.gno.gnonative.v1.SendResponse
+ (*RunResponse)(nil), // 64: land.gno.gnonative.v1.RunResponse
+ (*MakeTxResponse)(nil), // 65: land.gno.gnonative.v1.MakeTxResponse
+ (*EstimateGasResponse)(nil), // 66: land.gno.gnonative.v1.EstimateGasResponse
+ (*EstimateGasFeeResponse)(nil), // 67: land.gno.gnonative.v1.EstimateGasFeeResponse
+ (*SignTxResponse)(nil), // 68: land.gno.gnonative.v1.SignTxResponse
+ (*BroadcastTxCommitResponse)(nil), // 69: land.gno.gnonative.v1.BroadcastTxCommitResponse
+ (*AddressToBech32Response)(nil), // 70: land.gno.gnonative.v1.AddressToBech32Response
+ (*AddressFromBech32Response)(nil), // 71: land.gno.gnonative.v1.AddressFromBech32Response
+ (*AddressFromMnemonicResponse)(nil), // 72: land.gno.gnonative.v1.AddressFromMnemonicResponse
+ (*ValidateMnemonicWordResponse)(nil), // 73: land.gno.gnonative.v1.ValidateMnemonicWordResponse
+ (*ValidateMnemonicPhraseResponse)(nil), // 74: land.gno.gnonative.v1.ValidateMnemonicPhraseResponse
+ (*HelloResponse)(nil), // 75: land.gno.gnonative.v1.HelloResponse
+ (*HelloStreamResponse)(nil), // 76: land.gno.gnonative.v1.HelloStreamResponse
}
var file_rpc_proto_depIdxs = []int32{
0, // 0: land.gno.gnonative.v1.ErrDetails.codes:type_name -> land.gno.gnonative.v1.ErrCode
@@ -451,56 +454,58 @@ var file_rpc_proto_depIdxs = []int32{
26, // 28: land.gno.gnonative.v1.GnoNativeService.MakeSendTx:input_type -> land.gno.gnonative.v1.SendRequest
27, // 29: land.gno.gnonative.v1.GnoNativeService.MakeRunTx:input_type -> land.gno.gnonative.v1.RunRequest
28, // 30: land.gno.gnonative.v1.GnoNativeService.EstimateGas:input_type -> land.gno.gnonative.v1.EstimateGasRequest
- 29, // 31: land.gno.gnonative.v1.GnoNativeService.SignTx:input_type -> land.gno.gnonative.v1.SignTxRequest
- 30, // 32: land.gno.gnonative.v1.GnoNativeService.BroadcastTxCommit:input_type -> land.gno.gnonative.v1.BroadcastTxCommitRequest
- 31, // 33: land.gno.gnonative.v1.GnoNativeService.AddressToBech32:input_type -> land.gno.gnonative.v1.AddressToBech32Request
- 32, // 34: land.gno.gnonative.v1.GnoNativeService.AddressFromBech32:input_type -> land.gno.gnonative.v1.AddressFromBech32Request
- 33, // 35: land.gno.gnonative.v1.GnoNativeService.AddressFromMnemonic:input_type -> land.gno.gnonative.v1.AddressFromMnemonicRequest
- 34, // 36: land.gno.gnonative.v1.GnoNativeService.ValidateMnemonicWord:input_type -> land.gno.gnonative.v1.ValidateMnemonicWordRequest
- 35, // 37: land.gno.gnonative.v1.GnoNativeService.ValidateMnemonicPhrase:input_type -> land.gno.gnonative.v1.ValidateMnemonicPhraseRequest
- 36, // 38: land.gno.gnonative.v1.GnoNativeService.Hello:input_type -> land.gno.gnonative.v1.HelloRequest
- 37, // 39: land.gno.gnonative.v1.GnoNativeService.HelloStream:input_type -> land.gno.gnonative.v1.HelloStreamRequest
- 38, // 40: land.gno.gnonative.v1.GnoNativeService.SetRemote:output_type -> land.gno.gnonative.v1.SetRemoteResponse
- 39, // 41: land.gno.gnonative.v1.GnoNativeService.GetRemote:output_type -> land.gno.gnonative.v1.GetRemoteResponse
- 40, // 42: land.gno.gnonative.v1.GnoNativeService.SetChainID:output_type -> land.gno.gnonative.v1.SetChainIDResponse
- 41, // 43: land.gno.gnonative.v1.GnoNativeService.GetChainID:output_type -> land.gno.gnonative.v1.GetChainIDResponse
- 42, // 44: land.gno.gnonative.v1.GnoNativeService.GenerateRecoveryPhrase:output_type -> land.gno.gnonative.v1.GenerateRecoveryPhraseResponse
- 43, // 45: land.gno.gnonative.v1.GnoNativeService.ListKeyInfo:output_type -> land.gno.gnonative.v1.ListKeyInfoResponse
- 44, // 46: land.gno.gnonative.v1.GnoNativeService.HasKeyByName:output_type -> land.gno.gnonative.v1.HasKeyByNameResponse
- 45, // 47: land.gno.gnonative.v1.GnoNativeService.HasKeyByAddress:output_type -> land.gno.gnonative.v1.HasKeyByAddressResponse
- 46, // 48: land.gno.gnonative.v1.GnoNativeService.HasKeyByNameOrAddress:output_type -> land.gno.gnonative.v1.HasKeyByNameOrAddressResponse
- 47, // 49: land.gno.gnonative.v1.GnoNativeService.GetKeyInfoByName:output_type -> land.gno.gnonative.v1.GetKeyInfoByNameResponse
- 48, // 50: land.gno.gnonative.v1.GnoNativeService.GetKeyInfoByAddress:output_type -> land.gno.gnonative.v1.GetKeyInfoByAddressResponse
- 49, // 51: land.gno.gnonative.v1.GnoNativeService.GetKeyInfoByNameOrAddress:output_type -> land.gno.gnonative.v1.GetKeyInfoByNameOrAddressResponse
- 50, // 52: land.gno.gnonative.v1.GnoNativeService.CreateAccount:output_type -> land.gno.gnonative.v1.CreateAccountResponse
- 51, // 53: land.gno.gnonative.v1.GnoNativeService.CreateLedger:output_type -> land.gno.gnonative.v1.CreateLedgerResponse
- 52, // 54: land.gno.gnonative.v1.GnoNativeService.ActivateAccount:output_type -> land.gno.gnonative.v1.ActivateAccountResponse
- 53, // 55: land.gno.gnonative.v1.GnoNativeService.SetPassword:output_type -> land.gno.gnonative.v1.SetPasswordResponse
- 54, // 56: land.gno.gnonative.v1.GnoNativeService.RotatePassword:output_type -> land.gno.gnonative.v1.RotatePasswordResponse
- 55, // 57: land.gno.gnonative.v1.GnoNativeService.GetActivatedAccount:output_type -> land.gno.gnonative.v1.GetActivatedAccountResponse
- 56, // 58: land.gno.gnonative.v1.GnoNativeService.QueryAccount:output_type -> land.gno.gnonative.v1.QueryAccountResponse
- 57, // 59: land.gno.gnonative.v1.GnoNativeService.DeleteAccount:output_type -> land.gno.gnonative.v1.DeleteAccountResponse
- 58, // 60: land.gno.gnonative.v1.GnoNativeService.Query:output_type -> land.gno.gnonative.v1.QueryResponse
- 59, // 61: land.gno.gnonative.v1.GnoNativeService.Render:output_type -> land.gno.gnonative.v1.RenderResponse
- 60, // 62: land.gno.gnonative.v1.GnoNativeService.QEval:output_type -> land.gno.gnonative.v1.QEvalResponse
- 61, // 63: land.gno.gnonative.v1.GnoNativeService.Call:output_type -> land.gno.gnonative.v1.CallResponse
- 62, // 64: land.gno.gnonative.v1.GnoNativeService.Send:output_type -> land.gno.gnonative.v1.SendResponse
- 63, // 65: land.gno.gnonative.v1.GnoNativeService.Run:output_type -> land.gno.gnonative.v1.RunResponse
- 64, // 66: land.gno.gnonative.v1.GnoNativeService.MakeCallTx:output_type -> land.gno.gnonative.v1.MakeTxResponse
- 64, // 67: land.gno.gnonative.v1.GnoNativeService.MakeSendTx:output_type -> land.gno.gnonative.v1.MakeTxResponse
- 64, // 68: land.gno.gnonative.v1.GnoNativeService.MakeRunTx:output_type -> land.gno.gnonative.v1.MakeTxResponse
- 65, // 69: land.gno.gnonative.v1.GnoNativeService.EstimateGas:output_type -> land.gno.gnonative.v1.EstimateGasResponse
- 66, // 70: land.gno.gnonative.v1.GnoNativeService.SignTx:output_type -> land.gno.gnonative.v1.SignTxResponse
- 67, // 71: land.gno.gnonative.v1.GnoNativeService.BroadcastTxCommit:output_type -> land.gno.gnonative.v1.BroadcastTxCommitResponse
- 68, // 72: land.gno.gnonative.v1.GnoNativeService.AddressToBech32:output_type -> land.gno.gnonative.v1.AddressToBech32Response
- 69, // 73: land.gno.gnonative.v1.GnoNativeService.AddressFromBech32:output_type -> land.gno.gnonative.v1.AddressFromBech32Response
- 70, // 74: land.gno.gnonative.v1.GnoNativeService.AddressFromMnemonic:output_type -> land.gno.gnonative.v1.AddressFromMnemonicResponse
- 71, // 75: land.gno.gnonative.v1.GnoNativeService.ValidateMnemonicWord:output_type -> land.gno.gnonative.v1.ValidateMnemonicWordResponse
- 72, // 76: land.gno.gnonative.v1.GnoNativeService.ValidateMnemonicPhrase:output_type -> land.gno.gnonative.v1.ValidateMnemonicPhraseResponse
- 73, // 77: land.gno.gnonative.v1.GnoNativeService.Hello:output_type -> land.gno.gnonative.v1.HelloResponse
- 74, // 78: land.gno.gnonative.v1.GnoNativeService.HelloStream:output_type -> land.gno.gnonative.v1.HelloStreamResponse
- 40, // [40:79] is the sub-list for method output_type
- 1, // [1:40] is the sub-list for method input_type
+ 29, // 31: land.gno.gnonative.v1.GnoNativeService.EstimateGasFee:input_type -> land.gno.gnonative.v1.EstimateGasFeeRequest
+ 30, // 32: land.gno.gnonative.v1.GnoNativeService.SignTx:input_type -> land.gno.gnonative.v1.SignTxRequest
+ 31, // 33: land.gno.gnonative.v1.GnoNativeService.BroadcastTxCommit:input_type -> land.gno.gnonative.v1.BroadcastTxCommitRequest
+ 32, // 34: land.gno.gnonative.v1.GnoNativeService.AddressToBech32:input_type -> land.gno.gnonative.v1.AddressToBech32Request
+ 33, // 35: land.gno.gnonative.v1.GnoNativeService.AddressFromBech32:input_type -> land.gno.gnonative.v1.AddressFromBech32Request
+ 34, // 36: land.gno.gnonative.v1.GnoNativeService.AddressFromMnemonic:input_type -> land.gno.gnonative.v1.AddressFromMnemonicRequest
+ 35, // 37: land.gno.gnonative.v1.GnoNativeService.ValidateMnemonicWord:input_type -> land.gno.gnonative.v1.ValidateMnemonicWordRequest
+ 36, // 38: land.gno.gnonative.v1.GnoNativeService.ValidateMnemonicPhrase:input_type -> land.gno.gnonative.v1.ValidateMnemonicPhraseRequest
+ 37, // 39: land.gno.gnonative.v1.GnoNativeService.Hello:input_type -> land.gno.gnonative.v1.HelloRequest
+ 38, // 40: land.gno.gnonative.v1.GnoNativeService.HelloStream:input_type -> land.gno.gnonative.v1.HelloStreamRequest
+ 39, // 41: land.gno.gnonative.v1.GnoNativeService.SetRemote:output_type -> land.gno.gnonative.v1.SetRemoteResponse
+ 40, // 42: land.gno.gnonative.v1.GnoNativeService.GetRemote:output_type -> land.gno.gnonative.v1.GetRemoteResponse
+ 41, // 43: land.gno.gnonative.v1.GnoNativeService.SetChainID:output_type -> land.gno.gnonative.v1.SetChainIDResponse
+ 42, // 44: land.gno.gnonative.v1.GnoNativeService.GetChainID:output_type -> land.gno.gnonative.v1.GetChainIDResponse
+ 43, // 45: land.gno.gnonative.v1.GnoNativeService.GenerateRecoveryPhrase:output_type -> land.gno.gnonative.v1.GenerateRecoveryPhraseResponse
+ 44, // 46: land.gno.gnonative.v1.GnoNativeService.ListKeyInfo:output_type -> land.gno.gnonative.v1.ListKeyInfoResponse
+ 45, // 47: land.gno.gnonative.v1.GnoNativeService.HasKeyByName:output_type -> land.gno.gnonative.v1.HasKeyByNameResponse
+ 46, // 48: land.gno.gnonative.v1.GnoNativeService.HasKeyByAddress:output_type -> land.gno.gnonative.v1.HasKeyByAddressResponse
+ 47, // 49: land.gno.gnonative.v1.GnoNativeService.HasKeyByNameOrAddress:output_type -> land.gno.gnonative.v1.HasKeyByNameOrAddressResponse
+ 48, // 50: land.gno.gnonative.v1.GnoNativeService.GetKeyInfoByName:output_type -> land.gno.gnonative.v1.GetKeyInfoByNameResponse
+ 49, // 51: land.gno.gnonative.v1.GnoNativeService.GetKeyInfoByAddress:output_type -> land.gno.gnonative.v1.GetKeyInfoByAddressResponse
+ 50, // 52: land.gno.gnonative.v1.GnoNativeService.GetKeyInfoByNameOrAddress:output_type -> land.gno.gnonative.v1.GetKeyInfoByNameOrAddressResponse
+ 51, // 53: land.gno.gnonative.v1.GnoNativeService.CreateAccount:output_type -> land.gno.gnonative.v1.CreateAccountResponse
+ 52, // 54: land.gno.gnonative.v1.GnoNativeService.CreateLedger:output_type -> land.gno.gnonative.v1.CreateLedgerResponse
+ 53, // 55: land.gno.gnonative.v1.GnoNativeService.ActivateAccount:output_type -> land.gno.gnonative.v1.ActivateAccountResponse
+ 54, // 56: land.gno.gnonative.v1.GnoNativeService.SetPassword:output_type -> land.gno.gnonative.v1.SetPasswordResponse
+ 55, // 57: land.gno.gnonative.v1.GnoNativeService.RotatePassword:output_type -> land.gno.gnonative.v1.RotatePasswordResponse
+ 56, // 58: land.gno.gnonative.v1.GnoNativeService.GetActivatedAccount:output_type -> land.gno.gnonative.v1.GetActivatedAccountResponse
+ 57, // 59: land.gno.gnonative.v1.GnoNativeService.QueryAccount:output_type -> land.gno.gnonative.v1.QueryAccountResponse
+ 58, // 60: land.gno.gnonative.v1.GnoNativeService.DeleteAccount:output_type -> land.gno.gnonative.v1.DeleteAccountResponse
+ 59, // 61: land.gno.gnonative.v1.GnoNativeService.Query:output_type -> land.gno.gnonative.v1.QueryResponse
+ 60, // 62: land.gno.gnonative.v1.GnoNativeService.Render:output_type -> land.gno.gnonative.v1.RenderResponse
+ 61, // 63: land.gno.gnonative.v1.GnoNativeService.QEval:output_type -> land.gno.gnonative.v1.QEvalResponse
+ 62, // 64: land.gno.gnonative.v1.GnoNativeService.Call:output_type -> land.gno.gnonative.v1.CallResponse
+ 63, // 65: land.gno.gnonative.v1.GnoNativeService.Send:output_type -> land.gno.gnonative.v1.SendResponse
+ 64, // 66: land.gno.gnonative.v1.GnoNativeService.Run:output_type -> land.gno.gnonative.v1.RunResponse
+ 65, // 67: land.gno.gnonative.v1.GnoNativeService.MakeCallTx:output_type -> land.gno.gnonative.v1.MakeTxResponse
+ 65, // 68: land.gno.gnonative.v1.GnoNativeService.MakeSendTx:output_type -> land.gno.gnonative.v1.MakeTxResponse
+ 65, // 69: land.gno.gnonative.v1.GnoNativeService.MakeRunTx:output_type -> land.gno.gnonative.v1.MakeTxResponse
+ 66, // 70: land.gno.gnonative.v1.GnoNativeService.EstimateGas:output_type -> land.gno.gnonative.v1.EstimateGasResponse
+ 67, // 71: land.gno.gnonative.v1.GnoNativeService.EstimateGasFee:output_type -> land.gno.gnonative.v1.EstimateGasFeeResponse
+ 68, // 72: land.gno.gnonative.v1.GnoNativeService.SignTx:output_type -> land.gno.gnonative.v1.SignTxResponse
+ 69, // 73: land.gno.gnonative.v1.GnoNativeService.BroadcastTxCommit:output_type -> land.gno.gnonative.v1.BroadcastTxCommitResponse
+ 70, // 74: land.gno.gnonative.v1.GnoNativeService.AddressToBech32:output_type -> land.gno.gnonative.v1.AddressToBech32Response
+ 71, // 75: land.gno.gnonative.v1.GnoNativeService.AddressFromBech32:output_type -> land.gno.gnonative.v1.AddressFromBech32Response
+ 72, // 76: land.gno.gnonative.v1.GnoNativeService.AddressFromMnemonic:output_type -> land.gno.gnonative.v1.AddressFromMnemonicResponse
+ 73, // 77: land.gno.gnonative.v1.GnoNativeService.ValidateMnemonicWord:output_type -> land.gno.gnonative.v1.ValidateMnemonicWordResponse
+ 74, // 78: land.gno.gnonative.v1.GnoNativeService.ValidateMnemonicPhrase:output_type -> land.gno.gnonative.v1.ValidateMnemonicPhraseResponse
+ 75, // 79: land.gno.gnonative.v1.GnoNativeService.Hello:output_type -> land.gno.gnonative.v1.HelloResponse
+ 76, // 80: land.gno.gnonative.v1.GnoNativeService.HelloStream:output_type -> land.gno.gnonative.v1.HelloStreamResponse
+ 41, // [41:81] is the sub-list for method output_type
+ 1, // [1:41] is the sub-list for method input_type
1, // [1:1] is the sub-list for extension type_name
1, // [1:1] is the sub-list for extension extendee
0, // [0:1] is the sub-list for field type_name
diff --git a/api/gnonativetypes.proto b/api/gnonativetypes.proto
index c1a6301..ab37826 100644
--- a/api/gnonativetypes.proto
+++ b/api/gnonativetypes.proto
@@ -355,10 +355,6 @@ message EstimateGasRequest {
uint32 security_margin = 3;
// The update boolean to update the gas wanted field in the transaction if true.
bool update_tx = 4;
- // The signer's account number on the blockchain. If 0 then query the blockchain for the value.
- uint64 account_number = 5;
- // The sequence number of the signer's transactions on the blockchain. If 0 then query the blockchain for the value.
- uint64 sequence_number = 6;
}
message EstimateGasResponse {
@@ -368,6 +364,32 @@ message EstimateGasResponse {
sint64 gas_wanted = 2;
}
+message EstimateGasFeeRequest {
+ // The JSON encoding of the unsigned transaction (from MakeCallTx, etc.)
+ string tx_json = 1;
+ // The address of the account to sign the transaction
+ bytes address = 2;
+ // The security margin to apply to the estimated gas amount.
+ // This number represents a decimal numeral value with two decimals precision, without the decimal separator. E.g. 1 means 0.01 and 10000 means 100.00.
+ // It will be multiplied by the estimated gas amount.
+ uint32 gas_security_margin = 3;
+ // The security margin to apply to the gas price.
+ // This number represents a decimal numeral value with two decimals precision, without the decimal separator. E.g. 1 means 0.01 and 10000 means 100.00.
+ // It will be multiplied by the fetched gas price.
+ uint32 price_security_margin = 4;
+ // The update boolean to update the gas wanted field in the transaction if true.
+ bool update_tx = 5;
+}
+
+message EstimateGasFeeResponse {
+ // The JSON encoding of the unsigned transaction
+ string tx_json = 1;
+ // The estimated gas wanted for the transaction
+ sint64 gas_wanted = 2;
+ // The estimated fee for the transaction
+ Coin fee = 3;
+}
+
message BroadcastTxCommitRequest {
// The JSON encoding of the signed transaction (from SignTx)
string signed_tx_json = 1 [json_name = "tx_json"];
diff --git a/api/gnonativetypes/gnonativetypes.go b/api/gnonativetypes/gnonativetypes.go
index 83596c3..6adb08f 100644
--- a/api/gnonativetypes/gnonativetypes.go
+++ b/api/gnonativetypes/gnonativetypes.go
@@ -342,10 +342,6 @@ type EstimateGasRequest struct {
SecurityMargin uint32 `json:"security_margin" yaml:"security_margin"`
// The update boolean to update the gas wanted field in the transaction if true.
UpdateTx bool `json:"update_tx" yaml:"update_tx"`
- // The signer's account number on the blockchain. If 0 then query the blockchain for the value.
- AccountNumber uint64 `json:"account_number" yaml:"account_number"`
- // The sequence number of the signer's transactions on the blockchain. If 0 then query the blockchain for the value.
- SequenceNumber uint64 `json:"sequence_number" yaml:"sequence_number"`
}
type EstimateGasResponse struct {
@@ -355,6 +351,32 @@ type EstimateGasResponse struct {
GasWanted int64 `json:"gas_wanted" yaml:"gas_wanted"`
}
+type EstimateGasFeeRequest struct {
+ // The JSON encoding of the unsigned transaction (from MakeCallTx, etc.)
+ TxJSON string `json:"tx_json" yaml:"tx_json"`
+ // The address of the account to sign the transaction
+ Address []byte `json:"address" yaml:"address"`
+ // The security margin to apply to the estimated gas amount.
+ // This number represents a decimal numeral value with two decimals precision, without the decimal separator. E.g. 1 means 0.01 and 10000 means 100.00.
+ // It will be multiplied by the estimated gas amount.
+ GasSecurityMargin uint32 `json:"gas_security_margin" yaml:"gas_security_margin"`
+ // The security margin to apply to the gas price.
+ // This number represents a decimal numeral value with two decimals precision, without the decimal separator. E.g. 1 means 0.01 and 10000 means 100.00.
+ // It will be multiplied by the fetched gas price.
+ PriceSecurityMargin uint32 `json:"price_security_margin" yaml:"price_security_margin"`
+ // The update boolean to update the gas wanted field in the transaction if true.
+ UpdateTx bool `json:"update_tx" yaml:"update_tx"`
+}
+
+type EstimateGasFeeResponse struct {
+ // The JSON encoding of the unsigned transaction
+ TxJSON string `json:"tx_json" yaml:"tx_json"`
+ // The estimated gas wanted for the transaction
+ GasWanted int64 `json:"gas_wanted" yaml:"gas_wanted"`
+ // The estimated fee for the transaction
+ Fee Coin `json:"fee" yaml:"fee"`
+}
+
type BroadcastTxCommitRequest struct {
// The JSON encoding of the signed transaction (from SignTx)
SignedTxJSON string `json:"tx_json" yaml:"tx_json"`
diff --git a/api/gnonativetypes/package.go b/api/gnonativetypes/package.go
index ded8743..0ddedf5 100644
--- a/api/gnonativetypes/package.go
+++ b/api/gnonativetypes/package.go
@@ -75,6 +75,8 @@ var Package = amino.RegisterPackage(amino.NewPackage(
SignTxResponse{},
EstimateGasRequest{},
EstimateGasResponse{},
+ EstimateGasFeeRequest{},
+ EstimateGasFeeResponse{},
BroadcastTxCommitRequest{},
BroadcastTxCommitResponse{},
AddressToBech32Request{},
diff --git a/api/rpc.proto b/api/rpc.proto
index 1878894..d79e7af 100644
--- a/api/rpc.proto
+++ b/api/rpc.proto
@@ -154,8 +154,15 @@ service GnoNativeService {
// EstimateGas estimates the least amount of gas required for the transaction to go through on the chain (minimum gas wanted), with a security margin.
// If UpdateTx is true, then update the transaction with the gasWanted amount.
+ // This uses the remote node determined by SetRemote.
rpc EstimateGas(EstimateGasRequest) returns (EstimateGasResponse);
+ // EstimateGasFee estimates the fee for the transaction to go through on the chain (minimum gas wanted times the gas price), with a security margin.
+ // If UpdateTx is true, then update the transaction with the gasWanted amount.
+ // This uses the remote node determined by SetRemote.
+ // This is similar to EstimateGas but also fetches the gas price from the remote node.
+ rpc EstimateGasFee(EstimateGasFeeRequest) returns (EstimateGasFeeResponse);
+
// Sign the transaction using the account with the given address.
// If there is no activated account with the given address, return [ErrCode](#land.gno.gnonative.v1.ErrCode).ErrNoActiveAccount.
// If the password is wrong, return [ErrCode](#land.gno.gnonative.v1.ErrCode).ErrDecryptionFailed.
diff --git a/expo/src/api/GnoNativeApi.ts b/expo/src/api/GnoNativeApi.ts
index 64ba217..31ee86f 100644
--- a/expo/src/api/GnoNativeApi.ts
+++ b/expo/src/api/GnoNativeApi.ts
@@ -21,6 +21,7 @@ import {
SignTxResponse,
RotatePasswordResponse,
EstimateGasResponse,
+ EstimateGasFeeResponse,
} from './vendor/gnonativetypes_pb';
import { GnoNativeService } from './vendor/rpc_pb';
import { GoBridge, GoBridgeInterface } from '../GoBridge';
@@ -109,8 +110,6 @@ export class GnoNativeApi implements GnoKeyApi, GoBridgeInterface {
address: Uint8Array,
securityMargin: number,
updateTx: boolean,
- accountNumber: bigint = BigInt(0),
- sequenceNumber: bigint = BigInt(0),
): Promise {
const client = this.#getClient();
const response = client.estimateGas({
@@ -118,8 +117,24 @@ export class GnoNativeApi implements GnoKeyApi, GoBridgeInterface {
address,
securityMargin,
updateTx,
- accountNumber,
- sequenceNumber,
+ });
+ return response;
+ }
+
+ async estimateGasFee(
+ txJson: string,
+ address: Uint8Array,
+ gasSecurityMargin: number,
+ priceSecurityMargin: number,
+ updateTx: boolean,
+ ): Promise {
+ const client = this.#getClient();
+ const response = client.estimateGasFee({
+ txJson,
+ address,
+ gasSecurityMargin,
+ priceSecurityMargin,
+ updateTx,
});
return response;
}
diff --git a/expo/src/api/types.ts b/expo/src/api/types.ts
index 6f9a9b4..bf34e06 100644
--- a/expo/src/api/types.ts
+++ b/expo/src/api/types.ts
@@ -15,6 +15,7 @@ import {
KeyInfo,
SignTxResponse,
EstimateGasResponse,
+ EstimateGasFeeResponse,
MakeTxResponse,
BroadcastTxCommitResponse,
Coin,
@@ -116,9 +117,14 @@ export interface GnoKeyApi {
address: Uint8Array,
securityMargin: number,
updateTx: boolean,
- accountNumber?: bigint,
- sequenceNumber?: bigint,
): Promise;
+ estimateGasFee(
+ txJson: string,
+ address: Uint8Array,
+ gasSecurityMargin: number,
+ priceSecurityMargin: number,
+ updateTx: boolean,
+ ): Promise;
makeCallTx(
packagePath: string,
fnc: string,
diff --git a/gen.sum b/gen.sum
index c728e94..e4814e4 100644
--- a/gen.sum
+++ b/gen.sum
@@ -1,6 +1,6 @@
-32ea05c96db232590e226d2a995546566137526b api/gnonativetypes.proto
-4606ed9c6426464cc8c4d11ec15abbd6f32cdb8f api/gnonativetypes/gnonativetypes.go
-5c1423cfce48514cbb29ce4a76e3a7017c055ba0 api/gnonativetypes/package.go
-5e9ce9eb1815d8d2771fe948fb20223df36ff182 api/rpc.proto
+e4d28abfa76dddac3bb78ec1872a460e7d02fe2c api/gnonativetypes.proto
+e211ed4b9ca545bca75406c187bd181c2ba9d359 api/gnonativetypes/gnonativetypes.go
+579d8230ef55440b67e03f6b6d4919690c5f414d api/gnonativetypes/package.go
+f9949785fa5fa8a0bba6355e7f1ee39df4840210 api/rpc.proto
426b4aee8f1f2b045062c7c745b4d3559d59daf9 buf.gen.yaml
cfa69b131531fcb5ca340fbede8c7ccf094d62bb Makefile
diff --git a/service/api.go b/service/api.go
index a721edf..fbc5953 100644
--- a/service/api.go
+++ b/service/api.go
@@ -15,6 +15,7 @@ import (
"github.com/gnolang/gno/tm2/pkg/crypto/bip39"
crypto_keys "github.com/gnolang/gno/tm2/pkg/crypto/keys"
"github.com/gnolang/gno/tm2/pkg/crypto/keys/keyerror"
+ "github.com/gnolang/gno/tm2/pkg/overflow"
"github.com/gnolang/gno/tm2/pkg/sdk/bank"
"github.com/gnolang/gno/tm2/pkg/std"
"go.uber.org/zap"
@@ -701,15 +702,85 @@ func (s *gnoNativeService) EstimateGas(ctx context.Context, req *connect.Request
return nil, err
}
- signer, err := s.getSigner(req.Msg.Address)
+ gasWanted, err := s.estimateGasWanted(&tx, req.Msg.Address, req.Msg.SecurityMargin, req.Msg.UpdateTx)
+ if err != nil {
+ return nil, getGrpcError(err)
+ }
+
+ txJSON, err := amino.MarshalJSON(tx)
if err != nil {
return nil, err
}
- info, err := signer.Info()
+
+ return connect.NewResponse(&api_gen.EstimateGasResponse{TxJson: string(txJSON), GasWanted: gasWanted}), nil
+}
+
+func (s *gnoNativeService) EstimateGasFee(ctx context.Context, req *connect.Request[api_gen.EstimateGasFeeRequest]) (*connect.Response[api_gen.EstimateGasFeeResponse], error) {
+ var tx std.Tx
+ if err := amino.UnmarshalJSON([]byte(req.Msg.TxJson), &tx); err != nil {
+ return nil, err
+ }
+
+ gasWanted, err := s.estimateGasWanted(&tx, req.Msg.Address, req.Msg.GasSecurityMargin, req.Msg.UpdateTx)
+ if err != nil {
+ return nil, getGrpcError(err)
+ }
+
+ txJSON, err := amino.MarshalJSON(tx)
if err != nil {
return nil, err
}
+ c, err := s.getClient(nil)
+ if err != nil {
+ return nil, getGrpcError(err)
+ }
+
+ // Imitate gnokey CLI https://github.com/gnolang/gno/blob/de4b5b56c60126373ec0702234c196fdae365a0b/tm2/pkg/crypto/keys/client/broadcast.go#L142
+ qres, err := c.Query(gnoclient.QueryCfg{Path: "auth/gasprice", Data: []byte{}})
+ if err != nil {
+ return nil, getGrpcError(err)
+ }
+ gp := std.GasPrice{}
+ err = amino.UnmarshalJSON(qres.Response.Data, &gp)
+ if err != nil {
+ return nil, getGrpcError(err)
+ }
+ if gp.Gas == 0 {
+ // Can't get the gas price from the node
+ // TODO: Use a better error code
+ return nil, api_gen.ErrCode_ErrInvalidCoins
+ }
+ if gp.Price.Denom != "ugnot" {
+ return nil, api_gen.ErrCode_ErrInvalidCoins
+ }
+ fee := gasWanted/gp.Gas + 1
+ fee = overflow.Mulp(fee, gp.Price.Amount)
+ // fee buffer to cover the sudden change of gas price
+ feeBuffer := float64(req.Msg.PriceSecurityMargin) / 100
+ fee = int64(float64(fee) * feeBuffer)
+
+ return connect.NewResponse(&api_gen.EstimateGasFeeResponse{
+ TxJson: string(txJSON),
+ GasWanted: gasWanted,
+ Fee: &api_gen.Coin{
+ Denom: "ugnot",
+ Amount: fee,
+ }}), nil
+}
+
+// estimateGasWanted is a helper for EstimateGas, etc. Use the tx and address to call gnoclient.EstimateGas, then
+// multiply it by securityMarginPercent/100 and return the gas wanted. If updateTx is true, then update tx.Fee.GasWanted .
+func (s *gnoNativeService) estimateGasWanted(tx *std.Tx, address []byte, securityMarginPercent uint32, updateTx bool) (int64, error) {
+ signer, err := s.getSigner(address)
+ if err != nil {
+ return 0, err
+ }
+ info, err := signer.Info()
+ if err != nil {
+ return 0, err
+ }
+
// Set the tx signature using the public key. No need to sign to get the actual signature bytes.
tx.Signatures = []std.Signature{
{PubKey: info.GetPubKey()},
@@ -717,29 +788,24 @@ func (s *gnoNativeService) EstimateGas(ctx context.Context, req *connect.Request
c, err := s.getClient(nil)
if err != nil {
- return nil, getGrpcError(err)
+ return 0, getGrpcError(err)
}
- amount, err := c.EstimateGas(&tx)
+ amount, err := c.EstimateGas(tx)
if err != nil {
- return nil, getGrpcError(err)
+ return 0, getGrpcError(err)
}
// Apply the security margin.
// The security margin is a decimal numeral without the decimal seprator.
- gasWanted := int64(float64(amount) * float64(req.Msg.SecurityMargin) / 100)
+ gasWanted := int64(float64(amount) * float64(securityMarginPercent) / 100)
// Update the transaction
- if req.Msg.UpdateTx {
+ if updateTx {
tx.Fee.GasWanted = gasWanted
}
- txJSON, err := amino.MarshalJSON(tx)
- if err != nil {
- return nil, err
- }
-
- return connect.NewResponse(&api_gen.EstimateGasResponse{TxJson: string(txJSON), GasWanted: gasWanted}), nil
+ return gasWanted, nil
}
func (s *gnoNativeService) BroadcastTxCommit(ctx context.Context, req *connect.Request[api_gen.BroadcastTxCommitRequest],