Merge pull request #47 from 0xProject/is-valid-signature-contract
Refactor isValidSignature
This commit is contained in:
@@ -52,76 +52,6 @@ describe('ExchangeWrapper', () => {
|
||||
afterEach(async () => {
|
||||
await blockchainLifecycle.revertAsync();
|
||||
});
|
||||
describe('#isValidSignatureAsync', () => {
|
||||
// The Exchange smart contract `isValidSignature` method only validates orderHashes and assumes
|
||||
// the length of the data is exactly 32 bytes. Thus for these tests, we use data of this size.
|
||||
const dataHex = '0x6927e990021d23b1eb7b8789f6a6feaf98fe104bb0cf8259421b79f9a34222b0';
|
||||
const signature = {
|
||||
v: 27,
|
||||
r: '0x61a3ed31b43c8780e905a260a35faefcc527be7516aa11c0256729b5b351bc33',
|
||||
s: '0x40349190569279751135161d22529dc25add4f6069af05be04cacbda2ace2254',
|
||||
};
|
||||
const address = '0x5409ed021d9299bf6814279a6a1411a7e866a631';
|
||||
describe('should throw if passed a malformed signature', () => {
|
||||
it('malformed v', async () => {
|
||||
const malformedSignature = {
|
||||
v: 34,
|
||||
r: signature.r,
|
||||
s: signature.s,
|
||||
};
|
||||
return expect(zeroEx.exchange.isValidSignatureAsync(dataHex, malformedSignature, address))
|
||||
.to.be.rejected();
|
||||
});
|
||||
it('r lacks 0x prefix', async () => {
|
||||
const malformedR = signature.r.replace('0x', '');
|
||||
const malformedSignature = {
|
||||
v: signature.v,
|
||||
r: malformedR,
|
||||
s: signature.s,
|
||||
};
|
||||
return expect(zeroEx.exchange.isValidSignatureAsync(dataHex, malformedSignature, address))
|
||||
.to.be.rejected();
|
||||
});
|
||||
it('r is too short', async () => {
|
||||
const malformedR = signature.r.substr(10);
|
||||
const malformedSignature = {
|
||||
v: signature.v,
|
||||
r: malformedR,
|
||||
s: signature.s.replace('0', 'z'),
|
||||
};
|
||||
return expect(zeroEx.exchange.isValidSignatureAsync(dataHex, malformedSignature, address))
|
||||
.to.be.rejected();
|
||||
});
|
||||
it('s is not hex', async () => {
|
||||
const malformedS = signature.s.replace('0', 'z');
|
||||
const malformedSignature = {
|
||||
v: signature.v,
|
||||
r: signature.r,
|
||||
s: malformedS,
|
||||
};
|
||||
return expect(zeroEx.exchange.isValidSignatureAsync(dataHex, malformedSignature, address))
|
||||
.to.be.rejected();
|
||||
});
|
||||
});
|
||||
it('should return false if the data doesn\'t pertain to the signature & address', async () => {
|
||||
const isValid = await zeroEx.exchange.isValidSignatureAsync('0x0', signature, address);
|
||||
expect(isValid).to.be.false();
|
||||
});
|
||||
it('should return false if the address doesn\'t pertain to the signature & dataHex', async () => {
|
||||
const validUnrelatedAddress = '0x8b0292B11a196601eD2ce54B665CaFEca0347D42';
|
||||
const isValid = await zeroEx.exchange.isValidSignatureAsync(dataHex, signature, validUnrelatedAddress);
|
||||
expect(isValid).to.be.false();
|
||||
});
|
||||
it('should return false if the signature doesn\'t pertain to the dataHex & address', async () => {
|
||||
const wrongSignature = {...signature, v: 28};
|
||||
const isValid = await zeroEx.exchange.isValidSignatureAsync(dataHex, wrongSignature, address);
|
||||
expect(isValid).to.be.false();
|
||||
});
|
||||
it('should return true if the signature does pertain to the dataHex & address', async () => {
|
||||
const isValid = await zeroEx.exchange.isValidSignatureAsync(dataHex, signature, address);
|
||||
expect(isValid).to.be.true();
|
||||
});
|
||||
});
|
||||
describe('#fillOrKillOrderAsync', () => {
|
||||
let makerTokenAddress: string;
|
||||
let takerTokenAddress: string;
|
||||
|
Reference in New Issue
Block a user