aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGreg Hysen <greg.hysen@gmail.com>2018-11-10 14:24:24 +0800
committerGreg Hysen <greg.hysen@gmail.com>2018-11-29 08:38:10 +0800
commit59206c387e702492d22e975acf806ebe7de36bfd (patch)
treeb6ac130c7f197c28bb1224fd25640b09ad92cbb2
parent20f1526c7d0e1edb4a1de8e8a26811ae81b609dc (diff)
downloaddexon-0x-contracts-59206c387e702492d22e975acf806ebe7de36bfd.tar.gz
dexon-0x-contracts-59206c387e702492d22e975acf806ebe7de36bfd.tar.zst
dexon-0x-contracts-59206c387e702492d22e975acf806ebe7de36bfd.zip
Works for types with default widths
-rw-r--r--packages/order-utils/test/abi/calldata.ts24
-rw-r--r--packages/order-utils/test/abi/data_type.ts9
-rw-r--r--packages/order-utils/test/abi_encoder_test.ts6
3 files changed, 19 insertions, 20 deletions
diff --git a/packages/order-utils/test/abi/calldata.ts b/packages/order-utils/test/abi/calldata.ts
index c1630c34a..dc67a731e 100644
--- a/packages/order-utils/test/abi/calldata.ts
+++ b/packages/order-utils/test/abi/calldata.ts
@@ -91,15 +91,10 @@ export class DependentCalldataBlock extends CalldataBlock {
public toBuffer(): Buffer {
const dependencyOffset = this.dependency.getOffsetInBytes();
- console.log("Dependency Offset - ", dependencyOffset);
const parentOffset = this.parent.getOffsetInBytes();
- console.log("Parent Offset - ", parentOffset);
const parentHeaderSize = this.parent.getHeaderSizeInBytes();
- console.log("Parent Header size - ", parentHeaderSize);
const pointer: number = dependencyOffset - (parentOffset + parentHeaderSize);
- console.log("DAT PTR = ", pointer);
const pointerBuf = ethUtil.toBuffer(`0x${pointer.toString(16)}`);
- console.log("Chye - ", pointerBuf);
const evmWordWidthInBytes = 32;
const pointerBufPadded = ethUtil.setLengthLeft(pointerBuf, evmWordWidthInBytes);
return pointerBufPadded;
@@ -114,11 +109,13 @@ export class MemberCalldataBlock extends CalldataBlock {
private static DEPENDENT_PAYLOAD_SIZE_IN_BYTES = 32;
private header: Buffer | undefined;
private members: CalldataBlock[];
+ private contiguous: boolean;
- constructor(name: string, signature: string, /*offsetInBytes: number,*/ relocatable: boolean) {
+ constructor(name: string, signature: string, /*offsetInBytes: number,*/ relocatable: boolean, contiguous: boolean) {
super(name, signature, /*offsetInBytes,*/ 0, 0, relocatable);
this.members = [];
this.header = undefined;
+ this.contiguous = contiguous;
}
public setMembers(members: CalldataBlock[]) {
@@ -130,6 +127,10 @@ export class MemberCalldataBlock extends CalldataBlock {
this.setBodySize(0);
}
+ public isContiguous(): boolean {
+ return true;
+ }
+
public setHeader(header: Buffer) {
this.setHeaderSize(header.byteLength);
this.header = header;
@@ -150,6 +151,9 @@ class Queue<T> {
push(val: T) {
this.store.push(val);
}
+ pushFront(val: T) {
+ this.store.unshift(val);
+ }
pop(): T | undefined {
return this.store.shift();
}
@@ -186,8 +190,8 @@ export class Calldata {
console.log(block.getDependency());
blockQueue.push(block.getDependency());
} else if (block instanceof MemberCalldataBlock) {
- _.each(block.getMembers(), (member: CalldataBlock) => {
- blockQueue.push(member);
+ _.eachRight(block.getMembers(), (member: CalldataBlock) => {
+ blockQueue.pushFront(member);
});
}
}
@@ -203,8 +207,8 @@ export class Calldata {
if (block instanceof DependentCalldataBlock) {
blockQueue.push(block.getDependency());
} else if (block instanceof MemberCalldataBlock) {
- _.each(block.getMembers(), (member: CalldataBlock) => {
- blockQueue.push(member);
+ _.eachRight(block.getMembers(), (member: CalldataBlock) => {
+ blockQueue.pushFront(member);
});
}
}
diff --git a/packages/order-utils/test/abi/data_type.ts b/packages/order-utils/test/abi/data_type.ts
index 72d270bf1..0783b9c56 100644
--- a/packages/order-utils/test/abi/data_type.ts
+++ b/packages/order-utils/test/abi/data_type.ts
@@ -32,7 +32,6 @@ export abstract class PayloadDataType extends DataType {
}
public generateCalldataBlock(value: any, parentBlock?: CalldataBlock): PayloadCalldataBlock {
- //console.log();
const encodedValue = this.encodeValue(value);
const name = this.getDataItem().name;
const signature = this.getSignature();
@@ -101,9 +100,6 @@ export abstract class MemberDataType extends DataType {
public constructor(dataItem: DataItem, isArray: boolean = false, arrayLength?: number, arrayElementType?: string) {
super(dataItem);
-
- console.log('*'.repeat(40), arrayLength);
-
this.memberMap = {};
this.members = [];
this.isArray = isArray;
@@ -138,7 +134,6 @@ 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);
@@ -169,7 +164,7 @@ export abstract class MemberDataType extends DataType {
);
}
- const methodBlock: MemberCalldataBlock = new MemberCalldataBlock(this.getDataItem().name, this.getSignature(), false);
+ const methodBlock: MemberCalldataBlock = new MemberCalldataBlock(this.getDataItem().name, this.getSignature(), this.isStatic(), false);
let members = this.members;
if (this.isArray && this.arrayLength === undefined) {
@@ -190,7 +185,7 @@ export abstract class MemberDataType extends DataType {
}
protected generateCalldataBlockFromObject(obj: object): MemberCalldataBlock {
- const methodBlock: MemberCalldataBlock = new MemberCalldataBlock(this.getDataItem().name, this.getSignature(), false);
+ const methodBlock: MemberCalldataBlock = new MemberCalldataBlock(this.getDataItem().name, this.getSignature(), this.isStatic(), false);
const memberBlocks: CalldataBlock[] = [];
let childMap = _.cloneDeep(this.memberMap);
_.forOwn(obj, (value: any, key: string) => {
diff --git a/packages/order-utils/test/abi_encoder_test.ts b/packages/order-utils/test/abi_encoder_test.ts
index 4c571434e..404f160fd 100644
--- a/packages/order-utils/test/abi_encoder_test.ts
+++ b/packages/order-utils/test/abi_encoder_test.ts
@@ -116,7 +116,7 @@ describe.only('ABI Encoder', () => {
});
- it('Types with default widths', async () => {
+ it.only('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']];
@@ -201,7 +201,7 @@ describe.only('ABI Encoder', () => {
expect(calldata).to.be.equal(expectedCalldata);
});
- it('Multidimensional Arrays / Static Members', async () => {
+ it.only('Multidimensional Arrays / Static Members', async () => {
const method = new AbiEncoder.Method(AbiSamples.multiDimensionalArraysStaticTypeAbi);
// Eight 3-dimensional arrays of uint8[2][2][2]
@@ -259,7 +259,7 @@ describe.only('ABI Encoder', () => {
expect(calldata).to.be.equal(expectedCalldata);
});
- it.only('Fixed Lenfgth Array / Dynamic Members', async () => {
+ it('Fixed Lenfgth Array / Dynamic Members', async () => {
const method = new AbiEncoder.Method(AbiSamples.staticArrayDynamicMembersAbi);
const args = [["Brave", "New", "World"]];
const calldata = method.encode(args);