@metadaoproject/futarchy 0.3.0-alpha.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 (52) hide show
  1. package/dist/AmmClient.d.ts +191 -0
  2. package/dist/AmmClient.js +278 -0
  3. package/dist/AmmClient.js.map +1 -0
  4. package/dist/AutocratClient.d.ts +284 -0
  5. package/dist/AutocratClient.js +229 -0
  6. package/dist/AutocratClient.js.map +1 -0
  7. package/dist/ConditionalVaultClient.d.ts +146 -0
  8. package/dist/ConditionalVaultClient.js +124 -0
  9. package/dist/ConditionalVaultClient.js.map +1 -0
  10. package/dist/InstructionHandler.d.ts +27 -0
  11. package/dist/InstructionHandler.js +95 -0
  12. package/dist/InstructionHandler.js.map +1 -0
  13. package/dist/constants.d.ts +9 -0
  14. package/dist/constants.js +13 -0
  15. package/dist/constants.js.map +1 -0
  16. package/dist/index.d.ts +6 -0
  17. package/dist/index.js +23 -0
  18. package/dist/index.js.map +1 -0
  19. package/dist/types/amm.d.ts +542 -0
  20. package/dist/types/amm.js +545 -0
  21. package/dist/types/amm.js.map +1 -0
  22. package/dist/types/autocrat.d.ts +632 -0
  23. package/dist/types/autocrat.js +635 -0
  24. package/dist/types/autocrat.js.map +1 -0
  25. package/dist/types/conditional_vault.d.ts +448 -0
  26. package/dist/types/conditional_vault.js +451 -0
  27. package/dist/types/conditional_vault.js.map +1 -0
  28. package/dist/types/index.d.ts +20 -0
  29. package/dist/types/index.js +10 -0
  30. package/dist/types/index.js.map +1 -0
  31. package/dist/utils/cu.d.ts +8 -0
  32. package/dist/utils/cu.js +12 -0
  33. package/dist/utils/cu.js.map +1 -0
  34. package/dist/utils/filters.d.ts +3 -0
  35. package/dist/utils/filters.js +19 -0
  36. package/dist/utils/filters.js.map +1 -0
  37. package/dist/utils/index.d.ts +17 -0
  38. package/dist/utils/index.js +51 -0
  39. package/dist/utils/index.js.map +1 -0
  40. package/dist/utils/instruction.d.ts +4 -0
  41. package/dist/utils/instruction.js +14 -0
  42. package/dist/utils/instruction.js.map +1 -0
  43. package/dist/utils/metadata.d.ts +4 -0
  44. package/dist/utils/metadata.js +30 -0
  45. package/dist/utils/metadata.js.map +1 -0
  46. package/dist/utils/pda.d.ts +10 -0
  47. package/dist/utils/pda.js +58 -0
  48. package/dist/utils/pda.js.map +1 -0
  49. package/dist/utils/priceMath.d.ts +9 -0
  50. package/dist/utils/priceMath.js +42 -0
  51. package/dist/utils/priceMath.js.map +1 -0
  52. package/package.json +35 -0
