@thru/thru-sdk 0.1.29 → 0.1.33

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,8 +1,8 @@
1
1
  import { messageDesc, fileDesc, serviceDesc } from '@bufbuild/protobuf/codegenv2';
2
2
  import { file_google_protobuf_timestamp, file_google_protobuf_descriptor, file_google_protobuf_duration } from '@bufbuild/protobuf/wkt';
3
+ import { utils, etc, Point, CURVE, getPublicKeyAsync } from '@noble/ed25519';
3
4
  import { create } from '@bufbuild/protobuf';
4
- import { signAsync, getPublicKeyAsync } from '@noble/ed25519';
5
- import { decodeAddress, isHexString, decodeSignature, ensureBytes, encodeAddress, hexToBytes, encodeSignature, decodeBase64 } from '@thru/helpers';
5
+ import { encodeAddress, decodeAddress, isHexString, hexToBytes, encodeSignature, decodeSignature, ensureBytes } from '@thru/helpers';
6
6
  import { createClient } from '@connectrpc/connect';
7
7
  import { createGrpcWebTransport } from '@connectrpc/connect-web';
8
8
  import { sha256 } from '@noble/hashes/sha2';
@@ -28,6 +28,109 @@ var ConsensusStatus = /* @__PURE__ */ ((ConsensusStatus2) => {
28
28
  ConsensusStatus2[ConsensusStatus2["CLUSTER_EXECUTED"] = 5] = "CLUSTER_EXECUTED";
29
29
  return ConsensusStatus2;
30
30
  })(ConsensusStatus || {});
31
+ var SignatureDomain = /* @__PURE__ */ ((SignatureDomain2) => {
32
+ SignatureDomain2[SignatureDomain2["TXN"] = 0] = "TXN";
33
+ SignatureDomain2[SignatureDomain2["BLOCK_HEADER"] = 1] = "BLOCK_HEADER";
34
+ SignatureDomain2[SignatureDomain2["BLOCK"] = 2] = "BLOCK";
35
+ SignatureDomain2[SignatureDomain2["GOSSIP"] = 3] = "GOSSIP";
36
+ return SignatureDomain2;
37
+ })(SignatureDomain || {});
38
+ var DOMAIN_TAGS = {
39
+ [0 /* TXN */]: 1n,
40
+ [1 /* BLOCK_HEADER */]: 2n,
41
+ [2 /* BLOCK */]: 3n,
42
+ [3 /* GOSSIP */]: 4n
43
+ };
44
+ var DOMAIN_BLOCK_SIZE = 128;
45
+ var SIGNATURE_SIZE = 64;
46
+ var PUBKEY_SIZE = 32;
47
+ function createDomainBlock(domain) {
48
+ const block = new Uint8Array(DOMAIN_BLOCK_SIZE);
49
+ block.fill(0);
50
+ const tag = DOMAIN_TAGS[domain];
51
+ if (tag === void 0) {
52
+ throw new Error(`Invalid signature domain: ${domain}`);
53
+ }
54
+ const view = new DataView(block.buffer, block.byteOffset, block.byteLength);
55
+ view.setBigUint64(0, tag, false);
56
+ return block;
57
+ }
58
+ function copyBytes(bytes) {
59
+ const out = new Uint8Array(bytes.length);
60
+ out.set(bytes);
61
+ return out;
62
+ }
63
+ function concatBytes(...arrays) {
64
+ return etc.concatBytes(...arrays);
65
+ }
66
+ function bytesToNumberLE(bytes) {
67
+ let value = 0n;
68
+ for (let i = 0; i < bytes.length; i++) {
69
+ value += BigInt(bytes[i]) << 8n * BigInt(i);
70
+ }
71
+ return value;
72
+ }
73
+ function modOrder(value) {
74
+ const modulus = CURVE.n;
75
+ const result = value % modulus;
76
+ return result >= 0n ? result : result + modulus;
77
+ }
78
+ function numberToBytesLE(value, length) {
79
+ const out = new Uint8Array(length);
80
+ let current = value;
81
+ for (let i = 0; i < length; i++) {
82
+ out[i] = Number(current & 0xffn);
83
+ current >>= 8n;
84
+ }
85
+ return out;
86
+ }
87
+ async function signWithDomain(message, privateKey, publicKey, domain = 0 /* TXN */) {
88
+ if (privateKey.length !== PUBKEY_SIZE) {
89
+ throw new Error("Private key must contain 32 bytes");
90
+ }
91
+ const domainBlock = createDomainBlock(domain);
92
+ const messageBytes = copyBytes(message);
93
+ const extended = await utils.getExtendedPublicKeyAsync(privateKey);
94
+ const publicKeyBytes = publicKey ? copyBytes(publicKey) : extended.pointBytes;
95
+ if (publicKeyBytes.length !== PUBKEY_SIZE) {
96
+ throw new Error("Public key must contain 32 bytes");
97
+ }
98
+ const rInput = concatBytes(domainBlock, extended.prefix, messageBytes);
99
+ const r = modOrder(bytesToNumberLE(await etc.sha512Async(rInput)));
100
+ const R = Point.BASE.multiply(r).toBytes();
101
+ const kInput = concatBytes(domainBlock, R, publicKeyBytes, messageBytes);
102
+ const k = modOrder(bytesToNumberLE(await etc.sha512Async(kInput)));
103
+ const s = modOrder(r + k * extended.scalar);
104
+ const signature = new Uint8Array(SIGNATURE_SIZE);
105
+ signature.set(R, 0);
106
+ signature.set(numberToBytesLE(s, PUBKEY_SIZE), PUBKEY_SIZE);
107
+ return signature;
108
+ }
109
+ async function verifyWithDomain(signature, message, publicKey, domain = 0 /* TXN */) {
110
+ if (signature.length !== SIGNATURE_SIZE || publicKey.length !== PUBKEY_SIZE) {
111
+ return false;
112
+ }
113
+ const domainBlock = createDomainBlock(domain);
114
+ const messageBytes = copyBytes(message);
115
+ const rBytes = signature.subarray(0, PUBKEY_SIZE);
116
+ const s = bytesToNumberLE(signature.subarray(PUBKEY_SIZE));
117
+ if (s >= CURVE.n) {
118
+ return false;
119
+ }
120
+ let R;
121
+ let A;
122
+ try {
123
+ R = Point.fromHex(rBytes);
124
+ A = Point.fromHex(publicKey);
125
+ } catch {
126
+ return false;
127
+ }
128
+ const kInput = concatBytes(domainBlock, rBytes, publicKey, messageBytes);
129
+ const k = modOrder(bytesToNumberLE(await etc.sha512Async(kInput)));
130
+ const lhs = Point.BASE.multiply(s);
131
+ const rhs = R.add(A.multiply(k));
132
+ return lhs.add(rhs.negate()).clearCofactor().is0();
133
+ }
31
134
  var file_thru_common_v1_primitives = /* @__PURE__ */ fileDesc("Ch90aHJ1L2NvbW1vbi92MS9wcmltaXRpdmVzLnByb3RvEg50aHJ1LmNvbW1vbi52MSIjCgZQdWJrZXkSGQoFdmFsdWUYASABKAxCCuBBArpIBHoCaCAiJgoJU2lnbmF0dXJlEhkKBXZhbHVlGAEgASgMQgrgQQK6SAR6AmhAIiYKCFRhUHVia2V5EhoKBXZhbHVlGAEgASgJQgvgQQK6SAVyA5gBLiIpCgtUc1NpZ25hdHVyZRIaCgV2YWx1ZRgBIAEoCUIL4EECukgFcgOYAVpCywEKEmNvbS50aHJ1LmNvbW1vbi52MUIPUHJpbWl0aXZlc1Byb3RvUAFaRGdpdGh1Yi5jb20vVW50by1MYWJzL3RocnUtbmV0L2dycGMvcGtnL3Byb3RvL3RocnUvY29tbW9uL3YxO2NvbW1vbnYxogIDVENYqgIOVGhydS5Db21tb24uVjG6AgNUSFXKAg5UaHJ1XENvbW1vblxWMeICGlRocnVcQ29tbW9uXFYxXEdQQk1ldGFkYXRh6gIQVGhydTo6Q29tbW9uOjpWMWIGcHJvdG8z", [file_buf_validate_validate, file_google_api_field_behavior]);
32
135
  var PubkeySchema = /* @__PURE__ */ messageDesc(file_thru_common_v1_primitives, 0);
33
136
  var SignatureSchema = /* @__PURE__ */ messageDesc(file_thru_common_v1_primitives, 1);
