@silvana-one/mina-utils 0.2.0

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.
Files changed (174) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +1 -0
  3. package/dist/node/config.d.ts +4 -0
  4. package/dist/node/config.js +5 -0
  5. package/dist/node/config.js.map +1 -0
  6. package/dist/node/index.cjs +1325 -0
  7. package/dist/node/index.d.ts +6 -0
  8. package/dist/node/index.js +7 -0
  9. package/dist/node/index.js.map +1 -0
  10. package/dist/node/networks.d.ts +32 -0
  11. package/dist/node/networks.js +81 -0
  12. package/dist/node/networks.js.map +1 -0
  13. package/dist/node/storage/index.d.ts +2 -0
  14. package/dist/node/storage/index.js +3 -0
  15. package/dist/node/storage/index.js.map +1 -0
  16. package/dist/node/storage/ipfs.d.ts +5 -0
  17. package/dist/node/storage/ipfs.js +16 -0
  18. package/dist/node/storage/ipfs.js.map +1 -0
  19. package/dist/node/storage/pinata.d.ts +6 -0
  20. package/dist/node/storage/pinata.js +40 -0
  21. package/dist/node/storage/pinata.js.map +1 -0
  22. package/dist/node/transactions/account.d.ts +4 -0
  23. package/dist/node/transactions/account.js +44 -0
  24. package/dist/node/transactions/account.js.map +1 -0
  25. package/dist/node/transactions/blockberry.d.ts +21 -0
  26. package/dist/node/transactions/blockberry.js +130 -0
  27. package/dist/node/transactions/blockberry.js.map +1 -0
  28. package/dist/node/transactions/chain.d.ts +1 -0
  29. package/dist/node/transactions/chain.js +2 -0
  30. package/dist/node/transactions/chain.js.map +1 -0
  31. package/dist/node/transactions/index.d.ts +8 -0
  32. package/dist/node/transactions/index.js +9 -0
  33. package/dist/node/transactions/index.js.map +1 -0
  34. package/dist/node/transactions/nonce.d.ts +17 -0
  35. package/dist/node/transactions/nonce.js +91 -0
  36. package/dist/node/transactions/nonce.js.map +1 -0
  37. package/dist/node/transactions/send.d.ts +31 -0
  38. package/dist/node/transactions/send.js +154 -0
  39. package/dist/node/transactions/send.js.map +1 -0
  40. package/dist/node/transactions/tiny-contract.d.ts +5 -0
  41. package/dist/node/transactions/tiny-contract.js +22 -0
  42. package/dist/node/transactions/tiny-contract.js.map +1 -0
  43. package/dist/node/transactions/transaction.d.ts +21 -0
  44. package/dist/node/transactions/transaction.js +222 -0
  45. package/dist/node/transactions/transaction.js.map +1 -0
  46. package/dist/node/transactions/txstatus.d.ts +8 -0
  47. package/dist/node/transactions/txstatus.js +16 -0
  48. package/dist/node/transactions/txstatus.js.map +1 -0
  49. package/dist/node/utils/base64-field.d.ts +5 -0
  50. package/dist/node/utils/base64-field.js +29 -0
  51. package/dist/node/utils/base64-field.js.map +1 -0
  52. package/dist/node/utils/base64.d.ts +6 -0
  53. package/dist/node/utils/base64.js +83 -0
  54. package/dist/node/utils/base64.js.map +1 -0
  55. package/dist/node/utils/fee.d.ts +6 -0
  56. package/dist/node/utils/fee.js +11 -0
  57. package/dist/node/utils/fee.js.map +1 -0
  58. package/dist/node/utils/fetch.d.ts +44 -0
  59. package/dist/node/utils/fetch.js +101 -0
  60. package/dist/node/utils/fetch.js.map +1 -0
  61. package/dist/node/utils/fields.d.ts +13 -0
  62. package/dist/node/utils/fields.js +39 -0
  63. package/dist/node/utils/fields.js.map +1 -0
  64. package/dist/node/utils/index.d.ts +8 -0
  65. package/dist/node/utils/index.js +9 -0
  66. package/dist/node/utils/index.js.map +1 -0
  67. package/dist/node/utils/indexed-map.d.ts +32 -0
  68. package/dist/node/utils/indexed-map.js +124 -0
  69. package/dist/node/utils/indexed-map.js.map +1 -0
  70. package/dist/node/utils/mina.d.ts +39 -0
  71. package/dist/node/utils/mina.js +123 -0
  72. package/dist/node/utils/mina.js.map +1 -0
  73. package/dist/node/utils/utils.d.ts +8 -0
  74. package/dist/node/utils/utils.js +61 -0
  75. package/dist/node/utils/utils.js.map +1 -0
  76. package/dist/tsconfig.tsbuildinfo +1 -0
  77. package/dist/tsconfig.web.tsbuildinfo +1 -0
  78. package/dist/web/config.d.ts +4 -0
  79. package/dist/web/config.js +5 -0
  80. package/dist/web/config.js.map +1 -0
  81. package/dist/web/index.d.ts +6 -0
  82. package/dist/web/index.js +7 -0
  83. package/dist/web/index.js.map +1 -0
  84. package/dist/web/networks.d.ts +32 -0
  85. package/dist/web/networks.js +81 -0
  86. package/dist/web/networks.js.map +1 -0
  87. package/dist/web/storage/index.d.ts +2 -0
  88. package/dist/web/storage/index.js +3 -0
  89. package/dist/web/storage/index.js.map +1 -0
  90. package/dist/web/storage/ipfs.d.ts +5 -0
  91. package/dist/web/storage/ipfs.js +16 -0
  92. package/dist/web/storage/ipfs.js.map +1 -0
  93. package/dist/web/storage/pinata.d.ts +6 -0
  94. package/dist/web/storage/pinata.js +40 -0
  95. package/dist/web/storage/pinata.js.map +1 -0
  96. package/dist/web/transactions/account.d.ts +4 -0
  97. package/dist/web/transactions/account.js +44 -0
  98. package/dist/web/transactions/account.js.map +1 -0
  99. package/dist/web/transactions/blockberry.d.ts +21 -0
  100. package/dist/web/transactions/blockberry.js +130 -0
  101. package/dist/web/transactions/blockberry.js.map +1 -0
  102. package/dist/web/transactions/chain.d.ts +1 -0
  103. package/dist/web/transactions/chain.js +2 -0
  104. package/dist/web/transactions/chain.js.map +1 -0
  105. package/dist/web/transactions/index.d.ts +8 -0
  106. package/dist/web/transactions/index.js +9 -0
  107. package/dist/web/transactions/index.js.map +1 -0
  108. package/dist/web/transactions/nonce.d.ts +17 -0
  109. package/dist/web/transactions/nonce.js +91 -0
  110. package/dist/web/transactions/nonce.js.map +1 -0
  111. package/dist/web/transactions/send.d.ts +31 -0
  112. package/dist/web/transactions/send.js +154 -0
  113. package/dist/web/transactions/send.js.map +1 -0
  114. package/dist/web/transactions/tiny-contract.d.ts +5 -0
  115. package/dist/web/transactions/tiny-contract.js +22 -0
  116. package/dist/web/transactions/tiny-contract.js.map +1 -0
  117. package/dist/web/transactions/transaction.d.ts +21 -0
  118. package/dist/web/transactions/transaction.js +222 -0
  119. package/dist/web/transactions/transaction.js.map +1 -0
  120. package/dist/web/transactions/txstatus.d.ts +8 -0
  121. package/dist/web/transactions/txstatus.js +16 -0
  122. package/dist/web/transactions/txstatus.js.map +1 -0
  123. package/dist/web/utils/base64-field.d.ts +5 -0
  124. package/dist/web/utils/base64-field.js +29 -0
  125. package/dist/web/utils/base64-field.js.map +1 -0
  126. package/dist/web/utils/base64.d.ts +6 -0
  127. package/dist/web/utils/base64.js +83 -0
  128. package/dist/web/utils/base64.js.map +1 -0
  129. package/dist/web/utils/fee.d.ts +6 -0
  130. package/dist/web/utils/fee.js +11 -0
  131. package/dist/web/utils/fee.js.map +1 -0
  132. package/dist/web/utils/fetch.d.ts +44 -0
  133. package/dist/web/utils/fetch.js +101 -0
  134. package/dist/web/utils/fetch.js.map +1 -0
  135. package/dist/web/utils/fields.d.ts +13 -0
  136. package/dist/web/utils/fields.js +39 -0
  137. package/dist/web/utils/fields.js.map +1 -0
  138. package/dist/web/utils/index.d.ts +8 -0
  139. package/dist/web/utils/index.js +9 -0
  140. package/dist/web/utils/index.js.map +1 -0
  141. package/dist/web/utils/indexed-map.d.ts +32 -0
  142. package/dist/web/utils/indexed-map.js +124 -0
  143. package/dist/web/utils/indexed-map.js.map +1 -0
  144. package/dist/web/utils/mina.d.ts +39 -0
  145. package/dist/web/utils/mina.js +123 -0
  146. package/dist/web/utils/mina.js.map +1 -0
  147. package/dist/web/utils/utils.d.ts +8 -0
  148. package/dist/web/utils/utils.js +61 -0
  149. package/dist/web/utils/utils.js.map +1 -0
  150. package/package.json +62 -0
  151. package/src/config.ts +5 -0
  152. package/src/index.ts +6 -0
  153. package/src/networks.ts +130 -0
  154. package/src/storage/index.ts +2 -0
  155. package/src/storage/ipfs.ts +20 -0
  156. package/src/storage/pinata.ts +56 -0
  157. package/src/transactions/account.ts +57 -0
  158. package/src/transactions/blockberry.ts +198 -0
  159. package/src/transactions/chain.ts +1 -0
  160. package/src/transactions/index.ts +8 -0
  161. package/src/transactions/nonce.ts +121 -0
  162. package/src/transactions/send.ts +228 -0
  163. package/src/transactions/tiny-contract.ts +9 -0
  164. package/src/transactions/transaction.ts +319 -0
  165. package/src/transactions/txstatus.ts +26 -0
  166. package/src/utils/base64-field.ts +34 -0
  167. package/src/utils/base64.ts +87 -0
  168. package/src/utils/fee.ts +11 -0
  169. package/src/utils/fetch.ts +130 -0
  170. package/src/utils/fields.ts +39 -0
  171. package/src/utils/index.ts +8 -0
  172. package/src/utils/indexed-map.ts +170 -0
  173. package/src/utils/mina.ts +171 -0
  174. package/src/utils/utils.ts +79 -0
