watcher-ts/packages/graph-node/src/eth-abi.test.ts
nikugogoi aabf9f8e15
Implement data source templates (#106)
* Implement data source templates

* Remove optional param from wasm instantiate

* Add all types for solidity to typescript mapping

* Set contract address in context for data source templates

* Implement block handlers for data source templates
2022-01-06 18:32:08 +05:30

75 lines
2.6 KiB
TypeScript

//
// Copyright 2021 Vulcanize, Inc.
//
import path from 'path';
import { expect } from 'chai';
import { BaseProvider } from '@ethersproject/providers';
import { instantiate } from './loader';
import { getDummyGraphData, getTestDatabase, getTestIndexer, getTestProvider } from '../test/utils';
import { Database } from './database';
import { Indexer } from '../test/utils/indexer';
describe('ethereum ABI encode decode', () => {
let exports: any;
let db: Database;
let indexer: Indexer;
let provider: BaseProvider;
let encoded: string;
before(async () => {
db = getTestDatabase();
indexer = getTestIndexer();
provider = getTestProvider();
});
it('should load the subgraph example wasm', async () => {
const dummyGraphData = getDummyGraphData();
const filePath = path.resolve(__dirname, '../test/subgraph/example1/build/Example1/Example1.wasm');
const instance = await instantiate(
db,
indexer,
provider,
{},
filePath,
dummyGraphData
);
exports = instance.exports;
const { _start } = exports;
// Important to call _start for built subgraphs on instantiation!
// TODO: Check api version https://github.com/graphprotocol/graph-node/blob/6098daa8955bdfac597cec87080af5449807e874/runtime/wasm/src/module/mod.rs#L533
_start();
});
it('should encode data', async () => {
const { testEthereumEncode, __getString } = exports;
const encodedPtr = await testEthereumEncode();
encoded = __getString(encodedPtr);
expect(encoded)
.to
.equal('0x0000000000000000000000000000000000000000000000000000000000000420583bc7e1bc4799a225663353b82eb36d925399e6ef2799a6a95909f5ab8ac945000000000000000000000000000000000000000000000000000000000000003e000000000000000000000000000000000000000000000000000000000000003f0000000000000000000000000000000000000000000000000000000000000001');
});
it('should decode data', async () => {
const { testEthereumDecode, __getString, __getArray, __newString } = exports;
const encodedString = await __newString(encoded);
const decodedArrayPtr = await testEthereumDecode(encodedString);
const decodedArray = __getArray(decodedArrayPtr);
const [addressString, bytesString, bigInt1String, bigInt2String, boolString] = decodedArray.map((value: any) => __getString(value));
expect(addressString).to.equal('0x0000000000000000000000000000000000000420');
expect(bytesString).to.equal('0x583bc7e1bc4799a225663353b82eb36d925399e6ef2799a6a95909f5ab8ac945');
expect(bigInt1String).to.equal('62');
expect(bigInt2String).to.equal('63');
expect(boolString).to.equal('true');
});
});