Style updates to ERC721 onReceiver
This commit is contained in:
@@ -30,7 +30,7 @@
|
||||
"test:circleci": "yarn test"
|
||||
},
|
||||
"config": {
|
||||
"abis": "../migrations/artifacts/2.0.0/@(AssetProxyOwner|DummyERC20Token|DummyERC721Token|DummyERC721Receiver|ERC20Proxy|ERC721Proxy|Exchange|MixinAuthorizable|MultiSigWallet|MultiSigWalletWithTimeLock|TestAssetDataDecoders|TestAssetProxyDispatcher|TestLibBytes|TestLibMem|TestLibs|TestSignatureValidator|TokenRegistry|Whitelist|WETH9|ZRXToken).json"
|
||||
"abis": "../migrations/artifacts/2.0.0/@(AssetProxyOwner|DummyERC20Token|DummyERC721Receiver|DummyERC721Token|ERC20Proxy|ERC721Proxy|Exchange|MixinAuthorizable|MultiSigWallet|MultiSigWalletWithTimeLock|TestAssetDataDecoders|TestAssetProxyDispatcher|TestLibBytes|TestLibMem|TestLibs|TestSignatureValidator|TokenRegistry|Whitelist|WETH9|ZRXToken).json"
|
||||
},
|
||||
"repository": {
|
||||
"type": "git",
|
||||
|
@@ -20,7 +20,6 @@ pragma solidity ^0.4.24;
|
||||
pragma experimental ABIEncoderV2;
|
||||
|
||||
import "../../utils/LibBytes/LibBytes.sol";
|
||||
import "../../tokens/ERC20Token/IERC20Token.sol";
|
||||
import "./MixinAssetProxy.sol";
|
||||
import "./MixinAuthorizable.sol";
|
||||
import "../../tokens/ERC20Token/IERC20Token.sol";
|
||||
|
@@ -33,8 +33,6 @@ contract ERC721Proxy is
|
||||
// Id of this proxy.
|
||||
uint8 constant PROXY_ID = 2;
|
||||
|
||||
string constant PROXY_ID_MISMATCH = "Proxy id in metadata does not match this proxy id.";
|
||||
|
||||
/// @dev Internal version of `transferFrom`.
|
||||
/// @param assetData Encoded byte array.
|
||||
/// @param from Address to transfer asset from.
|
||||
@@ -60,7 +58,7 @@ contract ERC721Proxy is
|
||||
// Data must be intended for this proxy.
|
||||
require(
|
||||
proxyId == PROXY_ID,
|
||||
PROXY_ID_MISMATCH
|
||||
ASSET_PROXY_ID_MISMATCH
|
||||
);
|
||||
|
||||
// There exists only 1 of each token.
|
||||
|
@@ -332,7 +332,8 @@ contract LibBytes is
|
||||
internal
|
||||
pure
|
||||
{
|
||||
// Read length of nested bytes
|
||||
// Assert length of <b> is valid, given
|
||||
// length of input
|
||||
require(
|
||||
b.length >= index + 32 /* 32 bytes to store length */ + input.length,
|
||||
GTE_32_LENGTH_REQUIRED
|
||||
@@ -340,9 +341,9 @@ contract LibBytes is
|
||||
|
||||
// Copy <input> into <b>
|
||||
memcpy(
|
||||
getMemAddress(b) + index + 32, // +32 to skip length of <b>
|
||||
getMemAddress(input), // include length of byte array
|
||||
input.length + 32 // +32 bytes to store length
|
||||
getMemAddress(b) + 32 + index, // +32 to skip length of <b>
|
||||
getMemAddress(input), // includes length of <input>
|
||||
input.length + 32 // +32 bytes to store <input> length
|
||||
);
|
||||
}
|
||||
}
|
||||
|
@@ -24,6 +24,12 @@ describe('TestAssetDataDecoders', () => {
|
||||
let testAssetProxyDecoder: TestAssetDataDecodersContract;
|
||||
let testAddress: string;
|
||||
|
||||
before(async () => {
|
||||
await blockchainLifecycle.startAsync();
|
||||
});
|
||||
after(async () => {
|
||||
await blockchainLifecycle.revertAsync();
|
||||
});
|
||||
before(async () => {
|
||||
// Setup accounts & addresses
|
||||
const accounts = await web3Wrapper.getAvailableAddressesAsync();
|
||||
@@ -78,8 +84,12 @@ describe('TestAssetDataDecoders', () => {
|
||||
|
||||
it('should correctly decode ERC721 asset data with receiver data', async () => {
|
||||
const tokenId = generatePseudoRandomSalt();
|
||||
const receiverData =
|
||||
ethUtil.bufferToHex(assetProxyUtils.encodeUint256(generatePseudoRandomSalt())) + 'FFFF';
|
||||
const receiverDataFirst32Bytes = ethUtil.bufferToHex(
|
||||
assetProxyUtils.encodeUint256(generatePseudoRandomSalt()),
|
||||
);
|
||||
const receiverDataExtraBytes = 'FFFF';
|
||||
// We add extra bytes to generate a value that doesn't fit perfectly into one word
|
||||
const receiverData = receiverDataFirst32Bytes + receiverDataExtraBytes;
|
||||
const encodedAssetData = assetProxyUtils.encodeERC721AssetData(testAddress, tokenId, receiverData);
|
||||
const expectedDecodedAssetData = assetProxyUtils.decodeERC721AssetData(encodedAssetData);
|
||||
let decodedAssetProxyId: number;
|
||||
|
@@ -287,7 +287,7 @@ describe('Asset Transfer Proxies', () => {
|
||||
amount,
|
||||
{ from: exchangeAddress },
|
||||
);
|
||||
|
||||
await web3Wrapper.awaitTransactionSuccessAsync(txHash, constants.AWAIT_TRANSACTION_MINED_MS);
|
||||
// Parse transaction logs
|
||||
const logDecoder = new LogDecoder(web3Wrapper, erc721Receiver.address);
|
||||
const tx = await logDecoder.getTxWithDecodedLogsAsync(txHash);
|
||||
@@ -319,6 +319,7 @@ describe('Asset Transfer Proxies', () => {
|
||||
amount,
|
||||
{ from: exchangeAddress },
|
||||
);
|
||||
await web3Wrapper.awaitTransactionSuccessAsync(txHash, constants.AWAIT_TRANSACTION_MINED_MS);
|
||||
// Parse transaction logs
|
||||
const logDecoder = new LogDecoder(web3Wrapper, erc721Receiver.address);
|
||||
const tx = await logDecoder.getTxWithDecodedLogsAsync(txHash);
|
||||
|
Reference in New Issue
Block a user