@@ -0,0 +1,154 @@
1
+ import { checkZkappTransaction } from "o1js";
2
+ import { sleep } from "../utils/utils.js";
3
+ import { fetchMinaAccount } from "../utils/fetch.js";
4
+ import { getCurrentNetwork } from "../utils/mina.js";
5
+ /**
6
+ * The function `sendTx` sends a transaction, checks account updates, and waits for
7
+ * confirmation on the blockchain.
8
+ * @param params The parameters object
9
+ * @param params.tx The transaction to send
10
+ * @param params.description A description of the transaction
11
+ * @param params.verbose Whether to log verbose information
12
+ * @param params.wait Whether to wait for the transaction to be included in a block
13
+ * @param params.chain The blockchain to send the transaction on
14
+ * @returns The `sendTx` function returns a `Mina.IncludedTransaction`, `Mina.PendingTransaction`,
15
+ * `Mina.RejectedTransaction`, or `undefined` if there was an error during the process.
16
+ */
17
+ export async function sendTx(params) {
18
+ const { tx, description = "", verbose = true, wait = true, chain = getCurrentNetwork().network.chainId, delay = chain === "zeko" || chain === "lightnet" ? 5000 : 60000, retry = 30, } = params;
19
+ // flatten accountUpdates
20
+ const accountUpdates = JSON.parse(tx.toJSON()).accountUpdates;
21
+ const auCount = [];
22
+ let proofAuthorizationCount = 0;
23
+ // Calculate the number of account updates for each { publicKey, tokenId }
24
+ for (const au of accountUpdates) {
25
+ const { publicKey, tokenId, authorizationKind } = au.body;
26
+ if (au.authorization.proof) {
27
+ proofAuthorizationCount++;
28
+ if (authorizationKind.isProved === false)
29
+ console.error("Proof authorization exists but isProved is false");
30
+ }
31
+ else if (authorizationKind.isProved === true)
32
+ console.error("isProved is true but no proof authorization");
33
+ const index = auCount.findIndex((item) => item.publicKey === publicKey && item.tokenId === tokenId);
34
+ if (index === -1)
35
+ auCount.push({ publicKey, tokenId, count: 1 });
36
+ else
37
+ auCount[index].count++;
38
+ }
39
+ if (verbose)
40
+ console.log(`Account updates for ${description ?? "tx"}: ${auCount.length}, proof authorizations: ${proofAuthorizationCount}`);
41
+ for (const au of auCount) {
42
+ if (au.count > 1)
43
+ if (verbose)
44
+ console.log(`DUPLICATE AU ${description ?? ""}: ${au.publicKey} ${au.tokenId !== "wSHV2S4qX9jFsLjQo8r1BsMLH2ZRKsZx6EJd1sbozGPieEC4Jf"
45
+ ? "tokenId: " + au.tokenId
46
+ : ""} count: ${au.count}`);
47
+ }
48
+ try {
49
+ let txSent;
50
+ let sent = false;
51
+ let attempt = 1;
52
+ while (!sent && attempt <= retry) {
53
+ txSent = await tx.safeSend();
54
+ if (txSent.status === "pending") {
55
+ sent = true;
56
+ if (verbose)
57
+ console.log(`${description ?? ""} tx sent: hash: ${txSent.hash} status: ${txSent.status}`);
58
+ }
59
+ else if (chain !== "local") {
60
+ attempt++;
61
+ console.error(`${description} tx NOT sent: hash: ${txSent?.hash} status: ${txSent?.status}, errors: ${String(txSent.errors ?? "")}`);
62
+ if (verbose)
63
+ console.log(`Retrying ${chain} tx, retry:`, attempt);
64
+ await sleep(10000 * attempt);
65
+ }
66
+ else
67
+ attempt = retry + 1; // local chain - do not retry
68
+ }
69
+ if (txSent === undefined)
70
+ throw new Error("txSent is undefined");
71
+ if ((txSent.errors?.length ?? 0) > 0) {
72
+ console.error(`${description ?? ""} tx error: hash: ${txSent.hash} status: ${txSent.status} errors: ${String(txSent.errors ?? "")}`);
73
+ }
74
+ if (txSent.status === "pending" && wait !== false && chain !== "zeko") {
75
+ if (verbose)
76
+ console.log(`Waiting for tx inclusion...`);
77
+ let txIncluded = await txSent.safeWait();
78
+ if (txIncluded.status !== "included") {
79
+ console.error(`${description ?? ""} tx NOT included into block: hash: ${txIncluded.hash} status: ${txIncluded.status}, errors: ${String(txIncluded.errors ?? "")}`);
80
+ }
81
+ if (chain !== "local") {
82
+ // we still wait for the tx to be included in the block by checking the nonce
83
+ // even in the case of tx NOT included
84
+ // because the tx might still be included in the block in the case of devnet instability
85
+ const { publicKey, nonce } = tx.transaction.feePayer.body;
86
+ const started = Date.now();
87
+ while (Date.now() - started < 1000 * 60 * 10) {
88
+ const newNonce = (await fetchMinaAccount({
89
+ publicKey,
90
+ force: true,
91
+ })).account?.nonce;
92
+ if (newNonce &&
93
+ Number(newNonce.toBigint()) > Number(nonce.toBigint())) {
94
+ let txIncluded = await txSent.safeWait();
95
+ if (txIncluded.status === "included") {
96
+ if (verbose)
97
+ console.log(`${description ?? ""} tx included into block: hash: ${txIncluded.hash} status: ${txIncluded.status}`);
98
+ if (delay > 0)
99
+ await sleep(delay);
100
+ return txIncluded;
101
+ }
102
+ else if (txIncluded.status === "rejected") {
103
+ // We never should see this error as the nonce is updated (except when tx failed due to a preconditions),
104
+ // so we retry to check if the tx is included
105
+ console.error(`tx rejected: ${chain}: hash: ${txIncluded.hash} status: ${txIncluded.status} errors: ${txIncluded.errors}`);
106
+ await sleep(30000);
107
+ txIncluded = await txSent.safeWait();
108
+ if (txIncluded.status === "included") {
109
+ if (verbose)
110
+ console.log(`${description ?? ""} tx included into block: hash: ${txIncluded.hash} status: ${txIncluded.status}`);
111
+ if (delay > 0)
112
+ await sleep(delay);
113
+ return txIncluded;
114
+ }
115
+ console.error(`tx failed: ${chain}: hash: ${txIncluded.hash} status: ${txIncluded.status} errors: ${txIncluded.errors}`);
116
+ return txIncluded;
117
+ }
118
+ }
119
+ if (verbose)
120
+ console.log(`Waiting for ${chain} to update state for ${Math.floor((Date.now() - started) / 1000)} sec...`);
121
+ await sleep(30000);
122
+ }
123
+ // finally, if the tx is still not included, show an error
124
+ console.error(`${chain} do not reflect nonce update for tx ${txIncluded.hash} with status ${txIncluded.status}`);
125
+ }
126
+ if (verbose)
127
+ console.log(`${description ?? ""} tx included into block: hash: ${txIncluded.hash} status: ${txIncluded.status}`);
128
+ return txIncluded;
129
+ }
130
+ else
131
+ return txSent;
132
+ }
133
+ catch (error) {
134
+ if (chain !== "zeko")
135
+ console.error("Error sending tx", error);
136
+ }
137
+ }
138
+ export async function getTxStatusFast(params) {
139
+ const { hash, chain = getCurrentNetwork().network.chainId } = params;
140
+ if (chain === "local" || chain === "zeko")
141
+ return { success: true, result: true };
142
+ try {
143
+ const txStatus = await checkZkappTransaction(hash);
144
+ return {
145
+ success: true,
146
+ result: txStatus?.success ?? false,
147
+ };
148
+ }
149
+ catch (error) {
150
+ console.error("getTxStatusFast error while getting tx status - catch", hash, error);
151
+ return { success: false, error: error?.message ?? "Cannot get tx status" };
152
+ }
153
+ }
154
+ //# sourceMappingURL=send.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"send.js","sourceRoot":"","sources":["../../../src/transactions/send.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ import { Field, SmartContract, State } from "o1js";
2
+ export declare class TinyContract extends SmartContract {
3
+ value: State<import("node_modules/o1js/dist/node/lib/provable/field.js").Field>;
4
+ setValue(value: Field): Promise<void>;
5
+ }
@@ -0,0 +1,22 @@
1
+ import { __decorate, __metadata } from "tslib";
2
+ import { Field, SmartContract, method, state, State } from "o1js";
3
+ export class TinyContract extends SmartContract {
4
+ constructor() {
5
+ super(...arguments);
6
+ this.value = State();
7
+ }
8
+ async setValue(value) {
9
+ this.value.set(value);
10
+ }
11
+ }
12
+ __decorate([
13
+ state(Field),
14
+ __metadata("design:type", Object)
15
+ ], TinyContract.prototype, "value", void 0);
16
+ __decorate([
17
+ method,
18
+ __metadata("design:type", Function),
19
+ __metadata("design:paramtypes", [Field]),
20
+ __metadata("design:returntype", Promise)
21
+ ], TinyContract.prototype, "setValue", null);
22
+ //# sourceMappingURL=tiny-contract.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tiny-contract.js","sourceRoot":"","sources":["../../../src/transactions/tiny-contract.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,KAAK,EAAE,aAAa,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,MAAM,CAAC;AAElE,MAAM,OAAO,YAAa,SAAQ,aAAa;IAA/C;;QACgB,UAAK,GAAG,KAAK,EAAS,CAAC;IAKvC,CAAC;IAHe,AAAN,KAAK,CAAC,QAAQ,CAAC,KAAY;QACjC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IACxB,CAAC;CACF;AALe;IAAb,KAAK,CAAC,KAAK,CAAC;;2CAAwB;AAEvB;IAAb,MAAM;;qCAAuB,KAAK;;4CAElC"}
@@ -0,0 +1,21 @@
1
+ import { PublicKey, Transaction, Mina, UInt64 } from "o1js";
2
+ import { TransactionPayloads } from "@silvana-one/api";
3
+ export declare function createTransactionPayloads(tx: Mina.Transaction<false, false> | Mina.Transaction<false, true>): TransactionPayloads;
4
+ export declare function transactionParams(params: {
5
+ proverPayload: string;
6
+ signedData: string;
7
+ } | TransactionPayloads): {
8
+ fee: UInt64;
9
+ sender: PublicKey;
10
+ nonce: number;
11
+ memo: string;
12
+ };
13
+ export declare function parseTransactionPayloads(params: {
14
+ proverPayload: string;
15
+ signedData: string;
16
+ txNew: Mina.Transaction<false, false> | Mina.Transaction<false, true>;
17
+ } | {
18
+ payloads: TransactionPayloads;
19
+ txNew: Mina.Transaction<false, false> | Mina.Transaction<false, true>;
20
+ }): Transaction<false, true>;
21
+ export declare function serializeTransaction(tx: Mina.Transaction<false, false> | Mina.Transaction<false, true>): string;
@@ -0,0 +1,222 @@
1
+ import { Field, PublicKey, Mina, UInt64 } from "o1js";
2
+ import { fieldToBase64, fieldFromBase64 } from "../utils/base64-field.js";
3
+ export function createTransactionPayloads(tx) {
4
+ const transaction = tx.toJSON();
5
+ const txJSON = JSON.parse(transaction);
6
+ const signedData = JSON.stringify({ zkappCommand: txJSON });
7
+ const proverPayload = serializeTransaction(tx);
8
+ const fee = tx.transaction.feePayer.body.fee.toJSON();
9
+ const sender = tx.transaction.feePayer.body.publicKey.toBase58();
10
+ const nonce = Number(tx.transaction.feePayer.body.nonce.toBigint());
11
+ const memo = tx.transaction.memo;
12
+ const minaSignerPayload = {
13
+ zkappCommand: txJSON,
14
+ feePayer: {
15
+ feePayer: sender,
16
+ fee,
17
+ nonce,
18
+ memo,
19
+ },
20
+ };
21
+ const walletPayload = {
22
+ transaction,
23
+ nonce,
24
+ onlySign: true,
25
+ feePayer: {
26
+ fee,
27
+ memo,
28
+ },
29
+ };
30
+ return {
31
+ sender,
32
+ nonce,
33
+ memo,
34
+ fee,
35
+ walletPayload,
36
+ minaSignerPayload,
37
+ proverPayload,
38
+ signedData,
39
+ transaction,
40
+ };
41
+ }
42
+ export function transactionParams(params) {
43
+ const { proverPayload, signedData } = params;
44
+ const signedJson = JSON.parse(signedData);
45
+ const { sender, tx } = JSON.parse(proverPayload);
46
+ const transaction = Mina.Transaction.fromJSON(JSON.parse(tx));
47
+ const memo = transaction.transaction.memo;
48
+ return {
49
+ fee: UInt64.from(signedJson.zkappCommand.feePayer.body.fee),
50
+ sender: PublicKey.fromBase58(sender),
51
+ nonce: Number(signedJson.zkappCommand.feePayer.body.nonce),
52
+ memo,
53
+ };
54
+ }
55
+ export function parseTransactionPayloads(params) {
56
+ const { txNew } = params;
57
+ const proverPayload = "payloads" in params ? params.payloads.proverPayload : params.proverPayload;
58
+ const signedData = "payloads" in params ? params.payloads.signedData : params.signedData;
59
+ const signedJson = JSON.parse(signedData);
60
+ const { tx, blindingValues, length, forestJSONs } = JSON.parse(proverPayload);
61
+ const transaction = Mina.Transaction.fromJSON(JSON.parse(tx));
62
+ const forests = forestJSONs.map((f) => JSON.parse(f));
63
+ if (length !== txNew.transaction.accountUpdates.length) {
64
+ throw new Error(`New Transaction length mismatch: ${length} !== ${txNew.transaction.accountUpdates.length}`);
65
+ }
66
+ if (length !== transaction.transaction.accountUpdates.length) {
67
+ throw new Error(`Serialized Transaction length mismatch: ${length} !== ${transaction.transaction.accountUpdates.length}`);
68
+ }
69
+ for (let i = 0; i < length; i++) {
70
+ transaction.transaction.accountUpdates[i].lazyAuthorization =
71
+ txNew.transaction.accountUpdates[i].lazyAuthorization;
72
+ if (blindingValues[i] !== "") {
73
+ if (transaction.transaction.accountUpdates[i].lazyAuthorization ===
74
+ undefined ||
75
+ transaction.transaction.accountUpdates[i].lazyAuthorization
76
+ .blindingValue === undefined) {
77
+ throw new Error(`Lazy authorization blinding value is undefined for item ${i}`);
78
+ }
79
+ transaction.transaction.accountUpdates[i].lazyAuthorization.blindingValue = Field.fromJSON(blindingValues[i]);
80
+ }
81
+ if (forests[i].length > 0) {
82
+ if (transaction.transaction.accountUpdates[i].lazyAuthorization ===
83
+ undefined ||
84
+ transaction.transaction.accountUpdates[i].lazyAuthorization
85
+ .args === undefined) {
86
+ throw new Error(`Lazy authorization args is undefined for item ${i}`);
87
+ }
88
+ deserializeLazyAuthorization(transaction.transaction.accountUpdates[i].lazyAuthorization
89
+ .args, forests[i]);
90
+ if (forests[i].restoredItems !== forests[i].length) {
91
+ throw new Error(`Forest ${i} not fully restored`);
92
+ }
93
+ }
94
+ }
95
+ transaction.transaction.feePayer.authorization =
96
+ signedJson.zkappCommand.feePayer.authorization;
97
+ transaction.transaction.feePayer.body.fee = UInt64.from(signedJson.zkappCommand.feePayer.body.fee);
98
+ for (let i = 0; i < length; i++) {
99
+ const signature = signedJson.zkappCommand.accountUpdates[i].authorization.signature;
100
+ if (signature !== undefined && signature !== null) {
101
+ transaction.transaction.accountUpdates[i].authorization.signature =
102
+ signedJson.zkappCommand.accountUpdates[i].authorization.signature;
103
+ }
104
+ }
105
+ return transaction;
106
+ }
107
+ export function serializeTransaction(tx) {
108
+ const length = tx.transaction.accountUpdates.length;
109
+ let i;
110
+ const blindingValues = [];
111
+ const forests = [];
112
+ for (i = 0; i < length; i++) {
113
+ const la = tx.transaction.accountUpdates[i].lazyAuthorization;
114
+ if (la !== undefined &&
115
+ la.blindingValue !== undefined &&
116
+ la.kind === "lazy-proof")
117
+ blindingValues.push(la.blindingValue.toJSON());
118
+ else
119
+ blindingValues.push("");
120
+ const forest = { length: 0, items: [] };
121
+ serializeLazyAuthorization(tx.transaction.accountUpdates[i].lazyAuthorization?.args, forest);
122
+ forests.push(forest);
123
+ }
124
+ const serializedTransaction = JSON.stringify({
125
+ tx: tx.toJSON(),
126
+ blindingValues,
127
+ forestJSONs: forests.map((f) => JSON.stringify(f)),
128
+ length,
129
+ fee: tx.transaction.feePayer.body.fee.toJSON(),
130
+ sender: tx.transaction.feePayer.body.publicKey.toBase58(),
131
+ nonce: tx.transaction.feePayer.body.nonce.toBigint().toString(),
132
+ }, null, 2);
133
+ return serializedTransaction;
134
+ }
135
+ function serializeLazyAuthorization(lazyAuthorization, serialized) {
136
+ if (lazyAuthorization?.hash !== undefined && lazyAuthorization.hash.toJSON) {
137
+ serialized.items.push({
138
+ h: fieldToBase64(lazyAuthorization.hash),
139
+ });
140
+ }
141
+ if (lazyAuthorization?.previousHash !== undefined &&
142
+ lazyAuthorization.previousHash.toJSON) {
143
+ serialized.items.push({
144
+ p: fieldToBase64(lazyAuthorization.previousHash),
145
+ });
146
+ }
147
+ if (lazyAuthorization?.callData !== undefined &&
148
+ lazyAuthorization.callData.toJSON) {
149
+ serialized.items.push({
150
+ c: fieldToBase64(lazyAuthorization.callData),
151
+ });
152
+ }
153
+ if (lazyAuthorization?.id !== undefined) {
154
+ serialized.items.push({
155
+ i: lazyAuthorization.id,
156
+ });
157
+ }
158
+ if (Array.isArray(lazyAuthorization)) {
159
+ for (const item of lazyAuthorization) {
160
+ serializeLazyAuthorization(item, serialized);
161
+ }
162
+ }
163
+ if (typeof lazyAuthorization === "object") {
164
+ for (const key in lazyAuthorization) {
165
+ serializeLazyAuthorization(lazyAuthorization[key], serialized);
166
+ }
167
+ }
168
+ serialized.length = serialized.items.length;
169
+ }
170
+ function deserializeLazyAuthorization(lazyAuthorization, serialized) {
171
+ if (serialized.restoredItems === undefined)
172
+ serialized.restoredItems = 0;
173
+ if (lazyAuthorization?.hash !== undefined && lazyAuthorization.hash.toJSON) {
174
+ if (serialized.restoredItems >= serialized.length)
175
+ throw new Error("Restored more items than expected");
176
+ const hash = serialized.items[serialized.restoredItems].h;
177
+ if (hash === undefined)
178
+ throw new Error(`Hash is undefined for item ${serialized.restoredItems}`);
179
+ lazyAuthorization.hash = fieldFromBase64(hash);
180
+ serialized.restoredItems++;
181
+ }
182
+ if (lazyAuthorization?.previousHash !== undefined &&
183
+ lazyAuthorization.previousHash.toJSON) {
184
+ if (serialized.restoredItems >= serialized.length)
185
+ throw new Error("Restored more items than expected");
186
+ const previousHash = serialized.items[serialized.restoredItems].p;
187
+ if (previousHash === undefined)
188
+ throw new Error(`Previous hash is undefined for item ${serialized.restoredItems}`);
189
+ lazyAuthorization.previousHash = fieldFromBase64(previousHash);
190
+ serialized.restoredItems++;
191
+ }
192
+ if (lazyAuthorization?.callData !== undefined &&
193
+ lazyAuthorization.callData.toJSON) {
194
+ if (serialized.restoredItems >= serialized.length)
195
+ throw new Error("Restored more items than expected");
196
+ const callData = serialized.items[serialized.restoredItems].c;
197
+ if (callData === undefined)
198
+ throw new Error(`Call data is undefined for item ${serialized.restoredItems}`);
199
+ lazyAuthorization.callData = fieldFromBase64(callData);
200
+ serialized.restoredItems++;
201
+ }
202
+ if (lazyAuthorization?.id !== undefined) {
203
+ if (serialized.restoredItems >= serialized.length)
204
+ throw new Error("Restored more items than expected");
205
+ const id = serialized.items[serialized.restoredItems].i;
206
+ if (id === undefined)
207
+ throw new Error(`Id is undefined for item ${serialized.restoredItems}`);
208
+ lazyAuthorization.id = id;
209
+ serialized.restoredItems++;
210
+ }
211
+ if (Array.isArray(lazyAuthorization)) {
212
+ for (const item of lazyAuthorization) {
213
+ deserializeLazyAuthorization(item, serialized);
214
+ }
215
+ }
216
+ if (typeof lazyAuthorization === "object") {
217
+ for (const key in lazyAuthorization) {
218
+ deserializeLazyAuthorization(lazyAuthorization[key], serialized);
219
+ }
220
+ }
221
+ }
222
+ //# sourceMappingURL=transaction.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transaction.js","sourceRoot":"","sources":["../../../src/transactions/transaction.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import { BlockBerryChain } from "./chain.js";
2
+ export declare function txStatusBlockberry(params: {
3
+ hash: string;
4
+ time: number;
5
+ chain: BlockBerryChain;
6
+ blockBerryApiKey: string;
7
+ timeout?: number;
8
+ }): Promise<string>;
@@ -0,0 +1,16 @@
1
+ import { getZkAppTxFromBlockBerry } from "./blockberry.js";
2
+ const TIMEOUT = 1000 * 60 * 21;
3
+ export async function txStatusBlockberry(params) {
4
+ const { hash, chain, time, blockBerryApiKey } = params;
5
+ const tx = await getZkAppTxFromBlockBerry({ hash, chain, blockBerryApiKey });
6
+ if (tx?.txStatus)
7
+ return tx?.txStatus;
8
+ if (Date.now() - time > (params.timeout ?? TIMEOUT)) {
9
+ console.error("txStatus: Timeout while checking tx with blockberry", chain, hash);
10
+ return "replaced";
11
+ }
12
+ else {
13
+ return "pending";
14
+ }
15
+ }
16
+ //# sourceMappingURL=txstatus.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"txstatus.js","sourceRoot":"","sources":["../../../src/transactions/txstatus.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,wBAAwB,EAAE,MAAM,iBAAiB,CAAC;AAC3D,MAAM,OAAO,GAAG,IAAI,GAAG,EAAE,GAAG,EAAE,CAAC;AAE/B,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,MAMxC;IACC,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,gBAAgB,EAAE,GAAG,MAAM,CAAC;IAEvD,MAAM,EAAE,GAAG,MAAM,wBAAwB,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,gBAAgB,EAAE,CAAC,CAAC;IAC7E,IAAI,EAAE,EAAE,QAAQ;QAAE,OAAO,EAAE,EAAE,QAAQ,CAAC;IACtC,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,OAAO,IAAI,OAAO,CAAC,EAAE,CAAC;QACpD,OAAO,CAAC,KAAK,CACX,qDAAqD,EACrD,KAAK,EACL,IAAI,CACL,CAAC;QACF,OAAO,UAAU,CAAC;IACpB,CAAC;SAAM,CAAC;QACN,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC"}
@@ -0,0 +1,5 @@
1
+ import { Field } from "o1js";
2
+ export declare function fieldToBase56(field: Field): string;
3
+ export declare function fieldFromBase56(str: string): Field;
4
+ export declare function fieldToBase64(field: Field): string;
5
+ export declare function fieldFromBase64(str: string): Field;
@@ -0,0 +1,29 @@
1
+ import { Field } from "o1js";
2
+ import { toBase, fromBase } from "./base64.js";
3
+ // URL friendly base64 encoding
4
+ const TABLE = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_";
5
+ export function fieldToBase56(field) {
6
+ const digits = toBase(field.toBigInt(), 56n);
7
+ //console.log("digits:", digits);
8
+ const str = digits.map((x) => TABLE[Number(x)]).join("");
9
+ //console.log("str:", str);
10
+ return str;
11
+ }
12
+ export function fieldFromBase56(str) {
13
+ const base56Digits = str.split("").map((x) => BigInt(TABLE.indexOf(x)));
14
+ const x = fromBase(base56Digits, 56n);
15
+ return Field(x);
16
+ }
17
+ export function fieldToBase64(field) {
18
+ const digits = toBase(field.toBigInt(), 64n);
19
+ //console.log("digits:", digits);
20
+ const str = digits.map((x) => TABLE[Number(x)]).join("");
21
+ //console.log("str:", str);
22
+ return str;
23
+ }
24
+ export function fieldFromBase64(str) {
25
+ const base64Digits = str.split("").map((x) => BigInt(TABLE.indexOf(x)));
26
+ const x = fromBase(base64Digits, 64n);
27
+ return Field(x);
28
+ }
29
+ //# sourceMappingURL=base64-field.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base64-field.js","sourceRoot":"","sources":["../../../src/utils/base64-field.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,MAAM,CAAC;AAC7B,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAE/C,+BAA+B;AAC/B,MAAM,KAAK,GACT,kEAAkE,CAAC;AAErE,MAAM,UAAU,aAAa,CAAC,KAAY;IACxC,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,QAAQ,EAAE,EAAE,GAAG,CAAC,CAAC;IAC7C,iCAAiC;IACjC,MAAM,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACzD,2BAA2B;IAC3B,OAAO,GAAG,CAAC;AACb,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,GAAW;IACzC,MAAM,YAAY,GAAG,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACxE,MAAM,CAAC,GAAG,QAAQ,CAAC,YAAY,EAAE,GAAG,CAAC,CAAC;IACtC,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,KAAY;IACxC,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,QAAQ,EAAE,EAAE,GAAG,CAAC,CAAC;IAC7C,iCAAiC;IACjC,MAAM,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACzD,2BAA2B;IAC3B,OAAO,GAAG,CAAC;AACb,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,GAAW;IACzC,MAAM,YAAY,GAAG,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACxE,MAAM,CAAC,GAAG,QAAQ,CAAC,YAAY,EAAE,GAAG,CAAC,CAAC;IACtC,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC"}
@@ -0,0 +1,6 @@
1
+ export declare function bigintToBase56(value: bigint): string;
2
+ export declare function bigintFromBase56(str: string): bigint;
3
+ export declare function bigintToBase64(value: bigint): string;
4
+ export declare function bigintFromBase64(str: string): bigint;
5
+ export declare function fromBase(digits: bigint[], base: bigint): bigint;
6
+ export declare function toBase(x: bigint, base: bigint): bigint[];
@@ -0,0 +1,83 @@
1
+ // URL friendly base64 encoding
2
+ const TABLE = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_";
3
+ export function bigintToBase56(value) {
4
+ const digits = toBase(value, 56n);
5
+ //console.log("digits:", digits);
6
+ const str = digits.map((x) => TABLE[Number(x)]).join("");
7
+ //console.log("str:", str);
8
+ return str;
9
+ }
10
+ export function bigintFromBase56(str) {
11
+ const base56Digits = str.split("").map((x) => BigInt(TABLE.indexOf(x)));
12
+ const x = fromBase(base56Digits, 56n);
13
+ return x;
14
+ }
15
+ export function bigintToBase64(value) {
16
+ const digits = toBase(value, 64n);
17
+ //console.log("digits:", digits);
18
+ const str = digits.map((x) => TABLE[Number(x)]).join("");
19
+ //console.log("str:", str);
20
+ return str;
21
+ }
22
+ export function bigintFromBase64(str) {
23
+ const base64Digits = str.split("").map((x) => BigInt(TABLE.indexOf(x)));
24
+ const x = fromBase(base64Digits, 64n);
25
+ return x;
26
+ }
27
+ export function fromBase(digits, base) {
28
+ if (base <= 0n)
29
+ throw Error("fromBase: base must be positive");
30
+ // compute powers base, base^2, base^4, ..., base^(2^k)
31
+ // with largest k s.t. n = 2^k < digits.length
32
+ let basePowers = [];
33
+ for (let power = base, n = 1; n < digits.length; power **= 2n, n *= 2) {
34
+ basePowers.push(power);
35
+ }
36
+ let k = basePowers.length;
37
+ // pad digits array with zeros s.t. digits.length === 2^k
38
+ digits = digits.concat(Array(2 ** k - digits.length).fill(0n));
39
+ // accumulate [x0, x1, x2, x3, ...] -> [x0 + base*x1, x2 + base*x3, ...] -> [x0 + base*x1 + base^2*(x2 + base*x3), ...] -> ...
40
+ // until we end up with a single element
41
+ for (let i = 0; i < k; i++) {
42
+ let newDigits = Array(digits.length >> 1);
43
+ let basePower = basePowers[i];
44
+ for (let j = 0; j < newDigits.length; j++) {
45
+ newDigits[j] = digits[2 * j] + basePower * digits[2 * j + 1];
46
+ }
47
+ digits = newDigits;
48
+ }
49
+ console.assert(digits.length === 1);
50
+ let [digit] = digits;
51
+ return digit;
52
+ }
53
+ export function toBase(x, base) {
54
+ if (base <= 0n)
55
+ throw Error("toBase: base must be positive");
56
+ // compute powers base, base^2, base^4, ..., base^(2^k)
57
+ // with largest k s.t. base^(2^k) < x
58
+ let basePowers = [];
59
+ for (let power = base; power <= x; power **= 2n) {
60
+ basePowers.push(power);
61
+ }
62
+ let digits = [x]; // single digit w.r.t base^(2^(k+1))
63
+ // successively split digits w.r.t. base^(2^j) into digits w.r.t. base^(2^(j-1))
64
+ // until we arrive at digits w.r.t. base
65
+ let k = basePowers.length;
66
+ for (let i = 0; i < k; i++) {
67
+ let newDigits = Array(2 * digits.length);
68
+ let basePower = basePowers[k - 1 - i];
69
+ for (let j = 0; j < digits.length; j++) {
70
+ let x = digits[j];
71
+ let high = x / basePower;
72
+ newDigits[2 * j + 1] = high;
73
+ newDigits[2 * j] = x - high * basePower;
74
+ }
75
+ digits = newDigits;
76
+ }
77
+ // pop "leading" zero digits
78
+ while (digits[digits.length - 1] === 0n) {
79
+ digits.pop();
80
+ }
81
+ return digits;
82
+ }
83
+ //# sourceMappingURL=base64.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base64.js","sourceRoot":"","sources":["../../../src/utils/base64.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ import { UInt64 } from "o1js";
2
+ /**
3
+ * Calculate the fee for a transaction
4
+ * @returns the fee for a transaction
5
+ */
6
+ export declare function fee(): Promise<UInt64>;