zkcloudworker 0.18.8 → 0.18.10

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 (69) hide show
  1. package/dist/ts/mina/token/FungibleTokenAdmin.d.ts +1 -6
  2. package/dist/ts/mina/token/FungibleTokenAdmin.js.map +1 -1
  3. package/dist/ts/mina/token/FungibleTokenContract.d.ts +520 -0
  4. package/dist/ts/mina/token/FungibleTokenContract.js +290 -0
  5. package/dist/ts/mina/token/FungibleTokenContract.js.map +1 -0
  6. package/dist/ts/mina/token/FungibleTokenWhitelistedAdmin.d.ts +33 -0
  7. package/dist/ts/mina/token/FungibleTokenWhitelistedAdmin.js +119 -0
  8. package/dist/ts/mina/token/FungibleTokenWhitelistedAdmin.js.map +1 -0
  9. package/dist/ts/mina/token/api.d.ts +2 -2
  10. package/dist/ts/mina/token/api.js.map +1 -1
  11. package/dist/ts/mina/token/bid.d.ts +24 -0
  12. package/dist/ts/mina/token/bid.js +167 -0
  13. package/dist/ts/mina/token/bid.js.map +1 -0
  14. package/dist/ts/mina/token/build.d.ts +64 -0
  15. package/dist/ts/mina/token/build.js +437 -0
  16. package/dist/ts/mina/token/build.js.map +1 -0
  17. package/dist/ts/mina/token/fee.d.ts +2 -0
  18. package/dist/ts/mina/token/fee.js +3 -0
  19. package/dist/ts/mina/token/fee.js.map +1 -0
  20. package/dist/ts/mina/token/index.d.ts +5 -2
  21. package/dist/ts/mina/token/index.js +5 -2
  22. package/dist/ts/mina/token/index.js.map +1 -1
  23. package/dist/ts/mina/token/offer.d.ts +25 -0
  24. package/dist/ts/mina/token/offer.js +175 -0
  25. package/dist/ts/mina/token/offer.js.map +1 -0
  26. package/dist/ts/mina/token/token.d.ts +426 -0
  27. package/dist/ts/mina/token/token.js +87 -0
  28. package/dist/ts/mina/token/token.js.map +1 -0
  29. package/dist/tsconfig.web.tsbuildinfo +1 -1
  30. package/dist/web/mina/token/FungibleTokenAdmin.d.ts +1 -6
  31. package/dist/web/mina/token/FungibleTokenAdmin.js.map +1 -1
  32. package/dist/web/mina/token/FungibleTokenContract.d.ts +520 -0
  33. package/dist/web/mina/token/FungibleTokenContract.js +290 -0
  34. package/dist/web/mina/token/FungibleTokenContract.js.map +1 -0
  35. package/dist/web/mina/token/FungibleTokenWhitelistedAdmin.d.ts +33 -0
  36. package/dist/web/mina/token/FungibleTokenWhitelistedAdmin.js +119 -0
  37. package/dist/web/mina/token/FungibleTokenWhitelistedAdmin.js.map +1 -0
  38. package/dist/web/mina/token/api.d.ts +2 -2
  39. package/dist/web/mina/token/api.js.map +1 -1
  40. package/dist/web/mina/token/bid.d.ts +24 -0
  41. package/dist/web/mina/token/bid.js +167 -0
  42. package/dist/web/mina/token/bid.js.map +1 -0
  43. package/dist/web/mina/token/build.d.ts +64 -0
  44. package/dist/web/mina/token/build.js +437 -0
  45. package/dist/web/mina/token/build.js.map +1 -0
  46. package/dist/web/mina/token/fee.d.ts +2 -0
  47. package/dist/web/mina/token/fee.js +3 -0
  48. package/dist/web/mina/token/fee.js.map +1 -0
  49. package/dist/web/mina/token/index.d.ts +5 -2
  50. package/dist/web/mina/token/index.js +5 -2
  51. package/dist/web/mina/token/index.js.map +1 -1
  52. package/dist/web/mina/token/offer.d.ts +25 -0
  53. package/dist/web/mina/token/offer.js +175 -0
  54. package/dist/web/mina/token/offer.js.map +1 -0
  55. package/dist/web/mina/token/token.d.ts +426 -0
  56. package/dist/web/mina/token/token.js +87 -0
  57. package/dist/web/mina/token/token.js.map +1 -0
  58. package/package.json +1 -1
  59. package/src/mina/token/FungibleTokenAdmin.ts +1 -7
  60. package/src/mina/token/FungibleTokenContract.ts +327 -0
  61. package/src/mina/token/FungibleTokenWhitelistedAdmin.ts +112 -0
  62. package/src/mina/token/api.ts +5 -2
  63. package/src/mina/token/bid.ts +173 -0
  64. package/src/mina/token/build.ts +610 -0
  65. package/src/mina/token/fee.ts +2 -0
  66. package/src/mina/token/index.ts +5 -2
  67. package/src/mina/token/offer.ts +174 -0
  68. package/src/mina/token/token.ts +127 -0
  69. package/src/mina/token/FungibleToken.ts +0 -316