@@ -0,0 +1,30 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.uploadConditionalTokenMetadataJson = exports.assetImageMap = void 0;
4
+ const umi_bundle_defaults_1 = require("@metaplex-foundation/umi-bundle-defaults");
5
+ const umi_uploader_bundlr_1 = require("@metaplex-foundation/umi-uploader-bundlr");
6
+ exports.assetImageMap = {
7
+ fMETA: "https://arweave.net/tGxvOjMZw7B0qHsdCcIMO57oH5g5OaItOZdXo3BXKz8",
8
+ fUSDC: "https://arweave.net/DpvxeAyVbaoivhIVCLjdf566k2SwVn0YVBL0sTOezWk",
9
+ pMETA: "https://arweave.net/iuqi7PRRESdDxj1oRyk2WzR90_zdFcmZsuWicv3XGfs",
10
+ pUSDC: "https://arweave.net/e4IO7F59F_RKCiuB--_ABPot7Qh1yFsGkWzVhcXuKDU",
11
+ };
12
+ // Upload some JSON, returning its URL
13
+ const uploadConditionalTokenMetadataJson = async (connection, identityPlugin, proposalNumber, symbol
14
+ // proposal: BN,
15
+ // conditionalToken: string,
16
+ // image: string
17
+ ) => {
18
+ // use bundlr, targeting arweave
19
+ const umi = (0, umi_bundle_defaults_1.createUmi)(connection);
20
+ umi.use((0, umi_uploader_bundlr_1.bundlrUploader)());
21
+ umi.use(identityPlugin);
22
+ return umi.uploader.uploadJson({
23
+ name: `Proposal ${proposalNumber}: ${symbol}`,
24
+ image: exports.assetImageMap[symbol],
25
+ symbol,
26
+ description: "A conditional token for use in futarchy.",
27
+ });
28
+ };
29
+ exports.uploadConditionalTokenMetadataJson = uploadConditionalTokenMetadataJson;
30
+ //# sourceMappingURL=metadata.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"metadata.js","sourceRoot":"","sources":["../../src/utils/metadata.ts"],"names":[],"mappings":";;;AACA,kFAAqE;AAErE,kFAA0E;AAG7D,QAAA,aAAa,GAA2B;IACnD,KAAK,EAAE,iEAAiE;IACxE,KAAK,EAAE,iEAAiE;IACxE,KAAK,EAAE,iEAAiE;IACxE,KAAK,EAAE,iEAAiE;CACzE,CAAC;AAEF,sCAAsC;AAC/B,MAAM,kCAAkC,GAAG,KAAK,EACrD,UAAsB,EACtB,cAAyB,EACzB,cAAsB,EACtB,MAAc;AACd,kBAAkB;AAClB,8BAA8B;AAC9B,kBAAkB;EACD,EAAE;IACnB,gCAAgC;IAChC,MAAM,GAAG,GAAG,IAAA,+BAAS,EAAC,UAAU,CAAC,CAAC;IAClC,GAAG,CAAC,GAAG,CAAC,IAAA,oCAAc,GAAE,CAAC,CAAC;IAC1B,GAAG,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;IAExB,OAAO,GAAG,CAAC,QAAQ,CAAC,UAAU,CAAC;QAC7B,IAAI,EAAE,YAAY,cAAc,KAAK,MAAM,EAAE;QAC7C,KAAK,EAAE,qBAAa,CAAC,MAAM,CAAC;QAC5B,MAAM;QACN,WAAW,EAAE,0CAA0C;KACxD,CAAC,CAAC;AACL,CAAC,CAAC;AApBW,QAAA,kCAAkC,sCAoB7C"}
@@ -0,0 +1,10 @@
1
+ import { PublicKey } from "@solana/web3.js";
2
+ import BN from "bn.js";
3
+ export declare const getVaultAddr: (programId: PublicKey, settlementAuthority: PublicKey, underlyingTokenMint: PublicKey) => [PublicKey, number];
4
+ export declare const getVaultFinalizeMintAddr: (programId: PublicKey, vault: PublicKey) => [PublicKey, number];
5
+ export declare const getMetadataAddr: (mint: PublicKey) => [PublicKey, number];
6
+ export declare const getVaultRevertMintAddr: (programId: PublicKey, vault: PublicKey) => [PublicKey, number];
7
+ export declare const getDaoTreasuryAddr: (programId: PublicKey, dao: PublicKey) => [PublicKey, number];
8
+ export declare const getProposalAddr: (programId: PublicKey, proposer: PublicKey, nonce: BN) => [PublicKey, number];
9
+ export declare const getAmmAddr: (programId: PublicKey, baseMint: PublicKey, quoteMint: PublicKey) => [PublicKey, number];
10
+ export declare const getAmmLpMintAddr: (programId: PublicKey, amm: PublicKey) => [PublicKey, number];
@@ -0,0 +1,58 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getAmmLpMintAddr = exports.getAmmAddr = exports.getProposalAddr = exports.getDaoTreasuryAddr = exports.getVaultRevertMintAddr = exports.getMetadataAddr = exports.getVaultFinalizeMintAddr = exports.getVaultAddr = void 0;
4
+ const web3_js_1 = require("@solana/web3.js");
5
+ const anchor_1 = require("@coral-xyz/anchor");
6
+ const constants_1 = require("../constants");
7
+ const getVaultAddr = (programId, settlementAuthority, underlyingTokenMint) => {
8
+ return web3_js_1.PublicKey.findProgramAddressSync([
9
+ anchor_1.utils.bytes.utf8.encode("conditional_vault"),
10
+ settlementAuthority.toBuffer(),
11
+ underlyingTokenMint.toBuffer(),
12
+ ], programId);
13
+ };
14
+ exports.getVaultAddr = getVaultAddr;
15
+ const getVaultFinalizeMintAddr = (programId, vault) => {
16
+ return getVaultMintAddr(programId, vault, "conditional_on_finalize_mint");
17
+ };
18
+ exports.getVaultFinalizeMintAddr = getVaultFinalizeMintAddr;
19
+ const getMetadataAddr = (mint) => {
20
+ return web3_js_1.PublicKey.findProgramAddressSync([
21
+ anchor_1.utils.bytes.utf8.encode("metadata"),
22
+ constants_1.MPL_TOKEN_METADATA_PROGRAM_ID.toBuffer(),
23
+ mint.toBuffer(),
24
+ ], constants_1.MPL_TOKEN_METADATA_PROGRAM_ID);
25
+ };
26
+ exports.getMetadataAddr = getMetadataAddr;
27
+ const getVaultRevertMintAddr = (programId, vault) => {
28
+ return getVaultMintAddr(programId, vault, "conditional_on_revert_mint");
29
+ };
30
+ exports.getVaultRevertMintAddr = getVaultRevertMintAddr;
31
+ const getVaultMintAddr = (programId, vault, seed) => {
32
+ return web3_js_1.PublicKey.findProgramAddressSync([anchor_1.utils.bytes.utf8.encode(seed), vault.toBuffer()], programId);
33
+ };
34
+ const getDaoTreasuryAddr = (programId, dao) => {
35
+ return web3_js_1.PublicKey.findProgramAddressSync([dao.toBuffer()], programId);
36
+ };
37
+ exports.getDaoTreasuryAddr = getDaoTreasuryAddr;
38
+ const getProposalAddr = (programId, proposer, nonce) => {
39
+ return web3_js_1.PublicKey.findProgramAddressSync([
40
+ anchor_1.utils.bytes.utf8.encode("proposal"),
41
+ proposer.toBuffer(),
42
+ nonce.toBuffer("le", 8),
43
+ ], programId);
44
+ };
45
+ exports.getProposalAddr = getProposalAddr;
46
+ const getAmmAddr = (programId, baseMint, quoteMint) => {
47
+ return web3_js_1.PublicKey.findProgramAddressSync([
48
+ anchor_1.utils.bytes.utf8.encode("amm__"),
49
+ baseMint.toBuffer(),
50
+ quoteMint.toBuffer(),
51
+ ], programId);
52
+ };
53
+ exports.getAmmAddr = getAmmAddr;
54
+ const getAmmLpMintAddr = (programId, amm) => {
55
+ return web3_js_1.PublicKey.findProgramAddressSync([anchor_1.utils.bytes.utf8.encode("amm_lp_mint"), amm.toBuffer()], programId);
56
+ };
57
+ exports.getAmmLpMintAddr = getAmmLpMintAddr;
58
+ //# sourceMappingURL=pda.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pda.js","sourceRoot":"","sources":["../../src/utils/pda.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ import BN from "bn.js";
2
+ export declare class PriceMath {
3
+ static getAmmPriceFromReserves(baseReserves: BN, quoteReserves: BN): BN;
4
+ static getChainAmount(humanAmount: number, decimals: number): BN;
5
+ static getHumanPrice(ammPrice: BN, baseDecimals: number, quoteDecimals: number): number;
6
+ static getAmmPrice(humanPrice: number, baseDecimals: number, quoteDecimals: number): BN;
7
+ static getAmmPrices(baseDecimals: number, quoteDecimals: number, ...prices: number[]): BN[];
8
+ static scale(number: number, decimals: number): BN;
9
+ }
@@ -0,0 +1,42 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.PriceMath = void 0;
7
+ const bn_js_1 = __importDefault(require("bn.js"));
8
+ const BN_TEN = new bn_js_1.default(10);
9
+ const PRICE_SCALE = BN_TEN.pow(new bn_js_1.default(12));
10
+ class PriceMath {
11
+ static getAmmPriceFromReserves(baseReserves, quoteReserves) {
12
+ return quoteReserves.mul(PRICE_SCALE).div(baseReserves);
13
+ }
14
+ static getChainAmount(humanAmount, decimals) {
15
+ return new bn_js_1.default(humanAmount * 10 ** decimals);
16
+ }
17
+ static getHumanPrice(ammPrice, baseDecimals, quoteDecimals) {
18
+ let decimalScalar = BN_TEN.pow(new bn_js_1.default(quoteDecimals - baseDecimals).abs());
19
+ let price1e12 = quoteDecimals > baseDecimals
20
+ ? ammPrice.div(decimalScalar)
21
+ : ammPrice.mul(decimalScalar);
22
+ return price1e12.toNumber() / 1e12;
23
+ }
24
+ static getAmmPrice(humanPrice, baseDecimals, quoteDecimals) {
25
+ let price1e12 = PRICE_SCALE.muln(humanPrice);
26
+ let decimalScalar = BN_TEN.pow(new bn_js_1.default(quoteDecimals - baseDecimals).abs());
27
+ let scaledPrice = quoteDecimals > baseDecimals
28
+ ? price1e12.mul(decimalScalar)
29
+ : price1e12.div(decimalScalar);
30
+ return scaledPrice;
31
+ }
32
+ static getAmmPrices(baseDecimals, quoteDecimals, ...prices) {
33
+ // Map through each price, scaling it using the scalePrice method
34
+ return prices.map((price) => this.getAmmPrice(price, baseDecimals, quoteDecimals));
35
+ }
36
+ static scale(number, decimals) {
37
+ return new bn_js_1.default(number * 10 ** decimals);
38
+ // return new BN(number).mul(new BN(10).pow(new BN(decimals)));
39
+ }
40
+ }
41
+ exports.PriceMath = PriceMath;
42
+ //# sourceMappingURL=priceMath.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"priceMath.js","sourceRoot":"","sources":["../../src/utils/priceMath.ts"],"names":[],"mappings":";;;;;;AAAA,kDAAuB;AAEvB,MAAM,MAAM,GAAG,IAAI,eAAE,CAAC,EAAE,CAAC,CAAC;AAC1B,MAAM,WAAW,GAAG,MAAM,CAAC,GAAG,CAAC,IAAI,eAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AAE3C,MAAa,SAAS;IACb,MAAM,CAAC,uBAAuB,CACnC,YAAgB,EAChB,aAAiB;QAEjB,OAAO,aAAa,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;IAC1D,CAAC;IAEM,MAAM,CAAC,cAAc,CAAC,WAAmB,EAAE,QAAgB;QAChE,OAAO,IAAI,eAAE,CAAC,WAAW,GAAG,EAAE,IAAI,QAAQ,CAAC,CAAC;IAC9C,CAAC;IAEM,MAAM,CAAC,aAAa,CACzB,QAAY,EACZ,YAAoB,EACpB,aAAqB;QAErB,IAAI,aAAa,GAAG,MAAM,CAAC,GAAG,CAAC,IAAI,eAAE,CAAC,aAAa,GAAG,YAAY,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;QAE3E,IAAI,SAAS,GACX,aAAa,GAAG,YAAY;YAC1B,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,aAAa,CAAC;YAC7B,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;QAElC,OAAO,SAAS,CAAC,QAAQ,EAAE,GAAG,IAAI,CAAC;IACrC,CAAC;IAEM,MAAM,CAAC,WAAW,CACvB,UAAkB,EAClB,YAAoB,EACpB,aAAqB;QAErB,IAAI,SAAS,GAAG,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAE7C,IAAI,aAAa,GAAG,MAAM,CAAC,GAAG,CAAC,IAAI,eAAE,CAAC,aAAa,GAAG,YAAY,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;QAE3E,IAAI,WAAW,GACb,aAAa,GAAG,YAAY;YAC1B,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,aAAa,CAAC;YAC9B,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;QAEnC,OAAO,WAAW,CAAC;IACrB,CAAC;IAEM,MAAM,CAAC,YAAY,CACxB,YAAoB,EACpB,aAAqB,EACrB,GAAG,MAAgB;QAEnB,iEAAiE;QACjE,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAC1B,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,YAAY,EAAE,aAAa,CAAC,CACrD,CAAC;IACJ,CAAC;IAEM,MAAM,CAAC,KAAK,CAAC,MAAc,EAAE,QAAgB;QAClD,OAAO,IAAI,eAAE,CAAC,MAAM,GAAG,EAAE,IAAI,QAAQ,CAAC,CAAC;QACvC,+DAA+D;IACjE,CAAC;CACF;AA3DD,8BA2DC"}
package/package.json ADDED
@@ -0,0 +1,35 @@
1
+ {
2
+ "name": "@metadaoproject/futarchy",
3
+ "version": "0.3.0-alpha.0",
4
+ "main": "dist/index.js",
5
+ "types": "dist/index.d.ts",
6
+ "files": [
7
+ "/dist"
8
+ ],
9
+ "scripts": {
10
+ "lint:fix": "prettier */*.js \"*/**/*{.js,.ts}\" -w",
11
+ "lint": "prettier */*.js \"*/**/*{.js,.ts}\" --check",
12
+ "build": "rm -rf ./dist && cp ../target/types/* ./src/types && yarn lint:fix && yarn tsc"
13
+ },
14
+ "dependencies": {
15
+ "@coral-xyz/anchor": "^0.29.0",
16
+ "@solana/spl-token": "^0.3.7",
17
+ "@solana/web3.js": "^1.74.0",
18
+ "bn.js": "^5.2.1",
19
+ "decimal.js": "^10.4.3",
20
+ "esbuild": "^0.17.15"
21
+ },
22
+ "devDependencies": {
23
+ "chai": "^4.3.4",
24
+ "mocha": "^9.0.3",
25
+ "ts-mocha": "^10.0.0",
26
+ "@types/bn.js": "^5.1.0",
27
+ "@types/chai": "^4.3.0",
28
+ "@types/mocha": "^9.0.0",
29
+ "solana-bankrun": "^0.2.0",
30
+ "spl-token-bankrun": "0.2.3",
31
+ "typescript": "^4.3.5",
32
+ "prettier": "^2.6.2"
33
+ },
34
+ "packageManager": "yarn@3.3.1"
35
+ }