Comments and cleanup
This commit is contained in:
@@ -12,6 +12,10 @@ interface ProxyIdToAssetWrappers {
|
|||||||
[proxyId: number]: AbstractAssetWrapper;
|
[proxyId: number]: AbstractAssetWrapper;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This class abstracts away the differences between ERC20 and ERC721 tokens so that
|
||||||
|
* the logic that uses it does not need to care what standard a token belongs to.
|
||||||
|
*/
|
||||||
export class AssetWrapper {
|
export class AssetWrapper {
|
||||||
private _proxyIdToAssetWrappers: ProxyIdToAssetWrappers;
|
private _proxyIdToAssetWrappers: ProxyIdToAssetWrappers;
|
||||||
constructor(assetWrappers: AbstractAssetWrapper[]) {
|
constructor(assetWrappers: AbstractAssetWrapper[]) {
|
||||||
@@ -29,7 +33,6 @@ export class AssetWrapper {
|
|||||||
const balance = await assetWrapper.getBalanceAsync(userAddress, assetData);
|
const balance = await assetWrapper.getBalanceAsync(userAddress, assetData);
|
||||||
return balance;
|
return balance;
|
||||||
}
|
}
|
||||||
|
|
||||||
case constants.ERC721_PROXY_ID: {
|
case constants.ERC721_PROXY_ID: {
|
||||||
const assetWrapper = this._proxyIdToAssetWrappers[proxyId] as ERC721Wrapper;
|
const assetWrapper = this._proxyIdToAssetWrappers[proxyId] as ERC721Wrapper;
|
||||||
const assetProxyData = assetProxyUtils.decodeERC721AssetData(assetData);
|
const assetProxyData = assetProxyUtils.decodeERC721AssetData(assetData);
|
||||||
@@ -41,7 +44,6 @@ export class AssetWrapper {
|
|||||||
const balance = isOwner ? new BigNumber(1) : new BigNumber(0);
|
const balance = isOwner ? new BigNumber(1) : new BigNumber(0);
|
||||||
return balance;
|
return balance;
|
||||||
}
|
}
|
||||||
|
|
||||||
default:
|
default:
|
||||||
throw errorUtils.spawnSwitchErr('proxyId', proxyId);
|
throw errorUtils.spawnSwitchErr('proxyId', proxyId);
|
||||||
}
|
}
|
||||||
@@ -54,7 +56,6 @@ export class AssetWrapper {
|
|||||||
await assetWrapper.setBalanceAsync(userAddress, assetData, desiredBalance);
|
await assetWrapper.setBalanceAsync(userAddress, assetData, desiredBalance);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
case constants.ERC721_PROXY_ID: {
|
case constants.ERC721_PROXY_ID: {
|
||||||
if (!desiredBalance.eq(0) && !desiredBalance.eq(1)) {
|
if (!desiredBalance.eq(0) && !desiredBalance.eq(1)) {
|
||||||
throw new Error(`Balance for ERC721 token can only be set to 0 or 1. Got: ${desiredBalance}`);
|
throw new Error(`Balance for ERC721 token can only be set to 0 or 1. Got: ${desiredBalance}`);
|
||||||
@@ -82,11 +83,6 @@ export class AssetWrapper {
|
|||||||
tokenOwner,
|
tokenOwner,
|
||||||
userAddress,
|
userAddress,
|
||||||
);
|
);
|
||||||
} else if (
|
|
||||||
(userAddress !== tokenOwner && desiredBalance.eq(0)) ||
|
|
||||||
(tokenOwner === userAddress && desiredBalance.eq(1))
|
|
||||||
) {
|
|
||||||
return; // noop
|
|
||||||
} else if (tokenOwner === userAddress && desiredBalance.eq(0)) {
|
} else if (tokenOwner === userAddress && desiredBalance.eq(0)) {
|
||||||
// Burn token
|
// Burn token
|
||||||
await erc721Wrapper.burnAsync(assetProxyData.tokenAddress, assetProxyData.tokenId, userAddress);
|
await erc721Wrapper.burnAsync(assetProxyData.tokenAddress, assetProxyData.tokenId, userAddress);
|
||||||
@@ -94,7 +90,6 @@ export class AssetWrapper {
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
default:
|
default:
|
||||||
throw errorUtils.spawnSwitchErr('proxyId', proxyId);
|
throw errorUtils.spawnSwitchErr('proxyId', proxyId);
|
||||||
}
|
}
|
||||||
@@ -107,7 +102,6 @@ export class AssetWrapper {
|
|||||||
const allowance = await assetWrapper.getProxyAllowanceAsync(userAddress, assetData);
|
const allowance = await assetWrapper.getProxyAllowanceAsync(userAddress, assetData);
|
||||||
return allowance;
|
return allowance;
|
||||||
}
|
}
|
||||||
|
|
||||||
case constants.ERC721_PROXY_ID: {
|
case constants.ERC721_PROXY_ID: {
|
||||||
const assetWrapper = this._proxyIdToAssetWrappers[proxyId] as ERC721Wrapper;
|
const assetWrapper = this._proxyIdToAssetWrappers[proxyId] as ERC721Wrapper;
|
||||||
const erc721ProxyData = assetProxyUtils.decodeERC721AssetData(assetData);
|
const erc721ProxyData = assetProxyUtils.decodeERC721AssetData(assetData);
|
||||||
@@ -123,7 +117,6 @@ export class AssetWrapper {
|
|||||||
const allowance = isProxyApproved || isProxyApprovedForAllAsync ? new BigNumber(1) : new BigNumber(0);
|
const allowance = isProxyApproved || isProxyApprovedForAllAsync ? new BigNumber(1) : new BigNumber(0);
|
||||||
return allowance;
|
return allowance;
|
||||||
}
|
}
|
||||||
|
|
||||||
default:
|
default:
|
||||||
throw errorUtils.spawnSwitchErr('proxyId', proxyId);
|
throw errorUtils.spawnSwitchErr('proxyId', proxyId);
|
||||||
}
|
}
|
||||||
@@ -140,7 +133,6 @@ export class AssetWrapper {
|
|||||||
await assetWrapper.setAllowanceAsync(userAddress, assetData, desiredAllowance);
|
await assetWrapper.setAllowanceAsync(userAddress, assetData, desiredAllowance);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
case constants.ERC721_PROXY_ID: {
|
case constants.ERC721_PROXY_ID: {
|
||||||
if (!desiredAllowance.eq(0) && !desiredAllowance.eq(1)) {
|
if (!desiredAllowance.eq(0) && !desiredAllowance.eq(1)) {
|
||||||
throw new Error(`Allowance for ERC721 token can only be set to 0 or 1. Got: ${desiredAllowance}`);
|
throw new Error(`Allowance for ERC721 token can only be set to 0 or 1. Got: ${desiredAllowance}`);
|
||||||
@@ -164,8 +156,9 @@ export class AssetWrapper {
|
|||||||
assetProxyData.tokenAddress,
|
assetProxyData.tokenAddress,
|
||||||
assetProxyData.tokenId,
|
assetProxyData.tokenId,
|
||||||
);
|
);
|
||||||
// TODO: We should have a way to deal with this. Things get hairier once we are testing
|
// HACK: We do not currently support ApprovedForAll when setting proxy allowance
|
||||||
// batch fills
|
// This was intentional since unsetting ApprovedForAll, will unset approval for unrelated
|
||||||
|
// tokens other then the one specified in the call to this method.
|
||||||
if (isProxyApprovedForAll) {
|
if (isProxyApprovedForAll) {
|
||||||
throw new Error(`We don't currently support the use of "approveAll" functionality for ERC721.`);
|
throw new Error(`We don't currently support the use of "approveAll" functionality for ERC721.`);
|
||||||
}
|
}
|
||||||
@@ -177,21 +170,16 @@ export class AssetWrapper {
|
|||||||
if (!isProxyApproved && desiredAllowance.eq(1)) {
|
if (!isProxyApproved && desiredAllowance.eq(1)) {
|
||||||
await erc721Wrapper.approveProxyAsync(assetProxyData.tokenAddress, assetProxyData.tokenId);
|
await erc721Wrapper.approveProxyAsync(assetProxyData.tokenAddress, assetProxyData.tokenId);
|
||||||
} else if (isProxyApproved && desiredAllowance.eq(0)) {
|
} else if (isProxyApproved && desiredAllowance.eq(0)) {
|
||||||
|
// Remove approval
|
||||||
await erc721Wrapper.approveAsync(
|
await erc721Wrapper.approveAsync(
|
||||||
constants.NULL_ADDRESS,
|
constants.NULL_ADDRESS,
|
||||||
assetProxyData.tokenAddress,
|
assetProxyData.tokenAddress,
|
||||||
assetProxyData.tokenId,
|
assetProxyData.tokenId,
|
||||||
);
|
);
|
||||||
} else if (
|
|
||||||
(!isProxyApproved && desiredAllowance.eq(0)) ||
|
|
||||||
(isProxyApproved && desiredAllowance.eq(1))
|
|
||||||
) {
|
|
||||||
return; // noop
|
|
||||||
}
|
}
|
||||||
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
default:
|
default:
|
||||||
throw errorUtils.spawnSwitchErr('proxyId', proxyId);
|
throw errorUtils.spawnSwitchErr('proxyId', proxyId);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user