@@ -0,0 +1,167 @@
1
+ import { __decorate, __metadata } from "tslib";
2
+ import { AccountUpdate, method, Permissions, PublicKey, State, state, UInt64, SmartContract, Bool, Field, assert, Mina, } from "o1js";
3
+ import { Whitelist } from "./whitelist.js";
4
+ import { FungibleToken, tokenVerificationKeys } from "./token.js";
5
+ export class FungibleTokenBidContract extends SmartContract {
6
+ constructor() {
7
+ super(...arguments);
8
+ this.price = State();
9
+ this.buyer = State();
10
+ this.token = State();
11
+ this.whitelist = State();
12
+ this.events = {
13
+ bid: UInt64,
14
+ withdraw: UInt64,
15
+ sell: UInt64,
16
+ updateWhitelist: Whitelist,
17
+ };
18
+ }
19
+ async deploy(args) {
20
+ await super.deploy(args);
21
+ const verificationKey = args?.verificationKey ?? FungibleTokenBidContract._verificationKey;
22
+ assert(verificationKey !== undefined);
23
+ const hash = typeof verificationKey.hash === "string"
24
+ ? verificationKey.hash
25
+ : verificationKey.hash.toJSON();
26
+ const networkId = Mina.getNetworkId();
27
+ assert(networkId === "mainnet" || networkId === "testnet");
28
+ assert(hash === tokenVerificationKeys[networkId].vk.FungibleTokenBidContract.hash);
29
+ assert(verificationKey.data ===
30
+ tokenVerificationKeys[networkId].vk.FungibleTokenBidContract.data);
31
+ this.whitelist.set(args.whitelist);
32
+ this.account.permissions.set({
33
+ ...Permissions.default(),
34
+ send: Permissions.proof(),
35
+ setVerificationKey: Permissions.VerificationKey.impossibleDuringCurrentVersion(),
36
+ setPermissions: Permissions.impossible(),
37
+ });
38
+ }
39
+ async initialize(token, amount, price) {
40
+ this.account.provedState.requireEquals(Bool(false));
41
+ amount.equals(UInt64.from(0)).assertFalse();
42
+ const totalPriceField = price.value
43
+ .mul(amount.value)
44
+ .div(Field(1_000_000_000));
45
+ totalPriceField.assertLessThan(UInt64.MAXINT().value, "totalPrice overflow");
46
+ const totalPrice = UInt64.Unsafe.fromField(totalPriceField);
47
+ const buyer = this.sender.getUnconstrained();
48
+ const buyerUpdate = AccountUpdate.createSigned(buyer);
49
+ buyerUpdate.send({ to: this.address, amount: totalPrice });
50
+ buyerUpdate.body.useFullCommitment = Bool(true);
51
+ this.buyer.set(buyer);
52
+ this.price.set(price);
53
+ this.token.set(token);
54
+ this.emitEvent("bid", amount);
55
+ }
56
+ async bid(amount, price) {
57
+ amount.equals(UInt64.from(0)).assertFalse();
58
+ const balance = this.account.balance.getAndRequireEquals();
59
+ const oldPrice = this.price.getAndRequireEquals();
60
+ // Price can be changed only when the balance is 0
61
+ price
62
+ .equals(oldPrice)
63
+ .or(balance.equals(UInt64.from(0)))
64
+ .assertTrue();
65
+ this.price.set(price);
66
+ const totalPriceField = price.value
67
+ .mul(amount.value)
68
+ .div(Field(1_000_000_000));
69
+ totalPriceField.assertLessThan(UInt64.MAXINT().value, "totalPrice overflow");
70
+ const totalPrice = UInt64.Unsafe.fromField(totalPriceField);
71
+ const sender = this.sender.getUnconstrained();
72
+ const buyer = this.buyer.getAndRequireEquals();
73
+ sender.assertEquals(buyer);
74
+ const buyerUpdate = AccountUpdate.createSigned(buyer);
75
+ buyerUpdate.send({ to: this.address, amount: totalPrice });
76
+ buyerUpdate.body.useFullCommitment = Bool(true);
77
+ this.price.set(price);
78
+ this.emitEvent("bid", amount);
79
+ }
80
+ async withdraw(amountInMina) {
81
+ amountInMina.equals(UInt64.from(0)).assertFalse();
82
+ this.account.balance.requireBetween(amountInMina, UInt64.MAXINT());
83
+ const buyer = this.buyer.getAndRequireEquals();
84
+ const sender = this.sender.getUnconstrained();
85
+ const senderUpdate = AccountUpdate.createSigned(sender);
86
+ senderUpdate.body.useFullCommitment = Bool(true);
87
+ sender.assertEquals(buyer);
88
+ let bidUpdate = this.send({ to: senderUpdate, amount: amountInMina });
89
+ bidUpdate.body.useFullCommitment = Bool(true);
90
+ this.emitEvent("withdraw", amountInMina);
91
+ }
92
+ async sell(amount) {
93
+ amount.equals(UInt64.from(0)).assertFalse();
94
+ const price = this.price.getAndRequireEquals();
95
+ const totalPriceField = price.value
96
+ .mul(amount.value)
97
+ .div(Field(1_000_000_000));
98
+ totalPriceField.assertLessThan(UInt64.MAXINT().value, "totalPrice overflow");
99
+ const totalPrice = UInt64.Unsafe.fromField(totalPriceField);
100
+ this.account.balance.requireBetween(totalPrice, UInt64.MAXINT());
101
+ const buyer = this.buyer.getAndRequireEquals();
102
+ const token = this.token.getAndRequireEquals();
103
+ const seller = this.sender.getUnconstrained();
104
+ const sellerUpdate = this.send({ to: seller, amount: totalPrice });
105
+ sellerUpdate.body.useFullCommitment = Bool(true);
106
+ sellerUpdate.requireSignature();
107
+ const tokenContract = new FungibleToken(token);
108
+ await tokenContract.transfer(seller, buyer, amount);
109
+ this.emitEvent("sell", amount);
110
+ }
111
+ async updateWhitelist(whitelist) {
112
+ const buyer = this.buyer.getAndRequireEquals();
113
+ const sender = this.sender.getUnconstrained();
114
+ const senderUpdate = AccountUpdate.createSigned(sender);
115
+ senderUpdate.body.useFullCommitment = Bool(true);
116
+ sender.assertEquals(buyer);
117
+ this.whitelist.set(whitelist);
118
+ this.emitEvent("updateWhitelist", whitelist);
119
+ }
120
+ }
121
+ __decorate([
122
+ state(UInt64),
123
+ __metadata("design:type", Object)
124
+ ], FungibleTokenBidContract.prototype, "price", void 0);
125
+ __decorate([
126
+ state(PublicKey),
127
+ __metadata("design:type", Object)
128
+ ], FungibleTokenBidContract.prototype, "buyer", void 0);
129
+ __decorate([
130
+ state(PublicKey),
131
+ __metadata("design:type", Object)
132
+ ], FungibleTokenBidContract.prototype, "token", void 0);
133
+ __decorate([
134
+ state(Whitelist),
135
+ __metadata("design:type", Object)
136
+ ], FungibleTokenBidContract.prototype, "whitelist", void 0);
137
+ __decorate([
138
+ method,
139
+ __metadata("design:type", Function),
140
+ __metadata("design:paramtypes", [PublicKey, UInt64, UInt64]),
141
+ __metadata("design:returntype", Promise)
142
+ ], FungibleTokenBidContract.prototype, "initialize", null);
143
+ __decorate([
144
+ method,
145
+ __metadata("design:type", Function),
146
+ __metadata("design:paramtypes", [UInt64, UInt64]),
147
+ __metadata("design:returntype", Promise)
148
+ ], FungibleTokenBidContract.prototype, "bid", null);
149
+ __decorate([
150
+ method,
151
+ __metadata("design:type", Function),
152
+ __metadata("design:paramtypes", [UInt64]),
153
+ __metadata("design:returntype", Promise)
154
+ ], FungibleTokenBidContract.prototype, "withdraw", null);
155
+ __decorate([
156
+ method,
157
+ __metadata("design:type", Function),
158
+ __metadata("design:paramtypes", [UInt64]),
159
+ __metadata("design:returntype", Promise)
160
+ ], FungibleTokenBidContract.prototype, "sell", null);
161
+ __decorate([
162
+ method,
163
+ __metadata("design:type", Function),
164
+ __metadata("design:paramtypes", [Whitelist]),
165
+ __metadata("design:returntype", Promise)
166
+ ], FungibleTokenBidContract.prototype, "updateWhitelist", null);
167
+ //# sourceMappingURL=bid.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bid.js","sourceRoot":"","sources":["../../../../src/mina/token/bid.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,64 @@
1
+ import { WhitelistedAddressList } from "./whitelist.js";
2
+ import { FungibleTokenTransactionType } from "./api.js";
3
+ import { blockchain } from "../../cloud/networks.js";
4
+ import { PublicKey, UInt64, UInt8, Transaction, VerificationKey } from "o1js";
5
+ export declare function buildTokenDeployTransaction(params: {
6
+ chain: blockchain;
7
+ fee: UInt64;
8
+ sender: PublicKey;
9
+ nonce: number;
10
+ tokenAddress: PublicKey;
11
+ adminContractAddress: PublicKey;
12
+ adminAddress: PublicKey;
13
+ uri: string;
14
+ symbol: string;
15
+ memo?: string;
16
+ whitelist?: WhitelistedAddressList;
17
+ developerAddress?: PublicKey;
18
+ developerFee?: UInt64;
19
+ provingKey: PublicKey;
20
+ provingFee: UInt64;
21
+ decimals: UInt8;
22
+ }): Promise<{
23
+ tx: Transaction<false, false>;
24
+ isWhitelisted: boolean;
25
+ adminVerificationKey: VerificationKey;
26
+ tokenVerificationKey: VerificationKey;
27
+ }>;
28
+ export declare function buildTokenTransaction(params: {
29
+ txType: FungibleTokenTransactionType;
30
+ chain: blockchain;
31
+ fee: UInt64;
32
+ sender: PublicKey;
33
+ nonce: number;
34
+ memo?: string;
35
+ tokenAddress: PublicKey;
36
+ from: PublicKey;
37
+ to: PublicKey;
38
+ amount?: UInt64;
39
+ price?: UInt64;
40
+ whitelist?: WhitelistedAddressList;
41
+ developerAddress?: PublicKey;
42
+ developerFee?: UInt64;
43
+ provingKey: PublicKey;
44
+ provingFee: UInt64;
45
+ }): Promise<{
46
+ tx: Transaction<false, false>;
47
+ isWhitelisted: boolean;
48
+ adminContractAddress: PublicKey;
49
+ adminAddress: PublicKey;
50
+ symbol: string;
51
+ adminVerificationKey: VerificationKey;
52
+ tokenVerificationKey: VerificationKey;
53
+ offerVerificationKey: VerificationKey;
54
+ bidVerificationKey: VerificationKey;
55
+ }>;
56
+ export declare function getTokenSymbolAndAdmin(params: {
57
+ tokenAddress: PublicKey;
58
+ chain: blockchain;
59
+ }): Promise<{
60
+ adminContractAddress: PublicKey;
61
+ adminAddress: PublicKey;
62
+ symbol: string;
63
+ isWhitelisted: boolean;
64
+ }>;
@@ -0,0 +1,437 @@
1
+ import { Whitelist } from "./whitelist.js";
2
+ import { fetchMinaAccount } from "../utils/fetch.js";
3
+ import { accountBalanceMina } from "../utils/mina.js";
4
+ import { FungibleToken, WhitelistedFungibleToken, FungibleTokenAdmin, FungibleTokenWhitelistedAdmin, FungibleTokenOfferContract, FungibleTokenBidContract, tokenVerificationKeys, } from "./token.js";
5
+ import { PublicKey, Mina, AccountUpdate, UInt8, Bool, Struct, Field, } from "o1js";
6
+ export async function buildTokenDeployTransaction(params) {
7
+ const { fee, sender, nonce, memo, tokenAddress, adminContractAddress, uri, symbol, developerAddress, developerFee, provingKey, provingFee, decimals, chain, whitelist, } = params;
8
+ const isWhitelisted = whitelist !== undefined;
9
+ if (memo && typeof memo !== "string")
10
+ throw new Error("Memo must be a string");
11
+ if (memo && memo.length > 30)
12
+ throw new Error("Memo must be less than 30 characters");
13
+ if (!symbol || typeof symbol !== "string")
14
+ throw new Error("Symbol must be a string");
15
+ if (symbol.length >= 7)
16
+ throw new Error("Symbol must be less than 7 characters");
17
+ const adminContract = isWhitelisted
18
+ ? FungibleTokenWhitelistedAdmin
19
+ : FungibleTokenAdmin;
20
+ const tokenContract = isWhitelisted
21
+ ? WhitelistedFungibleToken
22
+ : FungibleToken;
23
+ const vk = tokenVerificationKeys[chain === "mainnet" ? "mainnet" : "testnet"].vk;
24
+ if (!vk ||
25
+ !vk.FungibleTokenWhitelistedAdmin ||
26
+ !vk.FungibleTokenWhitelistedAdmin.hash ||
27
+ !vk.FungibleTokenWhitelistedAdmin.data ||
28
+ !vk.FungibleTokenAdmin ||
29
+ !vk.FungibleTokenAdmin.hash ||
30
+ !vk.FungibleTokenAdmin.data ||
31
+ !vk.WhitelistedFungibleToken ||
32
+ !vk.WhitelistedFungibleToken.hash ||
33
+ !vk.WhitelistedFungibleToken.data ||
34
+ !vk.FungibleToken ||
35
+ !vk.FungibleToken.hash ||
36
+ !vk.FungibleToken.data)
37
+ throw new Error("Cannot get verification keys");
38
+ const adminVerificationKey = isWhitelisted
39
+ ? vk.FungibleTokenWhitelistedAdmin
40
+ : vk.FungibleTokenAdmin;
41
+ const tokenVerificationKey = isWhitelisted
42
+ ? vk.WhitelistedFungibleToken
43
+ : vk.FungibleToken;
44
+ if (!adminVerificationKey || !tokenVerificationKey)
45
+ throw new Error("Cannot get verification keys");
46
+ await fetchMinaAccount({
47
+ publicKey: sender,
48
+ force: true,
49
+ });
50
+ if (!Mina.hasAccount(sender)) {
51
+ throw new Error("Sender does not have account");
52
+ }
53
+ console.log("Sender balance:", await accountBalanceMina(sender));
54
+ const whitelistedAddresses = whitelist
55
+ ? await Whitelist.create({ list: whitelist, name: symbol })
56
+ : undefined;
57
+ const zkToken = new tokenContract(tokenAddress);
58
+ const zkAdmin = new adminContract(adminContractAddress);
59
+ const tx = await Mina.transaction({ sender, fee, memo: memo ?? `deploy ${symbol}`, nonce }, async () => {
60
+ const feeAccountUpdate = AccountUpdate.createSigned(sender);
61
+ feeAccountUpdate.balance.subInPlace(3_000_000_000);
62
+ feeAccountUpdate.send({
63
+ to: provingKey,
64
+ amount: provingFee,
65
+ });
66
+ if (developerAddress && developerFee) {
67
+ feeAccountUpdate.send({
68
+ to: developerAddress,
69
+ amount: developerFee,
70
+ });
71
+ }
72
+ if (isWhitelisted && !whitelistedAddresses) {
73
+ throw new Error("Whitelisted addresses not found");
74
+ }
75
+ await zkAdmin.deploy({
76
+ adminPublicKey: sender,
77
+ verificationKey: adminVerificationKey,
78
+ whitelist: whitelistedAddresses,
79
+ });
80
+ zkAdmin.account.zkappUri.set(uri);
81
+ await zkToken.deploy({
82
+ symbol,
83
+ src: uri,
84
+ verificationKey: tokenVerificationKey,
85
+ });
86
+ await zkToken.initialize(adminContractAddress, decimals,
87
+ // We can set `startPaused` to `Bool(false)` here, because we are doing an atomic deployment
88
+ // If you are not deploying the admin and token contracts in the same transaction,
89
+ // it is safer to start the tokens paused, and resume them only after verifying that
90
+ // the admin contract has been deployed
91
+ Bool(false));
92
+ });
93
+ return {
94
+ tx,
95
+ isWhitelisted,
96
+ adminVerificationKey: {
97
+ hash: Field(adminVerificationKey.hash),
98
+ data: adminVerificationKey.data,
99
+ },
100
+ tokenVerificationKey: {
101
+ hash: Field(tokenVerificationKey.hash),
102
+ data: tokenVerificationKey.data,
103
+ },
104
+ };
105
+ }
106
+ export async function buildTokenTransaction(params) {
107
+ const { txType, chain, fee, sender, nonce, tokenAddress, from, to, amount, price, developerAddress, developerFee, provingKey, provingFee, whitelist, } = params;
108
+ console.log(txType, "tx for", tokenAddress.toBase58());
109
+ console.log("Sender:", sender.toBase58());
110
+ if (txType === "offer" ||
111
+ txType === "bid" || // direction is money direction as no token is moving
112
+ txType === "mint" ||
113
+ txType === "transfer" ||
114
+ txType === "sell") {
115
+ if (sender.toBase58() != from.toBase58())
116
+ throw new Error("Invalid sender");
117
+ }
118
+ if (txType === "buy" ||
119
+ txType === "withdrawOffer" ||
120
+ txType === "withdrawBid" // direction is money direction as no token is moving
121
+ ) {
122
+ if (sender.toBase58() != to.toBase58())
123
+ throw new Error("Invalid sender");
124
+ }
125
+ await fetchMinaAccount({
126
+ publicKey: sender,
127
+ force: true,
128
+ });
129
+ if (!Mina.hasAccount(sender)) {
130
+ console.error("Sender does not have account");
131
+ throw new Error("Sender does not have account");
132
+ }
133
+ const { symbol, adminContractAddress, adminAddress, isWhitelisted } = await getTokenSymbolAndAdmin({
134
+ tokenAddress,
135
+ chain,
136
+ });
137
+ const memo = params.memo ?? `${txType} ${symbol}`;
138
+ const whitelistedAdminContract = new FungibleTokenWhitelistedAdmin(adminContractAddress);
139
+ const tokenContract = isWhitelisted
140
+ ? WhitelistedFungibleToken
141
+ : FungibleToken;
142
+ if ((txType === "whitelistAdmin" ||
143
+ txType === "whitelistBid" ||
144
+ txType === "whitelistOffer") &&
145
+ !whitelist) {
146
+ throw new Error("Whitelist is required");
147
+ }
148
+ const whitelistedAddresses = whitelist
149
+ ? await Whitelist.create({ list: whitelist, name: symbol })
150
+ : undefined;
151
+ const zkToken = new tokenContract(tokenAddress);
152
+ const tokenId = zkToken.deriveTokenId();
153
+ if (txType === "mint" && adminAddress.toBase58() !== sender.toBase58())
154
+ throw new Error("Invalid sender for mint");
155
+ await fetchMinaAccount({
156
+ publicKey: tokenAddress,
157
+ tokenId,
158
+ force: true,
159
+ });
160
+ await fetchMinaAccount({
161
+ publicKey: from,
162
+ tokenId,
163
+ force: [
164
+ "offer",
165
+ "sell",
166
+ "transfer",
167
+ "withdrawOffer",
168
+ ].includes(txType),
169
+ });
170
+ await fetchMinaAccount({
171
+ publicKey: to,
172
+ tokenId,
173
+ force: [
174
+ "sell",
175
+ "whitelistAdmin",
176
+ "withdrawBid",
177
+ "withdrawOffer",
178
+ ].includes(txType),
179
+ });
180
+ const isNewAccount = Mina.hasAccount(to, tokenId) === false;
181
+ const offerContract = new FungibleTokenOfferContract([
182
+ "offer",
183
+ "whitelistOffer",
184
+ ].includes(txType)
185
+ ? to
186
+ : from, tokenId);
187
+ const bidContract = new FungibleTokenBidContract([
188
+ "bid",
189
+ ].includes(txType)
190
+ ? from
191
+ : to, tokenId);
192
+ const offerContractDeployment = new FungibleTokenOfferContract(to, tokenId);
193
+ const bidContractDeployment = new FungibleTokenBidContract(from, tokenId);
194
+ const vk = tokenVerificationKeys[chain === "mainnet" ? "mainnet" : "testnet"].vk;
195
+ if (!vk ||
196
+ !vk.FungibleTokenOfferContract ||
197
+ !vk.FungibleTokenOfferContract.hash ||
198
+ !vk.FungibleTokenOfferContract.data ||
199
+ !vk.FungibleTokenBidContract ||
200
+ !vk.FungibleTokenBidContract.hash ||
201
+ !vk.FungibleTokenBidContract.data ||
202
+ !vk.FungibleTokenWhitelistedAdmin ||
203
+ !vk.FungibleTokenWhitelistedAdmin.hash ||
204
+ !vk.FungibleTokenWhitelistedAdmin.data ||
205
+ !vk.FungibleTokenAdmin ||
206
+ !vk.FungibleTokenAdmin.hash ||
207
+ !vk.FungibleTokenAdmin.data ||
208
+ !vk.WhitelistedFungibleToken ||
209
+ !vk.WhitelistedFungibleToken.hash ||
210
+ !vk.WhitelistedFungibleToken.data ||
211
+ !vk.FungibleToken ||
212
+ !vk.FungibleToken.hash ||
213
+ !vk.FungibleToken.data)
214
+ throw new Error("Cannot get verification key");
215
+ const adminVerificationKey = isWhitelisted
216
+ ? vk.FungibleTokenWhitelistedAdmin
217
+ : vk.FungibleTokenAdmin;
218
+ const tokenVerificationKey = isWhitelisted
219
+ ? vk.WhitelistedFungibleToken
220
+ : vk.FungibleToken;
221
+ const offerVerificationKey = FungibleTokenOfferContract._verificationKey ?? {
222
+ hash: Field(vk.FungibleTokenOfferContract.hash),
223
+ data: vk.FungibleTokenOfferContract.data,
224
+ };
225
+ const bidVerificationKey = FungibleTokenBidContract._verificationKey ?? {
226
+ hash: Field(vk.FungibleTokenBidContract.hash),
227
+ data: vk.FungibleTokenBidContract.data,
228
+ };
229
+ console.log("Sender balance:", await accountBalanceMina(sender));
230
+ console.log("New account:", isNewAccount);
231
+ const tx = await Mina.transaction({ sender, fee, memo, nonce }, async () => {
232
+ const feeAccountUpdate = AccountUpdate.createSigned(sender);
233
+ if (isNewAccount) {
234
+ feeAccountUpdate.balance.subInPlace(1_000_000_000);
235
+ }
236
+ feeAccountUpdate.send({
237
+ to: provingKey,
238
+ amount: provingFee,
239
+ });
240
+ if (developerAddress && developerFee) {
241
+ feeAccountUpdate.send({
242
+ to: developerAddress,
243
+ amount: developerFee,
244
+ });
245
+ }
246
+ switch (txType) {
247
+ case "mint":
248
+ if (amount === undefined)
249
+ throw new Error("Error: Amount is required");
250
+ await zkToken.mint(to, amount);
251
+ break;
252
+ case "transfer":
253
+ if (amount === undefined)
254
+ throw new Error("Error: Amount is required");
255
+ await zkToken.transfer(from, to, amount);
256
+ break;
257
+ case "offer":
258
+ if (price === undefined)
259
+ throw new Error("Error: Price is required");
260
+ if (amount === undefined)
261
+ throw new Error("Error: Amount is required");
262
+ if (isNewAccount) {
263
+ await offerContractDeployment.deploy({
264
+ verificationKey: offerVerificationKey,
265
+ whitelist: whitelistedAddresses ?? Whitelist.empty(),
266
+ });
267
+ offerContract.account.zkappUri.set(`Offer for ${symbol}`);
268
+ await offerContract.initialize(sender, tokenAddress, amount, price);
269
+ await zkToken.approveAccountUpdates([
270
+ offerContractDeployment.self,
271
+ offerContract.self,
272
+ ]);
273
+ }
274
+ else {
275
+ await offerContract.offer(amount, price);
276
+ await zkToken.approveAccountUpdate(offerContract.self);
277
+ }
278
+ break;
279
+ case "buy":
280
+ if (amount === undefined)
281
+ throw new Error("Error: Amount is required");
282
+ await offerContract.buy(amount);
283
+ await zkToken.approveAccountUpdate(offerContract.self);
284
+ break;
285
+ case "withdrawOffer":
286
+ if (amount === undefined)
287
+ throw new Error("Error: Amount is required");
288
+ await offerContract.withdraw(amount);
289
+ await zkToken.approveAccountUpdate(offerContract.self);
290
+ break;
291
+ case "bid":
292
+ if (price === undefined)
293
+ throw new Error("Error: Price is required");
294
+ if (amount === undefined)
295
+ throw new Error("Error: Amount is required");
296
+ if (isNewAccount) {
297
+ await bidContractDeployment.deploy({
298
+ verificationKey: bidVerificationKey,
299
+ whitelist: whitelistedAddresses ?? Whitelist.empty(),
300
+ });
301
+ bidContract.account.zkappUri.set(`Bid for ${symbol}`);
302
+ await bidContract.initialize(tokenAddress, amount, price);
303
+ await zkToken.approveAccountUpdates([
304
+ bidContractDeployment.self,
305
+ bidContract.self,
306
+ ]);
307
+ }
308
+ else {
309
+ await bidContract.bid(amount, price);
310
+ await zkToken.approveAccountUpdate(bidContract.self);
311
+ }
312
+ break;
313
+ case "sell":
314
+ if (amount === undefined)
315
+ throw new Error("Error: Amount is required");
316
+ await bidContract.sell(amount);
317
+ await zkToken.approveAccountUpdate(bidContract.self);
318
+ break;
319
+ case "withdrawBid":
320
+ if (amount === undefined)
321
+ throw new Error("Error: Amount is required");
322
+ await bidContract.withdraw(amount);
323
+ await zkToken.approveAccountUpdate(bidContract.self);
324
+ break;
325
+ case "whitelistAdmin":
326
+ if (!whitelistedAddresses)
327
+ throw new Error("Whitelist is required");
328
+ await whitelistedAdminContract.updateWhitelist(whitelistedAddresses);
329
+ break;
330
+ case "whitelistBid":
331
+ if (!whitelistedAddresses)
332
+ throw new Error("Whitelist is required");
333
+ await bidContract.updateWhitelist(whitelistedAddresses);
334
+ break;
335
+ case "whitelistOffer":
336
+ if (!whitelistedAddresses)
337
+ throw new Error("Whitelist is required");
338
+ await offerContract.updateWhitelist(whitelistedAddresses);
339
+ await zkToken.approveAccountUpdate(offerContract.self);
340
+ break;
341
+ default:
342
+ throw new Error(`Unknown transaction type: ${txType}`);
343
+ }
344
+ });
345
+ return {
346
+ tx,
347
+ isWhitelisted,
348
+ adminContractAddress,
349
+ adminAddress,
350
+ symbol,
351
+ adminVerificationKey: {
352
+ hash: Field(adminVerificationKey.hash),
353
+ data: adminVerificationKey.data,
354
+ },
355
+ tokenVerificationKey: {
356
+ hash: Field(tokenVerificationKey.hash),
357
+ data: tokenVerificationKey.data,
358
+ },
359
+ offerVerificationKey,
360
+ bidVerificationKey,
361
+ };
362
+ }
363
+ export async function getTokenSymbolAndAdmin(params) {
364
+ const { tokenAddress, chain } = params;
365
+ const vk = tokenVerificationKeys[chain === "mainnet" ? "mainnet" : "testnet"].vk;
366
+ class FungibleTokenState extends Struct({
367
+ decimals: UInt8,
368
+ admin: PublicKey,
369
+ paused: Bool,
370
+ }) {
371
+ }
372
+ const FungibleTokenStateSize = FungibleTokenState.sizeInFields();
373
+ class FungibleTokenAdminState extends Struct({
374
+ adminPublicKey: PublicKey,
375
+ }) {
376
+ }
377
+ const FungibleTokenAdminStateSize = FungibleTokenAdminState.sizeInFields();
378
+ await fetchMinaAccount({ publicKey: tokenAddress, force: true });
379
+ if (!Mina.hasAccount(tokenAddress)) {
380
+ throw new Error("Token contract account not found");
381
+ }
382
+ const account = Mina.getAccount(tokenAddress);
383
+ const verificationKey = account.zkapp?.verificationKey;
384
+ if (!verificationKey) {
385
+ throw new Error("Token contract verification key not found");
386
+ }
387
+ if (verificationKey.hash.toJSON() !== vk.FungibleToken.hash ||
388
+ verificationKey.data !== vk.FungibleToken.data ||
389
+ verificationKey.hash.toJSON() !== vk.WhitelistedFungibleToken.hash ||
390
+ verificationKey.data !== vk.WhitelistedFungibleToken.data) {
391
+ throw new Error("Unknown token verification key");
392
+ }
393
+ if (account.zkapp?.appState === undefined) {
394
+ throw new Error("Token contract state not found");
395
+ }
396
+ const state = FungibleTokenState.fromFields(account.zkapp?.appState.slice(0, FungibleTokenStateSize));
397
+ const symbol = account.tokenSymbol;
398
+ const adminContractPublicKey = state.admin;
399
+ await fetchMinaAccount({
400
+ publicKey: adminContractPublicKey,
401
+ force: true,
402
+ });
403
+ if (!Mina.hasAccount(adminContractPublicKey)) {
404
+ throw new Error("Admin contract account not found");
405
+ }
406
+ const adminContract = Mina.getAccount(adminContractPublicKey);
407
+ const adminVerificationKey = adminContract.zkapp?.verificationKey;
408
+ if (!adminVerificationKey) {
409
+ throw new Error("Admin verification key not found");
410
+ }
411
+ let isWhitelisted = false;
412
+ if (vk.FungibleTokenWhitelistedAdmin.hash ===
413
+ adminVerificationKey.hash.toJSON() &&
414
+ vk.FungibleTokenWhitelistedAdmin.data === adminVerificationKey.data) {
415
+ isWhitelisted = true;
416
+ }
417
+ else if (vk.FungibleTokenAdmin.hash === adminVerificationKey.hash.toJSON() &&
418
+ vk.FungibleTokenAdmin.data === adminVerificationKey.data) {
419
+ isWhitelisted = false;
420
+ }
421
+ else {
422
+ throw new Error("Unknown admin verification key");
423
+ }
424
+ const adminAddress0 = adminContract.zkapp?.appState[0];
425
+ const adminAddress1 = adminContract.zkapp?.appState[1];
426
+ if (adminAddress0 === undefined || adminAddress1 === undefined) {
427
+ throw new Error("Cannot fetch admin address from admin contract");
428
+ }
429
+ const adminAddress = PublicKey.fromFields([adminAddress0, adminAddress1]);
430
+ return {
431
+ adminContractAddress: adminContractPublicKey,
432
+ adminAddress: adminAddress,
433
+ symbol,
434
+ isWhitelisted,
435
+ };
436
+ }
437
+ //# sourceMappingURL=build.js.map