@@ -35,13 +138,11 @@ var TaPubkeySchema = /* @__PURE__ */ messageDesc(file_thru_common_v1_primitives,
35
138
  var TsSignatureSchema = /* @__PURE__ */ messageDesc(file_thru_common_v1_primitives, 3);
36
139
 
37
140
  // thru-ts-client-sdk/proto/thru/core/v1/types_pb.ts
38
- var file_thru_core_v1_types = /* @__PURE__ */ fileDesc("Chh0aHJ1L2NvcmUvdjEvdHlwZXMucHJvdG8SDHRocnUuY29yZS52MSIhCgRIYXNoEhkKBXZhbHVlGAEgASgMQgrgQQK6SAR6AmggIiYKCUJsb2NrSGFzaBIZCgV2YWx1ZRgBIAEoDEIK4EECukgEegJoQEK5AQoQY29tLnRocnUuY29yZS52MUIKVHlwZXNQcm90b1ABWkBnaXRodWIuY29tL1VudG8tTGFicy90aHJ1LW5ldC9ncnBjL3BrZy9wcm90by90aHJ1L2NvcmUvdjE7Y29yZXYxogIDVENYqgIMVGhydS5Db3JlLlYxugIEVEhVQ8oCDFRocnVcQ29yZVxWMeICGFRocnVcQ29yZVxWMVxHUEJNZXRhZGF0YeoCDlRocnU6OkNvcmU6OlYxYgZwcm90bzM", [file_buf_validate_validate, file_google_api_field_behavior, file_thru_common_v1_primitives]);
141
+ var file_thru_core_v1_types = /* @__PURE__ */ fileDesc("Chh0aHJ1L2NvcmUvdjEvdHlwZXMucHJvdG8SDHRocnUuY29yZS52MSIhCgRIYXNoEhkKBXZhbHVlGAEgASgMQgrgQQK6SAR6AmggIiYKCUJsb2NrSGFzaBIZCgV2YWx1ZRgBIAEoDEIK4EECukgEegJoIEK5AQoQY29tLnRocnUuY29yZS52MUIKVHlwZXNQcm90b1ABWkBnaXRodWIuY29tL1VudG8tTGFicy90aHJ1LW5ldC9ncnBjL3BrZy9wcm90by90aHJ1L2NvcmUvdjE7Y29yZXYxogIDVENYqgIMVGhydS5Db3JlLlYxugIEVEhVQ8oCDFRocnVcQ29yZVxWMeICGFRocnVcQ29yZVxWMVxHUEJNZXRhZGF0YeoCDlRocnU6OkNvcmU6OlYxYgZwcm90bzM", [file_buf_validate_validate, file_google_api_field_behavior, file_thru_common_v1_primitives]);
39
142
  var BlockHashSchema = /* @__PURE__ */ messageDesc(file_thru_core_v1_types, 1);
40
143
 
41
144
  // thru-ts-client-sdk/proto/thru/core/v1/transaction_pb.ts
42
145
  var file_thru_core_v1_transaction = /* @__PURE__ */ fileDesc("Ch50aHJ1L2NvcmUvdjEvdHJhbnNhY3Rpb24ucHJvdG8SDHRocnUuY29yZS52MSKgBAoRVHJhbnNhY3Rpb25IZWFkZXISOwoTZmVlX3BheWVyX3NpZ25hdHVyZRgBIAEoCzIZLnRocnUuY29tbW9uLnYxLlNpZ25hdHVyZUID4EECEhQKB3ZlcnNpb24YAiABKA1CA+BBAhISCgVmbGFncxgDIAEoDUID4EECEiUKGHJlYWR3cml0ZV9hY2NvdW50c19jb3VudBgEIAEoDUID4EECEiQKF3JlYWRvbmx5X2FjY291bnRzX2NvdW50GAUgASgNQgPgQQISIgoVaW5zdHJ1Y3Rpb25fZGF0YV9zaXplGAYgASgNQgPgQQISJAoXcmVxdWVzdGVkX2NvbXB1dGVfdW5pdHMYByABKA1CA+BBAhIiChVyZXF1ZXN0ZWRfc3RhdGVfdW5pdHMYCCABKA1CA+BBAhIjChZyZXF1ZXN0ZWRfbWVtb3J5X3VuaXRzGAkgASgNQgPgQQISGQoMZXhwaXJ5X2FmdGVyGAogASgNQgPgQQISEAoDZmVlGAsgASgEQgPgQQISEgoFbm9uY2UYDCABKARCA+BBAhIXCgpzdGFydF9zbG90GA0gASgEQgPgQQISNQoQZmVlX3BheWVyX3B1YmtleRgOIAEoCzIWLnRocnUuY29tbW9uLnYxLlB1YmtleUID4EECEjMKDnByb2dyYW1fcHVia2V5GA8gASgLMhYudGhydS5jb21tb24udjEuUHVia2V5QgPgQQIi8gMKGlRyYW5zYWN0aW9uRXhlY3V0aW9uUmVzdWx0EiMKFmNvbnN1bWVkX2NvbXB1dGVfdW5pdHMYASABKA1CA+BBAhIiChVjb25zdW1lZF9tZW1vcnlfdW5pdHMYAiABKA1CA+BBAhIhChRjb25zdW1lZF9zdGF0ZV91bml0cxgDIAEoDUID4EECEhwKD3VzZXJfZXJyb3JfY29kZRgEIAEoBEID4EECEjcKCHZtX2Vycm9yGAUgASgOMiAudGhydS5jb3JlLnYxLlRyYW5zYWN0aW9uVm1FcnJvckID4EECEh0KEGV4ZWN1dGlvbl9yZXN1bHQYBiABKARCA+BBAhIXCgpwYWdlc191c2VkGAcgASgNQgPgQQISGQoMZXZlbnRzX2NvdW50GAggASgNQgPgQQISGAoLZXZlbnRzX3NpemUYCSABKA1CA+BBAhI3ChJyZWFkd3JpdGVfYWNjb3VudHMYCiADKAsyFi50aHJ1LmNvbW1vbi52MS5QdWJrZXlCA+BBARI2ChFyZWFkb25seV9hY2NvdW50cxgLIAMoCzIWLnRocnUuY29tbW9uLnYxLlB1YmtleUID4EEBEjMKBmV2ZW50cxgMIAMoCzIeLnRocnUuY29yZS52MS5UcmFuc2FjdGlvbkV2ZW50QgPgQQEingEKEFRyYW5zYWN0aW9uRXZlbnQSFQoIZXZlbnRfaWQYASABKAlCA+BBAhIVCghjYWxsX2lkeBgCIAEoDUID4EECEhgKC3Byb2dyYW1faWR4GAMgASgNQgPgQQISLAoHcHJvZ3JhbRgEIAEoCzIWLnRocnUuY29tbW9uLnYxLlB1YmtleUID4EECEhQKB3BheWxvYWQYBSABKAxCA+BBAiLWAgoLVHJhbnNhY3Rpb24SMQoJc2lnbmF0dXJlGAEgASgLMhkudGhydS5jb21tb24udjEuU2lnbmF0dXJlQgPgQQISNAoGaGVhZGVyGAIgASgLMh8udGhydS5jb3JlLnYxLlRyYW5zYWN0aW9uSGVhZGVyQgPgQQISIAoEYm9keRgDIAEoDEIN4EEBukgHegUYgICACEgAiAEBEkwKEGV4ZWN1dGlvbl9yZXN1bHQYBCABKAsyKC50aHJ1LmNvcmUudjEuVHJhbnNhY3Rpb25FeGVjdXRpb25SZXN1bHRCA+BBAUgBiAEBEhYKBHNsb3QYBSABKARCA+BBAUgCiAEBEh4KDGJsb2NrX29mZnNldBgGIAEoDUID4EEBSAOIAQFCBwoFX2JvZHlCEwoRX2V4ZWN1dGlvbl9yZXN1bHRCBwoFX3Nsb3RCDwoNX2Jsb2NrX29mZnNldCJrCg5SYXdUcmFuc2FjdGlvbhIxCglzaWduYXR1cmUYASABKAsyGS50aHJ1LmNvbW1vbi52MS5TaWduYXR1cmVCA+BBAhImCg9yYXdfdHJhbnNhY3Rpb24YAiABKAxCDeBBArpIB3oFGICAgAgquwEKD1RyYW5zYWN0aW9uVmlldxIgChxUUkFOU0FDVElPTl9WSUVXX1VOU1BFQ0lGSUVEEAASIwofVFJBTlNBQ1RJT05fVklFV19TSUdOQVRVUkVfT05MWRABEiAKHFRSQU5TQUNUSU9OX1ZJRVdfSEVBREVSX09OTFkQAhIkCiBUUkFOU0FDVElPTl9WSUVXX0hFQURFUl9BTkRfQk9EWRADEhkKFVRSQU5TQUNUSU9OX1ZJRVdfRlVMTBAEKpgMChJUcmFuc2FjdGlvblZtRXJyb3ISIgoeVFJBTlNBQ1RJT05fVk1fRVhFQ1VURV9TVUNDRVNTEAASMAojVFJBTlNBQ1RJT05fVk1fRVJST1JfSU5WQUxJRF9GT1JNQVQQgf7/////////ARIxCiRUUkFOU0FDVElPTl9WTV9FUlJPUl9JTlZBTElEX1ZFUlNJT04Qgv7/////////ARIvCiJUUkFOU0FDVElPTl9WTV9FUlJPUl9JTlZBTElEX0ZMQUdTEIP+/////////wESMwomVFJBTlNBQ1RJT05fVk1fRVJST1JfSU5WQUxJRF9TSUdOQVRVUkUQhP7/////////ARIzCiZUUkFOU0FDVElPTl9WTV9FUlJPUl9EVVBMSUNBVEVfQUNDT1VOVBCF/v////////8BEjMKJlRSQU5TQUNUSU9OX1ZNX0VSUk9SX1VOU09SVEVEX0FDQ09VTlRTEIb+/////////wESPQowVFJBTlNBQ1RJT05fVk1fRVJST1JfVU5TT1JURURfUkVBRFdSSVRFX0FDQ09VTlRTEIf+/////////wESPAovVFJBTlNBQ1RJT05fVk1fRVJST1JfVU5TT1JURURfUkVBRE9OTFlfQUNDT1VOVFMQiP7/////////ARI+CjFUUkFOU0FDVElPTl9WTV9FUlJPUl9BQ0NPVU5UX0NPVU5UX0xJTUlUX0VYQ0VFREVEEIn+/////////wESLwoiVFJBTlNBQ1RJT05fVk1fRVJST1JfTk9OQ0VfVE9PX0xPVxCB/P////////8BEjAKI1RSQU5TQUNUSU9OX1ZNX0VSUk9SX05PTkNFX1RPT19ISUdIEIL8/////////wESQAozVFJBTlNBQ1RJT05fVk1fRVJST1JfSU5TVUZGSUNJRU5UX0ZFRV9QQVlFUl9CQUxBTkNFEIP8/////////wESQgo1VFJBTlNBQ1RJT05fVk1fRVJST1JfRkVFX1BBWUVSX0FDQ09VTlRfRE9FU19OT1RfRVhJU1QQhPz/////////ARIuCiFUUkFOU0FDVElPTl9WTV9FUlJPUl9OT1RfTElWRV9ZRVQQhfz/////////ARIpChxUUkFOU0FDVElPTl9WTV9FUlJPUl9FWFBJUkVEEIb8/////////wESPwoyVFJBTlNBQ1RJT05fVk1fRVJST1JfSU5WQUxJRF9GRUVfUEFZRVJfU1RBVEVfUFJPT0YQh/z/////////ARJECjdUUkFOU0FDVElPTl9WTV9FUlJPUl9JTlZBTElEX0ZFRV9QQVlFUl9TVEFURV9QUk9PRl9UWVBFEIj8/////////wESRAo3VFJBTlNBQ1RJT05fVk1fRVJST1JfSU5WQUxJRF9GRUVfUEFZRVJfU1RBVEVfUFJPT0ZfU0xPVBCJ/P////////8BEkEKNFRSQU5TQUNUSU9OX1ZNX0VSUk9SX0lOVkFMSURfRkVFX1BBWUVSX0FDQ09VTlRfT1dORVIQivz/////////ARJNCkBUUkFOU0FDVElPTl9WTV9FUlJPUl9JTlZBTElEX0ZFRV9QQVlFUl9TVEFURV9QUk9PRl9BQ0NPVU5UX09XTkVSEIv8/////////wESVApHVFJBTlNBQ1RJT05fVk1fRVJST1JfSU5WQUxJRF9GRUVfUEFZRVJfU1RBVEVfUFJPT0ZfQUNDT1VOVF9NRVRBX0RBVEFfU1oQjPz/////////ARIrCh5UUkFOU0FDVElPTl9WTV9FUlJPUl9WTV9GQUlMRUQQgfr/////////ARI5CixUUkFOU0FDVElPTl9WTV9FUlJPUl9JTlZBTElEX1BST0dSQU1fQUNDT1VOVBCC+v////////8BEisKHlRSQU5TQUNUSU9OX1ZNX0VSUk9SX1ZNX1JFVkVSVBCD+v////////8BEi4KIVRSQU5TQUNUSU9OX1ZNX0VSUk9SX0NVX0VYSEFVU1RFRBCE+v////////8BEi4KIVRSQU5TQUNUSU9OX1ZNX0VSUk9SX1NVX0VYSEFVU1RFRBCF+v////////8BQr8BChBjb20udGhydS5jb3JlLnYxQhBUcmFuc2FjdGlvblByb3RvUAFaQGdpdGh1Yi5jb20vVW50by1MYWJzL3RocnUtbmV0L2dycGMvcGtnL3Byb3RvL3RocnUvY29yZS92MTtjb3JldjGiAgNUQ1iqAgxUaHJ1LkNvcmUuVjG6AgRUSFVDygIMVGhydVxDb3JlXFYx4gIYVGhydVxDb3JlXFYxXEdQQk1ldGFkYXRh6gIOVGhydTo6Q29yZTo6VjFiBnByb3RvMw", [file_buf_validate_validate, file_google_api_field_behavior, file_thru_core_v1_types, file_thru_common_v1_primitives]);
43
- var TransactionExecutionResultSchema = /* @__PURE__ */ messageDesc(file_thru_core_v1_transaction, 1);
44
- var TransactionEventSchema = /* @__PURE__ */ messageDesc(file_thru_core_v1_transaction, 2);
45
146
  var TransactionView = /* @__PURE__ */ ((TransactionView2) => {
46
147
  TransactionView2[TransactionView2["UNSPECIFIED"] = 0] = "UNSPECIFIED";
47
148
  TransactionView2[TransactionView2["SIGNATURE_ONLY"] = 1] = "SIGNATURE_ONLY";
@@ -81,232 +182,201 @@ var TransactionVmError = /* @__PURE__ */ ((TransactionVmError2) => {
81
182
  return TransactionVmError2;
82
183
  })(TransactionVmError || {});
83
184
 
84
- // thru-ts-client-sdk/wire-format.ts
85
- var SIGNATURE_SIZE = 64;
86
- var PUBKEY_SIZE = 32;
87
- var HASH_SIZE = 32;
88
- var BLOCK_HEADER_SIZE = 160;
89
- var BLOCK_FOOTER_SIZE = 136;
90
- var BLOCK_VERSION_V1 = 1;
91
- var TXN_HEADER_SIZE = 176;
92
- var TXN_VERSION_V1 = 1;
93
- var TXN_MAX_ACCOUNTS = 1024;
94
- var STATE_PROOF_HEADER_SIZE = 40;
95
- var ACCOUNT_META_FOOTPRINT = 64;
96
- var TXN_FLAG_HAS_FEE_PAYER_PROOF = 1 << 0;
97
- var STATE_PROOF_TYPE_EXISTING = 0;
98
- var STATE_PROOF_TYPE_UPDATING = 1;
99
- var STATE_PROOF_TYPE_CREATION = 2;
100
- var PUBKEY_LENGTH = 32;
101
- var SIGNATURE_LENGTH = 64;
102
- var TA_ADDRESS_LENGTH = 46;
103
- var TS_SIGNATURE_LENGTH = 90;
104
- function copyBytes(source) {
185
+ // thru-ts-client-sdk/domain/primitives/byte-utils.ts
186
+ function copyBytes2(source) {
105
187
  const bytes = new Uint8Array(source.length);
106
188
  bytes.set(source);
107
189
  return bytes;
108
190
  }
109
- function isTaAddress(value) {
110
- return value.startsWith("ta") && value.length === TA_ADDRESS_LENGTH;
111
- }
112
- function isTsSignature(value) {
113
- return value.startsWith("ts") && value.length === TS_SIGNATURE_LENGTH;
114
- }
115
- function ensureExactLength(bytes, expected, field) {
191
+ function ensureExactLength(bytes, expected) {
116
192
  if (bytes.length !== expected) {
117
- throw new Error(`${field} must contain ${expected} bytes`);
193
+ throw new Error(`Must contain ${expected} bytes`);
118
194
  }
119
- return copyBytes(bytes);
195
+ return copyBytes2(bytes);
120
196
  }
121
- function decodeBase64String(value, message) {
122
- try {
123
- return decodeBase64(value);
124
- } catch {
125
- throw new Error(message);
197
+ function bytesEqual(a, b) {
198
+ if (a.length !== b.length) {
199
+ return false;
126
200
  }
201
+ for (let i = 0; i < a.length; i++) {
202
+ if (a[i] !== b[i]) {
203
+ return false;
204
+ }
205
+ }
206
+ return true;
127
207
  }
128
- function decodeHex(value, message) {
129
- try {
130
- return hexToBytes(value);
131
- } catch {
132
- throw new Error(message);
208
+ function bytesToHex(bytes) {
209
+ const hex = new Array(bytes.length);
210
+ for (let i = 0; i < bytes.length; i++) {
211
+ hex[i] = bytes[i].toString(16).padStart(2, "0");
133
212
  }
213
+ return hex.join("");
134
214
  }
135
- function pubkeyBytesFromInput(value, field = "pubkey") {
136
- if (value instanceof Uint8Array) {
137
- return ensureExactLength(value, PUBKEY_LENGTH, field);
215
+
216
+ // thru-ts-client-sdk/domain/primitives/constants.ts
217
+ var PUBKEY_LENGTH = 32;
218
+ var SIGNATURE_LENGTH = 64;
219
+ var TA_ADDRESS_LENGTH = 46;
220
+ var TS_SIGNATURE_LENGTH = 90;
221
+
222
+ // thru-ts-client-sdk/domain/primitives/Pubkey.ts
223
+ var Pubkey = class _Pubkey {
224
+ constructor(bytes) {
225
+ this.bytes = bytes;
138
226
  }
139
- if (typeof value === "string") {
140
- if (isTaAddress(value)) {
141
- return ensureExactLength(decodeAddress(value), PUBKEY_LENGTH, field);
227
+ static from(value) {
228
+ if (value instanceof _Pubkey) {
229
+ return value;
142
230
  }
143
- if (isHexString(value)) {
144
- return ensureExactLength(
145
- decodeHex(value, `${field} hex string must decode to 32 bytes`),
146
- PUBKEY_LENGTH,
147
- field
148
- );
231
+ if (value instanceof Uint8Array) {
232
+ return new _Pubkey(ensureExactLength(value, PUBKEY_LENGTH));
233
+ }
234
+ if (typeof value === "string") {
235
+ return new _Pubkey(_Pubkey.bytesFromString(value));
149
236
  }
150
- return ensureExactLength(
151
- decodeBase64String(value, `${field} must be a 32-byte value, ta-address, hex string, or base64 string`),
152
- PUBKEY_LENGTH,
153
- field
237
+ throw new Error(
238
+ `Must be provided as Uint8Array, hex string, or ta-address`
154
239
  );
155
240
  }
156
- throw new Error(`${field} must be a 32-byte value, ta-address, hex string, or base64 string`);
157
- }
158
- function signatureBytesFromInput(value, field = "signature") {
159
- if (value instanceof Uint8Array) {
160
- return ensureExactLength(value, SIGNATURE_LENGTH, field);
241
+ static isThruFmt(value) {
242
+ return value.startsWith("ta") && value.length === TA_ADDRESS_LENGTH;
161
243
  }
162
- if (typeof value === "string") {
163
- if (isTsSignature(value)) {
164
- return ensureExactLength(decodeSignature(value), SIGNATURE_LENGTH, field);
244
+ toBytes() {
245
+ return copyBytes2(this.bytes);
246
+ }
247
+ toBytesUnsafe() {
248
+ return this.bytes;
249
+ }
250
+ toThruFmt() {
251
+ return encodeAddress(this.bytes);
252
+ }
253
+ toHex() {
254
+ return bytesToHex(this.bytes);
255
+ }
256
+ equals(other) {
257
+ const candidate = _Pubkey.from(other);
258
+ return bytesEqual(this.bytes, candidate.bytes);
259
+ }
260
+ toProtoPubkey() {
261
+ return create(PubkeySchema, { value: this.toBytes() });
262
+ }
263
+ toProtoTaPubkey() {
264
+ return create(TaPubkeySchema, { value: this.toThruFmt() });
265
+ }
266
+ static fromProtoPubkey(proto) {
267
+ if (!proto?.value) {
268
+ throw new Error(`Proto is missing value`);
165
269
  }
166
- if (isHexString(value)) {
167
- return ensureExactLength(
168
- decodeHex(value, `${field} hex string must decode to 64 bytes`),
169
- SIGNATURE_LENGTH,
170
- field
171
- );
270
+ return new _Pubkey(ensureExactLength(proto.value, PUBKEY_LENGTH));
271
+ }
272
+ static fromProtoTaPubkey(proto) {
273
+ if (!proto?.value) {
274
+ throw new Error(`Proto is missing value`);
172
275
  }
173
- return ensureExactLength(
174
- decodeBase64String(
175
- value,
176
- `${field} must be provided as Uint8Array, ts-encoded string, hex string, or base64 string`
177
- ),
178
- SIGNATURE_LENGTH,
179
- field
180
- );
276
+ return new _Pubkey(ensureExactLength(decodeAddress(proto.value), PUBKEY_LENGTH));
181
277
  }
182
- throw new Error(`${field} must be provided as Uint8Array, ts-encoded string, hex string, or base64 string`);
183
- }
184
- function taAddressStringFromInput(value, field = "taPubkey") {
185
- if (typeof value === "string") {
186
- if (!isTaAddress(value)) {
187
- throw new Error(`${field} must be a ta-encoded address`);
278
+ static bytesFromString(value) {
279
+ if (_Pubkey.isThruFmt(value)) {
280
+ return ensureExactLength(decodeAddress(value), PUBKEY_LENGTH);
188
281
  }
189
- return value;
282
+ if (isHexString(value)) {
283
+ return ensureExactLength(hexToBytes(value), PUBKEY_LENGTH);
284
+ }
285
+ throw new Error(`Must be provided as hex string or ta-address`);
190
286
  }
191
- if (value instanceof Uint8Array) {
192
- return encodeAddress(ensureExactLength(value, PUBKEY_LENGTH, field));
287
+ };
288
+ var Signature = class _Signature {
289
+ constructor(bytes) {
290
+ this.bytes = bytes;
193
291
  }
194
- throw new Error(`${field} must be provided as a ta-encoded string or 32-byte public key`);
195
- }
196
- function tsSignatureStringFromInput(value, field = "tsSignature") {
197
- if (typeof value === "string") {
198
- if (!isTsSignature(value)) {
199
- throw new Error(`${field} must be a ts-encoded signature`);
292
+ static from(value) {
293
+ if (value instanceof _Signature) {
294
+ return value;
200
295
  }
201
- return value;
296
+ if (value instanceof Uint8Array) {
297
+ return new _Signature(ensureExactLength(value, SIGNATURE_LENGTH));
298
+ }
299
+ if (typeof value === "string") {
300
+ return new _Signature(_Signature.bytesFromString(value));
301
+ }
302
+ throw new Error(
303
+ `Must be provided as Uint8Array, ts-encoded string, hex string, or base64 string`
304
+ );
202
305
  }
203
- if (value instanceof Uint8Array) {
204
- return encodeSignature(ensureExactLength(value, SIGNATURE_LENGTH, field));
306
+ static fromProto(proto) {
307
+ if (!proto?.value) {
308
+ throw new Error(`Proto is missing value`);
309
+ }
310
+ return new _Signature(ensureExactLength(proto.value, SIGNATURE_LENGTH));
205
311
  }
206
- throw new Error(`${field} must be provided as a ts-encoded string or 64-byte signature`);
207
- }
208
- function toPubkeyProto(value, field = "pubkey") {
209
- return create(PubkeySchema, { value: pubkeyBytesFromInput(value, field) });
210
- }
211
- function toSignatureProto(value, field = "signature") {
212
- return create(SignatureSchema, { value: signatureBytesFromInput(value, field) });
213
- }
214
- function toTaPubkeyProto(value, field = "taPubkey") {
215
- return create(TaPubkeySchema, { value: taAddressStringFromInput(value, field) });
216
- }
217
- function toTsSignatureProto(value, field = "tsSignature") {
218
- return create(TsSignatureSchema, { value: tsSignatureStringFromInput(value, field) });
219
- }
220
- function protoPubkeyToBytes(pubkey) {
221
- if (!pubkey?.value || pubkey.value.length !== PUBKEY_LENGTH) {
222
- return new Uint8Array(PUBKEY_LENGTH);
312
+ static isThruFmt(value) {
313
+ return value.startsWith("ts") && value.length === TS_SIGNATURE_LENGTH;
223
314
  }
224
- return copyBytes(pubkey.value);
225
- }
226
- function protoSignatureToBytes(signature) {
227
- if (!signature?.value || signature.value.length !== SIGNATURE_LENGTH) {
228
- return void 0;
315
+ toBytes() {
316
+ return copyBytes2(this.bytes);
229
317
  }
230
- return copyBytes(signature.value);
231
- }
232
- function protoTaPubkeyToString(value) {
233
- return value?.value;
234
- }
235
- function protoTsSignatureToString(value) {
236
- return value?.value;
237
- }
238
-
239
- // thru-ts-client-sdk/domain/transactions/utils.ts
240
- var ACCOUNT_LIMIT = 1024;
241
- function normalizeAccountList(accounts) {
242
- if (accounts.length === 0) {
243
- return [];
318
+ toBytesUnsafe() {
319
+ return this.bytes;
244
320
  }
245
- if (accounts.length > ACCOUNT_LIMIT) {
246
- throw new Error(`Too many accounts provided: ${accounts.length} (max ${ACCOUNT_LIMIT})`);
321
+ toThruFmt() {
322
+ return encodeSignature(this.bytes);
247
323
  }
248
- const deduped = dedupeAccountList(accounts);
249
- return deduped;
250
- }
251
- function dedupeAccountList(accounts) {
252
- const seen = /* @__PURE__ */ new Map();
253
- for (const account of accounts) {
254
- if (account.length !== 32) {
255
- throw new Error("Account addresses must contain 32 bytes");
256
- }
257
- const key = toHex(account);
258
- if (!seen.has(key)) {
259
- seen.set(key, new Uint8Array(account));
260
- }
324
+ toHex() {
325
+ return bytesToHex(this.bytes);
261
326
  }
262
- return Array.from(seen.values()).sort(compareAccounts);
263
- }
264
- function compareAccounts(a, b) {
265
- for (let i = 0; i < 32; i++) {
266
- if (a[i] !== b[i]) {
267
- return a[i] - b[i];
268
- }
327
+ equals(other) {
328
+ const candidate = _Signature.from(other);
329
+ return bytesEqual(this.bytes, candidate.bytes);
269
330
  }
270
- return 0;
271
- }
272
- function toHex(bytes) {
273
- let result = "";
274
- for (let i = 0; i < bytes.length; i++) {
275
- const hex = bytes[i].toString(16).padStart(2, "0");
276
- result += hex;
331
+ toProtoSignature() {
332
+ return create(SignatureSchema, { value: this.toBytes() });
277
333
  }
278
- return result;
279
- }
280
- function resolveProgramIdentifier(identifier) {
281
- return pubkeyBytesFromInput(identifier, "program");
282
- }
283
- function parseAccountIdentifier(value, field) {
284
- return pubkeyBytesFromInput(value, field);
285
- }
286
- function parseInstructionData(value) {
287
- if (value === void 0) {
288
- return void 0;
334
+ toProtoTsSignature() {
335
+ return create(TsSignatureSchema, { value: this.toThruFmt() });
289
336
  }
290
- if (value instanceof Uint8Array) {
291
- return new Uint8Array(value);
337
+ static fromProtoTsSignature(proto) {
338
+ if (!proto?.value) {
339
+ throw new Error(`Proto is missing value`);
340
+ }
341
+ return new _Signature(ensureExactLength(decodeSignature(proto.value), SIGNATURE_LENGTH));
292
342
  }
293
- if (typeof value === "string") {
294
- if (value.length === 0) {
295
- return new Uint8Array();
343
+ static fromProtoSignature(proto) {
344
+ if (!proto?.value) {
345
+ throw new Error(`Proto is missing value`);
346
+ }
347
+ return new _Signature(ensureExactLength(proto.value, SIGNATURE_LENGTH));
348
+ }
349
+ static bytesFromString(value) {
350
+ if (_Signature.isThruFmt(value)) {
351
+ return ensureExactLength(decodeSignature(value), SIGNATURE_LENGTH);
296
352
  }
297
353
  if (isHexString(value)) {
298
- return hexToBytes(value);
354
+ return ensureExactLength(hexToBytes(value), SIGNATURE_LENGTH);
299
355
  }
356
+ throw new Error(`Must be provided as ts-encoded string or hex string`);
300
357
  }
301
- throw new Error("Instruction data must be provided as hex string or Uint8Array");
302
- }
303
- function protoPubkeyToAccountAddress(pubkey) {
304
- return protoPubkeyToBytes(pubkey);
305
- }
358
+ };
359
+
360
+ // thru-ts-client-sdk/wire-format.ts
361
+ var SIGNATURE_SIZE2 = 64;
362
+ var PUBKEY_SIZE2 = 32;
363
+ var HASH_SIZE = 32;
364
+ var BLOCK_HEADER_SIZE = 168;
365
+ var BLOCK_FOOTER_SIZE = 104;
366
+ var BLOCK_VERSION_V1 = 1;
367
+ var TXN_HEADER_SIZE = 176;
368
+ var TXN_VERSION_V1 = 1;
369
+ var TXN_MAX_ACCOUNTS = 1024;
370
+ var STATE_PROOF_HEADER_SIZE = 40;
371
+ var ACCOUNT_META_FOOTPRINT = 64;
372
+ var TXN_FLAG_HAS_FEE_PAYER_PROOF = 1 << 0;
373
+ var STATE_PROOF_TYPE_EXISTING = 0;
374
+ var STATE_PROOF_TYPE_UPDATING = 1;
375
+ var STATE_PROOF_TYPE_CREATION = 2;
306
376
 
307
377
  // thru-ts-client-sdk/domain/transactions/Transaction.ts
308
378
  var DEFAULT_FLAGS = 0;
309
- var SIGNATURE_PREFIX_SIZE = SIGNATURE_SIZE;
379
+ var SIGNATURE_PREFIX_SIZE = SIGNATURE_SIZE2;
310
380
  var MAX_INSTRUCTION_DATA_LENGTH = 65535;
311
381
  var BYTE_POPCOUNT = new Uint8Array(256).map((_value, index) => {
312
382
  let v = index;
@@ -320,8 +390,8 @@ var BYTE_POPCOUNT = new Uint8Array(256).map((_value, index) => {
320
390
  var Transaction = class _Transaction {
321
391
  constructor(params) {
322
392
  this.version = params.version ?? TXN_VERSION_V1;
323
- this.feePayer = copyKey(params.feePayer);
324
- this.program = copyKey(params.program);
393
+ this.feePayer = Pubkey.from(params.feePayer);
394
+ this.program = Pubkey.from(params.program);
325
395
  this.fee = params.header.fee;
326
396
  this.nonce = params.header.nonce;
327
397
  this.startSlot = params.header.startSlot;
@@ -330,8 +400,8 @@ var Transaction = class _Transaction {
330
400
  this.requestedStateUnits = params.header.stateUnits ?? 0;
331
401
  this.requestedMemoryUnits = params.header.memoryUnits ?? 0;
332
402
  this.flags = params.header.flags ?? DEFAULT_FLAGS;
333
- this.readWriteAccounts = params.accounts?.readWriteAccounts ? params.accounts.readWriteAccounts.map(copyKey) : [];
334
- this.readOnlyAccounts = params.accounts?.readOnlyAccounts ? params.accounts.readOnlyAccounts.map(copyKey) : [];
403
+ this.readWriteAccounts = params.accounts?.readWriteAccounts ? params.accounts.readWriteAccounts.map(Pubkey.from) : [];
404
+ this.readOnlyAccounts = params.accounts?.readOnlyAccounts ? params.accounts.readOnlyAccounts.map(Pubkey.from) : [];
335
405
  this.instructionData = params.instructionData ? new Uint8Array(params.instructionData) : void 0;
336
406
  if (this.instructionData && this.instructionData.length > MAX_INSTRUCTION_DATA_LENGTH) {
337
407
  throw new Error(`Instruction data exceeds maximum length (${MAX_INSTRUCTION_DATA_LENGTH} bytes)`);
@@ -356,9 +426,9 @@ var Transaction = class _Transaction {
356
426
  const strict = options.strict ?? false;
357
427
  const view = new DataView(data.buffer, data.byteOffset, data.byteLength);
358
428
  let offset = 0;
359
- const signatureBytes = data.slice(offset, offset + SIGNATURE_SIZE);
429
+ const signatureBytes = data.slice(offset, offset + SIGNATURE_SIZE2);
360
430
  const hasSignature = hasNonZeroBytes(signatureBytes);
361
- offset += SIGNATURE_SIZE;
431
+ offset += SIGNATURE_SIZE2;
362
432
  const version = view.getUint8(offset);
363
433
  offset += 1;
364
434
  if (strict && version !== TXN_VERSION_V1) {
@@ -391,12 +461,12 @@ var Transaction = class _Transaction {
391
461
  const expiryAfter = view.getUint32(offset, true);
392
462
  offset += 4;
393
463
  offset += 4;
394
- _Transaction.ensureAvailable(data.length, offset, PUBKEY_SIZE, "fee payer account");
395
- const feePayer = data.slice(offset, offset + PUBKEY_SIZE);
396
- offset += PUBKEY_SIZE;
397
- _Transaction.ensureAvailable(data.length, offset, PUBKEY_SIZE, "program account");
398
- const program = data.slice(offset, offset + PUBKEY_SIZE);
399
- offset += PUBKEY_SIZE;
464
+ _Transaction.ensureAvailable(data.length, offset, PUBKEY_SIZE2, "fee payer account");
465
+ const feePayer = data.slice(offset, offset + PUBKEY_SIZE2);
466
+ offset += PUBKEY_SIZE2;
467
+ _Transaction.ensureAvailable(data.length, offset, PUBKEY_SIZE2, "program account");
468
+ const program = data.slice(offset, offset + PUBKEY_SIZE2);
469
+ offset += PUBKEY_SIZE2;
400
470
  if (offset !== TXN_HEADER_SIZE) {
401
471
  throw new Error(`Transaction header parsing mismatch (expected offset ${TXN_HEADER_SIZE}, got ${offset})`);
402
472
  }
@@ -408,15 +478,15 @@ var Transaction = class _Transaction {
408
478
  }
409
479
  const readWriteAccounts = [];
410
480
  for (let i = 0; i < readwriteAccountsCount; i++) {
411
- _Transaction.ensureAvailable(data.length, offset, PUBKEY_SIZE, "read-write accounts");
412
- readWriteAccounts.push(data.slice(offset, offset + PUBKEY_SIZE));
413
- offset += PUBKEY_SIZE;
481
+ _Transaction.ensureAvailable(data.length, offset, PUBKEY_SIZE2, "read-write accounts");
482
+ readWriteAccounts.push(data.slice(offset, offset + PUBKEY_SIZE2));
483
+ offset += PUBKEY_SIZE2;
414
484
  }
415
485
  const readOnlyAccounts = [];
416
486
  for (let i = 0; i < readonlyAccountsCount; i++) {
417
- _Transaction.ensureAvailable(data.length, offset, PUBKEY_SIZE, "read-only accounts");
418
- readOnlyAccounts.push(data.slice(offset, offset + PUBKEY_SIZE));
419
- offset += PUBKEY_SIZE;
487
+ _Transaction.ensureAvailable(data.length, offset, PUBKEY_SIZE2, "read-only accounts");
488
+ readOnlyAccounts.push(data.slice(offset, offset + PUBKEY_SIZE2));
489
+ offset += PUBKEY_SIZE2;
420
490
  }
421
491
  let instructionData;
422
492
  if (instructionDataSize > 0) {
@@ -438,8 +508,8 @@ var Transaction = class _Transaction {
438
508
  }
439
509
  const transaction = new _Transaction({
440
510
  version,
441
- feePayer,
442
- program,
511
+ feePayer: Pubkey.from(feePayer),
512
+ program: Pubkey.from(program),
443
513
  header: {
444
514
  fee,
445
515
  nonce,
@@ -462,7 +532,7 @@ var Transaction = class _Transaction {
462
532
  } : void 0
463
533
  });
464
534
  if (hasSignature) {
465
- transaction.setSignature(signatureBytes);
535
+ transaction.setSignature(Signature.from(signatureBytes));
466
536
  }
467
537
  return { transaction, size: offset };
468
538
  }
@@ -517,8 +587,8 @@ var Transaction = class _Transaction {
517
587
  }
518
588
  transaction = new _Transaction({
519
589
  version: header.version ?? TXN_VERSION_V1,
520
- feePayer: protoPubkeyToAccountAddress(header.feePayerPubkey),
521
- program: protoPubkeyToAccountAddress(header.programPubkey),
590
+ feePayer: Pubkey.fromProtoPubkey(header.feePayerPubkey),
591
+ program: Pubkey.fromProtoPubkey(header.programPubkey),
522
592
  header: {
523
593
  fee: header.fee ?? 0n,
524
594
  nonce: header.nonce ?? 0n,
@@ -542,8 +612,8 @@ var Transaction = class _Transaction {
542
612
  });
543
613
  }
544
614
  const signatureBytes = proto.signature?.value ?? header.feePayerSignature?.value ?? void 0;
545
- if (signatureBytes && signatureBytes.length === SIGNATURE_SIZE && hasNonZeroBytes(signatureBytes)) {
546
- transaction.setSignature(signatureBytes);
615
+ if (signatureBytes && signatureBytes.length === SIGNATURE_SIZE2 && hasNonZeroBytes(signatureBytes)) {
616
+ transaction.setSignature(Signature.from(signatureBytes));
547
617
  }
548
618
  if (proto.executionResult) {
549
619
  transaction.executionResult = _Transaction.executionResultFromProto(proto.executionResult);
@@ -557,25 +627,28 @@ var Transaction = class _Transaction {
557
627
  return transaction;
558
628
  }
559
629
  getSignature() {
560
- return this.signature ? new Uint8Array(this.signature) : void 0;
630
+ return this.signature;
561
631
  }
562
632
  setSignature(signature) {
563
- if (signature.length !== SIGNATURE_SIZE) {
564
- throw new Error(`Signature must contain ${SIGNATURE_SIZE} bytes`);
565
- }
566
- this.signature = new Uint8Array(signature);
633
+ this.signature = signature;
567
634
  }
568
635
  async sign(privateKey) {
569
636
  if (privateKey.length !== 32) {
570
637
  throw new Error("Fee payer private key must contain 32 bytes");
571
638
  }
572
639
  const payload = this.toWireForSigning();
573
- const signature = await signAsync(payload, privateKey);
574
- if (signature.length !== SIGNATURE_SIZE) {
640
+ const publicKey = this.feePayer.toBytes();
641
+ const signature = await signWithDomain(
642
+ payload,
643
+ privateKey,
644
+ publicKey,
645
+ 0 /* TXN */
646
+ );
647
+ if (signature.length !== SIGNATURE_SIZE2) {
575
648
  throw new Error("ed25519 signing produced an invalid signature");
576
649
  }
577
- this.signature = signature;
578
- return new Uint8Array(signature);
650
+ this.signature = Signature.from(signature);
651
+ return this.signature;
579
652
  }
580
653
  toWireForSigning() {
581
654
  const header = this.createHeader(void 0);
@@ -583,7 +656,7 @@ var Transaction = class _Transaction {
583
656
  return this.buildWirePayload(view.subarray(SIGNATURE_PREFIX_SIZE));
584
657
  }
585
658
  toWire() {
586
- const header = this.createHeader(this.signature);
659
+ const header = this.createHeader(this.signature?.toBytes());
587
660
  return this.buildWirePayload(new Uint8Array(header));
588
661
  }
589
662
  createHeader(signature) {
@@ -591,12 +664,12 @@ var Transaction = class _Transaction {
591
664
  const headerBytes = new Uint8Array(buffer);
592
665
  const view = new DataView(buffer);
593
666
  if (signature) {
594
- if (signature.length !== SIGNATURE_SIZE) {
595
- throw new Error(`Signature must contain ${SIGNATURE_SIZE} bytes`);
667
+ if (signature.length !== SIGNATURE_SIZE2) {
668
+ throw new Error(`Signature must contain ${SIGNATURE_SIZE2} bytes`);
596
669
  }
597
670
  headerBytes.set(signature, 0);
598
671
  } else {
599
- headerBytes.fill(0, 0, SIGNATURE_SIZE);
672
+ headerBytes.fill(0, 0, SIGNATURE_SIZE2);
600
673
  }
601
674
  let offset = SIGNATURE_PREFIX_SIZE;
602
675
  view.setUint8(offset, this.version & 255);
@@ -628,18 +701,18 @@ var Transaction = class _Transaction {
628
701
  view.setUint32(offset, ensureUint32(this.expiryAfter), true);
629
702
  offset += 4;
630
703
  offset += 4;
631
- headerBytes.set(this.feePayer, offset);
632
- offset += PUBKEY_SIZE;
633
- headerBytes.set(this.program, offset);
704
+ headerBytes.set(this.feePayer.toBytes(), offset);
705
+ offset += PUBKEY_SIZE2;
706
+ headerBytes.set(this.program.toBytes(), offset);
634
707
  return buffer;
635
708
  }
636
709
  buildWirePayload(headerPrefix) {
637
- const dynamicLength = this.readWriteAccounts.length * PUBKEY_SIZE + this.readOnlyAccounts.length * PUBKEY_SIZE + (this.instructionData?.length ?? 0) + (this.feePayerStateProof?.length ?? 0) + (this.feePayerAccountMetaRaw?.length ?? 0);
710
+ const dynamicLength = this.readWriteAccounts.length * PUBKEY_SIZE2 + this.readOnlyAccounts.length * PUBKEY_SIZE2 + (this.instructionData?.length ?? 0) + (this.feePayerStateProof?.length ?? 0) + (this.feePayerAccountMetaRaw?.length ?? 0);
638
711
  const result = new Uint8Array(headerPrefix.length + dynamicLength);
639
712
  result.set(headerPrefix, 0);
640
713
  let offset = headerPrefix.length;
641
- offset = appendAccountList(result, offset, this.readWriteAccounts);
642
- offset = appendAccountList(result, offset, this.readOnlyAccounts);
714
+ offset = appendAccountList(result, offset, this.readWriteAccounts.map((account) => account.toBytes()));
715
+ offset = appendAccountList(result, offset, this.readOnlyAccounts.map((account) => account.toBytes()));
643
716
  if (this.instructionData) {
644
717
  result.set(this.instructionData, offset);
645
718
  offset += this.instructionData.length;
@@ -658,15 +731,15 @@ var Transaction = class _Transaction {
658
731
  let offset = 0;
659
732
  const readWriteAccounts = [];
660
733
  for (let i = 0; i < readwriteCount; i++) {
661
- this.ensureAvailable(body.length, offset, PUBKEY_SIZE, "read-write accounts");
662
- readWriteAccounts.push(body.slice(offset, offset + PUBKEY_SIZE));
663
- offset += PUBKEY_SIZE;
734
+ this.ensureAvailable(body.length, offset, PUBKEY_SIZE2, "read-write accounts");
735
+ readWriteAccounts.push(body.slice(offset, offset + PUBKEY_SIZE2));
736
+ offset += PUBKEY_SIZE2;
664
737
  }
665
738
  const readOnlyAccounts = [];
666
739
  for (let i = 0; i < readonlyCount; i++) {
667
- this.ensureAvailable(body.length, offset, PUBKEY_SIZE, "read-only accounts");
668
- readOnlyAccounts.push(body.slice(offset, offset + PUBKEY_SIZE));
669
- offset += PUBKEY_SIZE;
740
+ this.ensureAvailable(body.length, offset, PUBKEY_SIZE2, "read-only accounts");
741
+ readOnlyAccounts.push(body.slice(offset, offset + PUBKEY_SIZE2));
742
+ offset += PUBKEY_SIZE2;
670
743
  }
671
744
  let instructionData;
672
745
  if (instructionDataSize > 0) {
@@ -744,51 +817,23 @@ var Transaction = class _Transaction {
744
817
  pagesUsed: proto.pagesUsed ?? 0,
745
818
  eventsCount: proto.eventsCount ?? 0,
746
819
  eventsSize: proto.eventsSize ?? 0,
747
- readwriteAccounts: proto.readwriteAccounts.map((account) => protoPubkeyToAccountAddress(account)),
748
- readonlyAccounts: proto.readonlyAccounts.map((account) => protoPubkeyToAccountAddress(account)),
820
+ readwriteAccounts: proto.readwriteAccounts.map((account) => Pubkey.fromProtoPubkey(account)),
821
+ readonlyAccounts: proto.readonlyAccounts.map((account) => Pubkey.fromProtoPubkey(account)),
749
822
  events: proto.events.length ? proto.events.map((event) => ({
750
823
  eventId: event.eventId,
751
824
  callIdx: event.callIdx,
752
825
  programIdx: event.programIdx,
753
- program: event.program ? protoPubkeyToAccountAddress(event.program) : void 0,
826
+ program: event.program ? Pubkey.fromProtoPubkey(event.program) : void 0,
754
827
  payload: new Uint8Array(event.payload ?? new Uint8Array(0))
755
828
  })) : void 0
756
829
  };
757
830
  }
758
- static convertExecutionResultToProto(result) {
759
- return create(TransactionExecutionResultSchema, {
760
- consumedComputeUnits: result.consumedComputeUnits,
761
- consumedMemoryUnits: result.consumedMemoryUnits,
762
- consumedStateUnits: result.consumedStateUnits,
763
- userErrorCode: result.userErrorCode,
764
- vmError: result.vmError,
765
- executionResult: result.executionResult,
766
- pagesUsed: result.pagesUsed,
767
- eventsCount: result.eventsCount,
768
- eventsSize: result.eventsSize,
769
- readwriteAccounts: result.readwriteAccounts.map(
770
- (account) => create(PubkeySchema, { value: new Uint8Array(account) })
771
- ),
772
- readonlyAccounts: result.readonlyAccounts.map(
773
- (account) => create(PubkeySchema, { value: new Uint8Array(account) })
774
- ),
775
- events: result.events?.map(
776
- (event) => create(TransactionEventSchema, {
777
- eventId: event.eventId,
778
- callIdx: event.callIdx,
779
- programIdx: event.programIdx,
780
- program: event.program ? create(PubkeySchema, { value: new Uint8Array(event.program) }) : void 0,
781
- payload: new Uint8Array(event.payload)
782
- })
783
- ) ?? []
784
- });
785
- }
786
831
  };
787
832
  function appendAccountList(target, start, accounts) {
788
833
  let offset = start;
789
834
  for (const account of accounts) {
790
835
  target.set(account, offset);
791
- offset += PUBKEY_SIZE;
836
+ offset += PUBKEY_SIZE2;
792
837
  }
793
838
  return offset;
794
839
  }
@@ -810,12 +855,6 @@ function ensureBigUint64(value) {
810
855
  }
811
856
  return value;
812
857
  }
813
- function copyKey(source) {
814
- if (source.length !== PUBKEY_SIZE) {
815
- throw new Error("Public keys must contain 32 bytes");
816
- }
817
- return new Uint8Array(source);
818
- }
819
858
  function countSetBits(bytes) {
820
859
  let total = 0;
821
860
  for (let i = 0; i < bytes.length; i++) {
@@ -831,19 +870,76 @@ function hasNonZeroBytes(value) {
831
870
  }
832
871
  return false;
833
872
  }
873
+ var ACCOUNT_LIMIT = 1024;
874
+ function normalizeAccountList(accounts) {
875
+ if (accounts.length === 0) {
876
+ return [];
877
+ }
878
+ if (accounts.length > ACCOUNT_LIMIT) {
879
+ throw new Error(`Too many accounts provided: ${accounts.length} (max ${ACCOUNT_LIMIT})`);
880
+ }
881
+ const deduped = dedupeAccountList(accounts);
882
+ return deduped;
883
+ }
884
+ function dedupeAccountList(accounts) {
885
+ const pubkeys = accounts.map(Pubkey.from).map((pubkey) => pubkey.toBytes());
886
+ const seen = /* @__PURE__ */ new Map();
887
+ for (const pubkey of pubkeys) {
888
+ if (pubkey.length !== 32) {
889
+ throw new Error("Account addresses must contain 32 bytes");
890
+ }
891
+ const key = toHex(pubkey);
892
+ if (!seen.has(key)) {
893
+ seen.set(key, pubkey);
894
+ }
895
+ }
896
+ return Array.from(seen.values()).sort(compareAccounts);
897
+ }
898
+ function compareAccounts(a, b) {
899
+ for (let i = 0; i < 32; i++) {
900
+ if (a[i] !== b[i]) {
901
+ return a[i] - b[i];
902
+ }
903
+ }
904
+ return 0;
905
+ }
906
+ function toHex(bytes) {
907
+ let result = "";
908
+ for (let i = 0; i < bytes.length; i++) {
909
+ const hex = bytes[i].toString(16).padStart(2, "0");
910
+ result += hex;
911
+ }
912
+ return result;
913
+ }
914
+ function parseInstructionData(value) {
915
+ if (value === void 0) {
916
+ return void 0;
917
+ }
918
+ if (value instanceof Uint8Array) {
919
+ return new Uint8Array(value);
920
+ }
921
+ if (typeof value === "string") {
922
+ if (value.length === 0) {
923
+ return new Uint8Array();
924
+ }
925
+ if (isHexString(value)) {
926
+ return hexToBytes(value);
927
+ }
928
+ }
929
+ throw new Error("Instruction data must be provided as hex string or Uint8Array");
930
+ }
834
931
 
835
932
  // thru-ts-client-sdk/domain/transactions/TransactionBuilder.ts
836
933
  var FLAG_HAS_FEE_PAYER_PROOF = 1 << 0;
837
934
  var TransactionBuilder = class {
838
935
  build(params) {
839
- const program = resolveProgramIdentifier(params.program);
840
936
  const accounts = this.normalizeAccounts(params.accounts);
841
937
  const baseFlags = params.header.flags ?? 0;
842
938
  const flags = params.proofs?.feePayerStateProof ? baseFlags | FLAG_HAS_FEE_PAYER_PROOF : baseFlags;
843
939
  const instructionData = parseInstructionData(params.instructionData);
844
940
  return new Transaction({
845
- feePayer: params.feePayer.publicKey,
846
- program,
941
+ feePayer: Pubkey.from(params.feePayer.publicKey),
942
+ program: Pubkey.from(params.program),
847
943
  header: {
848
944
  ...params.header,
849
945
  flags
@@ -910,7 +1006,7 @@ function consensusStatusToString(status) {
910
1006
  // thru-ts-client-sdk/domain/transactions/TransactionStatusSnapshot.ts
911
1007
  var TransactionStatusSnapshot = class _TransactionStatusSnapshot {
912
1008
  constructor(params) {
913
- this.signature = copyBytes2(params.signature);
1009
+ this.signature = copyBytes3(params.signature);
914
1010
  this.statusCode = params.consensusStatus;
915
1011
  this.status = params.consensusStatus != null ? consensusStatusToString(params.consensusStatus) : void 0;
916
1012
  this.executionResult = params.executionResult;
@@ -926,7 +1022,7 @@ var TransactionStatusSnapshot = class _TransactionStatusSnapshot {
926
1022
  });
927
1023
  }
928
1024
  };
929
- function copyBytes2(bytes) {
1025
+ function copyBytes3(bytes) {
930
1026
  const copy = new Uint8Array(bytes.length);
931
1027
  copy.set(bytes);
932
1028
  return copy;
@@ -940,7 +1036,7 @@ var AccountView = /* @__PURE__ */ ((AccountView2) => {
940
1036
  AccountView2[AccountView2["FULL"] = 4] = "FULL";
941
1037
  return AccountView2;
942
1038
  })(AccountView || {});
943
- var file_thru_core_v1_block = /* @__PURE__ */ fileDesc("Chh0aHJ1L2NvcmUvdjEvYmxvY2sucHJvdG8SDHRocnUuY29yZS52MSLkAwoLQmxvY2tIZWFkZXISEQoEc2xvdBgBIAEoBEID4EECEjAKCmJsb2NrX2hhc2gYAiABKAsyFy50aHJ1LmNvcmUudjEuQmxvY2tIYXNoQgPgQQISOAoQaGVhZGVyX3NpZ25hdHVyZRgDIAEoCzIZLnRocnUuY29tbW9uLnYxLlNpZ25hdHVyZUID4EECEhQKB3ZlcnNpb24YBCABKA1CA+BBAhItCghwcm9kdWNlchgFIAEoCzIWLnRocnUuY29tbW9uLnYxLlB1YmtleUID4EECEjkKEGV4cGlyeV90aW1lc3RhbXAYBiABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wQgPgQQISFwoKc3RhcnRfc2xvdBgHIAEoBEID4EECEhkKDGV4cGlyeV9hZnRlchgIIAEoDUID4EECEhsKDm1heF9ibG9ja19zaXplGAkgASgNQgPgQQISHgoRbWF4X2NvbXB1dGVfdW5pdHMYCiABKARCA+BBAhIcCg9tYXhfc3RhdGVfdW5pdHMYCyABKA1CA+BBAhISCgVwcmljZRgMIAEoBEID4EECEjMKCmJsb2NrX3RpbWUYDSABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wQgPgQQIivAEKC0Jsb2NrRm9vdGVyEjEKCXNpZ25hdHVyZRgBIAEoCzIZLnRocnUuY29tbW9uLnYxLlNpZ25hdHVyZUID4EECEjIKBnN0YXR1cxgCIAEoDjIdLnRocnUuY29yZS52MS5FeGVjdXRpb25TdGF0dXNCA+BBAhIjChZjb25zdW1lZF9jb21wdXRlX3VuaXRzGAMgASgEQgPgQQISIQoUY29uc3VtZWRfc3RhdGVfdW5pdHMYBCABKA1CA+BBAiL8AQoFQmxvY2sSLgoGaGVhZGVyGAEgASgLMhkudGhydS5jb3JlLnYxLkJsb2NrSGVhZGVyQgPgQQISMwoGZm9vdGVyGAIgASgLMhkudGhydS5jb3JlLnYxLkJsb2NrRm9vdGVyQgPgQQFIAIgBARIgCgRib2R5GAMgASgMQg3gQQG6SAd6BRiAgIAQSAGIAQESQwoQY29uc2Vuc3VzX3N0YXR1cxgEIAEoDjIfLnRocnUuY29tbW9uLnYxLkNvbnNlbnN1c1N0YXR1c0ID4EEBSAKIAQFCCQoHX2Zvb3RlckIHCgVfYm9keUITChFfY29uc2Vuc3VzX3N0YXR1cyI/CghSYXdCbG9jaxIRCgRzbG90GAEgASgEQgPgQQISIAoJcmF3X2Jsb2NrGAIgASgMQg3gQQK6SAd6BRiAgIAQKpQBCglCbG9ja1ZpZXcSGgoWQkxPQ0tfVklFV19VTlNQRUNJRklFRBAAEhoKFkJMT0NLX1ZJRVdfSEVBREVSX09OTFkQARIgChxCTE9DS19WSUVXX0hFQURFUl9BTkRfRk9PVEVSEAISGAoUQkxPQ0tfVklFV19CT0RZX09OTFkQAxITCg9CTE9DS19WSUVXX0ZVTEwQBCqNAQoPRXhlY3V0aW9uU3RhdHVzEiAKHEVYRUNVVElPTl9TVEFUVVNfVU5TUEVDSUZJRUQQABIcChhFWEVDVVRJT05fU1RBVFVTX1BFTkRJTkcQARIdChlFWEVDVVRJT05fU1RBVFVTX0VYRUNVVEVEEAISGwoXRVhFQ1VUSU9OX1NUQVRVU19GQUlMRUQQA0K5AQoQY29tLnRocnUuY29yZS52MUIKQmxvY2tQcm90b1ABWkBnaXRodWIuY29tL1VudG8tTGFicy90aHJ1LW5ldC9ncnBjL3BrZy9wcm90by90aHJ1L2NvcmUvdjE7Y29yZXYxogIDVENYqgIMVGhydS5Db3JlLlYxugIEVEhVQ8oCDFRocnVcQ29yZVxWMeICGFRocnVcQ29yZVxWMVxHUEJNZXRhZGF0YeoCDlRocnU6OkNvcmU6OlYxYgZwcm90bzM", [file_buf_validate_validate, file_google_api_field_behavior, file_google_protobuf_timestamp, file_thru_common_v1_primitives, file_thru_common_v1_consensus, file_thru_core_v1_types]);
1039
+ var file_thru_core_v1_block = /* @__PURE__ */ fileDesc("Chh0aHJ1L2NvcmUvdjEvYmxvY2sucHJvdG8SDHRocnUuY29yZS52MSLyAwoLQmxvY2tIZWFkZXISEQoEc2xvdBgBIAEoBEID4EECEjAKCmJsb2NrX2hhc2gYAiABKAsyFy50aHJ1LmNvcmUudjEuQmxvY2tIYXNoQgPgQQISOAoQaGVhZGVyX3NpZ25hdHVyZRgDIAEoCzIZLnRocnUuY29tbW9uLnYxLlNpZ25hdHVyZUID4EECEhQKB3ZlcnNpb24YBCABKA1CA+BBAhItCghwcm9kdWNlchgFIAEoCzIWLnRocnUuY29tbW9uLnYxLlB1YmtleUID4EECEjkKEGV4cGlyeV90aW1lc3RhbXAYBiABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wQgPgQQISFwoKc3RhcnRfc2xvdBgHIAEoBEID4EECEhkKDGV4cGlyeV9hZnRlchgIIAEoDUID4EECEhsKDm1heF9ibG9ja19zaXplGAkgASgNQgPgQQISHgoRbWF4X2NvbXB1dGVfdW5pdHMYCiABKARCA+BBAhIcCg9tYXhfc3RhdGVfdW5pdHMYCyABKA1CA+BBAhIgChNib25kX2Ftb3VudF9sb2NrX3VwGAwgASgEQgPgQQISMwoKYmxvY2tfdGltZRgNIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXBCA+BBAiLbAQoLQmxvY2tGb290ZXISMQoJc2lnbmF0dXJlGAEgASgLMhkudGhydS5jb21tb24udjEuU2lnbmF0dXJlQgPgQQISMgoGc3RhdHVzGAIgASgOMh0udGhydS5jb3JlLnYxLkV4ZWN1dGlvblN0YXR1c0ID4EECEiMKFmNvbnN1bWVkX2NvbXB1dGVfdW5pdHMYAyABKARCA+BBAhIhChRjb25zdW1lZF9zdGF0ZV91bml0cxgEIAEoDUID4EECEh0KEGF0dGVzdG9yX3BheW1lbnQYBSABKARCA+BBAiL8AQoFQmxvY2sSLgoGaGVhZGVyGAEgASgLMhkudGhydS5jb3JlLnYxLkJsb2NrSGVhZGVyQgPgQQISMwoGZm9vdGVyGAIgASgLMhkudGhydS5jb3JlLnYxLkJsb2NrRm9vdGVyQgPgQQFIAIgBARIgCgRib2R5GAMgASgMQg3gQQG6SAd6BRiAgIAQSAGIAQESQwoQY29uc2Vuc3VzX3N0YXR1cxgEIAEoDjIfLnRocnUuY29tbW9uLnYxLkNvbnNlbnN1c1N0YXR1c0ID4EEBSAKIAQFCCQoHX2Zvb3RlckIHCgVfYm9keUITChFfY29uc2Vuc3VzX3N0YXR1cyI/CghSYXdCbG9jaxIRCgRzbG90GAEgASgEQgPgQQISIAoJcmF3X2Jsb2NrGAIgASgMQg3gQQK6SAd6BRiAgIAQKpQBCglCbG9ja1ZpZXcSGgoWQkxPQ0tfVklFV19VTlNQRUNJRklFRBAAEhoKFkJMT0NLX1ZJRVdfSEVBREVSX09OTFkQARIgChxCTE9DS19WSUVXX0hFQURFUl9BTkRfRk9PVEVSEAISGAoUQkxPQ0tfVklFV19CT0RZX09OTFkQAxITCg9CTE9DS19WSUVXX0ZVTEwQBCqNAQoPRXhlY3V0aW9uU3RhdHVzEiAKHEVYRUNVVElPTl9TVEFUVVNfVU5TUEVDSUZJRUQQABIcChhFWEVDVVRJT05fU1RBVFVTX1BFTkRJTkcQARIdChlFWEVDVVRJT05fU1RBVFVTX0VYRUNVVEVEEAISGwoXRVhFQ1VUSU9OX1NUQVRVU19GQUlMRUQQA0K5AQoQY29tLnRocnUuY29yZS52MUIKQmxvY2tQcm90b1ABWkBnaXRodWIuY29tL1VudG8tTGFicy90aHJ1LW5ldC9ncnBjL3BrZy9wcm90by90aHJ1L2NvcmUvdjE7Y29yZXYxogIDVENYqgIMVGhydS5Db3JlLlYxugIEVEhVQ8oCDFRocnVcQ29yZVxWMeICGFRocnVcQ29yZVxWMVxHUEJNZXRhZGF0YeoCDlRocnU6OkNvcmU6OlYxYgZwcm90bzM", [file_buf_validate_validate, file_google_api_field_behavior, file_google_protobuf_timestamp, file_thru_common_v1_primitives, file_thru_common_v1_consensus, file_thru_core_v1_types]);
944
1040
  var BlockView = /* @__PURE__ */ ((BlockView2) => {
945
1041
  BlockView2[BlockView2["UNSPECIFIED"] = 0] = "UNSPECIFIED";
946
1042
  BlockView2[BlockView2["HEADER_ONLY"] = 1] = "HEADER_ONLY";
@@ -990,7 +1086,7 @@ var file_thru_core_v1_state = /* @__PURE__ */ fileDesc("Chh0aHJ1L2NvcmUvdjEvc3Rh
990
1086
  var StateProofRequestSchema = /* @__PURE__ */ messageDesc(file_thru_core_v1_state, 0);
991
1087
 
992
1088
  // thru-ts-client-sdk/proto/thru/services/v1/query_service_pb.ts
993
- var file_thru_services_v1_query_service = /* @__PURE__ */ fileDesc("CiR0aHJ1L3NlcnZpY2VzL3YxL3F1ZXJ5X3NlcnZpY2UucHJvdG8SEHRocnUuc2VydmljZXMudjEi1QIKEUdldEFjY291bnRSZXF1ZXN0EiwKB2FkZHJlc3MYASABKAsyFi50aHJ1LmNvbW1vbi52MS5QdWJrZXlCA+BBAhIxCgR2aWV3GAIgASgOMhkudGhydS5jb3JlLnYxLkFjY291bnRWaWV3QgPgQQFIAIgBARI8Cg92ZXJzaW9uX2NvbnRleHQYAyABKAsyHi50aHJ1LmNvbW1vbi52MS5WZXJzaW9uQ29udGV4dEID4EECEkAKDW1pbl9jb25zZW5zdXMYBCABKA4yHy50aHJ1LmNvbW1vbi52MS5Db25zZW5zdXNTdGF0dXNCA+BBAUgBiAEBEjUKCmRhdGFfc2xpY2UYBSABKAsyFy50aHJ1LmNvcmUudjEuRGF0YVNsaWNlQgPgQQFIAogBAUIHCgVfdmlld0IQCg5fbWluX2NvbnNlbnN1c0INCgtfZGF0YV9zbGljZSKSAgoUR2V0UmF3QWNjb3VudFJlcXVlc3QSLAoHYWRkcmVzcxgBIAEoCzIWLnRocnUuY29tbW9uLnYxLlB1YmtleUID4EECEjEKBHZpZXcYAiABKA4yGS50aHJ1LmNvcmUudjEuQWNjb3VudFZpZXdCA+BBAUgAiAEBEjwKD3ZlcnNpb25fY29udGV4dBgDIAEoCzIeLnRocnUuY29tbW9uLnYxLlZlcnNpb25Db250ZXh0QgPgQQISQAoNbWluX2NvbnNlbnN1cxgEIAEoDjIfLnRocnUuY29tbW9uLnYxLkNvbnNlbnN1c1N0YXR1c0ID4EEBSAGIAQFCBwoFX3ZpZXdCEAoOX21pbl9jb25zZW5zdXMinAIKFUdldFRyYW5zYWN0aW9uUmVxdWVzdBIxCglzaWduYXR1cmUYASABKAsyGS50aHJ1LmNvbW1vbi52MS5TaWduYXR1cmVCA+BBAhI1CgR2aWV3GAIgASgOMh0udGhydS5jb3JlLnYxLlRyYW5zYWN0aW9uVmlld0ID4EEBSACIAQESPAoPdmVyc2lvbl9jb250ZXh0GAMgASgLMh4udGhydS5jb21tb24udjEuVmVyc2lvbkNvbnRleHRCA+BBAhJACg1taW5fY29uc2Vuc3VzGAQgASgOMh8udGhydS5jb21tb24udjEuQ29uc2Vuc3VzU3RhdHVzQgPgQQFIAYgBAUIHCgVfdmlld0IQCg5fbWluX2NvbnNlbnN1cyLfAQoYR2V0UmF3VHJhbnNhY3Rpb25SZXF1ZXN0EjEKCXNpZ25hdHVyZRgBIAEoCzIZLnRocnUuY29tbW9uLnYxLlNpZ25hdHVyZUID4EECEjwKD3ZlcnNpb25fY29udGV4dBgCIAEoCzIeLnRocnUuY29tbW9uLnYxLlZlcnNpb25Db250ZXh0QgPgQQISQAoNbWluX2NvbnNlbnN1cxgDIAEoDjIfLnRocnUuY29tbW9uLnYxLkNvbnNlbnN1c1N0YXR1c0ID4EEBSACIAQFCEAoOX21pbl9jb25zZW5zdXMiUgoZR2VuZXJhdGVTdGF0ZVByb29mUmVxdWVzdBI1CgdyZXF1ZXN0GAEgASgLMh8udGhydS5jb3JlLnYxLlN0YXRlUHJvb2ZSZXF1ZXN0QgPgQQIiSgoaR2VuZXJhdGVTdGF0ZVByb29mUmVzcG9uc2USLAoFcHJvb2YYASABKAsyGC50aHJ1LmNvcmUudjEuU3RhdGVQcm9vZkID4EECIt4CCg9HZXRCbG9ja1JlcXVlc3QSEwoEc2xvdBgBIAEoBEID4EEBSAASMgoKYmxvY2tfaGFzaBgCIAEoCzIXLnRocnUuY29yZS52MS5CbG9ja0hhc2hCA+BBAUgAEi8KBHZpZXcYAyABKA4yFy50aHJ1LmNvcmUudjEuQmxvY2tWaWV3QgPgQQFIAYgBARJACg1taW5fY29uc2Vuc3VzGAQgASgOMh8udGhydS5jb21tb24udjEuQ29uc2Vuc3VzU3RhdHVzQgPgQQFIAogBATpoukhlGmMKEmJsb2NrX3NlbGVjdG9yX3NldBIlZWl0aGVyIHNsb3Qgb3IgYmxvY2tfaGFzaCBtdXN0IGJlIHNldBomaGFzKHRoaXMuc2xvdCkgfHwgaGFzKHRoaXMuYmxvY2tfaGFzaClCCgoIc2VsZWN0b3JCBwoFX3ZpZXdCEAoOX21pbl9jb25zZW5zdXMiqwIKEkdldFJhd0Jsb2NrUmVxdWVzdBITCgRzbG90GAEgASgEQgPgQQFIABIyCgpibG9ja19oYXNoGAIgASgLMhcudGhydS5jb3JlLnYxLkJsb2NrSGFzaEID4EEBSAASQAoNbWluX2NvbnNlbnN1cxgDIAEoDjIfLnRocnUuY29tbW9uLnYxLkNvbnNlbnN1c1N0YXR1c0ID4EEBSAGIAQE6bLpIaRpnChZyYXdfYmxvY2tfc2VsZWN0b3Jfc2V0EiVlaXRoZXIgc2xvdCBvciBibG9ja19oYXNoIG11c3QgYmUgc2V0GiZoYXModGhpcy5zbG90KSB8fCBoYXModGhpcy5ibG9ja19oYXNoKUIKCghzZWxlY3RvckIQCg5fbWluX2NvbnNlbnN1cyL3AgoTTGlzdEFjY291bnRzUmVxdWVzdBIxCgR2aWV3GAEgASgOMhkudGhydS5jb3JlLnYxLkFjY291bnRWaWV3QgPgQQFIAIgBARJBCg92ZXJzaW9uX2NvbnRleHQYAiABKAsyHi50aHJ1LmNvbW1vbi52MS5WZXJzaW9uQ29udGV4dEID4EEBSAGIAQESMAoGZmlsdGVyGAMgASgLMhYudGhydS5jb21tb24udjEuRmlsdGVyQgPgQQFIAogBARIzCgRwYWdlGAQgASgLMhsudGhydS5jb21tb24udjEuUGFnZVJlcXVlc3RCA+BBAUgDiAEBEkAKDW1pbl9jb25zZW5zdXMYBSABKA4yHy50aHJ1LmNvbW1vbi52MS5Db25zZW5zdXNTdGF0dXNCA+BBAUgEiAEBQgcKBV92aWV3QhIKEF92ZXJzaW9uX2NvbnRleHRCCQoHX2ZpbHRlckIHCgVfcGFnZUIQCg5fbWluX2NvbnNlbnN1cyKDAQoUTGlzdEFjY291bnRzUmVzcG9uc2USLAoIYWNjb3VudHMYASADKAsyFS50aHJ1LmNvcmUudjEuQWNjb3VudEID4EEBEjQKBHBhZ2UYAiABKAsyHC50aHJ1LmNvbW1vbi52MS5QYWdlUmVzcG9uc2VCA+BBAUgAiAEBQgcKBV9wYWdlIpwCChFMaXN0QmxvY2tzUmVxdWVzdBIwCgZmaWx0ZXIYASABKAsyFi50aHJ1LmNvbW1vbi52MS5GaWx0ZXJCA+BBAUgAiAEBEjMKBHBhZ2UYAiABKAsyGy50aHJ1LmNvbW1vbi52MS5QYWdlUmVxdWVzdEID4EEBSAGIAQESLwoEdmlldxgDIAEoDjIXLnRocnUuY29yZS52MS5CbG9ja1ZpZXdCA+BBAUgCiAEBEkAKDW1pbl9jb25zZW5zdXMYBCABKA4yHy50aHJ1LmNvbW1vbi52MS5Db25zZW5zdXNTdGF0dXNCA+BBAUgDiAEBQgkKB19maWx0ZXJCBwoFX3BhZ2VCBwoFX3ZpZXdCEAoOX21pbl9jb25zZW5zdXMifQoSTGlzdEJsb2Nrc1Jlc3BvbnNlEigKBmJsb2NrcxgBIAMoCzITLnRocnUuY29yZS52MS5CbG9ja0ID4EEBEjQKBHBhZ2UYAiABKAsyHC50aHJ1LmNvbW1vbi52MS5QYWdlUmVzcG9uc2VCA+BBAUgAiAEBQgcKBV9wYWdlIswBCiFMaXN0VHJhbnNhY3Rpb25zRm9yQWNjb3VudFJlcXVlc3QSLAoHYWNjb3VudBgBIAEoCzIWLnRocnUuY29tbW9uLnYxLlB1YmtleUID4EECEjMKBHBhZ2UYAiABKAsyGy50aHJ1LmNvbW1vbi52MS5QYWdlUmVxdWVzdEID4EEBSACIAQESMAoGZmlsdGVyGAMgASgLMhYudGhydS5jb21tb24udjEuRmlsdGVyQgPgQQFIAYgBAUIHCgVfcGFnZUIJCgdfZmlsdGVyIs0BCiJMaXN0VHJhbnNhY3Rpb25zRm9yQWNjb3VudFJlc3BvbnNlEjIKCnNpZ25hdHVyZXMYASADKAsyGS50aHJ1LmNvbW1vbi52MS5TaWduYXR1cmVCA+BBARI0CgRwYWdlGAIgASgLMhwudGhydS5jb21tb24udjEuUGFnZVJlc3BvbnNlQgPgQQFIAIgBARI0Cgx0cmFuc2FjdGlvbnMYAyADKAsyGS50aHJ1LmNvcmUudjEuVHJhbnNhY3Rpb25CA+BBAUIHCgVfcGFnZSITChFHZXRWZXJzaW9uUmVxdWVzdCKQAQoSR2V0VmVyc2lvblJlc3BvbnNlEkkKCHZlcnNpb25zGAEgAygLMjIudGhydS5zZXJ2aWNlcy52MS5HZXRWZXJzaW9uUmVzcG9uc2UuVmVyc2lvbnNFbnRyeUID4EECGi8KDVZlcnNpb25zRW50cnkSCwoDa2V5GAEgASgJEg0KBXZhbHVlGAIgASgJOgI4ASKHAQoPR2V0RXZlbnRSZXF1ZXN0Eh0KCGV2ZW50X2lkGAEgASgJQgvgQQK6SAVyAxiAARJBCg92ZXJzaW9uX2NvbnRleHQYAiABKAsyHi50aHJ1LmNvbW1vbi52MS5WZXJzaW9uQ29udGV4dEID4EEBSACIAQFCEgoQX3ZlcnNpb25fY29udGV4dCLlAwoFRXZlbnQSFQoIZXZlbnRfaWQYASABKAlCA+BBAhI9ChV0cmFuc2FjdGlvbl9zaWduYXR1cmUYAiABKAsyGS50aHJ1LmNvbW1vbi52MS5TaWduYXR1cmVCA+BBAhIxCgdwcm9ncmFtGAMgASgLMhYudGhydS5jb21tb24udjEuUHVia2V5QgPgQQFIAIgBARIZCgdwYXlsb2FkGAQgASgMQgPgQQFIAYgBARIWCgRzbG90GAUgASgEQgPgQQFIAogBARIaCghjYWxsX2lkeBgGIAEoDUID4EEBSAOIAQESHQoLcHJvZ3JhbV9pZHgYByABKA1CA+BBAUgEiAEBEh4KDHBheWxvYWRfc2l6ZRgIIAEoDUID4EEBSAWIAQESHgoMYmxvY2tfb2Zmc2V0GAkgASgNQgPgQQFIBogBARI3Cgl0aW1lc3RhbXAYCiABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wQgPgQQFIB4gBAUIKCghfcHJvZ3JhbUIKCghfcGF5bG9hZEIHCgVfc2xvdEILCglfY2FsbF9pZHhCDgoMX3Byb2dyYW1faWR4Qg8KDV9wYXlsb2FkX3NpemVCDwoNX2Jsb2NrX29mZnNldEIMCgpfdGltZXN0YW1wIrkCChFMaXN0RXZlbnRzUmVxdWVzdBIwCgZmaWx0ZXIYASABKAsyFi50aHJ1LmNvbW1vbi52MS5GaWx0ZXJCA+BBAUgAiAEBEjMKBHBhZ2UYAiABKAsyGy50aHJ1LmNvbW1vbi52MS5QYWdlUmVxdWVzdEID4EEBSAGIAQESQQoPdmVyc2lvbl9jb250ZXh0GAMgASgLMh4udGhydS5jb21tb24udjEuVmVyc2lvbkNvbnRleHRCA+BBAUgCiAEBEkAKDW1pbl9jb25zZW5zdXMYBCABKA4yHy50aHJ1LmNvbW1vbi52MS5Db25zZW5zdXNTdGF0dXNCA+BBAUgDiAEBQgkKB19maWx0ZXJCBwoFX3BhZ2VCEgoQX3ZlcnNpb25fY29udGV4dEIQCg5fbWluX2NvbnNlbnN1cyKBAQoSTGlzdEV2ZW50c1Jlc3BvbnNlEiwKBmV2ZW50cxgBIAMoCzIXLnRocnUuc2VydmljZXMudjEuRXZlbnRCA+BBARI0CgRwYWdlGAIgASgLMhwudGhydS5jb21tb24udjEuUGFnZVJlc3BvbnNlQgPgQQFIAIgBAUIHCgVfcGFnZSLyAgoXTGlzdFRyYW5zYWN0aW9uc1JlcXVlc3QSMAoGZmlsdGVyGAEgASgLMhYudGhydS5jb21tb24udjEuRmlsdGVyQgPgQQFIAIgBARIzCgRwYWdlGAIgASgLMhsudGhydS5jb21tb24udjEuUGFnZVJlcXVlc3RCA+BBAUgBiAEBEh8KDXJldHVybl9ldmVudHMYAyABKAhCA+BBAUgCiAEBEkEKD3ZlcnNpb25fY29udGV4dBgEIAEoCzIeLnRocnUuY29tbW9uLnYxLlZlcnNpb25Db250ZXh0QgPgQQFIA4gBARJACg1taW5fY29uc2Vuc3VzGAUgASgOMh8udGhydS5jb21tb24udjEuQ29uc2Vuc3VzU3RhdHVzQgPgQQFIBIgBAUIJCgdfZmlsdGVyQgcKBV9wYWdlQhAKDl9yZXR1cm5fZXZlbnRzQhIKEF92ZXJzaW9uX2NvbnRleHRCEAoOX21pbl9jb25zZW5zdXMijwEKGExpc3RUcmFuc2FjdGlvbnNSZXNwb25zZRI0Cgx0cmFuc2FjdGlvbnMYASADKAsyGS50aHJ1LmNvcmUudjEuVHJhbnNhY3Rpb25CA+BBARI0CgRwYWdlGAIgASgLMhwudGhydS5jb21tb24udjEuUGFnZVJlc3BvbnNlQgPgQQFIAIgBAUIHCgVfcGFnZSJQChtHZXRUcmFuc2FjdGlvblN0YXR1c1JlcXVlc3QSMQoJc2lnbmF0dXJlGAEgASgLMhkudGhydS5jb21tb24udjEuU2lnbmF0dXJlQgPgQQIigwIKEVRyYW5zYWN0aW9uU3RhdHVzEjEKCXNpZ25hdHVyZRgBIAEoCzIZLnRocnUuY29tbW9uLnYxLlNpZ25hdHVyZUID4EECEkMKEGNvbnNlbnN1c19zdGF0dXMYAiABKA4yHy50aHJ1LmNvbW1vbi52MS5Db25zZW5zdXNTdGF0dXNCA+BBAUgAiAEBEkwKEGV4ZWN1dGlvbl9yZXN1bHQYAyABKAsyKC50aHJ1LmNvcmUudjEuVHJhbnNhY3Rpb25FeGVjdXRpb25SZXN1bHRCA+BBAUgBiAEBQhMKEV9jb25zZW5zdXNfc3RhdHVzQhMKEV9leGVjdXRpb25fcmVzdWx0IhIKEEdldEhlaWdodFJlcXVlc3QiaQoRR2V0SGVpZ2h0UmVzcG9uc2USFgoJZmluYWxpemVkGAEgASgEQgPgQQISHQoQbG9jYWxseV9leGVjdXRlZBgCIAEoBEID4EECEh0KEGNsdXN0ZXJfZXhlY3V0ZWQYAyABKARCA+BBAjKcEQoMUXVlcnlTZXJ2aWNlEmgKCUdldEhlaWdodBIiLnRocnUuc2VydmljZXMudjEuR2V0SGVpZ2h0UmVxdWVzdBojLnRocnUuc2VydmljZXMudjEuR2V0SGVpZ2h0UmVzcG9uc2UiEoLT5JMCDBIKL3YxL2hlaWdodBJ4CgpHZXRBY2NvdW50EiMudGhydS5zZXJ2aWNlcy52MS5HZXRBY2NvdW50UmVxdWVzdBoVLnRocnUuY29yZS52MS5BY2NvdW50Ii7aQQdhZGRyZXNzgtPkkwIeEhwvdjEvYWNjb3VudHMve2FkZHJlc3MudmFsdWV9EoUBCg1HZXRSYXdBY2NvdW50EiYudGhydS5zZXJ2aWNlcy52MS5HZXRSYXdBY2NvdW50UmVxdWVzdBoYLnRocnUuY29yZS52MS5SYXdBY2NvdW50IjLaQQdhZGRyZXNzgtPkkwIiEiAvdjEvYWNjb3VudHMve2FkZHJlc3MudmFsdWV9OnJhdxKMAQoOR2V0VHJhbnNhY3Rpb24SJy50aHJ1LnNlcnZpY2VzLnYxLkdldFRyYW5zYWN0aW9uUmVxdWVzdBoZLnRocnUuY29yZS52MS5UcmFuc2FjdGlvbiI22kEJc2lnbmF0dXJlgtPkkwIkEiIvdjEvdHJhbnNhY3Rpb25zL3tzaWduYXR1cmUudmFsdWV9EpkBChFHZXRSYXdUcmFuc2FjdGlvbhIqLnRocnUuc2VydmljZXMudjEuR2V0UmF3VHJhbnNhY3Rpb25SZXF1ZXN0GhwudGhydS5jb3JlLnYxLlJhd1RyYW5zYWN0aW9uIjraQQlzaWduYXR1cmWC0+STAigSJi92MS90cmFuc2FjdGlvbnMve3NpZ25hdHVyZS52YWx1ZX06cmF3EoYBCghHZXRCbG9jaxIhLnRocnUuc2VydmljZXMudjEuR2V0QmxvY2tSZXF1ZXN0GhMudGhydS5jb3JlLnYxLkJsb2NrIkKC0+STAjxaJxIlL3YxL2Jsb2Nrcy9ieS1oYXNoL3tibG9ja19oYXNoLnZhbHVlfRIRL3YxL2Jsb2Nrcy97c2xvdH0SlwEKC0dldFJhd0Jsb2NrEiQudGhydS5zZXJ2aWNlcy52MS5HZXRSYXdCbG9ja1JlcXVlc3QaFi50aHJ1LmNvcmUudjEuUmF3QmxvY2siSoLT5JMCRForEikvdjEvYmxvY2tzL2J5LWhhc2gve2Jsb2NrX2hhc2gudmFsdWV9OnJhdxIVL3YxL2Jsb2Nrcy97c2xvdH06cmF3EnMKDExpc3RBY2NvdW50cxIlLnRocnUuc2VydmljZXMudjEuTGlzdEFjY291bnRzUmVxdWVzdBomLnRocnUuc2VydmljZXMudjEuTGlzdEFjY291bnRzUmVzcG9uc2UiFILT5JMCDhIML3YxL2FjY291bnRzEmsKCkxpc3RCbG9ja3MSIy50aHJ1LnNlcnZpY2VzLnYxLkxpc3RCbG9ja3NSZXF1ZXN0GiQudGhydS5zZXJ2aWNlcy52MS5MaXN0QmxvY2tzUmVzcG9uc2UiEoLT5JMCDBIKL3YxL2Jsb2NrcxLEAQoaTGlzdFRyYW5zYWN0aW9uc0ZvckFjY291bnQSMy50aHJ1LnNlcnZpY2VzLnYxLkxpc3RUcmFuc2FjdGlvbnNGb3JBY2NvdW50UmVxdWVzdBo0LnRocnUuc2VydmljZXMudjEuTGlzdFRyYW5zYWN0aW9uc0ZvckFjY291bnRSZXNwb25zZSI72kEHYWNjb3VudILT5JMCKxIpL3YxL2FjY291bnRzL3thY2NvdW50LnZhbHVlfS90cmFuc2FjdGlvbnMScAoIR2V0RXZlbnQSIS50aHJ1LnNlcnZpY2VzLnYxLkdldEV2ZW50UmVxdWVzdBoXLnRocnUuc2VydmljZXMudjEuRXZlbnQiKNpBCGV2ZW50X2lkgtPkkwIXEhUvdjEvZXZlbnRzL3tldmVudF9pZH0SawoKTGlzdEV2ZW50cxIjLnRocnUuc2VydmljZXMudjEuTGlzdEV2ZW50c1JlcXVlc3QaJC50aHJ1LnNlcnZpY2VzLnYxLkxpc3RFdmVudHNSZXNwb25zZSISgtPkkwIMEgovdjEvZXZlbnRzEoMBChBMaXN0VHJhbnNhY3Rpb25zEikudGhydS5zZXJ2aWNlcy52MS5MaXN0VHJhbnNhY3Rpb25zUmVxdWVzdBoqLnRocnUuc2VydmljZXMudjEuTGlzdFRyYW5zYWN0aW9uc1Jlc3BvbnNlIhiC0+STAhISEC92MS90cmFuc2FjdGlvbnMSqQEKFEdldFRyYW5zYWN0aW9uU3RhdHVzEi0udGhydS5zZXJ2aWNlcy52MS5HZXRUcmFuc2FjdGlvblN0YXR1c1JlcXVlc3QaIy50aHJ1LnNlcnZpY2VzLnYxLlRyYW5zYWN0aW9uU3RhdHVzIj3aQQlzaWduYXR1cmWC0+STAisSKS92MS90cmFuc2FjdGlvbnMve3NpZ25hdHVyZS52YWx1ZX06c3RhdHVzEpQBChJHZW5lcmF0ZVN0YXRlUHJvb2YSKy50aHJ1LnNlcnZpY2VzLnYxLkdlbmVyYXRlU3RhdGVQcm9vZlJlcXVlc3QaLC50aHJ1LnNlcnZpY2VzLnYxLkdlbmVyYXRlU3RhdGVQcm9vZlJlc3BvbnNlIiOC0+STAh06ASoiGC92MS9zdGF0ZXByb29mczpnZW5lcmF0ZRJsCgpHZXRWZXJzaW9uEiMudGhydS5zZXJ2aWNlcy52MS5HZXRWZXJzaW9uUmVxdWVzdBokLnRocnUuc2VydmljZXMudjEuR2V0VmVyc2lvblJlc3BvbnNlIhOC0+STAg0SCy92MS92ZXJzaW9uGhPKQRBhcGkudGhydS5uZXR3b3JrQtwBChRjb20udGhydS5zZXJ2aWNlcy52MUIRUXVlcnlTZXJ2aWNlUHJvdG9QAVpIZ2l0aHViLmNvbS9VbnRvLUxhYnMvdGhydS1uZXQvZ3JwYy9wa2cvcHJvdG8vdGhydS9zZXJ2aWNlcy92MTtzZXJ2aWNlc3YxogIDVFNYqgIQVGhydS5TZXJ2aWNlcy5WMboCBFRIVVPKAhBUaHJ1XFNlcnZpY2VzXFYx4gIcVGhydVxTZXJ2aWNlc1xWMVxHUEJNZXRhZGF0YeoCElRocnU6OlNlcnZpY2VzOjpWMWIGcHJvdG8z", [file_buf_validate_validate, file_google_api_annotations, file_google_api_client, file_google_api_field_behavior, file_google_protobuf_timestamp, file_thru_common_v1_consensus, file_thru_common_v1_filters, file_thru_common_v1_pagination, file_thru_common_v1_primitives, file_thru_core_v1_account, file_thru_core_v1_block, file_thru_core_v1_state, file_thru_core_v1_transaction, file_thru_core_v1_types]);
1089
+ var file_thru_services_v1_query_service = /* @__PURE__ */ fileDesc("CiR0aHJ1L3NlcnZpY2VzL3YxL3F1ZXJ5X3NlcnZpY2UucHJvdG8SEHRocnUuc2VydmljZXMudjEi1QIKEUdldEFjY291bnRSZXF1ZXN0EiwKB2FkZHJlc3MYASABKAsyFi50aHJ1LmNvbW1vbi52MS5QdWJrZXlCA+BBAhIxCgR2aWV3GAIgASgOMhkudGhydS5jb3JlLnYxLkFjY291bnRWaWV3QgPgQQFIAIgBARI8Cg92ZXJzaW9uX2NvbnRleHQYAyABKAsyHi50aHJ1LmNvbW1vbi52MS5WZXJzaW9uQ29udGV4dEID4EECEkAKDW1pbl9jb25zZW5zdXMYBCABKA4yHy50aHJ1LmNvbW1vbi52MS5Db25zZW5zdXNTdGF0dXNCA+BBAUgBiAEBEjUKCmRhdGFfc2xpY2UYBSABKAsyFy50aHJ1LmNvcmUudjEuRGF0YVNsaWNlQgPgQQFIAogBAUIHCgVfdmlld0IQCg5fbWluX2NvbnNlbnN1c0INCgtfZGF0YV9zbGljZSKSAgoUR2V0UmF3QWNjb3VudFJlcXVlc3QSLAoHYWRkcmVzcxgBIAEoCzIWLnRocnUuY29tbW9uLnYxLlB1YmtleUID4EECEjEKBHZpZXcYAiABKA4yGS50aHJ1LmNvcmUudjEuQWNjb3VudFZpZXdCA+BBAUgAiAEBEjwKD3ZlcnNpb25fY29udGV4dBgDIAEoCzIeLnRocnUuY29tbW9uLnYxLlZlcnNpb25Db250ZXh0QgPgQQISQAoNbWluX2NvbnNlbnN1cxgEIAEoDjIfLnRocnUuY29tbW9uLnYxLkNvbnNlbnN1c1N0YXR1c0ID4EEBSAGIAQFCBwoFX3ZpZXdCEAoOX21pbl9jb25zZW5zdXMinAIKFUdldFRyYW5zYWN0aW9uUmVxdWVzdBIxCglzaWduYXR1cmUYASABKAsyGS50aHJ1LmNvbW1vbi52MS5TaWduYXR1cmVCA+BBAhI1CgR2aWV3GAIgASgOMh0udGhydS5jb3JlLnYxLlRyYW5zYWN0aW9uVmlld0ID4EEBSACIAQESPAoPdmVyc2lvbl9jb250ZXh0GAMgASgLMh4udGhydS5jb21tb24udjEuVmVyc2lvbkNvbnRleHRCA+BBAhJACg1taW5fY29uc2Vuc3VzGAQgASgOMh8udGhydS5jb21tb24udjEuQ29uc2Vuc3VzU3RhdHVzQgPgQQFIAYgBAUIHCgVfdmlld0IQCg5fbWluX2NvbnNlbnN1cyLfAQoYR2V0UmF3VHJhbnNhY3Rpb25SZXF1ZXN0EjEKCXNpZ25hdHVyZRgBIAEoCzIZLnRocnUuY29tbW9uLnYxLlNpZ25hdHVyZUID4EECEjwKD3ZlcnNpb25fY29udGV4dBgCIAEoCzIeLnRocnUuY29tbW9uLnYxLlZlcnNpb25Db250ZXh0QgPgQQISQAoNbWluX2NvbnNlbnN1cxgDIAEoDjIfLnRocnUuY29tbW9uLnYxLkNvbnNlbnN1c1N0YXR1c0ID4EEBSACIAQFCEAoOX21pbl9jb25zZW5zdXMiUgoZR2VuZXJhdGVTdGF0ZVByb29mUmVxdWVzdBI1CgdyZXF1ZXN0GAEgASgLMh8udGhydS5jb3JlLnYxLlN0YXRlUHJvb2ZSZXF1ZXN0QgPgQQIiSgoaR2VuZXJhdGVTdGF0ZVByb29mUmVzcG9uc2USLAoFcHJvb2YYASABKAsyGC50aHJ1LmNvcmUudjEuU3RhdGVQcm9vZkID4EECIt4CCg9HZXRCbG9ja1JlcXVlc3QSEwoEc2xvdBgBIAEoBEID4EEBSAASMgoKYmxvY2tfaGFzaBgCIAEoCzIXLnRocnUuY29yZS52MS5CbG9ja0hhc2hCA+BBAUgAEi8KBHZpZXcYAyABKA4yFy50aHJ1LmNvcmUudjEuQmxvY2tWaWV3QgPgQQFIAYgBARJACg1taW5fY29uc2Vuc3VzGAQgASgOMh8udGhydS5jb21tb24udjEuQ29uc2Vuc3VzU3RhdHVzQgPgQQFIAogBATpoukhlGmMKEmJsb2NrX3NlbGVjdG9yX3NldBIlZWl0aGVyIHNsb3Qgb3IgYmxvY2tfaGFzaCBtdXN0IGJlIHNldBomaGFzKHRoaXMuc2xvdCkgfHwgaGFzKHRoaXMuYmxvY2tfaGFzaClCCgoIc2VsZWN0b3JCBwoFX3ZpZXdCEAoOX21pbl9jb25zZW5zdXMiqwIKEkdldFJhd0Jsb2NrUmVxdWVzdBITCgRzbG90GAEgASgEQgPgQQFIABIyCgpibG9ja19oYXNoGAIgASgLMhcudGhydS5jb3JlLnYxLkJsb2NrSGFzaEID4EEBSAASQAoNbWluX2NvbnNlbnN1cxgDIAEoDjIfLnRocnUuY29tbW9uLnYxLkNvbnNlbnN1c1N0YXR1c0ID4EEBSAGIAQE6bLpIaRpnChZyYXdfYmxvY2tfc2VsZWN0b3Jfc2V0EiVlaXRoZXIgc2xvdCBvciBibG9ja19oYXNoIG11c3QgYmUgc2V0GiZoYXModGhpcy5zbG90KSB8fCBoYXModGhpcy5ibG9ja19oYXNoKUIKCghzZWxlY3RvckIQCg5fbWluX2NvbnNlbnN1cyL3AgoTTGlzdEFjY291bnRzUmVxdWVzdBIxCgR2aWV3GAEgASgOMhkudGhydS5jb3JlLnYxLkFjY291bnRWaWV3QgPgQQFIAIgBARJBCg92ZXJzaW9uX2NvbnRleHQYAiABKAsyHi50aHJ1LmNvbW1vbi52MS5WZXJzaW9uQ29udGV4dEID4EEBSAGIAQESMAoGZmlsdGVyGAMgASgLMhYudGhydS5jb21tb24udjEuRmlsdGVyQgPgQQFIAogBARIzCgRwYWdlGAQgASgLMhsudGhydS5jb21tb24udjEuUGFnZVJlcXVlc3RCA+BBAUgDiAEBEkAKDW1pbl9jb25zZW5zdXMYBSABKA4yHy50aHJ1LmNvbW1vbi52MS5Db25zZW5zdXNTdGF0dXNCA+BBAUgEiAEBQgcKBV92aWV3QhIKEF92ZXJzaW9uX2NvbnRleHRCCQoHX2ZpbHRlckIHCgVfcGFnZUIQCg5fbWluX2NvbnNlbnN1cyKDAQoUTGlzdEFjY291bnRzUmVzcG9uc2USLAoIYWNjb3VudHMYASADKAsyFS50aHJ1LmNvcmUudjEuQWNjb3VudEID4EEBEjQKBHBhZ2UYAiABKAsyHC50aHJ1LmNvbW1vbi52MS5QYWdlUmVzcG9uc2VCA+BBAUgAiAEBQgcKBV9wYWdlIpwCChFMaXN0QmxvY2tzUmVxdWVzdBIwCgZmaWx0ZXIYASABKAsyFi50aHJ1LmNvbW1vbi52MS5GaWx0ZXJCA+BBAUgAiAEBEjMKBHBhZ2UYAiABKAsyGy50aHJ1LmNvbW1vbi52MS5QYWdlUmVxdWVzdEID4EEBSAGIAQESLwoEdmlldxgDIAEoDjIXLnRocnUuY29yZS52MS5CbG9ja1ZpZXdCA+BBAUgCiAEBEkAKDW1pbl9jb25zZW5zdXMYBCABKA4yHy50aHJ1LmNvbW1vbi52MS5Db25zZW5zdXNTdGF0dXNCA+BBAUgDiAEBQgkKB19maWx0ZXJCBwoFX3BhZ2VCBwoFX3ZpZXdCEAoOX21pbl9jb25zZW5zdXMifQoSTGlzdEJsb2Nrc1Jlc3BvbnNlEigKBmJsb2NrcxgBIAMoCzITLnRocnUuY29yZS52MS5CbG9ja0ID4EEBEjQKBHBhZ2UYAiABKAsyHC50aHJ1LmNvbW1vbi52MS5QYWdlUmVzcG9uc2VCA+BBAUgAiAEBQgcKBV9wYWdlIswBCiFMaXN0VHJhbnNhY3Rpb25zRm9yQWNjb3VudFJlcXVlc3QSLAoHYWNjb3VudBgBIAEoCzIWLnRocnUuY29tbW9uLnYxLlB1YmtleUID4EECEjMKBHBhZ2UYAiABKAsyGy50aHJ1LmNvbW1vbi52MS5QYWdlUmVxdWVzdEID4EEBSACIAQESMAoGZmlsdGVyGAMgASgLMhYudGhydS5jb21tb24udjEuRmlsdGVyQgPgQQFIAYgBAUIHCgVfcGFnZUIJCgdfZmlsdGVyIpkBCiJMaXN0VHJhbnNhY3Rpb25zRm9yQWNjb3VudFJlc3BvbnNlEjQKBHBhZ2UYASABKAsyHC50aHJ1LmNvbW1vbi52MS5QYWdlUmVzcG9uc2VCA+BBAUgAiAEBEjQKDHRyYW5zYWN0aW9ucxgCIAMoCzIZLnRocnUuY29yZS52MS5UcmFuc2FjdGlvbkID4EEBQgcKBV9wYWdlIhMKEUdldFZlcnNpb25SZXF1ZXN0IpABChJHZXRWZXJzaW9uUmVzcG9uc2USSQoIdmVyc2lvbnMYASADKAsyMi50aHJ1LnNlcnZpY2VzLnYxLkdldFZlcnNpb25SZXNwb25zZS5WZXJzaW9uc0VudHJ5QgPgQQIaLwoNVmVyc2lvbnNFbnRyeRILCgNrZXkYASABKAkSDQoFdmFsdWUYAiABKAk6AjgBIocBCg9HZXRFdmVudFJlcXVlc3QSHQoIZXZlbnRfaWQYASABKAlCC+BBArpIBXIDGIABEkEKD3ZlcnNpb25fY29udGV4dBgCIAEoCzIeLnRocnUuY29tbW9uLnYxLlZlcnNpb25Db250ZXh0QgPgQQFIAIgBAUISChBfdmVyc2lvbl9jb250ZXh0IuUDCgVFdmVudBIVCghldmVudF9pZBgBIAEoCUID4EECEj0KFXRyYW5zYWN0aW9uX3NpZ25hdHVyZRgCIAEoCzIZLnRocnUuY29tbW9uLnYxLlNpZ25hdHVyZUID4EECEjEKB3Byb2dyYW0YAyABKAsyFi50aHJ1LmNvbW1vbi52MS5QdWJrZXlCA+BBAUgAiAEBEhkKB3BheWxvYWQYBCABKAxCA+BBAUgBiAEBEhYKBHNsb3QYBSABKARCA+BBAUgCiAEBEhoKCGNhbGxfaWR4GAYgASgNQgPgQQFIA4gBARIdCgtwcm9ncmFtX2lkeBgHIAEoDUID4EEBSASIAQESHgoMcGF5bG9hZF9zaXplGAggASgNQgPgQQFIBYgBARIeCgxibG9ja19vZmZzZXQYCSABKA1CA+BBAUgGiAEBEjcKCXRpbWVzdGFtcBgKIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXBCA+BBAUgHiAEBQgoKCF9wcm9ncmFtQgoKCF9wYXlsb2FkQgcKBV9zbG90QgsKCV9jYWxsX2lkeEIOCgxfcHJvZ3JhbV9pZHhCDwoNX3BheWxvYWRfc2l6ZUIPCg1fYmxvY2tfb2Zmc2V0QgwKCl90aW1lc3RhbXAiuQIKEUxpc3RFdmVudHNSZXF1ZXN0EjAKBmZpbHRlchgBIAEoCzIWLnRocnUuY29tbW9uLnYxLkZpbHRlckID4EEBSACIAQESMwoEcGFnZRgCIAEoCzIbLnRocnUuY29tbW9uLnYxLlBhZ2VSZXF1ZXN0QgPgQQFIAYgBARJBCg92ZXJzaW9uX2NvbnRleHQYAyABKAsyHi50aHJ1LmNvbW1vbi52MS5WZXJzaW9uQ29udGV4dEID4EEBSAKIAQESQAoNbWluX2NvbnNlbnN1cxgEIAEoDjIfLnRocnUuY29tbW9uLnYxLkNvbnNlbnN1c1N0YXR1c0ID4EEBSAOIAQFCCQoHX2ZpbHRlckIHCgVfcGFnZUISChBfdmVyc2lvbl9jb250ZXh0QhAKDl9taW5fY29uc2Vuc3VzIoEBChJMaXN0RXZlbnRzUmVzcG9uc2USLAoGZXZlbnRzGAEgAygLMhcudGhydS5zZXJ2aWNlcy52MS5FdmVudEID4EEBEjQKBHBhZ2UYAiABKAsyHC50aHJ1LmNvbW1vbi52MS5QYWdlUmVzcG9uc2VCA+BBAUgAiAEBQgcKBV9wYWdlIvICChdMaXN0VHJhbnNhY3Rpb25zUmVxdWVzdBIwCgZmaWx0ZXIYASABKAsyFi50aHJ1LmNvbW1vbi52MS5GaWx0ZXJCA+BBAUgAiAEBEjMKBHBhZ2UYAiABKAsyGy50aHJ1LmNvbW1vbi52MS5QYWdlUmVxdWVzdEID4EEBSAGIAQESHwoNcmV0dXJuX2V2ZW50cxgDIAEoCEID4EEBSAKIAQESQQoPdmVyc2lvbl9jb250ZXh0GAQgASgLMh4udGhydS5jb21tb24udjEuVmVyc2lvbkNvbnRleHRCA+BBAUgDiAEBEkAKDW1pbl9jb25zZW5zdXMYBSABKA4yHy50aHJ1LmNvbW1vbi52MS5Db25zZW5zdXNTdGF0dXNCA+BBAUgEiAEBQgkKB19maWx0ZXJCBwoFX3BhZ2VCEAoOX3JldHVybl9ldmVudHNCEgoQX3ZlcnNpb25fY29udGV4dEIQCg5fbWluX2NvbnNlbnN1cyKPAQoYTGlzdFRyYW5zYWN0aW9uc1Jlc3BvbnNlEjQKDHRyYW5zYWN0aW9ucxgBIAMoCzIZLnRocnUuY29yZS52MS5UcmFuc2FjdGlvbkID4EEBEjQKBHBhZ2UYAiABKAsyHC50aHJ1LmNvbW1vbi52MS5QYWdlUmVzcG9uc2VCA+BBAUgAiAEBQgcKBV9wYWdlIlAKG0dldFRyYW5zYWN0aW9uU3RhdHVzUmVxdWVzdBIxCglzaWduYXR1cmUYASABKAsyGS50aHJ1LmNvbW1vbi52MS5TaWduYXR1cmVCA+BBAiKDAgoRVHJhbnNhY3Rpb25TdGF0dXMSMQoJc2lnbmF0dXJlGAEgASgLMhkudGhydS5jb21tb24udjEuU2lnbmF0dXJlQgPgQQISQwoQY29uc2Vuc3VzX3N0YXR1cxgCIAEoDjIfLnRocnUuY29tbW9uLnYxLkNvbnNlbnN1c1N0YXR1c0ID4EEBSACIAQESTAoQZXhlY3V0aW9uX3Jlc3VsdBgDIAEoCzIoLnRocnUuY29yZS52MS5UcmFuc2FjdGlvbkV4ZWN1dGlvblJlc3VsdEID4EEBSAGIAQFCEwoRX2NvbnNlbnN1c19zdGF0dXNCEwoRX2V4ZWN1dGlvbl9yZXN1bHQiEgoQR2V0SGVpZ2h0UmVxdWVzdCJpChFHZXRIZWlnaHRSZXNwb25zZRIWCglmaW5hbGl6ZWQYASABKARCA+BBAhIdChBsb2NhbGx5X2V4ZWN1dGVkGAIgASgEQgPgQQISHQoQY2x1c3Rlcl9leGVjdXRlZBgDIAEoBEID4EECMpwRCgxRdWVyeVNlcnZpY2USaAoJR2V0SGVpZ2h0EiIudGhydS5zZXJ2aWNlcy52MS5HZXRIZWlnaHRSZXF1ZXN0GiMudGhydS5zZXJ2aWNlcy52MS5HZXRIZWlnaHRSZXNwb25zZSISgtPkkwIMEgovdjEvaGVpZ2h0EngKCkdldEFjY291bnQSIy50aHJ1LnNlcnZpY2VzLnYxLkdldEFjY291bnRSZXF1ZXN0GhUudGhydS5jb3JlLnYxLkFjY291bnQiLtpBB2FkZHJlc3OC0+STAh4SHC92MS9hY2NvdW50cy97YWRkcmVzcy52YWx1ZX0ShQEKDUdldFJhd0FjY291bnQSJi50aHJ1LnNlcnZpY2VzLnYxLkdldFJhd0FjY291bnRSZXF1ZXN0GhgudGhydS5jb3JlLnYxLlJhd0FjY291bnQiMtpBB2FkZHJlc3OC0+STAiISIC92MS9hY2NvdW50cy97YWRkcmVzcy52YWx1ZX06cmF3EowBCg5HZXRUcmFuc2FjdGlvbhInLnRocnUuc2VydmljZXMudjEuR2V0VHJhbnNhY3Rpb25SZXF1ZXN0GhkudGhydS5jb3JlLnYxLlRyYW5zYWN0aW9uIjbaQQlzaWduYXR1cmWC0+STAiQSIi92MS90cmFuc2FjdGlvbnMve3NpZ25hdHVyZS52YWx1ZX0SmQEKEUdldFJhd1RyYW5zYWN0aW9uEioudGhydS5zZXJ2aWNlcy52MS5HZXRSYXdUcmFuc2FjdGlvblJlcXVlc3QaHC50aHJ1LmNvcmUudjEuUmF3VHJhbnNhY3Rpb24iOtpBCXNpZ25hdHVyZYLT5JMCKBImL3YxL3RyYW5zYWN0aW9ucy97c2lnbmF0dXJlLnZhbHVlfTpyYXcShgEKCEdldEJsb2NrEiEudGhydS5zZXJ2aWNlcy52MS5HZXRCbG9ja1JlcXVlc3QaEy50aHJ1LmNvcmUudjEuQmxvY2siQoLT5JMCPFonEiUvdjEvYmxvY2tzL2J5LWhhc2gve2Jsb2NrX2hhc2gudmFsdWV9EhEvdjEvYmxvY2tzL3tzbG90fRKXAQoLR2V0UmF3QmxvY2sSJC50aHJ1LnNlcnZpY2VzLnYxLkdldFJhd0Jsb2NrUmVxdWVzdBoWLnRocnUuY29yZS52MS5SYXdCbG9jayJKgtPkkwJEWisSKS92MS9ibG9ja3MvYnktaGFzaC97YmxvY2tfaGFzaC52YWx1ZX06cmF3EhUvdjEvYmxvY2tzL3tzbG90fTpyYXcScwoMTGlzdEFjY291bnRzEiUudGhydS5zZXJ2aWNlcy52MS5MaXN0QWNjb3VudHNSZXF1ZXN0GiYudGhydS5zZXJ2aWNlcy52MS5MaXN0QWNjb3VudHNSZXNwb25zZSIUgtPkkwIOEgwvdjEvYWNjb3VudHMSawoKTGlzdEJsb2NrcxIjLnRocnUuc2VydmljZXMudjEuTGlzdEJsb2Nrc1JlcXVlc3QaJC50aHJ1LnNlcnZpY2VzLnYxLkxpc3RCbG9ja3NSZXNwb25zZSISgtPkkwIMEgovdjEvYmxvY2tzEsQBChpMaXN0VHJhbnNhY3Rpb25zRm9yQWNjb3VudBIzLnRocnUuc2VydmljZXMudjEuTGlzdFRyYW5zYWN0aW9uc0ZvckFjY291bnRSZXF1ZXN0GjQudGhydS5zZXJ2aWNlcy52MS5MaXN0VHJhbnNhY3Rpb25zRm9yQWNjb3VudFJlc3BvbnNlIjvaQQdhY2NvdW50gtPkkwIrEikvdjEvYWNjb3VudHMve2FjY291bnQudmFsdWV9L3RyYW5zYWN0aW9ucxJwCghHZXRFdmVudBIhLnRocnUuc2VydmljZXMudjEuR2V0RXZlbnRSZXF1ZXN0GhcudGhydS5zZXJ2aWNlcy52MS5FdmVudCIo2kEIZXZlbnRfaWSC0+STAhcSFS92MS9ldmVudHMve2V2ZW50X2lkfRJrCgpMaXN0RXZlbnRzEiMudGhydS5zZXJ2aWNlcy52MS5MaXN0RXZlbnRzUmVxdWVzdBokLnRocnUuc2VydmljZXMudjEuTGlzdEV2ZW50c1Jlc3BvbnNlIhKC0+STAgwSCi92MS9ldmVudHMSgwEKEExpc3RUcmFuc2FjdGlvbnMSKS50aHJ1LnNlcnZpY2VzLnYxLkxpc3RUcmFuc2FjdGlvbnNSZXF1ZXN0GioudGhydS5zZXJ2aWNlcy52MS5MaXN0VHJhbnNhY3Rpb25zUmVzcG9uc2UiGILT5JMCEhIQL3YxL3RyYW5zYWN0aW9ucxKpAQoUR2V0VHJhbnNhY3Rpb25TdGF0dXMSLS50aHJ1LnNlcnZpY2VzLnYxLkdldFRyYW5zYWN0aW9uU3RhdHVzUmVxdWVzdBojLnRocnUuc2VydmljZXMudjEuVHJhbnNhY3Rpb25TdGF0dXMiPdpBCXNpZ25hdHVyZYLT5JMCKxIpL3YxL3RyYW5zYWN0aW9ucy97c2lnbmF0dXJlLnZhbHVlfTpzdGF0dXMSlAEKEkdlbmVyYXRlU3RhdGVQcm9vZhIrLnRocnUuc2VydmljZXMudjEuR2VuZXJhdGVTdGF0ZVByb29mUmVxdWVzdBosLnRocnUuc2VydmljZXMudjEuR2VuZXJhdGVTdGF0ZVByb29mUmVzcG9uc2UiI4LT5JMCHToBKiIYL3YxL3N0YXRlcHJvb2ZzOmdlbmVyYXRlEmwKCkdldFZlcnNpb24SIy50aHJ1LnNlcnZpY2VzLnYxLkdldFZlcnNpb25SZXF1ZXN0GiQudGhydS5zZXJ2aWNlcy52MS5HZXRWZXJzaW9uUmVzcG9uc2UiE4LT5JMCDRILL3YxL3ZlcnNpb24aE8pBEGFwaS50aHJ1Lm5ldHdvcmtC3AEKFGNvbS50aHJ1LnNlcnZpY2VzLnYxQhFRdWVyeVNlcnZpY2VQcm90b1ABWkhnaXRodWIuY29tL1VudG8tTGFicy90aHJ1LW5ldC9ncnBjL3BrZy9wcm90by90aHJ1L3NlcnZpY2VzL3YxO3NlcnZpY2VzdjGiAgNUU1iqAhBUaHJ1LlNlcnZpY2VzLlYxugIEVEhVU8oCEFRocnVcU2VydmljZXNcVjHiAhxUaHJ1XFNlcnZpY2VzXFYxXEdQQk1ldGFkYXRh6gISVGhydTo6U2VydmljZXM6OlYxYgZwcm90bzM", [file_buf_validate_validate, file_google_api_annotations, file_google_api_client, file_google_api_field_behavior, file_google_protobuf_timestamp, file_thru_common_v1_consensus, file_thru_common_v1_filters, file_thru_common_v1_pagination, file_thru_common_v1_primitives, file_thru_core_v1_account, file_thru_core_v1_block, file_thru_core_v1_state, file_thru_core_v1_transaction, file_thru_core_v1_types]);
994
1090
  var GetAccountRequestSchema = /* @__PURE__ */ messageDesc(file_thru_services_v1_query_service, 0);
995
1091
  var GetRawAccountRequestSchema = /* @__PURE__ */ messageDesc(file_thru_services_v1_query_service, 1);
996
1092
  var GetTransactionRequestSchema = /* @__PURE__ */ messageDesc(file_thru_services_v1_query_service, 2);
@@ -1120,7 +1216,7 @@ var AccountMeta = class _AccountMeta {
1120
1216
  this.flags = params.flags ?? new AccountFlags();
1121
1217
  this.dataSize = params.dataSize;
1122
1218
  this.seq = params.seq;
1123
- this.owner = params.owner ? copyKey2(params.owner) : void 0;
1219
+ this.owner = params.owner;
1124
1220
  this.balance = params.balance;
1125
1221
  this.nonce = params.nonce;
1126
1222
  }
@@ -1133,7 +1229,7 @@ var AccountMeta = class _AccountMeta {
1133
1229
  flags: AccountFlags.fromProto(meta.flags),
1134
1230
  dataSize: meta.dataSize,
1135
1231
  seq: meta.seq ?? 0n,
1136
- owner: protoPubkeyToAccountAddress(meta.owner),
1232
+ owner: meta.owner ? Pubkey.fromProtoPubkey(meta.owner) : void 0,
1137
1233
  balance: meta.balance ?? 0n,
1138
1234
  nonce: meta.nonce
1139
1235
  });
@@ -1158,7 +1254,7 @@ var AccountData = class _AccountData {
1158
1254
  };
1159
1255
  var Account = class _Account {
1160
1256
  constructor(params) {
1161
- this.address = copyKey2(params.address);
1257
+ this.address = params.address;
1162
1258
  this.meta = params.meta;
1163
1259
  this.data = params.data;
1164
1260
  this.versionContext = params.versionContext;
@@ -1169,7 +1265,7 @@ var Account = class _Account {
1169
1265
  throw new Error("Account proto missing address");
1170
1266
  }
1171
1267
  return new _Account({
1172
- address: protoPubkeyToAccountAddress(proto.address),
1268
+ address: Pubkey.fromProtoPubkey(proto.address),
1173
1269
  meta: AccountMeta.fromProto(proto.meta),
1174
1270
  data: AccountData.fromProto(proto.data ?? void 0),
1175
1271
  versionContext: convertVersionContext(proto.versionContext),
@@ -1186,11 +1282,6 @@ function convertVersionContext(meta) {
1186
1282
  blockTimestampNs: timestampToNanoseconds(meta.blockTimestamp)
1187
1283
  };
1188
1284
  }
1189
- function copyKey2(source) {
1190
- const bytes = new Uint8Array(source.length);
1191
- bytes.set(source);
1192
- return bytes;
1193
- }
1194
1285
 
1195
1286
  // thru-ts-client-sdk/domain/accounts/streaming.ts
1196
1287
  function toStreamAccountUpdate(response) {
@@ -1289,122 +1380,10 @@ var PageResponse = class _PageResponse {
1289
1380
  }
1290
1381
  };
1291
1382
 
1292
- // thru-ts-client-sdk/domain/height/HeightSnapshot.ts
1293
- var HeightSnapshot = class _HeightSnapshot {
1294
- constructor(params) {
1295
- this.finalized = params.finalized;
1296
- this.locallyExecuted = params.locallyExecuted;
1297
- this.clusterExecuted = params.clusterExecuted;
1298
- }
1299
- static fromProto(proto) {
1300
- return new _HeightSnapshot({
1301
- finalized: proto.finalized ?? 0n,
1302
- locallyExecuted: proto.locallyExecuted ?? 0n,
1303
- clusterExecuted: proto.clusterExecuted ?? 0n
1304
- });
1305
- }
1306
- delta(other) {
1307
- return {
1308
- finalized: this.finalized - other.finalized,
1309
- locallyExecuted: this.locallyExecuted - other.locallyExecuted,
1310
- clusterExecuted: this.clusterExecuted - other.clusterExecuted
1311
- };
1312
- }
1313
- };
1314
-
1315
- // thru-ts-client-sdk/modules/height.ts
1316
- var height_exports = {};
1317
- __export(height_exports, {
1318
- getBlockHeight: () => getBlockHeight
1319
- });
1320
- function getBlockHeight(ctx) {
1321
- const request = create(GetHeightRequestSchema);
1322
- return ctx.query.getHeight(request, withCallOptions(ctx)).then((proto) => HeightSnapshot.fromProto(proto));
1323
- }
1324
- function toSignature(value) {
1325
- return toSignatureProto(value);
1326
- }
1327
- function toSignatureBytes(value) {
1328
- return signatureBytesFromInput(value);
1329
- }
1330
- function toTsSignature(value, field = "tsSignature") {
1331
- if (typeof value === "string" && value.startsWith("ts")) {
1332
- return toTsSignatureProto(value, field);
1333
- }
1334
- return toTsSignatureProto(signatureBytesFromInput(value, field), field);
1335
- }
1336
- function toPubkey(value, field) {
1337
- return toPubkeyProto(value, field);
1338
- }
1339
- function toPubkeyBytes(value, field) {
1340
- return pubkeyBytesFromInput(value, field);
1341
- }
1342
- function toTaPubkey(value, field = "taPubkey") {
1343
- if (typeof value === "string" && value.startsWith("ta")) {
1344
- return toTaPubkeyProto(value, field);
1345
- }
1346
- return toTaPubkeyProto(pubkeyBytesFromInput(value, field), field);
1347
- }
1348
- function toBlockHash(value) {
1349
- return create(BlockHashSchema, { value: ensureBytes(value, "blockHash") });
1350
- }
1351
- function deriveProgramAddress(options) {
1352
- const programAddress = normalizeProgramAddress(options.programAddress);
1353
- const seed = normalizeSeed(options.seed);
1354
- const ephemeral = options.ephemeral === true;
1355
- const derivationInput = new Uint8Array(programAddress.length + 1 + seed.length);
1356
- derivationInput.set(programAddress, 0);
1357
- derivationInput[programAddress.length] = ephemeral ? 1 : 0;
1358
- derivationInput.set(seed, programAddress.length + 1);
1359
- const hash = sha256(derivationInput);
1360
- const derivedBytes = new Uint8Array(hash.slice(0, 32));
1361
- return {
1362
- bytes: derivedBytes,
1363
- address: encodeAddress(derivedBytes)
1364
- };
1365
- }
1366
- function normalizeProgramAddress(value) {
1367
- return pubkeyBytesFromInput(value, "Program address");
1368
- }
1369
- function normalizeSeed(value) {
1370
- if (value instanceof Uint8Array) {
1371
- if (value.length === 0) {
1372
- throw new Error("Seed cannot be empty");
1373
- }
1374
- if (value.length > 32) {
1375
- throw new Error("Seed cannot exceed 32 bytes");
1376
- }
1377
- const seed = new Uint8Array(32);
1378
- seed.set(value);
1379
- return seed;
1380
- }
1381
- if (typeof value === "string") {
1382
- if (value.length === 0) {
1383
- throw new Error("Seed cannot be empty");
1384
- }
1385
- if (isHexString(value)) {
1386
- const bytes = hexToBytes(value);
1387
- if (bytes.length !== 32) {
1388
- throw new Error(`Hex seed must decode to 32 bytes, got ${bytes.length}`);
1389
- }
1390
- return bytes;
1391
- }
1392
- const encoder = new TextEncoder();
1393
- const utf8 = encoder.encode(value);
1394
- if (utf8.length > 32) {
1395
- throw new Error(`UTF-8 seed too long: ${utf8.length} bytes (max 32)`);
1396
- }
1397
- const seed = new Uint8Array(32);
1398
- seed.set(utf8);
1399
- return seed;
1400
- }
1401
- throw new Error("Seed must be provided as Uint8Array or string");
1402
- }
1403
-
1404
1383
  // thru-ts-client-sdk/domain/proofs/StateProof.ts
1405
1384
  var StateProof = class _StateProof {
1406
1385
  constructor(params) {
1407
- this.proof = copyBytes3(params.proof);
1386
+ this.proof = copyBytes4(params.proof);
1408
1387
  this.slot = params.slot;
1409
1388
  }
1410
1389
  static fromProto(proto) {
@@ -1414,7 +1393,7 @@ var StateProof = class _StateProof {
1414
1393
  });
1415
1394
  }
1416
1395
  };
1417
- function copyBytes3(bytes) {
1396
+ function copyBytes4(bytes) {
1418
1397
  const copy = new Uint8Array(bytes.length);
1419
1398
  copy.set(bytes);
1420
1399
  return copy;
@@ -1426,13 +1405,9 @@ __export(proofs_exports, {
1426
1405
  generateStateProof: () => generateStateProof
1427
1406
  });
1428
1407
  async function generateStateProof(ctx, options) {
1429
- let targetSlot = options.targetSlot;
1430
- if (targetSlot === void 0) {
1431
- const height = await getBlockHeight(ctx);
1432
- targetSlot = height.finalized;
1433
- }
1408
+ const targetSlot = options.targetSlot ?? 0n;
1434
1409
  const request = create(StateProofRequestSchema, {
1435
- address: options.address ? toPubkey(options.address, "address") : void 0,
1410
+ address: options.address ? Pubkey.from(options.address).toProtoPubkey() : void 0,
1436
1411
  proofType: options.proofType,
1437
1412
  targetSlot
1438
1413
  });
@@ -1457,7 +1432,7 @@ __export(accounts_exports, {
1457
1432
  });
1458
1433
  function getAccount(ctx, address, options = {}) {
1459
1434
  const request = create(GetAccountRequestSchema, {
1460
- address: toPubkey(address, "address"),
1435
+ address: Pubkey.from(address).toProtoPubkey(),
1461
1436
  view: options.view ?? DEFAULT_ACCOUNT_VIEW,
1462
1437
  versionContext: options.versionContext ?? DEFAULT_VERSION_CONTEXT,
1463
1438
  minConsensus: options.minConsensus ?? DEFAULT_MIN_CONSENSUS,
@@ -1467,7 +1442,7 @@ function getAccount(ctx, address, options = {}) {
1467
1442
  }
1468
1443
  function getRawAccount(ctx, address, options = {}) {
1469
1444
  const request = create(GetRawAccountRequestSchema, {
1470
- address: toPubkey(address, "address"),
1445
+ address: Pubkey.from(address).toProtoPubkey(),
1471
1446
  view: options.view ?? DEFAULT_ACCOUNT_VIEW,
1472
1447
  versionContext: options.versionContext ?? DEFAULT_VERSION_CONTEXT,
1473
1448
  minConsensus: options.minConsensus ?? DEFAULT_MIN_CONSENSUS
@@ -1488,20 +1463,19 @@ function listAccounts(ctx, options) {
1488
1463
  }));
1489
1464
  }
1490
1465
  async function createAccount(ctx, options) {
1491
- const feePayer = toPubkey(options.publicKey, "publicKey").value;
1492
- const height = await getBlockHeight(ctx);
1493
- const startSlot = height.finalized;
1466
+ const feePayer = Pubkey.from(options.publicKey).toBytes();
1494
1467
  const proofResponse = await generateStateProof(ctx, {
1495
1468
  address: options.publicKey,
1496
- proofType: 1 /* CREATING */,
1497
- targetSlot: startSlot
1469
+ proofType: 1 /* CREATING */
1470
+ // targetSlot omitted - server will auto-select
1498
1471
  });
1499
1472
  const proofBytes = proofResponse.proof;
1500
1473
  if (!proofBytes || proofBytes.length === 0) {
1501
1474
  throw new Error("State proof generation returned empty proof");
1502
1475
  }
1476
+ const startSlot = proofResponse.slot;
1503
1477
  const program = new Uint8Array(32);
1504
- program[31] = 2;
1478
+ program[31] = 3;
1505
1479
  const builder = new TransactionBuilder();
1506
1480
  const headerDefaults = {
1507
1481
  fee: 0n,
@@ -1554,21 +1528,23 @@ function toTrackTransactionUpdate(response) {
1554
1528
  // thru-ts-client-sdk/domain/blocks/BlockFooter.ts
1555
1529
  var BlockFooter = class _BlockFooter {
1556
1530
  constructor(params) {
1557
- this.signature = copyBytes4(params.signature);
1531
+ this.signature = copyBytes5(params.signature);
1558
1532
  this.status = params.status;
1559
1533
  this.consumedComputeUnits = params.consumedComputeUnits;
1560
1534
  this.consumedStateUnits = params.consumedStateUnits;
1535
+ this.attestorPayment = params.attestorPayment;
1561
1536
  }
1562
1537
  static fromProto(proto) {
1563
1538
  return new _BlockFooter({
1564
1539
  signature: proto.signature?.value,
1565
1540
  status: proto.status ?? 0 /* UNSPECIFIED */,
1566
1541
  consumedComputeUnits: proto.consumedComputeUnits ?? 0n,
1567
- consumedStateUnits: proto.consumedStateUnits ?? 0
1542
+ consumedStateUnits: proto.consumedStateUnits ?? 0,
1543
+ attestorPayment: proto.attestorPayment ?? 0n
1568
1544
  });
1569
1545
  }
1570
1546
  };
1571
- function copyBytes4(bytes) {
1547
+ function copyBytes5(bytes) {
1572
1548
  if (!bytes) return void 0;
1573
1549
  const out = new Uint8Array(bytes.length);
1574
1550
  out.set(bytes);
@@ -1580,16 +1556,17 @@ var BlockHeader = class _BlockHeader {
1580
1556
  constructor(params) {
1581
1557
  this.slot = params.slot;
1582
1558
  this.version = params.version;
1583
- this.headerSignature = copyBytes5(params.headerSignature);
1584
- this.producer = copyBytes5(params.producer);
1559
+ this.headerSignature = copyBytes6(params.headerSignature);
1560
+ this.producer = copyBytes6(params.producer);
1585
1561
  this.expiryTimestamp = params.expiryTimestamp;
1586
1562
  this.startSlot = params.startSlot;
1587
1563
  this.expiryAfter = params.expiryAfter;
1588
1564
  this.maxBlockSize = params.maxBlockSize;
1589
1565
  this.maxComputeUnits = params.maxComputeUnits;
1590
1566
  this.maxStateUnits = params.maxStateUnits;
1591
- this.price = params.price;
1592
- this.blockHash = copyBytes5(params.blockHash);
1567
+ this.bondAmountLockUp = params.bondAmountLockUp;
1568
+ this.weightSlot = params.weightSlot;
1569
+ this.blockHash = copyBytes6(params.blockHash);
1593
1570
  }
1594
1571
  static fromProto(proto) {
1595
1572
  return new _BlockHeader({
@@ -1603,7 +1580,8 @@ var BlockHeader = class _BlockHeader {
1603
1580
  maxBlockSize: proto.maxBlockSize,
1604
1581
  maxComputeUnits: proto.maxComputeUnits,
1605
1582
  maxStateUnits: proto.maxStateUnits,
1606
- price: proto.price,
1583
+ bondAmountLockUp: proto.bondAmountLockUp,
1584
+ weightSlot: proto.weightSlot,
1607
1585
  blockHash: proto.blockHash?.value
1608
1586
  });
1609
1587
  }
@@ -1619,12 +1597,13 @@ var BlockHeader = class _BlockHeader {
1619
1597
  maxBlockSize: this.maxBlockSize,
1620
1598
  maxComputeUnits: this.maxComputeUnits,
1621
1599
  maxStateUnits: this.maxStateUnits,
1622
- price: this.price,
1600
+ bondAmountLockUp: this.bondAmountLockUp,
1601
+ weightSlot: this.weightSlot,
1623
1602
  blockHash
1624
1603
  });
1625
1604
  }
1626
1605
  };
1627
- function copyBytes5(bytes) {
1606
+ function copyBytes6(bytes) {
1628
1607
  if (!bytes) return void 0;
1629
1608
  const out = new Uint8Array(bytes.length);
1630
1609
  out.set(bytes);
@@ -1632,9 +1611,9 @@ function copyBytes5(bytes) {
1632
1611
  }
1633
1612
 
1634
1613
  // thru-ts-client-sdk/domain/blocks/Block.ts
1635
- var BLOCK_HASH_SIZE = 64;
1614
+ var BLOCK_HASH_SIZE = 32;
1636
1615
  var RESERVED_FOOTER_PADDING = 0n;
1637
- var SIGNATURE_PREFIX_SIZE2 = SIGNATURE_SIZE;
1616
+ var SIGNATURE_PREFIX_SIZE2 = SIGNATURE_SIZE2;
1638
1617
  var Block = class _Block {
1639
1618
  constructor(params) {
1640
1619
  this.header = params.header;
@@ -1654,7 +1633,7 @@ var Block = class _Block {
1654
1633
  body: transactionBody,
1655
1634
  consensusStatus: proto.consensusStatus
1656
1635
  });
1657
- block.attestorPayment = block.footer?.consumedComputeUnits ?? 0n;
1636
+ block.attestorPayment = block.footer?.attestorPayment ?? 0n;
1658
1637
  return block;
1659
1638
  }
1660
1639
  static fromWire(data) {
@@ -1721,7 +1700,7 @@ var Block = class _Block {
1721
1700
  const buffer = new ArrayBuffer(BLOCK_HEADER_SIZE);
1722
1701
  const bytes = new Uint8Array(buffer);
1723
1702
  const view = new DataView(buffer);
1724
- const signature = normalizeBytes(this.header.headerSignature, SIGNATURE_SIZE);
1703
+ const signature = normalizeBytes(this.header.headerSignature, SIGNATURE_SIZE2);
1725
1704
  bytes.set(signature, 0);
1726
1705
  let offset = SIGNATURE_PREFIX_SIZE2;
1727
1706
  const version = this.header.version ?? BLOCK_VERSION_V1;
@@ -1729,10 +1708,10 @@ var Block = class _Block {
1729
1708
  offset += 1;
1730
1709
  bytes.fill(0, offset, offset + 7);
1731
1710
  offset += 7;
1732
- const producer = normalizeBytes(this.header.producer, PUBKEY_SIZE);
1711
+ const producer = normalizeBytes(this.header.producer, PUBKEY_SIZE2);
1733
1712
  bytes.set(producer, offset);
1734
- offset += PUBKEY_SIZE;
1735
- const bondAmountLockUp = this.header.price ?? 0n;
1713
+ offset += PUBKEY_SIZE2;
1714
+ const bondAmountLockUp = this.header.bondAmountLockUp ?? 0n;
1736
1715
  view.setBigUint64(offset, bondAmountLockUp, true);
1737
1716
  offset += 8;
1738
1717
  const expiryTimestampNs = timestampToNanoseconds(this.header.expiryTimestamp);
@@ -1759,11 +1738,11 @@ var Block = class _Block {
1759
1738
  const buffer = new ArrayBuffer(BLOCK_FOOTER_SIZE);
1760
1739
  const bytes = new Uint8Array(buffer);
1761
1740
  const view = new DataView(buffer);
1762
- const attestorPayment = this.footer?.consumedComputeUnits ?? this.attestorPayment ?? RESERVED_FOOTER_PADDING;
1741
+ const attestorPayment = this.footer?.attestorPayment ?? this.attestorPayment ?? RESERVED_FOOTER_PADDING;
1763
1742
  view.setBigUint64(0, attestorPayment, true);
1764
1743
  const blockHash = normalizeBytes(this.header.blockHash, BLOCK_HASH_SIZE);
1765
1744
  bytes.set(blockHash, 8);
1766
- const signature = normalizeBytes(this.footer?.signature, SIGNATURE_SIZE);
1745
+ const signature = normalizeBytes(this.footer?.signature, SIGNATURE_SIZE2);
1767
1746
  bytes.set(signature, 8 + BLOCK_HASH_SIZE);
1768
1747
  return bytes;
1769
1748
  }
@@ -1773,13 +1752,13 @@ var Block = class _Block {
1773
1752
  }
1774
1753
  const view = new DataView(bytes.buffer, bytes.byteOffset, bytes.byteLength);
1775
1754
  let offset = 0;
1776
- const signature = bytes.slice(offset, offset + SIGNATURE_SIZE);
1777
- offset += SIGNATURE_SIZE;
1755
+ const signature = bytes.slice(offset, offset + SIGNATURE_SIZE2);
1756
+ offset += SIGNATURE_SIZE2;
1778
1757
  const version = view.getUint8(offset);
1779
1758
  offset += 1;
1780
1759
  offset += 7;
1781
- const producer = bytes.slice(offset, offset + PUBKEY_SIZE);
1782
- offset += PUBKEY_SIZE;
1760
+ const producer = bytes.slice(offset, offset + PUBKEY_SIZE2);
1761
+ offset += PUBKEY_SIZE2;
1783
1762
  const bondAmountLockUp = view.getBigUint64(offset, true);
1784
1763
  offset += 8;
1785
1764
  const expiryTimestampNs = view.getBigUint64(offset, true);
@@ -1807,7 +1786,7 @@ var Block = class _Block {
1807
1786
  maxBlockSize,
1808
1787
  maxComputeUnits,
1809
1788
  maxStateUnits,
1810
- price: bondAmountLockUp
1789
+ bondAmountLockUp
1811
1790
  });
1812
1791
  return { header, blockTimeNs };
1813
1792
  }
@@ -1821,12 +1800,13 @@ var Block = class _Block {
1821
1800
  offset += 8;
1822
1801
  const blockHash = bytes.slice(offset, offset + BLOCK_HASH_SIZE);
1823
1802
  offset += BLOCK_HASH_SIZE;
1824
- const signature = bytes.slice(offset, offset + SIGNATURE_SIZE);
1803
+ const signature = bytes.slice(offset, offset + SIGNATURE_SIZE2);
1825
1804
  const footer = new BlockFooter({
1826
1805
  signature,
1827
1806
  status: 0 /* UNSPECIFIED */,
1828
1807
  consumedComputeUnits: 0n,
1829
- consumedStateUnits: 0
1808
+ consumedStateUnits: 0,
1809
+ attestorPayment
1830
1810
  });
1831
1811
  return { footer, blockHash, attestorPayment };
1832
1812
  }
@@ -1848,6 +1828,62 @@ function normalizeBytes(bytes, size) {
1848
1828
  }
1849
1829
  return bytes;
1850
1830
  }
1831
+ function toBlockHash(value) {
1832
+ return create(BlockHashSchema, { value: ensureBytes(value, "blockHash") });
1833
+ }
1834
+ function deriveProgramAddress(options) {
1835
+ const programAddress = Pubkey.from(options.programAddress).toBytes();
1836
+ const seed = normalizeSeed(options.seed);
1837
+ const ephemeral = options.ephemeral === true;
1838
+ const derivationInput = new Uint8Array(
1839
+ programAddress.length + 1 + seed.length
1840
+ );
1841
+ derivationInput.set(programAddress, 0);
1842
+ derivationInput[programAddress.length] = ephemeral ? 1 : 0;
1843
+ derivationInput.set(seed, programAddress.length + 1);
1844
+ const hash = sha256(derivationInput);
1845
+ const derivedBytes = new Uint8Array(hash.slice(0, 32));
1846
+ return {
1847
+ bytes: derivedBytes,
1848
+ address: encodeAddress(derivedBytes)
1849
+ };
1850
+ }
1851
+ function normalizeSeed(value) {
1852
+ if (value instanceof Uint8Array) {
1853
+ if (value.length === 0) {
1854
+ throw new Error("Seed cannot be empty");
1855
+ }
1856
+ if (value.length > 32) {
1857
+ throw new Error("Seed cannot exceed 32 bytes");
1858
+ }
1859
+ const seed = new Uint8Array(32);
1860
+ seed.set(value);
1861
+ return seed;
1862
+ }
1863
+ if (typeof value === "string") {
1864
+ if (value.length === 0) {
1865
+ throw new Error("Seed cannot be empty");
1866
+ }
1867
+ if (isHexString(value)) {
1868
+ const bytes = hexToBytes(value);
1869
+ if (bytes.length !== 32) {
1870
+ throw new Error(
1871
+ `Hex seed must decode to 32 bytes, got ${bytes.length}`
1872
+ );
1873
+ }
1874
+ return bytes;
1875
+ }
1876
+ const encoder = new TextEncoder();
1877
+ const utf8 = encoder.encode(value);
1878
+ if (utf8.length > 32) {
1879
+ throw new Error(`UTF-8 seed too long: ${utf8.length} bytes (max 32)`);
1880
+ }
1881
+ const seed = new Uint8Array(32);
1882
+ seed.set(utf8);
1883
+ return seed;
1884
+ }
1885
+ throw new Error("Seed must be provided as Uint8Array or string");
1886
+ }
1851
1887
 
1852
1888
  // thru-ts-client-sdk/modules/blocks.ts
1853
1889
  var blocks_exports = {};
@@ -2005,9 +2041,9 @@ var ChainEvent = class _ChainEvent {
2005
2041
  throw new Error("ChainEvent id is required");
2006
2042
  }
2007
2043
  this.id = params.id;
2008
- this.transactionSignature = copyBytes6(params.transactionSignature);
2009
- this.program = copyBytes6(params.program);
2010
- this.payload = copyBytes6(params.payload);
2044
+ this.transactionSignature = copyBytes7(params.transactionSignature);
2045
+ this.program = copyBytes7(params.program);
2046
+ this.payload = copyBytes7(params.payload);
2011
2047
  this.slot = params.slot;
2012
2048
  this.callIndex = params.callIndex;
2013
2049
  this.programIndex = params.programIndex;
@@ -2039,7 +2075,7 @@ var ChainEvent = class _ChainEvent {
2039
2075
  });
2040
2076
  }
2041
2077
  };
2042
- function copyBytes6(input) {
2078
+ function copyBytes7(input) {
2043
2079
  if (!input) {
2044
2080
  return void 0;
2045
2081
  }
@@ -2071,6 +2107,39 @@ function getEvent(ctx, eventId, options = {}) {
2071
2107
  return ctx.query.getEvent(request, withCallOptions(ctx)).then((proto) => ChainEvent.fromQuery(proto));
2072
2108
  }
2073
2109
 
2110
+ // thru-ts-client-sdk/domain/height/HeightSnapshot.ts
2111
+ var HeightSnapshot = class _HeightSnapshot {
2112
+ constructor(params) {
2113
+ this.finalized = params.finalized;
2114
+ this.locallyExecuted = params.locallyExecuted;
2115
+ this.clusterExecuted = params.clusterExecuted;
2116
+ }
2117
+ static fromProto(proto) {
2118
+ return new _HeightSnapshot({
2119
+ finalized: proto.finalized ?? 0n,
2120
+ locallyExecuted: proto.locallyExecuted ?? 0n,
2121
+ clusterExecuted: proto.clusterExecuted ?? 0n
2122
+ });
2123
+ }
2124
+ delta(other) {
2125
+ return {
2126
+ finalized: this.finalized - other.finalized,
2127
+ locallyExecuted: this.locallyExecuted - other.locallyExecuted,
2128
+ clusterExecuted: this.clusterExecuted - other.clusterExecuted
2129
+ };
2130
+ }
2131
+ };
2132
+
2133
+ // thru-ts-client-sdk/modules/height.ts
2134
+ var height_exports = {};
2135
+ __export(height_exports, {
2136
+ getBlockHeight: () => getBlockHeight
2137
+ });
2138
+ function getBlockHeight(ctx) {
2139
+ const request = create(GetHeightRequestSchema);
2140
+ return ctx.query.getHeight(request, withCallOptions(ctx)).then((proto) => HeightSnapshot.fromProto(proto));
2141
+ }
2142
+
2074
2143
  // thru-ts-client-sdk/modules/keys.ts
2075
2144
  var keys_exports = {};
2076
2145
  __export(keys_exports, {
@@ -2129,7 +2198,7 @@ function streamBlocks(ctx, options = {}) {
2129
2198
  }
2130
2199
  function streamAccountUpdates(ctx, address, options = {}) {
2131
2200
  const request = create(StreamAccountUpdatesRequestSchema, {
2132
- address: toPubkey(address, "address"),
2201
+ address: Pubkey.from(address).toProtoPubkey(),
2133
2202
  view: options.view ?? DEFAULT_ACCOUNT_VIEW,
2134
2203
  filter: options.filter?.toProto()
2135
2204
  });
@@ -2180,7 +2249,7 @@ function streamEvents(ctx, options = {}) {
2180
2249
  function trackTransaction(ctx, signature, options = {}) {
2181
2250
  const timeoutMs = options.timeoutMs;
2182
2251
  const request = create(TrackTransactionRequestSchema, {
2183
- signature: toSignature(signature),
2252
+ signature: Signature.from(signature).toProtoSignature(),
2184
2253
  timeout: timeoutMs != null ? {
2185
2254
  seconds: BigInt(Math.floor(timeoutMs / 1e3)),
2186
2255
  nanos: timeoutMs % 1e3 * 1e6
@@ -2253,7 +2322,7 @@ __export(transactions_exports, {
2253
2322
  });
2254
2323
  async function getTransaction(ctx, signature, options = {}) {
2255
2324
  const request = create(GetTransactionRequestSchema, {
2256
- signature: toSignature(signature),
2325
+ signature: Signature.from(signature).toProtoSignature(),
2257
2326
  view: options.view ?? DEFAULT_TRANSACTION_VIEW,
2258
2327
  versionContext: options.versionContext ?? DEFAULT_VERSION_CONTEXT,
2259
2328
  minConsensus: options.minConsensus ?? DEFAULT_MIN_CONSENSUS
@@ -2263,7 +2332,7 @@ async function getTransaction(ctx, signature, options = {}) {
2263
2332
  }
2264
2333
  async function getRawTransaction(ctx, signature, options = {}) {
2265
2334
  const request = create(GetRawTransactionRequestSchema, {
2266
- signature: toSignature(signature),
2335
+ signature: Signature.from(signature).toProtoSignature(),
2267
2336
  versionContext: options.versionContext ?? DEFAULT_VERSION_CONTEXT,
2268
2337
  minConsensus: options.minConsensus ?? DEFAULT_MIN_CONSENSUS
2269
2338
  });
@@ -2271,14 +2340,14 @@ async function getRawTransaction(ctx, signature, options = {}) {
2271
2340
  }
2272
2341
  async function getTransactionStatus(ctx, signature) {
2273
2342
  const request = create(GetTransactionStatusRequestSchema, {
2274
- signature: toSignature(signature)
2343
+ signature: Signature.from(signature).toProtoSignature()
2275
2344
  });
2276
2345
  const proto = await ctx.query.getTransactionStatus(request, withCallOptions(ctx));
2277
2346
  return TransactionStatusSnapshot.fromProto(proto);
2278
2347
  }
2279
2348
  async function listTransactionsForAccount(ctx, account, options = {}) {
2280
2349
  const request = create(ListTransactionsForAccountRequestSchema, {
2281
- account: toPubkey(account, "account"),
2350
+ account: Pubkey.from(account).toProtoPubkey(),
2282
2351
  filter: options.filter?.toProto(),
2283
2352
  page: options.page?.toProto()
2284
2353
  });
@@ -2286,12 +2355,13 @@ async function listTransactionsForAccount(ctx, account, options = {}) {
2286
2355
  request,
2287
2356
  withCallOptions(ctx)
2288
2357
  );
2358
+ const protoTransactionSignatures = (response.transactions ?? []).map((transaction) => transaction.signature);
2289
2359
  const transactions = await Promise.all(
2290
- response.signatures.map((signatureMessage) => {
2291
- if (!signatureMessage.value) {
2360
+ protoTransactionSignatures.map((signature) => {
2361
+ if (!signature) {
2292
2362
  throw new Error("ListTransactionsForAccount returned an empty signature");
2293
2363
  }
2294
- return getTransaction(ctx, signatureMessage.value, options.transactionOptions);
2364
+ return getTransaction(ctx, signature.value, options.transactionOptions);
2295
2365
  })
2296
2366
  );
2297
2367
  return {
@@ -2338,8 +2408,8 @@ function createTransactionBuilder() {
2338
2408
  return new TransactionBuilder();
2339
2409
  }
2340
2410
  async function createBuildParams(ctx, options) {
2341
- const feePayerPublicKey = parseAccountIdentifier(options.feePayer.publicKey, "feePayer.publicKey");
2342
- const program = resolveProgramIdentifier(options.program);
2411
+ const feePayerPublicKey = Pubkey.from(options.feePayer.publicKey).toBytes();
2412
+ const program = Pubkey.from(options.program).toBytes();
2343
2413
  const header = await createTransactionHeader(ctx, options.header ?? {}, feePayerPublicKey);
2344
2414
  const accounts = parseAccounts(options.accounts);
2345
2415
  const context = createInstructionContext(feePayerPublicKey, program, accounts);
@@ -2350,7 +2420,7 @@ async function createBuildParams(ctx, options) {
2350
2420
  publicKey: feePayerPublicKey,
2351
2421
  privateKey: options.feePayer.privateKey
2352
2422
  },
2353
- program: options.program,
2423
+ program: Pubkey.from(options.program).toBytes(),
2354
2424
  header,
2355
2425
  accounts,
2356
2426
  instructionData,
@@ -2376,10 +2446,10 @@ function parseAccounts(accounts) {
2376
2446
  return void 0;
2377
2447
  }
2378
2448
  const readWrite = accounts.readWrite?.map(
2379
- (value, index) => parseAccountIdentifier(value, `accounts.readWrite[${index}]`)
2449
+ (value, index) => Pubkey.from(value).toBytes()
2380
2450
  );
2381
2451
  const readOnly = accounts.readOnly?.map(
2382
- (value, index) => parseAccountIdentifier(value, `accounts.readOnly[${index}]`)
2452
+ (value, index) => Pubkey.from(value).toBytes()
2383
2453
  );
2384
2454
  const result = {};
2385
2455
  if (readWrite && readWrite.length > 0) {
@@ -2395,25 +2465,14 @@ function parseAccounts(accounts) {
2395
2465
  }
2396
2466
  function createInstructionContext(feePayer, program, accounts) {
2397
2467
  const allAccounts = [
2398
- feePayer,
2399
- program,
2400
- ...accounts?.readWriteAccounts ?? [],
2401
- ...accounts?.readOnlyAccounts ?? []
2468
+ Pubkey.from(feePayer),
2469
+ Pubkey.from(program),
2470
+ ...accounts?.readWriteAccounts?.map((value) => Pubkey.from(value)) ?? [],
2471
+ ...accounts?.readOnlyAccounts?.map((value) => Pubkey.from(value)) ?? []
2402
2472
  ];
2403
- const accountsEqual = (a, b) => {
2404
- if (a.length !== 32 || b.length !== 32) {
2405
- return false;
2406
- }
2407
- for (let i = 0; i < 32; i++) {
2408
- if (a[i] !== b[i]) {
2409
- return false;
2410
- }
2411
- }
2412
- return true;
2413
- };
2414
2473
  const getAccountIndex = (pubkey) => {
2415
2474
  for (let i = 0; i < allAccounts.length; i++) {
2416
- if (accountsEqual(allAccounts[i], pubkey)) {
2475
+ if (allAccounts[i].equals(Pubkey.from(pubkey))) {
2417
2476
  return i;
2418
2477
  }
2419
2478
  }
@@ -2470,6 +2529,6 @@ var VersionInfo = class _VersionInfo {
2470
2529
  }
2471
2530
  };
2472
2531
 
2473
- export { Account, AccountView, Block, BlockView, ChainEvent, ConsensusStatus, ExecutionStatus, FilterParamValueSchema, FilterSchema, GetVersionRequestSchema, HeightSnapshot, PageRequest, PageResponse, StateProof, Transaction, TransactionBuilder, TransactionStatusSnapshot, TransactionView, TransactionVmError, VersionInfo, accounts_exports, batchSendTransactions, blocks_exports, buildAndSignTransaction, buildTransaction, collectStream, consensusStatusToString, consensus_exports, createAccount, createThruClientContext, currentOrHistoricalVersionContext, currentVersionContext, deriveProgramAddress, events_exports, firstStreamValue, forEachStreamValue, fromPrivateKey, generateKeyPair, generateStateProof, getAccount, getBlock, getBlockHeight, getEvent, getRawAccount, getRawBlock, getRawTransaction, getTransaction, getTransactionStatus, height_exports, keys_exports, listAccounts, listBlocks, listTransactionsForAccount, proofs_exports, protoPubkeyToBytes, protoSignatureToBytes, protoTaPubkeyToString, protoTsSignatureToString, pubkeyBytesFromInput, sendTransaction, seqVersionContext, signatureBytesFromInput, slotVersionContext, streamAccountUpdates, streamBlocks, streamEvents, streamTransactions, streaming_exports, timestampVersionContext, toBlockHash, toPubkey, toPubkeyBytes, toPubkeyProto, toSignature, toSignatureBytes, toSignatureProto, toTaPubkey, toTaPubkeyProto, toTsSignature, toTsSignatureProto, trackTransaction, transactions_exports, versionContext, withCallOptions };
2474
- //# sourceMappingURL=chunk-QJACP7VX.js.map
2475
- //# sourceMappingURL=chunk-QJACP7VX.js.map
2532
+ export { Account, AccountView, Block, BlockView, ChainEvent, ConsensusStatus, ExecutionStatus, FilterParamValueSchema, FilterSchema, GetVersionRequestSchema, HeightSnapshot, PageRequest, PageResponse, Pubkey, Signature, SignatureDomain, StateProof, Transaction, TransactionBuilder, TransactionStatusSnapshot, TransactionView, TransactionVmError, VersionInfo, accounts_exports, batchSendTransactions, blocks_exports, buildAndSignTransaction, buildTransaction, collectStream, consensusStatusToString, consensus_exports, createAccount, createThruClientContext, currentOrHistoricalVersionContext, currentVersionContext, deriveProgramAddress, events_exports, firstStreamValue, forEachStreamValue, fromPrivateKey, generateKeyPair, generateStateProof, getAccount, getBlock, getBlockHeight, getEvent, getRawAccount, getRawBlock, getRawTransaction, getTransaction, getTransactionStatus, height_exports, keys_exports, listAccounts, listBlocks, listTransactionsForAccount, proofs_exports, sendTransaction, seqVersionContext, signWithDomain, slotVersionContext, streamAccountUpdates, streamBlocks, streamEvents, streamTransactions, streaming_exports, timestampVersionContext, trackTransaction, transactions_exports, verifyWithDomain, versionContext, withCallOptions };
2533
+ //# sourceMappingURL=chunk-ZLV6WP54.js.map
2534
+ //# sourceMappingURL=chunk-ZLV6WP54.js.map