Skip to content

Commit

Permalink
v0.1.4 (#7)
Browse files Browse the repository at this point in the history
* feat: move caller to Query.send from prankFulfill

* feat: capture stdout and stderr from ffi commands

* chore: add caller with send in a test

* feat: polish stdout and stderr handing

* feat: make Axiom library functions public to trigger a call and enable expectEmit in AxiomTest

---------

Co-authored-by: Yi Sun <[email protected]>
  • Loading branch information
rpalakkal and yi-sun authored Feb 24, 2024
1 parent 815008e commit dc98b83
Show file tree
Hide file tree
Showing 9 changed files with 207 additions and 80 deletions.
137 changes: 89 additions & 48 deletions build/axiom-std-cli-build.js
Original file line number Diff line number Diff line change
Expand Up @@ -4,60 +4,16 @@ var __commonJS = (cb, mod) => function __require() {
return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports;
};

// dist/compile.js
var require_compile = __commonJS({
"dist/compile.js"(exports2) {
"use strict";
Object.defineProperty(exports2, "__esModule", { value: true });
exports2.compile = void 0;
var js_12 = require("@axiom-crypto/circuit/js");
var utils_12 = require("@axiom-crypto/circuit/cliHandler/utils");
var compile = async (circuitPath, providerUri2, options) => {
let circuitFunction = "circuit";
const f = await (0, utils_12.getFunctionFromTs)(circuitPath, circuitFunction);
const provider2 = (0, utils_12.getProvider)(providerUri2);
const circuit2 = new js_12.AxiomBaseCircuit({
f: f.circuit,
mock: true,
provider: provider2,
shouldTime: false,
inputSchema: f.inputSchema
});
try {
const res = await circuit2.mockCompile(f.defaultInputs);
if (options.overrideQuerySchema) {
if (!/^[A-F0-9]+$/i.test(options.overrideQuerySchema)) {
throw new Error("overrideQuerySchema is not a hex string");
}
res.querySchema = ("0xdeadbeef" + options.overrideQuerySchema).padEnd(66, "0").substring(0, 66);
}
const circuitFn = `const ${f.importName} = AXIOM_CLIENT_IMPORT
${f.circuit.toString()}`;
const encoder = new TextEncoder();
const circuitBuild = encoder.encode(circuitFn);
const build = {
...res,
circuit: Buffer.from(circuitBuild).toString("base64")
};
console.log(JSON.stringify(build));
} catch (e) {
console.error(e);
}
};
exports2.compile = compile;
}
});

// dist/utils.js
var require_utils = __commonJS({
"dist/utils.js"(exports2) {
"use strict";
Object.defineProperty(exports2, "__esModule", { value: true });
exports2.getInputs = exports2.getAbis = exports2.findStructDefinition = exports2.findFilesWithAxiomInput = void 0;
exports2.redirectConsole = exports2.getInputs = exports2.getAbis = exports2.findStructDefinition = exports2.findFilesWithAxiomInput = void 0;
var tslib_1 = require("tslib");
var fs_1 = tslib_1.__importDefault(require("fs"));
var path_1 = tslib_1.__importDefault(require("path"));
var viem_1 = require("viem");
var viem_12 = require("viem");
var findFilesWithAxiomInput = (directory) => {
let files = [];
function traverseDirectory(dir) {
Expand Down Expand Up @@ -157,7 +113,7 @@ var require_utils = __commonJS({
throw new Error("Could not find valid ABI");
}
const abi = abis[0];
const rawInputs = (0, viem_1.decodeAbiParameters)(abi, inputs2)[0];
const rawInputs = (0, viem_12.decodeAbiParameters)(abi, inputs2)[0];
const abiComponents = abi[0].components;
const circuitInputs2 = {};
for (let i = 0; i < keys.length; i++) {
Expand All @@ -170,6 +126,82 @@ var require_utils = __commonJS({
return circuitInputs2;
};
exports2.getInputs = getInputs;
var redirectConsole = () => {
const originalConsoleLog = console.log;
const originalConsoleError = console.error;
let logString = "";
let errorString = "";
console.log = (...args) => {
logString += args.join(" ") + "\n ";
};
console.error = (...args) => {
errorString += args.join(" ") + "\n ";
};
const restoreConsole2 = () => {
console.log = originalConsoleLog;
console.error = originalConsoleError;
};
const getCaptures2 = () => ({
logs: logString,
errors: errorString
});
return { restoreConsole: restoreConsole2, getCaptures: getCaptures2 };
};
exports2.redirectConsole = redirectConsole;
}
});

// dist/compile.js
var require_compile = __commonJS({
"dist/compile.js"(exports2) {
"use strict";
Object.defineProperty(exports2, "__esModule", { value: true });
exports2.compile = void 0;
var js_12 = require("@axiom-crypto/circuit/js");
var utils_12 = require("@axiom-crypto/circuit/cliHandler/utils");
var utils_22 = require_utils();
var viem_12 = require("viem");
var compile = async (circuitPath, providerUri2, options) => {
const { restoreConsole: restoreConsole2, getCaptures: getCaptures2 } = (0, utils_22.redirectConsole)();
let circuitFunction = "circuit";
const f = await (0, utils_12.getFunctionFromTs)(circuitPath, circuitFunction);
const provider2 = (0, utils_12.getProvider)(providerUri2);
const circuit2 = new js_12.AxiomBaseCircuit({
f: f.circuit,
mock: true,
provider: provider2,
shouldTime: false,
inputSchema: f.inputSchema
});
try {
const res = await circuit2.mockCompile(f.defaultInputs);
if (options.overrideQuerySchema) {
if (!/^[A-F0-9]+$/i.test(options.overrideQuerySchema)) {
throw new Error("overrideQuerySchema is not a hex string");
}
res.querySchema = ("0xdeadbeef" + options.overrideQuerySchema).padEnd(66, "0").substring(0, 66);
}
const circuitFn = `const ${f.importName} = AXIOM_CLIENT_IMPORT
${f.circuit.toString()}`;
const encoder = new TextEncoder();
const circuitBuild = encoder.encode(circuitFn);
const build = {
...res,
circuit: Buffer.from(circuitBuild).toString("base64")
};
const logs = getCaptures2();
const output = (0, viem_12.encodeAbiParameters)((0, viem_12.parseAbiParameters)("string x, string y, string z"), [logs.logs, logs.errors, JSON.stringify(build)]);
restoreConsole2();
console.log(output);
} catch (e) {
console.error(e);
const logs = getCaptures2();
const output = (0, viem_12.encodeAbiParameters)((0, viem_12.parseAbiParameters)("string x, string y, string z"), [logs.logs, logs.errors, ""]);
restoreConsole2();
console.log(output);
}
};
exports2.compile = compile;
}
});

Expand All @@ -182,10 +214,12 @@ var require_prove = __commonJS({
var js_1 = require("@axiom-crypto/circuit/js");
var utils_1 = require("@axiom-crypto/circuit/cliHandler/utils");
var utils_2 = require_utils();
var viem_1 = require("viem");
var core_1 = require("@axiom-crypto/core");
var client_1 = require("@axiom-crypto/client");
var utils_3 = require("@axiom-crypto/client/axiom/utils");
var prove = async (compiledJson, inputs, providerUri, sourceChainId, callbackTarget, callbackExtraData, refundAddress, maxFeePerGas, callbackGasLimit, caller) => {
const { restoreConsole, getCaptures } = (0, utils_2.redirectConsole)();
const decoder = new TextDecoder();
const provider = (0, utils_1.getProvider)(providerUri);
let compiled = JSON.parse(compiledJson);
Expand Down Expand Up @@ -242,9 +276,16 @@ var require_prove = __commonJS({
calldata: build.calldata,
computeResults
};
console.log(JSON.stringify(query));
const logs = getCaptures();
const output = (0, viem_1.encodeAbiParameters)((0, viem_1.parseAbiParameters)("string x, string y, string z"), [logs.logs, logs.errors, JSON.stringify(query)]);
restoreConsole();
console.log(output);
} catch (e) {
console.error(e);
const logs = getCaptures();
const output = (0, viem_1.encodeAbiParameters)((0, viem_1.parseAbiParameters)("string x, string y, string z"), [logs.logs, logs.errors, ""]);
restoreConsole();
console.log(output);
}
};
exports.prove = prove;
Expand Down
16 changes: 13 additions & 3 deletions cli/compile.ts
Original file line number Diff line number Diff line change
@@ -1,11 +1,14 @@
import { AxiomBaseCircuit } from "@axiom-crypto/circuit/js";
import { getFunctionFromTs, getProvider } from "@axiom-crypto/circuit/cliHandler/utils";
import { redirectConsole } from "./utils";
import { encodeAbiParameters, parseAbiParameters } from "viem";

export const compile = async (
circuitPath: string,
providerUri: string,
options: {overrideQuerySchema?: string }
options: { overrideQuerySchema?: string }
) => {
const { restoreConsole, getCaptures } = redirectConsole();
let circuitFunction = "circuit";
const f = await getFunctionFromTs(circuitPath, circuitFunction);
const provider = getProvider(providerUri);
Expand All @@ -24,17 +27,24 @@ export const compile = async (
throw new Error("overrideQuerySchema is not a hex string");
}
res.querySchema = ("0xdeadbeef" + options.overrideQuerySchema).padEnd(66, '0').substring(0, 66);
}
}
const circuitFn = `const ${f.importName} = AXIOM_CLIENT_IMPORT\n${f.circuit.toString()}`;
const encoder = new TextEncoder();
const circuitBuild = encoder.encode(circuitFn);
const build = {
...res,
circuit: Buffer.from(circuitBuild).toString('base64'),
}
console.log(JSON.stringify(build));
const logs = getCaptures();
const output = encodeAbiParameters(parseAbiParameters('string x, string y, string z'), [logs.logs, logs.errors, JSON.stringify(build)])
restoreConsole();
console.log(output);
}
catch (e) {
console.error(e);
const logs = getCaptures();
const output = encodeAbiParameters(parseAbiParameters('string x, string y, string z'), [logs.logs, logs.errors, ""])
restoreConsole();
console.log(output);
}
}
15 changes: 11 additions & 4 deletions cli/prove.ts
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
import path from 'path';
import { AxiomBaseCircuit } from "@axiom-crypto/circuit/js";
import { getFunctionFromTs, getProvider, readInputs, saveJsonToFile } from "@axiom-crypto/circuit/cliHandler/utils";
import { getInputs } from './utils';
import { decodeAbiParameters } from 'viem';
import { getInputs, redirectConsole } from './utils';
import { decodeAbiParameters, encodeAbiParameters, parseAbiParameters } from 'viem';
import { AxiomSdkCore } from "@axiom-crypto/core";
import { buildSendQuery } from "@axiom-crypto/client";
import { argsArrToObj } from '@axiom-crypto/client/axiom/utils';
Expand All @@ -19,7 +19,7 @@ export const prove = async (
callbackGasLimit: string,
caller: string,
) => {

const { restoreConsole, getCaptures } = redirectConsole();
const decoder = new TextDecoder();

const provider = getProvider(providerUri);
Expand Down Expand Up @@ -86,9 +86,16 @@ export const prove = async (
computeResults,
};

console.log(JSON.stringify(query));
const logs = getCaptures();
const output = encodeAbiParameters(parseAbiParameters('string x, string y, string z'), [logs.logs, logs.errors, JSON.stringify(query)])
restoreConsole();
console.log(output);
}
catch (e) {
console.error(e);
const logs = getCaptures();
const output = encodeAbiParameters(parseAbiParameters('string x, string y, string z'), [logs.logs, logs.errors, ""])
restoreConsole();
console.log(output);
}
}
28 changes: 28 additions & 0 deletions cli/utils.ts
Original file line number Diff line number Diff line change
Expand Up @@ -133,4 +133,32 @@ export const getInputs = (inputs: string, inputSchema: string): any => {
}
}
return circuitInputs;
}

export const redirectConsole = () => {
const originalConsoleLog = console.log;
const originalConsoleError = console.error;

let logString = '';
let errorString = '';

console.log = (...args) => {
logString += args.join(' ') + '\n ';
};

console.error = (...args) => {
errorString += args.join(' ') + '\n ';
};

const restoreConsole = () => {
console.log = originalConsoleLog;
console.error = originalConsoleError;
};

const getCaptures = () => ({
logs: logString,
errors: errorString
});

return { restoreConsole, getCaptures };
}
2 changes: 1 addition & 1 deletion src/AxiomCli.sol
Original file line number Diff line number Diff line change
Expand Up @@ -4,5 +4,5 @@ pragma solidity ^0.8.0;
library AxiomCli {

/// @dev The SHA256 hash of the Axiom CLI binary
bytes public constant CLI_SHASUM = hex"9b2cdc50d6d5b9501411debd8e390f9405b032019006ecf5ee24bf751768f80e";
bytes public constant CLI_SHASUM = hex"f0f355f27f363bab6acb092fabeeffcf63b80ba08a7bd13577317a6732a90ff7";
}
3 changes: 2 additions & 1 deletion src/AxiomTest.sol
Original file line number Diff line number Diff line change
Expand Up @@ -131,7 +131,8 @@ abstract contract AxiomTest is Test {
callbackExtraData: callbackExtraData,
feeData: feeData,
axiomVm: axiomVm,
outputString: ""
outputString: "",
caller: msg.sender
});
}
}
Loading

0 comments on commit dc98b83

Please sign in to comment.