making progress on basic example
This commit is contained in:
@@ -95,15 +95,17 @@ export abstract class MemberDataType extends DataType {
|
||||
private members: DataType[];
|
||||
private isArray: boolean;
|
||||
protected arrayLength: number | undefined;
|
||||
protected arrayElementType: string | undefined;
|
||||
|
||||
|
||||
public constructor(dataItem: DataItem, isArray: boolean = false, arrayLength?: number) {
|
||||
public constructor(dataItem: DataItem, isArray: boolean = false, arrayLength?: number, arrayElementType?: string) {
|
||||
super(dataItem);
|
||||
|
||||
this.memberMap = {};
|
||||
this.members = [];
|
||||
this.isArray = isArray;
|
||||
this.arrayLength = arrayLength;
|
||||
this.arrayElementType = arrayElementType;
|
||||
if (isArray && arrayLength !== undefined) {
|
||||
[this.members, this.memberMap] = this.createMembersWithLength(dataItem, arrayLength);
|
||||
} else if (!isArray) {
|
||||
@@ -119,10 +121,10 @@ export abstract class MemberDataType extends DataType {
|
||||
|
||||
let members: DataType[] = [];
|
||||
let memberMap: MemberMap = {};
|
||||
_.each(dataItem.components, (dataItem: DataItem) => {
|
||||
_.each(dataItem.components, (memberItem: DataItem) => {
|
||||
const childDataItem = {
|
||||
type: dataItem.type,
|
||||
name: `${dataItem.name}.${dataItem.name}`,
|
||||
type: memberItem.type,
|
||||
name: `${dataItem.name}.${memberItem.name}`,
|
||||
} as DataItem;
|
||||
const child = DataTypeFactory.create(childDataItem, this);
|
||||
members.push(child);
|
||||
@@ -133,12 +135,13 @@ export abstract class MemberDataType extends DataType {
|
||||
}
|
||||
|
||||
private createMembersWithLength(dataItem: DataItem, length: number): [DataType[], MemberMap] {
|
||||
console.log(dataItem);
|
||||
let members: DataType[] = [];
|
||||
let memberMap: MemberMap = {};
|
||||
const range = _.range(length);
|
||||
_.each(range, (idx: number) => {
|
||||
const childDataItem = {
|
||||
type: dataItem.type,
|
||||
type: this.arrayElementType,
|
||||
name: `${dataItem.name}[${idx.toString(10)}]`,
|
||||
} as DataItem;
|
||||
const components = dataItem.components;
|
||||
@@ -164,7 +167,7 @@ export abstract class MemberDataType extends DataType {
|
||||
}
|
||||
|
||||
let members = this.members;
|
||||
if (this.arrayLength === undefined) {
|
||||
if (this.isArray && this.arrayLength === undefined) {
|
||||
[members,] = this.createMembersWithLength(this.getDataItem(), value.length);
|
||||
}
|
||||
|
||||
|
||||
@@ -347,9 +347,10 @@ export class SolArray extends MemberDataType {
|
||||
}
|
||||
|
||||
const isArray = true;
|
||||
const arrayElementType = matches[1];
|
||||
const arrayLength = (matches[2] === '') ? undefined : parseInt(matches[2], 10);
|
||||
super(dataItem, isArray, arrayLength);
|
||||
this.elementType = matches[1];
|
||||
super(dataItem, isArray, arrayLength, arrayElementType);
|
||||
this.elementType = arrayElementType;
|
||||
this.arraySignature = this.computeSignature();
|
||||
}
|
||||
|
||||
@@ -388,7 +389,7 @@ export class Method extends MemberDataType {
|
||||
public selector: string;
|
||||
|
||||
constructor(abi: MethodAbi) {
|
||||
super({ type: 'method', name: abi.name });
|
||||
super({ type: 'method', name: abi.name, components: abi.inputs });
|
||||
this.methodSignature = this.computeSignature();
|
||||
this.selector = this.methodSelector = this.computeSelector();
|
||||
|
||||
|
||||
@@ -18,13 +18,15 @@ import * as AbiEncoder from './abi/abi_encoder';
|
||||
|
||||
import * as AbiSamples from './abi_samples';
|
||||
|
||||
AbiEncoder.DataTypeFactory.setImpl(new AbiEncoder.EvmDataTypeFactoryImpl());
|
||||
|
||||
chaiSetup.configure();
|
||||
const expect = chai.expect;
|
||||
|
||||
describe.only('ABI Encoder', () => {
|
||||
describe.only('ABI Tests at Method Level', () => {
|
||||
|
||||
it('Crazy ABI', async () => {
|
||||
it.skip('Crazy ABI', async () => {
|
||||
const method = new AbiEncoder.Method(AbiSamples.crazyAbi);
|
||||
console.log(method.getSignature());
|
||||
|
||||
@@ -89,8 +91,9 @@ describe.only('ABI Encoder', () => {
|
||||
expect(calldata).to.be.equal(expectedCalldata);
|
||||
});
|
||||
|
||||
it('Crazy ABI #1', async () => {
|
||||
it.skip('Crazy ABI #1', async () => {
|
||||
const method = new AbiEncoder.Method(AbiSamples.crazyAbi1);
|
||||
|
||||
const args = [
|
||||
new BigNumber(256745454),
|
||||
new BigNumber(-256745454),
|
||||
@@ -115,6 +118,7 @@ describe.only('ABI Encoder', () => {
|
||||
|
||||
it('Types with default widths', async () => {
|
||||
const method = new AbiEncoder.Method(AbiSamples.typesWithDefaultWidthsAbi);
|
||||
console.log(method);
|
||||
const args = [new BigNumber(1), new BigNumber(-1), '0x56', [new BigNumber(1)], [new BigNumber(-1)], ['0x56']];
|
||||
const calldata = method.encode(args);
|
||||
console.log(calldata);
|
||||
@@ -325,7 +329,7 @@ describe.only('ABI Encoder', () => {
|
||||
expect(calldata).to.be.equal(expectedCalldata);
|
||||
});
|
||||
|
||||
it('Yessir', async () => {
|
||||
it.only('Yessir', async () => {
|
||||
const method = new AbiEncoder.Method(AbiSamples.simpleAbi);
|
||||
const calldata = method.encode([new BigNumber(5), 'five']);
|
||||
console.log(calldata);
|
||||
|
||||
Reference in New Issue
Block a user