Package Exports
- @axiom-crypto/codec
- @axiom-crypto/codec/index.js
This package does not declare an exports field, so the exports above have been automatically detected and optimized by JSPM instead. If any package subpath is missing, it is recommended to post an issue to the original package (@axiom-crypto/codec) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.
Readme
Axiom Query Codec
This Typescript package handles encoding and decoding of Axiom Queries.
Usage
For additional usage examples, please see the /tests folder.
Encoding a v2 Query
const sourceChainId = 1;
const k = 14;
const vkeyLen = 27;
const vkey = [
"0x0000000e0000000609bddd9050d5cb871ead4831773e485d445bde72a636efda",
"0x1a1ce29363a95e142250c9b1df9fcc375c0b71f470588fa27fd57ad62b8cc3b8",
"0xaca6c8e6e65a5225833d35582dfe7f9fbdb28598e7d87261505ac67a26951b63",
"0x452351ddad76be162d068b32017323fa42cdbeb8882e6b9582277860c70eb6c4",
"0x8c39a3fa19ab7624b1c084dc9fcca92697d8d41620b2393d75f44573da6be049",
"0xcc79594db2d33d0b2adb2b256c968b17fc485d2105d46f7221d936f975fce7fd",
"0xa5b28db43392ab162e3fee98ae4b3b5935b6a8cd2b4cc8fc26d319b8cca11b05",
"0xb683ec6275cd9c146fc386defa21b217f145d3d8bff96a5ef1d2530dddeb53fd",
"0xd228c6a0da9844082e3fee98ae4b3b5935b6a8cd2b4cc8fc26d319b8cca11b05",
"0xb683ec6275cd9c146fc386defa21b217f145d3d8bff96a5ef1d2530dddeb53fd",
"0xd228c6a0da984408fcdcb0effeaf608e158bad39e70072d125e5b5ea83955ffb",
"0x519a816dfc19e1224006758437d363765499910d51df557f567e3d629fbd7967",
"0x6cd5aa11f6bcaf2e28e51fedd5bb63a14f5eb83b2ce83646742b81b1d31c9c27",
"0xa8642cfe25252a2f3ce91b8b813227e1249646be944066164de6bdca2160993f",
"0x647e99067fdcb308aa083ca60fd005a3426f1cdae3f61cd9cbf99a325dd10b9d",
"0x8bdf8050a2bf9e1925024beceabdb4b4911d011231b05c11cbea9de0a296a9a7",
"0xff37223fa4521324822bb6371579ee4d87fc23254bb027e326c7a60c83989daa",
"0xfb5d7cdca6f47902548b714abc5c49468e138847d3fd35a200d1c5240b1fb352",
"0xc8f988d6dadf7c12c9c899f8dfcd1b01a8497ee582027bdc6ad9995e6c6836d4",
"0x19ee3efcb9fc3908d65b2e0e1f1afb07e7f35cbfea5f0649c5e0fa2e50825254",
"0x4fabda276bdae80dc2d10c313afdca472b8d45c6c98872fb8d8b09bc88a77455",
"0xa4995ef6767e9b079e0425b2f369b67d1bdf0cba3a2681fd12b690922d42547e",
"0xe5d9d4dea6af9615aec2751eaac88b4bcf7969cca3e547bebd893d3f751abc05",
"0x8af761b646abf21daef711c3949c6f59999cf8d0b12c7c256700e6ec67350497",
"0x0bbab076c2dad81f826c6e91fed65b76616d54dfb63bd4c854b8e774554f2d5c",
"0xfa80f45234bb7103758da87d898e257c4bede49ce5365c6d7436b466a5c7f655",
"0x0e10dcf28e543323",
];
const computeProofRaw = [
"0xf08a9fbf6aa1f3fb27851ff707d578c63969e8fc30499e992459e14105e03720",
"0xd93c948001512f47a1f4ee4e1302363d88c5df5d52a507ae9ecdd6043bb4cc2e",
"0x4819463c40c44377be16a3bc55f2a05308657483d6b19261fe180229a0cbc503",
"0xb90ca2c55f2dab164337f7503f109f617a3f914481761ef706fdfc42a7883915",
"0x5230666db2fcc516076061538fd01d7869b30567881cc34e05ecd123fb7d7999",
"0x894f3f36d1d5cd76a41dd27ac0098a844757515b9fd0a16b0a3a8e67947ac780",
"0x8189020b1c13c38731ad46af4699500e23ec90b77977669064b50500a77eec05",
"0x9e9c8f90974b04f35fcdc714509ca9a38abe8df61753cc4aefc61564331e8b16",
"0x6df183079bbf659093c8334e1a6bae21a719ba17b29d94ec7f1277fd27013f81",
"0xa20fb5ae56418e81ed9dedf3e708429fd5ad703cd7d49d6dabe947092bf12f87",
"0x823c310561b7f55a17a657aa87203eedf580b6fee639019fd23e36279b091b20",
"0x632debc513cf2897c18f4776d76d502333c8df622ff06a097ff2522eff34aa9b",
"0x09f19aac148f0b1169901ace4dc7d5924b436a9413ae16d3f67d6471e51571a4",
"0xac5dc971463c1e82b9368b0a80215ace2ee1a0494c59eec646e80f03b0db6592",
"0x3fd8d858a40199f75dbfa182bb9f0c880ca7942fdb2df30fe0119730442bf42f",
"0x18d483768799f9892f761ee6a046b5c6b984a173c5f5474b5a49dd3e9a0d3bab",
"0x6b033b106f8c6d51ce72616d71e041e54ea3da3ce7a5d2f075313ac1be439f02",
"0x5fffc0cf07ac33893ddf94fc1b25a4b8b073f15dcd95fc3484fe473e1072b205",
"0xdd6a2cb891ee443ecabbb84caee02cfca08870e5bb07cf096201ae9d0112b109",
"0x1ebb396036f43391ff39ff40c08acb10933891285b057d8672229af992ab7c08",
"0xe5cbd8a1a206897374a425297eac18e4087b26c0b5cfc9901c64dc2e016ae30d",
"0x220b6a7f35d58659fbb2038ca155d343f12d34ed35d8f6f3f0bdf78f297a1228",
"0x779822e0786a139fe3bcca766302847155bc8dec5f445a95e3da3b3d5ffd0323",
"0x5033c66364e6b862be706a082a294814dc3d2b7a808cc04527d22ec292d77716",
"0xe85decacc284a06bff5b45679379b7d9d85d26090209a80da085555df6ee1302",
"0xea1ffd2c0578cb5727984a3a5c77075546fd75931e04d7e44db3c3ea0f5b152f",
"0xffb162acdf5c846bd9bc331025e4854856e4e8d68b7d2f9d5b395ef8b5fc9c08",
"0xdea5e6df32bc9c0d4b71ee3437efebaf0ba11a29fa241350f25225cbf6b8ef12",
"0x86f1680c12dee6efbf00443a6071e33964adbb4373c071efeb5835ec8e1efd1d",
"0x2214f8adbf1ace46fb88b7b47d175654bf45b7f861fbcd485c8b8e32303a2118",
"0xc52832a6739b9974a7aa78f3eab172fcedb13237a79da05916242b1dfdd2f40c",
"0x777a97b11164c244e875b1a7fccebff66f92d05726994ae0e868cbd70c675712",
"0xbb230940f96174495d3ab4b871a27d56f9510bc5a00594e8d24a2d033f420612",
"0xe7535e736b4318db5bef5942fe66054f7b99f475e5fede5a589014785306071d",
"0xecc0a65b07b4b274ccfc64f417b6c7a10604f34195c19b0926d322a2c826ce05",
"0xb8d8c157037f3373536938aecff1d4392f48b29c16d0b499127f17cb675ed701",
"0x0000000000000000000000000000000000000000000000000000000000000000",
"0xc160b2e978e1037bcc2034e366cfed4f6532c014319ab40602cf93d3fefcec22",
"0xc8a84807085c69fbebac778605aa0d2fd610f840ac32b248d1c2f4c00cb4b400",
"0xd0579274b1e406c16b250704b8e1683019611adc878370956584c1a5f784ea0f",
"0xa68b6973d41090b360a8dd0a151761115af8da30c688b25ecc6dad64854f2211",
"0x429934b81bcdeb2a4be0bfdf278bd7c2894f8550b1e504995e310752db33a108",
"0x8219d0029b2760dfbf2f231846de8b042e2a0be9f28dcaab2e4a34a82c841f2b",
"0x564688c793dee27c7f89735f2bef9bf87ecbf53976f46b4286d01fe6f35edd23",
"0x6ae147ae4f898b9c227e40b46713edbc07b5ac0686ed33e14d286da575ebbe09",
"0x13e378b9ce62a3d367ba89cded15b9c485de4af9d8db711b7eecc9d43a915720",
"0x762a767e01cc602b1c76037defdd8890f2a77f2a90ff1d14a49d9f639e45f505",
"0x7e4bdec786615fe2cb6883b08b59f385fc6cc8f7aba6965053b18c60a6098e04",
"0xdc83c16b9ffb6bf683d714b35c8fa5ab25950482fb7757a6c6ca7085f523482c",
"0x98ef52da04bc13491ae2e874851c647f778f141681651a1d3b0c88db1c77c403",
"0x46f091d16f7d8ca0dad3d971a5348e038134294467067c515956983d61685c1e",
"0x17fd52ac8fe6ce1f8b6c03516fabebaa16bfcb18c66ebdd2e3c3a22ab0f5c22d",
"0x72a7a090e6642273203457e9eb7db25bbf26418d144edac0c305a7bbf235182e",
"0x417bda7622cac6f173a9e47c5a3626bd2b641e354b9b868fddee7802821ec020",
"0xb463641aaa099f23202001b793dc978a89da2c24fa0ab4964f7fb0cccc772b15",
"0xd2edda42535bea2201fdbe28d6aee35154fd4df0a82d09f14193a38404502005",
"0xfffe392c999ef8065909de4aa427c8d02dfff8793f12582829f4efba645af524",
"0xa51e7832f5c1970d29c1d3304c7f5c2cc199c7d7b4a6be3a518dd4adde247c1b",
"0x3616e8bb8c735878faf1d00f7fe8d159d16917724df5e99d752c58812d484d2f",
"0x0a402861a2d79ae8ebb9287c67a37c5fbab5ef17c428f4ef1b62c23f738fd423",
"0x706b5e2d8b8e8550391b9d10fd8ac4462cb71677e2dc12aab4d4514daad0d512",
"0xde7b9d73817e10ca37b5f2cab8ab5bcb549127d90229e0533bf97cb80252f709",
"0xd902d285a5395f96ea452bd4a4053df580879c9ce50c3a14f06e2ed43ffe6ba1"
];
const computeProof = ethers.concat(computeProofRaw);
const maxFeePerGas = "0x05d21dba00"; // 25gwei
const callbackGasLimit = 200000; // 200k
const dataSubqueries: DataSubquery[] = [
{
type: DataSubqueryType.Header,
subqueryData: {
blockNumber: BLOCK_NUMBER,
fieldIdx: getHeaderFieldIdx(HeaderField.Miner),
},
},
];
const dataQuery: AxiomV2DataQuery = {
sourceChainId: sourceChainId.toString(),
subqueries: dataSubqueries,
}
const computeQuery: AxiomV2ComputeQuery = {
k,
vkeyLen,
vkey,
computeProof,
}
const callback: AxiomV2Callback = {
callbackAddr: "0xB392448932F6ef430555631f765Df0dfaE34efF3",
callbackFunctionSelector: "0xe3d670d7",
resultLen: 2,
callbackExtraData: "0x00",
}
// Encode the Query
const encodedQuery = encodeQueryV2(
sourceChainId,
dataQuery,
computeQuery,
callback,
maxFeePerGas,
callbackGasLimit,
);Decoding a v2 Query
// `queryString` is an encoded v2 Query (automatic detection)
const queryData = decodeQuery(queryString);Encoding a v1 Query
const query = [
{
blockNumber: 15537394,
address: "0x5C69bEe701ef814a2B6a3EDD4B1652CB9cc5aA6f",
slot: 0,
value: 0,
},
{
blockNumber: 15822595,
address: "0x5C69bEe701ef814a2B6a3EDD4B1652CB9cc5aA6f",
slot: 0,
value: 0,
},
{
blockNumber: 17000000,
address: "0x5C69bEe701ef814a2B6a3EDD4B1652CB9cc5aA6f",
},
]
let queryRows: string[] = [];
for (const queryRow of query) {
const length = Object.keys(queryRow).length;
const rowHash = encodeQueryRow(length, queryRow.blockNumber, queryRow.address, queryRow.slot ?? 0, queryRow.value ?? 0);
queryRows.push(rowHash);
}
const encodedQuery = encodeQueryV1(query.length, queryRows);Decoding a v1 Query
// `queryString` is an encoded v2 Query (automatic detection)
const queryData = decodeQuery(queryString);